MediaWiki:DiacriticsPoll.js

De la Wikipedia, enciclopedia liberă

Notă: După salvare, trebuie să treceți peste cache-ul browser-ului pentru a vedea modificările.

  • Mozilla, Google Chrome, Safari, Konqueror: țineți apăsat Shift în timp ce apăsați butonul Reload (sau apăsați Ctrl-Shift-R).
  • Internet Explorer: apăsați Ctrl-F5.
  • Opera: apăsați F5.
/** 
 * This script contains the code needed for a diacritics poll.
 * It has 2 components:
 *   - one that is designed to determine objectively if displaying the correct
 *     diacritics has any effects on the user experience
 *   - the second is a poll to be displayed to logged-in users and is designed
 *     to gather information about how many users still use the old diacritics
 *     on their keyboards
 * 
 * © Copyright 2016 Utilizator:Strainu
 * This code is licensed under the MIT license
 */
var logEvent = function(schema, revision, event, cookieName) {
    var payload = {
        schema: schema,
        revision: revision,
        wiki: 'metawiki',
        event: event
    };

    var url = 'https://meta.wikimedia.org/beacon/event' + '?' + encodeURIComponent(JSON.stringify(payload));

    document.createElement( 'img' ).src = url;
    enddate = new Date("June 8, 2016 00:00:00");
	mw.cookie.set( cookieName,  event, {expires: 604800} );
};

// Copyright (c) 2010 Cristian Adam <cristian.adam@gmail.com>
// Adapted for Wikipedia by [[User:Strainu]]
// License: MIT
function diacriticsPollConfigureTextElement(element, text) {
    element.innerHTML = text;
    element.style.width = "auto";
    element.style.visibility = "hidden";
    element.style.position = "absolute";
    element.style.fontSize = "96px";
}

function diacriticsVisibility() {
    var userAgent = navigator.userAgent.toLowerCase();

    if (userAgent.indexOf("bot") != -1 ||
        userAgent.indexOf("crawl") != -1 ||
        userAgent.indexOf("slurp") != -1 ||
        userAgent.indexOf("archive") != -1) {
        return false;
    }

    var normalTextS = document.createElement("div");
    diacriticsPollConfigureTextElement(normalTextS, "sSsS");

    var normalTextT = document.createElement("div");
    diacriticsPollConfigureTextElement(normalTextT, "tTtT");

    var diacriticsTextS = document.createElement("div");
    diacriticsPollConfigureTextElement(diacriticsTextS, "șȘșȘ");

    var diacriticsTextT = document.createElement("div");
    diacriticsPollConfigureTextElement(diacriticsTextT, "țȚțȚ");

    document.body.insertBefore(normalTextS, document.body.firstChild);
    document.body.insertBefore(diacriticsTextS, document.body.firstChild);
    document.body.insertBefore(normalTextT, document.body.firstChild);
    document.body.insertBefore(diacriticsTextT, document.body.firstChild);

    // Sometimes at various zoom settings there is a +1 difference
    var doChangeS = (Math.abs(normalTextS.offsetWidth - diacriticsTextS.offsetWidth) > 1);
    var doChangeT = (Math.abs(normalTextT.offsetWidth - diacriticsTextT.offsetWidth) > 1);

    // Pocket Internet Explorer on Windows Mobile 6.5 returns 0
    if (normalTextS.offsetWidth === 0 &&
        diacriticsTextS.offsetWidth === 0) {
        doChangeS = true;
    }
    if (normalTextT.offsetWidth === 0 &&
        diacriticsTextT.offsetWidth === 0) {
        doChangeT = true;
    }

    document.body.removeChild(normalTextS);
    document.body.removeChild(normalTextT);
    document.body.removeChild(diacriticsTextS);
    document.body.removeChild(diacriticsTextT);

    var issues = 0;
    if (doChangeS) {
        issues += 1;
    }
    if (doChangeT) {
        issues += 2;
    }
    if (mw.cookie.get('diacriticsLog') === null)
    {    
    	if (mw.geoIP === undefined)
    	    logEvent( 'DiacriticsVisibility', 15606222, {"issues": issues, "country": "Unknown"}, 'diacriticsLog' );
    	else {
	        var promise = mw.geoIP.getPromise();
	        promise.then(function(result) {
	            logEvent( 'DiacriticsVisibility', 15606222, {"issues": issues, "country": window.Geo.country}, 'diacriticsLog' );
	        }, function(err) {
	            logEvent( 'DiacriticsVisibility', 15606222, {"issues": issues, "country": "Unknown"}, 'diacriticsLog' );
	        });
    	}
    }
}

function diacriticsPollSubmit() {
    var word = document.getElementById('word');
    var response = word.value;
    var poll_table = document.getElementById('dia_sondaj');
    poll_table.style.display = "none";
    logEvent( 'DiacriticsPoll', 15630673, {"text": response, "country": window.Geo.country}, 'diacriticsPoll' );
}

function diacriticsPoll() {
    if (mw.cookie.get('diacriticsPoll') === null)
    {
		var pollHTML = '<div id="dia_sondaj" style="margin-left: auto; margin-right: auto; padding: 1em; font-size: 9pt; text-align: left; line-height: 1.3; color: white; overflow: auto; border-radius: 1em; background-color: rgb(255, 127, 80);"><div style="font-size:120%"><b><i>Sondaj diacritice</i></b></div>Dorim să aflăm numărul de utilizatori care încă nu pot scrie cu <a style="color: white; font-weight: bold; text-decoration: underline;" href="https://ro.wikipedia.org/wiki/Wikipedia:Diacritice#Caracterele_.C8.98_.C8.99i_.C8.9A">diacriticele corecte</a>. Vă rugăm participați la acest sondaj, este important pentru Wikipedia în limba română! Nu vom publica date personale. [<a style="color: white; font-weight: bold; text-decoration: underline;" href="https://meta.wikimedia.org/wiki/Privacy_policy/ro">Detalii</a>]<div id="dia_content"><p style="font-size:120%">Vă rugăm introduceți <u>de la tastatură</u> cuvântul <span style="font-size:120%"><b>arșiță</b></span> în căsuța de mai jos și apăsați butonul <i>Trimite</i>.</p><div><form lpformnum="12"><input name="word" id="word" style="width:200px" type="text"><input name="submit" value="Trimite" onclick="javascript:diacriticsPollSubmit()" type="button"></form></div></div></div>';
		var sitenotice = document.getElementById('siteNotice');
		sitenotice.innerHTML = pollHTML;
    }
}

jQuery(document).ready(function ($) {
    diacriticsVisibility();
    diacriticsPoll();
});