aboutsummaryrefslogtreecommitdiff
path: root/docs/_book/gitbook/gitbook-plugin-fontsettings/fontsettings.js
diff options
context:
space:
mode:
authorJakob Stendahl <jakob.stendahl@outlook.com>2018-11-29 23:14:58 +0100
committerJakob Stendahl <jakob.stendahl@outlook.com>2018-11-29 23:14:58 +0100
commit101745c6a4a2c6a186be48182d48814177840c65 (patch)
treeee7c7420291473033cf7cd9f921fe21958bf571f /docs/_book/gitbook/gitbook-plugin-fontsettings/fontsettings.js
parent2147880e40ee39ae07c8df9d3500080da467475d (diff)
downloadLuxcena-Neo-101745c6a4a2c6a186be48182d48814177840c65.tar.gz
Luxcena-Neo-101745c6a4a2c6a186be48182d48814177840c65.zip
:construction: Chenged things, and written some docs
Diffstat (limited to 'docs/_book/gitbook/gitbook-plugin-fontsettings/fontsettings.js')
-rw-r--r--docs/_book/gitbook/gitbook-plugin-fontsettings/fontsettings.js240
1 files changed, 240 insertions, 0 deletions
diff --git a/docs/_book/gitbook/gitbook-plugin-fontsettings/fontsettings.js b/docs/_book/gitbook/gitbook-plugin-fontsettings/fontsettings.js
new file mode 100644
index 0000000..ff7be71
--- /dev/null
+++ b/docs/_book/gitbook/gitbook-plugin-fontsettings/fontsettings.js
@@ -0,0 +1,240 @@
+require(['gitbook', 'jquery'], function(gitbook, $) {
+ // Configuration
+ var MAX_SIZE = 4,
+ MIN_SIZE = 0,
+ BUTTON_ID;
+
+ // Current fontsettings state
+ var fontState;
+
+ // Default themes
+ var THEMES = [
+ {
+ config: 'white',
+ text: 'White',
+ id: 0
+ },
+ {
+ config: 'sepia',
+ text: 'Sepia',
+ id: 1
+ },
+ {
+ config: 'night',
+ text: 'Night',
+ id: 2
+ }
+ ];
+
+ // Default font families
+ var FAMILIES = [
+ {
+ config: 'serif',
+ text: 'Serif',
+ id: 0
+ },
+ {
+ config: 'sans',
+ text: 'Sans',
+ id: 1
+ }
+ ];
+
+ // Return configured themes
+ function getThemes() {
+ return THEMES;
+ }
+
+ // Modify configured themes
+ function setThemes(themes) {
+ THEMES = themes;
+ updateButtons();
+ }
+
+ // Return configured font families
+ function getFamilies() {
+ return FAMILIES;
+ }
+
+ // Modify configured font families
+ function setFamilies(families) {
+ FAMILIES = families;
+ updateButtons();
+ }
+
+ // Save current font settings
+ function saveFontSettings() {
+ gitbook.storage.set('fontState', fontState);
+ update();
+ }
+
+ // Increase font size
+ function enlargeFontSize(e) {
+ e.preventDefault();
+ if (fontState.size >= MAX_SIZE) return;
+
+ fontState.size++;
+ saveFontSettings();
+ }
+
+ // Decrease font size
+ function reduceFontSize(e) {
+ e.preventDefault();
+ if (fontState.size <= MIN_SIZE) return;
+
+ fontState.size--;
+ saveFontSettings();
+ }
+
+ // Change font family
+ function changeFontFamily(configName, e) {
+ if (e && e instanceof Event) {
+ e.preventDefault();
+ }
+
+ var familyId = getFontFamilyId(configName);
+ fontState.family = familyId;
+ saveFontSettings();
+ }
+
+ // Change type of color theme
+ function changeColorTheme(configName, e) {
+ if (e && e instanceof Event) {
+ e.preventDefault();
+ }
+
+ var $book = gitbook.state.$book;
+
+ // Remove currently applied color theme
+ if (fontState.theme !== 0)
+ $book.removeClass('color-theme-'+fontState.theme);
+
+ // Set new color theme
+ var themeId = getThemeId(configName);
+ fontState.theme = themeId;
+ if (fontState.theme !== 0)
+ $book.addClass('color-theme-'+fontState.theme);
+
+ saveFontSettings();
+ }
+
+ // Return the correct id for a font-family config key
+ // Default to first font-family
+ function getFontFamilyId(configName) {
+ // Search for plugin configured font family
+ var configFamily = $.grep(FAMILIES, function(family) {
+ return family.config == configName;
+ })[0];
+ // Fallback to default font family
+ return (!!configFamily)? configFamily.id : 0;
+ }
+
+ // Return the correct id for a theme config key
+ // Default to first theme
+ function getThemeId(configName) {
+ // Search for plugin configured theme
+ var configTheme = $.grep(THEMES, function(theme) {
+ return theme.config == configName;
+ })[0];
+ // Fallback to default theme
+ return (!!configTheme)? configTheme.id : 0;
+ }
+
+ function update() {
+ var $book = gitbook.state.$book;
+
+ $('.font-settings .font-family-list li').removeClass('active');
+ $('.font-settings .font-family-list li:nth-child('+(fontState.family+1)+')').addClass('active');
+
+ $book[0].className = $book[0].className.replace(/\bfont-\S+/g, '');
+ $book.addClass('font-size-'+fontState.size);
+ $book.addClass('font-family-'+fontState.family);
+
+ if(fontState.theme !== 0) {
+ $book[0].className = $book[0].className.replace(/\bcolor-theme-\S+/g, '');
+ $book.addClass('color-theme-'+fontState.theme);
+ }
+ }
+
+ function init(config) {
+ // Search for plugin configured font family
+ var configFamily = getFontFamilyId(config.family),
+ configTheme = getThemeId(config.theme);
+
+ // Instantiate font state object
+ fontState = gitbook.storage.get('fontState', {
+ size: config.size || 2,
+ family: configFamily,
+ theme: configTheme
+ });
+
+ update();
+ }
+
+ function updateButtons() {
+ // Remove existing fontsettings buttons
+ if (!!BUTTON_ID) {
+ gitbook.toolbar.removeButton(BUTTON_ID);
+ }
+
+ // Create buttons in toolbar
+ BUTTON_ID = gitbook.toolbar.createButton({
+ icon: 'fa fa-font',
+ label: 'Font Settings',
+ className: 'font-settings',
+ dropdown: [
+ [
+ {
+ text: 'A',
+ className: 'font-reduce',
+ onClick: reduceFontSize
+ },
+ {
+ text: 'A',
+ className: 'font-enlarge',
+ onClick: enlargeFontSize
+ }
+ ],
+ $.map(FAMILIES, function(family) {
+ family.onClick = function(e) {
+ return changeFontFamily(family.config, e);
+ };
+
+ return family;
+ }),
+ $.map(THEMES, function(theme) {
+ theme.onClick = function(e) {
+ return changeColorTheme(theme.config, e);
+ };
+
+ return theme;
+ })
+ ]
+ });
+ }
+
+ // Init configuration at start
+ gitbook.events.bind('start', function(e, config) {
+ var opts = config.fontsettings;
+
+ // Generate buttons at start
+ updateButtons();
+
+ // Init current settings
+ init(opts);
+ });
+
+ // Expose API
+ gitbook.fontsettings = {
+ enlargeFontSize: enlargeFontSize,
+ reduceFontSize: reduceFontSize,
+ setTheme: changeColorTheme,
+ setFamily: changeFontFamily,
+ getThemes: getThemes,
+ setThemes: setThemes,
+ getFamilies: getFamilies,
+ setFamilies: setFamilies
+ };
+});
+
+