"use strict";
$(document).ready(function() {
var $editor = $('#editor');
var $editorJs = $('#editor-javascript');
var $editorHtml = $('#editor-html');
var $editorCss = $('#editor-css');
var $htmlContent = $('#html-content');
var $selectorNav = $('#selector');
var $fileSelect = $('#file-select');
var $addExampleBtn = $('#add-example-btn');
var $exampleForm = $('#add-example-form');
var $exampleSave = $('#add-example-save');
var $exampleCancel = $('#add-example-cancel');
var $saveChanges = $('#save-changes');
var $notification = $('#notification');
var $revertEditor = $('#revert-editor');
var $panelLeft = $('.panel-left');
var $panelRight = $('.panel-right');
var $panelWrap = $('.panel-container');
var $tabItems = $('#tabs li');
var $window = $(window);
var activeMode = 'html';
var currentHash;
var editor;
var editorSession;
var editorStorage = new LocalStorageDraft();
var saveTimeout1;
var saveTimeout2;
var exampleList;
var mapTypes = {
html: 'html', js: 'javascript', css: 'css'
}
if(_webSandboxFiles.length === 0) {
return;
}
// /**
// * Make the left panel resizable
// */
// $panelLeft.resizable({
// handleSelector: ".splitter",
// resizeHeight: false,
// onDrag: function(e) {
// $editor.width($panelLeft.width());
// }
// });
// /**
// * Handle window resize
// */
// function onResize() {
// $editor.width($panelLeft.width());
// $panelWrap.height($window.height());
// }
// $window.resize(onResize);
// onResize();
function initEditor() {
editor = ace.edit("editor");
editorSession = editor.getSession();
editor.setTheme("ace/theme/eclipse");
editor.$blockScrolling = Infinity;
editorSession.setUseWrapMode(true);
if(_webSandboxFiles) {
editorSession.setMode("ace/mode/html");
var firstHtml = _webSandboxFiles.find(f => (f.type === 'html'));
editorSession.setValue(firstHtml.content);
}
}
/**
* File list tabs click handler
*/
$tabItems.click(function() {
var clickedItem = $(this);
var type = clickedItem.data('type');
editorSession.setMode("ace/mode/" + mapTypes[type]);
var name = clickedItem.html();
var file = _webSandboxFiles.find(f => (f.name === name));
editorSession.setValue(file.content);
// saveToLocalStorage();
// var mode = $(this).prop('id').substr(5);
// console.log( .html() );
// setActiveTab(mode);
})
// /**
// * Set the current hash. If none given, take it from lococation.hash
// */
// function setCurrentHash(slug) {
// if(slug) {
// window.location.hash = currentHash = slug;
// }
// else {
// currentHash = window.location.hash ?
// window.location.hash.substr(1) : undefined;
// }
// }
// /**
// * 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;
// }
// /**
// * React to changes in editor by saving a copy
// */
// function editorContentChanged() {
// // console.log('editorContent changed')
// if(saveTimeout1 || saveTimeout2) {
// clearTimeout(saveTimeout1);
// clearTimeout(saveTimeout2);
// }
// saveTimeout1 = setTimeout(saveToLocalStorage, 500);
// // saveTimeout2 = setTimeout(saveChanges, 1000);
// }
// editor.getSession().on('change', editorContentChanged);
// function setActiveTab(mode) {
// console.log('setting mode', mode);
// var elementId = 'show-' + mode;
// $('#show-' + activeMode).removeClass('active');
// activeMode = mode;
// $('#' + elementId).addClass('active');
// var ed = $('#editor-' + mode);
// setEditorMode(mode);
// editor.getSession().off('change');
// editor.getSession().setValue(ed[0].innerHTML);
// editor.getSession().on('change', editorContentChanged);
// }
// function loadExample(exampleSlug) {
// // console.log('loadExample', exampleSlug);
// var serverPath = 'exemples/jquery/' + exampleSlug + '/';
// rp.get(serverPath + 'script.js', 'text')
// .then(javascript => $editorJs.html(javascript))
// .then(() => rp.get(serverPath + 'example.html', 'text'))
// .then(() => rp.get(serverPath + 'styles.css', 'text')
// .then(css => $editorCss.html(css))
// .catch(err => {
// return '';
// })
// )
// .then(html => {
// $editorHtml.html(html);
// $('iframe.panel-right')
// .prop('src', '/examples/' + exampleSlug)
// setActiveTab('html');
// setCurrentHash(exampleSlug);
// var sources = {
// html: $editorHtml.html(),
// javascript: $editorJs.html()
// };
// editorStorage.init(exampleSlug, sources);
// })
// .then(() => {
// var item = _.find(exampleList, { slug: exampleSlug });
// // console.log(item.test ? 'test' : 'no test');
// // loadJS('exemples/' + item.slug + '/test.js', function() {
// // $('#tests').show();
// // });
// });
// }
// /**
// * Build select option string
// */
// function makeFileSelectOption(item) {
// return ''
// }
// /**
// * Populate file selector from JSON list content
// */
// function resetFileSelect(exampleList) {
// $fileSelect.html(
// '' +
// exampleList.map(makeFileSelectOption)
// );
// }
// function loadExampleList() {
// rp.get('/list/jquery', 'json')
// .then(function(_exampleList) {
// exampleList = _exampleList;
// var restoredDraft;
// resetFileSelect(exampleList);
// if(currentHash) {
// $fileSelect.val(currentHash);
// var item = _.find(exampleList, { slug: currentHash });
// if( ! item) {
// return;
// }
// restoredDraft = editorStorage.restore(item.slug);
// if(! restoredDraft) {
// loadExample(item.slug);
// }
// else {
// console.log('restore', item.slug, restoredDraft.sources);
// $editorHtml.html(restoredDraft.sources.html);
// $editorCss.html(restoredDraft.sources.css);
// $editorJs.html(restoredDraft.sources.javascript);
// $('iframe.panel-right')
// .prop('src', '/examples/' + item.slug)
// // loadJS('exemples/' + item.slug + '/script.js');
// // if(item.test) {
// // loadJS('exemples/' + item.slug + '/test.js', function() {
// // $('#tests').show();
// // });
// // }
// setActiveTab('html');
// }
// }
// });
// }
// function notify(type, text) {
// $notification
// .addClass(type)
// .addClass('active');
// $notification.html(text);
// setTimeout(function() {
// $notification.removeClass('active');
// }, 2000);
// setTimeout(function() {
// $notification.removeClass(type);
// }, 3000);
// }
// function toggleEditor() {
// $addExampleBtn.toggle();
// $selectorNav.toggle();
// $exampleForm.toggle();
// }
// /**
// * Save new example
// */
// function saveExample(e) {
// e.preventDefault();
// var title = $(this).find('input[name="title"]').val();
// rp.post('/examples', { title: title })
// .then(function(newExample) {
// clearAndCloseEditor();
// $fileSelect.append(makeFileSelectOption(newExample));
// $fileSelect.val(newExample.slug);
// notify('success', "Exemple créé !");
// })
// .catch(errText => notify('error', 'Erreur: ' + errText));
// }
// function clearAndCloseEditor() {
// $exampleForm.find('input').val('');
// toggleEditor();
// }
// 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);
// });
// }
// setCurrentHash();
// $fileSelect.change(function() {
// loadExample($(this).val());
// });
// $addExampleBtn.click(toggleEditor);
// $exampleCancel.click(clearAndCloseEditor);
// $saveChanges.click(saveChanges);
// $exampleForm.submit(saveExample);
// $revertEditor.click(revertEditor);
// $.get('/menu', menu => $('#site-menu').html(menu), 'html');
// loadExampleList();
initEditor();
});