I am trying to simplify the following code shown at the bottom of the question. The issues here are the following:
- How to make it so the Ace Editor is created once, instead of once per editor.
- For the setValue of the Ace Editor, each editor pulls in their specific information from an object that was returned from the backend (I have no access to the backend). You can see the object in the code as widgetEditor and featureEditor.
- The code works correctly as it is now, but I believe it can be simplified a lot.
- The only variables between the Ace editors are the setValue, the getSession and the ace.edit option.
- I checked out the following link which helped with the ace.edit option but did not with the other 2 values Can Ace Editor support multiple code editors in one page?
So, what can be done to lower the amount of code here in a way that still makes ace editor work correctly. Basically, on the same page it shows 10 ace editors, 3 for the widgetEditor object and 7 for the featureEditor (As seen on the code).
$.post(engineUrl, { systemDevCall: true, engineApiEnabled: engineApiEnabled, engineDataSplitter: engineDataSplitter, systemDevType: 'widgetCall', systemDevValue: [widgetIdSelected,widgetSelected] }, function(data) { tabSelected = 'widget'; if (engineApiEnabled != 1) { var dataSplit = data.split(engineDataSplitter); var data = dataSplit[1]; } // Parse Data var widgetEditor = JSON.parse(data); // PHP Editor phpeditor = ace.edit("phpcode"); phpeditor.$blockScrolling = Infinity; phpeditor.setValue(widgetEditor.php); phpeditor.setShowPrintMargin(false); phpeditor.setTheme("ace/theme/monokai"); phpeditor.getSession().setMode("ace/mode/php"); phpeditor.setFadeFoldWidgets(); phpeditor.session.getScrollTop(); phpeditor.session.setScrollTop(1); phpeditor.session.getScrollLeft(); phpeditor.session.setScrollLeft(1); phpeditor.focus(); phpeditor.navigateFileStart(); // CSS Editor csseditor = ace.edit("csscode"); csseditor.$blockScrolling = Infinity; csseditor.setValue(widgetEditor.css); csseditor.setShowPrintMargin(false); csseditor.setTheme("ace/theme/monokai"); csseditor.getSession().setMode("ace/mode/css"); csseditor.setFadeFoldWidgets(); csseditor.session.getScrollTop(); csseditor.session.setScrollTop(1); csseditor.session.getScrollLeft(); csseditor.session.setScrollLeft(1); csseditor.focus(); csseditor.navigateFileStart(); // JAVASCRIPT Editor jseditor = ace.edit("jscode"); jseditor.$blockScrolling = Infinity; jseditor.setValue(widgetEditor.js); jseditor.setShowPrintMargin(false); jseditor.setTheme("ace/theme/monokai"); jseditor.getSession().setMode("ace/mode/javascript"); jseditor.setFadeFoldWidgets(); jseditor.session.getScrollTop(); jseditor.session.setScrollTop(1); jseditor.session.getScrollLeft(); jseditor.session.setScrollLeft(1); jseditor.focus(); jseditor.navigateFileStart(); }); }); $('#featureSelection').on('change',function() { $('#featureSelection').addClass('selectOption'); $('#widgetSelection').removeClass('selectOption'); $('.featureListOptions').show(); if ( !$('.featureListOptions li').hasClass('active') ) { $('li.memberProfileHeader').addClass('active'); } var featureSelected = $(this).val(); var featureIdSelected = $('option:selected', this).data('id'); selectedOption = featureIdSelected; selectSelected = '#featureSelection'; $('li.memberProfileHeader').on('click',function() { memberProfileHeaderCodeEditor.focus(); memberProfileHeaderCodeEditor.navigateFileStart(); }); $('li.memberProfilePage').on('click',function() { memberProfilePageCodeEditor.focus(); memberProfilePageCodeEditor.navigateFileStart(); }); $('li.memberProfileFooter').on('click',function() { memberProfileFooterCodeEditor.focus(); memberProfileFooterCodeEditor.navigateFileStart(); }); $('li.searchResultHeader').on('click',function() { searchResultHeaderCodeEditor.focus(); searchResultHeaderCodeEditor.navigateFileStart(); }); $('li.searchResultPage').on('click',function() { searchResultPageCodeEditor.focus(); searchResultPageCodeEditor.navigateFileStart(); }); $('li.searchResultFooter').on('click',function() { searchResultFooterCodeEditor.focus(); searchResultFooterCodeEditor.navigateFileStart(); }); $('li.detailPage').on('click',function() { detailPageCodeEditor.focus(); detailPageCodeEditor.navigateFileStart(); }); $.post(engineUrl, { systemDevCall: true, engineApiEnabled: engineApiEnabled, engineDataSplitter: engineDataSplitter, systemDevType: 'featureCall', systemDevValue: [featureIdSelected,featureSelected] }, function(data) { tabSelected = 'feature'; if (engineApiEnabled != 1) { var dataSplit = data.split(engineDataSplitter); var data = dataSplit[1]; } // Parse Data var featureEditor = JSON.parse(data); // Member Profile Header Editor memberProfileHeaderCodeEditor = ace.edit("memberProfileHeaderCode"); memberProfileHeaderCodeEditor.$blockScrolling = Infinity; memberProfileHeaderCodeEditor.setValue(featureEditor.memberProfileHeader); memberProfileHeaderCodeEditor.setShowPrintMargin(false); memberProfileHeaderCodeEditor.setTheme("ace/theme/monokai"); memberProfileHeaderCodeEditor.getSession().setMode("ace/mode/php"); memberProfileHeaderCodeEditor.setFadeFoldWidgets(); memberProfileHeaderCodeEditor.session.getScrollTop(); memberProfileHeaderCodeEditor.session.setScrollTop(1); memberProfileHeaderCodeEditor.session.getScrollLeft(); memberProfileHeaderCodeEditor.session.setScrollLeft(1); memberProfileHeaderCodeEditor.focus(); memberProfileHeaderCodeEditor.navigateFileStart(); focusedEditor = memberProfileHeaderCodeEditor; // Member Profile Page Editor memberProfilePageCodeEditor = ace.edit("memberProfilePageCode"); memberProfilePageCodeEditor.$blockScrolling = Infinity; memberProfilePageCodeEditor.setValue(featureEditor.memberProfilePage); memberProfilePageCodeEditor.setShowPrintMargin(false); memberProfilePageCodeEditor.setTheme("ace/theme/monokai"); memberProfilePageCodeEditor.getSession().setMode("ace/mode/php"); memberProfilePageCodeEditor.setFadeFoldWidgets(); memberProfilePageCodeEditor.session.getScrollTop(); memberProfilePageCodeEditor.session.setScrollTop(1); memberProfilePageCodeEditor.session.getScrollLeft(); memberProfilePageCodeEditor.session.setScrollLeft(1); memberProfilePageCodeEditor.focus(); memberProfilePageCodeEditor.navigateFileStart(); focusedEditor = memberProfilePageCodeEditor; // Member Profile Footer Editor memberProfileFooterCodeEditor = ace.edit("memberProfileFooterCode"); memberProfileFooterCodeEditor.$blockScrolling = Infinity; memberProfileFooterCodeEditor.setValue(featureEditor.memberProfileFooter); memberProfileFooterCodeEditor.setShowPrintMargin(false); memberProfileFooterCodeEditor.setTheme("ace/theme/monokai"); memberProfileFooterCodeEditor.getSession().setMode("ace/mode/php"); memberProfileFooterCodeEditor.setFadeFoldWidgets(); memberProfileFooterCodeEditor.session.getScrollTop(); memberProfileFooterCodeEditor.session.setScrollTop(1); memberProfileFooterCodeEditor.session.getScrollLeft(); memberProfileFooterCodeEditor.session.setScrollLeft(1); memberProfileFooterCodeEditor.focus(); memberProfileFooterCodeEditor.navigateFileStart(); focusedEditor = memberProfileFooterCodeEditor; // Search Result Header Editor searchResultHeaderCodeEditor = ace.edit("searchResultHeaderCode"); searchResultHeaderCodeEditor.$blockScrolling = Infinity; searchResultHeaderCodeEditor.setValue(featureEditor.searchResultHeader); searchResultHeaderCodeEditor.setShowPrintMargin(false); searchResultHeaderCodeEditor.setTheme("ace/theme/monokai"); searchResultHeaderCodeEditor.getSession().setMode("ace/mode/php"); searchResultHeaderCodeEditor.setFadeFoldWidgets(); searchResultHeaderCodeEditor.session.getScrollTop(); searchResultHeaderCodeEditor.session.setScrollTop(1); searchResultHeaderCodeEditor.session.getScrollLeft(); searchResultHeaderCodeEditor.session.setScrollLeft(1); searchResultHeaderCodeEditor.focus(); searchResultHeaderCodeEditor.navigateFileStart(); focusedEditor = searchResultHeaderCodeEditor; // Search Result Page Editor searchResultPageCodeEditor = ace.edit("searchResultPageCode"); searchResultPageCodeEditor.$blockScrolling = Infinity; searchResultPageCodeEditor.setValue(featureEditor.searchResultPage); searchResultPageCodeEditor.setShowPrintMargin(false); searchResultPageCodeEditor.setTheme("ace/theme/monokai"); searchResultPageCodeEditor.getSession().setMode("ace/mode/php"); searchResultPageCodeEditor.setFadeFoldWidgets(); searchResultPageCodeEditor.session.getScrollTop(); searchResultPageCodeEditor.session.setScrollTop(1); searchResultPageCodeEditor.session.getScrollLeft(); searchResultPageCodeEditor.session.setScrollLeft(1); searchResultPageCodeEditor.focus(); searchResultPageCodeEditor.navigateFileStart(); focusedEditor = searchResultPageCodeEditor; // Search Result Footer Editor searchResultFooterCodeEditor = ace.edit("searchResultFooterCode"); searchResultFooterCodeEditor.$blockScrolling = Infinity; searchResultFooterCodeEditor.setValue(featureEditor.searchResultFooter); searchResultFooterCodeEditor.setShowPrintMargin(false); searchResultFooterCodeEditor.setTheme("ace/theme/monokai"); searchResultFooterCodeEditor.getSession().setMode("ace/mode/php"); searchResultHeaderCodeEditor.setFadeFoldWidgets(); searchResultFooterCodeEditor.session.getScrollTop(); searchResultFooterCodeEditor.session.setScrollTop(1); searchResultFooterCodeEditor.session.getScrollLeft(); searchResultFooterCodeEditor.session.setScrollLeft(1); searchResultFooterCodeEditor.focus(); searchResultFooterCodeEditor.navigateFileStart(); focusedEditor = searchResultFooterCodeEditor; // Detail Page Editor detailPageCodeEditor = ace.edit("detailPageCode"); detailPageCodeEditor.$blockScrolling = Infinity; detailPageCodeEditor.setValue(featureEditor.detailPage); detailPageCodeEditor.setShowPrintMargin(false); detailPageCodeEditor.setTheme("ace/theme/monokai"); detailPageCodeEditor.getSession().setMode("ace/mode/php"); detailPageCodeEditor.setFadeFoldWidgets(); detailPageCodeEditor.session.getScrollTop(); detailPageCodeEditor.session.setScrollTop(1); detailPageCodeEditor.session.getScrollLeft(); detailPageCodeEditor.session.setScrollLeft(1); detailPageCodeEditor.focus(); detailPageCodeEditor.navigateFileStart(); focusedEditor = detailPageCodeEditor; }); });