Merge pull request #156 from Aevann1/ezra

Ezra
master
Gray 2022-01-03 17:31:23 -06:00 committed by GitHub
commit 066a4f2210
22 changed files with 1187 additions and 509 deletions

View File

@ -450,6 +450,7 @@ class User(Base):
def json_popover(self, v):
data = {'username': self.username,
'url': self.url,
'id': self.id,
'profile_url': self.profile_url,
'bannerurl': self.banner_url,
'bio_html': self.bio_html_eager,

View File

@ -100,7 +100,7 @@ def settings_profile_post(v):
elif request.values.get("compact", v.compact) != v.compact:
updated = True
v.teddit = request.values.get("compact", None) == 'true'
v.compact = request.values.get("compact", None) == 'true'
elif request.values.get("nitter", v.nitter) != v.nitter:
updated = True

File diff suppressed because it is too large Load Diff

View File

@ -250,7 +250,7 @@
}
.theme-evergreen {
--color-primary: 220, 38, 38;
--color-primary: 87,138,157;
--color-100: 244,246,244;
--color-200: 229,235,231;
--color-300: 209,219,213;
@ -275,220 +275,214 @@
--color-900: 40,31,17;
}
/* ----------------------- VARIABLES --------------------- */
/*:root {
--color-primary: 220, 38, 38;
}*/
/* ---------------- RESPONSIVE UTILITIES ----------------- */
@responsive {
.text-shadow {
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.12)
}
.text-shadow-t {
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12)
}
.text-shadow-light {
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.1)
}
.text-shadow-light-t {
text-shadow: 0 -1px 0 rgba(255, 255, 255, 0.1)
}
.sub-header-shadow {
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.10) inset, -1px -1px 0.5px rgba(17, 40, 19, 0.1) inset;
}
.gradient-mask {
-webkit-mask-image: linear-gradient(180deg,#000 60%,transparent); mask-image: linear-gradient(180deg,#000 60%,transparent)
}
/* Chrome, Safari and Opera */
.no-scrollbar::-webkit-scrollbar {
display: none;
}
.no-scrollbar {
-ms-overflow-style: none; /* IE and Edge */
scrollbar-width: none; /* Firefox */
}
/* ---------------- RESPONSIVE UTILITIES ----------------- */
@responsive {
.text-shadow {
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.12)
}
/* -------------------- BASE STYLING -------------------- */
@layer base {
/* Headings */
h1, .h1 {
@apply text-5xl font-bold leading-10 mb-2;
}
h2, .h2 {
@apply text-4xl font-bold leading-8 mb-2;
}
h3, .h3 {
@apply text-3xl font-bold leading-7 mb-2;
}
h4, .h4 {
@apply text-2xl font-bold leading-6 mb-2;
}
h5, .h5 {
@apply text-lg font-bold leading-5 mb-2;
}
h6, .h6 {
@apply text-base font-bold leading-4 mb-2;
}
/* Typography */
p {
@apply mb-3 last:mb-0;
}
a {
@apply text-primary break-all
}
blockquote {
@apply bg-gray-100 dark:bg-gray-700 border-l-2 border-gray-700 dark:border-gray-500 mb-4;
}
hr {
@apply my-3
}
ul {
@apply mb-3
}
.comment-text > ul, .post-text > ul, .prose > ul {
@apply list-disc pl-5
}
.comment-text > ol, .post-text > ol, .prose > ol {
@apply list-decimal pl-5
}
strong {
@apply font-bold
}
code {
@apply text-pink-600 dark:text-pink-300 font-mono;
}
pre {
white-space: pre-wrap; /* Since CSS 2.1 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
}
/* Images */
img {
@apply inline
}
img[lazy=loading] {
@apply animate-pulse;
}
img[width], img[height] {
max-width: none;
height: 24px;
}
/*Inputs*/
.label {
@apply block font-bold text-gray-700 dark:text-gray-500 text-sm leading-normal mb-1;
}
.text-shadow-t {
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12)
}
/* ----------------------- INPUTS ----------------------- */
.form-input {
@apply text-lg sm:text-base appearance-none block w-full rounded shadow-inner p-2 bg-white dark:bg-white/[.06] border border-gray-300 hover:border-gray-400 dark:border-gray-900 focus:border-blue-300 focus:ring focus:ring-blue-200 focus:ring-opacity-50;
.text-shadow-light {
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.1)
}
/* ---------------------- BUTTONS ----------------------- */
.btn {
@apply inline-block px-4 py-2 active:shadow-inner border rounded-md text-shadow-t shadow-inset-t-white-10 text-sm font-bold focus:outline-none disabled:opacity-50;
.text-shadow-light-t {
text-shadow: 0 -1px 0 rgba(255, 255, 255, 0.1)
}
.btn-primary {
@apply bg-white bg-gradient-to-t from-primary to-primary/80 hover:from-primary/90 hover:to-primary border-black/10 text-gray-100 focus:text-gray-200;
.sub-header-shadow {
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.10) inset, -1px -1px 0.5px rgba(17, 40, 19, 0.1) inset;
}
.btn-red {
@apply bg-gradient-to-t from-red-700 to-red-600 hover:from-red-600 hover:to-red-700 border-red-900 text-gray-100 focus:text-white;
.gradient-mask {
-webkit-mask-image: linear-gradient(180deg,#000 60%,transparent); mask-image: linear-gradient(180deg,#000 60%,transparent)
}
.btn-green {
@apply bg-gradient-to-t from-green-700 to-green-600 hover:from-green-600 hover:to-green-700 border-green-900 text-gray-100 focus:text-gray-200;
/* Chrome, Safari and Opera */
.no-scrollbar::-webkit-scrollbar {
display: none;
}
.btn-blue {
@apply bg-gradient-to-t from-blue-700 to-blue-600 hover:from-blue-600 hover:to-blue-700 border-blue-900 text-gray-100 focus:text-gray-200;
.no-scrollbar {
-ms-overflow-style: none; /* IE and Edge */
scrollbar-width: none; /* Firefox */
}
.btn-yellow {
@apply bg-gradient-to-t from-yellow-700 to-yellow-600 hover:from-yellow-600 hover:to-yellow-700 border-yellow-900 text-gray-100 focus:text-gray-200;
}
.btn-purple {
@apply bg-gradient-to-t from-purple-700 to-purple-600 hover:from-purple-600 hover:to-purple-700 border-purple-900 text-gray-100 focus:text-gray-200;
}
.btn-pink {
@apply bg-gradient-to-t from-pink-700 to-pink-600 hover:from-pink-600 hover:to-pink-700 border-pink-900 text-gray-100 focus:text-gray-200;
}
.btn-black {
@apply bg-white bg-gradient-to-t from-black to-black/80 hover:from-black/90 hover:to-black border-black/10 text-gray-100 focus:text-gray-200;
}
.btn-gray {
@apply bg-gradient-to-t from-gray-200 to-gray-100 hover:from-gray-100 hover:to-gray-200 border-gray-300 text-gray-700 focus:text-gray-900;
}
/* ---------------------- DROPDOWNS --------------------- */
.dropdown-item-primary {
@apply block w-full text-left px-4 py-2 text-sm text-gray-200 hover:bg-white dark:hover:bg-black bg-gradient-to-t dark:bg-gradient-to-t hover:from-primary hover:to-primary/80 dark:hover:from-primary/80 dark:hover:to-primary hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-b dark:focus:bg-gradient-to-t;
}
/* ---------------------- NAV TABS ---------------------- */
.nav.nav-tabs .nav-link {
@apply border-b-2 border-transparent
}
.nav.nav-tabs .nav-link.active {
@apply border-primary
}
/* ----------------------- BADGES ----------------------- */
.badge {
@apply px-1 py-0.5 text-sm text-shadow-light font-bold leading-normal rounded bg-gradient-to-t;
}
.badge-pink {
@apply from-pink-600 to-pink-500 text-white;
}
.badge-purple {
@apply from-purple-600 to-purple-500 text-white;
}
.badge-red {
@apply from-red-600 to-red-500 text-white;
}
.badge-yellow {
@apply from-yellow-600 to-yellow-500 text-yellow-900;
}
.badge-blue {
@apply from-blue-600 to-blue-500 text-white;
}
.badge-green {
@apply from-green-600 to-green-500 text-white;
}
.badge-primary {
@apply bg-primary text-white;
}
.patron {
@apply px-1 py-0.5 text-sm text-shadow-light font-bold leading-normal rounded;
}
/* ---------------------- TOOLTIPS ---------------------- */
.tooltip-inner {
background-color: @apply text-black;
color: @apply text-white;
}
/* ----------------------- EMOJI ------------------------ */
img.emoji {
width: 30px;
height: 30px;
@apply inline-block object-contain
}
img.emoji-md {
width: 60px;
height: 60px;
@apply inline-block object-contain
}
img.emoji-lg {
max-width: 100%;
@apply inline-block object-contain
}
.agendaposter {
text-transform: uppercase !important;
}
code {
text-transform: none !important;
}
/* -------------------- BASE STYLING -------------------- */
@layer base {
/* Headings */
h1, .h1 {
@apply text-5xl font-bold leading-10 mb-2;
}
h2, .h2 {
@apply text-4xl font-bold leading-8 mb-2;
}
h3, .h3 {
@apply text-3xl font-bold leading-7 mb-2;
}
h4, .h4 {
@apply text-2xl font-bold leading-6 mb-2;
}
h5, .h5 {
@apply text-lg font-bold leading-5 mb-2;
}
h6, .h6 {
@apply text-base font-bold leading-4 mb-2;
}
/* Typography */
p {
@apply mb-3 last:mb-0;
}
a {
@apply text-primary break-all
}
blockquote {
@apply bg-gray-100 dark:bg-gray-700 border-l-2 border-gray-700 dark:border-gray-500 mb-4;
}
hr {
@apply my-3
}
ul {
@apply mb-3
}
.comment-text > ul, .post-text > ul, .prose > ul {
@apply list-disc pl-5
}
.comment-text > ol, .post-text > ol, .prose > ol {
@apply list-decimal pl-5
}
strong {
@apply font-bold
}
code {
@apply text-pink-600 dark:text-pink-300 font-mono;
}
pre {
white-space: pre-wrap; /* Since CSS 2.1 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
}
/* Images */
img {
@apply inline
}
img[lazy=loading] {
@apply animate-pulse;
}
img[width], img[height] {
max-width: none;
height: 24px;
}
/*Inputs*/
.label {
@apply block font-bold text-gray-700 dark:text-gray-500 text-sm leading-normal mb-1;
}
}
/* ----------------------- INPUTS ----------------------- */
.form-input {
@apply text-lg sm:text-base appearance-none block w-full rounded shadow-inner p-2 bg-white dark:bg-white/[.06] border border-gray-300 hover:border-gray-400 dark:border-gray-900 focus:border-blue-300 focus:ring focus:ring-blue-200 focus:ring-opacity-50;
}
/* ---------------------- BUTTONS ----------------------- */
.btn {
@apply inline-block px-4 py-2 active:shadow-inner border rounded-md text-shadow-t shadow-inset-t-white-10 text-sm font-bold focus:outline-none disabled:opacity-50;
}
.btn-primary {
@apply bg-white bg-gradient-to-t from-primary to-primary/80 hover:from-primary/90 hover:to-primary border-black/10 text-gray-100 focus:text-gray-200;
}
.btn-red {
@apply bg-gradient-to-t from-red-700 to-red-600 hover:from-red-600 hover:to-red-700 border-red-900 text-gray-100 focus:text-white;
}
.btn-green {
@apply bg-gradient-to-t from-green-700 to-green-600 hover:from-green-600 hover:to-green-700 border-green-900 text-gray-100 focus:text-gray-200;
}
.btn-blue {
@apply bg-gradient-to-t from-blue-700 to-blue-600 hover:from-blue-600 hover:to-blue-700 border-blue-900 text-gray-100 focus:text-gray-200;
}
.btn-yellow {
@apply bg-gradient-to-t from-yellow-700 to-yellow-600 hover:from-yellow-600 hover:to-yellow-700 border-yellow-900 text-gray-100 focus:text-gray-200;
}
.btn-purple {
@apply bg-gradient-to-t from-purple-700 to-purple-600 hover:from-purple-600 hover:to-purple-700 border-purple-900 text-gray-100 focus:text-gray-200;
}
.btn-pink {
@apply bg-gradient-to-t from-pink-700 to-pink-600 hover:from-pink-600 hover:to-pink-700 border-pink-900 text-gray-100 focus:text-gray-200;
}
.btn-black {
@apply bg-white bg-gradient-to-t from-black to-black/80 hover:from-black/90 hover:to-black border-black/10 text-gray-100 focus:text-gray-200;
}
.btn-gray {
@apply bg-gradient-to-t from-gray-200 to-gray-100 hover:from-gray-100 hover:to-gray-200 border-gray-300 text-gray-700 focus:text-gray-900;
}
/* ---------------------- DROPDOWNS --------------------- */
.dropdown-item-primary {
@apply block w-full text-left px-4 py-2 text-sm text-gray-200 hover:bg-white dark:hover:bg-black bg-gradient-to-t dark:bg-gradient-to-t hover:from-primary hover:to-primary/80 dark:hover:from-primary/80 dark:hover:to-primary hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-b dark:focus:bg-gradient-to-t;
}
/* ---------------------- NAV TABS ---------------------- */
.nav.nav-tabs .nav-link {
@apply border-b-2 border-transparent
}
.nav.nav-tabs .nav-link.active {
@apply border-primary
}
/* ----------------------- BADGES ----------------------- */
.badge {
@apply px-1 py-0.5 text-sm text-shadow-light font-bold leading-normal rounded bg-gradient-to-t;
}
.badge-pink {
@apply from-pink-600 to-pink-500 text-white;
}
.badge-purple {
@apply from-purple-600 to-purple-500 text-white;
}
.badge-red {
@apply from-red-600 to-red-500 text-white;
}
.badge-yellow {
@apply from-yellow-600 to-yellow-500 text-yellow-900;
}
.badge-blue {
@apply from-blue-600 to-blue-500 text-white;
}
.badge-green {
@apply from-green-600 to-green-500 text-white;
}
.badge-primary {
@apply bg-primary text-white;
}
.patron {
@apply px-1 py-0.5 text-sm text-shadow-light font-bold leading-normal rounded;
}
/* ---------------------- TOOLTIPS ---------------------- */
.tooltip-inner {
background-color: @apply text-black;
color: @apply text-white;
}
/* ---------------------- POPOVER ----------------------- */
.popover {
@apply rounded-md w-96 shadow-lg overflow-hidden border-none bg-gray-100 dark:bg-gray-900;
}
/* ----------------------- EMOJI ------------------------ */
img.emoji {
width: 30px;
height: 30px;
@apply inline-block object-contain
}
img.emoji-md {
width: 60px;
height: 60px;
@apply inline-block object-contain
}
img.emoji-lg {
max-width: 100%;
@apply inline-block object-contain
}

View File

@ -1,36 +1,55 @@
<div style="display:none" id="popover">
<div class="popover-user-profile dark:bg-gray-700 text-black dark:text-gray-100" role="tooltip">
<img loading="lazy" class="pop-banner w-100 h-32 object-cover">
<div class="flex items-end px-3 -mt-12 mb-3">
<img loading="lazy" class="pop-picture h-20 w-20 rounded-sm p-[3px] bg-white dark:bg-gray-900 shadow-sm">
<div class="px-3 truncate">
<h5 class="pop-username truncate ellipsis"></h5>
<div class="relative popover-user-profile bg-gray-100 dark:bg-gray-900" role="tooltip">
<img loading="lazy" class="pop-banner w-full h-28 object-cover">
<div class="flex items-end px-4 -mt-10">
<img loading="lazy" class="pop-picture h-24 w-24 rounded-sm p-[3px] bg-white dark:bg-gray-900 shadow-sm">
<div class="pl-3 truncate mb-1">
<h5 class="pop-username truncate ellipsis"></h5>
<div class="text-sm text-gray-500 flex items-center leading-4">
<span>
#<span class="pop-uid"></span>
</span>
<strong class="mx-1">&#183;</strong>
<span>
<span class="pop-coins"></span>
coins
</span>
</div>
</div>
</div>
<div class="px-3">
<div class="hidden px-4">
<span class="pop-bio popover-bio"></span>
</div>
<div class="pop-badges ml-3 mr-3 my-2">
<div class="pop-badges p-4">
</div>
<div class="border-t flex items-center p-3 gap-3 text-sm">
<span>
<strong class="pop-postcount"></strong>
<span class="text-gray-500">posts</span>
</span>
<span class="ml-3">
<strong class="pop-commentcount"></strong>
<span class="text-gray-500">comments</span>
</span>
<span class="ml-3">
<strong class="pop-coins"></strong>
<span class="text-gray-500">coins</span>
</span>
<a target="_blank" class="pop-viewmore ml-auto text-decoration-none">
View
<i class="fas fa-arrow-right fa-sm fa-fw px-1"></i>
</a>
</div>
<div class="border-t border-gray-300 dark:border-gray-800 flex items-center p-4 gap-2 text-sm">
<span>
<strong class="pop-postcount"></strong>
<span class="text-gray-500">posts</span>
</span>
<span>
<strong class="pop-commentcount"></strong>
<span class="text-gray-500">comments</span>
</span>
<a target="_blank" class="pop-viewmore ml-auto text-decoration-none">
View
<i class="fas fa-arrow-alt-right fa-sm fa-fw px-1"></i>
</a>
</div>
{% if v %}
<!-- Actionable buttons -->
<div class="flex items-center space-x-2 absolute top-2 right-3" id="popoverWrapper">
<!-- <a href="#" class="btn btn-gray" data-bs-toggle="modal" data-bs-target="#giftCoinsModal">
<i class="fas fa-gift fa-fw fa-sm"></i>
</a> -->
<button class="btn btn-gray pop-dm-button" data-bs-toggle="modal" data-bs-target="#directMessageModal">
<i class="fas fa-paper-plane fa-fw fa-sm mr-2"></i>
Message
</button>
</div>
{% endif %}
</div>
</div>

View File

@ -71,13 +71,13 @@
'icon': 'fa-republican',
'title': 'Agenda Posters',
'description': 'Users with agenda poster mode',
'link': '/admin/agendaposters'
'link': '/agendaposters'
},
{
'icon': 'fa-seedling',
'title': 'Grass Award',
'description': 'Users with active grass award',
'link': '/admin/grassed'
'link': '/grassed'
},
{
'icon': 'fa-users',

View File

@ -2,16 +2,18 @@
{% if v %}
<div class="flex items-center justify-center h-6 bg-gray-900 w-full">
<span class="text-rainbow text-xs text-gray-200">
💖🌈 rdrama.net stands with the LGBTQ+ community.&nbsp;
<span class="font-medium hidden md:inline-block">Help keep our community inclusive and welcoming.&nbsp;</span>
💖🌈 Welcome to rdrama.net: <strong>/r/SubredditDrama official site.</strong>&nbsp;
<span class="font-medium hidden md:inline-block">
We proudly stand with the LGBTQ+ community! Help keep our community inclusive and welcoming.&nbsp;
</span>
<strong><a href="https://secure.transequality.org/site/Donation2?df_id=1480">Learn more!</a></strong>
</span>
</div>
{% else %}
<div class="flex items-center justify-center h-6 bg-primary w-full">
<span class="text-rainbow text-xs text-gray-200">
✋😕 You are viewing a cached version of rdrama.net&nbsp;
<span class="font-medium hidden md:inline-block">Join the community to see the latest content.&nbsp;</span>
✋😕 Welcome to rdrama.net: <strong>/r/SubredditDrama official site.</strong>&nbsp;
<span class="font-medium hidden md:inline-block">You are viewing a cached version of rdrama.net.&nbsp;</span>
<strong><a href="/login">Login!</a></strong>
</span>
</div>

View File

@ -495,29 +495,6 @@
text-shadow:-1px -1px 0 black,1px -1px 0 black,-1px 1px 0 black,1px 1px 0 black;
}
.popover {
max-width: 50%;
box-shadow: 0 1rem 3rem rgba(0, 0, 0, .175);
border-color: #dadada;
}
.popover-arrow {
display: none !important;
}
.popover-user-profile {
display: flex;
flex-direction: column;
padding: 0;
background: var(--gray-600);
}
.popover-body {
padding: 0;
border-radius: .25rem;
overflow: hidden;
}
.avatar-72 {
width: 72px;
height: 72px;

View File

@ -192,9 +192,9 @@
{% block stylesheets %}
<link rel="stylesheet" href="/static/assets/CHRISTMAS/css/main.css?a=7">
<link rel="stylesheet" href="/static/assets/CHRISTMAS/css/main.css?a=10">
<link rel="stylesheet" href="/static/dist/main.css?a=7">
<link rel="stylesheet" href="/static/dist/main.css?a=10">
{% if v %}
<style>:root{--primary:#dc2626}</style>
@ -296,6 +296,7 @@
{% if v %}
{% include "CHRISTMAS/modals/ModalThemePicker.html" %}
{% include "CHRISTMAS/modals/ModalDirectMessage.html" %}
{% endif %}
{% block popovers %}{% endblock %}
@ -305,7 +306,7 @@
{% block scripts %}{% endblock %}
<!-- Scripts -->
<script src="/static/assets/CHRISTMAS/js/header.js?a=1"></script>
<script src="/static/assets/CHRISTMAS/js/header.js?a=2"></script>
<!-- Lazy Loading -->
<script src="/static/assets/CHRISTMAS/js/lozad.js?a=1"></script>
@ -334,7 +335,7 @@
<script src="/static/assets/CHRISTMAS/js/gif_modal.js?a=1"></script>
<script src="/static/assets/CHRISTMAS/js/emoji_modal.js?a=16"></script>
<script defer src="/static/assets/CHRISTMAS/js/popover.js?a=1"></script>
<script defer src="/static/assets/CHRISTMAS/js/popover.js?a=58"></script>
<script src="/static/assets/CHRISTMAS/js/mobile_navigation_bar.js?a=1"></script>
@ -356,7 +357,7 @@
}
</script>
{% endif %}
<script src="/static/assets/CHRISTMAS/js/default.js?a=2"></script>
<script src="/static/assets/CHRISTMAS/js/default.js?a=36"></script>
</body>
</html>

View File

@ -28,7 +28,7 @@
<div class="col-span-full xl:col-span-9 dark:bg-gray-700 md:dark:bg-gray-800">
<ul class="flex flex-col sm:py-4 my-2.5 sm:my-0" id="posts">
{% include "CHRISTMAS/submission_listing.html" %}
{% include "CHRISTMAS/submission/SubmissionList.html" %}
</ul>
{% if listing %}

View File

@ -363,4 +363,51 @@
{% endfor %}
</div>
</div>
{% if users13 %}
<div class="col-span-full mb-6">
<div class="flex items-center px-4 py-4 bg-gradient-to-t from-gray-200 to-gray-100 dark:bg-none dark:bg-gray-800 sticky top-0 z-10">
<h2 class="text-2xl font-heading font-bold mb-0">
rDrama's 25 Biggest Marsey Artists
</h2>
</div>
<div class="mb-4 flex flex-col bg-gray-100 dark:bg-gray-900 rounded-lg overflow-hidden">
{% for user in users13 %}
<div class="flex items-center border-b last:border-b-none border-gray-300 dark:border-gray-900 shadow-inset-t-white-05 px-5 py-3 {% if v.username == user.username %}text-red-900 text-shadow-light bg-red-600{% elif users13.index(user) % 2 != 0 %}bg-gray-200 dark:bg-gray-700{% endif %}">
<!-- Rank -->
<h2 class="flex-shrink-0 text-2xl font-bold font-heading text-center w-16 -ml-5 mb-0 {{ 'text-red-900' if v.username == user.username else 'text-gray-400' }}">
{{loop.index}}
</h2>
<div class="relative flex-shrink-0">
<img src="{{user[0].profile_url}}" class="flex-shrink-0 p-[3px] border w-13 h-13 object-cover {{ 'bg-red-800 border-red-900' if v.username == user[0].username else 'bg-white border-gray-300' }}" alt="{{ user[0].username }} avatar"/>
{% if loop.index == 1 %}
<img src="https://i.ibb.co/xFgG6yf/Coinfixed.gif" width="20px" height="13px" class="absolute -top-1 -right-2.5 object-contain"/>
{% endif %}
</div>
<!-- User Details -->
<div class="ml-3">
{% if user[0]=='anton-d' %}
<span class="block font-heading font-bold text-lg md:text-xl text-black dark:text-gray-200">
{{user[0]}}
</span>
{% else %}
<a class="block font-heading font-bold text-lg md:text-xl text-black dark:text-gray-200 hover:text-primary" href="/@{{user[0].username}}">
{{user[0].username}}
</a>
{% if user[0].customtitle %}
<p class="text-sm" style="#{{user.namecolor}}">
{{user[0].customtitle | safe}}
</p>
{% endif %}
{% endif %}
</div>
<div class="ml-auto mr-4 pl-3">
<span class="text-xl font-heading font-bold {{ 'text-red-900' if v.username == user.username else 'text-gray-700' }}">
{{user[1]}}
</span>
</div>
</div>
{% endfor %}
</div>
</div>
{% endif %}
{% endblock %}

View File

@ -0,0 +1,28 @@
{% extends "CHRISTMAS/default.html" %}
{% block content %}
<pre>
</pre>
<div class="overflow-x-auto"><table class="table table-striped mb-5">
<thead class="bg-primary text-white">
<tr>
<th style="font-weight: bold">#</th>
<th style="font-weight: bold">Name</th>
<th style="font-weight: bold">Marsey</th>
<th style="font-weight: bold">Author</th>
</tr>
</thead>
<tbody id="followers-table">
{% for marsey, author in marseys %}
<tr>
<td style="font-weight: bold">{{loop.index}}</td>
<td style="font-weight: bold">{{marsey}}</td>
<td><img loading="lazy" data-bs-toggle="tooltip" alt=":{{marsey}}:" title=":{{marsey}}:" delay="0" src="/static/assets/images/emojis/{{marsey}}.webp" ></td>
<td>{% if author in ('anton-d','unknown') %}{{author}}{% else %}<a style="font-weight:bold;" href="/@{{author}}"><img alt="@{{author}}'s profile picture" loading="lazy" src="/@{{author}}/pic" class="pp20">{{author}}</a>{% endif %}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

View File

@ -2,29 +2,30 @@
<div class="modal-dialog modal-dialog-centered mx-auto max-w-xl" role="document">
<div class="modal-content mx-auto max-w-xl bg-gray-100 dark:bg-gray-700 rounded-md shadow-lg">
<div class="modal-header">
<h5 class="font-bold text-xl font-heading leading-normal">Send message to @{{u.username}}</h5>
<h5 class="modal-title font-bold text-xl font-heading leading-normal">Send message</h5>
<button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
<span aria-hidden="true"><i class="far fa-times"></i></span>
</button>
</div>
<div class="modal-body">
<form id="message" action="/@{{u.username}}/message" method="post" enctype="multipart/form-data">
<!-- Form action loaded by JS -->
<form id="message">
<input type="hidden" name="formkey" value="{{v.formkey}}">
<div class="relative rounded border border-gray-300 dark:border-gray-900 bg-white dark:bg-white/[.05] w-full">
<textarea maxlength="1000" id="input-message" name="message" form="message" class="rounded-t bg-transparent p-2 shadow-inner w-full" aria-label="With textarea" placeholder="Write your message..." rows="3"></textarea>
<textarea maxlength="1000" id="direct-message-input" name="message" form="message" class="rounded-t bg-transparent p-2 shadow-inner w-full" aria-label="With textarea" placeholder="Write your message..." rows="3"></textarea>
<ul class="-mt-1 flex space-x-4 px-3 py-2 border-t border-dashed border-gray-300 dark:border-white/[.05] mb-0">
<li>
<button type="button" class="text-gray-400 hover:text-gray-500" onclick="makeBold('input-message')">
<button type="button" class="text-gray-400 hover:text-gray-500" onclick="makeBold('direct-message-input')">
<i class="fas fa-bold fa-fw fa-sm" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Bold"></i>
</button>
</li>
<li>
<button type="button" class="text-gray-400 hover:text-gray-500" onclick="makeItalics('input-message')">
<button type="button" class="text-gray-400 hover:text-gray-500" onclick="makeItalics('direct-message-input')">
<i class="fas fa-italic fa-fw fa-sm" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Italicize"></i>
</button>
</li>
<li>
<button type="button" class="text-gray-400 hover:text-gray-500" onclick="makeQuote('input-message')">
<button type="button" class="text-gray-400 hover:text-gray-500" onclick="makeQuote('direct-message-input')">
<i class="fas fa-quote-right fa-fw fa-sm" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Quote"></i>
</button>
</li>

View File

@ -10,7 +10,7 @@
<div class="relative modal-body">
<!-- If user has less than 100 dramacoin, disable form -->
{% if v.coins < 100 %}
<div class="absolute left-0 bottom-0 flex flex-col items-center justify-center w-full h-full bg-white/60 dark:bg-white/10 z-10">
<div class="absolute left-0 bottom-0 flex flex-col items-center justify-center w-full h-full bg-white/60 dark:bg-gray-700/90 z-10">
<p class="text-lg font-bold mb-0">
You need at least 100 dramacoin to send coins.
</p>
@ -20,7 +20,7 @@
</div>
{% endif %}
<!-- Form -->
<form class="profile-toggleable" id="message" action="/@{{u.username}}/message" method="post">
<div class="profile-toggleable" id="message">
<div class="relative rounded-lg border border-gray-300 dark:border-gray-900 bg-gray-100 dark:bg-white/[.05] shadow-inner w-full">
<textarea maxlength="1000" id="gift-message" name="message" form="message" class="w-full rounded-t-md p-3 bg-transparent focus:bg-white dark:focus:bg-transparent shadow-inner resize-y focus:outline-none placehoder:text-gray-400" aria-label="With textarea" placeholder="'tis the season of giving..." rows="3"></textarea>
<ul class="-mt-1 flex space-x-4 px-3 py-2 border-t border-dashed border-gray-400 mb-0">
@ -41,7 +41,7 @@
</li>
</ul>
</div>
</form>
</div>
<div class="mt-3">
<input autocomplete="off" id="coins-transfer-amount" class="form-input" name="amount" type="number" placeholder="0" oninput="updateTax()">
<p class="mt-1 text-sm text-gray-400">
@ -49,11 +49,11 @@
</p>
</div>
</div>
<div class="flex justify-end space-x-2 border-t border-gray-300 p-4">
<button type="button" class="px-4 py-2 text-sm font-bold text-gray-500 hover:text-gray-700" data-bs-dismiss="modal">
<div class="flex justify-end space-x-2 border-t border-gray-300 dark:border-gray-800 p-4">
<button type="button" class="px-4 py-2 text-sm font-bold text-gray-500 hover:text-gray-400" data-bs-dismiss="modal">
Cancel
</button>
<button onclick="transferCoins()" class="btn btn-green {{ 'cursor-not-allowed' if v.coins < 100 }}" {% if v.coins < 100 %}disabled{% endif %}>
<button onclick="transferCoins()" class="btn btn-yellow {{ 'cursor-not-allowed' if v.coins < 100 }}" {% if v.coins < 100 %}disabled{% endif %}>
Gift coins
</button>
</div>

View File

@ -34,9 +34,9 @@
{% block stylesheets %}
<link rel="stylesheet" href="/static/assets/CHRISTMAS/css/main.css?a=7">
<link rel="stylesheet" href="/static/assets/CHRISTMAS/css/main.css?a=10">
<link rel="stylesheet" href="/static/dist/main.css?a=7">
<link rel="stylesheet" href="/static/dist/main.css?a=10">
{% if v %}
<style>:root{--primary:#{{v.themecolor}}}</style>
@ -237,6 +237,6 @@
{% endif %}
<script src="/assets/CHRISTMAS/js/default.js?a=2"></script>
<script src="/assets/CHRISTMAS/js/default.js?a=36"></script>
</body>
</html>

View File

@ -29,7 +29,7 @@
<h2 class="label text-black">Highlight New Comments</h2>
<div class="body w-lg-100">
<div class="body w-lg-100 mb-4">
<div>
<input type="checkbox" id="highlightcomments" name="highlightcomments"{% if v.highlightcomments %} checked{% endif %} onchange="post_toast('/settings/profile?highlightcomments='+document.getElementById('highlightcomments').checked);">
@ -40,6 +40,16 @@
</div>
<h2 class="label text-black">
Compact mode
<span class="badge badge-yellow">New!</span>
</h2>
<div class="mb-4">
<input type="checkbox" id="compactMode" name="compact" {% if v.compact %}checked{% endif %} onchange="post_toast('/settings/profile?compact='+this.checked)">
<label class="inline-block pl-2 text-gray-400" for="compactMode">View posts in a comapct format.</label>
</div>
<h2 class="label text-black">Card view</h2>
<div>

View File

@ -1,4 +1,4 @@
<ul class="flex flex-wrap items-center space-x-3 gap-2 text-sm text-gray-500 mb-0">
<ul class="inline-flex flex-wrap items-center space-x-3 gap-2 text-sm text-gray-500 mb-0">
{% if p.realbody(v) and '/post/' not in request.full_path and not p.over_18 %}
<li>

View File

@ -0,0 +1,6 @@
<!-- Display list of posts -->
{% if v and v.compact %}
{% include "CHRISTMAS/submission_listing_compact.html" %}
{% else %}
{% include "CHRISTMAS/submission_listing.html" %}
{% endif %}

View File

@ -55,7 +55,7 @@
</div>
{% if not postembed %}
<div class="py-2 text-sm text-gray-400 text-center font-bold hidden md:block">
<div class="pt-2 text-sm text-gray-400 text-center font-bold hidden md:block">
{% if v and request.path.startswith('/@') and not v.admin_level %}
{% if voted==1 %}
@ -253,7 +253,7 @@
</div>
{% endif %}
<div class="relative z-20 hidden md:block pt-3">
<div class="relative z-20 hidden md:block pt-2">
{% include "CHRISTMAS/submission/SubmissionActions.html" %}
</div>
</div>

View File

@ -0,0 +1,407 @@
{% if v %}
{% include "CHRISTMAS/award_modal.html" %}
{% endif %}
{% for p in listing %}
{% set ups=p.upvotes %}
{% set downs=p.downvotes %}
{% set score=ups-downs %}
{% if v %}
{% set voted= p.voted %}
{% else %}
{% set voted=-2 %}
{% endif %}
{% if request.host == 'pcmemes.net' %}
{% set cc='SPLASH MOUNTAIN' %}
{% else %}
{% set cc='COUNTRY CLUB' %}
{% endif %}
{% if p.active_flags %}
<div id="flaggers-{{p.id}}" class="relative mb-5 px-3 py-2 rounded-md bg-red-100 border border-red-200 hidden">
<div class="font-medium uppercase text-sm tracking-wider text-red-700 leading-normal mb-2">
<i class="fas fa-flag fa-fw mr-2 fa-sm"></i>Reported by:
</div>
<ul class="mb-0 flex flex-col space-y-3 divide-y divide-red-300 text-black">
{% for f in p.ordered_flags %}
<li class="flex flex-wrap">
<a class="font-bold text-black hover:text-primary" href="{{f.user.url}}">
{{f.user.username}}
</a>
<p class="pl-1">{% if f.reason %} - {{f.reason | safe}}{% endif %} {% if v.admin_level==6 %}</p>
<button class="text-red-600 hover:underline" onclick="post_toast('/del_report/p{{ f.id }}')">
remove
</button>
{% endif %}
</li>
{% endfor %}
</ul>
<button class="absolute top-1 right-3 text-red-400 hover:text-red-700" onclick="document.getElementById('flaggers-{{p.id}}').classList.toggle('hidden')">
<i class="fas fa-times"></i>
</button>
</div>
{% endif %}
<li id="post-{{p.id}}" class="relative p-2.5 md:py-1 md:px-2.5 border-b border-gray-300 dark:border-white/[.05] {% if p.is_banned %}bg-red-200{% elif p.deleted_utc %}bg-yellow-200{% else %} md:bg-transparent bg-gray-200 hover:bg-gray-300 dark:bg-gray-800 dark:hover:bg-white/10 dark:md:bg-transparent{% endif %} {% if p.stickied %} stickied{% endif %}{% if voted==1 %} upvoted{% elif voted==-1 %} downvoted{% endif %}{% if p.over_18 %} nsfw{% endif %} list-none group">
<div class="flex flex-nowrap items-center">
<div class="relative z-10 hidden md:flex flex-col flex-shrink-0 items-center mr-4">
{% if not postembed %}
<div class="text-sm text-gray-400 text-center font-bold hidden md:flex space-x-2">
{% if v and request.path.startswith('/@') and not v.admin_level %}
{% if voted==1 %}
<div class="mx-auto arrow-up post-{{p.id}}-up active"></div>
{% endif %}
<span id="post-score-{{p.id}}" class="score post-score-{{p.id}} {% if voted==1 %}score-up{% elif voted==-1%}score-down{% endif %}"{% if not p.is_banned %} data-bs-toggle="tooltip" data-bs-placement="right" title="" data-bs-original-title="+{{ups}} | -{{downs}}"{% endif %}>{{score}}</span>
{% if voted==-1 %}
<div class="mx-auto arrow-down post-{{p.id}}-down active"></div>
{% endif %}
{% elif v %}
<div id="post-{{p.id}}-up" tabindex="0" href="javascript:void(0)" onclick="vote('post', '{{p.id}}', '1')" class="mx-auto arrow-up upvote-button post-{{p.id}}-up {% if voted==1 %}active{% endif %}"></div>
<span id="post-score-{{p.id}}" class="score post-score-{{p.id}} {% if voted==1 %}score-up{% elif voted==-1%}score-down{% endif %}"{% if not p.is_banned %} data-bs-toggle="tooltip" data-bs-placement="right" title="" data-bs-original-title="+{{ups}} | -{{downs}}"{% endif %}>{{score}}</span>
<div {% if environ.get('DISABLE_DOWNVOTES') == '1' %}style="display:None!important"{% endif %} id="post-{{p.id}}-down" tabindex="0" href="javascript:void(0)" onclick="vote('post', '{{p.id}}', '-1')" class="mx-auto arrow-down downvote-button post-{{p.id}}-down {% if voted==-1 %}active{% endif %}"></div>
{% else %}
<div id="post-{{p.id}}-up" tabindex="0" href="javascript:void(0)" onclick="vote('post', '{{p.id}}', '1')" class="mx-auto arrow-up" onclick="location.href='/login';"></div>
<span id="post-{{p.id}}-score-none" class="score"{% if not p.is_banned %} data-bs-toggle="tooltip" data-bs-placement="right" title="" data-bs-original-title="+{{ups}} | -{{downs}}"{% endif %}>{{score}}</span>
<div {% if environ.get('DISABLE_DOWNVOTES') == '1' %}style="display:None!important"{% endif %} id="post-{{p.id}}-down" tabindex="0" href="javascript:void(0)" onclick="vote('post', '{{p.id}}', '-1')" class="mx-auto arrow-down" onclick="location.href='/login';"></div>
{% endif %}
</div>
{% endif %}
</div>
<div class="w-full overflow-x-hidden md:overflow-x-visible">
<div class="relative z-10 no-scrollbar overflow-y-hidden overflow-x-auto inline-flex items-center space-x-2 text-sm text-gray-500 leading-normal mb-0.5 {% if p.award_count('ghosts') %}ghosts{% endif %}">
<div class="relative flex-shrink-0">
<img loading="lazy" src="{{ p.author.profile_url }}" class="flex-shrink-0 w-5 h-5 bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 object-cover" alt="{{ p.author.username }} avatar"/>
</div>
{% if p.author.shadowbanned or p.distinguish_level or p.is_bot or p.is_blocking or p.is_blocked or p.author.verified %}
<span class="flex-shrink-0">
{% if v and v.admin_level==6 and p.author.shadowbanned %}
<i class="fas fa-user-times fa-fw fa-sm text-admin" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Shadowbanned by @{{p.author.shadowbanned}}"></i>
{% endif %}
{% if p.distinguish_level %}
<i class="fas fa-broom fa-fw fa-sm text-admin" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{'SITE_NAME' | app_config}} Admin, speaking officially"></i>
{% endif %}
{% if p.is_bot %}
<i class="fad fa-robot fa-fw fa-sm text-info" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Bot"></i>
{% endif %}
{% if p.is_blocking %}
<i class="fas fa-user-minus fa-fw fa-sm text-yellow-600" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="You're blocking this user, but you can see this post because you're an admin."></i>
{% endif %}
{% if p.is_blocked %}
<i class="fas fa-user-minus fa-fw fa-sm text-red-600" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="This user is blocking you."></i>
{% endif %}
{% if p.author.verified %}
<i class="fas fa-badge-check fa-fw fa-sm" style="color:{% if p.author.verifiedcolor %}#{{p.author.verifiedcolor}}{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{p.author.verified}}"></i>
{% endif %}
</span>
{% endif %}
{% if not p.award_count('ghosts') %}
<span class="flex-shrink-0">
<a class="user-name" onclick='userPopover({{p.author.json_popover(v) | tojson}})' data-bs-placement="bottom" data-bs-toggle="popover" data-bs-trigger="focus" data-content-id="popover" href="javascript:void(0)" tabindex="0" style="color: #{{p.author.namecolor}};">
<span class="inline-flex flex-shrink-0 items-center">
{% if p.author.patron and not p.distinguish_level %}
<span class="patron flex-shrink-0" style="background-color:#{{p.author.namecolor}};">
{{p.author.username}}
</span>
{% elif p.distinguish_level and request.host == 'rdrama.net' %}
<span class="mod flex-shrink-0">
{{p.author.username}}
</span>
{% else %}
{{p.author.username}}
{% endif %}
</span>
</a>
</span>
{% if p.author.customtitle %}
<bdi class="flex-shrink-0" style="color: #{{p.author.titlecolor}}">
{% if p.author.quadrant %}
<img loading="lazy" height="20" src="/assets/CHRISTMAS/images/PCM/quadrants/{{p.author.quadrant}}.gif">
{% endif %}
{{p.author.customtitle | safe}}
</bdi>
{% endif %}
{% endif %}
<span class="flex-shrink-0" onmouseover="timestamp('timestamp-{{p.id}}','{{p.created_utc}}')" data-bs-toggle="tooltip" data-bs-placement="bottom" id="timestamp-{{p.id}}">
{{p.age_string}}
</span>
{% if p.edited_utc %}
Edited
<span class="flex-shrink-0" data-bs-toggle="tooltip" data-bs-placement="bottom" id="edited_timestamp-{{p.id}}">{{p.edited_string}}
</span>
{% endif %}
{% if p.is_image %}
<span class="flex-shrink-0">(image post)</span>
{% elif p.is_video %}
<span class="flex-shrink-0">(video post)</span>
{% elif p.realurl(v) %}
<a class="flex-shrink-0" class="text-gray-500 hover:underline" href="/search/posts/?q=domain%3A{{p.domain}}&sort=new&t=all" {% if not v or v.newtabexternal %}target="_blank"{% endif %}>
({{p.domain}})
</a>
{% else %}
<span class="flex-shrink-0">(text post)</span>
{% endif %}
{% if p.active_flags %}
<button class="flex-shrink-0 badge badge-red" onclick="document.getElementById('flaggers-{{p.id}}').classList.toggle('hidden')">
<i class="fas fa-gavel fa-sm fa-fw"></i>
{{p.active_flags}} Reports
</button>
{% endif %}
{% if p.bannedfor and p.author.banned_by %}
<span class="flex-shrink-0">
<i class="fad fa-gavel fa-fw fa-sm text-red-600" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="User was banned for this post by @{{p.author.banned_by.username}}"></i>
</span>
{% endif %}
{% if p.flair or p.over_18 or p.club or p.stickied or (p.is_pinned and request.path.startswith('/@')) or p.private or p.awards %}
<ul class="flex-shrink-0 flex space-x-2 items-center mb-0">
<!-- Flair -->
{% if p.flair %}
<li>
<span class="badge badge-purple">
{{p.flair | safe}}
</span>
</li>
{% endif %}
<!-- NSFW -->
{% if p.over_18 %}
<li>
<span class="badge badge-red">+18</span>
</li>
{% endif %}
<!-- Country Club -->
{% if p.club %}
<li>
<span class="badge badge-yellow">Country Club</span>
</li>
{% endif %}
<!-- Stickied -->
{% if p.stickied and (p.stickied.startswith('t:') or p.stickied.startswith('j:')) %}
<li>
<span id="pinned-{{p.id}}" class="badge badge-pink" data-bs-toggle="tooltip" data-bs-placement="bottom" data-timestamp={{p.stickied[2:]}} onmouseover="pinned_timestamp('pinned-{{p.id}}')"}>
<i class="fas fa-thumbtack fa-rotate--45 fa-sm fa-fw"></i>
Pinned
</span>
</li>
{% elif p.stickied %}
<li>
<span id="pinned-{{p.id}}" class="badge badge-pink" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Pinned by @{{p.stickied}}">
<i class="fas fa-thumbtack fa-rotate--45 fa-sm fa-fw"></i>
Pinned
</span>
</li>
{% endif %}
<!-- Private -->
{% if p.private %}
<li>
<span class="badge badge-blue">
<i class="fas fa-lock-alt fa-sm fa-fw1"></i>
Draft
</span>
</li>
{% endif %}
<!-- Awards -->
{% if p.awards %}
{% for a in p.awards %}
<li>
<i class="{{a.class_list}} fa-sm fa-fw" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="{{a.title}} Award given by @{{a.user.username}}"></i>
</li>
{% endfor %}
{% endif %}
</ul>
{% endif %}
</div>
<h5 class="post-title font-medium text-base leading-5 mb-0.5">
<a {% if v and v.newtab %}target="_blank"{% endif %} href="{{p.permalink}}" class="{% if p.author.agendaposter %}agendaposter{% endif %} stretched-link text-black dark:text-gray-100 group-hover:text-primary dark:group-hover:text-primary visited:text-gray-700 dark:visited:text-gray-400 break-words" style="word-break: break-word;">
{{p.realtitle(v) | safe}}
</a>
</h5>
{% if p.realbody(v) and not p.over_18 %}
<div class="{% if p.author.agendaposter %}agendaposter{% endif %} post-text relative z-10 overflow-hidden pointer-events-none text-gray-500 break-words hidden" style="word-break: break-word;" id="post-text-{{p.id}}">
{{p.realbody(v) | safe}}
</div>
{% endif %}
<div class="relative z-10 group-hover:z-20 hidden md:inline-block">
{% include "CHRISTMAS/submission/SubmissionActions.html" %}
</div>
</div>
<div class="relative z-10 flex flex-row flex-nowrap pl-3 md:pl-5 flex-shrink-0">
{% if p.club and not (v and (v.paid_dues or v.id == p.author_id)) %}
<img loading="lazy" src="/assets/images/emojis/marseyglow.webp" class="post-thumbnail shadow-sm p-[3px] w-20 h-14 md:w-24 md:h-16 object-cover bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 flex-shrink-0">
{% elif not p.url %}
<a {% if v and v.newtab %}target="_blank"{% endif %} {% if v %}href="{{p.permalink}}"{% else %}href="/logged_out{{p.permalink}}"{% endif %}>
<img loading="lazy" src="{{p.thumb_url}}" class="post-thumbnail shadow-sm p-[3px] w-20 h-14 md:w-24 md:h-16 object-cover bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 flex-shrink-0">
</a>
{% elif p.is_image %}
<a href="javascript:void(0)" data-bs-toggle="modal" data-bs-target="#expandImageModal" data-bs-url="{{p.realurl(v)}}" onclick="expandDesktopImage('{{ p.realurl(v) }}')">
<img loading="lazy" src="{{p.thumb_url}}" class="post-thumbnail shadow-sm p-[3px] w-20 h-14 md:w-24 md:h-16 object-cover bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 flex-shrink-0">
</a>
{% elif p.is_video %}
<a href="javascript:void(0)" onclick="toggleVideo({{p.id}})">
<img alt="post thumnail" loading="lazy" src="{{p.thumb_url}}" class="post-thumbnail shadow-sm p-[3px] w-20 h-14 md:w-24 md:h-16 object-cover bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 flex-shrink-0">
</a>
{% elif p.is_youtube %}
<a href="javascript:void(0)" onclick="document.getElementById('video-{{p.id}}').classList.toggle('hidden')">
<img alt="post thumnail" loading="lazy" src="{{p.thumb_url}}" class="post-thumbnail shadow-sm p-[3px] w-20 h-14 md:w-24 md:h-16 object-cover bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 flex-shrink-0">
</a>
{% else %}
<a {% if not v or v.newtabexternal %}target="_blank"{% endif %} rel="nofollow noopener noreferrer" href="{{p.realurl(v)}}">
<img loading="lazy" src="{{p.thumb_url}}" class="post-thumbnail shadow-sm p-[3px] w-20 h-14 md:w-24 md:h-16 object-cover bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 flex-shrink-0">
</a>
{% endif %}
</div>
</div>
{% if p.is_image and not p.over_18 and ((v and v.cardview) or (not v and environ.get('CARD_VIEW') == '1')) %}
<div class="md:ml-[4.5rem] mt-4">
<a target="_blank" rel="nofollow noopener noreferrer" href="{{p.url}}" class="inline-block">
<img loading="lazy" src="/assets/CHRISTMAS/images/loading.gif" data-src="{{p.url}}" class="shadow-md p-1 bg-white dark:bg-gray-900 w-full md:w-64" alt="Post preview">
</a>
</div>
{% endif %}
{% if not p.club or v and (v.paid_dues or v.id == p.author_id) and (p.is_video or p.is_youtube) %}
<div class="relative z-10">
{% if p.is_video %}
<div id="video-{{p.id}}" class="text-center {% if p.over_18 or not ((v and v.cardview) or (not v and environ.get('CARD_VIEW') == '1')) %}hidden{% endif %} md:ml-[4.5rem] mt-3">
<video controls loop preload="metadata" class="w-full max-h-[20rem]">
<source src="{{p.realurl(v)}}" type="video/mp4">
</video>
</div>
{% elif p.is_youtube %}
<div id="video-{{p.id}}" class="{% if p.over_18 or not ((v and v.cardview) or (not v and environ.get('CARD_VIEW') == '1')) %}hidden{% endif %} md:ml-[4.5rem] mt-3">
{{p.embed_url | safe}}
</div>
{% endif %}
</div>
{% endif %}
<div class="relative z-10 group-hover:z-20 md:hidden pt-2 md:pt-0">
{% include "CHRISTMAS/submission/SubmissionActionsMobile.html" %}
</div>
{% include "CHRISTMAS/modals/ModalSubmissionActions.html" %}
</li>
{% else %}
{% if request.path.endswith('/admin/queue') %}
<div class="row no-gutters">
<div class="col">
<div class="text-center py-7">
<div class="h4 p-2">This queue is empty. (That's a good thing.)</div>
</div>
</div>
</div>
{% elif u %}
{% if v and v.id == u.id %}
<div class="row no-gutters">
<div class="col">
<div class="text-center px-3 my-3">
<span class="fa-stack fa-2x text-muted mb-4">
<i class="fas fa-square text-gray-500 opacity-25 fa-stack-2x"></i>
<i class="fas text-gray-500 fa-ghost fa-stack-1x text-lg"></i>
</span>
<h2 class="h5">You haven't {% if "saved" in request.full_path %}saved{% else %}made{% endif %} a post yet</h2>
<p class="text-muted mb-md-5">Your {% if "saved" in request.full_path %}saved posts{% else %}posting history{% endif %} will show here.</p>
{% if "saved" not in request.full_path %}<a href="/submit" class="btn btn-primary">Create a post</a>{% endif %}
</div>
</div>
</div>
{% else %}
<div class="row no-gutters">
<div class="col">
<div class="text-center px-3 my-3">
<span class="fa-stack fa-2x text-muted mb-4">
<i class="fas fa-square text-gray-500 opacity-25 fa-stack-2x"></i>
<i class="fas text-gray-500 fa-scroll-old fa-stack-1x text-lg"></i>
</span>
<h2 class="h5">@{{u.username}} hasn't made a post yet</h2>
<p class="text-muted">Their posting history will show here.</p>
<pre>
</pre>
</div>
</div>
</div>
{% endif %}
{% else %}
<div class="flex flex-col items-center justify-center py-24 md:py-48">
<img loading="lazy" src="https://c.tenor.com/NhDy-AkelhQAAAAM/marsey-drama.gif" class="w-20 h-20 mb-4 rounded-md object-cover"/>
<h2 class="text-xl font-bold leading-normal font-heading text-black">No posts here -_-</h2>
<p class="text-gray-500">
Looks like there is no content atm.
</p>
</div>
{% endif %}
{% endfor %}
{% if v %}
{% include "CHRISTMAS/delete_post_modal.html" %}
{% include "CHRISTMAS/report_post_modal.html" %}
{% if v.admin_level == 6 %}
{% include "CHRISTMAS/ban_modal.html" %}
{% endif %}
{% endif %}
{% include "CHRISTMAS/expanded_image_modal.html" %}
<script defer src="/assets/CHRISTMAS/js/new_comments_count.js?a=1"></script>
<script defer src="/assets/CHRISTMAS/js/submission_listing.js?a=6"></script>
<style>
.mod:before {
content: '(((';
}
.mod:after {
content: ')))';
}
.mod {
padding: 2px 5px 3px 5px;
border-radius: 5px;
color:white!important;
background: -moz-linear-gradient(180deg, red, orange, yellow, green, blue, indigo, violet);
background: -webkit-linear-gradient(left, red, orange, yellow, green, blue, indigo, violet );
text-shadow:-1px -1px 0 black,1px -1px 0 black,-1px 1px 0 black,1px 1px 0 black;
}
</style>

View File

@ -1,16 +1,27 @@
<!-- Clipboard copy toast -->
<div class="toast clipboard" id="toast-success" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast-body bg-green-500 border border-green-900 text-center text-white">
<i class="fas fa-check-circle text-success mr-2"></i>Link copied to clipboard
<div class="flex items-center justify-center p-3 bg-green-500 border border-green-600 text-center text-white rounded shadow-inset-t-white-10">
<i class="fas fa-copy fa-fw mr-2"></i>
<span>
Link copied to clipboard!
</span>
</div>
</div>
<div class="toast" id="toast-post-success" style="position: fixed; bottom: 1.5rem; margin: 0 auto; left: 0; right: 0; width: 275px; z-index: 1000" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast-body bg-green-500 border border-green-900 text-center text-white">
<i class="fas fa-comment-alt-smile mr-2"></i><span id="toast-post-success-text">Action successful!</span>
<!-- Global success toast -->
<div id="toast-post-success" class="toast fixed bottom-4 mx-auto left-0 right-0 w-96" style="z-index: 1000" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="flex items-center justify-center p-3 bg-green-500 border border-green-600 text-center text-white rounded shadow-inset-t-white-10">
<i class="fas fa-check-circle fa-fw mr-2"></i>
<span id="toast-post-success-text">
Action successful!
</span>
</div>
</div>
<div class="toast" id="toast-post-error" style="position: fixed; bottom: 1.5rem; margin: 0 auto; left: 0; right: 0; width: 275px; z-index: 1000" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="toast-body bg-red-500 border border-red-900 text-center text-white">
<i class="fas fa-exclamation-circle mr-2"></i><span id="toast-post-error-text">Error, please try again later.</span>
<!-- Global error toast -->
<div id="toast-post-error" class="toast fixed bottom-4 mx-auto left-0 right-0 w-96" style="z-index: 1000" role="alert" aria-live="assertive" aria-atomic="true" data-bs-animation="true" data-bs-autohide="true" data-bs-delay="5000">
<div class="flex items-center justify-center p-3 bg-red-500 border border-red-600 text-center text-white rounded shadow-inset-t-white-10">
<i class="fas fa-exclamation-circle fa-fw mr-2"></i>
<span id="toast-post-error-text">
Error, please try again later.
</span>
</div>
</div>

View File

@ -38,7 +38,7 @@
<div class="absolute -top-12 right-3">
<ul class="flex flex-wrap space-x-2 items-center mb-0">
{% if v.admin_level > 1 %}
<li>
<li class="md:hidden">
{% include 'CHRISTMAS//dropdowns/ProfileAdminDropdown.html' %}
</li>
{% endif %}
@ -69,6 +69,12 @@
</li>
{% endif %}
{% if v.id != u.id %}
<li>
<button class="btn btn-gray shadow" data-bs-toggle="modal" data-bs-target="#giftCoinsModal">
<i class="fas fa-gift fa-sm fa-fw md:mr-1"></i>
<span class="hidden md:inline-block">Gift Coins</span>
</button >
</li>
<li>
<button class="btn btn-gray shadow" data-bs-toggle="modal" data-bs-target="#directMessageModal">
<i class="fas fa-paper-plane fa-sm fa-fw md:mr-1"></i>
@ -390,7 +396,6 @@
{% if v %}
{% include "CHRISTMAS/emoji_modal.html" %}
{% include "CHRISTMAS/gif_modal.html" %}
{% include "CHRISTMAS/modals/ModalDirectMessage.html" %}
{% include "CHRISTMAS/modals/ModalGiftCoins.html" %}
{% if v.admin_level > 1 %}
{% include "CHRISTMAS/modals/ModalAdminManageUser.html" %}