SlideShare una empresa de Scribd logo
1 de 31
Descargar para leer sin conexión
El universo JavaScript en D8
Ramon Vilar
Sobre mi
Ramon Vilar
ramon@ymbra.com
@rvilar
Drupal Day 2011
Índice
01. D8 y JavaScript
02. El objeto JS global Drupal
03. Otras APIs del core
04. Añadir JS a nuestros módulos y temas
05. Buenas prácticas en desarrollo JS
06. Conclusiones
D8 Y JAVASCRIPT
Drupal 8 y JavaScript
● En esta nueva versión, la importáncia de JS ha crecido y
mucho.
● Inclusión de librerías muy importantes y que cambian la forma
de trabajar con JS
– Ckeditor en el núcleo
– Backbone, underscore, ...
● Librerías ya existentes a nuevas versiones:
– jQuery 2.0.3, jQuery.UI 1.10.2, jQuery Once 1.2.3, ...
Estrictos con la calidad de código
“use strict” - http://ves.cat/kMMq
Nueva característica de ECMAScript 5 para pasar a ejecutar código
en modo estricto. Se debe añadir la cadena cómo primera línia
dentro en el contexto de la función.
JSHint – http://jshint.com
Herramienta de control de calidad del código JS que escribimos.
Integrado para revisar todo el código del núcleo. Ver .jshintrc y
.jshintignore
Ayuda a aplicaciones livianas
domReady
● Cada petición a Drupal, carga drupal.js, fichero dónde
carga toda la funcionalidad JS de Drupal.
● Este fichero sólo usaba jQuery para hacer:
$(window).ready(function() {...});
● Para hacer esto no hace falta cargar jQuery entero (90kb) y
podemos usar domReady (740 bytes).
domready(function () {...});
Backbone & Underscore
● La complejidad de las aplicaciones JS hace que se requiera un
framework MVC para poder arquitecturizarla
● Hoy en día existen múltiples que estan de moda: Backbone,
Angular.js o Ember.js
● La comunidad se ha decidido por Backbone porque es la que
tiene la mayor comunidad de usuarios y la más estable.
● Podeis ver ejemplos de uso en los módulos del core Edit,
Toolbar o Contextual
● Underscore se incluye porque es requisito de Backbone, però
también podemos aprovecharnos de ellos.
HTML5 y RWD
● Drupal 8 está desarrollado en HTML5 y es mobile friendly
● Para ello usa algunas librerías de apoyo, cómo son
Picturefill, classList o HTML5Shiv (*)
● Usa otras librerías interesantes cómo Modernizr que
podemos usar en nuestros desarrollos.
(*) HTML5Shiv va a desaparecer en breve porque el core no da
soporte a IE8 http://ves.cat/kOor
EL OBJETO JS GLOBAL Drupal
El objeto JS global Drupal
● La gente sigue sin conocer un objeto clave en el
desarrollo Drupal: Drupal
/core/misc/drupal.js
● A tener en cuenta:
– Drupal.behaviors
– Drupal.theme
– Drupal.t
– ...
Drupal.behaviors
● Es la forma de añadir comportamiento a una
página o a un elemento:
Drupal.behaviors.myModuleBehavior = {
attach: function (context, settings) {
$('.select').addClass('foo');
}
};
● Nos aporta funciones de attach y detach. Se llama en
cada petición de la página (ajax)
● Si nos interesa que sólo se llame una vez: once().
Drupal.theme
● El theming también llegó al JS.
● Ha cambiado un poco en D8 (no usamos prototype)
● Todo HTML añadido a la página se debería hacer
mediante una función de theming
Drupal.theme.placeholder = function (str) {
return '<em class="placeholder">' +
Drupal.checkPlain(str) + '</em>';
};
// Calling a theme function.
Drupal.theme('placeholder', bar);
Drupal.t
● Drupal.t() funciona exactamente igual que el método
$this->t() (en D8 es un servicio y no una función
procedural)
Drupal.t(“Path: !uri”, {'!uri', uri});
● Las variables se pueden pasar con @, ! y %; con el mismo
significado que en PHP.
Drupal.checkPlain
OTRAS NUEVAS APIS
Otras nuevas APIs (I)
Drupal.announce
Envia notificaciones al usuario para informar de cambios en la
página que no se pueden describir con estados ARIA.
Drupal.debounce
Limita la invocación de una función en un periodo de tiempo.
Drupal.tabbingManager
También ligado a la accesibilidad del sitio. Controla el orden y las
acciones a ejecutar en el tabbing de elementos.
Otras nuevas APIs (y II)
Drupal.displace
Calcula distancias de offset de viewport. Resuelve el problema de
posicionamiento entre Overlay y el Toolbar
Drupal.dialog
API que simula el elemento dialog de HTML5.
Drupal.history
Gestiona el historial de navegación
AÑADIR JS A NUESTROS MÓDULOS
Y TEMAS
Añadir JS a nuestro módulo
● En Drupal 7 podíamos usar, entre otros:
drupal_add_js('js/mymodule.js');
scripts[] = 'js/mymodule.js';
● Esto en Drupal 8 no se puede usar.
● Ahora se nos obliga a definir todos nuestros ficheros JS cómo
librerías.
hook_library_info()
mymodule.libraries.yml
foo:
version: 1.0
js:
script.js: {}
dependencies:
- core/jquery
- core/drupal
- core/drupalSettings
- core/jquery.once
Añadir JS a nuestro módulo (III)
● En el módulo, lo añadiremos al render array de nuestro elemento:
$my_render['#attached']['library'][] =
'mymodule/foo';
● Si queremos añadirlo en todas las páginas, podremos usar
hook_page_build()
function edit_page_build(&$page) {
if(!Drupal::currentUser()->hasPermission('...')) {
return;
}
// some code
$page['#attached']['library'][] = 'edit/edit';
}
Añadir JS a nuestro tema
● Ahora todos los scripts tienen que declarar sus dependencias
en ficheros de librerías mytheme.libraries.yml
● Para añadirlos a nuestros temas:
…
core: 8.x
libraries:
- bartik/base
ckeditor_stylesheets:
- css/ckeditor-iframe.css
…
Pasar datos de PHP a JS
● Tampoco podemos usar drupal_add_js()
$form['#attached']['js'][] = array(
'type' => 'setting',
'data' => array('blockPlacement' =>
$placement),
);
● Para usar ese dato en nuestro JS:
Drupal.settings.blockPlacement
drupalSettings.blockPlacement
● drupalSettings es una variable global
intencionada.
BUENAS PRÁCTICAS EN
DESARROLLO JS
Buenas prácticas en desarrollo JS (I)
● Usar siempre el modo estricto: “use strict”;
● JSHint está ahí para ayudarnos. Usémoslo!
● Usa Firebug o alguno de sus primos!
● Sobretodo, acordaos de declarar “todas” las variables! Es
buena práctica hacerlo siempre al inicio de la función
● Funciones anónimas para evitar problemas de scope de
variables y funciones.
● Perdamos el miedo a crear nuestras própias librerías o plugins.
Buenas práctica en desarrollo JS (y II)
● Hay que ir con cuidado con los selectores JS que
se escriben. Puede ser un foco de problemas de
performance http://ves.cat/kRFb
● Si nuestro JS toma cierta notoriedad, no tengamos
miedo de crear nuestro própio plugin jQuery,
nuestro componente en Backbone o nuestra
própia librería JS.
Desarrollo de plugins jQuery
● Si un componente jQuery asociado tiende a ser
reutilizable o tiene cierta notoriedad, escribamos un
plugin jQuery.
$.fn.myPlugin = function() {
// My code.
return this;
};
$(“input”).myPlugin();
● http://learn.jquery.com/plugins/
Desarrollo de bibliotecas JS
● Si nuestra lógica se vuelve extensa y compleja, sería bueno crear nuestra
própia biblioteca JS, encapsulando lo que nos interesa (¡podemos usar
Backbone que para eso está!).
var MyModule = {
init: function(options) {
// do my stuff.
},
_myprivatefunction(): function {
// other stuff.
}
};
MyModule.init(current_options);
Conclusiones
● Muchas novedades en D8 en materia de JS. Ahora es
tiempo de ponerlas en práctica!
● Muchas nuevas APIs que nos pueden ayudar
● Cuidado con las librerías JS que añadimos a nuestros
proyectos. A veces es mejor picar algo a mano que
empezar a añadir cosas descargadas de Internet.
● Debemos perder el miedo a hacer nuestras librerías y
plugins. Es buena práctica!
Contacto
● Twitter: @rvilar
● Correo: ramon@ymbra.com
● Web: http://ymbra.com
● Grácias a todos(as) ¿Preguntas?

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Il web e la sua evoluzione
Il web e la sua evoluzioneIl web e la sua evoluzione
Il web e la sua evoluzione
 
Responsive web design
Responsive web designResponsive web design
Responsive web design
 
HTML
HTMLHTML
HTML
 
Introducción a html 5
Introducción a html 5Introducción a html 5
Introducción a html 5
 
Presentation on html, css
Presentation on html, cssPresentation on html, css
Presentation on html, css
 
Cascading Style Sheet
Cascading Style SheetCascading Style Sheet
Cascading Style Sheet
 
Web Standards
Web StandardsWeb Standards
Web Standards
 
A Product Requirements Document (PRD) Sample
A Product Requirements Document (PRD) SampleA Product Requirements Document (PRD) Sample
A Product Requirements Document (PRD) Sample
 
An introduction to Vue.js
An introduction to Vue.jsAn introduction to Vue.js
An introduction to Vue.js
 
Introduction to Angularjs
Introduction to AngularjsIntroduction to Angularjs
Introduction to Angularjs
 
PHP MVC
PHP MVCPHP MVC
PHP MVC
 
REST Versioning Architecture with ASP.NET MVC Web API v1.2
REST Versioning Architecture with ASP.NET MVC Web API v1.2REST Versioning Architecture with ASP.NET MVC Web API v1.2
REST Versioning Architecture with ASP.NET MVC Web API v1.2
 
An Introduction To Magento
An Introduction To MagentoAn Introduction To Magento
An Introduction To Magento
 
HTML 5: Audio And Video
HTML 5: Audio And VideoHTML 5: Audio And Video
HTML 5: Audio And Video
 
Introduction into Struts2 jQuery Grid Tags
Introduction into Struts2 jQuery Grid TagsIntroduction into Struts2 jQuery Grid Tags
Introduction into Struts2 jQuery Grid Tags
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
 
Magento 2
Magento 2Magento 2
Magento 2
 
Web Components
Web ComponentsWeb Components
Web Components
 
CSS
CSSCSS
CSS
 
1. introduction to html5
1. introduction to html51. introduction to html5
1. introduction to html5
 

Destacado

El universo JavaScript en Drupal 7
El universo JavaScript en Drupal 7El universo JavaScript en Drupal 7
El universo JavaScript en Drupal 7Ymbra
 
Drupal Performance - SerBenfiquista.com Case Study
Drupal Performance - SerBenfiquista.com Case StudyDrupal Performance - SerBenfiquista.com Case Study
Drupal Performance - SerBenfiquista.com Case Studyhernanibf
 
One Drupal to rule them all - Drupalcamp London
One Drupal to rule them all - Drupalcamp LondonOne Drupal to rule them all - Drupalcamp London
One Drupal to rule them all - Drupalcamp Londonhernanibf
 
Intro to drupal
Intro to drupalIntro to drupal
Intro to drupalhernanibf
 
Drupal8 : novedades y nuevas funcionalidades
Drupal8 : novedades y nuevas funcionalidadesDrupal8 : novedades y nuevas funcionalidades
Drupal8 : novedades y nuevas funcionalidadesAlberto Permuy Leal
 
Obradoiro Drupal de 0 a 100 - Vigo 2015
Obradoiro Drupal de 0 a 100 - Vigo 2015Obradoiro Drupal de 0 a 100 - Vigo 2015
Obradoiro Drupal de 0 a 100 - Vigo 2015Alberto Permuy Leal
 
A Cultura da Auga no proxecto Abeancos.gal
A Cultura da Auga no proxecto Abeancos.galA Cultura da Auga no proxecto Abeancos.gal
A Cultura da Auga no proxecto Abeancos.galAlberto Permuy Leal
 
Drupal architectures for flexible content - Drupalcon Barcelona
Drupal architectures for flexible content - Drupalcon BarcelonaDrupal architectures for flexible content - Drupalcon Barcelona
Drupal architectures for flexible content - Drupalcon Barcelonahernanibf
 
Acquia Company Update on Drupal 8.2/8.3/OCTO
Acquia Company Update on Drupal 8.2/8.3/OCTOAcquia Company Update on Drupal 8.2/8.3/OCTO
Acquia Company Update on Drupal 8.2/8.3/OCTOAngela Byron
 
Manual de instalación drupal 7.2 mejorado Universidad de Los Andes
Manual de instalación drupal 7.2 mejorado Universidad de Los AndesManual de instalación drupal 7.2 mejorado Universidad de Los Andes
Manual de instalación drupal 7.2 mejorado Universidad de Los AndesBrox Technology
 
Elaboració del whisky de malta
Elaboració del whisky de maltaElaboració del whisky de malta
Elaboració del whisky de maltaJoan Mitjavila
 
Correo institucional_Escuela de Verano
Correo institucional_Escuela de VeranoCorreo institucional_Escuela de Verano
Correo institucional_Escuela de VeranoElena Moreno
 
Ice Presentacio
Ice PresentacioIce Presentacio
Ice Presentacioaaupcfira
 
iPad sales app - Professionelles Präsentieren im Vertrieb
iPad sales app - Professionelles Präsentieren im VertriebiPad sales app - Professionelles Präsentieren im Vertrieb
iPad sales app - Professionelles Präsentieren im Vertriebexcelsis
 
BAU International Executive MBA Webinar
BAU International Executive MBA WebinarBAU International Executive MBA Webinar
BAU International Executive MBA Webinarbauinternational
 
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDevTriple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDevWerner Keil
 
Biologie de synthèse
Biologie de synthèseBiologie de synthèse
Biologie de synthèseGreenFacts
 

Destacado (20)

El universo JavaScript en Drupal 7
El universo JavaScript en Drupal 7El universo JavaScript en Drupal 7
El universo JavaScript en Drupal 7
 
Drupal Performance - SerBenfiquista.com Case Study
Drupal Performance - SerBenfiquista.com Case StudyDrupal Performance - SerBenfiquista.com Case Study
Drupal Performance - SerBenfiquista.com Case Study
 
One Drupal to rule them all - Drupalcamp London
One Drupal to rule them all - Drupalcamp LondonOne Drupal to rule them all - Drupalcamp London
One Drupal to rule them all - Drupalcamp London
 
Intro to drupal
Intro to drupalIntro to drupal
Intro to drupal
 
Drupal8 : novedades y nuevas funcionalidades
Drupal8 : novedades y nuevas funcionalidadesDrupal8 : novedades y nuevas funcionalidades
Drupal8 : novedades y nuevas funcionalidades
 
Obradoiro Drupal de 0 a 100 - Vigo 2015
Obradoiro Drupal de 0 a 100 - Vigo 2015Obradoiro Drupal de 0 a 100 - Vigo 2015
Obradoiro Drupal de 0 a 100 - Vigo 2015
 
A Cultura da Auga no proxecto Abeancos.gal
A Cultura da Auga no proxecto Abeancos.galA Cultura da Auga no proxecto Abeancos.gal
A Cultura da Auga no proxecto Abeancos.gal
 
Drupal architectures for flexible content - Drupalcon Barcelona
Drupal architectures for flexible content - Drupalcon BarcelonaDrupal architectures for flexible content - Drupalcon Barcelona
Drupal architectures for flexible content - Drupalcon Barcelona
 
Acquia Company Update on Drupal 8.2/8.3/OCTO
Acquia Company Update on Drupal 8.2/8.3/OCTOAcquia Company Update on Drupal 8.2/8.3/OCTO
Acquia Company Update on Drupal 8.2/8.3/OCTO
 
Manual de instalación drupal 7.2 mejorado Universidad de Los Andes
Manual de instalación drupal 7.2 mejorado Universidad de Los AndesManual de instalación drupal 7.2 mejorado Universidad de Los Andes
Manual de instalación drupal 7.2 mejorado Universidad de Los Andes
 
Elaboració del whisky de malta
Elaboració del whisky de maltaElaboració del whisky de malta
Elaboració del whisky de malta
 
Correo institucional_Escuela de Verano
Correo institucional_Escuela de VeranoCorreo institucional_Escuela de Verano
Correo institucional_Escuela de Verano
 
Ice Presentacio
Ice PresentacioIce Presentacio
Ice Presentacio
 
Le client au centre
Le client au centreLe client au centre
Le client au centre
 
iPad sales app - Professionelles Präsentieren im Vertrieb
iPad sales app - Professionelles Präsentieren im VertriebiPad sales app - Professionelles Präsentieren im Vertrieb
iPad sales app - Professionelles Präsentieren im Vertrieb
 
Social Media Marketing: mucho más que redes sociales
Social Media Marketing: mucho más que redes socialesSocial Media Marketing: mucho más que redes sociales
Social Media Marketing: mucho más que redes sociales
 
Manual divulgativo life_urogallo
Manual divulgativo life_urogalloManual divulgativo life_urogallo
Manual divulgativo life_urogallo
 
BAU International Executive MBA Webinar
BAU International Executive MBA WebinarBAU International Executive MBA Webinar
BAU International Executive MBA Webinar
 
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDevTriple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
 
Biologie de synthèse
Biologie de synthèseBiologie de synthèse
Biologie de synthèse
 

Similar a El universo JavaScript en Drupal 8

Arquitectura de proyectos Drupal
Arquitectura de proyectos DrupalArquitectura de proyectos Drupal
Arquitectura de proyectos DrupalYmbra
 
Drupal 8 WorkShop
Drupal 8 WorkShopDrupal 8 WorkShop
Drupal 8 WorkShopKeopx
 
Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015  Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015 Keopx
 
¡This is drupal! - Global Training Days
¡This is drupal! - Global Training Days¡This is drupal! - Global Training Days
¡This is drupal! - Global Training DaysLa Drupalera
 
Introduccion técnica a Drupal
Introduccion técnica a DrupalIntroduccion técnica a Drupal
Introduccion técnica a DrupalPedro Cambra
 
MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!SergioIglesiasNET
 
Inciación a Drupal 8
Inciación a Drupal 8Inciación a Drupal 8
Inciación a Drupal 8Julian Valero
 
Introducción a la programación para joomla
Introducción a la programación para joomlaIntroducción a la programación para joomla
Introducción a la programación para joomlaRoberto Segura
 
Desarrollo y arquitectura de proyectos con Features
Desarrollo y arquitectura de proyectos con FeaturesDesarrollo y arquitectura de proyectos con Features
Desarrollo y arquitectura de proyectos con FeaturesYmbra
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Facescok12v
 
Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2SEAT, S.A.
 
Los mejores trucos y prácticas para configurar drupal
Los mejores trucos y prácticas para configurar drupalLos mejores trucos y prácticas para configurar drupal
Los mejores trucos y prácticas para configurar drupalSiteGround España
 
Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)Robert Rayco Quiroz
 
Presentacion Drupal Ccrtv
Presentacion Drupal CcrtvPresentacion Drupal Ccrtv
Presentacion Drupal CcrtvPedro Cambra
 

Similar a El universo JavaScript en Drupal 8 (20)

Arquitectura de proyectos Drupal
Arquitectura de proyectos DrupalArquitectura de proyectos Drupal
Arquitectura de proyectos Drupal
 
Drupal 8 WorkShop
Drupal 8 WorkShopDrupal 8 WorkShop
Drupal 8 WorkShop
 
Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015  Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015
 
¡This is drupal! - Global Training Days
¡This is drupal! - Global Training Days¡This is drupal! - Global Training Days
¡This is drupal! - Global Training Days
 
Introduccion técnica a Drupal
Introduccion técnica a DrupalIntroduccion técnica a Drupal
Introduccion técnica a Drupal
 
MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!
 
This is Drupal! (Basics)
This is Drupal! (Basics)This is Drupal! (Basics)
This is Drupal! (Basics)
 
Inciación a Drupal 8
Inciación a Drupal 8Inciación a Drupal 8
Inciación a Drupal 8
 
Introducción a la programación para joomla
Introducción a la programación para joomlaIntroducción a la programación para joomla
Introducción a la programación para joomla
 
Introduccion drupal
Introduccion drupalIntroduccion drupal
Introduccion drupal
 
Desarrollo y arquitectura de proyectos con Features
Desarrollo y arquitectura de proyectos con FeaturesDesarrollo y arquitectura de proyectos con Features
Desarrollo y arquitectura de proyectos con Features
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
JS Patterns Applied to a Real World Example
JS Patterns Applied to a Real World ExampleJS Patterns Applied to a Real World Example
JS Patterns Applied to a Real World Example
 
Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2
 
Los mejores trucos y prácticas para configurar drupal
Los mejores trucos y prácticas para configurar drupalLos mejores trucos y prácticas para configurar drupal
Los mejores trucos y prácticas para configurar drupal
 
Dia2
Dia2Dia2
Dia2
 
Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)
 
Presentacion Drupal Ccrtv
Presentacion Drupal CcrtvPresentacion Drupal Ccrtv
Presentacion Drupal Ccrtv
 
Semana 2 Configuración entorno de desarrollo
Semana 2   Configuración entorno de desarrolloSemana 2   Configuración entorno de desarrollo
Semana 2 Configuración entorno de desarrollo
 
JQuery + React js
JQuery + React js JQuery + React js
JQuery + React js
 

Más de Ymbra

Migrate, una herramienta de trabajo y desarrollo
Migrate, una herramienta de trabajo y desarrolloMigrate, una herramienta de trabajo y desarrollo
Migrate, una herramienta de trabajo y desarrolloYmbra
 
Field Types API: Field, widgets y formatters
Field Types API: Field, widgets y formattersField Types API: Field, widgets y formatters
Field Types API: Field, widgets y formattersYmbra
 
Distribuciones en Drupal
Distribuciones en DrupalDistribuciones en Drupal
Distribuciones en DrupalYmbra
 
Introducció al Git
Introducció al GitIntroducció al Git
Introducció al GitYmbra
 
Views 3: Qué hay de nuevo
Views 3: Qué hay de nuevoViews 3: Qué hay de nuevo
Views 3: Qué hay de nuevoYmbra
 
ELISAVA Beta. Cas d'èxit desenvolupat per Ymbra
ELISAVA Beta. Cas d'èxit desenvolupat per YmbraELISAVA Beta. Cas d'èxit desenvolupat per Ymbra
ELISAVA Beta. Cas d'èxit desenvolupat per YmbraYmbra
 
Drupal 7: mucho más que una nueva versión (para desarrolladores)
Drupal 7: mucho más que una nueva versión (para desarrolladores)Drupal 7: mucho más que una nueva versión (para desarrolladores)
Drupal 7: mucho más que una nueva versión (para desarrolladores)Ymbra
 
Drupal 7 multilingüe: internacionalització i localització de llocs web
Drupal 7 multilingüe: internacionalització i localització de llocs webDrupal 7 multilingüe: internacionalització i localització de llocs web
Drupal 7 multilingüe: internacionalització i localització de llocs webYmbra
 
Drupal 7: mucho más que una nueva versión
Drupal 7: mucho más que una nueva versiónDrupal 7: mucho más que una nueva versión
Drupal 7: mucho más que una nueva versiónYmbra
 
Desmitificant l'HTML5
Desmitificant l'HTML5Desmitificant l'HTML5
Desmitificant l'HTML5Ymbra
 

Más de Ymbra (10)

Migrate, una herramienta de trabajo y desarrollo
Migrate, una herramienta de trabajo y desarrolloMigrate, una herramienta de trabajo y desarrollo
Migrate, una herramienta de trabajo y desarrollo
 
Field Types API: Field, widgets y formatters
Field Types API: Field, widgets y formattersField Types API: Field, widgets y formatters
Field Types API: Field, widgets y formatters
 
Distribuciones en Drupal
Distribuciones en DrupalDistribuciones en Drupal
Distribuciones en Drupal
 
Introducció al Git
Introducció al GitIntroducció al Git
Introducció al Git
 
Views 3: Qué hay de nuevo
Views 3: Qué hay de nuevoViews 3: Qué hay de nuevo
Views 3: Qué hay de nuevo
 
ELISAVA Beta. Cas d'èxit desenvolupat per Ymbra
ELISAVA Beta. Cas d'èxit desenvolupat per YmbraELISAVA Beta. Cas d'èxit desenvolupat per Ymbra
ELISAVA Beta. Cas d'èxit desenvolupat per Ymbra
 
Drupal 7: mucho más que una nueva versión (para desarrolladores)
Drupal 7: mucho más que una nueva versión (para desarrolladores)Drupal 7: mucho más que una nueva versión (para desarrolladores)
Drupal 7: mucho más que una nueva versión (para desarrolladores)
 
Drupal 7 multilingüe: internacionalització i localització de llocs web
Drupal 7 multilingüe: internacionalització i localització de llocs webDrupal 7 multilingüe: internacionalització i localització de llocs web
Drupal 7 multilingüe: internacionalització i localització de llocs web
 
Drupal 7: mucho más que una nueva versión
Drupal 7: mucho más que una nueva versiónDrupal 7: mucho más que una nueva versión
Drupal 7: mucho más que una nueva versión
 
Desmitificant l'HTML5
Desmitificant l'HTML5Desmitificant l'HTML5
Desmitificant l'HTML5
 

Último

PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 

Último (11)

PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 

El universo JavaScript en Drupal 8

  • 1. El universo JavaScript en D8 Ramon Vilar
  • 4. Índice 01. D8 y JavaScript 02. El objeto JS global Drupal 03. Otras APIs del core 04. Añadir JS a nuestros módulos y temas 05. Buenas prácticas en desarrollo JS 06. Conclusiones
  • 6. Drupal 8 y JavaScript ● En esta nueva versión, la importáncia de JS ha crecido y mucho. ● Inclusión de librerías muy importantes y que cambian la forma de trabajar con JS – Ckeditor en el núcleo – Backbone, underscore, ... ● Librerías ya existentes a nuevas versiones: – jQuery 2.0.3, jQuery.UI 1.10.2, jQuery Once 1.2.3, ...
  • 7. Estrictos con la calidad de código “use strict” - http://ves.cat/kMMq Nueva característica de ECMAScript 5 para pasar a ejecutar código en modo estricto. Se debe añadir la cadena cómo primera línia dentro en el contexto de la función. JSHint – http://jshint.com Herramienta de control de calidad del código JS que escribimos. Integrado para revisar todo el código del núcleo. Ver .jshintrc y .jshintignore
  • 8. Ayuda a aplicaciones livianas domReady ● Cada petición a Drupal, carga drupal.js, fichero dónde carga toda la funcionalidad JS de Drupal. ● Este fichero sólo usaba jQuery para hacer: $(window).ready(function() {...}); ● Para hacer esto no hace falta cargar jQuery entero (90kb) y podemos usar domReady (740 bytes). domready(function () {...});
  • 9. Backbone & Underscore ● La complejidad de las aplicaciones JS hace que se requiera un framework MVC para poder arquitecturizarla ● Hoy en día existen múltiples que estan de moda: Backbone, Angular.js o Ember.js ● La comunidad se ha decidido por Backbone porque es la que tiene la mayor comunidad de usuarios y la más estable. ● Podeis ver ejemplos de uso en los módulos del core Edit, Toolbar o Contextual ● Underscore se incluye porque es requisito de Backbone, però también podemos aprovecharnos de ellos.
  • 10. HTML5 y RWD ● Drupal 8 está desarrollado en HTML5 y es mobile friendly ● Para ello usa algunas librerías de apoyo, cómo son Picturefill, classList o HTML5Shiv (*) ● Usa otras librerías interesantes cómo Modernizr que podemos usar en nuestros desarrollos. (*) HTML5Shiv va a desaparecer en breve porque el core no da soporte a IE8 http://ves.cat/kOor
  • 11. EL OBJETO JS GLOBAL Drupal
  • 12. El objeto JS global Drupal ● La gente sigue sin conocer un objeto clave en el desarrollo Drupal: Drupal /core/misc/drupal.js ● A tener en cuenta: – Drupal.behaviors – Drupal.theme – Drupal.t – ...
  • 13. Drupal.behaviors ● Es la forma de añadir comportamiento a una página o a un elemento: Drupal.behaviors.myModuleBehavior = { attach: function (context, settings) { $('.select').addClass('foo'); } }; ● Nos aporta funciones de attach y detach. Se llama en cada petición de la página (ajax) ● Si nos interesa que sólo se llame una vez: once().
  • 14. Drupal.theme ● El theming también llegó al JS. ● Ha cambiado un poco en D8 (no usamos prototype) ● Todo HTML añadido a la página se debería hacer mediante una función de theming Drupal.theme.placeholder = function (str) { return '<em class="placeholder">' + Drupal.checkPlain(str) + '</em>'; }; // Calling a theme function. Drupal.theme('placeholder', bar);
  • 15. Drupal.t ● Drupal.t() funciona exactamente igual que el método $this->t() (en D8 es un servicio y no una función procedural) Drupal.t(“Path: !uri”, {'!uri', uri}); ● Las variables se pueden pasar con @, ! y %; con el mismo significado que en PHP. Drupal.checkPlain
  • 17. Otras nuevas APIs (I) Drupal.announce Envia notificaciones al usuario para informar de cambios en la página que no se pueden describir con estados ARIA. Drupal.debounce Limita la invocación de una función en un periodo de tiempo. Drupal.tabbingManager También ligado a la accesibilidad del sitio. Controla el orden y las acciones a ejecutar en el tabbing de elementos.
  • 18. Otras nuevas APIs (y II) Drupal.displace Calcula distancias de offset de viewport. Resuelve el problema de posicionamiento entre Overlay y el Toolbar Drupal.dialog API que simula el elemento dialog de HTML5. Drupal.history Gestiona el historial de navegación
  • 19. AÑADIR JS A NUESTROS MÓDULOS Y TEMAS
  • 20. Añadir JS a nuestro módulo ● En Drupal 7 podíamos usar, entre otros: drupal_add_js('js/mymodule.js'); scripts[] = 'js/mymodule.js'; ● Esto en Drupal 8 no se puede usar. ● Ahora se nos obliga a definir todos nuestros ficheros JS cómo librerías. hook_library_info()
  • 21. mymodule.libraries.yml foo: version: 1.0 js: script.js: {} dependencies: - core/jquery - core/drupal - core/drupalSettings - core/jquery.once
  • 22. Añadir JS a nuestro módulo (III) ● En el módulo, lo añadiremos al render array de nuestro elemento: $my_render['#attached']['library'][] = 'mymodule/foo'; ● Si queremos añadirlo en todas las páginas, podremos usar hook_page_build() function edit_page_build(&$page) { if(!Drupal::currentUser()->hasPermission('...')) { return; } // some code $page['#attached']['library'][] = 'edit/edit'; }
  • 23. Añadir JS a nuestro tema ● Ahora todos los scripts tienen que declarar sus dependencias en ficheros de librerías mytheme.libraries.yml ● Para añadirlos a nuestros temas: … core: 8.x libraries: - bartik/base ckeditor_stylesheets: - css/ckeditor-iframe.css …
  • 24. Pasar datos de PHP a JS ● Tampoco podemos usar drupal_add_js() $form['#attached']['js'][] = array( 'type' => 'setting', 'data' => array('blockPlacement' => $placement), ); ● Para usar ese dato en nuestro JS: Drupal.settings.blockPlacement drupalSettings.blockPlacement ● drupalSettings es una variable global intencionada.
  • 26. Buenas prácticas en desarrollo JS (I) ● Usar siempre el modo estricto: “use strict”; ● JSHint está ahí para ayudarnos. Usémoslo! ● Usa Firebug o alguno de sus primos! ● Sobretodo, acordaos de declarar “todas” las variables! Es buena práctica hacerlo siempre al inicio de la función ● Funciones anónimas para evitar problemas de scope de variables y funciones. ● Perdamos el miedo a crear nuestras própias librerías o plugins.
  • 27. Buenas práctica en desarrollo JS (y II) ● Hay que ir con cuidado con los selectores JS que se escriben. Puede ser un foco de problemas de performance http://ves.cat/kRFb ● Si nuestro JS toma cierta notoriedad, no tengamos miedo de crear nuestro própio plugin jQuery, nuestro componente en Backbone o nuestra própia librería JS.
  • 28. Desarrollo de plugins jQuery ● Si un componente jQuery asociado tiende a ser reutilizable o tiene cierta notoriedad, escribamos un plugin jQuery. $.fn.myPlugin = function() { // My code. return this; }; $(“input”).myPlugin(); ● http://learn.jquery.com/plugins/
  • 29. Desarrollo de bibliotecas JS ● Si nuestra lógica se vuelve extensa y compleja, sería bueno crear nuestra própia biblioteca JS, encapsulando lo que nos interesa (¡podemos usar Backbone que para eso está!). var MyModule = { init: function(options) { // do my stuff. }, _myprivatefunction(): function { // other stuff. } }; MyModule.init(current_options);
  • 30. Conclusiones ● Muchas novedades en D8 en materia de JS. Ahora es tiempo de ponerlas en práctica! ● Muchas nuevas APIs que nos pueden ayudar ● Cuidado con las librerías JS que añadimos a nuestros proyectos. A veces es mejor picar algo a mano que empezar a añadir cosas descargadas de Internet. ● Debemos perder el miedo a hacer nuestras librerías y plugins. Es buena práctica!
  • 31. Contacto ● Twitter: @rvilar ● Correo: ramon@ymbra.com ● Web: http://ymbra.com ● Grácias a todos(as) ¿Preguntas?