Gambas-it

Gambas3 => Programmazione => Topic aperto da: Gianluigi - 08 Dicembre 2016, 20:56:09

Titolo: Gambas e JavaScript
Inserito da: Gianluigi - 08 Dicembre 2016, 20:56:09
Mi riferisco a questa (http://gambas.8142.n7.nabble.com/Set-cursor-position-on-a-webview-editable-tp57942.html) discussione apparsa sulla ML, ma anche a quella del sito spagnolo riportata (http://www.gambas-it.org/smf/index.php?topic=5276.msg39704#msg39704) da vuott.
Mi sono creato un piccolo progettino per provare a fare con JavaScript quello che chiede Jorge.
Sono interessato anche io a comprendere come è possibile implementare in modo utile e dinamico il JS in Gambas.
Allego il progetto (è tipo quello di Jorge, credo più corretto e facile per fare prove) sperando che qualcuno pratico di JS ci riesca e mi aiuti a capire, perché io proprio...

Denghiu (come direbbe il buon Biscardi)

 :ciao:
Titolo: Re:Gambas e JavaScript
Inserito da: vuott - 09 Dicembre 2016, 00:25:29
Ho l'impressione che la la funzione "setCaretPosition( )" nel file .js non venga chiamata.   :-X
Titolo: Re:Gambas e JavaScript
Inserito da: Gianluigi - 09 Dicembre 2016, 09:17:55
Ho l'impressione che la la funzione "setCaretPosition( )" nel file .js non venga chiamata.   :-X

Intanto c'è l'errore della Path del file .js di cui mi scuso  :-[ non so se ti stai riferendo a quello oppure...

Allego il file corretto che però continua a non funzionare  :mad:

 :ciao: :ciao:
Titolo: Re:Gambas e JavaScript
Inserito da: vuott - 09 Dicembre 2016, 14:34:27
... non so se ti stai riferendo a quello oppure...
No.


però continua a non funzionare 
Non capisco perché debba funzionare.    :-\
Titolo: Re:Gambas e JavaScript
Inserito da: Gianluigi - 09 Dicembre 2016, 17:07:04
Alcune prove fatte senz'altro non possono funzionare, ma se chiamo le funzioni così dovrebbe essere giusto:
Codice: [Seleziona]
WebView1.Eval(Subst("&1", s))
  'WebView1.Eval(s)
Anche perché ho provato con codice più semplice ma anche con la stessa prova (<textarea id="Texto">) fatta da Jorge, quindi continuo a non capire.
Se la funzione lavora nella text come mai nella window non funziona?

Mi dispiace ma io non ci capisco, pazienza.
Riprenderò in mano la questione dopo le vacanze.
 :ciao: :ciao:
Titolo: Re:Gambas e JavaScript
Inserito da: vuott - 09 Dicembre 2016, 17:41:01
Se la funzione lavora nella text come mai nella window non funziona?
Per "window" intendi il "WebView" del progetto Gambas ?
Titolo: Re:Gambas e JavaScript
Inserito da: Gianluigi - 09 Dicembre 2016, 17:45:18
Se la funzione lavora nella text come mai nella window non funziona?
Per "window" intendi il "WebView" del progetto Gambas ?

Si credo che WebView si comporti come un browser e che pertanto ci si possa riferire a lui come window.
Titolo: Re:Gambas e JavaScript
Inserito da: vuott - 09 Dicembre 2016, 17:55:54
Si credo che WebView si comporti come un browser e che pertanto ci si possa riferire a lui come window.
Io suppongo, invece, che il problema sia proprio questo.
Infatti come gli assegni un "identificativo" all'interno del codice html/javascript ?   :-\
Titolo: Re:Gambas e JavaScript
Inserito da: Gianluigi - 09 Dicembre 2016, 18:05:07
Si credo che WebView si comporti come un browser e che pertanto ci si possa riferire a lui come window.
Io suppongo, invece, che il problema sia proprio questo.
Infatti come gli assegni un "identificativo" all'interno del codice html/javascript ?   :-\

Ma la funzione non deve agire sull'identificativo "Texto"?
Per quale motivo se c'è una textarea lo riconosce senza che gli passi l'oggetto?
Purtroppo la mia dis-conoscenza di JS è troppo superficiale...  :rolleyes:
Titolo: Re:Gambas e JavaScript
Inserito da: vuott - 09 Dicembre 2016, 18:11:39
Per quale motivo se c'è una textarea lo riconosce senza che gli passi l'oggetto?

Nuova domanda: ma la "textarea", di cui parli, è l'oggetto di Gambas oppure è l'oggetto del protocollo HTML ?
Titolo: Re:Gambas e JavaScript
Inserito da: Gianluigi - 09 Dicembre 2016, 18:21:18
Per quale motivo se c'è una textarea lo riconosce senza che gli passi l'oggetto?

Nuova domanda: ma la "textarea", di cui parli, è l'oggetto di Gambas oppure è l'oggetto del protocollo HTML ?

HTML, mi riferisco sempre al codice di Jorge.
Intendi dire che se passo il riferimento a <div id="Texto"> è diverso che se passo il riferimento a <textarea id="Texto"> qui passo un oggetto e la no?
Ma io non saprei... cosa passare non è come in Gambas WebView1.DivId  :-\
Titolo: Re:Gambas e JavaScript
Inserito da: vuott - 09 Dicembre 2016, 18:25:31
HTML....
Intendi dire che se passo il riferimento a <div id="Texto"> è diverso che se passo il riferimento a <textarea id="Texto"> qui passo un oggetto e la no?
Il problema, io suppongo sia proprio quello.   :-X
Titolo: Re:Gambas e JavaScript
Inserito da: gianfry56 - 13 Dicembre 2016, 16:01:04
La funzione javascript setCaretPosition non fa nulla per il semplice fatto che al suo interno richiama delle funzioni (setSelectionRange e createTextRange) che non possono riferirsi ad un elemento <DIV> (come è "Texto") ma devono far riferimento ad un elemento <INPUT> di type="text".
Inoltre essendoci un 'else if' in quella funzione sarebbe richiesto un ulteriore 'else' altrimenti il ramo finale della condizione (non essendo valide le altre due) non viene elaborato e non ci si rende conto dell'errore in atto.

Non ho ben capito il senso di questo programma ma vedo se riesco ad adattarlo...  :ciao:
Titolo: Re:Gambas e JavaScript
Inserito da: Gianluigi - 13 Dicembre 2016, 16:22:22
Ciao Gianfranco (tutto attaccato?),
intanto grazuie per la risposta...
La funzione javascript setCaretPosition non fa nulla per il semplice fatto che al suo interno richiama delle funzioni (setSelectionRange e createTextRange) che non possono riferirsi ad un elemento <DIV> (come è "Texto") ma devono far riferimento ad un elemento <INPUT> di type="text".
Inoltre essendoci un 'else if' in quella funzione sarebbe richiesto un ulteriore 'else' altrimenti il ramo finale della condizione (non essendo valide le altre due) non viene elaborato e non ci si rende conto dell'errore in atto.

Purtroppo, come detto, io il JS non lo conosco se non in modo moooolto superficiale non avendo mai fatto nulla per il web.
Quindi ciò che mi dici lo accetto ma poco lo comprendo  :-[

Citazione
Non ho ben capito il senso di questo programma ma vedo se riesco ad adattarlo...  :ciao:

Veramente non ho capito molto bene neanche io, Jorge sta facendo un controllore ortografico (Catalano) per il suo htEditor lo puoi scaricare dalla Software farm (esempi) e chiedeva come avrebbe potuto spostare il caret da programma e si poneva il quesito come da me riportato (anche lui di JS ci capisce poco).
Se riesci a rispondere al quesito potresti postarlo sulla ML ufficiale oppure se credi posso farlo io a tuo nome.

Se puoi mettere un po di spiegazioni per farmi capire sull'esempio pratico te ne sarei veramente grato.

Ciao
Titolo: Re:Gambas e JavaScript
Inserito da: gianfry56 - 13 Dicembre 2016, 16:31:49
Sostanzialmente l'unica modifica da fare dovrebbe essere questa (nel file new.html):
il corpo (body) dell'html:
Codice: [Seleziona]
  <body>
    <div id="Texto">
      Hello world, i'm here
    </div>
  </body>

va sostituito con questo:
Codice: [Seleziona]
  <body>
    <div>
    <input type="text" id="Texto" size=20 value="Hello world, i'm here"/>
    </div>
  </body>

ho provato e funziona (sempre che lo scopo sia quello di spostare il cursore a destra di un tot di caratteri....)
Titolo: Re:Gambas e JavaScript
Inserito da: gianfry56 - 13 Dicembre 2016, 16:37:53
Ovviamente se il tentativo è quello di spostare il caret, questo deve essere fatto su un oggetto che accetta il caret (un textbox in questo caso) mentre Jorge tentava di farlo su di un testo html (come è quello contenuto nel tag <div>) che non può accettare un caret. Puoi selezionare il testo di una pagina html, ma non puoi fissare il cursore al suo interno...

Spero sia sufficiente. Dai pure tu la risposta nella ML.
ciao
Titolo: Re:Gambas e JavaScript
Inserito da: gianfry56 - 13 Dicembre 2016, 16:42:44
Scusa ma mi sono dimenticato una cosa... oltre alla modifica nel file html c'è da correggere anche una riga nella sub Button1_Click:

non serve scomodare document.execCommand come in questa riga:  :nono:
Codice: [Seleziona]
WebView1.Eval(Subst("document.execCommand('&1', false, false)", s))

ma è sufficiente questo:  :ok:
Codice: [Seleziona]
WebView1.Eval(s)

Titolo: Re:Gambas e JavaScript
Inserito da: vuott - 13 Dicembre 2016, 17:17:19
va sostituito con questo:
......
ho provato e funziona
Infatti era quello che sottoponevo all'attenzione di Gianluigi: l'assenza di un elemento valido. Però, se non erro, il suo tentativo era di ottenere lo spostamento del cursore direttamente sull'oggetto WebView di Gambas anziché all'interno dell'oggetto Textarea di Html.
Titolo: Re:Gambas e JavaScript
Inserito da: Gianluigi - 13 Dicembre 2016, 17:18:15
Scusa Gianfranco,
mi sono dovuto assentare.
Intanto grazie delle spiegazioni, non so se hai visto le discussioni a cui rimandavo all'inizio della discussione ma sia lui che io una soluzione allo spostamento del caret nella pagina lo abbiamo ottenuto usando dei trucchi.
Io usando Desktop.SendKeys() e lui con questo codice:
Codice: [Seleziona]
WebView1.SetFocus()
  WebView1.html &= "··" 'two "middle points" is something I have no seen in my life.
  WebView1.Eval("document.execCommand('findString',false,'··')") 'search and select it...
  WebView1.Eval("document.execCommand('insertText',false,'')") 'and delete it. The cursor remains at the end of text.
Mi riservo di meglio leggere e comprendere le tue spiegazioni ma se mi dici che con il JS è impossibile spostare il cursore nella pagina senza l'uso di oggetti specifici penso che a questo punto il discorso decada.
Dico bene?
Ciao e ancora grazie.
Titolo: Re:Gambas e JavaScript
Inserito da: Gianluigi - 13 Dicembre 2016, 17:26:48
Però, se non erro, il suo tentativo era di ottenere lo spostamento del cursore direttamente sull'oggetto WebView di Gambas anziché all'interno dell'oggetto Textarea di Html.

Infatti, sia Jorge che io una soluzione l'avevamo trovata, tutto è nato dal fatto che sia Minisini che Moviga qualcosa sostenevano che con il JS sarebbe stato possibile spostare il cursore nella pagina.
Salvo naturalmente postare il codice malgrado mia cortese richiesta specifica a Moviga.

Ciao

P.S. Con la textarea sapevamo farlo anche noi  ;)
Titolo: Re:Gambas e JavaScript
Inserito da: gianfry56 - 13 Dicembre 2016, 17:35:53
Se per 'caret' intendiamo il cursore classico (quello di solito lampeggiante) che possiamo posizionare con il mouse e possiamo spostare con i tasti freccia non c'è dubbio che la scelta possibile, in una pagina html, sia solo un oggetto <input> oppure un <textarea>.
Se lo scopo invece è quello di selezionare del testo presente nella pagina html, per mezzo di codice, allora è un'altro discorso... ma in quel caso non può esistere un 'caret' fisico posizionato all'interno del testo...  :nono:
Titolo: Re:Gambas e JavaScript
Inserito da: Gianluigi - 13 Dicembre 2016, 18:10:32
Se per 'caret' intendiamo il cursore classico (quello di solito lampeggiante) che possiamo posizionare con il mouse e possiamo spostare con i tasti freccia non c'è dubbio che la scelta possibile, in una pagina html, sia solo un oggetto <input> oppure un <textarea>.
Se lo scopo invece è quello di selezionare del testo presente nella pagina html, per mezzo di codice, allora è un'altro discorso... ma in quel caso non può esistere un 'caret' fisico posizionato all'interno del testo...  :nono:

Non ho capito se stai parlando in senso assoluto o solo dici che non è possibile direttamente spostare il cursore nella pagina web con una funzione JS, altrimenti il progetto allegato smentisce quanto sostieni.
 :ciao:

P.S. Ho aggiornato il progetto per renderlo più comprensibile
Titolo: Re:Gambas e JavaScript
Inserito da: vuott - 13 Dicembre 2016, 18:19:12
Effettivamente...... :-X
Titolo: Re:Gambas e JavaScript
Inserito da: gianfry56 - 13 Dicembre 2016, 18:34:58
OK, questo è un'altro progetto.... io ero rimasto a quello di prima con il codice Javascript...
su questo non metto dubbio
Titolo: Re:Gambas e JavaScript
Inserito da: gianfry56 - 13 Dicembre 2016, 18:47:07
Questo progetto vi permette di spostare il cursore in una 'pseudo-pagina web' solo perché l'oggetto WebView è un oggetto editabile e Desktop.SendKeys vi permette di spostarvi all'interno, ma non è opera di javascript...
Se non ho capito male, l'oggetto del post era 'come avrebbe potuto spostare il caret da programma' in javascript...

Ma forse sono fuori strada  :mad:
Titolo: Re:Gambas e JavaScript
Inserito da: Gianluigi - 13 Dicembre 2016, 20:58:58
Questo progetto vi permette di spostare il cursore in una 'pseudo-pagina web' solo perché l'oggetto WebView è un oggetto editabile e Desktop.SendKeys vi permette di spostarvi all'interno, ma non è opera di javascript...
Se non ho capito male, l'oggetto del post era 'come avrebbe potuto spostare il caret da programma' in javascript...

Ma forse sono fuori strada  :mad:

Mi sa che anche qui c'è un qui pro quo, il progetto postato era solo per facilitare chi voleva cimentarsi nella soluzione con buttati li un paio di righe tanto per spiegare cosa andavo cercando.
L'oggetto della discussione recita Gambas e JS, nel primo post mi riferisco chiaramente (con tanto di rimando alle discussioni) alle domande di Jorge, non vedo cosa ci sia da capire.
Il mio trucco non ha niente a che fare con JavaScript (anche perché in una discussione precedente a queste Jorge si era detto contrario a soluzioni che prevedessero JS) ma il trucco di Jorge usa Java Script.
Qui parliamo di Gambas e più precisamente del componente gb.gui.qt.webkit e quindi si agisce su di una WebView che è quella usata da Jorge per htEditor.
Mica stiamo parlando di fare un sito web.
Ti rammento che Minisini, Moviga e sembrerebbe anche Vuott (ma non sono sicuro) sostengono che lo spostamento del cursore in una pagina WebView si può fare con JS senza trucchi di sorta.

Spero con questo di aver chiarito il tutto.

 :ciao: :ciao: :ciao:
Titolo: Re:Gambas e JavaScript
Inserito da: vuott - 13 Dicembre 2016, 21:19:46
.... e sembrerebbe anche Vuott (ma non sono sicuro) sostengono che lo spostamento del cursore in una pagina WebView si può fare con JS senza trucchi di sorta.
No, io ho solo affermato che quella soluzione con <DIV> non andava bene.



Questo progetto vi permette di spostare il cursore in una 'pseudo-pagina web' solo perché l'oggetto WebView è un oggetto editabile e Desktop.SendKeys vi permette di spostarvi all'interno, ma non è opera di javascript...
Tenendo conto che non ho mai visto cursori sulle pagine html in quanto tali, io credo che due siano le possibili strade:
o WebView è formato anche da un altro oggetto tstuale, come una sorta di "Ospite", il quale oggetto conferisce a WebView la capacità anche di scrivere del testo, visibile poi sul WebView medesimo; oppure la risorsa webkit, sulla quale si basa l'oggetto WebView di Gambas, possiede essa stessa una proprietà, una capacità che consente di scrivere e mostrare il cursore.

Se è vera la prima ipotesi, un accesso e gestione diretta della proprietà .Text (o .Richtext) di tale oggetto "Ospite" appare improponibile, poiché l'oggetto WebView non posiede una prorpietà .Children (c0me invece è posseduta da taluni oggetti). Dal che si dovrebbe ipotizzare la presenza di un oggetto "Ospite" non visibile, non accessibile dall'oggetto "Ospitante" (e ciò è possibile come è stato egregiamente dimostrato da Gianluigi in un'altra discussione o in un dialogo privato con me).

Se è vera la seconda, bisogna capire se c'è un comando specifico per far "spostare" il cursore, e quale sia.  ...ma siamo sempre in un ambito extra-javascript, come per altro verso indicato da gianfry56.
Titolo: Re:Gambas e JavaScript
Inserito da: Gianluigi - 13 Dicembre 2016, 21:37:44
.... e sembrerebbe anche Vuott (ma non sono sicuro) sostengono che lo spostamento del cursore in una pagina WebView si può fare con JS senza trucchi di sorta.
No, io ho solo affermato che quella soluzione con <DIV> non andava bene.

OK, ma mi era parso leggendo fra le righe... ;D
Citazione
Questo progetto vi permette di spostare il cursore in una 'pseudo-pagina web' solo perché l'oggetto WebView è un oggetto editabile e Desktop.SendKeys vi permette di spostarvi all'interno, ma non è opera di javascript...
Tenendo conto che non ho mai visto cursori sulle pagine html in quanto tali, io credo che due siano le possibili strade:
o WebView è formato anche da un altro oggetto tstuale, come una sorta di "Ospite", il quale oggetto conferisce a WebView la capacità anche di scrivere del testo, visibile poi sul WebView medesimo; oppure la risorsa webkit, sulla quale si basa l'oggetto WebView di Gambas, possiede essa stessa una proprietà, una capacità che consente di scrivere e mostrare il cursore.

Se è vera la prima ipotesi, un accesso e gestione diretta della proprietà .Text (o .Richtext) di tale oggetto "Ospite" appare improponibile, poiché l'oggetto WebView non posiede una prorpietà .Children (c0me invece è posseduta da taluni oggetti). Dal che si dovrebbe ipotizzare la presenza di un oggetto "Ospite" non visibile, non accessibile dall'oggetto "Ospitante" (e ciò è possibile come è stato egregiamente dimostrato da Gianluigi in un'altra discussione o in un dialogo privato con me).
Purtroppo non mi ricordo cosa ho detto  :rolleyes:
Però un Children esiste WebView.Current.Children il figlio del corrente Webframe di Webview.
Più precisamente è una raccolta di tutti i figli.
Citazione

Se è vera la seconda, bisogna capire se c'è un comando specifico per far "spostare" il cursore, e quale sia.  ...ma siamo sempre in un ambito extra-javascript, come per altro verso indicato da gianfry56.

Questo comando è custodito gelosamente dalle vestali giessine agli ordini di Moviga e Benoit  ;D

 :ciao: :ciao: :ciao: :ciao:
Titolo: Re:Gambas e JavaScript
Inserito da: vuott - 13 Dicembre 2016, 23:30:11
Però un Children esiste WebView.Current.Children il figlio del corrente Webframe di Webview.
Più precisamente è una raccolta di tutti i figli.
Eh, ma la guida in-linea parla di "...of all child frames". Infatti, in condizioni normali verificando il numero di "Figli":
Codice: [Seleziona]
Print WebView1.Current.Children.Count
dà zero.



Questo comando è custodito gelosamente dalle vestali giessine agli ordini di Moviga e Benoit
Eh !
Si potrebbe dare uno sguardo ai sorgenti, ma agli effetti pratico poi.... non servirebbe.    :-\
Titolo: Re:Gambas e JavaScript
Inserito da: Gianluigi - 14 Dicembre 2016, 11:40:57
Però un Children esiste WebView.Current.Children il figlio del corrente Webframe di Webview.
Più precisamente è una raccolta di tutti i figli.
Eh, ma la guida in-linea parla di "...of all child frames". Infatti, in condizioni normali verificando il numero di "Figli":
Codice: [Seleziona]
Print WebView1.Current.Children.Count
dà zero.

Si è vero l'avevo notato anche io, se provavo durante lo svolgimento del codice una cosa tipo
Codice: [Seleziona]
Print WebView1.Current.Children[0].Name
rispondeva sempre Out of baund

Citazione

Questo comando è custodito gelosamente dalle vestali giessine agli ordini di Moviga e Benoit
Eh !
Si potrebbe dare uno sguardo ai sorgenti, ma agli effetti pratico poi.... non servirebbe.    :-\

Io avevo a suo tempo dato un occhiata qui (https://sourceforge.net/p/gambas/code/HEAD/tree/gambas/trunk/gb.qt4/src/webkit/) ma per me i file cpp e cippa hanno lo stesso significato  ;D

 :ciao: :ciao: :ciao:

P.S. Ho aggiornato il progetto (http://www.gambas-it.org/smf/index.php?topic=5285.msg39796#msg39796)