A lightweight JavaScript game engine
git clone git://soophie.de/game-engine
blob: 044ae6a7de84b02c38f010eaa1c875da01b51bd9 (1589 bytes)[doc][blame][raw]
1
import { html, escape } from '../std/js/render.js';3
export const Message = props => {4
return html`<div class="message">5
<h3>${props.message}</h3>6
${props.description ? `<p>${props.description}</p>` : ''}7
</div>`;8
}10
export const Overview = props => {11
return html`<div>12
<h3>Overview</h3>13
<ul class="overview">14
${props.map(category => {15
return html`<li>16
<p>${category.name}</p>17
<ul>18
${category.posts.map(post => {19
const goto = () => {20
const target = document.querySelector(`[data-id="${post.id}"]`);21
if(target) {22
window.scrollTo({ top: target.offsetTop - 20, behavior: 'smooth' });23
}24
};25
return html`<li>26
<a onclick=${goto}>${post.name}</a>27
</li>`;28
})}29
</ul>30
</li>`;31
})}32
</ul>33
</div>`;34
};36
export const Category = props => {37
return html`<div>38
<h2>${props.name}</h2>39
${props.posts.map(Post)}40
</div>`;41
};43
export const Post = props => {44
return html`<article data-id="${props.id}">45
<label>${props.name}</label>46
${props.syntax ? `<pre>${escape(props.syntax)}</pre>` : ''}47
<p>${props.description}</p>48
<code>49
<pre>${escape(props.import)}</pre>50
${CopyButton({ value: props.import })}51
</code>52
${props.code ? (53
html`<code>54
<pre>${escape(props.code.join('\n'))}</pre>55
${CopyButton({ value: props.code.join('\n') })}56
</code>`57
) : ''}58
</article>`;59
};61
export const CopyButton = props => {62
const copy = () => navigator.clipboard.writeText(props.value);63
return html`<div class="clipboard ico" title="Copy" onclick=${copy}>link</div>`;