Update
This commit is contained in:
		
							parent
							
								
									f61fa5c8b4
								
							
						
					
					
						commit
						9f4975dbe5
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -1,3 +1,2 @@
 | 
			
		||||
/_book
 | 
			
		||||
/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