Käyttäjä:Hunsvotti/kaannosluonti2.js

Hei, olet tullut tänne etsimään sanan Käyttäjä:Hunsvotti/kaannosluonti2.js merkitystä. DICTIOUS-sanakirjasta löydät paitsi kaikki sanan Käyttäjä:Hunsvotti/kaannosluonti2.js sanakirjamerkitykset, myös sen etymologian, ominaisuudet ja sen, miten Käyttäjä:Hunsvotti/kaannosluonti2.js sanotaan yksikössä ja monikossa. Kaikki mitä sinun tarvitsee tietää sanasta Käyttäjä:Hunsvotti/kaannosluonti2.js on tässä. Sanan Käyttäjä:Hunsvotti/kaannosluonti2.js määritelmä auttaa sinua olemaan täsmällisempi ja oikeampi puhuessasi tai kirjoittaessasi tekstejäsi. Kun tunnet sananKäyttäjä:Hunsvotti/kaannosluonti2.js määritelmän sekä muiden sanojen määritelmät, rikastutat sanavarastoasi ja saat lisää ja parempia kielellisiä resursseja.
/**
 * Pienoisohjelma, joka lisää luontilinkin kielilinkkeihin ], kun
 * niihin on liitetty artikkelipohja.
 **/
(function () {
    
    
    /**
     * Väliaikainen funktio, joka muuttaa vanhoilla tavoilla tehdyt luo-linkit näyttämään samalta kuin uudet.
     */
    function muuta_vanhat () {
        $('a.external').each(function () {
            var $kohde = $(this);
            var href = $kohde.attr('href');
            var $puna;
            var $kohdep;
            
            if ( $kohde.text() == "" && href.indexOf('preload') > -1 ) {             // Mallineella luo-nappi merkityt
                $kohdep = $kohde.parent();
                // nappia edeltävä välin sisältävä tekstisolmu
		
                $kohdep.get(0).previousSibling.nodeValue = $kohdep.get(0).previousSibling.nodeValue.replace(/\s+$/, "");

		
                $puna = $kohde.parent().prev('.linkki').children('a.new');
                if ( $puna.length === 0 ) {
                    $puna = $kohde.parent().prevAll(':has(.linkki):first').children('.linkki').children('a.new');
                }
                if ( $puna.length === 0 ) {
                    $puna = $kohde.parent().prev('a.new');
                }
                if ( $puna.length > 0 ) {
                    $puna.attr('href', href);
                    $puna.addClass('avustettu-luonti-linkki');
                    $puna.attr('title', $puna.attr('title').replace(/\(sivua ei ole\)/, '(avustettu luonti)'));
                    $kohdep.detach();    
                }
                
            } else if ( $kohde.text() == "luo" && href.indexOf('preload') > -1 ) {      // Suoraan linkillä merkityt
                $puna = $kohde.prevAll('.linkki:first').children('a.new');
                if ( $puna.length > 0 ) {
                    $puna.attr('href', href);
                    $puna.addClass('avustettu-luonti-linkki');
                    $puna.attr('title', $puna.attr('title').replace(/\(sivua ei ole\)/, '(avustettu luonti)'));
                    $kohde.detach();    
                }
            }

        });
    }

    /**
     * Muotoilee URLin annetuista osista.
     *
     * @param url: vanha url (täytyy olla "index.php"-muodossa)
     * @param preload: artikkelipohjan nimi
     * @param params:  artikkelipohjan parametrit taulukkona
     * @param summary: yhteenvetokenttään asetettava oletusteksti
     **/
    function teeURL(url, preload, params, summary) {
        return url + '&preload=Malline:artikkelipohja/' + preload + params.map(function (elt) {
            return '&preloadparams=' + encodeURIComponent(elt);
        }).join('') + '&summary=' + encodeURIComponent(summary);
    }
    
    /**
     * Dekoodaa HTML-entitteetit attribuuttiarvosta.
     **/
    function decode(str) {
        return $("<textarea/>").html(str).html();
    }

    /**
     * Lukee luolinkkiin liitettävät yleiset tiedot linkin ympäristöstä, kun ollaan artikkelisivulla.
     **/
    function lueArtikkelinTiedot($this) {

	var tiedot = {};

	tiedot.artikkeli = mw.config.get('wgPageName');
	
        // Haetaan tiedot siitä sanaluokkaosiosta, jossa linkki sijaitsee.
	// Lähin sanaluokkaotsikko.
        var $h3 = $this.parentsUntil("*:has('h3')").last().prevUntil('h3').addBack().first().prev();
        // Lähin kieliotsikko
        var $h2 = $h3.prevAll("h2").first();
        // Sanarivin hakusana. Voi olla eri kuin sivun otsikko
        var $hakusana = $h3.nextUntil('h2, h3', ':has(.hakusana)')
                           .first()
                           .find(".hakusana");

	tiedot.hakusana = $hakusana.text();
        
        // Hakusana ja latinisointi on peräkkäin tai välissä on sukumerkintä,
	// tai merkitty erikseen hakusana-lat-merkinnällä (esim. japani)
        tiedot.hakusana_lat = $h3.nextUntil('h2, h3', ':has(.hakusana-lat)')
				 .first()
				 .find(".hakusana-lat").text();
        if ( ! tiedot.hakusana_lat || tiedot.hakusana_lat === "" ) {
	    tiedot.hakusana_lat = $hakusana.nextAll(".lat").slice(0, 1).text(); 
        }

	tiedot.kieliotsikko = $h2.children(".mw-headline").text()
	tiedot.sanaluokkaotsikko = $h3.children(".mw-headline").text();


        var $kaannoslaatikko = $this.parents(".käännöskohta");
        if ( $kaannoslaatikko.length > 0 ) {
            // Luetaan seliteteksti käännöslaatikosta. 
            tiedot.kaannoslaatikonSelite = $kaannoslaatikko.find(".NavHead > b").html()
                                             .replace(/^+\. /, "") // poistetaan numero
                                             // Muutetaan kursivointi ja lihavointi wikimuotoon.
                                             .replace(/<\/?i>/g, "''").replace(/<\/?b>/g, "'''");
        }
        
	return tiedot;
    }
    
    /**
     * Lukee luolinkkiin liitettävät tiedot, kun ollaan liitesivulla.
     **/
    function lueLiitteenTiedot($this) {
	var tiedot = {};

	tiedot.kieliotsikko      = $('.fiwikt-kieliotsikko').text();
	tiedot.sanaluokkaotsikko = $('.fiwikt-sanaluokkaotsikko').text();
	tiedot.artikkeli         = $('.fiwikt-artikkeli').text();
	tiedot.hakusana          = $('.fiwikt-hakusana').text();
	tiedot.hakusana_lat      = $('.fiwikt-hakusana-lat').text();

	return tiedot;
    }

    // Korvaa parametrinumerot artikkelipohjan nimestä.
    function korvaaParametrit(artikkelipohja, params) {
        return params.reduce(function (pohja, param, index) {
            return pohja.replace("$" + (index + 1), param);
        }, artikkelipohja)
    }

    /**
     * Lukee linkkiä koskevat tiedot linkistä ja sen välittömästä ympäristöstä (latinisointi).
     **/
    function lueLinkinTiedot($this) {
	var tiedot = {};

	var $aElem          = $this.children('a').first();
        tiedot.href         = $aElem.attr('href');
        tiedot.linkkiteksti = $aElem.text();
        tiedot.kielikoodi   = $this.attr('lang');  // kielikoodi, jossa voi olla mukana kirjoitusjärjestelmäkoodi
        tiedot.pohja        = $this.attr('data-kuvaus');

        // Muutetaan linkki index.php-muotoon, jos se on https://dictious.com/fi/-muodossa.
        var m = tiedot.href.match(/\/wiki\/(+)/);
        if ( m ) {      
            tiedot.href = mw.config.get("wgScript") + "?title=" + m + "&action=edit";
        }

        if ( $this.length > 0 
	  && $this.nextSibling 
	  && $this.nextSibling.nodeValue 
	  && $this.nextSibling.nodeValue.match(/^\s*\((+)\)/) ) {
            tiedot.latinisointi = $this.nextSibling.nodeValue.match(/^\s*\((+)\)/);
        }

	// Luetaan välitetyt parametrit elementin attribuutista. Tiedot on dictissä eikä taulukossa,
        // koska numerointi ei yleensä ala alusta, ja ensimmäinen mahdollinen numero on 1. Tiedot täytyy muuttaa taulukoksi.
        var data = $this.attr('data-kuvaus-param');

	if ( data ) {
            tiedot.params_d = JSON.parse(decode(data))
        } else {
	    tiedot.params_d = {};
	}
        
	return tiedot;
    }
    
    
    // Käydään läpi kielilinkit, joihin on liitetty artikkelipohja.
    $('.linkki').each(function () {
        var params   = ;
        var $aElem, $aElem2;
        var $this    = $(this);
        var url;
        var summary = "";//"Luotu automaattisesti sivun ] tietojen pohjalta";
	var ymparistoTieto;

	if ( mw.config.get('wgNamespaceNumber') === 0 ) { // Artikkelinimiavaruus
	    ymparistoTieto = lueArtikkelinTiedot($this);
	} else {
	    ymparistoTieto = lueLiitteenTiedot($this);
	}

	var linkkiTieto = lueLinkinTiedot($this);
        
        // Tarkistetaan onko artikkelipohja tehty tälle gadgetille.
        if ( ! (linkkiTieto.pohja.startsWith("tm/")
	     || linkkiTieto.pohja.startsWith("rm/")
	     || linkkiTieto.pohja.startsWith("tr/")
	     || linkkiTieto.pohja.startsWith("käännös/")) ) {
            return;
        }

	// Luodaan taulukko, johon artikkelipohjan parametrit tulevat ja alustetaan se mahdollisilla
	// 'kuvaus-param'-attribuutista luetuilla parametreilla.
        var sz = Object.keys(linkkiTieto.params_d).reduce(function (acc, elt) { return Math.max(acc, parseInt(elt)); }, 4);
        params = new Array(sz);

        Object.keys(linkkiTieto.params_d).forEach(function (key) {
            params = linkkiTieto.params_d;
        });


        // Täytetään vakioparametrit linkin arvoilla ellei niitä ole jo asetettu parametreina annetuilla arvoilla.
        // Täytetään vakioparametrit linkin arvoilla ellei niitä ole jo asetettu parametreina annetuilla arvoilla.
        // 1. Kieliotsikko.
        params = params !== undefined ? params : ymparistoTieto.kieliotsikko;
        // 2. Sanaluokkaotsikko.
        params = params !== undefined ? params : ymparistoTieto.sanaluokkaotsikko;
        // 3. Kielikoodi.
        params = params !== undefined ? params : linkkiTieto.kielikoodi;
        // 4. Linkittävä sivu tai sitä vastaava artikkelisivu, jos linkittävä sivu on liitesivu.
        params = params !== undefined ? params : ymparistoTieto.artikkeli;
        // 5. Kohdesivun linkin teksti.
        params = params !== undefined ? params : linkkiTieto.linkkiteksti;
        // 6. Linkittävän sivun sanarivimuoto,
        params = params !== undefined ? params : ymparistoTieto.hakusana;
        // 7. Kohdesivun latinisointi.
        params = params !== undefined ? params : linkkiTieto.latinisointi;
        // 8. Linkittävän sivun latinisointi.
        params = params !== undefined ? params : ymparistoTieto.hakusana_lat;
        // 9. vain käännöksillä
        params = params !== undefined ? params : ymparistoTieto.kaannoslaatikonSelite; 
        
        params = params.map(function (param) { return param === undefined ? "" : param; });

        linkkiTieto.pohja = korvaaParametrit(linkkiTieto.pohja, params)
        url  = teeURL(linkkiTieto.href, linkkiTieto.pohja, params, summary);

	$aElem = $this.children('a').first();
        if ( $aElem.hasClass('new') ) {
            // Jos sivua ei ole, muokataan alkuperäistä linkkiä.
            $aElem.attr('href', url);
            $aElem.addClass('avustettu-luonti-linkki');
            $aElem.attr('title', $aElem.attr('title').replace(/\(sivua ei ole\)/, '(avustettu luonti)'));
        } else if ( mw.loader.getState("ext.gadget.Artikkeliyhdistaja") === "ready" ) {
            // Jos sivu on jo olemassa ja artikkeliyhdistäjä on käytössä, lisätään linkin perään lisäyslinkki.
            $aElem2 = $('<a>+</a>');
            $aElem2.attr('href', url);
            $aElem2.addClass('avustettu-luonti-linkki');
            $aElem2.attr('title', $aElem.attr('title') + ' (lisää sivulle)');
            $aElem.after($aElem2);
        }
    });
    
    muuta_vanhat();
}());