54 lines
1.5 KiB
JavaScript
54 lines
1.5 KiB
JavaScript
// https://elixirforum.com/t/how-to-connect-quill-with-phoenix/46004
|
|
import Quill from 'quill';
|
|
import socket from '../user_socket';
|
|
import RhymeModule from '../lib/rhyme';
|
|
|
|
Quill.register('modules/rhymeModule', RhymeModule);
|
|
|
|
export let TextEditor = {
|
|
mounted() {
|
|
const padId = this.el.dataset.padId;
|
|
this.clientId;
|
|
|
|
this.quill = new Quill(this.el, {
|
|
theme: 'snow',
|
|
modules: {
|
|
rhymeModule: true
|
|
}
|
|
});
|
|
|
|
let channel = socket.channel(`pad:${padId}`, {});
|
|
|
|
channel.join()
|
|
.receive("ok", ({uuid, contents}) => {
|
|
this.clientId = uuid;
|
|
this.quill.setContents(contents);
|
|
})
|
|
// TODO: Probably need to show an alert that they couldn't join
|
|
.receive("error", resp => { console.log("Unable to join", resp) });
|
|
|
|
channel.on("update", ({change, client_id}) => {
|
|
if(client_id === this.clientId) return;
|
|
let range = this.quill.getSelection();
|
|
this.quill.updateContents(change);
|
|
range && this.quill.setSelection(range.index, range.length);
|
|
})
|
|
|
|
channel.on("saved", () => {
|
|
console.log('Saved');
|
|
// TODO: Show a saved message
|
|
})
|
|
|
|
this.quill.on('text-change', (delta, oldDelta, source) => {
|
|
if (delta == oldDelta) return;
|
|
if (source == 'api') {
|
|
console.log("An API call triggered this change.");
|
|
} else if (source == 'user') {
|
|
channel.push('update', {change: delta, client_id: this.clientId});
|
|
}
|
|
});
|
|
},
|
|
updated(){
|
|
console.log('U');
|
|
}
|
|
} |