Wikireporter:Krzysiu Jarzyna/LABS/usuń.js

Uwaga: aby zobaczyć zmiany po opublikowaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.

  • Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5, lub Ctrl+R (⌘-R na komputerze Mac)
  • Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
  • Internet Explorer / Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5
  • Opera: Naciśnij klawisze Ctrl+F5.
// ---------------------------------------------------------
// Skrypt [[w:Wikipedysta:Beau|Wikipedysty Beau]], dostosowany do Wikinews.
// ---------------------------------------------------------
// ---------------------------------------------------------
// Ustawienia domyślne - przycisków
// ---------------------------------------------------------

if (!del_buttons)
{
	var del_buttons = new Array(
		"general",	// identyfikator grupy (nie zmieniać i nie dodawać)
		"",		// etykieta
		new Array (	// przyciski
		    " _Nie news_ ",	// etykieta
		    "wpis nie został uznany za artykuł",	//wstawiany tekst
		    " _Za krótkie_ ",
		    "wpis został usunięty z powodu zbyt małej ilości treści",
		    " _stare_ ",
		    "Wiadomość jest już dość stara",
		    " _na prośbę_ ",
		    "Usunięto na prośbę autora",
		    " _eksperyment_ ",
		    "wpis został uznany za eksperyment edycyjny",
		    " _bełkot_ ",
		    "wpis usunięty z powodu niezrozumiałej treści",
		    " _wulgaryzmy_ ",
		    "wpis usunięty z powodu umieszczonych w nim wulgaryzmów",
		    " _wygłup_ ",
		    "wpis usunięty z powodu umieszczonych wygłupów",
		    " _reklama_ ",
		    "wpis uznany za reklamę",
		    " _npa_ ",
		    "wpis usunięty z powodu [[Wikinews:Prawa autorskie|naruszenia praw autorskich]]",
		    " _forma_ ",
		    "wpis usunięto z powodu [[Wikinews:Jak napisać poprawny artykuł?|nieodpowiedniej formy]]",
		    " _zbędne_ ",
		    "artykuł zbędny",		    
		    " _dubel_ ",
		    "artykuł o podobnym temacie już istnieje"
		),
		"talk",
		"dyskusja",
		new Array (
		    " _forum_ ",
		    "strona dyskusji to nie forum",
		    " _problem_ ",
		    "nie zajmujemy się rozwiązywaniem problemów",
		    " _stare_ ",
		    "stare",
		    " _sierotka_ ",
		    "sierotka",
		    " _wyjaśniono_ ",
		    "sprawa wyjaśniona"
		),
		"img",
		"grafika",
		new Array (
		    " _nazwa_ ",
		    "grafika usunięta ze względu na nieodpowiednią nazwę",
		    " _na Commons_ ",
		    "grafika znajduje się w repozytorium mediów Wikimedia Commons",
		    " _npa_ ",
		    "[[Wikinews:Dozwolony_użytek#Co_nie_podlega_dozwolonemu_użytkowi|grafika nie podlega fair use]]",
		    " _licencja_ ",
		    "grafika z problemami licencyjnymi",
		    " _zbędne_ ",
		    "zbędna/nieużywana grafika",
		    " _dubel_ ",
		    "dubel"
		),
		"redir",
		"przekierowanie",
		new Array (
	            " _do 5 min._ ",
		    "świeże przekierowanie (do 5 min. po publikacji)",
	            " _redir tworzonego_ ",
		    "przekierowanie do artykułu jeszcze tworzonego",
		    " _zbędne_ ",
		    "zbędne przekierowanie",
		    " _zerwane_ ",
		    "zerwane przekierowanie",
		    " _błędne_ ",
		    "błędne przekierowanie"
		),
		"tech",
		"porządki",
		new Array (
		    " _SdU_ ",
		    "usunięto decyzją [[Wikinews:Strony do usunięcia|SdU]] ",
		    " _zbędna lub pusta kategoria_ ",
		    "zbędna lub pusta kategoria",    
		    " _dubel_ ",
		    "dubel"
		)
	);
}

// ---------------------------------------------------------
// Ustawienia domyślne - linkujące oraz historia
// ---------------------------------------------------------

// maksymalna ilość pobieranych linkujących, 0 - nie pobiera
try { del_max_links = del_max_links } catch (e) { del_max_links = 10 }

// maksymalna ilość pobieranych wpisów z historii, 0 - nie pobiera
try { del_max_versions = del_max_versions } catch (e) { del_max_versions = 5 }

// czy włączony jest tryb hardcode?
try { del_hardcore = del_hardcore } catch (e) { del_hardcore = 0 }

// czy włączone jest podświetlanie linku do strony dyskusji
try { del_talk_highlight = del_talk_highlight } catch (e) { del_talk_highlight = 1 }

// tak, wiem... ale nie wymyśliłem nic lepszego...

// ---------------------------------------------------------
// Fragment kodu z LiveRC
// ---------------------------------------------------------

var wpajax = {
  http: function(bundle) {
    // mandatory: bundle.url
    // optional:  bundle.async
    // optional:  bundle.method
    // optional:  bundle.headers
    // optional:  bundle.data
    // optional:  bundle.onSuccess (xmlhttprequest, bundle)
    // optional:  bundle.onFailure (xmlhttprequest, bundle)
    // optional:  bundle.otherStuff OK too, passed to onSuccess and onFailure
    var xmlhttp;
    try {
      xmlhttp = new XMLHttpRequest(); 
    } catch(e) { 
      try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) { 
        try {
          xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
          xmlhttp = false
        }
      }
    }

    if (xmlhttp) {
      xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4)
          wpajax.httpComplete(xmlhttp,bundle);
      };
      xmlhttp.open(bundle.method ? bundle.method : "GET",bundle.url,bundle.async == false ? false : true);
      if (bundle.headers) {
        for (var field in bundle.headers)
          xmlhttp.setRequestHeader(field,bundle.headers[field]);
      }
      xmlhttp.send(bundle.data ? bundle.data : null); 
    }
    return xmlhttp;
  },

  httpComplete: function(xmlhttp,bundle) {
    if (xmlhttp.status == 200 || xmlhttp.status == 302) {
      if (bundle.onSuccess)
        bundle.onSuccess(xmlhttp,bundle);
    } else if (bundle.onFailure) {
      bundle.onFailure(xmlhttp,bundle);
    } else {
      // A activer en debug mode ?
      // alert(xmlhttp.statusText);
    }
  }
};

// Parser
if (document.implementation.createDocument) {
  var gml_xmlparser = new DOMParser();
}

function gml_XMLParse(string) {
  if (document.implementation.createDocument) {
    return gml_xmlparser.parseFromString(string, "text/xml");
  } else if (window.ActiveXObject) {
    var gml_xmldoc = new ActiveXObject("Microsoft.XMLDOM");
    gml_xmldoc.async = "false";
    ret = gml_xmldoc.loadXML(string);      
    if (!ret)
      return null;
    return gml_xmldoc.documentElement;
  }
  return null;
}

// ---------------------------------------------------------


function del_getHist(xmlreq, data) 
{
	doc = gml_XMLParse(xmlreq.responseText);
	bodyContent  = doc.getElementById('bodyContent')

	var history_div = document.getElementById( 'history_div' );
	history_div.innerHTML = '';

	for (var i=0; i< bodyContent.childNodes.length; i++)
	{
		var tagName = bodyContent.childNodes[i].tagName;
		if (tagName && tagName.toLowerCase() == 'form')
		{
			history_div.appendChild(bodyContent.childNodes[i]);
			return;
		}
	}
	history_div.appendChild(bodyContent);
}

function del_getLinks(xmlreq, data) 
{
	doc = gml_XMLParse(xmlreq.responseText);
	bodyContent  = doc.getElementById('bodyContent')
	
	var links_div = document.getElementById( 'links_div' );
	
	for (var i=0; i< bodyContent.childNodes.length; i++)
	{
		var tagName = bodyContent.childNodes[i].tagName;
		if (tagName && tagName.toLowerCase() == 'ul')
		{
			links_div.innerHTML = '';
			links_div.appendChild(bodyContent.childNodes[i]);
			return;
		}
	}
	links_div.innerHTML = '<span style="color: green; font-size: larger; font-weight:bold">Brak linkujących</span>';
}

function escape_reason(text)
{
	return text.replace(/"/g,'\\"'); // "
}

function del_createButtons(parentNode, buttonArray)
{
	for (var j = 0; j < buttonArray.length; j+=2)
	{
		var newButton = document.createElement('a');

		// atrybuty
		newButton.appendChild(document.createTextNode(buttonArray[j]));
		newButton.onclick = new Function('insert_delete_reason("' + escape_reason(buttonArray[j+1]) + '")');

		// dodanie przycisku
		parentNode.appendChild(newButton);
	}
}

function del_createGroup(id, caption, buttonArray)
{
	tr = document.createElement('tr');
	tr.id = "del_" + id;

	td_caption = document.createElement('td');
	td_caption.align = 'right';
	td_caption.appendChild( document.createTextNode(caption) );
	tr.appendChild(td_caption);
	
	td_buttons = document.createElement('td');
	td_buttons.align = 'left';
	td_buttons.id = 'userSummaryButtonsA';
	del_createButtons(td_buttons, buttonArray);
	tr.appendChild(td_buttons);
	
	return tr;
}

function del_showAll()
{
	for (var i = 0; i < del_buttons.length; i+=3)
	{
		var group = del_buttons[i];
		document.getElementById("del_" + group).style.display = '';
	}
	document.getElementById("del_general").cells[0].style.visibility = 'hidden';
}

function del_imageForm()
{
	// zmienił się sposób usuwania plików
	// należy dodać brakujące elementy formularza
	var table = document.createElement('table');
	table.border = 0;
	var wpReason = document.getElementById('wpReason');
	var p = wpReason.parentNode;
	p.innerHTML = '';

	var tr = document.createElement('tr');
	var td_caption = document.createElement('td');
	td_caption.align = 'right';
	td_caption.appendChild( document.createTextNode('Powód usunięcia:') );
	tr.appendChild(td_caption);
	var td_reason = document.createElement('td');
	td_reason.appendChild(wpReason);
	tr.appendChild(td_reason);
	table.appendChild(tr);

	tr = document.createElement('tr');
	td_caption = document.createElement('td');
	td_reason = document.createElement('td');

	var button = p.parentNode.getElementsByTagName('input')[0];
	button.parentNode.innerHTML = '';
	td_reason.appendChild(button);
	tr.appendChild(td_caption);
	tr.appendChild(td_reason);
	
	table.appendChild(tr);
	p.appendChild(table);
	return tr;
}

$(function()
{
	// jeżeli to nie jest strona 'Usuń' zakończ działanie
	if (wgAction != "delete") 
		return;
	
	var current_group = '';
	var defaultReason = '';
	var catalk = document.getElementById('ca-talk');
	if ( del_talk_highlight && catalk.className == '') {
		catalk.style.textDecoration =  'blink';
		catalk.firstChild.style.backgroundColor = 'orange';
	}
	if ( document.getElementById('wpReason') )
		defaultReason = document.getElementById('wpReason').value;
		
	var tr_watch;
	
	if (wgNamespaceNumber == 6 && !document.getElementById('wpConfirmB'))
	{
		current_group = 'img';
		tr_watch = del_imageForm();
	}
	else
	{
		var wpWatch = document.getElementById('wpWatch');
		tr_watch = wpWatch.parentNode.parentNode;
	}
	var table= tr_watch.parentNode;
	
	if (defaultReason.match(/#REDIRECT/i))
	{
		current_group = 'redir';
	}
	else if (wgPageName.substring(0, 8) == 'Dyskusja')
	{
		current_group = 'talk';
	}
	else if (wgNamespaceNumber == 14)
	{
		current_group = 'tech';
	}
	else if (wgNamespaceNumber == 6)
	{
		current_group = 'img';
	}
	else if (defaultReason.match(/\{\{(?:Pocz)?SDU/i))
	{
		current_group = 'tech';
	}
/*	niepotrzebne
 	else if (defaultReason.match(/\{\{(?:auto)?NPA/i))
	{
	    current_group = 'tech';
	}
*/
	for (var i = 0; i < del_buttons.length; i+=3)
	{
		var group = del_buttons[i];
		var caption = del_buttons[i+1];
		var buttons = del_buttons[i+2];
 	
		var new_tr = del_createGroup(group, caption, buttons);

		if (group == 'general')
		{
			var newButton = document.createElement('a');
		
			// atrybuty
			newButton.appendChild(document.createTextNode("pokaż wszystkie"));
			newButton.onclick = del_showAll;
		
			// dodanie przycisku
			new_tr.firstChild.appendChild(newButton);
		}
		else if (group == current_group)
		{
			new_tr.firstChild.style.fontWeight = 'bold';
		}
		else
		{
			new_tr.style.display = 'none';
		}
		table.insertBefore(new_tr, tr_watch);
	}

	var ek_found = defaultReason.match(/\{\{ek\|(?:1=)?(.+?)(?:\}\}|$)/);

	if (ek_found)
	{
		var newButton = document.createElement('a');
	
		// atrybuty
		newButton.appendChild(document.createTextNode(" _z eka_ "));
		newButton.onclick = new Function('insert_delete_reason("z eka: ' + escape_reason(ek_found[1]) + '")');

		// dodanie przycisku
		document.getElementById('del_general').lastChild.appendChild(newButton);
	}

	var tw_found = defaultReason.match(/\{\{tworzone\|(?:1=)?(.+?)(?:\}\}|$)/);

	if (tw_found)
	{
		var newButton = document.createElement('a');
	
		// atrybuty
		newButton.appendChild(document.createTextNode(" _z tworzonego_ "));
		newButton.onclick = new Function('insert_delete_reason("z tworzonego: ' + escape_reason(tw_found[1]) + '")');

		// dodanie przycisku
		document.getElementById('del_general').lastChild.appendChild(newButton);
	}
	var bodyContent = document.getElementById('bodyContent');
	var deletionlog = document.getElementById('mw-article-delete-deletionlog');
	
	if (del_max_versions > 0)
	{
		var history_h2 = document.createElement('h2');
		history_h2.innerHTML = 'Historia i autorzy <span style="font-size: x-small;">(ostatnie ' + del_max_versions + ')</span>';
		bodyContent.insertBefore(history_h2, deletionlog);

		var history_div = document.createElement('div');
		history_div.id = 'history_div';
		history_div.innerHTML="<b>Wczytywanie historii zmian...</b>";
		bodyContent.insertBefore(history_div, deletionlog);

		wpajax.http({url:mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?limit=' + del_max_versions + '&title=' + encodeURIComponent(mw.config.get('wgPageName')) + '&action=history', onSuccess: del_getHist, message: wgPageName });
	}

	// na razie skrypt nie pobiera stron odwołoujących się do obrazka
	if (wgNamespaceNumber == 6)
		return;
			
	if (del_max_links > 0)
	{
		var links_h2 = document.createElement('h2');
		links_h2.innerHTML = 'Linkujące <span style="font-size: x-small;">(pierwsze ' + del_max_links + ')</span>';
		bodyContent.insertBefore(links_h2, deletionlog);

		var links_div = document.createElement('div');
		links_div.id = 'links_div';
		links_div.innerHTML="<b>Wczytywanie linkujących...</b>";
		bodyContent.insertBefore(links_div, deletionlog);

		wpajax.http({url:mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?limit=' + del_max_links + '&title=Specjalna:Linkuj%C4%85ce/' + encodeURIComponent(mw.config.get('wgPageName')), onSuccess: del_getLinks, message: wgPageName });
	}
});

function insert_delete_reason(reason)
{
	var element = document.getElementById('wpReason');

	element.value = reason;

	if (del_hardcore)
	{
		element.form.submit();
	}
}