Skip to content
Snippets Groups Projects
settings.js 1.57 KiB
Newer Older
Thomas Rientjes's avatar
Thomas Rientjes committed
/**
 * Application settings content script.
 *
 * @module content-scripts/settings
 */

'use strict';

Thomas Rientjes's avatar
Thomas Rientjes committed
/**
 * Fires once the content script worker is initialized.
 *
 * @param {Object} initialState The initial state of the settings module.
Thomas Rientjes's avatar
Thomas Rientjes committed
 * @listens main/worker:initialized
Thomas Rientjes's avatar
Thomas Rientjes committed
 */
self.port.once('worker:initialized', function (initialState) {
Thomas Rientjes's avatar
Thomas Rientjes committed

    applyL10n(initialState.l10n);
Thomas Rientjes's avatar
Thomas Rientjes committed
});

Thomas Rientjes's avatar
Thomas Rientjes committed
/**
 * Fires once a preference has been fetched.
 *
 * @param {Object} preference The externally fetched preference.
 * @listens main/preference:fetched
 */
Thomas Rientjes's avatar
Thomas Rientjes committed
self.port.on('preference:fetched', function () {
    // TODO Re-render the user interface.
});

/**
 * Applies a given localization to marked document elements.
 * https://bugzilla.mozilla.org/show_bug.cgi?id=787351
 *
 * @param {Object} l10n A localization object.
Thomas Rientjes's avatar
Thomas Rientjes committed
 * @private
Thomas Rientjes's avatar
Thomas Rientjes committed
 */
function applyL10n (l10n) {

    var l10nKeys = Object.keys(l10n);

    l10nKeys.forEach(function (l10nKey) {

        var elements = document.querySelectorAll('[data-l10n-id="' + l10nKey + '"]');

        for (let element of elements) {
            element.textContent = l10n[l10nKey];
        }
    });
}
Thomas Rientjes's avatar
Thomas Rientjes committed

Thomas Rientjes's avatar
Thomas Rientjes committed
/**
 * Fetch preference event emitter.
 *
 * @event preference:fetch
 * @property {String} preferenceKey The key of the requested preference.
 */
Thomas Rientjes's avatar
Thomas Rientjes committed
function fetchPreference (preferenceKey) {
    self.port.emit('preference:fetch', preferenceKey);
}

/**
Thomas Rientjes's avatar
Thomas Rientjes committed
 * Preference changed event emitter.
 *
 * @event preference:changed
 * @property {Object} preference The updated preference.
Thomas Rientjes's avatar
Thomas Rientjes committed
 */
Thomas Rientjes's avatar
Thomas Rientjes committed
function preferenceChanged (preference) {
    self.port.emit('preference:changed', preference);
}