A lightweight JavaScript game engine
git clone git://soophie.de/game-engine
blob: 02c31be6a660e4e7e094d26b080fad5918d08377 (1627 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
const url = 'https://git.typable.dev/std' + props.url;45
return html`<article data-id="${props.id}">46
<label>${props.name}</label>47
${props.syntax ? `<pre>${escape(props.syntax)}</pre>` : ''}48
<p>${props.description}</p>49
<code>50
<pre>${escape(url)}</pre>51
${CopyButton({ value: url })}52
</code>53
${props.code ? (54
html`<code>55
<pre>${escape(props.code.join('\n'))}</pre>56
${CopyButton({ value: props.code.join('\n') })}57
</code>`58
) : ''}59
</article>`;60
};62
export const CopyButton = props => {63
const copy = () => navigator.clipboard.writeText(props.value);64
return html`<div class="clipboard ico" title="Copy" onclick=${copy}>link</div>`;