| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 | // ******* GLOBAL VARIABLE PROVIDER ******** //$axure.internal(function($ax) {    var _globalVariableValues = {};    var _globalVariableProvider = {};    $ax.globalVariableProvider = _globalVariableProvider;    var setVariableValue = function(variable, value, suppressBroadcast) {        if(!(value instanceof Object)) value = value.toString();        variable = variable.toLowerCase();        _globalVariableValues[variable] = value;        if(suppressBroadcast !== true) {            var varData = {                globalVarName: variable,                globalVarValue: value.toString()            };            $axure.messageCenter.postMessage('setGlobalVar', varData);        }        //Post global var values only if pageData is loaded (suppresses exception which occurs when page loads)        if($ax.pageData) {            _postGlobalVarVals();        }    };    _globalVariableProvider.setVariableValue = setVariableValue;    var getVariableValue = function(variable, eventInfo, ignoreDefaultsForLinkUrl) {        variable = variable.toLowerCase();        if(_globalVariableValues[variable] !== undefined) {            //If this is for the GetLinkUrl function and             //the current value of the global variable is the same as the default defined in the document, don't return it            if(ignoreDefaultsForLinkUrl == true && $ax.document.globalVariables[variable] == _globalVariableValues[variable]) {                return null;            }            return _globalVariableValues[variable];        }        if($ax.document.globalVariables[variable] !== undefined) return ignoreDefaultsForLinkUrl == true ? null : $ax.document.globalVariables[variable];        switch(variable) {            case "pagename": return $ax.pageData.page.name;            case "now": return eventInfo.now;            case "gendate": return $ax.pageData.generationDate;            case "dragx": return $ax.drag.GetDragX();            case "dragy": return $ax.drag.GetDragY();            case "totaldragx": return $ax.drag.GetTotalDragX();            case "totaldragy": return $ax.drag.GetTotalDragY();            case "dragtime": return $ax.drag.GetDragTime();            case "math": return Math;            case "date": return Date;            case "window": return eventInfo && eventInfo.window;            case "this": return eventInfo && eventInfo.thiswidget && $ax.getWidgetInfo(eventInfo.thiswidget.elementId);            case "item": return (eventInfo && eventInfo.item && eventInfo.item.valid && eventInfo.item) || getVariableValue('targetitem', eventInfo, ignoreDefaultsForLinkUrl);            case "targetitem": return eventInfo && eventInfo.targetElement && $ax.getItemInfo(eventInfo.targetElement);            case "repeater": return eventInfo && eventInfo.repeater;            case "target": return eventInfo && eventInfo.targetElement && $ax.getWidgetInfo(eventInfo.targetElement);            case "cursor": return eventInfo && eventInfo.cursor;            default:                var gen = variable.substr(0, 3) == "gen";                var date = gen ? $ax.pageData.generationDate : new Date();                var prop = gen ? variable.substr(3) : variable;                switch(prop) {                    case "day": return date.getDate();                    case "month": return date.getMonth() + 1;                    case "monthname": return $ax.getMonthName(date.getMonth());                    case "dayofweek": return $ax.getDayOfWeek(date.getDay());                    case "year": return date.getFullYear();                    case "time": return date.toLocaleTimeString();                    case "hours": return date.getHours();                    case "minutes": return date.getMinutes();                    case "seconds": return date.getSeconds();                    default: return '';                }        }    };    _globalVariableProvider.getVariableValue = getVariableValue;    var load = function() {        let query = (window.location.href.split("#")[1] || ''); //hash.substring(1); Firefox decodes this so & in variables breaks        if(query.length > 0) {            $ax.utils.parseGlobalVars(query, setVariableValue);        }    };    var getLinkUrl = function(baseUrl, useGlobalVarName) {        var toAdd = '';        var definedVariables = _getDefinedVariables();        for(var i = 0; i < definedVariables.length; i++) {            var key = definedVariables[i];            var val = getVariableValue(key, undefined, true);            if(val != null) {                if(toAdd.length > 0) toAdd += '&';                else if(useGlobalVarName) toAdd = GLOBAL_VAR_NAME;                toAdd += key + '=' + encodeURIComponent(val);            }        }        return toAdd.length > 0 ? baseUrl + (useGlobalVarName ? '' : $axure.shouldSendVarsToServer() ? '?' : '#') + toAdd + "&" + GLOBAL_VAR_CHECKSUM + "=1" : baseUrl;    };    _globalVariableProvider.getLinkUrl = getLinkUrl;    var _getDefinedVariables = function() {        return $ax.pageData.variables;    };    _globalVariableProvider.getDefinedVariables = _getDefinedVariables;    var _postGlobalVarVals = function() {        var retVal = {};        var definedVariables = _getDefinedVariables();        for(var i = 0; i < definedVariables.length; i++) {            var key = definedVariables[i];            var val = getVariableValue(key);            if(val != null) {                retVal[key] = val;            }        }        $ax.messageCenter.postMessage('globalVariableValues', retVal);    };    $ax.messageCenter.addMessageListener(function(message, data) {        if(message == 'getGlobalVariables') {            _postGlobalVarVals();        } else if(message == 'resetGlobalVariables') {            _globalVariableValues = {};            _postGlobalVarVals();        }    });    load();});
 |