Authoring Books directly on GitHub using only Javascript
=================
Connexions
------------
Connexions publishes remixable, openly licensed textbooks in EPUB, PDF, and in
print using a single source format.
The format is currently XML but we are converting to a semantic HMTL5 format specialized for textbooks.
GitHub Book Editor
--------------------
GitHub provides technical solutions to many authoring needs like revision
control, rollback, issue tracking, and submitting edits but in a
programmer-centric way.
I have taken the authoring tools we are creating and made an EPUB3 editor that
only relies on GitHub's API; no special webserver is necessary.
Using this JavaScript-based editor, an unzipped EPUB can be committed into a
GitHub repository and modified using GitHub's API.
Regenerating the EPUB is trivial (GitHub offers a “Download as Zip” button) and
generating a PDF is simple (using “commit hooks”).
By creating an author-friendly (as opposed to programmer-friendly) User
Interface to GitHub we can leverage existing, popular tools and change how
people author and remix textbooks.
Some of the challenges we faced in creating the editor may be of interest to
other participants in the workshop.
As an open-source programmer I'm also interested in finding ways to share and
reuse common tools that benefit all of us.
Simulating CSS3 extensions for Paged Media and Generated Content
--------------------------------------------------------------------
When writing remixable textbooks, it is crucial to have semantically related
content near each other in the HTML even if it is presented elsewhere in a
book. Some examples include collating references at the end of a chapter, solutions
at the end of a book, and having hyperlinks change their display text when the
title of the target changes.
We have been using XSLT to perform these transformations of HTML but these XSLT
files are difficult to maintain because of the expertise needed and all the
possible permutations for different books.
Fortunately, there are w3c drafts that specify how these could be done using
CSS but browsers have little incentive to implement these.
To bridge this gap I have written emulators for some of the advanced CSS
operations our books use but are not yet implemented in browsers. I would also
be happy to discuss how I "emulate" some of the optional CSS3 modules like:
- http://www.w3.org/TR/css3-content/#moving
- http://www.w3.org/TR/css3-gcpm/#the-target-text-value
Having tools that support these extensions might be useful to many participants
and combining our efforts could help all of our projects.
Accessible Math
------------------
For textbooks, we frequently need to render accessible mathematics in different
formats and contexts (print, mobile, online). So that textbooks remain
accessible to learners with varying abilities, the math must be delivered in
ways that work for visually impaired learners. MathJax provides powerful
building blocks for rendering math. ChromeVox recently released support for
voicing math. Both currently work as client-side javascript libraries, but that
doesn't provide a solution for EPUB, so I am also working with others on
generating accessible Math by using server-side MathJax and ChromeVox.
- Philip Schatz