mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-16 15:45:13 +00:00
Add base cache manifest
This commit is contained in:
@@ -18,6 +18,7 @@ var getFiles = function(path) {
|
||||
ig.addIgnoreRules([
|
||||
'.git/',
|
||||
'.gitignore',
|
||||
'.DS_Store'
|
||||
], '__custom_stuff');
|
||||
|
||||
// Push each file to our list
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
var _ = require('lodash');
|
||||
var path = require('path');
|
||||
var Q = require('q');
|
||||
|
||||
var fs = require("./fs");
|
||||
|
||||
var extsToIgnore = [".gz"]
|
||||
|
||||
var Manifest = function() {
|
||||
this.revision = 0;
|
||||
this.clear(Date.now());
|
||||
};
|
||||
|
||||
// Regenerate manifest
|
||||
Manifest.prototype.clear = function(revision) {
|
||||
if (revision) this.revision = revision;
|
||||
this.sections = {
|
||||
'CACHE': {},
|
||||
'NETWORK': {},
|
||||
'FALLBACK': {}
|
||||
};
|
||||
return Q(this);
|
||||
};
|
||||
|
||||
// Add a resource
|
||||
Manifest.prototype.add = function(category, resource, value) {
|
||||
if (_.isArray(resource)) {
|
||||
_.each(resource, function(subres) {
|
||||
this.add(category, subres, value);
|
||||
}, this);
|
||||
return;
|
||||
}
|
||||
this.sections[category][resource] = value;
|
||||
};
|
||||
|
||||
// Add a directory in cache
|
||||
Manifest.prototype.addFolder = function(folder, root, except) {
|
||||
var that = this;
|
||||
root = root || "/";
|
||||
|
||||
return fs.list(folder)
|
||||
.then(function(files) {
|
||||
_.each(
|
||||
// Ignore diretcories
|
||||
_.filter(files, function(file) {
|
||||
return file.substr(-1) != "/" && !_.contains(except, path.join(root, file)) && !_.contains(extsToIgnore, path.extname(file));
|
||||
}),
|
||||
function(file) {
|
||||
that.add("CACHE", path.join(root, file));
|
||||
}
|
||||
);
|
||||
})
|
||||
};
|
||||
|
||||
// Get manifest content
|
||||
Manifest.prototype.dump = function() {
|
||||
var lines = [
|
||||
"CACHE MANIFEST",
|
||||
"# Revision "+this.revision
|
||||
];
|
||||
|
||||
_.each(this.sections, function(content, section) {
|
||||
if (_.size(content) == 0) return;
|
||||
lines.push("");
|
||||
lines.push(section+":");
|
||||
lines = lines.concat(_.keys(content));
|
||||
}, this);
|
||||
|
||||
return Q(lines.join("\n"));
|
||||
};
|
||||
|
||||
module.exports = Manifest;
|
||||
@@ -9,6 +9,7 @@ var parse = require("../../parse");
|
||||
var BaseGenerator = require("../generator");
|
||||
|
||||
var indexer = require('./search_indexer');
|
||||
var Manifest = require('../manifest');
|
||||
|
||||
// Swig filter for returning the count of lines in a code section
|
||||
swig.setFilter('lines', function(content) {
|
||||
@@ -30,6 +31,10 @@ var Generator = function() {
|
||||
|
||||
this.revision = Date.now();
|
||||
this.indexer = indexer();
|
||||
this.manifest = new Manifest(Date.now());
|
||||
this.manifest.add("NETWORK", [
|
||||
'*'
|
||||
]);
|
||||
};
|
||||
util.inherits(Generator, BaseGenerator);
|
||||
|
||||
@@ -119,6 +124,8 @@ Generator.prototype.convertFile = function(content, _input) {
|
||||
});
|
||||
})
|
||||
.then(function(sections) {
|
||||
that.manifest.add("CACHE", _output);
|
||||
|
||||
return that._writeTemplate(that.template, {
|
||||
progress: progress,
|
||||
|
||||
@@ -157,11 +164,22 @@ Generator.prototype.copyAssets = function() {
|
||||
path.join(that.options.theme, "assets"),
|
||||
path.join(that.options.output, "gitbook")
|
||||
)
|
||||
|
||||
// Add to cach manifest
|
||||
.then(function() {
|
||||
return that.manifest.addFolder(path.join(that.options.output, "gitbook"), "gitbook");
|
||||
})
|
||||
|
||||
// Copy plugins assets
|
||||
.then(function() {
|
||||
return Q.all(
|
||||
_.map(that.plugins.list, function(plugin) {
|
||||
return plugin.copyAssets(path.join(that.options.output, "gitbook/plugins/", plugin.name))
|
||||
var pluginAssets = path.join(that.options.output, "gitbook/plugins/", plugin.name);
|
||||
|
||||
return plugin.copyAssets(pluginAssets)
|
||||
.then(function() {
|
||||
return that.manifest.addFolder(pluginAssets, "gitbook/plugins/"+plugin.name);
|
||||
});
|
||||
})
|
||||
);
|
||||
})
|
||||
@@ -175,9 +193,19 @@ Generator.prototype.writeSearchIndex = function() {
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
// Add cache manifest
|
||||
Generator.prototype.writeCacheManifest = function() {
|
||||
return fs.writeFile(
|
||||
path.join(this.options.output, 'manifest.appcache'),
|
||||
this.manifest.dump()
|
||||
);
|
||||
};
|
||||
|
||||
Generator.prototype.finish = function() {
|
||||
return this.copyAssets()
|
||||
.then(this.writeSearchIndex);
|
||||
.then(this.writeSearchIndex)
|
||||
.then(this.writeCacheManifest);
|
||||
};
|
||||
|
||||
module.exports = Generator;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html lang="en-US">
|
||||
<html lang="en-US" {% block htmlTag %}{% endblock %}>
|
||||
<head prefix="og: http://ogp.me/ns# book: http://ogp.me/ns/book#">
|
||||
{% block head %}
|
||||
<meta charset="UTF-8">
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{% extends "layout.html" %}
|
||||
|
||||
{% block htmlTag %}manifest="{{ baseBase }}/manifest.appcache"{% endblock %}
|
||||
{% block title %}{{ progress.current.title }}{% parent %}{% endblock %}
|
||||
{% block content %}
|
||||
<div class="book" {% if githubId %}data-github="{{ githubId }}"{% endif %} data-level="{{ progress.current.level }}" data-basepath="{{ basePath }}" data-revision="{{ revision }}">
|
||||
|
||||
Reference in New Issue
Block a user