Show videos in messages.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4253 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
		@@ -1,9 +1,44 @@
 | 
			
		||||
import * as linkify from './commonmark-linkify.js';
 | 
			
		||||
import * as hashtagify from './commonmark-hashtag.js';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function image(node, entering) {
 | 
			
		||||
	if (node.firstChild?.type === 'text' &&
 | 
			
		||||
		node.firstChild.literal.startsWith('video:')) {
 | 
			
		||||
		if (entering) {
 | 
			
		||||
			this.lit('<video style="max-width: 100%; max-height: 480px" title="' + this.esc(node.firstChild?.literal) + '" controls>');
 | 
			
		||||
			this.lit('<source src="' + this.esc(node.destination) + '"></source>');
 | 
			
		||||
			this.disableTags += 1;
 | 
			
		||||
		} else {
 | 
			
		||||
			this.disableTags -= 1;
 | 
			
		||||
			this.lit('</video>');
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		if (entering) {
 | 
			
		||||
			if (this.disableTags === 0) {
 | 
			
		||||
				if (this.options.safe && potentiallyUnsafe(node.destination)) {
 | 
			
		||||
					this.lit('<img src="" alt="');
 | 
			
		||||
				} else {
 | 
			
		||||
					this.lit('<img src="' + this.esc(node.destination) + '" alt="');
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			this.disableTags += 1;
 | 
			
		||||
		} else {
 | 
			
		||||
			this.disableTags -= 1;
 | 
			
		||||
			if (this.disableTags === 0) {
 | 
			
		||||
				if (node.title) {
 | 
			
		||||
					this.lit('" title="' + this.esc(node.title));
 | 
			
		||||
				}
 | 
			
		||||
				this.lit('" />');
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function markdown(md) {
 | 
			
		||||
	var reader = new commonmark.Parser({safe: true});
 | 
			
		||||
	var writer = new commonmark.HtmlRenderer();
 | 
			
		||||
	writer.image = image;
 | 
			
		||||
	var parsed = reader.parse(md || '');
 | 
			
		||||
	parsed = linkify.transform(parsed);
 | 
			
		||||
	parsed = hashtagify.transform(parsed);
 | 
			
		||||
 
 | 
			
		||||
@@ -114,13 +114,12 @@ class TodoListElement extends LitElement {
 | 
			
		||||
					@change=${event => self.input_change(event, item)}
 | 
			
		||||
					@keydown=${event => self.input_keydown(event, item)}
 | 
			
		||||
					@blur=${x => self.input_blur(item)}></input>
 | 
			
		||||
				<span @click=${x => self.remove_item(item)}>x</span></div>
 | 
			
		||||
				<span @click=${x => self.remove_item(item)} style="cursor: pointer">❎</span></div>
 | 
			
		||||
			`;
 | 
			
		||||
		} else {
 | 
			
		||||
			return html`
 | 
			
		||||
				<div><input type="checkbox" ?checked=${item.x} @change=${x => self.handle_check(x, item)}></input>
 | 
			
		||||
				<span @click=${x => self.editing = index}>${item.text}</span>
 | 
			
		||||
				<span @click=${x => self.remove_item(item)} style="cursor: pointer">❎</span></div>
 | 
			
		||||
			`;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -175,7 +174,8 @@ class TodoListElement extends LitElement {
 | 
			
		||||
		return html`
 | 
			
		||||
			<div style="border: 3px solid black; padding: 8px; margin: 8px; border-radius: 8px; background-color: #444">
 | 
			
		||||
				${name}
 | 
			
		||||
				${(this.items || []).map(x => self.render_item(x))}
 | 
			
		||||
				${(this.items || []).filter(item => !item.x).map(x => self.render_item(x))}
 | 
			
		||||
				${(this.items || []).filter(item => item.x).map(x => self.render_item(x))}
 | 
			
		||||
				<button @click=${self.add_item}>+ Item</button>
 | 
			
		||||
				<button @click=${self.remove_list}>- List</button>
 | 
			
		||||
			</div>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user