data version tracking, video support, a11y tweaks
This commit is contained in:
		
							parent
							
								
									e9c6510286
								
							
						
					
					
						commit
						6c68fb3aa2
					
				
					 4 changed files with 33 additions and 11 deletions
				
			
		|  | @ -1,6 +1,6 @@ | ||||||
| { | { | ||||||
|     "name": "spacesocial-client", |     "name": "spacesocial-client", | ||||||
|     "version": "0.1.0", |     "version": "0.1.1", | ||||||
|     "description": "social media for the galaxy-wide-web! 🌌", |     "description": "social media for the galaxy-wide-web! 🌌", | ||||||
|     "type": "module", |     "type": "module", | ||||||
|     "scripts": { |     "scripts": { | ||||||
|  |  | ||||||
|  | @ -148,6 +148,7 @@ export async function parsePost(data, num_replies) { | ||||||
|     post.boost_count = data.reblogs_count; |     post.boost_count = data.reblogs_count; | ||||||
|     post.reply_count = data.replies_count; |     post.reply_count = data.replies_count; | ||||||
|     post.mentions = data.mentions; |     post.mentions = data.mentions; | ||||||
|  |     if (data.media_attachments.length > 0) console.log(data.media_attachments); | ||||||
|     post.files = data.media_attachments; |     post.files = data.media_attachments; | ||||||
|     post.url = data.url; |     post.url = data.url; | ||||||
|     post.visibility = data.visibility; |     post.visibility = data.visibility; | ||||||
|  |  | ||||||
|  | @ -1,3 +1,4 @@ | ||||||
|  | import { version as APP_VERSION } from '../../package.json'; | ||||||
| import { Instance, server_types } from './instance.js'; | import { Instance, server_types } from './instance.js'; | ||||||
| import * as api from './api.js'; | import * as api from './api.js'; | ||||||
| 
 | 
 | ||||||
|  | @ -118,6 +119,7 @@ export class Client { | ||||||
| 
 | 
 | ||||||
|     save() { |     save() { | ||||||
|         localStorage.setItem(save_name, JSON.stringify({ |         localStorage.setItem(save_name, JSON.stringify({ | ||||||
|  |             version: APP_VERSION, | ||||||
|             instance: { |             instance: { | ||||||
|                 host: this.instance.host, |                 host: this.instance.host, | ||||||
|                 version: this.instance.version, |                 version: this.instance.version, | ||||||
|  | @ -130,6 +132,11 @@ export class Client { | ||||||
|         let json = localStorage.getItem(save_name); |         let json = localStorage.getItem(save_name); | ||||||
|         if (!json) return false; |         if (!json) return false; | ||||||
|         let saved = JSON.parse(json); |         let saved = JSON.parse(json); | ||||||
|  |         if (!saved.version || saved.version !== APP_VERSION) { | ||||||
|  |             localStorage.setItem(save_name + '-backup', json); | ||||||
|  |             localStorage.removeItem(save_name); | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|         this.instance = new Instance(saved.instance.host, saved.instance.version); |         this.instance = new Instance(saved.instance.host, saved.instance.version); | ||||||
|         this.app = saved.app; |         this.app = saved.app; | ||||||
|         return true; |         return true; | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ | ||||||
| 
 | 
 | ||||||
| <div class="post-body"> | <div class="post-body"> | ||||||
|     {#if post.warning} |     {#if post.warning} | ||||||
|         <p class="post-warning" on:click={() => { open_warned = !open_warned }}> |         <button class="post-warning" on:click={() => { open_warned = !open_warned }}> | ||||||
|         <strong> |         <strong> | ||||||
|             {post.warning} |             {post.warning} | ||||||
|             <span class="warning-instructions"> |             <span class="warning-instructions"> | ||||||
|  | @ -19,7 +19,7 @@ | ||||||
|                 {/if} |                 {/if} | ||||||
|             </span> |             </span> | ||||||
|         </strong> |         </strong> | ||||||
|         </p> |         </button> | ||||||
|     {/if} |     {/if} | ||||||
|     {#if !post.warning || open_warned} |     {#if !post.warning || open_warned} | ||||||
|         {#if post.text} |         {#if post.text} | ||||||
|  | @ -27,10 +27,18 @@ | ||||||
|         {/if} |         {/if} | ||||||
|         <div class="post-media-container" data-count={post.files.length}> |         <div class="post-media-container" data-count={post.files.length}> | ||||||
|             {#each post.files as file} |             {#each post.files as file} | ||||||
|                 <div class="post-media image"> |                 <div class="post-media {file.type}"> | ||||||
|                     <a href={file.url} target="_blank"> |                     {#if file.type === "image"} | ||||||
|                         <img src={file.url} alt={file.alt} height="200" loading="lazy" decoding="async"> |                         <a href={file.url} target="_blank"> | ||||||
|                     </a> |                             <img src={file.url} alt={file.description} height="200" loading="lazy" decoding="async"> | ||||||
|  |                         </a> | ||||||
|  |                     {:else if file.type === "video"} | ||||||
|  |                         <video controls height="200"> | ||||||
|  |                             <source src={file.url} type={file.url.endsWith('.mp4') ? 'video/mp4' : 'video/webm'}> | ||||||
|  |                             <p>{file.description}   <a href={file.url}>[link]</a></p> | ||||||
|  |                             <!-- <media src={file.url} alt={file.description} loading="lazy" decoding="async"> --> | ||||||
|  |                         </video> | ||||||
|  |                     {/if} | ||||||
|                 </div> |                 </div> | ||||||
|             {/each} |             {/each} | ||||||
|         </div> |         </div> | ||||||
|  | @ -47,10 +55,15 @@ | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     .post-warning { |     .post-warning { | ||||||
|         margin-bottom: 6px; |         width: 100%; | ||||||
|  |         margin-bottom: 10px; | ||||||
|         padding: 4px 8px; |         padding: 4px 8px; | ||||||
|         --warn-bg: rgba(255,220,30,.1); |         --warn-bg: rgba(255,220,30,.1); | ||||||
|         background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, var(--warn-bg) 10px, var(--warn-bg) 20px); |         background: repeating-linear-gradient(-45deg, transparent, transparent 10px, var(--warn-bg) 10px, var(--warn-bg) 20px); | ||||||
|  |         font-size: inherit; | ||||||
|  |         color: inherit; | ||||||
|  |         text-align: left; | ||||||
|  |         border: none; | ||||||
|         border-radius: 8px; |         border-radius: 8px; | ||||||
|         cursor: pointer; |         cursor: pointer; | ||||||
|         outline-color: var(--warn-bg); |         outline-color: var(--warn-bg); | ||||||
|  | @ -139,7 +152,7 @@ | ||||||
| 
 | 
 | ||||||
|     .post-media-container { |     .post-media-container { | ||||||
|         max-height: 540px; |         max-height: 540px; | ||||||
|         margin-top: 8px; |         margin: 16px 0 4px 0; | ||||||
|         display: grid; |         display: grid; | ||||||
|         grid-gap: 8px; |         grid-gap: 8px; | ||||||
|     } |     } | ||||||
|  | @ -176,7 +189,8 @@ | ||||||
|         cursor: zoom-in; |         cursor: zoom-in; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     .post-media a img { |     .post-media img, | ||||||
|  |     .post-media video { | ||||||
|         width: 100%; |         width: 100%; | ||||||
|         height: 100%; |         height: 100%; | ||||||
|         display: block; |         display: block; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue