Utente:Wim b/Ricetta.js
Nota: dopo aver pubblicato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti.
- Firefox / Safari: tieni premuto il tasto delle maiuscole Shift e fai clic su Ricarica, oppure premi Ctrl-F5 o Ctrl-R (⌘-R su Mac)
- Google Chrome: premi Ctrl-Shift-R (⌘-Shift-R su un Mac)
- Internet Explorer / Edge: tieni premuto il tasto Ctrl e fai clic su Aggiorna, oppure premi Ctrl-F5
- Opera: premi Ctrl-F5.
/// <pre>
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++ CREAZIONE RAPIDA RICETTA +++
+++ codice originale di Wim b con l'aiuto fondamentale di Ricordisamoa +++
vers. beta 1
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
//creo il link nelle pagine speciali
if ( mw.config.get('wgCanonicalSpecialPageName') === 'Specialpages' ) {
$('#mw-specialpagesgroup-pagetools').next().find('ul').eq(0)
.prepend('<li><a href="/wiki/Speciale:Ricetta2">Scrivi ricetta2</a></li>');
}
//Creo il link nel portlet
mw.util.addPortletLink( 'p-tb', '/wiki/Speciale:Ricetta2', 'Nuova ricetta2', 'p-ricetta', 'segui la procedura guidata per creare una nuova ricetta2');
// Evito link rosso nelle pagine dei contenuti
$("a[href$='/wiki/Speciale:Ricetta']").attr({'title': 'Speciale:Ricetta2'}).removeClass();
if(mw.config.get('wgNamespaceNumber') == -1 && mw.config.get('wgTitle') == 'Ricetta2') {
//Sostituisco il titolo
$('h1').text('Nuova ricetta');
// e l'intestazione nel tab
document.title = 'Creazione nuova ricetta - Wikibooks';
$('#bodyContent').replaceWith('Inserisci tutti i dati richiesti per scrivere velocemente una nuova ricetta'
+ '<input name="title" type="hidden" value="Speciale:Ricetta" />'
+ '<fieldset><legend>Creazione rapida di una nuova ricetta</legend>'
+ '<h3>Informazioni preliminari </h3>'
+ '<li><b>Nome della ricetta:</b> <input type="text" id="NomeRicetta" name="NomeRicetta size="30"></li>'
+ '<li><b>Breve descrizione:</b> (Descrizione aspetto, indicazione periodo o ricorrenza, ecc…)</li>'
+ '<textarea rows="4" cols="50" id="DescrizioneRicetta" name="DescrizioneRicetta"></textarea>'
+ '<li><b>Per quante persone:</b> <input type="text" id="NumeroPersone" name="NumeroPersone" size="3" maxlength="2"></li>'
+ '<h3>Ingredienti: <button id="addIngrediente" >+</button><p></p> </h3>'
+ '<div id="IngredientiNuovi">'
+ '<div id="IngredientiAggiuntivi">'
+ 'Ingrediente:<span id="ing00"></span> <input class="mw-ui-input Ingrediente" name="NuovoIngrediente00" id="NuovoIngrediente00" size="80%">'
+ ' '
+ 'Quantità: <input class="mw-ui-input IngredienteQ" name="NuovaQuantita00" id="NuovaQuantita00" size="6" maxlength="5" value=""> <select id="Quantita00" name="Quantita00">'
+ '<optgroup id="Liquidi" name="Liquidi" label="Liquidi">Liquidi</optgroup>'
+ '<option value="ml">millilitri</option>'
+ '<option value="cl">centilitri</option>'
+ '<option value="l">litri</option>'
+ '<optgroup id="Solidi" name="Solidi" label="Solidi">Solidi</optgroup>'
+ '<option value="mg">milligrammi</option>'
+ '<option value="g">grammi</option>'
+ '<option value="hg">etti</option>'
+ '<optgroup id="Altro" name="Altro" label="Altro">Altro</optgroup>'
+ '<option value="q. b.">quanto basta</option>'
+ '<option value="cucchiaio">cucchiaio</option>'
+ '<option value="cicchiaino">cicchiaino</option>'
+ '<option value="pizzico">pizzico</option>'
+ '</select>'
+ '<input name="AltraUnita00" type="checkbox" value="" id="AltraUnita00" style="">Altra unità di misura</input> <input class="mw-ui-input" name="Altro00" id="Altro00" size="10"/></input> <p></p>'
+ '</div>'
+ '</div>'
+ '</td></tr>'
+ '</table>'
+ '<h3>Passaggi: <button id="addPassaggio" >+</button><p></p> </h3>'
+ '<div id="PassaggiNuovi">'
+ '<div id="PassaggiAggiuntivi">'
+ 'Passaggio:<input class="mw-ui-input Passaggio" name="Passaggio00" id="Passaggio00" size="80%"/>'
// + '<textarea id="passaggi" type="text" rows="10" name="passaggi"; />'
+ '<br/>'
+ '</div>'
+ '</div>'
+ '\n'
+ '<h3>Consigli:</h3>'
+'<input name="CBConsigli" type="checkbox" value="" id="CBConsigli" style="">Hai dei consigli per questa ricetta?'
+ '<textarea rows="4" cols="50" id="ConsigliRicetta" name="ConsigliRicetta" disabled></textarea>'
+ '\n'
+ '<h3>Categorie:</h3>'
+ '<div id="ElencoCategorie"></div>'
+ '<p></p>'
+ '<input type="submit" value="Genera" name="submit" /><div id="Success"></div>'
+ '</fieldset><div id="results" style="visibility: hidden"></div></form>').ready(function () {
//ID incrementali per gli ingredienti
var current_id = 0;
$('#addIngrediente').click(function(){
nextElement($('#IngredientiAggiuntivi'));
});
function nextElement(element){
var newElement = element.clone().appendTo($('#IngredientiNuovi'));
current_id++;
var id = (current_id < 50 ? '0' : '') + current_id;
newElement.attr('id', newElement.attr('id').replace(/00/, id));
$('input', newElement).each(function() {
$(this).attr('id', $(this).attr('id').replace(/00/, id));
var nome = $(this).attr('id');
$(this).attr('name', nome);
}).val('');
//Menù a discesa
$('select', newElement).each(function() {
$(this).attr('id', $(this).attr('id').replace(/00/, id));
var nome = $(this).attr('id');
$(this).attr('name', nome);
}).val('');
$('#addIngrediente').prop('disabled', current_id > 49);
}
//ID incrementali per i passaggi
var current_idPassaggi = 0;
$('#addPassaggio').click(function(){
nextElementInt($('#PassaggiAggiuntivi'));
});
function nextElementInt(element){
var newElementInt = element.clone().appendTo($('#PassaggiNuovi'));
current_idPassaggi ++;
var idPassaggi = (current_idPassaggi < 100 ? '0' : '') + current_idPassaggi;
newElementInt.attr('id', newElementInt.attr('id').replace(/00/, idPassaggi));
$('input', newElementInt).each(function() {
$(this).attr('id', $(this).attr('id').replace(/00/, idPassaggi));
var nomeInt = $(this).attr('id');
$(this).attr('name', nomeInt);
}).val('');
$('#addPassaggio').prop('disabled', current_idPassaggi > 99);
}
///Gestione del CB per i consigli
$('input#CBConsigli').change(function(){
if(this.checked){
$( 'textarea#ConsigliRicetta' ).attr('disabled' , false).focus();
}
else{
$( 'textarea#ConsigliRicetta' ).attr('disabled', true);
}
return false;
});
// Funzione API per recuperare le categorie delle ricette
var api = new mw.Api();
function getSubCategories( title, cont, pages ) {
return api.get( $.extend( {
action: 'query',
generator: 'categorymembers',
gcmtitle: title,
gcmtype: 'subcat',
gcmlimit: 'max',
prop: 'categoryinfo|categories',
clcategories: title,
clprop: 'sortkey'
}, cont ) ).then( function ( data ) {
pages = $.extend( true, {}, pages || {}, data.query.pages );
if ( data.continue !== undefined ) {
return getSubCategories( title, data.continue, pages );
}
return $.map( pages, function ( page ) {
return page;
} ).sort( function ( a, b ) {
if ( a.categories[ 0 ].sortkey > b.categories[ 0 ].sortkey ) {
return 1;
}
if ( a.categories[ 0 ].sortkey < b.categories[ 0 ].sortkey ) {
return -1;
}
return 0;
} );
} );
}
function doneFilter( level, cbLevel, pages ) {
return pages.map( function ( page ) {
var $li = $( '<li>' ).append(
$( '<label>' )
.text( new mw.Title( page.title ).getMainText() )
.prepend(
level >= cbLevel ?
$( '<input>' ).attr( { type: 'checkbox', name: 'Categoria', value: new mw.Title( page.title ).getMainText() } ) :
[]
)
);
if ( page.categoryinfo.subcats > 0 ) {
$( '<button>' )
.append(
$( '<span>' ).text( '►' ),
$( '<span>' ).text( '▼' ).hide()
)
.one( 'click', function () {
var $ul = makeList( page.title, level + 1, cbLevel ).appendTo( $li );
$( this ).children().toggle();
$( this ).on( 'click', function () {
$ul.toggle();
$( this ).children().toggle();
} );
} )
.prependTo( $li );
}
return $li;
} );
}
function makeList( title, level, cbLevel ) {
var $ul = $( '<ul>' ).css( 'list-style', 'none' ).append(
$( '<li>' ).text( 'caricamento in corso...' )
);
getSubCategories( title, {} )
.then(
doneFilter.bind(
null,
level !== undefined ? level : 0,
cbLevel !== undefined ? cbLevel : 1
),
//failFilter
)
.always( function ( $listContents ) {
$ul.empty().append( $listContents );
} );
return $ul;
}
makeList( 'Categoria:Ricette' ).appendTo( '#ElencoCategorie' );
//FUNZIONE QUANDO SI PREME IL BOTTONE
$( "input[name=submit]" ).click(function( event ) {
// setto tutte le variabili in modo che recuperino i valori dei campi
// Funzione per scrivere materialmente nelle pagine
function writeInPage(title, content, summary, option, section, success, tags) {
var param = {action: 'edit',
title: title,
summary: summary,
tags: tags,
token: mw.user.tokens.get('editToken'),
format: 'json'
};
param[option || 'text'] = content;
if (section || section === 0)
param.section = section;
$.post(mw.util.wikiScript('api'), param, function() {
if (typeof(success) === 'function')
success();
});
}
var success = '<span style="color:#00A050; font-size:20px">√</span>';
// recupera e mette in elenco i valori dei passaggi della ricetta
resPass = $('input.Passaggio').map(function(_, el) {
return $(el).val();
}).get().join(';\n# ');
var resPass = '# '+resPass+'.';
// Elenca tutte le categorie da aggiungere
resCat = $('input[name=Categoria]:checked').map(function(_, el) {
return $(el).val();
}).get().join('|');
var resCat = '{{Categorie della ricetta|'+resCat+'}}';
var values = Object.create( null );
$( '#IngredientiNuovi :input' ).serializeArray().forEach( function ( input ) {
values[ input.name ] = input.value;
} );
//Funzione per recuperare l'lenco degli ingredienti
var resIngr = $( '#IngredientiNuovi > *' ).map( function ( i ) {
var id = ( i < 50 ? '0' : '' ) + i,
ing = [],
qua = values[ 'NuovaQuantita' + id ];
if ( qua ) {
ing.push( qua );
}
ing.push(
values[ ( 'AltraUnita' + id in values ? 'Altro' : 'Quantita' ) + id ],
'di',
values[ 'NuovoIngrediente' + id ]
);
return ing.join( ' ' );
} ).get().join( ';\n* ' );
resIngr = '* ' + resIngr + '.';
//INIZIO VARIABILI DEL TESTO
var NomeRicetta = $("#NomeRicetta").val();
var NumeroPersone = $("#NumeroPersone").val();
var DescrizioneRicetta = $('#DescrizioneRicetta').val();
var ConsigliRicetta = $('#ConsigliRicetta').val();
//Gestione CB per i consigli, se no ce ne sono, non scrive niente
if ($('input#CBConsigli').is(':checked')) { var SezConsigliRicetta = '== Consigli ==\n'+ConsigliRicetta+'\n\n' } else { var SezConsigliRicetta = '' }
//Testo da scrivere nelle pagina
var Testo = ''+DescrizioneRicetta+'.'
+'\n'
+'== Ingredienti ==\n'
+'per \'\'\''+NumeroPersone+'\'\'\' persone\n'
+'\n'
+''+resIngr+'\n'
+'\n'
+'== Preparazione ==\n'
+'\n'
+''+resPass+'\n'
+'\n'
+''+resCat+''
mw.loader.using('mediawiki.user', writeInPage("Libro di cucina/Ricette/"+NomeRicetta, ""+Testo+"","[[MediaWiki:Gadget-Ricetta.js|Script]]: Creazione nuova ricetta","text",false, function() {
$('#Success').html(success + ' <a href="/wiki/'+NomeRicetta+' id="PageCreated">La pagina '+NomeRicetta+' è stata crata con successo. </a>')
}, "Ricette (BETA)"));
});
});
}
t
/* resPass = elenco di tutti i passaggi della ricetta
resCat = elenco di tutte le categorie da aggiungere
resIng = Elenco di tutti gli ingredienti
*/