Skip to content

Commit

Permalink
Merge pull request #53 from substance/devel
Browse files Browse the repository at this point in the history
First Alpha release
  • Loading branch information
oliver7654 authored Jul 6, 2016
2 parents f558c53 + 1867df3 commit ed56e5f
Show file tree
Hide file tree
Showing 252 changed files with 6,222 additions and 1,818 deletions.
127 changes: 127 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
module.exports = {
"env": {
"browser": true,
"commonjs": true,
"node": true
},
"extends": "eslint:recommended",
"globals": {
"QUnit": true
},
"rules": {
// 0 - off, 1 - warning, 2 - error
"indent": ["error", 2, { "SwitchCase": 1 }],
"semi": [2, "always"],
"comma-dangle": [2, "only-multiline"],
"no-cond-assign": 2,
"no-console": [2, { allow: ["warn", "info", "error", "assert"] }],
"no-constant-condition": 2,
"no-control-regex": 2,
"no-debugger": 2,
"no-dupe-args": 2,
"no-dupe-keys": 2,
"no-duplicate-case": 2,
"no-empty": 1,
"no-empty-character-class": 2,
"no-ex-assign": 2,
"no-extra-boolean-cast": 2,
"no-extra-parens": 0,
"no-extra-semi": 2,
"no-func-assign": 2,
"no-inner-declarations": 2,
"no-invalid-regexp": 2,
"no-irregular-whitespace": 2,
"no-negated-in-lhs": 2,
"no-obj-calls": 2,
// turned of as we want to be able to use this.hasOwnProperty() for instance
"no-prototype-builtins": 0,
"no-regex-spaces": 2,
"no-sparse-arrays": 0,
"no-unexpected-multiline": 2,
"no-unreachable": 2,
"no-unsafe-finally": 2,
"use-isnan": 2,
"valid-jsdoc": 0,
"valid-typeof": 2,
"strict": [2, "safe"],

// Best practices
"accessor-pairs": 0,
"array-callback-return": 2,
"block-scoped-var": 2,
"complexity": [0, 10],
"consistent-return": 0,
"curly": [2, "multi-line"],
"default-case": 2,
"dot-location": [2, 'property'],
"dot-notation": 0,
"eqeqeq": 2,
"guard-for-in": 2,
"no-alert": 2,
"no-caller": 2,
"no-case-declarations": 2,
"no-div-regex": 2,
"no-else-return": 0,
"no-empty-function": 0,
// if you want to check for undefined or null use lodash/isNil
"no-eq-null": 2,
"no-eval": 2,
"no-extend-native": 2,
"no-extra-bind": 2,
"no-extra-label": 2,
"no-fallthrough": 2,
"no-floating-decimal": 2,
"no-implicit-coercion": 2,
"no-implicit-globals": 2,
"no-implied-eval": 2,
"no-invalid-this": 2,
"no-iterator": 2,
"no-labels": 2,
"no-lone-blocks": 0,
"no-loop-func": 2,
"no-magic-numbers": 0,
"no-multi-spaces": 2,
"no-multi-str": 0,
"no-native-reassign": 2,
"no-new": 0,
"no-new-func": 0,
"no-new-wrappers": 2,
"no-octal": 2,
"no-octal-escape": 2,
"no-param-reassign": 0,
"no-proto": 2,
"no-redeclare": 2,
"no-return-assign": 2,
"no-script-url": 2,
"no-self-assign": 2,
"no-self-compare": 2,
"no-sequences": 2,
"no-throw-literal": 2,
"no-unmodified-loop-condition": 2,
"no-unused-expressions": 2,
"no-unused-labels": 2,
"no-useless-call": 2,
"no-useless-concat": 2,
"no-useless-escape": 2,
"no-void": 2,
"no-warning-comments": 0,
"no-with": 2,
"radix": 2,
"vars-on-top": 0,
"wrap-iife": 2,
"yoda": 0,
// variables
"init-declarations": 0,
"no-catch-shadow": 2,
"no-delete-var": 2,
"no-label-var": 2,
"no-restricted-globals": 2,
"no-shadow": 0,
"no-shadow-restricted-names": 2,
"no-undef": 2,
"no-undef-init": 2,
"no-undefined": 0,
"no-unused-vars": 2,
"no-use-before-define": [2, { "functions": false }]
}
};
8 changes: 8 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
language: node_js
cache:
directories:
- node_modules
node_js:
- "4"
before_script:
- 'npm install'
87 changes: 87 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# Implement a new JATS element

Each JATS element is realized as a [package](https://github.com/substance/scientist/tree/devel/packages/jats/caption), containing a node definition, a converter and a component for rendering / editing.

## Choose the right node type

When you add support for a new element, you have to choose a Substance node type. Use this check list to find out what kind of element it is.

### Text

- Does the element contain annotated text?

Example elements: `<p>`, `<title>`

### Annotation

- Is the element used for formatting, highlighting?
- Can the cursor move inside the element, changing its text?

Example elements: `<bold>`, `<ext-link>`

### Inline

- Does the element behave like a single text character in the text flow?
- Is the element content generated (e.g. a label)?
- Is the element content a graphic?
- Is the content of the node immutable to text editing and can only be deleted as a whole?

Example elements: `<xref>`

### Container

- Does the element define a sequence of nodes?
- Can the order of the nodes be changed by the user?

Example elements: `<body>`, `<front>`, `<back>`, `<sec>`

### DocumentNode

- Does your element not fit into any of the previous types?

Example elements: `<fig>`, `<ref-list>`


## Define a new node class

Use the following examples as a reference implementation.

- [Paragraph](https://github.com/substance/scientist/blob/devel/packages/jats/paragraph/Paragraph.js) (Text Node)
- [ExtLink](https://github.com/substance/scientist/blob/devel/packages/jats/ext-link/ExtLink.js) (Annotation Node)
- [XRef](https://github.com/substance/scientist/blob/devel/packages/jats/xref/XRef.js) (Inline Node)
- [Body](https://github.com/substance/scientist/blob/devel/packages/jats/body/Body.js) (Container Node)
- [Figure](https://github.com/substance/scientist/blob/devel/packages/jats/figure/Figure.js) (Document Node)


## Define a converter

A converter is need to map from JATS XML to Substance document nodes.

- [Paragraph Converter](https://github.com/substance/scientist/blob/devel/packages/jats/paragraph/ParagraphConverter.js) (Text Node)
- [ExtLink Converter](https://github.com/substance/scientist/blob/devel/packages/jats/ext-link/ExtLinkConverter.js) (Annotation Node)
- [XRef Converter](https://github.com/substance/scientist/blob/devel/packages/jats/xref/XRefConverter.js) (Inline Node)
- [Body Converter](https://github.com/substance/scientist/blob/devel/packages/jats/body/BodyConverter.js) (Container Node)
- [Figure Converter](https://github.com/substance/scientist/blob/devel/packages/jats/figure/FigureConverter.js) (Document Node)


## Write a converter test

It's important you test your converter throughly. The following examples can be used as a reference.


- [Paragraph Test](https://github.com/substance/scientist/blob/devel/test/jats/paragraph.test.js) (Text Node)
- [ExtLink Test](https://github.com/substance/scientist/blob/devel/test/jats/ext-link.test.js) (Annotation Node)
- [XRef Test](https://github.com/substance/scientist/blob/devel/test/jats/xref-link.test.js) (Inline Node)
- [Body Test](https://github.com/substance/scientist/blob/devel/test/jats/body-link.test.js) (Container Node)
- [Figure Test](https://github.com/substance/scientist/blob/devel/test/jats/figure.test.js) (Document Node)


## Defining a component

In order to make the content editable, you have to define components for each JATS element.

- [Paragraph Component](https://github.com/substance/scientist/blob/devel/packages/jats/paragraph/Paragraph.js) (Text Node)
- [ExtLink Component](https://github.com/substance/scientist/blob/devel/packages/jats/ext-link/ExtLink.js) (Annotation Node)
- [XRef Component](https://github.com/substance/scientist/blob/devel/packages/jats/xref/XRef.js) (Inline Node)
- [Body Component](https://github.com/substance/scientist/blob/devel/packages/jats/body/Body.js) (Container Node)
- [Figure Component](https://github.com/substance/scientist/blob/devel/packages/jats/figure/Figure.js) (Document Node)
42 changes: 38 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Substance Scientist
# Substance Scientist [![Build Status](https://travis-ci.org/substance/scientist.svg?branch=devel)](https://travis-ci.org/substance/scientist)

# Install
This is a work-in progress. The project name Scientist is temporary and may be changed with the first beta release.

## Install

Clone the repository.

Expand Down Expand Up @@ -28,13 +30,44 @@ $ npm run start

And navigate to [http://localhost:5001](http://localhost:5001)

# Bundle examples
To run the tests in the browser navigate to `http://localhost:5001/test`

To run the test suite headless:

```
$ npm test
```

## Contribute

See [CONTRIBUTING.md](CONTRIBUTING.md).

<!--# Bundle examples
```bash
$ npm run bundle
```
-->

## Roadmap

### Beta

*ETA: Fall 2016*

- First class JATS editing
- Author mode (classic word-style editing)
- Publisher mode (visual JATS editing)
- Add references via CrossRef search or pasting BibTex
- Visually select xref targets.


### Beta 2

- Math support (inline and block formulas)
- Structure mode (restructure sections with a dedicated interface)


# JATS Support Status
<!-- # JATS Support Status
This matrix shows which JATS elements are currently supported
Expand Down Expand Up @@ -311,3 +344,4 @@ This matrix shows which JATS elements are currently supported
| `<x>` | no |
| `<xref>` | no |
| `<year>` | no |
-->
19 changes: 8 additions & 11 deletions examples/ExampleXMLStore.js
Original file line number Diff line number Diff line change
@@ -1,27 +1,24 @@
'use strict';

var oo = require('substance/util/oo');
var jQuery = require('jquery');
var request = require('substance/util/request');

function ExampleXMLStore() {

}

ExampleXMLStore.Prototype = function() {
this.readXML = function(documentId, cb) {
jQuery.ajax('/data/'+documentId+'.xml', {
dataType: 'text'
})
.done(function(data) {
cb(null, data);
}.bind(this))
.fail(function(xhr, status, err) {
cb(err);
}.bind(this));
var cached = localStorage.getItem(documentId);
if (cached) {
return cb(null, cached);
}
request('GET', '../data/'+documentId+'.xml', null, cb);
};

// TODO make functional
this.writeXML = function(documentId, xml, cb) {
localStorage.setItem(documentId, xml);
cb(null);
};
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ MiniJournal.Prototype = function() {

var _super = MiniJournal.super.prototype;

this.getDefaultPage = function() {
this.getDefaultPage = function() {
return 'dashboard';
};

Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
1 change: 1 addition & 0 deletions examples/__mini-journal/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This is not functional yet. We just wanted to preserve an earlier working implementation using substance/ui/ResponsiveApplication.
5 changes: 5 additions & 0 deletions examples/config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
'use strict';

module.exports = {
examples: ['jats-editor', 'science-writer']
};
2 changes: 1 addition & 1 deletion examples/data/elife-00007.xml

Large diffs are not rendered by default.

Loading

0 comments on commit ed56e5f

Please sign in to comment.