La funzione di documentgetElementById DGEBI nel framework MAGIC PATCHES.

In questo programma manca uno pseudo-main o ( main Ricordarsi il padding px-5 per tenere due margini a sinistra e destra per tool e responsive. ) dato che contiene le informazioni da visualizzare rappresenta un file personalizzato per la pagina la quale è stata impostata come una struttura standard [*]. Lo pseudo-main è scritto in html indi "compilato" in DGEBI e inserito come script. (Comunque rappresenta già una fase avanzata di un progetto, vale a dire un prodotto finito.)

Quale sarebbe il vantaggio?

Un codice adeguatamente uniformato ad un metodo, risulta il primo vantaggio. Naturalmente si parte dal principio che utilizzando il DGEBI si riutilizzano elementi standard senza doverli riscrivere questo comporta una diminuizione del peso di html nella economia del codice. Un programma si avvale di componenti come ad esempio i menu definenti la navigazione standard e le informazioni su aggiornamenti pagina che interessanto il dominio globalmente.

Utilizzare un framework come Bootstrap attraverso i CDN richiede una connessione ad Internet. Questo attraverso il DGEBI diventa evitabile facendo un copia e incolla del contenuto del CDN in locale. Agevolmente si possono effettuare aggiustamenti al codice di boostrap aggiungendo linee nuove nel file locale. In particolare BS permette di uniformare la immagine delle pagine web cross-browser ma il contenuto del framework talvolta contiene molte features che al momento non servovo. Mi riferisco alla fase alfa e beta del framework. In fase di costruzione sono aggiunte funzionalità e magari se ne perdono altre. Dopo diversi passaggi in locale ci si trova un framework che mixa alfa e beta in modo perfettamente adeguato alle esigenze del client.

Con l'ultima versione di BS è stato rimosso jQuery come dipendenza può succedere che in alfa un javascript funzioni mentre non in beta, mentre i css funzionano ancora bene e occorre solamente fare un minimo aggiustamento in aggiunta delle nuove funzionalità.

Utilizzando il DGEBI si presuppone che client abbia già attivato l'interprete javascript potrebbe essere un drawback ma oramai nei browser javascript è attivato per default e la commistione html+css+javascript è talmente uno standard che difficilmente ci si troverà ad incontrare problemi a questo riguardo.

Nella fase di compilazione del DGEBI ci possono essere dei problemi riguardanti il fatto che nello script ci sia un conflitto con caratteri speciali non approvati dallo script ma perfettamenti accettati da html. Risulta essere il caso del carattere ' (apice) il quale fa da delimitatore delle stringhe concatenate. Compilando il testo occorre istruire una conversione utilizzando i caratteri di escape \' (apice singolo) oppure \" (doppio apice) oppure \\ (barra inversa).

Utilizzo generico del DGEBI

document.getElementById("test").innerHTML='';

Prima di compilare usare un editor per sostituire gli apici singoli usati in alcuni link per chiarezza della scrittura. Ad esempio 'http://nomedominio.com' sostituire con apici doppi in realtà il link funziona regolarmente e si evita grandi problemi con gli apici di apertura e chiusra del DGEBI.


document.getElementById("test").style.visibility='visible';

Nel caso di uso per lo stile controllare la grammatica dei metodi javascript poiché possono differire dallo standard html-css.

HTML DOM Style Object


Un esempio di uso del DGEBI : lo spinner blues...

Quando il tempo di caricamento loading è piuttosto lungo risulta utile uno spinner per avvertire l'utente che il browser sta funzionando, in realtà anche il browser ha un suo spinner, quindi lo spinner personalizzato è ridondante. Senonchè rafforza il messaggio in più se aggiungiamo anche un progress bar allora la funzione diventa veramente una aggiunta. Il progress bar è prevista per tempi lunghissimi, in tal caso il programmatore è a conoscenza del tempo medio di caricamento del codice per cui si può posizionare un avvertimento.


function attesa(){
if (document.all){} 
else if 
(document.getElementById)
 { document.getElementById("spinner").style.visibility="hidden"; }

}

Questa funzione è molto interessante poichè utilizza document.all il quale fa un check se il documento è in corso di caricamento. In questo caso non fa nulla {} in realtà si realizza un errore intercettato da id="spinner" visualizza lo spinner . Allorquando il documento è completamente caricato si attiva lo stile il quale cancella lo spinner.


<div id="spinner" class="spinner-border"></div>

Il frammento di codice html con id intercetta il document.all , lo spinner utilizzato può essere una icona animata oppure preso da boostrap spinner standard di bootstrap

Una funzione javascript non si attiva da sola, ha bisogno di un evento che faccia da avvio. In questo caso viene attivato al momento dell'avvio della pagina


<body onload="attesa()">

Ora è possibile assemblare le componenti



<body onload="attesa()">
<div id="spinner" class="spinner-border"></div>
<script>
function attesa(){
if (document.all){} 
else if 
(document.getElementById)
{ document.getElementById("spinner").style.visibility="hidden"; }
}
</script>
</body>


Un ulteriore perfezionamento con interazioni html body e percentuale di caricamento (qui fissata in 15minuti)


	<html id="html">

Viene dato un id all'elemento html

	
<style>
:root {background-color:rgba(255,170,0,0.5);}

body{ background-color:default; }
</style>

Viene settato un root e un body come sfondo


<body id="body" onload="pausa()" style="visibility:hidden;">

Aggiungo un id a body e uno style visibility hidden. onload effettua il caricamento alla partenza della funzione javascript pausa


 
	<div id="divpausa" style="position:fixed;
	top:2.5rem;left:0;
	top:50%;left:50%;
	background-color:var(--bs-white) !important;
	margin-left:-8.5rem !important; margin-top:-2rem !important; 
	border-radius:0.2rem !important; visibility:visible !important;">
	<span id="pausa" class="spinner-border text-warning"></span>
	
	<span style="background-color:transparent !important;">
	<span id="Loading"
	style="color:var(--bs-indigo) !important; font-size:2rem !important;">
	Loading...</span>
	<span id="percento" 
	style="color:var(--bs-indigo) !important;
	font-size:2rem !important;font-variant:small-caps !important;">
	</span>
	</span>
	</div> 
	
	
	
	
	
	 <script>
	 
	function pausa(){
	if (document.all){} 
	else if 
	(document.getElementById)
	 { 
	 document.getElementById("pausa").style.visibility="hidden";
	 document.getElementById("percento").style.visibility="hidden";
	 document.getElementById("Loading").style.visibility="hidden";
	 document.getElementById("divpausa").style.visibility="hidden";
	
	 document.getElementById("body").style.visibility="visible";
	 document.getElementById("body").style.backgroundColor = 'default';
	 document.getElementById("html").style.backgroundColor = 'transparent';
	
	 }
	
	}
	
	var percento=document.getElementById("percento");
	var contatore=1; 
	var intervallo=setInterval( function() { percento.innerHTML=contatore+"%"; 
	contatore++; if (contatore===101) {clearInterval(intervallo);} 
	} , 9000) 
	
	 </script>
	

Qui il codice completo da inserire nel body. Vi si vede il settaggio di interval a 9000 = 9sec , ogni 9secondi vi è un avanzamento del conteggio del 1percento 9x100=900sec = 15minuti , naturalmente viene visualizzato dal programma il 100% , lo spinner in questione è indicativo del tempo di caricamento ed è gestito in modo statico dal programmatore. Se il tempo fosse maggiore di 15minuti si rifà il calcolo e si aggiorna lo script.

Qualche aggiunta per posizionare adeguatamente lo spinner tramite position fixed o qualcosa di simile. L'uso di bootstrap permette di velocizzare le operazioni dal punto di vista di come appare lo spinner. In aggiunta la immagine dello spinner richiede una più che sufficiente esperienza con i css.


Caricamenti a/sincroni

Quando si scrivono file esterni contenenti istruzioni per lo stile e script nei browser l'aggiornamento ai nuovi valori non avviene automaticamente creando soprattutto in fase di debugging una difficoltà di comprensione dei fattori anomali e quindi a perdita di tempo. L'idea base è quella di effettuare un aggiustamento al volo ricorrendo al indirizzo?qualcosa questa soluzione richiede un continuo estenuante passaggio tra file html e file css o js . La soluzione è creare uno script per il caricamento degli script esterni e dei fogli di stile esterni.

Per ottenere questa funzionalità occorre usare il metodo document.createElement("script"); nel caso di uno script

oppure document.createElement("link"); nel caso di link a file esterno css.

Questi script depositano in head il loro contenuto.

var carica_script = document.createElement("script"); document.getElementsByTagName("head")[0].appendChild(carica_script); var carica_link = document.createElement("link"); document.getElementsByTagName("head")[0].appendChild(carica_link);

Le due sequenze di codice si riferiscono a due tipologie di elementi ma per entrambe occorre creare un postfisso.

var postfisso = new Date();

Il postfisso è un indice con il quale si individualizza un refresh nella ricerca del file comunicando al browser che è una nuova istanza di caricamento. Come postfisso si può usare anche un generatore di numeri random. Invece con new Date() si indicizza utilizzando il datario javascript il quale si aggiorna quando si fa il check della pagina html. Il postfisso è comune ad entrambe le tipologie.

1 Metodo new Date() JavaScript Date Reference

Aggiungiamo ora il nome del file da includere

var nome = "file.js"; nome = nome + "?" + postfisso;

oppure se il file contiene elementi o classi

var nome = "file.css"; nome = nome + "?" + postfisso;

Quando il file esterno è un DGEBI occorre tenere conto che per mnemonico il nome richiama l'ID , ad esempio extras.js richiama mnemonicamente id="extras" ovviamente questa è una raccomandazione non una necessità, ma se si usa DGEBI risulta di estrema utilità.

Ora dobbiamo combinare il nome dello script con un elemento di nome

carica_script.src=nome;

Corrisponde al comando src="file.js"

<script src="file.js"></script>

Un caso interessante è la decodifica di

<link rel="stylesheet" href="file.css" />

che diventa

carica_link.href = nome; carica_link.rel="stylesheet"

Schema completo a/sincrono per javascript DGEBI


var carica_script = document.createElement("script");
var postfisso = new Date();	
var nome = "file.js";
nome = nome + "?" + postfisso;
carica_script.src=nome;
document.getElementsByTagName("head")[0].appendChild(carica_script);

Schema completo a/sincrono per file css


var carica_link = document.createElement("link");
var postfisso = new Date();	
var nome = "file.css";
nome = nome + "?" + postfisso;
carica_link.href=nome;
carica_link.rel="stylesheet";
document.getElementsByTagName("head")[0].appendChild(carica_link);

Consideriamo ora un aggiustamento usufruendo della flessibilità di javascript con un esempio

var radice="http://beatsupernovarasa.altervista.org/zap/radice.js" ;

Questa variabile permette di riferirsi tramite il nome radice ad una porzione dell'indirizzo web server depositato nel file radice.js risparmiando così la digitazione dell'indirizzo completo.

var nome = radice+"nome.js";

Un'applicazione molto interessante è il compattamento di tutti i link standard o di default. 6


	var postfisso = new Date();	

	var carica_script_JQUERY = document.createElement("script");
	var nome_JQUERY = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js";
	nome_JQUERY = nome_JQUERY + "?" + postfisso;
	carica_script_JQUERY.src=nome_JQUERY;
	document.getElementsByTagName("head")[0].appendChild(carica_script_JQUERY);
	
	var carica_script_BSNR_KICKSTART_TEST = document.createElement("script");
	var nome_BSNR_KICKSTART_TEST = "http://beatsupernovarasa.altervista.org/zap/bs/kickstart/bsnr_kickstart_test/default.js";
	nome_BSNR_KICKSTART_TEST = nome_BSNR_KICKSTART_TEST + "?" + postfisso;
	carica_script_BSNR_KICKSTART_TEST.src=nome_BSNR_KICKSTART_TEST;
	document.getElementsByTagName("head")[0].appendChild(carica_script_BSNR_KICKSTART_TEST);
	
	var carica_script_PIEDIPAGINA_MENU_TEST = document.createElement("script");
	var nome_PIEDIPAGINA_MENU_TEST = "http://beatsupernovarasa.altervista.org/zap/bs/kickstart/piedipagina_menu_test/default.js";
	nome_PIEDIPAGINA_MENU_TEST = nome_PIEDIPAGINA_MENU_TEST + "?" + postfisso;
	carica_script_PIEDIPAGINA_MENU_TEST.src=nome_PIEDIPAGINA_MENU_TEST;
	document.getElementsByTagName("head")[0].appendChild(carica_script_PIEDIPAGINA_MENU_TEST);
	
	var carica_script_SHOW_HIDE = document.createElement("script");
	var nome_SHOW_HIDE = "http://beatsupernovarasa.altervista.org/zap/bs/kickstart/show_hide/default.js";
	nome_SHOW_HIDE = nome_SHOW_HIDE + "?" + postfisso;
	carica_script_SHOW_HIDE.src=nome_SHOW_HIDE;
	document.getElementsByTagName("head")[0].appendChild(carica_script_SHOW_HIDE);
	
	var carica_link_TABLONE = document.createElement("link");
	var nome_TABLONE = "http://beatsupernovarasa.altervista.org/zap/bs/tablone/default.css";
	nome_TABLONE = nome_TABLONE + "?" + postfisso;
	carica_link_TABLONE.href=nome_TABLONE;
	carica_link_TABLONE.rel="stylesheet";
	document.getElementsByTagName("head")[0].appendChild(carica_link_TABLONE);

Con un unico script si caricano tutti i file necessari per user lasciando libero spazio al main e alle sezioni.


Le font 7

Privilegio delle monospace. Google fonts PT Mono

<link href="https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;500&family=Inconsolata:wght@500&family=PT+Mono&family=Roboto+Mono&display=swap" rel="stylesheet"> html * {font-family: 'PT Mono', monospace !important;}

La ricerca della font monospace adeguata interessa per il problema dei bastoni soprattutto nelle elle che si possono confondere con le i maiuscole e nelle o che si possono confonedere con lo zero e viceversa se non si usa il monospace. Alcune porzioni di programmazione richiedono un adeguato modo differenziato per non incorrere in bug insidiosi.


Il collapse

Questo effetto di apparizione/sparizione del menu gestito da bootstrap è molto importante per la pagina in quanto riduce l'affollamento di sticker.



<section style="position:fixed; bottom:0; left:0;
 width:100%; text-align:left; border:solid 0rem green;">

<button type="button" class="btn shadow-none bg-warning rounded" 
aria-expanded="false" data-toggle="collapse" data-target="#collapseMenu" 
style="position:fixed; top:2.5rem; right:0; /* border-radius:0rem !important; border:solid 0rem black; */ "> 
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-back" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M0 2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v2h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-2H2a2 2 0 0 1-2-2V2zm2-1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H2z"/>
</svg>
</button>

<div id="collapseMenu" class="collapse border-0">
<ul style="border:solid 0.25rem indigo !important;
height:11.5rem !important; 
overflow:auto !important; border-radius:0.2rem !important; ">

<a href="#">link_del_menu</a>

</ul>
</div>

</section>


Sign in

Il sign in rappresenta una richiesta di utenza e password per accedere al contenuto della pagina. Per ottenere questo effetto occorre usare il linguaggio php il quale usa essere dal lato server quindi funziona direttamente dal sito e il codice php non può essere visto quando si esegue il codice php che lo lancia; tuttavia con un programma apposito si può eseguire il codice php in locale tramite xampp . Una volta installato eseguire il comando per attivare il control panel drive:\xampp\xampp-control.exe trovare la icona e cliccare. Quando appare il pannello di controllo xampp cliccare start e l'ambiente è in funzione come localhost dal quale con il comando localhost/file.php digitandolo dal browser si emula il comportamento da server.

Fare attenzione a depositare il file php nella cartella htdocs.

La combinazione user password permette di gestire una sessione di file php, una volta loggato i successivi file controllano se user password sono corretti prima di evidenziare il loro contenuto .


<?php session_start(); 
if(!isset($_SESSION['UserData']['Username'])){
header("location:/index.php");
exit;
}
?>

Il codice controlla se username password combinano altrimenti si viene reindirizzati al file index.php

Nel file index.php è contenuto il form per inserire username password.


<?php session_start(); 
if(isset($_POST['Submit'])){

$logins = array('rinaldo' => '1234','username1' => 'password1','username2' => 'password2');

$Username = isset($_POST['Username']) ? $_POST['Username'] : '';
$Password = isset($_POST['Password']) ? $_POST['Password'] : '';

if (isset($logins[$Username]) && $logins[$Username] == $Password){

$_SESSION['UserData']['Username']=$logins[$Username];
header("location:file.php");
exit;
} else {

$msg="<span style='color:red'>Invalid Login Details</span>";

}
}
?> 

Il form accetta username password indi invia i dati al file file.php che controlla la validità del sign in ed esegue il codice se corrisponde altrimenti reinvia ad index.php. Ogni altro file della catena è vincolato dal login (sign in) anche se un client cerca di accedere senza usare la home page.


<form method="post" name="Login_Form">
 <table>
 <tr> <td><h3><span>Login</span></h3></td> <td></td> </tr>
 <tr> <td>Username</td> <td><input name="Username" type="text" class="Input">
	 <span style="background-color:oldlace; color:maroon;">username1</span></td></tr>
 <tr><td>Password </td><td><input name="Password" type="password" class="Input">
	 <span style="background-color:oldlace; color:maroon;">password1</span></td>
	 </tr>
 <tr> <td><input name="Submit" type="submit" value="Login" style=" cursor:pointer !important;">
	 </td><td> </td></tr>	
 </table>
</form> 

Porzione di codice html per inserire i dati username password necessari per php al fine di aprire una sessione di lavoro.


<div>
 <?php session_start(); /* Starts the session */
 session_destroy(); /* Destroy started session */
 header("location:test.php"); /* Redirect to login page */
 exit;
 ?>
</div>

L'uscita dalla sessione di lavoro viene eseguita dal codice di log out. La fase di logout può diventare molto importante dato che se una sessione viene lasciata aperta chiunque può accedere ai dati del file.php senza conoscere username e password. Per ovviare a questo inconveniente si può mettere un contatore a rovescio (ad esempio ogni secondo) a scandire la fine della sessione 2

Da tenere presente che un vero fine sessione comporterebbe una interruzione quando l'user non esegue alcuna operazione per un determinato periodo di tempo. Qui invece la sessione viene staccata comunque vadano le cose. Per questo è utile inserire un visualizzatore del tempo rimanente affinché user non sia sorpreso dalla fine della sessione.


Struttura [*] [**] [***] [****]

Arriviamo ora alla struttura html da cui normalmente si inizia ma qui appare dopo seguendo una linea di pensiero bottom-up.

Quando si crea il DGEBI si digita la combinazione ID script la quale è molto lieve però nasconde il meccanismo di funzionamento. Alcune porzioni di codice devono però assolutamente essere scritti in html. Per non parlare dei magic numbers vale a dire "trucchi" per risolvere alcuni problemi di aggiustamento strutturale (hacking) . Se non vengono sottolineati e commentati riesce poi difficile rintracciarne sia la funzione che la corretta scrittura.

<!DOCTYPE html>

Definisce il tipo di html

<html lang="it" xmlns="http://www.w3.org/1999/xhtml">

Il contenitore del codice. Qui inizia la sequenza di elementi html aventi la caratteristica di separatori o linee di serialità nella esecuzione del codice html considerare ogni elemento come una linea alla quale sono appesi come fogli dei comandi. Definire un width height di un div non significa altro che fornire una grandezza alla linea di appoggio dei comandi seguenti.

<head>

Rappresenta il posto nel quale si dovrebbero inserire i fogli di stile e altre dipendenze del programma html ad esempio i CDN come visto nella sezione asincrono tramite script si possono aggiungere a head i link necessari.

<meta charset="utf-8">

Molto importante per la decodifica dei caratteri europei.

<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

Necessario per il responsive e cross browser.

<title>

Titolo della pagina visualizzata

Allorquando siano stabilizzati i codici css js di bootstrap si possono inserire in head senza sincronizzarli.

<script src="bs/kickstart/bsnr_kickstart_test/default.js"></script>

Fornisce i codici css js base di bootstrap localizzati.

<script src="bs/kickstart/piedipagina_menu_test/default.js"></script>

Fornisce il menu in fondo alla pagina in modo da poter spostarsi tra i link interni ed esterni. Come detto è possibile con javascript creare in head una var radice che permette di personalizzare il dominio nel quale sono archiviati i files. un_esempio_di_radice

<link href="bs/kickstart/tablone_aggiunte_test/default.js" rel="stylesheet" />

Fogli di stile personalizzati

Veniamo ora ai magic numbers. Sostanzialment sono dei border posizionati in valori rem dedicati soprattutto alla gestione della visualizzazione su dispositivi come smarphone o tablet.

<body style="border-right:solid 0.2rem indigo !important;">

Aggiusta il body.

Composizione di una struttura base pagina in html


<!DOCTYPE html>	
<html lang="it" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<title></title>

<link href="http://beatsupernovarasa.altervista.org/zap/bs/tablone/default.css" rel="stylesheet" />

<style>
	html * {font-family: 'PT Mono', monospace !important;} 
</style>

</head>

<body style="border-right:solid 0.2rem indigo !important;">


<div id="bsnr_kickstart_test">bug bsnr_kickstart_test</div>
<script src="http://beatsupernovarasa.altervista.org/zap/bs/kickstart/bsnr_kickstart_test/default.js"></script>

<div id="piedipagina_menu_test">bug piedipagina_menu_test</div>
<script src="http://beatsupernovarasa.altervista.org/zap/bs/kickstart/piedipagina_menu_test/default.js"></script>


<div id="spinner" class="spinner-border text-warning" style="position:fixed; top:2.5rem; left:0; background-color:oldlace;"></div>

</body>

</html>

I due DGEBI vanno inseriti esattamente in questa posizione altrimenti non funzionano. Rispettare la precedenza prima gli id poi gli script. Lo id dello spinner agisce su una funzione script presente in bsnr_kickstart_test. In head è posizionato uno style che istruisce la pagina ad usare monospace PT. Assieme al magic patch in body questo è un fuorisacco, e un candidato ad essere inserito in un aggiornamento di bsnr_kickstart_test. 4

La struttura base qui presentata è mancante di main il quale è un contenitore delle informazioni da veicolare con la pagina. Il main è una struttura di secondo livello appartenente al user.

Linee guida per main.

Il main ha come ossatura table.

table
td
td

tablette

td
sections

Come si può vedere dallo schema c'è una main table suddivisa in due colonne di cui quella a sinistra di larghezza molto minore della seconda. All'interno della colonna di destra è contenuta un'altra tavola tablette la quale ha una sola colonna. Nella colonna tablette ci stanno le section con le informazioni.

L'elemento table è molto utile come involucro per le informazioni ma occorre lasciarlo a livello di strutturazione.


<main> 

<header class="titolo"> 
<blockquote class="text-center clearfix"> 
 <div class="overflow-auto"> 
 titolo main <span style="font-size:2rem !important; ">[table_tablette_sections]</span> 
 </div> 
</blockquote> 
</header> 

 <table class="table"> 
 <tbody> 
 <tr> 
 
 <td id="colonna-sinistra" class="p-0 colonna-sinistra"> </td>

 <td>

	 <table class="table"> 
	 <tr> 
	 <td class="clearfix"> 
		[qui le sezioni] 
	 </td> 
	 </tr> 
	 </table> 

 </td> 
 </tr> 
 </tbody> 
 </table> 
 
</main> 

Il main sarà poi "compilato" in DGEBI e richiede tablone.css

La table usa la class table di bootstrap che da sola risolve abbastanza. In tablone.css si ha una aggiunta

table{ table-layout: fixed !important; width:100% !important; }

Come sempre occorre tener presente overflow:auto !important; oppure con classe bootstrap class="overflow-auto"

Vista la composizione di table in due colonne e dato sinistra minore di destra si usa la classe colonna-sinistra


.colonna-sinistra{
background-color:rgba(255,170,0,0.25) !important; 
width:5rem !important; width:2.3rem !important; 
}

Il dato importante è width che definisce la larghezza della colonnina.

titolo main [table_tablette_sections]
[qui le sezioni]
01234567890123456789012345678901234567890123456789012345678901234567890123456789

L'inserimento delle sections presuppone esse non forino la barriera del td è necessario avere attenzione per overflow.

Fare molta attenzione ad un drawback in Chrome che riconosce (in modo errato) il segno meno come spazio e quindi non applica overflow (3)

Assemblaggio di un template generico


<!DOCTYPE html>	
<html lang="it" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<title></title>

<script src="http://beatsupernovarasa.altervista.org/radice/radice.js"></script>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>



<link href="http://beatsupernovarasa.altervista.org/zap/bs/tablone/default.css" rel="stylesheet" />

<style>
	html * {font-family: 'PT Mono', monospace !important;} 
</style>

</head>

<body style="border-right:solid 0.2rem indigo !important;">

<main> 

<header class="titolo"> 
<blockquote class="text-center clearfix"> 
 <div class="overflow-auto"> 
 titolo main <span style="font-size:2rem !important; ">[table_tablette_sections]</span> 
 </div> 
</blockquote> 
</header> 

 <table class="table"> 
 <tbody> 
 <tr> 
 
 <td id="colonna-sinistra" class="p-0 colonna-sinistra"> </td>

 <td>

	 <table class="table"> 
	 <tr> 
	 <td class="clearfix"> 
		[qui le sezioni]
		<section>
			01234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-123456789
		</section> 
	 </td> 
	 </tr> 
	 </table> 

 </td> 
 </tr> 
 </tbody> 
 </table> 
 
</main>



<div id="bsnr_kickstart_test">
bug bsnr_kickstart_test
</div>
<script src="http://beatsupernovarasa.altervista.org/zap/bs/kickstart/bsnr_kickstart_test/default.js"></script>

<div id="piedipagina_menu_test" class="versionedelprogramma">
bug piedipagina_menu_test
</div>
<script src="http://beatsupernovarasa.altervista.org/zap/bs/kickstart/piedipagina_menu_test/default.js"></script>


<aside>
 <span class="position-fixed bottom-0 right-0 m-1 versionedelprogramma">
 <span onclick="showElement()" class="vedi"> </span>
 <span onclick="hideElement()" class="nascondi"> </span>
 </span>
</aside>

<div id="spinner" class="spinner-border text-warning" 
style="position:fixed; top:2.5rem; left:0; 
background-color:oldlace;"></div>

</body>

</html>

Come si può notare la colonnina è lasciata vuota, vale a dire a disposizione di codice. Qui si può inserire un DGEBI che utilizza un array di immagini come per fornire una serie di immagini come sfondo.

5 Un'altra versione dello stesso framework in toggle dove il menu a piedi pagina può essere rimosso per esigenze di migliore visualizzazione appunto con tasto toggle . copy

	<!DOCTYPE html>	
	<html lang="it" xmlns="http://www.w3.org/1999/xhtml">
	<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
	
	<title> 1245 TEMPLATE MAGIC LIGHT 20201220</title>
	
	<script src="http://beatsupernovarasa.altervista.org/radice/radice.js"></script>
	
	</head>
	
	<body>
	
	<main> 
	
	
	<header class="titolo"> 
	<blockquote class="text-center"> 
	 <div class="overflow-auto"> 
	 titolo main <span style="font-size:2rem !important; ">[table_tablette_sections]</span> 
	 </div> 
	</blockquote> 
	</header> 
	
	 <table class="table"> 
	 <tbody> 
	 <tr> 
	 
	 <td id="colonna-sinistra" class="p-0 colonna-sinistra"> </td>
	
	 <td>
	
		 <table class="table"> 
		 <tr> 
		 <td> 
			[qui le sezioni]
			<section>
				01234567890123456789012345678901234567890123456789012345678901234567890123456789
			</section> 
		 </td> 
		 </tr> 
		 </table> 
	
	 </td> 
	 </tr> 
	 </tbody> 
	 </table> 
	 
	</main>
	
	
	
	<div id="bsnr_kickstart_test">bug bsnr_kickstart_test</div>
	
	<div id="piedipagina_menu_test" class="versionedelprogramma">bug piedipagina_menu_test</div>
	
	<div id="show_hide">bug show_hide</div>
	
	<div id="spinner" class="spinner-border text-warning spinner_dashed"></div>
	
	<script src="http://beatsupernovarasa.altervista.org/zap/bs/kickstart/default.js"></script>
	
	
	</body>
	
	</html>
	
	



<!DOCTYPE html>
<html id="html" lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta charset="utf-8">
 <meta name="viewport" 
 content="width=device-width, initial-scale=1, shrink-to-fit=no">


 <title>
 1700 bmu_togglato --- MAGIC PATCHES 20201228

 20191119f_1-CREEK 20200704-0810_by_odlanir - Altervista
 </title>

<!-- root link -->
<!-- http://beatsupernovarasa.altervista.org/zap/ -->
 <script src="http://beatsupernovarasa.altervista.org/radice/radice.js"></script>
<style>
/* queste variazioni o aggiunte vanno archiviate in BS/DEFAULT.JS */
.promemoria{border:solid 0rem red !important;
border-left:solid 0.5rem indigo !important;
 }

.promemoria:hover .text-promemoria{
width:50%;height:auto;
 animation: fadeIn ease 4.1s; 
 -webkit-animation: fadeIn ease 4.1s; 
 -moz-animation: fadeIn ease 4.1s; 
 -o-animation: fadeIn ease 4.1s; 
 -ms-animation: fadeIn ease 4.1s;
 overflow:auto !important;
 font-style:normal !important;
 border-left:solid 1rem indigo !important;
 
display:block;
}

.text-promemoria{display:none; background-color:var(--bs-indigo); color:oldlace;border-radius:0.2rem;}

 .dissolvenza { 
 animation: fadeIn ease 2.5s; 
 -webkit-animation: fadeIn ease 2.5s; 
 -moz-animation: fadeIn ease 2.5s; 
 -o-animation: fadeIn ease 2.5s; 
 -ms-animation: fadeIn ease 2.5s; 
 } 
 
 
 @keyframes fadeIn { 
 0% {opacity:0;} 
 100% {opacity:1;} 
 } 
 


</style>

<style>
:root {background-color:rgba(255,170,0,0.5); }

html * {font-family:'PT Mono' !important;}

body{ background-color:default; }
</style>

</head>


<!-- body with magic patch style -->
<body id="body" onload="pausa()" style="visibility:hidden;">
<main>




</main>

<div id="bsnr_kickstart_test">bug bsnr_kickstart_test</div>
<script src="http://beatsupernovarasa.altervista.org/zap/bs/kickstart/bsnr_kickstart_test/default.js"></script>

<script src="http://beatsupernovarasa.altervista.org/zap/bs/tablone/default.js"></script>



<div id="piedipagina_menu_togglato" class="vedoXoY" >bug piedipagina_menu_togglato</div>
<script>
document.getElementById("piedipagina_menu_togglato").innerHTML=
' <section style="position:fixed; bottom:0; left:0;'+
' border-bottom:solid 1rem transparent !important; '+
' border-left:solid 0.5rem transparent !important;'+
' border-right:solid 0.5rem transparent !important;'+
 
' width:100%; text-align:left; "> '+

' <span style="margin-right:2.3rem !important;'+
' padding:0.2rem;'+
' background-color:oldlace; '+
' border-radius:0.4rem !important;'+
' border:solid 0.05rem navy !important;"> '+ 	
' '+ 	

' <button type="button" class="btn shadow-none bg-warning rounded" '+ 	
' data-toggle="collapse" data-target="#collapsemenuapdp" '+ 	
' aria-expanded="false" '+ 	
' style="position:fixed; top:2.5rem; right:0; /* border-radius:0rem !important; border:solid 0rem black; */ "> '+ 	
' '+ 	
' <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-back" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M0 2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v2h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-2H2a2 2 0 0 1-2-2V2zm2-1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H2z"/> '+ 	
' </svg> '+ 	' '+ 	
' </button> '+	 	


' <span style="visibility:hidden !important;">menu</span> '+


' <a href="#fine"> '+ 	
' <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none" /> <path fill="maroon" d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z"/> '+ 	
' </svg></a> '+ 	
' <span style="visibility:hidden !important;">menu</span> '+ 	
' '+ 	

' <a href="#"> '+ 	
' <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"> <path d="M0 0h24v24H0V0z" fill="none"/> <path fill="maroon" d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z"/> '+ 	
' </svg></a> '+ 	
' '+	 	
' </span> '+ 

' '+ 	' '+ 	' '+ 	' '+ 	


' '+ 	' '+ 	
' '+ 	' '+ 	

' <div id="collapsemenuapdp" '+
' class="collapse dropdown-menuY border-0" '+ 	
' style=" padding:0rem !important; '+ 	
' '+ 	
' background-color:rgba(0,85,85,0); '+ 	
' border-left:solid 0.1rem rgba(255,170,0,1) !important; '+ 	
' border-radius:0rem !important; '+ 	
' background-color:rgba(255,170,0,0.85); "> '+ 


' <ul style="border:solid 0.25rem indigo !important; '+
' height:11.5rem !important; '+
' overflow:auto !important; border-radius:0.2rem !important; ">'+


' 	<a class="btn-warning rounded" '+ 
' href="#argomento_spinner"> '+ 	
' 	<span class="rounded p-1 fw-bold" style="background-color:indigo;color:oldlace;border:solid 0.1rem indigo;">'+
' spinner</span></a> '+


' 	<a class="btn-warning rounded" '+ 
' href="#argomento_asincrono"> '+ 	
' 	<span class="rounded p-1 fw-bold" style="background-color:indigo;color:oldlace;border:solid 0.1rem indigo;">'+
' asincrono</span></a> '+


' 	<a class="btn-warning rounded" '+ 
' href="#argomento_font"> '+ 	
' 	<span class="rounded p-1 fw-bold" style="background-color:indigo;color:oldlace;border:solid 0.1rem indigo;">'+
' font</span></a> '+


' 	<a class="btn-warning rounded" '+ 
' href="#argomento_collapse"> '+ 	
' 	<span class="rounded p-1 fw-bold" style="background-color:indigo;color:oldlace;border:solid 0.1rem indigo;">'+
' collapse</span></a> '+



' 	<a class="btn-warning rounded" '+ 
' href="#argomento_sign_in"> '+ 	
' 	<span class="rounded p-1 fw-bold" style="background-color:indigo;color:oldlace;border:solid 0.1rem indigo;">'+
' sign_in</span></a> '+




' 	<a class="btn-warning rounded" '+ 
' href="#argomento_struttura_base"> '+ 	
' 	<span class="rounded p-1 fw-bold" style="background-color:indigo;color:oldlace;border:solid 0.1rem indigo;">'+
' struttura</span></a> '+



' <p class="my-1"><hr/></p> '+
' <span style="font-size:small !important;font-weight:bold !important;">'+
' note: </span> '+
' '+
' <a href="#nota_001" class="note-cerchietto mr-1"> '+
' 1 </a> '+

' <a href="#nota_002" class="note-cerchietto mr-1"> '+
' 2 </a> '+

' <a href="#nota_003" class="note-cerchietto mr-1"> '+
' 3 </a> '+


' <a href="#nota_004" class="note-cerchietto mr-1"> '+
' 4 </a> '+


' <a href="#nota_005" class="note-cerchietto mr-1"> '+
' 5 </a> '+

' <a href="#nota_006" class="note-cerchietto mr-1"> '+
' 6 </a> '+



' '+
' '+
' '+


' 	 '+ 	' '+ 	
' </ul> '+

' <span class="p-0" style="font-size:small !important; background-color:indigo;color:oldlace;">	 '+ 	
' alfabeta 20201228_1530 '+
' </span>	 '+


' 	<a class="ml-2 btn-warning rounded" '+ 
' href="http://venexiatre.altervista.org/WORKOU/OGGI/20191119/20191119f_1-CREEK.html"> '+ 	
' 	<span class="rounded p-1 fw-bold" style="background-color:oldlace;color:indigo;border:solid 0.1rem indigo;box-shadow:0.2rem 0.2rem 0.4rem black !important;">'+
' home_page</span></a> '+ 

' </div> '+
' '+
' </section> '+

'';

/* vedi nascondi bottoni separati 
 
 function showElement() { 
			 element = document.querySelector('.versionedelprogramma'); 
			 element.style.visibility = 'visible'; 
		 } 
 
 function hideElement() { 
			 element = document.querySelector('.versionedelprogramma'); 
			 element.style.visibility = 'hidden'; 
		 } 
 */
 
 
 




/*
How to copy TEXT to Clipboard on Button-Click
A Pen By Shaik Maqsood

https://codepen.io/shaikmaqsood/pen/XmydxJ
*/

function copyToClipboard(element) {
var $temp = $("<input>");
$("body").append($temp);
$temp.val($(element).text()).select();
document.execCommand("copy");
$temp.remove();
}
</script>




<span id="vedoXoY">bug vedoXoY</span>

<script>
document.getElementById("vedoXoY").innerHTML=
' '+
' '+
' <style> '+
' '+
' .posvedoXoY{'+
' position:fixed !important;'+
' right:0 !important;'+
' bottom:0 !important;'+
' color:transparent !important;'+
' margin-right: 0.5rem !important;'+
' margin-bottom: 1.0rem !important;'+

' '+
' }'+
' '+
' .vediY{ '+
' cursor:pointer !important;'+
' background-color:indigo !important;'+
' background-color:rgba(75,0,130,1) !important;'+
' border:solid 0.12rem rgba(75,0,130,1) !important;'+
' '+
' }'+
' '+
' .vediX{ '+
' cursor:pointer !important;'+
' background-color:orange !important;'+
' background-color:rgba(255,165,0,1) !important;'+
' border:solid 0.12rem rgba(75,0,130,1) !important;'+
' '+
' }'+

' '+
' '+
' '+
' </style> '+
' '+
' '+

'<span onclick="showElement()" class="vedi nascondiY vediY posvedoXoY">Y</span> '+

'<span onclick="hideElement()" class="nascondi nascondiX vediX posvedoXoY">X</span> '+

' '
;

 function hideElement() { 
 element = document.querySelector('.vedoXoY'); 
 element.style.visibility = 'hidden'; 
 element = document.querySelector('.nascondiX'); 
 element.style.visibility = 'hidden'; 
 element = document.querySelector('.vediY'); 
 element.style.visibility = 'visible'; 
 
 } 
 
 
 function showElement() { 
 element = document.querySelector('.vedoXoY'); 
 element.style.visibility = 'visible';
 element = document.querySelector('.vediX'); 
 element.style.visibility = 'visible';
 element = document.querySelector('.nascondiY'); 
 element.style.visibility = 'hidden';
 
 } 

</script>








<div id="divpausa" style="position:fixed;
	top:2.5rem;left:0;
	top:50%;left:50%;
	background-color:var(--bs-white) !important;
	margin-left:-8.5rem !important; margin-top:-2rem !important; 
	border-radius:0.2rem !important; visibility:visible !important;">
	<span id="pausa" class="spinner-border text-warning"></span>
	
	<span style="background-color:transparent !important;">
	<span id="Loading"
	style="color:var(--bs-indigo) !important; font-size:2rem !important;">
	Loading...</span>
	<span id="percento" 
	style="color:var(--bs-indigo) !important;
	font-size:2rem !important;font-variant:small-caps !important;">
	</span>
	</span>
	</div> 


	 <script>
	 
	function pausa(){
	if (document.all){} 
	else if 
	(document.getElementById)
	 { 
	 document.getElementById("pausa").style.visibility="hidden";
	 document.getElementById("percento").style.visibility="hidden";
	 document.getElementById("Loading").style.visibility="hidden";
	 document.getElementById("divpausa").style.visibility="hidden";
	
	 document.getElementById("body").style.visibility="visible";
	 document.getElementById("body").style.backgroundColor = 'default';
	 document.getElementById("html").style.backgroundColor = 'transparent';
	
	 }
	
	}
	
	var percento=document.getElementById("percento");
	var contatore=1; 
	var intervallo=setInterval( function() { percento.innerHTML=contatore+"%"; 
	contatore++; if (contatore===101) {clearInterval(intervallo);} 
	} , 9000) 
	
	 </script>
 

<div id="fine"></div>
</body>
</html>



	

Alcune osservazioni vanno fatte per inserimento immagini. Se la definizione è alta in genere width 100percento va bene. Non altrettanto si può dire quando abbiamo dei francobolli a bassissima risoluzione che portati a 100 risulterebbero sgranati e pixellati. Ovviare a questo effetto con width auto.


template



<!DOCTYPE html>

<html id="html" lang="it" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<title> 2200 struttura base 20201227</title>

<script src="http://beatsupernovarasa.altervista.org/radice/radice.js"></script>

<style>
:root {background-color:rgba(255,170,0,0.5);}

body{ background-color:default; }
</style>

</head>

<body id="body" onload="pausa()" style="visibility:hidden;">

<main class="px-5"> 


<header class="titolo"> 
<blockquote class="text-center"> 
 <div class="overflow-auto"> 
 titolo <span style="font-size:1.25rem !important; ">[...]</span> 
 </div> 
</blockquote> 
</header> 

<table class="table"> 
<tbody> 
<tr> 
 
<td id="colonna-sinistra" class="p-0 colonna-sinistra"> </td>
 
<td>
 
<table class="table"> 
<tr> 
<td> 
 
 <section>
[qui le sezioni o gli articoli] 
 </section> 
</td> 
</tr> 
</table> 
 
</td> 
</tr> 
</tbody> 
</table> 
 
 
 
</main>



<div id="bsnr_kickstart_test">bug bsnr_kickstart_test</div>

<div id="piedipagina_menu_postcards" class="versionedelprogramma">bug piedipagina_menu_postcards</div>

<div id="show_hide_postcards">bug show_hide_postcards</div>

<script src="http://beatsupernovarasa.altervista.org/zap/bs/kickstart/default.js"></script>



<script>

document.getElementById("piedipagina_menu_postcards").innerHTML=
' <section style="position:fixed; bottom:0; left:0;'+
' width:100%; text-align:left; border:solid 1rem transparent;"> '+

' <span style="margin-right:2.3rem !important;'+
' padding:0.2rem;'+
' background-color:oldlace; '+
' border-radius:0.4rem !important;'+
' border:solid 0.05rem navy !important;"> '+ 
' '+ 

' <button type="button" class="btn shadow-none bg-warning rounded" '+ 
' data-toggle="collapse" data-target="#collapsemenuapdp" '+ 
' aria-expanded="false" '+ 
' style="position:fixed; top:2.5rem; right:0; /* border-radius:0rem !important; border:solid 0rem black; */ "> '+ 
' '+ 
' <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-back" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M0 2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v2h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-2H2a2 2 0 0 1-2-2V2zm2-1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H2z"/> '+ 
' </svg> '+ ' '+ 
' </button> '+ 


' <span style="visibility:hidden !important;">menu</span> '+


' <a href="#fine"> '+ 
' <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none" /> <path fill="maroon" d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z"/> '+ 
' </svg></a> '+ 
' <span style="visibility:hidden !important;">menu</span> '+ 
' '+ 

' <a href="#"> '+ 
' <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"> <path d="M0 0h24v24H0V0z" fill="none"/> <path fill="maroon" d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z"/> '+ 
' </svg></a> '+ 
' '+ 
' </span> '+ 

' '+ 
' '+ 
' '+ 
' '+ 

' '+ 
' '+ 
' '+ 
' '+ 

' <div id="collapsemenuapdp" '+
' class="collapse dropdown-menuY border-0" '+ 
' style=" padding:0rem !important; '+ 
' '+ 
' background-color:rgba(0,85,85,0); '+ 
' border-left:solid 0.1rem rgba(255,170,0,1) !important; '+ 
' border-radius:0rem !important; '+ 
' background-color:rgba(255,170,0,0.85); "> '+ 


' <ul style="border:solid 0.25rem indigo !important; '+
' height:11.5rem !important; '+
' overflow:auto !important; border-radius:0.2rem !important; ">'+


' <a class="btn-warning rounded" '+ 
' href="index.html"> '+ 
' <span class="rounded p-1 fw-bold" style="background-color:indigo;color:oldlace;border:solid 0.1rem indigo;">'+
' home_page</span></a> '+

' '+
' '+
' '+


' '+ 
' '+ 
' </ul> '+

' <span class="p-0" style="font-size:small !important; background-color:indigo;color:oldlace;"> '+ 
' versione bs5 con aggiunte alfabeta 20201227_2200 '+
' </span> '+


' <a class="ml-2 btn-warning rounded" '+ 
' href="index.html"> '+ 
' <span class="rounded p-1 fw-bold" style="background-color:oldlace;color:indigo;border:solid 0.1rem indigo;box-shadow:0.2rem 0.2rem 0.4rem black !important;">'+
' home_page</span></a> '+ 

' </div> '+
' '+
' </section> '+

'';


 
document.getElementById("show_hide_postcards").innerHTML=
'<span class="position-fixed bottom-0 right-0 m-1 versionedelprogramma" '+
' style="border:solid 1rem transparent;"> '+
'<span onclick="hideElement()" class="nascondi" style="color:transparent !important;" >X</span> '+
'<span onclick="showElement()" class="vedi" style="color:transparent !important;" >Y</span> '+
'</span> '+

' '
;

 
 function showElement() { 
 element = document.querySelector('.versionedelprogramma'); 
 element.style.visibility = 'visible'; 
 } 
 
 function hideElement() { 
 element = document.querySelector('.versionedelprogramma'); 
 element.style.visibility = 'hidden'; 
 } 
 


</script>


<div id="divpausa" style="position:fixed;
top:2.5rem;left:0;
top:50%;left:50%;
background-color:var(--bs-white) !important;
margin-left:-8.5rem !important; margin-top:-2rem !important; 
border-radius:0.2rem !important; visibility:visible !important;">
<span id="pausa" class="spinner-border text-warning"></span>

<span style="background-color:transparent !important;">
<span id="Loading"
style="color:var(--bs-indigo) !important; font-size:2rem !important;">
Loading...</span>
<span id="percento" 
style="color:var(--bs-indigo) !important;
font-size:2rem !important;font-variant:small-caps !important;">
</span>
</span>
</div> 



 <script>
 
function pausa(){
if (document.all){} 
else if 
(document.getElementById)
 { 
 document.getElementById("pausa").style.visibility="hidden";
 document.getElementById("percento").style.visibility="hidden";
 document.getElementById("Loading").style.visibility="hidden";
 document.getElementById("divpausa").style.visibility="hidden";

 document.getElementById("body").style.visibility="visible";
 document.getElementById("body").style.backgroundColor = 'default';
 document.getElementById("html").style.backgroundColor = 'transparent';

 }

}

var percento=document.getElementById("percento");
var contatore=1; 
var intervallo=setInterval( function() { percento.innerHTML=contatore+"%"; 
contatore++; if (contatore===101) {clearInterval(intervallo);} 
} , 9000) 

 </script>

</body>

</html>




Annotazioni 0

(0)

Come gestire le note


<a id="nota_indietro_000" href="#nota_000" 
class="note-cerchietto">
0
</a>


<p id="nota_000" class="my-0"></p>
<a class="text-link-note" href="#nota_indietro_000">
(0)</a>

(1)

Questo è un esempio del funzionamento di Date() sincronizzato ogni secondo

document.getElementById("test_date").innerHTML=Date(); bug test_date_statico

Questo è un dato statico che fotografa il momento in cui abbiamo caricato la pagina. Applicato al postfisso funziona perfettamente dato che è dinamico: eseguendo un refresh della pagina si noterà un incremento del valore assoluto dato dallo scorrere del tempo in secondi. Inserendo questo valore nella ricerca del file esterno si ottiene praticamente lo stesso risultato del numero random.


(2)

 var elem = document.getElementById("incremento");
 var numero = 0; 
 var intervallo = setInterval(contatore, 1000);
 function contatore() {
 numero=numero+1;
 elem.innerHTML = numero;
 
 if (numero==40) {
 window.location.href="test.php" 
 }
 }

Lo script esegue un incremento ogni secondo fino a 5sec dopodiché esegue test.php oppure si ferma il conteggio.


 if (numero==5) {
 // window.location.href="test.php" 
 clearInterval(intervallo);
	}
	

Con un ulteriore sofisticazione si può visualizzare il conto alla rovescia


(3)

Da notare un possibile problema di rendering dato dalla comune idea che una string viene spezzata dal browser quando trova uno space il quale fa da separazione per individuare le parole in una proposizione. Ora appare un behavior non congruo con questo comportamento tra 0123456789-0123456789 e 01234567890123456789 oppure 0123456789 0123456789 , normalmente le prime due string sono una unica parola mentre la terza string è composta da due parole tuttavia nel browser Chrome la string uno è formata da due parole e solo la seconda è interpretata come una singola string.


(4)

Alcuni problemi con il footer si rilevano dato che il collapse ha una priorità la quale impedisce di accedere ad alcune funzionalità del programma. Occorre quindi procedere con il hide del componente bloccante.

vai all'esempio [toggle]

Il toggle utilizza un solo bottone per attivare o disattivare una determinata attività.


<span class="versionedelprogramma"=VEDI/NASCONDI</span>

<span class="position-fixed bottom-0 right-0 m-1 versionedelprogramma">
	<span onclick="showElement()" class="vedi"> </span>
	<span onclick="hideElement()" class="nascondi"> </span>
</span= 
function showElement() { 
	element = document.querySelector('.versionedelprogramma'); 
	element.style.visibility = 'visible'; 
} 

function hideElement() { 
	element = document.querySelector('.versionedelprogramma'); 
	element.style.visibility = 'hidden'; 
} 


Un ulteriore miglioramento avviene se i due pulsanti X e Y sono fatti visualmente coincidere effettuando un unico pulsante toggle ovvero attiva/disattiva

<div class="vedoXoY"></div> <


	<span id="vedoXoY">bug vedoXoY</span>

	<script>
	document.getElementById("vedoXoY").innerHTML=
	' '+
	' '+
	' <style> '+
	' '+
	' .posvedoXoY{'+
	' position:fixed !important;'+
	' right:0 !important;'+
	' bottom:0 !important;'+
	' color:transparent !important;'+
	' margin-right: 0.5rem !important;'+
	' margin-bottom: 1.0rem !important;'+
	
	' '+
	' }'+
	' '+
	' .vediY{ '+
	' cursor:pointer !important;'+
	' background-color:indigo !important;'+
	' background-color:rgba(75,0,130,1) !important;'+
	' border:solid 0.12rem rgba(75,0,130,1) !important;'+
	' '+
	' }'+
	' '+
	' .vediX{ '+
	' cursor:pointer !important;'+
	' background-color:orange !important;'+
	' background-color:rgba(255,165,0,1) !important;'+
	' border:solid 0.12rem rgba(75,0,130,1) !important;'+
	' '+
	' }'+
	
	' '+
	' '+
	' '+
	' </style> '+
	' '+
	' '+
	
	'<span onclick="showElement()" class="vedi nascondiY vediY posvedoXoY">Y</span> '+
	
	'<span onclick="hideElement()" class="nascondi nascondiX vediX posvedoXoY">X</span> '+
	
	' '
	;
	
	 function hideElement() { 
	 element = document.querySelector('.vedoXoY'); 
	 element.style.visibility = 'hidden'; 
	 element = document.querySelector('.nascondiX'); 
	 element.style.visibility = 'hidden'; 
	 element = document.querySelector('.vediY'); 
	 element.style.visibility = 'visible'; 
	 
	 } 
	 
	 
	 function showElement() { 
	 element = document.querySelector('.vedoXoY'); 
	 element.style.visibility = 'visible';
	 element = document.querySelector('.vediX'); 
	 element.style.visibility = 'visible';
	 element = document.querySelector('.nascondiY'); 
	 element.style.visibility = 'hidden';
	 
	 } 
	
	</script>
	


(5)

Codice per copiare velocemente una porzione di testo.


	<button onclick="copyToClipboard('#copia')">
	<i>copy</i>
	</button>
	<p id="copia">
	testo da copiare
	</p>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
	<script>
	/*
	How to copy TEXT to Clipboard on Button-Click
	A Pen By Shaik Maqsood
	
	https://codepen.io/shaikmaqsood/pen/XmydxJ
	*/
	
	function copyToClipboard(element) {
	var $temp = $("<input>");
	$("body").append($temp);
	$temp.val($(element).text()).select();
	document.execCommand("copy");
	$temp.remove();
	}
	</script> 

La funzione copyToClipboard funziona con un id occorre quindi fare molta attenzione a non duplicare gli ids.


(6)

jQuery bootstrap piedipagina show_hide tablone links bscompatto


(7)

ascii code (da 32 a 127) visualizzati secondo font-family predisposta

	32		space
	33	!	exclamation mark
	34	"	quotation mark
	35	#	number sign
	36	$	dollar sign
	37	%	percent sign
	38	&	ampersand
	39	'	apostrophe
	40	(	left parenthesis
	41	)	right parenthesis
	42	*	asterisk
	43	+	plus sign
	44	,	comma
	45	-	hyphen-minus
	46	.	full stop
	47	/	solidus
	48	0	digit zero
	49	1	digit one
	50	2	digit two
	51	3	digit three
	52	4	digit four
	53	5	digit five
	54	6	digit six
	55	7	digit seven
	56	8	digit eight
	57	9	digit nine
	58	:	colon
	59	;	semicolon
	60	<	less-than sign
	61	=	equals sign
	62	>	greater-than sign
	63	?	question mark
	64	@	commercial at
	65	A	Latin capital letter A
	66	B	Latin capital letter B
	67	C	Latin capital letter C
	68	D	Latin capital letter D
	69	E	Latin capital letter E
	70	F	Latin capital letter F
	71	G	Latin capital letter G
	72	H	Latin capital letter H
	73	I	Latin capital letter I
	74	J	Latin capital letter J
	75	K	Latin capital letter K
	76	L	Latin capital letter L
	77	M	Latin capital letter M
	78	N	Latin capital letter N
	79	O	Latin capital letter O
	80	P	Latin capital letter P
	81	Q	Latin capital letter Q
	82	R	Latin capital letter R
	83	S	Latin capital letter S
	84	T	Latin capital letter T
	85	U	Latin capital letter U
	86	V	Latin capital letter V
	87	W	Latin capital letter W
	88	X	Latin capital letter X
	89	Y	Latin capital letter Y
	90	Z	Latin capital letter Z
	91	[	left square bracket
	92	\	reverse solidus
	93	]	right square bracket
	94	^	circumflex accent
	95	_	low line
	96	`	grave accent
	97	a	Latin small letter a
	98	b	Latin small letter b
	99	c	Latin small letter c
	100	d	Latin small letter d
	101	e	Latin small letter e
	102	f	Latin small letter f
	103	g	Latin small letter g
	104	h	Latin small letter h
	105	i	Latin small letter i
	106	j	Latin small letter j
	107	k	Latin small letter k
	108	l	Latin small letter l
	109	m	Latin small letter m
	110	n	Latin small letter n
	111	o	Latin small letter o
	112	p	Latin small letter p
	113	q	Latin small letter q
	114	r	Latin small letter r
	115	s	Latin small letter s
	116	t	Latin small letter t
	117	u	Latin small letter u
	118	v	Latin small letter v
	119	w	Latin small letter w
	120	x	Latin small letter x
	121	y	Latin small letter y
	122	z	Latin small letter z
	123	{	left curly bracket
	124	|	vertical line
	125	}	right curly bracket
	126	~	tilde
	127	DEL	 	 	 	 
	
	

Il codice ascii continua fino a 255.


bug bsnr_kickstart_test
bug piedipagina_menu_togglato
bug vedoXoY
Loading...