flems.io
This commit is contained in:
parent
608790a1ea
commit
a506e448a6
148
content/posts/2022/javascript/singlefile-sandbox.md
Normal file
148
content/posts/2022/javascript/singlefile-sandbox.md
Normal file
@ -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
|
||||
<script src="https://flems.io/flems.html" type="text/javascript" charset="utf-8"></script>
|
||||
<script>
|
||||
const flems = Flems(document.body, {
|
||||
files: [{
|
||||
name: 'app.js',
|
||||
content: 'm.render(document.body, m("h1", "Hello world"))'
|
||||
}],
|
||||
links: [{
|
||||
name: 'mithril',
|
||||
type: 'script',
|
||||
url: 'https://unpkg.com/mithril'
|
||||
}]
|
||||
})
|
||||
</script>
|
||||
```
|
||||
|
||||
## Настройка
|
||||
|
||||
Содержание песочницы добавляется массивами `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`.
|
Loading…
Reference in New Issue
Block a user