variables.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. // ******* GLOBAL VARIABLE PROVIDER ******** //
  2. $axure.internal(function($ax) {
  3. var _globalVariableValues = {};
  4. var _globalVariableProvider = {};
  5. $ax.globalVariableProvider = _globalVariableProvider;
  6. var setVariableValue = function(variable, value, suppressBroadcast) {
  7. if(!(value instanceof Object)) value = value.toString();
  8. variable = variable.toLowerCase();
  9. var variableValueWasChanged = (_globalVariableValues[variable] || $ax.document.globalVariables[variable]) !== value;
  10. _globalVariableValues[variable] = value;
  11. if(suppressBroadcast !== true) {
  12. var varData = {
  13. globalVarName: variable,
  14. globalVarValue: value.toString()
  15. };
  16. $axure.messageCenter.postMessage('setGlobalVar', varData);
  17. }
  18. //Post global var values only if pageData is loaded (suppresses exception which occurs when page loads)
  19. if($ax.pageData) {
  20. _postGlobalVarVals();
  21. }
  22. if(suppressBroadcast !== true && variableValueWasChanged) $ax.variableChangePageAndMasters(variable);
  23. };
  24. _globalVariableProvider.setVariableValue = setVariableValue;
  25. var getVariableValue = function(variable, eventInfo, ignoreDefaultsForLinkUrl) {
  26. variable = variable.toLowerCase();
  27. if(_globalVariableValues[variable] !== undefined) {
  28. //If this is for the GetLinkUrl function and
  29. //the current value of the global variable is the same as the default defined in the document, don't return it
  30. if(ignoreDefaultsForLinkUrl == true && $ax.document.globalVariables[variable] == _globalVariableValues[variable]) {
  31. return null;
  32. }
  33. return _globalVariableValues[variable];
  34. }
  35. if($ax.document.globalVariables[variable] !== undefined) return ignoreDefaultsForLinkUrl == true ? null : $ax.document.globalVariables[variable];
  36. switch(variable) {
  37. case "pagename": return $ax.pageData.page.name;
  38. case "now": return eventInfo.now;
  39. case "gendate": return $ax.pageData.generationDate;
  40. case "dragx": return $ax.drag.GetDragX();
  41. case "dragy": return $ax.drag.GetDragY();
  42. case "totaldragx": return $ax.drag.GetTotalDragX();
  43. case "totaldragy": return $ax.drag.GetTotalDragY();
  44. case "dragtime": return $ax.drag.GetDragTime();
  45. case "math": return Math;
  46. case "date": return Date;
  47. case "window": return eventInfo && eventInfo.window;
  48. case "this": return eventInfo && eventInfo.thiswidget && $ax.getWidgetInfo(eventInfo.thiswidget.elementId);
  49. case "item": return (eventInfo && eventInfo.item && eventInfo.item.valid && eventInfo.item) || getVariableValue('targetitem', eventInfo, ignoreDefaultsForLinkUrl);
  50. case "targetitem": return eventInfo && eventInfo.targetElement && $ax.getItemInfo(eventInfo.targetElement);
  51. case "repeater": return eventInfo && eventInfo.repeater;
  52. case "target": return eventInfo && eventInfo.targetElement && $ax.getWidgetInfo(eventInfo.targetElement);
  53. case "cursor": return eventInfo && eventInfo.cursor;
  54. default:
  55. var gen = variable.substr(0, 3) == "gen";
  56. var date = gen ? $ax.pageData.generationDate : new Date();
  57. var prop = gen ? variable.substr(3) : variable;
  58. switch(prop) {
  59. case "day": return date.getDate();
  60. case "month": return date.getMonth() + 1;
  61. case "monthname": return $ax.getMonthName(date.getMonth());
  62. case "dayofweek": return $ax.getDayOfWeek(date.getDay());
  63. case "year": return date.getFullYear();
  64. case "time": return date.toLocaleTimeString();
  65. case "hours": return date.getHours();
  66. case "minutes": return date.getMinutes();
  67. case "seconds": return date.getSeconds();
  68. default: return '';
  69. }
  70. }
  71. };
  72. _globalVariableProvider.getVariableValue = getVariableValue;
  73. var load = function() {
  74. let query = (window.location.href.split("?")[1] || ''); //hash.substring(1); Firefox decodes this so & in variables breaks
  75. if(query.length > 0) {
  76. $ax.utils.parseGlobalVars(query, setVariableValue);
  77. }
  78. };
  79. _globalVariableProvider.load = load;
  80. var getLinkUrl = function(baseUrl, useGlobalVarName) {
  81. var toAdd = '';
  82. var hasQueryParam = baseUrl.indexOf('?') >= 0;
  83. var definedVariables = _getDefinedVariables();
  84. for(var i = 0; i < definedVariables.length; i++) {
  85. var key = definedVariables[i];
  86. var val = getVariableValue(key, undefined, true);
  87. if (val != null) {
  88. if (toAdd.length === 0) {
  89. if (useGlobalVarName) {
  90. if (hasQueryParam) toAdd += '&';
  91. toAdd += GLOBAL_VAR_NAME;
  92. }
  93. toAdd += key + '=' + encodeURIComponent(val);
  94. } else {
  95. toAdd += '&' + key + '=' + encodeURIComponent(val);
  96. }
  97. }
  98. }
  99. if (window.location.protocol !== 'file:' && window.parent && window.parent.CLOUD_VAR_NAME) {
  100. var cl = $ax.utils.getQueryString(window.parent.CLOUD_VAR_NAME, window.parent.location.href);
  101. if (cl && cl.length > 0) {
  102. if (toAdd.length > 0 || hasQueryParam) toAdd += '&';
  103. toAdd += window.parent.CLOUD_VAR_NAME + '=' + cl;
  104. }
  105. }
  106. return toAdd.length > 0 ? baseUrl + (hasQueryParam ? '' : '?') + toAdd + "&" + GLOBAL_VAR_CHECKSUM + "=1" : baseUrl;
  107. };
  108. _globalVariableProvider.getLinkUrl = getLinkUrl;
  109. var _getDefinedVariables = function() {
  110. return $ax.pageData.variables;
  111. };
  112. _globalVariableProvider.getDefinedVariables = _getDefinedVariables;
  113. var _postGlobalVarVals = function() {
  114. var retVal = {};
  115. var definedVariables = _getDefinedVariables();
  116. for(var i = 0; i < definedVariables.length; i++) {
  117. var key = definedVariables[i];
  118. var val = getVariableValue(key);
  119. if(val != null) {
  120. retVal[key] = val;
  121. }
  122. }
  123. $ax.messageCenter.postMessage('globalVariableValues', retVal);
  124. };
  125. $ax.messageCenter.addMessageListener(function(message, data) {
  126. if(message == 'getGlobalVariables') {
  127. _postGlobalVarVals();
  128. } else if(message == 'resetGlobalVariables') {
  129. _globalVariableValues = {};
  130. _postGlobalVarVals();
  131. }
  132. });
  133. });