3 lines
13 KiB
JavaScript
3 lines
13 KiB
JavaScript
/* eslint-disable */
|
|
!function(e){var n,i,t,o,r,a,s,l,f,c,d,u,m,g;function h(){return window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver}function p(e,n,i){e.addEventListener(n,i,!1)}function b(e,n,i){e.removeEventListener(n,i,!1)}function y(e){return c[e]?c[e].log:i}function v(e,n){_("log",e,n,y(e))}function $(e,n){_("info",e,n,y(e))}function w(e,n){_("warn",e,n,!0)}function _(e,n,i,t){var o,a;!0===t&&"object"==typeof window.console&&console[e](r+"["+(a="Host page: "+(o=n),a=window.top!==window.self?window.parentIFrame&&window.parentIFrame.getId?window.parentIFrame.getId()+": "+o:"Nested host page: "+o:a)+"]",i)}function x(e){function n(){i("Height"),i("Width"),O(function(){E(j),I(L),h("onResized",j)},j,"init")}function i(e){var n=Number(c[L]["max"+e]),i=Number(c[L]["min"+e]),e=e.toLowerCase(),t=Number(j[e]);v(L,"Checking "+e+" is in range "+i+"-"+n),t<i&&(t=i,v(L,"Set "+e+" to min value")),n<t&&(t=n,v(L,"Set "+e+" to max value")),j[e]=""+t}function t(e){return P.slice(P.indexOf(":")+o+e)}function l(e,n){var i,t,o;i=function(){var i,t;T("Send Page Info","pageInfo:"+(i=document.body.getBoundingClientRect(),JSON.stringify({iframeHeight:(t=j.iframe.getBoundingClientRect()).height,iframeWidth:t.width,clientHeight:Math.max(document.documentElement.clientHeight,window.innerHeight||0),clientWidth:Math.max(document.documentElement.clientWidth,window.innerWidth||0),offsetTop:parseInt(t.top-i.top,10),offsetLeft:parseInt(t.left-i.left,10),scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset,documentHeight:document.documentElement.clientHeight,documentWidth:document.documentElement.clientWidth,windowHeight:window.innerHeight,windowWidth:window.innerWidth})),e,n)},t=32,m[o=n]||(m[o]=setTimeout(function(){m[o]=null,i()},t))}function f(e){return e=e.getBoundingClientRect(),M(L),{x:Math.floor(Number(e.left)+Number(s.x)),y:Math.floor(Number(e.top)+Number(s.y))}}function d(e){var n=e?f(j.iframe):{x:0,y:0},i={x:Number(j.width)+n.x,y:Number(j.height)+n.y};v(L,"Reposition requested from iFrame (offset x:"+n.x+" y:"+n.y+")"),window.top===window.self?(s=i,u(),v(L,"--")):window.parentIFrame?window.parentIFrame["scrollTo"+(e?"Offset":"")](i.x,i.y):w(L,"Unable to scroll to requested position, window.parentIFrame not found")}function u(){!1===h("onScroll",s)?R():I(L)}function g(e){var n,i={};i=0===Number(j.width)&&0===Number(j.height)?{x:(n=t(9).split(":"))[1],y:n[0]}:{x:j.width,y:j.height},h(e,{iframe:j.iframe,screenX:Number(i.x),screenY:Number(i.y),type:j.type})}function h(e,n){return k(L,e,n)}var y,_,x,z,H,S,P=e.data,j={},L=null;if("[iFrameResizerChild]Ready"===P)for(var A in c)T("iFrame requested init",C(A),c[A].iframe,A);else r===(""+P).slice(0,a)&&P.slice(a).split(":")[0]in c?(c[L=(j=(_=(y=P.slice(a).split(":"))[1]?parseInt(y[1],10):0,z=getComputedStyle(x=c[y[0]]&&c[y[0]].iframe),{iframe:x,id:y[0],height:_+function(e){if("border-box"!==e.boxSizing)return 0;var n=e.paddingTop?parseInt(e.paddingTop,10):0,e=e.paddingBottom?parseInt(e.paddingBottom,10):0;return n+e}(z)+function(e){if("border-box"!==e.boxSizing)return 0;var n=e.borderTopWidth?parseInt(e.borderTopWidth,10):0,e=e.borderBottomWidth?parseInt(e.borderBottomWidth,10):0;return n+e}(z),width:y[2],type:y[3]})).id]&&(c[L].loaded=!0),(S=j.type in{true:1,false:1,undefined:1})&&v(L,"Ignoring init message from meta parent page"),!S&&(S=!0,c[H=L]||(S=!1,w(j.type+" No settings for "+H+". Message was: "+P)),S)&&(v(L,"Received: "+P),H=!0,null===j.iframe&&(w(L,"IFrame ("+j.id+") not found"),H=!1),H&&function n(){var i=e.origin,t=c[L]&&c[L].checkOrigin;if(t&&""+i!="null"&&!function(){if(t.constructor!==Array)return e=c[L]&&c[L].remoteHost,v(L,"Checking connection is from: "+e),i===e;var e,n=0,o=!1;for(v(L,"Checking connection is from allowed list of origins: "+t);n<t.length;n++)if(t[n]===i){o=!0;break}return o}())throw Error("Unexpected message received from: "+i+" for "+j.iframe.id+". Message was: "+e.data+". This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.");return 1}()&&function e(){var i,o,r,a,m;switch(c[L]&&c[L].firstRun&&c[L]&&(c[L].firstRun=!1),j.type){case"close":F(j.iframe);break;case"message":o=t(6),v(L,"onMessage passed: {iframe: "+j.iframe.id+", message: "+o+"}"),h("onMessage",{iframe:j.iframe,message:JSON.parse(o)}),v(L,"--");break;case"mouseenter":g("onMouseEnter");break;case"mouseleave":g("onMouseLeave");break;case"autoResize":c[L].autoResize=JSON.parse(t(9));break;case"scrollTo":d(!1);break;case"scrollToOffset":d(!0);break;case"pageInfo":l(c[L]&&c[L].iframe,L),i=L,y("Add ",p),c[i]&&(c[i].stopPageInfo=$);break;case"pageInfoStop":c[L]&&c[L].stopPageInfo&&(c[L].stopPageInfo(),delete c[L].stopPageInfo);break;case"inPageLink":t(9),m=decodeURIComponent(a=a.split("#")[1]||""),(m=document.getElementById(m)||document.getElementsByName(m)[0])?(m=f(m),v(L,"Moving to in page link (#"+a+") at x: "+m.x+" y: "+m.y),s={x:m.x,y:m.y},u(),v(L,"--")):window.top===window.self?v(L,"In page link #"+a+" not found"):window.parentIFrame?window.parentIFrame.moveToAnchor(a):v(L,"In page link #"+a+" not found and window.parentIFrame not found");break;case"reset":W(j);break;case"init":n(),h("onInit",j.iframe);break;default:0===Number(j.width)&&0===Number(j.height)?w("Unsupported message received ("+j.type+"), this is likely due to the iframe containing a later version of iframe-resizer than the parent page"):n()}function y(e,n){function t(){c[i]?l(c[i].iframe,i):$()}["scroll","resize"].forEach(function(o){v(i,e+o+" listener for sendPageInfo"),n(window,o,t)})}function $(){y("Remove ",b)}}())):$(L,"Ignored: "+P)}function k(e,n,i){var t=null,o=null;if(c[e]){if("function"!=typeof(t=c[e][n]))throw TypeError(n+" on iFrame["+e+"] is not a function");o=t(i)}return o}function z(e){delete c[e=e.id]}function F(e){var n=e.id;if(!1===k(n,"onClose",n))v(n,"Close iframe cancelled by onClose event");else{v(n,"Removing iFrame: "+n);try{e.parentNode&&e.parentNode.removeChild(e)}catch(i){w(i)}k(n,"onClosed",n),v(n,"--"),z(e)}}function M(n){null===s&&v(n,"Get page position: "+(s={x:window.pageXOffset===e?document.documentElement.scrollLeft:window.pageXOffset,y:window.pageYOffset===e?document.documentElement.scrollTop:window.pageYOffset}).x+","+s.y)}function I(e){null!==s&&(window.scrollTo(s.x,s.y),v(e,"Set page position: "+s.x+","+s.y),R())}function R(){s=null}function W(e){v(e.id,"Size reset requested by "+("init"===e.type?"host page":"iFrame")),M(e.id),O(function(){E(e),T("reset","reset",e.iframe,e.id)},e,"reset")}function E(e){function n(n){var o;o=n,e.id?(e.iframe.style[o]=e[o]+"px",v(e.id,"IFrame ("+i+") "+o+" set to "+e[o]+"px")):v("undefined","messageData id not set"),function n(o){var r;function a(){Object.keys(c).forEach(function(e){var n;function i(e){return"0px"===(c[n]&&c[n].iframe.style[e])}c[n=e]&&null!==c[n].iframe.offsetParent&&(i("height")||i("width"))&&T("Visibility change","resize",c[n].iframe,n)})}!t&&"0"===e[o]&&(t=!0,v(i,"Hidden iFrame detected, creating visibility listener"),o=h())&&(r=document.querySelector("body"),new o(function e(n){v("window","Mutation observed: "+n[0].target+" "+n[0].type),S(a,16)}).observe(r,{attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0}))}(n)}var i=e.iframe.id;c[i]&&(c[i].sizeHeight&&n("height"),c[i].sizeWidth)&&n("width")}function O(e,n,i){i!==n.type&&l&&!window.jasmine?(v(n.id,"Requesting animation frame"),l(e)):e()}function T(e,n,i,t,o){var a,s=!1;c[t=t||i.id]&&(i&&"contentWindow"in i&&null!==i.contentWindow?(a=c[t]&&c[t].targetOrigin,v(t,"["+e+"] Sending msg to iframe["+t+"] ("+n+") targetOrigin: "+a),i.contentWindow.postMessage(r+n,a)):w(t,"["+e+"] IFrame("+t+") not found"),o&&c[t]&&c[t].warningTimeout&&(c[t].msgTimeout=setTimeout(function(){!c[t]||c[t].loaded||s||(s=!0,w(t,"IFrame has not responded within "+c[t].warningTimeout/1e3+" seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ignored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning."))},c[t].warningTimeout)))}function C(e){return e+":"+c[e].bodyMarginV1+":"+c[e].sizeWidth+":"+c[e].log+":"+c[e].interval+":"+c[e].enablePublicMethods+":"+c[e].autoResize+":"+c[e].bodyMargin+":"+c[e].heightCalculationMethod+":"+c[e].bodyBackground+":"+c[e].bodyPadding+":"+c[e].tolerance+":"+c[e].inPageLinks+":"+c[e].resizeFrom+":"+c[e].widthCalculationMethod+":"+c[e].mouseEvents}function H(t,o){function r(e){var n=e.split("Callback");2===n.length&&(this[n="on"+n[0].charAt(0).toUpperCase()+n[0].slice(1)]=this[e],delete this[e],w(l,"Deprecated: '"+e+"' has been renamed '"+n+"'. The old method will be removed in the next major version."))}var a,s,l=function(e){var r;if("string"!=typeof e)throw TypeError("Invaild id for iFrame. Expected String");return""===e&&(t.id=(r=o&&o.id||u.id+n++,null!==document.getElementById(r)&&(r+=n++),e=r),i=(o||{}).log,v(e,"Added missing iframe ID: "+e+" ("+t.src+")")),e}(t.id);if(l in c&&"iFrameResizer"in t)w(l,"Ignored iFrame, already setup.");else{switch(function e(n){if(n=n||{},c[l]=Object.create(null),c[l].iframe=t,c[l].firstRun=!0,c[l].remoteHost=t.src&&t.src.split("/").slice(0,3).join("/"),"object"!=typeof n)throw TypeError("Options is not an object");Object.keys(n).forEach(r,n);var i,o=n;for(i in u)Object.prototype.hasOwnProperty.call(u,i)&&(c[l][i]=(Object.prototype.hasOwnProperty.call(o,i)?o:u)[i]);c[l]&&(c[l].targetOrigin=!0!==c[l].checkOrigin||""===(n=c[l].remoteHost)||null!==n.match(/^(about:blank|javascript:|file:\/\/)/)?"*":n)}(o),v(l,"IFrame scrolling "+(c[l]&&c[l].scrolling?"enabled":"disabled")+" for "+l),t.style.overflow=!1===(c[l]&&c[l].scrolling)?"hidden":"auto",c[l]&&c[l].scrolling){case"omit":break;case!0:t.scrolling="yes";break;case!1:t.scrolling="no";break;default:t.scrolling=c[l]?c[l].scrolling:"no"}m("Height"),m("Width"),d("maxHeight"),d("minHeight"),d("maxWidth"),d("minWidth"),"number"!=typeof(c[l]&&c[l].bodyMargin)&&"0"!==(c[l]&&c[l].bodyMargin)||(c[l].bodyMarginV1=c[l].bodyMargin,c[l].bodyMargin=c[l].bodyMargin+"px"),a=C(l),(s=h())&&t.parentNode&&new s(function(e){e.forEach(function(e){Array.prototype.slice.call(e.removedNodes).forEach(function(e){e===t&&F(t)})})}).observe(t.parentNode,{childList:!0}),p(t,"load",function(){var n,i;T("iFrame.onload",a,t,e,!0),n=c[l]&&c[l].firstRun,i=c[l]&&c[l].heightCalculationMethod in f,!n&&i&&W({iframe:t,height:0,width:0,type:"init"})}),T("init",a,t,e,!0),c[l]&&(c[l].iframe.iFrameResizer={close:F.bind(null,c[l].iframe),removeListeners:z.bind(null,c[l].iframe),resize:T.bind(null,"Window resize","resize",c[l].iframe),moveToAnchor:function(e){T("Move to anchor","moveToAnchor:"+e,c[l].iframe,l)},sendMessage:function(e){T("Send Message","message:"+(e=JSON.stringify(e)),c[l].iframe,l)}})}function d(e){var n=c[l][e];1/0!==n&&0!==n&&(t.style[e]="number"==typeof n?n+"px":n,v(l,"Set "+e+" = "+t.style[e]))}function m(e){if(c[l]["min"+e]>c[l]["max"+e])throw Error("Value for min"+e+" can not be greater than max"+e)}}function S(e,n){null===d&&(d=setTimeout(function(){d=null,e()},n))}function P(){"hidden"!==document.visibilityState&&(v("document","Trigger event: Visibility change"),S(function(){j("Tab Visible","resize")},16))}function j(e,n){Object.keys(c).forEach(function(i){var t;c[t=i]&&"parent"===c[t].resizeFrom&&c[t].autoResize&&!c[t].firstRun&&T(e,n,c[i].iframe,i)})}function L(){function n(e,n){if(n){if(!n.tagName)throw TypeError("Object is not a valid DOM element");if("IFRAME"!==n.tagName.toUpperCase())throw TypeError("Expected <IFRAME> tag, found <"+n.tagName+">");H(n,e),i.push(n)}}for(var i,t=["moz","webkit","o","ms"],o=0;o<t.length&&!l;o+=1)l=window[t[o]+"RequestAnimationFrame"];return l?l=l.bind(window):v("setup","RequestAnimationFrame not supported"),p(window,"message",x),p(window,"resize",function(){var e;v("window","Trigger event: "+(e="resize")),S(function(){j("Window "+e,"resize")},16)}),p(document,"visibilitychange",P),p(document,"-webkit-visibilitychange",P),function(t,o){var r;switch(i=[],(r=t)&&r.enablePublicMethods&&w("enablePublicMethods option has been removed, public methods are now always available in the iFrame"),typeof o){case"undefined":case"string":Array.prototype.forEach.call(document.querySelectorAll(o||"iframe"),n.bind(e,t));break;case"object":n(t,o);break;default:throw TypeError("Unexpected data type ("+typeof o+")")}return i}}"undefined"!=typeof window&&(n=0,t=i=!1,o=7,a=(r="[iFrameSizer]").length,s=null,l=window.requestAnimationFrame,f=Object.freeze({max:1,scroll:1,bodyScroll:1,documentElementScroll:1}),c={},d=null,u=Object.freeze({autoResize:!0,bodyBackground:null,bodyMargin:null,bodyMarginV1:8,bodyPadding:null,checkOrigin:!0,inPageLinks:!1,enablePublicMethods:!0,heightCalculationMethod:"bodyOffset",id:"iFrameResizer",interval:32,log:!1,maxHeight:1/0,maxWidth:1/0,minHeight:0,minWidth:0,mouseEvents:!0,resizeFrom:"parent",scrolling:!1,sizeHeight:!0,sizeWidth:!1,warningTimeout:5e3,tolerance:0,widthCalculationMethod:"scroll",onClose:function(){return!0},onClosed:function(){},onInit:function(){},onMessage:function(){w("onMessage function not defined")},onMouseEnter:function(){},onMouseLeave:function(){},onResized:function(){},onScroll:function(){return!0}}),m={},window.jQuery!==e&&((g=window.jQuery).fn?g.fn.iFrameResize||(g.fn.iFrameResize=function(e){return this.filter("iframe").each(function(n,i){H(i,e)}).end()}):$("","Unable to bind to jQuery, it is not fully loaded.")),"function"==typeof define&&define.amd?define([],L):"object"==typeof module&&"object"==typeof module.exports&&(module.exports=L()),window.iFrameResize=window.iFrameResize||L())}()
|