Blame platform-demos/es/hellognome.js.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:xi="http://www.w3.org/2001/XInclude" type="topic" style="task" id="hellognome.js" xml:lang="es">
Packit 1470ea
  <info>
Packit 1470ea
    <link type="guide" xref="beginner.js#tutorials"/>
Packit 1470ea
    <revision version="0.1" date="2012-07-17" status="draft"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Taryn Fox</name>
Packit 1470ea
      <email its:translate="no">jewelfox@fursona.net</email>
Packit 1470ea
      <years>2012</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <desc>Su primera aplicación de GNOME</desc>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Daniel Mustieles</mal:name>
Packit 1470ea
      <mal:email>daniel.mustieles@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2011 - 2017</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Nicolás Satragno</mal:name>
Packit 1470ea
      <mal:email>nsatragno@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2012 - 2013</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Jorge González</mal:name>
Packit 1470ea
      <mal:email>jorgegonz@svn.gnome.org</mal:email>
Packit 1470ea
      <mal:years>2011</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>1. ¡Hola, GNOME!</title>
Packit 1470ea
  <synopsis>
Packit 1470ea
    

Este tutorial le mostrará cómo escribir su primera aplicación de GNOME en JavaScript. Usará JavaScript para escribir para GNOME de la misma manera que lo haría para la web. Después, aprenderá cómo usar widgets «nativos», para escribir aplicaciones que se ven como otras aplicaciones de GNOME.

Packit 1470ea
    <note style="warning">

¿Ya tiene GNOME instalado en su equipo, y <link xref="set-up-gedit.js">gedit</link> configurado para escribir código? Querrá hacer estas cosas primero.

</note>
Packit 1470ea
  </synopsis>
Packit 1470ea
Packit 1470ea
  <links type="section"/>
Packit 1470ea
Packit 1470ea
  <section id="webapp">
Packit 1470ea
    <title>Comience con una página web</title>
Packit 1470ea
Packit 1470ea
    

Aquí hay código HTML, CSS, y JavaScript básico. ¿Le resulta familiar?

Packit 1470ea
    
Packit 1470ea
<!DOCTYPE html>
Packit 1470ea
<html>
Packit 1470ea
    <head>
Packit 1470ea
        <title>Hello, GNOME!</title>
Packit 1470ea
Packit 1470ea
        <!-- Use JavaScript to show a greeting when someone clicks the button -->
Packit 1470ea
        <script type="application/javascript">
Packit 1470ea
        function greeting () {
Packit 1470ea
            document.getElementById ("greeting").innerHTML = ("O hai!");
Packit 1470ea
        }
Packit 1470ea
        </script>
Packit 1470ea
Packit 1470ea
        <!-- Very basic CSS style using the GNOME font -->
Packit 1470ea
        <style type="text/css">
Packit 1470ea
            body {
Packit 1470ea
                font-face: Cantarell, sans-serif;
Packit 1470ea
                text-align: center; }
Packit 1470ea
        </style>
Packit 1470ea
Packit 1470ea
    </head>
Packit 1470ea
    <body>
Packit 1470ea
        <br /> <br />
Packit 1470ea
        <button type="button" onclick="greeting()">Hello, GNOME!</button>
Packit 1470ea
Packit 1470ea
        <!-- Empty H1 element gets filled in when the button is clicked -->
Packit 1470ea
        <h1 id="greeting"></h1>
Packit 1470ea
    </body>
Packit 1470ea
</html>
Packit 1470ea
Packit 1470ea
Packit 1470ea
    

Guarde esto como <file>hellognome.html</file>, y observe cómo se ve cuando lo ejecuta.

Packit 1470ea
Packit 1470ea
    <media type="image" mime="image/png" src="media/hellognomewebapp.png"/>
Packit 1470ea
Packit 1470ea
    

Puede ejecutar el código anterior abriendo <file>hellognome.html</file> en un navegador web. Pero aquí, se va a crear una aplicación de GNOME que ejecute la aplicación web de dentro, como ve en la captura de pantalla. Podrá redimensionar y maximizar la ventana, y pulsar en la «X» en la esquina para cerrarla, al igual que esperaría de cualquier otra aplicación de GNOME. La diferencia es que esta ejecutará el código web de dentro.

Packit 1470ea
    

¿La mejor parte? Se va a continuar usando JavaScript para escribir todas las partes que hacen que la aplicación funcione con GNOME. Échele un vistazo al código y vea cómo se hace.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="window">
Packit 1470ea
    <title>Crear una ventana de GNOME para enmarcar la aplicación web</title>
Packit 1470ea
Packit 1470ea
    

Primero, se necesita decirle a GNOME que esta es una aplicación de JavaScript, que usa gjs. gjs es la forma de GNOME de convertir su código de JavaScript en instrucciones que entiende, por lo que esta línea siempre debe ir al principio de sus aplicaciones.

Packit 1470ea
    
Packit 1470ea
#!/usr/bin/gjs
Packit 1470ea
Packit 1470ea
    

Después de eso, necesita decirle a GNOME qué bibliotecas quiere importar.

Packit 1470ea
    
Packit 1470ea
const GLib = imports.gi.GLib;
Packit 1470ea
const Gtk = imports.gi.Gtk;
Packit 1470ea
const Lang = imports.lang;
Packit 1470ea
const Webkit = imports.gi.WebKit;
Packit 1470ea
Packit 1470ea
    

Al igual que las bibliotecas adicionales como jQuery, que permiten hacer cosas adicionales con JavaScript, cada una de estas bibliotecas le da capacidades nuevas a las aplicaciones de GNOME:

Packit 1470ea
    <steps>
Packit 1470ea
      <item>

<file>Gtk</file> y <file>Lang</file> son partes básicas de cualquier aplicación de GNOME, que le permiten crear ventanas y widgets, y juntarlos.

</item>
Packit 1470ea
      <item>

<file>GLib</file> es una biblioteca de ayuda, que permite hacer cosas como decirle a GNOME dónde está el archivo <file>hellognome.html</file> que creó.

</item>
Packit 1470ea
      <item>

Y <file>Webkit</file> es un motor de procesamiento web, que usará básicamente para crear una ventana de navegador con la que abrir el archivo HTML.

</item>
Packit 1470ea
    </steps>
Packit 1470ea
Packit 1470ea
    

Ahora se crea la aplicación en sí:

Packit 1470ea
    
Packit 1470ea
const HelloGNOME = new Lang.Class ({
Packit 1470ea
    Name: 'Hello GNOME',
Packit 1470ea
Packit 1470ea
    

Esto le resultará familiar si ha trabajado con JavaScript orientado a objetos anteriormente. Así es; toda la aplicación es una clase llamada «HelloGNOME». Y como puede ver, se le ha dado una propiedad que dice cuál es su nombre.

Packit 1470ea
Packit 1470ea
    
Packit 1470ea
    // Create the application itself
Packit 1470ea
    _init: function () {
Packit 1470ea
        this.application = new Gtk.Application ();
Packit 1470ea
Packit 1470ea
        // Connect 'activate' and 'startup' signals to the callback functions
Packit 1470ea
        this.application.connect('activate', Lang.bind(this, this._onActivate));
Packit 1470ea
        this.application.connect('startup', Lang.bind(this, this._onStartup));
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    // Callback function for 'activate' signal presents windows when active
Packit 1470ea
    _onActivate: function () {
Packit 1470ea
        this._window.present ();
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    // Callback function for 'startup' signal builds the UI
Packit 1470ea
    _onStartup: function () {
Packit 1470ea
        this._buildUI ();
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
    

Aquí hay código que prácticamente copiará y pegará por cada aplicación que construya en JavaScript. Crea una «Application» nueva, y después enlaza sus señales «activate» y «startup» a funciones que muestran la ventana y construyen su interfaz de usuario, respectivamente.

Packit 1470ea
    

¿Qué significa eso? Bueno, todo en una aplicación de GNOME envía una señal cuando algo importante sucede. Un botón puede enviar la señal «clicked» cuando lo pulsa, por ejemplo. Su trabajo es conectar las señales a funciones que las manejen, y hagan las cosas que quiere que ocurran. Esto se hace usando el método «connect» de cada objeto, que toma dos argumentos: la señal que quiere manejar, y la función «Lang.bind», que hay que usar para decirle a «connect» qué función quiere que maneje la señal.

Packit 1470ea
    

En este caso, se quiere que «_onActivate» maneje la señal «activate», y «_onStartup» la señal «startup». «_onActivate» sólo le dice a la ventana que se presente; para que, básicamente, cada vez que haga <keyseq><key>Alt</key> <key>Tab</key></keyseq> a la aplicación, aparezca como uno espera. «_onStartup» llama a «_buildUI», que es la función que crea la interfaz de usuario y que verá a continuación.

Packit 1470ea
    <note style="tip">

Cuando copie y pegue el código anterior para sus propias aplicaciones, asegúrese de cambiar el nombre por uno único cada vez.

</note>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="ui">
Packit 1470ea
    <title>Diseñar la IU de la ventana</title>
Packit 1470ea
    

En la función «_buildUI», se le describirá a GNOME la ventana y sus elementos, uno a la vez. Después de eso, se conectará y se mostrará todo junto.

Packit 1470ea
Packit 1470ea
    
Packit 1470ea
    // Build the application's UI
Packit 1470ea
    _buildUI: function () {
Packit 1470ea
Packit 1470ea
        // Create the application window
Packit 1470ea
        this._window = new Gtk.ApplicationWindow  ({
Packit 1470ea
            application: this.application,
Packit 1470ea
            title: "Welcome to GNOME",
Packit 1470ea
            default_height: 200,
Packit 1470ea
            default_width: 400,
Packit 1470ea
            window_position: Gtk.WindowPosition.CENTER });
Packit 1470ea
Packit 1470ea
Packit 1470ea
    

El primer objeto que se crea es una «ApplicationWindow». Necesita un texto para la barra de título, y su propiedad «application» tiene que ser la aplicación que se creó anteriormente. Más allá de eso, hay varias maneras de personalizar su apariencia. Podrá encontrar más detalles en la página de referencia <link xref="GtkApplicationWindow.js">ApplicationWindow</link>. Como puede ver aquí, se le dio una altura y anchura predeterminada (medidas en píxeles), y se le dijo a GNOME que se quiere que la ventana aparezca en el centro de la pantalla.

Packit 1470ea
    
Packit 1470ea
        // Create a webview to show the web app
Packit 1470ea
        this._webView = new Webkit.WebView ();
Packit 1470ea
Packit 1470ea
        // Put the web app into the webview
Packit 1470ea
        this._webView.load_uri (GLib.filename_to_uri (GLib.get_current_dir() +
Packit 1470ea
            "/hellognome.html", null));
Packit 1470ea
Packit 1470ea
    

¿Recuerda cómo se importó «Webkit» al comienzo? Aquí se está creando una instancia nueva de la clase «Webkit» llamada «WebView», que es más o menos una ventana de navegador que puede poner dentro de su aplicación. Después de eso, se le da el URI que quiere que cargue cuando la aplicación inicia.

Packit 1470ea
    

Se podría darle sólo un URI web, como <link href="http://gnome.org">http://gnome.org</link>. En su lugar, aquí se usan algunas funciones de ayuda de GLib para decirle a «WebView» dónde está el archivo <file>hellognome.html</file>. «GLib.get_current_dir» devuelve la carpeta en la que se está ejecutando la aplicación, y «GLib.filename_to_uri» convierte la ruta del archivo y su nombre en un URI que la función «load_uri» del «WebView» entiende (el segundo parámetro de «filename_to_uri» debe ser «null» a menos que sepa para qué se usa y tenga una razón para cambiarlo).

Packit 1470ea
    
Packit 1470ea
        // Put the webview into the window
Packit 1470ea
        this._window.add (this._webView);
Packit 1470ea
Packit 1470ea
        // Show the window and all child widgets
Packit 1470ea
        this._window.show_all();
Packit 1470ea
    },
Packit 1470ea
Packit 1470ea
});
Packit 1470ea
Packit 1470ea
    

Cada ventana puede contener un, y sólo un, widget. Normalmente usaría un widget contenedor como una <link xref="grid.js">Rejilla</link> para poner dentro múltiples widgets, y después usar la función «add» de la ventana para añadírsela. Aquí, sólo se necesita el «WebView», por lo que es todo lo que se añade. Después de eso, al final de la función «_buildUI» que crea la ventana, se le dice que se muestre con su contenido.

Packit 1470ea
    
Packit 1470ea
// Run the application
Packit 1470ea
let app = new HelloGNOME ();
Packit 1470ea
app.application.run (ARGV);
Packit 1470ea
Packit 1470ea
    

Finalmente, se crea una instancia nueva de la clase «HelloGNOME» y se le dice a GNOME que la ejecute.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="run">
Packit 1470ea
    <title>Ejecutar la aplicación de GNOME</title>
Packit 1470ea
Packit 1470ea
    

Ahora que ha creado su primera aplicación de GNOME, es hora de probarla. No necesita compilarla o instalar algún software especial, GNOME tiene incluido gjs para permitirle ejecutar GNOME Shell. Sólo guarde <file>hellognome.html</file> y la aplicación en sí, <file>hellognome.js</file> en una carpeta a la que pueda acceder con la terminal (generalmente se abren en su carpeta personal, la que se llama como su usuario). Después de eso, abra una terminal, vaya allí, e introduzca:

Packit 1470ea
    <screen> <output style="prompt">$ </output>gjs hellognome.js </screen>
Packit 1470ea
    

Debería ver más o menos la misma captura de pantalla de antes, con un botón que puede pulsar para hacer aparecer un mensaje corto.

Packit 1470ea
Packit 1470ea
    <note style="tip">
Packit 1470ea
        

Puede usar el comando de la terminal

Packit 1470ea
        <screen> <output style="prompt">$ </output>cd (nombre de la carpeta) </screen>
Packit 1470ea
        

para navegar entre carpetas dentro de la terminal, y llegar donde guardó los archivos. También hay una extensión para Nautilus, el gestor de archivos de GNOME, que le permite pulsar en cualquier lado con el botón derecho para abrir una terminal allí. Búsquela en la aplicación que usa para instalar software nuevo (como «Añadir/Quitar programas» o el «Centro de software»).

Packit 1470ea
    </note>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="whatsnext">
Packit 1470ea
    <title>¿Qué viene ahora?</title>
Packit 1470ea
Packit 1470ea
    

<link xref="02_welcome_to_the_grid.js">Siga con el próximo tutorial</link> para aprender cómo construir aplicaciones de GNOME «nativas» que se ven como las otras, en lugar de una vista web con código HTML dentro. O échele un vistazo a algunas <link xref="beginner.js#samples">muestras de código</link>, si quiere ver código de ejemplo para cada widget de GTK+.

Packit 1470ea
    

Finalmente, si sólo quiere construir aplicaciones de GNOME usando bibliotecas de JavaScript diseñadas para la web, puede simplemente parar aquí y hacerlo. Échele un vistazo a los <link xref="beginner.js#tutorials">últimos tutoriales</link> para aprender a crear un archivo «.desktop» para su aplicación, que le permitirá aparecer en el menú de actividades de su escritorio junto a las otras.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="complete">
Packit 1470ea
    <title>Código de ejemplo completo</title>
Packit 1470ea
#!/usr/bin/gjs
Packit 1470ea
Packit 1470ea
imports.gi.versions.Gtk = '3.0';
Packit 1470ea
Packit 1470ea
const GLib = imports.gi.GLib;
Packit 1470ea
const Gtk = imports.gi.Gtk;
Packit 1470ea
const Webkit = imports.gi.WebKit;
Packit 1470ea
Packit 1470ea
class HelloGNOME {
Packit 1470ea
Packit 1470ea
    // Create the application itself
Packit 1470ea
    constructor() {
Packit 1470ea
        this.application = new Gtk.Application ();
Packit 1470ea
Packit 1470ea
        // Connect 'activate' and 'startup' signals to the callback functions
Packit 1470ea
        this.application.connect('activate', this._onActivate.bind(this));
Packit 1470ea
        this.application.connect('startup', this._onStartup.bind(this));
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    // Callback function for 'activate' signal presents windows when active
Packit 1470ea
    _onActivate() {
Packit 1470ea
        this._window.present();
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    // Callback function for 'startup' signal builds the UI
Packit 1470ea
    _onStartup() {
Packit 1470ea
        this._buildUI();
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
    // Build the application's UI
Packit 1470ea
    _buildUI() {
Packit 1470ea
Packit 1470ea
        // Create the application window
Packit 1470ea
        this._window = new Gtk.ApplicationWindow  ({
Packit 1470ea
            application: this.application,
Packit 1470ea
            title: "Welcome to GNOME",
Packit 1470ea
            default_height: 200,
Packit 1470ea
            default_width: 400,
Packit 1470ea
            window_position: Gtk.WindowPosition.CENTER });
Packit 1470ea
Packit 1470ea
        // Create a webview to show the web app
Packit 1470ea
        this._webView = new Webkit.WebView ();
Packit 1470ea
Packit 1470ea
        // Put the web app into the webview
Packit 1470ea
        this._webView.load_uri (GLib.filename_to_uri (GLib.get_current_dir() +
Packit 1470ea
            "/hellognome.html", null));
Packit 1470ea
Packit 1470ea
        // Put the webview into the window
Packit 1470ea
        this._window.add (this._webView);
Packit 1470ea
Packit 1470ea
        // Show the window and all child widgets
Packit 1470ea
        this._window.show_all();
Packit 1470ea
    }
Packit 1470ea
Packit 1470ea
};
Packit 1470ea
Packit 1470ea
// Run the application
Packit 1470ea
let app = new HelloGNOME ();
Packit 1470ea
app.application.run (ARGV);
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
</page>