Utente:LikeLifer/Javascript
Note per l'uso di Javascript nel common.js, nei gadget, ecc.
Aggiungere un link alla colonna di sinistra
modificaCodice:
mw.util.addPortletLink('p-tb', "href_del_link", "Nome del link", '');
dove:
- p-navigation, p-Comunit, p-tb, ecc... è l'id di una delle <div> della colonna: "Navigazione", "Comunità", "Strumenti", ecc...
- href_del_link può essere un URL, può essere nel formato javascript: seguito da istruzioni Javascript, ecc...
- l'ultimo parametro deve essere ''.
- Per accedere da Javascript alla form che contiene la textarea di editing, i pulsanti salva/visualizza anteprima/ecc.: vedi [1]
- Per modificare il testo di una pagina in automatico
- Un modo è inviare una richiesta HTTP impostando action=submit e il parametro wpTextbox1: vedi qui, funzione msSave()
- Un altro modo è usando le API di MediaWiki: vedi mw:API:Edit
- Per avere l'elenco delle visite ad una pagina
Le informazioni sono accessibili in formato JSON alla pagina [2]. Questa pag. è accessibile anche manualmente, cliccando sulla sulla scritta "This page in json format" che è in basso all'indirizzo [3].
- Per eseguire uno script esterno, al click del mouse su un link
Importare lo script e aggiungere il link, impostando come href il codice Javascript che lancia lo script:[1]
importScript('Utente:LoStrangolatore/CodiceDelloScript'); mw.util.addPortletLink('p-tb', "javascript:eseguiUnaCertaFunzione();", "Nome link", '');
- Per eseguire uno script esterno immediatamente
Non so perché, ma importare lo script con le modalità definite qui, per invocare subito dopo una funzione o metodo di qualche oggetto, non funziona.[2] Tuttavia, con tali modalità viene comunque eseguito normalmente il codice dello script esterno che si trova fuori da funzioni o oggetti.
Per importare il codice di uno script presente su una certa pagina, seguire uno dei seguenti esempi:
$.getScript("/w/index.php?title=Utente:LoStrangolatore/sandboxes/2&action=raw&ctype=text/javascript");
- (vedi anche qui)
importScript('Wikipedia:Monobook.js/Catwatch.js');
- (vedi anche qui)
- Errori che commetto più di frequente
- Dichiarare le variabili indicandone il tipo. Ad es., scrivo int i = 0; in un ciclo for, invece di i = 0;
- Il literal
{}
si usa per gli oggetti; per gli array, si usa[]
. - uso per un parametro di funzione nomi diversi nella definizione del parametro e nel corpo della funzione
- importo uno script da altro sito Wikimedia, e non controllo se va modificato per supportare il nuovo server. Esempio: realizzo uno script su Wikibooks, che funziona su it.wikibooks.org, e lo importo su Wikipedia senza modificare gli indirizzi in it.wikipedia.org. (In ogni caso, invece di scrivere gli indirizzi nel codice, sarebbe meglio usare la variabile wgServer...)
- ...
API di MediaWiki
modificaPer usare da bot le API delle wiki Wikimedia, si dovrebbe cambiare la stringa dello user agent, mentre, se sono usate da scriptini all'interno di pagine Web, si può usare lo user agent del browser (Browser-based applications written in Flash or JavaScript are typically forced to send the same User-Agent header as the browser that hosts them. This is not a violation of policy.).[3]
Per la documentazione delle API disponibili: vedi http://en.wikipedia.org/w/api.php e mw:Template:API intro.
Per i risultati delle query, può essere comodo indicare il formato JSON e invocare l'API tramite AJAX, in quanto la combinazione di queste due cose permette di scrivere il codice client riferendosi direttamente alle proprietà dell'oggetto Javascript restituito dalla query (cioè senza dover parserizzare stringhe in formati diversi). Esempio.
Estensioni di MediaWiki
modificaPer invocare una funzione PHP, parte di un'estensione, da una pagina di MediaWiki: registra la funzione nella variabile mw:Manual:$wgAjaxExportList, quindi effettua una richiesta AJAX (vedi, in pratica si richiama index.php con il parametro action=ajax) impostata secondo quanto indicato qui nella riga che riguarda il parametro ajax.
Toolserver
modifica- Getting started
Vedi
- meta:Toolserver
- Getting started sul Toolserver
- Main Page sul Toolserver
- Account approval process sul Toolserver
Rules sul Toolserver
- Tool considerations sul Toolserver
- Lista dei linguaggi di programmazione supportati sul Toolserver
Altro:
Note
modifica- ^
Non usare la forma
mw.util.addPortletLink('p-tb', "javascript:importScript('Utente:LoStrangolatore/CodiceDelloScript');", "Nome link", '');
perché questo porta a problemi; ad es., se le invocazioni di window.open(), nello script B importato dallo script A, aprono delle finestre e non delle tab nel browser, e si vuole invece che aprano delle tab, allora la catena delle invocazioni a funzione che termina con window.open() deve partire dallo stesso script A e non dallo script B.
- ^ Ovvero, non riesco a far funzionare il seguente codice:
importScript('Wikipedia:Monobook.js/Catwatch.js'); // o altra istruzione che importi lo script funzione(); // oppure oggetto.metodo(); dove funzione, oggetto e metodo sono definiti nello script esterno
- ^ meta:User-Agent_policy