Remove special link class
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing

This cleans up the code quite a bit, but also allows links in editable
content to be rendered with the default style.
This commit is contained in:
Râu Cao 2025-05-29 15:43:28 +04:00
parent ab1490f472
commit 29a67ff870
Signed by: raucao
GPG Key ID: 37036C356E56CC51
18 changed files with 60 additions and 45 deletions

View File

@ -7,7 +7,6 @@
@import "components/buttons"; @import "components/buttons";
@import "components/dashboard_services"; @import "components/dashboard_services";
@import "components/forms"; @import "components/forms";
@import "components/links";
@import "components/notifications"; @import "components/notifications";
@import "components/pagination"; @import "components/pagination";
@import "components/tables"; @import "components/tables";

View File

@ -6,6 +6,7 @@
body { body {
@apply leading-none bg-cover bg-fixed; @apply leading-none bg-cover bg-fixed;
background-image: linear-gradient(35deg, rgba(255,0,255,0.2) 0, rgba(13,79,153,0.8) 100%), url('/img/bg-1.jpg'); background-image: linear-gradient(35deg, rgba(255,0,255,0.2) 0, rgba(13,79,153,0.8) 100%), url('/img/bg-1.jpg');
color: black;
} }
body#admin { body#admin {
@ -59,4 +60,13 @@
main ul li { main ul li {
@apply leading-6; @apply leading-6;
} }
main a:not(nav > *),
main a:not([data-tabs-target="tab"] {
@apply text-blue-600;
&:hover { @apply underline; }
&:visited { @apply text-indigo-600; }
&:active { @apply text-red-600; }
}
} }

View File

@ -1,5 +1,15 @@
@layer components { @layer components {
.btn-text-dark { @apply text-black; }
.btn-text-dark:hover { @apply text-black no-underline; }
.btn-text-dark:visited { @apply text-black; }
.btn-text-dark:active { @apply text-black; }
.btn-text-light { @apply text-white; }
.btn-text-light:hover { @apply text-white no-underline; }
.btn-text-light:visited { @apply text-white; }
.btn-text-light:active { @apply text-white; }
.btn { .btn {
@apply btn-text-dark;
@apply inline-block font-semibold rounded-md leading-none cursor-pointer text-center @apply inline-block font-semibold rounded-md leading-none cursor-pointer text-center
transition-colors duration-75 focus:outline-none focus:ring-4; transition-colors duration-75 focus:outline-none focus:ring-4;
} }
@ -28,17 +38,20 @@
} }
.btn-blue { .btn-blue {
@apply bg-blue-500 hover:bg-blue-600 text-white @apply btn-text-light;
@apply bg-blue-500 hover:bg-blue-600
focus:ring-blue-400 focus:ring-opacity-75; focus:ring-blue-400 focus:ring-opacity-75;
} }
.btn-emerald { .btn-emerald {
@apply bg-emerald-500 hover:bg-emerald-600 text-white @apply btn-text-light;
@apply bg-emerald-500 hover:bg-emerald-600
focus:ring-emerald-400 focus:ring-opacity-75; focus:ring-emerald-400 focus:ring-opacity-75;
} }
.btn-red { .btn-red {
@apply bg-red-600 hover:bg-red-700 text-white @apply btn-text-light;
@apply bg-red-600 hover:bg-red-700
focus:ring-red-500 focus:ring-opacity-75; focus:ring-red-500 focus:ring-opacity-75;
} }

View File

@ -1,8 +0,0 @@
@layer components {
.ks-text-link {
@apply text-blue-600;
&:hover { @apply underline; }
&:visited { @apply text-indigo-600; }
&:active { @apply text-red-600; }
}
}

View File

@ -34,7 +34,7 @@
.pagy-nav .page a, .page.gap { .pagy-nav .page a, .page.gap {
@apply bg-white border-gray-300 text-gray-500 hover:bg-gray-100 relative @apply bg-white border-gray-300 text-gray-500 hover:bg-gray-100 relative
inline-flex items-center border px-4 py-2 text-sm font-medium inline-flex items-center border px-4 py-2 text-sm font-medium
focus:z-20; no-underline focus:z-20;
} }
.pagy-nav .page.active { .pagy-nav .page.active {

View File

@ -38,8 +38,7 @@
<tr> <tr>
<td><%= web_app.name %></td> <td><%= web_app.name %></td>
<td><%= link_to web_app.url, web_app.url, <td><%= link_to web_app.url, web_app.url,
target: "_blank", rel: "nofollow noopener", target: "_blank", rel: "nofollow noopener" %></td>
class: "ks-text-link" %></td>
<td class="hidden md:table-cell"><%= web_app.remote_storage_authorizations.count %></td> <td class="hidden md:table-cell"><%= web_app.remote_storage_authorizations.count %></td>
<td class="hidden md:table-cell"> <td class="hidden md:table-cell">
<span title="<%= web_app.created_at %>" class="cursor-help"> <span title="<%= web_app.created_at %>" class="cursor-help">

View File

@ -12,7 +12,7 @@
<tbody> <tbody>
<% donations.each do |donation| %> <% donations.each do |donation| %>
<tr> <tr>
<td><%= link_to donation.user.cn, admin_user_path(donation.user.cn), class: 'ks-text-link' %></td> <td><%= link_to donation.user.cn, admin_user_path(donation.user.cn) %></td>
<td class="text-right"><% if donation.amount_sats.present? %><%= number_with_delimiter donation.amount_sats %><% end %></td> <td class="text-right"><% if donation.amount_sats.present? %><%= number_with_delimiter donation.amount_sats %><% end %></td>
<td class="text-right"><% if donation.fiat_amount.present? %><%= number_to_currency donation.fiat_amount.to_f / 100, unit: "" %> <%= donation.fiat_currency %><% end %></td> <td class="text-right"><% if donation.fiat_amount.present? %><%= number_to_currency donation.fiat_amount.to_f / 100, unit: "" %> <%= donation.fiat_currency %><% end %></td>
<td class="pl-2"><%= donation.public_name %></td> <td class="pl-2"><%= donation.public_name %></td>

View File

@ -6,7 +6,7 @@
<tbody> <tbody>
<tr> <tr>
<th>User</th> <th>User</th>
<td><%= link_to @donation.user.cn, admin_user_path(@donation.user.cn), class: 'ks-text-link' %></td> <td><%= link_to @donation.user.cn, admin_user_path(@donation.user.cn) %></td>
</tr> </tr>
<tr> <tr>
<th>Donation Method</th> <th>Donation Method</th>

View File

@ -44,8 +44,8 @@
<tr> <tr>
<td class="overflow-ellipsis font-mono"><%= invitation.token %></td> <td class="overflow-ellipsis font-mono"><%= invitation.token %></td>
<td><%= invitation.used_at.strftime("%Y-%m-%d (%H:%M UTC)") %></td> <td><%= invitation.used_at.strftime("%Y-%m-%d (%H:%M UTC)") %></td>
<td><%= link_to invitation.user.cn, admin_user_path(invitation.user.cn), class: "ks-text-link" %></td> <td><%= link_to invitation.user.cn, admin_user_path(invitation.user.cn) %></td>
<td><%= link_to invitation.invitee.cn, admin_user_path(invitation.invitee.cn), class: "ks-text-link" %></td> <td><%= link_to invitation.invitee.cn, admin_user_path(invitation.invitee.cn) %></td>
</tr> </tr>
<% end %> <% end %>
</tbody> </tbody>

View File

@ -36,7 +36,7 @@
</td> </td>
<td> <td>
<% if user = @users.find{ |u| u[2] == account.login } %> <% if user = @users.find{ |u| u[2] == account.login } %>
<%= link_to user[0], admin_user_path(user[0]), class: "ks-text-link" %> <%= link_to user[0], admin_user_path(user[0]) %>
<% end %> <% end %>
</td> </td>
<td><%= number_with_delimiter account.balance.to_i.to_s %></td> <td><%= number_with_delimiter account.balance.to_i.to_s %></td>

View File

@ -42,7 +42,7 @@
<tbody> <tbody>
<% @users.each do |user| %> <% @users.each do |user| %>
<tr> <tr>
<td><%= link_to(user.cn, admin_user_path(user.cn), class: 'ks-text-link') %></td> <td><%= link_to(user.cn, admin_user_path(user.cn)) %></td>
<td> <td>
<%= user.confirmed_at.nil? ? badge("pending", :yellow) : "" %> <%= user.confirmed_at.nil? ? badge("pending", :yellow) : "" %>
<% if @show_contributors %><%= @contributors.include?(user.cn) ? badge("contributor", :green) : "" %><% end %> <% if @show_contributors %><%= @contributors.include?(user.cn) ? badge("contributor", :green) : "" %><% end %>

View File

@ -47,7 +47,7 @@
<th>Donations</th> <th>Donations</th>
<td> <td>
<% if @user.donations.any? %> <% if @user.donations.any? %>
<%= link_to admin_donations_path(username: @user.cn), class: "ks-text-link" do %> <%= link_to admin_donations_path(username: @user.cn) do %>
<%= @user.donations.completed.count %> for <%= @user.donations.completed.count %> for
<%= number_with_delimiter @user.donations.completed.sum("amount_sats") %> sats <%= number_with_delimiter @user.donations.completed.sum("amount_sats") %> sats
<% end %> <% end %>
@ -60,7 +60,7 @@
<th>Invited by</th> <th>Invited by</th>
<td> <td>
<% if @user.inviter %> <% if @user.inviter %>
<%= link_to @user.inviter.cn, admin_user_path(@user.inviter.cn), class: 'ks-text-link' %> <%= link_to @user.inviter.cn, admin_user_path(@user.inviter.cn) %>
<% else %>&mdash;<% end %> <% else %>&mdash;<% end %>
</td> </td>
</tr> </tr>
@ -102,10 +102,10 @@
<% if @invitees.any? %> <% if @invitees.any? %>
<ul class="mb-0"> <ul class="mb-0">
<% @recent_invitees.each do |invitee| %> <% @recent_invitees.each do |invitee| %>
<li class="leading-none mb-2 last:mb-0"><%= link_to invitee.cn, admin_user_path(invitee.cn), class: "ks-text-link" %></li> <li class="leading-none mb-2 last:mb-0"><%= link_to invitee.cn, admin_user_path(invitee.cn) %></li>
<% end %> <% end %>
<% if @more_invitees > 0 %> <% if @more_invitees > 0 %>
<li>and <%= link_to "#{@more_invitees} more", admin_invitations_path(username: @user.cn), class: "ks-text-link" %></li> <li>and <%= link_to "#{@more_invitees} more", admin_invitations_path(username: @user.cn) %></li>
<% end %> <% end %>
</ul> </ul>
<% else %>&mdash;<% end %> <% else %>&mdash;<% end %>
@ -168,7 +168,7 @@
<span class="font-mono" title="<%= @user.pgp_fpr %>"> <span class="font-mono" title="<%= @user.pgp_fpr %>">
<% if @user.pgp_pubkey_contains_user_address? %> <% if @user.pgp_pubkey_contains_user_address? %>
<%= link_to wkd_key_url(hashed_username: @user.wkd_hash, l: @user.cn, format: :txt), <%= link_to wkd_key_url(hashed_username: @user.wkd_hash, l: @user.cn, format: :txt),
class: "ks-text-link", target: "_blank" do %> target: "_blank" do %>
<%= "#{@user.pgp_fpr[0, 8]}…#{@user.pgp_fpr[-8..-1]}" %> <%= "#{@user.pgp_fpr[0, 8]}…#{@user.pgp_fpr[-8..-1]}" %>
<% end %> <% end %>
<% else %> <% else %>

View File

@ -8,7 +8,7 @@
bg-[length:86%] bg-[center_top_-40px] bg-no-repeat bg-[length:86%] bg-[center_top_-40px] bg-no-repeat
bg-[url(/img/logos/icon_xmpp.svg)]"> bg-[url(/img/logos/icon_xmpp.svg)]">
<%= link_to services_chat_path, <%= link_to services_chat_path,
class: "block h-full px-6 py-6 rounded-md" do %> class: "block h-full px-6 py-6 rounded-md btn-text-dark" do %>
<h3 class="mb-3.5">Chat</h3> <h3 class="mb-3.5">Chat</h3>
<p class="text-gray-600"> <p class="text-gray-600">
Federated chat rooms and instant messaging Federated chat rooms and instant messaging
@ -20,7 +20,8 @@
<div class="border border-gray-300 rounded-md hover:border-gray-400 <div class="border border-gray-300 rounded-md hover:border-gray-400
bg-[length:88%] bg-[center_top_-40px] bg-no-repeat bg-[length:88%] bg-[center_top_-40px] bg-no-repeat
bg-[url(/img/logos/icon_mastodon.svg)]"> bg-[url(/img/logos/icon_mastodon.svg)]">
<%= link_to services_mastodon_path, class: "block h-full px-6 py-6 rounded-md" do %> <%= link_to services_mastodon_path,
class: "block h-full px-6 py-6 rounded-md btn-text-dark" do %>
<h3 class="mb-3.5">Mastodon</h3> <h3 class="mb-3.5">Mastodon</h3>
<p class="text-gray-600"> <p class="text-gray-600">
Your account on the Open Social Web Your account on the Open Social Web
@ -33,7 +34,8 @@
<div class="border border-gray-300 rounded-md hover:border-gray-400 <div class="border border-gray-300 rounded-md hover:border-gray-400
bg-[length:90%] bg-[center_top_-160px] bg-no-repeat bg-[length:90%] bg-[center_top_-160px] bg-no-repeat
bg-[url(/img/logos/icon_mail.svg)]"> bg-[url(/img/logos/icon_mail.svg)]">
<%= link_to services_email_path, class: "block h-full px-6 py-6 rounded-md" do %> <%= link_to services_email_path,
class: "block h-full px-6 py-6 rounded-md btn-text-dark" do %>
<h3 class="mb-3.5">E-Mail</h3> <h3 class="mb-3.5">E-Mail</h3>
<p class="text-gray-600"> <p class="text-gray-600">
A no-bullshit email account A no-bullshit email account
@ -47,7 +49,7 @@
bg-[length:80%] bg-[center_top_-156px] bg-no-repeat bg-[length:80%] bg-[center_top_-156px] bg-no-repeat
bg-[url(/img/logos/icon_remotestorage.svg)]"> bg-[url(/img/logos/icon_remotestorage.svg)]">
<%= link_to services_storage_path, <%= link_to services_storage_path,
class: "block h-full px-6 py-6 rounded-md" do %> class: "block h-full px-6 py-6 rounded-md btn-text-dark" do %>
<h3 class="mb-3.5">Storage</h3> <h3 class="mb-3.5">Storage</h3>
<p class="text-gray-600"> <p class="text-gray-600">
Sync your data between apps and devices Sync your data between apps and devices
@ -60,7 +62,7 @@
bg-cover bg-center sm:bg-[center_top_-140px] bg-no-repeat bg-cover bg-center sm:bg-[center_top_-140px] bg-no-repeat
bg-[url(/img/logos/icon_lightning.svg)]"> bg-[url(/img/logos/icon_lightning.svg)]">
<%= link_to services_lightning_index_path, <%= link_to services_lightning_index_path,
class: "block h-full px-6 py-6 rounded-md" do %> class: "block h-full px-6 py-6 rounded-md btn-text-dark" do %>
<h3 class="mb-3.5">Lightning Network</h3> <h3 class="mb-3.5">Lightning Network</h3>
<p class="text-gray-600"> <p class="text-gray-600">
Send and receive sats over the Bitcoin Lightning Network Send and receive sats over the Bitcoin Lightning Network
@ -73,7 +75,7 @@
bg-[length:80%] bg-center bg-no-repeat bg-[length:80%] bg-center bg-no-repeat
bg-[url(/img/logos/icon_discourse.svg)]"> bg-[url(/img/logos/icon_discourse.svg)]">
<%= link_to "#{Setting.discourse_public_url}/session/sso?return_path=/", <%= link_to "#{Setting.discourse_public_url}/session/sso?return_path=/",
class: "block h-full px-6 py-6 rounded-md" do %> class: "block h-full px-6 py-6 rounded-md btn-text-dark" do %>
<h3 class="mb-3.5">Discourse</h3> <h3 class="mb-3.5">Discourse</h3>
<p class="text-gray-600"> <p class="text-gray-600">
Community forums and support/help site Community forums and support/help site
@ -86,7 +88,7 @@
bg-[length:92%] bg-center bg-no-repeat bg-[length:92%] bg-center bg-no-repeat
bg-[url(/img/logos/icon_gitea.png)]"> bg-[url(/img/logos/icon_gitea.png)]">
<%= link_to Setting.gitea_public_url, <%= link_to Setting.gitea_public_url,
class: "block h-full px-6 py-6 rounded-md" do %> class: "block h-full px-6 py-6 rounded-md btn-text-dark" do %>
<h3 class="mb-3.5">Gitea</h3> <h3 class="mb-3.5">Gitea</h3>
<p class="text-gray-600"> <p class="text-gray-600">
Code hosting and collaboration for software projects Code hosting and collaboration for software projects
@ -99,7 +101,7 @@
bg-[length:86%] bg-[center_top_-60px] bg-no-repeat bg-[length:86%] bg-[center_top_-60px] bg-no-repeat
bg-[url(/img/logos/icon_droneci.svg)]"> bg-[url(/img/logos/icon_droneci.svg)]">
<%= link_to Setting.droneci_public_url, <%= link_to Setting.droneci_public_url,
class: "block h-full px-6 py-6 rounded-md" do %> class: "block h-full px-6 py-6 rounded-md btn-text-dark" do %>
<h3 class="mb-3.5">Drone CI</h3> <h3 class="mb-3.5">Drone CI</h3>
<p class="text-gray-600"> <p class="text-gray-600">
Continuous integration for software projects on Gitea Continuous integration for software projects on Gitea
@ -112,7 +114,7 @@
bg-cover bg-[center_top_-20px] bg-no-repeat bg-cover bg-[center_top_-20px] bg-no-repeat
bg-[url(/img/logos/icon_mediawiki.svg)]"> bg-[url(/img/logos/icon_mediawiki.svg)]">
<%= link_to Setting.mediawiki_public_url, <%= link_to Setting.mediawiki_public_url,
class: "block h-full px-6 py-6 rounded-md" do %> class: "block h-full px-6 py-6 rounded-md btn-text-dark" do %>
<h3 class="mb-3.5">Wiki</h3> <h3 class="mb-3.5">Wiki</h3>
<p class="text-gray-600"> <p class="text-gray-600">
Documentation and knowledge base Documentation and knowledge base

View File

@ -4,7 +4,7 @@
<section class="permissions"> <section class="permissions">
<p class="mb-8"> <p class="mb-8">
The app on The app on
<%= link_to @client_id, "https://#{@client_id}", class: "ks-text-link" %> <%= link_to @client_id, "https://#{@client_id}" %>
is asking for access to these folders: is asking for access to these folders:
</p> </p>

View File

@ -34,7 +34,7 @@
<p> <p>
Your email password is different from your main account password. You can Your email password is different from your main account password. You can
reset your email password in the reset your email password in the
<%= link_to "email settings", setting_path(:email), class: "ks-text-link" %>. <%= link_to "email settings", setting_path(:email) %>.
</p> </p>
</section> </section>
<section> <section>

View File

@ -9,7 +9,7 @@
<h3>Lightning Address</h3> <h3>Lightning Address</h3>
<p class="mb-6"> <p class="mb-6">
Your user address is also a Your user address is also a
<a class="ks-text-link" href="https://lightningaddress.com/" target="_blank">Lightning Address</a>! <a href="https://lightningaddress.com/" target="_blank">Lightning Address</a>!
The easiest way to receive sats is by just giving out your address: The easiest way to receive sats is by just giving out your address:
</p> </p>
<p data-controller="clipboard" class="flex gap-1 sm:w-2/5"> <p data-controller="clipboard" class="flex gap-1 sm:w-2/5">
@ -34,7 +34,7 @@
<p> <p>
You can connect various wallet apps to your account. This allows You can connect various wallet apps to your account. This allows
you to both receive and send sats. Any wallet that supports you to both receive and send sats. Any wallet that supports
<a href="https://bluewallet.io/lndhub/" class="ks-text-link" target="_blank">LNDHub</a> <a href="https://bluewallet.io/lndhub/" target="_blank">LNDHub</a>
accounts should be able to add/import your account using our setup accounts should be able to add/import your account using our setup
code/URL: code/URL:
</p> </p>
@ -57,7 +57,7 @@
<div class="w-full grid grid-cols-1 gap-y-4 md:grid-cols-12 <div class="w-full grid grid-cols-1 gap-y-4 md:grid-cols-12
md:gap-y-6 md:gap-x-4 md:items-center"> md:gap-y-6 md:gap-x-4 md:items-center">
<h4 class="md:col-span-3"> <h4 class="md:col-span-3">
<a href="https://getalby.com/" class="ks-text-link text-xl" <a href="https://getalby.com/" class="text-xl"
title="Alby" target="_blank"> title="Alby" target="_blank">
<%= image_tag("/img/logos/alby.svg", class: 'h-16') %> <%= image_tag("/img/logos/alby.svg", class: 'h-16') %>
</a> </a>
@ -70,7 +70,7 @@
URL in the "LNDHub Export URI" field. URL in the "LNDHub Export URI" field.
</p> </p>
<h4 class="md:col-span-3 mt-4 mb:mt-0"> <h4 class="md:col-span-3 mt-4 mb:mt-0">
<a href="https://bluewallet.io" class="ks-text-link text-xl" <a href="https://bluewallet.io" class="text-xl"
title="Blue Wallet" target="_blank"> title="Blue Wallet" target="_blank">
<%= image_tag("/img/logos/bluewallet.svg", class: 'h-16') %> <%= image_tag("/img/logos/bluewallet.svg", class: 'h-16') %>
</a> </a>
@ -83,7 +83,7 @@
then scan the setup QR code. then scan the setup QR code.
</p> </p>
<h4 class="md:col-span-3 mt-4 mb:mt-0"> <h4 class="md:col-span-3 mt-4 mb:mt-0">
<a href="https://zeusln.app" class="ks-text-link text-xl" <a href="https://zeusln.app" class="text-xl"
title="Zeus" target="_blank"> title="Zeus" target="_blank">
<%= image_tag("/img/logos/zeus.svg", class: 'h-16') %> <%= image_tag("/img/logos/zeus.svg", class: 'h-16') %>
</a> </a>

View File

@ -37,7 +37,7 @@
<p> <p>
Use your Mastodon account with many different apps, and on any devices Use your Mastodon account with many different apps, and on any devices
you wish! When adding your account to an app, you will log in via you wish! When adding your account to an app, you will log in via
<a href="https://kosmos.social" target="_blank" class="ks-text-link">kosmos.social</a>. <a href="https://kosmos.social" target="_blank">kosmos.social</a>.
</p> </p>
</section> </section>
<section> <section>

View File

@ -46,8 +46,8 @@
<p> <p>
If you want your favorite apps to support syncing data with your own If you want your favorite apps to support syncing data with your own
Storage account, let the developers know! All relevant information is Storage account, let the developers know! All relevant information is
available on the <a href="https://remotestorage.io" available on the
target="_blank" class="ks-text-link">remoteStorage website</a>. <a href="https://remotestorage.io" target="_blank">remoteStorage website</a>.
</p> </p>
</section> </section>