PageSourceSearch

https://www.also.pt/js/hermes/1.2/hermes.js?v=buildNumber

js also.pt collected 2026-10-09 22:41:46 UTC 8,731 bytes, 322 lines download raw bytes

1/**
2 * messsaging class for handling local and ajax messages
3 */
4
5//.ajaxSetup: added Mo, 13.09.2010 MWilbers, JGerke: (adding articles from bonusclub to shoppingcart: in IE8 wrong article-quantity is shown in
6//													   rightpanel-shoppingcart because of IE-specific caching)
7$.ajaxSetup({cache: false });
8 
9function Hermes() {
10
11	//var hs = this;
12	this.listenerMap = new Object();
13	this.username = undefined;
14	this.password = undefined;
15
16	//private method getLoginListener
17	this.getLoginListener = function(id) {
18		var listeners = this.listenerMap[id];
19		if (listeners) {
20			var cb;
21			for (var cb in listeners) {
22				cb = listeners[cb];
23				if (cb instanceof LoginMessageListener)
24					return cb;
25			}	
26		} 
27	}
28	
29	//private method getDataType
30	this.getDataType = function(urlId) {
31		var dataType;
32		if (urlId.indexOf("json") >= 0 || urlId.indexOf("Json.do") >= 0) {
33			dataType = "json";
34		}else if (urlId.indexOf("xml") >= 0 || urlId.indexOf("Xml.do") >= 0) {
35			dataType = "xml";
36		}else if (urlId.indexOf("html") >= 0 || urlId.indexOf("Html.do") >= 0) {
37			dataType = "html"; 
38		}else {
39			dataType = "text";
40		}
41		return dataType;
42	}
43	
44	//private method getDataType
45	this.getContentType = function(data) {		
46		if (data == null) {
47			return "";
48		}
49		
50		var contentType;
51		
52		if (isJson(data)) {
53			contentType = "application/json; charset=UTF-8";
54		}else if (data.indexOf("<?xml version") >= 0) {
55			contentType = "application/xml; charset=UTF-8";
56		}else if (data.indexOf("<!DOCTYPE html") >= 0) {
57			contentType = "text/html; charset=UTF-8";
58		}else {
59			contentType = "application/x-www-form-urlencoded; charset=UTF-8"; //neccessary for deleting items from rightpanel
60		}
61		return contentType;
62	}
63	
64	function isJson(str) {
65		try {
66			JSON.parse(str);
67		} catch (e) {
68			return false;
69		}
70		return true;
71	}
72
73}
74
75/**
76 * method for checking the HTTP-Header for parameter X-Pegasos-Status and value NOT_LOGGED_IN
77 * @author: MWilbers (OPITZ)
78 * @param request HttpServletRequest
79 * returns true, if logged in
80 */
81Hermes.prototype.loggedIn = function(urlId, data, request) {
82	var pegasosStatus = request.getResponseHeader("X-Pegasos-Status");
83	if( pegasosStatus == 'NOT_LOGGED_IN' ) {
84	
85		var loginListener = this.getLoginListener('messages-ajaxError');
86		if(loginListener) {
87			//type LoginMessageListener (see pegasos-messages.js)
88			loginListener.ajaxError(urlId, data, request);
89		}
90		return false;
91	
92	}
93	return true;
94}
95
96Hermes.prototype.autoLoggedIn = function(request) {
97	var pegasosStatus = request.getResponseHeader("X-Pegasos-Status");
98	if( pegasosStatus == 'AUTO_LOGGED_IN' ) {
99		return true;
100	}
101	return false;
102}
103
104Hermes.prototype.clearListener = function(id) {
105		this.listenerMap[id] = undefined;
106}
107	
108/**
109 * a listener is an object, which may implement those 3 methods:
110 *  - receiveLocalMessage(data) - local javascript message dispatching. data is a JS Object
111 *  - receiveAjaxSuccessMessage(id, data, response) - receive result of an ajax request. 
112 *  - receiveAjaxFailureMessage(id, data, response) - receive result of an ajax request. TODO: mayber signature will change
113 */
114Hermes.prototype.addListener = function(id, callback) {
115	var listeners = this.listenerMap[id];
116	if (listeners) {
117		var cb;
118		for (cb in listeners) {
119			if (cb === callback)
120				return;
121		}	
122	} else {
123		this.listenerMap[id] = listeners = new Array();
124	}
125	listeners.push(callback);
126}
127
128/**
129 * print all registered listeners on html page
130 */
131Hermes.prototype.dumpListener = function(id) {
132
133
134	if (id) {
135		console.info("Dump all registered listener for '" + id + "'");
136		var listener = this.listenerMap[id];
137		if (listener) {
138			for (var i=0; i < listener.length; i++) {
139				console.info(id + ' ' + i + ": " + listener[i]);
140			}
141		}
142		else {
143			console.info(id + " does not contain any listener");
144		}
145	}
146	else { /* dump all listener */
147		console.info("Dump all registered listener");
148		for (var key in this.listenerMap) {
149			var listener = this.listenerMap[key];
150			for (var i=0; i < listener.length; i++) {
151				console.info(key + ' ' + i + ": " + listener[i]);
152			}
153		}
154	}
155}
156
157/**
158 * Example: id = 'cart/status/items'
159 * will register 3 listeners: 
160 *   1. cart
161 *   2. cart/status
162 *   3. cart/status/items
163 * The callback parameter will act on every of these three id's
164 */
165Hermes.prototype.addListenerDepth = function(id, callback) {
166	console.error('addListenerDepth is not imlemented');
167}
168
169/**
170	der selector muss ein vollständiger JQUery-Selector sein
171*/
172Hermes.prototype.bindElement = function(selector, value) {
173	var object = $(selector);
174	object.html(value);
175}
176
177/**
178 * send a message as an ajax request or to other listeners. dispatching of result is done via 
179 * Hermes controller
180 *
181 * @param urlId ... target url, evetry listener which registered to this id is notified on an response
182 *        urlId .. can also be an abstract identifier for mapping the type of listener which is registered and called by method listener.local()
183 * @param type ... 'get', 'post', 'local'
184 * @param urlParameter ... URL Parameter like "?matNo=123456&q123456=7"
185 */
186Hermes.prototype.message = function(urlId, method, data, listener, dataType) {
187	
188	if (listener != undefined) {
189		this.addListener(urlId, listener);	
190	}
191	
192	listener = this.listenerMap[urlId];
193	if (!listener) {
194		console.info("No map defined for '" + urlId + "'");
195		return;
196	}
197	
198	
199	var contentType = "";
200	if (data == undefined) {
201		data = "";
202	}
203	else if(data.length > 0 && method.toLocaleLowerCase() == 'post'){
204		contentType = this.getContentType(data);
205	}
206	
207	if(method != 'local') {
208		
209		//define dataType
210		if (dataType == undefined || dataType == null) {
211			dataType = this.getDataType(urlId);
212		}
213		
214		//pBrowserTab is not needed for returning xml or json
215		if (dataType != "xml" && dataType != "json") {
216			
217			if (data != undefined && !data.substr(data.length - 1, 1) != '&') {
218				data += "&"
219			}
220
221			// pegasos is optional
222			if (window.pegasos) {
223				data += "pBrowserTab=" + window.pegasos.browserTab;
224			}
225		}
226	}
227
228	try {
229		if (method == 'local') {
230			for (var i=0; i < listener.length; i++) {
231				var callback = listener[i];
232				if (callback.local != undefined) {
233					callback.local(urlId, data);
234				}
235			}
236		}
237		else {			
238			var username = this.username;
239			var password = this.password;
240			
241			window.console.debug('urlId: "' + urlId + '" querystring="' + data + '" datatyp: "' + dataType + '" contentType: "' + contentType + '"' );
242				
243			$.ajax({
244				type: method,
245				url: urlId,
246				data: data,
247				dataType: dataType,
248				contentType : contentType,
249				beforeSend : function (req) {
250					if(username != undefined && password != undefined) {
251						var tok = username + ':' + password;
252						window.LOG.info("Sending HTTP Basic Auth = " + tok);
253						var basicAuth = 'Basic ' + Base64.encode(tok);
254						req.setRequestHeader('Authorization', basicAuth);
255					}
256				},			
257				error: function(request, status, thrown) { 
258					/**
259					 * @param request: the HttpServletRequest
260					 * @status string describing the type of error
261					 * @thrown optional exception object
262					 */
263					window.LOG.warn(status + " = " + thrown);
264					
265					if(! HS.loggedIn(urlId, data, request)) {
266						for (var i=0; i < listener.length; i++) {
267							var callback = listener[i];
268							if (callback.notLoggedIn != undefined) {
269								callback.notLoggedIn(urlId, data, request); 
270							}
271						}
272					} else {
273					
274						for (var i=0; i < listener.length; i++) {
275							var callback = listener[i];
276							if (callback.ajaxError != undefined) {
277								callback.ajaxError(urlId, data, request); 
278							}
279						}
280						
281					}
282				},
283				success: function(response, status, request) { 
284					for (var i=0; i < listener.length; i++) {
285						var callback = listener[i];
286						if (callback.ajaxSuccess != undefined) {
287							callback.ajaxSuccess(urlId, data, response, request); 
288						}
289						else {
290							console.warn("no method ajaxSuccess defined for id " + urlId);
291						}
292					}
293				}
294			});				
295		}
296	}
297	catch(error) {
298		console.warn(error);	
299	}
300	
301}
302
303/* global stuff */
304
305HS = new Hermes();
306
307/* default listener implementations */
308
309function SimpleClientListener(selector) {
310	this.selector = selector;
311}
312
313SimpleClientListener.prototype.local = function(id, data) {
314	HS.bindElement(this.selector, data);
315}
316
317/* probably stupid */
318SimpleClientListener.prototype.ajaxSuccess = function(id, data, response) {
319	HS.bindElement(this.selector, response);
320}
321
322

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.