diff --git a/Makefile b/Makefile index 01f30701b..ab720f284 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,20 @@ -doc_dirs = doc $(wildcard doc/*/) -outdoc_dirs = out $(addprefix out/,$(doc_dirs)) doc_sources = $(wildcard doc/*/*.md) $(wildcard doc/*.md) outdoc_files = $(addprefix out/,$(doc_sources:.md=.html)) -docs: $(outdoc_files) +docassets = $(addprefix out/,$(wildcard doc/_assets/*)) + +VERSION = $(shell node -e "console.log( require('./src/package.json').version )") + +docs: $(outdoc_files) $(docassets) + +out/doc/_assets/%: doc/_assets/% + mkdir -p $(@D) + cp $< $@ out/doc/%.html: doc/%.md mkdir -p $(@D) node tools/doc/generate.js --format=html --template=doc/template.html $< > $@ + cat $@ | sed 's/__VERSION__/${VERSION}/' > $@ clean: rm -rf out/ diff --git a/doc/_assets/style.css b/doc/_assets/style.css new file mode 100644 index 000000000..fe1343af4 --- /dev/null +++ b/doc/_assets/style.css @@ -0,0 +1,44 @@ +body.apidoc { + width: 60%; + min-width: 10cm; + margin: 0 auto; +} + +#header { + background-color: #5a5; + padding: 10px; + color: #111; +} + +a, +a:active { + color: #272; +} +a:focus, +a:hover { + color: #050; +} + +#apicontent a.mark, +#apicontent a.mark:active { + float: right; + color: #BBB; + font-size: 0.7cm; + text-decoration: none; +} +#apicontent a.mark:focus, +#apicontent a.mark:hover { + color: #AAA; +} + +#apicontent code { + padding: 1px; + background-color: #EEE; + border-radius: 4px; + border: 1px solid #DDD; +} +#apicontent pre>code { + display: block; + overflow: auto; + padding: 5px; +} \ No newline at end of file diff --git a/doc/api/api.md b/doc/api/api.md index 8ab5b3bdc..eb5bb9c9b 100644 --- a/doc/api/api.md +++ b/doc/api/api.md @@ -1,6 +1,6 @@ @include embed_parameters @include http_api -@include hooks +@include hooks_overview @include hooks_client-side @include hooks_server-side @include editorInfo diff --git a/doc/api/hooks.md b/doc/api/hooks_overview.md similarity index 100% rename from doc/api/hooks.md rename to doc/api/hooks_overview.md diff --git a/doc/template.html b/doc/template.html index 2eb939872..6416da943 100644 --- a/doc/template.html +++ b/doc/template.html @@ -2,12 +2,12 @@ - __SECTION__ Etherpad-Lite Manual & Documentation - + __SECTION__ - Etherpad Lite v__VERSION__ Manual & Documentation +
diff --git a/src/node/server.js b/src/node/server.js index b91b0e17c..327fa166f 100755 --- a/src/node/server.js +++ b/src/node/server.js @@ -21,31 +21,49 @@ * limitations under the License. */ +var log4js = require('log4js') + , async = require('async') + ; + // set up logger -var log4js = require('log4js'); log4js.replaceConsole(); -var settings = require('./utils/Settings'); - -//set loglevel -log4js.setGlobalLogLevel(settings.loglevel); - -var db = require('./db/DB'); -var async = require('async'); -var plugins = require("ep_etherpad-lite/static/js/pluginfw/plugins"); -var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks"); +var settings + , db + , plugins + , hooks; var npm = require("npm/lib/npm.js"); -hooks.plugins = plugins; - async.waterfall([ + // load npm + function(callback) { + npm.load({}, function(er) { + callback(er) + }) + }, + + // load everything + function(callback) { + settings = require('./utils/Settings'); + db = require('./db/DB'); + plugins = require("ep_etherpad-lite/static/js/pluginfw/plugins"); + hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks"); + hooks.plugins = plugins; + + //set loglevel + log4js.setGlobalLogLevel(settings.loglevel); + callback(); + }, + //initalize the database function (callback) { db.init(callback); }, - plugins.update, + function(callback) { + plugins.update(callback) + }, function (callback) { console.info("Installed plugins: " + plugins.formatPlugins()); diff --git a/src/package.json b/src/package.json index e4e9b9c35..c3c4968a6 100644 --- a/src/package.json +++ b/src/package.json @@ -27,6 +27,7 @@ "jsdom-nocontextifiy" : "0.2.10", "async-stacktrace" : "0.0.2", "npm" : "1.1.x", + "npm-registry-client" : "0.2.10", "ejs" : "0.6.1", "graceful-fs" : "1.1.5", "slide" : "1.1.3", diff --git a/src/static/js/pluginfw/installer.js b/src/static/js/pluginfw/installer.js index e7c6fb809..d668e549e 100644 --- a/src/static/js/pluginfw/installer.js +++ b/src/static/js/pluginfw/installer.js @@ -1,7 +1,12 @@ var plugins = require("ep_etherpad-lite/static/js/pluginfw/plugins"); var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks"); var npm = require("npm"); -var registry = require("npm/lib/utils/npm-registry-client/index.js"); +var RegClient = require("npm-registry-client") + +var registry = new RegClient( +{ registry: "http://registry.npmjs.org" +, cache: npm.cache } +); var withNpm = function (npmfn, final, cb) { npm.load({}, function (er) { @@ -72,7 +77,7 @@ exports.search = function(query, cache, cb) { cb(null, exports.searchCache); } else { registry.get( - "/-/all", null, 600, false, true, + "/-/all", 600, false, true, function (er, data) { if (er) return cb(er); exports.searchCache = data; diff --git a/src/static/js/pluginfw/plugins.js b/src/static/js/pluginfw/plugins.js index 12ba94a27..e02c1331a 100644 --- a/src/static/js/pluginfw/plugins.js +++ b/src/static/js/pluginfw/plugins.js @@ -1,7 +1,5 @@ var npm = require("npm/lib/npm.js"); var readInstalled = require("./read-installed.js"); -var relativize = require("npm/lib/utils/relativize.js"); -var readJson = require("npm/lib/utils/read-json.js"); var path = require("path"); var async = require("async"); var fs = require("fs"); diff --git a/src/static/js/pluginfw/read-installed.js b/src/static/js/pluginfw/read-installed.js index cc03b3579..800ee32cd 100644 --- a/src/static/js/pluginfw/read-installed.js +++ b/src/static/js/pluginfw/read-installed.js @@ -94,8 +94,21 @@ var npm = require("npm/lib/npm.js") , path = require("path") , asyncMap = require("slide").asyncMap , semver = require("semver") - , readJson = require("npm/lib/utils/read-json.js") - , log = require("npm/lib/utils/log.js") + , log = require("log4js").getLogger('pluginfw') + +function readJson(file, callback) { + fs.readFile(file, function(er, buf) { + if(er) { + callback(er); + return; + } + try { + callback( null, JSON.parse(buf.toString()) ) + } catch(er) { + callback(er) + } + }) +} module.exports = readInstalled @@ -274,7 +287,7 @@ function findUnmet (obj) { } }) - log.verbose([obj._id], "returning") + log.debug([obj._id], "returning") return obj } diff --git a/tools/doc/html.js b/tools/doc/html.js index c52fff70a..700ab18cc 100644 --- a/tools/doc/html.js +++ b/tools/doc/html.js @@ -48,7 +48,6 @@ function render(lexed, filename, template, cb) { template = template.replace(/__FILENAME__/g, filename); template = template.replace(/__SECTION__/g, section); - template = template.replace(/__VERSION__/g, process.version); template = template.replace(/__TOC__/g, toc); // content has to be the last thing we do with