123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- // ******* 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() {
- var csum = false;
- var query = (window.location.href.split("#")[1] || ''); //hash.substring(1); Firefox decodes this so & in variables breaks
- if(query.length > 0) {
- var vars = query.split("&");
- for(var i = 0; i < vars.length; i++) {
- var pair = vars[i].split("=");
- var varName = pair[0];
- var varValue = pair[1];
- if(varName) {
- if(varName == 'CSUM') {
- csum = true;
- } else setVariableValue(varName, decodeURIComponent(varValue), true);
- }
- }
- if(!csum && query.length > 250) {
- window.alert('Axure Warning: The variable values were too long to pass to this page.\n\nIf you are using IE, using Chrome or Firefox will support more data.');
- }
- }
- };
- var getLinkUrl = function(baseUrl) {
- 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 += '&';
- toAdd += key + '=' + encodeURIComponent(val);
- }
- }
- return toAdd.length > 0 ? baseUrl + ($axure.shouldSendVarsToServer() ? '?' : '#') + toAdd + "&CSUM=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();
- });
|