/*! * Iframe Manager * Version 1.0.0 * Requires jQuery v1.7 or later */ var oIFrameManager = { debugMode : false, showErrors : true, log : function (msg){ if(oIFrameManager.debugMode){ console.log(msg); } }, warn : function (msg){ if(oIFrameManager.debugMode){ console.warn(msg); } }, info : function (msg){ if(oIFrameManager.debugMode){ console.info(msg); } }, error : function (msg){ if(oIFrameManager.showErrors){ console.error(msg); } }, //PageInfo iframeHeight : 0, iframeWidth : 0, clientHeight : 0, clientWidth : 0, offsetLeft : 0, offsetTop : 0, scrollLeft : 0, scrollTop : 0, //Inicializa init : function() { //TODO: Solo adiciona pageInfo para QNect /*if (oGlobal && oGlobal.menuQNect) { oIFrameManager.log("Solicitando watchPageInfo"); oIFrameManager.watchPageInfo(function(resp){ oIFrameManager.setPageInfo(resp); }); }*/ }, //Actualiza los valores watchPageInfo : function(callback){ if (typeof parentIFrame === 'undefined') { oIFrameManager.log("parentIFrame is not defined yet.... waiting 500ms to try again"); setTimeout(function(){oIFrameManager.watchPageInfo(callback);}, 500); }else{ oIFrameManager.log("start watch PageInfo"); parentIFrame.watchPageInfo(function(resp){ callback(resp); }); } }, //Deja de actualizar valores los valores unwatchPageInfo : function(callback){ if (typeof parentIFrame === 'undefined') { oIFrameManager.log("parentIFrame is not defined yet.... waiting 500ms to try again"); setTimeout(function(){oIFrameManager.unwatchPageInfo(callback);}, 500); }else{ oIFrameManager.log("stop watch PageInfo"); parentIFrame.unwatchPageInfo(); callback(); } }, //Actualiza propriedades del host setPageInfo : function(resp){ oIFrameManager.iframeHeight = resp.iframeHeight; oIFrameManager.iframeWidth = resp.iframeWidth; oIFrameManager.clientHeight = resp.clientHeight; oIFrameManager.clientWidth = resp.clientWidth; oIFrameManager.offsetLeft = resp.offsetLeft; oIFrameManager.offsetTop = resp.offsetTop; oIFrameManager.scrollLeft = resp.scrollLeft; oIFrameManager.scrollTop = resp.scrollTop; oIFrameManager.log(JSON.stringify(resp)); }, //Solicita propriedades del host getPageInfo : function(callback){ if (typeof parentIFrame === 'undefined') { oIFrameManager.log("parentIFrame is not defined yet.... waiting 500ms to try again"); setTimeout(function(){oIFrameManager.getPageInfo(callback);}, 500); }else{ oIFrameManager.log("start watch PageInfo"); parentIFrame.getPageInfo(function(resp){ oIFrameManager.setPageInfo(resp); callback(); }); } }, //Solicita PageLocation getPageLocation : function(callback){ if (typeof parentIFrame === 'undefined') { oIFrameManager.log("parentIFrame is not defined yet.... waiting 500ms to try again"); setTimeout(function(){oIFrameManager.getPageLocation(callback);}, 500); } else { oIFrameManager.log("calling parentIFrame.getPageLocation"); parentIFrame.getPageLocation(function(resp){ oIFrameManager.log(resp); callback(resp); }); } }, //Solicita scroll scrollTo : function(x, y){ try { parentIFrame.scrollTo(x, y); } catch(e) { console.log("eframe ONE"); } }, clientWindow: function(){ var isIE = function () { if(navigator.appName === "Microsoft Internet Explorer") { return true; } else if(navigator.appName === "Netscape" && /Trident/.test(navigator.userAgent)) { // IE 11 return true; } return false; }; var isFF = function () { return !!navigator.userAgent.match(/firefox/i); }; var round5 = function (x) { return Math.round(x/5)*5; }; var sw = screen.width; var sh = screen.height; var zoom = 1; if (isIE()) { zoom = screen.deviceXDPI / screen.systemXDPI; zoom = round5(zoom*100)/100; } else if (isFF()) { zoom = window.devicePixelRatio; } if (zoom != 1) { sh = parseInt(sh * zoom); sw = parseInt(sw * zoom); } return { width: sw, height: sh }; }, //Actualiza la posición del modal dynamicModal : function ($modal, width, marginTopPorc) { //Get host information oIFrameManager.getPageInfo(function(){ //Parametros width = typeof width !== 'undefined' ? width : 0; marginTopPorc = typeof marginTopPorc !== 'undefined' ? marginTopPorc : 10; var oModalDlg = $($modal.find(".modal-dialog")); //Limpia CSS oModalDlg.removeAttr("style"); oIFrameManager.log("width: " + width); oIFrameManager.log("marginTopPorc: " + marginTopPorc); var clientH = oIFrameManager.clientWindow().height; //Modal top var top = oIFrameManager.scrollTop - ((clientH / 2) * 0.8); oIFrameManager.log("top: " + top); //Modal top más porcentaje dinamica top += clientH * (marginTopPorc / 100); oIFrameManager.log("top + margin-top: " + top); if(oIFrameManager.iframeHeight <= (oIFrameManager.scrollTop + oModalDlg.outerHeight())) top = oIFrameManager.iframeHeight - oModalDlg.outerHeight(); oIFrameManager.log("top modificado: " + top); //Valida que top debe ser un valor > 0 top = (top < 0 ? 10 : top); oIFrameManager.log("top final: " + top); //Tamaño de la pantalla que sea <= 900px var w = ($(window).width() > 900 ? 900 : $(window).width()); //Toma el 90% del tamaño de la pantalla var width = (w * 0.90); //Toma el margen izquierdo var marginLeft = (width/2 * -1); //Add CSS oModalDlg.css({ "position" : "absolute", "top" : (top + "px"), "overflow" : "auto", "width" : (width + "px"), "left" : (marginLeft + "px"), "margin-left" : "50%" }); }); } }; /* * Auto inicialización */ (function() { oIFrameManager.init(); })();