/** * Embedder function */ var msEmbed = { /** * Initialize the embed */ cookieConsentName: "userconsent", iframeEmbed: [], init: function () { //detect all embed iFrames msEmbed.addEventListener(window, "message", function (event) { if (event.data['embedId']) { var embedId = event.data['embedId']; var frm = event.data['frm'] ? event.data['frm'] : ''; var iframe = document.getElementById('ms-embed-' + embedId + (frm != '' ? ('-' + frm) : '')); if (iframe) { if(msEmbed.checkCookieConsent() && msEmbed.iframeEmbed.indexOf(iframe) == -1){ iframe.src= iframe.src + '&partialDisplay=1'; msEmbed.iframeEmbed.push(iframe); } //iframe detected var size = event.data['size']; if (event.data['type'] == 'sizeChange') { //set the new size (height only, as the width is considered set by default) iframe.style.height = size.height + "px"; //send the child an acknowledge message to know what size it was received so it doesn't send it again iframe.contentWindow.postMessage({ 'type': 'acknowledgeSize', 'embedId': embedId, 'frm': frm, size: size }, '*'); } else if (event.data['type'] == 'pullStyle') { //gather style to send var styles = []; for (var i = 0; i < document.styleSheets.length; i++) { var stylesheet = document.styleSheets[i]; try { //when the css rules come from a different domain there's a security error that must be ignored in ff var ruleList = stylesheet.rules || stylesheet.cssRules; if (ruleList && ruleList.length) { for (var j = 0; j < ruleList.length; j++) { var selectorText = ruleList[j].selectorText; if (selectorText && selectorText.indexOf('.' + event.data['selector']) >= 0) { styles.push(ruleList[j].cssText); } } } } catch (e) { } } //need to send the style inside the iframe iframe.contentWindow.postMessage({ 'type': 'pushStyle', 'embedId': embedId, 'frm': frm, 'style': styles.join('\n\n') }, '*'); } else if (event.data['type'] == 'event') { orange.embed.raise(event.data['eventName'], { data: event.data['params'], embed: {type: event.data['embed']['type'], category: event.data['embed']['category'], instanceId: event.data['embed']['instanceId']} }); } } } }, false); }, /** * Add one event listener * @param object * @param event * @param method */ addEventListener: function (object, event, method) { var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent"; var eventAdder = object[eventMethod]; event = window.addEventListener ? event : ('on' + event); eventAdder(event, method, false); }, checkCookieConsent: function (element) { var cookieConsent = getCookie((msEmbed.cookieConsentName)); if(cookieConsent != ""){ cookieConsent = JSON.parse(cookieConsent); return cookieConsent && cookieConsent.c && cookieConsent.c.w && cookieConsent.c.w.cs && cookieConsent.c.w.cs.c5 && cookieConsent.c.w.cs.c5 == 1; }else { return true; } } }; //initialize the embed msEmbed.init(); orange = window.orange || {}; orange.eventsMixin = function (target, eventNames) { var actionsList = {}; for (var k in eventNames) { actionsList[eventNames[k]] = {}; } target.on = function (eventName, callback) { var index = eventNames.indexOf(eventName); var uid = guid(); if (index >= 0) { if (typeof callback !== "undefined") { actionsList[eventName][uid] = callback; } return uid; } else { throw "Unknown Event"; } }; target.off = function (eventId) { for (var k in actionsList) { var ev = actionsList[k]; for (var i in ev) { if (i === eventId) { delete ev[i]; } } } }; target.raise = function (eventName, params) { for (var k in actionsList[eventName]) { if (actionsList[eventName][k] !== null) { actionsList[eventName][k](params); } } } }; orange.embed = orange.embed || {}; orange.eventsMixin(orange.embed, ['refreshPub']); function guid() { function s4() { return Math.floor((1 + Math.random()) * 0x10000) .toString(16) .substring(1); } return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); } function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for(var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; }