| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380 | if (typeof console == 'undefined') console = {    log: function () { }};// sniff chromevar CHROME_5_LOCAL = false;var CHROME = false;var SAFARI = false;var FIREFOX = false;var WEBKIT = false;var QQ = false;var UC = false;var OS_MAC = false;var IOS = false;var ANDROID = false;var MOBILE_DEVICE = false;var SHARE_APP = false;var IE = false;var IE_10_AND_BELOW = false;  //ie 10 and lowervar IE_11_AND_ABOVE = false; //ie 11 and abovevar BROWSER_VERSION = 5000;(function () {    if(!window.$axure) window.$axure = function() {};    var useragent = window.navigator.userAgent;    IOS = useragent.match(/iPhone/i) || useragent.match(/iPad/i) || useragent.match(/iPod/i);    ANDROID = useragent.match(/Android/i);    MOBILE_DEVICE = ANDROID || IOS        || navigator.userAgent.match(/webOS/i)        || navigator.userAgent.match(/BlackBerry/i)        || navigator.userAgent.match(/Tablet PC/i)        || navigator.userAgent.match(/Windows Phone/i);    var edgeRegex = /Edge\/([0-9]+)/g;    var edgeMatch = edgeRegex.exec(useragent);    $axure.browser = { isEdge: Boolean(edgeMatch) };    if ($axure.browser.isEdge) BROWSER_VERSION = Number(edgeMatch[1]);    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 &&            !MOBILE_DEVICE; // Otherwise, Android webview will show up as CHROME_5_LOCAL        if (CHROME) BROWSER_VERSION = Number(chromeMatch[1]);    }    var safariRegex = /Safari\/([0-9]+)/g;    var safariMatch = safariRegex.exec(useragent);    SAFARI = Boolean(safariMatch) && !CHROME && !$axure.browser.isEdge; //because chrome also inserts safari string into user agent    if (SAFARI) BROWSER_VERSION = Number(safariMatch[1]);    var webkitRegex = /WebKit\//g ;    WEBKIT = Boolean(webkitRegex.exec(useragent));    var firefoxRegex = /Firefox\/([0-9]+)/g;    var firefoxMatch = firefoxRegex.exec(useragent);    FIREFOX = useragent.toLowerCase().indexOf('firefox') > -1;    if (FIREFOX) BROWSER_VERSION = Number(firefoxMatch[1]);    QQ = useragent.toLowerCase().indexOf('qqbrowser') > -1;    UC = useragent.toLowerCase().indexOf('ucbrowser') > -1 || useragent.toLowerCase().indexOf('ubrowser') > -1;    SHARE_APP = useragent.toLowerCase().indexOf('shareapp') > -1;    var macRegex = /Mac/g ;    OS_MAC = Boolean(macRegex.exec(window.navigator.platform));        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_11_AND_ABOVE = useragent.toLowerCase().indexOf('trident') > -1;    IE_10_AND_BELOW = !IE_11_AND_ABOVE && useragent.toLowerCase().indexOf('msie') > -1;    IE = IE_10_AND_BELOW || IE_11_AND_ABOVE;    var _supports = $axure.mobileSupport = {};    _supports.touchstart = typeof window.ontouchstart !== 'undefined';    _supports.touchmove = typeof window.ontouchmove !== 'undefined';    _supports.touchend = typeof window.ontouchend !== 'undefined';    _supports.mobile = _supports.touchstart && _supports.touchend && _supports.touchmove;    if (!MOBILE_DEVICE && _supports.mobile) {        _supports.touchstart = false;        _supports.touchmove = false;        _supports.touchend = false;        _supports.mobile = false;    }    var _eventNames = $axure.eventNames = {};    _eventNames.mouseDownName = _supports.touchstart ? 'touchstart' : 'mousedown';    _eventNames.mouseUpName = _supports.touchend ? 'touchend' : 'mouseup';    _eventNames.mouseMoveName = _supports.touchmove ? 'touchmove' : 'mousemove';    //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 matched, browser;    // Use of jQuery.browser is frowned upon.    // More details: http://api.jquery.com/jQuery.browser    // jQuery.uaMatch maintained for back-compat    jQuery.uaMatch = function (ua) {        ua = ua.toLowerCase();        var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||            /(webkit)[ \/]([\w.]+)/.exec(ua) ||            /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||            /(msie) ([\w.]+)/.exec(ua) ||            ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||            [];        return {            browser: match[1] || "",            version: match[2] || "0"        };    };    matched = jQuery.uaMatch(navigator.userAgent);    browser = {};    if (matched.browser) {        browser[matched.browser] = true;        browser.version = matched.version;    }    // Chrome is Webkit, but Webkit is also Safari.    if (browser.chrome) {        browser.webkit = true;    } else if (browser.webkit) {        browser.safari = true;    }    jQuery.browser = browser;    jQuery.sub = function () {        function jQuerySub(selector, context) {            return new jQuerySub.fn.init(selector, context);        }        jQuery.extend(true, jQuerySub, this);        jQuerySub.superclass = this;        jQuerySub.fn = jQuerySub.prototype = this();        jQuerySub.fn.constructor = jQuerySub;        jQuerySub.sub = this.sub;        jQuerySub.fn.init = function init(selector, context) {            if (context && context instanceof jQuery && !(context instanceof jQuerySub)) {                context = jQuerySub(context);            }            return jQuery.fn.init.call(this, selector, context, rootjQuerySub);        };        jQuerySub.fn.init.prototype = jQuerySub.fn;        var rootjQuerySub = jQuerySub(document);        return jQuerySub;    };})();(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;        }    })();    if (CHROME_5_LOCAL) {        document.addEventListener("DOMContentLoaded", function () {            $('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')[0].addEventListener('axureMessageReceiverEvent',                function () {                    var request = JSON.parse($(this).text());                    _handleRequest(request);                });        });    } else {        $(window.document).ready(function () {            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) {}        });    };    var _combineEventMessages = false;    var _compositeEventMessageData = [];    _messageCenter.startCombineEventMessages = function() {        _combineEventMessages = true;    }    _messageCenter.endCombineEventMessages = function () {        _messageCenter.sendCompositeEventMessage();        _combineEventMessages = false;    }    _messageCenter.sendCompositeEventMessage = function () {        _messageCenter.postMessage('axCompositeEventMessage', _compositeEventMessageData);        _compositeEventMessageData = [];    }    _messageCenter.postMessage = function (message, data) {        if(_combineEventMessages) {            if(message == 'axEvent' || message == 'axCase' || message == 'axAction' || message == 'axEventComplete') {                _compositeEventMessageData.push({ 'message': message, 'data': data });                if(_compositeEventMessageData.length >= 10) _messageCenter.sendCompositeEventMessage();                return;            }        }        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        };    };})();
 |