Skip to content

Commit 7e9e17c

Browse files
author
Masaharu Hayashi
committed
fixing
1 parent 7fb5d48 commit 7e9e17c

File tree

227 files changed

+81618
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

227 files changed

+81618
-0
lines changed
Lines changed: 238 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,238 @@
1+
require(["gitbook", "jquery"], (gitbook, $) => {
2+
// Configuration
3+
const MAX_SIZE = 4;
4+
const MIN_SIZE = 0;
5+
let BUTTON_ID;
6+
7+
// Current fontsettings state
8+
let fontState;
9+
10+
// Default themes
11+
let THEMES = [
12+
{
13+
config: "white",
14+
text: "White",
15+
id: 0
16+
},
17+
{
18+
config: "sepia",
19+
text: "Sepia",
20+
id: 1
21+
},
22+
{
23+
config: "night",
24+
text: "Night",
25+
id: 2
26+
}
27+
];
28+
29+
// Default font families
30+
let FAMILIES = [
31+
{
32+
config: "serif",
33+
text: "Serif",
34+
id: 0
35+
},
36+
{
37+
config: "sans",
38+
text: "Sans",
39+
id: 1
40+
}
41+
];
42+
43+
// Return configured themes
44+
function getThemes() {
45+
return THEMES;
46+
}
47+
48+
// Modify configured themes
49+
function setThemes(themes) {
50+
THEMES = themes;
51+
updateButtons();
52+
}
53+
54+
// Return configured font families
55+
function getFamilies() {
56+
return FAMILIES;
57+
}
58+
59+
// Modify configured font families
60+
function setFamilies(families) {
61+
FAMILIES = families;
62+
updateButtons();
63+
}
64+
65+
// Save current font settings
66+
function saveFontSettings() {
67+
gitbook.storage.set("fontState", fontState);
68+
update();
69+
}
70+
71+
// Increase font size
72+
function enlargeFontSize(e) {
73+
e.preventDefault();
74+
if (fontState.size >= MAX_SIZE) return;
75+
76+
fontState.size++;
77+
saveFontSettings();
78+
}
79+
80+
// Decrease font size
81+
function reduceFontSize(e) {
82+
e.preventDefault();
83+
if (fontState.size <= MIN_SIZE) return;
84+
85+
fontState.size--;
86+
saveFontSettings();
87+
}
88+
89+
// Change font family
90+
function changeFontFamily(configName, e) {
91+
if (e && e instanceof Event) {
92+
e.preventDefault();
93+
}
94+
95+
const familyId = getFontFamilyId(configName);
96+
fontState.family = familyId;
97+
saveFontSettings();
98+
}
99+
100+
// Change type of color theme
101+
function changeColorTheme(configName, e) {
102+
if (e && e instanceof Event) {
103+
e.preventDefault();
104+
}
105+
106+
const $book = gitbook.state.$book;
107+
108+
// Remove currently applied color theme
109+
if (fontState.theme !== 0) $book.removeClass(`color-theme-${fontState.theme}`);
110+
111+
// Set new color theme
112+
const themeId = getThemeId(configName);
113+
fontState.theme = themeId;
114+
if (fontState.theme !== 0) $book.addClass(`color-theme-${fontState.theme}`);
115+
116+
saveFontSettings();
117+
}
118+
119+
// Return the correct id for a font-family config key
120+
// Default to first font-family
121+
function getFontFamilyId(configName) {
122+
// Search for plugin configured font family
123+
const configFamily = $.grep(FAMILIES, (family) => {
124+
return family.config == configName;
125+
})[0];
126+
127+
// Fallback to default font family
128+
return (configFamily && configFamily.id) || 0;
129+
}
130+
131+
// Return the correct id for a theme config key
132+
// Default to first theme
133+
function getThemeId(configName) {
134+
// Search for plugin configured theme
135+
const configTheme = $.grep(THEMES, (theme) => {
136+
return theme.config == configName;
137+
})[0];
138+
139+
// Fallback to default theme
140+
return (configTheme && configTheme.id) || 0;
141+
}
142+
143+
function update() {
144+
const $book = gitbook.state.$book;
145+
146+
$(".font-settings .font-family-list li").removeClass("active");
147+
$(`.font-settings .font-family-list li:nth-child(${fontState.family + 1})`).addClass("active");
148+
149+
$book[0].className = $book[0].className.replace(/\bfont-\S+/g, "");
150+
$book.addClass(`font-size-${fontState.size}`);
151+
$book.addClass(`font-family-${fontState.family}`);
152+
153+
if (fontState.theme !== 0) {
154+
$book[0].className = $book[0].className.replace(/\bcolor-theme-\S+/g, "");
155+
$book.addClass(`color-theme-${fontState.theme}`);
156+
}
157+
}
158+
159+
function init(config) {
160+
// Search for plugin configured font family
161+
const configFamily = getFontFamilyId(config.family);
162+
const configTheme = getThemeId(config.theme);
163+
164+
// Instantiate font state object
165+
fontState = gitbook.storage.get("fontState", {
166+
size: config.size || 2,
167+
family: configFamily,
168+
theme: configTheme
169+
});
170+
171+
update();
172+
}
173+
174+
function updateButtons() {
175+
// Remove existing fontsettings buttons
176+
if (BUTTON_ID) {
177+
gitbook.toolbar.removeButton(BUTTON_ID);
178+
}
179+
180+
// Create buttons in toolbar
181+
BUTTON_ID = gitbook.toolbar.createButton({
182+
icon: "fa fa-font",
183+
label: "Font Settings",
184+
className: "font-settings",
185+
dropdown: [
186+
[
187+
{
188+
text: "A",
189+
className: "font-reduce",
190+
onClick: reduceFontSize
191+
},
192+
{
193+
text: "A",
194+
className: "font-enlarge",
195+
onClick: enlargeFontSize
196+
}
197+
],
198+
$.map(FAMILIES, (family) => {
199+
family.onClick = function (e) {
200+
return changeFontFamily(family.config, e);
201+
};
202+
203+
return family;
204+
}),
205+
$.map(THEMES, (theme) => {
206+
theme.onClick = function (e) {
207+
return changeColorTheme(theme.config, e);
208+
};
209+
210+
return theme;
211+
})
212+
]
213+
});
214+
}
215+
216+
// Init configuration at start
217+
gitbook.events.bind("start", (e, config) => {
218+
const opts = config.fontsettings;
219+
220+
// Generate buttons at start
221+
updateButtons();
222+
223+
// Init current settings
224+
init(opts);
225+
});
226+
227+
// Expose API
228+
gitbook.fontsettings = {
229+
enlargeFontSize: enlargeFontSize,
230+
reduceFontSize: reduceFontSize,
231+
setTheme: changeColorTheme,
232+
setFamily: changeFontFamily,
233+
getThemes: getThemes,
234+
setThemes: setThemes,
235+
getFamilies: getFamilies,
236+
setFamilies: setFamilies
237+
};
238+
});

0 commit comments

Comments
 (0)