123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- if (typeof console == 'undefined') console = {
- log: function () { }
- };
- // sniff chrome
- var CHROME_5_LOCAL = false;
- var CHROME = false;
- var SAFARI = false;
- var FIREFOX = false;
- var WEBKIT = false;
- var OS_MAC = false;
- var IOS = false;
- var MOBILE_DEVICE = false;
- var IE = false;
- var IE_10_AND_BELOW = false; //ie 10 and lower
- var IE_11_AND_ABOVE = false; //ie 11 and above
- var BROWSER_VERSION = 5000;
- (function () {
- if(!window.$axure) window.$axure = function() {};
- var useragent = window.navigator.userAgent;
- var edgeRegex = /Edge\/([0-9]+)/g;
- var edgeMatch = edgeRegex.exec(useragent);
- $axure.browser = { isEdge: Boolean(edgeMatch) };
- if(!$axure.browser.isEdge) {
- var chromeRegex = /Chrome\/([0-9]+).([0-9]+)/g;
- var chromeMatch = chromeRegex.exec(useragent);
- CHROME = Boolean(chromeMatch);
- CHROME_5_LOCAL = chromeMatch &&
- Number(chromeMatch[1]) >= 5 &&
- location.href.indexOf('file://') >= 0;
- }
- var safariRegex = /Safari\/([0-9]+)/g;
- var safariMatch = safariRegex.exec(useragent);
- SAFARI = Boolean(safariMatch) && !CHROME; //because chrome also inserts safari string into user agent
- var webkitRegex = /WebKit\//g ;
- WEBKIT = Boolean(webkitRegex.exec(useragent));
- FIREFOX = useragent.toLowerCase().indexOf('firefox') > -1;
- var macRegex = /Mac/g ;
- OS_MAC = Boolean(macRegex.exec(window.navigator.platform));
- IOS = useragent.match(/iPhone/i) || useragent.match(/iPad/i) || useragent.match(/iPod/i);
- MOBILE_DEVICE = navigator.userAgent.match(/Android/i)
- || navigator.userAgent.match(/webOS/i)
- || navigator.userAgent.match(/iPhone/i)
- || navigator.userAgent.match(/iPad/i)
- || navigator.userAgent.match(/iPod/i)
- || navigator.userAgent.match(/BlackBerry/i)
- || navigator.userAgent.match(/Tablet PC/i)
- || navigator.userAgent.match(/Windows Phone/i);
-
- if($.browser) {
- if($.browser.msie) IE_10_AND_BELOW = true;
- else IE_11_AND_ABOVE = useragent.toLowerCase().indexOf('trident') > -1;
- BROWSER_VERSION = $.browser.version;
- }
- IE = IE_10_AND_BELOW || IE_11_AND_ABOVE;
- //Used by sitemap and variables.js getLinkUrl functions so that they know
- //whether to embed global variables in URL as query string or hash string
- //_shouldSendVars persists the value for sitemap instead of re-checking every time
- var _shouldSendVars;
- var _shouldSendVarsToServer = function(url) {
- if(typeof _shouldSendVars != 'undefined') {
- return _shouldSendVars;
- }
- if(SAFARI || (IE_10_AND_BELOW && BROWSER_VERSION < 10)) {
- var urlToCheck = typeof url != 'undefined' ? url : window.location.href;
- var serverRegex = /http:\/\/127\.0\.0\.1:[0-9]{5}/g;
- var serverMatch = serverRegex.exec(urlToCheck);
- var previewRegex = /[0-9]{2}\.[0-9]{2}\.[0-9]{2}/g;
- var previewMatch = previewRegex.exec(urlToCheck);
- if(Boolean(serverMatch) && Boolean(previewMatch)) {
- _shouldSendVars = true;
- return _shouldSendVars;
- }
- }
- _shouldSendVars = false;
- return _shouldSendVars;
- };
- $axure.shouldSendVarsToServer = _shouldSendVarsToServer;
- })();
- (function() {
- var _topMessageCenter;
- var _messageCenter = {};
- var _listeners = [];
- var _stateListeners = [];
- var _state = {};
- var _eventObject = null;
- var _queuedMessages = [];
- var _initialized = false;
- // this is for the non Chrome 5 local scenarios. The "top" message center will dispatch to all the bottom ones
- var _childrenMessageCenters = [];
- // create $axure if it hasn't been created
- if (!window.$axure) window.$axure = function() {};
- $axure.messageCenter = _messageCenter;
- // isolate scope, and initialize _topMessageCenter.
- (function() {
- if (!CHROME_5_LOCAL) {
- var topAxureWindow = window;
- try {
- while(topAxureWindow.parent && topAxureWindow.parent !== topAxureWindow
- && topAxureWindow.parent.$axure) topAxureWindow = topAxureWindow.parent;
- } catch(e) {}
- _topMessageCenter = topAxureWindow.$axure.messageCenter;
- }
- })();
- $(window.document).ready(function() {
- if (CHROME_5_LOCAL) {
- $('body').append("<div id='axureEventReceiverDiv' style='display:none'></div>" +
- "<div id='axureEventSenderDiv' style='display:none'></div>");
- _eventObject = window.document.createEvent('Event');
- _eventObject.initEvent('axureMessageSenderEvent', true, true);
-
- $('#axureEventReceiverDiv').bind('axureMessageReceiverEvent', function () {
- var request = JSON.parse($(this).text());
- _handleRequest(request);
- });
- } else {
- if (_topMessageCenter != _messageCenter) {
- _topMessageCenter.addChildMessageCenter(_messageCenter);
- console.log('adding from ' + window.location.toString());
- }
- }
- });
- var _handleRequest = function (request) {
- // route the request to all the listeners
- for(var i = 0; i < _listeners.length; i++) _listeners[i](request.message, request.data);
- // now handle the queued messages if we're initializing
- if (request.message == 'initialize') {
- _initialized = true;
- // send all the queued messages and return
- for (var i = 0; i < _queuedMessages.length; i++) {
- var qRequest = _queuedMessages[i];
- _messageCenter.postMessage(qRequest.message, qRequest.data);
- }
- _queuedMessages = [];
- }
-
- // and then handle the set state messages, if necessary
- if (request.message == 'setState') {
- _state[request.data.key] = request.data.value;
- for (var i = 0; i < _stateListeners.length; i++) {
- var keyListener = _stateListeners[i];
- // if thep passed a null or empty value, always post the message
- if (!keyListener.key || keyListener.key == request.data.key) {
- keyListener.listener(request.data.key, request.data.value);
- }
- }
- }
- };
- // -----------------------------------------------------------------------------------------
- // This method allows for dispatching messages in the non-chromelocal scenario.
- // Each child calls this on _topMessageCenter
- // -----------------------------------------------------------------------------------------
- _messageCenter.addChildMessageCenter = function(messageCenter) {
- _childrenMessageCenters[_childrenMessageCenters.length] = messageCenter;
- };
- // -----------------------------------------------------------------------------------------
- // This method allows for dispatching messages in the non-chromelocal scenario.
- // Each child calls this on _topMessageCenter
- // -----------------------------------------------------------------------------------------
- _messageCenter.dispatchMessage = function(message, data) {
- _handleRequest({
- message: message,
- data: data
- });
- };
- // -----------------------------------------------------------------------------------------
- // -----------------------------------------------------------------------------------------
- _messageCenter.dispatchMessageRecursively = function(message, data) {
- console.log("dispatched to " + window.location.toString());
- // dispatch to the top center first
- _messageCenter.dispatchMessage(message, data);
- $('iframe').each(function(index, frame) {
- //try,catch to handle permissions error in FF when loading pages from another domain
- try {
- if (frame.contentWindow.$axure && frame.contentWindow.$axure.messageCenter) {
- frame.contentWindow.$axure.messageCenter.dispatchMessageRecursively(message, data);
- }
- }catch(e) {}
- });
- };
- _messageCenter.postMessage = function(message, data) {
- if(!CHROME_5_LOCAL) {
- _topMessageCenter.dispatchMessageRecursively(message, data);
- } else {
- var request = {
- message: message,
- data: data
- };
- if(_initialized) {
- var senderDiv = window.document.getElementById('axureEventSenderDiv');
- var messageText = JSON.stringify(request);
- // console.log('sending event: ' + messageText);
- senderDiv.innerText = messageText;
- senderDiv.dispatchEvent(_eventObject);
- // console.log('event sent');
- } else {
- _queuedMessages[_queuedMessages.length] = request;
- }
- }
- };
- _messageCenter.setState = function(key, value) {
- var data = {
- key: key,
- value: value
- };
- _messageCenter.postMessage('setState', data);
- };
- _messageCenter.getState = function(key) {
- return _state[key];
- };
- _messageCenter.addMessageListener = function(listener) {
- _listeners[_listeners.length] = listener;
- };
- _messageCenter.addStateListener = function(key, listener) {
- _stateListeners[_stateListeners.length] = {
- key: key,
- listener: listener
- };
- };
- })();
|