diff --git a/core/src/plugins/gui.ajax/res/js/es6/model/Action.es6 b/core/src/plugins/gui.ajax/res/js/es6/model/Action.es6 index 1841c880e8..d086bc5a4b 100644 --- a/core/src/plugins/gui.ajax/res/js/es6/model/Action.es6 +++ b/core/src/plugins/gui.ajax/res/js/es6/model/Action.es6 @@ -165,7 +165,7 @@ class Action extends Observable{ }catch(e){ Logger.error(e); } - }else if(this.options.callbackDialogNode){ + }else if(this.options.callbackDialogNode && this.options.callbackDialogNode.getAttribute("dialogOpenForm")){ var node = this.options.callbackDialogNode; var dialogFormId = node.getAttribute("dialogOpenForm"); var okButtonOnly = (node.getAttribute("dialogOkButtonOnly") === "true") ; @@ -193,7 +193,10 @@ class Action extends Observable{ }.bind(this); this.options.callback(); this.options.callbackDialogNode = null; - }else if(this.options.callback){ + }else if(this.options.callbackDialogNode && this.options.callbackDialogNode.getAttribute("components")){ + var components = XMLUtils.XPathSelectNodes(this.options.callbackDialogNode, "component"); + this.manager.uiMountComponents(components); + }else if(this.options.callback){ this.options.callback(); } if(this.options.subMenu && arguments[0] && arguments[0][0]){ @@ -418,7 +421,7 @@ class Action extends Observable{ if(processNode.getAttribute('prepareModal') && processNode.getAttribute('prepareModal') == "true"){ this.options.prepareModal = true; } - if(processNode.getAttribute('dialogOpenForm')){ + if(processNode.getAttribute('dialogOpenForm') || processNode.getAttribute("components")){ this.options.callbackDialogNode = processNode; }else if(processNode.firstChild){ this.options.callbackCode = processNode.firstChild.nodeValue.trim(); diff --git a/core/src/plugins/gui.ajax/res/js/es6/model/Controller.es6 b/core/src/plugins/gui.ajax/res/js/es6/model/Controller.es6 index 2c9dd5c350..8a31c2c048 100644 --- a/core/src/plugins/gui.ajax/res/js/es6/model/Controller.es6 +++ b/core/src/plugins/gui.ajax/res/js/es6/model/Controller.es6 @@ -161,6 +161,12 @@ class Controller extends Observable{ return null; } + uiMountComponents(componentsNodes){ + if(this._pydioObject && this._pydioObject.UI){ + return this._pydioObject.UI.mountComponents(componentsNodes); + } + } + /** * COMPATIBILITY METHD * @param xmlDoc diff --git a/core/src/plugins/gui.ajax/res/js/ui/prototype/class.PydioUI.js b/core/src/plugins/gui.ajax/res/js/ui/prototype/class.PydioUI.js index 19a04c25a0..0de70a6f20 100644 --- a/core/src/plugins/gui.ajax/res/js/ui/prototype/class.PydioUI.js +++ b/core/src/plugins/gui.ajax/res/js/ui/prototype/class.PydioUI.js @@ -111,6 +111,38 @@ Class.create("PydioUI", { if(existing) existing.remove(); }, + mountComponents: function(componentsNodes){ + $A(componentsNodes).each(function(node){ + if(node.getAttribute('type') == 'react' && React){ + var namespace = node.getAttribute('namespace'); + var compName= node.getAttribute('name'); + var hookElement = $(node.getAttribute('element')); + var unMountFunc = null; + if(!hookElement){ + hookElement = new Element('div', {id:node.getAttribute('element')}); + $(document.body).insert(hookElement); + // TODO: ADD THIS AS A MIXIN? + unMountFunc = function(){hookElement.remove();}; + } + if(namespace){ + ResourcesManager.loadClassesAndApply([namespace], function(){ + React.render( + React.createElement(window[namespace][compName], {}), + hookElement + ) + }); + }else{ + ResourcesManager.loadClassesAndApply([compName], function(){ + React.render( + React.createElement(window[compName], {}), + hookElement + ) + }); + } + } + }); + }, + /** * Initialize GUI Objects */ @@ -400,13 +432,13 @@ Class.create("PydioUI", { if(Class.objectImplements(obj, "IFocusable")){ obj.setFocusBehaviour(); - this._pydio.registerFocusable(obj); + this.registerFocusable(obj); } if(Class.objectImplements(obj, "IContextMenuable")){ obj.setContextualMenu(this.contextMenu); } if(Class.objectImplements(obj, "IActionProvider")){ - this._pydio.Controller.updateGuiActions(obj.getActions()); + this._pydio.Controller.updateGuiActions(ProtoCompat.hash2map(obj.getActions())); } if($(ajxpId).up('[ajxpClass]') && $(ajxpId).up('[ajxpClass]').ajxpPaneObject && $(ajxpId).up('[ajxpClass]').ajxpPaneObject.scanChildrenPanes){