PageSourceSearch

https://smetom-geeode.fr/wp-content/plugins/wp-google-maps/js/v8/event-dispatcher.js?ver=10.1.09%2Bpro-10.1.05

js smetom-geeode.fr collected 2026-10-02 22:56:38 UTC 5,689 bytes, 221 lines download raw bytes

1/**
2 * @namespace WPGMZA
3 * @module EventDispatcher
4 * @requires WPGMZA
5 */
6jQuery(function($) {
7	
8	/**
9	 * Base class for any (non HTMLElement) object which dispatches or listens for events
10	 * @class WPGMZA.EventDispatcher
11	 * @constructor WPGMZA.EventDispatcher
12	 * @memberof WPGMZA
13	 */
14	WPGMZA.EventDispatcher = function()
15	{
16		WPGMZA.assertInstanceOf(this, "EventDispatcher");
17		
18		this._listenersByType = {};
19	}
20
21	/**
22	 * Adds an event listener on this object
23	 * @method
24	 * @memberof WPGMZA.EventDispatcher
25	 * @param {string} type The event type, or multiple types separated by spaces
26	 * @param {function} callback The callback to call when the event fires
27	 * @param {object} [thisObject] The object to use as "this" when firing the callback
28	 * @param {bool} [useCapture] If true, fires the callback on the capture phase, as opposed to bubble phase
29	 */
30	WPGMZA.EventDispatcher.prototype.addEventListener = function(type, listener, thisObject, useCapture)
31	{
32		var types = type.split(/\s+/);
33		if(types.length > 1)
34		{
35			for(var i = 0; i < types.length; i++)
36				this.addEventListener(types[i], listener, thisObject, useCapture);
37			
38			return;
39		}
40		
41		if(!(listener instanceof Function))
42			throw new Error("Listener must be a function");
43	
44		var target;
45		if(!this._listenersByType.hasOwnProperty(type))
46			target = this._listenersByType[type] = [];
47		else
48			target = this._listenersByType[type];
49		
50		var obj = {
51			listener: listener,
52			thisObject: (thisObject ? thisObject : this),
53			useCapture: (useCapture ? true : false)
54			};
55			
56		target.push(obj);
57	}
58
59	/**
60	 * Alias for addEventListener
61	 * @method
62	 * @memberof WPGMZA.EventDispatcher
63	 * @see WPGMZA.EventDispatcher#addEventListener
64	 */
65	WPGMZA.EventDispatcher.prototype.on = WPGMZA.EventDispatcher.prototype.addEventListener;
66
67	/**
68	 * Removes event listeners from this object
69	 * @method
70	 * @memberof WPGMZA.EventDispatcher
71	 * @param {string} type The event type to remove listeners from
72	 * @param {function} [listener] The function to remove. If omitted, all listeners will be removed
73	 * @param {object} [thisObject] Use the parameter to remove listeners bound with the same thisObject
74	 * @param {bool} [useCapture] Remove the capture phase event listener. Otherwise, the bubble phase event listener will be removed.
75	 */
76	WPGMZA.EventDispatcher.prototype.removeEventListener = function(type, listener, thisObject, useCapture)
77	{
78		var arr, index, obj;
79
80		if(!(arr = this._listenersByType[type]))
81			return;
82			
83		if(!thisObject)
84			thisObject = this;
85			
86		useCapture = (useCapture ? true : false);
87		
88		for(var i = 0; i < arr.length; i++)
89		{
90			obj = arr[i];
91		
92			if((arguments.length == 1 || obj.listener == listener) && obj.thisObject == thisObject && obj.useCapture == useCapture)
93			{
94				arr.splice(i, 1);
95				return;
96			}
97		}
98	}
99
100	/**
101	 * Alias for removeEventListener
102	 * @method
103	 * @memberof WPGMZA.EventDispatcher
104	 * @see WPGMZA.EventDispatcher#removeEventListener
105	 */
106	WPGMZA.EventDispatcher.prototype.off = WPGMZA.EventDispatcher.prototype.removeEventListener;
107
108	/**
109	 * Test for listeners of type on this object
110	 * @method
111	 * @memberof WPGMZA.EventDispatcher
112	 * @param {string} type The event type to test for
113	 * @return {bool} True if this object has listeners bound for the specified type
114	 */
115	WPGMZA.EventDispatcher.prototype.hasEventListener = function(type)
116	{
117		return (_listenersByType[type] ? true : false);
118	}
119
120	/**
121	 * Fires an event on this object
122	 * @method
123	 * @memberof WPGMZA.EventDispatcher
124	 * @param {string|WPGMZA.Event} event Either the event type as a string, or an instance of WPGMZA.Event
125	 */
126	WPGMZA.EventDispatcher.prototype.dispatchEvent = function(event) {
127
128		if(!(event instanceof WPGMZA.Event)) {
129			if(typeof event == "string")
130				event = new WPGMZA.Event(event);
131			else
132			{
133				var src = event;
134				event = new WPGMZA.Event();
135				for(var name in src)
136					event[name] = src[name];
137			}
138		}
139
140
141
142		event.target = this;
143			
144		var path = [];
145		for(var obj = this.parent; obj != null; obj = obj.parent)
146			path.unshift(obj);
147		
148		event.phase = WPGMZA.Event.CAPTURING_PHASE;
149		for(var i = 0; i < path.length && !event._cancelled; i++)
150			path[i]._triggerListeners(event);
151			
152		if(event._cancelled)
153			return;
154			
155		event.phase = WPGMZA.Event.AT_TARGET;
156		this._triggerListeners(event);
157			
158		event.phase = WPGMZA.Event.BUBBLING_PHASE;
159		for(i = path.length - 1; i >= 0 && !event._cancelled; i--)
160			path[i]._triggerListeners(event);
161		
162		// Native DOM event
163		var topMostElement = this.element;
164		for(var obj = this.parent; obj != null; obj = obj.parent)
165		{
166			if(obj.element)
167				topMostElement = obj.element;
168		}
169		
170		if(topMostElement)
171		{
172			var customEvent = {};
173			
174			for(var key in event)
175			{
176				var value = event[key];
177				
178				if(key == "type")
179					value += ".wpgmza";
180				
181				customEvent[key] = value;
182			}
183			$(topMostElement).trigger(customEvent);
184		}
185	}
186
187	/**
188	 * Alias for removeEventListener
189	 * @method
190	 * @memberof WPGMZA.EventDispatcher
191	 * @see WPGMZA.EventDispatcher#removeEventListener
192	 */
193	WPGMZA.EventDispatcher.prototype.trigger = WPGMZA.EventDispatcher.prototype.dispatchEvent;
194
195	/**
196	 * Handles the logic of triggering listeners
197	 * @method
198	 * @memberof WPGMZA.EventDispatcher
199	 * @inner
200	 */
201	WPGMZA.EventDispatcher.prototype._triggerListeners = function(event)
202	{
203		var arr, obj;
204		
205		if(!(arr = this._listenersByType[event.type]))
206			return;
207			
208		for(var i = 0; i < arr.length; i++)
209		{
210			obj = arr[i];
211			
212			if(event.phase == WPGMZA.Event.CAPTURING_PHASE && !obj.useCapture)
213				continue;
214				
215			obj.listener.call(arr[i].thisObject, event);
216		}
217	}
218
219	WPGMZA.events = new WPGMZA.EventDispatcher();
220
221});

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.