/// /// /// /// /// Umbraco.Sys.registerNamespace("Umbraco.Application"); (function($) { Umbraco.Application.ClientManager = function() { /// /// A class which ensures that all calls made to the objects that it owns are done in the context /// of the main Umbraco application window. /// return { _isDirty: false, _isDebug: false, _mainTree: null, _appActions: null, _historyMgr: null, _rootPath: "/umbraco", //this is the default _modal: new Array(), //track all modal window objects (they get stacked) historyManager: function() { if (!this._historyMgr) { this._historyMgr = new Umbraco.Controls.HistoryManager(); } return this._historyMgr; }, setUmbracoPath: function(strPath) { /// /// sets the Umbraco root path folder /// this._debug("setUmbracoPath: " + strPath); this._rootPath = strPath; }, mainWindow: function() { /// /// Returns a reference to the main frame of the application /// return top; }, mainTree: function() { /// /// Returns a reference to the main UmbracoTree API object. /// Sometimes an Umbraco page will need to be opened without being contained in the iFrame from the main window /// so this method is will construct a false tree to be returned if this is the case as to avoid errors. /// /// if (this._mainTree == null) { if (this.mainWindow().jQuery == null || this.mainWindow().jQuery(".umbTree").length == 0 || this.mainWindow().jQuery(".umbTree").UmbracoTreeAPI() == null) { //creates a false tree with all the public tree params set to a false method. var tmpTree = {}; var treeProps = ["init", "setRecycleBinNodeId", "clearTreeCache", "toggleEditMode", "refreshTree", "rebuildTree", "saveTreeState", "syncTree", "childNodeCreated", "moveNode", "copyNode", "findNode", "selectNode", "reloadActionNode", "getActionNode", "setActiveTreeType", "getNodeDef"]; for (var p in treeProps) { tmpTree[treeProps[p]] = function() { return false; }; } this._mainTree = tmpTree; } else { this._mainTree = this.mainWindow().jQuery(".umbTree").UmbracoTreeAPI(); } } return this._mainTree; }, appActions: function() { /// /// Returns a reference to the application actions object /// //if the main window has no actions, we'll create some if (this._appActions == null) { if (typeof this.mainWindow().appActions == 'undefined') { this._appActions = new Umbraco.Application.Actions(); } else this._appActions = this.mainWindow().appActions; } return this._appActions; }, uiKeys: function() { /// /// Returns a reference to the main windows uiKeys object for globalization /// //TODO: If there is no main window, we need to go retrieve the appActions from the server! return this.mainWindow().uiKeys; }, // windowMgr: function() // return null; // }, contentFrame: function(strLocation) { /// /// This will return the reference to the right content frame if strLocation is null or empty, /// or set the right content frames location to the one specified by strLocation. /// this._debug("contentFrame: " + strLocation); if (strLocation == null || strLocation == "") { if (typeof this.mainWindow().right != "undefined") { return this.mainWindow().right; } else { return this.mainWindow(); //return the current window if the content frame doesn't exist in the current context } } else { //if the path doesn't start with "/" or with the root path then //prepend the root path if (strLocation.substr(0, 1) != "/") { strLocation = this._rootPath + "/" + strLocation; } else if (strLocation.length >= this._rootPath.length && strLocation.substr(0, this._rootPath.length) != this._rootPath) { strLocation = this._rootPath + "/" + strLocation; } this._debug("contentFrame: parsed location: " + strLocation); if (typeof this.mainWindow().right != "undefined") { this.mainWindow().right.location.href = strLocation; } else { this.mainWindow().location.href = strLocation; //set the current windows location if the right frame doesn't exist int he current context } } }, openModalWindow: function(url, name, showHeader, width, height, top, leftOffset, closeTriggers, onCloseCallback) { //need to create the modal on the top window if the top window has a client manager, if not, create it on the current window //if this is the top window, or if the top window doesn't have a client manager, create the modal in this manager if (window == this.mainWindow() || !this.mainWindow().UmbClientMgr) { var m = new Umbraco.Controls.ModalWindow(); this._modal.push(m); m.open(url, name, showHeader, width, height, top, leftOffset, closeTriggers, onCloseCallback); } else { //if the main window has a client manager, then call the main window's open modal method whilst keeping the context of it's manager. if (this.mainWindow().UmbClientMgr) { this.mainWindow().UmbClientMgr.openModalWindow.apply(this.mainWindow().UmbClientMgr, [url, name, showHeader, width, height, top, leftOffset, closeTriggers, onCloseCallback]); } else { return; //exit recurse. } } }, closeModalWindow: function(rVal) { /// /// will close the latest open modal window. /// if an rVal is passed in, then this will be sent to the onCloseCallback method if it was specified. /// if (this._modal != null && this._modal.length > 0) { this._modal.pop().close(rVal); } else { //this will recursively try to close a modal window until the parent window has a modal object or the window is the top and has the modal object var mgr = null; if (window.parent == null || window.parent == window) { //we are at the root window, check if we can close the modal window from here if (window.UmbClientMgr != null && window.UmbClientMgr._modal != null && window.UmbClientMgr._modal.length > 0) { mgr = window.UmbClientMgr; } else { return; //exit recursion. } } else if (typeof window.parent.UmbClientMgr != "undefined") { mgr = window.parent.UmbClientMgr; } mgr.closeModalWindow.call(mgr, rVal); } }, _debug: function(strMsg) { if (this._isDebug) { Sys.Debug.trace("UmbClientMgr: " + strMsg); } }, get_isDirty: function() { return this._isDirty; }, set_isDirty: function(value) { this._isDirty = value; } } } })(jQuery); //define alias for use throughout application var UmbClientMgr = new Umbraco.Application.ClientManager();