Update
This commit is contained in:
parent
f61fa5c8b4
commit
9f4975dbe5
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,2 @@
|
|||||||
/_book
|
/_book
|
||||||
/node_modules
|
/node_modules
|
||||||
/gitbook
|
|
||||||
|
240
gitbook/gitbook-plugin-fontsettings/fontsettings.js
Normal file
240
gitbook/gitbook-plugin-fontsettings/fontsettings.js
Normal file
@ -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
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
|
7
gitbook/gitbook-plugin-lunr/lunr.min.js
vendored
Normal file
7
gitbook/gitbook-plugin-lunr/lunr.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
59
gitbook/gitbook-plugin-lunr/search-lunr.js
Normal file
59
gitbook/gitbook-plugin-lunr/search-lunr.js
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
require([
|
||||||
|
'gitbook',
|
||||||
|
'jquery'
|
||||||
|
], function(gitbook, $) {
|
||||||
|
// Define global search engine
|
||||||
|
function LunrSearchEngine() {
|
||||||
|
this.index = null;
|
||||||
|
this.store = {};
|
||||||
|
this.name = 'LunrSearchEngine';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize lunr by fetching the search index
|
||||||
|
LunrSearchEngine.prototype.init = function() {
|
||||||
|
var that = this;
|
||||||
|
var d = $.Deferred();
|
||||||
|
|
||||||
|
$.getJSON(gitbook.state.basePath+'/search_index.json')
|
||||||
|
.then(function(data) {
|
||||||
|
// eslint-disable-next-line no-undef
|
||||||
|
that.index = lunr.Index.load(data.index);
|
||||||
|
that.store = data.store;
|
||||||
|
d.resolve();
|
||||||
|
});
|
||||||
|
|
||||||
|
return d.promise();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Search for a term and return results
|
||||||
|
LunrSearchEngine.prototype.search = function(q, offset, length) {
|
||||||
|
var that = this;
|
||||||
|
var results = [];
|
||||||
|
|
||||||
|
if (this.index) {
|
||||||
|
results = $.map(this.index.search(q), function(result) {
|
||||||
|
var doc = that.store[result.ref];
|
||||||
|
|
||||||
|
return {
|
||||||
|
title: doc.title,
|
||||||
|
url: doc.url,
|
||||||
|
body: doc.summary || doc.body
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return $.Deferred().resolve({
|
||||||
|
query: q,
|
||||||
|
results: results.slice(0, length),
|
||||||
|
count: results.length
|
||||||
|
}).promise();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Set gitbook research
|
||||||
|
gitbook.events.bind('start', function(e, config) {
|
||||||
|
var engine = gitbook.search.getEngine();
|
||||||
|
if (!engine) {
|
||||||
|
gitbook.search.setEngine(LunrSearchEngine, config);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
50
gitbook/gitbook-plugin-search/search-engine.js
Normal file
50
gitbook/gitbook-plugin-search/search-engine.js
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
require([
|
||||||
|
'gitbook',
|
||||||
|
'jquery'
|
||||||
|
], function(gitbook, $) {
|
||||||
|
// Global search objects
|
||||||
|
var engine = null;
|
||||||
|
var initialized = false;
|
||||||
|
|
||||||
|
// Set a new search engine
|
||||||
|
function setEngine(Engine, config) {
|
||||||
|
initialized = false;
|
||||||
|
engine = new Engine(config);
|
||||||
|
|
||||||
|
init(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize search engine with config
|
||||||
|
function init(config) {
|
||||||
|
if (!engine) throw new Error('No engine set for research. Set an engine using gitbook.research.setEngine(Engine).');
|
||||||
|
|
||||||
|
return engine.init(config)
|
||||||
|
.then(function() {
|
||||||
|
initialized = true;
|
||||||
|
gitbook.events.trigger('search.ready');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Launch search for query q
|
||||||
|
function query(q, offset, length) {
|
||||||
|
if (!initialized) throw new Error('Search has not been initialized');
|
||||||
|
return engine.search(q, offset, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get stats about search
|
||||||
|
function getEngine() {
|
||||||
|
return engine? engine.name : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isInitialized() {
|
||||||
|
return initialized;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize gitbook.search
|
||||||
|
gitbook.search = {
|
||||||
|
setEngine: setEngine,
|
||||||
|
getEngine: getEngine,
|
||||||
|
query: query,
|
||||||
|
isInitialized: isInitialized
|
||||||
|
};
|
||||||
|
});
|
4
gitbook/gitbook.js
Normal file
4
gitbook/gitbook.js
Normal file
File diff suppressed because one or more lines are too long
4
gitbook/theme.js
Normal file
4
gitbook/theme.js
Normal file
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user