123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- 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 = $('<div id=' + settings.id + '></div>')
- .appendTo('#interfaceControlFrameHostContainer');
- host.hide();
- var headerLink = $('<a pluginId="' + settings.id + '" >' + settings.title.toUpperCase() + '</a>');
- headerLink
- .click($axure.utils.curry(interfaceControlHeaderButton_click, settings.id)).wrap('<li id="' + settings.id + 'Btn">');
- if((settings.id == 'feedbackHost' || settings.id == 'feedbackContainer') && pluginIds[pluginIds.length - 1] == 'debugHost') headerLink.parent().insertBefore('#debugHostBtn');
- else headerLink.parent().appendTo('#interfaceControlFrameHeader');
-
- pluginIds[pluginIds.length] = settings.id;
- plugins[settings.id] = settings;
- $(document).trigger('pluginCreated', [settings.gid]);
- };
- // private methods
- var interfaceControlHeaderButton_click = function (id) {
- var clickedPlugin = $('#interfaceControlFrameHeader a[pluginId=' + id + ']');
- if(clickedPlugin.hasClass('selected')) {
- clickedPlugin.removeClass('selected');
- $('#' + id).hide();
- _player.collapseToBar();
- $(document).trigger('pluginShown',['']);
- } else {
- $('#interfaceControlFrameHeader a').removeClass('selected');
- clickedPlugin.addClass('selected');
- $('#' + currentVisibleHostId).hide();
- $('#' + id).show();
- currentVisibleHostId = id;
- _player.expandFromBar();
- $(document).trigger('pluginShown', [plugins[id].gid]);
- }
- $(document).trigger('ContainerHeightChange');
- };
- $axure.player.showPlugin = function(gid) {
- for(var id in plugins) {
- if(plugins[id].gid == gid) {
- $('a[pluginId="' + id + '"]').click();
- break;
- }
- }
- };
- }
- function setUpDocumentStateManager() {
- var mgr = $axure.prototype.documentStateManager = {};
- $axure.utils.makeBindable(mgr, ['globalVariableChanged']);
- mgr.globalVariableValues = {};
- mgr.setGlobalVariable = function(varname, value, source) {
- var arg = {};
- arg.variableName = varname;
- arg.newValue = value;
- arg.oldValue = this.getGlobalVariable(varname);
- arg.source = source;
- mgr.globalVariableValues[varname] = value;
- this.triggerEvent('globalVariableChanged', arg);
- };
- mgr.getGlobalVariable = function(varname) {
- return mgr.globalVariableValues[varname];
- };
- }
- function setUpPageStateManager() {
- var mgr = $axure.prototype.pageStateManager = {};
- mgr.panelToStateIds = {};
- }
|