if (!window.$axure) window.$axure = function () { }; if (typeof console == 'undefined') console = { log: function () { } }; if(window._axUtils) $axure.utils = _axUtils; $axure.loadDocument = function(document) { $axure.document = document; }; function setUpController() { //$axure.utils = _axUtils; var _page = {}; $axure.page = _page; $axure.utils.makeBindable(_page, ['load']); var _player = function() { }; $axure.player = _player; //----------------------------------------- //Global Var array, getLinkUrl function and setGlobalVar listener are //for use in setting global vars in page url string when clicking a //page in the sitemap //----------------------------------------- var _globalVars = {}; //----------------------------------------- //Used by getLinkUrl below to check if local server is running //in order to send back the global variables as a query string //in the page url //----------------------------------------- var _shouldSendVarsToServer = function () { //If exception occurs (due to page in content frame being from a different domain, etc) //then run the check without the url (which will end up checking against sitemap url) try { var mainFrame = document.getElementById("mainFrame"); return $axure.shouldSendVarsToServer(mainFrame.contentWindow.location.href); } catch (e) { return $axure.shouldSendVarsToServer(); } }; var _getLinkUrl = function (baseUrl) { var toAdd = ''; for(var globalVarName in _globalVars) { var val = _globalVars[globalVarName]; if(val != null) { if(toAdd.length > 0) toAdd += '&'; toAdd += globalVarName + '=' + encodeURIComponent(val); } } return toAdd.length > 0 ? baseUrl + (_shouldSendVarsToServer() ? '?' : '#') + toAdd + "&CSUM=1" : baseUrl; }; $axure.getLinkUrlWithVars = _getLinkUrl; $axure.messageCenter.addMessageListener(function(message, data) { if (message == 'setGlobalVar'){ _globalVars[data.globalVarName] = data.globalVarValue; } }); $axure.messageCenter.addStateListener('page.data', function (key, value) { for (var subKey in value) { _page[subKey] = value[subKey]; } $axure.page.triggerEvent('load'); }); // --------------------------------------------- // Navigates the main frame (setting the currently visible page). If the link is relative, // this method should test if it is actually a axure rp page being loaded and properly set // up all the controller for the page if it is // --------------------------------------------- _page.navigate = function (url, includeVariables) { var mainFrame = document.getElementById("mainFrame"); //var mainFrame = window.parent.mainFrame; // if this is a relative url... var urlToLoad; if (url.indexOf(':') < 0 || url[0] == '/') { var winHref = window.location.href; var page = winHref.substring(0, winHref.lastIndexOf('/') + 1) + url; urlToLoad = page; } else { urlToLoad = url; } if (!includeVariables) { mainFrame.contentWindow.location.href = urlToLoad; return; } var urlWithVars = $axure.getLinkUrlWithVars(urlToLoad); var currentData = $axure.messageCenter.getState('page.data'); var currentUrl = currentData && currentData.location; if(currentUrl && currentUrl.indexOf('#') != -1) currentUrl = currentUrl.substring(0, currentUrl.indexOf('#')) // this is so we can make sure the current frame reloads if the variables have changed // by default, if the location is the same but the hash code is different, the browser will not // trigger a reload mainFrame.contentWindow.location.href = currentUrl && urlToLoad.toLowerCase() != currentUrl.toLowerCase() ? urlWithVars : 'resources/reload.html#' + encodeURI(urlWithVars); }; var pluginIds = []; var plugins = {}; var currentVisibleHostId = null; // --------------------------------------------- // Adds a tool box frame from a url to the interface. This is useful for loading plugins // settings is an object that supports the following properties: // - id : the id of the element for the plugin // - context : the context to create the plugin host for // - title : the user-visible caption for the plugin // --------------------------------------------- _player.createPluginHost = function (settings) { // right now we only understand an interface context if (!(!settings.context || settings.context === 'interface')) { throw ('unknown context type'); } if (!settings.id) throw ('each plugin host needs an id'); var host = $('
') .appendTo('#interfaceControlFrameHostContainer'); host.hide(); var headerLink = $('' + settings.title.toUpperCase() + ''); headerLink .click($axure.utils.curry(interfaceControlHeaderButton_click, settings.id)).wrap('