Differenze tra le versioni di "MediaWiki:Gadget-minipedia.js"
Jump to navigation
Jump to search
m (cosmetic change) |
(minor refactor and cosmetic changes on namespace change) |
||
Riga 14: | Riga 14: | ||
var mp = window.MiniPedia; |
var mp = window.MiniPedia; |
||
− | // default namespace |
+ | // default namespace informations |
− | mp.namespace = mp.namespace || 'Mini'; |
+ | mp.namespace = mp.namespace || 'Mini'; |
+ | mp.namespaceNum = mp.namespaceNum || 3002; |
||
// default edit intro page title |
// default edit intro page title |
||
mp.editIntro = mp.editIntro || 'Progetto:Minipedia/Creazione voce'; |
mp.editIntro = mp.editIntro || 'Progetto:Minipedia/Creazione voce'; |
||
− | // |
+ | // default logo URL of Minipedia |
+ | mp.logoURL = mp.logoURL || '/images/5/57/MinipediA_coconut_noun_simple_logo.png'; |
||
− | var ns = mw.config.get( 'wgNamespaceNumber' ); |
||
− | if( ns !== 0 ) { |
||
− | return; |
||
− | } |
||
− | |||
− | // add a "Minipedia" |
||
− | var miniVersionPortletLink = mw.util.addPortletLink( |
||
− | 'p-cactions', |
||
− | '#', |
||
− | 'Minipedia', |
||
− | 'ca-minipedia', |
||
− | 'Open Minipedia', |
||
− | 'n' |
||
− | ); |
||
+ | // font size of Minipedia |
||
− | // normal page title and mini version |
||
+ | mp.fontSize = mp.fontSize || '1.2em'; |
||
− | var pageName = mw.config.get( 'wgPageName' ); |
||
− | var miniPageName = mp.namespace + ':' + pageName; |
||
/** |
/** |
||
Riga 85: | Riga 72: | ||
/** |
/** |
||
− | * |
+ | * Prepare the wiki |
− | * |
||
− | * @param title Page title without Minipedia namespace |
||
*/ |
*/ |
||
− | function |
+ | function prepareNormalWiki() { |
+ | // add a "Minipedia" |
||
− | // eventually just inherit this page name |
||
+ | var miniVersionPortletLink = mw.util.addPortletLink( |
||
− | title = title || pageName; |
||
+ | 'p-cactions', |
||
+ | '#', |
||
+ | 'Minipedia', |
||
+ | 'ca-minipedia', |
||
+ | 'Open Minipedia', |
||
+ | 'n' |
||
+ | ); |
||
+ | // normal page title and mini version |
||
− | var mpTitle = mp.namespace + ':' + title; |
||
+ | var pageName = mw.config.get( 'wgPageName' ); |
||
+ | var miniPageName = mp.namespace + ':' + pageName; |
||
+ | /** |
||
− | var queryString = { |
||
+ | * Go to the Minipedia page in edit mode |
||
− | action: 'edit', |
||
+ | * |
||
− | title: mpTitle, |
||
+ | * @param title Page title without Minipedia namespace |
||
− | preload: title, |
||
+ | */ |
||
− | editintro: mp.editIntro, |
||
+ | function goToMinipediaEditPageTitle( title ) { |
||
− | }; |
||
+ | // eventually just inherit this page name |
||
− | // '/index.php' |
||
+ | title = title || pageName; |
||
− | var wgScript = mw.config.get( 'wgScript' ); |
||
+ | var mpTitle = mp.namespace + ':' + title; |
||
− | // go to the edit page URL |
||
− | window.location = wgScript + '?' + $.param( queryString ); |
||
− | }; |
||
+ | var queryString = { |
||
− | /** |
||
+ | action: 'edit', |
||
− | * Go to the Minipedia page in view mode |
||
+ | title: mpTitle, |
||
− | * |
||
+ | preload: title, |
||
− | * @param title Page title without Minipedia namespace |
||
+ | editintro: mp.editIntro, |
||
− | */ |
||
+ | }; |
||
− | function goToMinipediaPageTitle( title ) { |
||
+ | // '/index.php' |
||
− | // eventually just inherit this page name |
||
+ | var wgScript = mw.config.get( 'wgScript' ); |
||
− | title = title || pageName; |
||
+ | // go to the edit page URL |
||
− | var miniTitleObject = new mw.Title( title, mp.namespace ); |
||
+ | window.location = wgScript + '?' + $.param( queryString ); |
||
+ | }; |
||
+ | /** |
||
− | // go to the edit page URL |
||
+ | * Go to the Minipedia page in view mode |
||
− | window.location = miniTitleObject.getUrl(); |
||
+ | * |
||
− | }; |
||
+ | * @param title Page title without Minipedia namespace |
||
+ | */ |
||
+ | function goToMinipediaPageTitle( title ) { |
||
+ | // eventually just inherit this page name |
||
− | // on the mini toolback click, check if a mini version exists |
||
+ | title = title || pageName; |
||
− | $( miniVersionPortletLink ).click( function() { |
||
+ | var miniTitleObject = new mw.Title( title, mp.namespace ); |
||
− | // check if the mini version exists |
||
− | pageExists( miniPageName, function( miniPageExists ) { |
||
− | // |
+ | // go to the edit page URL |
+ | window.location = miniTitleObject.getUrl(); |
||
− | mw.loader.using( 'oojs-ui-windows' ).then( function() { |
||
+ | }; |
||
− | + | // on the mini toolback click, check if a mini version exists |
|
+ | $( miniVersionPortletLink ).click( function() { |
||
− | if( miniPageExists ) { |
||
− | + | // check if the mini version exists |
|
+ | pageExists( miniPageName, function( miniPageExists ) { |
||
− | goToMinipediaPageTitle(); |
||
− | } else { |
||
− | + | // allow to open OO UI windows |
|
+ | mw.loader.using( 'oojs-ui-windows' ).then( function() { |
||
− | // |
+ | // check if the page already exist |
+ | if( miniPageExists ) { |
||
− | var messageDialog = new OO.ui.MessageDialog(); |
||
− | var windowManager = new OO.ui.WindowManager(); |
||
− | $( 'body' ).append( windowManager.$element ); |
||
− | windowManager.addWindows( [ messageDialog ] ); |
||
− | // |
+ | // just redirect to the Minipedia version |
+ | goToMinipediaPageTitle(); |
||
− | var windowInstance = windowManager.openWindow( messageDialog, { |
||
− | + | } else { |
|
− | message: "Sii il primo a creare una versione più ridotta e più accessibile di questa voce, in Minipedia!" |
||
− | } ); |
||
− | // |
+ | // ask if you want to create the page |
− | windowInstance.closed.then( function ( data ) { |
||
− | if( data.action === 'accept' ) { |
||
− | + | // create message dialog window |
|
+ | var messageDialog = new OO.ui.MessageDialog(); |
||
− | goToMinipediaEditPageTitle(); |
||
+ | var windowManager = new OO.ui.WindowManager(); |
||
− | } |
||
+ | $( 'body' ).append( windowManager.$element ); |
||
− | } ); |
||
+ | windowManager.addWindows( [ messageDialog ] ); |
||
− | } |
||
+ | // configure and open dialog |
||
+ | var windowInstance = windowManager.openWindow( messageDialog, { |
||
+ | title: "Accesso Minipedia", |
||
+ | message: "Sii il primo a creare una versione più ridotta e più accessibile di questa voce, in Minipedia!" |
||
+ | } ); |
||
+ | |||
+ | // check if you accepted the page creation |
||
+ | windowInstance.closed.then( function ( data ) { |
||
+ | if( data.action === 'accept' ) { |
||
+ | |||
+ | // go go go! |
||
+ | goToMinipediaEditPageTitle(); |
||
+ | } |
||
+ | } ); |
||
+ | } |
||
+ | |||
+ | } ); |
||
} ); |
} ); |
||
} ); |
} ); |
||
+ | |||
− | } ); |
||
+ | }; |
||
+ | // end prepareNormalWiki() |
||
+ | |||
+ | function prepareMinipedia() { |
||
+ | |||
+ | // website logo |
||
+ | var $logo = $( '#p-logo .mw-wiki-logo' ); |
||
+ | |||
+ | // body content |
||
+ | var $mwBodyContent = $( '.mw-body-content' ); |
||
+ | |||
+ | // set Minipedia logo (animation?) |
||
+ | $logo.css( 'background-image', 'url(' + mp.logoURL + ')' ); |
||
+ | |||
+ | // increase font size (animation?) |
||
+ | $mwBodyContent.css( 'font-size', mp.fontSize ); |
||
+ | }; |
||
+ | // end prepareMinipedia() |
||
+ | |||
+ | // work only in the main namespace |
||
+ | var ns = mw.config.get( 'wgNamespaceNumber' ); |
||
+ | if( ns === 0 ) { |
||
+ | prepareNormalWiki(); |
||
+ | } else if( ns == mp.namespaceNum ) { |
||
+ | prepareMinipedia(); |
||
+ | } |
||
+ | // end namespace zero check |
||
} ); |
} ); |
Versione delle 07:03, 6 lug 2020
/** * Make Minipedia magics * * Dependencies: mediawiki.util * * @revision 2020-06-27 */ $.when( mw.loader.using( 'mediawiki.util' ), $.ready ).then( function () { // global configuration file window.MiniPedia = window.MiniPedia || {}; // shortcut for the global configuration file (mp = mini-pedia) var mp = window.MiniPedia; // default namespace informations mp.namespace = mp.namespace || 'Mini'; mp.namespaceNum = mp.namespaceNum || 3002; // default edit intro page title mp.editIntro = mp.editIntro || 'Progetto:Minipedia/Creazione voce'; // default logo URL of Minipedia mp.logoURL = mp.logoURL || '/images/5/57/MinipediA_coconut_noun_simple_logo.png'; // font size of Minipedia mp.fontSize = mp.fontSize || '1.2em'; /** * Check if a page title already exists * * @param title Page title * @param callback Callback with one boolean argument telling if the page title exists or not */ function pageExists( title, callback ) { // require the API stuff mw.loader.using( 'mediawiki.api' ).then( function() { // prepare the API request var request = { action: 'query', prop: 'info', titles: title }; // make the API request ( new mw.Api() ).get( request ).done( function ( response ) { // no response no party if( !response.query ) { throw 'no response'; } // the list should contain just one page var page; for( var i in response.query ) { page = response.query[i]; if( page.pageid && page.pageid > 0 ) { // exists callback( page ); } } // does not exist callback( false ); } ); } ); }; /** * Prepare the wiki */ function prepareNormalWiki() { // add a "Minipedia" var miniVersionPortletLink = mw.util.addPortletLink( 'p-cactions', '#', 'Minipedia', 'ca-minipedia', 'Open Minipedia', 'n' ); // normal page title and mini version var pageName = mw.config.get( 'wgPageName' ); var miniPageName = mp.namespace + ':' + pageName; /** * Go to the Minipedia page in edit mode * * @param title Page title without Minipedia namespace */ function goToMinipediaEditPageTitle( title ) { // eventually just inherit this page name title = title || pageName; var mpTitle = mp.namespace + ':' + title; var queryString = { action: 'edit', title: mpTitle, preload: title, editintro: mp.editIntro, }; // '/index.php' var wgScript = mw.config.get( 'wgScript' ); // go to the edit page URL window.location = wgScript + '?' + $.param( queryString ); }; /** * Go to the Minipedia page in view mode * * @param title Page title without Minipedia namespace */ function goToMinipediaPageTitle( title ) { // eventually just inherit this page name title = title || pageName; var miniTitleObject = new mw.Title( title, mp.namespace ); // go to the edit page URL window.location = miniTitleObject.getUrl(); }; // on the mini toolback click, check if a mini version exists $( miniVersionPortletLink ).click( function() { // check if the mini version exists pageExists( miniPageName, function( miniPageExists ) { // allow to open OO UI windows mw.loader.using( 'oojs-ui-windows' ).then( function() { // check if the page already exist if( miniPageExists ) { // just redirect to the Minipedia version goToMinipediaPageTitle(); } else { // ask if you want to create the page // create message dialog window var messageDialog = new OO.ui.MessageDialog(); var windowManager = new OO.ui.WindowManager(); $( 'body' ).append( windowManager.$element ); windowManager.addWindows( [ messageDialog ] ); // configure and open dialog var windowInstance = windowManager.openWindow( messageDialog, { title: "Accesso Minipedia", message: "Sii il primo a creare una versione più ridotta e più accessibile di questa voce, in Minipedia!" } ); // check if you accepted the page creation windowInstance.closed.then( function ( data ) { if( data.action === 'accept' ) { // go go go! goToMinipediaEditPageTitle(); } } ); } } ); } ); } ); }; // end prepareNormalWiki() function prepareMinipedia() { // website logo var $logo = $( '#p-logo .mw-wiki-logo' ); // body content var $mwBodyContent = $( '.mw-body-content' ); // set Minipedia logo (animation?) $logo.css( 'background-image', 'url(' + mp.logoURL + ')' ); // increase font size (animation?) $mwBodyContent.css( 'font-size', mp.fontSize ); }; // end prepareMinipedia() // work only in the main namespace var ns = mw.config.get( 'wgNamespaceNumber' ); if( ns === 0 ) { prepareNormalWiki(); } else if( ns == mp.namespaceNum ) { prepareMinipedia(); } // end namespace zero check } );