Utente:Wim b/Ricetta.js

Wikibooks, manuali e libri di testo liberi.

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%">'
	+ '&nbsp;'
	+ '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
*/