PluginProbe
Independent Analytics – WordPress Analytics Plugin / 1.22.0
Independent Analytics – WordPress Analytics Plugin v1.22.0
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 All 120 releases
independent-analytics / freemius / assets / js / postmessage.js
postmessage.js
135 lines 4.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function ($, undef) {
2 var global = this;
3
4 // Namespace.
5 global.FS = global.FS || {};
6
7 global.FS.PostMessage = function ()
8 {
9 var
10 _is_child = false,
11 _postman = new NoJQueryPostMessageMixin('postMessage', 'receiveMessage'),
12 _callbacks = {},
13 _base_url,
14 _parent_url = decodeURIComponent(document.location.hash.replace(/^#/, '')),
15 _parent_subdomain = _parent_url.substring(0, _parent_url.indexOf('/', ('https://' === _parent_url.substring(0, ('https://').length)) ? 8 : 7)),
16 _init = function () {
17 _postman.receiveMessage(function (e) {
18 var data = JSON.parse(e.data);
19
20 if (_callbacks[data.type]) {
21 for (var i = 0; i < _callbacks[data.type].length; i++) {
22 // Execute type callbacks.
23 _callbacks[data.type][i](data.data);
24 }
25 }
26 }, _base_url);
27 },
28 _hasParent = ('' !== _parent_url),
29 $window = $(window),
30 $html = $('html');
31
32 return {
33 init : function (url, iframes)
34 {
35 _base_url = url;
36 _init();
37
38 // Automatically receive forward messages.
39 FS.PostMessage.receiveOnce('forward', function (data){
40 window.location = data.url;
41 });
42
43 iframes = iframes || [];
44
45 if (iframes.length > 0) {
46 $window.on('scroll', function () {
47 for (var i = 0; i < iframes.length; i++) {
48 FS.PostMessage.postScroll(iframes[i]);
49 }
50 });
51 }
52 },
53 init_child : function ()
54 {
55 this.init(_parent_subdomain);
56
57 _is_child = true;
58
59 // Post height of a child right after window is loaded.
60 $(window).bind('load', function () {
61 FS.PostMessage.postHeight();
62
63 // Post message that window was loaded.
64 FS.PostMessage.post('loaded');
65 });
66 },
67 hasParent : function ()
68 {
69 return _hasParent;
70 },
71 postHeight : function (diff, wrapper) {
72 diff = diff || 0;
73 wrapper = wrapper || '#wrap_section';
74 this.post('height', {
75 height: diff + $(wrapper).outerHeight(true)
76 });
77 },
78 postScroll : function (iframe) {
79 this.post('scroll', {
80 top: $window.scrollTop(),
81 height: ($window.height() - parseFloat($html.css('paddingTop')) - parseFloat($html.css('marginTop')))
82 }, iframe);
83 },
84 post : function (type, data, iframe)
85 {
86 console.debug('PostMessage.post', type);
87
88 if (iframe)
89 {
90 // Post to iframe.
91 _postman.postMessage(JSON.stringify({
92 type: type,
93 data: data
94 }), iframe.src, iframe.contentWindow);
95 }
96 else {
97 // Post to parent.
98 _postman.postMessage(JSON.stringify({
99 type: type,
100 data: data
101 }), _parent_url, window.parent);
102 }
103 },
104 receive: function (type, callback)
105 {
106 console.debug('PostMessage.receive', type);
107
108 if (undef === _callbacks[type])
109 _callbacks[type] = [];
110
111 _callbacks[type].push(callback);
112 },
113 receiveOnce: function (type, callback)
114 {
115 if (this.is_set(type))
116 return;
117
118 this.receive(type, callback);
119 },
120 // Check if any callbacks assigned to a specified message type.
121 is_set: function (type)
122 {
123 return (undef != _callbacks[type]);
124 },
125 parent_url: function ()
126 {
127 return _parent_url;
128 },
129 parent_subdomain: function ()
130 {
131 return _parent_subdomain;
132 }
133 };
134 }();
135 })(jQuery);