PageSourceSearch

http://www.efojs.com/elefunfunt/resources/scripts/messagecenter.js

js efojs.com collected 2026-10-06 03:41:06 UTC 9,914 bytes, 256 lines download raw bytes

1if (typeof console == 'undefined') console = {
2    log: function () { }
3};
4
5// sniff chrome
6var CHROME_5_LOCAL = false;
7var CHROME = false;
8var SAFARI = false;
9var FIREFOX = false;
10var WEBKIT = false;
11var OS_MAC = false;
12var IOS = false;
13var MOBILE_DEVICE = false;
14
15var IE = false;
16var IE_10_AND_BELOW = false;  //ie 10 and lower
17var IE_11_AND_ABOVE = false; //ie 11 and above
18var BROWSER_VERSION = 5000;
19(function () {
20    if(!window.$axure) window.$axure = function() {};
21    var useragent = window.navigator.userAgent;
22
23    var edgeRegex = /Edge\/([0-9]+)/g;
24    var edgeMatch = edgeRegex.exec(useragent);
25    $axure.browser = { isEdge: Boolean(edgeMatch) };
26
27    if(!$axure.browser.isEdge) {
28        var chromeRegex = /Chrome\/([0-9]+).([0-9]+)/g;
29        var chromeMatch = chromeRegex.exec(useragent);
30        CHROME = Boolean(chromeMatch);
31        CHROME_5_LOCAL = chromeMatch &&
32            Number(chromeMatch[1]) >= 5 &&
33            location.href.indexOf('file://') >= 0;
34    }
35
36    var safariRegex = /Safari\/([0-9]+)/g;
37    var safariMatch = safariRegex.exec(useragent);
38    SAFARI = Boolean(safariMatch) && !CHROME; //because chrome also inserts safari string into user agent
39
40    var webkitRegex = /WebKit\//g ;
41    WEBKIT = Boolean(webkitRegex.exec(useragent));
42
43    FIREFOX = useragent.toLowerCase().indexOf('firefox') > -1;
44
45    var macRegex = /Mac/g ;
46    OS_MAC = Boolean(macRegex.exec(window.navigator.platform));
47
48    IOS = useragent.match(/iPhone/i) || useragent.match(/iPad/i) || useragent.match(/iPod/i);
49
50    MOBILE_DEVICE = navigator.userAgent.match(/Android/i)
51        || navigator.userAgent.match(/webOS/i)
52        || navigator.userAgent.match(/iPhone/i)
53        || navigator.userAgent.match(/iPad/i)
54        || navigator.userAgent.match(/iPod/i)
55        || navigator.userAgent.match(/BlackBerry/i)
56        || navigator.userAgent.match(/Tablet PC/i)
57        || navigator.userAgent.match(/Windows Phone/i);
58    
59    if($.browser) {
60        if($.browser.msie) IE_10_AND_BELOW = true;
61        else IE_11_AND_ABOVE = useragent.toLowerCase().indexOf('trident') > -1;
62
63        BROWSER_VERSION = $.browser.version;
64    }
65
66    IE = IE_10_AND_BELOW || IE_11_AND_ABOVE;
67
68    //Used by sitemap and variables.js getLinkUrl functions so that they know
69    //whether to embed global variables in URL as query string or hash string
70    //_shouldSendVars persists the value for sitemap instead of re-checking every time
71    var _shouldSendVars;
72    var _shouldSendVarsToServer = function(url) {
73        if(typeof _shouldSendVars != 'undefined') {
74            return _shouldSendVars;
75        }
76
77        if(SAFARI || (IE_10_AND_BELOW && BROWSER_VERSION < 10)) {
78            var urlToCheck = typeof url != 'undefined' ? url : window.location.href;
79            var serverRegex = /http:\/\/127\.0\.0\.1:[0-9]{5}/g;
80            var serverMatch = serverRegex.exec(urlToCheck);
81            var previewRegex = /[0-9]{2}\.[0-9]{2}\.[0-9]{2}/g;
82            var previewMatch = previewRegex.exec(urlToCheck);
83            if(Boolean(serverMatch) && Boolean(previewMatch)) {
84                _shouldSendVars = true;
85                return _shouldSendVars;
86            }
87        }
88
89        _shouldSendVars = false;
90        return _shouldSendVars;
91    };
92    $axure.shouldSendVarsToServer = _shouldSendVarsToServer;
93})();
94
95(function() {
96    var _topMessageCenter;
97    var _messageCenter = {};
98    var _listeners = [];
99    var _stateListeners = [];
100    var _state = {};
101    var _eventObject = null;
102
103    var _queuedMessages = [];
104    var _initialized = false;
105
106    // this is for the non Chrome 5 local scenarios. The "top" message center will dispatch to all the bottom ones
107    var _childrenMessageCenters = [];
108
109    // create $axure if it hasn't been created
110    if (!window.$axure) window.$axure = function() {};
111    $axure.messageCenter = _messageCenter;
112
113    // isolate scope, and initialize _topMessageCenter.
114    (function() {
115        if (!CHROME_5_LOCAL) {
116            var topAxureWindow = window;
117            try {
118                while(topAxureWindow.parent && topAxureWindow.parent !== topAxureWindow
119                    && topAxureWindow.parent.$axure) topAxureWindow = topAxureWindow.parent;
120            } catch(e) {}
121            _topMessageCenter = topAxureWindow.$axure.messageCenter;
122        }
123    })();
124
125    $(window.document).ready(function() {
126        if (CHROME_5_LOCAL) {
127            $('body').append("<div id='axureEventReceiverDiv' style='display:none'></div>" +
128                "<div id='axureEventSenderDiv' style='display:none'></div>");
129
130		    _eventObject = window.document.createEvent('Event');
131		    _eventObject.initEvent('axureMessageSenderEvent', true, true);            
132            
133            $('#axureEventReceiverDiv').bind('axureMessageReceiverEvent', function () {
134                var request = JSON.parse($(this).text());
135                _handleRequest(request);
136            });
137        } else {
138            if (_topMessageCenter != _messageCenter) {
139                _topMessageCenter.addChildMessageCenter(_messageCenter);
140                console.log('adding from ' + window.location.toString());
141            }
142        }
143    });
144
145    var _handleRequest = function (request) {
146        // route the request to all the listeners
147        for(var i = 0; i < _listeners.length; i++) _listeners[i](request.message, request.data);
148
149        // now handle the queued messages if we're initializing
150        if (request.message == 'initialize') {
151            _initialized = true;
152            // send all the queued messages and return
153            for (var i = 0; i < _queuedMessages.length; i++) {
154                var qRequest = _queuedMessages[i];
155                _messageCenter.postMessage(qRequest.message, qRequest.data);
156            }
157            _queuedMessages = [];
158        }
159                
160        // and then handle the set state messages, if necessary
161        if (request.message == 'setState') {
162            _state[request.data.key] = request.data.value;
163            for (var i = 0; i < _stateListeners.length; i++) {
164                var keyListener = _stateListeners[i];
165                // if thep passed a null or empty value, always post the message
166                if (!keyListener.key || keyListener.key == request.data.key) {
167                    keyListener.listener(request.data.key, request.data.value);
168                }
169            }
170        }
171
172    };
173
174    // -----------------------------------------------------------------------------------------
175    // This method allows for dispatching messages in the non-chromelocal scenario.
176    // Each child calls this on _topMessageCenter
177    // -----------------------------------------------------------------------------------------
178    _messageCenter.addChildMessageCenter = function(messageCenter) {
179        _childrenMessageCenters[_childrenMessageCenters.length] = messageCenter;
180    };
181
182    // -----------------------------------------------------------------------------------------
183    // This method allows for dispatching messages in the non-chromelocal scenario.
184    // Each child calls this on _topMessageCenter
185    // -----------------------------------------------------------------------------------------
186    _messageCenter.dispatchMessage = function(message, data) {
187        _handleRequest({
188            message: message,
189            data: data
190        });
191    };
192
193    // -----------------------------------------------------------------------------------------
194    // -----------------------------------------------------------------------------------------
195    _messageCenter.dispatchMessageRecursively = function(message, data) {
196        console.log("dispatched to " + window.location.toString());
197
198        // dispatch to the top center first
199        _messageCenter.dispatchMessage(message, data);
200
201        $('iframe').each(function(index, frame) {
202            //try,catch to handle permissions error in FF when loading pages from another domain
203            try {
204                if (frame.contentWindow.$axure && frame.contentWindow.$axure.messageCenter) {
205                    frame.contentWindow.$axure.messageCenter.dispatchMessageRecursively(message, data);
206                }
207            }catch(e) {}
208        });
209    };
210
211    _messageCenter.postMessage = function(message, data) {
212        if(!CHROME_5_LOCAL) {
213            _topMessageCenter.dispatchMessageRecursively(message, data);
214        } else {
215            var request = {
216                message: message,
217                data: data
218            };
219
220            if(_initialized) {
221                var senderDiv = window.document.getElementById('axureEventSenderDiv');
222                var messageText = JSON.stringify(request);
223                //                console.log('sending event: ' + messageText);
224                senderDiv.innerText = messageText;
225                senderDiv.dispatchEvent(_eventObject);
226                //                console.log('event sent');
227            } else {
228                _queuedMessages[_queuedMessages.length] = request;
229            }
230        }
231    };
232
233    _messageCenter.setState = function(key, value) {
234        var data = {
235            key: key,
236            value: value
237        };
238        _messageCenter.postMessage('setState', data);
239    };
240
241    _messageCenter.getState = function(key) {
242        return _state[key];
243    };
244
245    _messageCenter.addMessageListener = function(listener) {
246        _listeners[_listeners.length] = listener;
247    };
248
249    _messageCenter.addStateListener = function(key, listener) {
250        _stateListeners[_stateListeners.length] = {
251            key: key,
252            listener: listener
253        };
254    };
255
256})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.