(function (window, $) { 'use strict'; if (!$) { console.error('ScrollSig requiere jQuery.'); return; } var SCROLL_RENDERED = 'scrollsigrendered'; var SCROLL_CONTAINER = 'scrollsig-container'; var SCROLL_STICKY = 'scrollsig-sticky'; /** * ============================================================ * RENDERIZAR SCROLL SIG * ============================================================ * * Busca: * * table.scrollsig * * que todavía no tengan: * * scrollsigrendered */ window.RenderizarScrollSig = function () { $('table.scrollsig') .not('.' + SCROLL_RENDERED) .each(function () { var $grid = $(this); renderizarGrid($grid); }); }; /** * ============================================================ * RENDERIZAR UN GRID * ============================================================ */ function renderizarGrid($grid) { /* * -------------------------------------------------------- * 1. EJECUTAR FUNCIÓN PREVIA * -------------------------------------------------------- * * Ejemplo: * * data-scrollfuncion="PrepararGrid" * * function PrepararGrid(grid) { * } */ ejecutarFuncionPrevia($grid); /* * -------------------------------------------------------- * 2. CREAR CONTENEDOR * -------------------------------------------------------- */ crearContenedor($grid); /* * -------------------------------------------------------- * 3. CONFIGURAR TAMAÑO * -------------------------------------------------------- */ configurarTamano($grid); /* * -------------------------------------------------------- * 4. CONFIGURAR FILAS STICKY * -------------------------------------------------------- */ configurarFilasSticky($grid); /* * -------------------------------------------------------- * 5. MARCAR COMO RENDERIZADO * -------------------------------------------------------- */ $grid.addClass( SCROLL_RENDERED ); } /** * ============================================================ * FUNCIÓN PREVIA * ============================================================ * * data-scrollfuncion="MiFuncion" * * Se busca: * * window.MiFuncion * * y se ejecuta: * * MiFuncion(grid); */ function ejecutarFuncionPrevia($grid) { var nombreFuncion = $.trim( $grid.attr('data-scrollfuncion') || '' ); if (!nombreFuncion) { return; } var funcion = obtenerFuncionGlobal(nombreFuncion); if (typeof funcion !== 'function') { console.warn( 'ScrollSig: no se encontró la función "' + nombreFuncion + '".' ); return; } /* * Mandamos el elemento TABLE real. */ funcion( $grid[0] ); } /** * Permite incluso nombres como: * * MiFuncion * * MiModulo.PrepararGrid */ function obtenerFuncionGlobal(nombre) { var partes = nombre.split('.'); var contexto = window; for ( var i = 0; i < partes.length; i++ ) { if ( contexto === null || contexto === undefined ) { return null; } contexto = contexto[partes[i]]; } return contexto; } /** * ============================================================ * CREAR CONTENEDOR * ============================================================ * * Antes: * *