Commit 6c369795 authored by Pedro Eduardo Trujillo's avatar Pedro Eduardo Trujillo
Browse files

Corrige y amplia GenericDisplayer e implementación

Recoge parámetros extra relativos a _Show para mostrar los contenidos.
Esto permite aplicar animaciones, entre otras features de _Show.

Permite personalizar las clases de contenedor general y contenedor de
contenido principal, añadiendo valores al construir.

En la implementación con topbar, corrige el uso de la misma referencia
para contenido principal y contenido de topbar. Esto provocaba que, al
añadir nuevo contenido principal, se borrase el contenido existente en
topbar por error.

Implementa canal REMOVE_TOPBAR_CONTENT, para quitar contenidos de la
barra superior en lugar de ocultar nodos. Cambia el indexado de
contenedores padre de estos contenidos, para poder recuperarlos luego de
manera eficiente sin recorrerlos todos.

Implementa la adición de contenido de topbar antes del título del mismo,
junto con la posibilidad de personalizar las clases del contenedor en
que se añadirá el contenido publicado.
parent 11579975
Loading
Loading
Loading
Loading
+28 −11
Original line number Diff line number Diff line
@@ -25,11 +25,14 @@ define([
				},
				actions: {
					'ADD_CONTENT': 'addContent',
					'ADD_TOPBAR_CONTENT': 'addTopbarContent'
					'ADD_TOPBAR_CONTENT': 'addTopbarContent',
					'REMOVE_TOPBAR_CONTENT': 'removeTopbarContent'
				},

				layoutClass: 'genericDisplayer',
				contentClass: 'centerZone'
				contentClass: 'centerZone',
				additionalLayoutClasses: null,
				additionalContentClasses: null,
			};

			lang.mixin(this, this.config, args);
@@ -45,11 +48,21 @@ define([

		postCreate: function() {

			var ownNode = this._getNodeToShow();
			var ownNode = this._getNodeToShow(),
				layoutClasses = this.layoutClass,
				contentClasses = this.contentClass;

			put(ownNode, '.' + this.layoutClass);
			if (this.additionalLayoutClasses) {
				layoutClasses += '.' + this.additionalLayoutClasses;
			}

			put(ownNode, '.' + layoutClasses);

			if (this.additionalContentClasses) {
				contentClasses += '.' + this.additionalContentClasses;
			}

			this._contentNode = put(ownNode, 'div.' + this.contentClass);
			this._contentNode = put(ownNode, 'div.' + contentClasses);

			if (this.content) {
				this._addGenericContent(this.content);
@@ -70,27 +83,31 @@ define([
				return;
			}

			this._addGenericContent(content);
			this._addGenericContent(content, req);
		},

		_addGenericContent: function(content) {
		_addGenericContent: function(content, req) {

			if (content.getChannel) {
				this._addModuleContent(content);
				this._addModuleContent(content, req || {});
			} else {
				this._addNodeContent(content);
			}
		},

		_addModuleContent: function(contentModule) {
		_addModuleContent: function(contentModule, req) {

			this._removeOldContent();

			this._oldContentModule = contentModule;

			this._publish(contentModule.getChannel('SHOW'), {
			var showProps = req.showProps || {};

			var showRequestObj = this._merge([showProps, {
				node: this._contentNode
			});
			}]);

			this._publish(contentModule.getChannel('SHOW'), showRequestObj);
		},

		_addNodeContent: function(contentNode) {
+86 −15
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ define([

				title: 'contentWithTopbar',

				_topbarContentNodes: []
				_topbarContentNodes: {}
			};

			lang.mixin(this, this.config, args);
@@ -38,6 +38,9 @@ define([
			this.subscriptionsConfig.push({
				channel : this.getChannel('ADD_TOPBAR_CONTENT'),
				callback: '_subAddTopbarContent'
			},{
				channel : this.getChannel('REMOVE_TOPBAR_CONTENT'),
				callback: '_subRemoveTopbarContent'
			});
		},

@@ -51,23 +54,46 @@ define([
			this.inherited(arguments);
		},

		_onTitlePropSet: function(propEvt) {

			this._addTitle(propEvt.value);
		},

		_addTitle: function(title) {

			if (this._titleContentNode) {
				put('!', this._titleContentNode);
			}

			this._titleContentNode = put(this._titleNode, 'span.' + this.titleContentClass, title);
		},

		_subAddTopbarContent: function(req) {

			var content = req.content;
			var content = req.content,
				prependToTitle = req.prependToTitle || false,
				additionalClasses = req.additionalTopbarContentClasses;

			if (!content) {
				console.error('No topbar content received to show at module "%s"', this.getChannel());
				console.error('No topbar content received to add at module "%s"', this.getChannel());
				return;
			}

			this._addTopbarContent(content);
			this._addTopbarContent(content, prependToTitle, additionalClasses);
		},

		_addTopbarContent: function(content) {
		_addTopbarContent: function(content, prependToTitle, additionalClasses) {

			var topbarContentClasses = this.topbarContentClass;
			if (additionalClasses) {
				topbarContentClasses += '.' + additionalClasses;
			}

			var contentParentNode = put(this._topbarNode, 'div.' + this.topbarContentClass);
			var contentParentNode = put(this._topbarNode, 'div.' + topbarContentClasses);

			this._topbarContentNodes.push(contentParentNode);
			if (prependToTitle) {
				put(this._titleNode, '-', contentParentNode);
			}

			if (content.getChannel) {
				this._addModuleTopbarContent(content, contentParentNode);
@@ -78,7 +104,8 @@ define([

		_addModuleTopbarContent: function(contentModule, contentParentNode) {

			this._oldContentModule = contentModule;
			var moduleChannel = contentModule.getChannel();
			this._topbarContentNodes[moduleChannel] = contentParentNode;

			this._publish(contentModule.getChannel('SHOW'), {
				node: contentParentNode
@@ -87,21 +114,65 @@ define([

		_addNodeTopbarContent: function(contentNode, contentParentNode) {

			this._oldContentNode = put(contentParentNode, contentNode);
			var nodeId = contentNode.id;

			if (!nodeId) {
				console.error('Received a topbar content node to add without ID at module "%s"', this.getChannel());
			} else {
				this._topbarContentNodes[nodeId] = contentParentNode;
			}

			put(contentParentNode, contentNode);
		},

		_onTitlePropSet: function(propEvt) {
		_subRemoveTopbarContent: function(req) {

			this._addTitle(propEvt.value);
			var content = req.content;

			if (!content) {
				console.error('No topbar content received to remove at module "%s"', this.getChannel());
				return;
			}

			this._removeTopbarContent(content);
		},

		_addTitle: function(title) {
		_removeTopbarContent: function(content) {

			if (content.getChannel) {
				this._removeModuleTopbarContent(content);
			} else {
				this._removeNodeTopbarContent(content);
			}
		},

			if (this._oldTitleContentNode) {
				put('!', this._oldTitleContentNode);
		_removeModuleTopbarContent: function(contentModule) {

			var moduleChannel = contentModule.getChannel(),
				contentParentNode = this._topbarContentNodes[moduleChannel];

			this._publish(contentModule.getChannel('HIDE'));

			this._removeTopbarContentParentNode(contentParentNode, moduleChannel);
		},

		_removeNodeTopbarContent: function(contentNode) {

			var nodeId = contentNode.id,
				contentParentNode = nodeId && this._topbarContentNodes[nodeId];

			this._removeTopbarContentParentNode(contentParentNode, nodeId);
		},

		_removeTopbarContentParentNode: function(contentParentNode, contentId) {

			if (!contentParentNode) {
				console.error('No topbar content node found to remove at module "%s"', this.getChannel());
				return;
			}

			this._oldTitleContentNode = put(this._titleNode, 'span.' + this.titleContentClass, title);
			put('!', contentParentNode);
			delete this._topbarContentNodes[contentId];
		}
	});
});