var gvh = gvh || {}; var ambito; /* * eventCloseModal() * FUNCIÓN: cerrar la ventana modal y lanzar la acción asociada * defaults: * url - url a la que llamar para lanzar la acción asociada * claseManejadora * panel */ $.fn.eventCloseModal = function(options) { var defaults = $.extend({ url: '', claseM: '', panel: '' },options); console.log(' ** eventCloseModal() '); ambito = "gvhMain"; // Mostramos el progreso Pace.restart(); document.body.className = document.body.className; // Forzamos a actualizar la interfaz $.ajax({ data: datosJSON[defaults.claseM][defaults.panel]['dataPerform'], type: "POST", datatype: "json", url: defaults.url, beforeSend: function() { console.log(' ... Beforesend => url: '+defaults.url); gvh.loading('on',msgLoad); }, success: function(rsp) { console.log(' ... Success ...'); rspJSON = $.parseJSON(rsp); console.log(rspJSON); //targetType = rspJSON.context.targetType; action = rspJSON.context.action; path = decodeURIComponent(rspJSON.path); if (action == 'NoAction') { eval(rspJSON.context.script); } else { window.location.reload(); } }, complete: function( jqXHR, textStatus, errorThrown ) { console.log('COMPLETE eventCloseModal... '); }, error: function ( jqXHR, textStatus, errorThrown ) { console.log('ERROR: '+textStatus+' - status: '+jqXHR.status+' | '+errorThrown); ambito = "gvhModal"; } }); } /* * closeWindowModal() * FUNCIÓN: cierre de la ventana modal (cancelar) * defaults: * idWM - identificador de la ventana modal */ $.fn.closeWindowModal = function(options) { var defaults = $.extend({ WM: '' },options); /*console.log('closeWindowModal() '); console.log(defaults.WM);*/ if (dialogIdWM.length <= 0) ambito = 'gvhMain'; else ambito = 'gvhModal'; dialogWM = defaults.WM; //$('#'+dialogWM).dialog('destroy').remove(); $('#'+dialogWM).remove(); } /* * compareViewsPath() * FUNCIÓN: compara dos url para comprobar si el valor del views es el mismo */ $.fn.compareViewsPath = function(options) { var defaults = $.extend({ pathActual: '', path: '' },options); //console.log('compareViewsPath() '); //console.log('pathActual '+defaults.pathActual); //console.log('path '+defaults.path); viewsActual = defaults.pathActual.split('?view=')[1]; viewsNew = defaults.path.split('?view=')[1]; claseMActual = viewsActual.split('&')[0]; claseMNew = viewsNew.split('&')[0]; if (claseMNew != claseMActual) return false; else return true; } function formatBytes(a,b){if(0==a)return"0 Bytes";var c=1024,d=b||2,e=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"],f=Math.floor(Math.log(a)/Math.log(c));return parseFloat((a/Math.pow(c,f)).toFixed(d))+" "+e[f]} /* * controllerJS() * FUNCIÓN: submit del formulario. * defaults: id - del botón para el que se van a activar los campos * prefijo - si los campos se activan para inserción o modificación ('ins'/'cam') * css - estilo que se le aplicará al campo * panel - panel donde se encuentran los campos */ $.fn.controllerJS = function(options) { // Comprobamos si llega la url destino para componer la url completa y el conjunto de datos if( !options.destino ) { console.log('¡¡¡No está definido el parámetro data-gvhDestino!!!'); eval( scriptPostLoad ); return; } // Mostramos el progreso Pace.restart(); document.body.className = document.body.className; // Forzamos a actualizar la interfaz var defaults = $.extend({ id: '', panel: '', destino: '', newWindow: 'false', confirm: '', claseM: '', message: '' },options); console.log('** controllerJS() '); var formulario = "F_"+defaults.panel; var panelJSON = $('#'+defaults.id).attr('data-gvhPanelJSON'); // Mostramos el cargando gvh.loading('on',defaults.message); document.body.className = document.body.className; // Forzamos a actualizar la interfaz if ((defaults.id == 'close') || ((defaults.claseM == '') && (defaults.panel == ''))) { urlPhrame = defaults.destino+"&gvhcache=true&claseManejadora=principal"; datos = ''; } else { var claseM_maestro = $('#'+defaults.id).attr('data-gvhClaseManejadoraPadre'); if (claseM_maestro != undefined) { var maestro = $('div[data-gvhEsMaestro=1][data-gvhClaseManejadora='+claseM_maestro+']').attr('id'); var panelMaestro = maestro.split("_")[1]; var raizJSON = gvh.getRoot(claseM_maestro,panelMaestro); } else { var raizJSON = gvh.getRoot(defaults.claseM,panelJSON); } datos = raizJSON['dataPerform']; // Enviamos solamente los datos del panel correspondiente urlPhrame = defaults.destino+"&gvhcache=true&claseManejadora="+defaults.claseM+"&gvhpanel="+panelJSON; if ($('#WS').length > 0) { claseMOrigen = $('#'+defaults.id).attr('data-gvhclasemorigen'); urlPhrame += urlPhrame+'&claseManejadoraOrigen='+claseMOrigen; } } console.log(' - Llamada a phrame: '+urlPhrame); console.log(datosJSON); console.log(datos); //alert('paro'); var scriptPostLoad = ''; Pace.track(function(){ $.ajax({ data: datos, type: "POST", datatype: "json", url: urlPhrame, beforeSend: function() { console.log(' ... Beforesend ...'); //Pace.restart(); //gvh.loading('on',defaults.message); }, xhr: function(){ var xhr = $.ajaxSettings.xhr() ; if(gvh.DEBUG) console.groupCollapsed('Petición AJAX'); xhr.onprogress = function(e) { if (e.lengthComputable) { if(gvh.DEBUG) console.info('Progreso: ', formatBytes(e.loaded,2) + ' de ' + formatBytes(e.total,2) + ' (' + (e.loaded/e.total*100).toFixed(2) + '%)' ); } }; xhr.onload = function() { if(gvh.DEBUG) { console.info('COMPLETADO!') console.groupEnd(); } }; xhr.upload.onprogress = function(e) { if (e.lengthComputable) { if(gvh.DEBUG) console.info('Progreso: ', formatBytes(e.loaded,2) + ' de ' + formatBytes(e.total,2) + ' (' + (e.loaded/e.total*100).toFixed(2) + '%)' ); } }; xhr.upload.onload = function(){ if(gvh.DEBUG) { console.info('COMPLETADO!') console.groupEnd(); } }; return xhr ; } , success: function(rspPhrame) { console.log(' ... Success: '+rspPhrame); rspPhrameJSON = $.parseJSON(rspPhrame); // Acción que vamos a realizar ['NoAction' | 'reload' | ...] action = rspPhrameJSON.context.action; targetType = rspPhrameJSON.context.targetType; switch(targetType) { case 'self': console.log(' ... Destino: Misma página (self) => targetType: '+targetType); switch(action) { case 'NoAction': console.log(' ... Acción: acción de interfaz => action: '+action); eval(rspPhrameJSON.context.script); break; // RELOAD DE LA PÁGINA case 'reload': console.log(' ... Acción: reload de la página => action: '+action); window.location.reload(); break; // LLAMADA A NEGOCIO (ajax) QUE NOS DEVOLVERÁ LA PÁGINA (views) location.href => views case 'salto': console.log(' ... Acción: llamada a negocio => action: '+action); path = decodeURIComponent(rspPhrameJSON.path); console.log(' ... => llamada a: '+path); //Mostramos el progreso Pace.restart(); document.body.className = document.body.className; // Forzamos a actualizar la interfaz $.ajax({ data: null, // Mandamos a null los datos porque se va a lanzar una claseManejadora nueva en la ventana. type: "POST", datatype: "json", url: path, beforeSend: function() { }, success: function(rspTpl) { rspTplJSON = $.parseJSON(rspTpl); path = rspTplJSON.path; console.log(' ... Acción: llamada a negocio => views: '+path); endLoading = false; window.location.href = decodeURIComponent(path); }, error:function( jqXHR, textStatus, errorThrown ) { console.log('ERROR: '+textStatus+' - status: '+jqXHR.status+' | '+errorThrown); }, always:function( jqXHR, textStatus, errorThrown ) { console.log('ALWAYS: '+textStatus+' - status: '+jqXHR.status+' | '+errorThrown); }, fail:function( jqXHR, textStatus, errorThrown ) { console.log('FAIL: '+textStatus+' - status: '+jqXHR.status+' | '+errorThrown); }, complete: function( jqXHR, textStatus, errorThrown ) { console.log('3 COMPLETE: '+textStatus+' - status: '+jqXHR.status+' | '+errorThrown); } }) break; default: console.log(' ... Acción: default => action: '+action); newWindow = defaults.newWindow; if (newWindow == 'false') // NO ABRIMOS VENTANA EMERGENTE { console.log(' ... => newWindow: false'); pathActual = window.location.href; path = rspPhrameJSON.path; var loadGVHMain = $(this).compareViewsPath({ pathActual: pathActual, path: decodeURIComponent(path) }); if (loadGVHMain) { console.log(' ... => carga en gvhMain: '+path); endLoading = true; // Mostramos el progreso Pace.restart(); document.body.className = document.body.className; // Forzamos a actualizar la interfaz // CARGAMOS EN LA CAPA gvhMain LA PÁGINA $.ajax({ url: decodeURIComponent(path), dataType: "html" , // Usamos el tipo 'html' para importar también los scripts embebidos cache: true , //context: '#gvhMain > *' }).done(function(resp) { $('#gvhMain').html( $(resp).filter('#gvhMain').contents() ); gvh.rewireMain(); //REVIEW VERO $('div[id*=P_]').attr('data-gvhestadopanel','R'); }); } else { // LOAD DE LA PÁGINA (views) QUE NOS VIENE location.href console.log(' ... => location.href = '+path); endLoading = false; window.location.href = decodeURIComponent(path); } } else { // LA PÁGINA SE ABRE EN UNA VENTANA NUEVA path = rspPhrameJSON.path; console.log(' ... => newWindow: true'); console.log(' ... => path: '+path); $(this).popupWindow({ windowURL: path, centerScreen: 1, height: 600, width: 800, windowName:'help' }); } break; } break; // EL DESTINO ES UNA VENTANA MODAL case 'JDialog': target = rspPhrameJSON.context.targetType; scriptPostLoad = rspPhrameJSON.context.script; if ( scriptPostLoad != '') { eval(scriptPostLoad); } idVentana = rspPhrameJSON.context.idVentana; console.log(' ... Destino: Ventana modal => targetType: '+targetType); console.log(' ... => id ventana: '+idVentana); var ventanaModal = $('#'+idVentana); switch(action) { // CERRAMOS VENTANA MODAL case 'gvHidraCloseJDialog': console.log(' ... Acción: cerrar ventana modal => action: '+action); if ((idVentana != null) && (idVentana != undefined)) { ventanaModal = $('#'+idVentana); if (ventanaModal.length > 0) { //dialogWM.dialog('close'); dialogWM.modal( 'hide' ); dialogIdWM.pop(); /*$(this).closeWindowModal({ WM: idVentana });*/ } } break; // ABRIMOS VENTANA MODAL case 'gvHidraOpenJDialog': url = decodeURIComponent(rspPhrameJSON.path); console.log(' ... Acción: abrir ventana modal => action: '+action); console.log(' ... => path: '+url); if ( ((url == null) || (url == '') || (url == undefined)) ) { //eval(rspPhrameJSON.context.script); return false; } if (ventanaModal.length > 0) { console.log(' ... => ventana ya existe'); //Mostramos el progreso Pace.restart(); document.body.className = document.body.className; // Forzamos a actualizar la interfaz //$('#'+idVentana).load(url); $.ajax({ url: url, dataType: "html" , // Usamos el tipo 'html' para importar también los scripts embebidos cache: true , //context: '#gvhMain > *' }).done(function(resp) { $('#'+idVentana).html( $(resp) ); if (rspPhrameJSON.context.script != '') { eval(rspPhrameJSON.context.script); } }); } else { console.log(' ... => nueva ventana'); WSwidth = 1000; WSheight = 'auto'; if (rspPhrameJSON.context.width != '') { WSwidth = rspPhrameJSON.context.width; } if (rspPhrameJSON.context.height != '') { WSheight = rspPhrameJSON.context.height; } // Mostramos el progreso Pace.restart(); document.body.className = document.body.className; // Forzamos a actualizar la interfaz $.ajax({ data: null, // Mandamos a null los datos porque se va a lanzar una claseManejadora nueva en la ventana. type: "POST", datatype: "json", url: url, beforeSend: function() {}, success: function(rspTpl) { rspTplJSON = $.parseJSON( rspTpl ); /* dialogWM = $('
') .dialog({ draggable: true, resizable: true, show: 'blind', hide: 'blind', autoOpen: false, modal: true, width: WSwidth, height: WSheight, title: aplTitle, open: function() { $(this).closest(".ui-dialog") .find(".ui-dialog-titlebar-close") .removeClass("ui-dialog-titlebar-close") .addClass("dialogButtonClose") .addClass("ui-dialog-titlebar-close") .html(""); }, close: function (event, ui) { // REVIEW VERO: globalWM dialogWM.dialog('destroy').remove(); returnPath = rspPhrameJSON.context.returnPath; if ((returnPath != null) && (returnPath != undefined) && (returnPath != '')) { returnPath = returnPath+"&gvhcache=true"; console.log(' ... Close ventana modal => path '+returnPath); panelRetorno = rspPhrameJSON.context.panelRetorno; if ((panelRetorno != '') && (panelRetorno != null) && (panelRetorno != undefined)) { panelJSON = panelRetorno.substring(0,3); } $(this).eventCloseModal({ idVentana: idVentana, url: returnPath, claseM: defaults.claseM, panel: panelJSON }); } dialogIdWM.pop(); //else { // $(this).closeWindowModal({ // WM: idVentana // }); //} } }); */ $('#gvhPage').append( '