aero-admin
Version:
Admin interface for Aero based websites.
74 lines (61 loc) • 1.82 kB
JavaScript
const modeNames = {
js: 'javascript',
jsonld: 'json',
styl: 'stylus',
md: 'markdown'
}
let file = $('fileName').textContent
let fileExtension = file.substr(file.lastIndexOf('.') + 1)
var modeName = modeNames[fileExtension] || fileExtension
// Needs to be reassigned every time due to closures
window.saveFile = function() {
$.post('/_/edit', {
file,
contents: editor.getSession().getValue()
}).then(() => {
console.log('File saved.')
})
}
window.resizeEditor = function() {
$('json-editor').style.height = (window.innerHeight - $('nav').clientHeight) + 'px'
editor.resize()
}
// Resize editor when resizing window
if(!window.editorEventsRegistered) {
window.addEventListener('resize', window.resizeEditor)
// Capture Ctrl + S event
window.addEventListener('keydown', function(e) {
if(e.ctrlKey && e.which === 83) {
window.saveFile()
e.preventDefault()
return false
}
})
window.editorEventsRegistered = true
}
// Init editor
var editor = ace.edit('json-editor')
editor.setTheme("ace/theme/monokai")
editor.setOption('showLineNumbers', false)
editor.setOption('showGutter', false)
editor.setOption('printMargin', false)
editor.setOption('useSoftTabs', false)
editor.setOption('fontSize', '1em')
if(window.modesLoaded === undefined)
window.modesLoaded = {}
window.updateMode = function() {
let JSONMode = ace.require('ace/mode/' + modeName).Mode
editor.session.setMode(new JSONMode())
}
if(window.modesLoaded[modeName]) {
window.updateMode()
} else {
let highlighter = document.createElement('script')
highlighter.src = `https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.5/mode-${modeName}.js`
highlighter.onload = function() {
window.modesLoaded[modeName] = true
window.updateMode()
}
document.head.appendChild(highlighter)
}
window.resizeEditor()