All the features are hidden behind a switch, so users can turn them on or off as desired. This doc explains how to add this feature switch option to the options page, and some guidance on where should the feature be developed.
Each feature has a boolean option "linked" to it, which determines whether the feature will be enabled or not.
- First of all, think of a short codename for the feature.
- Modify the
//src/common/optionsPrototype.json5
file by adding an entry.- All features should have the
false
value set as a default, so existing users have to explicitly enable the option after they receive the extension update. Otherwise, it might cause confusion, because users wouldn't know if the feature was added by the extension or Google.
- All features should have the
- Now, modify the
//src/options/optionsPage.json5
file by adding an entry to the corresponding section. The experimental property is optional and should only be used with features which are unreliable (or could be at some point in the future) due to their nature. - Finally, add the option string at
//src/static/_locales/en/manifest.json
, by adding the string under theoptions_{{codename}}
key.
Apart from the feature switch option, additional options can be defined in order to further customize the behavior of a feature.
This is not usually the case, and it is preferred that the number of options is kept to a minimum so the extension is as simple as possible. In any case, this section explains how to add them in case they are needed.
*** promo
As a source of inspiration, take a look at the Community Console dark mode
feature: apart from the feature switch option (ccdarktheme
) it has 2
additional options associated with it:
- The
ccdarktheme_mode
option can be configured in the options page with a selector, and determines whether the dark/light themes are set according to the OS's dark mode setting, or whether the user is the one in charge of switching between them by clicking a button/switch in the Community Console.- Note that this option is only applied when the feature switch is turned on.
- The
ccdarktheme_switch_status
option is used to save whether the user manually enabled the dark theme or not by using the switch/button in the Community Console.- It is only applied when
ccdarktheme_mode
is set toswitch
and the feature is enabled.
- It is only applied when
These are the steps which you should generally follow when adding additional options:
- Think of a codename for the additional option. It should be the feature
codename appended by an underscore and a suffix
(
{{feature_codename}}_{{suffix}}
). - Modify the following files:
- Add an entry for the option in the
//src/common/optionsPrototype.json5
file. - Append the option's codename to the
//src/common/specialOptions.json5
file. This is so the option can be handled in a specific way when showing/saving it in the options page, or so it is handled outside of the options page.
- Add an entry for the option in the
- If you want to handle the option from the options page, follow these steps:
- Modify the
//src/static/options/optionsPage.json5
file to add the appropriate code which implements the option under thecustomHTML
property.- Don't include text, only the HTML structure. If you add a
data-i18n
attribute to an HTML element, its contents will be replaced with the corresponding i18n string (for instance,<span data-i18n="test"></span>
will be rendered as<span data-i18n="test">Test</span>
ifTest
was the string defined with the keyoptions_test
).
- Don't include text, only the HTML structure. If you add a
- Modify the
//src/optionsCommon.js
file to add the following things:- In the switch statement inside the save function, add a case to handle saving your additional option.
- In the switch statement inside the load event listener, add another case so your option is correctly set in the options page with the saved value.
- Add the corresponding i18n strings at
//src/static/_locales/en/manifest.json
.
- Modify the
- If you want to handle the option outside of the options page, include an
empty case in both switches at
//src/optionsCommon.js
, so the option is not handled there.
TODO(issue #32): Write this section.