-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
62 lines (53 loc) · 1.86 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/**
* hive.js
* Copyright (C) 2013-2016 Marcel Klehr <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the Mozilla Public License version 2
* as published by the Mozilla Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the Mozilla Public License
* along with this program. If not, see <https://www.mozilla.org/en-US/MPL/2.0/>.
*/
var path = require('path')
, textOT = require('ot-text').type
module.exports = setup
module.exports.consumes = ['ui', 'ot', 'orm', 'importexport', 'sync']
function setup(plugin, imports, register) {
var ui = imports.ui
, ot = imports.ot
, orm = imports.orm
, importexport = imports.importexport
, sync = imports.sync
ui.registerModule(path.join(__dirname, 'client.js'))
ot.registerOTType('text/plain', textOT)
importexport.registerExportProvider('text/plain', 'text/plain'
, function* (document, snapshot) {
return snapshot.contents
})
importexport.registerImportProvider('text/plain', 'text/plain'
, function* (document, user, data) {
var snapshot = yield orm.collections.snapshot
.findOne({id: document.latestSnapshot})
// Append data to the current contents
var changes
if(snapshot.contents.length)
changes = [snapshot.contents.length, '\n'+data.toString('utf8')]
else
changes = [data.toString('utf8')]]
var gulfDoc = yield sync.getDocument(document.id)
yield function(cb) {
gulfDoc.receiveEdit(JSON.stringify({
cs: JSON.stringify(changes)
, parent: snapshot.id
, user: user
}), null, cb)
}
})
register()
}