Online -kollaborative Markdown mit Math. Hauptmerkmale:
Angetrieben von Codemirror, Mathjax und Firepase's FirePad. Ich verwende "cm" = codemirror, "mj" = mathjax Abkürzungen viel im Projekt.
Alpha -Qualität - frisst Ihre Mathematik, verbrennt Ihre Lesezeichen und enthüllt Ihre Geheimnisse. Ich meine es. Sehen Sie zum Beispiel Nr. 85 - Rettung wird manchmal für ein halbes Jahr schweigend gebrochen! Ich arbeite daran, es robuster (und getestet) zu machen, aber fürs Erste sei vorsichtig.
Probleme:
Mein Code steht unter MIT -Lizenz. Ausnahme: Schriftart/ enthält eine untergrenzte Bitstream -Charter -Schriftart unter einer liquisiten Lizenz - siehe Schriftarten/ Lizenz.
Abhängigkeiten:
Codemirror ist auch MIT.
Mathjax befindet sich unter Apache -Lizenz 2.0.
Mein Codemirror-Mathjax-Kleber ist ebenfalls MIT.
Der kollaborative Herausgeber FirePad ist MIT. Es nennt Firebase Javascipt API.
Firebase ist ein proprietärer Dienst; Ihre kundenseitige Javascipt-API Firebase.js ist ebenfalls proprietär, obwohl es anscheinend in Ordnung ist, in der Praxis zu verteilen-(Nr. 4). [Firbease.js wurde versehentlich mit einem MIT-lizenziert, aber ich habe auf neuere Versionen aktualisiert, damit dies nicht zutrifft.]
Ich füge nicht direkt Firebase.js ein, sondern verwende es als Git -Submodul.
Alle Benutzerdaten werden in Firebase gespeichert, das jetzt von Google gehört. Ihre Datenschutzrichtlinie. Dokumente Zugriff (gelesen und bearbeiten) erfolgt mit einer geheimen Dokument -ID, die Teil der URL ist. Dies ist grob unsicher, wenn HTTPS verwendet wird.
Der Nachteil ist, dass Benutzer ihre Daten nicht wirklich kontrollieren können. Wenn Sie eine "selbst gehostete" Kopie der Website ausführen, bleibt alle Daten in den Händen von Firebase. Weitere Diskussionen finden Sie in #4.
Der Aufwärtstrend ist alle gabeln zusammen. Sie können das Design ändern oder den Editor optimieren und dennoch auf die gleichen Dokumente zugreifen. Z.
Ich bin so weit auf dem kostenlosen Firebase -Plan - 100 Geräte (nicht sicher, ob 1: 1 mit Benutzern), 1 GB Datenspeicher (verwendet <100 MB). => Benötigt 49USD/Mo-Plan, sobald ich nicht zu vernachlässigen Gebrauch bekomme. https://mathdown.firebaseio.com/?page=analytics (nur für mich sichtbar)
Die aktuellen FireBase-Sicherheitsregeln lassen nur den Dokumentenhistorie angehängt. Das ist eine schöne Sicherheitsfunktion, aber es bedeutet, dass die vollständige Geschichte für die Welt für immer zugänglich ist, sobald die URL eines Dokuments ausgeht. Dies muss sich schließlich ändern (#92).
Grundsätzlich auch immer, was auch immer Codemirror unterstützt: IE8+ und über alles andere. Aber Mobile ist derzeit fast unbrauchbar (#81).
JavaScript ist erforderlich (und dies umfasst das Ausführen der nicht freien Firebase.js in Ihrem Browser). Sie können Dokumente ohne JavaScript nicht einmal lesen. Das Lesen wird nicht schwer zu beheben (Nr. 7)-aber das Bearbeiten von Dokumenten ohne JavaScript ist unplausibel (ich plane, mich mit Nur-Append-Formular zufrieden zu geben).
Die einzigen Kekse, von denen ich weiß:
mjx.menu Cookie Set für ein Jahr (?) Wenn Sie die Mathjax -Einstellungen manuell ändern.Ich bin mir nicht sicher, ob Firebase nie Cookies setzt. Die Dinge werden sich ändern, sobald ich die Anmeldung implementiert (#50).
Führen Sie dies nach dem Auschecken aus, um kundenseitige Abhängigkeiten zu materialisieren:
GIT -Submodul -Update - -init -recursive
Anhängen --remote zum Upgrade auf die neuesten Versionen aller Submodules (müssen danach festgelegt werden, wenn sich etwas geändert hat). Bekannte Einschränkungen zur Aktualisierung aller DEPs:
* firepad only includes pre-built dist/firepad.js in tagged versions (after every release they strip it back).
* [CodeMirror-MathJax currently doesn't support MathJax 2.5](https://github.com/cben/CodeMirror-MathJax/issues/33).
(Ich arbeite direkt in gh-pages -Zweig ohne master Zweig. GH-Seiten behebt automatisch https: // ... submodules. Es ist nicht mehr das primäre Hosting, aber es ist immer noch nützlich, die statische Version zu testen.)
So installieren Sie serverseitige Abhängigkeiten (und devDependencies), die in package.json Run:
npm install
(Bei der Bereitstellung für RhCloud oder Heroku kann die NPM --production möglicherweise nicht verfügbar sein.)
Um festzustellen, ob Aktualisierungen benötigt/möglich sind, führen Sie npm outdated . Zum Aktualisieren von Lauf:
npm update --save
npm shrinkwrap
Then commit the new `package.json` and `npm-shrinkwrap.json`.
TODO: Finden Sie Weg, um die gleiche Node.js -Version in Dev und Prod zu verwenden?
test/browser-on-saucelabs.spec.coffee führt Tests auf mehreren Browsern mit kostenlosen Browser-Tests mit freundlicher Genehmigung von Sause-Labors aus. Es gibt pathetisch nur wenige Tests.
Um die Tests durchzuführen:
npm install # once
npm test
Um nur einige Tests und/oder Browser auszuführen, verwenden Sie:
./node_modules/.bin/mocha --grep firefox
Der Test läuft automatisch in jedem Commit and Pull -Anfrage. Ich habe dafür mehrere kostenlose Dienste ausprobiert und bevorzugt derzeit Travis:
.travis.yml .wercker.yml ..travis.yml .Der Haupteinsatz wird derzeit auf Heroku ausgeführt. Weitere Informationen finden Sie unter Bereitstellung/ Unterverzeichnis. Ich bin daran interessiert, wieder zum statischen Hosting zurückzukehren.
Wie auch immer Sie es ausführen, Sie können dieselben Dokument-IDs ( doc=... ) eröffnen und die Zusammenarbeit in Echtzeit funktioniert!
Schnelle Möglichkeiten zum Laufen:
Einsatz auf Heroku:
heroku create my-mathdown --remote heroku-my-mathdown
git push heroku-my-mathdown gh-pages:master
Einige andere Möglichkeiten zum Einsatz von Heroku funktionieren aufgrund meiner Verwendung von Submodules möglicherweise nicht (?)
Lokale Server ausführen ( server.coffee ):
npm install # once
env PORT=8001 npm start # Prints URL you can click
(Sie können natürlich einen beliebigen Port auswählen. Strg+C, wenn Sie fertig sind.)
Diese App funktioniert hauptsächlich als reine statische Seiten, und ich beabsichtige, sie so zu halten.
Öffnen Sie in Ihrem Browser aus einer Kasse in index.html .
Github Pages dient der GH-Seiten-Zweigstelle unter https://cben.github.io/mathdown.
Für andere Zweige/Commits gibt es keine triviale Lösung - Rawgit.com wäre großartig, unterstützt aber derzeit keine Submodul.
Der einfachste Weg, nicht übereinstimmende Modifikationen durchzuführen (und zu teilen), sind wahrscheinlich Cloud 9. Todo: Test, Details.
Der einzige Vorteil, den der dynamische Server mitbringt (noch nicht implementiert), wird:
mathdown.net/foobar anstelle von mathdown.net/?doc=foobar urls (#59).Andere Dinge namens "Mathdown":
Ich sollte wirklich mit diesen Leuten sprechen, ob es in Ordnung ist, dass ich den Namen und die Domäne verwende ...