Skip to content
This repository has been archived by the owner on Nov 25, 2020. It is now read-only.

Commit

Permalink
es6: simple support for web components
Browse files Browse the repository at this point in the history
  • Loading branch information
cdujeu committed Jun 2, 2015
1 parent cdec0ac commit 032e965
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 5 deletions.
9 changes: 6 additions & 3 deletions core/src/plugins/gui.ajax/res/js/es6/model/Action.es6
Expand Up @@ -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") ;
Expand Down Expand Up @@ -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]){
Expand Down Expand Up @@ -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();
Expand Down
6 changes: 6 additions & 0 deletions core/src/plugins/gui.ajax/res/js/es6/model/Controller.es6
Expand Up @@ -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
Expand Down
36 changes: 34 additions & 2 deletions core/src/plugins/gui.ajax/res/js/ui/prototype/class.PydioUI.js
Expand Up @@ -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
*/
Expand Down Expand Up @@ -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){
Expand Down

0 comments on commit 032e965

Please sign in to comment.