diff --git a/_embed/public/js/application.js b/_embed/public/js/application.js
deleted file mode 100644
index b75f20e4..00000000
--- a/_embed/public/js/application.js
+++ /dev/null
@@ -1,1009 +0,0 @@
-'use strict';
-
-var tempID = "_fm_internal_temporary_id"
-var selectedItems = [];
-
-/* * * * * * * * * * * * * * * *
- * *
- * GENERAL FUNCTIONS *
- * *
- * * * * * * * * * * * * * * * */
-
-// Removes an element, if exists, from an array
-Array.prototype.removeElement = function(element) {
- var i = this.indexOf(element);
- if (i != -1) {
- this.splice(i, 1);
- }
-}
-
-// Replaces an element inside an array by another
-Array.prototype.replaceElement = function(begin, end) {
- var i = this.indexOf(begin);
- if (i != -1) {
- this[i] = end;
- }
-}
-
-// Sends a costum event to itself
-Document.prototype.sendCostumEvent = function(text) {
- this.dispatchEvent(new CustomEvent(text));
-}
-
-// Gets the content of a cookie
-Document.prototype.getCookie = function(name) {
- var re = new RegExp("(?:(?:^|.*;\\s*)" + name + "\\s*\\=\\s*([^;]*).*$)|^.*$");
- return document.cookie.replace(re, "$1");
-}
-
-// Changes a button to the loading animation
-Element.prototype.changeToLoading = function() {
- let element = this;
- let originalText = element.innerHTML;
-
- element.style.opacity = 0;
-
- setTimeout(function() {
- element.innerHTML = 'autorenew';
- element.style.opacity = 1;
- }, 200);
-
- return originalText;
-}
-
-// Changes an element to done animation
-Element.prototype.changeToDone = function(error, html) {
- this.style.opacity = 0;
-
- let thirdStep = () => {
- this.innerHTML = html;
- this.style.opacity = null;
-
- if (selectedItems.length == 0 && document.getElementById('listing')) {
- document.sendCostumEvent('changed-selected');
- }
- }
-
- let secondStep = () => {
- this.style.opacity = 0;
- setTimeout(thirdStep, 200);
- }
-
- let firstStep = () => {
- if (error) {
- this.innerHTML = 'close';
- } else {
- this.innerHTML = 'done';
- }
-
- this.style.opacity = 1;
-
- setTimeout(secondStep, 1000);
- }
-
- setTimeout(firstStep, 200);
- return false;
-}
-
-function getCSSRule(ruleName) {
- ruleName = ruleName.toLowerCase();
- var result = null;
- var find = Array.prototype.find;
-
- find.call(document.styleSheets, styleSheet => {
- result = find.call(styleSheet.cssRules, cssRule => {
- return cssRule instanceof CSSStyleRule &&
- cssRule.selectorText.toLowerCase() == ruleName;
- });
- return result != null;
- });
- return result;
-}
-
-var toWebDavURL = function(url) {
- url = url.replace(baseURL + "/", webdavURL + "/");
- return window.location.origin + url
-}
-
-// Handles the open file button event
-var openEvent = function(event) {
- if (this.classList.contains('disabled')) {
- return false;
- }
-
- if (selectedItems.length) {
- window.open(document.getElementById(selectedItems[0]).dataset.url + '?raw=true');
- return false;
- }
-
- window.open(window.location + '?raw=true');
- return false;
-}
-
-// Handles the delete button event
-var deleteEvent = function(event) {
- let single = false;
-
- if (!selectedItems.length) {
- selectedItems = [window.location.pathname];
- single = true;
- }
-
- if (selectedItems.length) {
- Array.from(selectedItems).forEach(link => {
- let html = document.getElementById("delete").changeToLoading();
- let request = new XMLHttpRequest();
-
- request.open('DELETE', toWebDavURL(link));
-
- request.send();
- request.onreadystatechange = function() {
- if (request.readyState == 4) {
- if (request.status == 204) {
- if (single) {
- window.location.pathname = RemoveLastDirectoryPartOf(window.location.pathname);
- } else {
- document.getElementById(link).remove();
- selectedItems.removeElement(link);
- }
- }
- document.getElementById('delete').changeToDone((request.status != 204), html);
- }
- }
- });
-
- return false;
- }
-
- return false;
-}
-
-// Prevent Default event
-var preventDefault = function(event) {
- event.preventDefault();
-}
-
-// Remove the last directory of an url
-var RemoveLastDirectoryPartOf = function(url) {
- var arr = url.split('/');
- arr.pop();
- return (arr.join('/'));
-}
-
-/* * * * * * * * * * * * * * * *
- * *
- * LISTING SPECIFIC FUNCTIONS *
- * *
- * * * * * * * * * * * * * * * */
-
-var reloadListing = function(callback) {
- let request = new XMLHttpRequest();
- request.open('GET', window.location);
- request.setRequestHeader('Minimal', 'true');
- request.send();
- request.onreadystatechange = function() {
- if (request.readyState == 4) {
- if (request.status == 200) {
- document.querySelector('body main').innerHTML = request.responseText;
- addNewDirEvents();
-
- if (typeof callback == 'function') {
- callback();
- }
- }
- }
- }
-}
-
-// Rename file event
-var renameEvent = function(event) {
- if (this.classList.contains('disabled') || !selectedItems.length) {
- return false;
- }
-
- // This mustn't happen
- if (selectedItems.length > 1) {
- alert("Something went wrong. Please refresh the page.");
- location.refresh();
- }
-
- let item = document.getElementById(selectedItems[0]),
- link = item.dataset.url,
- span = item.getElementsByTagName('span')[0],
- name = span.innerHTML;
-
- span.setAttribute('contenteditable', 'true');
- span.focus();
-
- let keyDownEvent = (event) => {
- if (event.keyCode == 13) {
- let newName = span.innerHTML,
- newLink = RemoveLastDirectoryPartOf(toWebDavURL(link)) + newName,
- html = document.getElementById('rename').changeToLoading(),
- request = new XMLHttpRequest();
-
- request.open('MOVE', toWebDavURL(link));
- request.setRequestHeader('Destination', newLink);
- request.setRequestHeader('Content-type', 'text/plain; charset=utf-8');
- request.send();
- request.onreadystatechange = function() {
- // TODO: redirect if it's moved to another folder
-
- if (request.readyState == 4) {
- if (request.status != 201 && request.status != 204) {
- span.innerHTML = name;
- } else {
- let newLink = encodeURI(link.replace(name, newName));
- console.log(request.body)
- reloadListing(() => {
- newName = btoa(newName);
- selectedItems = [newName];
- document.getElementById(newName).setAttribute("aria-selected", true);
- document.sendCostumEvent('changed-selected');
- });
- }
-
- document.getElementById('rename').changeToDone((request.status != 201 && request.status != 204), html);
- }
- }
- }
-
- if (event.KeyCode == 27) {
- span.innerHTML = name;
- }
-
- if (event.keyCode == 13 || event.keyCode == 27) {
- span.setAttribute('contenteditable', 'false');
- span.removeEventListener('keydown', keyDownEvent);
- event.preventDefault();
- }
-
- return false;
- }
-
- span.addEventListener('keydown', keyDownEvent);
- span.addEventListener('blur', (event) => {
- span.innerHTML = name;
- span.setAttribute('contenteditable', 'false');
- span.removeEventListener('keydown', keyDownEvent);
- item.removeEventListener('click', preventDefault);
- });
-
- return false;
-}
-
-// Upload files
-var handleFiles = function(files, base) {
- let button = document.getElementById("upload");
- let html = button.changeToLoading();
-
- for (let i = 0; i < files.length; i++) {
- let request = new XMLHttpRequest();
- request.open('PUT', toWebDavURL(window.location.pathname + base + files[i].name));
-
- request.send(files[i]);
- request.onreadystatechange = function() {
- if (request.readyState == 4) {
- if (request.status == 201) {
- reloadListing();
- }
-
- button.changeToDone((request.status != 201), html);
- }
- }
- }
-
- return false;
-}
-
-// Handles the back button event
-var backEvent = function(event) {
- var items = document.getElementsByClassName('item');
- Array.from(items).forEach(link => {
- link.setAttribute("aria-selected", false);
- });
- selectedItems = [];
-
- var event = new CustomEvent('changed-selected');
- document.dispatchEvent(event);
- return false;
-}
-
-// Toggles the view mode
-var viewEvent = function(event) {
- let cookie = document.getCookie('view-list');
- let listing = document.getElementById('listing');
-
- if (cookie != 'true') {
- document.cookie = 'view-list=true';
- } else {
- document.cookie = 'view-list=false';
- }
-
- handleViewType(document.getCookie('view-list'));
- return false;
-}
-
-// Handles the view mode change
-var handleViewType = function(viewList) {
- let listing = document.getElementById('listing');
- let button = document.getElementById('view');
-
- if (viewList == "true") {
- listing.classList.add('list');
- button.innerHTML = 'view_module Switch view';
- return false;
- }
-
- button.innerHTML = 'view_list Switch view';
- listing.classList.remove('list');
- return false;
-}
-
-var addNewDirEvents = function() {
- document.getElementById('new').addEventListener('click', event => {
- let newdir = document.getElementById('newdir');
- newdir.classList.add('enabled');
- newdir.focus();
- });
-
- document.getElementById('newdir').addEventListener('blur', event => {
- document.getElementById('newdir').classList.remove('enabled');
- });
-
- document.getElementById('newdir').addEventListener('keydown', newDirEvent);
-}
-
-// Handles the new directory event
-var newDirEvent = function(event) {
- // TODO: create new dir button and new file button
- if (event.keyCode == 27) {
- document.getElementById('newdir').classList.toggle('enabled');
- setTimeout(() => {
- document.getElementById('newdir').value = '';
- }, 200);
- }
-
- if (event.keyCode == 13) {
- event.preventDefault();
-
- let button = document.getElementById('new');
- let html = button.changeToLoading();
- let request = new XMLHttpRequest();
- let name = document.getElementById('newdir').value;
-
- request.open((name.endsWith("/") ? "MKCOL" : "PUT"), toWebDavURL(window.location.pathname + name));
-
- request.send();
- request.onreadystatechange = function() {
- if (request.readyState == 4) {
- button.changeToDone((request.status != 201), html);
- reloadListing(() => {
- addNewDirEvents();
- });
- }
- }
- }
-
- return false;
-}
-
-// Handles the event when there is change on selected elements
-document.addEventListener("changed-selected", function(event) {
- redefineDownloadURLs();
-
- let selectedNumber = selectedItems.length,
- fileAction = document.getElementById("file-only");
-
- if (selectedNumber) {
- fileAction.classList.remove("disabled");
-
- if (selectedNumber > 1) {
- document.getElementById("open").classList.add("disabled");
- document.getElementById("rename").classList.add("disabled");
- }
-
- if (selectedNumber == 1) {
- document.getElementById("open").classList.remove("disabled");
- document.getElementById("rename").classList.remove("disabled");
- }
-
- return false;
- }
-
- fileAction.classList.add("disabled");
- return false;
-});
-
-var redefineDownloadURLs = function() {
- let files = "";
-
- for (let i = 0; i < selectedItems.length; i++) {
- let url = document.getElementById(selectedItems[i]).dataset.url;
- files += url.replace(window.location.pathname, "") + ",";
- }
-
- files = files.substring(0, files.length - 1);
- files = encodeURIComponent(files);
-
- let links = document.querySelectorAll("#download ul a");
- Array.from(links).forEach(link => {
- link.href = "?download=" + link.dataset.format + "&files=" + files;
- });
-}
-
-var searchEvent = function(event) {
- let value = this.value;
- let search = document.getElementById('search');
- let scrollable = document.querySelector('#search > div');
- let box = document.querySelector('#search > div div');
-
- if (value.length == 0) {
- box.innerHTML = "Search or use one of your supported commands: " + user.Commands.join(", ") + ".";
- return;
- }
-
- let pieces = value.split(' ');
- let supported = false;
-
- user.Commands.forEach(function(cmd) {
- if (cmd == pieces[0]) {
- supported = true;
- }
- });
-
- if (!supported) {
- box.innerHTML = "Press enter to search."
- } else {
- box.innerHTML = "Press enter to execute."
- }
-
- if (event.keyCode == 13) {
- box.innerHTML = '';
- search.classList.add('ongoing');
-
- if (supported) {
- var conn = new WebSocket('ws://' + window.location.host + window.location.pathname + '?command=true');
- conn.onopen = function() {
- conn.send(value);
- };
-
- conn.onmessage = function(event) {
- box.innerHTML = event.data;
- scrollable.scrollTop = scrollable.scrollHeight;
- }
-
- conn.onclose = function(event) {
- search.classList.remove('ongoing');
- reloadListing();
- }
- } else {
- box.innerHTML = '
';
- let ul = box.querySelector('ul');
-
- var conn = new WebSocket('ws://' + window.location.host + window.location.pathname + '?search=true');
- conn.onopen = function() {
- conn.send(value);
- };
-
- conn.onmessage = function(event) {
- ul.innerHTML += '' + event.data + '';
- scrollable.scrollTop = scrollable.scrollHeight;
- }
-
- conn.onclose = function(event) {
- search.classList.remove('ongoing');
- }
- }
- }
-}
-
-
-
-document.addEventListener('listing', event => {
- // Handles the current view mode and adds the event to the button
- handleViewType(document.getCookie("view-list"));
- document.getElementById("view").addEventListener("click", viewEvent);
-
- let updateColumns = () => {
- let columns = Math.floor(document.getElementById('listing').offsetWidth / 300),
- itens = getCSSRule('#listing .item');
-
- itens.style.width = `calc(${100/columns}% - 1em)`;
- }
-
- updateColumns();
- window.addEventListener("resize", () => {
- updateColumns();
- });
-
- // Add event to back button and executes back event on ESC
- document.addEventListener('keydown', (event) => {
- if (event.keyCode == 27) {
- backEvent(event);
- }
- });
-
- if (user.AllowCommands) {
- let search = document.getElementById("search"),
- searchInput = search.querySelector("input"),
- searchDiv = search.querySelector("div"),
- hover = false,
- focus = false;
-
- searchInput.addEventListener('focus', event => {
- focus = true;
- search.classList.add('active');
- });
-
- searchDiv.addEventListener('mouseover', event => {
- hover = true;
- search.classList.add('active');
- });
-
- searchInput.addEventListener('blur', event => {
- focus = false;
- if (hover) return;
- search.classList.remove('active');
- });
-
- search.addEventListener('mouseleave', event => {
- hover = false;
- if (focus) return;
- search.classList.remove('active');
- });
-
- search.addEventListener("click", event => {
- search.classList.add("active");
- search.querySelector("input").focus();
- });
-
- document.querySelector('#search > div div').innerHTML = "Search or use one of your supported commands: " + user.Commands.join(", ") + ".";
- document.querySelector('#search input').addEventListener('keyup', searchEvent);
- }
-
- if (user.AllowEdit) {
- // Enables rename button
- document.getElementById("rename").addEventListener("click", renameEvent);
- }
-
- if (user.AllowNew) {
- // Enables upload button
- document.getElementById("upload").addEventListener("click", (event) => {
- document.getElementById("upload-input").click();
- });
-
- addNewDirEvents();
-
- // Drag and Drop
- let items = document.getElementsByClassName('item');
- document.addEventListener("dragover", function(event) {
- event.preventDefault();
- }, false);
-
- document.addEventListener("dragenter", (event) => {
- Array.from(items).forEach(file => {
- file.style.opacity = 0.5;
- });
- }, false);
-
- document.addEventListener("dragend", (event) => {
- Array.from(items).forEach(file => {
- file.style.opacity = 1;
- });
- }, false);
-
- document.addEventListener("drop", function(event) {
- event.preventDefault();
- var dt = event.dataTransfer;
- var files = dt.files;
-
- let el = event.target;
-
- for (let i = 0; i < 5; i++) {
- if (el != null && !el.classList.contains('item')) {
- el = el.parentElement;
- }
- }
-
- if (files.length > 0) {
- if (el != null && el.classList.contains('item') && el.dataset.dir == "true") {
- handleFiles(files, el.querySelector('.name').innerHTML + "/");
- return;
- }
-
- handleFiles(files, "");
- } else {
- Array.from(items).forEach(file => {
- file.style.opacity = 1;
- });
- }
-
- }, false);
- }
-});
-
-function itemDragStart(event) {
- let el = event.target;
-
- for (let i = 0; i < 5; i++) {
- if (!el.classList.contains('item')) {
- el = el.parentElement;
- }
- }
-
- event.dataTransfer.setData("id", el.id);
- event.dataTransfer.setData("name", el.querySelector('.name').innerHTML);
-}
-
-function itemDragOver(event) {
- event.preventDefault();
- let el = event.target;
-
- for (let i = 0; i < 5; i++) {
- if (!el.classList.contains('item')) {
- el = el.parentElement;
- }
- }
-
- el.style.opacity = 1;
-}
-
-function itemDrop(e) {
- e.preventDefault();
-
- let el = e.target,
- id = e.dataTransfer.getData("id"),
- name = e.dataTransfer.getData("name");
-
- if (id == "" || name == "") return;
-
- for (let i = 0; i < 5; i++) {
- if (!el.classList.contains('item')) {
- el = el.parentElement;
- }
- }
-
- if (el.id === id) return;
-
- let oldLink = toWebDavURL(document.getElementById(id).dataset.url),
- newLink = toWebDavURL(el.dataset.url + name),
- request = new XMLHttpRequest();
-
- request.open('MOVE', oldLink);
- request.setRequestHeader('Destination', newLink);
- request.send();
- request.onreadystatechange = function() {
- if (request.readyState == 4) {
- if (request.status == 201 || request.status == 204) {
- reloadListing();
- }
- }
- }
-}
-
-
-function openItem(event) {
- window.location = event.currentTarget.dataset.url;
-}
-
-function selectItem(event) {
- let el = event.currentTarget;
-
- if (selectedItems.length != 0) event.preventDefault();
- if (selectedItems.indexOf(el.id) == -1) {
- if (!event.ctrlKey) backEvent(event);
-
- el.setAttribute("aria-selected", true);
- selectedItems.push(el.id);
- } else {
- el.setAttribute("aria-selected", false);
- selectedItems.removeElement(el.id);
- }
-
- document.sendCostumEvent("changed-selected");
- return false;
-}
-
-
-/* * * * * * * * * * * * * * * *
- * *
- * EDITOR SPECIFIC FUNCTIONS *
- * *
- * * * * * * * * * * * * * * * */
-
-// auto grow textareas
-var textareaAutoGrow = function() {
- let autogrow = function() {
- this.style.height = '5px';
- this.style.height = this.scrollHeight + 'px';
- }
-
- let textareas = document.getElementsByTagName('textarea');
-
- let addAutoGrow = () => {
- Array.from(textareas).forEach(textarea => {
- autogrow.bind(textarea)();
- textarea.addEventListener('keyup', autogrow);
- });
- }
-
- addAutoGrow();
- window.addEventListener('resize', addAutoGrow)
-}
-
-var deleteFrontMatterItem = function(event) {
- event.preventDefault();
- document.getElementById(this.dataset.delete).remove();
-}
-
-var addFrontMatterItem = function(event) {
- event.preventDefault();
-
- let temp = document.getElementById(tempID)
- if (temp) {
- temp.remove();
- }
-
- let block = this.parentNode;
- let type = block.dataset.type;
- let id = block.id;
-
- // If the block is an array
- if (type === "array") {
- let fieldID = id + "[]"
- let input = fieldID
- let count = block.querySelectorAll('.group > div').length
- input = input.replace(/\[/, '\\[');
- input = input.replace(/\]/, '\\]');
-
- let fieldsets = block.getElementsByTagName("fieldset");
-
- if (fieldsets.length > 0) {
- let newtype = fieldsets[0].dataset.type;
- let bid = id + "[" + fieldsets.length + "]";
- let name = fieldsets.length;
-
- let template = ``;
-
- block.insertAdjacentHTML('beforeend', template);
-
- document.querySelector(`div[data-delete="${bid}"]`).addEventListener('click', deleteFrontMatterItem);
- document.getElementById(bid).querySelector('.action.add').addEventListener('click', addFrontMatterItem);
- } else {
- block.querySelector('.group').insertAdjacentHTML('beforeend', ``);
-
- document.getElementById(`${fieldID}-${count}`).querySelector('input').focus();
- document.querySelector(`div[data-delete="${fieldID}-${count}"]`).addEventListener('click', deleteFrontMatterItem);
- }
-
-
- }
-
- if (type == "object" || type == "parent") {
- let template = ``;
-
- if (type == "parent") {
- document.querySelector('div.button.add').insertAdjacentHTML('beforebegin', template);
- } else {
- block.querySelector('.delete').insertAdjacentHTML('afterend', template);
- }
-
- let temp = document.getElementById(tempID);
- let input = temp.querySelector('input');
- input.focus();
- input.addEventListener('keydown', (event) => {
- if (event.keyCode == 27) {
- event.preventDefault();
- temp.remove();
- }
-
- if (event.keyCode == 13) {
- event.preventDefault();
-
- let value = input.value;
- if (value === '') {
- temp.remove();
- return true;
- }
-
- let name = value.substring(0, value.lastIndexOf(':'));
- let newtype = value.substring(value.lastIndexOf(':') + 1, value.length);
- if (newtype !== "" && newtype !== "array" && newtype !== "object") {
- name = value;
- }
-
- name = name.replace(' ', '_');
-
- let bid = name;
- if (id != '') {
- bid = id + "." + bid;
- }
-
- temp.remove();
-
- switch (newtype) {
- case "array":
- case "object":
- let template = ``;
-
- if (type == "parent") {
- document.querySelector('div.button.add').insertAdjacentHTML('beforebegin', template);
- } else {
- block.insertAdjacentHTML('beforeend', template);
- }
-
- document.querySelector(`div[data-delete="${bid}"]`).addEventListener('click', deleteFrontMatterItem);
- document.getElementById(bid).querySelector('.action.add').addEventListener('click', addFrontMatterItem);
- break;
- default:
- let group = block.querySelector('.group');
-
- if (group == null) {
- block.insertAdjacentHTML('afterbegin', '');
- group = block.querySelector('.group');
- }
-
- group.insertAdjacentHTML('beforeend', `
-
-
-
- close
-
-
`);
-
- document.getElementById(bid).focus();
- document.querySelector(`div[data-delete="block-${bid}"]`).addEventListener('click', deleteFrontMatterItem);
- }
- }
- });
- }
-
- return false;
-}
-
-document.addEventListener("editor", (event) => {
- textareaAutoGrow();
-
- let container = document.getElementById('editor');
- let button = document.querySelector('#submit span:first-child');
- let kind = container.dataset.kind;
-
- if (kind != 'frontmatter-only') {
- let editor = document.getElementById('editor-source');
- let mode = editor.dataset.mode;
- let textarea = document.querySelector('textarea[name="content"]');
- let aceEditor = ace.edit('editor-source');
- aceEditor.getSession().setMode("ace/mode/" + mode);
- aceEditor.getSession().setValue(textarea.value);
- aceEditor.getSession().on('change', function() {
- textarea.value = aceEditor.getSession().getValue();
- });
- aceEditor.setOptions({
- wrap: true,
- maxLines: Infinity,
- theme: "ace/theme/github",
- showPrintMargin: false,
- fontSize: "1em",
- minLines: 20
- });
- }
-
- let deleteFrontMatterItemButtons = document.getElementsByClassName('delete');
- Array.from(deleteFrontMatterItemButtons).forEach(button => {
- button.addEventListener('click', deleteFrontMatterItem);
- });
-
- let addFrontMatterItemButtons = document.getElementsByClassName('add');
- Array.from(addFrontMatterItemButtons).forEach(button => {
- button.addEventListener('click', addFrontMatterItem);
- });
-
- let saveContent = function() {
- let data = form2js(document.querySelector('form'));
-
- if (typeof data.content === "undefined" && kind != 'frontmatter-only') {
- data.content = "";
- }
-
- if (typeof data.content === "number") {
- data.content = data.content.toString();
- }
-
- let html = button.changeToLoading();
- let request = new XMLHttpRequest();
- request.open("PUT", toWebDavURL(window.location.pathname));
- request.setRequestHeader('Kind', kind);
-
- request.send(JSON.stringify(data));
- request.onreadystatechange = function() {
- if (request.readyState == 4) {
- button.changeToDone((request.status != 201), html);
- }
- }
- }
-
- document.querySelector('form').addEventListener('submit', (event) => {
- event.preventDefault();
- saveContent();
- });
-
- window.addEventListener('keydown', (event) => {
- if (event.ctrlKey || event.metaKey) {
- switch (String.fromCharCode(event.which).toLowerCase()) {
- case 's':
- event.preventDefault();
- saveContent();
- break;
- }
- }
- });
-
- return false;
-});
-
-/* * * * * * * * * * * * * * * *
- * *
- * BOOTSTRAP *
- * *
- * * * * * * * * * * * * * * * */
-
-document.addEventListener("DOMContentLoaded", function(event) {
- // Add event to logout button
- document.getElementById("logout").addEventListener("click", event => {
- let request = new XMLHttpRequest();
- request.open('GET', window.location.pathname, true, "username", "password");
- request.send();
- request.onreadystatechange = function() {
- if (request.readyState == 4) {
- window.location = "/";
- }
- }
- });
-
- // Enables open, delete and download buttons
- document.getElementById("open").addEventListener("click", openEvent);
-
- if (user.AllowEdit) {
- document.getElementById("delete").addEventListener("click", deleteEvent);
- }
-
- if (document.getElementById('listing')) {
- document.sendCostumEvent('listing');
- }
-
- if (document.getElementById('editor')) {
- document.sendCostumEvent('editor');
- }
-
- return false;
-});
\ No newline at end of file
diff --git a/_embed/public/js/common.js b/_embed/public/js/common.js
new file mode 100644
index 00000000..f3dd8a57
--- /dev/null
+++ b/_embed/public/js/common.js
@@ -0,0 +1,269 @@
+'use strict';
+
+var tempID = "_fm_internal_temporary_id",
+ buttons = {};
+
+// Removes an element, if exists, from an array
+Array.prototype.removeElement = function(element) {
+ var i = this.indexOf(element);
+ if (i != -1) {
+ this.splice(i, 1);
+ }
+}
+
+// Replaces an element inside an array by another
+Array.prototype.replaceElement = function(begin, end) {
+ var i = this.indexOf(begin);
+ if (i != -1) {
+ this[i] = end;
+ }
+}
+
+// Sends a costum event to itself
+Document.prototype.sendCostumEvent = function(text) {
+ this.dispatchEvent(new CustomEvent(text));
+}
+
+// Gets the content of a cookie
+Document.prototype.getCookie = function(name) {
+ var re = new RegExp("(?:(?:^|.*;\\s*)" + name + "\\s*\\=\\s*([^;]*).*$)|^.*$");
+ return document.cookie.replace(re, "$1");
+}
+
+// Changes a button to the loading animation
+Element.prototype.changeToLoading = function() {
+ let element = this;
+ let originalText = element.innerHTML;
+
+ element.style.opacity = 0;
+
+ setTimeout(function() {
+ element.innerHTML = 'autorenew';
+ element.style.opacity = 1;
+ }, 200);
+
+ return originalText;
+}
+
+// Changes an element to done animation
+Element.prototype.changeToDone = function(error, html) {
+ this.style.opacity = 0;
+
+ let thirdStep = () => {
+ this.innerHTML = html;
+ this.style.opacity = null;
+
+ if (selectedItems.length == 0 && document.getElementById('listing')) {
+ document.sendCostumEvent('changed-selected');
+ }
+ }
+
+ let secondStep = () => {
+ this.style.opacity = 0;
+ setTimeout(thirdStep, 200);
+ }
+
+ let firstStep = () => {
+ if (error) {
+ this.innerHTML = 'close';
+ } else {
+ this.innerHTML = 'done';
+ }
+
+ this.style.opacity = 1;
+
+ setTimeout(secondStep, 1000);
+ }
+
+ setTimeout(firstStep, 200);
+ return false;
+}
+
+function getCSSRule(ruleName) {
+ ruleName = ruleName.toLowerCase();
+ var result = null;
+ var find = Array.prototype.find;
+
+ find.call(document.styleSheets, styleSheet => {
+ result = find.call(styleSheet.cssRules, cssRule => {
+ return cssRule instanceof CSSStyleRule &&
+ cssRule.selectorText.toLowerCase() == ruleName;
+ });
+ return result != null;
+ });
+ return result;
+}
+
+function toWebDavURL(url) {
+ return window.location.origin + url.replace(baseURL + "/", webdavURL + "/");
+}
+
+// Remove the last directory of an url
+var removeLastDirectoryPartOf = function(url) {
+ var arr = url.split('/');
+ arr.pop();
+ return (arr.join('/'));
+}
+
+/* * * * * * * * * * * * * * * *
+ * *
+ * EVENTS *
+ * *
+ * * * * * * * * * * * * * * * */
+
+// Prevent Default event
+var preventDefault = function(event) {
+ event.preventDefault();
+}
+
+function logoutEvent(event) {
+ let request = new XMLHttpRequest();
+ request.open('GET', window.location.pathname, true, "username", "password");
+ request.send();
+ request.onreadystatechange = function() {
+ if (request.readyState == 4) {
+ window.location = "/";
+ }
+ }
+}
+
+function openEvent(event) {
+ if (event.currentTarget.classList.contains('disabled')) {
+ return false;
+ }
+
+ let link = '?raw=true';
+
+ if (selectedItems.length) {
+ link = document.getElementById(selectedItems[0]).dataset.url + link;
+ } else {
+ link = window.location + link;
+ }
+
+ window.open(link);
+ return false;
+}
+
+// Handles the delete button event
+function deleteEvent(event) {
+ let single = false;
+
+ if (!selectedItems.length) {
+ selectedItems = [window.location.pathname];
+ single = true;
+ }
+
+ Array.from(selectedItems).forEach(id => {
+ let request = new XMLHttpRequest(),
+ html = buttons.delete.changeToLoading(),
+ el = document.getElementById(id),
+ url = el.dataset.url;
+
+ request.open('DELETE', toWebDavURL(url));
+ request.onreadystatechange = function() {
+ if (request.readyState == 4) {
+ if (request.status == 204) {
+ if (single) {
+ window.location.pathname = removeLastDirectoryPartOf(window.location.pathname);
+ } else {
+ el.remove();
+ selectedItems.removeElement(id);
+ }
+ }
+
+ buttons.delete.changeToDone(request.status != 204, html);
+ }
+ }
+ r.send();
+ });
+
+ return false;
+}
+
+var searchEvent = function(event) {
+ let value = this.value,
+ search = document.getElementById('search'),
+ scrollable = document.querySelector('#search > div'),
+ box = document.querySelector('#search > div div');
+
+ if (value.length == 0) {
+ box.innerHTML = "Search or use one of your supported commands: " + user.Commands.join(", ") + ".";
+ return;
+ }
+
+ let pieces = value.split(' ');
+ let supported = false;
+
+ user.Commands.forEach(function(cmd) {
+ if (cmd == pieces[0]) {
+ supported = true;
+ }
+ });
+
+ if (!supported) {
+ box.innerHTML = "Press enter to search."
+ } else {
+ box.innerHTML = "Press enter to execute."
+ }
+
+ if (event.keyCode == 13) {
+ box.innerHTML = '';
+ search.classList.add('ongoing');
+
+ if (supported) {
+ var conn = new WebSocket('ws://' + window.location.host + window.location.pathname + '?command=true');
+ conn.onopen = function() {
+ conn.send(value);
+ };
+
+ conn.onmessage = function(event) {
+ box.innerHTML = event.data;
+ scrollable.scrollTop = scrollable.scrollHeight;
+ }
+
+ conn.onclose = function(event) {
+ search.classList.remove('ongoing');
+ reloadListing();
+ }
+ } else {
+ box.innerHTML = '';
+ let ul = box.querySelector('ul');
+
+ var conn = new WebSocket('ws://' + window.location.host + window.location.pathname + '?search=true');
+ conn.onopen = function() {
+ conn.send(value);
+ };
+
+ conn.onmessage = function(event) {
+ ul.innerHTML += '' + event.data + '';
+ scrollable.scrollTop = scrollable.scrollHeight;
+ }
+
+ conn.onclose = function(event) {
+ search.classList.remove('ongoing');
+ }
+ }
+ }
+}
+
+/* * * * * * * * * * * * * * * *
+ * *
+ * BOOTSTRAP *
+ * *
+ * * * * * * * * * * * * * * * */
+
+document.addEventListener("DOMContentLoaded", function(event) {
+ buttons.logout = document.getElementById("logout");
+ buttons.open = document.getElementById("open");
+ buttons.delete = document.getElementById("delete");
+
+ // Attach event listeners
+ buttons.logout.addEventListener("click", logoutEvent);
+ buttons.open.addEventListener("click", openEvent);
+
+ if (user.AllowEdit) {
+ buttons.delete.addEventListener("click", deleteEvent);
+ }
+
+ return false;
+});
\ No newline at end of file
diff --git a/_embed/public/js/editor.js b/_embed/public/js/editor.js
new file mode 100644
index 00000000..f4b52df5
--- /dev/null
+++ b/_embed/public/js/editor.js
@@ -0,0 +1,258 @@
+'use strict';
+
+function textareaAutoGrow() {
+ let autogrow = function() {
+ this.style.height = '5px';
+ this.style.height = this.scrollHeight + 'px';
+ }
+
+ let textareas = document.getElementsByTagName('textarea');
+
+ let addAutoGrow = () => {
+ Array.from(textareas).forEach(textarea => {
+ autogrow.bind(textarea)();
+ textarea.addEventListener('keyup', autogrow);
+ });
+ }
+
+ addAutoGrow();
+ window.addEventListener('resize', addAutoGrow)
+}
+
+function deleteFrontMatterItem(event) {
+ event.preventDefault();
+ document.getElementById(this.dataset.delete).remove();
+}
+
+function addFrontMatterItem(event) {
+ event.preventDefault();
+
+ let temp = document.getElementById(tempID)
+ if (temp) {
+ temp.remove();
+ }
+
+ let block = this.parentNode,
+ type = block.dataset.type,
+ id = block.id;
+
+ // If the block is an array
+ if (type === "array") {
+ let fieldID = id + "[]",
+ input = fieldID,
+ count = block.querySelectorAll('.group > div').length;
+
+ input = input.replace(/\[/, '\\[');
+ input = input.replace(/\]/, '\\]');
+
+ let fieldsets = block.getElementsByTagName("fieldset");
+
+ if (fieldsets.length > 0) {
+ let newtype = fieldsets[0].dataset.type;
+ let bid = id + "[" + fieldsets.length + "]";
+ let name = fieldsets.length;
+
+ let template = ``;
+
+ block.insertAdjacentHTML('beforeend', template);
+
+ document.querySelector(`div[data-delete="${bid}"]`).addEventListener('click', deleteFrontMatterItem);
+ document.getElementById(bid).querySelector('.action.add').addEventListener('click', addFrontMatterItem);
+ } else {
+ block.querySelector('.group').insertAdjacentHTML('beforeend', ``);
+
+ document.getElementById(`${fieldID}-${count}`).querySelector('input').focus();
+ document.querySelector(`div[data-delete="${fieldID}-${count}"]`).addEventListener('click', deleteFrontMatterItem);
+ }
+ }
+
+ if (type == "object" || type == "parent") {
+ let template = ``;
+
+ if (type == "parent") {
+ document.querySelector('div.button.add').insertAdjacentHTML('beforebegin', template);
+ } else {
+ block.querySelector('.delete').insertAdjacentHTML('afterend', template);
+ }
+
+ let temp = document.getElementById(tempID);
+ let input = temp.querySelector('input');
+ input.focus();
+ input.addEventListener('keydown', (event) => {
+ if (event.keyCode == 27) {
+ event.preventDefault();
+ temp.remove();
+ }
+
+ if (event.keyCode == 13) {
+ event.preventDefault();
+
+ let value = input.value;
+ if (value === '') {
+ temp.remove();
+ return true;
+ }
+
+ let name = value.substring(0, value.lastIndexOf(':'));
+ let newtype = value.substring(value.lastIndexOf(':') + 1, value.length);
+ if (newtype !== "" && newtype !== "array" && newtype !== "object") {
+ name = value;
+ }
+
+ name = name.replace(' ', '_');
+
+ let bid = name;
+ if (id != '') {
+ bid = id + "." + bid;
+ }
+
+ temp.remove();
+
+ switch (newtype) {
+ case "array":
+ case "object":
+ let template = ``;
+
+ if (type == "parent") {
+ document.querySelector('div.button.add').insertAdjacentHTML('beforebegin', template);
+ } else {
+ block.insertAdjacentHTML('beforeend', template);
+ }
+
+ document.querySelector(`div[data-delete="${bid}"]`).addEventListener('click', deleteFrontMatterItem);
+ document.getElementById(bid).querySelector('.action.add').addEventListener('click', addFrontMatterItem);
+ break;
+ default:
+ let group = block.querySelector('.group');
+
+ if (group == null) {
+ block.insertAdjacentHTML('afterbegin', '');
+ group = block.querySelector('.group');
+ }
+
+ group.insertAdjacentHTML('beforeend', `
+
+
+
+ close
+
+
`);
+
+ document.getElementById(bid).focus();
+ document.querySelector(`div[data-delete="block-${bid}"]`).addEventListener('click', deleteFrontMatterItem);
+ }
+ }
+ });
+ }
+
+ return false;
+}
+
+document.addEventListener("DOMContentLoaded", (event) => {
+ textareaAutoGrow();
+
+ let container = document.getElementById('editor');
+ let button = document.querySelector('#submit span:first-child');
+ let kind = container.dataset.kind;
+
+ if (kind != 'frontmatter-only') {
+ let editor = document.getElementById('editor-source');
+ let mode = editor.dataset.mode;
+ let textarea = document.querySelector('textarea[name="content"]');
+ let aceEditor = ace.edit('editor-source');
+ aceEditor.getSession().setMode("ace/mode/" + mode);
+ aceEditor.getSession().setValue(textarea.value);
+ aceEditor.getSession().on('change', function() {
+ textarea.value = aceEditor.getSession().getValue();
+ });
+ aceEditor.setOptions({
+ wrap: true,
+ maxLines: Infinity,
+ theme: "ace/theme/github",
+ showPrintMargin: false,
+ fontSize: "1em",
+ minLines: 20
+ });
+ }
+
+ let deleteFrontMatterItemButtons = document.getElementsByClassName('delete');
+ Array.from(deleteFrontMatterItemButtons).forEach(button => {
+ button.addEventListener('click', deleteFrontMatterItem);
+ });
+
+ let addFrontMatterItemButtons = document.getElementsByClassName('add');
+ Array.from(addFrontMatterItemButtons).forEach(button => {
+ button.addEventListener('click', addFrontMatterItem);
+ });
+
+ let saveContent = function() {
+ let data = form2js(document.querySelector('form'));
+
+ if (typeof data.content === "undefined" && kind != 'frontmatter-only') {
+ data.content = "";
+ }
+
+ if (typeof data.content === "number") {
+ data.content = data.content.toString();
+ }
+
+ let html = button.changeToLoading();
+ let request = new XMLHttpRequest();
+ request.open("PUT", toWebDavURL(window.location.pathname));
+ request.setRequestHeader('Kind', kind);
+
+ request.send(JSON.stringify(data));
+ request.onreadystatechange = function() {
+ if (request.readyState == 4) {
+ button.changeToDone((request.status != 201), html);
+ }
+ }
+ }
+
+ document.querySelector('form').addEventListener('submit', (event) => {
+ event.preventDefault();
+ saveContent();
+ });
+
+ window.addEventListener('keydown', (event) => {
+ if (event.ctrlKey || event.metaKey) {
+ switch (String.fromCharCode(event.which).toLowerCase()) {
+ case 's':
+ event.preventDefault();
+ saveContent();
+ break;
+ }
+ }
+ });
+
+ return false;
+});
\ No newline at end of file
diff --git a/_embed/public/js/listing.js b/_embed/public/js/listing.js
new file mode 100644
index 00000000..985e13ac
--- /dev/null
+++ b/_embed/public/js/listing.js
@@ -0,0 +1,465 @@
+'use strict';
+
+var selectedItems = [];
+
+var reloadListing = function(callback) {
+ let request = new XMLHttpRequest();
+ request.open('GET', window.location);
+ request.setRequestHeader('Minimal', 'true');
+ request.send();
+ request.onreadystatechange = function() {
+ if (request.readyState == 4) {
+ if (request.status == 200) {
+ document.querySelector('body main').innerHTML = request.responseText;
+ addNewDirEvents();
+
+ if (typeof callback == 'function') {
+ callback();
+ }
+ }
+ }
+ }
+}
+
+// Rename file event
+var renameEvent = function(event) {
+ if (this.classList.contains('disabled') || !selectedItems.length) {
+ return false;
+ }
+
+ // This mustn't happen
+ if (selectedItems.length > 1) {
+ alert("Something went wrong. Please refresh the page.");
+ location.refresh();
+ }
+
+ let item = document.getElementById(selectedItems[0]),
+ link = item.dataset.url,
+ span = item.getElementsByTagName('span')[0],
+ name = span.innerHTML;
+
+ span.setAttribute('contenteditable', 'true');
+ span.focus();
+
+ let keyDownEvent = (event) => {
+ if (event.keyCode == 13) {
+ let newName = span.innerHTML,
+ newLink = removeLastDirectoryPartOf(toWebDavURL(link)) + newName,
+ html = document.getElementById('rename').changeToLoading(),
+ request = new XMLHttpRequest();
+
+ request.open('MOVE', toWebDavURL(link));
+ request.setRequestHeader('Destination', newLink);
+ request.setRequestHeader('Content-type', 'text/plain; charset=utf-8');
+ request.send();
+ request.onreadystatechange = function() {
+ // TODO: redirect if it's moved to another folder
+
+ if (request.readyState == 4) {
+ if (request.status != 201 && request.status != 204) {
+ span.innerHTML = name;
+ } else {
+ let newLink = encodeURI(link.replace(name, newName));
+ console.log(request.body)
+ reloadListing(() => {
+ newName = btoa(newName);
+ selectedItems = [newName];
+ document.getElementById(newName).setAttribute("aria-selected", true);
+ document.sendCostumEvent('changed-selected');
+ });
+ }
+
+ document.getElementById('rename').changeToDone((request.status != 201 && request.status != 204), html);
+ }
+ }
+ }
+
+ if (event.KeyCode == 27) {
+ span.innerHTML = name;
+ }
+
+ if (event.keyCode == 13 || event.keyCode == 27) {
+ span.setAttribute('contenteditable', 'false');
+ span.removeEventListener('keydown', keyDownEvent);
+ event.preventDefault();
+ }
+
+ return false;
+ }
+
+ span.addEventListener('keydown', keyDownEvent);
+ span.addEventListener('blur', (event) => {
+ span.innerHTML = name;
+ span.setAttribute('contenteditable', 'false');
+ span.removeEventListener('keydown', keyDownEvent);
+ item.removeEventListener('click', preventDefault);
+ });
+
+ return false;
+}
+
+// Upload files
+var handleFiles = function(files, base) {
+ let button = document.getElementById("upload");
+ let html = button.changeToLoading();
+
+ for (let i = 0; i < files.length; i++) {
+ let request = new XMLHttpRequest();
+ request.open('PUT', toWebDavURL(window.location.pathname + base + files[i].name));
+
+ request.send(files[i]);
+ request.onreadystatechange = function() {
+ if (request.readyState == 4) {
+ if (request.status == 201) {
+ reloadListing();
+ }
+
+ button.changeToDone((request.status != 201), html);
+ }
+ }
+ }
+
+ return false;
+}
+
+// Handles the back button event
+var backEvent = function(event) {
+ var items = document.getElementsByClassName('item');
+ Array.from(items).forEach(link => {
+ link.setAttribute("aria-selected", false);
+ });
+ selectedItems = [];
+
+ var event = new CustomEvent('changed-selected');
+ document.dispatchEvent(event);
+ return false;
+}
+
+// Toggles the view mode
+var viewEvent = function(event) {
+ let cookie = document.getCookie('view-list');
+ let listing = document.getElementById('listing');
+
+ if (cookie != 'true') {
+ document.cookie = 'view-list=true';
+ } else {
+ document.cookie = 'view-list=false';
+ }
+
+ handleViewType(document.getCookie('view-list'));
+ return false;
+}
+
+// Handles the view mode change
+var handleViewType = function(viewList) {
+ let listing = document.getElementById('listing');
+ let button = document.getElementById('view');
+
+ if (viewList == "true") {
+ listing.classList.add('list');
+ button.innerHTML = 'view_module Switch view';
+ return false;
+ }
+
+ button.innerHTML = 'view_list Switch view';
+ listing.classList.remove('list');
+ return false;
+}
+
+var addNewDirEvents = function() {
+ document.getElementById('new').addEventListener('click', event => {
+ let newdir = document.getElementById('newdir');
+ newdir.classList.add('enabled');
+ newdir.focus();
+ });
+
+ document.getElementById('newdir').addEventListener('blur', event => {
+ document.getElementById('newdir').classList.remove('enabled');
+ });
+
+ document.getElementById('newdir').addEventListener('keydown', newDirEvent);
+}
+
+// Handles the new directory event
+var newDirEvent = function(event) {
+ // TODO: create new dir button and new file button
+ if (event.keyCode == 27) {
+ document.getElementById('newdir').classList.toggle('enabled');
+ setTimeout(() => {
+ document.getElementById('newdir').value = '';
+ }, 200);
+ }
+
+ if (event.keyCode == 13) {
+ event.preventDefault();
+
+ let button = document.getElementById('new');
+ let html = button.changeToLoading();
+ let request = new XMLHttpRequest();
+ let name = document.getElementById('newdir').value;
+
+ request.open((name.endsWith("/") ? "MKCOL" : "PUT"), toWebDavURL(window.location.pathname + name));
+
+ request.send();
+ request.onreadystatechange = function() {
+ if (request.readyState == 4) {
+ button.changeToDone((request.status != 201), html);
+ reloadListing(() => {
+ addNewDirEvents();
+ });
+ }
+ }
+ }
+
+ return false;
+}
+
+// Handles the event when there is change on selected elements
+document.addEventListener("changed-selected", function(event) {
+ redefineDownloadURLs();
+
+ let selectedNumber = selectedItems.length,
+ fileAction = document.getElementById("file-only");
+
+ if (selectedNumber) {
+ fileAction.classList.remove("disabled");
+
+ if (selectedNumber > 1) {
+ document.getElementById("open").classList.add("disabled");
+ document.getElementById("rename").classList.add("disabled");
+ }
+
+ if (selectedNumber == 1) {
+ document.getElementById("open").classList.remove("disabled");
+ document.getElementById("rename").classList.remove("disabled");
+ }
+
+ return false;
+ }
+
+ fileAction.classList.add("disabled");
+ return false;
+});
+
+var redefineDownloadURLs = function() {
+ let files = "";
+
+ for (let i = 0; i < selectedItems.length; i++) {
+ let url = document.getElementById(selectedItems[i]).dataset.url;
+ files += url.replace(window.location.pathname, "") + ",";
+ }
+
+ files = files.substring(0, files.length - 1);
+ files = encodeURIComponent(files);
+
+ let links = document.querySelectorAll("#download ul a");
+ Array.from(links).forEach(link => {
+ link.href = "?download=" + link.dataset.format + "&files=" + files;
+ });
+}
+
+
+document.addEventListener('listing', event => {
+ // Handles the current view mode and adds the event to the button
+ handleViewType(document.getCookie("view-list"));
+ document.getElementById("view").addEventListener("click", viewEvent);
+
+ let updateColumns = () => {
+ let columns = Math.floor(document.getElementById('listing').offsetWidth / 300),
+ itens = getCSSRule('#listing .item');
+
+ itens.style.width = `calc(${100/columns}% - 1em)`;
+ }
+
+ updateColumns();
+ window.addEventListener("resize", () => {
+ updateColumns();
+ });
+
+ // Add event to back button and executes back event on ESC
+ document.addEventListener('keydown', (event) => {
+ if (event.keyCode == 27) {
+ backEvent(event);
+ }
+ });
+
+ if (user.AllowCommands) {
+ let search = document.getElementById("search"),
+ searchInput = search.querySelector("input"),
+ searchDiv = search.querySelector("div"),
+ hover = false,
+ focus = false;
+
+ searchInput.addEventListener('focus', event => {
+ focus = true;
+ search.classList.add('active');
+ });
+
+ searchDiv.addEventListener('mouseover', event => {
+ hover = true;
+ search.classList.add('active');
+ });
+
+ searchInput.addEventListener('blur', event => {
+ focus = false;
+ if (hover) return;
+ search.classList.remove('active');
+ });
+
+ search.addEventListener('mouseleave', event => {
+ hover = false;
+ if (focus) return;
+ search.classList.remove('active');
+ });
+
+ search.addEventListener("click", event => {
+ search.classList.add("active");
+ search.querySelector("input").focus();
+ });
+
+ document.querySelector('#search > div div').innerHTML = "Search or use one of your supported commands: " + user.Commands.join(", ") + ".";
+ document.querySelector('#search input').addEventListener('keyup', searchEvent);
+ }
+
+ if (user.AllowEdit) {
+ // Enables rename button
+ document.getElementById("rename").addEventListener("click", renameEvent);
+ }
+
+ if (user.AllowNew) {
+ // Enables upload button
+ document.getElementById("upload").addEventListener("click", (event) => {
+ document.getElementById("upload-input").click();
+ });
+
+ addNewDirEvents();
+
+ // Drag and Drop
+ let items = document.getElementsByClassName('item');
+ document.addEventListener("dragover", function(event) {
+ event.preventDefault();
+ }, false);
+
+ document.addEventListener("dragenter", (event) => {
+ Array.from(items).forEach(file => {
+ file.style.opacity = 0.5;
+ });
+ }, false);
+
+ document.addEventListener("dragend", (event) => {
+ Array.from(items).forEach(file => {
+ file.style.opacity = 1;
+ });
+ }, false);
+
+ document.addEventListener("drop", function(event) {
+ event.preventDefault();
+ var dt = event.dataTransfer;
+ var files = dt.files;
+
+ let el = event.target;
+
+ for (let i = 0; i < 5; i++) {
+ if (el != null && !el.classList.contains('item')) {
+ el = el.parentElement;
+ }
+ }
+
+ if (files.length > 0) {
+ if (el != null && el.classList.contains('item') && el.dataset.dir == "true") {
+ handleFiles(files, el.querySelector('.name').innerHTML + "/");
+ return;
+ }
+
+ handleFiles(files, "");
+ } else {
+ Array.from(items).forEach(file => {
+ file.style.opacity = 1;
+ });
+ }
+
+ }, false);
+ }
+});
+
+function itemDragStart(event) {
+ let el = event.target;
+
+ for (let i = 0; i < 5; i++) {
+ if (!el.classList.contains('item')) {
+ el = el.parentElement;
+ }
+ }
+
+ event.dataTransfer.setData("id", el.id);
+ event.dataTransfer.setData("name", el.querySelector('.name').innerHTML);
+}
+
+function itemDragOver(event) {
+ event.preventDefault();
+ let el = event.target;
+
+ for (let i = 0; i < 5; i++) {
+ if (!el.classList.contains('item')) {
+ el = el.parentElement;
+ }
+ }
+
+ el.style.opacity = 1;
+}
+
+function itemDrop(e) {
+ e.preventDefault();
+
+ let el = e.target,
+ id = e.dataTransfer.getData("id"),
+ name = e.dataTransfer.getData("name");
+
+ if (id == "" || name == "") return;
+
+ for (let i = 0; i < 5; i++) {
+ if (!el.classList.contains('item')) {
+ el = el.parentElement;
+ }
+ }
+
+ if (el.id === id) return;
+
+ let oldLink = toWebDavURL(document.getElementById(id).dataset.url),
+ newLink = toWebDavURL(el.dataset.url + name),
+ request = new XMLHttpRequest();
+
+ request.open('MOVE', oldLink);
+ request.setRequestHeader('Destination', newLink);
+ request.send();
+ request.onreadystatechange = function() {
+ if (request.readyState == 4) {
+ if (request.status == 201 || request.status == 204) {
+ reloadListing();
+ }
+ }
+ }
+}
+
+
+function openItem(event) {
+ window.location = event.currentTarget.dataset.url;
+}
+
+function selectItem(event) {
+ let el = event.currentTarget;
+
+ if (selectedItems.length != 0) event.preventDefault();
+ if (selectedItems.indexOf(el.id) == -1) {
+ if (!event.ctrlKey) backEvent(event);
+
+ el.setAttribute("aria-selected", true);
+ selectedItems.push(el.id);
+ } else {
+ el.setAttribute("aria-selected", false);
+ selectedItems.removeElement(el.id);
+ }
+
+ document.sendCostumEvent("changed-selected");
+ return false;
+}
\ No newline at end of file
diff --git a/_embed/public/js/ace/ace.js b/_embed/public/js/vendor/ace/ace.js
similarity index 100%
rename from _embed/public/js/ace/ace.js
rename to _embed/public/js/vendor/ace/ace.js
diff --git a/_embed/public/js/ace/ext-beautify.js b/_embed/public/js/vendor/ace/ext-beautify.js
similarity index 100%
rename from _embed/public/js/ace/ext-beautify.js
rename to _embed/public/js/vendor/ace/ext-beautify.js
diff --git a/_embed/public/js/ace/ext-chromevox.js b/_embed/public/js/vendor/ace/ext-chromevox.js
similarity index 100%
rename from _embed/public/js/ace/ext-chromevox.js
rename to _embed/public/js/vendor/ace/ext-chromevox.js
diff --git a/_embed/public/js/ace/ext-elastic_tabstops_lite.js b/_embed/public/js/vendor/ace/ext-elastic_tabstops_lite.js
similarity index 100%
rename from _embed/public/js/ace/ext-elastic_tabstops_lite.js
rename to _embed/public/js/vendor/ace/ext-elastic_tabstops_lite.js
diff --git a/_embed/public/js/ace/ext-emmet.js b/_embed/public/js/vendor/ace/ext-emmet.js
similarity index 100%
rename from _embed/public/js/ace/ext-emmet.js
rename to _embed/public/js/vendor/ace/ext-emmet.js
diff --git a/_embed/public/js/ace/ext-error_marker.js b/_embed/public/js/vendor/ace/ext-error_marker.js
similarity index 100%
rename from _embed/public/js/ace/ext-error_marker.js
rename to _embed/public/js/vendor/ace/ext-error_marker.js
diff --git a/_embed/public/js/ace/ext-keybinding_menu.js b/_embed/public/js/vendor/ace/ext-keybinding_menu.js
similarity index 100%
rename from _embed/public/js/ace/ext-keybinding_menu.js
rename to _embed/public/js/vendor/ace/ext-keybinding_menu.js
diff --git a/_embed/public/js/ace/ext-language_tools.js b/_embed/public/js/vendor/ace/ext-language_tools.js
similarity index 100%
rename from _embed/public/js/ace/ext-language_tools.js
rename to _embed/public/js/vendor/ace/ext-language_tools.js
diff --git a/_embed/public/js/ace/ext-linking.js b/_embed/public/js/vendor/ace/ext-linking.js
similarity index 100%
rename from _embed/public/js/ace/ext-linking.js
rename to _embed/public/js/vendor/ace/ext-linking.js
diff --git a/_embed/public/js/ace/ext-modelist.js b/_embed/public/js/vendor/ace/ext-modelist.js
similarity index 100%
rename from _embed/public/js/ace/ext-modelist.js
rename to _embed/public/js/vendor/ace/ext-modelist.js
diff --git a/_embed/public/js/ace/ext-old_ie.js b/_embed/public/js/vendor/ace/ext-old_ie.js
similarity index 100%
rename from _embed/public/js/ace/ext-old_ie.js
rename to _embed/public/js/vendor/ace/ext-old_ie.js
diff --git a/_embed/public/js/ace/ext-searchbox.js b/_embed/public/js/vendor/ace/ext-searchbox.js
similarity index 100%
rename from _embed/public/js/ace/ext-searchbox.js
rename to _embed/public/js/vendor/ace/ext-searchbox.js
diff --git a/_embed/public/js/ace/ext-settings_menu.js b/_embed/public/js/vendor/ace/ext-settings_menu.js
similarity index 100%
rename from _embed/public/js/ace/ext-settings_menu.js
rename to _embed/public/js/vendor/ace/ext-settings_menu.js
diff --git a/_embed/public/js/ace/ext-spellcheck.js b/_embed/public/js/vendor/ace/ext-spellcheck.js
similarity index 100%
rename from _embed/public/js/ace/ext-spellcheck.js
rename to _embed/public/js/vendor/ace/ext-spellcheck.js
diff --git a/_embed/public/js/ace/ext-split.js b/_embed/public/js/vendor/ace/ext-split.js
similarity index 100%
rename from _embed/public/js/ace/ext-split.js
rename to _embed/public/js/vendor/ace/ext-split.js
diff --git a/_embed/public/js/ace/ext-static_highlight.js b/_embed/public/js/vendor/ace/ext-static_highlight.js
similarity index 100%
rename from _embed/public/js/ace/ext-static_highlight.js
rename to _embed/public/js/vendor/ace/ext-static_highlight.js
diff --git a/_embed/public/js/ace/ext-statusbar.js b/_embed/public/js/vendor/ace/ext-statusbar.js
similarity index 100%
rename from _embed/public/js/ace/ext-statusbar.js
rename to _embed/public/js/vendor/ace/ext-statusbar.js
diff --git a/_embed/public/js/ace/ext-textarea.js b/_embed/public/js/vendor/ace/ext-textarea.js
similarity index 100%
rename from _embed/public/js/ace/ext-textarea.js
rename to _embed/public/js/vendor/ace/ext-textarea.js
diff --git a/_embed/public/js/ace/ext-themelist.js b/_embed/public/js/vendor/ace/ext-themelist.js
similarity index 100%
rename from _embed/public/js/ace/ext-themelist.js
rename to _embed/public/js/vendor/ace/ext-themelist.js
diff --git a/_embed/public/js/ace/ext-whitespace.js b/_embed/public/js/vendor/ace/ext-whitespace.js
similarity index 100%
rename from _embed/public/js/ace/ext-whitespace.js
rename to _embed/public/js/vendor/ace/ext-whitespace.js
diff --git a/_embed/public/js/ace/keybinding-emacs.js b/_embed/public/js/vendor/ace/keybinding-emacs.js
similarity index 100%
rename from _embed/public/js/ace/keybinding-emacs.js
rename to _embed/public/js/vendor/ace/keybinding-emacs.js
diff --git a/_embed/public/js/ace/keybinding-vim.js b/_embed/public/js/vendor/ace/keybinding-vim.js
similarity index 100%
rename from _embed/public/js/ace/keybinding-vim.js
rename to _embed/public/js/vendor/ace/keybinding-vim.js
diff --git a/_embed/public/js/ace/mode-abap.js b/_embed/public/js/vendor/ace/mode-abap.js
similarity index 100%
rename from _embed/public/js/ace/mode-abap.js
rename to _embed/public/js/vendor/ace/mode-abap.js
diff --git a/_embed/public/js/ace/mode-abc.js b/_embed/public/js/vendor/ace/mode-abc.js
similarity index 100%
rename from _embed/public/js/ace/mode-abc.js
rename to _embed/public/js/vendor/ace/mode-abc.js
diff --git a/_embed/public/js/ace/mode-actionscript.js b/_embed/public/js/vendor/ace/mode-actionscript.js
similarity index 100%
rename from _embed/public/js/ace/mode-actionscript.js
rename to _embed/public/js/vendor/ace/mode-actionscript.js
diff --git a/_embed/public/js/ace/mode-ada.js b/_embed/public/js/vendor/ace/mode-ada.js
similarity index 100%
rename from _embed/public/js/ace/mode-ada.js
rename to _embed/public/js/vendor/ace/mode-ada.js
diff --git a/_embed/public/js/ace/mode-apache_conf.js b/_embed/public/js/vendor/ace/mode-apache_conf.js
similarity index 100%
rename from _embed/public/js/ace/mode-apache_conf.js
rename to _embed/public/js/vendor/ace/mode-apache_conf.js
diff --git a/_embed/public/js/ace/mode-applescript.js b/_embed/public/js/vendor/ace/mode-applescript.js
similarity index 100%
rename from _embed/public/js/ace/mode-applescript.js
rename to _embed/public/js/vendor/ace/mode-applescript.js
diff --git a/_embed/public/js/ace/mode-asciidoc.js b/_embed/public/js/vendor/ace/mode-asciidoc.js
similarity index 100%
rename from _embed/public/js/ace/mode-asciidoc.js
rename to _embed/public/js/vendor/ace/mode-asciidoc.js
diff --git a/_embed/public/js/ace/mode-assembly_x86.js b/_embed/public/js/vendor/ace/mode-assembly_x86.js
similarity index 100%
rename from _embed/public/js/ace/mode-assembly_x86.js
rename to _embed/public/js/vendor/ace/mode-assembly_x86.js
diff --git a/_embed/public/js/ace/mode-autohotkey.js b/_embed/public/js/vendor/ace/mode-autohotkey.js
similarity index 100%
rename from _embed/public/js/ace/mode-autohotkey.js
rename to _embed/public/js/vendor/ace/mode-autohotkey.js
diff --git a/_embed/public/js/ace/mode-batchfile.js b/_embed/public/js/vendor/ace/mode-batchfile.js
similarity index 100%
rename from _embed/public/js/ace/mode-batchfile.js
rename to _embed/public/js/vendor/ace/mode-batchfile.js
diff --git a/_embed/public/js/ace/mode-bro.js b/_embed/public/js/vendor/ace/mode-bro.js
similarity index 100%
rename from _embed/public/js/ace/mode-bro.js
rename to _embed/public/js/vendor/ace/mode-bro.js
diff --git a/_embed/public/js/ace/mode-c9search.js b/_embed/public/js/vendor/ace/mode-c9search.js
similarity index 100%
rename from _embed/public/js/ace/mode-c9search.js
rename to _embed/public/js/vendor/ace/mode-c9search.js
diff --git a/_embed/public/js/ace/mode-c_cpp.js b/_embed/public/js/vendor/ace/mode-c_cpp.js
similarity index 100%
rename from _embed/public/js/ace/mode-c_cpp.js
rename to _embed/public/js/vendor/ace/mode-c_cpp.js
diff --git a/_embed/public/js/ace/mode-cirru.js b/_embed/public/js/vendor/ace/mode-cirru.js
similarity index 100%
rename from _embed/public/js/ace/mode-cirru.js
rename to _embed/public/js/vendor/ace/mode-cirru.js
diff --git a/_embed/public/js/ace/mode-clojure.js b/_embed/public/js/vendor/ace/mode-clojure.js
similarity index 100%
rename from _embed/public/js/ace/mode-clojure.js
rename to _embed/public/js/vendor/ace/mode-clojure.js
diff --git a/_embed/public/js/ace/mode-cobol.js b/_embed/public/js/vendor/ace/mode-cobol.js
similarity index 100%
rename from _embed/public/js/ace/mode-cobol.js
rename to _embed/public/js/vendor/ace/mode-cobol.js
diff --git a/_embed/public/js/ace/mode-coffee.js b/_embed/public/js/vendor/ace/mode-coffee.js
similarity index 100%
rename from _embed/public/js/ace/mode-coffee.js
rename to _embed/public/js/vendor/ace/mode-coffee.js
diff --git a/_embed/public/js/ace/mode-coldfusion.js b/_embed/public/js/vendor/ace/mode-coldfusion.js
similarity index 100%
rename from _embed/public/js/ace/mode-coldfusion.js
rename to _embed/public/js/vendor/ace/mode-coldfusion.js
diff --git a/_embed/public/js/ace/mode-csharp.js b/_embed/public/js/vendor/ace/mode-csharp.js
similarity index 100%
rename from _embed/public/js/ace/mode-csharp.js
rename to _embed/public/js/vendor/ace/mode-csharp.js
diff --git a/_embed/public/js/ace/mode-css.js b/_embed/public/js/vendor/ace/mode-css.js
similarity index 100%
rename from _embed/public/js/ace/mode-css.js
rename to _embed/public/js/vendor/ace/mode-css.js
diff --git a/_embed/public/js/ace/mode-curly.js b/_embed/public/js/vendor/ace/mode-curly.js
similarity index 100%
rename from _embed/public/js/ace/mode-curly.js
rename to _embed/public/js/vendor/ace/mode-curly.js
diff --git a/_embed/public/js/ace/mode-d.js b/_embed/public/js/vendor/ace/mode-d.js
similarity index 100%
rename from _embed/public/js/ace/mode-d.js
rename to _embed/public/js/vendor/ace/mode-d.js
diff --git a/_embed/public/js/ace/mode-dart.js b/_embed/public/js/vendor/ace/mode-dart.js
similarity index 100%
rename from _embed/public/js/ace/mode-dart.js
rename to _embed/public/js/vendor/ace/mode-dart.js
diff --git a/_embed/public/js/ace/mode-diff.js b/_embed/public/js/vendor/ace/mode-diff.js
similarity index 100%
rename from _embed/public/js/ace/mode-diff.js
rename to _embed/public/js/vendor/ace/mode-diff.js
diff --git a/_embed/public/js/ace/mode-django.js b/_embed/public/js/vendor/ace/mode-django.js
similarity index 100%
rename from _embed/public/js/ace/mode-django.js
rename to _embed/public/js/vendor/ace/mode-django.js
diff --git a/_embed/public/js/ace/mode-dockerfile.js b/_embed/public/js/vendor/ace/mode-dockerfile.js
similarity index 100%
rename from _embed/public/js/ace/mode-dockerfile.js
rename to _embed/public/js/vendor/ace/mode-dockerfile.js
diff --git a/_embed/public/js/ace/mode-dot.js b/_embed/public/js/vendor/ace/mode-dot.js
similarity index 100%
rename from _embed/public/js/ace/mode-dot.js
rename to _embed/public/js/vendor/ace/mode-dot.js
diff --git a/_embed/public/js/ace/mode-drools.js b/_embed/public/js/vendor/ace/mode-drools.js
similarity index 100%
rename from _embed/public/js/ace/mode-drools.js
rename to _embed/public/js/vendor/ace/mode-drools.js
diff --git a/_embed/public/js/ace/mode-eiffel.js b/_embed/public/js/vendor/ace/mode-eiffel.js
similarity index 100%
rename from _embed/public/js/ace/mode-eiffel.js
rename to _embed/public/js/vendor/ace/mode-eiffel.js
diff --git a/_embed/public/js/ace/mode-ejs.js b/_embed/public/js/vendor/ace/mode-ejs.js
similarity index 100%
rename from _embed/public/js/ace/mode-ejs.js
rename to _embed/public/js/vendor/ace/mode-ejs.js
diff --git a/_embed/public/js/ace/mode-elixir.js b/_embed/public/js/vendor/ace/mode-elixir.js
similarity index 100%
rename from _embed/public/js/ace/mode-elixir.js
rename to _embed/public/js/vendor/ace/mode-elixir.js
diff --git a/_embed/public/js/ace/mode-elm.js b/_embed/public/js/vendor/ace/mode-elm.js
similarity index 100%
rename from _embed/public/js/ace/mode-elm.js
rename to _embed/public/js/vendor/ace/mode-elm.js
diff --git a/_embed/public/js/ace/mode-erlang.js b/_embed/public/js/vendor/ace/mode-erlang.js
similarity index 100%
rename from _embed/public/js/ace/mode-erlang.js
rename to _embed/public/js/vendor/ace/mode-erlang.js
diff --git a/_embed/public/js/ace/mode-forth.js b/_embed/public/js/vendor/ace/mode-forth.js
similarity index 100%
rename from _embed/public/js/ace/mode-forth.js
rename to _embed/public/js/vendor/ace/mode-forth.js
diff --git a/_embed/public/js/ace/mode-fortran.js b/_embed/public/js/vendor/ace/mode-fortran.js
similarity index 100%
rename from _embed/public/js/ace/mode-fortran.js
rename to _embed/public/js/vendor/ace/mode-fortran.js
diff --git a/_embed/public/js/ace/mode-ftl.js b/_embed/public/js/vendor/ace/mode-ftl.js
similarity index 100%
rename from _embed/public/js/ace/mode-ftl.js
rename to _embed/public/js/vendor/ace/mode-ftl.js
diff --git a/_embed/public/js/ace/mode-gcode.js b/_embed/public/js/vendor/ace/mode-gcode.js
similarity index 100%
rename from _embed/public/js/ace/mode-gcode.js
rename to _embed/public/js/vendor/ace/mode-gcode.js
diff --git a/_embed/public/js/ace/mode-gherkin.js b/_embed/public/js/vendor/ace/mode-gherkin.js
similarity index 100%
rename from _embed/public/js/ace/mode-gherkin.js
rename to _embed/public/js/vendor/ace/mode-gherkin.js
diff --git a/_embed/public/js/ace/mode-gitignore.js b/_embed/public/js/vendor/ace/mode-gitignore.js
similarity index 100%
rename from _embed/public/js/ace/mode-gitignore.js
rename to _embed/public/js/vendor/ace/mode-gitignore.js
diff --git a/_embed/public/js/ace/mode-glsl.js b/_embed/public/js/vendor/ace/mode-glsl.js
similarity index 100%
rename from _embed/public/js/ace/mode-glsl.js
rename to _embed/public/js/vendor/ace/mode-glsl.js
diff --git a/_embed/public/js/ace/mode-gobstones.js b/_embed/public/js/vendor/ace/mode-gobstones.js
similarity index 100%
rename from _embed/public/js/ace/mode-gobstones.js
rename to _embed/public/js/vendor/ace/mode-gobstones.js
diff --git a/_embed/public/js/ace/mode-golang.js b/_embed/public/js/vendor/ace/mode-golang.js
similarity index 100%
rename from _embed/public/js/ace/mode-golang.js
rename to _embed/public/js/vendor/ace/mode-golang.js
diff --git a/_embed/public/js/ace/mode-groovy.js b/_embed/public/js/vendor/ace/mode-groovy.js
similarity index 100%
rename from _embed/public/js/ace/mode-groovy.js
rename to _embed/public/js/vendor/ace/mode-groovy.js
diff --git a/_embed/public/js/ace/mode-haml.js b/_embed/public/js/vendor/ace/mode-haml.js
similarity index 100%
rename from _embed/public/js/ace/mode-haml.js
rename to _embed/public/js/vendor/ace/mode-haml.js
diff --git a/_embed/public/js/ace/mode-handlebars.js b/_embed/public/js/vendor/ace/mode-handlebars.js
similarity index 100%
rename from _embed/public/js/ace/mode-handlebars.js
rename to _embed/public/js/vendor/ace/mode-handlebars.js
diff --git a/_embed/public/js/ace/mode-haskell.js b/_embed/public/js/vendor/ace/mode-haskell.js
similarity index 100%
rename from _embed/public/js/ace/mode-haskell.js
rename to _embed/public/js/vendor/ace/mode-haskell.js
diff --git a/_embed/public/js/ace/mode-haskell_cabal.js b/_embed/public/js/vendor/ace/mode-haskell_cabal.js
similarity index 100%
rename from _embed/public/js/ace/mode-haskell_cabal.js
rename to _embed/public/js/vendor/ace/mode-haskell_cabal.js
diff --git a/_embed/public/js/ace/mode-haxe.js b/_embed/public/js/vendor/ace/mode-haxe.js
similarity index 100%
rename from _embed/public/js/ace/mode-haxe.js
rename to _embed/public/js/vendor/ace/mode-haxe.js
diff --git a/_embed/public/js/ace/mode-hjson.js b/_embed/public/js/vendor/ace/mode-hjson.js
similarity index 100%
rename from _embed/public/js/ace/mode-hjson.js
rename to _embed/public/js/vendor/ace/mode-hjson.js
diff --git a/_embed/public/js/ace/mode-html.js b/_embed/public/js/vendor/ace/mode-html.js
similarity index 100%
rename from _embed/public/js/ace/mode-html.js
rename to _embed/public/js/vendor/ace/mode-html.js
diff --git a/_embed/public/js/ace/mode-html_elixir.js b/_embed/public/js/vendor/ace/mode-html_elixir.js
similarity index 100%
rename from _embed/public/js/ace/mode-html_elixir.js
rename to _embed/public/js/vendor/ace/mode-html_elixir.js
diff --git a/_embed/public/js/ace/mode-html_ruby.js b/_embed/public/js/vendor/ace/mode-html_ruby.js
similarity index 100%
rename from _embed/public/js/ace/mode-html_ruby.js
rename to _embed/public/js/vendor/ace/mode-html_ruby.js
diff --git a/_embed/public/js/ace/mode-ini.js b/_embed/public/js/vendor/ace/mode-ini.js
similarity index 100%
rename from _embed/public/js/ace/mode-ini.js
rename to _embed/public/js/vendor/ace/mode-ini.js
diff --git a/_embed/public/js/ace/mode-io.js b/_embed/public/js/vendor/ace/mode-io.js
similarity index 100%
rename from _embed/public/js/ace/mode-io.js
rename to _embed/public/js/vendor/ace/mode-io.js
diff --git a/_embed/public/js/ace/mode-jack.js b/_embed/public/js/vendor/ace/mode-jack.js
similarity index 100%
rename from _embed/public/js/ace/mode-jack.js
rename to _embed/public/js/vendor/ace/mode-jack.js
diff --git a/_embed/public/js/ace/mode-jade.js b/_embed/public/js/vendor/ace/mode-jade.js
similarity index 100%
rename from _embed/public/js/ace/mode-jade.js
rename to _embed/public/js/vendor/ace/mode-jade.js
diff --git a/_embed/public/js/ace/mode-java.js b/_embed/public/js/vendor/ace/mode-java.js
similarity index 100%
rename from _embed/public/js/ace/mode-java.js
rename to _embed/public/js/vendor/ace/mode-java.js
diff --git a/_embed/public/js/ace/mode-javascript.js b/_embed/public/js/vendor/ace/mode-javascript.js
similarity index 100%
rename from _embed/public/js/ace/mode-javascript.js
rename to _embed/public/js/vendor/ace/mode-javascript.js
diff --git a/_embed/public/js/ace/mode-json.js b/_embed/public/js/vendor/ace/mode-json.js
similarity index 100%
rename from _embed/public/js/ace/mode-json.js
rename to _embed/public/js/vendor/ace/mode-json.js
diff --git a/_embed/public/js/ace/mode-jsoniq.js b/_embed/public/js/vendor/ace/mode-jsoniq.js
similarity index 100%
rename from _embed/public/js/ace/mode-jsoniq.js
rename to _embed/public/js/vendor/ace/mode-jsoniq.js
diff --git a/_embed/public/js/ace/mode-jsp.js b/_embed/public/js/vendor/ace/mode-jsp.js
similarity index 100%
rename from _embed/public/js/ace/mode-jsp.js
rename to _embed/public/js/vendor/ace/mode-jsp.js
diff --git a/_embed/public/js/ace/mode-jsx.js b/_embed/public/js/vendor/ace/mode-jsx.js
similarity index 100%
rename from _embed/public/js/ace/mode-jsx.js
rename to _embed/public/js/vendor/ace/mode-jsx.js
diff --git a/_embed/public/js/ace/mode-julia.js b/_embed/public/js/vendor/ace/mode-julia.js
similarity index 100%
rename from _embed/public/js/ace/mode-julia.js
rename to _embed/public/js/vendor/ace/mode-julia.js
diff --git a/_embed/public/js/ace/mode-kotlin.js b/_embed/public/js/vendor/ace/mode-kotlin.js
similarity index 100%
rename from _embed/public/js/ace/mode-kotlin.js
rename to _embed/public/js/vendor/ace/mode-kotlin.js
diff --git a/_embed/public/js/ace/mode-latex.js b/_embed/public/js/vendor/ace/mode-latex.js
similarity index 100%
rename from _embed/public/js/ace/mode-latex.js
rename to _embed/public/js/vendor/ace/mode-latex.js
diff --git a/_embed/public/js/ace/mode-lean.js b/_embed/public/js/vendor/ace/mode-lean.js
similarity index 100%
rename from _embed/public/js/ace/mode-lean.js
rename to _embed/public/js/vendor/ace/mode-lean.js
diff --git a/_embed/public/js/ace/mode-less.js b/_embed/public/js/vendor/ace/mode-less.js
similarity index 100%
rename from _embed/public/js/ace/mode-less.js
rename to _embed/public/js/vendor/ace/mode-less.js
diff --git a/_embed/public/js/ace/mode-liquid.js b/_embed/public/js/vendor/ace/mode-liquid.js
similarity index 100%
rename from _embed/public/js/ace/mode-liquid.js
rename to _embed/public/js/vendor/ace/mode-liquid.js
diff --git a/_embed/public/js/ace/mode-lisp.js b/_embed/public/js/vendor/ace/mode-lisp.js
similarity index 100%
rename from _embed/public/js/ace/mode-lisp.js
rename to _embed/public/js/vendor/ace/mode-lisp.js
diff --git a/_embed/public/js/ace/mode-live_script.js b/_embed/public/js/vendor/ace/mode-live_script.js
similarity index 100%
rename from _embed/public/js/ace/mode-live_script.js
rename to _embed/public/js/vendor/ace/mode-live_script.js
diff --git a/_embed/public/js/ace/mode-livescript.js b/_embed/public/js/vendor/ace/mode-livescript.js
similarity index 100%
rename from _embed/public/js/ace/mode-livescript.js
rename to _embed/public/js/vendor/ace/mode-livescript.js
diff --git a/_embed/public/js/ace/mode-logiql.js b/_embed/public/js/vendor/ace/mode-logiql.js
similarity index 100%
rename from _embed/public/js/ace/mode-logiql.js
rename to _embed/public/js/vendor/ace/mode-logiql.js
diff --git a/_embed/public/js/ace/mode-lsl.js b/_embed/public/js/vendor/ace/mode-lsl.js
similarity index 100%
rename from _embed/public/js/ace/mode-lsl.js
rename to _embed/public/js/vendor/ace/mode-lsl.js
diff --git a/_embed/public/js/ace/mode-lua.js b/_embed/public/js/vendor/ace/mode-lua.js
similarity index 100%
rename from _embed/public/js/ace/mode-lua.js
rename to _embed/public/js/vendor/ace/mode-lua.js
diff --git a/_embed/public/js/ace/mode-luapage.js b/_embed/public/js/vendor/ace/mode-luapage.js
similarity index 100%
rename from _embed/public/js/ace/mode-luapage.js
rename to _embed/public/js/vendor/ace/mode-luapage.js
diff --git a/_embed/public/js/ace/mode-lucene.js b/_embed/public/js/vendor/ace/mode-lucene.js
similarity index 100%
rename from _embed/public/js/ace/mode-lucene.js
rename to _embed/public/js/vendor/ace/mode-lucene.js
diff --git a/_embed/public/js/ace/mode-makefile.js b/_embed/public/js/vendor/ace/mode-makefile.js
similarity index 100%
rename from _embed/public/js/ace/mode-makefile.js
rename to _embed/public/js/vendor/ace/mode-makefile.js
diff --git a/_embed/public/js/ace/mode-markdown.js b/_embed/public/js/vendor/ace/mode-markdown.js
similarity index 100%
rename from _embed/public/js/ace/mode-markdown.js
rename to _embed/public/js/vendor/ace/mode-markdown.js
diff --git a/_embed/public/js/ace/mode-mask.js b/_embed/public/js/vendor/ace/mode-mask.js
similarity index 100%
rename from _embed/public/js/ace/mode-mask.js
rename to _embed/public/js/vendor/ace/mode-mask.js
diff --git a/_embed/public/js/ace/mode-matlab.js b/_embed/public/js/vendor/ace/mode-matlab.js
similarity index 100%
rename from _embed/public/js/ace/mode-matlab.js
rename to _embed/public/js/vendor/ace/mode-matlab.js
diff --git a/_embed/public/js/ace/mode-maze.js b/_embed/public/js/vendor/ace/mode-maze.js
similarity index 100%
rename from _embed/public/js/ace/mode-maze.js
rename to _embed/public/js/vendor/ace/mode-maze.js
diff --git a/_embed/public/js/ace/mode-mel.js b/_embed/public/js/vendor/ace/mode-mel.js
similarity index 100%
rename from _embed/public/js/ace/mode-mel.js
rename to _embed/public/js/vendor/ace/mode-mel.js
diff --git a/_embed/public/js/ace/mode-mips_assembler.js b/_embed/public/js/vendor/ace/mode-mips_assembler.js
similarity index 100%
rename from _embed/public/js/ace/mode-mips_assembler.js
rename to _embed/public/js/vendor/ace/mode-mips_assembler.js
diff --git a/_embed/public/js/ace/mode-mipsassembler.js b/_embed/public/js/vendor/ace/mode-mipsassembler.js
similarity index 100%
rename from _embed/public/js/ace/mode-mipsassembler.js
rename to _embed/public/js/vendor/ace/mode-mipsassembler.js
diff --git a/_embed/public/js/ace/mode-mushcode.js b/_embed/public/js/vendor/ace/mode-mushcode.js
similarity index 100%
rename from _embed/public/js/ace/mode-mushcode.js
rename to _embed/public/js/vendor/ace/mode-mushcode.js
diff --git a/_embed/public/js/ace/mode-mysql.js b/_embed/public/js/vendor/ace/mode-mysql.js
similarity index 100%
rename from _embed/public/js/ace/mode-mysql.js
rename to _embed/public/js/vendor/ace/mode-mysql.js
diff --git a/_embed/public/js/ace/mode-nix.js b/_embed/public/js/vendor/ace/mode-nix.js
similarity index 100%
rename from _embed/public/js/ace/mode-nix.js
rename to _embed/public/js/vendor/ace/mode-nix.js
diff --git a/_embed/public/js/ace/mode-nsis.js b/_embed/public/js/vendor/ace/mode-nsis.js
similarity index 100%
rename from _embed/public/js/ace/mode-nsis.js
rename to _embed/public/js/vendor/ace/mode-nsis.js
diff --git a/_embed/public/js/ace/mode-objectivec.js b/_embed/public/js/vendor/ace/mode-objectivec.js
similarity index 100%
rename from _embed/public/js/ace/mode-objectivec.js
rename to _embed/public/js/vendor/ace/mode-objectivec.js
diff --git a/_embed/public/js/ace/mode-ocaml.js b/_embed/public/js/vendor/ace/mode-ocaml.js
similarity index 100%
rename from _embed/public/js/ace/mode-ocaml.js
rename to _embed/public/js/vendor/ace/mode-ocaml.js
diff --git a/_embed/public/js/ace/mode-pascal.js b/_embed/public/js/vendor/ace/mode-pascal.js
similarity index 100%
rename from _embed/public/js/ace/mode-pascal.js
rename to _embed/public/js/vendor/ace/mode-pascal.js
diff --git a/_embed/public/js/ace/mode-perl.js b/_embed/public/js/vendor/ace/mode-perl.js
similarity index 100%
rename from _embed/public/js/ace/mode-perl.js
rename to _embed/public/js/vendor/ace/mode-perl.js
diff --git a/_embed/public/js/ace/mode-pgsql.js b/_embed/public/js/vendor/ace/mode-pgsql.js
similarity index 100%
rename from _embed/public/js/ace/mode-pgsql.js
rename to _embed/public/js/vendor/ace/mode-pgsql.js
diff --git a/_embed/public/js/ace/mode-php.js b/_embed/public/js/vendor/ace/mode-php.js
similarity index 100%
rename from _embed/public/js/ace/mode-php.js
rename to _embed/public/js/vendor/ace/mode-php.js
diff --git a/_embed/public/js/ace/mode-plain_text.js b/_embed/public/js/vendor/ace/mode-plain_text.js
similarity index 100%
rename from _embed/public/js/ace/mode-plain_text.js
rename to _embed/public/js/vendor/ace/mode-plain_text.js
diff --git a/_embed/public/js/ace/mode-powershell.js b/_embed/public/js/vendor/ace/mode-powershell.js
similarity index 100%
rename from _embed/public/js/ace/mode-powershell.js
rename to _embed/public/js/vendor/ace/mode-powershell.js
diff --git a/_embed/public/js/ace/mode-praat.js b/_embed/public/js/vendor/ace/mode-praat.js
similarity index 100%
rename from _embed/public/js/ace/mode-praat.js
rename to _embed/public/js/vendor/ace/mode-praat.js
diff --git a/_embed/public/js/ace/mode-prolog.js b/_embed/public/js/vendor/ace/mode-prolog.js
similarity index 100%
rename from _embed/public/js/ace/mode-prolog.js
rename to _embed/public/js/vendor/ace/mode-prolog.js
diff --git a/_embed/public/js/ace/mode-properties.js b/_embed/public/js/vendor/ace/mode-properties.js
similarity index 100%
rename from _embed/public/js/ace/mode-properties.js
rename to _embed/public/js/vendor/ace/mode-properties.js
diff --git a/_embed/public/js/ace/mode-protobuf.js b/_embed/public/js/vendor/ace/mode-protobuf.js
similarity index 100%
rename from _embed/public/js/ace/mode-protobuf.js
rename to _embed/public/js/vendor/ace/mode-protobuf.js
diff --git a/_embed/public/js/ace/mode-python.js b/_embed/public/js/vendor/ace/mode-python.js
similarity index 100%
rename from _embed/public/js/ace/mode-python.js
rename to _embed/public/js/vendor/ace/mode-python.js
diff --git a/_embed/public/js/ace/mode-r.js b/_embed/public/js/vendor/ace/mode-r.js
similarity index 100%
rename from _embed/public/js/ace/mode-r.js
rename to _embed/public/js/vendor/ace/mode-r.js
diff --git a/_embed/public/js/ace/mode-razor.js b/_embed/public/js/vendor/ace/mode-razor.js
similarity index 100%
rename from _embed/public/js/ace/mode-razor.js
rename to _embed/public/js/vendor/ace/mode-razor.js
diff --git a/_embed/public/js/ace/mode-rdoc.js b/_embed/public/js/vendor/ace/mode-rdoc.js
similarity index 100%
rename from _embed/public/js/ace/mode-rdoc.js
rename to _embed/public/js/vendor/ace/mode-rdoc.js
diff --git a/_embed/public/js/ace/mode-rhtml.js b/_embed/public/js/vendor/ace/mode-rhtml.js
similarity index 100%
rename from _embed/public/js/ace/mode-rhtml.js
rename to _embed/public/js/vendor/ace/mode-rhtml.js
diff --git a/_embed/public/js/ace/mode-rst.js b/_embed/public/js/vendor/ace/mode-rst.js
similarity index 100%
rename from _embed/public/js/ace/mode-rst.js
rename to _embed/public/js/vendor/ace/mode-rst.js
diff --git a/_embed/public/js/ace/mode-ruby.js b/_embed/public/js/vendor/ace/mode-ruby.js
similarity index 100%
rename from _embed/public/js/ace/mode-ruby.js
rename to _embed/public/js/vendor/ace/mode-ruby.js
diff --git a/_embed/public/js/ace/mode-rust.js b/_embed/public/js/vendor/ace/mode-rust.js
similarity index 100%
rename from _embed/public/js/ace/mode-rust.js
rename to _embed/public/js/vendor/ace/mode-rust.js
diff --git a/_embed/public/js/ace/mode-sass.js b/_embed/public/js/vendor/ace/mode-sass.js
similarity index 100%
rename from _embed/public/js/ace/mode-sass.js
rename to _embed/public/js/vendor/ace/mode-sass.js
diff --git a/_embed/public/js/ace/mode-scad.js b/_embed/public/js/vendor/ace/mode-scad.js
similarity index 100%
rename from _embed/public/js/ace/mode-scad.js
rename to _embed/public/js/vendor/ace/mode-scad.js
diff --git a/_embed/public/js/ace/mode-scala.js b/_embed/public/js/vendor/ace/mode-scala.js
similarity index 100%
rename from _embed/public/js/ace/mode-scala.js
rename to _embed/public/js/vendor/ace/mode-scala.js
diff --git a/_embed/public/js/ace/mode-scheme.js b/_embed/public/js/vendor/ace/mode-scheme.js
similarity index 100%
rename from _embed/public/js/ace/mode-scheme.js
rename to _embed/public/js/vendor/ace/mode-scheme.js
diff --git a/_embed/public/js/ace/mode-scss.js b/_embed/public/js/vendor/ace/mode-scss.js
similarity index 100%
rename from _embed/public/js/ace/mode-scss.js
rename to _embed/public/js/vendor/ace/mode-scss.js
diff --git a/_embed/public/js/ace/mode-sh.js b/_embed/public/js/vendor/ace/mode-sh.js
similarity index 100%
rename from _embed/public/js/ace/mode-sh.js
rename to _embed/public/js/vendor/ace/mode-sh.js
diff --git a/_embed/public/js/ace/mode-sjs.js b/_embed/public/js/vendor/ace/mode-sjs.js
similarity index 100%
rename from _embed/public/js/ace/mode-sjs.js
rename to _embed/public/js/vendor/ace/mode-sjs.js
diff --git a/_embed/public/js/ace/mode-smarty.js b/_embed/public/js/vendor/ace/mode-smarty.js
similarity index 100%
rename from _embed/public/js/ace/mode-smarty.js
rename to _embed/public/js/vendor/ace/mode-smarty.js
diff --git a/_embed/public/js/ace/mode-snippets.js b/_embed/public/js/vendor/ace/mode-snippets.js
similarity index 100%
rename from _embed/public/js/ace/mode-snippets.js
rename to _embed/public/js/vendor/ace/mode-snippets.js
diff --git a/_embed/public/js/ace/mode-soy_template.js b/_embed/public/js/vendor/ace/mode-soy_template.js
similarity index 100%
rename from _embed/public/js/ace/mode-soy_template.js
rename to _embed/public/js/vendor/ace/mode-soy_template.js
diff --git a/_embed/public/js/ace/mode-space.js b/_embed/public/js/vendor/ace/mode-space.js
similarity index 100%
rename from _embed/public/js/ace/mode-space.js
rename to _embed/public/js/vendor/ace/mode-space.js
diff --git a/_embed/public/js/ace/mode-sql.js b/_embed/public/js/vendor/ace/mode-sql.js
similarity index 100%
rename from _embed/public/js/ace/mode-sql.js
rename to _embed/public/js/vendor/ace/mode-sql.js
diff --git a/_embed/public/js/ace/mode-sqlserver.js b/_embed/public/js/vendor/ace/mode-sqlserver.js
similarity index 100%
rename from _embed/public/js/ace/mode-sqlserver.js
rename to _embed/public/js/vendor/ace/mode-sqlserver.js
diff --git a/_embed/public/js/ace/mode-stylus.js b/_embed/public/js/vendor/ace/mode-stylus.js
similarity index 100%
rename from _embed/public/js/ace/mode-stylus.js
rename to _embed/public/js/vendor/ace/mode-stylus.js
diff --git a/_embed/public/js/ace/mode-svg.js b/_embed/public/js/vendor/ace/mode-svg.js
similarity index 100%
rename from _embed/public/js/ace/mode-svg.js
rename to _embed/public/js/vendor/ace/mode-svg.js
diff --git a/_embed/public/js/ace/mode-swift.js b/_embed/public/js/vendor/ace/mode-swift.js
similarity index 100%
rename from _embed/public/js/ace/mode-swift.js
rename to _embed/public/js/vendor/ace/mode-swift.js
diff --git a/_embed/public/js/ace/mode-swig.js b/_embed/public/js/vendor/ace/mode-swig.js
similarity index 100%
rename from _embed/public/js/ace/mode-swig.js
rename to _embed/public/js/vendor/ace/mode-swig.js
diff --git a/_embed/public/js/ace/mode-tcl.js b/_embed/public/js/vendor/ace/mode-tcl.js
similarity index 100%
rename from _embed/public/js/ace/mode-tcl.js
rename to _embed/public/js/vendor/ace/mode-tcl.js
diff --git a/_embed/public/js/ace/mode-tex.js b/_embed/public/js/vendor/ace/mode-tex.js
similarity index 100%
rename from _embed/public/js/ace/mode-tex.js
rename to _embed/public/js/vendor/ace/mode-tex.js
diff --git a/_embed/public/js/ace/mode-text.js b/_embed/public/js/vendor/ace/mode-text.js
similarity index 100%
rename from _embed/public/js/ace/mode-text.js
rename to _embed/public/js/vendor/ace/mode-text.js
diff --git a/_embed/public/js/ace/mode-textile.js b/_embed/public/js/vendor/ace/mode-textile.js
similarity index 100%
rename from _embed/public/js/ace/mode-textile.js
rename to _embed/public/js/vendor/ace/mode-textile.js
diff --git a/_embed/public/js/ace/mode-toml.js b/_embed/public/js/vendor/ace/mode-toml.js
similarity index 100%
rename from _embed/public/js/ace/mode-toml.js
rename to _embed/public/js/vendor/ace/mode-toml.js
diff --git a/_embed/public/js/ace/mode-tsx.js b/_embed/public/js/vendor/ace/mode-tsx.js
similarity index 100%
rename from _embed/public/js/ace/mode-tsx.js
rename to _embed/public/js/vendor/ace/mode-tsx.js
diff --git a/_embed/public/js/ace/mode-twig.js b/_embed/public/js/vendor/ace/mode-twig.js
similarity index 100%
rename from _embed/public/js/ace/mode-twig.js
rename to _embed/public/js/vendor/ace/mode-twig.js
diff --git a/_embed/public/js/ace/mode-typescript.js b/_embed/public/js/vendor/ace/mode-typescript.js
similarity index 100%
rename from _embed/public/js/ace/mode-typescript.js
rename to _embed/public/js/vendor/ace/mode-typescript.js
diff --git a/_embed/public/js/ace/mode-vala.js b/_embed/public/js/vendor/ace/mode-vala.js
similarity index 100%
rename from _embed/public/js/ace/mode-vala.js
rename to _embed/public/js/vendor/ace/mode-vala.js
diff --git a/_embed/public/js/ace/mode-vbscript.js b/_embed/public/js/vendor/ace/mode-vbscript.js
similarity index 100%
rename from _embed/public/js/ace/mode-vbscript.js
rename to _embed/public/js/vendor/ace/mode-vbscript.js
diff --git a/_embed/public/js/ace/mode-velocity.js b/_embed/public/js/vendor/ace/mode-velocity.js
similarity index 100%
rename from _embed/public/js/ace/mode-velocity.js
rename to _embed/public/js/vendor/ace/mode-velocity.js
diff --git a/_embed/public/js/ace/mode-verilog.js b/_embed/public/js/vendor/ace/mode-verilog.js
similarity index 100%
rename from _embed/public/js/ace/mode-verilog.js
rename to _embed/public/js/vendor/ace/mode-verilog.js
diff --git a/_embed/public/js/ace/mode-vhdl.js b/_embed/public/js/vendor/ace/mode-vhdl.js
similarity index 100%
rename from _embed/public/js/ace/mode-vhdl.js
rename to _embed/public/js/vendor/ace/mode-vhdl.js
diff --git a/_embed/public/js/ace/mode-wollok.js b/_embed/public/js/vendor/ace/mode-wollok.js
similarity index 100%
rename from _embed/public/js/ace/mode-wollok.js
rename to _embed/public/js/vendor/ace/mode-wollok.js
diff --git a/_embed/public/js/ace/mode-xml.js b/_embed/public/js/vendor/ace/mode-xml.js
similarity index 100%
rename from _embed/public/js/ace/mode-xml.js
rename to _embed/public/js/vendor/ace/mode-xml.js
diff --git a/_embed/public/js/ace/mode-xquery.js b/_embed/public/js/vendor/ace/mode-xquery.js
similarity index 100%
rename from _embed/public/js/ace/mode-xquery.js
rename to _embed/public/js/vendor/ace/mode-xquery.js
diff --git a/_embed/public/js/ace/mode-yaml.js b/_embed/public/js/vendor/ace/mode-yaml.js
similarity index 100%
rename from _embed/public/js/ace/mode-yaml.js
rename to _embed/public/js/vendor/ace/mode-yaml.js
diff --git a/_embed/public/js/ace/snippets/abap.js b/_embed/public/js/vendor/ace/snippets/abap.js
similarity index 100%
rename from _embed/public/js/ace/snippets/abap.js
rename to _embed/public/js/vendor/ace/snippets/abap.js
diff --git a/_embed/public/js/ace/snippets/abc.js b/_embed/public/js/vendor/ace/snippets/abc.js
similarity index 100%
rename from _embed/public/js/ace/snippets/abc.js
rename to _embed/public/js/vendor/ace/snippets/abc.js
diff --git a/_embed/public/js/ace/snippets/actionscript.js b/_embed/public/js/vendor/ace/snippets/actionscript.js
similarity index 100%
rename from _embed/public/js/ace/snippets/actionscript.js
rename to _embed/public/js/vendor/ace/snippets/actionscript.js
diff --git a/_embed/public/js/ace/snippets/ada.js b/_embed/public/js/vendor/ace/snippets/ada.js
similarity index 100%
rename from _embed/public/js/ace/snippets/ada.js
rename to _embed/public/js/vendor/ace/snippets/ada.js
diff --git a/_embed/public/js/ace/snippets/apache_conf.js b/_embed/public/js/vendor/ace/snippets/apache_conf.js
similarity index 100%
rename from _embed/public/js/ace/snippets/apache_conf.js
rename to _embed/public/js/vendor/ace/snippets/apache_conf.js
diff --git a/_embed/public/js/ace/snippets/applescript.js b/_embed/public/js/vendor/ace/snippets/applescript.js
similarity index 100%
rename from _embed/public/js/ace/snippets/applescript.js
rename to _embed/public/js/vendor/ace/snippets/applescript.js
diff --git a/_embed/public/js/ace/snippets/asciidoc.js b/_embed/public/js/vendor/ace/snippets/asciidoc.js
similarity index 100%
rename from _embed/public/js/ace/snippets/asciidoc.js
rename to _embed/public/js/vendor/ace/snippets/asciidoc.js
diff --git a/_embed/public/js/ace/snippets/assembly_x86.js b/_embed/public/js/vendor/ace/snippets/assembly_x86.js
similarity index 100%
rename from _embed/public/js/ace/snippets/assembly_x86.js
rename to _embed/public/js/vendor/ace/snippets/assembly_x86.js
diff --git a/_embed/public/js/ace/snippets/autohotkey.js b/_embed/public/js/vendor/ace/snippets/autohotkey.js
similarity index 100%
rename from _embed/public/js/ace/snippets/autohotkey.js
rename to _embed/public/js/vendor/ace/snippets/autohotkey.js
diff --git a/_embed/public/js/ace/snippets/batchfile.js b/_embed/public/js/vendor/ace/snippets/batchfile.js
similarity index 100%
rename from _embed/public/js/ace/snippets/batchfile.js
rename to _embed/public/js/vendor/ace/snippets/batchfile.js
diff --git a/_embed/public/js/ace/snippets/bro.js b/_embed/public/js/vendor/ace/snippets/bro.js
similarity index 100%
rename from _embed/public/js/ace/snippets/bro.js
rename to _embed/public/js/vendor/ace/snippets/bro.js
diff --git a/_embed/public/js/ace/snippets/c9search.js b/_embed/public/js/vendor/ace/snippets/c9search.js
similarity index 100%
rename from _embed/public/js/ace/snippets/c9search.js
rename to _embed/public/js/vendor/ace/snippets/c9search.js
diff --git a/_embed/public/js/ace/snippets/c_cpp.js b/_embed/public/js/vendor/ace/snippets/c_cpp.js
similarity index 100%
rename from _embed/public/js/ace/snippets/c_cpp.js
rename to _embed/public/js/vendor/ace/snippets/c_cpp.js
diff --git a/_embed/public/js/ace/snippets/cirru.js b/_embed/public/js/vendor/ace/snippets/cirru.js
similarity index 100%
rename from _embed/public/js/ace/snippets/cirru.js
rename to _embed/public/js/vendor/ace/snippets/cirru.js
diff --git a/_embed/public/js/ace/snippets/clojure.js b/_embed/public/js/vendor/ace/snippets/clojure.js
similarity index 100%
rename from _embed/public/js/ace/snippets/clojure.js
rename to _embed/public/js/vendor/ace/snippets/clojure.js
diff --git a/_embed/public/js/ace/snippets/cobol.js b/_embed/public/js/vendor/ace/snippets/cobol.js
similarity index 100%
rename from _embed/public/js/ace/snippets/cobol.js
rename to _embed/public/js/vendor/ace/snippets/cobol.js
diff --git a/_embed/public/js/ace/snippets/coffee.js b/_embed/public/js/vendor/ace/snippets/coffee.js
similarity index 100%
rename from _embed/public/js/ace/snippets/coffee.js
rename to _embed/public/js/vendor/ace/snippets/coffee.js
diff --git a/_embed/public/js/ace/snippets/coldfusion.js b/_embed/public/js/vendor/ace/snippets/coldfusion.js
similarity index 100%
rename from _embed/public/js/ace/snippets/coldfusion.js
rename to _embed/public/js/vendor/ace/snippets/coldfusion.js
diff --git a/_embed/public/js/ace/snippets/csharp.js b/_embed/public/js/vendor/ace/snippets/csharp.js
similarity index 100%
rename from _embed/public/js/ace/snippets/csharp.js
rename to _embed/public/js/vendor/ace/snippets/csharp.js
diff --git a/_embed/public/js/ace/snippets/css.js b/_embed/public/js/vendor/ace/snippets/css.js
similarity index 100%
rename from _embed/public/js/ace/snippets/css.js
rename to _embed/public/js/vendor/ace/snippets/css.js
diff --git a/_embed/public/js/ace/snippets/curly.js b/_embed/public/js/vendor/ace/snippets/curly.js
similarity index 100%
rename from _embed/public/js/ace/snippets/curly.js
rename to _embed/public/js/vendor/ace/snippets/curly.js
diff --git a/_embed/public/js/ace/snippets/d.js b/_embed/public/js/vendor/ace/snippets/d.js
similarity index 100%
rename from _embed/public/js/ace/snippets/d.js
rename to _embed/public/js/vendor/ace/snippets/d.js
diff --git a/_embed/public/js/ace/snippets/dart.js b/_embed/public/js/vendor/ace/snippets/dart.js
similarity index 100%
rename from _embed/public/js/ace/snippets/dart.js
rename to _embed/public/js/vendor/ace/snippets/dart.js
diff --git a/_embed/public/js/ace/snippets/diff.js b/_embed/public/js/vendor/ace/snippets/diff.js
similarity index 100%
rename from _embed/public/js/ace/snippets/diff.js
rename to _embed/public/js/vendor/ace/snippets/diff.js
diff --git a/_embed/public/js/ace/snippets/django.js b/_embed/public/js/vendor/ace/snippets/django.js
similarity index 100%
rename from _embed/public/js/ace/snippets/django.js
rename to _embed/public/js/vendor/ace/snippets/django.js
diff --git a/_embed/public/js/ace/snippets/dockerfile.js b/_embed/public/js/vendor/ace/snippets/dockerfile.js
similarity index 100%
rename from _embed/public/js/ace/snippets/dockerfile.js
rename to _embed/public/js/vendor/ace/snippets/dockerfile.js
diff --git a/_embed/public/js/ace/snippets/dot.js b/_embed/public/js/vendor/ace/snippets/dot.js
similarity index 100%
rename from _embed/public/js/ace/snippets/dot.js
rename to _embed/public/js/vendor/ace/snippets/dot.js
diff --git a/_embed/public/js/ace/snippets/drools.js b/_embed/public/js/vendor/ace/snippets/drools.js
similarity index 100%
rename from _embed/public/js/ace/snippets/drools.js
rename to _embed/public/js/vendor/ace/snippets/drools.js
diff --git a/_embed/public/js/ace/snippets/eiffel.js b/_embed/public/js/vendor/ace/snippets/eiffel.js
similarity index 100%
rename from _embed/public/js/ace/snippets/eiffel.js
rename to _embed/public/js/vendor/ace/snippets/eiffel.js
diff --git a/_embed/public/js/ace/snippets/ejs.js b/_embed/public/js/vendor/ace/snippets/ejs.js
similarity index 100%
rename from _embed/public/js/ace/snippets/ejs.js
rename to _embed/public/js/vendor/ace/snippets/ejs.js
diff --git a/_embed/public/js/ace/snippets/elixir.js b/_embed/public/js/vendor/ace/snippets/elixir.js
similarity index 100%
rename from _embed/public/js/ace/snippets/elixir.js
rename to _embed/public/js/vendor/ace/snippets/elixir.js
diff --git a/_embed/public/js/ace/snippets/elm.js b/_embed/public/js/vendor/ace/snippets/elm.js
similarity index 100%
rename from _embed/public/js/ace/snippets/elm.js
rename to _embed/public/js/vendor/ace/snippets/elm.js
diff --git a/_embed/public/js/ace/snippets/erlang.js b/_embed/public/js/vendor/ace/snippets/erlang.js
similarity index 100%
rename from _embed/public/js/ace/snippets/erlang.js
rename to _embed/public/js/vendor/ace/snippets/erlang.js
diff --git a/_embed/public/js/ace/snippets/forth.js b/_embed/public/js/vendor/ace/snippets/forth.js
similarity index 100%
rename from _embed/public/js/ace/snippets/forth.js
rename to _embed/public/js/vendor/ace/snippets/forth.js
diff --git a/_embed/public/js/ace/snippets/fortran.js b/_embed/public/js/vendor/ace/snippets/fortran.js
similarity index 100%
rename from _embed/public/js/ace/snippets/fortran.js
rename to _embed/public/js/vendor/ace/snippets/fortran.js
diff --git a/_embed/public/js/ace/snippets/ftl.js b/_embed/public/js/vendor/ace/snippets/ftl.js
similarity index 100%
rename from _embed/public/js/ace/snippets/ftl.js
rename to _embed/public/js/vendor/ace/snippets/ftl.js
diff --git a/_embed/public/js/ace/snippets/gcode.js b/_embed/public/js/vendor/ace/snippets/gcode.js
similarity index 100%
rename from _embed/public/js/ace/snippets/gcode.js
rename to _embed/public/js/vendor/ace/snippets/gcode.js
diff --git a/_embed/public/js/ace/snippets/gherkin.js b/_embed/public/js/vendor/ace/snippets/gherkin.js
similarity index 100%
rename from _embed/public/js/ace/snippets/gherkin.js
rename to _embed/public/js/vendor/ace/snippets/gherkin.js
diff --git a/_embed/public/js/ace/snippets/gitignore.js b/_embed/public/js/vendor/ace/snippets/gitignore.js
similarity index 100%
rename from _embed/public/js/ace/snippets/gitignore.js
rename to _embed/public/js/vendor/ace/snippets/gitignore.js
diff --git a/_embed/public/js/ace/snippets/glsl.js b/_embed/public/js/vendor/ace/snippets/glsl.js
similarity index 100%
rename from _embed/public/js/ace/snippets/glsl.js
rename to _embed/public/js/vendor/ace/snippets/glsl.js
diff --git a/_embed/public/js/ace/snippets/gobstones.js b/_embed/public/js/vendor/ace/snippets/gobstones.js
similarity index 100%
rename from _embed/public/js/ace/snippets/gobstones.js
rename to _embed/public/js/vendor/ace/snippets/gobstones.js
diff --git a/_embed/public/js/ace/snippets/golang.js b/_embed/public/js/vendor/ace/snippets/golang.js
similarity index 100%
rename from _embed/public/js/ace/snippets/golang.js
rename to _embed/public/js/vendor/ace/snippets/golang.js
diff --git a/_embed/public/js/ace/snippets/groovy.js b/_embed/public/js/vendor/ace/snippets/groovy.js
similarity index 100%
rename from _embed/public/js/ace/snippets/groovy.js
rename to _embed/public/js/vendor/ace/snippets/groovy.js
diff --git a/_embed/public/js/ace/snippets/haml.js b/_embed/public/js/vendor/ace/snippets/haml.js
similarity index 100%
rename from _embed/public/js/ace/snippets/haml.js
rename to _embed/public/js/vendor/ace/snippets/haml.js
diff --git a/_embed/public/js/ace/snippets/handlebars.js b/_embed/public/js/vendor/ace/snippets/handlebars.js
similarity index 100%
rename from _embed/public/js/ace/snippets/handlebars.js
rename to _embed/public/js/vendor/ace/snippets/handlebars.js
diff --git a/_embed/public/js/ace/snippets/haskell.js b/_embed/public/js/vendor/ace/snippets/haskell.js
similarity index 100%
rename from _embed/public/js/ace/snippets/haskell.js
rename to _embed/public/js/vendor/ace/snippets/haskell.js
diff --git a/_embed/public/js/ace/snippets/haskell_cabal.js b/_embed/public/js/vendor/ace/snippets/haskell_cabal.js
similarity index 100%
rename from _embed/public/js/ace/snippets/haskell_cabal.js
rename to _embed/public/js/vendor/ace/snippets/haskell_cabal.js
diff --git a/_embed/public/js/ace/snippets/haxe.js b/_embed/public/js/vendor/ace/snippets/haxe.js
similarity index 100%
rename from _embed/public/js/ace/snippets/haxe.js
rename to _embed/public/js/vendor/ace/snippets/haxe.js
diff --git a/_embed/public/js/ace/snippets/hjson.js b/_embed/public/js/vendor/ace/snippets/hjson.js
similarity index 100%
rename from _embed/public/js/ace/snippets/hjson.js
rename to _embed/public/js/vendor/ace/snippets/hjson.js
diff --git a/_embed/public/js/ace/snippets/html.js b/_embed/public/js/vendor/ace/snippets/html.js
similarity index 100%
rename from _embed/public/js/ace/snippets/html.js
rename to _embed/public/js/vendor/ace/snippets/html.js
diff --git a/_embed/public/js/ace/snippets/html_elixir.js b/_embed/public/js/vendor/ace/snippets/html_elixir.js
similarity index 100%
rename from _embed/public/js/ace/snippets/html_elixir.js
rename to _embed/public/js/vendor/ace/snippets/html_elixir.js
diff --git a/_embed/public/js/ace/snippets/html_ruby.js b/_embed/public/js/vendor/ace/snippets/html_ruby.js
similarity index 100%
rename from _embed/public/js/ace/snippets/html_ruby.js
rename to _embed/public/js/vendor/ace/snippets/html_ruby.js
diff --git a/_embed/public/js/ace/snippets/ini.js b/_embed/public/js/vendor/ace/snippets/ini.js
similarity index 100%
rename from _embed/public/js/ace/snippets/ini.js
rename to _embed/public/js/vendor/ace/snippets/ini.js
diff --git a/_embed/public/js/ace/snippets/io.js b/_embed/public/js/vendor/ace/snippets/io.js
similarity index 100%
rename from _embed/public/js/ace/snippets/io.js
rename to _embed/public/js/vendor/ace/snippets/io.js
diff --git a/_embed/public/js/ace/snippets/jack.js b/_embed/public/js/vendor/ace/snippets/jack.js
similarity index 100%
rename from _embed/public/js/ace/snippets/jack.js
rename to _embed/public/js/vendor/ace/snippets/jack.js
diff --git a/_embed/public/js/ace/snippets/jade.js b/_embed/public/js/vendor/ace/snippets/jade.js
similarity index 100%
rename from _embed/public/js/ace/snippets/jade.js
rename to _embed/public/js/vendor/ace/snippets/jade.js
diff --git a/_embed/public/js/ace/snippets/java.js b/_embed/public/js/vendor/ace/snippets/java.js
similarity index 100%
rename from _embed/public/js/ace/snippets/java.js
rename to _embed/public/js/vendor/ace/snippets/java.js
diff --git a/_embed/public/js/ace/snippets/javascript.js b/_embed/public/js/vendor/ace/snippets/javascript.js
similarity index 100%
rename from _embed/public/js/ace/snippets/javascript.js
rename to _embed/public/js/vendor/ace/snippets/javascript.js
diff --git a/_embed/public/js/ace/snippets/json.js b/_embed/public/js/vendor/ace/snippets/json.js
similarity index 100%
rename from _embed/public/js/ace/snippets/json.js
rename to _embed/public/js/vendor/ace/snippets/json.js
diff --git a/_embed/public/js/ace/snippets/jsoniq.js b/_embed/public/js/vendor/ace/snippets/jsoniq.js
similarity index 100%
rename from _embed/public/js/ace/snippets/jsoniq.js
rename to _embed/public/js/vendor/ace/snippets/jsoniq.js
diff --git a/_embed/public/js/ace/snippets/jsp.js b/_embed/public/js/vendor/ace/snippets/jsp.js
similarity index 100%
rename from _embed/public/js/ace/snippets/jsp.js
rename to _embed/public/js/vendor/ace/snippets/jsp.js
diff --git a/_embed/public/js/ace/snippets/jsx.js b/_embed/public/js/vendor/ace/snippets/jsx.js
similarity index 100%
rename from _embed/public/js/ace/snippets/jsx.js
rename to _embed/public/js/vendor/ace/snippets/jsx.js
diff --git a/_embed/public/js/ace/snippets/julia.js b/_embed/public/js/vendor/ace/snippets/julia.js
similarity index 100%
rename from _embed/public/js/ace/snippets/julia.js
rename to _embed/public/js/vendor/ace/snippets/julia.js
diff --git a/_embed/public/js/ace/snippets/kotlin.js b/_embed/public/js/vendor/ace/snippets/kotlin.js
similarity index 100%
rename from _embed/public/js/ace/snippets/kotlin.js
rename to _embed/public/js/vendor/ace/snippets/kotlin.js
diff --git a/_embed/public/js/ace/snippets/latex.js b/_embed/public/js/vendor/ace/snippets/latex.js
similarity index 100%
rename from _embed/public/js/ace/snippets/latex.js
rename to _embed/public/js/vendor/ace/snippets/latex.js
diff --git a/_embed/public/js/ace/snippets/lean.js b/_embed/public/js/vendor/ace/snippets/lean.js
similarity index 100%
rename from _embed/public/js/ace/snippets/lean.js
rename to _embed/public/js/vendor/ace/snippets/lean.js
diff --git a/_embed/public/js/ace/snippets/less.js b/_embed/public/js/vendor/ace/snippets/less.js
similarity index 100%
rename from _embed/public/js/ace/snippets/less.js
rename to _embed/public/js/vendor/ace/snippets/less.js
diff --git a/_embed/public/js/ace/snippets/liquid.js b/_embed/public/js/vendor/ace/snippets/liquid.js
similarity index 100%
rename from _embed/public/js/ace/snippets/liquid.js
rename to _embed/public/js/vendor/ace/snippets/liquid.js
diff --git a/_embed/public/js/ace/snippets/lisp.js b/_embed/public/js/vendor/ace/snippets/lisp.js
similarity index 100%
rename from _embed/public/js/ace/snippets/lisp.js
rename to _embed/public/js/vendor/ace/snippets/lisp.js
diff --git a/_embed/public/js/ace/snippets/live_script.js b/_embed/public/js/vendor/ace/snippets/live_script.js
similarity index 100%
rename from _embed/public/js/ace/snippets/live_script.js
rename to _embed/public/js/vendor/ace/snippets/live_script.js
diff --git a/_embed/public/js/ace/snippets/livescript.js b/_embed/public/js/vendor/ace/snippets/livescript.js
similarity index 100%
rename from _embed/public/js/ace/snippets/livescript.js
rename to _embed/public/js/vendor/ace/snippets/livescript.js
diff --git a/_embed/public/js/ace/snippets/logiql.js b/_embed/public/js/vendor/ace/snippets/logiql.js
similarity index 100%
rename from _embed/public/js/ace/snippets/logiql.js
rename to _embed/public/js/vendor/ace/snippets/logiql.js
diff --git a/_embed/public/js/ace/snippets/lsl.js b/_embed/public/js/vendor/ace/snippets/lsl.js
similarity index 100%
rename from _embed/public/js/ace/snippets/lsl.js
rename to _embed/public/js/vendor/ace/snippets/lsl.js
diff --git a/_embed/public/js/ace/snippets/lua.js b/_embed/public/js/vendor/ace/snippets/lua.js
similarity index 100%
rename from _embed/public/js/ace/snippets/lua.js
rename to _embed/public/js/vendor/ace/snippets/lua.js
diff --git a/_embed/public/js/ace/snippets/luapage.js b/_embed/public/js/vendor/ace/snippets/luapage.js
similarity index 100%
rename from _embed/public/js/ace/snippets/luapage.js
rename to _embed/public/js/vendor/ace/snippets/luapage.js
diff --git a/_embed/public/js/ace/snippets/lucene.js b/_embed/public/js/vendor/ace/snippets/lucene.js
similarity index 100%
rename from _embed/public/js/ace/snippets/lucene.js
rename to _embed/public/js/vendor/ace/snippets/lucene.js
diff --git a/_embed/public/js/ace/snippets/makefile.js b/_embed/public/js/vendor/ace/snippets/makefile.js
similarity index 100%
rename from _embed/public/js/ace/snippets/makefile.js
rename to _embed/public/js/vendor/ace/snippets/makefile.js
diff --git a/_embed/public/js/ace/snippets/markdown.js b/_embed/public/js/vendor/ace/snippets/markdown.js
similarity index 100%
rename from _embed/public/js/ace/snippets/markdown.js
rename to _embed/public/js/vendor/ace/snippets/markdown.js
diff --git a/_embed/public/js/ace/snippets/mask.js b/_embed/public/js/vendor/ace/snippets/mask.js
similarity index 100%
rename from _embed/public/js/ace/snippets/mask.js
rename to _embed/public/js/vendor/ace/snippets/mask.js
diff --git a/_embed/public/js/ace/snippets/matlab.js b/_embed/public/js/vendor/ace/snippets/matlab.js
similarity index 100%
rename from _embed/public/js/ace/snippets/matlab.js
rename to _embed/public/js/vendor/ace/snippets/matlab.js
diff --git a/_embed/public/js/ace/snippets/maze.js b/_embed/public/js/vendor/ace/snippets/maze.js
similarity index 100%
rename from _embed/public/js/ace/snippets/maze.js
rename to _embed/public/js/vendor/ace/snippets/maze.js
diff --git a/_embed/public/js/ace/snippets/mel.js b/_embed/public/js/vendor/ace/snippets/mel.js
similarity index 100%
rename from _embed/public/js/ace/snippets/mel.js
rename to _embed/public/js/vendor/ace/snippets/mel.js
diff --git a/_embed/public/js/ace/snippets/mips_assembler.js b/_embed/public/js/vendor/ace/snippets/mips_assembler.js
similarity index 100%
rename from _embed/public/js/ace/snippets/mips_assembler.js
rename to _embed/public/js/vendor/ace/snippets/mips_assembler.js
diff --git a/_embed/public/js/ace/snippets/mipsassembler.js b/_embed/public/js/vendor/ace/snippets/mipsassembler.js
similarity index 100%
rename from _embed/public/js/ace/snippets/mipsassembler.js
rename to _embed/public/js/vendor/ace/snippets/mipsassembler.js
diff --git a/_embed/public/js/ace/snippets/mushcode.js b/_embed/public/js/vendor/ace/snippets/mushcode.js
similarity index 100%
rename from _embed/public/js/ace/snippets/mushcode.js
rename to _embed/public/js/vendor/ace/snippets/mushcode.js
diff --git a/_embed/public/js/ace/snippets/mysql.js b/_embed/public/js/vendor/ace/snippets/mysql.js
similarity index 100%
rename from _embed/public/js/ace/snippets/mysql.js
rename to _embed/public/js/vendor/ace/snippets/mysql.js
diff --git a/_embed/public/js/ace/snippets/nix.js b/_embed/public/js/vendor/ace/snippets/nix.js
similarity index 100%
rename from _embed/public/js/ace/snippets/nix.js
rename to _embed/public/js/vendor/ace/snippets/nix.js
diff --git a/_embed/public/js/ace/snippets/nsis.js b/_embed/public/js/vendor/ace/snippets/nsis.js
similarity index 100%
rename from _embed/public/js/ace/snippets/nsis.js
rename to _embed/public/js/vendor/ace/snippets/nsis.js
diff --git a/_embed/public/js/ace/snippets/objectivec.js b/_embed/public/js/vendor/ace/snippets/objectivec.js
similarity index 100%
rename from _embed/public/js/ace/snippets/objectivec.js
rename to _embed/public/js/vendor/ace/snippets/objectivec.js
diff --git a/_embed/public/js/ace/snippets/ocaml.js b/_embed/public/js/vendor/ace/snippets/ocaml.js
similarity index 100%
rename from _embed/public/js/ace/snippets/ocaml.js
rename to _embed/public/js/vendor/ace/snippets/ocaml.js
diff --git a/_embed/public/js/ace/snippets/pascal.js b/_embed/public/js/vendor/ace/snippets/pascal.js
similarity index 100%
rename from _embed/public/js/ace/snippets/pascal.js
rename to _embed/public/js/vendor/ace/snippets/pascal.js
diff --git a/_embed/public/js/ace/snippets/perl.js b/_embed/public/js/vendor/ace/snippets/perl.js
similarity index 100%
rename from _embed/public/js/ace/snippets/perl.js
rename to _embed/public/js/vendor/ace/snippets/perl.js
diff --git a/_embed/public/js/ace/snippets/pgsql.js b/_embed/public/js/vendor/ace/snippets/pgsql.js
similarity index 100%
rename from _embed/public/js/ace/snippets/pgsql.js
rename to _embed/public/js/vendor/ace/snippets/pgsql.js
diff --git a/_embed/public/js/ace/snippets/php.js b/_embed/public/js/vendor/ace/snippets/php.js
similarity index 100%
rename from _embed/public/js/ace/snippets/php.js
rename to _embed/public/js/vendor/ace/snippets/php.js
diff --git a/_embed/public/js/ace/snippets/plain_text.js b/_embed/public/js/vendor/ace/snippets/plain_text.js
similarity index 100%
rename from _embed/public/js/ace/snippets/plain_text.js
rename to _embed/public/js/vendor/ace/snippets/plain_text.js
diff --git a/_embed/public/js/ace/snippets/powershell.js b/_embed/public/js/vendor/ace/snippets/powershell.js
similarity index 100%
rename from _embed/public/js/ace/snippets/powershell.js
rename to _embed/public/js/vendor/ace/snippets/powershell.js
diff --git a/_embed/public/js/ace/snippets/praat.js b/_embed/public/js/vendor/ace/snippets/praat.js
similarity index 100%
rename from _embed/public/js/ace/snippets/praat.js
rename to _embed/public/js/vendor/ace/snippets/praat.js
diff --git a/_embed/public/js/ace/snippets/prolog.js b/_embed/public/js/vendor/ace/snippets/prolog.js
similarity index 100%
rename from _embed/public/js/ace/snippets/prolog.js
rename to _embed/public/js/vendor/ace/snippets/prolog.js
diff --git a/_embed/public/js/ace/snippets/properties.js b/_embed/public/js/vendor/ace/snippets/properties.js
similarity index 100%
rename from _embed/public/js/ace/snippets/properties.js
rename to _embed/public/js/vendor/ace/snippets/properties.js
diff --git a/_embed/public/js/ace/snippets/protobuf.js b/_embed/public/js/vendor/ace/snippets/protobuf.js
similarity index 100%
rename from _embed/public/js/ace/snippets/protobuf.js
rename to _embed/public/js/vendor/ace/snippets/protobuf.js
diff --git a/_embed/public/js/ace/snippets/python.js b/_embed/public/js/vendor/ace/snippets/python.js
similarity index 100%
rename from _embed/public/js/ace/snippets/python.js
rename to _embed/public/js/vendor/ace/snippets/python.js
diff --git a/_embed/public/js/ace/snippets/r.js b/_embed/public/js/vendor/ace/snippets/r.js
similarity index 100%
rename from _embed/public/js/ace/snippets/r.js
rename to _embed/public/js/vendor/ace/snippets/r.js
diff --git a/_embed/public/js/ace/snippets/razor.js b/_embed/public/js/vendor/ace/snippets/razor.js
similarity index 100%
rename from _embed/public/js/ace/snippets/razor.js
rename to _embed/public/js/vendor/ace/snippets/razor.js
diff --git a/_embed/public/js/ace/snippets/rdoc.js b/_embed/public/js/vendor/ace/snippets/rdoc.js
similarity index 100%
rename from _embed/public/js/ace/snippets/rdoc.js
rename to _embed/public/js/vendor/ace/snippets/rdoc.js
diff --git a/_embed/public/js/ace/snippets/rhtml.js b/_embed/public/js/vendor/ace/snippets/rhtml.js
similarity index 100%
rename from _embed/public/js/ace/snippets/rhtml.js
rename to _embed/public/js/vendor/ace/snippets/rhtml.js
diff --git a/_embed/public/js/ace/snippets/rst.js b/_embed/public/js/vendor/ace/snippets/rst.js
similarity index 100%
rename from _embed/public/js/ace/snippets/rst.js
rename to _embed/public/js/vendor/ace/snippets/rst.js
diff --git a/_embed/public/js/ace/snippets/ruby.js b/_embed/public/js/vendor/ace/snippets/ruby.js
similarity index 100%
rename from _embed/public/js/ace/snippets/ruby.js
rename to _embed/public/js/vendor/ace/snippets/ruby.js
diff --git a/_embed/public/js/ace/snippets/rust.js b/_embed/public/js/vendor/ace/snippets/rust.js
similarity index 100%
rename from _embed/public/js/ace/snippets/rust.js
rename to _embed/public/js/vendor/ace/snippets/rust.js
diff --git a/_embed/public/js/ace/snippets/sass.js b/_embed/public/js/vendor/ace/snippets/sass.js
similarity index 100%
rename from _embed/public/js/ace/snippets/sass.js
rename to _embed/public/js/vendor/ace/snippets/sass.js
diff --git a/_embed/public/js/ace/snippets/scad.js b/_embed/public/js/vendor/ace/snippets/scad.js
similarity index 100%
rename from _embed/public/js/ace/snippets/scad.js
rename to _embed/public/js/vendor/ace/snippets/scad.js
diff --git a/_embed/public/js/ace/snippets/scala.js b/_embed/public/js/vendor/ace/snippets/scala.js
similarity index 100%
rename from _embed/public/js/ace/snippets/scala.js
rename to _embed/public/js/vendor/ace/snippets/scala.js
diff --git a/_embed/public/js/ace/snippets/scheme.js b/_embed/public/js/vendor/ace/snippets/scheme.js
similarity index 100%
rename from _embed/public/js/ace/snippets/scheme.js
rename to _embed/public/js/vendor/ace/snippets/scheme.js
diff --git a/_embed/public/js/ace/snippets/scss.js b/_embed/public/js/vendor/ace/snippets/scss.js
similarity index 100%
rename from _embed/public/js/ace/snippets/scss.js
rename to _embed/public/js/vendor/ace/snippets/scss.js
diff --git a/_embed/public/js/ace/snippets/sh.js b/_embed/public/js/vendor/ace/snippets/sh.js
similarity index 100%
rename from _embed/public/js/ace/snippets/sh.js
rename to _embed/public/js/vendor/ace/snippets/sh.js
diff --git a/_embed/public/js/ace/snippets/sjs.js b/_embed/public/js/vendor/ace/snippets/sjs.js
similarity index 100%
rename from _embed/public/js/ace/snippets/sjs.js
rename to _embed/public/js/vendor/ace/snippets/sjs.js
diff --git a/_embed/public/js/ace/snippets/smarty.js b/_embed/public/js/vendor/ace/snippets/smarty.js
similarity index 100%
rename from _embed/public/js/ace/snippets/smarty.js
rename to _embed/public/js/vendor/ace/snippets/smarty.js
diff --git a/_embed/public/js/ace/snippets/snippets.js b/_embed/public/js/vendor/ace/snippets/snippets.js
similarity index 100%
rename from _embed/public/js/ace/snippets/snippets.js
rename to _embed/public/js/vendor/ace/snippets/snippets.js
diff --git a/_embed/public/js/ace/snippets/soy_template.js b/_embed/public/js/vendor/ace/snippets/soy_template.js
similarity index 100%
rename from _embed/public/js/ace/snippets/soy_template.js
rename to _embed/public/js/vendor/ace/snippets/soy_template.js
diff --git a/_embed/public/js/ace/snippets/space.js b/_embed/public/js/vendor/ace/snippets/space.js
similarity index 100%
rename from _embed/public/js/ace/snippets/space.js
rename to _embed/public/js/vendor/ace/snippets/space.js
diff --git a/_embed/public/js/ace/snippets/sql.js b/_embed/public/js/vendor/ace/snippets/sql.js
similarity index 100%
rename from _embed/public/js/ace/snippets/sql.js
rename to _embed/public/js/vendor/ace/snippets/sql.js
diff --git a/_embed/public/js/ace/snippets/sqlserver.js b/_embed/public/js/vendor/ace/snippets/sqlserver.js
similarity index 100%
rename from _embed/public/js/ace/snippets/sqlserver.js
rename to _embed/public/js/vendor/ace/snippets/sqlserver.js
diff --git a/_embed/public/js/ace/snippets/stylus.js b/_embed/public/js/vendor/ace/snippets/stylus.js
similarity index 100%
rename from _embed/public/js/ace/snippets/stylus.js
rename to _embed/public/js/vendor/ace/snippets/stylus.js
diff --git a/_embed/public/js/ace/snippets/svg.js b/_embed/public/js/vendor/ace/snippets/svg.js
similarity index 100%
rename from _embed/public/js/ace/snippets/svg.js
rename to _embed/public/js/vendor/ace/snippets/svg.js
diff --git a/_embed/public/js/ace/snippets/swift.js b/_embed/public/js/vendor/ace/snippets/swift.js
similarity index 100%
rename from _embed/public/js/ace/snippets/swift.js
rename to _embed/public/js/vendor/ace/snippets/swift.js
diff --git a/_embed/public/js/ace/snippets/swig.js b/_embed/public/js/vendor/ace/snippets/swig.js
similarity index 100%
rename from _embed/public/js/ace/snippets/swig.js
rename to _embed/public/js/vendor/ace/snippets/swig.js
diff --git a/_embed/public/js/ace/snippets/tcl.js b/_embed/public/js/vendor/ace/snippets/tcl.js
similarity index 100%
rename from _embed/public/js/ace/snippets/tcl.js
rename to _embed/public/js/vendor/ace/snippets/tcl.js
diff --git a/_embed/public/js/ace/snippets/tex.js b/_embed/public/js/vendor/ace/snippets/tex.js
similarity index 100%
rename from _embed/public/js/ace/snippets/tex.js
rename to _embed/public/js/vendor/ace/snippets/tex.js
diff --git a/_embed/public/js/ace/snippets/text.js b/_embed/public/js/vendor/ace/snippets/text.js
similarity index 100%
rename from _embed/public/js/ace/snippets/text.js
rename to _embed/public/js/vendor/ace/snippets/text.js
diff --git a/_embed/public/js/ace/snippets/textile.js b/_embed/public/js/vendor/ace/snippets/textile.js
similarity index 100%
rename from _embed/public/js/ace/snippets/textile.js
rename to _embed/public/js/vendor/ace/snippets/textile.js
diff --git a/_embed/public/js/ace/snippets/toml.js b/_embed/public/js/vendor/ace/snippets/toml.js
similarity index 100%
rename from _embed/public/js/ace/snippets/toml.js
rename to _embed/public/js/vendor/ace/snippets/toml.js
diff --git a/_embed/public/js/ace/snippets/tsx.js b/_embed/public/js/vendor/ace/snippets/tsx.js
similarity index 100%
rename from _embed/public/js/ace/snippets/tsx.js
rename to _embed/public/js/vendor/ace/snippets/tsx.js
diff --git a/_embed/public/js/ace/snippets/twig.js b/_embed/public/js/vendor/ace/snippets/twig.js
similarity index 100%
rename from _embed/public/js/ace/snippets/twig.js
rename to _embed/public/js/vendor/ace/snippets/twig.js
diff --git a/_embed/public/js/ace/snippets/typescript.js b/_embed/public/js/vendor/ace/snippets/typescript.js
similarity index 100%
rename from _embed/public/js/ace/snippets/typescript.js
rename to _embed/public/js/vendor/ace/snippets/typescript.js
diff --git a/_embed/public/js/ace/snippets/vala.js b/_embed/public/js/vendor/ace/snippets/vala.js
similarity index 100%
rename from _embed/public/js/ace/snippets/vala.js
rename to _embed/public/js/vendor/ace/snippets/vala.js
diff --git a/_embed/public/js/ace/snippets/vbscript.js b/_embed/public/js/vendor/ace/snippets/vbscript.js
similarity index 100%
rename from _embed/public/js/ace/snippets/vbscript.js
rename to _embed/public/js/vendor/ace/snippets/vbscript.js
diff --git a/_embed/public/js/ace/snippets/velocity.js b/_embed/public/js/vendor/ace/snippets/velocity.js
similarity index 100%
rename from _embed/public/js/ace/snippets/velocity.js
rename to _embed/public/js/vendor/ace/snippets/velocity.js
diff --git a/_embed/public/js/ace/snippets/verilog.js b/_embed/public/js/vendor/ace/snippets/verilog.js
similarity index 100%
rename from _embed/public/js/ace/snippets/verilog.js
rename to _embed/public/js/vendor/ace/snippets/verilog.js
diff --git a/_embed/public/js/ace/snippets/vhdl.js b/_embed/public/js/vendor/ace/snippets/vhdl.js
similarity index 100%
rename from _embed/public/js/ace/snippets/vhdl.js
rename to _embed/public/js/vendor/ace/snippets/vhdl.js
diff --git a/_embed/public/js/ace/snippets/wollok.js b/_embed/public/js/vendor/ace/snippets/wollok.js
similarity index 100%
rename from _embed/public/js/ace/snippets/wollok.js
rename to _embed/public/js/vendor/ace/snippets/wollok.js
diff --git a/_embed/public/js/ace/snippets/xml.js b/_embed/public/js/vendor/ace/snippets/xml.js
similarity index 100%
rename from _embed/public/js/ace/snippets/xml.js
rename to _embed/public/js/vendor/ace/snippets/xml.js
diff --git a/_embed/public/js/ace/snippets/xquery.js b/_embed/public/js/vendor/ace/snippets/xquery.js
similarity index 100%
rename from _embed/public/js/ace/snippets/xquery.js
rename to _embed/public/js/vendor/ace/snippets/xquery.js
diff --git a/_embed/public/js/ace/snippets/yaml.js b/_embed/public/js/vendor/ace/snippets/yaml.js
similarity index 100%
rename from _embed/public/js/ace/snippets/yaml.js
rename to _embed/public/js/vendor/ace/snippets/yaml.js
diff --git a/_embed/public/js/ace/theme-ambiance.js b/_embed/public/js/vendor/ace/theme-ambiance.js
similarity index 100%
rename from _embed/public/js/ace/theme-ambiance.js
rename to _embed/public/js/vendor/ace/theme-ambiance.js
diff --git a/_embed/public/js/ace/theme-chaos.js b/_embed/public/js/vendor/ace/theme-chaos.js
similarity index 100%
rename from _embed/public/js/ace/theme-chaos.js
rename to _embed/public/js/vendor/ace/theme-chaos.js
diff --git a/_embed/public/js/ace/theme-chrome.js b/_embed/public/js/vendor/ace/theme-chrome.js
similarity index 100%
rename from _embed/public/js/ace/theme-chrome.js
rename to _embed/public/js/vendor/ace/theme-chrome.js
diff --git a/_embed/public/js/ace/theme-clouds.js b/_embed/public/js/vendor/ace/theme-clouds.js
similarity index 100%
rename from _embed/public/js/ace/theme-clouds.js
rename to _embed/public/js/vendor/ace/theme-clouds.js
diff --git a/_embed/public/js/ace/theme-clouds_midnight.js b/_embed/public/js/vendor/ace/theme-clouds_midnight.js
similarity index 100%
rename from _embed/public/js/ace/theme-clouds_midnight.js
rename to _embed/public/js/vendor/ace/theme-clouds_midnight.js
diff --git a/_embed/public/js/ace/theme-cobalt.js b/_embed/public/js/vendor/ace/theme-cobalt.js
similarity index 100%
rename from _embed/public/js/ace/theme-cobalt.js
rename to _embed/public/js/vendor/ace/theme-cobalt.js
diff --git a/_embed/public/js/ace/theme-crimson_editor.js b/_embed/public/js/vendor/ace/theme-crimson_editor.js
similarity index 100%
rename from _embed/public/js/ace/theme-crimson_editor.js
rename to _embed/public/js/vendor/ace/theme-crimson_editor.js
diff --git a/_embed/public/js/ace/theme-dawn.js b/_embed/public/js/vendor/ace/theme-dawn.js
similarity index 100%
rename from _embed/public/js/ace/theme-dawn.js
rename to _embed/public/js/vendor/ace/theme-dawn.js
diff --git a/_embed/public/js/ace/theme-dreamweaver.js b/_embed/public/js/vendor/ace/theme-dreamweaver.js
similarity index 100%
rename from _embed/public/js/ace/theme-dreamweaver.js
rename to _embed/public/js/vendor/ace/theme-dreamweaver.js
diff --git a/_embed/public/js/ace/theme-eclipse.js b/_embed/public/js/vendor/ace/theme-eclipse.js
similarity index 100%
rename from _embed/public/js/ace/theme-eclipse.js
rename to _embed/public/js/vendor/ace/theme-eclipse.js
diff --git a/_embed/public/js/ace/theme-github.js b/_embed/public/js/vendor/ace/theme-github.js
similarity index 100%
rename from _embed/public/js/ace/theme-github.js
rename to _embed/public/js/vendor/ace/theme-github.js
diff --git a/_embed/public/js/ace/theme-idle_fingers.js b/_embed/public/js/vendor/ace/theme-idle_fingers.js
similarity index 100%
rename from _embed/public/js/ace/theme-idle_fingers.js
rename to _embed/public/js/vendor/ace/theme-idle_fingers.js
diff --git a/_embed/public/js/ace/theme-iplastic.js b/_embed/public/js/vendor/ace/theme-iplastic.js
similarity index 100%
rename from _embed/public/js/ace/theme-iplastic.js
rename to _embed/public/js/vendor/ace/theme-iplastic.js
diff --git a/_embed/public/js/ace/theme-katzenmilch.js b/_embed/public/js/vendor/ace/theme-katzenmilch.js
similarity index 100%
rename from _embed/public/js/ace/theme-katzenmilch.js
rename to _embed/public/js/vendor/ace/theme-katzenmilch.js
diff --git a/_embed/public/js/ace/theme-kr_theme.js b/_embed/public/js/vendor/ace/theme-kr_theme.js
similarity index 100%
rename from _embed/public/js/ace/theme-kr_theme.js
rename to _embed/public/js/vendor/ace/theme-kr_theme.js
diff --git a/_embed/public/js/ace/theme-kuroir.js b/_embed/public/js/vendor/ace/theme-kuroir.js
similarity index 100%
rename from _embed/public/js/ace/theme-kuroir.js
rename to _embed/public/js/vendor/ace/theme-kuroir.js
diff --git a/_embed/public/js/ace/theme-merbivore.js b/_embed/public/js/vendor/ace/theme-merbivore.js
similarity index 100%
rename from _embed/public/js/ace/theme-merbivore.js
rename to _embed/public/js/vendor/ace/theme-merbivore.js
diff --git a/_embed/public/js/ace/theme-merbivore_soft.js b/_embed/public/js/vendor/ace/theme-merbivore_soft.js
similarity index 100%
rename from _embed/public/js/ace/theme-merbivore_soft.js
rename to _embed/public/js/vendor/ace/theme-merbivore_soft.js
diff --git a/_embed/public/js/ace/theme-mono_industrial.js b/_embed/public/js/vendor/ace/theme-mono_industrial.js
similarity index 100%
rename from _embed/public/js/ace/theme-mono_industrial.js
rename to _embed/public/js/vendor/ace/theme-mono_industrial.js
diff --git a/_embed/public/js/ace/theme-monokai.js b/_embed/public/js/vendor/ace/theme-monokai.js
similarity index 100%
rename from _embed/public/js/ace/theme-monokai.js
rename to _embed/public/js/vendor/ace/theme-monokai.js
diff --git a/_embed/public/js/ace/theme-pastel_on_dark.js b/_embed/public/js/vendor/ace/theme-pastel_on_dark.js
similarity index 100%
rename from _embed/public/js/ace/theme-pastel_on_dark.js
rename to _embed/public/js/vendor/ace/theme-pastel_on_dark.js
diff --git a/_embed/public/js/ace/theme-solarized_dark.js b/_embed/public/js/vendor/ace/theme-solarized_dark.js
similarity index 100%
rename from _embed/public/js/ace/theme-solarized_dark.js
rename to _embed/public/js/vendor/ace/theme-solarized_dark.js
diff --git a/_embed/public/js/ace/theme-solarized_light.js b/_embed/public/js/vendor/ace/theme-solarized_light.js
similarity index 100%
rename from _embed/public/js/ace/theme-solarized_light.js
rename to _embed/public/js/vendor/ace/theme-solarized_light.js
diff --git a/_embed/public/js/ace/theme-sqlserver.js b/_embed/public/js/vendor/ace/theme-sqlserver.js
similarity index 100%
rename from _embed/public/js/ace/theme-sqlserver.js
rename to _embed/public/js/vendor/ace/theme-sqlserver.js
diff --git a/_embed/public/js/ace/theme-terminal.js b/_embed/public/js/vendor/ace/theme-terminal.js
similarity index 100%
rename from _embed/public/js/ace/theme-terminal.js
rename to _embed/public/js/vendor/ace/theme-terminal.js
diff --git a/_embed/public/js/ace/theme-textmate.js b/_embed/public/js/vendor/ace/theme-textmate.js
similarity index 100%
rename from _embed/public/js/ace/theme-textmate.js
rename to _embed/public/js/vendor/ace/theme-textmate.js
diff --git a/_embed/public/js/ace/theme-tomorrow.js b/_embed/public/js/vendor/ace/theme-tomorrow.js
similarity index 100%
rename from _embed/public/js/ace/theme-tomorrow.js
rename to _embed/public/js/vendor/ace/theme-tomorrow.js
diff --git a/_embed/public/js/ace/theme-tomorrow_night.js b/_embed/public/js/vendor/ace/theme-tomorrow_night.js
similarity index 100%
rename from _embed/public/js/ace/theme-tomorrow_night.js
rename to _embed/public/js/vendor/ace/theme-tomorrow_night.js
diff --git a/_embed/public/js/ace/theme-tomorrow_night_blue.js b/_embed/public/js/vendor/ace/theme-tomorrow_night_blue.js
similarity index 100%
rename from _embed/public/js/ace/theme-tomorrow_night_blue.js
rename to _embed/public/js/vendor/ace/theme-tomorrow_night_blue.js
diff --git a/_embed/public/js/ace/theme-tomorrow_night_bright.js b/_embed/public/js/vendor/ace/theme-tomorrow_night_bright.js
similarity index 100%
rename from _embed/public/js/ace/theme-tomorrow_night_bright.js
rename to _embed/public/js/vendor/ace/theme-tomorrow_night_bright.js
diff --git a/_embed/public/js/ace/theme-tomorrow_night_eighties.js b/_embed/public/js/vendor/ace/theme-tomorrow_night_eighties.js
similarity index 100%
rename from _embed/public/js/ace/theme-tomorrow_night_eighties.js
rename to _embed/public/js/vendor/ace/theme-tomorrow_night_eighties.js
diff --git a/_embed/public/js/ace/theme-twilight.js b/_embed/public/js/vendor/ace/theme-twilight.js
similarity index 100%
rename from _embed/public/js/ace/theme-twilight.js
rename to _embed/public/js/vendor/ace/theme-twilight.js
diff --git a/_embed/public/js/ace/theme-vibrant_ink.js b/_embed/public/js/vendor/ace/theme-vibrant_ink.js
similarity index 100%
rename from _embed/public/js/ace/theme-vibrant_ink.js
rename to _embed/public/js/vendor/ace/theme-vibrant_ink.js
diff --git a/_embed/public/js/ace/theme-xcode.js b/_embed/public/js/vendor/ace/theme-xcode.js
similarity index 100%
rename from _embed/public/js/ace/theme-xcode.js
rename to _embed/public/js/vendor/ace/theme-xcode.js
diff --git a/_embed/public/js/ace/worker-coffee.js b/_embed/public/js/vendor/ace/worker-coffee.js
similarity index 100%
rename from _embed/public/js/ace/worker-coffee.js
rename to _embed/public/js/vendor/ace/worker-coffee.js
diff --git a/_embed/public/js/ace/worker-css.js b/_embed/public/js/vendor/ace/worker-css.js
similarity index 100%
rename from _embed/public/js/ace/worker-css.js
rename to _embed/public/js/vendor/ace/worker-css.js
diff --git a/_embed/public/js/ace/worker-html.js b/_embed/public/js/vendor/ace/worker-html.js
similarity index 100%
rename from _embed/public/js/ace/worker-html.js
rename to _embed/public/js/vendor/ace/worker-html.js
diff --git a/_embed/public/js/ace/worker-javascript.js b/_embed/public/js/vendor/ace/worker-javascript.js
similarity index 100%
rename from _embed/public/js/ace/worker-javascript.js
rename to _embed/public/js/vendor/ace/worker-javascript.js
diff --git a/_embed/public/js/ace/worker-json.js b/_embed/public/js/vendor/ace/worker-json.js
similarity index 100%
rename from _embed/public/js/ace/worker-json.js
rename to _embed/public/js/vendor/ace/worker-json.js
diff --git a/_embed/public/js/ace/worker-lua.js b/_embed/public/js/vendor/ace/worker-lua.js
similarity index 100%
rename from _embed/public/js/ace/worker-lua.js
rename to _embed/public/js/vendor/ace/worker-lua.js
diff --git a/_embed/public/js/ace/worker-php.js b/_embed/public/js/vendor/ace/worker-php.js
similarity index 100%
rename from _embed/public/js/ace/worker-php.js
rename to _embed/public/js/vendor/ace/worker-php.js
diff --git a/_embed/public/js/ace/worker-xml.js b/_embed/public/js/vendor/ace/worker-xml.js
similarity index 100%
rename from _embed/public/js/ace/worker-xml.js
rename to _embed/public/js/vendor/ace/worker-xml.js
diff --git a/_embed/public/js/ace/worker-xquery.js b/_embed/public/js/vendor/ace/worker-xquery.js
similarity index 100%
rename from _embed/public/js/ace/worker-xquery.js
rename to _embed/public/js/vendor/ace/worker-xquery.js
diff --git a/_embed/public/js/form2js.js b/_embed/public/js/vendor/form2js.js
similarity index 100%
rename from _embed/public/js/form2js.js
rename to _embed/public/js/vendor/form2js.js
diff --git a/_embed/templates/base.tmpl b/_embed/templates/base.tmpl
index b2f39ea0..86892bc0 100644
--- a/_embed/templates/base.tmpl
+++ b/_embed/templates/base.tmpl
@@ -13,10 +13,19 @@
-
-
-
-
+
+
+ {{ if .IsDir }}
+
+ {{ else }}
+
+
+
+ {{ end }}