|
function customCodeEditor(editor) { |
|
const stylePrefix = editor.getConfig().stylePrefix; |
|
|
|
|
|
let selectedComponent = ''; |
|
|
|
|
|
let codeDivEditor = document.createElement('div'); |
|
codeDivEditor.setAttribute("class", "gjs-cm-editor-c"); |
|
|
|
let codeDiv = document.createElement('div'); |
|
codeDiv.setAttribute("class", "gjs-cm-editor"); |
|
codeDiv.setAttribute("id", "gjs-cm-htmlmixed"); |
|
|
|
let codeDivTitle = document.createElement('div'); |
|
codeDivTitle.setAttribute("id", "gjs-cm-title"); |
|
codeDivTitle.innerHTML = "HTML"; |
|
|
|
let codeDivHTML = document.createElement('div'); |
|
codeDivHTML.setAttribute("id", "gjs-cm-code"); |
|
|
|
let btnSave = document.createElement('button'); |
|
btnSave.innerHTML = 'Apply <span class="dotted-white-bottom-border">HTML</span> Changes'; |
|
btnSave.className = stylePrefix + 'btn-prim ' + stylePrefix + 'btn-import ' + stylePrefix + 'btn--full'; |
|
|
|
codeDiv.appendChild(codeDivTitle); |
|
codeDiv.appendChild(codeDivHTML); |
|
codeDiv.appendChild(btnSave); |
|
|
|
codeDivEditor.appendChild(codeDiv); |
|
|
|
const command = editor.Commands |
|
const modal = editor.Modal; |
|
|
|
|
|
var htmlCodeViewer = editor.CodeManager.getViewer('CodeMirror').clone(); |
|
htmlCodeViewer.set({ |
|
codeName: 'htmlmixed', |
|
readOnly: 0, |
|
theme: 'hopscotch', |
|
autoBeautify: true, |
|
autoCloseTags: true, |
|
autoCloseBrackets: true, |
|
lineWrapping: true, |
|
styleActiveLine: true, |
|
smartIndent: true, |
|
indentWithTabs: true, |
|
tabSize: 3, |
|
indentUnit: 3 |
|
}); |
|
|
|
|
|
btnSave.onclick = function() { |
|
|
|
let htmlComponentCode = htmlCodeViewer.editor.getValue(); |
|
|
|
|
|
let replacedComponent = selectedComponent.replaceWith(htmlComponentCode.trim()); |
|
|
|
editor.select(replacedComponent); |
|
|
|
|
|
let msg = ` |
|
<div class="uk-text-left uk-text-truncate uk-animation-slide-top-small"> |
|
<div class="uk-flex uk-flex-middle"> |
|
<span class="uk-margin-remove uk-text-small"> |
|
<span uk-icon="icon: check; ratio: 0.95;"></span> |
|
<span>You've updated <span class="dotted-white-bottom-border">${replacedComponent.getName()}</span> component.</span> |
|
</span> |
|
</div> |
|
</div> |
|
`; |
|
|
|
|
|
UIkit.notification({ |
|
message: msg, |
|
status: 'primary', |
|
pos: 'bottom-right', |
|
group: 'message', |
|
timeout: 3000 |
|
}); |
|
|
|
|
|
modal.close(); |
|
}; |
|
|
|
|
|
command.add('edit-component-code', { |
|
run: function(editor, sender) { |
|
let component = editor.getSelected(); |
|
|
|
|
|
if (component == undefined) { |
|
console.log("Warnning: No component was selected when executing 'edit-component-code' command"); |
|
return; |
|
} |
|
|
|
if (modal.isOpen()) |
|
modal.close(); |
|
|
|
let htmlViewer = htmlCodeViewer.editor; |
|
if (!htmlViewer) { |
|
let txtarea = document.createElement('textarea'); |
|
codeDivHTML.appendChild(txtarea); |
|
htmlCodeViewer.init(txtarea); |
|
htmlViewer = htmlCodeViewer.editor; |
|
} |
|
|
|
let htmlCode = component.toHTML(); |
|
|
|
|
|
|
|
selectedComponent = component; |
|
|
|
|
|
htmlCodeViewer.setContent(htmlCode); |
|
|
|
modal.setTitle('Component Code'); |
|
modal.setContent(codeDivEditor); |
|
modal.open(); |
|
|
|
htmlViewer.refresh(); |
|
} |
|
}); |
|
|
|
|
|
editor.on('component:selected', () => { |
|
const component = editor.getSelected(); |
|
|
|
|
|
editor.Panels.getButton('views', 'open-tm').set('active', true); |
|
|
|
|
|
const tmCodeBtn = component.get('traits').where({ |
|
name: 'tm-code-btn' |
|
}); |
|
|
|
|
|
if (tmCodeBtn.length == 0) { |
|
|
|
|
|
component.addTrait({ |
|
name: 'tm-code-btn', |
|
type: 'button', |
|
text: 'Edit <span class="dotted-white-bottom-border">' + component.getName() + '</span> Code', |
|
full: true, |
|
label: false, |
|
command: 'edit-component-code' |
|
}, { |
|
at: 0 |
|
}); |
|
} |
|
}); |
|
}; |