# Yahoo! UI Library

Yahoo User Interface(YUI) es una biblioteca escrita en JavaScript para la construcción de aplicaciones interactivas (RIA). Se utilizaba para el desarrollo de aplicaciones web con apariencia de aplicaciones de escritorio, con componentes vistosos y personalizables y con una fuerte presencia de llamadas AJAX. Fue liberada por Yahoo con licencia BSD en el año 2005. En agosto de 2014 Yahoo anunció el cese de su desarrollo, motivado por los cambios en la industria, las mejoras en la adopción de estándares por parte de los navegadores, la progresiva pérdida de interés en una biblioteca grande como YUI, y la proliferación de soluciones server-side.

## Características

La biblioteca está completamente documentada en su página web y se compone de seis componentes: Núcleo YUI, utilidades, controles UI, componentes CSS, herramientas de desarrollo y de construcción.

### Núcleo

El núcleo de YUI es un ligero conjunto de herramientas (31KB la versión compacta) para manejar eventos y manipular el árbol DOM.
* YAHOO Global Object: Los Objetos Globales Yahoo contienen utilidades y otras infraestructuras base para la biblioteca.
* Dom Collection: Ayuda para la manipulación del árbol DOM, incluyendo posicionamiento de elementos y gestión de estilos CSS.
* Event Utility: Permite acceder de forma segura y sencilla a los eventos de un navegador web y, mediante el objeto Custom Event, publicar y suscribirse a eventos customizados.

### Utilidades

* Animation: Ayuda a crear efectos animados.
* Browser History Manager: Ayuda complementaria para el botón Atrás y la gestión de Marcadores/Favoritos de los navegadores web.
* Connection Manager: Ayuda para manejar el objeto XMLHttpRequest.
* Cookie: Permite gestionar las cookies.
* DataSource: Proporciona una interfaz común para que otros componentes puedan interactuar con diferentes tipos de datos.
* Drag and Drop: Facilita la creación de eventos y elementos que pueden ser arrastrados.
* Element: Proporciona una capa para los elementos que facilita el añadido de escuchadores, manipulación del árbol DOM y atributos 'get' y 'set'.
* Get: La utilidad Get soporta la carga asíncrona de datos y archivos de estilos CSS externos.
* ImageLoader: Permite aplazar la carga de imágenes que no son visibles durante la carga de la página, proporcionando un aumento del rendimiento.
* JSON: Proporciona métodos para el tratamiento de datos JSON. Estos métodos están basados en el trabajo de Douglas Crockford.
* Resize: Permite redimensionar los elementos HTML.
* Selector: Permite referenciar elementos HTML mediante la sintaxis CSS3.
* YUI Loader: Es un cargador del lado cliente que permite la carga de forma dinámica de cualquier componente y dependencia de la biblioteca al vuelo.

### Controles

* AutoComplete: Proporciona la función de auto completado (lista de sugeridos) para los usuarios. Soporta varios formatos de datos, tanto del lado cliente como del lado servidor (vía XMLHttpRequest).
* Button: Permite la creación de botones gráficos que funcionan como un botón tradicional en HTML.
* Calendar: Un calendario gráfico y de control dinámico.
* Charts: Permite la creación de diferentes tipos de gráficos (lineales, de barras, etc.).
* Color Picker: Proporciona una interfaz gráfica para la selección de colores.
* Container: Proporciona una interfaz gráfica como Tooltip, paneles, cuadros de diálogo, etc.
* DataTable: Una potente herramienta para mostrar tablas tabulares en una página web. Permite la ordenación de columnas tanto en el lado cliente como en el servidor, paginación, scroll, selección de filas, redimensionado de columnas y edición inline.
A continuación se muestra un ejemplo de declaración con el uso del componente DataTable:
* ImageCropper: Proporciona una interfaz gráfica para recortar una imagen desde el lado cliente.
* Layout Manager.
* Menú: Proporciona una API para la creación de menús flotantes, barras de menú y menús de contexto.
* Rich Text Editor: Es un sofisticado editor de texto rico modular del lado cliente y muy configurable.
* Slider: Proporciona un elemento genérico que permite al usuario elegir entre un rango de valores.
* TabView: Permite la navegación entre pestañas, soportando la carga dinámica de contenido vía XMLHttpRequest.
* TreeView: Añade un árbol de contenido con nodos que se pueden contraer y expandir para navegar por los elementos.
* Uploader: Permite la carga de varios archivos mostrando una barra de progreso.

### Recursos CSS

* CSS Base: Utilidades para la manipulación de la hoja de estilos de la forma clásica.
* CSS Grids.
* CSS Fonts.
* CSS Reset.

### Herramientas de desarrollo

* Logger: Permite escribir mensajes de log en una consola, o utilizar las que proporcionan la extensión Firebug para el navegador Mozilla Firefox o la consola JavaScript del navegador Safari.
* Profiler: Para perfilar el código JavaScript.
* ProfilerViewer: Usado con el anterior componente (Profiler) proporciona un perfilado visual.
* YUI Test: Permite añadir unidades de testeo al código JavaScript.

### Herramientas de construcción

* YUI Compressor: Es un compresor de código JavaScript y CSS diseñado para proporcionar un resultado 100% seguro.