22 Commits

Author SHA1 Message Date
Dome 9c3b688178 Update README.md 2026-04-21 11:59:17 +02:00
Dome 45973252bb Update README.md 2026-04-12 22:23:38 +02:00
Dome a7daa84054 Update README.md 2026-04-12 22:08:27 +02:00
Dome df9598ff6b Update README.md 2026-04-12 22:07:36 +02:00
Dome 93d1942728 Update README.md 2026-04-12 21:51:31 +02:00
Dome 84738fec6b Update README.md 2026-04-12 21:51:07 +02:00
Dome 1856f6f3e4 updated community badge asset link 2026-04-12 21:50:07 +02:00
Dome c11022c52b Update README.md 2026-04-12 01:07:40 +02:00
Dome 5a7c49263c Update README.md 2026-04-12 01:06:55 +02:00
Dome 23a25f1dd3 Add files via upload 2026-04-12 01:05:50 +02:00
Dome 7619f94eb2 Create ztfr.png 2026-04-12 01:05:29 +02:00
Dome ab3fdf5723 Update PreviewView.js 2026-04-08 16:47:01 +02:00
Dome 8af54e1fd4 Update PreviewView.js 2026-04-08 16:40:16 +02:00
Dome 4d3e39788c Update PreviewView.js 2026-04-08 16:30:01 +02:00
Dome cdbb541fde Update main.css 2026-04-08 16:29:05 +02:00
Dome 52ab5aca3b Update PreviewView.js 2026-04-08 16:20:12 +02:00
Dome 2f8dbe7803 Update client.css 2026-04-08 16:01:19 +02:00
Dome c70e66beea Update docker-image.yml 2026-04-08 15:49:04 +02:00
Dome ff6b6a6296 Update Dockerfile 2026-04-08 09:11:20 +02:00
Dome 8035b3a01a Update Dockerfile 2026-04-08 09:08:23 +02:00
Dome ed14d7bbb3 Update docker-image.yml 2026-04-08 09:02:31 +02:00
Dome 7aab0d1a6d Update docker-image.yml 2026-04-08 08:51:06 +02:00
6 changed files with 92 additions and 31 deletions
+8 -2
View File
@@ -1,7 +1,7 @@
name: Build and Push Matrix-to Docker Image
on:
workflow_dispatch: # Erlaubt den manuellen Start über das GitHub UI
workflow_dispatch: # Manueller Start
jobs:
build:
@@ -20,10 +20,16 @@ jobs:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Generate Timestamp Tag
id: vars
run: echo "sha_short=$(date +%Y%m%d-%H%M)" >> $GITHUB_OUTPUT
- name: Build and push Docker image
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: domoel/matrix-to:latest
tags: |
domoel/matrix-to:latest
domoel/matrix-to:${{ steps.vars.outputs.sha_short }}
no-cache: true
+31 -1
View File
@@ -1,4 +1,30 @@
# Matrix.to
<p align="center">
<a href="https://ztfr.eu/matrix">
<img src="assets/community-badge.png" alt="Join Zeitfresser Matrix Community" height="70" />
</a>
</p>
<h1 align="center">
Matrix.to Dracula Themed
</span>
<h4 align="center">
<span style="display:inline-flex; align-items:center; gap:12px;">
A simple stateless privacy-protecting URL redirecting service for Matrix Servers with an opinionated Dracula Theme
</span>
<p>
<h6 align="center">
<a href="https://ztfr.eu">🏰 Website</a>
·
<a href="https://ztfr.eu/matrix">📰 Zeitfresser Matrix Community</a>
·
<a href="https://social.ztfr.eu/@dome">🐘 Mastodon</a>
·
<a href="https://look.ztfr.eu/#/#support:ztfr.eu">💬 Supportchat</a>
</h6>
<br>
## Introduction
Matrix.to is a simple url redirection service for the Matrix.org ecosystem
which lets users share links to matrix entities without being tied to a
@@ -103,3 +129,7 @@ services:
environment:
- NODE_ENV=production
```
## 🛠 Development & Support
If you need to get support or want to participate in the active development of this software, you can <a href="https://ztfr.eu/matrix">join our Zeitfresser Matrix Community</a> or the <a href="https://look.ztfr.eu/#/#support:ztfr.eu">Development & Support Channel</a> on Matrix.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 277 KiB

+37 -11
View File
@@ -19,7 +19,7 @@
.ClientView:hover {
background: #2f313d !important;
border-left-color: var(--ztfr-purple) !important;
transform: translateX(5px);
/* transform: translateX(5px); - Entfernt, damit die Kachel nicht mehr springt */
}
.ClientView.isPreferred {
@@ -92,29 +92,55 @@
margin: 5px auto;
}
/* --- ANPASSUNG FÜR DEN DEZENTEN LOOK --- */
/* --- ANPASSUNG FÜR DEN DEZENTEN LOOK DER BUTTONS --- */
.ClientView .actions .footer {
display: block !important; /* Kein Flex mehr, damit Links wie Text fließen */
display: block !important;
text-align: center !important;
margin-top: 20px !important;
width: 100%;
line-height: 1.8 !important; /* Gibt den Zeilen etwas Platz */
line-height: 1.8 !important;
color: var(--sub-text);
}
/* Der "Use Custom Web Instance" Bereich bekommt eine eigene Zeile */
/* Reset der Button-Styles: Macht aus den grauen Kästen einfachen Text mit unsichtbarem Rahmen für ruckelfreien Hover */
.ClientView .actions .footer button.change,
.ClientView .actions .footer button.custom,
.ClientView .actions .footer .custom,
.ClientView .actions .footer .custom button,
.PreviewView > .footer button.change
{
background: transparent !important;
border: none !important;
border-bottom: 1px solid transparent !important;
color: var(--sub-text) !important;
padding: 0 2px !important;
margin: 0 4px !important;
font-family: inherit !important;
font-size: inherit !important;
cursor: pointer !important;
display: inline !important;
transition: all 0.2s ease !important;
}
/* Der Hover-Effekt: Hellerer Text und lila Unterstrich */
.ClientView .actions .footer button.change:hover,
.ClientView .actions .footer button.custom:hover,
.ClientView .actions .footer .custom:hover,
.ClientView .actions .footer .custom button:hover,
.PreviewView > .footer button.change:hover
{
color: var(--foreground) !important;
border-bottom: 1px solid var(--ztfr-purple) !important;
}
/* Layout-Anpassung für die Custom-Web-Instance-Zeile, damit sie sauber umbricht */
.ClientView .actions .footer .custom {
display: block !important;
margin-top: 6px !important;
}
/* Sicherstellen, dass der "Change" Button im Textfluss bleibt */
.ClientView .actions .footer button.change {
display: inline !important;
margin: 0 4px !important;
}
/* --- MOBILE ANPASSUNGEN --- */
@media screen and (max-width: 480px) {
.ClientView {
padding: 15px;
+4 -15
View File
@@ -212,23 +212,12 @@ input[type='text'].large {
h1 { font-size: 1.5rem; }
}
/* --- FIX FÜR NUTZERPROFILE (null-Werte verstecken) --- */
.PreviewView .members[data-count="null"],
.PreviewView .members:empty {
.memberCount.hidden,
.topic.hidden {
display: none !important;
}
.PreviewView .topic:empty,
.PreviewView .topic:contains("null") {
.memberCount:has(p:empty),
.topic:empty {
display: none !important;
}
.PreviewView p:empty,
.PreviewView span:empty {
display: none !important;
}
.PreviewView h2 + p {
margin-bottom: 0 !important;
}
+12 -2
View File
@@ -51,12 +51,22 @@ class LoadedPreviewView extends TemplateView {
return t.div({className: "defaultAvatar"});
}
});
const hasMemberCount = vm => vm.memberCount && String(vm.memberCount) !== "null";
const hasTopic = vm => vm.topic && String(vm.topic) !== "null";
return t.div({className: vm.isSpaceRoom ? "mxSpace" : undefined}, [
t.div({className: "avatarContainer"}, avatar),
t.h1(vm => vm.name),
t.p({className: {identifier: true, hidden: vm => !vm.identifier}}, vm => vm.identifier),
t.div({className: {memberCount: true, hidden: vm => !vm.memberCount}}, t.p([vm => vm.memberCount, " members"])),
t.p({className: {topic: true, hidden: vm => !vm.topic}}, [vm => vm.topic]),
t.div({className: {memberCount: true, hidden: vm => !hasMemberCount(vm)}},
t.p([vm => hasMemberCount(vm) ? vm.memberCount + " members" : ""])
),
t.p({className: {topic: true, hidden: vm => !hasTopic(vm)}},
[vm => hasTopic(vm) ? vm.topic : ""]
),
]);
}
}