1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- let modelist = ace.require('ace/ext/modelist')
- let codeEditor = null
- // ACE - Mode Loader
- let modelistLoaded = []
- let loadAceMode = (m) => {
- return $.ajax({
- url: '/js/ace/mode-' + m + '.js',
- dataType: 'script',
- cache: true,
- beforeSend: () => {
- if (_.includes(modelistLoaded, m)) {
- return false
- }
- },
- success: () => {
- modelistLoaded.push(m)
- }
- })
- }
- // Vue Code Block instance
- let vueCodeBlock = new Vue({
- el: '#modal-editor-codeblock',
- data: {
- modes: modelist.modesByName,
- modeSelected: 'text',
- initContent: ''
- },
- watch: {
- modeSelected: (val, oldVal) => {
- loadAceMode(val).done(() => {
- ace.require('ace/mode/' + val)
- codeEditor.getSession().setMode('ace/mode/' + val)
- })
- }
- },
- methods: {
- open: (ev) => {
- $('#modal-editor-codeblock').addClass('is-active')
- _.delay(() => {
- codeEditor = ace.edit('codeblock-editor')
- codeEditor.setTheme('ace/theme/tomorrow_night')
- codeEditor.getSession().setMode('ace/mode/' + vueCodeBlock.modeSelected)
- codeEditor.setOption('fontSize', '14px')
- codeEditor.setOption('hScrollBarAlwaysVisible', false)
- codeEditor.setOption('wrap', true)
- codeEditor.setValue(vueCodeBlock.initContent)
- codeEditor.focus()
- codeEditor.renderer.updateFull()
- }, 300)
- },
- cancel: (ev) => {
- mdeModalOpenState = false
- $('#modal-editor-codeblock').removeClass('is-active')
- vueCodeBlock.initContent = ''
- },
- insertCode: (ev) => {
- if (mde.codemirror.doc.somethingSelected()) {
- mde.codemirror.execCommand('singleSelection')
- }
- let codeBlockText = '\n```' + vueCodeBlock.modeSelected + '\n' + codeEditor.getValue() + '\n```\n'
- mde.codemirror.doc.replaceSelection(codeBlockText)
- vueCodeBlock.cancel()
- }
- }
- })
|