doc.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668
  1. $axure.internal(function($ax) {
  2. var _pageData;
  3. var _initializePageFragment = function(pageFragment, objIdToObject) {
  4. var objectArrayHelper = function(objects, parent) {
  5. for(var i = 0; i < objects.length; i++) {
  6. diagramObjectHelper(objects[i], parent);
  7. }
  8. };
  9. var diagramObjectHelper = function(diagramObject, parent) {
  10. $ax.initializeObject('diagramObject', diagramObject);
  11. objIdToObject[pageFragment.packageId + '~' + diagramObject.id] = diagramObject;
  12. diagramObject.parent = parent;
  13. diagramObject.owner = pageFragment;
  14. diagramObject.scriptIds = [];
  15. if(diagramObject.diagrams) { //dynamic panel
  16. for(var i = 0; i < diagramObject.diagrams.length; i++) {
  17. var diagram = diagramObject.diagrams[i];
  18. objectArrayHelper(diagram.objects, diagram);
  19. }
  20. }
  21. if(diagramObject.objects) objectArrayHelper(diagramObject.objects, diagramObject);
  22. };
  23. objectArrayHelper(pageFragment.diagram.objects, pageFragment.diagram);
  24. };
  25. var _initalizeStylesheet = function(stylesheet) {
  26. var stylesById = {};
  27. var customStyles = stylesheet.customStyles;
  28. for(var key in customStyles) {
  29. var style = customStyles[key];
  30. stylesById[style.id] = style;
  31. }
  32. stylesheet.stylesById = stylesById;
  33. };
  34. var _initializeDocumentData = function() {
  35. _initalizeStylesheet($ax.document.stylesheet);
  36. };
  37. var _initializePageData;
  38. // ******* Dictionaries ******** //
  39. (function() {
  40. var elementIdToObject = {};
  41. var scriptIdToObject = {};
  42. var scriptIdToRepeaterId = {};
  43. var repeaterIdToScriptIds = {};
  44. var repeaterIdToItemIds = {};
  45. var scriptIdToPath = {};
  46. var _scriptIds = [];
  47. var elementIdToText = {};
  48. var radioGroupToSelectedElementId = {};
  49. _initializePageData = function() {
  50. if(!_pageData || !_pageData.page || !_pageData.page.diagram) return;
  51. var objIdToObject = {};
  52. _initializePageFragment(_pageData.page, objIdToObject);
  53. for(var masterId in _pageData.masters) {
  54. var master = _pageData.masters[masterId];
  55. _initializePageFragment(master, objIdToObject);
  56. }
  57. var _pathsToScriptIds = [];
  58. _pathToScriptIdHelper(_pageData.objectPaths, [], _pathsToScriptIds, scriptIdToPath);
  59. for(var i = 0; i < _pathsToScriptIds.length; i++) {
  60. var path = _pathsToScriptIds[i].idPath;
  61. var scriptId = _pathsToScriptIds[i].scriptId;
  62. var packageId = _pageData.page.packageId;
  63. if(path.length > 1) {
  64. for(var j = 0; j < path.length - 1; j++) {
  65. var rdoId = path[j];
  66. var rdo = objIdToObject[packageId + '~' + rdoId];
  67. packageId = rdo.masterId;
  68. }
  69. }
  70. var diagramObject = objIdToObject[packageId + '~' + path[path.length - 1]];
  71. diagramObject.scriptIds[diagramObject.scriptIds.length] = scriptId;
  72. scriptIdToObject[scriptId] = diagramObject;
  73. _scriptIds[_scriptIds.length] = scriptId;
  74. }
  75. // Now map scriptIds to repeaters
  76. var mapScriptIdToRepeaterId = function(scriptId, repeaterId) {
  77. scriptIdToRepeaterId[scriptId] = repeaterId;
  78. var scriptIds = repeaterIdToScriptIds[repeaterId];
  79. if(scriptIds) scriptIds[scriptIds.length] = scriptId;
  80. else repeaterIdToScriptIds[repeaterId] = [scriptId];
  81. };
  82. var mapIdsToRepeaterId = function(path, objs, repeaterId) {
  83. var pathCopy = $ax.deepCopy(path);
  84. for(var i = 0; i < objs.length; i++) {
  85. var obj = objs[i];
  86. pathCopy[path.length] = obj.id;
  87. var scriptId = $ax.getScriptIdFromPath(pathCopy);
  88. // Rdo have no element on page and are not mapped to the repeater
  89. if(repeaterId) mapScriptIdToRepeaterId(scriptId, repeaterId);
  90. if(obj.type == 'dynamicPanel') {
  91. for(var j = 0; j < obj.diagrams.length; j++) mapIdsToRepeaterId(path, obj.diagrams[j].objects, repeaterId);
  92. } else if(obj.type == 'referenceDiagramObject') {
  93. mapIdsToRepeaterId(pathCopy, $ax.pageData.masters[obj.masterId].diagram.objects, repeaterId);
  94. } else if(obj.type == 'repeater') {
  95. mapScriptIdToRepeaterId(scriptId, scriptId);
  96. mapIdsToRepeaterId(path, obj.objects, scriptId);
  97. } else if(obj.objects && obj.objects.length) {
  98. if(repeaterId) {
  99. for(var j = 0; j < obj.objects.length; j++) {
  100. mapIdsToRepeaterId(path, obj.objects, repeaterId);
  101. }
  102. }
  103. }
  104. }
  105. };
  106. mapIdsToRepeaterId([], $ax.pageData.page.diagram.objects);
  107. };
  108. $ax.getPathFromScriptId = function(scriptId) {
  109. var reversedPath = [];
  110. var path = scriptIdToPath[scriptId];
  111. while(path && path.uniqueId) {
  112. reversedPath[reversedPath.length] = path.uniqueId;
  113. path = path.parent;
  114. }
  115. return reversedPath.reverse();
  116. };
  117. var _getScriptIdFromFullPath = function(path) {
  118. var current = $ax.pageData.objectPaths;
  119. for(var i = 0; i < path.length; i++) {
  120. current = current[path[i]];
  121. if(!current) return current;
  122. }
  123. return current && current.scriptId;
  124. };
  125. var _getScriptIdFromPath = function(path, relativeTo) {
  126. var relativePath = [];
  127. var includeMasterInPath = false;
  128. if(relativeTo) {
  129. var relativeToScriptId;
  130. if(relativeTo.srcElement) { //this is eventInfo
  131. relativeToScriptId = $ax.repeater.getScriptIdFromElementId(relativeTo.raisedId || relativeTo.srcElement);
  132. includeMasterInPath = relativeTo.isMasterEvent;
  133. } else if(typeof relativeTo === 'string') { //this is an element id
  134. relativeToScriptId = relativeTo;
  135. }
  136. if(relativeToScriptId) {
  137. relativePath = $ax.getPathFromScriptId(relativeToScriptId);
  138. if(!includeMasterInPath) relativePath = relativePath.slice(0, relativePath.length - 1);
  139. } else if(relativeTo instanceof Array) { //this is a path
  140. relativePath = relativeTo;
  141. }
  142. }
  143. var fullPath = relativePath.concat(path);
  144. return _getScriptIdFromFullPath(fullPath);
  145. };
  146. $ax.getScriptIdFromPath = _getScriptIdFromPath;
  147. var _getElementIdsFromPath = function(path, eventInfo) {
  148. var scriptId = _getScriptIdFromPath(path, eventInfo);
  149. return $ax.getElementIdsFromEventAndScriptId(eventInfo, scriptId);
  150. };
  151. $ax.getElementIdsFromPath = _getElementIdsFromPath;
  152. var _getElementIdFromPath = function(path, params) {
  153. var itemNum = params.itemNum;
  154. if(params.relativeTo && typeof params.relativeTo === 'string') {
  155. if($jobj(params.relativeTo)) itemNum = $ax.repeater.getItemIdFromElementId(params.relativeTo);
  156. }
  157. return $ax.repeater.createElementId(_getScriptIdFromPath(path, params.relativeTo), itemNum);
  158. };
  159. $ax.getElementIdFromPath = _getElementIdFromPath;
  160. var _getElementsIdFromEventAndScriptId = function(eventInfo, scriptId) {
  161. var itemId = eventInfo && $ax.repeater.getItemIdFromElementId(eventInfo.srcElement);
  162. var target = false;
  163. // Try to get itemId from target if you can't get it from source.
  164. if(!itemId) {
  165. itemId = eventInfo && eventInfo.targetElement && $ax.repeater.getItemIdFromElementId(eventInfo.targetElement);
  166. if(itemId) target = true;
  167. }
  168. var parentRepeater = $ax.getParentRepeaterFromScriptId(scriptId);
  169. if(parentRepeater && scriptId != parentRepeater) {
  170. if(itemId && (!eventInfo || parentRepeater == $ax.getParentRepeaterFromScriptId($ax.repeater.getScriptIdFromElementId(target ? eventInfo.targetElement : eventInfo.srcElement)))) {
  171. return [$ax.repeater.createElementId(scriptId, itemId)];
  172. }
  173. var elementIds = [];
  174. var itemIds = $ax.getItemIdsForRepeater(parentRepeater);
  175. if(!itemIds) return [];
  176. for(var i = 0; i < itemIds.length; i++) elementIds[i] = $ax.repeater.createElementId(scriptId, itemIds[i]);
  177. return elementIds;
  178. }
  179. return [scriptId];
  180. };
  181. $ax.getElementIdsFromEventAndScriptId = _getElementsIdFromEventAndScriptId;
  182. var _getSrcElementIdFromEvent = function(event) {
  183. var currentQuery = $(event.srcElement || event.target);
  184. while(currentQuery && currentQuery.length && (!$obj(currentQuery.attr('id')) || $jobj(currentQuery.attr('id')).hasClass('text'))) {
  185. currentQuery = currentQuery.parent();
  186. };
  187. return currentQuery.attr('id');
  188. };
  189. $ax.getSrcElementIdFromEvent = _getSrcElementIdFromEvent;
  190. var _getEventInfoFromEvent = function(event, skipShowDescriptions, elementId) {
  191. var eventInfo = {};
  192. eventInfo.srcElement = elementId;
  193. eventInfo.now = new Date();
  194. if(event != null) {
  195. //elementId can be empty string, so can't simple use "or" assignment here.
  196. eventInfo.srcElement = elementId || elementId == '' ? elementId : _getSrcElementIdFromEvent(event);
  197. eventInfo.which = event.which;
  198. // When getting locations in mobile, need to extract the touch object to get the mouse location attributes
  199. var mouseEvent = (event.originalEvent && event.originalEvent.changedTouches && event.originalEvent.changedTouches[0]) || event.originalEvent;
  200. if(mouseEvent && !mouseEvent.type) mouseEvent.type = event.type;
  201. if(skipShowDescriptions) eventInfo.skipShowDescriptions = true;
  202. // Always update mouse location if possible
  203. $ax.event.updateMouseLocation(mouseEvent);
  204. }
  205. // Always set event info about cursor
  206. var _cursor = eventInfo.cursor = {};
  207. _cursor.x = $ax.mouseLocation.x;
  208. _cursor.y = $ax.mouseLocation.y;
  209. eventInfo.pageX = _cursor.x + 'px';
  210. eventInfo.pageY = _cursor.y + 'px';
  211. // Do Keyboard Info
  212. eventInfo.keyInfo = $ax.event.keyState();
  213. eventInfo.window = _getWindowInfo();
  214. eventInfo.thiswidget = _getWidgetInfo(eventInfo.srcElement);
  215. eventInfo.item = _getItemInfo(eventInfo.srcElement);
  216. eventInfo.dragInfo = $ax.drag.GetWidgetDragInfo();
  217. return eventInfo;
  218. };
  219. $ax.getEventInfoFromEvent = _getEventInfoFromEvent;
  220. var _getWindowInfo = function() {
  221. var win = {};
  222. win.width = $(window).width();
  223. win.height = $(window).height();
  224. win.scrollx = $(window).scrollLeft();
  225. win.scrolly = $(window).scrollTop();
  226. return win;
  227. };
  228. $ax.getWindowInfo = _getWindowInfo;
  229. var _getItemInfo = function(elementId) {
  230. if(!elementId) return { valid: false };
  231. elementId = _getParentElement(elementId);
  232. var index = $ax.repeater.getItemIdFromElementId(elementId);
  233. if(!index) return { valid: false };
  234. var item = { valid: true };
  235. var scriptId = $ax.repeater.getScriptIdFromElementId(elementId);
  236. var repeaterId = $ax.getParentRepeaterFromScriptId(scriptId);
  237. item.repeater = _getWidgetInfo(repeaterId);
  238. $ax.repeater.setDisplayProps(item, repeaterId, index);
  239. item.ismarked = $ax.repeater.isEditItem(repeaterId, index);
  240. item.isvisible = Boolean($jobj(elementId).length);
  241. return item;
  242. };
  243. $ax.getItemInfo = _getItemInfo;
  244. var _getWidgetInfo = function(elementId) {
  245. if(!elementId) return { valid: false };
  246. elementId = _getParentElement(elementId);
  247. var elementQuery = $jobj(elementId);
  248. var obj = $obj(elementId);
  249. var widget = { valid: true, isWidget: true };
  250. widget.elementId = elementId;
  251. widget.name = widget.label = (elementQuery.data('label') ? elementQuery.data('label') : '');
  252. widget.text = $ax('#' + elementId).text();
  253. var scriptId = $ax.repeater.getScriptIdFromElementId(elementId);
  254. var repeaterId = $ax.getParentRepeaterFromScriptId(scriptId);
  255. if(repeaterId) widget.repeater = obj.type == 'repeater' ? widget : _getWidgetInfo(repeaterId);
  256. var x = elementQuery.css('left');
  257. if(x !== undefined) x = Number(x.replace('px', ''));
  258. var y = elementQuery.css('top');
  259. if(y !== undefined) y = Number(y.replace('px', ''));
  260. if(elementQuery.length != 0) {
  261. widget.pagex = $ax.legacy.getAbsoluteLeft(elementQuery);
  262. widget.pagey = $ax.legacy.getAbsoluteTop(elementQuery);
  263. }
  264. widget.x = x;
  265. widget.y = y;
  266. widget.width = elementQuery.width();
  267. widget.height = elementQuery.height();
  268. // Right now only dynamic panel can scroll
  269. if(obj.type == 'dynamicPanel') {
  270. var stateQuery = $('#' + $ax.visibility.GetPanelState(elementId));
  271. widget.scrollx = stateQuery.scrollLeft();
  272. widget.scrolly = stateQuery.scrollTop();
  273. if($ax.dynamicPanelManager.isIdFitToContent(elementId)) {
  274. widget.width = stateQuery.width();
  275. widget.height = stateQuery.height();
  276. }
  277. } else {
  278. widget.scrollx = 0;
  279. widget.scrolly = 0;
  280. }
  281. // repeater only props
  282. if(obj.type == 'repeater') {
  283. widget.visibleitemcount = repeaterIdToItemIds[scriptId] ? repeaterIdToItemIds[scriptId].length : $ax.repeater.getVisibleDataCount(scriptId);
  284. widget.itemcount = $ax.repeater.getFilteredDataCount(scriptId);
  285. widget.datacount = $ax.repeater.getDataCount(scriptId);
  286. widget.pagecount = $ax.repeater.getPageCount(scriptId);
  287. widget.pageindex = $ax.repeater.getPageIndex(scriptId);
  288. }
  289. widget.left = widget.x;
  290. widget.top = widget.y;
  291. widget.right = widget.x + widget.width;
  292. widget.bottom = widget.y + widget.height;
  293. return widget;
  294. };
  295. $ax.getWidgetInfo = _getWidgetInfo;
  296. var _getParentElement = $ax.getParentElement = function(elementId) {
  297. var obj = $obj(elementId);
  298. while(obj.isContained) {
  299. var path = $ax.getPathFromScriptId($ax.repeater.getScriptIdFromElementId(elementId));
  300. var itemId = $ax.repeater.getItemIdFromElementId(elementId);
  301. path[path.length - 1] = obj.parent.id;
  302. elementId = $ax.getElementIdFromPath(path, { itemNum: itemId });
  303. obj = $obj(elementId);
  304. }
  305. return elementId;
  306. };
  307. $ax.addItemIdToRepeater = function(itemId, repeaterId) {
  308. var itemIds = repeaterIdToItemIds[repeaterId];
  309. if(itemIds) itemIds[itemIds.length] = itemId;
  310. else repeaterIdToItemIds[repeaterId] = [itemId];
  311. var scriptIds = repeaterIdToScriptIds[repeaterId];
  312. for(var i = 0; i < scriptIds.length; i++) elementIdToObject[$ax.repeater.createElementId(scriptIds[i], itemId)] = $ax.getObjectFromScriptId(scriptIds[i]);
  313. };
  314. $ax.getAllElementIds = function() {
  315. var elementIds = [];
  316. for(var i = 0; i < _scriptIds.length; i++) {
  317. var scriptId = _scriptIds[i];
  318. var repeaterId = scriptIdToRepeaterId[scriptId];
  319. if(repeaterId && repeaterId != scriptId) {
  320. var itemIds = repeaterIdToItemIds[repeaterId] || [];
  321. for(var j = 0; j < itemIds.length; j++) elementIds[elementIds.length] = $ax.repeater.createElementId(scriptId, itemIds[j]);
  322. } else elementIds[elementIds.length] = scriptId;
  323. }
  324. return elementIds;
  325. };
  326. $ax.getAllScriptIds = function() {
  327. return _scriptIds;
  328. };
  329. $ax.getObjectFromElementId = function(elementId) {
  330. return $ax.getObjectFromScriptId($ax.repeater.getScriptIdFromElementId(elementId));
  331. };
  332. $ax.getObjectFromScriptId = function(scriptId) {
  333. return scriptIdToObject[scriptId];
  334. };
  335. $ax.getParentRepeaterFromScriptId = function(scriptId) {
  336. return scriptIdToRepeaterId[scriptId];
  337. };
  338. var _getChildScriptIdsForRepeater = function(repeaterId) {
  339. return repeaterIdToScriptIds[repeaterId];
  340. };
  341. var _getItemIdsForRepeater = function(repeaterId) {
  342. return repeaterIdToItemIds[repeaterId] || [];
  343. };
  344. $ax.getItemIdsForRepeater = _getItemIdsForRepeater;
  345. var _clearItemIdsForRepeater = function(repeaterId) {
  346. repeaterIdToItemIds[repeaterId] = [];
  347. };
  348. $ax.clearItemsForRepeater = _clearItemIdsForRepeater;
  349. $ax.getChildElementIdsForRepeater = function(repeaterId) {
  350. var scriptIds = _getChildScriptIdsForRepeater(repeaterId);
  351. var itemIds = _getItemIdsForRepeater(repeaterId);
  352. var retVal = [];
  353. if(!itemIds || !scriptIds) return retVal;
  354. for(var i = 0; i < scriptIds.length; i++) {
  355. for(var j = 0; j < itemIds.length; j++) {
  356. retVal[retVal.length] = $ax.repeater.createElementId(scriptIds[i], itemIds[j]);
  357. }
  358. }
  359. return retVal;
  360. };
  361. $ax.getRdoParentFromElementId = function(elementId) {
  362. var scriptId = $ax.repeater.getScriptIdFromElementId(elementId);
  363. var rdoId = scriptIdToPath[scriptId].parent.scriptId;
  364. if($ax.getParentRepeaterFromScriptId(rdoId)) rdoId = $ax.repeater.createElementId(rdoId, $ax.repeater.getItemIdFromElementId(elementId));
  365. return rdoId;
  366. };
  367. $ax.updateElementText = function(elementId, text) {
  368. elementIdToText[elementId] = text;
  369. };
  370. $ax.hasElementTextChanged = function(elementId, text) {
  371. return elementIdToText[elementId] != text;
  372. };
  373. $ax.updateRadioButtonSelected = function(group, elementId) {
  374. var old = radioGroupToSelectedElementId[group];
  375. radioGroupToSelectedElementId[group] = elementId;
  376. return old;
  377. };
  378. $ax.hasRadioButtonSelectedChanged = function(group, elementId) {
  379. return radioGroupToSelectedElementId[group] != elementId;
  380. };
  381. })();
  382. //Recursively populates fullPathArray with:
  383. // [ { idPath, scriptId }, ... ]
  384. //for every scriptId in the object
  385. //also populates an object of scriptId -> path
  386. var _pathToScriptIdHelper = function(currentPath, currentChain, fullPathArray, scriptIdToPath) {
  387. for(var key in currentPath) {
  388. if(key != "scriptId") {
  389. var nextPath = currentPath[key];
  390. _pathToScriptIdHelper(nextPath, currentChain.concat(key), fullPathArray, scriptIdToPath);
  391. nextPath.parent = currentPath;
  392. nextPath.uniqueId = key;
  393. } else {
  394. fullPathArray[fullPathArray.length] = { idPath: currentChain, scriptId: currentPath.scriptId };
  395. scriptIdToPath[currentPath.scriptId] = currentPath;
  396. }
  397. }
  398. };
  399. $ax.public.loadCurrentPage = $ax.loadCurrentPage = function(pageData) {
  400. $ax.pageData = _pageData = pageData;
  401. _initializePageData();
  402. };
  403. $ax.public.loadDocument = $ax.loadDocument = function(document) {
  404. $ax.document = document;
  405. _initializeDocumentData();
  406. };
  407. /**
  408. Navigates to a page
  409. */
  410. $ax.public.navigate = $ax.navigate = function(to) { //url, includeVariables, type) {
  411. var targetUrl;
  412. if(typeof (to) === 'object') {
  413. includeVariables = to.includeVariables;
  414. targetUrl = !includeVariables ? to.url : $ax.globalVariableProvider.getLinkUrl(to.url);
  415. if(to.target == "new") {
  416. window.open(targetUrl, to.name);
  417. } else if(to.target == "popup") {
  418. var features = _getPopupFeatures(to.popupOptions);
  419. window.open(targetUrl, to.name, features);
  420. } else {
  421. var targetLocation = window.location;
  422. if(to.target == "current") {
  423. } else if(to.target == "parent") {
  424. targetLocation = top.opener.window.location;
  425. } else if(to.target == "parentFrame") {
  426. targetLocation = parent.location;
  427. } else if(to.target == "frame") {
  428. // targetLocation = to.frame.contentWindow.location;
  429. $(to.frame).attr('src', targetUrl || 'about:blank');
  430. return;
  431. }
  432. if(!_needsReload(targetLocation, to.url)) {
  433. targetLocation.href = targetUrl || 'about:blank';
  434. } else {
  435. targetLocation.href = $axure.utils.getReloadPath() + "#" + encodeURI(targetUrl);
  436. }
  437. }
  438. } else {
  439. $ax.navigate({
  440. url: to,
  441. target: "current",
  442. includeVariables: arguments[1]
  443. });
  444. }
  445. };
  446. var _needsReload = function(oldLocation, newBaseUrl) {
  447. var reload = false;
  448. try {
  449. var oldUrl = oldLocation.href;
  450. var oldBaseUrl = oldUrl.split("#")[0];
  451. var lastslash = oldBaseUrl.lastIndexOf("/");
  452. if(lastslash > 0) {
  453. oldBaseUrl = oldBaseUrl.substring(lastslash + 1, oldBaseUrl.length);
  454. if(oldBaseUrl == encodeURI(newBaseUrl)) {
  455. reload = true;
  456. }
  457. }
  458. } catch(e) {
  459. }
  460. return reload;
  461. };
  462. var _getPopupFeatures = function(options) {
  463. var defaultOptions = {
  464. toolbar: true,
  465. scrollbars: true,
  466. location: true,
  467. status: true,
  468. menubar: true,
  469. directories: true,
  470. resizable: true,
  471. centerwindow: true,
  472. left: -1,
  473. top: -1,
  474. height: -1,
  475. width: -1
  476. };
  477. var selectedOptions = $.extend({}, defaultOptions, options);
  478. var optionsList = [];
  479. optionsList.push('toolbar=' + (selectedOptions.toolbar ? 'yes' : 'no'));
  480. optionsList.push('scrollbars=' + (selectedOptions.scrollbars ? 'yes' : 'no'));
  481. optionsList.push('location=' + (selectedOptions.location ? 'yes' : 'no'));
  482. optionsList.push('status=' + (selectedOptions.status ? 'yes' : 'no'));
  483. optionsList.push('menubar=' + (selectedOptions.menubar ? 'yes' : 'no'));
  484. optionsList.push('directories=' + (selectedOptions.directories ? 'yes' : 'no'));
  485. optionsList.push('resizable=' + (selectedOptions.resizable ? 'yes' : 'no'));
  486. if(selectedOptions.centerwindow == false) {
  487. if(selectedOptions.left > -1) {
  488. optionsList.push('left=' + selectedOptions.left);
  489. }
  490. if(selectedOptions.top > -1) {
  491. optionsList.push('top=' + selectedOptions.top);
  492. }
  493. }
  494. var height = 0;
  495. var width = 0;
  496. if(selectedOptions.height > 0) {
  497. optionsList.push('height=' + selectedOptions.height);
  498. height = selectedOptions.height;
  499. }
  500. if(selectedOptions.width > 0) {
  501. optionsList.push('width=' + selectedOptions.width);
  502. width = selectedOptions.width;
  503. }
  504. var features = optionsList.join(',');
  505. if(selectedOptions.centerwindow) {
  506. var winl = (window.screen.width - width) / 2;
  507. var wint = (window.screen.height - height) / 2;
  508. features = features + ',left=' + winl + ',top=' + wint;
  509. }
  510. return features;
  511. };
  512. /**
  513. Closes a window
  514. */
  515. $ax.public.closeWindow = $ax.closeWindow = function() {
  516. parent.window.close();
  517. };
  518. /**
  519. Goes back
  520. */
  521. $ax.public.back = $ax.back = function() {
  522. window.history.go(-1);
  523. };
  524. /**
  525. Reloads the current page.
  526. # includeVariables: true if it should re-include the variables when the page is reloaded
  527. */
  528. $ax.public.reload = $ax.reload = function(includeVariables) {
  529. var targetUrl = (includeVariables === false)
  530. ? $axure.utils.getReloadPath() + "#" + encodeURI($ax.pageData.url)
  531. : $axure.utils.getReloadPath() + "#" + encodeURI($ax.globalVariableProvider.getLinkUrl($ax.pageData.url));
  532. window.location.href = targetUrl;
  533. };
  534. /**
  535. Sets a variable.
  536. # name: The name of the global variable to set
  537. # value: The value that should be set
  538. */
  539. $ax.public.setGlobalVariable = $ax.setGlobalVariable = function(name, value) {
  540. if(!name || !value) {
  541. return;
  542. }
  543. $ax.globalVariableProvider.setVariableValue(name, value);
  544. };
  545. /**
  546. Gets the value of a global variable
  547. # name: The name of the global variable value to get
  548. */
  549. $ax.public.getGlobalVariable = $ax.getGlobalVariable = function(name) {
  550. $ax.globalVariableProvider.getVariableValue(name);
  551. };
  552. $ax.getTypeFromElementId = function(elementId) {
  553. var elementIdInput = elementId.charAt(0) == '#' ? elementId.substring(1) : elementId;
  554. var obj = this.getObjectFromElementId(elementIdInput);
  555. return obj && obj.type;
  556. };
  557. });