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.