Re: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-13 Per discussione Alessandro Pellizzari

On 11/07/2018 18:20, Gollum1 wrote:


RowArray.sort(function(a[Column], b[Column]) {return number(a) - number (b)})

ma ottengo un errore nella chiamata della funzione di ordinamento:


a e b sono parametri della funzione, non puoi farci operazioni sopra:

RowArray.sort(function(a,b) {
  return number(a[Column]) - number(b[Column])
})

Puoi anche andare oltre e fare

function sortingByNumberCol(col) {
  return function(a,b) {
return number(a[col]) - number(b[col]))
  }
}

Da usare come

RowArray.sort(sortingByNumberCol(2))

che è più pulito che usare una global.

Bye.



Re: Fwd: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-11 Per discussione Gollum1
Il giorno mer 11 lug 2018 alle ore 19:42 Gollum1
 ha scritto:
>
> Il giorno mer 11 lug 2018 alle ore 19:17 Gollum1
>  ha scritto:
> > figata a e b sono i due campi completi... l'estrazione la faccio
> > dentro la funzione... ok...
> >
> > ora devo capire se posso passare un terzo parametro, che sarebbe la 
> > colonna...
>
> che non è necessario passare, in quanto risulta come fosse una
> variabile globale, visto che è definita prima della chiamata di
> funzione, e la funzione è inline, all'interno ne trovo il contenuto...
>
> ora procedo a riordinare e poi vediamo se funziona e quanto tempo ci
> mette :D

FUNZIONA!

e anche il reinserimento nella tabella originale è riusltato ancora
più banale e performante della precedente soluzione, avendo estratto i
singoli campi per procedere all'ordinamento, nell'oggetto  vado a
ripristinare i singoli campi , e per ogni td in realtà ripristino
solo la parte innerHTML, quindi a torta finita, non mi sono neppure
perso tutte le classi che avevo di contorno per colorare in modo
alternato le righe... e l'ordinamente è dell'ordine di un o due
secondi, l'inversione di ordinamento poi, è praticamente immediata...

Sono molto soddisfatto del lavoro (che può essere ancora migliorato
stilisticamente, ma con il tempo, nel frattempo funziona).

Grazie a tutti per il supporto e le preziosissime informazioni.


Per chi volesse vedere il codice risultante, ho allegato lo script,
per un filtro che imposta google, ho dovuto modificare l'estensione,
.j.s invece del classico .js

Commenti ben accetti (considerate che è praticamente il mio primo
lavoro in javascript, se non roba di 3 o 4 righe).

Byez
-- 
Gollum1 - http://www.gollumone.it
Tesoro, dov'é il mio teoro...


webcpmi.j.s
Description: Binary data


Re: Fwd: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-11 Per discussione Gollum1
Il giorno mer 11 lug 2018 alle ore 19:17 Gollum1
 ha scritto:
> figata a e b sono i due campi completi... l'estrazione la faccio
> dentro la funzione... ok...
>
> ora devo capire se posso passare un terzo parametro, che sarebbe la colonna...

che non è necessario passare, in quanto risulta come fosse una
variabile globale, visto che è definita prima della chiamata di
funzione, e la funzione è inline, all'interno ne trovo il contenuto...

ora procedo a riordinare e poi vediamo se funziona e quanto tempo ci
mette :D

Tnx
-- 
Gollum1 - http://www.gollumone.it
Tesoro, dov'é il mio teoro...



Re: Fwd: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-11 Per discussione Gollum1
Il giorno mer 11 lug 2018 alle ore 19:15 Alessandro Pellizzari
 ha scritto:
>
> On 11/07/2018 17:20, Gollum1 wrote:
>
> > Maledizione, con il pc, mi faccio fregare sempre sui destinatari...
> > chiedo perdono ad Alessandro per il messaggio in privato.
>
> No problem :)
>
> > in pratica ogni riga dell'array è un array a sua volta di elementi (o
> > un dizionario, se ci si trova meglio con questo,
>
> Tecnicamente è un Object
>
> > ma come si comporta
> > sort con i dizionari?)
>
> Come in PHP: passi a sort una funzione che prende due parametri.
> Se a va prima di b, ritorni -1.
> Se sono uguali, ritorni 0.
> Se b va prima di a ritorni 1.
>
> A quel punto nella funzione controlli quello che vuoi:
>
> data.sort(function(a,b) {
>return a.id < b.id ? -1 : 1
> })

figata a e b sono i due campi completi... l'estrazione la faccio
dentro la funzione... ok...

ora devo capire se posso passare un terzo parametro, che sarebbe la colonna...


-- 
Gollum1 - http://www.gollumone.it
Tesoro, dov'é il mio teoro...



Re: Fwd: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-11 Per discussione Alessandro Pellizzari

On 11/07/2018 17:20, Gollum1 wrote:


Maledizione, con il pc, mi faccio fregare sempre sui destinatari...
chiedo perdono ad Alessandro per il messaggio in privato.


No problem :)


in pratica ogni riga dell'array è un array a sua volta di elementi (o
un dizionario, se ci si trova meglio con questo, 


Tecnicamente è un Object


ma come si comporta
sort con i dizionari?)


Come in PHP: passi a sort una funzione che prende due parametri.
Se a va prima di b, ritorni -1.
Se sono uguali, ritorni 0.
Se b va prima di a ritorni 1.

A quel punto nella funzione controlli quello che vuoi:

data.sort(function(a,b) {
  return a.id < b.id ? -1 : 1
})

O qualcosa del genere. :)

Occhio che il sort è in place, quindi modifica l'array sorgente.

Bye.



Re: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-11 Per discussione Gollum1
> mi pare di capire (un po' come nella funzione map che mi hai proposto)
> che in qualche modo mi basta definire una funzione con due argomenti
> qualsiasi, e nel corpo della funzione indicare come è il sistema di
> confronto tra questi due elementi... ho compreso giusto, o sto
> sbagliando ancora?

Evidentemente qualcosa non mi è ancora chiaro...
ora mi trovo un un array, in cui ogni campo dell'array è composto da 3
array (array di array) di questo formato:

["", "un testo", "32003"]

ok... se RowArray è l'array che devo ordinare,
e FieldArray è l'array contenuto in ogni campo di RowArray...

come devo mettere la funzione di sort?, prendendo in esame, che io
voglia ordinare per il campo Column=2 (l'ultimo campo dell'array
FieldArray), che dovrebbe essere quindi un campo numerico...

RowArray.sort(function(a, b) {return number(a) - number (b)})

ma non riesco a capire come dirgli che quelli che deve confrontare
sono i campi Column=2...

ho provato con

RowArray.sort(function(a[Column], b[Column]) {return number(a) - number (b)})

ma ottengo un errore nella chiamata della funzione di ordinamento:

Uncaught SyntaxError: Unexpected token [

dove la "[" è quella vicina a a, nella chiamata di funzione...

cosa mi sfugge?

Tnx
-- 
Gollum1 - http://www.gollumone.it
Tesoro, dov'é il mio teoro...



Fwd: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-11 Per discussione Gollum1
Maledizione, con il pc, mi faccio fregare sempre sui destinatari...
chiedo perdono ad Alessandro per il messaggio in privato.

-- Forwarded message -
From: Gollum1 
Date: mer 11 lug 2018 alle ore 17:44
Subject: Re: [OT - javascrpt] attivare un div inserito dinamicamente.
To: 


Il giorno mer 11 lug 2018 alle ore 17:18 Alessandro Pellizzari
 ha scritto:
>
> On 11/07/2018 10:20, Gollum1 wrote:
>
> > Ora mi trovo un attimo in imbarazzo... il codice sembra ok, ma non
> > riesco a capire come dovrei affrontare come ordinare per i campi che
> > sono in realtà contenuti nella stringa che è contenuto nell'array...
>
> Il mio server strippa gli allegati, quindi non vedo il tuo codice, ma se
> hai preso l'innerHtml dei vari tr non ne verrai mai fuori.

Non credo che sia solo il tuo server, ma forse il server di debian,
perché non lo vedo neppure io.

No, in realtà non ho l'inneHTML di ogni singolo campo, ma ho l'intera
struttura di tutta la 

quindi ho una riga di tabella per ogni record dell'array.

Non volendo interpellare ancora una volta il DB (visto che ho già
costruito la tabella al primo giro), credo che la soluzione migliore
sia comunque molto simile a quella che mi stai descrivendo tu.
> Se puoi, prendi i dati che arrivano dal server, e infilali in qualche
> modo in un array così:
>
> let dati = [
>{
>  id: 1,
>  titolo: 'Il primo titolo',
>  
>},
>{
>  id: 2,
>  titolo: 'Il secondo titolo',
>  ...
>},
>...
> ]

in pratica ogni riga dell'array è un array a sua volta di elementi (o
un dizionario, se ci si trova meglio con questo, ma come si comporta
sort con i dizionari?)
a quel punto devo ordinare l'intero array con riferimento ad un
particolare indice dell'array contenuto in ogni riga.

> A quel punto ordinarli è semplice, in base a qualsiasi colonna, e per
> creare le righe della tabella basta un dati.map(function(r) { return
> ''+r.id+'...'; })
Non è poi tanto il ricostruire la tabella che mi preoccupa, quanto
proprio la funzione di ordinamento, che non mi è ben chiara come
funziona...

mi pare di capire (un po' come nella funzione map che mi hai proposto)
che in qualche modo mi basta definire una funzione con due argomenti
qualsiasi, e nel corpo della funzione indicare come è il sistema di
confronto tra questi due elementi... ho compreso giusto, o sto
sbagliando ancora?

Tnx
--
Gollum1 - http://www.gollumone.it
Tesoro, dov'é il mio teoro...


-- 
Gollum1 - http://www.gollumone.it
Tesoro, dov'é il mio teoro...



Re: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-11 Per discussione Alessandro Pellizzari

On 11/07/2018 10:20, Gollum1 wrote:


Ora mi trovo un attimo in imbarazzo... il codice sembra ok, ma non
riesco a capire come dovrei affrontare come ordinare per i campi che
sono in realtà contenuti nella stringa che è contenuto nell'array...


Il mio server strippa gli allegati, quindi non vedo il tuo codice, ma se 
hai preso l'innerHtml dei vari tr non ne verrai mai fuori.


Se puoi, prendi i dati che arrivano dal server, e infilali in qualche 
modo in un array così:


let dati = [
  {
id: 1,
titolo: 'Il primo titolo',

  },
  {
id: 2,
titolo: 'Il secondo titolo',
...
  },
  ...
]

A quel punto ordinarli è semplice, in base a qualsiasi colonna, e per 
creare le righe della tabella basta un dati.map(function(r) { return 
''+r.id+'...'; })


Bye.



Re: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-11 Per discussione Gollum1
Ora mi trovo un attimo in imbarazzo... il codice sembra ok, ma non
riesco a capire come dovrei affrontare come ordinare per i campi che
sono in realtà contenuti nella stringa che è contenuto nell'array...

a questo punto non credo che si possa usare la metodologia degli
oggetti che compongono le singole righe, in quanto non sono oggetti...

dovrei forse fare un array di array e quindi selezionare in quel modo
la colonna da andare a ordinare?

anche perché non mi è ben chiaro come potrei (anche potesssi indicare
degli oggetti dentro la riga dell'array) passare il parametro della
colonna alla funzione di ordinamento...

allego il file che ho rifatto, spero ancora nei vostri sempre ottimi
suggerimenti.



-- 
Gollum1 - http://www.gollumone.it
Tesoro, dov'é il mio teoro...



Re: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-09 Per discussione Gollum1
Il giorno lun 9 lug 2018 alle ore 13:21 Piviul  ha scritto:
> non so quanto incida ordinare sui dati e poi sulla tabella comunque
> quello soprattutto seguirei i consigli di Federico: copi il DOM della
> tabella, la ordini poi la sostituisci ordinata.

bhe... stavo pensando, leggendo il codice, che durante la procedura di
riordinamento, in realtà vado a generare un array, l'array che
contiene tutte le righe del DOM, già formattata, quindi alla fine,
potrei ordinare l'array, senza fare gli spostamenti nel DOM, ed una
volta fatto l'ordinamento, riscrivere tutto l'array nel DOM...

l'impatto sul codice sarebbe a questo punto veramente minimo.
e cambierei solamente il target dell'ordinamento reale,

appena ho un attimo di tempo mi ci metto, e poi vi faccio sapere.

Byez
-- 
Gollum1 - http://www.gollumone.it
Tesoro, dov'é il mio teoro...



Re: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-09 Per discussione Piviul

Il 09/07/2018 11:33, Gollum1 ha scritto:

[...]
ho capito l'arcano... il fatto è che sto rimettendo mano a codice già 
preesistente...

farò così allora... memorizzo il tutto in un array, quindi tutte le operazioni 
di ordinamento le faccio nell'array, e solo alla fine ripopolo la vecchia 
tabella del DOM con i nuovi dati elaborati

che è anche più logico come concetto (a questo punto si possono usare gli 
algoritmi già inclusi in js, per fare l'ordinamento, senza reinventare l'acqua 
calda, come mi è stato fatto notare)...

ok, il restailing diventa anche più sistemico, e non solo grafico.
non so quanto incida ordinare sui dati e poi sulla tabella comunque 
quello soprattutto seguirei i consigli di Federico: copi il DOM della 
tabella, la ordini poi la sostituisci ordinata.


Piviul



Fwd: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-09 Per discussione Gollum1
Mi scuso con Luca, per aver scritto in privato, invece che sulla ML.

-- Forwarded message -
From: Gollum1 
Date: lun 9 lug 2018 alle ore 11:53
Subject: Re: [OT - javascrpt] attivare un div inserito dinamicamente.
To: Luca Costantino 


.
Il 9 luglio 2018 10:33:45 CEST, Luca Costantino
 ha scritto:
>Ma perche' perdere la testa a reinventare l'acqua calda, visto che ci
>sono
>gia' dozzine di algoritmi di ordinamento storici, testati, a
>complessita'
>nota, e gia' implementati?
>

come ho già risposto a Lorenzo, ho ripreso in mano un sito fatto da
altri, con i suoi pregi e i suoi difetti. ho in prima battuta rifatto
la parte grafica, cercando di mantenere la stessa struttura, ma
portando tutto nell'ottica di usare css e posizionamenti non forzarti
(in origine ogni elemento era posizionato in modo assoluto, con codice
di stile inline, nell'oggetto  stesso).

Ho spezzato il codice in più file, in modo che parti del sito possano
essere riutilizzate indipendentemente dalla pagina effettiva.

è vero, avrei potuto usare un cms, e tutto sarebbe stato più semplice,
ma ho a che fare con il programmatore originale, che ha una
idiosincresia nell'uso dei framework.

per ora gli sto dando il contentino, per dare un qualcosa di
immediatamente utilizzabile, basato sul suo codice, ma a tendere,
rifarò il tutto in python e genropy (con buona pace alla sua
idiosincresia).

vi disturberò ancora quando cercherò di sostituire apache con uwsgi,
che ancora non ho affrontato.

grazie a tutti per le preziose informazioni.
byez
--
gollum1

Inviato dal mio dispositivo Android con K-9 Mail. Perdonate la brevità
e gli errori, maledetto correttore automatico.


-- 
Gollum1 - http://www.gollumone.it
Tesoro, dov'é il mio teoro...



Re: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-09 Per discussione Gollum1
Il 9 luglio 2018 10:52:56 CEST, Lorenzo Breda  ha scritto:
>Il giorno lun 9 lug 2018 alle ore 10:22 Gollum1
>
>ha scritto:
>
>> >La div di blocco non serve a niente, quello che devi fare è
>> >sganciare la tabella/le righe da riordinare dal DOM e riagganciarle
>> >alla
>> >fine.
>>
>> Questo non mi è chiaro, se le tolgo dal DOM, come posso poi invertire
>le
>> righe?
>>
>
>Tu stai cercando di ordinare dei dati. Devi lasciar perdere il dom,
>mettere
>i dati in un array/dizionario/quelcheè, ordinarli con un opportuno
>algoritmo di ordinamento (Javascript ne mette a disposizione a decine)
>e
>ricostruire poi la tabella con i dati ordinati.
>
>Se provi a ordinare la tabella invece dei dati hai ovviamente un
>hoveread
>pauroso.

ho capito l'arcano... il fatto è che sto rimettendo mano a codice già 
preesistente...

farò così allora... memorizzo il tutto in un array, quindi tutte le operazioni 
di ordinamento le faccio nell'array, e solo alla fine ripopolo la vecchia 
tabella del DOM con i nuovi dati elaborati

che è anche più logico come concetto (a questo punto si possono usare gli 
algoritmi già inclusi in js, per fare l'ordinamento, senza reinventare l'acqua 
calda, come mi è stato fatto notare)...

ok, il restailing diventa anche più sistemico, e non solo grafico. 
byez
-- 
gollum1

Inviato dal mio dispositivo Android con K-9 Mail. Perdonate la brevità e gli 
errori, maledetto correttore automatico.



Re: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-09 Per discussione Lorenzo Breda
Il giorno lun 9 lug 2018 alle ore 10:22 Gollum1 
ha scritto:

> >La div di blocco non serve a niente, quello che devi fare è
> >sganciare la tabella/le righe da riordinare dal DOM e riagganciarle
> >alla
> >fine.
>
> Questo non mi è chiaro, se le tolgo dal DOM, come posso poi invertire le
> righe?
>

Tu stai cercando di ordinare dei dati. Devi lasciar perdere il dom, mettere
i dati in un array/dizionario/quelcheè, ordinarli con un opportuno
algoritmo di ordinamento (Javascript ne mette a disposizione a decine) e
ricostruire poi la tabella con i dati ordinati.

Se provi a ordinare la tabella invece dei dati hai ovviamente un hoveread
pauroso.

-- 
Lorenzo Breda


Re: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-09 Per discussione Luca Costantino
Ma perche' perdere la testa a reinventare l'acqua calda, visto che ci sono
gia' dozzine di algoritmi di ordinamento storici, testati, a complessita'
nota, e gia' implementati?

Il giorno lun 9 lug 2018 alle ore 10:21 Gollum1 
ha scritto:

> Il 9 luglio 2018 09:13:19 CEST, Federico Di Gregorio  ha
> scritto:
> >On 07/08/2018 11:57 PM, Gollum1 wrote:
>
> >>  va detto che richiedere i dati ordinati al server
> >> sarebbe molto più veloce, per riordinare circa 1800 elementi, ci
> >mette
> >> un minuto secco.
> >
> >Non ha senso, 1800 righe in JS sono niente. Probabilmente stai
> >chiedendo
> >al browser di ridisegnare la pagina ogni volta che scambi di posto due
> >righe.
>
> inverto direttamente tra di loro le due righe da scambiare, a livello di
> DOM.
>
> immagina che il codice originale che avevo trovato, riavviava la scansione
> dall'inizio ad ogni inversione, mentre io inverto tra di loro quelle che
> vanno invertite, e poi procedo con quelle seguenti. Così facendo, ad ogni
> ciclo diminuisci di una riga il set di righe da controllare, perché
> sicuramente ho spostato in fondo la riga di valore più elevato.
>
> in pratica, se adesso ci mette un minuto, con il codice originale ce ne
> metteva circa dieci.
>
> >La div di blocco non serve a niente, quello che devi fare è
> >sganciare la tabella/le righe da riordinare dal DOM e riagganciarle
> >alla
> >fine.
>
> Questo non mi è chiaro, se le tolgo dal DOM, come posso poi invertire le
> righe?
>
> >> o almeno così vorrei che fosse, invece mi trovo nella situazione che
> >> fino al termine dell'ordinamento non appare la pagina sovrapposta di
> >> inibizione al sito, e naturalmente al termine viene messa e poi
> >> tolta...
> >
> >Certo, perché finché non ridai il controllo al browser non puoi vedere
> >gli effetti di modifiche al DOM.
>
> è questo è il motivo per cui non vedo neppure lo scambio tra le varie
> righe, ma in questo caso non è sicuramente un problema.
>
> > Puoi usare il trucco di far passare un
> >
> >tick, con una cosa del tipo:
> >
> >function wait_page() { /* codice */ }
> >function sort_rows() { /* codice */ }
> >
> >wait_page();
> >
> >window.setTimeout(sort_rows, 0);
> >
>
> penso di aver capito concettualmente, in pratica mi dici che devo
> provocare un evento che obblighi la pagina ad essere ridisegnata, devo
> vedermi di preciso cosa fa il codice che mi hai scritto, perché nel mio
> caso, il lancio della wait_page è fatto all'interno della sort_table,
> quindi potrei fare quella istruzione all'interno della sort stessa?
>
> >Anche se è completamente off-topic, ci fai vedere l'ordinamento? Magari
> >
> >lo portiamo ad essere istantaneo...
> >
>
> molto volentieri, appena rimetto mano sul computer e riesco a connetterlo
> alla rete (sono in ferie l'estero, e il codice risiede su un mio computer
> remoto, sto sfruttando la connettività altrui, ma per qualche giorno sarò
> in altra località, e non so se troverò qualcuno che mi permette di
> connettermi).
>
> grazie in anticipo per il supporto.
>
>
> byez
> --
> gollum1
>
> Inviato dal mio dispositivo Android con K-9 Mail. Perdonate la brevità e
> gli errori, maledetto correttore automatico.
>
>


Re: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-09 Per discussione Gollum1
Il 9 luglio 2018 09:13:19 CEST, Federico Di Gregorio  ha scritto:
>On 07/08/2018 11:57 PM, Gollum1 wrote:

>>  va detto che richiedere i dati ordinati al server
>> sarebbe molto più veloce, per riordinare circa 1800 elementi, ci
>mette
>> un minuto secco.
>
>Non ha senso, 1800 righe in JS sono niente. Probabilmente stai
>chiedendo 
>al browser di ridisegnare la pagina ogni volta che scambi di posto due 
>righe. 

inverto direttamente tra di loro le due righe da scambiare, a livello di DOM. 

immagina che il codice originale che avevo trovato, riavviava la scansione 
dall'inizio ad ogni inversione, mentre io inverto tra di loro quelle che vanno 
invertite, e poi procedo con quelle seguenti. Così facendo, ad ogni ciclo 
diminuisci di una riga il set di righe da controllare, perché sicuramente ho 
spostato in fondo la riga di valore più elevato. 

in pratica, se adesso ci mette un minuto, con il codice originale ce ne metteva 
circa dieci. 

>La div di blocco non serve a niente, quello che devi fare è 
>sganciare la tabella/le righe da riordinare dal DOM e riagganciarle
>alla 
>fine.

Questo non mi è chiaro, se le tolgo dal DOM, come posso poi invertire le righe? 

>> o almeno così vorrei che fosse, invece mi trovo nella situazione che
>> fino al termine dell'ordinamento non appare la pagina sovrapposta di
>> inibizione al sito, e naturalmente al termine viene messa e poi
>> tolta...
>
>Certo, perché finché non ridai il controllo al browser non puoi vedere 
>gli effetti di modifiche al DOM.

è questo è il motivo per cui non vedo neppure lo scambio tra le varie righe, ma 
in questo caso non è sicuramente un problema. 

> Puoi usare il trucco di far passare un
>
>tick, con una cosa del tipo:
>
>function wait_page() { /* codice */ }
>function sort_rows() { /* codice */ }
>
>wait_page();
>
>window.setTimeout(sort_rows, 0);
>

penso di aver capito concettualmente, in pratica mi dici che devo provocare un 
evento che obblighi la pagina ad essere ridisegnata, devo vedermi di preciso 
cosa fa il codice che mi hai scritto, perché nel mio caso, il lancio della 
wait_page è fatto all'interno della sort_table, quindi potrei fare quella 
istruzione all'interno della sort stessa? 

>Anche se è completamente off-topic, ci fai vedere l'ordinamento? Magari
>
>lo portiamo ad essere istantaneo...
>

molto volentieri, appena rimetto mano sul computer e riesco a connetterlo alla 
rete (sono in ferie l'estero, e il codice risiede su un mio computer remoto, 
sto sfruttando la connettività altrui, ma per qualche giorno sarò in altra 
località, e non so se troverò qualcuno che mi permette di connettermi). 

grazie in anticipo per il supporto. 


byez
-- 
gollum1

Inviato dal mio dispositivo Android con K-9 Mail. Perdonate la brevità e gli 
errori, maledetto correttore automatico.



Re: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-09 Per discussione Federico Di Gregorio

On 07/08/2018 11:57 PM, Gollum1 wrote:

Ciao Raga,

scusate per questo OT, ma siete gli unici che conosco, che potrebbero
darmi una risposta.

ho fatto uno script di ordinamento di una tabella caricata da un SQL.

Lo scopo sarebbe quello di evitare di richiedere un nuovo set di dati
diversamente ordinato al server SQL (mariaDB nello specifico), ho
voluto, quindi, provare a fare l'ordinamento direttamente lato client
con uno script js, va detto che richiedere i dati ordinati al server
sarebbe molto più veloce, per riordinare circa 1800 elementi, ci mette
un minuto secco.


Non ha senso, 1800 righe in JS sono niente. Probabilmente stai chiedendo 
al browser di ridisegnare la pagina ogni volta che scambi di posto due 
righe. La div di blocco non serve a niente, quello che devi fare è 
sganciare la tabella/le righe da riordinare dal DOM e riagganciarle alla 
fine.



proprio per ovviare al fatto che rimane bloccato il browser per tutto
il tempo che viene eseguito l'ordinamento, ho voluto inibire la
pagina, sovrapponendo un div con il classico gif di attesa...

questo div lo aggancio in modo dinamico al body, all'inizio
dell'ordinamento, e poi lo cancello al termine...

o almeno così vorrei che fosse, invece mi trovo nella situazione che
fino al termine dell'ordinamento non appare la pagina sovrapposta di
inibizione al sito, e naturalmente al termine viene messa e poi
tolta...


Certo, perché finché non ridai il controllo al browser non puoi vedere 
gli effetti di modifiche al DOM. Puoi usare il trucco di far passare un 
tick, con una cosa del tipo:


function wait_page() { /* codice */ }
function sort_rows() { /* codice */ }

wait_page();

window.setTimeout(sort_rows, 0);


nella console del browser vedo che le varie parti di codice vengono
eseguite quando dovrebbero, allora perché non appare la pagina di
attesa durante l'ordinamento?

a seguire il codice del mio script, naturalmente epurato di tutta la
parte non necessaria dell'ordinamento:


[snip]

Anche se è completamente off-topic, ci fai vedere l'ordinamento? Magari 
lo portiamo ad essere istantaneo...


federico





Re: [OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-08 Per discussione Gollum1
Il giorno dom 8 lug 2018 alle ore 23:57 Gollum1
 ha scritto:
>
> questo div lo aggancio in modo dinamico al body, all'inizio
> dell'ordinamento, e poi lo cancello al termine...
>

per completezza, posso confermare che il div appare nel DOM (lo vedo
nell'inspector) all'attivazione della procedura, e sparisce al termine
della stessa...
ma non viene mai visualizzato.


-- 
Gollum1 - http://www.gollumone.it
Tesoro, dov'é il mio teoro...



[OT - javascrpt] attivare un div inserito dinamicamente.

2018-07-08 Per discussione Gollum1
Ciao Raga,

scusate per questo OT, ma siete gli unici che conosco, che potrebbero
darmi una risposta.

ho fatto uno script di ordinamento di una tabella caricata da un SQL.

Lo scopo sarebbe quello di evitare di richiedere un nuovo set di dati
diversamente ordinato al server SQL (mariaDB nello specifico), ho
voluto, quindi, provare a fare l'ordinamento direttamente lato client
con uno script js, va detto che richiedere i dati ordinati al server
sarebbe molto più veloce, per riordinare circa 1800 elementi, ci mette
un minuto secco.

proprio per ovviare al fatto che rimane bloccato il browser per tutto
il tempo che viene eseguito l'ordinamento, ho voluto inibire la
pagina, sovrapponendo un div con il classico gif di attesa...

questo div lo aggancio in modo dinamico al body, all'inizio
dell'ordinamento, e poi lo cancello al termine...

o almeno così vorrei che fosse, invece mi trovo nella situazione che
fino al termine dell'ordinamento non appare la pagina sovrapposta di
inibizione al sito, e naturalmente al termine viene messa e poi
tolta...

nella console del browser vedo che le varie parti di codice vengono
eseguite quando dovrebbero, allora perché non appare la pagina di
attesa durante l'ordinamento?

a seguire il codice del mio script, naturalmente epurato di tutta la
parte non necessaria dell'ordinamento:

function wait_page(status){
console.log("Status di wait: " + status);
if (status=="start"){
console.log("Eseguo la procedura di blocco");
var elem = document.createElement('div');
elem.setAttribute('id', 'wait_page')
elem.style.cssText = " position: absolute; left: 0px; top:
0px; width: 100%; height: 100%; opacity: 0.3; z-index: 100;
background-image: url(../images/processing.gif);
background-position-x:  50%; background-position-y:  50%;
background-repeat:  no-repeat;";
document.body.appendChild(elem);
}
else if (status=="stop"){
console.log("Eseguo la procedura di sblocco");
var elem = document.getElementById('wait_page');
elem.parentNode.removeChild(elem);
}
}

function sortTable(TableName, Column, Type, dir) {

[...]
console.log("BLocco la pagina.");
wait_page("start");
console.log("Pagina bloccata");

// Eseguo l'ordinamento.

console.log("SbLocco la pagina.");
wait_page("stop");
console.log("Pagina sbloccata");
}

questo è quello che vedo in console:

BLocco la pagina.
Status di wait: start
Eseguo la procedura di blocco
Pagina bloccata
Righe da ordinare: 1382
[1380] Sto eseguendo un ordinamento sulla colonna "Numero"
SbLocco la pagina.
Status di wait: stop
Eseguo la procedura di sblocco
Pagina sbloccata
[Violation] 'click' handler took 62784ms


cosa mi sto perdendo (a parte che non sono un programmatore js di professione?)

Grazie, e buone vacanze a chi le fa (come il sottoscritto).

Byez
-- 
Gollum1 - http://www.gollumone.it
Tesoro, dov'é il mio teoro...