diff --git a/materialious/android/app/build.gradle b/materialious/android/app/build.gradle index 053d132c..e049b39a 100644 --- a/materialious/android/app/build.gradle +++ b/materialious/android/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "us.materialio.app" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 8 - versionName "1.0.8" + versionCode 9 + versionName "1.0.9" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. diff --git a/materialious/electron/package.json b/materialious/electron/package.json index ac0a3b2d..1fb112a2 100644 --- a/materialious/electron/package.json +++ b/materialious/electron/package.json @@ -1,6 +1,6 @@ { "name": "Materialious", - "version": "1.0.8", + "version": "1.0.9", "description": "Modern material design for Invidious.", "author": { "name": "Ward Pearce", diff --git a/materialious/package.json b/materialious/package.json index 23c18eb3..ceb52b2f 100644 --- a/materialious/package.json +++ b/materialious/package.json @@ -1,6 +1,6 @@ { "name": "materialious", - "version": "1.0.8", + "version": "1.0.9", "private": true, "scripts": { "dev": "vite dev", diff --git a/materialious/src/lib/Api/index.ts b/materialious/src/lib/Api/index.ts index 8dbfd5d3..943c961b 100644 --- a/materialious/src/lib/Api/index.ts +++ b/materialious/src/lib/Api/index.ts @@ -6,7 +6,7 @@ import { instanceStore, returnYTDislikesInstanceStore, synciousInstanceStore -} from '../../store'; +} from '../store'; import type { Channel, ChannelContentPlaylists, diff --git a/materialious/src/lib/Comment.svelte b/materialious/src/lib/Comment.svelte index 53ec8c79..d17d5512 100644 --- a/materialious/src/lib/Comment.svelte +++ b/materialious/src/lib/Comment.svelte @@ -7,7 +7,7 @@ export let comment: Comment; export let videoId: string; - let replies: Comments; + let replies: Comments | undefined = undefined; async function loadReplies(continuation: string) { try { @@ -18,6 +18,16 @@ }); } catch {} } + + function commentTimestamps(html: string): string { + const regex = + /(\d+:\d+(?::\d+)?)<\/a>\s*(.+)/; + const replacement = `$3`; + + const processedHtml = html.replace(regex, replacement); + + return processedHtml; + }
@@ -42,7 +52,7 @@ {/if}

- {@html comment.contentHtml} + {@html commentTimestamps(comment.contentHtml)}

thumb_up {numberWithCommas(comment.likeCount)}

@@ -75,6 +85,11 @@ expand_more {comment.replies.replyCount} {$_('replies')} + {:else if replies} + {/if}
diff --git a/materialious/src/lib/MiniPlayer.svelte b/materialious/src/lib/MiniPlayer.svelte index 62eba32f..d60adcfd 100644 --- a/materialious/src/lib/MiniPlayer.svelte +++ b/materialious/src/lib/MiniPlayer.svelte @@ -1,8 +1,8 @@ {#if audioMode} @@ -294,9 +291,11 @@ {/if} -
- {$_('skipping')} - {categoryBeingSkipped} -
+{#if !isEmbed} +
+ {$_('skipping')} + {categoryBeingSkipped} +
+{/if} diff --git a/materialious/src/lib/Search.svelte b/materialious/src/lib/Search.svelte index e50b8262..0b3485a8 100644 --- a/materialious/src/lib/Search.svelte +++ b/materialious/src/lib/Search.svelte @@ -3,8 +3,8 @@ import Mousetrap from 'mousetrap'; import { createEventDispatcher, onMount } from 'svelte'; import { _ } from 'svelte-i18n'; - import { interfaceSearchSuggestionsStore } from '../store'; import { getSearchSuggestions } from './Api'; + import { interfaceSearchSuggestionsStore } from './store'; const dispatch = createEventDispatcher(); @@ -32,6 +32,8 @@ } function handleSubmit() { + if (search.trim() === '') return; + selectedSuggestionIndex = -1; goto(`/search/${encodeURIComponent(search)}`); dispatch('searchSubmitted'); diff --git a/materialious/src/lib/Settings.svelte b/materialious/src/lib/Settings.svelte index e8b9363e..86d7d20d 100644 --- a/materialious/src/lib/Settings.svelte +++ b/materialious/src/lib/Settings.svelte @@ -3,6 +3,7 @@ import { Capacitor } from '@capacitor/core'; import { _ } from 'svelte-i18n'; import { get } from 'svelte/store'; + import { ensureNoTrailingSlash } from './misc'; import { authStore, darkModeStore, @@ -30,8 +31,7 @@ synciousInstanceStore, synciousStore, themeColorStore - } from '../store'; - import { ensureNoTrailingSlash } from './misc'; + } from './store'; let sponsorCategoriesList: string[] = []; sponsorBlockCategoriesStore.subscribe((value) => (sponsorCategoriesList = value)); diff --git a/materialious/src/lib/SyncParty.svelte b/materialious/src/lib/SyncParty.svelte index 7db3f1bb..0e791d16 100644 --- a/materialious/src/lib/SyncParty.svelte +++ b/materialious/src/lib/SyncParty.svelte @@ -7,7 +7,7 @@ import { onDestroy, onMount } from 'svelte'; import { _ } from 'svelte-i18n'; import { get } from 'svelte/store'; - import { syncPartyConnectionsStore, syncPartyPeerStore } from '../store'; + import { syncPartyConnectionsStore, syncPartyPeerStore } from './store'; function changeVideoEvent(conn: DataConnection) { conn.on('data', (data) => { diff --git a/materialious/src/lib/Thumbnail.svelte b/materialious/src/lib/Thumbnail.svelte index 3cea88e4..9a1a5dc1 100644 --- a/materialious/src/lib/Thumbnail.svelte +++ b/materialious/src/lib/Thumbnail.svelte @@ -2,6 +2,11 @@ import { createEventDispatcher, onMount } from 'svelte'; import { _ } from 'svelte-i18n'; import { get } from 'svelte/store'; + import { getDeArrow, getThumbnail, getVideo, getVideoProgress } from './Api'; + import type { Notification, PlaylistPageVideo, Video, VideoBase, VideoPlay } from './Api/model'; + import ShareVideo from './ShareVideo.svelte'; + import { cleanNumber, getBestThumbnail, proxyVideoUrl, videoLength } from './misc'; + import type { PlayerEvents } from './player'; import { authStore, deArrowEnabledStore, @@ -11,12 +16,7 @@ syncPartyConnectionsStore, syncPartyPeerStore, synciousStore - } from '../store'; - import { getDeArrow, getThumbnail, getVideo, getVideoProgress } from './Api'; - import type { Notification, PlaylistPageVideo, Video, VideoBase, VideoPlay } from './Api/model'; - import ShareVideo from './ShareVideo.svelte'; - import { cleanNumber, getBestThumbnail, proxyVideoUrl, videoLength } from './misc'; - import type { PlayerEvents } from './player'; + } from './store'; const dispatch = createEventDispatcher(); @@ -238,12 +238,7 @@ {:else} - Thumbnail for video + Thumbnail for video {/if} {:else}

{$_('thumbnail.failedToLoadImage')}

@@ -339,6 +334,10 @@ max-height: 160px; } + .thumbnail img { + object-fit: contain; + } + @media screen and (max-width: 650px) { .thumbnail { max-height: 100%; diff --git a/materialious/src/lib/VideoList.svelte b/materialious/src/lib/VideoList.svelte index f84bd895..497c96fd 100644 --- a/materialious/src/lib/VideoList.svelte +++ b/materialious/src/lib/VideoList.svelte @@ -1,10 +1,10 @@ diff --git a/materialious/src/routes/+layout.svelte b/materialious/src/routes/(app)/+layout.svelte similarity index 97% rename from materialious/src/routes/+layout.svelte rename to materialious/src/routes/(app)/+layout.svelte index 086f5394..72008f05 100644 --- a/materialious/src/routes/+layout.svelte +++ b/materialious/src/routes/(app)/+layout.svelte @@ -11,6 +11,14 @@ import SyncParty from '$lib/SyncParty.svelte'; import Thumbnail from '$lib/Thumbnail.svelte'; import { bookmarkletLoadFromUrl, loadSettingsFromEnv } from '$lib/externalSettings'; + import { + activePageStore, + authStore, + darkModeStore, + instanceStore, + syncPartyPeerStore, + themeColorStore + } from '$lib/store'; import { App } from '@capacitor/app'; import { Browser } from '@capacitor/browser'; import { Capacitor } from '@capacitor/core'; @@ -20,14 +28,6 @@ import { _ } from 'svelte-i18n'; import { get } from 'svelte/store'; import { pwaInfo } from 'virtual:pwa-info'; - import { - activePageStore, - authStore, - darkModeStore, - instanceStore, - syncPartyPeerStore, - themeColorStore - } from '../store'; let mobileSearchShow = false; @@ -191,8 +191,10 @@ >menu - -
Materialious
+
@@ -271,7 +273,7 @@
-