/** * The moudle supports displaying bluetooth information on an element. * * @module panels/root/bluetooth_item */ define(function(require) { 'use strict'; var SettingsService = require('modules/settings_service'); var BtContext = require('modules/bluetooth/bluetooth_context'); var _debug = false; var debug = function() {}; if (_debug) { debug = function bti_debug(msg) { console.log('--> [BluetoothItem]: ' + msg); }; } /** * @alias module:panels/root/bluetooth_item * @class BluetoothItem * @requires module:modules/bluetooth * @param {HTMLElement} element The element displaying the bluetooth information * @return {BluetoothItem} */ function BluetoothItem(element) { this._enabled = false; this._element = element; this._boundRefreshMenuDescription = this._refreshMenuDescription.bind(this, element); } BluetoothItem.prototype = { /** * Refresh the text based on the Bluetooth module enabled/disabled, * paired devices information. * * @access private * @memberOf BluetoothItem.prototype * @param {HTMLElement} element The element displaying the bluetooth information */ _refreshMenuDescription: function bt__refreshMenuDescription(element) { if (!document.l10n) { return; } if (BtContext.enabled) { if (BtContext.numberOfPairedDevices === 0) { element.setAttribute('data-l10n-id', 'bt-status-nopaired'); } else { document.l10n.setAttributes(element, 'bt-status-paired', { name: BtContext.firstPairedDeviceName, n: BtContext.numberOfPairedDevices - 1 }); } } else { element.setAttribute('data-l10n-id', 'bt-status-turnoff'); } }, /** * The value indicates whether the module is responding. * * @access public * @memberOf BluetoothItem.prototype * @type {Boolean} */ get enabled() { return this._enabled; }, set enabled(value) { if (this._enabled === value) { return; } this._enabled = value; if (this._enabled) { BtContext.observe('enabled', this._boundRefreshMenuDescription); BtContext.observe('numberOfPairedDevices', this._boundRefreshMenuDescription); this._boundRefreshMenuDescription(); } else { BtContext.unobserve('enabled', this._boundRefreshMenuDescription); BtContext.unobserve('numberOfPairedDevices', this._boundRefreshMenuDescription); } }, /** * Navigate new/old Bluetooth panel via version of mozBluetooth API. * * @access private * @memberOf BluetoothItem.prototype * @type {Function} */ _navigatePanelWithVersionCheck: function bt__navigatePanelWithVersionCheck() { debug('navigate bluetooth panel'); SettingsService.navigate('bluetooth'); } }; return function ctor_bluetoothItem(element) { return new BluetoothItem(element); }; });