/* Codificación UTF-8 * Métodos necesarios para paginar en un tabular o una ficha */ /* FUNCIONES: * blockRegPagina( raizJSON, pag ) * setStateFieldsHTML_paginar( raizJSON, panel, claseM, row ) * setValueFieldsHTML_paginar( raizJSON, panel, claseM, row ) * paginar( pagSource, pagTarget, panel, panelJSON, claseM ) */ /** * blockRegPagina(): Devuelve el intervalo de registros correspondientes a una página de un panel tabular * * @access private * @param raizJSON: * @param pag: */ gvh.blockRegPagina = function( raizJSON, pag ) { gvh.showConsoleMsg('beginGroup',' ** gvh_paginar.js - blockRegPagina() '); var rowsPag = gvh.getRowsPag( raizJSON ); var numReg = gvh.getNumReg( raizJSON ); var numPagTotal = Math.ceil( numReg/rowsPag ); var bloque = []; var regIni = 0; var regFin = parseInt(rowsPag) - 1; if (pag > 0) { regIni = pag * (rowsPag); regFin = parseInt(regIni) + parseInt(rowsPag - 1); } gvh.showConsoleMsg( 'log',' ini: '+regIni+' fin: '+regFin ); bloque['ini'] = regIni; bloque['fin'] = regFin; gvh.showConsoleMsg('endGroup'); return bloque; } /** * setStateFieldsHTML_paginar(): modificar el aspecto visual del cambio conforme al estado correspondiente * * @access private * @param raizJSON: * @param panel: tipo de panel sobre el que se está trabajando ['lis','lisDetalle'] * @param claseM: clase del panel sobre el que queremos calcular el índice * @param row: fila seleccionada del panel */ gvh.setStateFieldsHTML_paginar = function( raizJSON, panel, claseM, row ) { var sufijo = panel+'_'+row; var panelJSON = panel.substr( 0, 3 ); var numReg = gvh.getNumReg( raizJSON ); var sufijoRow; var rowTab; var objCheckRow; var jsonReg = gvh.getFieldsJSON( raizJSON, row ); var tipoCheck = ''; var stateRow = gvh.getStateReg( raizJSON, row, 'state' ); var color = ''; if (panelJSON == 'lis') { var rowsPag = gvh.getRowsPag( raizJSON ); rowTab = row%rowsPag; sufijoRow = panel+'_'+rowTab; var idCheck if ( claseM == 'WSelection' ) { tipoCheck = 'radio'; idCheck = 'vsCheck_'+sufijoRow; } else { tipoCheck = 'checkbox'; idCheck = 'check_' +sufijoRow; } objCheckRow = $( '#'+idCheck+'[data-gvhClaseManejadora='+claseM+']' ); } var selectedRow = gvh.getSelectedReg( raizJSON, row ); var objPanel = $( '#P_'+panel+'[data-gvhClaseManejadora='+claseM+']' ); gvh.showConsoleMsg('beginGroup',' ** gvh_paginar.js - setStateFieldsHTML_paginar() '); if (row < numReg) // Comprobación necesaria cuando es un panel tabular, en panel ficha siempre se cumplirá { // Capa IGEPVisible var idIgepVisible = 'IGEPVisible'+sufijo; var IgepVisible = $( '#'+idIgepVisible+'[data-gvhClaseManejadora='+claseM+']' ); if (IgepVisible.is(':hidden')) { IgepVisible.show(); } if (panelJSON == 'lis') { $( 'tr[id='+sufijoRow+']' ).attr( 'data-gvhStateRow', stateRow ); // Color de la fila var fila = $( '#'+sufijoRow+'[data-gvhClaseManejadora='+claseM+']' ); var color = gvh.getClassRow( raizJSON, row ); var cssRow = fila.attr( 'class' ); fila.removeClass( cssRow ); fila.addClass( color ); // Checkbox de la fila var selectedJSONDecode = gvh.getSelectedReg( raizJSON, row ); switch( selectedJSONDecode ) { case 'undefined' : selectedJSONDecode = false; break; case 'selected' : objCheckRow.prop( 'checked', true ); // REVIEW : ¿Por qué marcar como deshabilitado el checkbox de selección de las filas //if( tipoCheck == 'checkbox' ) //{ // objCheckRow.prop( 'disabled', true ); //} fila.addClass( 'rowOn' ); fila.removeClass( 'none' ); break; default: objCheckRow.prop( 'checked', false ); // REVIEW : ¿Por qué marcar como deshabilitado el checkbox de selección de las filas //if( tipoCheck == 'checkbox' ) //{ // objCheckRow.prop( 'disabled', false ); //} fila.removeClass( 'rowOn' ); if (color == '') { fila.addClass( 'none' ); } }//switch selectedJSONDecode switch( stateRow ) { case 'borrada' : fila.removeClass( 'rowOn' ); fila.addClass( 'rowDeleted' ); break; default: fila.removeClass( 'rowDeleted' ); break; } } //if panel tabular var idCampo; var idIcono; var external = false; for (var field in jsonReg) // Recorremos los campos correspondientes al registro para obtener su valor y asignarlo al componente HTML { // Comprobamos si el campo es visible o no var visible = gvh.isVisible( raizJSON, field, row, external, true ); if (visible) { idCampo = 'cam___'+field+'___'+sufijoRow; idIcono = 'icon_cam___'+field+'___'+sufijoRow; /*if (panelJSON == 'lis') { idCampo = 'cam___'+field+'___'+panel+'_'+rowTab; idIcono = 'icon_cam___'+field+'___'+panel+'_'+rowTab; }*/ var id = jsonReg[field]['id']; objField = $( '[id='+idCampo+'][data-gvhClaseManejadora='+claseM+']' ); var stateField = jsonReg[field]['edit']; //var stateField = objField.attr( 'data-gvhState' ); var plugin = gvh.getPlugin( raizJSON, field, row ); switch( stateRow ) { case 'modificada': if (stateField) { objField.prop('readonly',false); if( plugin !== '' && plugin !== 'cwcampotexto' ) { objField.prop('disabled',false); } objField.removeClass('new'); objField.removeClass('delete'); objField.addClass('modify'); } break; case 'borrada': objField.prop('readonly',true); if( plugin !== '' && plugin !== 'cwcampotexto' ) { objField.prop('disabled',true); } objField.removeClass('edit'); objField.removeClass('new'); objField.addClass('delete'); break; case 'nada': objField.prop('readonly',true); if( plugin !== '' && plugin !== 'cwcampotexto' ) { objField.prop('disabled',true); } objField.removeClass('modify'); objField.removeClass('new'); objField.removeClass('delete'); objField.addClass('edit'); break; case 'selected': if (gvh.getStatePanel( objPanel ) == 'W') { objField.prop('readonly',true); if( plugin !== '' && plugin !== 'cwcampotexto' && plugin !== 'noMatching' ) { objField.prop('disabled',true); } objField.removeClass('modify'); objField.removeClass('new'); objField.removeClass('delete'); objField.addClass('edit'); } break; default: objField.prop('readonly',true); if( plugin !== '' && plugin !== 'cwcampotexto' && plugin !== 'noMatching' ) { objField.prop('disabled',true); } objField.removeClass('new'); objField.removeClass('modify'); fiobjFieldeld.removeClass('delete'); objField.addClass('edit'); break; }//switch stateRow }//if visible }//for field // Tratamiento del editor enriquecido porque tiene otro prefijo distinto de 'cam__' if ((stateRow == 'modificada') && (panelJSON == 'edi')) { var editor = $( 'div[id^=editor_cam_][data-gvhClaseManejadora='+claseM+']' ); if (editor.length > 0) { editor.filter('[id$='+panel+'][data-gvhPanelOn='+panel+'][data-gvhstate=edit]').each( function() { $(this).attr( 'contenteditable', 'true' ); }) } }//if } else if (panelJSON == 'lis') { for (var field in jsonReg) { var idIGEPVisible = "IGEPvisiblecam___"+field+"___"+sufijoRow; $( 'span[id='+idIGEPVisible+'][data-gvhClaseManejadora='+claseM+']' ).hide(); $( '#'+sufijoRow+'[data-gvhClaseManejadora='+claseM+']' ).removeClass(); $( '#'+sufijoRow+'[data-gvhClaseManejadora='+claseM+']' ).addClass( 'rowNoData' ); } } // else filas inserción - panel tabular gvh.showConsoleMsg( 'endGroup' ); }; /** * setValueFieldsHTML_paginar(): cambia los valores de los campos al paginar * @access private * @param raizJSON: * @param panel: tipo de panel sobre el que se está trabajando ['lis','lisDetalle'] * @param claseM: clase del panel sobre el que queremos calcular el índice * @param row: fila seleccionada del panel */ gvh.setValueFieldsHTML_paginar = function( raizJSON, panel, claseM, row ) { gvh.showConsoleMsg( 'beginGroup', ' ** gvh_paginar.js - setValueFieldsHTML_paginar()' ); var sufijo = panel+'_'+row; var jsonReg = gvh.getFieldsRow( raizJSON, row ); var panelJSON = panel.substr( 0, 3 ); var numReg = gvh.getNumReg( raizJSON ); var rowsPag; var rowTab; var sufijoRow; if (panelJSON == 'lis'){ rowsPag = gvh.getRowsPag( raizJSON ); rowTab = row%rowsPag; sufijoRow = panel+'_'+rowTab; } if (row < numReg) // Comprobación necesaria cuando es un panel tabular, en panel ficha siempre se cumplirá { if (panelJSON == 'lis') { var idIGEPVisibleRow = "IGEPVisible"+sufijoRow; var objIGEPVisibleRow = $( '#'+idIGEPVisibleRow+'[data-gvhClaseManejadora='+claseM+']' ); if (objIGEPVisibleRow.is(':hidden')) { objIGEPVisibleRow.show(); } } var external = false; for (var field in jsonReg) // Recorremos los campos correspondientes al registro para obtener su valor y asignarlo al componente HTML { // Comprobamos si el campo es visible o no var visible = gvh.isVisible( raizJSON, field, row, external, true ); var idIGEPVisible = "IGEPVisiblecam___"+field+"___"+sufijoRow; var objIGEPVisible = $( '#'+idIGEPVisible+'[data-gvhClaseManejadora='+claseM+']' ); if (visible) { if (objIGEPVisible.is(':hidden')) { objIGEPVisible.show(); } } else { if (objIGEPVisible.is(':visible')) { objIGEPVisible.hide(); } } var idCampo = 'cam___'+field+'___'+panel; var idIcono = 'icon_cam___'+field+'___'+panel; if (panelJSON == 'lis') { idCampo = 'cam___'+field+'___'+panel+'_'+rowTab; idIcono = 'icon_cam___'+field+'___'+panel+'_'+rowTab; } var css = jsonReg[field]['class']; var plugin = jsonReg[field]['CWPlugin']; var valueJSONDecode = jsonReg[field]['value']; if ((valueJSONDecode == 'undefined')) { valueJSONDecode = ''; } var inputField; var tipo; var cssField; switch( plugin ) { case 'noMatching': inputField = $( 'input[id*='+idCampo+'][data-gvhClaseManejadora='+claseM+']' ); inputField.val( valueJSONDecode ); inputField.attr( 'value', valueJSONDecode ); inputField.attr( 'title', valueJSONDecode ); break; case 'cwcampotexto': inputField = $( 'input[id*='+idCampo+'][data-gvhClaseManejadora='+claseM+']' ); inputField.val( valueJSONDecode ); inputField.attr( 'value', valueJSONDecode ); inputField.attr( 'title', valueJSONDecode ); // css campo tipo = inputField.attr( 'type' ); if (tipo != 'hidden') { cssField = inputField.attr( 'class' ); if (cssField != css) { inputField.removeClass(); inputField.addClass( css ); } } break; case 'cwrichareatexto': inputField = $( 'textarea[id*='+idCampo+'][data-gvhClaseManejadora='+claseM+']' ); $( '#editor_'+idCampo ).html( valueJSONDecode ); //inputField.val(valueJSONDecode); // css campo tipo = inputField.attr( 'type' ); if (tipo != 'hidden') { cssField = inputField.attr( 'class' ); if (cssField != css) { inputField.removeClass(); inputField.addClass( css ); } } break; case 'cwareatexto': inputField = $( 'textarea[id*='+idCampo+'][data-gvhClaseManejadora='+claseM+']' ); inputField.val( valueJSONDecode ); // css campo tipo = inputField.attr( 'type' ); if (tipo != 'hidden') { cssField = inputField.attr( 'class' ); if (cssField != css) { inputField.removeClass(); inputField.addClass( css ); } } break; case 'cwlista': case 'cwlista_select2': inputField = $( 'select[id*='+idCampo+'][data-gvhClaseManejadora='+claseM+']' ); var dependencia = gvh.isDependenceList( raizJSON, field, row ); if ((dependencia != undefined) && (dependencia != 'NO')) // es una lista dependiente { var listOptions = jsonReg[field]['lista']; if ((listOptions != undefined) && (listOptions.length > 0)) { if (plugin == 'cwlista') { gvh.addList( inputField, listOptions, valueJSONDecode ); } else { gvh.addListSelect2( inputField, listOptions, valueJSONDecode ); } } } else { var jsonListaField = gvh.getFieldList( raizJSON, field, false, row ); var idCampo = inputField.attr( 'id' ); var valuesList = (Array.isArray (valueJSONDecode) ? valueJSONDecode : valuesList = [valueJSONDecode]); $( '#'+idCampo+' option' ).prop( 'selected', false ); //$( '#'+idCampo+' option' ).attr( 'selected', false ); for (var currentIndex = 0; currentIndex < valuesList.length; currentIndex++) { $( '#'+idCampo+' option[value="'+valuesList[currentIndex]+'"]' ).prop( 'selected', true ); //$( '#'+idCampo+' option[value="'+valuesList[currentIndex]+'"]' ).attr( 'selected', true ); $( '#'+idCampo+' option[value="'+valuesList[currentIndex]+'"]' ).trigger('change.select2'); } } // Al paginar podemos pasar de la última página que no sea completa a una página completa, hay que volver a rellenar los valores (option) de la lista if (panel == 'lis') { var listOptions = ''; if (inputField.length == 0) { if ((dependencia != undefined) && (dependencia != 'NO')) { // Si la lista es dependiente, las opciones de la lista están en el campo listOptions = jsonReg[field]['lista']; } else { // Si la lista no es dependiente, las opciones están en la zona común listOptions = jsonListaField[field]; } if ((listOptions != '') && (listOptions.length > 0)) { if (plugin == 'cwlista') { gvh.addList( inputField, listOptions, valueJSONDecode ); } else { gvh.addListSelect2( inputField, listOptions, valueJSONDecode ); } } } else { var dependencia = jsonReg[field]['dependence']; if ((dependencia != undefined) && (dependencia != 'NO')) { //Hay dependencia listOptions = jsonReg[field]['lista']; if (listOptions.length > 0) { if (plugin == 'cwlista') { gvh.addList( inputField, listOptions, valueJSONDecode ); } else { gvh.addListSelect2( inputField, listOptions, valueJSONDecode ); } } } else { $( '#'+idCampo+' option[value="'+valueJSONDecode+'"]' ).prop( 'selected', true ); } } } cssField = inputField.attr( 'class' ).trim().match(/\S+/g); var cssList = css.trim().match(/\S+/g); if (plugin == 'cwlista_select2' && cssList.length) { cssList.push('select2-hidden-accessible'); } if (gvh.isEqual (cssField, cssList)) { cssList = cssList.join(' '); inputField.removeClass(); inputField.addClass( cssList ); } break; case 'cwbotontooltip': break; case 'cwcheckbox': inputField = $('input[id*='+idCampo+']').filter('[data-gvhClaseManejadora='+claseM+']'); var valueJSONDecode = jsonReg[field]['checked']; if ((valueJSONDecode == 'undefined') || (valueJSONDecode == 'false')) { inputField.prop('checked',false); } else { inputField.prop('checked',true); } cssField = inputField.attr( 'class' ); if (cssField != css) { inputField.removeClass(); inputField.addClass( css ); } break; case 'cwimagen': break; case 'cwinformation': // Botón tooltip con información var button = $( 'button[id*='+idCampo+'][data-gvhClaseManejadora='+claseM+']' ); button.attr( 'data-content', valueJSONDecode ); cssField = button.attr( 'class' ); if (cssField != css) { button.removeClass(); button.addClass( css ); } /*if ((color != '') && (color != undefined)) { button.addClass(color); }*/ // icono del botón var iconJSON = jsonReg[field]['icon']; if (iconJSON == 'undefined') iconJSON = ''; var idIconButton = 'iconInf_cam___'+field+'___'+sufijo; iconButton = $( '#'+idIconButton+'[data-gvhClaseManejadora='+claseM+']' ); iconButton.removeClass(); iconButton.addClass(iconJSON); break; case 'cwlabel icon': // Label que solamente es un icono inputField = $( 'span[id*='+idIcono+'][data-gvhClaseManejadora='+claseM+']' ); inputField.removeClass(); inputField.addClass(valueJSONDecode); break; case 'cwlabel': inputField = $( 'label[id*='+idCampo+'][data-gvhClaseManejadora='+claseM+']' ); if (inputField.length > 0) { inputField.html( valueJSONDecode ); inputField.attr( 'value', valueJSONDecode ); cssField = inputField.attr( 'class' ); if (cssField != css) { inputField.removeClass(); inputField.addClass( css ); } } // El label puede ir acompañado de un icono var icono = $('#'+idIcono+'[data-gvhClaseManejadora='+claseM+']'); if (icono.length > 0) { var iconJSONDecode; try { iconJSONDecode = decodeURIComponent(escape(jsonReg[field]['icon'])); } catch(e) { iconJSONDecode = jsonReg[field]['icon']; } if (iconJSONDecode == 'undefined') { iconJSONDecode = ''; } icono.removeClass(); icono.addClass( iconJSONDecode ); } break; case 'cwlistaradio': // RADIOBUTTON var radio = $( 'input:radio[name*='+idCampo+'][data-gvhClaseManejadora='+claseM+']' ); radio.filter( '[value='+valueJSONDecode+']' ).prop( 'checked', true ); letcssField = radio.attr( 'class' ); if (cssField != css) { radio.removeClass(); radio.addClass( css ); } break; case 'cwslider': // slider de imágenes if (gvh.objSliders.length > 0) { $.each( gvh.objSliders, function(i, slider) { slider.destroySlider(); }); gvh.objSliders.push( $('ul[id*=slider_][data-gvhIterActual='+row+']').bxSlider( { minSlides: 2, maxSlides: 3, slideWidth: 400, slideMargin: 10, caption: true, pager: true }) ); } break; default: break; } } } else if (panelJSON == 'lis') { var idIGEPVisibleRow = "IGEPVisible"+sufijoRow; var objIGEPVisibleRow = $( '#'+idIGEPVisibleRow+'[data-gvhClaseManejadora='+claseM+']' ); if (objIGEPVisibleRow.is(':visible')) { objIGEPVisibleRow.hide(); } if (jsonReg !== undefined) { for (var field in jsonReg) { var idCampo = "cam___"+field+"___"+panel+"_"+rowTab; var idIGEPVisible = "IGEPVisiblecam___"+field+"___"+sufijoRow; var objIGEPVisible = $( '#'+idIGEPVisible+'[data-gvhClaseManejadora='+claseM+']' ); if (objIGEPVisible.is(':visible')) { objIGEPVisible.hide(); } } } else { $('input[data-gvhClaseManejadora='+claseM+'][id$=___'+sufijoRow+']').val(''); $('input[data-gvhClaseManejadora='+claseM+'][id$=___'+sufijoRow+']').attr( 'title', '' ); } } gvh.showConsoleMsg( 'endGroup' ); } /** * paginar(): Al cambiar de página debemos volver a asignar los valores que vienen en el JSON a sus respectivos campos * * @access private * @param pagSource: * @param pagTarget: * @param panel: * @param claseM: */ gvh.paginar = function( pagSource, pagTarget, panel, claseM ) { gvh.showConsoleMsg('beginGroup',' ** gvh_paginar.js - paginar() - pag: '+pagTarget+' panel: '+panel+' claseManejadora '+claseM); var idPanel = "P_"+panel; var objPanel = $( '#'+idPanel ); var state = gvh.getStatePanel( objPanel ); var bloque = []; var panelJSON = panel.substr( 0, 3 ); var raizJSON = gvh.getRoot( claseM, panelJSON ); gvh.setPagActive( raizJSON, pagTarget ); var numReg = gvh.getNumReg( raizJSON ); var rowsPag = gvh.getRowsPag( raizJSON ); var valueJSONDecode = ''; if (panelJSON == 'lis') { bloque = gvh.blockRegPagina( raizJSON, pagTarget ); var regIni = bloque['ini']; var regFin = bloque['fin']; gvh.showConsoleMsg( 'log',' ... Panel tabular desde '+regIni+' a '+regFin ); for(var i=regIni; i<=regFin; i++ ) { gvh.setStateFieldsHTML_paginar( raizJSON, panel, claseM, i ); gvh.setValueFieldsHTML_paginar( raizJSON, panel, claseM, i ); } } else { var vFields = gvh.getFieldsRow(raizJSON,pagTarget); var sufijo = panel+'_'+pagTarget; var state = gvh.getStateReg(raizJSON,pagTarget,'state'); gvh.showConsoleMsg('log',' ... Panel registro '); // Visualmente des-seleccionamos todos los registros gvh.setSelectedReg( raizJSON, [0,numReg], 'sub', false ); // Visualmente seleccionamos los registros que estén seleccionados em la página actual. gvh.setSelectedReg( raizJSON, pagTarget, 'add', false ); gvh.setStateFieldsHTML_paginar( raizJSON, panel, claseM, pagTarget ); gvh.setValueFieldsHTML_paginar( raizJSON, panel, claseM, pagTarget ); } gvh.showConsoleMsg( 'endGroup' ); }