summaryrefslogtreecommitdiffstats
path: root/packages/gitbook-plugin
diff options
context:
space:
mode:
Diffstat (limited to 'packages/gitbook-plugin')
-rw-r--r--packages/gitbook-plugin/CONTRIBUTING.md11
-rw-r--r--packages/gitbook-plugin/README.md1
-rw-r--r--packages/gitbook-plugin/package.json39
-rw-r--r--packages/gitbook-plugin/src/cli.js84
-rw-r--r--packages/gitbook-plugin/src/compile.js41
-rw-r--r--packages/gitbook-plugin/src/create.js61
-rw-r--r--packages/gitbook-plugin/src/index.js0
-rw-r--r--packages/gitbook-plugin/template/.eslintignore2
-rw-r--r--packages/gitbook-plugin/template/.eslintrc3
-rw-r--r--packages/gitbook-plugin/template/.gitignore31
-rw-r--r--packages/gitbook-plugin/template/.npmignore2
-rw-r--r--packages/gitbook-plugin/template/index.js10
-rw-r--r--packages/gitbook-plugin/template/src/index.js11
13 files changed, 296 insertions, 0 deletions
diff --git a/packages/gitbook-plugin/CONTRIBUTING.md b/packages/gitbook-plugin/CONTRIBUTING.md
new file mode 100644
index 0000000..19119b6
--- /dev/null
+++ b/packages/gitbook-plugin/CONTRIBUTING.md
@@ -0,0 +1,11 @@
+Compile the CLI using:
+
+```
+npm run dist
+```
+
+Then run the CLI in `lib/`:
+
+```
+./lib/cli.js
+```
diff --git a/packages/gitbook-plugin/README.md b/packages/gitbook-plugin/README.md
new file mode 100644
index 0000000..b2dab88
--- /dev/null
+++ b/packages/gitbook-plugin/README.md
@@ -0,0 +1 @@
+For instructions on how to create plugins, see [GitBook: Create a plugin](toolchain.gitbook.com/api/).
diff --git a/packages/gitbook-plugin/package.json b/packages/gitbook-plugin/package.json
new file mode 100644
index 0000000..9cdc2f8
--- /dev/null
+++ b/packages/gitbook-plugin/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "gitbook-plugin",
+ "version": "4.0.0",
+ "description": "CLI for compiling and testing plugins",
+ "main": "./lib/index.js",
+ "dependencies": {
+ "babel-preset-es2015": "^6.14.0",
+ "babel-preset-react": "^6.11.1",
+ "babelify": "^7.3.0",
+ "browserify": "^13.1.0",
+ "commander": "^2.9.0",
+ "fs-extra": "^0.30.0",
+ "inquirer": "^1.1.3",
+ "q": "^1.4.1",
+ "winston": "^2.2.0"
+ },
+ "devDependencies": {
+ "babel-cli": "^6.14.0",
+ "babel-preset-es2015": "^6.14.0",
+ "babel-preset-react": "^6.11.1",
+ "babel-preset-stage-2": "^6.13.0"
+ },
+ "bin": {
+ "gitbook-plugin": "./lib/cli.js"
+ },
+ "scripts": {
+ "dist": "rm -rf lib/ && babel -d lib/ src/ && chmod +x ./lib/cli.js",
+ "prepublish": "npm run dist"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/GitbookIO/gitbook.git"
+ },
+ "author": "GitBook Inc. <contact@gitbook.com>",
+ "license": "Apache-2.0",
+ "bugs": {
+ "url": "https://github.com/GitbookIO/gitbook/issues"
+ }
+}
diff --git a/packages/gitbook-plugin/src/cli.js b/packages/gitbook-plugin/src/cli.js
new file mode 100644
index 0000000..06e421d
--- /dev/null
+++ b/packages/gitbook-plugin/src/cli.js
@@ -0,0 +1,84 @@
+#! /usr/bin/env node
+
+const program = require('commander');
+const path = require('path');
+const winston = require('winston');
+const inquirer = require('inquirer');
+
+const pkg = require('../package.json');
+const compile = require('./compile');
+const create = require('./create');
+
+const resolve = (input => path.resolve(process.cwd(), input));
+
+program.version(pkg.version);
+winston.cli();
+
+program
+ .command('build [input] [output]')
+ .description('build a browser plugin')
+ .action(function(input, output, options) {
+ compile(resolve(input), resolve(output))
+ .then(
+ () => winston.info('Plugin compiled successfully'),
+ (err) => winston.error('Error: ', err)
+ );
+ });
+
+program
+ .command('create [output]')
+ .description('create a new plugin')
+ .action(function(output, options) {
+ inquirer.prompt([
+ {
+ name: 'title',
+ message: 'Title (as displayed on GitBook.com):'
+ },
+ {
+ name: 'name',
+ message: 'Name (unique identifier for the plugin):'
+ },
+ {
+ name: 'desc',
+ message: 'Description:'
+ },
+ {
+ name: 'github',
+ message: 'GitHub repository URL:'
+ },
+ {
+ name: 'categories',
+ message: 'Categories (as displayed on GitBook.com):',
+ type: 'checkbox',
+ choices: [
+ 'analytics',
+ 'search',
+ 'content',
+ 'structure',
+ 'social',
+ 'visual'
+ ]
+ }
+ ])
+ .then(answers => {
+ output = resolve(output || answers.name);
+ return create(output, answers);
+ })
+ .then(
+ () => winston.info(`Plugin created successfully in "${output}"`),
+ (err) => winston.error('Error: ', err)
+ );
+ });
+
+program
+ .command('test [plugin]')
+ .description('test specs for a plugin')
+ .action(function(plugin, options) {
+
+ });
+
+
+program.parse(process.argv);
+
+// Display help if no arguments
+if (!program.args.length) program.help();
diff --git a/packages/gitbook-plugin/src/compile.js b/packages/gitbook-plugin/src/compile.js
new file mode 100644
index 0000000..61c8777
--- /dev/null
+++ b/packages/gitbook-plugin/src/compile.js
@@ -0,0 +1,41 @@
+const fs = require('fs-extra');
+const Promise = require('q');
+const browserify = require('browserify');
+const babelify = require('babelify');
+
+/**
+ * Compile a plugin to work with "gitbook-core" in the browser.
+ * @param {String} inputFile
+ * @param {String} outputFile
+ * @return {Promise}
+ */
+function compilePlugin(inputFile, outputFile) {
+ const d = Promise.defer();
+ const b = browserify({
+ standalone: 'GitBookPlugin'
+ });
+
+ b.add(inputFile);
+ b.external('react');
+ b.external('react-dom');
+ b.external('gitbook-core');
+ b.transform(babelify, {
+ presets: [
+ require('babel-preset-es2015'),
+ require('babel-preset-react')
+ ]
+ });
+
+ fs.ensureFileSync(outputFile);
+
+ const output = fs.createWriteStream(outputFile);
+
+ b.bundle()
+ .pipe(output)
+ .on('error', (err) => d.reject(err))
+ .on('end', () => d.resolve());
+
+ return d.promise;
+}
+
+module.exports = compilePlugin;
diff --git a/packages/gitbook-plugin/src/create.js b/packages/gitbook-plugin/src/create.js
new file mode 100644
index 0000000..31edb85
--- /dev/null
+++ b/packages/gitbook-plugin/src/create.js
@@ -0,0 +1,61 @@
+const fs = require('fs-extra');
+const path = require('path');
+const GITBOOK_VERSION = require('../package.json').version;
+
+const TEMPLATE_DIR = path.resolve(__dirname, '../template');
+
+/**
+ * Create a new plugin
+ * @param {String} outputDir
+ * @param {String} spec.title
+ * @param {String} spec.name
+ * @param {String} spec.desc
+ * @param {Array} spec.keywords
+ */
+function create(outputDir, spec) {
+ const pkg = {
+ 'title': `${spec.title}`,
+ 'name': `gitbook-plugin-${spec.name}`,
+ 'description': `${spec.desc}`,
+ 'version': '0.0.0',
+ 'main': 'index.js',
+ 'browser': './_assets/plugin.js',
+ 'ebook': './_assets/plugin.js',
+ 'dependencies': {
+ 'gitbook-core': '^' + GITBOOK_VERSION
+ },
+ 'devDependencies': {
+ 'gitbook-plugin': '^' + GITBOOK_VERSION,
+ 'eslint': '3.7.1',
+ 'eslint-config-gitbook': '1.4.0'
+ },
+ 'engines': {
+ 'gitbook': '>=4.0.0-alpha.0'
+ },
+ 'scripts': {
+ 'lint': 'eslint ./',
+ 'build-website': 'gitbook-plugin build ./src/index.js ./_assets/plugin.js',
+ 'prepublish': 'npm run build-website',
+ 'test': 'gitbook-plugin test && npm run lint'
+ },
+ 'homepage': `${spec.github}`,
+ 'keywords': spec.categories.map(category => `gitbook:${category}`),
+ 'repository': {
+ 'type': 'git',
+ 'url': `${spec.github}.git`
+ },
+ 'bugs': {
+ 'url': `${spec.github}/issues`
+ }
+ };
+
+ fs.copySync(TEMPLATE_DIR, outputDir, {
+ clobber: true
+ });
+
+ fs.outputJsonSync(path.resolve(outputDir, 'package.json'), pkg, {
+ spaces: 2
+ });
+}
+
+module.exports = create;
diff --git a/packages/gitbook-plugin/src/index.js b/packages/gitbook-plugin/src/index.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/packages/gitbook-plugin/src/index.js
diff --git a/packages/gitbook-plugin/template/.eslintignore b/packages/gitbook-plugin/template/.eslintignore
new file mode 100644
index 0000000..1d35cda
--- /dev/null
+++ b/packages/gitbook-plugin/template/.eslintignore
@@ -0,0 +1,2 @@
+# Plugin assets
+_assets/plugin.js
diff --git a/packages/gitbook-plugin/template/.eslintrc b/packages/gitbook-plugin/template/.eslintrc
new file mode 100644
index 0000000..90359b2
--- /dev/null
+++ b/packages/gitbook-plugin/template/.eslintrc
@@ -0,0 +1,3 @@
+{
+ "extends": "gitbook/plugin"
+}
diff --git a/packages/gitbook-plugin/template/.gitignore b/packages/gitbook-plugin/template/.gitignore
new file mode 100644
index 0000000..ef47881
--- /dev/null
+++ b/packages/gitbook-plugin/template/.gitignore
@@ -0,0 +1,31 @@
+# Logs
+logs
+*.log
+
+# Runtime data
+pids
+*.pid
+*.seed
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directory
+# Deployed apps should consider commenting this line out:
+# see https://npmjs.org/doc/faq.html#Should-I-check-my-node_modules-folder-into-git
+node_modules
+
+# vim swapfile
+*.swp
+
+# Plugin assets
+_assets/plugin.js
diff --git a/packages/gitbook-plugin/template/.npmignore b/packages/gitbook-plugin/template/.npmignore
new file mode 100644
index 0000000..a0e53cf
--- /dev/null
+++ b/packages/gitbook-plugin/template/.npmignore
@@ -0,0 +1,2 @@
+# Publish assets on NPM
+!_assets/plugin.js
diff --git a/packages/gitbook-plugin/template/index.js b/packages/gitbook-plugin/template/index.js
new file mode 100644
index 0000000..e542ae8
--- /dev/null
+++ b/packages/gitbook-plugin/template/index.js
@@ -0,0 +1,10 @@
+
+module.exports = {
+ blocks: {
+
+ },
+
+ hooks: {
+
+ }
+};
diff --git a/packages/gitbook-plugin/template/src/index.js b/packages/gitbook-plugin/template/src/index.js
new file mode 100644
index 0000000..0fe8869
--- /dev/null
+++ b/packages/gitbook-plugin/template/src/index.js
@@ -0,0 +1,11 @@
+const GitBook = require('gitbook-core');
+
+module.exports = GitBook.createPlugin({
+ activate: (dispatch, getState) => {
+ // Dispatch initialization actions
+ },
+ deactivate: (dispatch, getState) => {
+ // Dispatch cleanup actions
+ },
+ reduce: (state, action) => state
+});