/* global window,$,ace,setTimeout,rp,_ws */ "use strict"; $(document).ready(function() { console.log('ws: init editor'); var $editorWrapper = $('#editor-wrapper'); var $editor = $('#editor'); var $saveChanges = $('#save-changes'); var $revertEditor = $('#revert-editor'); var $panelLeft = $('.panel-left'); // var $panelRight = $('.panel-right'); // var $panelWrap = $('.panel-container'); var $tabItems = $('#tabs li'); var $detailsRepo = $('#details-repo'); var $detailsExmp = $('#details-example'); var $window = $(window); var activeMode = 'html'; var currentFileIdx; var editor; var editorSession; var editorStorage = new LocalStorageDraft(); // var saveTimeout1; // var saveTimeout2; var mapTypes = { html: 'html', js: 'javascript', css: 'css' } console.log('log events from editor', _ws); _ws.events.on('navToRoot', function() { $editorWrapper.hide(); $detailsRepo.hide(); $detailsExmp.hide(); }); _ws.events.on('navToRepo', function(repoSlug) { console.log('got navToRepo', repoSlug); $editorWrapper.hide(); $detailsRepo.show(); $detailsExmp.hide(); }); // /** // * Make the left panel resizable // */ $panelLeft.resizable({ handleSelector: ".splitter", resizeHeight: false, onDrag: function(e) { $editor.width($panelLeft.width()); } }); function setDefaultEditorContent() { if(_ws.files.length > 0) { editorSession.setMode("ace/mode/html"); var firstHtml = _ws.files.find(f => (f.type === 'html')); currentFileIdx = _ws.files.indexOf(firstHtml); _ws.ui.tabs.$elem .find('li:eq(' + currentFileIdx + ')') .addClass('bold'); editorSession.setValue(firstHtml.content); } } function initEditor() { editor = ace.edit("editor"); editorSession = editor.getSession(); editor.setTheme("ace/theme/eclipse"); editor.$blockScrolling = Infinity; editorSession.setUseWrapMode(true); setDefaultEditorContent(); } function onTabClicked(e) { var clickedItem = $(e.target); var type = clickedItem.data('type'); editorSession.setMode("ace/mode/" + mapTypes[type]); var name = clickedItem.html(); var file = _ws.files.find(f => (f.name === name)); _ws.ui.tabs.$elem .find('li:eq(' + currentFileIdx + ')') .removeClass('bold'); currentFileIdx = _ws.files.indexOf(file); _ws.ui.tabs.$elem .find('li:eq(' + currentFileIdx + ')') .addClass('bold'); editorSession.setValue(file.content); // saveToLocalStorage(); // var mode = $(this).prop('id').substr(5); // console.log( .html() ); // setActiveTab(mode); } _ws.makeView('tabs', { setCurrentFile: function(name) { }, getCurrentTab: function() { }, events: { 'click li[data-type]': onTabClicked } }) initEditor(); _ws.makeView('editor', { aceEditor: editor, aceSession: editor.getSession(), init: function() { this.aceSession.on('change', this.editorContentChanged); }, /** * React to changes in editor by saving a copy */ editorContentChanged: function() { console.log('editorContent changed') // if(saveTimeout1 || saveTimeout2) { // clearTimeout(saveTimeout1); // clearTimeout(saveTimeout2); // } // saveTimeout1 = setTimeout(saveToLocalStorage, 500); // // saveTimeout2 = setTimeout(saveChanges, 1000); }, render: function() { console.log('render editor', this); setDefaultEditorContent(); $editorWrapper.show(); this.$elem.removeClass('hidden'); } }); _ws.makeView('sandbox-iframe', { render: function(src) { this.$elem.prop('src', src); } }); // /** // * Set editor mode (html, javascript, css) // */ // function setEditorMode(mode) { // editor.getSession().setMode("ace/mode/" + mode); // } // /** // * Save a copy in localStorage // */ // function saveToLocalStorage() { // var editorContent = editor.getSession().getValue(); // editorStorage.saveSource(activeMode, editorContent); // saveTimeout1 = undefined; // } // function revertEditor() { // editorStorage.reset(); // location.reload(); // } // function saveChanges() { // var payload = editorStorage.getSources(); // rp.put('/examples/' + currentHash, payload) // .then(function(newExample) { // notify('success', "Exemple sauvegardé !"); // loadExample(currentHash); // }) // .catch(function(err) { // notify('error', 'Erreur: ' + jqXHR.responseText); // }); // } // $fileSelect.change(function() { // loadExample($(this).val()); // }); // $saveChanges.click(saveChanges); // $revertEditor.click(revertEditor); // $.get('/menu', menu => $('#site-menu').html(menu), 'html'); // loadExampleList(); });