--- title: "💼 JS/HTML/CSS selfhosted песочница в одном файле" date: 2022-12-28T00:05:00+03:00 draft: false tags: [development, javascript, web] --- ## Flems На GitHub [porsager](https://github.com/porsager/) разрабатывает JavaScript песочницу, которая представляет из себя один HTML файл и имя ей [Flems](https://github.com/porsager/flems). Посмотреть, как это работает можно на сайте проекта [Flems.io](https://flems.io/). Flems — представляет из себя статическое веб-приложение. Он отлично подходит для документации, примеров, презентаций, вопросов и многого другого. ## Начало работы Необходимо скачать единственный файл [flems.html](https://flems.io/flems.html) и установить его в качестве скрипта JavaScript. **Для чего?** **Ответ:** Чтобы ты мог использовать Flems только с одним требуемым файлом, JavaScript и HTML код были объединены в `flems.html`. Flems работает, имея код JavaScript, содержащийся в комментариях HTML, и код HTML, содержащийся в комментариях JavaScript. Таким образом, если Flems загружается как JavaScript, HTML игнорируется, а при загрузке как HTML игнорируется часть JavaScript. Смотри [standalone.js](https://github.com/porsager/flems/blob/master/scripts/standalone.js). ```html ``` ## Настройка Содержание песочницы добавляется массивами `files` и `links` в настройках Flems. ### `.files` — массив файлов ```javascript { name : String, compiler : String | Function, content : String } ``` Нижеперечисленные расширения обрабатываются для файлов (другие игнорируются). * `.html` - Используется только первый HTML-файл (остальные игнорируются) * `.js` * `.css` * `.ts` - Будет скомпилирован с помощью TypeScript * `.ls` - Будет скомпилирован с помощью LiveScript Следующие компиляторы в настоящее время доступны только для файлов `*.js`: * `ts` (TypeScript) * `ls` (LiveScript) * `babel` Также можно предоставить функцию, которая получает файл и возвращает Promise, который возвращает объект с кодом и картой, например: ```javascript function compile(file) { return new Promise(resolve => { return { code: file.content.replace(/var /g, 'const '), // Don't do this map: null // The JSON for a sourcemap } }) } ``` ### `.links` — массив ссылок ```javascript { name : String, type : String, // js | css url : String } ``` Если URL-адрес поддерживает CORS, Flems будет открывать файлы короче 200 000 символов в редакторе, в противном случае они будут просто линкованы. ## Опции Flems настраивается, если тебе не нужна панель инструментов или не нужен вывод консоли, можно легко скрыть их. Доступны следующие параметры со значениями по умолчанию: ```javascript { middle : 50, selected : '.js', color : 'rgb(38,50,56)', theme : 'material', // and 'none' or 'default' resizeable : true, editable : true, toolbar : true, fileTabs : true, linkTabs : true, shareButton : true, reloadButton : true, console : true, autoReload : true, autoReloadDelay : 400, autoHeight : false } ``` ## Методы Есть несколько методов, доступных для управления средой выполнения Flems. ### `.reload()` Перезагружает runtime страницу. ### `.focus()` Устанавливает фокус в редакторе для текущего выбранного файла. ### `.redraw()` Вызовите метод, если изменился размер контейнера или свойство. Например: `display: none` to `display: block`.