mirror of
https://github.com/videojs/video.js.git
synced 2025-07-17 01:42:41 +02:00
@carpasse enhanced events to allow passing a second data argument. closes #2163
This commit is contained in:
@ -43,6 +43,7 @@ CHANGELOG
|
|||||||
* @mmcc increased the size of the progress bar and handle on hover ([view](https://github.com/videojs/video.js/pull/2216))
|
* @mmcc increased the size of the progress bar and handle on hover ([view](https://github.com/videojs/video.js/pull/2216))
|
||||||
* @mmcc moved the fonts into their own repo ([view](https://github.com/videojs/video.js/pull/2223))
|
* @mmcc moved the fonts into their own repo ([view](https://github.com/videojs/video.js/pull/2223))
|
||||||
* @mmcc deprecated the options() function and removed internal uses ([view](https://github.com/videojs/video.js/pull/2229))
|
* @mmcc deprecated the options() function and removed internal uses ([view](https://github.com/videojs/video.js/pull/2229))
|
||||||
|
* @carpasse enhanced events to allow passing a second data argument ([view](https://github.com/videojs/video.js/pull/2163))
|
||||||
|
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
|
@ -701,12 +701,15 @@ class Component {
|
|||||||
*
|
*
|
||||||
* myComponent.trigger('eventName');
|
* myComponent.trigger('eventName');
|
||||||
* myComponent.trigger({'type':'eventName'});
|
* myComponent.trigger({'type':'eventName'});
|
||||||
|
* myComponent.trigger('eventName', {data: 'some data'});
|
||||||
|
* myComponent.trigger({'type':'eventName'}, {data: 'some data'});
|
||||||
*
|
*
|
||||||
* @param {Event|Object|String} event A string (the type) or an event object with a type attribute
|
* @param {Event|Object|String} event A string (the type) or an event object with a type attribute
|
||||||
|
* @param {Object} [hash] data hash to pass along with the event
|
||||||
* @return {Component} self
|
* @return {Component} self
|
||||||
*/
|
*/
|
||||||
trigger(event) {
|
trigger(event, hash) {
|
||||||
Events.trigger(this.el_, event);
|
Events.trigger(this.el_, event, hash);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ export function on(elem, type, fn){
|
|||||||
if (!data.dispatcher) {
|
if (!data.dispatcher) {
|
||||||
data.disabled = false;
|
data.disabled = false;
|
||||||
|
|
||||||
data.dispatcher = function (event){
|
data.dispatcher = function (event, hash){
|
||||||
|
|
||||||
if (data.disabled) return;
|
if (data.disabled) return;
|
||||||
event = fixEvent(event);
|
event = fixEvent(event);
|
||||||
@ -53,7 +53,7 @@ export function on(elem, type, fn){
|
|||||||
if (event.isImmediatePropagationStopped()) {
|
if (event.isImmediatePropagationStopped()) {
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
handlersCopy[m].call(elem, event);
|
handlersCopy[m].call(elem, event, hash);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -127,8 +127,9 @@ export function off(elem, type, fn) {
|
|||||||
* Trigger an event for an element
|
* Trigger an event for an element
|
||||||
* @param {Element|Object} elem Element to trigger an event on
|
* @param {Element|Object} elem Element to trigger an event on
|
||||||
* @param {Event|Object|String} event A string (the type) or an event object with a type attribute
|
* @param {Event|Object|String} event A string (the type) or an event object with a type attribute
|
||||||
|
* @param {Object} [hash] data hash to pass along with the event
|
||||||
*/
|
*/
|
||||||
export function trigger(elem, event) {
|
export function trigger(elem, event, hash) {
|
||||||
// Fetches element data and a reference to the parent (for bubbling).
|
// Fetches element data and a reference to the parent (for bubbling).
|
||||||
// Don't want to add a data object to cache for every parent,
|
// Don't want to add a data object to cache for every parent,
|
||||||
// so checking hasElData first.
|
// so checking hasElData first.
|
||||||
@ -146,13 +147,13 @@ export function trigger(elem, event) {
|
|||||||
|
|
||||||
// If the passed element has a dispatcher, executes the established handlers.
|
// If the passed element has a dispatcher, executes the established handlers.
|
||||||
if (elemData.dispatcher) {
|
if (elemData.dispatcher) {
|
||||||
elemData.dispatcher.call(elem, event);
|
elemData.dispatcher.call(elem, event, hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unless explicitly stopped or the event does not bubble (e.g. media events)
|
// Unless explicitly stopped or the event does not bubble (e.g. media events)
|
||||||
// recursively calls this function to bubble the event up the DOM.
|
// recursively calls this function to bubble the event up the DOM.
|
||||||
if (parent && !event.isPropagationStopped() && event.bubbles !== false) {
|
if (parent && !event.isPropagationStopped() && event.bubbles !== false) {
|
||||||
trigger(parent, event);
|
trigger.call(null, parent, event, hash);
|
||||||
|
|
||||||
// If at the top of the DOM, triggers the default action unless disabled.
|
// If at the top of the DOM, triggers the default action unless disabled.
|
||||||
} else if (!parent && !event.defaultPrevented) {
|
} else if (!parent && !event.defaultPrevented) {
|
||||||
|
@ -221,6 +221,23 @@ test('should trigger a listener once using one()', function(){
|
|||||||
comp.trigger('test-event');
|
comp.trigger('test-event');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should be possible to pass data when you trigger an event', function () {
|
||||||
|
var comp = new Component(getFakePlayer(), {});
|
||||||
|
var data1 = 'Data1';
|
||||||
|
var data2 = {txt: 'Data2'};
|
||||||
|
expect(3);
|
||||||
|
|
||||||
|
var testListener = function(evt, hash){
|
||||||
|
ok(true, 'fired event once');
|
||||||
|
deepEqual(hash.d1, data1);
|
||||||
|
deepEqual(hash.d2, data2);
|
||||||
|
};
|
||||||
|
|
||||||
|
comp.one('test-event', testListener);
|
||||||
|
comp.trigger('test-event', {d1: data1, d2: data2});
|
||||||
|
comp.trigger('test-event');
|
||||||
|
});
|
||||||
|
|
||||||
test('should add listeners to other components and remove them', function(){
|
test('should add listeners to other components and remove them', function(){
|
||||||
var player = getFakePlayer(),
|
var player = getFakePlayer(),
|
||||||
comp1 = new Component(player),
|
comp1 = new Component(player),
|
||||||
|
@ -43,6 +43,24 @@ test('should add and remove multiple event listeners to an element with a single
|
|||||||
Events.trigger(el, 'event2'); // No event2 should happen.
|
Events.trigger(el, 'event2'); // No event2 should happen.
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should be possible to pass data when you trigger an event', function () {
|
||||||
|
expect(6);
|
||||||
|
var el = document.createElement('div');
|
||||||
|
var fakeData1 = 'Fake Data 1';
|
||||||
|
var fakeData2 = {txt: 'Fake Data 2'};
|
||||||
|
|
||||||
|
var listener = function(evt, hash){
|
||||||
|
ok(true, 'Callback triggered');
|
||||||
|
deepEqual(fakeData1, hash.d1, 'Shoulbe be passed to the handler');
|
||||||
|
deepEqual(fakeData2, hash.d2, 'Shoulbe be passed to the handler');
|
||||||
|
};
|
||||||
|
|
||||||
|
Events.on(el, ['event1', 'event2'], listener);
|
||||||
|
Events.trigger(el, 'event1', { d1: fakeData1, d2:fakeData2});
|
||||||
|
Events.trigger(el, 'event2', { d1: fakeData1, d2:fakeData2});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
test('should remove all listeners of a type', function(){
|
test('should remove all listeners of a type', function(){
|
||||||
var el = document.createElement('div');
|
var el = document.createElement('div');
|
||||||
var clicks = 0;
|
var clicks = 0;
|
||||||
|
Reference in New Issue
Block a user