151 lines
5.1 KiB
JavaScript
151 lines
5.1 KiB
JavaScript
'use strict';
|
|
|
|
class WikiContent {
|
|
waitSecondsToAutoSave = 5000;
|
|
|
|
constructor(container) {
|
|
const self = this;
|
|
|
|
this.container = container;
|
|
this.textarea = document.createElement('TEXTAREA');
|
|
this.container.innerHTML = '';
|
|
this.container.append(this.textarea);
|
|
|
|
this._mde_init();
|
|
this.clear();
|
|
}
|
|
|
|
// ToDo :: Open to other alternatives
|
|
// ----------------------------------------------------------------------------------
|
|
_mde_init() {
|
|
const self = this;
|
|
const rect = document.getElementById('app').getBoundingClientRect();
|
|
const height = rect.height - rect.top*2;
|
|
|
|
// https://github.com/Ionaru/easy-markdown-editor
|
|
this.mde = new EasyMDE({
|
|
autoDownloadFontAwesome: false,
|
|
autofocus:true,
|
|
autosave: {
|
|
enabled:true,
|
|
delay: 10,
|
|
uniqueId: appName
|
|
},
|
|
element: this.textarea,
|
|
hideIcons:[],
|
|
insertTexts:{
|
|
image:['']
|
|
},
|
|
minHeight:height+"px",
|
|
maxHeight:height+"px",
|
|
sideBySideFullscreen: false,
|
|
spellChecker: false,
|
|
status:false,
|
|
forceSync:true,
|
|
});
|
|
this.mde.toggleSideBySide();
|
|
|
|
this.timeout = null;
|
|
this.mde.codemirror.on("change", (instance, changeObj) => {
|
|
if(self.loading) return;
|
|
|
|
console.log(changeObj);
|
|
|
|
var event = new CustomEvent("myWiki::change", {detail:{ wikiId:self.wikiId,pageId:self.pageId }});
|
|
document.dispatchEvent(event);
|
|
|
|
clearTimeout(self.timeout);
|
|
self.timeout = setTimeout(()=>self._mde_save(), this.waitSecondsToAutoSave);
|
|
});
|
|
}
|
|
_mde_save() {
|
|
clearTimeout(this.timeout);
|
|
this.timeout = null;
|
|
this.save(this.mde.value());
|
|
}
|
|
_mde_set(content) {
|
|
this.loading = true;
|
|
this.mde.clearAutosavedValue();
|
|
this.mde.value(content);
|
|
this.loading = false;
|
|
}
|
|
_mde_get() {
|
|
return this.mde.value();
|
|
}
|
|
_mde_saved() {
|
|
return this.timeout === null;
|
|
}
|
|
// ----------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
clear() {
|
|
this.container.style.display="none";
|
|
this.wikiId = null;
|
|
this.pageId = null;
|
|
// this._mde_set('');
|
|
}
|
|
set(content) {
|
|
this.container.style.display="block";
|
|
this._mde_set(content);
|
|
}
|
|
get() {
|
|
return this._mde_get();
|
|
}
|
|
|
|
load(wikiId, pageId) {
|
|
const self = this;
|
|
console.info(`JDG :: Loading wiki page ${wikiId}-${pageId}` );
|
|
|
|
if (!this._mde_saved()) {
|
|
// ToDo :: we should wait until be sure the page could be save
|
|
this._mde_save();
|
|
}
|
|
|
|
this.clear();
|
|
if (wikiId<=0 || pageId<=0) {
|
|
return;
|
|
}
|
|
|
|
var baseUrl = OC.generateUrl('/apps/mywiki/wiki/'+wikiId);
|
|
$.ajax({
|
|
url: baseUrl+'/'+pageId,
|
|
type: 'GET',
|
|
contentType: 'application/json'
|
|
}).done(function (response) {
|
|
console.info(`JDG :: WikiContent.load(${wikiId}, ${pageId})`, response);
|
|
self.wikiId = wikiId;
|
|
self.pageId = pageId;
|
|
self.set(response.content);
|
|
}).fail(function (response, code) {
|
|
OC.dialogs.alert('Error', t(appName,'Error loading wiki page({wikiId}, {pageId})',{wikiId:wikiId,pageId:pageId}));
|
|
console.error(`JDG :: WikiContent.load(${wikiId}, ${pageId})`, response);
|
|
});
|
|
}
|
|
|
|
save(content) {
|
|
const wikiId = this.wikiId;
|
|
const pageId = this.pageId;
|
|
|
|
console.info(`JDG :: Saving wiki page ${wikiId}-${pageId}`);
|
|
if (wikiId<=0 || pageId<=0) {
|
|
return;
|
|
}
|
|
|
|
var baseUrl = OC.generateUrl('/apps/mywiki/wiki/'+wikiId);
|
|
$.ajax({
|
|
url: baseUrl+'/'+pageId,
|
|
type: 'PUT',
|
|
contentType: 'application/json',
|
|
data: JSON.stringify({title:null, content:content})
|
|
}).done(function (response) {
|
|
console.info(`JDG :: WikiContent.save(${wikiId}, ${pageId})`, response);
|
|
var event = new CustomEvent("myWiki::saved", {detail:{ wikiId:wikiId,pageId:pageId }});
|
|
document.dispatchEvent(event);
|
|
}).fail(function (response, code) {
|
|
OC.dialogs.alert('Error', t(appName,'Error saving wiki page({wikiId}, {pageId})',{wikiId:wikiId,pageId:pageId}));
|
|
console.error(`JDG :: WikiContent.save(${wikiId}, ${pageId})`, response);
|
|
});
|
|
}
|
|
} |