2015-04-27 11 views
7

Come posso aggiungere un file javascript personalizzato (diciamo custom.js) a un'installazione mediawiki?Come aggiungere javascript globale personalizzato a mediawiki

Per esempio, se inserisco custom.js nella cartella resources/lib/, come faccio a caricarlo su ogni pagina?

Non sto cercando di farlo come parte di un'estensione e preferirei mantenere le mie modifiche in LocalSettings.php.

risposta

9

Come già suggerito da garryp, è possibile inserire il codice JavaScript in MediaWiki:Common.js. Nota che questo è non un file, ma semplicemente una pagina che puoi modificare (come amministratore) sulla tua wiki. Ad esempio, ecco lo MediaWiki:Common.js page on the English Wikipedia.

Il codice JavaScript da Common.js viene caricato solo se $wgUseSiteJs è abilitato. Tuttavia, questa è l'impostazione predefinita, quindi dovrebbe funzionare a meno che non l'abbia disattivata deliberatamente aggiungendo una riga come $wgUseSiteJs = false; nel file LocalSettings.php.


E 'anche possibile caricare il codice JavaScript da un file utilizzando ResourceLoader, ma questo è un po' più complicato. Eppure, proprio come un esempio veloce, se si ha, ad esempio, i file denominati foo/bar.js e foo/baz.js nella directory MediaWiki principale, si potrebbe caricarli aggiungendo il seguente codice nel file LocalSettings.php:

// register a ResourceLoader module... 
$wgResourceModules['custom.foo.whatever'] = array(
    'scripts' => array('foo/bar.js', 'foo/baz.js'), 
    // could e.g. add dependencies on core modules here 
); 
// ...and set up a hook to add it to every page 
function addMyCustomScripts(&$out) { 
    $out->addModules('custom.foo.whatever'); 
    return true; 
} 
$wgHooks['BeforePageDisplay'][] = 'addMyCustomScripts'; 

In sostanza, questo metodo è utile soprattutto per gli autori di estensioni, che possono utilizzarlo per caricare codice CSS e JS secondo necessità. Vedere la documentazione $wgResourceModules e BeforePageDisplay per ulteriori dettagli, comprese le opzioni aggiuntive del modulo (e core modules).

+0

Questo è fantastico! Molto più utile dei documenti wiki. Penso che l'uso del modulo delle risorse e dei ganci quando si sta cercando di inserire varie librerie javascript/jquery sia necessario. – MirroredFate

1

mettere il codice in "MediaWiki: common.js" pagina del wiki

http://www.mediawiki.org/wiki/Manual:Interface/JavaScript

anche vedere più in basso nella pagina per skin personalizzate.

+0

La pagina su Common.js è stata eliminata, e la documentazione sulla vostra pagina collegata è incredibilmente privo di qualsiasi tipo di esempi utili. Spero sinceramente che modifichi la tua risposta per includere un esempio o due di ciò di cui stai parlando. – MirroredFate

+0

Hai provato a cercare il tuo filesystem per common.js? Esiste? – garryp

+0

L'ho fatto. Non esiste un file chiamato "Common.js" o "common.js". – MirroredFate

1

È possibile inserire il codice javascript nella pagina "MediaWiki: common.js" del wiki.

Su una nuova wiki, si dovrebbe creare questa pagina. Poiché si trova nello spazio dei nomi "MediaWiki", potresti avere problemi con i permessi . Non puoi modificare la pagina a meno che tu non sia un utente amministratore. Vai alla pagina "Special: ListUsers/sysop" per vedere chi sono gli utenti admin e assicurati di aver effettuato l'accesso come uno di loro (can't remember the password?). Una volta superati questi ostacoli e puoi modificare "MediaWiki: common.js" ...

Puoi inserire qualsiasi javascript lì, e dovrebbe caricarsi per tutti gli utenti indipendentemente dal loro gruppo di utenti o scelta di skin (da qui il nome "Comune"). Dopo averlo modificato, ricorda che il tuo browser potrebbe memorizzare nella cache le cose. Visualizza qualsiasi pagina wiki e fai un ctrl + aggiorna, e il nuovo javascript dovrebbe kickare.

Se hai javascript in un file che vuoi caricare (o caricato tra i tuoi file wiki, o ospitato su un sito esterno) puoi farlo tramite ResourceLoader. Ilmari Karonen ha decifrato come fare questo come una modifica al tuo LocalSettings.php, ma un altro approccio ...

È possibile utilizzare ResourceLoader nella pagina "MediaWiki: common.js". Per esempio modificare la pagina e basta aggiungere l'una linea:

mw.loader.load('https://some.website.com/some-javascript.js'); 

Vedere la sezione 'mw.loader.load' nel mediawiki.org ResourceLoader/Modules docs.

Stavamo usando un evento addOnloadHook, che aveva lo scopo di seguire su dal caricamento di questo, così abbiamo finito per farlo nel modo jQuery:

jQuery.getScript('https://some.website.com/some-javascript.js', 
    function() { 
    addOnloadHook(function() { 
     someJavaScript.thingToRunOnLoad(); 
    }); 
    }); 
2

L'utilizzo di common.js è una buona idea.

Un'altra opzione è quella di definire per caricare in LocalSettings.php:

# Add onBeforePageDisplay function to BeforePageDisplay Hook 
$wgHooks['BeforePageDisplay'][] ='onBeforePageDisplay'; 

function onBeforePageDisplay(OutputPage &$out, Skin &$skin) 
{ 
    $script = '<script type="text/javascript" src="https://example.com/javascript.js"></script>'; 
    $out->addHeadItem("itemName", $script); 
    return true; 
};