123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 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();
- }
- }
- });
|