| 
									
										
										
										
											2023-11-04 18:15:58 +00:00
										 |  |  | import {LitElement, html, unsafeHTML, range} from './lit-all.min.js'; | 
					
						
							|  |  |  | import * as tfrpc from '/static/tfrpc.js'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TfJournalEntryElement extends LitElement { | 
					
						
							|  |  |  | 	static get properties() { | 
					
						
							|  |  |  | 		return { | 
					
						
							|  |  |  | 			whoami: {type: String}, | 
					
						
							|  |  |  | 			key: {type: String}, | 
					
						
							|  |  |  | 			journals: {type: Object}, | 
					
						
							|  |  |  | 			text: {type: String}, | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	constructor() { | 
					
						
							|  |  |  | 		super(); | 
					
						
							|  |  |  | 		this.journals = {}; | 
					
						
							|  |  |  | 		this.key = new Date().toISOString().split('T')[0]; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	markdown(md) { | 
					
						
							| 
									
										
										
										
											2024-11-12 20:43:03 -05:00
										 |  |  | 		var reader = new commonmark.Parser(); | 
					
						
							|  |  |  | 		var writer = new commonmark.HtmlRenderer({safe: true}); | 
					
						
							| 
									
										
										
										
											2023-11-04 18:15:58 +00:00
										 |  |  | 		var parsed = reader.parse(md || ''); | 
					
						
							|  |  |  | 		return writer.render(parsed); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	on_discard(event) { | 
					
						
							|  |  |  | 		this.text = undefined; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	async on_publish() { | 
					
						
							|  |  |  | 		console.log('publish', this.text); | 
					
						
							| 
									
										
										
										
											2024-02-24 11:09:34 -05:00
										 |  |  | 		this.dispatchEvent( | 
					
						
							|  |  |  | 			new CustomEvent('publish', { | 
					
						
							|  |  |  | 				bubbles: true, | 
					
						
							|  |  |  | 				detail: { | 
					
						
							|  |  |  | 					key: this.shadowRoot.getElementById('date_picker').value, | 
					
						
							|  |  |  | 					text: this.text, | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2023-11-04 18:15:58 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	back_dates(count) { | 
					
						
							|  |  |  | 		let now = new Date(); | 
					
						
							|  |  |  | 		let result = []; | 
					
						
							|  |  |  | 		for (let i = 0; i < count; i++) { | 
					
						
							|  |  |  | 			let next = new Date(now); | 
					
						
							|  |  |  | 			next.setDate(now.getDate() - i); | 
					
						
							|  |  |  | 			result.push(next.toISOString().split('T')[0]); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return result; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	on_edit(event) { | 
					
						
							|  |  |  | 		this.text = event.srcElement.value; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	on_date_change(event) { | 
					
						
							|  |  |  | 		this.key = event.srcElement.value; | 
					
						
							|  |  |  | 		this.text = this.journals[this.key]?.text; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	render() { | 
					
						
							|  |  |  | 		console.log('RENDER ENTRY', this.key, this.journals?.[this.key]); | 
					
						
							|  |  |  | 		return html`
 | 
					
						
							|  |  |  | 			<select id="date_picker" @change=${this.on_date_change}> | 
					
						
							| 
									
										
										
										
											2024-02-24 11:09:34 -05:00
										 |  |  | 				${this.back_dates(10).map( | 
					
						
							|  |  |  | 					(x) => html` <option value=${x}>${x}</option> ` | 
					
						
							|  |  |  | 				)} | 
					
						
							| 
									
										
										
										
											2023-11-04 18:15:58 +00:00
										 |  |  | 			</select> | 
					
						
							|  |  |  | 			<div style="display: inline-flex; flex-direction: row"> | 
					
						
							| 
									
										
										
										
											2024-02-24 11:09:34 -05:00
										 |  |  | 				<button | 
					
						
							|  |  |  | 					?disabled=${this.text == this.journals?.[this.key]?.text} | 
					
						
							|  |  |  | 					@click=${this.on_publish} | 
					
						
							|  |  |  | 				> | 
					
						
							|  |  |  | 					Publish | 
					
						
							|  |  |  | 				</button> | 
					
						
							| 
									
										
										
										
											2023-11-04 18:15:58 +00:00
										 |  |  | 				<button @click=${this.on_discard}>Discard</button> | 
					
						
							|  |  |  | 			</div> | 
					
						
							|  |  |  | 			<div style="display: flex; flex-direction: row"> | 
					
						
							|  |  |  | 				<textarea | 
					
						
							|  |  |  | 					style="flex: 1 1; min-height: 10em" | 
					
						
							| 
									
										
										
										
											2024-02-24 11:09:34 -05:00
										 |  |  | 					@input=${this.on_edit} | 
					
						
							|  |  |  | 					.value=${this.text ?? this.journals?.[this.key]?.text ?? ''} | 
					
						
							|  |  |  | 				></textarea> | 
					
						
							|  |  |  | 				<div style="flex: 1 1"> | 
					
						
							|  |  |  | 					${unsafeHTML( | 
					
						
							|  |  |  | 						this.markdown(this.text ?? this.journals?.[this.key]?.text) | 
					
						
							|  |  |  | 					)} | 
					
						
							|  |  |  | 				</div> | 
					
						
							| 
									
										
										
										
											2023-11-04 18:15:58 +00:00
										 |  |  | 			</div> | 
					
						
							|  |  |  | 		`;
 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-24 11:09:34 -05:00
										 |  |  | customElements.define('tf-journal-entry', TfJournalEntryElement); |