var livedb = require('livedb');
var sharejs = require('share');
var express = require('express');
var exphbs = require('express-handlebars');
var Duplex = require('stream').Duplex;
var browserChannel = require('browserchannel').server;
var backend = livedb.client(livedb.memory());
var share = require('share').server.createClient({backend: backend});
var app = express();
app.use(express.static('public'));
// Load static share.js file into front end
app.use(express.static(sharejs.scriptsDir));
app.engine('handlebars', exphbs({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');
// Do I need to do anyting with ottypes?
var otTypes = require('ottypes');
var richText = require('rich-text');
// try to register a custom type!
livedb.ot.registerType(richText);
app.use(browserChannel({webserver: express}, function (client) {
var stream = new Duplex({objectMode: true});
stream._write = function (chunk, encoding, callback) {
if (client.state !== 'closed') {
client.send(chunk);
}
callback();
};
stream._read = function () {
};
stream.headers = client.headers;
stream.remoteAddress = stream.address;
client.on('message', function (data) {
console.log('client on message', data);
stream.push(data);
});
stream.on('error', function (msg) {
client.stop();
});
client.on('close', function (reason) {
stream.emit('close');
stream.emit('end');
stream.end();
});
share.listen(stream);
}));
app.get('/', function (req, res) {
res.render('home');
});
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('App listening at http://%s:%s', host, port);
});
var socket = new BCSocket(null, {reconnect: true});
var share = new sharejs.Connection(socket);
var sjs = new sharejs.Connection(socket);
var doc = sjs.get('docs', 'hello');
// Subscribe to changes
doc.subscribe();
// This will be called when we have a live copy of the server's data.
doc.whenReady(function() {
console.log('doc ready, data: ', doc, doc.getSnapshot());
// Create a rich-text doc - not working!
if (!doc.type) doc.create('rich-text');
var editor = new Quill('#editor', {
modules: {
'authorship': { authorId: 'galadriel', enabled: true },
'multi-cursor': true,
'toolbar': { container: '#toolbar' },
'link-tooltip': true
},
theme: 'snow'
});
editor.on('selection-change', function(range) {
console.log('selection-change', range)
});
editor.on('text-change', function(delta, source) {
console.log('text-change', delta, source)
doc.submitOp(delta);
});
});