Citoid

Citoid is a node.js service which locates citation data given an identifier or search term (such as URL), for use by RefToolbar and VisualEditor.

Installation
In order to have citoid functioning on your wiki in conjunction with VisualEditor, you'll need the following: VisualEditor and Parsoid, VisualEditor's Citation Tool, and a working installation of Zotero's translation server.

It is recommended that you have the following extensions in your extension folder: Extension:VisualEditor, Extension:Scribunto, Extension:Cite, Extension:TemplateData, and Extension:ParserFunctions, and Extension:Citoid.

VisualEditor and Citation Tool

 * 1) Set up MediaWiki: Manual:Installation_guide
 * 2) Set up Parsoid: Parsoid/Setup
 * 3) Set up VisualEditor: Extension:VisualEditor
 * 4) Set up Citation Tool: VisualEditor/Citation tool

Zotero's translation server
See: Translation-server installation instructions

Get the code
If you want to do an anonymous checkout:

Or if you plan to hack citoid, then please follow the Gerrit 'getting started' docs and use an authenticated checkout url instead, such as:

Nodejs
Install nodejs 0.10 and npm. When you are using Ubuntu and depending on OS version you will not end up with the most recent version of nodejs.

For other systems, see:
 * http://nodejs.org/download/
 * https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager
 * (debian squeeze, wheezy) https://gist.github.com/x-Code-x/2562576

JS dependencies
Install the JS dependencies. Run this command in the citoid directory:

Run the server
You should be able to start the citoid web service from the citoid directory using:

This will start the citoid service on port 1970. To test it, try a sample query:

Implementation
The citoid module will be a node.js service. A rough description of how the service would work is as follows:


 * 1) [client js] VisualEditor makes query for reference
 * 2) [node js] citoid considers cache and either responds with the previously stored result or…
 * 3) [third party] Query against DOI/ISBN/ISSN/URL sources and return citation.

Design
ID handlers:


 * ISBN/ISSN: - > WorldCat Search API
 * DOI: -> Send accept header to CrossRef.
 * If 204, resolve URL and send to Zotero.
 * If 404 or 406, fail.
 * URL: -> If DOI, send to DOI: handler. Else, send to Zotero.

There are two ways to get citations, DOI via cross ref and Zotero; which is better? Should URLs with DOI ids be sent to cross ref, or DOIs be resolved into URLs and sent to Zotero?

Related extensions and services

 * Zotero translation server -- xpcshell-based Zotero translation server, and https://github.com/zotero/zotero-node, an abandoned and old nodejs equivalent
 * Zotero field mappings, including vs. some cite templates
 * Wikipedia citation templates
 * VisualEditor/Citation_tool
 * Sample cite-tool definition on Wikipedia Beta
 * Restface (node.js restful api)