PDA

Ver la Versión Completa : [ IDEA ] Cuadros de diálogo con Javascript


Rsc
11/03/18, 02:28:56
Hasta ahora, usaba con frecuencia el método alert de JS, para mostrar cuadros de dialogo en algunos de mis proyectos, pero hoy he descubierto dos tipos de cuadros de diálogos más, que os pueden resultar útiles.

Aquí voy a poner un resumen, pero para el que quiera profundizar, puede echarle un vistazo a la página en la cual he encontrado la información, que además está muy bien explicado: http://elfreneticoinformatico.com/cuadros-de-dialogo-con-javascript/

Los cuadros de diálogos a los que me refiero son; confirm y prompt

confirm: muestra un mensaje con un botón de aceptar y otro de cancelar. El resultado se guarda en una variable boleana (true o false)

Ejemplo:

var confirmacion = confirm("Pulsa el botón que quieras");
if(confirmacion){
alert("Has pulsado aceptar");
} else {
alert("Has pulsado cancelar");
}

prompt: muestra un mensaje, dos botones (aceptar y cancelar) y un cuadro para introducir texto). En este caso la variable guarda lo que se escriba en el cuadro de texto

Ejemplo:

var textoEscrito = prompt("Escribe un texto", "Texto");
if(textoEscrito != null){
alert("Has escrito " + textoEscrito);
} else {
alert("No has escrito nada");
}

El segundo parámetro es opcional. Lo que se indique en ese parámetro se mostrará previamente en el cuadro de texto.

Los tres pueden ser muy útiles, pero sobretodo el método prompt, ya que creo que puede ser una buena alternativa para la acción "Consultar variable" que yo particularmente la uso mucho.

Creo que es una ventaja, el no tener que prestar atención a como se verá la escena perteneciente a la acción "consultar variable", en otros teléfonos con diferente resolución.

Un saludo.

danko9696
11/03/18, 04:21:41
Yo los usaba hace tiempo pero por diferente motivo. Si llamas a una escena (o tarea) de Tasker desde dentro de JS y en un momento dado quieras pedir algún dato la ejecución (de JS) continua inmediatamente, no espera a que finalice la escena, por lo que este método (prompt/confirm) era la única manera. Al final los reemplacé con una tarea completa + escena en lugar de solo JS, a modo de introducción de datos más visual.

Una cosa, el primer ejemplo que has puesto se pueden simplificar un poco:

if(confirm("Pulsa el botón que quieras"))
alert("Has pulsado aceptar");
else
alert("Has pulsado cancelar");
Y relacionado con esto (un poco) me pregunto si sería posible crear desde el JS de Tasker escenas completas (aunque sea bastante más complicado), añadiendo por ejemplo listboxes y cosas así, al igual que se puede en Lightning Launcher, que también tiene soporte JS. Si es posible podría estar bien para escenas simples sin tener que salir del código y permitiendo adaptar mejor la resolución a diferentes dispositivos, como indicas.

Rsc
11/03/18, 11:52:58
Yo los usaba hace tiempo

No esperaba menos de uno de losprecursores de JS en este foro.

Al final los reemplacé con una tarea completa + escena en lugar de solo JS, a modo de introducción de datos más visual.

A mi la verdad que me gusta como se ve las ventanas emergentes mostradas con JS. Supongo que varía dependiendo de la versión de Android. La escena de "consultar variable" predefinida de Tasker, siempre la acabana modificando para darle otro aspecto, porque nunca me ha gustado.

Una cosa, el primer ejemplo que has puesto se pueden simplificar un poco

Cierto, y gracias por añadirlo. Lo he leído también en esa página, pero finalmente lo he puesto de la manera que yo lo comprendía.

añadiendo por ejemplo listboxes y cosas así

Nada más leer esto, me he puesto a buscar si existía alguna manera para mostrar algún cuadro emergente con una lista seleccionable. He encontrado algo pero no lo se implementar en Tasker.

http://www.dummies.com/web-design-development/javascript/how-to-create-a-multiple-selection-list-box-in-javascript-for-html5-and-css3-programming/

Respecto a lo de crear escenas completas usando JS, creo que no se puede...

La opción de crear escena usando JS, es exactamente igual a la acción de Tasker de crear escena (Crea una escena ya existente). Vamos, que realmente no es "crear", sería más correcto denominar esa acción como "prepara escena".

También se pueden crear elementos de una escena desde JS, pero más de lo mismo, creo que hay que atenerse a los parámetros que se pueden incluir en la interfaz de tasker a la hora de crear un elemento.

La verdad que me he peleado mucho con las escenas de Tasker, porque creo que es uno de los puntos más flojos... He intentado hasta modificar el archivo xml de las escenas, intentando engañar a Tasker, modificando parámetros que no deja poner en la interfaz de creación de escenas, pero el resultado ha sido negativo.

A ver si alguien saca algo en claro sobre si se puede mostrar algún cuadro de diálogo seleccionable, o algún otro método que nos permita interactuar con proyectos sin necesidad de recurrir a escenas.

SmartPhoneLover
11/03/18, 12:04:35
Muchas gracias por compartir Rsc! Muy bueno ;)

danko9696
11/03/18, 15:30:30
Nada más leer esto, me he puesto a buscar si existía alguna manera para mostrar algún cuadro emergente con una lista seleccionable. He encontrado algo pero no lo se implementar en Tasker.

http://www.dummies.com/web-design-development/javascript/how-to-create-a-multiple-selection-list-box-in-javascript-for-html5-and-css3-programming/
Pero ese ejemplo es para una web, yo me refiero a usar librerías de android desde javascript. Por ejemplo un test que hice en Lightning Launcher para mostrar un Editbox:

/*
* Web Shortcuts
* Create shortcuts to your favourite websites
*/

LL.bindClass("android.widget.LinearLayout");
LL.bindClass("android.widget.EditText");
LL.bindClass("android.app.AlertDialog");
LL.bindClass("android.content.DialogInterface");
LL.bindClass("android.content.Intent");

var mctx = LL.getContext();

var ll = new LinearLayout(mctx);
with(ll){
setOrientation(LinearLayout.VERTICAL);
setBackgroundColor(0xffff);
setLayoutParams(new LinearLayout.LayoutParams(200, 100));
}

var title = new EditText(mctx);
with(title){
setHint("Title");
setLayoutParams(new LinearLayout.LayoutParams(-1, -1));
}

ll.addView(title);

var url = new EditText(mctx);
with(url){
setHint("Url");
setLayoutParams(new LinearLayout.LayoutParams(-1, -2));
}

ll.addView(url);

adb = new AlertDialog.Builder(mctx);
adb.setTitle("Configure Web Shortcut");
adb.setCancelable(false);
adb.setView(ll);
adb.setPositiveButton("Create", new DialogInterface.OnClickListener(){

onClick:function(dialog, id){
if(title.length() >= 3 && url.length() >= 3){
try{
var i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url.getText().toString().trim( )));
var d = LL.getCurrentDesktop();
d.addShortcut(title.getText().toString().trim(), i, 30.0, 30.0);
Android.makeNewToast("Shortcut was created", false).show();
//LL.startActivity(i);
}catch(anfe){
Android.makeNewToast("Activity not found Exception", true).show();
}

}

}

});

adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){

onClick:function(dialog, id){
dialog.dismiss();
}

});

var alert = adb.create();
alert.show();Y ten en cuenta que LL tampoco está pensado para ser usado de esta forma, para crear escenas con objetos nativos android, sino más bien con los suyos propios. Pero poder, se puede. Y Tasker creo que sí admite en cierta medida el uso de funciones java y librerías android, por lo que quizás sí se pueda.

Otra posibilidad mucho mejor para eso es Droidscript, que me gustó en si pero no su sistema de acceso por pago mensual para disponer de ciertas funcionalidades. Pero si vas a usarlo intensivamente creo que es mejor que el de Tasker.

Rsc
11/03/18, 20:05:56
Pero ese ejemplo es para una web, yo me refiero a usar librerías de android desde javascript

No lo se distinguir, cuando sale a la palestra tanto código, o me lo dan muy masticado o no soy capaz de interpretarlo.

Quizás en unos meses, ya que me he vuelto a proponer a aprender Java, que ya se que no es lo mismo, pero al menos estaré un poco familiarizado con el lenguaje de código.

Así que nada, lo que se vaya a averiguar más sobre este tema, queda en tus manos, o en la de algunos de los que controlan más este tema. Y no miro a nadie WillyWeb

Un saludo.

Mx WaR HaBiB
12/03/18, 19:14:28
Hasta ahora, usaba con frecuencia el método alert de JS, para mostrar cuadros de dialogo en algunos de mis proyectos, pero hoy he descubierto dos tipos de cuadros de diálogos más, que os pueden resultar útiles.

Aquí voy a poner un resumen, pero para el que quiera profundizar, puede echarle un vistazo a la página en la cual he encontrado la información, que además está muy bien explicado: http://elfreneticoinformatico.com/cuadros-de-dialogo-con-javascript/

Los cuadros de diálogos a los que me refiero son; confirm y prompt

confirm: muestra un mensaje con un botón de aceptar y otro de cancelar. El resultado se guarda en una variable boleana (true o false)

Ejemplo:

var confirmacion = confirm("Pulsa el botón que quieras");
if(confirmacion){
alert("Has pulsado aceptar");
} else {
alert("Has pulsado cancelar");
}

prompt: muestra un mensaje, dos botones (aceptar y cancelar) y un cuadro para introducir texto). En este caso la variable guarda lo que se escriba en el cuadro de texto

Ejemplo:

var textoEscrito = prompt("Escribe un texto", "Texto");
if(textoEscrito != null){
alert("Has escrito " + textoEscrito);
} else {
alert("No has escrito nada");
}

El segundo parámetro es opcional. Lo que se indique en ese parámetro se mostrará previamente en el cuadro de texto.

Los tres pueden ser muy útiles, pero sobretodo el método prompt, ya que creo que puede ser una buena alternativa para la acción "Consultar variable" que yo particularmente la uso mucho.

Creo que es una ventaja, el no tener que prestar atención a como se verá la escena perteneciente a la acción "consultar variable", en otros teléfonos con diferente resolución.

Un saludo.

Desconocía completamente el tema, muchas gracias por compartir!

si de alguna manera tienes tiempo y puedes compartir mas ejemplo como estos estaría perfecto. gracias de nuevo al igual que danko9696 que sigue al pie del camión :campeon:

danko9696
15/03/18, 17:02:26
No lo se distinguir, cuando sale a la palestra tanto código, o me lo dan muy masticado o no soy capaz de interpretarlo.
No hace falta ser capaz de interpretarlo, basta con fijarse en ciertos detalles. Por ejemplo en el enlace que pusiste hacen referencia a html5 y css3 en el propio título.

En cambio en el que puse, aunque no sepas bien lo que hace el código, al principio se puede ver como parece añadir referencias a varios objetos de android de forma bastante clara, como "android.widget.EditText", "android.content.DialogInterface", etc..., para poderlos usar posteriormente. Luego los detalles de como funciona ya es otra cosa, pero resulta bastante obvio que es código destinado a funcionar en android.

O sea, que sí conoces como tienes que declarar las librerías en principio es posible tener acceso a objetos de android como menus, listboxes, layouts (donde colocar los menus, textos, etc...) usando Javascript, por lo menos en DroidScript y Lightning Launcher. Lo que no estoy seguro es si en Tasker también. Y si eso se puede el resto es luego consultar documentación genérica de android para conocer la sintaxis y también ayudado por Notepad++ o VisualStudioCode para hacer mucho más legible el código, escribiendolo desde el PC directamente en el móvil, en lugar de en este directamente, donde usar JS es un caos salvo que sea algo muy muy simple.

WillyWeb
16/03/18, 19:38:44
... Y no miro a nadie WillyWeb

:oh:

Mira que intento no meterme con nadie. :risitas:

Poco puedo decir sobre el tema porque apenas uso las escenas, pero usando un elemento VistaWeb junto con HTML+JS se pueden hacer cosas muy chulas ... ahí lo dejo. :silbando:

Rsc
16/03/18, 22:17:05
Claro, creo que a nadie se le había ocurrido antes. Desde que se añadió el elemento VistaWeb, se podrá hacer cualquier diseño para mostrarlo en la escena. Que bien se te da Tasker, deberías haber sido tu el sustituto de Pent jeje

SmartPhoneLover
17/03/18, 22:05:03
Nosotros trabajamos mucho con el elemento WebView desde hace tiempo en el grupo mio de Telegram, y el de mi gran compañero MELO en el suyo.

Si quereis uniros... (inglés requerido)

Rsc
18/03/18, 00:16:54
Nosotros trabajamos mucho con el elemento WebView

Se agradecería que pusieras algún ejemplo por aquí, de algunos de los usos que le hayáis dado al elemento WebView.

Si quereis uniros... (inglés requerido)

Se agradece el ofrecimiento, pero yo por lo pronto, prefiero dosificar mis sesiones de Tasker en foros, vaya a ser que acabe dedicándole más tiempo todavía. Un saludo.