Commit 5b6efd3d authored by Pedro Eduardo Trujillo's avatar Pedro Eduardo Trujillo
Browse files

Mejora detección de routing, arregla userArea

Refactoriza y amplía funcionalidad de router, para gestionar la
navegación dentro de la app. Los enlaces internos presentes en el
tooltip del área de usuario no respondían al usar la app desde un
dispositivo móvil, por lo que se ha ampliado la detección de rutas
internas para contemplar mejor todos los casos de uso.
parent 2b1b49af
Loading
Loading
Loading
Loading
+85 −39
Original line number Diff line number Diff line
@@ -138,9 +138,7 @@ define([

			new CookieLoader();

			var eventListener = getGlobalContext().addEventListener ? ['addEventListener', ''] : ['attachEvent', 'on'];

			this._routerRegister(eventListener);
			this._setRouterListeners();

			this._getEnv();
		},
@@ -219,53 +217,92 @@ define([
			this.inherited(arguments);
		},

		_routerRegister: function(eventInfo) {
		_setRouterListeners: function() {
			//	summary:
			//		Se ejecuta al inicio de la aplicación para añadir un evento a cada
			//		href del dom para cambiar de módulo cuando se ejecuta
			//		Prepara la escucha en toda la aplicación de los eventos requeridos para controlar la navegación en
			//		una sola página
			//	tags:
			//		private
			//	eventInfo:
			//		Información del evento (addEventListener | attachEvent:on)

			var globalContext = getGlobalContext(),
				location = globalContext.history.location || globalContext.location;
			var gCtx = getGlobalContext(),
				dCtx = gCtx.document,
				listenMethod, eventPrefix;

			if (gCtx.addEventListener) {
				listenMethod = dCtx.addEventListener;
				eventPrefix = '';
			} else {
				listenMethod = dCtx.attachEvent;
				eventPrefix = 'on';
			}

			listenMethod.call(dCtx, eventPrefix + 'click', lang.hitch(this, this._evaluateClickEvt));
			listenMethod.call(gCtx, eventPrefix + 'popstate', lang.hitch(this, this._evaluatePopStateEvt));
		},

		_evaluateClickEvt: function(evt) {
			//	summary:
			//		Recibe eventos de click y, en caso de detectar un enlace de navegación interno, lo captura
			//	tags:
			//		private

			// hang on the event, all references in this document
			document[eventInfo[0]](eventInfo[1] + 'click', lang.hitch(this, function(evt) {
			var event = evt || getGlobalContext().event,
				targets = this._getClickTargets(event);

				var event = evt || globalContext.event,
					target = event.currentTarget.activeElement || event.srcElement;
			for (var i = 0; i < targets.length; i++) {
				var target = targets[i],
					targetIsNotAppHref = !target || target.nodeName !== 'A' || !domAttr.get(target, 'd-state-url');

				if (targetIsNotAppHref) {
					continue;
				}

				this._handleAppHref(event, target);
				break;
			}
		},

		_getClickTargets: function(event) {

			var targetPath = event.path || (event.composedPath && event.composedPath()) || [],
				targets = [
					event.currentTarget.activeElement
				];

			if (!targetPath.length) {
				var eventTarget = event.target || event.srcElement,
					eventTargetParent = eventTarget.parentElement;

				targetPath.push(eventTarget, eventTargetParent);
			}

			return targets.concat(targetPath);
		},

		_handleAppHref: function(event, target) {

				// looking for all the links with 'ajax' class found
				if (target && target.nodeName === 'A' && domAttr.get(target, 'd-state-url')) {
			var url = target.pathname + target.search;

			if (mouse.isMiddle(event)) {
						globalContext.open(globalContext.location.protocol + '//' + globalContext.location.hostname +
							url, '_blank');
				var gCtx = getGlobalContext(),
					newPageUrl = gCtx.location.protocol + '//' + gCtx.location.hostname + url;

				gCtx.open(newPageUrl, '_blank');
			} else {
						// keep the link in the browser history
				this._addHistory(url);
				this._onRouteChange();
			}

			if (event.preventDefault) {
				event.preventDefault();
			} else {
				event.returnValue = false;
			}
				}
			}), false);

			// hang on popstate event triggered by pressing back/forward in browser
			globalContext[eventInfo[0]](eventInfo[1] + 'popstate', lang.hitch(this, function(evt) {

				this._onRouteChange();
			}), false);
		},

		_addHistory: function(value) {

			history.pushState(null, null, value);
			getGlobalContext().history.pushState(null, null, value);

			/*this._emitEvt('ADD_NAV_HISTORY', {
				url: value
@@ -290,6 +327,15 @@ define([
			this._changeModule(route, query);
		},

		_evaluatePopStateEvt: function(evt) {
			//	summary:
			//		Recibe eventos de popstate para navegar por la aplicación usando los botones de retroceder/avanzar
			//	tags:
			//		private

			this._onRouteChange();
		},

		_getEnv: function() {

			var envDfd = getGlobalContext().env;
Compare 20219606 to 64717c38
Original line number Diff line number Diff line
Subproject commit 202196065e5e18fcd726243084c5ec9153666aa0
Subproject commit 64717c3872fa14536e2020e249eb960bf860a7ed