PluginProbe
BlockSpare – Gutenberg Blocks, AI Content Generator & Site Builder for News, Magazine & Blogs / 2.6.6
BlockSpare – Gutenberg Blocks, AI Content Generator & Site Builder for News, Magazine & Blogs v2.6.6
5.0.1 4.1.0 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.1.0 1.1.1 1.1.2 1.2.0 1.2.1 1.2.2 1.2.3 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 2.1.2 2.5.0 2.5.3 All 39 releases
← All changes | freemius/assets/js/postmessage.js +135 -1 5.0.1 → 2.6.6 View file →
@@ -1 +1,135 @@
1 -!function(t,e){var s,n,o,i,r,a,c,p,u=this;u.FS=u.FS||{},u.FS.PostMessage=(n=new NoJQueryPostMessageMixin("postMessage","receiveMessage"),o={},i=decodeURIComponent(document.location.hash.replace(/^#/,"")),r=i.substring(0,i.indexOf("/","https://"===i.substring(0,8)?8:7)),a=""!==i,c=t(window),p=t("html"),{init:function(t,e){s=t,n.receiveMessage((function(t){var e=JSON.parse(t.data);if(o[e.type])for(var s=0;s<o[e.type].length;s++)o[e.type][s](e.data)}),s),FS.PostMessage.receiveOnce("forward",(function(t){t.url&&(t.url.startsWith("http://")||t.url.startsWith("https://"))&&(window.location=t.url)})),(e=e||[]).length>0&&c.on("scroll",(function(){for(var t=0;t<e.length;t++)FS.PostMessage.postScroll(e[t])}))},init_child:function(){a&&(this.init(r),t(window).bind("load",(function(){FS.PostMessage.postHeight(),FS.PostMessage.post("loaded")})))},hasParent:function(){return a},postHeight:function(e,s){e=e||0,s=s||"#wrap_section",this.post("height",{height:e+t(s).outerHeight(!0)})},postScroll:function(t){this.post("scroll",{top:c.scrollTop(),height:c.height()-parseFloat(p.css("paddingTop"))-parseFloat(p.css("marginTop"))},t)},post:function(t,e,s){console.debug("PostMessage.post",t),s?n.postMessage(JSON.stringify({type:t,data:e}),s.src,s.contentWindow):n.postMessage(JSON.stringify({type:t,data:e}),i,window.parent)},receive:function(t,s){console.debug("PostMessage.receive",t),e===o[t]&&(o[t]=[]),o[t].push(s)},receiveOnce:function(t,e){this.is_set(t)||this.receive(t,e)},is_set:function(t){return e!=o[t]},parent_url:function(){return i},parent_subdomain:function(){return r}})}(jQuery);
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);