Merge pull request #1372 from Materialious/update/1.13.13
Update/1.13.13
This commit is contained in:
@@ -7,8 +7,8 @@ android {
|
||||
applicationId "us.materialio.app"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 196
|
||||
versionName "1.13.12"
|
||||
versionCode 197
|
||||
versionName "1.13.13"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
aaptOptions {
|
||||
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
|
||||
|
||||
@@ -95,7 +95,11 @@
|
||||
|
||||
|
||||
|
||||
<release version="1.13.12" date="2026-2-06">
|
||||
|
||||
<release version="1.13.13" date="2026-2-07">
|
||||
<url>https://github.com/Materialious/Materialious/releases/tag/1.13.13</url>
|
||||
</release>
|
||||
<release version="1.13.12" date="2026-2-06">
|
||||
<url>https://github.com/Materialious/Materialious/releases/tag/1.13.12</url>
|
||||
</release>
|
||||
<release version="1.13.11" date="2026-2-06">
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "Materialious",
|
||||
"version": "1.13.12",
|
||||
"version": "1.13.13",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "Materialious",
|
||||
"version": "1.13.12",
|
||||
"version": "1.13.13",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@capacitor-community/electron": "^5.0.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Materialious",
|
||||
"version": "1.13.12",
|
||||
"version": "1.13.13",
|
||||
"description": "Modern material design for Invidious.",
|
||||
"author": {
|
||||
"name": "Ward Pearce",
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
/* eslint-disable @typescript-eslint/no-var-requires */
|
||||
const CapacitorNodejs = require('../../../node_modules/capacitor-nodejs/electron/dist/plugin.js');
|
||||
|
||||
module.exports = {
|
||||
CapacitorNodejs,
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "materialious",
|
||||
"version": "1.13.12",
|
||||
"version": "1.13.13",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "npm run patch:github && vite dev",
|
||||
|
||||
@@ -129,6 +129,7 @@
|
||||
userManualSeeking = true;
|
||||
currentTime = timeToSet;
|
||||
|
||||
showPlayerUI();
|
||||
setPlayerTimelineChapters(currentTime);
|
||||
|
||||
if (playerSliderDebounce) clearTimeout(playerSliderDebounce);
|
||||
@@ -146,6 +147,7 @@
|
||||
const playerVolumeSlider = new Slider({
|
||||
onValueChange: (volumeToSet) => {
|
||||
if (!playerElement) return;
|
||||
showPlayerUI();
|
||||
playerElement.volume = volumeToSet;
|
||||
},
|
||||
value: () => playerVolume,
|
||||
@@ -154,8 +156,6 @@
|
||||
step: 0.01
|
||||
});
|
||||
|
||||
let playerAndroidUITimeout: ReturnType<typeof setTimeout>;
|
||||
|
||||
let clickCount = $state(0);
|
||||
let clickCounterTimeout: ReturnType<typeof setTimeout>;
|
||||
|
||||
@@ -167,10 +167,10 @@
|
||||
updateVideoPlayerHeight();
|
||||
});
|
||||
|
||||
const markerGapSize = 0.5;
|
||||
const markerGapSize = 0.1;
|
||||
const minVisiblePercent = 0.05;
|
||||
function timelineMarker(startTime: number, endTime?: number): string {
|
||||
const ratio = (endTime ? endTime - startTime : startTime) / playerMaxKnownTime;
|
||||
function timelineMarkerWidth(startTime: number, endTime: number): string {
|
||||
const ratio = (endTime - startTime) / playerMaxKnownTime;
|
||||
if (ratio <= 0) return `0%`;
|
||||
|
||||
let percent = ratio * 100;
|
||||
@@ -1098,17 +1098,7 @@
|
||||
|
||||
if (isMobile()) {
|
||||
const initalControlsState = showControls.valueOf();
|
||||
|
||||
if (playerAndroidUITimeout) {
|
||||
clearTimeout(playerAndroidUITimeout);
|
||||
}
|
||||
|
||||
showControls = true;
|
||||
|
||||
playerAndroidUITimeout = setTimeout(() => {
|
||||
showControls = false;
|
||||
}, 3000);
|
||||
|
||||
showPlayerUI();
|
||||
if (!initalControlsState) return;
|
||||
}
|
||||
|
||||
@@ -1182,12 +1172,9 @@
|
||||
Mousetrap.unbind(['left', 'right', 'space', 'c', 'f', 'shift+left', 'shift+right', 'enter']);
|
||||
|
||||
if (watchProgressInterval) clearInterval(watchProgressInterval);
|
||||
|
||||
if (sabrAdapter) sabrAdapter.dispose();
|
||||
|
||||
if (clickCounterTimeout) clearTimeout(clickCounterTimeout);
|
||||
|
||||
if (playerAndroidUITimeout) clearTimeout(playerAndroidUITimeout);
|
||||
if (showPlayerUiTimeout) clearTimeout(showPlayerUiTimeout);
|
||||
|
||||
if (player) {
|
||||
player.unload();
|
||||
@@ -1310,8 +1297,8 @@
|
||||
{#each data.content.timestamps as chapter, index (chapter)}
|
||||
<div
|
||||
class="chapter-marker"
|
||||
style:left={timelineMarker(chapter.time)}
|
||||
style:width={timelineMarker(
|
||||
style:left="{(chapter.time / playerMaxKnownTime) * 100}%"
|
||||
style:width={timelineMarkerWidth(
|
||||
chapter.time,
|
||||
data.content.timestamps[index + 1]?.time || playerMaxKnownTime // Next chapter time or end of video
|
||||
)}
|
||||
@@ -1321,8 +1308,8 @@
|
||||
{#each segments as segment (segment)}
|
||||
<div
|
||||
class="chapter-marker segment-marker"
|
||||
style:left={timelineMarker(segment.startTime)}
|
||||
style:width={timelineMarker(segment.startTime, segment.endTime)}
|
||||
style:left="{(segment.startTime / playerMaxKnownTime) * 100}%"
|
||||
style:width={timelineMarkerWidth(segment.startTime, segment.endTime)}
|
||||
></div>
|
||||
{/each}
|
||||
{/if}
|
||||
|
||||
@@ -62,6 +62,10 @@
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
[data-melt-toaster-root]:empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
[data-melt-toaster-toast-content]:nth-last-child(n + 4) {
|
||||
z-index: 1;
|
||||
scale: 0.925;
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
import { interfaceLowBandwidthMode } from '$lib/store';
|
||||
import { onMount } from 'svelte';
|
||||
import CommentSelf from './Comment.svelte';
|
||||
import { insecureRequestImageHandler } from '$lib/misc';
|
||||
import { insecureRequestImageHandler, truncate } from '$lib/misc';
|
||||
import { _ } from '$lib/i18n';
|
||||
|
||||
interface Props {
|
||||
@@ -68,7 +68,7 @@
|
||||
<div class="comment-info">
|
||||
<a href={resolve(`/channel/[authorId]`, { authorId: comment.authorId })} class="author">
|
||||
<span class="bold" class:channel-owner={comment.authorIsChannelOwner}>
|
||||
{comment.author}
|
||||
{truncate(comment.author, 12)}
|
||||
</span>
|
||||
<span class="secondary-text">{comment.publishedText}</span>
|
||||
</a>
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
:root {
|
||||
--video-player-height: 0px;
|
||||
--safe-area-inset-top: 0px;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
@@ -11,6 +12,19 @@
|
||||
src: url('/inter.ttf');
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
:has(>main) {
|
||||
height: 100%;
|
||||
min-height: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.hide {
|
||||
display: none;
|
||||
}
|
||||
@@ -58,9 +72,10 @@ dialog {
|
||||
}
|
||||
|
||||
main.root {
|
||||
max-height: 100vh;
|
||||
min-height: 0;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
overscroll-behavior: contain;
|
||||
}
|
||||
|
||||
.row {
|
||||
|
||||
@@ -61,8 +61,13 @@
|
||||
|
||||
page.subscribe((pageData) => {
|
||||
playerIsPip = !pageData.url.pathname.includes('/watch');
|
||||
requestAnimationFrame(() => resetScroll());
|
||||
});
|
||||
|
||||
playerState.subscribe(() => {
|
||||
requestAnimationFrame(() => resetScroll());
|
||||
})
|
||||
|
||||
interfaceAmoledTheme.subscribe(async () => {
|
||||
setAmoledTheme();
|
||||
|
||||
@@ -194,6 +199,13 @@
|
||||
await ui('theme', hex);
|
||||
});
|
||||
|
||||
function resetScroll() {
|
||||
const main = document.querySelector('main.root');
|
||||
if (main) main.scrollTop = 0;
|
||||
document.documentElement.scrollTop = 0;
|
||||
document.body.scrollTop = 0;
|
||||
}
|
||||
|
||||
onMount(async () => {
|
||||
ui();
|
||||
|
||||
@@ -233,6 +245,7 @@
|
||||
if (isLoggedIn) {
|
||||
loadNotifications().catch(() => authStore.set(null));
|
||||
}
|
||||
resetScroll();
|
||||
});
|
||||
|
||||
let webManifestLink = $derived(pwaInfo ? pwaInfo.webManifest.linkTag : '');
|
||||
@@ -289,6 +302,13 @@
|
||||
</nav>
|
||||
{#if !$isAndroidTvStore}
|
||||
<nav class="top" id="top-content" class:tv-nav={$isAndroidTvStore}>
|
||||
{#if $playertheatreModeIsActive}
|
||||
<header role="presentation" style="cursor: pointer;" tabindex="-1" class="small-padding">
|
||||
<a href={resolve($interfaceDefaultPage, {})}>
|
||||
<Logo />
|
||||
</a>
|
||||
</header>
|
||||
{/if}
|
||||
{#if !mobileSearchShow}
|
||||
<button
|
||||
onclick={() => (mobileSearchShow = !mobileSearchShow)}
|
||||
|
||||
@@ -536,7 +536,7 @@
|
||||
{/if}
|
||||
|
||||
{#if comments && comments.comments.length > 0}
|
||||
<article class="border">
|
||||
<article class="border comment-list">
|
||||
<details>
|
||||
<summary id="comment-section" class="none bold">
|
||||
<nav>
|
||||
@@ -551,7 +551,11 @@
|
||||
<Comment {comment} videoId={data.video.videoId}></Comment>
|
||||
{/each}
|
||||
{#if comments.continuation}
|
||||
<button onclick={loadMoreComments} class="margin">{$_('loadMore')}</button>
|
||||
<div class="space"></div>
|
||||
<button onclick={loadMoreComments} class="secondary">
|
||||
<i>read_more</i>
|
||||
<span>{$_('loadMore')}</span>
|
||||
</button>
|
||||
{/if}
|
||||
</div>
|
||||
</details>
|
||||
@@ -713,6 +717,12 @@
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.comment-list {
|
||||
max-height: 600px;
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.recommended {
|
||||
margin-top: calc(var(--video-player-height) * -1);
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
+1
-1
@@ -3,7 +3,7 @@ import os
|
||||
import re
|
||||
from datetime import datetime
|
||||
|
||||
LATEST_VERSION = "1.13.12"
|
||||
LATEST_VERSION = "1.13.13"
|
||||
RELEASE_DATE = datetime.now().strftime("%Y-%-m-%d") # Format: YYYY-M-D
|
||||
|
||||
WORKING_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "materialious")
|
||||
|
||||
Reference in New Issue
Block a user