README
BrowserSync TAL Plugin
Plugin that provides client-side scripts for BrowserSync, supporting the broadcast of keypresses to any number of TAL applications.
BrowserSync (with this TAL plugin) allows us to launch a TAL application on an unlimited number of real devices, and then control all those devices in synchronisation with a single remote control. Each device will receive your keypress event - allowing mass testing across devices.
What is TAL?
TAL was developed internally within the BBC as a way of vastly simplifying TV application development whilst increasing the reach of BBC TV applications such as iPlayer. Today all of the BBC's HTML-based TV applications are built using TAL.
How do I get it setup?
- Install BrowserSync:
npm install -g browser-sync
- Install the BrowserSync TAL plugin:
npm install -g browser-sync-tal
- Create a config file (you could check this into your application codebase):
# browser-sync-iplayer.conf
module.exports = {
"proxy": "www.bbc.co.uk/iplayer",
"plugins": [
"browser-sync-tal"
]
};
- Run BrowserSync:
browser-sync start --config browser-sync-iplayer.conf
- Get each device to load the URL output in your console labeled "External".
You could do this via your TVX page.
- Grab a remote for any one of the devices under-test and press some keys. Your keypresses will be broadcast to all the other devices.
Use cases of BrowserSync
- Live feedback of CSS or JS changes
- Regression testing prior to a release
- Explorative testing, discovering differences between different devices.
How does it work?
BrowserSync establishes a 2-way communication channel between each device and your computer.
This plugin listens for keypress events and derives a TAL keyname using the keyboard mapping config for your device (e.g. VK_UP or VK_DOWN).
With this device-agnostic keyname we broadcast it over the network to all other devices using SocketIO.
Upon receiving a network-keypress, we emit a TAL keypress event. From this point onwards your application will behave just as if it had received a normal IR remote control command.