Adapter
call
Given a key and a set of arguments, call them when given a context. Primarily useful in composition.
Use a closure to call a stored key with stored arguments.
const call = (key, ...args) => context => context[key](...args); + }
30 seconds of code Curated collection of useful JavaScript snippets that you can understand in 30 seconds or less.
Adapter
call
Given a key and a set of arguments, call them when given a context. Primarily useful in composition.
Use a closure to call a stored key with stored arguments.
const call = (key, ...args) => context => context[key](...args);Promise.resolve([1, 2, 3]) .then(call('map', x => 2 * x)) .then(console.log); //[ 2, 4, 6 ] @@ -369,6 +369,36 @@ Object.assig </div>` ); console.log(el.className); // 'container' +createEventHubadvanced
Creates a pub/sub (publish–subscribe) event hub with
emit,on, andoffmethods.Use
Object.create(null)to create an emptyhubobject that does not inherit properties fromObject.prototype. Foremit, resolve the array of handlers based on theeventargument and then run each one withArray.forEach()by passing in the data as an argument. Foron, create an array for the event if it does not yet exist, then useArray.push()to add the handler to the array. Foroff, useArray.findIndex()to find the index of the handler in the event array and remove it usingArray.splice().const createEventHub = () => ({ + hub: Object.create(null), + emit(event, data) { + (this.hub[event] || []).forEach(handler => handler(data)); + }, + on(event, handler) { + if (!this.hub[event]) this.hub[event] = []; + this.hub[event].push(handler); + }, + off(event, handler) { + const i = (this.hub[event] || []).findIndex(h => h === handler); + if (i > -1) this.hub[event].splice(i, 1); + } +}); +const handler = data => console.log(data); +const hub = createEventHub(); +let increment = 0; + +// Subscribe: listen for different types of events +hub.on('message', handler); +hub.on('message', () => console.log('Message event fired')); +hub.on('increment', () => increment++); + +// Publish: emit events to invoke all handlers subscribed to them, passing the data to them as an argument +hub.emit('message', 'hello world'); // logs 'hello world' and 'Message event fired' +hub.emit('message', { hello: 'world' }); // logs the object and 'Message event fired' +hub.emit('increment'); // `increment` variable is now 1 + +// Unsubscribe: stop a specific handler from listening to the 'message' event +hub.off('message', handler);currentURL
Returns the current URL.
Use
window.location.hrefto get current URL.const currentURL = () => window.location.href;currentURL(); // 'https://google.com'detectDeviceType
Detects wether the website is being opened in a mobile device or a desktop/laptop.
Use a regular expression to test the
navigator.userAgentproperty to figure out if the device is a mobile device or a desktop/laptop.const detectDeviceType = () => diff --git a/snippets/createEventHub.md b/snippets/createEventHub.md index de2b0139e..5b11f4530 100644 --- a/snippets/createEventHub.md +++ b/snippets/createEventHub.md @@ -8,7 +8,7 @@ For `on`, create an array for the event if it does not yet exist, then use `Arra to the array. For `off`, use `Array.findIndex()` to find the index of the handler in the event array and remove it using `Array.splice()`. -```js +```js const createEventHub = () => ({ hub: Object.create(null), emit(event, data) { @@ -25,7 +25,7 @@ const createEventHub = () => ({ }); ``` -```js +```js const handler = data => console.log(data); const hub = createEventHub(); let increment = 0; @@ -41,5 +41,5 @@ hub.emit('message', { hello: 'world' }); // logs the object and 'Message event f hub.emit('increment'); // `increment` variable is now 1 // Unsubscribe: stop a specific handler from listening to the 'message' event -hub.off('message', handler); +hub.off('message', handler); ``` diff --git a/tag_database b/tag_database index 7330da5ca..a1a0c2388 100644 --- a/tag_database +++ b/tag_database @@ -20,9 +20,9 @@ copyToClipboard:browser,string,advanced countOccurrences:array countVowels:string createElement:browser,utility +createEventHub:browser,event,advanced currentURL:browser,url curry:function,recursion -createEventHub:browser,event,advanced deepFlatten:array,recursion defer:function detectDeviceType:browser