|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Vvveb.CodeEditor = { |
|
|
|
|
|
isActive: false, |
|
|
oldValue: '', |
|
|
doc:false, |
|
|
codemirror:false, |
|
|
|
|
|
init: function(doc) { |
|
|
|
|
|
if (this.codemirror == false) { |
|
|
this.codemirror = CodeMirror.fromTextArea(document.querySelector("#vvveb-code-editor textarea"), { |
|
|
mode: 'text/html', |
|
|
lineNumbers: true, |
|
|
autofocus: true, |
|
|
lineWrapping: true, |
|
|
|
|
|
theme: 'material' |
|
|
}); |
|
|
|
|
|
this.isActive = true; |
|
|
this.codemirror.getDoc().on("change", function (e, v) { |
|
|
if (v.origin != "setValue") { |
|
|
delay(() => { |
|
|
Vvveb.Builder.setHtml(e.getValue()); |
|
|
|
|
|
document.querySelectorAll("#top-panel .save-btn").forEach(e => e.removeAttribute("disabled")); |
|
|
}, 1000); |
|
|
} |
|
|
}); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Vvveb.Builder.frameBody.addEventListener("vvveb.undo.add", () => Vvveb.CodeEditor.setValue()); |
|
|
Vvveb.Builder.frameBody.addEventListener("vvveb.undo.restore", () => Vvveb.CodeEditor.setValue()); |
|
|
|
|
|
|
|
|
Vvveb.Builder.documentFrame.addEventListener("load", () => Vvveb.CodeEditor.setValue()); |
|
|
|
|
|
this.isActive = true; |
|
|
this.setValue(); |
|
|
|
|
|
return this.codemirror; |
|
|
}, |
|
|
|
|
|
setValue: function(value) { |
|
|
if (this.isActive == true) { |
|
|
let scrollInfo = this.codemirror.getScrollInfo(); |
|
|
this.codemirror.setValue(Vvveb.Builder.getHtml()); |
|
|
this.codemirror.scrollTo(scrollInfo.left, scrollInfo.top); |
|
|
let self = this; |
|
|
setTimeout(function() { |
|
|
self.codemirror.refresh(); |
|
|
}, 300); |
|
|
} |
|
|
}, |
|
|
|
|
|
destroy: function(element) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.isActive = false; |
|
|
}, |
|
|
|
|
|
toggle: function() { |
|
|
if (this.isActive != true) { |
|
|
this.isActive = true; |
|
|
return this.init(); |
|
|
} |
|
|
this.isActive = false; |
|
|
this.destroy(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Vvveb.ModalCodeEditor.init = function (modal = false, editor = false) { |
|
|
this.modal = document.getElementById("codeEditorModal"); |
|
|
this.editor = CodeMirror.fromTextArea(document.querySelector("#codeEditorModal textarea"), { |
|
|
mode: 'text/html', |
|
|
lineNumbers: true, |
|
|
autofocus: true, |
|
|
lineWrapping: true, |
|
|
|
|
|
theme: 'material' |
|
|
}); |
|
|
|
|
|
let self = this; |
|
|
this.modal.querySelector('.save-btn').addEventListener("click", function(event) { |
|
|
window.dispatchEvent(new CustomEvent("vvveb.ModalCodeEditor.save", {detail: self.getValue()})); |
|
|
self.hide(); |
|
|
return false; |
|
|
}); |
|
|
} |
|
|
|
|
|
Vvveb.ModalCodeEditor.setValue = function (value) { |
|
|
let scrollInfo = this.editor.getScrollInfo(); |
|
|
this.editor.setValue(value); |
|
|
this.editor.scrollTo(scrollInfo.left, scrollInfo.top); |
|
|
let self = this; |
|
|
setTimeout(function() { |
|
|
self.editor.refresh(); |
|
|
}, 300); |
|
|
}; |
|
|
|
|
|
Vvveb.ModalCodeEditor.getValue = function (value) { |
|
|
return this.editor.getValue(); |
|
|
}; |
|
|
|
|
|
|
|
|
Vvveb.CssEditor = { |
|
|
|
|
|
oldValue: '', |
|
|
doc:false, |
|
|
textarea:false, |
|
|
editor:false, |
|
|
|
|
|
init: function(doc) { |
|
|
this.textarea = document.getElementById("css-editor"); |
|
|
this.editor = CodeMirror.fromTextArea(this.textarea, { |
|
|
mode: 'text/css', |
|
|
lineNumbers: true, |
|
|
autofocus: true, |
|
|
lineWrapping: true, |
|
|
|
|
|
theme: 'material' |
|
|
}); |
|
|
|
|
|
let self = this; |
|
|
|
|
|
document.querySelectorAll('[href="#css-tab"],[href="#configuration"]').forEach( t => t.addEventListener("click", e => { |
|
|
self.setValue(Vvveb.StyleManager.getCss()); |
|
|
})); |
|
|
|
|
|
this.editor.getDoc().on("change", function (e, v) { |
|
|
if (v.origin != "setValue") |
|
|
delay(() => Vvveb.StyleManager.setCss(e.getValue()), 1000); |
|
|
}); |
|
|
}, |
|
|
|
|
|
getValue: function() { |
|
|
return this.editor.getValue(); |
|
|
}, |
|
|
|
|
|
setValue: function(value) { |
|
|
let scrollInfo = this.editor.getScrollInfo(); |
|
|
this.editor.setValue(value); |
|
|
this.editor.scrollTo(scrollInfo.left, scrollInfo.top); |
|
|
let self = this; |
|
|
setTimeout(function() { |
|
|
self.editor.refresh(); |
|
|
}, 300); |
|
|
|
|
|
}, |
|
|
|
|
|
destroy: function(element) { |
|
|
} |
|
|
} |
|
|
|