diff --git a/content/posts/2022/javascript/singlefile-sandbox.md b/content/posts/2022/javascript/singlefile-sandbox.md new file mode 100644 index 0000000..f7d94fa --- /dev/null +++ b/content/posts/2022/javascript/singlefile-sandbox.md @@ -0,0 +1,148 @@ +--- +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`.