Compare commits
22 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9c3b688178 | |||
| 45973252bb | |||
| a7daa84054 | |||
| df9598ff6b | |||
| 93d1942728 | |||
| 84738fec6b | |||
| 1856f6f3e4 | |||
| c11022c52b | |||
| 5a7c49263c | |||
| 23a25f1dd3 | |||
| 7619f94eb2 | |||
| ab3fdf5723 | |||
| 8af54e1fd4 | |||
| 4d3e39788c | |||
| cdbb541fde | |||
| 52ab5aca3b | |||
| 2f8dbe7803 | |||
| c70e66beea | |||
| ff6b6a6296 | |||
| 8035b3a01a | |||
| ed14d7bbb3 | |||
| 7aab0d1a6d |
@@ -1,7 +1,7 @@
|
|||||||
name: Build and Push Matrix-to Docker Image
|
name: Build and Push Matrix-to Docker Image
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch: # Erlaubt den manuellen Start über das GitHub UI
|
workflow_dispatch: # Manueller Start
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@@ -20,10 +20,16 @@ jobs:
|
|||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
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
|
- name: Build and push Docker image
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v2
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
tags: domoel/matrix-to:latest
|
tags: |
|
||||||
|
domoel/matrix-to:latest
|
||||||
|
domoel/matrix-to:${{ steps.vars.outputs.sha_short }}
|
||||||
no-cache: true
|
no-cache: true
|
||||||
|
|||||||
@@ -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
|
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
|
which lets users share links to matrix entities without being tied to a
|
||||||
@@ -103,3 +129,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- NODE_ENV=production
|
- 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.
|
||||||
|
|||||||
Executable
BIN
Binary file not shown.
|
After Width: | Height: | Size: 277 KiB |
+37
-11
@@ -19,7 +19,7 @@
|
|||||||
.ClientView:hover {
|
.ClientView:hover {
|
||||||
background: #2f313d !important;
|
background: #2f313d !important;
|
||||||
border-left-color: var(--ztfr-purple) !important;
|
border-left-color: var(--ztfr-purple) !important;
|
||||||
transform: translateX(5px);
|
/* transform: translateX(5px); - Entfernt, damit die Kachel nicht mehr springt */
|
||||||
}
|
}
|
||||||
|
|
||||||
.ClientView.isPreferred {
|
.ClientView.isPreferred {
|
||||||
@@ -92,29 +92,55 @@
|
|||||||
margin: 5px auto;
|
margin: 5px auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --- ANPASSUNG FÜR DEN DEZENTEN LOOK --- */
|
/* --- ANPASSUNG FÜR DEN DEZENTEN LOOK DER BUTTONS --- */
|
||||||
|
|
||||||
.ClientView .actions .footer {
|
.ClientView .actions .footer {
|
||||||
display: block !important; /* Kein Flex mehr, damit Links wie Text fließen */
|
display: block !important;
|
||||||
text-align: center !important;
|
text-align: center !important;
|
||||||
margin-top: 20px !important;
|
margin-top: 20px !important;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
line-height: 1.8 !important; /* Gibt den Zeilen etwas Platz */
|
line-height: 1.8 !important;
|
||||||
color: var(--sub-text);
|
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 {
|
.ClientView .actions .footer .custom {
|
||||||
display: block !important;
|
display: block !important;
|
||||||
margin-top: 6px !important;
|
margin-top: 6px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sicherstellen, dass der "Change" Button im Textfluss bleibt */
|
/* --- MOBILE ANPASSUNGEN --- */
|
||||||
.ClientView .actions .footer button.change {
|
|
||||||
display: inline !important;
|
|
||||||
margin: 0 4px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 480px) {
|
@media screen and (max-width: 480px) {
|
||||||
.ClientView {
|
.ClientView {
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
|
|||||||
+4
-15
@@ -212,23 +212,12 @@ input[type='text'].large {
|
|||||||
h1 { font-size: 1.5rem; }
|
h1 { font-size: 1.5rem; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --- FIX FÜR NUTZERPROFILE (null-Werte verstecken) --- */
|
.memberCount.hidden,
|
||||||
|
.topic.hidden {
|
||||||
.PreviewView .members[data-count="null"],
|
|
||||||
.PreviewView .members:empty {
|
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.PreviewView .topic:empty,
|
.memberCount:has(p:empty),
|
||||||
.PreviewView .topic:contains("null") {
|
.topic:empty {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.PreviewView p:empty,
|
|
||||||
.PreviewView span:empty {
|
|
||||||
display: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.PreviewView h2 + p {
|
|
||||||
margin-bottom: 0 !important;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -51,12 +51,22 @@ class LoadedPreviewView extends TemplateView {
|
|||||||
return t.div({className: "defaultAvatar"});
|
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}, [
|
return t.div({className: vm.isSpaceRoom ? "mxSpace" : undefined}, [
|
||||||
t.div({className: "avatarContainer"}, avatar),
|
t.div({className: "avatarContainer"}, avatar),
|
||||||
t.h1(vm => vm.name),
|
t.h1(vm => vm.name),
|
||||||
t.p({className: {identifier: true, hidden: vm => !vm.identifier}}, vm => vm.identifier),
|
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 : ""]
|
||||||
|
),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user