MediaWiki:Gadget-Ricetta.js: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
Intanto salvo così, poi dovrò continuare ma voglio anche evitare di perdere tutto
Versione abbastanza stabile, magari va un po' raffinata…
Riga 30: Riga 30:
+ '<input name="title" type="hidden" value="Speciale:Ricetta" />'
+ '<input name="title" type="hidden" value="Speciale:Ricetta" />'
+ '<fieldset><legend>Creazione rapida di una nuova ricetta</legend>'
+ '<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>'
+ '<h3>Ingredienti: <button id="addIngrediente" >+</button><p></p> </h3>'
+ '<div id="IngredientiNuovi">'
+ '<div id="IngredientiNuovi">'
+ '<div id="IngredientiAggiuntivi">'
+ '<div id="IngredientiAggiuntivi">'
+ 'Ingrediente: <input class="mw-ui-input" name="NuovoIngrediente00" id="NuovoIngrediente00" size="80%">'
+ 'Ingrediente:<span id="ing00"></span> <input class="mw-ui-input Ingrediente" name="NuovoIngrediente00" id="NuovoIngrediente00" size="80%">'
+ '&nbsp;'
+ '&nbsp;'
+ 'Quantità: <input class="mw-ui-input" name="NuovaQuantita00" id="NuovaQuantita00" size="6" maxlength="5" value=""> <select id="quantità00" name="quantità00">'
+ '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>'
+ '<optgroup id="Liquidi" name="Liquidi" label="Liquidi">Liquidi</optgroup>'
+ '<option value="ml">millilitri</option>'
+ '<option value="ml">millilitri</option>'
Riga 63: Riga 68:
+ '</div>'
+ '</div>'
+ '</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>'
+ '<h3>Categorie:</h3>'
+ '<div id="ElencoCategorie"></div>'
+ '<div id="ElencoCategorie"></div>'
+ '<p></p>'
+ '<p></p>'
+ '<input type="submit" value="Genera" name="submit" />'
+ '<input type="submit" value="Genera" name="submit" /><div id="Success"></div>'
+ '</fieldset><div id="results" style="visibility: hidden"></div></form>').ready(function () {
+ '</fieldset><div id="results" style="visibility: hidden"></div></form>').ready(function () {


Riga 86: Riga 96:
$(this).attr('name', nome);
$(this).attr('name', nome);
}).val('');
}).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);
$('#addIngrediente').prop('disabled', current_id > 49);
}
}
Riga 108: Riga 124:
$('#addPassaggio').prop('disabled', current_idPassaggi > 99);
$('#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
// Funzione API per recuperare le categorie delle ricette

var api = new mw.Api();
var api = new mw.Api();


Riga 200: Riga 229:


makeList( 'Categoria:Ricette' ).appendTo( '#ElencoCategorie' );
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
// recupera e mette in elenco i valori dei passaggi della ricetta
resPass = $('input.Passaggio').map(function(_, el) {
resPass = $('input.Passaggio').map(function(_, el) {
return $(el).val();
return $(el).val();
}).get().join(';\n#');
}).get().join(';\n# ');
var resPass = '#'+resPass+'.';
var resPass = '# '+resPass+'.';


// Elenca tutte le categorie da aggiungere
// Elenca tutte le categorie da aggiungere
Riga 213: Riga 267:
var resCat = '{{Categorie della ricetta|'+resCat+'}}';
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
/* resPass = elenco di tutti i passaggi della ricetta
resCat = elenco di tutte le categorie da aggiungere
resCat = elenco di tutte le categorie da aggiungere
resIng = Elenco di tutti gli ingredienti
*/
*/

Versione delle 12:03, 5 feb 2019

/// <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:Ricetta">Scrivi ricetta</a></li>');
}

//Creo il link nel portlet
mw.util.addPortletLink( 'p-tb', '/wiki/Speciale:Ricetta', 'Nuova ricetta', 'p-ricetta', 'segui la procedura guidata per creare una nuova ricetta');
 
// Evito link rosso nelle pagine dei contenuti
 
$("a[href$='/wiki/Speciale:Ricetta']").attr({'title': 'Speciale:Ricetta'}).removeClass();


if(mw.config.get('wgNamespaceNumber') == -1 && mw.config.get('wgTitle') == 'Ricetta') {

//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
*/