forked from rDrama/rDrama
freedom
parent
4a09df7fb8
commit
e472af987b
|
@ -333,19 +333,6 @@ def archives(v, path):
|
|||
if request.path.endswith('.css'): resp.headers.add("Content-Type", "text/css")
|
||||
return resp
|
||||
|
||||
@app.get('/static/<path:path>')
|
||||
@limiter.exempt
|
||||
def static_service2(path):
|
||||
resp = make_response(send_from_directory('./static', path))
|
||||
if request.path.endswith('.webp') or request.path.endswith('.gif') or request.path.endswith('.ttf') or request.path.endswith('.woff') or request.path.endswith('.woff2'):
|
||||
resp.headers.remove("Cache-Control")
|
||||
resp.headers.add("Cache-Control", "public, max-age=2628000")
|
||||
|
||||
if request.path.endswith('.webp'):
|
||||
resp.headers.remove("Content-Type")
|
||||
resp.headers.add("Content-Type", "image/webp")
|
||||
return resp
|
||||
|
||||
@app.get('/assets/<path:path>')
|
||||
@app.get('/static/assets/<path:path>')
|
||||
@limiter.exempt
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,488 +0,0 @@
|
|||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
.theme-mountain-bluebird {
|
||||
--color-primary: 0,132,180;
|
||||
--color-100: 255,255,255;
|
||||
--color-200: 255,255,255;
|
||||
--color-300: 232,232,232;
|
||||
--color-400: 180,180,180;
|
||||
--color-500: 153,153,153;
|
||||
--color-600: 51,51,51;
|
||||
--color-700: 37,37,37;
|
||||
--color-800: 37,37,37;
|
||||
--color-900: 0,0,0;
|
||||
}
|
||||
|
||||
.theme-blood-orange {
|
||||
--color-primary: 249,115,22;
|
||||
--color-100: 224,231,255;
|
||||
--color-200: 218, 225, 254;
|
||||
--color-300: 165,180,252;
|
||||
--color-400: 129,140,248;
|
||||
--color-500: 125, 128, 236;
|
||||
--color-600: 79,70,229;
|
||||
--color-700: 67,56,202;
|
||||
--color-800: 55,48,163;
|
||||
--color-900: 49,46,129;
|
||||
}
|
||||
|
||||
.theme-lake-tahoe {
|
||||
--color-primary: 13,148,136;
|
||||
--color-100: 245,253,254;
|
||||
--color-200: 185,239,245;
|
||||
--color-300: 157,237,247;
|
||||
--color-400: 126,213,226;
|
||||
--color-500: 56,173,193;
|
||||
--color-600: 8,145,178;
|
||||
--color-700: 23,108,131;
|
||||
--color-800: 17,76,94;
|
||||
--color-900: 12,47,60;
|
||||
}
|
||||
|
||||
.theme-alpine {
|
||||
--color-primary: 8,145,178;
|
||||
--color-100: 245,244,242;
|
||||
--color-200: 231,229,227;
|
||||
--color-300: 214,212,209;
|
||||
--color-400: 168,164,158;
|
||||
--color-500: 120,115,108;
|
||||
--color-600: 87,83,78;
|
||||
--color-700: 68,66,59;
|
||||
--color-800: 41,39,36;
|
||||
--color-900: 28,26,23;
|
||||
}
|
||||
|
||||
.theme-cambridge {
|
||||
--color-primary: 153,27,27;
|
||||
--color-100: 231,229,228;
|
||||
--color-200: 231,229,228;
|
||||
--color-300: 214,211,209;
|
||||
--color-400: 168,162,158;
|
||||
--color-500: 120,113,108;
|
||||
--color-600: 87,83,78;
|
||||
--color-700: 68,64,60;
|
||||
--color-800: 41,37,36;
|
||||
--color-900: 28,25,23;
|
||||
}
|
||||
|
||||
.theme-limon {
|
||||
--color-primary: 202,138,4;
|
||||
--color-100: 236,252,203;
|
||||
--color-200: 234,255,195;
|
||||
--color-300: 200,242,126;
|
||||
--color-400: 136,182,61;
|
||||
--color-500: 131,181,54;
|
||||
--color-600: 101,163,13;
|
||||
--color-700: 72,113,16;
|
||||
--color-800: 63,98,18;
|
||||
--color-900: 54,83,20;
|
||||
}
|
||||
|
||||
.theme-mocha {
|
||||
--color-primary: 5,150,105;
|
||||
--color-100: 246,246,244;
|
||||
--color-200: 235,233,229;
|
||||
--color-300: 219,218,209;
|
||||
--color-400: 175, 169, 155;
|
||||
--color-500: 148,144,129;
|
||||
--color-600: 99,96,77;
|
||||
--color-700: 82,76,55;
|
||||
--color-800: 55,52,31;
|
||||
--color-900: 40,37,17;
|
||||
}
|
||||
|
||||
.theme-choco-mint {
|
||||
--color-primary: 37,193,136;
|
||||
--color-100: 246,246,244;
|
||||
--color-200: 235,232,229;
|
||||
--color-300: 219,218,209;
|
||||
--color-400: 177,171,158;
|
||||
--color-500: 130,123,110;
|
||||
--color-600: 99,96,77;
|
||||
--color-700: 70,62,47;
|
||||
--color-800: 52,44,32;
|
||||
--color-900: 40,37,17;
|
||||
}
|
||||
|
||||
.theme-redwood {
|
||||
--color-primary: 222,176,16;
|
||||
--color-100: 246,244,244;
|
||||
--color-200: 235,229,229;
|
||||
--color-300: 219,209,209;
|
||||
--color-400: 177,159,159;
|
||||
--color-500: 130,110,110;
|
||||
--color-600: 99,96,77;
|
||||
--color-700: 70,47,47;
|
||||
--color-800: 52,32,32;
|
||||
--color-900: 40,17,17;
|
||||
}
|
||||
|
||||
.theme-sequoia {
|
||||
--color-primary: 54,83,20;
|
||||
--color-100: 246,244,244;
|
||||
--color-200: 235,229,229;
|
||||
--color-300: 219,209,209;
|
||||
--color-400: 177,159,159;
|
||||
--color-500: 130,110,110;
|
||||
--color-600: 99,96,77;
|
||||
--color-700: 70,47,47;
|
||||
--color-800: 52,32,32;
|
||||
--color-900: 40,17,17;
|
||||
}
|
||||
|
||||
.theme-dramblr {
|
||||
--color-primary: 2,132,199;
|
||||
--color-100: 241,245,249;
|
||||
--color-200: 226,232,240;
|
||||
--color-300: 203,213,225;
|
||||
--color-400: 148,163,184;
|
||||
--color-500: 114,129,149;
|
||||
--color-600: 71,85,105;
|
||||
--color-700: 45,60,80;
|
||||
--color-800: 30,41,59;
|
||||
--color-900: 15,23,42;
|
||||
}
|
||||
|
||||
.theme-haskell {
|
||||
--color-primary: 72,236,135;
|
||||
--color-100: 251,207,232;
|
||||
--color-200: 251,207,232;
|
||||
--color-300: 251,207,232;
|
||||
--color-400: 244,114,182;
|
||||
--color-500: 236,72,153;
|
||||
--color-600: 219,39,119;
|
||||
--color-700: 0,0,31;
|
||||
--color-800: 0,0,31;
|
||||
--color-900: 0,0,31;
|
||||
}
|
||||
|
||||
.theme-war-games {
|
||||
--color-primary: 236,72,153;
|
||||
--color-100: 207,251,231;
|
||||
--color-200: 207,251,231;
|
||||
--color-300: 207,251,231;
|
||||
--color-400: 114,244,173;
|
||||
--color-500: 72,236,135;
|
||||
--color-600: 39,219,138;
|
||||
--color-700: 0,23,21;
|
||||
--color-800: 0,23,21;
|
||||
--color-900: 0,23,21;
|
||||
}
|
||||
|
||||
.theme-yale {
|
||||
--color-primary: 109,40,217;
|
||||
--color-100: 254,231,244;
|
||||
--color-200: 254,231,244;
|
||||
--color-300: 254,231,244;
|
||||
--color-400: 255,245,117;
|
||||
--color-500: 254,237,8;
|
||||
--color-600: 219,39,119;
|
||||
--color-700: 215,57,135;
|
||||
--color-800: 215,57,135;
|
||||
--color-900: 157,23,77;
|
||||
}
|
||||
|
||||
.theme-abyss {
|
||||
--color-primary: 219,39,119;
|
||||
--color-100: 189,189,193;
|
||||
--color-200: 189,189,193;
|
||||
--color-300: 189,189,193;
|
||||
--color-400: 161,161,171;
|
||||
--color-500: 117,117,126;
|
||||
--color-600: 82,82,91;
|
||||
--color-700: 0,0,0;
|
||||
--color-800: 0,0,0;
|
||||
--color-900: 0,0,0;
|
||||
}
|
||||
|
||||
.theme-midnight {
|
||||
--color-primary: 219,39,119;
|
||||
--color-100: 243,244,246;
|
||||
--color-200: 229,231,235;
|
||||
--color-300: 209,213,219;
|
||||
--color-400: 156,163,175;
|
||||
--color-500: 107,114,128;
|
||||
--color-600: 75,85,99;
|
||||
--color-700: 55,65,81;
|
||||
--color-800: 31,41,55;
|
||||
--color-900: 17,24,39;
|
||||
}
|
||||
|
||||
.theme-iron {
|
||||
--color-primary: 219,39,119;
|
||||
--color-100: 244,244,245;
|
||||
--color-200: 228,228,231;
|
||||
--color-300: 212,212,216;
|
||||
--color-400: 161,161,171;
|
||||
--color-500: 117,117,126;
|
||||
--color-600: 82,82,91;
|
||||
--color-700: 63,63,70;
|
||||
--color-800: 39,39,42;
|
||||
--color-900: 24,24,27;
|
||||
}
|
||||
|
||||
.theme-bubblegum {
|
||||
--color-primary: 236,72,153;
|
||||
--color-100: 254,236,246;
|
||||
--color-200: 252,223,240;
|
||||
--color-300: 249,168,212;
|
||||
--color-400: 244,114,182;
|
||||
--color-500: 236,72,153;
|
||||
--color-600: 219,39,119;
|
||||
--color-700: 190,24,93;
|
||||
--color-800: 157,23,77;
|
||||
--color-900: 131,24,67;
|
||||
}
|
||||
|
||||
.theme-canary {
|
||||
--color-primary: 2,132,199;
|
||||
--color-100: 254,248,190;
|
||||
--color-200: 247,237,160;
|
||||
--color-300: 247,231,109;
|
||||
--color-400: 210,179,55;
|
||||
--color-500: 199,159,39;
|
||||
--color-600: 187,129,6;
|
||||
--color-700: 170,106,14;
|
||||
--color-800: 133,77,14;
|
||||
--color-900: 113,63,18;
|
||||
}
|
||||
|
||||
.theme-evergreen {
|
||||
--color-primary: 87,138,157;
|
||||
--color-100: 244,246,244;
|
||||
--color-200: 229,235,231;
|
||||
--color-300: 209,219,213;
|
||||
--color-400: 155,175,161;
|
||||
--color-500: 106,128,115;
|
||||
--color-600: 76,99,81;
|
||||
--color-700: 55,82,62;
|
||||
--color-800: 31,55,38;
|
||||
--color-900: 17,40,23;
|
||||
}
|
||||
|
||||
.theme-savile-row {
|
||||
--color-primary: 21,94,117;
|
||||
--color-100: 246,245,244;
|
||||
--color-200: 235,233,229;
|
||||
--color-300: 219,216,209;
|
||||
--color-400: 175,169,155;
|
||||
--color-500: 148,143,129;
|
||||
--color-600: 99,92,78;
|
||||
--color-700: 82,71,55;
|
||||
--color-800: 55,46,31;
|
||||
--color-900: 40,31,17;
|
||||
}
|
||||
|
||||
/* ---------------- 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 */
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------- 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
|
||||
}
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
<ul class="mb-0 list-none">
|
||||
{% for c in p.bet_options %}
|
||||
<li class="group flex items-center space-x-2">
|
||||
<span id="span-{{c.id}}" {% if c.poll_voted(v) %}class="bet_voted"{% endif %}>
|
||||
<input type="radio" id="{{c.id}}" {% if c.poll_voted(v) %}checked{% endif %} class="bet" onchange="bet_vote('{{c.id}}')" {% if not (v and v.coins > 200) or p.total_bet_voted(v) %}disabled{% endif %}>
|
||||
</span>
|
||||
<label for="{{c.id}}">
|
||||
{{c.body_html | safe}} -
|
||||
<a href="/votes?link=t3_{{c.id}}">
|
||||
<span id="bet-{{c.id}}">{{c.upvotes}}</span> bets
|
||||
</a>
|
||||
{% if not p.total_bet_voted(v) %} (cost of entry: 200 coins){% endif %}
|
||||
</label>
|
||||
{% if v and v.admin_level > 2 %}
|
||||
<div class="hidden group-hover:block">
|
||||
<button class="btn btn-gray" onclick="post_toast('/distribute/{{c.id}}')">
|
||||
Declare winner
|
||||
</button>
|
||||
</div>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
|
@ -1,16 +0,0 @@
|
|||
<div class="md:inline-block px-4 py-2 md:py-3 bg-gray-100 dark:bg-gray-700 border border-gray-300 dark:border-gray-900 rounded-md shadow-inset-t-white-10 select-none">
|
||||
<ul class="flex flex-col space-y-1 mb-0">
|
||||
{% for c in p.options %}
|
||||
<li>
|
||||
<input type="checkbox" id="{{c.id}}" name="option" {% if c.poll_voted(v) %}checked{% endif %} onchange="{% if v %}poll_vote('{{c.id}}'){% else %}poll_vote_no_v(){% endif %}">
|
||||
<label class="inline-block pl-2" for="{{c.id}}">{{c.body_html | safe}}
|
||||
<span class="presult {% if not p.total_poll_voted(v) %}hidden{% endif %}"> -
|
||||
<a href="/votes?link=t3_{{c.id}}" class="font-medium text-gray-500 hover:text-primary">
|
||||
<span id="poll-{{c.id}}">{{c.upvotes}}</span> votes
|
||||
</a>
|
||||
</span>
|
||||
</label>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
|
@ -1,55 +0,0 @@
|
|||
<div style="display:none" id="popover">
|
||||
<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">·</strong>
|
||||
<span>
|
||||
<span class="pop-coins"></span>
|
||||
coins
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hidden px-4">
|
||||
<span class="pop-bio popover-bio"></span>
|
||||
</div>
|
||||
|
||||
<div class="pop-badges p-4">
|
||||
</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>
|
|
@ -1,262 +0,0 @@
|
|||
{%
|
||||
set stats = [
|
||||
{
|
||||
'stat': 'users',
|
||||
'count': '6,506',
|
||||
'description': 'up 12% since last month'
|
||||
},
|
||||
{
|
||||
'stat': 'posts',
|
||||
'count': '60,506',
|
||||
'description': 'up 6% since last month'
|
||||
},
|
||||
{
|
||||
'stat': 'comments',
|
||||
'count': '495,267',
|
||||
'description': 'up 2% since last month'
|
||||
}
|
||||
]
|
||||
%}
|
||||
|
||||
|
||||
{%
|
||||
set sections = [
|
||||
{
|
||||
'title': 'content',
|
||||
'color': 'red',
|
||||
'content': [
|
||||
{
|
||||
'icon': 'fa-pencil',
|
||||
'title': 'Reported Posts',
|
||||
'description': 'Community-flagged posts',
|
||||
'link': '/admin/reported/posts'
|
||||
},
|
||||
{
|
||||
'icon': 'fa-comment-alt',
|
||||
'title': 'Reported Comments',
|
||||
'description': 'Community-flagged comments',
|
||||
'link': '/admin/reported/comments'
|
||||
},
|
||||
{
|
||||
'icon': 'fa-image',
|
||||
'title': 'Image Posts',
|
||||
'description': 'User-uploaded media',
|
||||
'link': '/admin/image_posts'
|
||||
},
|
||||
{
|
||||
'icon': 'fa-align-slash',
|
||||
'title': 'Removed Posts',
|
||||
'description': 'Posts removed by mods',
|
||||
'link': '/admin/removed/posts'
|
||||
},
|
||||
{
|
||||
'icon': 'fa-comment-alt-slash',
|
||||
'title': 'Removed Comments',
|
||||
'description': 'Comments removed by mods',
|
||||
'link': '/admin/removed/comments'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
'title': 'users',
|
||||
'color': 'blue',
|
||||
'content': [
|
||||
{
|
||||
'icon': 'fa-ghost',
|
||||
'title': 'Shadow Banned',
|
||||
'description': 'Users currently shadow banned',
|
||||
'link': '/admin/shadowbanned'
|
||||
},
|
||||
{
|
||||
'icon': 'fa-republican',
|
||||
'title': 'Agenda Posters',
|
||||
'description': 'Users with agenda poster mode',
|
||||
'link': '/agendaposters'
|
||||
},
|
||||
{
|
||||
'icon': 'fa-seedling',
|
||||
'title': 'Grass Award',
|
||||
'description': 'Users with active grass award',
|
||||
'link': '/grassed'
|
||||
},
|
||||
{
|
||||
'icon': 'fa-users',
|
||||
'title': 'Users Feed',
|
||||
'description': 'Updated feed of sign ups',
|
||||
'link': '/admin/users'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
'title': 'grant',
|
||||
'color': 'pink',
|
||||
'content': [
|
||||
{
|
||||
'icon': 'fa-trophy',
|
||||
'title': 'Give Award',
|
||||
'description': 'Give users awards',
|
||||
'link': '/admin/awards'
|
||||
},
|
||||
{
|
||||
'icon': 'fa-badge',
|
||||
'title': 'Grant Badge',
|
||||
'description': 'Grant users badges',
|
||||
'link': '/admin/badge_grant'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
'title': 'safety',
|
||||
'color': 'green',
|
||||
'content': [
|
||||
{
|
||||
'icon': 'fa-ban',
|
||||
'title': 'Banned Domains',
|
||||
'description': 'Domains banned site-wide',
|
||||
'link': '/admin/banned_domains'
|
||||
},
|
||||
{
|
||||
'icon': 'fa-search',
|
||||
'title': 'Vote Fraud Analysis',
|
||||
'description': 'Check alt-account voting',
|
||||
'link': '/admin/alt_votes'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
'title': 'Metrics',
|
||||
'color': 'purple',
|
||||
'content': [
|
||||
{
|
||||
'icon': 'fa-list-ol',
|
||||
'title': 'Content stats',
|
||||
'description': 'Post, comment, etc. numbers',
|
||||
'link': '/stats'
|
||||
},
|
||||
{
|
||||
'icon': 'fa-chart-bar',
|
||||
'title': 'Content charts',
|
||||
'description': 'Visualize site stats',
|
||||
'link': '/charts'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
'title': 'Meta',
|
||||
'color': 'gray',
|
||||
'content': [
|
||||
{
|
||||
'icon': 'fa-wrench',
|
||||
'title': 'API access',
|
||||
'description': 'Approved apps',
|
||||
'link': '/admin/apps'
|
||||
},
|
||||
{
|
||||
'icon': 'fa-columns',
|
||||
'title': 'Sidebar',
|
||||
'description': 'Edit the frontpage sidebar',
|
||||
'link': '/admin/sidebar'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
%}
|
||||
|
||||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>{{'SITE_NAME' | app_config}}</title>
|
||||
<meta name="description" content="{{'SITE_NAME' | app_config}} Help">
|
||||
{% endblock %}
|
||||
|
||||
{% block subHeader %}
|
||||
<div class="relative max-w-screen-2xl mx-auto px-4 py-4 grid grid-cols-12 rounded-t">
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-gradient-to-t from-gray-300 to-gray-200 dark:bg-none dark:bg-gray-800 rounded-t sub-header-shadow dark:border-b dark:border-gray-700 sub-header"></div>
|
||||
<div class="relative col-span-full flex items-center">
|
||||
<div>
|
||||
<h1 class="font-bold text-xl font-heading leading-normal mb-0">
|
||||
Admin Dashboard
|
||||
</h1>
|
||||
<small class="block text-gray-700 dark:text-gray-400">
|
||||
Welcome agent, <strong>#{{ v.id }}</strong>.
|
||||
</small>
|
||||
</div>
|
||||
<div class="ml-auto flex space-x-2">
|
||||
<a href="/log?admin={{ v.username }}" class="btn btn-primary">
|
||||
<i class="fas fa-list fa-sm fa-fw mr-1"></i>
|
||||
Your activity
|
||||
</a>
|
||||
<a href="/notifications?modmail=true" class="btn btn-green">
|
||||
<i class="fas fa-envelope fa-sm fa-fw mr-1"></i>
|
||||
Mod mail
|
||||
</a>
|
||||
<span class="hidden md:inline-block">
|
||||
<a href="https://github.com/Aevann1/Drama" class="btn btn-purple">
|
||||
<i class="fab fa-github fa-sm fa-fw mr-1"></i>
|
||||
GitHub repo
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full xl:col-span-9 bg-gray-200 dark:bg-gray-800 p-4 md:px-0 space-y-8">
|
||||
|
||||
<!-- <div class="hidden">
|
||||
<h2 class="hidden font-bold text-2xl md:text-3xl font-heading leading-normal mb-4 pb-3 border-b border-gray-300 dark:border-gray-700">
|
||||
Metrics
|
||||
</h2>
|
||||
<div class="p-4 md:p-5 flex justify-between md:justify-around space-x-4 items-center rounded-md bg-gray-300 dark:bg-gray-700 shadow-inset-t-white-10 border border-gray-400 dark:border-gray-900">
|
||||
{% for section in stats %}
|
||||
<div class="md:px-5">
|
||||
<div class="text-black dark:text-gray-500 uppercase font-bold text-xs tracking-wider leading-4 mb-2">
|
||||
{{ section.stat }}
|
||||
</div>
|
||||
<h2 class="font-bold text-lg md:text-3xl font-heading leading-normal mb-2 text-shadow-light text-black dark:text-gray-200">{{ section.count }}</h2>
|
||||
<p class="flex items-center text-xs md:text-base text-gray-700 dark:text-gray-300">
|
||||
<i class="fas fa-caret-up text-lg text-green-400 mr-2"></i>
|
||||
<span>{{ section.description }}</span>
|
||||
</p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
-->
|
||||
<div>
|
||||
<h2 class="hidden font-bold text-2xl md:text-3xl font-heading leading-normal mb-4 pb-3 border-b border-gray-300 dark:border-gray-700">
|
||||
Links
|
||||
</h2>
|
||||
{% for section in sections %}
|
||||
<h2 class="font-bold text-lg font-heading leading-normal mb-0 capitalize">
|
||||
{{ section.title }}
|
||||
</h2>
|
||||
<div class="flex flex-wrap -mx-3 overflow-hidden mb-6">
|
||||
{% for item in section.content %}
|
||||
<div class="my-2 md:my-3 px-3 w-full md:w-1/2 overflow-hidden lg:w-1/3">
|
||||
<a href="{{ item.link }}" class="flex items-center p-3 md:px-5 md:py-4 rounded border border-gray-400 dark:border-gray-700 hover:bg-gray-300 dark:hover:bg-gray-700 h-full">
|
||||
<div class="flex flex-shrink-0 items-center justify-center w-9 h-9 md:w-12 md:h-12 rounded-sm bg-{{ section.color }}-200 shadow-inner-white-10">
|
||||
<i class="fas {{ item.icon }} fa-fw md:text-lg text-{{ section.color }}-600"></i>
|
||||
</div>
|
||||
<div class="pl-3 md:pl-4">
|
||||
<h3 class="font-bold text-base font-heading leading-normal mb-0 capitalize text-black dark:text-gray-200 break-words" style="word-break: break-word;">
|
||||
{{ item.title }}
|
||||
</h3>
|
||||
<p class="text-sm md:text-base text-gray-500 break-words" style="word-break: break-word;">
|
||||
{{ item.description }}
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block sidebar %}
|
||||
{% include 'CHRISTMAS/sidebars/AdminSidebar.html' %}
|
||||
{% endblock %}
|
|
@ -1,121 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>{{'SITE_NAME' | app_config}}</title>
|
||||
<meta name="description" content="{{'SITE_NAME' | app_config}} Help">
|
||||
{% endblock %}
|
||||
|
||||
{% block subHeader %}
|
||||
<div class="relative max-w-screen-2xl mx-auto px-4 py-4 grid grid-cols-12 rounded-t">
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-gradient-to-t from-gray-300 to-gray-200 dark:bg-none dark:bg-gray-800 rounded-t sub-header-shadow dark:border-b dark:border-gray-700 sub-header"></div>
|
||||
<div class="relative col-span-full flex items-center">
|
||||
<div>
|
||||
<h1 class="font-bold text-xl font-heading leading-normal mb-0">
|
||||
Vote Analysis
|
||||
</h1>
|
||||
<ul class="flex space-x-2 text-xs text-gray-500 dark:text-gray-400 leading-normal mb-0">
|
||||
<li>
|
||||
<a href="/admin" class="text-gray-500 hover:underline">Admin Dashboard</a>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-arrow-alt-right text-shadow fa-fw fa-sm"></i>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="text-gray-700 dark:text-gray-500 hover:underline">Vote Analysis</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full my-4 space-y-6">
|
||||
|
||||
<div class="p-5 flex flex-col rounded-md bg-gray-300 dark:bg-gray-700 shadow-inset-t-white-10 border border-gray-400 dark:border-gray-900">
|
||||
<h2 class="font-bold text-lg font-heading leading-normal mb-0 capitalize">
|
||||
Vote Info
|
||||
</h2>
|
||||
<form action="/admin/alt_votes" method="get">
|
||||
<label class="label">
|
||||
Usernames
|
||||
</label>
|
||||
<div class="w-full flex space-x-2 items-center">
|
||||
<input id="link-input" type="text" class="form-input" name="u1" value="{{u1.username if u1 else ''}}" placeholder="User #1" required>
|
||||
<input id="link-input" type="text" class="form-input" name="u2" value="{{u2.username if u2 else ''}}" placeholder="User #2" oninput="document.getElementById('analysis-btn').disabled=false" required>
|
||||
<input id="analysis-btn" type="submit" value="Analyze" class="btn btn-primary">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{% if u1 and u2 %}
|
||||
<div class="p-5 flex flex-col rounded-md bg-gray-300 dark:bg-gray-700 shadow-inset-t-white-10 border border-gray-400 dark:border-gray-900">
|
||||
<h2 class="font-bold text-lg font-heading leading-normal mb-0 capitalize">
|
||||
Analysis
|
||||
</h2>
|
||||
<table class="w-full table table-striped mb-5">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>@{{u1.username}} only(% unique)</th>
|
||||
<th>Both</th>
|
||||
<th>@{{u2.username}} only (% unique)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tr>
|
||||
<td><b>Post Upvotes</b></td>
|
||||
<td>{{data['u1_only_post_ups']}} ({{data['u1_post_ups_unique']}}%)</td>
|
||||
<td>{{data['both_post_ups']}}</td>
|
||||
<td>{{data['u2_only_post_ups']}} ({{data['u2_post_ups_unique']}}%)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Post Downvotes</b></td>
|
||||
<td>{{data['u1_only_post_downs']}} ({{data['u1_post_downs_unique']}}%)</td>
|
||||
<td>{{data['both_post_downs']}}</td>
|
||||
<td>{{data['u2_only_post_downs']}} ({{data['u2_post_downs_unique']}}%)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Comment Upvotes</b></td>
|
||||
<td>{{data['u1_only_comment_ups']}} ({{data['u1_comment_ups_unique']}}%)</td>
|
||||
<td>{{data['both_comment_ups']}}</td>
|
||||
<td>{{data['u2_only_comment_ups']}} ({{data['u2_comment_ups_unique']}}%)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Comment Downvotes</b></td>
|
||||
<td>{{data['u1_only_comment_downs']}} ({{data['u1_comment_downs_unique']}}%)</td>
|
||||
<td>{{data['both_comment_downs']}}</td>
|
||||
<td>{{data['u2_only_comment_downs']}} ({{data['u2_comment_downs_unique']}}%)</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="p-5 flex flex-col rounded-md bg-gray-300 dark:bg-gray-700 shadow-inset-t-white-10 border border-gray-400 dark:border-gray-900">
|
||||
<h2 class="font-bold text-lg font-heading leading-normal mb-0 capitalize">
|
||||
Link Acocunts
|
||||
</h2>
|
||||
{% if u2 in u1.alts %}
|
||||
<p>Accounts are known alts of eachother.</p>
|
||||
{% else %}
|
||||
|
||||
<p>Two accounts controlled by different people should have most uniqueness percentages at or above 70-80%</p>
|
||||
<p>A sockpuppet account will have its uniqueness percentages significantly lower.</p>
|
||||
|
||||
<button class="btn btn-gray" onclick="document.getElementById('link-form').classList.toggle('hidden');">
|
||||
Link Accounts
|
||||
</button>
|
||||
|
||||
<form action="/admin/link_accounts" method="post" id="link-form" class="hidden mt-2">
|
||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||
<input type="hidden" name="u1" value="{{u1.id}}">
|
||||
<input type="hidden" name="u2" value="{{u2.id}}">
|
||||
<input type="submit" class="btn btn-red" value="Confirm Link: @{{u1.username}} and @{{u2.username}}">
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,66 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>API App Administration</title>
|
||||
<meta name="description" content="{{'SITE_NAME' | app_config}} Help">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full my-4">
|
||||
|
||||
<div class="settings-section rounded">
|
||||
<div class="d-lg-flex">
|
||||
<div class="title w-lg-25">
|
||||
<label for="over18">{{app.app_name}}</label>
|
||||
</div>
|
||||
<div class="body w-lg-100">
|
||||
<label for="edit-{{app.id}}-author" class="mb-0 w-lg-25">User</label>
|
||||
<input id="edit-{{app.id}}-author" class="form-control" type="text" name="name" value="{{app.author.username}}" readonly=readonly>
|
||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||
<label for="edit-{{app.id}}-name" class="mb-0 w-lg-25">App Name</label>
|
||||
<input id="edit-{{app.id}}-name" class="form-control" type="text" name="name" value="{{app.app_name}}" readonly=readonly>
|
||||
|
||||
|
||||
<label for="edit-{{app.id}}-redirect" class="mb-0 w-lg-25">Redirect URI</label>
|
||||
<input id="edit-{{app.id}}-redirect" class="form-control" type="text" name="redirect_uri" value="{{app.redirect_uri}}" readonly="readonly">
|
||||
<label for="edit-{{app.id}}-desc" class="mb-0 w-lg-25">Description</label>
|
||||
<textarea form="edit-app-{{app.id}}" class="form-control" name="description" id="edit-{{app.id}}-desc" maxlength="256" readonly="readonly">{{app.description}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="d-flex">
|
||||
{% if not app.client_id%}
|
||||
|
||||
<a href="javascript:void(0)" class="btn btn-primary ml-auto" onclick="post_toast('/admin/app/approve/{{app.id}}')">Approve</a>
|
||||
<a href="javascript:void(0)" class="btn btn-secondary mr-0" onclick="post_toast('/admin/app/reject/{{app.id}}')">Reject</a>
|
||||
|
||||
{% else %}
|
||||
|
||||
<a href="javascript:void(0)" class="btn btn-primary ml-auto" onclick="post_toast('/admin/app/revoke/{{app.id}}')">Revoke</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if listing %}
|
||||
{% include "CHRISTMAS/submission_listing.html" %}
|
||||
{% elif comments %}
|
||||
{% include "CHRISTMAS/comments.html" %}
|
||||
{% endif %}
|
||||
|
||||
</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-success text-center text-white">
|
||||
<i class="fas fa-comment-alt-smile mr-2"></i><span id="toast-post-success-text"></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-danger 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>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{% endblock %}
|
|
@ -1,98 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>API App Administration</title>
|
||||
<meta name="description" content="{{'SITE_NAME' | app_config}} Help">
|
||||
{% endblock %}
|
||||
|
||||
{% block subHeader %}
|
||||
<div class="relative max-w-screen-2xl mx-auto px-4 py-4 grid grid-cols-12 rounded-t">
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-gradient-to-t from-gray-300 to-gray-200 dark:bg-none dark:bg-gray-800 rounded-t sub-header-shadow dark:border-b dark:border-gray-700 sub-header"></div>
|
||||
<div class="relative col-span-full flex items-center">
|
||||
<div>
|
||||
<h1 class="font-bold text-xl font-heading leading-normal mb-0">
|
||||
API Access
|
||||
</h1>
|
||||
<ul class="flex space-x-2 text-xs text-gray-500 dark:text-gray-400 leading-normal mb-0">
|
||||
<li>
|
||||
<a href="/admin" class="text-gray-500 hover:underline">Admin Dashboard</a>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-arrow-alt-right text-shadow fa-fw fa-sm"></i>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="text-gray-700 dark:text-gray-500 hover:underline">API Access</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="ml-auto">
|
||||
<a href="https://github.com/Aevann1/Drama" class="btn btn-black">
|
||||
<i class="fab fa-github fa-sm fa-fw mr-1"></i>
|
||||
GitHub Repo
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full my-4">
|
||||
{% for app in apps %}
|
||||
<div class="flex flex-col space-y-4">
|
||||
<div class="d-lg-flex">
|
||||
<div class="text-lg mb-2 learding-normal">
|
||||
<label for="over18">
|
||||
<a href="{{app.permalink}}" {% if v and v.newtab %}target="_blank"{% endif %}>{{app.app_name}}</a>
|
||||
</label>
|
||||
</div>
|
||||
<div class="flex flex-col space-y-2">
|
||||
<label for="edit-{{app.id}}-author" class="label">User</label>
|
||||
<input id="edit-{{app.id}}-author" class="form-input" type="text" name="name" value="{{app.author.username}}" readonly=readonly>
|
||||
|
||||
<label for="edit-{{app.id}}-name" class="label">App Name</label>
|
||||
<input id="edit-{{app.id}}-name" class="form-input" type="text" name="name" value="{{app.app_name}}" readonly=readonly>
|
||||
|
||||
{% if app.client_id %}
|
||||
<label for="edit-{{app.id}}-client-id" class="label">Client ID</label>
|
||||
<input id="edit-{{app.id}}-client-id" class="form-input" type="text" name="name" value="{{app.client_id}}" readonly="readonly">
|
||||
{% endif %}
|
||||
|
||||
|
||||
<label for="edit-{{app.id}}-redirect" class="label">Redirect URI</label>
|
||||
<input id="edit-{{app.id}}-redirect" class="form-input" type="text" name="redirect_uri" value="{{app.redirect_uri}}" readonly="readonly">
|
||||
<label for="edit-{{app.id}}-desc" class="label">Description</label>
|
||||
<textarea form="edit-app-{{app.id}}" class="form-input" name="description" id="edit-{{app.id}}-desc" maxlength="256" readonly="readonly">{{app.description}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-2">
|
||||
<div class="flex">
|
||||
{% if not app.client_id %}
|
||||
|
||||
<a href="javascript:void(0)" class="btn btn-green ml-auto" onclick="post_toast('/admin/app/approve/{{app.id}}')">Approve</a>
|
||||
<a href="javascript:void(0)" class="btn btn-red" onclick="post_toast('/admin/app/reject/{{app.id}}')">Reject</a>
|
||||
|
||||
{% else %}
|
||||
|
||||
<a href="javascript:void(0)" class="btn btn-red ml-auto" onclick="post_toast('/admin/app/revoke/{{app.id}}')">Revoke</a>
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</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-success text-center text-white">
|
||||
<i class="fas fa-comment-alt-smile mr-2"></i><span id="toast-post-success-text"></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-danger 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>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{% endblock %}
|
|
@ -1,112 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>Grant User Award</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagetype %}message{% endblock %}
|
||||
|
||||
{% block subHeader %}
|
||||
<div class="relative max-w-screen-2xl mx-auto px-4 py-4 grid grid-cols-12 rounded-t">
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-gradient-to-t from-gray-300 to-gray-200 dark:bg-none dark:bg-gray-800 rounded-t sub-header-shadow dark:border-b dark:border-gray-700 sub-header"></div>
|
||||
<div class="relative col-span-full flex items-center">
|
||||
<div>
|
||||
<h1 class="font-bold text-xl font-heading leading-normal mb-0">
|
||||
Awards
|
||||
</h1>
|
||||
<ul class="flex space-x-2 text-xs text-gray-500 dark:text-gray-400 leading-normal mb-0">
|
||||
<li>
|
||||
<a href="/admin" class="text-gray-500 hover:underline">Admin Dashboard</a>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-arrow-alt-right text-shadow fa-fw fa-sm"></i>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="text-gray-700 dark:text-gray-500 hover:underline">Awards</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="ml-auto flex space-x-2">
|
||||
<button id="submit-btn" type="submit" form="awards-form" class="btn btn-green" disabled>
|
||||
<i class="fas fa-trophy fa-sm fa-fw mr-1"></i>
|
||||
Give awards
|
||||
</button>
|
||||
{% if request.host != 'rdrama.net' or v.admin_level > 2 %}
|
||||
<button onclick="post_toast('/admin/monthly')" class="btn btn-yellow">
|
||||
<i class="fas fa-dollar-sign fa-sm fa-fw mr-1"></i>
|
||||
Grant monthly MarseyBux
|
||||
</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full my-4">
|
||||
|
||||
{% if error %}
|
||||
<div class="alert alert-danger alert-dismissible fade show my-3" role="alert">
|
||||
<i class="fas fa-exclamation-circle my-auto"></i>
|
||||
<span>
|
||||
{{error}}
|
||||
</span>
|
||||
<button type="button" class="close" data-bs-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true"><i class="far fa-times"></i></span>
|
||||
</button>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if msg %}
|
||||
<div class="alert alert-success alert-dismissible fade show my-3" role="alert">
|
||||
<i class="fas fa-check-circle my-auto" aria-hidden="true"></i>
|
||||
<span>
|
||||
{{msg}}
|
||||
</span>
|
||||
<button type="button" class="close" data-bs-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true"><i class="far fa-times"></i></span>
|
||||
</button>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<form id="awards-form" action="/admin/awards" method="post">
|
||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||
<label for="input-username" class="label">Username</label>
|
||||
<input autocomplete="off" id="input-username" class="form-input mb-2" type="text" name="username" required placeholder="Enter a username" oninput="document.getElementById('submit-btn').disabled = false">
|
||||
|
||||
<table class="w-full mt-6">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th scope="col" class="p-2.5">Icon</th>
|
||||
<th scope="col" class="p-2.5">Title</th>
|
||||
<th scope="col" class="p-2.5"></th>
|
||||
<th scope="col" class="p-2.5"></th>
|
||||
<th scope="col" class="p-2.5"></th>
|
||||
<th scope="col" class="p-2.5"></th>
|
||||
<th scope="col" class="p-2.5">Amount</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for a in awards %}
|
||||
<tr class="odd:bg-gray-300 dark:odd:bg-white/[.05] hover:bg-gray-400 dark:hover:bg-white/10 hover:cursor-pointer">
|
||||
<td class="px-2.5">
|
||||
<div class="w-16 h-16 p-2 flex items-center justify-center">
|
||||
<i class="{{a['icon']}} {{a['color']}} text-xl"></i>
|
||||
</div>
|
||||
</td>
|
||||
<td class="px-2.5 font-bold">
|
||||
{{a['title']}}
|
||||
</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td class="px-2.5">
|
||||
<input type="number" class="form-input" name="{{a['kind']}}" value="0" min="0" max="10" placeholder="Enter amount..." >
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,125 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>Badge Grant</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagetype %}message{% endblock %}
|
||||
|
||||
{% block subHeader %}
|
||||
<div class="relative max-w-screen-2xl mx-auto px-4 py-4 grid grid-cols-12 rounded-t">
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-gradient-to-t from-gray-300 to-gray-200 dark:bg-none dark:bg-gray-800 rounded-t sub-header-shadow dark:border-b dark:border-gray-700 sub-header"></div>
|
||||
<div class="relative col-span-full flex items-center">
|
||||
<div>
|
||||
<h1 class="font-bold text-xl font-heading leading-normal mb-0">
|
||||
Badge Grant
|
||||
</h1>
|
||||
<ul class="flex space-x-2 text-xs text-gray-500 dark:text-gray-400 leading-normal mb-0">
|
||||
<li>
|
||||
<a href="/admin" class="text-gray-500 hover:underline">Admin Dashboard</a>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-arrow-alt-right text-shadow fa-fw fa-sm"></i>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="text-gray-700 dark:text-gray-500 hover:underline">Badge Grant</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="ml-auto">
|
||||
<button type="submit" form="badge-grant-form" class="btn btn-green">
|
||||
<i class="fas fa-badge fa-sm fa-fw mr-1"></i>
|
||||
Give badge
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full my-2 px-2.5 md:px-0">
|
||||
|
||||
{% if error %}
|
||||
<div class="alert alert-danger alert-dismissible fade show my-3" role="alert">
|
||||
<i class="fas fa-exclamation-circle my-auto"></i>
|
||||
<span>
|
||||
{{error}}
|
||||
</span>
|
||||
<button type="button" class="close" data-bs-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true"><i class="far fa-times"></i></span>
|
||||
</button>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if msg %}
|
||||
<div class="alert alert-success alert-dismissible fade show my-3" role="alert">
|
||||
<i class="fas fa-check-circle my-auto" aria-hidden="true"></i>
|
||||
<span>
|
||||
{{msg}}
|
||||
</span>
|
||||
<button type="button" class="close" data-bs-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true"><i class="far fa-times"></i></span>
|
||||
</button>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
|
||||
<form id="badge-grant-form" action="/admin/badge_grant" method="post">
|
||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||
|
||||
<label for="input-username" class="label">Username</label>
|
||||
<input autocomplete="off" id="input-username" class="form-input mb-2" type="text" name="username" required placeholder="Enter a username">
|
||||
|
||||
<label for="input-url" class="label">URL</label>
|
||||
<input id="input-url" class="form-input mb-2" type="text" name="url" placeholder="Optional">
|
||||
|
||||
<label for="input-description" class="label">Custom description</label>
|
||||
<textarea id="input-description" class="form-input" name="description" placeholder="Leave blank for badge's default desription."></textarea>
|
||||
|
||||
<table class="w-full table table-striped mt-6">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th scope="col" class="p-2.5">Select</th>
|
||||
<th scope="col" class="p-2.5">Image</th>
|
||||
<th scope="col" class="p-2.5">Name</th>
|
||||
<th scope="col" class="p-2.5">Default Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for k, v in badge_types.items() %}
|
||||
<tr class="odd:bg-gray-300 dark:odd:bg-white/[.05] hover:bg-gray-400 dark:hover:bg-white/10 hover:cursor-pointer" onclick="selectCheckbox('badge-{{k}}')">
|
||||
<td class="px-2.5" tabindex="1">
|
||||
<input type="radio" id="badge-{{k}}" name="badge_id" value="{{k}}" class="pointer-events-none">
|
||||
</td>
|
||||
<td class="px-2.5">
|
||||
<img loading="lazy" src="/assets/CHRISTMAS/images/badges/{{v['name']}}.webp?a=1" class="object-contain w-16 h-16 p-2" alt="{{v['name']}} badge"/>
|
||||
</td>
|
||||
<td class="px-2.5 font-bold">{{v['name']}}</td>
|
||||
<td class="px-2.5 text-gray-700 dark:text-gray-500">{{v['description']}}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<style>
|
||||
@media (max-width: 767.98px) {
|
||||
table {
|
||||
display: inline-block;
|
||||
overflow: auto;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
<script>
|
||||
function selectCheckbox(id) {
|
||||
const el = document.getElementById(id);
|
||||
el.checked = !el.checked;
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
|
@ -1,78 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>Banned Domains</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block subHeader %}
|
||||
<div class="relative max-w-screen-2xl mx-auto px-4 py-4 grid grid-cols-12 rounded-t">
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-gradient-to-t from-gray-300 to-gray-200 dark:bg-none dark:bg-gray-800 rounded-t sub-header-shadow dark:border-b dark:border-gray-700 sub-header"></div>
|
||||
<div class="relative col-span-full flex items-center">
|
||||
<div>
|
||||
<h1 class="font-bold text-xl font-heading leading-normal mb-0">
|
||||
Banned Domains
|
||||
</h1>
|
||||
<ul class="flex space-x-2 text-xs text-gray-500 dark:text-gray-400 leading-normal mb-0">
|
||||
<li>
|
||||
<a href="/admin" class="text-gray-500 hover:underline">Admin Dashboard</a>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-arrow-alt-right text-shadow fa-fw fa-sm"></i>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="text-gray-700 dark:text-gray-500 hover:underline">Banned Domains</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full my-4 px-2.5 md:px-0">
|
||||
|
||||
<form action="/admin/banned_domains" method="post" class="p-5 flex flex-col rounded-md bg-gray-300 dark:bg-gray-700 shadow-inset-t-white-10 border border-gray-400 dark:border-gray-900">
|
||||
<label class="label">
|
||||
Manage a domain
|
||||
</label>
|
||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||
<div class="w-full flex space-x-2 items-center">
|
||||
<input name="domain" placeholder="Enter domain here.." class="form-input" required>
|
||||
<input name="reason" placeholder="Enter ban reason here..." oninput="document.getElementById('ban-submit').disabled=false" class="form-input" required>
|
||||
<input id="ban-submit" type="submit" class="btn btn-red" value="Toggle ban" disabled>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{% if banned_domains %}
|
||||
<table class="w-full table mt-6">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th scope="col" class="p-2.5">Domain</th>
|
||||
<th scope="col" class="p-2.5">Ban reason</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for domain in banned_domains %}
|
||||
<tr class="h-16 odd:bg-gray-300 dark:odd:bg-white/[.05] hover:bg-gray-400 dark:hover:bg-white/10">
|
||||
<td class="px-2.5 font-bold">
|
||||
{{domain.domain}}
|
||||
</td>
|
||||
<td class="px-2.5">{{domain.reason}}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% 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">No banned domains</h2>
|
||||
<p class="text-gray-500 text-sm">
|
||||
When a domain is banned, it will show up here.
|
||||
</p>
|
||||
<a href="/admin" class="mt-3 btn btn-gray">
|
||||
Go to admin dashboard
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,53 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>{{'SITE_NAME' | app_config}}</title>
|
||||
<meta name="description" content="{{'SITE_NAME' | app_config}} Help">
|
||||
{% endblock %}
|
||||
|
||||
{% block subHeader %}
|
||||
<div class="relative max-w-screen-2xl mx-auto px-4 py-4 grid grid-cols-12 rounded-t">
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-gradient-to-t from-gray-300 to-gray-200 dark:bg-none dark:bg-gray-800 rounded-t sub-header-shadow dark:border-b dark:border-gray-700 sub-header"></div>
|
||||
<div class="relative col-span-full flex items-center">
|
||||
<div>
|
||||
<h1 class="font-bold text-xl font-heading leading-normal mb-0">
|
||||
Content Stats
|
||||
</h1>
|
||||
<ul class="flex space-x-2 text-xs text-gray-500 dark:text-gray-400 leading-normal mb-0">
|
||||
<li>
|
||||
<a href="/admin" class="text-gray-500 hover:underline">Admin Dashboard</a>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-arrow-alt-right text-shadow fa-fw fa-sm"></i>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="text-gray-700 dark:text-gray-500 hover:underline">Content Stants</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full my-4 px-2.5 md:px-0">
|
||||
<div class="overflow-x-auto">
|
||||
<table class="w-full table mb-5">
|
||||
<thead class="bg-primary text-white shadow-inset-t-white-10">
|
||||
<tr>
|
||||
<th scope="col" class="p-2.5">Statistic</th>
|
||||
<th scope="col" class="p-2.5">Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for entry in data %}
|
||||
<tr class="h-16 odd:bg-gray-300 dark:odd:bg-white/[.05] hover:bg-gray-400 dark:hover:bg-white/10">
|
||||
<td class="px-2.5">{{entry}}</td>
|
||||
<td class="px-2.5 font-bold">{{data[entry]}}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,61 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>Image feed</title>
|
||||
<meta name="description" content="on {{'SITE_NAME' | app_config}}">
|
||||
{% endblock %}
|
||||
|
||||
{% block subHeader %}
|
||||
<div class="relative max-w-screen-2xl mx-auto px-4 py-4 grid grid-cols-12 rounded-t">
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-gradient-to-t from-gray-300 to-gray-200 dark:bg-none dark:bg-gray-800 rounded-t sub-header-shadow dark:border-b dark:border-gray-700 sub-header"></div>
|
||||
<div class="relative col-span-full flex items-center">
|
||||
<div>
|
||||
<h1 class="font-bold text-xl font-heading leading-normal mb-0">
|
||||
Image Posts
|
||||
</h1>
|
||||
<ul class="flex space-x-2 text-xs text-gray-500 dark:text-gray-400 leading-normal mb-0">
|
||||
<li>
|
||||
<a href="/admin" class="text-gray-500 hover:underline">Admin Dashboard</a>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-arrow-alt-right text-shadow fa-fw fa-sm"></i>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="text-gray-700 dark:text-gray-500 hover:underline">Image Posts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full xl:col-span-9 dark:bg-gray-700 md:dark:bg-gray-800">
|
||||
{% block listing %}
|
||||
<ul class="flex flex-col sm:py-4 my-2.5 sm:my-0" id="posts">
|
||||
{% include "CHRISTMAS/submission_listing.html" %}
|
||||
</ul>
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagenav %}
|
||||
<nav aria-label="Page navigation">
|
||||
<ul class="pagination pagination-sm py-3 pl-3 mb-0">
|
||||
{% if page>1 %}
|
||||
<li class="page-item">
|
||||
<small><a class="page-link" href="?page={{page-1}}" tabindex="-1">Prev</a></small>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item disabled"><span class="page-link">Prev</span></li>
|
||||
{% endif %}
|
||||
{% if next_exists %}
|
||||
<li class="page-item">
|
||||
<small><a class="page-link" href="?page={{page+1}}">Next</a></small>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item disabled"><span class="page-link">Next</span></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</nav>
|
||||
{% endblock %}
|
|
@ -1,11 +0,0 @@
|
|||
{% extends "CHRISTMAS/mine.html" %}
|
||||
|
||||
{% block maincontent %}
|
||||
<img loading="lazy" src="{{single_plot}}">
|
||||
<img loading="lazy" src="{{multi_plot}}">
|
||||
<div class="flex flex-wrap -mx-2 overflow-hidden">
|
||||
{% include "CHRISTMAS/user_listing.html" %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block navbar %}{% endblock %}
|
|
@ -1,21 +0,0 @@
|
|||
{% extends "CHRISTMAS/admin/removed_posts.html" %}
|
||||
|
||||
{% block listing %}
|
||||
<div class="col-span-full px-2.5 md:px-0">
|
||||
{% with comments=listing %}
|
||||
{% include "CHRISTMAS/comments.html" %}
|
||||
{% endwith %}
|
||||
{% if not listing %}
|
||||
<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">No removed comments</h2>
|
||||
<p class="text-gray-500 text-sm">
|
||||
When mods remove a comment, it will show up here.
|
||||
</p>
|
||||
<a href="/admin" class="mt-3 btn btn-gray">
|
||||
Go to admin dashboard
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,87 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block pagetype %}userpage{% endblock %}
|
||||
|
||||
{% block title %}
|
||||
<title>Reported Posts</title>
|
||||
<meta name="description" content="on {{'SITE_NAME' | app_config}}">
|
||||
{% endblock %}
|
||||
|
||||
{% block subHeader %}
|
||||
<div class="relative max-w-screen-2xl mx-auto px-4 py-4 grid grid-cols-12 rounded-t">
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-gradient-to-t from-gray-300 to-gray-200 dark:bg-none dark:bg-gray-800 rounded-t sub-header-shadow dark:border-b dark:border-gray-700 sub-header"></div>
|
||||
<div class="relative col-span-full flex items-center">
|
||||
<div>
|
||||
<h1 class="font-bold text-xl font-heading leading-normal mb-0">
|
||||
Removed Content
|
||||
</h1>
|
||||
<ul class="flex space-x-2 text-xs text-gray-500 dark:text-gray-400 leading-normal mb-0">
|
||||
<li>
|
||||
<a href="/admin" class="text-gray-500 hover:underline">Admin Dashboard</a>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-arrow-alt-right text-shadow fa-fw fa-sm"></i>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="text-gray-700 dark:text-gray-500 hover:underline">Removed Content</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="ml-auto">
|
||||
<div class="dropdown">
|
||||
<button class="block px-4 py-2 bg-gradient-to-t from-gray-200 to-gray-100 focus:from-gray-100 focus:to-gray-200 border border-gray-300 rounded-md text-shadow shadow-inset-t-white-10 text-sm font-bold text-gray-700 focus:text-gray-900 focus:shadow-inner focus:outline-none dropdown-toggle" type="button" id="dropdownAdminReportSortsButton" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
{% if request.path=="/admin/removed/posts" %}
|
||||
<i class="fas fa-pencil text-gray-500 fa-sm fa-fw mr-1"></i>Posts
|
||||
{% endif %}
|
||||
{% if request.path=="/admin/removed/comments" %}
|
||||
<i class="fas fa-comment-alt text-gray-500 fa-sm fa-fw mr-1"></i>Comments
|
||||
{% endif %}
|
||||
</button>
|
||||
<ul class="dropdown-menu w-56 bg-gray-900 rounded-md shadow-lg" aria-labelledby="dropdownAdminReportSortsButton" x-placement="bottom-start">
|
||||
<li class="{% if request.path=="/admin/removed/posts" %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="/admin/removed/posts">
|
||||
<i class="fas fa-pencil fa-sm fa-fw mr-4"></i>Posts
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if request.path=="/admin/removed/comments" %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="/admin/removed/comments">
|
||||
<i class="fas fa-comment-alt fa-sm fa-fw mr-4"></i>Comments
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full xl:col-span-9 dark:bg-gray-700 md:dark:bg-gray-800">
|
||||
{% block listing %}
|
||||
<ul class="flex flex-col sm:py-4 my-2.5 sm:my-0" id="posts">
|
||||
{% include "CHRISTMAS/submission_listing.html" %}
|
||||
</ul>
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagenav %}
|
||||
<nav aria-label="Page navigation">
|
||||
<ul class="pagination pagination-sm py-3 pl-3 mb-0">
|
||||
{% if page>1 %}
|
||||
<li class="page-item">
|
||||
<small><a class="page-link" href="?page={{page-1}}" tabindex="-1">Prev</a></small>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item disabled"><span class="page-link">Prev</span></li>
|
||||
{% endif %}
|
||||
{% if next_exists %}
|
||||
<li class="page-item">
|
||||
<small><a class="page-link" href="?page={{page+1}}">Next</a></small>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item disabled"><span class="page-link">Next</span></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</nav>
|
||||
{% endblock %}
|
|
@ -1,22 +0,0 @@
|
|||
{% extends "CHRISTMAS/admin/reported_posts.html" %}
|
||||
|
||||
{% block listing %}
|
||||
<div class="col-span-full px-2.5 md:px-0">
|
||||
{% with comments=listing %}
|
||||
{% include "CHRISTMAS/comments.html" %}
|
||||
{% endwith %}
|
||||
{% if not listing %}
|
||||
<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">No reported comments</h2>
|
||||
<p class="text-gray-500 text-sm">
|
||||
When someone reports a comment, it will show up here.
|
||||
</p>
|
||||
<a href="/admin" class="mt-3 btn btn-gray">
|
||||
Go to admin dashboard
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
@ -1,87 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block pagetype %}userpage{% endblock %}
|
||||
|
||||
{% block title %}
|
||||
<title>Reported Posts</title>
|
||||
<meta name="description" content="on {{'SITE_NAME' | app_config}}">
|
||||
{% endblock %}
|
||||
|
||||
{% block subHeader %}
|
||||
<div class="relative max-w-screen-2xl mx-auto px-4 py-4 grid grid-cols-12 rounded-t">
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-gradient-to-t from-gray-300 to-gray-200 dark:bg-none dark:bg-gray-800 rounded-t sub-header-shadow dark:border-b dark:border-gray-700 sub-header"></div>
|
||||
<div class="relative col-span-full flex items-center">
|
||||
<div>
|
||||
<h1 class="font-bold text-xl font-heading leading-normal mb-0">
|
||||
Reports
|
||||
</h1>
|
||||
<ul class="flex space-x-2 text-xs text-gray-500 dark:text-gray-400 leading-normal mb-0">
|
||||
<li>
|
||||
<a href="/admin" class="text-gray-500 hover:underline">Admin Dashboard</a>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-arrow-alt-right text-shadow fa-fw fa-sm"></i>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="text-gray-700 dark:text-gray-500 hover:underline">Reports</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="ml-auto">
|
||||
<div class="dropdown">
|
||||
<button class="block px-4 py-2 bg-gradient-to-t from-gray-200 to-gray-100 focus:from-gray-100 focus:to-gray-200 border border-gray-300 rounded-md text-shadow shadow-inset-t-white-10 text-sm font-bold text-gray-700 focus:text-gray-900 focus:shadow-inner focus:outline-none dropdown-toggle" type="button" id="dropdownAdminReportSortsButton" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
{% if request.path=="/admin/reported/posts" %}
|
||||
<i class="fas fa-pencil text-gray-500 fa-sm fa-fw mr-1"></i>Posts
|
||||
{% endif %}
|
||||
{% if request.path=="/admin/reported/comments" %}
|
||||
<i class="fas fa-comment-alt text-gray-500 fa-sm fa-fw mr-1"></i>Comments
|
||||
{% endif %}
|
||||
</button>
|
||||
<ul class="dropdown-menu w-56 bg-gray-900 rounded-md shadow-lg" aria-labelledby="dropdownAdminReportSortsButton" x-placement="bottom-start">
|
||||
<li class="{% if request.path=="/admin/reported/posts" %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="/admin/reported/posts">
|
||||
<i class="fas fa-pencil fa-sm fa-fw mr-4"></i>Posts
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if request.path=="/admin/reported/comments" %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="/admin/reported/comments">
|
||||
<i class="fas fa-comment-alt fa-sm fa-fw mr-4"></i>Comments
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full xl:col-span-9 dark:bg-gray-700 md:dark:bg-gray-800">
|
||||
{% block listing %}
|
||||
<ul class="flex flex-col sm:py-4 my-2.5 sm:my-0" id="posts">
|
||||
{% include "CHRISTMAS/submission_listing.html" %}
|
||||
</ul>
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagenav %}
|
||||
<nav aria-label="Page navigation">
|
||||
<ul class="pagination pagination-sm py-3 pl-3 mb-0">
|
||||
{% if page>1 %}
|
||||
<li class="page-item">
|
||||
<small><a class="page-link" href="?page={{page-1}}" tabindex="-1">Prev</a></small>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item disabled"><span class="page-link">Prev</span></li>
|
||||
{% endif %}
|
||||
{% if next_exists %}
|
||||
<li class="page-item">
|
||||
<small><a class="page-link" href="?page={{page+1}}">Next</a></small>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item disabled"><span class="page-link">Next</span></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</nav>
|
||||
{% endblock %}
|
|
@ -1,31 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block pagetitle %}Edit {{'SITE_NAME' | app_config}} rules{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="row my-5">
|
||||
<div class="col col-md-8">
|
||||
<div class="settings">
|
||||
<div id="description">
|
||||
<h2>Edit rules</h2>
|
||||
<p>Your rules page will be publicly visible at <a href="/rules">{{'/rules'|full_link}}</a>.</p>
|
||||
<p class="text-small text-muted">Supports <a href="https://www.markdownguide.org/basic-syntax">markdown syntax</a>.</p>
|
||||
</div>
|
||||
<div class="body d-lg-flex">
|
||||
<div class="w-lg-100">
|
||||
<form id="profile-settings" action="/admin/rules" method="post">
|
||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||
<textarea maxlength="10000" class="form-control rounded" id="bio-text" aria-label="With textarea" placeholder="Site rules" rows="50" name="rules" form="profile-settings">{% if rules %}{{ rules }}{% endif %}</textarea>
|
||||
|
||||
<div class="d-flex mt-2">
|
||||
<input class="btn btn-primary ml-auto" type="submit" value="Save">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -1,41 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block pagetitle %}Edit {{'SITE_NAME' | app_config}} sidebar{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% if msg %}
|
||||
<div class="alert alert-success alert-dismissible fade show my-3" role="alert">
|
||||
<i class="fas fa-check-circle my-auto" aria-hidden="true"></i>
|
||||
<span>
|
||||
{{msg}}
|
||||
</span>
|
||||
<button role="button" class="close" data-bs-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true"><i class="far fa-times"></i></span>
|
||||
</button>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="row my-5">
|
||||
<div class="col col-md-8">
|
||||
<div class="settings">
|
||||
<div id="description">
|
||||
<h2>Edit sidebar</h2>
|
||||
<br>
|
||||
</div>
|
||||
<div class="body d-lg-flex">
|
||||
<div class="w-lg-100">
|
||||
<form id="profile-settings" action="/admin/sidebar" method="post">
|
||||
<input autocomplete="off" type="hidden" name="formkey" value="{{v.formkey}}">
|
||||
<textarea autocomplete="off" maxlength="10000" class="form-control rounded" id="bio-text" aria-label="With textarea" placeholder="Site sidebar" rows="50" name="sidebar" form="profile-settings">{% if sidebar %}{{ sidebar }}{% endif %}</textarea>
|
||||
|
||||
<div class="d-flex mt-2">
|
||||
<input autocomplete="off" class="btn btn-primary ml-auto" type="submit" value="Save">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -1,31 +0,0 @@
|
|||
{% extends "CHRISTMAS/settings2.html" %}
|
||||
|
||||
{% block pagetitle %}Admins{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<pre class="hidden md:inline-block"></pre>
|
||||
<h5 style="font-weight:bold;">Admins</h5>
|
||||
<pre></pre>
|
||||
<table class="table table-striped mb-5">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th class="font-bold">Name</th>
|
||||
<th class="font-bold text-right">Truescore</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for user in admins %}
|
||||
<tr>
|
||||
<td>
|
||||
<a class="font-bold" style="color:#{{user.namecolor}}" href="/@{{user.username}}">
|
||||
<img loading="lazy" src="/uid/{{user.id}}/pic" class="w-12 h-12 object-cover rounded"/>
|
||||
<span {% if user.patron %}class="patron" style="background-color:#{{user.namecolor}};"{% endif %}>{{user.username}}</span>
|
||||
</a>
|
||||
{% if user.admin_level == 1 and v and v.admin_level > 1 %}
|
||||
<i class="fas fa-broom align-middle ml-2 color-white" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Meme Admin"></i>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="font-bold text-right">{{user.truecoins}}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endblock %}
|
|
@ -1,72 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block subHeader %}
|
||||
<div class="relative max-w-screen-2xl mx-auto px-4 py-4 grid grid-cols-12 rounded-t">
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-gradient-to-t from-gray-300 to-gray-200 dark:bg-none dark:bg-gray-800 rounded-t sub-header-shadow dark:border-b dark:border-gray-700 sub-header"></div>
|
||||
<div class="relative col-span-full flex items-center">
|
||||
<div>
|
||||
<h1 class="font-bold text-xl font-heading leading-normal mb-0">
|
||||
Agenda Posters
|
||||
</h1>
|
||||
<ul class="flex space-x-2 text-xs text-gray-500 dark:text-gray-400 leading-normal mb-0">
|
||||
{% if v and v.admin_level > 2 %}
|
||||
<li>
|
||||
<a href="/admin" class="text-gray-500 hover:underline">Admin Dashboard</a>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-arrow-alt-right text-shadow fa-fw fa-sm"></i>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a href="#" class="text-gray-700 dark:text-gray-500 hover:underline">Agenda Posters</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full my-4 px-2.5 md:px-0">
|
||||
{% if users %}
|
||||
<table class="w-full table">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th scope="col" class="p-2.5">#</th>
|
||||
<th scope="col" class="p-2.5">Name</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for user in users %}
|
||||
<tr class="h-16 odd:bg-gray-300 dark:odd:bg-white/[.05] hover:bg-gray-400 dark:hover:bg-white/10">
|
||||
<td class="px-2.5 font-bold">{{loop.index}}</td>
|
||||
<td class="px-2.5">
|
||||
<a style="color:#{{user.namecolor}}; font-weight:bold;" href="/@{{user.username}}">
|
||||
<img loading="lazy" src="/uid/{{user.id}}/pic" class="pp20">
|
||||
<span {% if user.patron %}class="patron" style="background-color:#{{user.namecolor}};"{% endif %}>{{user.username}}</span>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% 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">No agenda posters</h2>
|
||||
<p class="text-gray-500 text-sm">
|
||||
When users have active agenda poster theme, it will show up here.
|
||||
</p>
|
||||
{% if v and v.admin_level > 2 %}
|
||||
<a href="/admin" class="mt-3 btn btn-gray">
|
||||
Go to admin dashboard
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/" class="mt-3 btn btn-gray">
|
||||
Go to homepage
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,82 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>{{'SITE_NAME' | app_config}} - API</title>
|
||||
<meta name="description" content="{{'SITE_NAME' | app_config}} API Guide">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<pre>
|
||||
|
||||
|
||||
</pre>
|
||||
<h1>API Guide for Bots</h1>
|
||||
<pre></pre>
|
||||
<p>This page explains how to obtain and use an access token. </p>
|
||||
<h2>Step 1: Create your Application</h2>
|
||||
<p>In the <a href="/settings/apps">apps tab of Drama settings</a>, fill in and submit the form to request an access token. You will need:</p>
|
||||
<ul>
|
||||
<li>an application name</li>
|
||||
<li>a Redirect URI. May not use HTTP unless using localhost (use HTTPS instead).</li>
|
||||
<li>a brief description of what your bot is intended to do</li>
|
||||
</ul>
|
||||
<p>Don't worry too much about accuracy; you will be able to change all of these later.</p>
|
||||
<p>Drama administrators will review and approve or deny your request for an access token. You'll know when your request has been approved when you get a private message with an access token tied to your account.</p>
|
||||
<p>DO NOT reveal your Client ID or Access Token. Anyone with these information will be able to pretend to be you. You are responsible for keeping them a secret!</p>
|
||||
<h2>Step 2: Using the Access Token</h2>
|
||||
<p>To use the access token, include the following header in subsequent API requests to Drama: <code>Authorization: access_token_goes_here</code></p>
|
||||
<p>Python example:</p>
|
||||
<pre> import requests
|
||||
|
||||
headers={"Authorization": "access_token_goes_here"}
|
||||
|
||||
url="https://rdrama.net/@carpathianflorist"
|
||||
|
||||
r=requests.get(url, headers=headers)
|
||||
|
||||
print(r.json())
|
||||
</pre>
|
||||
<p>The expected result of this would be a large JSON representation of the posts posted by @carpathianflorist</p>
|
||||
<pre>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</pre>
|
||||
<h1>API Guide for Applications</h1>
|
||||
<pre></pre>
|
||||
<p>The OAuth2 authorization flow is used to enable users to authorize third-party applications to access their Drama account without having to provide their login information to the application.</p>
|
||||
<p>This page explains how to obtain API application keys, how to prompt a user for authorization, and how to obtain and use access tokens. </p>
|
||||
<h2>Step 1: Create your Application</h2>
|
||||
<p>In the <a href="/settings/apps">apps tab of Drama settings</a>, fill in and submit the form to request new API keys. You will need:</p>
|
||||
<ul>
|
||||
<li>an application name</li>
|
||||
<li>a Redirect URI. May not use HTTP unless using localhost (use HTTPS instead).</li>
|
||||
<li>a brief description of what your application is intended to do</li>
|
||||
</ul>
|
||||
<p>Don't worry too much about accuracy; you will be able to change all of these later.</p>
|
||||
<p>Drama administrators will review and approve or deny your request for API keys. You'll know when your request has been approved when you get a private message with an access token tied to your account.</p>
|
||||
<p>DO NOT reveal your Client ID or Access Token. Anyone with these information will be able to pretend to be you. You are responsible for keeping them a secret!</p>
|
||||
<h2>Step 2: Prompt Your User for Authorization</h2>
|
||||
<p>Send your user to <code>https://rdrama.net/authorize/?client_id=YOUR_CLIENT_ID</code></p>
|
||||
<p>If done correctly, the user will see that your application wants to access their Drama account, and be prompted to approve or deny the request.</p>
|
||||
<h2>Step 3: Catch the redirect</h2>
|
||||
<p>The user clicks "Authorize". Drama will redirect the user's browser to GET the designated redirect URI. The access token URL parameter will be included in the redirect, which your server should process.</p>
|
||||
<h2>Step 4: Using the Access Token</h2>
|
||||
<p>To use the access token, include the following header in subsequent API requests to Drama: <code>Authorization: access_token_goes_here</code></p>
|
||||
<p>Python example:</p>
|
||||
<pre> import requests
|
||||
|
||||
headers={"Authorization": "access_token_goes_here"}
|
||||
|
||||
url="https://rdrama.net/@carpathianflorist"
|
||||
|
||||
r=requests.get(url, headers=headers)
|
||||
|
||||
print(r.json())
|
||||
</pre>
|
||||
<p>The expected result of this would be a large JSON representation of the submissions submitted by @carpathianflorist</p>
|
||||
{% endblock %}
|
|
@ -1,103 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; connect-src 'self'; object-src 'none';">
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="{% block pagedesc %}{{'SITE_NAME' | app_config}}{% endblock %}">
|
||||
<meta name="author" content="">
|
||||
|
||||
<title>{% block pagetitle %}{{'SITE_NAME' | app_config}}{% endblock %}</title>
|
||||
|
||||
|
||||
{% if v %}
|
||||
<style>:root{--primary:#{{v.themecolor}}}</style>
|
||||
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?a=2"><link rel="stylesheet" href="/assets/CHRISTMAS/css/{{v.theme}}.css?a=1">
|
||||
{% if v.agendaposter %}<link rel="stylesheet" href="/assets/CHRISTMAS/css/agendaposter.css?a=1">{% elif v.css %}<link rel="stylesheet" href="/@{{v.username}}/css">{% endif %}
|
||||
{% else %}
|
||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?a=2"><link rel="stylesheet" href="/assets/CHRISTMAS/css/{{'DEFAULT_THEME' | app_config}}.css?a=1">
|
||||
{% endif %}
|
||||
|
||||
</head>
|
||||
|
||||
<body id="login">
|
||||
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-transparent fixed-top border-0">
|
||||
<div class="container-fluid">
|
||||
<button class="navbar-toggler d-none" type="button" data-bs-toggle="collapse" data-bs-target="#navbarResponsive"
|
||||
aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="container-fluid position-absolute h-100 p-0">
|
||||
<div class="row no-gutters h-100">
|
||||
|
||||
<div class="col-12 col-md-6 my-auto p-3">
|
||||
|
||||
<div class="row justify-content-center">
|
||||
|
||||
<div class="col-10 col-md-7">
|
||||
|
||||
<div class="mb-5">
|
||||
<a href="/" class="text-decoration-none"><span class="h3 text-primary">{{'SITE_NAME' | app_config}}</span></a>
|
||||
</div>
|
||||
|
||||
<h1 class="h2">{% block authtitle %}{% endblock %}</h1>
|
||||
|
||||
<p class="text-muted mb-md-5">{% block authtext %}{% endblock %}</p>
|
||||
|
||||
{% if error %}
|
||||
<div class="alert alert-danger alert-dismissible fade show d-flex my-3" role="alert">
|
||||
<i class="fas fa-exclamation-circle my-auto"></i>
|
||||
<span>
|
||||
{{error}}
|
||||
</span>
|
||||
<button type="button" class="close" data-bs-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true"><i class="far fa-times"></i></span>
|
||||
</button>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if msg %}
|
||||
<div class="alert alert-success alert-dismissible fade show d-flex my-3" role="alert">
|
||||
<i class="fas fa-info-circle my-auto" aria-hidden="true"></i>
|
||||
<span>
|
||||
{{msg}}
|
||||
</span>
|
||||
<button type="button" class="close" data-bs-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true"><i class="far fa-times"></i></span>
|
||||
</button>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-md-6 d-none d-md-block">
|
||||
|
||||
<div class="splash-wrapper">
|
||||
|
||||
<div class="splash-overlay"></div>
|
||||
|
||||
<img loading="lazy" class="splash-img" src="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/cover.webp?a=1"></img>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -1,47 +0,0 @@
|
|||
<script src="/assets/CHRISTMAS/js/award_modal.js?a=1"></script>
|
||||
|
||||
<div class="modal fade" id="awardModal" tabindex="-1" role="dialog" aria-labelledby="awardModalTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-scrollable modal-dialog-centered" role="document">
|
||||
<div class="modal-content 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">Gift Award</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 id="awardModalBody" class="overflow-y-auto px-4">
|
||||
<form id="awardTarget" action="" method="post">
|
||||
<input type="hidden" name="formkey", value="{{v.formkey}}">
|
||||
<div class="flex flex-wrap -mx-4 overflow-hidden">
|
||||
{% for award in v.user_awards %}
|
||||
<div class="my-4 px-4 w-1/2 overflow-hidden lg:w-1/4 flex items-center justify-center">
|
||||
{% if award.owned %}
|
||||
<input hidden name="kind" value="{{award.kind}}" type="radio" id="{{award.kind}}-award" class="peer" onchange="checkAward(this.value)">
|
||||
<label for="{{award.kind}}-award" onclick="document.getElementById('giveaward').disabled=false;" class="w-full h-full p-2 text-center hover:bg-gray-300 peer-checked:shadow-inner peer-checked:bg-gray-400 rounded">
|
||||
{% else %}
|
||||
<input hidden name="kind" value="{{award.kind}}" type="radio" id="{{award.kind}}-award" class="peer" disabled>
|
||||
<label for="{{award.kind}}-award" onclick="document.getElementById('giveaward').disabled=false" class="w-full h-full p-2 text-center hover:bg-gray-300 peer-checked:shadow-inner peer-checked:bg-gray-400 rounded cursor-not-allowed opacity-50">
|
||||
{% endif %}
|
||||
<i class="{{award.icon}} {{award.color}}"></i>
|
||||
<div class="mt-2 font-bold text-base text-black dark:text-gray-200">{{award.title}}</div>
|
||||
<div class="text-sm text-gray-500">{{award.owned}} owned</div>
|
||||
</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<label id="notelabel" for="note" class="pt-4 label">
|
||||
Note
|
||||
<small id="notelabel-helper" class="font-normal text-gray-500">Optional</small>
|
||||
</label>
|
||||
<textarea id="note" maxlength="200" name="note" class="form-input" placeholder="Note to include in award notification..."></textarea>
|
||||
<div class="flex justify-end space-x-2 border-t border-gray-300 dark:border-gray-800 p-4 -mx-4 mt-4">
|
||||
<button type="button" class="px-4 py-2 text-sm font-bold text-gray-500 hover:text-gray-700 dark:hover:text-gray-400" data-bs-dismiss="modal">
|
||||
Cancel
|
||||
</button>
|
||||
<input id="giveaward" class="ml-auto btn btn-green" type="submit" value="Gift Award" disabled>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,2 +0,0 @@
|
|||
<div class="fixed left-0 right-0 top-0 bottom-0 w-full h-full z-[1000] bg-center bg-cover pointer-events-none opacity-[.16]" style="background-image: url('https://media0.giphy.com/media/3o72FhIuVWddxQHftS/giphy.gif');">
|
||||
</div>
|
|
@ -1,9 +0,0 @@
|
|||
{% set count = p.award_count("gingerbread") * 2 if p.award_count("gingerbread") <= 10 else 20 %}
|
||||
|
||||
<div class="snowflakes">
|
||||
{% for i in range(count) %}
|
||||
<div class="snowflake pointer-events-none">
|
||||
<img src="/assets/CHRISTMAS/ginger2-1.png" class="animate-spin object-contain" style="width: 40px; height: 40px;" alt="animate marsey gingerbread icon"/>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
|
@ -1,91 +0,0 @@
|
|||
<!-- For use in Submission (threads) page only -->
|
||||
<!-- Include in /templates/submission/submission.html -->
|
||||
<!-- Requires `p` object -->
|
||||
|
||||
<img class="train1" src="/assets/CHRISTMAS/santasleigh.gif">
|
||||
|
||||
{% if p.award_count("train") > 1 %}
|
||||
<img class="train2" src="/assets/CHRISTMAS/santasleigh.gif">
|
||||
{% endif %}
|
||||
|
||||
{% if p.award_count("train") > 2 %}
|
||||
<img class="train3" src="/assets/CHRISTMAS/santasleigh.gif">
|
||||
{% endif %}
|
||||
|
||||
{% if p.award_count("train") > 3 %}
|
||||
<img class="train4" src="/assets/CHRISTMAS/santasleigh.gif">
|
||||
{% endif %}
|
||||
|
||||
<style>
|
||||
@keyframes train {
|
||||
0% {
|
||||
right: 0%;
|
||||
}
|
||||
100% {
|
||||
right: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes trainrev {
|
||||
0% {
|
||||
right: 100%;
|
||||
}
|
||||
100% {
|
||||
right: 0%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.train1 {
|
||||
position: fixed;
|
||||
z-index: 10;
|
||||
width: 150px;
|
||||
animation: train 3s linear infinite !important;
|
||||
top: 35%
|
||||
}
|
||||
.train2 {
|
||||
display: none !important;
|
||||
}
|
||||
.train3 {
|
||||
display: none !important;
|
||||
}
|
||||
.train4 {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.train1 {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
width: 150px;
|
||||
animation: trainrev 5s linear infinite !important;
|
||||
transform: scaleX(-1);
|
||||
-webkit-transform: scaleX(-1);
|
||||
top: 35%
|
||||
}
|
||||
.train2 {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
width: 150px;
|
||||
animation: train 5s linear infinite !important;
|
||||
top: 10%
|
||||
}
|
||||
.train3 {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
width: 150px;
|
||||
animation: train 5s linear infinite !important;
|
||||
top: 60%
|
||||
}
|
||||
.train4 {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
width: 150px;
|
||||
animation: trainrev 5s linear infinite !important;
|
||||
transform: scaleX(-1);
|
||||
-webkit-transform: scaleX(-1);
|
||||
top: 85%
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -1 +0,0 @@
|
|||
<div id="snow" class="fixed top-0 bottom-0 left-0 right-0 pointer-events-none" style="z-index: 1050"></div>
|
|
@ -1,90 +0,0 @@
|
|||
<!-- For use in Submission (threads) page only -->
|
||||
<!-- Include in /templates/submission/submission.html -->
|
||||
<!-- Requires `p` object -->
|
||||
|
||||
<img class="train1" src="/assets/images/emojis/marseytrain.webp">
|
||||
|
||||
{% if p.award_count("train") > 1 %}
|
||||
<img class="train2" src="/assets/images/emojis/marseytrain.webp">
|
||||
{% endif %}
|
||||
|
||||
{% if p.award_count("train") > 2 %}
|
||||
<img class="train3" src="/assets/images/emojis/marseytrain.webp">
|
||||
{% endif %}
|
||||
|
||||
{% if p.award_count("train") > 3 %}
|
||||
<img class="train4" src="/assets/images/emojis/marseytrain.webp">
|
||||
{% endif %}
|
||||
|
||||
<style>
|
||||
@keyframes train {
|
||||
0% {
|
||||
left: 0%;
|
||||
}
|
||||
100% {
|
||||
left: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes trainrev {
|
||||
0% {
|
||||
left: 100%;
|
||||
}
|
||||
100% {
|
||||
left: 0%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.train1 {
|
||||
position: fixed;
|
||||
z-index: 10;
|
||||
width: 35px;
|
||||
animation: train 3s linear infinite !important;
|
||||
}
|
||||
.train2 {
|
||||
display: none !important;
|
||||
}
|
||||
.train3 {
|
||||
display: none !important;
|
||||
}
|
||||
.train4 {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.train1 {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
width: 100px;
|
||||
animation: trainrev 5s linear infinite !important;
|
||||
transform: scaleX(-1);
|
||||
-webkit-transform: scaleX(-1);
|
||||
top: 35%
|
||||
}
|
||||
.train2 {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
width: 100px;
|
||||
animation: train 5s linear infinite !important;
|
||||
top: 10%
|
||||
}
|
||||
.train3 {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
width: 100px;
|
||||
animation: train 5s linear infinite !important;
|
||||
top: 60%
|
||||
}
|
||||
.train4 {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
width: 100px;
|
||||
animation: trainrev 5s linear infinite !important;
|
||||
transform: scaleX(-1);
|
||||
-webkit-transform: scaleX(-1);
|
||||
top: 85%
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -1,27 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
{% block content %}
|
||||
<div class="col-span-full my-4">
|
||||
<h1 class="h3">
|
||||
User Badges
|
||||
</h1>
|
||||
<p class="text-gray-500 dark:text-gray-400">
|
||||
This page describes the requirements for obtaining all profile badges.
|
||||
</p>
|
||||
<table class="w-full table table-striped mb-5">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Image</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for k,v in badges.items() %}
|
||||
<tr>
|
||||
<td>{{v['name']}}</td>
|
||||
<td><img loading="lazy" src="/assets/CHRISTMAS/images/badges/{{v['name']}}.webp?a=1" class="object-contain w-16 h-16 p-2" alt="{{v['name']}} badge"/>
|
||||
<td>{{v['description']}}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,38 +0,0 @@
|
|||
|
||||
<script src="/assets/CHRISTMAS/js/ban_modal.js?a=1"></script>
|
||||
|
||||
<div class="modal fade" id="banModal" tabindex="-1" role="dialog" aria-labelledby="banModalTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content mx-auto max-w-3xl bg-gray-100 rounded-md shadow-lg">
|
||||
<div class="modal-header pt-3">
|
||||
<h5 id="banModalTitle"></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" id="ban-modal-body">
|
||||
|
||||
<form id="banModalForm">
|
||||
|
||||
<input type="hidden" name="formkey" value="{{v.formkey}}" >
|
||||
|
||||
<label for="ban-modal-link">Public ban reason (optional)</label>
|
||||
<textarea maxlength="64" name="reason" form="banModalForm" class="form-control" id="ban-modal-link" aria-label="With textarea" placeholder="Enter reason"></textarea>
|
||||
|
||||
<label for="days" class="mt-3">Duration days</label>
|
||||
<input type="number" step="any" name="days" id="days" class="form-control" placeholder="leave blank for permanent" >
|
||||
|
||||
<div class="custom-control custom-switch mt-3">
|
||||
<input type="checkbox" class="custom-control-input" id="alts" name="alts">
|
||||
<label class="custom-control-label" for="alts">Ban known alts</label>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-link text-muted" data-bs-dismiss="modal">Cancel</button>
|
||||
<button type="button" id="banUserButton" class="btn btn-danger" data-bs-dismiss="modal"></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,23 +0,0 @@
|
|||
{% extends "CHRISTMAS/settings2.html" %}
|
||||
|
||||
{% block content %}
|
||||
<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;">Ban reason</th>
|
||||
<th style="font-weight:bold;">Banned by</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for user in users %}
|
||||
<tr>
|
||||
<td style="font-weight:bold;">{{loop.index}}</td>
|
||||
<td><a style="color:#{{user.namecolor}}; font-weight:bold;" href="/@{{user.username}}"><img loading="lazy" src="/uid/{{user.id}}/pic" class="pp20"><span {% if user.patron %}class="patron" style="background-color:#{{user.namecolor}};"{% endif %}>{{user.username}}</span></a></td>
|
||||
<td style="font-weight:bold;">{% if user.ban_reason %}{{user.ban_reason}}{% endif %}</td>
|
||||
<td style="font-weight:bold;" href="/@{{user.banned_by.username}}"><img loading="lazy" src="/uid/{{user.banned_by.id}}/pic" class="pp20"><span {% if user.banned_by.patron %}class="patron" style="background-color:#{{user.banned_by.namecolor}};"{% endif %}>{{user.banned_by.username}}</span></a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
{% endblock %}
|
|
@ -1,20 +0,0 @@
|
|||
<!-- Banner -->
|
||||
{% 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: <strong>/r/SubredditDrama official site.</strong>
|
||||
<span class="font-medium hidden lg:inline-block">
|
||||
We proudly stand with the LGBTQ+ community! Help keep our community inclusive and welcoming.
|
||||
</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">
|
||||
💖🌈 Welcome to rdrama.net: <strong>/r/SubredditDrama official site.</strong>
|
||||
<span class="font-medium hidden md:inline-block">You are viewing a cached version of rdrama.net. </span>
|
||||
<strong><a href="/login">Login!</a></strong>
|
||||
</span>
|
||||
</div>
|
||||
{% endif %}
|
|
@ -1,22 +0,0 @@
|
|||
{% extends "CHRISTMAS/settings2.html" %}
|
||||
|
||||
{% block pagetitle %}Blocks{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1> Blocks</h1>
|
||||
<pre></pre>
|
||||
<table class="table table-striped mb-5">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th style="font-weight:bold;">User</th>
|
||||
<th style="font-weight:bold;">Target</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for user in users %}
|
||||
<tr>
|
||||
<td><a style="font-weight:bold;color:#{{user.namecolor}}; " href="/@{{user.username}}"><span {% if user.patron %}class="patron" style="background-color:#{{user.namecolor}};"{% endif %}>{{user.username}}</span></a></td>
|
||||
<td><a style="font-weight:bold;color:#{{targets[loop.index-1].namecolor}}; " href="/@{{targets[loop.index-1].username}}"><span {% if targets[loop.index-1].patron %}class="patron" style="background-color:#{{targets[loop.index-1].namecolor}};"{% endif %}>{{targets[loop.index-1].username}}</span></a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endblock %}
|
|
@ -1,109 +0,0 @@
|
|||
{% extends "CHRISTMAS/settings2.html" %}
|
||||
|
||||
{% block pagetitle %}Changelog{% endblock %}
|
||||
|
||||
{% block desktopBanner %}
|
||||
|
||||
<div class="row" style="overflow: visible;padding-top:5px;">
|
||||
<div class="col">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
|
||||
{% block navbar %}
|
||||
<div class="font-weight-bold py-3"></div>
|
||||
|
||||
<div class="d-flex align-items-center sortingbarmargin">
|
||||
<div class="text-small font-weight-bold mr-2"></div>
|
||||
<div class="dropdown dropdown-actions">
|
||||
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
{% if t=="hour" %}<i class="fas fa-clock mr-1"></i>
|
||||
{% elif t=="day" %}<i class="fas fa-calendar-day mr-1"></i>
|
||||
{% elif t=="week" %}<i class="fas fa-calendar-week mr-1"></i>
|
||||
{% elif t=="month" %}<i class="fas fa-calendar-alt mr-1"></i>
|
||||
{% elif t=="year" %}<i class="fas fa-calendar mr-1"></i>
|
||||
{% elif t=="all" %}<i class="fas fa-infinity mr-1"></i>
|
||||
{% endif %}
|
||||
{{t | capitalize}}
|
||||
</button>
|
||||
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton" x-placement="bottom-start" style="position: absolute; will-change: transform; top: 0px; left: 0px; transform: translate3d(0px, 31px, 0px);">
|
||||
{% if not t=="hour" %}<a class="dropdown-item" href="?sort={{sort}}&t=hour"><i class="fas fa-clock mr-2"></i>Hour</a>{% endif %}
|
||||
{% if not t=="day" %}<a class="dropdown-item" href="?sort={{sort}}&t=day"><i class="fas fa-calendar-day mr-2"></i>Day</a>{% endif %}
|
||||
{% if not t=="week" %}<a class="dropdown-item" href="?sort={{sort}}&t=week"><i class="fas fa-calendar-week mr-2"></i>Week</a>{% endif %}
|
||||
{% if not t=="month" %}<a class="dropdown-item" href="?sort={{sort}}&t=month"><i class="fas fa-calendar-alt mr-2"></i>Month</a>{% endif %}
|
||||
{% if not t=="year" %}<a class="dropdown-item" href="?sort={{sort}}&t=year"><i class="fas fa-calendar mr-2"></i>Year</a>{% endif %}
|
||||
{% if not t=="all" %}<a class="dropdown-item" href="?sort={{sort}}&t=all"><i class="fas fa-infinity mr-2"></i>All</a>{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-small font-weight-bold ml-3 mr-2"></div>
|
||||
<div class="dropdown dropdown-actions">
|
||||
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton2" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
{% if sort=="hot" %}<i class="fas fa-fire mr-1"></i>{% endif %}
|
||||
{% if sort=="top" %}<i class="fas fa-arrow-alt-circle-up mr-1"></i>{% endif %}
|
||||
{% if sort=="bottom" %}<i class="fas fa-arrow-alt-circle-down mr-1"></i>{% endif %}
|
||||
{% if sort=="new" %}<i class="fas fa-sparkles mr-1"></i>{% endif %}
|
||||
{% if sort=="old" %}<i class="fas fa-book mr-1"></i>{% endif %}
|
||||
{% if sort=="controversial" %}<i class="fas fa-bullhorn mr-1"></i>{% endif %}
|
||||
{% if sort=="comments" %}<i class="fas fa-comments mr-1"></i>{% endif %}
|
||||
{{sort | capitalize}}
|
||||
</button>
|
||||
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton2" x-placement="bottom-start" style="position: absolute; will-change: transform; top: 0px; left: 0px; transform: translate3d(0px, 31px, 0px);">
|
||||
{% if sort != "hot" %}<a class="dropdown-item" href="?sort=hot&t={{t}}"><i class="fas fa-fire mr-2"></i>Hot</a>{% endif %}
|
||||
{% if sort != "top" %}<a class="dropdown-item" href="?sort=top&t={{t}}"><i class="fas fa-arrow-alt-circle-up mr-2"></i>Top</a>{% endif %}
|
||||
{% if sort != "bottom" %}<a class="dropdown-item" href="?sort=bottom&t={{t}}"><i class="fas fa-arrow-alt-circle-down mr-2"></i>Bottom</a>{% endif %}
|
||||
{% if sort != "new" %}<a class="dropdown-item" href="?sort=new&t={{t}}"><i class="fas fa-sparkles mr-2"></i>New</a>{% endif %}
|
||||
{% if sort != "old" %}<a class="dropdown-item" href="?sort=old&t={{t}}"><i class="fas fa-book mr-2"></i>Old</a>{% endif %}
|
||||
{% if sort != "controversial" %}<a class="dropdown-item" href="?sort=controversial&t={{t}}"><i class="fas fa-bullhorn mr-2"></i>Controversial</a>{% endif %}
|
||||
{% if sort != "comments" %}<a class="dropdown-item" href="?sort=comments&t={{t}}"><i class="fas fa-comments mr-2"></i>Comments</a>{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% if v %}
|
||||
<a id="subscribe" class="{% if v.changelogsub %}d-none{% endif %} btn btn-primary followbutton " href="javascript:void(0)" onclick="post_toast2('/changelogsub','subscribe','unsubscribe')">Subscribe</a>
|
||||
<a id="unsubscribe" class="{% if not v.changelogsub %}d-none{% endif %} btn btn-primary followbutton " href="javascript:void(0)" onclick="post_toast2('/changelogsub','subscribe','unsubscribe')">Unsubscribe</a>
|
||||
{% endif %}
|
||||
|
||||
<div class="row no-gutters {% if listing %}mt-md-3{% elif not listing %}my-md-3{% endif %}">
|
||||
|
||||
<div class="col-12">
|
||||
|
||||
<div class="posts" id="posts">
|
||||
|
||||
{% include "CHRISTMAS/submission_listing.html" %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if listing %}
|
||||
<nav aria-label="Page navigation">
|
||||
<ul class="pagination pagination-sm mb-0">
|
||||
{% if page>1 %}
|
||||
<li class="page-item">
|
||||
<small><a class="page-link" href="?sort={{sort}}&page={{page-1}}&t={{t}}{% if only %}&only={{only}}{% endif %}" tabindex="-1">Prev</a></small>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item disabled"><span class="page-link">Prev</span></li>
|
||||
{% endif %}
|
||||
{% if next_exists %}
|
||||
<li class="page-item">
|
||||
<small><a class="page-link" href="?sort={{sort}}&page={{page+1}}&t={{t}}{% if only %}&only={{only}}{% endif %}">Next</a></small>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item disabled"><span class="page-link">Next</span></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</nav>
|
||||
{% endif %}
|
||||
|
||||
<script src="/assets/CHRISTMAS/js/post_toast2.js?a=1"></script>
|
||||
|
||||
{% endblock %}
|
|
@ -1,44 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>Unable to post comment</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagetype %}message{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="">
|
||||
|
||||
<p>Please remove the following link(s) from your comment, and then you will be able to post it:</p>
|
||||
|
||||
<ul>
|
||||
{% for site in badlinks %}
|
||||
<li>{{site}}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
<div>
|
||||
<div class="comment-write collapsed child p-4">
|
||||
<form id="reply" action="{{action}}" method="post" class="input-group">
|
||||
|
||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||
|
||||
{% if parent_fullname %}<input type="hidden" name="parent_fullname" value="{{parent_fullname}}">{% endif %}
|
||||
{% if parent_submission %}<input type="hidden" name="submission" value="{{parent_submission}}">{% endif %}
|
||||
|
||||
<textarea name="body" form="reply" class="comment-box form-control rounded" id="reply-form" aria-label="With textarea" placeholder="Add your comment..." {% if v.longpost %}minlength="280"{% endif %} maxlength="{% if v.bird %}140{% else %}10000{% endif %}" rows="10">{{body}}</textarea>
|
||||
|
||||
<div class="comment-format">
|
||||
<small class="format pl-0"><i class="fas fa-bold" aria-hidden="true" onclick="makeReplyBold()" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Bold"></i></small>
|
||||
<a class="format" href="javascript:void(0)"><i class="fas fa-italic" aria-hidden="true" onclick="makeReplyItalics()" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Italicize"></i></a>
|
||||
<a class="format" href="javascript:void(0)"><i class="fas fa-quote-right" aria-hidden="true" onclick="makeReplyQuote()" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Quote"></i></a>
|
||||
<a class="format" href="javascript:void(0)"><i class="fas fa-link" aria-hidden="true"></i></small>
|
||||
|
||||
</div>
|
||||
<button form="reply" class="btn btn-primary ml-auto fl-r">Comment</a>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,530 +0,0 @@
|
|||
{% if v %}
|
||||
{% include "CHRISTMAS/award_modal.html" %}
|
||||
<script defer src="/assets/CHRISTMAS/js/marked.js?a=1"></script>
|
||||
<script defer src="/assets/CHRISTMAS/js/comments_v.js?a=1"></script>
|
||||
{% endif %}
|
||||
|
||||
{% if v and v.admin_level > 1 %}
|
||||
<script defer src="/assets/CHRISTMAS/js/comments_admin.js?a=1"></script>
|
||||
{% endif %}
|
||||
|
||||
<script defer src="/assets/CHRISTMAS/js/comments.js?a=1"></script>
|
||||
|
||||
{% include "CHRISTMAS/expanded_image_modal.html" %}
|
||||
|
||||
<!-- <script defer>
|
||||
function poll_vote(cid, parentid) {
|
||||
{% if v %}
|
||||
for(let el of document.getElementsByClassName('presult-'+parentid)) {
|
||||
el.classList.remove('hidden');
|
||||
}
|
||||
for(let el of document.getElementsByClassName('presult')) {
|
||||
el.classList.remove('hidden');
|
||||
}
|
||||
var type = document.getElementById(cid).checked;
|
||||
var scoretext = document.getElementById('poll-' + cid);
|
||||
var score = Number(scoretext.textContent);
|
||||
if (type == true) scoretext.textContent = score + 1;
|
||||
else scoretext.textContent = score - 1;
|
||||
post('/vote/poll/' + cid + '?vote=' + type);
|
||||
{% else %}
|
||||
var myToast = new bootstrap.Toast(document.getElementById('toast-post-error'));
|
||||
myToast.show();
|
||||
document.getElementById('toast-post-error-text').innerText = "Only logged-in users can vote!";
|
||||
{% endif %}
|
||||
}
|
||||
</script> -->
|
||||
|
||||
{% macro single_comment(c, level=1) %}
|
||||
|
||||
{% if p and not (v and v.id==c.author_id) and (not v or v.highlightcomments) %}
|
||||
<script defer>
|
||||
comments = JSON.parse(localStorage.getItem("comment-counts")) || {}
|
||||
lastCount = comments['{{p.id}}']
|
||||
if (lastCount && {{c.created_utc*1000}} > lastCount.t) {
|
||||
document.getElementById("reddot-{{c.id}}").innerHTML = '<i style="color:red !important" class="text-admin fas fa-circle" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Unread"></i>'
|
||||
}
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
<script defer>
|
||||
(() => {
|
||||
const date = new Date({{c.created_utc*1000}});
|
||||
document.getElementById('timestamp-{{c.id}}').title = date.toString();
|
||||
|
||||
{% if c.is_pinned %}
|
||||
const pinned_info = document.getElementById('pinned-{{c.id}}')
|
||||
{% if c.is_pinned.startswith('t:') %}
|
||||
pinned_info.setAttribute("data-bs-original-title", `Pinned until ${new Date({{c.is_pinned[2:]}} * 1000).toString()}`)
|
||||
{% else %}
|
||||
pinned_info.setAttribute("data-bs-original-title", "Pinned by @{{c.is_pinned}}")
|
||||
{%endif%}
|
||||
{%endif%}
|
||||
})()
|
||||
</script>
|
||||
|
||||
{% set ups=c.upvotes %}
|
||||
{% set downs=c.downvotes %}
|
||||
{% set score=ups-downs %}
|
||||
|
||||
{% if v and (v.shadowbanned or v.admin_level > 1) %}
|
||||
{% set replies=c.replies3 %}
|
||||
{% else %}
|
||||
{% set replies=c.replies %}
|
||||
{% endif %}
|
||||
|
||||
{% if (c.is_banned or c.deleted_utc > 0 or c.is_blocking) and not (v and v.admin_level>0) and not (v and v.id==c.author_id) %}
|
||||
|
||||
<div id="comment-{{c.id}}" class="comment">
|
||||
|
||||
<span class="comment-collapse-desktop hidden d-md-block" style="border-left: 2px solid #{{c.author.namecolor}};" onclick="collapse_comment('{{c.id}}')"></span>
|
||||
|
||||
<div class="comment-body">
|
||||
|
||||
<div id="comment-{{c.id}}-only">
|
||||
<div class="user-info">
|
||||
<span class="comment-collapse-icon" onclick="collapse_comment('{{c.id}}')"></span>
|
||||
<button class="p-2 md:hidden" onclick="collapse_comment('{{c.id}}')">
|
||||
<i class="fas fa-minus-circle fa-sm fa-fw comment-toggle-icon-{{c.id}}"></i>
|
||||
</button>
|
||||
{% if standalone and c.over_18 %}<span class="badge badge-red">+18</span>{% endif %}
|
||||
{% if c.is_banned %}removed by @{{c.ban_reason}}{% elif c.deleted_utc > 0 %}Deleted by author{% elif c.is_blocking %}You are blocking @{{c.author.username}}{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if render_replies %}
|
||||
{% if level<10 %}
|
||||
<div id="replies-of-{{c.id}}" class="">
|
||||
{% set standalone=False %}
|
||||
{% for reply in replies %}
|
||||
{{single_comment(reply, level=level+1)}}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% elif "notifications" in request.path %}
|
||||
<div id="replies-of-{{c.id}}" class="hidden md:block">
|
||||
{% set standalone=False %}
|
||||
{% for reply in replies %}
|
||||
{{single_comment(reply, level=level+1)}}
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="morecomment-{{c.id}}" class="md:hidden mt-2 more-comments text-small">
|
||||
<a {% if v %}href="{{c.shortlink}}"{% else %}href="/logged_out{{c.shortlink}}"{% endif %}>More comments <i class="fas fa-long-arrow-right ml-1"></i></a>
|
||||
</div>
|
||||
{% elif replies %}
|
||||
<div id="morecomment-{{c.id}}" class="mt-2 more-comments text-small">
|
||||
<a {% if v %}href="{{c.shortlink}}"{% else %}href="/logged_out{{c.shortlink}}"{% endif %}>More comments <i class="fas fa-long-arrow-right ml-1"></i></a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% else %}
|
||||
|
||||
{% set score=c.score %}
|
||||
|
||||
{% if v %}
|
||||
{% set voted=c.voted %}
|
||||
{% else %}
|
||||
{% set voted=-2 %}
|
||||
{% endif %}
|
||||
|
||||
{% if standalone and level==1 %}
|
||||
<div class="post-info font-bold mt-5 mb-1">
|
||||
{% if c.post and c.post.over_18 %}
|
||||
<span class="badge badge-red">+18</span>
|
||||
{% endif %}
|
||||
<div>
|
||||
{% if c.post %}
|
||||
{% if c.author_id==v.id and c.child_comments and is_notification_page%}
|
||||
<span>
|
||||
Comment {{'Replies' if (c.child_comments | length)>1 else 'Reply'}}:
|
||||
<a href="{{c.post.permalink}}" class="text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200">{{c.post.realtitle(v) | safe}}</a>
|
||||
</span>
|
||||
{% elif c.post.author_id==v.id and c.level == 1 and is_notification_page%}
|
||||
<span>Post Reply:
|
||||
<a href="{{c.post.permalink}}" class="text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200">{{c.post.realtitle(v) | safe}}</a>
|
||||
</span>
|
||||
{% elif is_notification_page and c.parent_submission in v.subscribed_idlist() %}
|
||||
<span>Subscribed Thread:
|
||||
<a href="{{c.post.permalink}}" class="text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200">{{c.post.realtitle(v) | safe}}</a></span>
|
||||
{% elif is_notification_page %}
|
||||
<span>Username Mention:
|
||||
<a href="{{c.post.permalink}}" class="text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200">{{c.post.realtitle(v) | safe}}</a>
|
||||
</span>
|
||||
{% else %}
|
||||
<span>
|
||||
<a href="{{c.post.permalink}}" class="text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200">{{c.post.realtitle(v) | safe}}</a>
|
||||
</span>
|
||||
{% endif %}
|
||||
{% elif c.author_id==NOTIFICATIONS_ID or c.author_id==AUTOJANNY_ID %}
|
||||
<span>{{'SITE_NAME' | app_config}} Notification</span>
|
||||
{% else %}
|
||||
{% if c.sentto == 0 %}
|
||||
<span>Sent to admins</span>
|
||||
{% else %}
|
||||
<span>Sent to @{{c.senttouser.username}}</span>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div id="comment-{{c.id}}" class="comment anchor {% if c.unread %}bg-primary/20{% endif %} relative flex mt-4 md:mt-6 {% if standalone and level==1 %} mt-0{% endif %}{% if c.collapse_for_user(v) or (standalone and c.over_18 and not (v and v.over_18)) %} collapsed items-center opacity-50 md:hover:opacity-100{% endif %} {% if c.sentto != None and level==1 %}p-2.5 bg-gray-200 md:bg-gray-300 dark:bg-white/[.05] rounded{% endif %}">
|
||||
|
||||
{% if c.collapse_for_user(v) or (standalone and c.over_18 and not (v and v.over_18)) %}
|
||||
<div id="comment-collapse-{{c.id}}" class="z-20 absolute w-full h-full bottom-0 left-0 right-0 top-0 cursor-pointer" onclick="collapse_comment('{{c.id}}')"></div>
|
||||
{% else %}
|
||||
<div id="comment-collapse-{{c.id}}" class="hidden pointer-events-none z-20 absolute w-full h-full bottom-0 left-0 right-0 top-0 cursor-pointer" onclick="collapse_comment('{{c.id}}')"></div>
|
||||
{% endif %}
|
||||
|
||||
<span class="comment-collapse-desktop hidden" {% if not c.unread %}style="border-left: 2px solid #{{c.author.namecolor}};"{% endif %} onclick="collapse_comment('{{c.id}}')"></span>
|
||||
|
||||
{% if c.sentto == None %}
|
||||
<div class="flex flex-col flex-shrink-0 items-center mr-2.5 {{ 'md:mr-4' if not c.parent_comment_id or standalone else 'md:mr-3' }}">
|
||||
<button class="relative" onclick="collapse_comment('{{c.id}}')">
|
||||
{% if standalone or level==1 %}
|
||||
<img loading="lazy" src="{{ c.author.profile_url }}" class="hidden md:block flex-shrink-0 w-14 h-14 p-[3px] bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 object-cover lozad" alt="{{ c.author.username }} avatar"/>
|
||||
{% else %}
|
||||
<img loading="lazy" src="{{ c.author.profile_url }}" class="hidden md:block flex-shrink-0 w-9 h-9 p-[3px] bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 object-cover lozad" alt="{{ c.author.username }} avatar"/>
|
||||
{% endif %}
|
||||
</button>
|
||||
<button onclick="collapse_comment('{{c.id}}')" class="invisible-on-collapse md:ml-4 w-[1px] md:w-4 h-full border-l border-gray-400 dark:border-gray-600"></button>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="w-full">
|
||||
|
||||
<div id="{% if comment_info and comment_info.id == c.id %}context{%else%}comment-{{c.id}}-only{% endif %}" class="comment-anchor relative {% if comment_info and comment_info.id == c.id %}context{%endif%}{% if c.is_banned %} banned{% endif %}{% if c.deleted_utc %} deleted{% endif %}">
|
||||
|
||||
<span class="absolute right-4 top-2" id="reddot-{{c.id}}"></span>
|
||||
|
||||
<div class="relative z-10 user-info no-scrollbar overflow-y-hidden overflow-x-auto flex items-center space-x-2 md:-ml-2 text-sm text-gray-500 leading-normal">
|
||||
<button class="p-2 md:hidden" onclick="collapse_comment('{{c.id}}')">
|
||||
<i class="fas fa-minus-circle fa-fw fa-sm comment-toggle-icon-{{c.id}}"></i>
|
||||
</button>
|
||||
{% if c.awards %}
|
||||
<ul class="flex space-x-2 mb-0">
|
||||
{% for a in c.awards %}
|
||||
<li>
|
||||
<i class="{{a.class_list}} px-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{a.title}} Award given by @{{a.user.username}}"></i>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
{% if c.post and c.post.award_count("ghosts") %}
|
||||
<span>👻</span>
|
||||
{% else %}
|
||||
|
||||
{% if c.author.verified %}
|
||||
<i class="fas fa-badge-check" style="color:{% if c.author.verifiedcolor %}#{{c.author.verifiedcolor}}{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{c.author.verified}}"></i>
|
||||
{% endif %}
|
||||
|
||||
<div class="relative md:hidden flex-shrink-0">
|
||||
<img loading="lazy" src="{{ c.author.profile_url }}" class="flex-shrink-0 w-9 h-9 p-[3px] bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 object-cover lozad" alt="{{ c.author.username }} avatar"/>
|
||||
</div>
|
||||
|
||||
<span class="flex-shrink-0">
|
||||
<a class="user-name" onclick='userPopover({{c.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:#{{c.author.namecolor}};">
|
||||
<span class="text-sm font-bold">
|
||||
{% if c.author.patron and not c.distinguish_level %}
|
||||
<span class="patron" style="background-color:#{{c.author.namecolor}};">
|
||||
{{c.author.username}}
|
||||
</span>
|
||||
{% elif c.distinguish_level and request.host == 'rdrama.net' %}
|
||||
<span class="mod" style="background-color:#{{c.author.namecolor}};">
|
||||
{{c.author.username}}
|
||||
</span>
|
||||
{% else %}
|
||||
{{c.author.username}}
|
||||
{% endif %}
|
||||
</span>
|
||||
</a>
|
||||
</span>
|
||||
|
||||
{% if c.author.customtitle %}
|
||||
<bdi class="flex-shrink-0" style="color: #{{c.author.titlecolor}}">
|
||||
{{c.author.customtitle | safe }}
|
||||
</bdi>
|
||||
{% endif %}
|
||||
|
||||
{% if c.bannedfor and c.author.banned_by %}
|
||||
<a href="javascript:void(0)"><i class="fad fa-gavel text-danger" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="User was banned for this comment by @{{c.author.banned_by.username}}"></i></a>
|
||||
{% endif %}
|
||||
{% if c.active_flags %}
|
||||
<a class="flex-shrink-0 badge badge-red" style="padding:1px 5px; font-size:10px;" href="javascript:void(0)" onclick="document.getElementById('flaggers-{{c.id}}').classList.toggle('hidden')">{{c.active_flags}} Reports</a>
|
||||
{% endif %}
|
||||
{% if c.over_18 %}
|
||||
<span class="badge badge-red">+18</span>
|
||||
{% endif %}
|
||||
{% if v and v.admin_level==6 and c.author.shadowbanned %}
|
||||
<i class="fas fa-user-times text-admin" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Shadowbanned by @{{c.author.shadowbanned}}"></i>
|
||||
{% endif %}
|
||||
{% if c.is_pinned %}
|
||||
<i id='pinned-{{c.id}}' class="fas fa-thumbtack fa-rotate--45 text-admin" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Pinned {% if c.is_pinned.startswith('t:') %}until {{c.is_pinned[2:]}}{% else %}by @{{c.is_pinned}}{%endif%}"></i>
|
||||
{% endif %}
|
||||
{% if c.distinguish_level %}
|
||||
<i class="fas fa-broom 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 c.is_op %}
|
||||
<i class="fas fa-microphone-stand text-info" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="OP"></i>
|
||||
{% endif %}
|
||||
{% if c.is_bot %}
|
||||
<i class="fad fa-robot text-info" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Bot"></i>
|
||||
{% endif %}
|
||||
{% if c.is_blocking %}
|
||||
<i class="fas fa-user-minus text-warning" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="You're blocking this user, but you can see this comment because you're an admin"></i>
|
||||
{% endif %}
|
||||
{% if c.is_blocked %}
|
||||
<i class="fas fa-user-minus text-danger" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="This user is blocking you."></i>
|
||||
{% endif %}
|
||||
{% if c.parent_comment_id and not standalone and level<=7 %}
|
||||
<a href="#comment-{{ c.parent_comment_id }}-only" class="flex-shrink-0 text-gray-500 hover:text-gray-400 user-name-reply">
|
||||
<i class="fas fa-reply fa-sm fa-fw fa-flip-horizontal"></i>
|
||||
<span class="hidden sm:inline-block">replying to</span>
|
||||
<span class="font-bold">
|
||||
{% if c.post and c.post.award_count("ghosts") %}
|
||||
👻
|
||||
{% else %}
|
||||
{{ c.parent_comment.author.username }}{% endif %}
|
||||
</span>
|
||||
</a>
|
||||
{% endif %}
|
||||
<span onmouseover="timestamp('timestamp-{{c.id}}','{{c.created_utc}}')" id="timestamp-{{c.id}}" data-bs-toggle="tooltip" data-bs-placement="bottom" class="flex-shrink-0 time-stamp">
|
||||
{{c.age_string}}
|
||||
</span>
|
||||
{% if c.edited_utc %}
|
||||
<span onmouseover="timestamp('time-edit-{{c.id}}','{{c.edited_utc}}')" id="time-edit-{{c.id}}" class="flex-shrink-0 time-edited italic">
|
||||
Edited {{c.edited_string}}
|
||||
</span>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% if c.active_flags %}
|
||||
<div id="flaggers-{{c.id}}" class="flaggers hidden hidden-on-collapse">
|
||||
<strong><i class="far fa-fw fa-flag"></i> Reported by:</strong>
|
||||
<pre></pre>
|
||||
<ul style="padding-left:20px; margin-bottom: 0;">
|
||||
{% for f in c.flags %}
|
||||
<li><a style="font-weight:bold" href="{{f.user.url}}">{{f.user.username}}</a>{% if f.reason %}: {{f.reason | safe}}{% endif %} {% if v and v.admin_level > 1 %}<a href="javascript:void(0)" onclick="post_toast('/del_report/c{{ f.id }}')">[remove]</a>{% endif %}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if c.is_banned and c.ban_reason %}
|
||||
<div id="comment-banned-warning" class="hidden-on-collapse text-red-600 mb-0">Removed by @{{c.ban_reason}}</div>
|
||||
{% endif %}
|
||||
|
||||
<div id="comment-text-{{c.id}}" class="{% if c.author.agendaposter %}agendaposter{% endif %} comment-text hidden-on-collapse mt-2 break-words {% if c.sentto != None and v.id==c.author_id %}text-green-700 dark:text-green-400{% endif %}">
|
||||
{{c.realbody(v) | safe}}
|
||||
{% if c.options %}
|
||||
{% for o in c.options %}
|
||||
<div class="custom-control">
|
||||
<input type="checkbox" class="custom-control-input" id="{{o.id}}" name="option" {% if o.poll_voted(v) %}checked{% endif %} onchange="poll_vote('{{o.id}}', '{{c.id}}')">
|
||||
<label class="custom-control-label" for="{{o.id}}">{{o.body_html | safe}}<span class="presult-{{c.id}} {% if not c.total_poll_voted(v) %}hidden{% endif %}"> - <a href="/votes?link=t3_{{o.id}}"><span id="poll-{{o.id}}">{{o.upvotes}}</span> votes</a></span></label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<pre></pre>
|
||||
{% endif %}
|
||||
|
||||
{% if c.author.sig_html and (c.author_id == 1904 or not (v and v.sigs_disabled)) %}
|
||||
<hr>
|
||||
{{c.author.sig_html | safe}}
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% if not c.parent_submission and c.author_id!=NOTIFICATIONS_ID and c.author_id!=AUTOJANNY_ID and c.author_id!=v.id %}
|
||||
<button class="btn btn-gray" onclick="document.getElementById('reply-m-{{c.id}}').classList.toggle('hidden')">
|
||||
<i class="fas fa-reply fa-sm fa-fw mr-1"></i>
|
||||
Reply
|
||||
</button>
|
||||
{% include "CHRISTMAS/comments/CommentMessageReplyForm.html" %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if c.parent_submission %}
|
||||
<!-- Author's edit comment form -->
|
||||
{% if v and v.id==c.author_id %}
|
||||
{% include "CHRISTMAS/comments/CommentEditForm.html" %}
|
||||
{% endif %}
|
||||
<!-- Comment actions -->
|
||||
<div id="comment-{{c.id}}-actions" class="hidden-on-collapse pt-3 pb-2 {% if voted==1 %} upvoted{% elif voted==-1 %} downvoted{% endif %}">
|
||||
{% include "CHRISTMAS/comments/CommentActions.html" %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
|
||||
<div id="reply-to-{{c.id}}" class="hidden hidden-on-collapse">
|
||||
{% include "CHRISTMAS/comments/CommentReplyForm.html" %}
|
||||
</div>
|
||||
|
||||
{% if render_replies %}
|
||||
{% if level<10 %}
|
||||
<div id="replies-of-{{c.id}}" class="hidden-on-collapse">
|
||||
{% for reply in replies %}
|
||||
{{single_comment(reply, level=level+1)}}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% elif replies and "notifications" in request.path %}
|
||||
<div id="replies-of-{{c.id}}" class="hidden md:block hidden-on-collapse">
|
||||
{% set standalone=False %}
|
||||
{% for reply in replies %}
|
||||
{{single_comment(reply, level=level+1)}}
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="morecomment-{{c.id}}" class="md:hidden mt-2 more-comments text-small hidden-on-collapse">
|
||||
<a href="{{c.shortlink}}">More comments <i class="fas fa-long-arrow-right ml-1"></i></a>
|
||||
</div>
|
||||
{% elif replies %}
|
||||
<div id="morecomments-{{c.id}}" class="mt-2 more-comments text-small hidden-on-collapse hidden md:block">
|
||||
<button class="mt-2 w-full btn btn-gray" id="load-more-replies-button-{{c.id}}" onclick="loadMoreReplies('{{c.id}}','morecomments-{{c.id}}',this.id); this.disabled = true;">
|
||||
Load more replies
|
||||
</button>
|
||||
</div>
|
||||
<a class="md:hidden hidden-on-collapse" href="{{c.shortlink}}">More comments <i class="fas fa-long-arrow-right ml-1"></i></a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% include "CHRISTMAS/modals/ModalCommentActions.html" %}
|
||||
|
||||
</div>
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% endmacro %}
|
||||
|
||||
<div id="comment-list">
|
||||
|
||||
{% for comment in comments %}
|
||||
|
||||
{{single_comment(comment)}}
|
||||
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
|
||||
{% if v %}
|
||||
{% include "CHRISTMAS/gif_modal.html" %}
|
||||
{% include "CHRISTMAS/emoji_modal.html" %}
|
||||
{% if v.admin_level > 1 %}
|
||||
{% include "CHRISTMAS/ban_modal.html" %}
|
||||
{% endif %}
|
||||
|
||||
<div class="modal fade" id="deleteCommentModal" tabindex="-1" role="dialog" aria-labelledby="deleteCommentModalTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" 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 leading-normal">Delete comment?</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 text-center">
|
||||
<div class="mb-3">
|
||||
<i class="fad fa-trash-alt fa-lg text-red-600"></i>
|
||||
</div>
|
||||
<p>
|
||||
Your comment will be removed everywhere on {{'SITE_NAME' | app_config}}. This action can be undone.
|
||||
</p>
|
||||
</div>
|
||||
<div class="flex justify-end space-x-2 border-t border-gray-400 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 id="deleteCommentButton" class="btn btn-red">Delete comment</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% include "CHRISTMAS/modals/ModalReportComment.html" %}
|
||||
{% endif %}
|
||||
|
||||
{% if offset %}
|
||||
{% if p %}
|
||||
{% set pid = p.id %}
|
||||
{% endif %}
|
||||
<div id="comment-list-{{ offset }}">
|
||||
<button class="mt-2 w-full btn btn-gray" id="load-more-button-{{ offset }}" onclick="loadMore({{pid}},'{{sort}}',{{offset}},'comment-list-{{ offset }}',this.id); this.disabled = true;">
|
||||
Load more comments
|
||||
</button>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<style>
|
||||
html {
|
||||
scroll-padding-top: 75px;
|
||||
}
|
||||
.comment .comment-body {
|
||||
padding: 3px 0;
|
||||
}
|
||||
.comment-anchor:target {
|
||||
transition: all 0.25s ease;
|
||||
animation: blink normal 1s ease;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
0% {
|
||||
background-color: rgba(0,0,0,0.1)
|
||||
}
|
||||
50% {
|
||||
background-color: rgba(0,0,0,0.2)
|
||||
}
|
||||
100% {
|
||||
background-color: rgba(0,0,0,0.1)
|
||||
}
|
||||
}
|
||||
.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;
|
||||
}
|
||||
|
||||
.avatar-72 {
|
||||
width: 72px;
|
||||
height: 72px;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.h-64 {
|
||||
height: 64px;
|
||||
}
|
||||
|
||||
.object-cover {
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.smolbtn {
|
||||
font-weight: 600;
|
||||
font-size: .9rem;
|
||||
border-radius: 0.2rem;
|
||||
padding: 0.1rem 0.50rem 0rem 0.30rem;
|
||||
background-color: var(--black) !important;
|
||||
}
|
||||
|
||||
.smol {
|
||||
font-size: 11.5px;
|
||||
}
|
||||
|
||||
.comment.collapsed .hidden-on-collapse {
|
||||
display: none;
|
||||
}
|
||||
.comment.collapsed .invisible-on-collapse {
|
||||
visibility: hidden;
|
||||
}
|
||||
</style>
|
|
@ -1,268 +0,0 @@
|
|||
<ul class="flex flex-wrap items-center justify-end md:justify-start space-x-3 gap-2 text-sm text-gray-500 mb-0">
|
||||
|
||||
{% if v and request.path.startswith('/@') and v.admin_level == 0%}
|
||||
{% if voted==1 %}
|
||||
<li class="list-inline-item arrow-up hidden md:block px-2 mx-0 comment-{{c.id}}-up active"></li>
|
||||
{% endif %}
|
||||
{% elif v %}
|
||||
|
||||
<li id="comment-{{c.id}}-up" tabindex="0" href="javascript:void(0)" onclick="vote('comment', '{{c.id}}', '1')" class="list-inline-item arrow-up upvote-button hidden md:block px-2 mx-0 comment-{{c.id}}-up {% if voted==1 %}active{% endif %}"></li>
|
||||
|
||||
{% else %}
|
||||
<li id="comment-{{c.id}}-up" tabindex="0" href="/login" class="list-inline-item arrow-up hidden md:block" onclick="location.href='/login';">
|
||||
</li>
|
||||
|
||||
{% endif %}
|
||||
|
||||
<li class="list-inline-item hidden md:block m-0">
|
||||
<span class="points" data-bs-toggle="tooltip" data-bs-placement="top" title="" data-bs-original-title="+{{ups}} | -{{downs}}"><span id="comment-score-{{c.id}}" class="score comment-score-{{c.id}} {% if voted==1 %}score-up{% elif voted==-1%}score-down{% endif %}">{{score}}</span></span>
|
||||
</li>
|
||||
|
||||
{% if v and request.path.startswith('/@') and v.admin_level == 0 %}
|
||||
{% if voted==-1 %}
|
||||
<li class="list-inline-item arrow-down hidden md:block px-2 mx-0 comment-{{c.id}}-down active"></li>
|
||||
{% endif %}
|
||||
{% elif v %}
|
||||
<li {% if environ.get('DISABLE_DOWNVOTES') == '1' %}style="display:None!important"{% endif %} id="comment-{{c.id}}-down" tabindex="0" href="javascript:void(0)" onclick="vote('comment', '{{c.id}}', '-1')" class="list-inline-item arrow-down downvote-button hidden md:block px-2 mx-0 comment-{{c.id}}-down {% if voted==-1 %}active{% endif %}"></li>
|
||||
|
||||
{% else %}
|
||||
|
||||
{% if environ.get('DISABLE_DOWNVOTES') != '1' %}
|
||||
<li id="comment-{{c.id}}-down" tabindex="0" href="/login" class="list-inline-item arrow-down hidden md:block" onclick="location.href='/login';">
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% if v %}
|
||||
<li>
|
||||
<button onclick="openReplyBox('{{c.id}}')">
|
||||
<i class="fas fa-reply fa-fw mr-1"></i>Reply
|
||||
</button>
|
||||
</li>
|
||||
<li class="list-inline-item text-muted hidden md:block">
|
||||
<button href="javascript:void(0)" data-bs-toggle="modal" data-bs-target="#awardModal" onclick="awardModal('/comment/{{c.id}}/awards')">
|
||||
<i class="fas fa-gift fa-fw mr-1" aria-hidden="true"></i>Award
|
||||
</button>
|
||||
</li>
|
||||
<li id="unsave-{{c.id}}" class="hidden {% if c.id in v.saved_comment_idlist() %}md:block{% endif %}">
|
||||
<button class="hover:text-gray-400" onclick="post_toast3('/unsave_comment/{{c.id}}','save-{{c.id}}','unsave-{{c.id}}')">
|
||||
<i class="fas fa-bookmark fa-fw mr-1"></i>Unsave
|
||||
</button>
|
||||
</li>
|
||||
<li id="save-{{c.id}}" class="hidden {% if c.id not in v.saved_comment_idlist() %}md:block{% endif %}">
|
||||
<button class="hover:text-gray-400" onclick="post_toast3('/save_comment/{{c.id}}','save-{{c.id}}','unsave-{{c.id}}')">
|
||||
<i class="far fa-bookmark fa-fw mr-1"></i>Save
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
<li class="hidden md:block">
|
||||
<button class="copy-link hover:text-gray-400" data-clipboard-text="{% if request.host == 'rdrama.net' %}https://rdrama.com{{c.permalink}}{% else %}{{c.permalink | full_link}}{% endif %}">
|
||||
<i class="fas fa-link fa-fw mr-1"></i>Copy link
|
||||
</button>
|
||||
</li>
|
||||
<li class="hidden md:block">
|
||||
<a href="{{c.permalink}}" class="text-gray-500 hover:text-gray-400">
|
||||
<i class="fas fa-book-open fa-fw mr-1"></i>Context
|
||||
</a>
|
||||
</li>
|
||||
<li class="hidden md:block">
|
||||
<a href="/votes?link={{c.fullname}}" class="text-gray-500 hover:text-gray-400">
|
||||
<i class="fas fa-poll fa-fw mr-1"></i>Votes
|
||||
</a>
|
||||
</li>
|
||||
|
||||
{% if v and c.parent_submission and c.author_id==v.id %}
|
||||
<li>
|
||||
<button class="hover:text-gray-400" onclick="toggleEdit('{{c.id}}')">
|
||||
<i class="fas fa-pencil fa-fw mr-1"></i>Edit
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
<li class="hidden md:block">
|
||||
<div class="dropdown">
|
||||
<button type="button" id="dropdownComment-{{c.id}}Actions" data-bs-toggle="dropdown" aria-expanded="false" data-bs-auto-close="outside">
|
||||
<i class="fas fa-ellipsis-h fa-fw"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu w-56 bg-gray-900 rounded-md shadow-lg" aria-labelledby="dropdownComment-{{c.id}}Actions">
|
||||
<li class="hidden">
|
||||
<a class="dropdown-item dropdown-item-primary" href="/votes?link={{c.fullname}}">
|
||||
<i class="fas fa-poll fa-sm fa-fw mr-4"></i>Votes
|
||||
</a>
|
||||
</li>
|
||||
<li class="hidden">
|
||||
<a class="dropdown-item dropdown-item-primary" href="{{c.permalink}}">
|
||||
<i class="fas fa-book-open fa-sm fa-fw mr-4"></i>Context
|
||||
</a>
|
||||
</li>
|
||||
{% if v and c.parent_submission and c.author_id==v.id %}
|
||||
<li class="hidden">
|
||||
<button class="dropdown-item dropdown-item-primary" onclick="toggleEdit('{{c.id}}')">
|
||||
<i class="fas fa-pencil fa-sm fa-fw mr-4"></i>Edit
|
||||
</button>
|
||||
</li>
|
||||
{% if c.deleted_utc > 0 %}
|
||||
<li class="hidden md:block">
|
||||
<button class="dropdown-item dropdown-item-primary" onclick="post_toast('/undelete/comment/{{c.id}}')">
|
||||
<i class="fas fa-trash-alt fa-sm fa-fw mr-4"></i>Undelete
|
||||
</button>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="hidden md:block">
|
||||
<button class="dropdown-item dropdown-item-primary" data-bs-toggle="modal" data-bs-target="#deleteCommentModal" onclick="delete_commentModal('{{c.id}}')">
|
||||
<i class="fas fa-trash-alt fa-sm fa-fw mr-4"></i>Delete
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if v and v.admin_level > 0 and v.id==c.author_id %}
|
||||
<li id="undistinguish-{{c.id}}" class="hidden {% if c.distinguish_level %}md:block{% endif %}">
|
||||
<button class="dropdown-item dropdown-item-primary" onclick="post_toast3('/distinguish_comment/{{c.id}}','distinguish-{{c.id}}','undistinguish-{{c.id}}','no')">
|
||||
<i class="fas fa-id-badge text-info fa-sm fa-fw mr-4"></i>Undistinguish
|
||||
</button>
|
||||
</li>
|
||||
<li id="distinguish-{{c.id}}" class="hidden {% if not c.distinguish_level %}md:block{% endif %}">
|
||||
<button class="dropdown-item dropdown-item-primary" onclick="post_toast3('/distinguish_comment/{{c.id}}','distinguish-{{c.id}}','undistinguish-{{c.id}}','yes')">
|
||||
<i class="fas fa-id-badge text-info fa-sm fa-fw mr-4"></i>Distinguish
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if v and not v.id==c.author_id and not (c.post and c.post.award_count("ghosts")) %}
|
||||
<li class="hidden {% if c.is_blocking %}md:block{% endif %} text-green-600">
|
||||
<button id="unblock-{{c.id}}" class="dropdown-item dropdown-item-primary" onclick="post_toast3('/settings/unblock?username={{c.author.username}}','block-{{c.id}}','unblock-{{c.id}}')">
|
||||
<i class="fas fa-eye-slash fa-sm fa-fw mr-4"></i>Unblock user
|
||||
</button>
|
||||
</li>
|
||||
<li id="prompt-{{c.id}}" class="hidden text-red-600">
|
||||
<button class="dropdown-item dropdown-item-primary" onclick="post_toast3('/settings/block?username={{c.author.username}}','prompt-{{c.id}}','unblock-{{c.id}}')">
|
||||
<i class="fas fa-eye-slash fa-sm fa-fw mr-4"></i>Are you sure?
|
||||
</button>
|
||||
</li>
|
||||
<li class="hidden {% if not c.is_blocking %}md:block{% endif %} text-red-600">
|
||||
<button class="dropdown-item dropdown-item-primary" id="block-{{c.id}}" onclick="document.getElementById('block-{{c.id}}').classList.toggle('md:block');document.getElementById('prompt-{{c.id}}').classList.toggle('md:block');">
|
||||
<i class="fas fa-eye-slash fa-sm fa-fw mr-4"></i>Block user
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if v and c.post %}
|
||||
<li>
|
||||
<hr class="mt-2 mb-1.5 border-t border-black h-1 shadow-inset-t-white-05"/>
|
||||
</li>
|
||||
{% if v.admin_level > 1 %}
|
||||
<li id="unpin-{{c.id}}" class="hidden {% if c.is_pinned %}md:block{% endif %}">
|
||||
<button class="dropdown-item dropdown-item-primary" onclick="post_toast3('/unsticky_comment/{{c.id}}','pin-{{c.id}}','unpin-{{c.id}}')">
|
||||
<i class="fas fa-thumbtack fa-rotate--45 fa-sm fa-fw mr-4"></i>Unpin
|
||||
</button>
|
||||
</li>
|
||||
<li id="pin-{{c.id}}" class="hidden {% if not c.is_pinned %}md:block{% endif %}">
|
||||
<button class="dropdown-item dropdown-item-primary" onclick="post_toast3('/sticky_comment/{{c.id}}','pin-{{c.id}}','unpin-{{c.id}}')">
|
||||
<i class="fas fa-thumbtack fa-rotate--45 fa-sm fa-fw mr-4"></i>Pin
|
||||
</button>
|
||||
</li>
|
||||
{% elif v.id == c.post.author_id %}
|
||||
<li id="unpin-{{c.id}}" class="hidden {% if c.is_pinned %}md:block{% endif %}">
|
||||
<button class="dropdown-item dropdown-item-primary" onclick="post_toast3('/unpin_comment/{{c.id}}','pin-{{c.id}}','unpin-{{c.id}}')">
|
||||
<i class="fas fa-thumbtack fa-rotate--45 fa-sm fa-fw mr-4"></i>Unpin
|
||||
</button>
|
||||
</li>
|
||||
<li id="pin-{{c.id}}" class="hidden {% if not c.is_pinned %}md:block{% endif %}">
|
||||
<button class="dropdown-item dropdown-item-primary" onclick="post_toast3('/pin_comment/{{c.id}}','pin-{{c.id}}','unpin-{{c.id}}')">
|
||||
<i class="fas fa-thumbtack fa-rotate--45 fa-sm fa-fw mr-4"></i>Pin
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if v and v.admin_level > 1 %}
|
||||
{% if v.id != c.author.id %}
|
||||
<li id="remove-{{c.id}}" class="hidden {% if not c.is_banned %}md:block{% endif %}">
|
||||
<button class="dropdown-item block w-full text-left px-4 py-2 text-sm text-red-600 hover:text-white bg-gradient-to-t hover:from-red-800 hover:to-red-700 hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-t focus:from-red-800 focus:to-red-700" onclick="post_toast3('/ban_comment/{{c.id}}','remove-{{c.id}}','approve-{{c.id}}')">
|
||||
<i class="fas fa-ban fa-sm fa-fw mr-4"></i>Remove
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li id="approve-{{c.id}}" class="hidden {% if c.is_banned %}md:block{% endif %}">
|
||||
<button class="dropdown-item dropdown-item-primary" onclick="post_toast3('/unban_comment/{{c.id}}','remove-{{c.id}}','approve-{{c.id}}')">
|
||||
<i class="fas fa-check fa-sm fa-fw mr-4"></i>Approve
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if v and c.parent_submission and (c.author_id==v.id or v.admin_level > 0) %}
|
||||
<li id="unmark-{{c.id}}" class="hidden {% if c.over_18 %}md:block{% endif %}">
|
||||
<button class="dropdown-item block w-full text-left px-4 py-2 text-sm text-red-600 hover:text-white bg-gradient-to-t hover:from-red-800 hover:to-red-700 hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-t focus:from-red-800 focus:to-red-700" onclick="post_toast3('/toggle_comment_nsfw/{{c.id}}','mark-{{c.id}}','unmark-{{c.id}}')">
|
||||
<i class="fas fa-eye-evil fa-sm fa-fw mr-4"></i>Unmark 18+
|
||||
</button>
|
||||
</li>
|
||||
<li id="mark-{{c.id}}" class="hidden {% if not c.over_18 %}md:block{% endif %}">
|
||||
<button class="dropdown-item block w-full text-left px-4 py-2 text-sm text-red-600 hover:text-white bg-gradient-to-t hover:from-red-800 hover:to-red-700 hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-t focus:from-red-800 focus:to-red-700" onclick="post_toast3('/toggle_comment_nsfw/{{c.id}}','mark-{{c.id}}','unmark-{{c.id}}')">
|
||||
<i class="fas fa-eye-evil fa-sm fa-fw mr-4"></i>Mark 18+
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if v and v.admin_level==6 and v.id != c.author_id %}
|
||||
<li id="unban-{{c.id}}" class="hidden {% if c.author.is_suspended %}md:block{% endif %}">
|
||||
<button class="dropdown-item dropdown-item-primary" onclick="post_toast3('/unban_user/{{c.author_id}}','ban-{{c.id}}','unban-{{c.id}}')">
|
||||
<i class="fas fa-user-slash text-green-600 fa-sm fa-fw mr-4"></i>Unban user
|
||||
</button>
|
||||
</li>
|
||||
<li id="ban-{{c.id}}" class="hidden {% if not c.author.is_suspended %}md:block{% endif %}">
|
||||
<button class="dropdown-item dropdown-item-primary" data-bs-toggle="modal" data-bs-target="#banModal" onclick="banModal('/comment/{{c.id}}', '{{ c.author.id }}', '{{c.author.username}}')">
|
||||
<i class="fas fa-user-slash text-red-600 fa-sm fa-fw mr-4"></i>Ban user
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if v and v.admin_level >=4 and c.oauth_app %}
|
||||
<li>
|
||||
<hr class="mt-2 mb-1.5 border-t border-black h-1 shadow-inset-t-white-05"/>
|
||||
</li>
|
||||
<li class="hidden md:block">
|
||||
<a href="{{c.oauth_app.permalink}}/comments" class="dropdown-item dropdown-item-primary">
|
||||
<i class="fas fa-code fa-sm fa-fw mr-4"></i>API App
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<hr class="mt-2 mb-1.5 border-t border-black h-1 shadow-inset-t-white-05"/>
|
||||
</li>
|
||||
<li class="text-red-600">
|
||||
<button class="dropdown-item dropdown-item-primary" data-bs-toggle="modal" data-bs-target="#reportCommentModal" onclick="report_commentModal('{{c.id}}','{{c.author.username}}',)">
|
||||
<i class="fas fa-flag fa-sm fa-fw mr-4"></i>Report
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="block md:hidden">
|
||||
<button data-bs-toggle="modal" data-bs-target="#actionsModal-{{c.id}}" data-bs-focus="false">
|
||||
<i class="fas fa-ellipsis-h fa-fw mr-1"></i>
|
||||
</button>
|
||||
</li>
|
||||
{% if v and request.path.startswith('/@') and v.admin_level == 0 %}
|
||||
{% if voted==1 %}
|
||||
<li class="list-inline-item arrow-up d-inline-block md:hidden comment-{{c.id}}-up active"></li>
|
||||
{% endif %}
|
||||
{% elif v %}
|
||||
<li id="comment-mobile-{{c.id}}-up" tabindex="0" href="javascript:void(0)" onclick="vote('comment-mobile', '{{c.id}}', '1')" class="list-inline-item arrow-up upvote-button d-inline-block md:hidden mx-0 pr-1 comment-{{c.id}}-up {% if voted==1 %}active{% endif %}"></li>
|
||||
{% else %}
|
||||
<li id="comment-{{c.id}}-up" tabindex="0" href="/login" class="list-inline-item arrow-up d-inline-block md:hidden mx-0 pr-1"></li>
|
||||
{% endif %}
|
||||
<li class="list-inline-item d-inline-block md:hidden mx-0"><span class="points" data-bs-toggle="tooltip" data-bs-placement="top" title="" data-bs-original-title="+{{ups}} | -{{downs}}"><span id="comment-mobile-score-{{c.id}}" class="score comment-score-{{c.id}} {% if voted==1 %}score-up{% elif voted==-1%}score-down{% endif %}">{{score}}</span></span></li>
|
||||
{% if v and request.path.startswith('/@') and v.admin_level == 0 %}
|
||||
{% if voted==-1 %}
|
||||
<li class="list-inline-item arrow-down d-inline-block md:hidden comment-{{c.id}}-up active"></li>
|
||||
{% endif %}
|
||||
{% elif v %}
|
||||
<li {% if environ.get('DISABLE_DOWNVOTES') == '1' %}style="display:None!important"{% endif %} id="comment-mobile-{{c.id}}-down" tabindex="0" href="javascript:void(0)" onclick="vote('comment-mobile', '{{c.id}}', '-1')" class="list-inline-item arrow-down downvote-button d-inline-block md:hidden mx-0 pl-1 comment-{{c.id}}-down {% if voted==-1 %}active{% endif %}"></li>
|
||||
{% else %}
|
||||
<li {% if environ.get('DISABLE_DOWNVOTES') == '1' %}style="display:None!important"{% endif %} id="comment-{{c.id}}-down" tabindex="0" href="/login" class="list-inline-item arrow-down mx-0 pl-1 d-inline-block md:hidden"></li>
|
||||
{% endif %}
|
||||
</ul>
|
|
@ -1,72 +0,0 @@
|
|||
<div id="comment-edit-{{c.id}}" class="hidden flex flex-wrap w-full">
|
||||
<form id="comment-edit-form-{{c.id}}" action="/edit_comment/{{c.id}}" method="post" class="input-group" enctype="multipart/form-data">
|
||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||
<div class="relative comment-box rounded-lg border border-gray-300 dark:border-gray-900 bg-gray-100 dark:bg-white/[.05] shadow-inner w-full">
|
||||
<textarea {% if v.longpost %}minlength="280"{% endif %} maxlength="{% if v.bird %}140{% else %}10000{% endif %}" id="comment-edit-body-{{c.id}}" data-id="{{c.id}}" name="body" form="comment-edit-form-{{c.id}}" 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="Add your comment..." rows="3">{{c.body}}</textarea>
|
||||
<ul class="-mt-1 flex space-x-4 px-3 py-2 border-t border-dashed border-gray-400 dark:border-white/[.05] mb-0">
|
||||
<li>
|
||||
<button type="button" class="text-gray-400 hover:text-gray-500" onclick="makeBold('comment-edit-body-{{c.id}}')">
|
||||
<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('comment-edit-body-{{c.id}}')">
|
||||
<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('comment-edit-body-{{c.id}}')">
|
||||
<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>
|
||||
<li>
|
||||
<button type="button" class="text-gray-400 hover:text-gray-500" onclick="commentForm('comment-edit-body-{{c.id}}');getGif()">
|
||||
<span class="font-bold text-sm text-uppercase" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#gifModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Add GIF">GIF</span>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="text-gray-400 hover:text-gray-500" onclick="loadEmojis('comment-edit-body-{{c.id}}')" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Add Emoji"> <i class="fas fa-smile-beam fa-fw fa-sm"></i>
|
||||
</button>
|
||||
</li>
|
||||
{% if v %}
|
||||
<li>
|
||||
<label for="file-edit-reply-{{c.id}}" class="text-gray-400 hover:text-gray-500">
|
||||
<div id="filename-edit-reply-{{c.id}}">
|
||||
<i class="fas fa-camera fa-fw fa-sm"></i>
|
||||
</div>
|
||||
<input id="file-edit-reply-{{c.id}}" type="file" name="file" accept="image/*, video/*" onchange="document.getElementById('filename-edit-reply-{{c.id}}').innerHTML='image/video';" hidden>
|
||||
</label>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="flex w-full justify-between mt-2">
|
||||
<a href="/formatting" target="_blank" class="inline-block text-sm text-gray-600">
|
||||
Formatting help
|
||||
</a>
|
||||
<div class="ml-auto flex">
|
||||
<button type="button" id="cancel-edit-{{c.id}}" class="px-4 py-2 text-sm font-bold text-gray-400 hover:text-gray-500" onclick="toggleEdit('{{c.id}}')">
|
||||
Cancel
|
||||
</button>
|
||||
<button type="button" form="comment-edit-form-{{c.id}}" class="ml-2 btn btn-green" onclick="comment_edit('{{c.id}}')">
|
||||
Save edit
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="comment-format">
|
||||
<small class="btn btn-secondary format d-inline-block m-0"><span class="font-weight-bolder text-uppercase" aria-hidden="true" onclick="commentForm('comment-edit-body-{{c.id}}');getGif()" data-bs-toggle="modal" data-bs-target="#gifModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Add GIF">GIF</span></small>
|
||||
|
||||
<small class="btn btn-secondary format d-inline-block m-0"><i class="fas fa-smile-beam" aria-hidden="true" onclick="loadEmojis('comment-edit-body-{{c.id}}')" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Add Emoji"></i></small>
|
||||
|
||||
<label class="btn btn-secondary format d-inline-block m-0" for="file-edit-reply-{{c.id}}">
|
||||
<div id="filename-edit-reply-{{c.id}}"><i class="far fa-image"></i></div>
|
||||
<input id="file-edit-reply-{{c.id}}" type="file" name="file" accept="image/*, video/*" onchange="document.getElementById('filename-edit-reply-{{c.id}}').innerHTML='image/video';" hidden>
|
||||
</label>
|
||||
|
||||
<a id="cancel-edit-{{c.id}}" href="javascript:void(0)" onclick="toggleEdit('{{c.id}}')" class="hidden d-md-block btn btn-link text-muted ml-auto cancel-form">Cancel</a>
|
||||
<a href="javascript:void(0)" form="comment-edit-form-{{c.id}}" class="hidden d-md-block btn btn-primary ml-2" onclick="comment_edit('{{c.id}}')">Save Edit</a>
|
||||
</div>
|
||||
<a id="cancel-edit-{{c.id}}" href="javascript:void(0)" onclick="toggleEdit('{{c.id}}')" class="md:hidden btn btn-link text-muted ml-auto cancel-form">Cancel</a>
|
||||
<a href="javascript:void(0)" form="comment-edit-form-{{c.id}}" class="md:hidden btn btn-primary ml-2" onclick="comment_edit('{{c.id}}')">Save Edit</a> -->
|
||||
</form>
|
||||
</div>
|
|
@ -1,53 +0,0 @@
|
|||
<form id="reply-to-{{p.fullname}}" class="flex flex-wrap w-full" action="/comment" method="post">
|
||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||
<input type="hidden" name="parent_fullname" value="t2_{{p.id}}">
|
||||
<input id="reply-form-submission-{{p.fullname}}" type="hidden" name="submission" value="{{p.id}}">
|
||||
<div class="relative comment-box rounded-lg border border-gray-300 dark:border-gray-900 bg-gray-100 dark:bg-white/[.05] shadow-inner w-full">
|
||||
<textarea maxlength="10000" id="reply-form-body-{{p.fullname}}" data-fullname="{{p.fullname}}" 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" id="comment-form" name="body" form="reply-to-{{p.fullname}}" aria-label="With textarea" placeholder="Add your comment..." rows="3" oninput="charLimit('reply-form-body-{{p.fullname}}','charcount-reply')"></textarea>
|
||||
<ul class="-mt-1 flex space-x-4 px-3 py-2 border-t border-dashed border-gray-400 dark:border-white/[.05] mb-0">
|
||||
<li>
|
||||
<button type="button" class="text-gray-400 hover:text-gray-500" onclick="makeBold('reply-form-body-{{p.fullname}}')">
|
||||
<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('reply-form-body-{{p.fullname}}')">
|
||||
<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('reply-form-body-{{p.fullname}}')">
|
||||
<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>
|
||||
<li>
|
||||
<button type="button" id="gif-reply-btn-{{p.fullname}}" class="text-gray-400 hover:text-gray-500" onclick="commentForm('reply-form-body-{{p.fullname}}');getGif()">
|
||||
<span class="font-bold text-sm text-uppercase" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#gifModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Add GIF">GIF</span>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" id="emoji-reply-btn-{{p.fullname}}" class="text-gray-400 hover:text-gray-500" onclick="loadEmojis('reply-form-body-{{p.fullname}}')" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Add Emoji"> <i class="fas fa-smile-beam fa-fw fa-sm"></i>
|
||||
</button>
|
||||
</li>
|
||||
{% if v %}
|
||||
<li>
|
||||
<label for="file-upload-reply-{{p.fullname}}" class="text-gray-400 hover:text-gray-500">
|
||||
<div id="filename-show-reply-{{p.fullname}}">
|
||||
<i class="fas fa-camera fa-fw fa-sm"></i>
|
||||
</div>
|
||||
<input id="file-upload-reply-{{p.fullname}}" type="file" name="file" accept="image/*, video/*" onchange="document.getElementById('filename-show-reply-{{p.fullname}}').innerHTML='image/video';" hidden>
|
||||
</label>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
<span id="charcount-reply" class="absolute bottom-3 right-3 text-xs text-gray-400 font-bold"></span>
|
||||
</div>
|
||||
<div class="flex w-full justify-between mt-2">
|
||||
<a href="/formatting" target="_blank" class="inline-block text-sm text-gray-600">
|
||||
Formatting help
|
||||
</a>
|
||||
<button type="button" id="save-reply-to-{{p.fullname}}" form="reply-to-{{p.fullname}}" class="ml-auto btn btn-primary" onclick="post_comment('{{p.fullname}}', '{{p.id}}')">
|
||||
Comment
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
|
@ -1,44 +0,0 @@
|
|||
<div id="reply-m-{{c.id}}" class="hidden">
|
||||
<div id="comment-form-space-{{c.id}}" class="comment-write collapsed child">
|
||||
<form id="reply-to-message-{{c.id}}" action="/reply" method="post" class="input-group" enctype="multipart/form-data">
|
||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||
<div class="relative comment-box rounded-lg border border-gray-300 dark:border-gray-900 bg-gray-100 dark:bg-white/[.05] shadow-inner w-full">
|
||||
<textarea maxlength="10000" name="body" form="reply-to-t3_{{c.id}}" data-id="{{c.id}}" 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" placeholder="Write a reply..." id="reply-form-body-{{c.id}}" aria-label="With textarea" rows="3"></textarea>
|
||||
<ul class="-mt-1 flex space-x-4 px-3 py-2 border-t border-dashed border-gray-400 dark:border-white/[.05] mb-0">
|
||||
<li>
|
||||
<button type="button" class="text-gray-400 hover:text-gray-500" onclick="makeBold('reply-form-body-{{c.id}}')">
|
||||
<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('reply-form-body-{{c.id}}')">
|
||||
<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('reply-form-body-{{c.id}}')">
|
||||
<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>
|
||||
<li>
|
||||
<button type="button" class="text-gray-400 hover:text-gray-500" onclick="loadEmojis('reply-form-body-{{c.id}}')" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Add Emoji"> <i class="fas fa-smile-beam fa-fw fa-sm"></i>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="flex w-full justify-between mt-2">
|
||||
<a href="/formatting" target="_blank" class="inline-block text-sm text-gray-600">
|
||||
Formatting help
|
||||
</a>
|
||||
<div class="ml-auto flex">
|
||||
<button type="button" class="px-4 py-2 text-sm font-bold text-gray-400 hover:text-gray-500" onclick="document.getElementById('reply-m-{{c.id}}').classList.add('hidden')">
|
||||
Cancel
|
||||
</button>
|
||||
<button type="button" id="save-reply-to-{{c.id}}" class="ml-2 btn btn-primary" onclick="post_reply('{{c.id}}');">
|
||||
Reply
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
|
@ -1,79 +0,0 @@
|
|||
<div id="comment-form-space-{{c.fullname}}" class="flex flex-wrap w-full">
|
||||
<form id="reply-to-t3_{{c.id}}" action="/comment" method="post" class="input-group" enctype="multipart/form-data">
|
||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||
<input type="hidden" name="parent_fullname" value="{{c.fullname}}">
|
||||
<input id="reply-form-submission-{{c.fullname}}" type="hidden" name="submission" value="{{c.post.id}}">
|
||||
<div class="relative comment-box rounded-lg border border-gray-300 dark:border-gray-900 bg-gray-100 dark:bg-white/[.05] shadow-inner w-full">
|
||||
<textarea {% if v.longpost %}minlength="280"{% endif %} maxlength="{% if v.bird %}140{% else %}10000{% endif %}" id="reply-form-body-{{c.fullname}}" data-fullname="{{c.fullname}}" name="body" form="reply-to-t3_{{c.id}}" 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="Write your reply..." rows="3" oninput="charLimit('reply-form-body-{{c.fullname}}','charcount-{{c.id}}')"></textarea>
|
||||
<ul class="-mt-1 flex space-x-4 px-3 py-2 border-t border-dashed border-gray-400 dark:border-white/[.05] mb-0">
|
||||
<li>
|
||||
<button type="button" class="text-gray-400 hover:text-gray-500" onclick="makeBold('reply-form-body-{{c.fullname}}')">
|
||||
<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('reply-form-body-{{c.fullname}}')">
|
||||
<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('reply-form-body-{{c.fullname}}')">
|
||||
<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>
|
||||
<li>
|
||||
<button type="button" class="text-gray-400 hover:text-gray-500" onclick="commentForm('reply-form-body-{{c.fullname}}');getGif()">
|
||||
<span class="font-bold text-sm text-uppercase" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#gifModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Add GIF">GIF</span>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="text-gray-400 hover:text-gray-500" onclick="loadEmojis('reply-form-body-{{c.fullname}}')" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Add Emoji"> <i class="fas fa-smile-beam fa-fw fa-sm"></i>
|
||||
</button>
|
||||
</li>
|
||||
{% if v %}
|
||||
<li>
|
||||
<label for="file-upload-reply-{{c.fullname}}" class="text-gray-400 hover:text-gray-500">
|
||||
<div id="filename-show-reply-{{c.fullname}}">
|
||||
<i class="fas fa-camera fa-fw fa-sm"></i>
|
||||
</div>
|
||||
<input id="file-upload-reply-{{c.fullname}}" type="file" name="file" accept="image/*, video/*" onchange="document.getElementById('filename-show-reply-{{c.fullname}}').innerHTML='image/video';" hidden>
|
||||
</label>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
<span id="charcount-{{c.id}}" class="absolute bottom-3 right-3 text-xs text-gray-400 font-bold"></span>
|
||||
</div>
|
||||
<div class="flex w-full justify-between mt-2">
|
||||
<a href="/formatting" target="_blank" class="inline-block text-sm text-gray-600">
|
||||
Formatting help
|
||||
</a>
|
||||
<div class="ml-auto flex">
|
||||
<button type="button" class="px-4 py-2 text-sm font-bold text-gray-400 hover:text-gray-500" onclick="document.getElementById('reply-to-{{c.id}}').classList.add('hidden')">
|
||||
Cancel
|
||||
</button>
|
||||
<button type="button" id="save-reply-to-{{c.fullname}}" class="ml-2 btn btn-primary" onclick="post_comment('{{c.fullname}}', '{{c.post.id}}');">
|
||||
Comment
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="comment-format" id="comment-format-bar-{{c.id}}">
|
||||
<label class="btn btn-secondary format d-inline-block m-0" for="gif-reply-btn-{{c.fullname}}">
|
||||
<span id="gif-reply-btn-{{c.fullname}}" class="font-weight-bolder text-uppercase" onclick="commentForm('reply-form-body-{{c.fullname}}');getGif()" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#gifModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Add GIF">GIF</span>
|
||||
</label>
|
||||
|
||||
<label class="btn btn-secondary format d-inline-block m-0" for="gif-reply-btn-{{c.fullname}}">
|
||||
<i id="emoji-reply-btn-{{c.fullname}}" class="fas fa-smile-beam" onclick="loadEmojis('reply-form-body-{{c.fullname}}')" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="Add Emoji"></i>
|
||||
</label>
|
||||
|
||||
<label class="btn btn-secondary format d-inline-block m-0" for="file-upload-reply-{{c.fullname}}">
|
||||
<div id="filename-show-reply-{{c.fullname}}"><i class="far fa-image"></i></div>
|
||||
<input id="file-upload-reply-{{c.fullname}}" type="file" name="file" accept="image/*, video/*" onchange="document.getElementById('filename-show-reply-{{c.fullname}}').innerHTML='image/video';" hidden>
|
||||
</label>
|
||||
<a href="javascript:void(0)" onclick="document.getElementById('reply-to-{{c.id}}').classList.add('hidden')" class="hidden d-md-block btn btn-link text-muted ml-auto cancel-form">Cancel</a>
|
||||
<a id="save-reply-to-{{c.fullname}}" class="hidden d-md-block btn btn-primary text-muted ml-2" onclick="post_comment('{{c.fullname}}', '{{c.post.id}}');" href="javascript:void(0)">Comment</a>
|
||||
</div>
|
||||
</div>
|
||||
<a href="javascript:void(0)" onclick="document.getElementById('reply-to-{{c.id}}').classList.add('hidden')" class="md:hidden btn btn-link text-muted ml-auto cancel-form">Cancel</a>
|
||||
<a id="save-reply-to-{{c.fullname}}" class="md:hidden btn btn-primary text-white ml-2" onclick="post_comment('{{c.fullname}}', '{{c.post.id}}');" href="javascript:void(0)">Comment</a> -->
|
||||
</form>
|
||||
</div>
|
|
@ -1,67 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>{{'SITE_NAME' | app_config}} - Contact</title>
|
||||
<meta name="description" content="Contact {{'SITE_NAME' | app_config}} Admins">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="col-span-full">
|
||||
|
||||
{% if error %}
|
||||
<div class="alert alert-danger alert-dismissible fade show my-3" role="alert">
|
||||
<i class="fas fa-exclamation-circle my-auto"></i>
|
||||
<span>
|
||||
{{error}}
|
||||
</span>
|
||||
<button type="button" class="close" data-bs-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true"><i class="far fa-times"></i></span>
|
||||
</button>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if msg %}
|
||||
<div class="alert alert-success alert-dismissible fade show my-3" role="alert">
|
||||
<i class="fas fa-check-circle my-auto" aria-hidden="true"></i>
|
||||
<span>
|
||||
{{msg}}
|
||||
</span>
|
||||
<button type="button" class="close" data-bs-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true"><i class="far fa-times"></i></span>
|
||||
</button>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<h1 class="article-title">Contact {{'SITE_NAME' | app_config}} Admins</h1>
|
||||
{% if v and v.is_activated and not v.is_suspended %}
|
||||
|
||||
<p>Use this form to contact {{'SITE_NAME' | app_config}} Admins.</p>
|
||||
|
||||
<label class="mt-3">Your Email</label>
|
||||
<input class="form-control" value="{{v.email}}" readonly="readonly" disabled>
|
||||
|
||||
<form id="contactform" action="/contact" method="post">
|
||||
|
||||
<label for="input-message" class="mt-3">Your message</label>
|
||||
<textarea maxlength="10000" id="input-message" form="contactform" name="message" class="form-control" required></textarea>
|
||||
|
||||
<input type="submit" value="Submit" class="btn btn-primary mt-3">
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
{% elif v %}
|
||||
|
||||
<p>Please <a {% if v and v.newtab %}target="_blank"{% endif %} href="/settings/security">verify your email address</a> in order to ensure we can respond to your message if needed. Then, refresh this page.</p>
|
||||
|
||||
{% else %}
|
||||
|
||||
<p>In order to ensure that we can respond to your message, please first <a href="/signup" {% if v and v.newtab %}target="_blank"{% endif %}>sign up</a> or <a href="/login" {% if v and v.newtab %}target="_blank"{% endif %}>log in</a> and make sure you have <a {% if v and v.newtab %}target="_blank"{% endif %} href="/settings/security">verified your email address</a>. Then, refresh this page.</p>
|
||||
|
||||
{% endif %}
|
||||
|
||||
<p>If you can see this line, we haven't been contacted by any law enforcement or governmental organizations in 2022 yet.</p>
|
||||
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -1,363 +0,0 @@
|
|||
{% if v and v.theme2 %}
|
||||
{% set theme = v.theme2 %}
|
||||
{% else %}
|
||||
{% set theme = 'theme-iron dark' %}
|
||||
{% endif %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" class="{{ theme }}">
|
||||
<head>
|
||||
{% if v and v.agendaposter %}
|
||||
<script src="/assets/CHRISTMAS/js/agendaposter.js"></script>
|
||||
<noscript>
|
||||
<style>
|
||||
body {
|
||||
-moz-transform: scale(-1, -1);
|
||||
-o-transform: scale(-1, -1);
|
||||
-webkit-transform: scale(-1, -1);
|
||||
transform: scale(-1, -1);
|
||||
}
|
||||
</style>
|
||||
</noscript>
|
||||
{% endif %}
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="thumbnail" content="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/preview.gif">
|
||||
|
||||
<link rel="icon" type="image/png" href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1">
|
||||
{% block title %}
|
||||
<title>{{'SITE_NAME' | app_config}}</title>
|
||||
|
||||
<meta property="og:type" content="article" >
|
||||
<meta property="og:title" content="{{'SITE_NAME' | app_config}}" >
|
||||
<meta property="og:site_name" content="{{request.host}}" >
|
||||
<meta property="og:image" content="{{'SITE_NAME' | app_config}}/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/preview.gif" >
|
||||
<meta property="og:url" content="{{request.path | full_link}}">
|
||||
<meta property="og:description" name="description" content="{{'SITE_NAME' | app_config}} - {{'SLOGAN' | app_config}}">
|
||||
<meta property="og:author" name="author" content="@{{request.host_url}}" >
|
||||
<meta property="og:site_name" content="{{request.host}}" >
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:site" content="@{{request.host_url}}">
|
||||
<meta name="twitter:title" content="{{'SITE_NAME' | app_config}}" >
|
||||
<meta name="twitter:creator" content="@{{request.host_url}}">
|
||||
<meta name="twitter:description" content="{{'SITE_NAME' | app_config}} - {{'SLOGAN' | app_config}}" >
|
||||
<meta name="twitter:image" content="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/preview.gif" >
|
||||
<meta name="twitter:url" content="{{request.path | full_link}}" >
|
||||
{% endblock %}
|
||||
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-touch-fullscreen" content="yes">
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
|
||||
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1">
|
||||
<!---<link rel="icon" type="image/png" sizes="32x32" href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1">--->
|
||||
<link rel="manifest" href="/assets/CHRISTMAS/manifest.json">
|
||||
<link rel="mask-icon" href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1" color="#{{'DEFAULT_COLOR' | app_config}}">
|
||||
<link rel="shortcut icon" href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1">
|
||||
<meta name="apple-mobile-web-app-title" content="{{'SITE_NAME' | app_config}}">
|
||||
<meta name="application-name" content="{{'SITE_NAME' | app_config}}">
|
||||
<meta name="msapplication-TileColor" content="#{{'DEFAULT_COLOR' | app_config}}">
|
||||
<meta name="msapplication-config" content="/assets/CHRISTMAS/images/browserconfig.xml">
|
||||
<meta name="theme-color" content="#{{'DEFAULT_COLOR' | app_config}}">
|
||||
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="320x480"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="640x960"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="640x1136"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="750x1334"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="768x1004"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="768x1024"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="828x1792"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="1024x748"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="1024x768"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="1125x2436"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="1242x2208"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="1242x2688"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="1334x750"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="1536x2008"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="1536x2048"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="1668x2224"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="1792x828"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="2048x1496"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="2048x1536"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="2048x2732"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="2208x1242"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="2224x1668"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="2436x1125"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="2668x1242"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
<link
|
||||
rel="apple-touch-startup-image"
|
||||
sizes="2737x2048"
|
||||
href="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/icon.webp?a=1"
|
||||
>
|
||||
|
||||
{% block stylesheets %}
|
||||
|
||||
<link rel="stylesheet" href="/static/assets/CHRISTMAS/css/main.css?a=10">
|
||||
|
||||
<link rel="stylesheet" href="/static/dist/main.css?a=15">
|
||||
|
||||
{% if v %}
|
||||
<style>:root{--primary:#dc2626}</style>
|
||||
<!-- <style>:root{--primary:#{{v.themecolor}}}</style> -->
|
||||
<!-- <link rel="stylesheet" href="/assets/CHRISTMAS/css/{{v.theme}}.css?a=1"> -->
|
||||
{% if v.agendaposter %}
|
||||
<link rel="stylesheet" href="/static/assets/CHRISTMAS/css/agendaposter.css?a=1">
|
||||
{% elif v.css %}
|
||||
<link rel="stylesheet" href="/@{{v.username}}/css">
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<style>:root{--primary:#dc2626}</style>
|
||||
<!-- <style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}}</style> -->
|
||||
<!-- <link rel="stylesheet" href="/assets/CHRISTMAS/css/{{'DEFAULT_THEME' | app_config}}.css?a=1"> -->
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
<link href="/static/assets/CHRISTMAS/css/fa.css?a=1" rel="stylesheet">
|
||||
|
||||
</head>
|
||||
|
||||
<body id="{% if request.path != '/comments' %}{% block pagetype %}frontpage{% endblock %}{% endif %}" class="overflow-hidden overflow-y-auto antialiased text-black bg-gray-700 dark:text-gray-100">
|
||||
|
||||
{% block Banner %}
|
||||
{% endblock %}
|
||||
|
||||
{% include "CHRISTMAS/header-tw.html" %}
|
||||
|
||||
{% block mobileUserBanner %}
|
||||
{% endblock %}
|
||||
|
||||
{% block mobileBanner %}
|
||||
{% endblock %}
|
||||
|
||||
{% block postNav %}
|
||||
{% endblock %}
|
||||
|
||||
<div class="flex h-full pt-20 bg-gray-500 dark:bg-gray-700 dark:text-gray-200">
|
||||
<div class="w-full">
|
||||
|
||||
{% block desktopUserBanner %}
|
||||
{% endblock %}
|
||||
|
||||
{% block desktopBanner %}
|
||||
{% endblock %}
|
||||
|
||||
<div class="md:px-4 bg-gray-700" id="sub-header-row">
|
||||
{% block subHeader %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
{% block subHeader2 %}
|
||||
{% endblock %}
|
||||
|
||||
<div class="w-full md:px-4">
|
||||
<div class="w-full max-w-screen-2xl mx-auto mb-4 md:px-4 grid grid-cols-12 gap-6 bg-gray-300 md:bg-gray-200 dark:bg-gray-800 rounded-b" id="main-content-row">
|
||||
|
||||
{% block searchText %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
|
||||
{% block pagenav %}
|
||||
{% endblock %}
|
||||
|
||||
{% block sidebar %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% include "CHRISTMAS/footer.html" %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if v %}
|
||||
<div id="formkey" class="hidden">{{ v.formkey }}</div>
|
||||
{% endif %}
|
||||
|
||||
{% include "CHRISTMAS/ProfilePopover.html" %}
|
||||
|
||||
{% block mobilenavbar %}
|
||||
{% include "CHRISTMAS/mobile_navigation_bar.html" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block actionsModal %}{% endblock %}
|
||||
|
||||
{% block reportCommentModal %}{% endblock %}
|
||||
|
||||
{% block GIFtoast %}{% endblock %}
|
||||
|
||||
{% block GIFpicker %}{% endblock %}
|
||||
|
||||
<!-- Import toast notifications -->
|
||||
{% include "CHRISTMAS/toasts/toasts.html" %}
|
||||
|
||||
{% block modals %}{% endblock %}
|
||||
|
||||
{% if v %}
|
||||
{% include "CHRISTMAS/modals/ModalThemePicker.html" %}
|
||||
{% include "CHRISTMAS/modals/ModalDirectMessage.html" %}
|
||||
{% endif %}
|
||||
|
||||
{% block popovers %}{% endblock %}
|
||||
|
||||
{% block fixedMobileBarJS %}{% endblock %}
|
||||
|
||||
{% block scripts %}{% endblock %}
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="/static/assets/CHRISTMAS/js/header.js?a=2"></script>
|
||||
|
||||
<!-- Lazy Loading -->
|
||||
<script src="/static/assets/CHRISTMAS/js/lozad.js?a=1"></script>
|
||||
<script>
|
||||
const observer = lozad();
|
||||
observer.observe();
|
||||
</script>
|
||||
|
||||
<!-- Bootstrap -->
|
||||
<script src="/static/assets/CHRISTMAS/js/bootstrap.js"></script>
|
||||
|
||||
<!-- Clipboard JS -->
|
||||
<script src="/static/assets/CHRISTMAS/js/clipboard.js"></script>
|
||||
<script>
|
||||
var clipboard = new ClipboardJS('.copy-link');
|
||||
clipboard.on('success', function(e) {
|
||||
var myToast = new bootstrap.Toast(document.getElementById('toast-success'));
|
||||
myToast.show();
|
||||
console.log(e);
|
||||
});
|
||||
</script>
|
||||
|
||||
<link rel="stylesheet" href="/static/assets/CHRISTMAS/css/lite-youtube.css?a=1">
|
||||
<script src="/static/assets/CHRISTMAS/js/lite-youtube.js?a=1"></script>
|
||||
|
||||
<script src="/static/assets/CHRISTMAS/js/gif_modal.js?a=1"></script>
|
||||
<script src="/static/assets/CHRISTMAS/js/emoji_modal.js?a=18"></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>
|
||||
|
||||
{% if v %}
|
||||
<script>function formkey() {return '{{v.formkey}}';}</script>
|
||||
|
||||
<script>
|
||||
var previousTheme = '{{ v.theme2 }}'.split(' ');
|
||||
function changeTheme(theme) {
|
||||
const root = document.documentElement
|
||||
// if previous selection has a value, remove them from root html tag
|
||||
if (previousTheme.length) {
|
||||
previousTheme.map(v => root.classList.toggle(v));
|
||||
}
|
||||
// toggle classes in root html tag
|
||||
theme.map(v => root.classList.toggle(v));
|
||||
// Set global previous selection to current selection
|
||||
previousTheme = theme;
|
||||
}
|
||||
</script>
|
||||
{% endif %}
|
||||
<script src="/static/assets/CHRISTMAS/js/default.js?a=41"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,26 +0,0 @@
|
|||
<script src="/assets/CHRISTMAS/js/delete_post_modal.js?a=1"></script>
|
||||
|
||||
<div class="modal fade" id="deletePostModal" tabindex="-1" role="dialog" aria-labelledby="deletePostModalTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" 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 leading-normal">Delete post?</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 text-center">
|
||||
<div class="mb-3">
|
||||
<i class="fad fa-trash-alt fa-lg text-red-600"></i>
|
||||
</div>
|
||||
<p>
|
||||
Your post will be removed everywhere on {{'SITE_NAME' | app_config}}. This action can be undone.
|
||||
</p>
|
||||
</div>
|
||||
<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 type="button" id="deletePostButton" class="btn btn-red">Delete post</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,62 +0,0 @@
|
|||
<div class="dropdown">
|
||||
<button class="relative flex items-center px-3 py-2.5 rounded text-sm leading-normal text-gray-400 hover:text-gray-300 dark:text-gray-500 dark:hover:text-gray-400 focus:text-gray-300 dark:focus:text-gray-400 focus:font-bold focus:text-shadow focus:outline-none" type="button" id="dropdownMenuButton" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<i class="fas fa-angle-double-down fa-fw fa-lg mr-2"></i>
|
||||
More
|
||||
</button>
|
||||
<ul class="dropdown-menu w-56 bg-gray-900 rounded-md rounded-t-none shadow-lg" aria-labelledby="dropdownMenuButton" x-placement="bottom-start">
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/shop">
|
||||
<i class="fas fa-store fa-sm fa-fw mr-4"></i>Shop
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/leaderboard">
|
||||
<i class="fas fa-trophy fa-sm fa-fw mr-4"></i>Leaderboards
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="mt-2 mb-1.5 border-t border-black h-1 shadow-inset-t-white-05"/>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/changelog">
|
||||
<i class="fas fa-clipboard fa-sm fa-fw mr-4"></i>Changelog
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="https://github.com/Aevann1/Drama">
|
||||
<i class="fab fa-github fa-sm fa-fw mr-4"></i>Source Code
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/post/18459/">
|
||||
<i class="fas fa-bug fa-sm fa-fw mr-4"></i>Report Bugs
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="mt-2 mb-1.5 border-t border-black h-1 shadow-inset-t-white-05"/>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/discord">
|
||||
<i class="fab fa-discord fa-sm fa-fw mr-4"></i>Discord Server
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="https://play.google.com/store/apps/details?id=com.rdrama">
|
||||
<i class="fab fa-android fa-sm fa-fw mr-4"></i>Android App
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/archives">
|
||||
<i class="fas fa-book fa-sm fa-fw mr-4"></i>Archives
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="mt-2 mb-1.5 border-t border-black h-1 shadow-inset-t-white-05"/>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/post/2510/">
|
||||
<i class="fas fa-balance-scale fa-sm fa-fw mr-4"></i>Community Rules
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
|
@ -1,89 +0,0 @@
|
|||
<div class="dropdown">
|
||||
<button class="relative flex items-center px-3 py-2.5 rounded text-sm text-gray-100 hover:text-gray-400 focus:text-gray-200 focus:outline-none dropdown-toggle" type="button" id="dropdownProfileMenuButton" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-bs-offset="0,-2">
|
||||
<span class="sr-only">Open user menu</span>
|
||||
<img class="h-9 w-9 bg-white p-[3px] border border-gray-800" src="{{ v.profile_url }}" alt="Your avatar"/>
|
||||
<div class="pl-2 text-left">
|
||||
<span class="font-bold text-sm">{{ v.username }}</span>
|
||||
<div class="flex items-center block leading-none text-gray-400">
|
||||
<span class="text-xs">{{v.coins}} {{'COINS_NAME' | app_config}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</button>
|
||||
<ul class="dropdown-menu w-56 bg-gray-900 rounded-md rounded-t-none shadow-lg" aria-labelledby="dropdownProfileMenuButton" x-placement="bottom-start">
|
||||
<li>
|
||||
<a class="block px-4 py-2" aria-current="page" href="/me">
|
||||
<div class="text-base text-white leading-5 font-bold">
|
||||
{{ v.username }}
|
||||
</div>
|
||||
<div class="flex space-x-4 mt-1">
|
||||
<small class="flex items-center block mt-1 text-gray-300">
|
||||
<img data-bs-toggle="tooltip" data-bs-placement="bottom" src="/assets/images/emojis/marseycoin.webp" data-bs-original-title="{{'COINS_NAME' | app_config}}" aria-label="{{'COINS_NAME' | app_config}}" class="w-6 h-6 object-contain" alt="coin icon"/>
|
||||
<span class="pl-2">{{v.coins}}</span>
|
||||
</small>
|
||||
{% if v.procoins %}
|
||||
<small class="flex items-center block mt-1 text-gray-300">
|
||||
<img data-bs-toggle="tooltip" data-bs-placement="bottom" src="/assets/images/emojis/marseybux.webp" data-bs-original-title="MarseyBux" aria-label="MarseyBux" class="w-6 h-6 object-contain" alt="coin icon"/>
|
||||
<span class="pl-2">{{v.procoins}}</span>
|
||||
</small>
|
||||
{% endif %}
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="mt-2 mb-1.5 border-t border-black h-1 shadow-inset-t-white-05"/>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/@me">
|
||||
<i class="fas fa-user fa-sm fa-fw mr-4"></i>Profile
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/notifications{% if v.notifications_count and v.notifications_count == v.post_notifications_count %}?posts=true{% endif %}">
|
||||
<i class="fas fa-envelope fa-sm fa-fw mr-4"></i>Inbox
|
||||
{% if v.notifications_count %}<span class="text-red-500">{{ v.notifications_count }}</span>{% endif %}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="mt-2 mb-1.5 border-t border-black h-1 shadow-inset-t-white-05"/>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/@{{ v.username }}">
|
||||
<i class="fas fa-pen fa-sm fa-fw mr-4"></i>Posts
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/@{{ v.username }}/comments">
|
||||
<i class="fas fa-comments-alt fa-sm fa-fw mr-4"></i>Comments
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="mt-2 mb-1.5 border-t border-black h-1 shadow-inset-t-white-05"/>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item block w-full text-left px-4 py-2 text-sm text-gray-200 hover:text-yellow-900 bg-gradient-to-t hover:from-yellow-600 hover:to-yellow-500 hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-t focus:from-yellow-600 focus:to-yellow-500" href="https://marsey1.gumroad.com/l/tfcvri">
|
||||
<i class="fas fa-arrow-alt-up fa-sm fa-fw mr-4"></i>Donate
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/settings">
|
||||
<i class="fas fa-cog fa-sm fa-fw mr-4"></i>Settings
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="mt-2 mb-1.5 border-t border-black h-1 shadow-inset-t-white-05"/>
|
||||
</li>
|
||||
<li>
|
||||
<button class="dropdown-item dropdown-item-primary" data-bs-toggle="modal" data-bs-target="#themePickerModal">
|
||||
<i class="fas fa-paint-brush fa-sm fa-fw mr-4"></i>Pick theme
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="mt-2 mb-1.5 border-t border-black h-1 shadow-inset-t-white-05"/>
|
||||
</li>
|
||||
<li>
|
||||
<button class="dropdown-item dropdown-item-primary" onclick="post_toast('/logout', '1')">
|
||||
<i class="fas fa-power-off fa-sm fa-fw mr-4"></i>Log out
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
|
@ -1,97 +0,0 @@
|
|||
<div class="dropdown">
|
||||
<button class="btn btn-gray" type="button" id="dropdownProfile-Actions" data-bs-toggle="dropdown" aria-expanded="false" data-bs-auto-close="outside">
|
||||
<i class="fas fa-shield fa-fw fa-sm"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu w-56 bg-gray-900 rounded-md shadow-lg" aria-labelledby="dropdownProfile-Actions">
|
||||
{% if v.admin_level > 1 %}
|
||||
<li id="verify2" class="{% if u.verified %}hidden{% endif %}">
|
||||
<button class="dropdown-item block w-full text-left px-4 py-2 text-sm text-gray-200 bg-gradient-to-t hover:from-red-800 hover:to-red-700 hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-t focus:from-red-800 focus:to-red-700" onclick="post_toast2('/admin/verify/{{u.id}}','verify2','unverify2')">
|
||||
<i class="fas fa-badge-check fa-sm fa-fw mr-4"></i>
|
||||
Verify
|
||||
</button>
|
||||
</li>
|
||||
<li id="unverify2" class="{% if not u.verified %}hidden{% endif %}">
|
||||
<button class="dropdown-item block w-full text-left px-4 py-2 text-sm text-gray-200 bg-gradient-to-t hover:from-red-800 hover:to-red-700 hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-t focus:from-red-800 focus:to-red-700" onclick="post_toast2('/admin/unverify/{{u.id}}','verify2','unverify2')">
|
||||
<i class="fas fa-eraser fa-sm fa-fw mr-4"></i>
|
||||
Unverify
|
||||
</button>
|
||||
</li>
|
||||
<li id="grant" class="{% if u.paid_dues %}hidden{% endif %}">
|
||||
<button class="dropdown-item block w-full text-left px-4 py-2 text-sm text-gray-200 bg-gradient-to-t hover:from-red-800 hover:to-red-700 hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-t focus:from-red-800 focus:to-red-700" onclick="post_toast2('/@{{u.username}}/club_allow','grant','bar')">
|
||||
<i class="fas fa-door-open fa-sm fa-fw mr-4"></i>
|
||||
Grant club access
|
||||
</button>
|
||||
</li>
|
||||
<li id="bar" class="{% if u.club_banned %}hidden{% endif %}">
|
||||
<button class="dropdown-item block w-full text-left px-4 py-2 text-sm text-gray-200 bg-gradient-to-t hover:from-red-800 hover:to-red-700 hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-t focus:from-red-800 focus:to-red-700" onclick="post_toast2('/@{{u.username}}/club_ban','grant','bar')">
|
||||
<i class="fas fa-door-closed fa-sm fa-fw mr-4"></i>
|
||||
Bar from club
|
||||
</button>
|
||||
</li>
|
||||
<li id="shadowban2" class="{% if u.shadowbanned %}hidden{% endif %}">
|
||||
<button class="dropdown-item block w-full text-left px-4 py-2 text-sm text-gray-200 bg-gradient-to-t hover:from-red-800 hover:to-red-700 hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-t focus:from-red-800 focus:to-red-700" onclick="post_toast2('/shadowban/{{u.id}}','shadowban2','unshadowban2')">
|
||||
<i class="fas fa-eye-slash fa-sm fa-fw mr-4"></i>
|
||||
Shadowban
|
||||
</button>
|
||||
</li>
|
||||
<li id="unshadowban2" class="{% if not u.shadowbanned %}hidden{% endif %}">
|
||||
<button class="dropdown-item block w-full text-left px-4 py-2 text-sm text-gray-200 bg-gradient-to-t hover:from-red-800 hover:to-red-700 hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-t focus:from-red-800 focus:to-red-700" onclick="post_toast2('/unshadowban/{{u.id}}','shadowban2','unshadowban2')">
|
||||
<i class="fas fa-eye fa-sm fa-fw mr-4"></i>
|
||||
Unshadowban
|
||||
</button>
|
||||
</li>
|
||||
<li class="hidden">
|
||||
<button class="dropdown-item block w-full text-left px-4 py-2 text-sm text-gray-200 bg-gradient-to-t hover:from-red-800 hover:to-red-700 hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-t focus:from-red-800 focus:to-red-700" onclick="post_toast('/admin/unnuke_user')">
|
||||
<i class="fas fa-file-check fa-sm fa-fw mr-4"></i>
|
||||
Approve user's content
|
||||
</button>
|
||||
</li>
|
||||
<li class="hidden">
|
||||
<button class="dropdown-item block w-full text-left px-4 py-2 text-sm text-gray-200 bg-gradient-to-t hover:from-red-800 hover:to-red-700 hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-t focus:from-red-800 focus:to-red-700" onclick="post_toast('/admin/nuke_user')">
|
||||
<i class="fas fa-file-times fa-sm fa-fw mr-4"></i>
|
||||
Remove user's content
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button class="dropdown-item block w-full text-left px-4 py-2 text-sm text-gray-200 bg-gradient-to-t hover:from-red-800 hover:to-red-700 hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-t focus:from-red-800 focus:to-red-700" onclick="post_toast('/@{{u.username}}/revert_actions')">
|
||||
<i class="fas fa-history fa-sm fa-fw mr-4"></i>
|
||||
Revert admin actions
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if v.admin_level > 2 %}
|
||||
<li>
|
||||
<hr class="mt-2 mb-1.5 border-t border-black h-1 shadow-inset-t-white-05"/>
|
||||
</li>
|
||||
<li id="unadmin2" class="{% if u.admin_level < 2 %}hidden{% endif %}">
|
||||
<button class="dropdown-item block w-full text-left px-4 py-2 text-sm text-gray-200 bg-gradient-to-t hover:from-red-800 hover:to-red-700 hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-t focus:from-red-800 focus:to-red-700" onclick="postToast('/@{{u.username}}/remove_admin')">
|
||||
<i class="fas fa-user-minus fa-sm fa-fw mr-4"></i>
|
||||
Remove admin
|
||||
</button>
|
||||
</li>
|
||||
<li id="memeadmin2" class="{% if u.admin_level == 1%}hidden{% endif %}">
|
||||
<button class="dropdown-item block w-full text-left px-4 py-2 text-sm text-gray-200 bg-gradient-to-t hover:from-red-800 hover:to-red-700 hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-t focus:from-red-800 focus:to-red-700" onclick="post_toast2('/@{{u.username}}/make_meme_admin','memeadmin2','unmemeadmin2')">
|
||||
<i class="fas fa-grin-squint-tears fa-sm fa-fw mr-4"></i>
|
||||
Make meme admin
|
||||
</button>
|
||||
</li>
|
||||
<li id="unmemeadmin2" class="{% if u.admin_level != 1 %}hidden{% endif %}">
|
||||
<button class="dropdown-item block w-full text-left px-4 py-2 text-sm text-gray-200 bg-gradient-to-t hover:from-red-800 hover:to-red-700 hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-t focus:from-red-800 focus:to-red-700" onclick="post_toast2('/@{{u.username}}/remove_meme_admin','memeadmin2','unmemeadmin2')">
|
||||
<i class="fas fa-sad-cry fa-sm fa-fw mr-4"></i>
|
||||
Remove meme admin
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if v.admin_level > 1 %}
|
||||
<li>
|
||||
<hr class="mt-2 mb-1.5 border-t border-black h-1 shadow-inset-t-white-05"/>
|
||||
</li>
|
||||
<li>
|
||||
<button class="dropdown-item block w-full text-left px-4 py-2 text-sm text-gray-200 bg-gradient-to-t hover:from-red-800 hover:to-red-700 hover:shadow-inner focus:shadow-inner focus:bg-gradient-to-t focus:from-red-800 focus:to-red-700" data-bs-toggle="modal" data-bs-target="#adminManageUserModal">
|
||||
<i class="fas fa-ellipsis-h fa-sm fa-fw mr-4"></i>
|
||||
More options
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
|
@ -1,56 +0,0 @@
|
|||
<div class="dropdown">
|
||||
<button class="btn btn-gray" type="button" id="dropdownProfile-Actions" data-bs-toggle="dropdown" aria-expanded="false" data-bs-auto-close="outside">
|
||||
<i class="fas fa-ellipsis-h fa-fw fa-sm"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu w-56 bg-gray-900 rounded-md shadow-lg" aria-labelledby="dropdownProfile-Actions">
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/@{{ u.username }}/upvoters">
|
||||
<i class="fas fa-kiss-wink-heart fa-sm fa-fw mr-4"></i>
|
||||
Simps
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/@{{ u.username }}/downvoters">
|
||||
<i class="fas fa-tired fa-sm fa-fw mr-4"></i>
|
||||
Haters
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/@{{ u.username }}/upvoting">
|
||||
<i class="fas fa-grin-hearts fa-sm fa-fw mr-4"></i>
|
||||
Simps for
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/@{{ u.username }}/downvoting">
|
||||
<i class="fas fa-angry fa-sm fa-fw mr-4"></i>
|
||||
Hates
|
||||
</a>
|
||||
</li>
|
||||
{% if v and v.id == u.id %}
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/views">
|
||||
<i class="fas fa-binoculars fa-sm fa-fw mr-4"></i>
|
||||
Profile views
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if v and v.id != u.id %}
|
||||
<li>
|
||||
<hr class="mt-2 mb-1.5 border-t border-black h-1 shadow-inset-t-white-05"/>
|
||||
</li>
|
||||
<li>
|
||||
<button class="dropdown-item dropdown-item-primary" onclick="post_toast('/@{{u.username}}/suicide')">
|
||||
<i class="fas fa-briefcase-medical fa-sm fa-fw mr-4"></i>
|
||||
Get them help
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button class="dropdown-item dropdown-item-primary" data-bs-toggle="modal" data-bs-target="#giftCoinsModal">
|
||||
<i class="fas fa-gift fa-sm fa-fw mr-4"></i>
|
||||
Gift {{'COINS_NAME' | app_config}}
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
|
@ -1,94 +0,0 @@
|
|||
<div class="flex items-center space-x-2">
|
||||
<div class="dropdown">
|
||||
<button class="block px-4 py-2 bg-gradient-to-t from-gray-200 to-gray-100 focus:from-gray-100 focus:to-gray-200 border border-gray-300 rounded-md text-shadow shadow-inset-t-white-10 text-sm font-bold text-gray-700 focus:text-gray-900 focus:shadow-inner focus:outline-none dropdown-toggle" type="button" id="dropdownSearchSortsButton" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
{% if t=="hour" %}<i class="fas fa-clock text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if t=="day" %}<i class="fas fa-calendar-day text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if t=="week" %}<i class="fas fa-calendar-week text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if t=="month" %}<i class="fas fa-calendar-alt text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if t=="year" %}<i class="fas fa-calendar text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if t=="all" %}<i class="fas fa-infinity text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{{t | capitalize}}
|
||||
</button>
|
||||
<ul class="dropdown-menu w-56 bg-gray-900 rounded-md shadow-lg" aria-labelledby="dropdownSearchSortsButton" x-placement="bottom-start">
|
||||
<li class="{% if t=='hour' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort={{sort}}&t=hour">
|
||||
<i class="fas fa-clock fa-sm fa-fw mr-4"></i>Hour
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if t=='day' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort={{sort}}&t=day">
|
||||
<i class="fas fa-calendar-day fa-sm fa-fw mr-4"></i>Day
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if t=='week' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort={{sort}}&t=week">
|
||||
<i class="fas fa-calendar-week fa-sm fa-fw mr-4"></i>Week
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if t=='month' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort={{sort}}&t=month">
|
||||
<i class="fas fa-calendar-alt fa-sm fa-fw mr-4"></i>Month
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if t=='year' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort={{sort}}&t=year">
|
||||
<i class="fas fa-calendar fa-sm fa-fw mr-4"></i>Year
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if t=='all' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort={{sort}}&t=all">
|
||||
<i class="fas fa-infinity fa-sm fa-fw mr-4"></i>All
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="dropdown">
|
||||
<button class="block px-4 py-2 bg-gradient-to-t from-gray-200 to-gray-100 focus:from-gray-100 focus:to-gray-200 border border-gray-300 rounded-md text-shadow shadow-inset-t-white-10 text-sm font-bold text-gray-700 focus:text-gray-900 focus:shadow-inner focus:outline-none dropdown-toggle" type="button" id="dropdownSearchSortsTypeButton" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
{% if sort=="hot" %}<i class="fas fa-fire text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if sort=="top" %}<i class="fas fa-arrow-alt-circle-up text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if sort=="bottom" %}<i class="fas fa-arrow-alt-circle-down text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if sort=="new" %}<i class="fas fa-sparkles text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if sort=="old" %}<i class="fas fa-book text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if sort=="controversial" %}<i class="fas fa-bullhorn text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if sort=="comments" %}<i class="fas fa-comments text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{{sort | capitalize}}
|
||||
</button>
|
||||
<ul class="dropdown-menu w-56 bg-gray-900 rounded-md shadow-lg" aria-labelledby="dropdownSearchSortsTypeButton" x-placement="bottom-start">
|
||||
<li class="{% if sort == 'top' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort=top&q={{query | urlencode}}&t={{t}}">
|
||||
<i class="fas fa-arrow-alt-circle-up fa-sm fa-fw mr-4"></i>Top
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if sort == 'bottom' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort=bottom&q={{query | urlencode}}&t={{t}}}">
|
||||
<i class="fas fa-arrow-alt-circle-down fa-sm fa-fw mr-4"></i>Bottom
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if sort == 'new' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort=new&q={{query | urlencode}}&t={{t}}">
|
||||
<i class="fas fa-sparkles fa-sm fa-fw mr-4"></i>New
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if sort == 'old' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort=old&q={{query | urlencode}}&t={{t}}">
|
||||
<i class="fas fa-book fa-sm fa-fw mr-4"></i>Old
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if sort == 'controversial' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort=fiery&q={{query | urlencode}}&t={{t}}">
|
||||
<i class="fas fa-bullhorn fa-sm fa-fw mr-4"></i>Controversial
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if sort == 'comments' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort=comments&q={{query | urlencode}}&t={{t}}">
|
||||
<i class="fas fa-comments fa-sm fa-fw mr-4"></i>Comments
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if sort == 'random' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort=random&q={{query | urlencode}}&t={{t}}">
|
||||
<i class="fas fa-question fa-sm fa-fw mr-4"></i>Random
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
|
@ -1,94 +0,0 @@
|
|||
<div class="flex items-center space-x-2">
|
||||
<div class="dropdown">
|
||||
<button class="block px-4 py-2 bg-gradient-to-t from-gray-200 to-gray-100 focus:from-gray-100 focus:to-gray-200 border border-gray-300 rounded-md text-shadow shadow-inset-t-white-10 text-sm font-bold text-gray-700 focus:text-gray-900 focus:shadow-inner focus:outline-none dropdown-toggle" type="button" id="dropdownSubmissionSortButton" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
{% if t=="hour" %}<i class="fas fa-clock text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if t=="day" %}<i class="fas fa-calendar-day text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if t=="week" %}<i class="fas fa-calendar-week text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if t=="month" %}<i class="fas fa-calendar-alt text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if t=="year" %}<i class="fas fa-calendar text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if t=="all" %}<i class="fas fa-infinity text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{{t | capitalize}}
|
||||
</button>
|
||||
<ul class="dropdown-menu w-56 bg-gray-900 rounded-md shadow-lg" aria-labelledby="dropdownSubmissionSortButton" x-placement="bottom-start">
|
||||
<li class="{% if t=='hour' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort={{sort}}&t=hour">
|
||||
<i class="fas fa-clock fa-sm fa-fw mr-4"></i>Hour
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if t=='day' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort={{sort}}&t=day">
|
||||
<i class="fas fa-calendar-day fa-sm fa-fw mr-4"></i>Day
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if t=='week' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort={{sort}}&t=week">
|
||||
<i class="fas fa-calendar-week fa-sm fa-fw mr-4"></i>Week
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if t=='month' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort={{sort}}&t=month">
|
||||
<i class="fas fa-calendar-alt fa-sm fa-fw mr-4"></i>Month
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if t=='year' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort={{sort}}&t=year">
|
||||
<i class="fas fa-calendar fa-sm fa-fw mr-4"></i>Year
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if t=='all' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort={{sort}}&t=all">
|
||||
<i class="fas fa-infinity fa-sm fa-fw mr-4"></i>All
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="dropdown">
|
||||
<button class="block px-4 py-2 bg-gradient-to-t from-gray-200 to-gray-100 focus:from-gray-100 focus:to-gray-200 border border-gray-300 rounded-md text-shadow shadow-inset-t-white-10 text-sm font-bold text-gray-700 focus:text-gray-900 focus:shadow-inner focus:outline-none dropdown-toggle" type="button" id="dropdownSubmissionSortTypeButton" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
{% if sort=="hot" %}<i class="fas fa-fire text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if sort=="top" %}<i class="fas fa-arrow-alt-circle-up text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if sort=="bottom" %}<i class="fas fa-arrow-alt-circle-down text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if sort=="new" %}<i class="fas fa-sparkles text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if sort=="old" %}<i class="fas fa-book text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if sort=="controversial" %}<i class="fas fa-bullhorn text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{% if sort=="comments" %}<i class="fas fa-comments text-gray-500 fa-sm fa-fw mr-1"></i>{% endif %}
|
||||
{{sort | capitalize}}
|
||||
</button>
|
||||
<ul class="dropdown-menu w-56 bg-gray-900 rounded-md shadow-lg" aria-labelledby="dropdownSubmissionSortTypeButton" x-placement="bottom-start">
|
||||
<li class="{% if sort == 'hot' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort=hot&t={{t}}">
|
||||
<i class="fas fa-fire fa-sm fa-fw mr-4"></i>Hot
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if sort == 'top' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort=top&t={{t}}">
|
||||
<i class="fas fa-arrow-alt-circle-up fa-sm fa-fw mr-4"></i>Top
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if sort == 'bottom' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort=bottom&t={{t}}">
|
||||
<i class="fas fa-arrow-alt-circle-down fa-sm fa-fw mr-4"></i>Bottom
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if sort == 'new' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort=new&t={{t}}">
|
||||
<i class="fas fa-sparkles fa-sm fa-fw mr-4"></i>New
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if sort == 'old' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort=old&t={{t}}">
|
||||
<i class="fas fa-book fa-sm fa-fw mr-4"></i>Old
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if sort == 'controversial' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort=controversial&t={{t}}">
|
||||
<i class="fas fa-bullhorn fa-sm fa-fw mr-4"></i>Controversial
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if sort == 'comments' %}hidden{% endif %}">
|
||||
<a class="dropdown-item dropdown-item-primary" href="?sort=comments&t={{t}}">
|
||||
<i class="fas fa-comments fa-sm fa-fw mr-4"></i>Comments
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
|
@ -1,34 +0,0 @@
|
|||
{% extends "CHRISTMAS/email/default.html" %}
|
||||
|
||||
{% block title %}Remove Two-Factor Authentication{% endblock %}</h1>
|
||||
|
||||
{% block preheader %}Remove Two-Factor Authentication.{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<p>We received a request to remove two-factor authentication from your account. In 72 hours, click the link below.</p>
|
||||
<p>If you didn't make this request, change your password and use the Log Out Everywhere feature in your <a href="/settings/security">Security Settings</a> to permanently invalidate the link.</p>
|
||||
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<!-- Border based button
|
||||
https://litmus.com/blog/a-guide-to-bulletproof-buttons-in-email-design -->
|
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="{{action_url}}" class="f-fallback button" target="_blank">Remove 2FA</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>Please note that {{'SITE_NAME' | app_config}} will never ask you for your email, password, or two-factor token via email, text, or phone.</p>
|
||||
<table class="body-sub" role="presentation">
|
||||
<tr>
|
||||
<td>
|
||||
<p class="f-fallback sub">If you’re having trouble with the button above, copy and paste the URL below into your web browser.</p>
|
||||
<p class="f-fallback sub">{{action_url}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% endblock %}
|
|
@ -1,409 +0,0 @@
|
|||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; connect-src 'self'; object-src 'none';">
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="x-apple-disable-message-reformatting" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<title></title>
|
||||
<style type="text/css" rel="stylesheet" media="all">
|
||||
|
||||
html {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
body {
|
||||
width: 100% !important;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
-webkit-text-size-adjust: none;
|
||||
}
|
||||
a {
|
||||
color: #FF66AC!important;
|
||||
}
|
||||
a img {
|
||||
border: none;
|
||||
}
|
||||
td {
|
||||
word-break: break-word;
|
||||
}
|
||||
.preheader {
|
||||
display: none !important;
|
||||
visibility: hidden;
|
||||
mso-hide: all;
|
||||
font-size: 1px;
|
||||
line-height: 1px;
|
||||
max-height: 0;
|
||||
max-width: 0;
|
||||
opacity: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
body,
|
||||
td,
|
||||
th {
|
||||
font-family: Helvetica, Arial, sans-serif;
|
||||
}
|
||||
h1 {
|
||||
margin-top: 0;
|
||||
color: #121213;
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
text-align: left;
|
||||
}
|
||||
h2 {
|
||||
margin-top: 0;
|
||||
color: #121213;
|
||||
font-size: 1rem;
|
||||
font-weight: bold;
|
||||
text-align: left;
|
||||
}
|
||||
h3 {
|
||||
margin-top: 0;
|
||||
color: #121213;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
text-align: left;
|
||||
}
|
||||
td,
|
||||
th {
|
||||
font-size: 1rem;
|
||||
}
|
||||
p,
|
||||
ul,
|
||||
ol,
|
||||
blockquote {
|
||||
margin: .4em 0 1.1875em;
|
||||
font-size: 1rem;
|
||||
line-height: 1.625;
|
||||
}
|
||||
p.sub {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.align-right {
|
||||
text-align: right;
|
||||
}
|
||||
.align-left {
|
||||
text-align: left;
|
||||
}
|
||||
.align-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.button {
|
||||
background-color: #FF66AC;
|
||||
border-top: 10px solid #FF66AC;
|
||||
border-right: 18px solid #FF66AC;
|
||||
border-bottom: 10px solid #FF66AC;
|
||||
border-left: 18px solid #FF66AC;
|
||||
display: inline-block;
|
||||
color: #FFF!important;
|
||||
text-decoration: none;
|
||||
border-radius: .25rem;
|
||||
-webkit-text-size-adjust: none;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.button--green {
|
||||
background-color: #23CE6B;
|
||||
border-top: 10px solid #23CE6B;
|
||||
border-right: 18px solid #23CE6B;
|
||||
border-bottom: 10px solid #23CE6B;
|
||||
border-left: 18px solid #23CE6B;
|
||||
}
|
||||
.button--red {
|
||||
background-color: #F05D5E;
|
||||
border-top: 10px solid #F05D5E;
|
||||
border-right: 18px solid #F05D5E;
|
||||
border-bottom: 10px solid #F05D5E;
|
||||
border-left: 18px solid #F05D5E;
|
||||
}
|
||||
@media only screen and (max-width: 500px) {
|
||||
.button {
|
||||
width: 100% !important;
|
||||
text-align: center !important;
|
||||
}
|
||||
}
|
||||
|
||||
.attributes {
|
||||
margin: 0 0 21px;
|
||||
}
|
||||
.attributes_content {
|
||||
background-color: #EDF2F7;
|
||||
padding: 1rem;
|
||||
border-radius: 0.35rem;
|
||||
}
|
||||
.attributes_item {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.related {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 25px 0 0 0;
|
||||
-premailer-width: 100%;
|
||||
-premailer-cellpadding: 0;
|
||||
-premailer-cellspacing: 0;
|
||||
}
|
||||
.related_item {
|
||||
padding: 10px 0;
|
||||
color: #CBCCCF;
|
||||
font-size: 15px;
|
||||
line-height: 18px;
|
||||
}
|
||||
.related_item-title {
|
||||
display: block;
|
||||
margin: .5em 0 0;
|
||||
}
|
||||
.related_item-thumb {
|
||||
display: block;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.related_heading {
|
||||
border-top: 1px solid #CBCCCF;
|
||||
text-align: center;
|
||||
padding: 25px 0 10px;
|
||||
}
|
||||
|
||||
.discount {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 24px;
|
||||
-premailer-width: 100%;
|
||||
-premailer-cellpadding: 0;
|
||||
-premailer-cellspacing: 0;
|
||||
background-color: #EDF2F7;
|
||||
border: 2px dashed #CBCCCF;
|
||||
}
|
||||
.discount_heading {
|
||||
text-align: center;
|
||||
}
|
||||
.discount_body {
|
||||
text-align: center;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.social {
|
||||
width: auto;
|
||||
}
|
||||
.social td {
|
||||
padding: 0;
|
||||
width: auto;
|
||||
}
|
||||
.social_icon {
|
||||
height: 20px;
|
||||
margin: 0 8px 10px 8px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.purchase {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 35px 0;
|
||||
-premailer-width: 100%;
|
||||
-premailer-cellpadding: 0;
|
||||
-premailer-cellspacing: 0;
|
||||
}
|
||||
.purchase_content {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 25px 0 0 0;
|
||||
-premailer-width: 100%;
|
||||
-premailer-cellpadding: 0;
|
||||
-premailer-cellspacing: 0;
|
||||
}
|
||||
.purchase_item {
|
||||
padding: 10px 0;
|
||||
color: #121213;
|
||||
font-size: 15px;
|
||||
line-height: 18px;
|
||||
}
|
||||
.purchase_heading {
|
||||
padding-bottom: 8px;
|
||||
border-bottom: 1px solid #E6E6E6;
|
||||
}
|
||||
.purchase_heading p {
|
||||
margin: 0;
|
||||
color: #85878E;
|
||||
font-size: 12px;
|
||||
}
|
||||
.purchase_footer {
|
||||
padding-top: 15px;
|
||||
border-top: 1px solid #E6E6E6;
|
||||
}
|
||||
.purchase_total {
|
||||
margin: 0;
|
||||
text-align: right;
|
||||
font-weight: bold;
|
||||
color: #121213;
|
||||
}
|
||||
.purchase_total--label {
|
||||
padding: 0 15px 0 0;
|
||||
}
|
||||
body {
|
||||
background-color: #EDF2F7;
|
||||
color: #121213;
|
||||
}
|
||||
p {
|
||||
color: #121213;
|
||||
}
|
||||
p.sub {
|
||||
color: #6B6E76;
|
||||
}
|
||||
.email-wrapper {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
-premailer-width: 100%;
|
||||
-premailer-cellpadding: 0;
|
||||
-premailer-cellspacing: 0;
|
||||
background-color: #EDF2F7;
|
||||
}
|
||||
.email-content {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
-premailer-width: 100%;
|
||||
-premailer-cellpadding: 0;
|
||||
-premailer-cellspacing: 0;
|
||||
}
|
||||
|
||||
.email-masthead {
|
||||
display: none;
|
||||
}
|
||||
.email-masthead_logo {
|
||||
width: 94px;
|
||||
}
|
||||
.email-masthead_name {
|
||||
font-size: 1.25rem;
|
||||
font-weight: bold;
|
||||
color: #121213;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.email-body {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
-premailer-width: 100%;
|
||||
-premailer-cellpadding: 0;
|
||||
-premailer-cellspacing: 0;
|
||||
background-color: #cfcfcf;
|
||||
}
|
||||
.email-body_inner {
|
||||
width: 570px;
|
||||
margin: 0 auto;
|
||||
padding: 0;
|
||||
-premailer-width: 570px;
|
||||
-premailer-cellpadding: 0;
|
||||
-premailer-cellspacing: 0;
|
||||
background-color: #cfcfcf;
|
||||
}
|
||||
.email-footer {
|
||||
width: 570px;
|
||||
margin: 0 auto;
|
||||
padding: 0;
|
||||
-premailer-width: 570px;
|
||||
-premailer-cellpadding: 0;
|
||||
-premailer-cellspacing: 0;
|
||||
text-align: center;
|
||||
}
|
||||
.email-footer p {
|
||||
color: #6B6E76;
|
||||
}
|
||||
.body-action {
|
||||
width: 100%;
|
||||
margin: 30px auto;
|
||||
padding: 0;
|
||||
-premailer-width: 100%;
|
||||
-premailer-cellpadding: 0;
|
||||
-premailer-cellspacing: 0;
|
||||
text-align: center;
|
||||
}
|
||||
.body-sub {
|
||||
margin-top: 25px;
|
||||
padding-top: 25px;
|
||||
border-top: 1px solid #E6E6E6;
|
||||
}
|
||||
.content-cell {
|
||||
padding: 35px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 600px) {
|
||||
.email-body_inner,
|
||||
.email-footer {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body,
|
||||
.email-body,
|
||||
.email-body_inner,
|
||||
.email-content,
|
||||
.email-wrapper,
|
||||
.email-masthead,
|
||||
.email-footer {
|
||||
background-color: #121213 !important;
|
||||
color: #FFF !important;
|
||||
}
|
||||
p,
|
||||
ul,
|
||||
ol,
|
||||
blockquote,
|
||||
h1,
|
||||
h2,
|
||||
h3 {
|
||||
color: #FFF !important;
|
||||
}
|
||||
.attributes_content,
|
||||
.discount {
|
||||
background-color: #222 !important;
|
||||
}
|
||||
.email-masthead_name {
|
||||
text-shadow: none !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<span class="preheader">{% block preheader %}Thanks for joining {{'SITE_NAME' | app_config}}! Please take a sec to verify the email you used to sign up.{% endblock %}</span>
|
||||
<table class="email-wrapper" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table class="email-content" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="email-masthead">
|
||||
<a href="/" class="f-fallback email-masthead_name">
|
||||
{{'SITE_NAME' | app_config}}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="email-body" width="100%" cellpadding="0" cellspacing="0">
|
||||
<table class="email-body_inner" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="content-cell">
|
||||
<div class="f-fallback">
|
||||
<h1>{% block title %}Title Goes Here{% endblock %}</h1>
|
||||
|
||||
{% block content %}
|
||||
{% for entry in data %}
|
||||
<h3>{{entry[0]}}</h3>
|
||||
<p>{{entry[1]}}</p>
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
|
@ -1,56 +0,0 @@
|
|||
{% extends "CHRISTMAS/email/default.html" %}
|
||||
|
||||
{% block title %}Verify Your Email{% endblock %}</h1>
|
||||
|
||||
{% block preheader %}Verify your new {{'SITE_NAME' | app_config}} email.{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<p>You told us you wanted to change your {{'SITE_NAME' | app_config}} account email. To finish this process, please verify your new email address:</p>
|
||||
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<!-- Border based button
|
||||
https://litmus.com/blog/a-guide-to-bulletproof-buttons-in-email-design -->
|
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="{{action_url}}" class="f-fallback button" target="_blank">Verify email</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>For reference, here's your current information:</p>
|
||||
<table class="attributes" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="attributes_content">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="attributes_item">
|
||||
<span class="f-fallback">
|
||||
<strong>Email:</strong> {{v.email}}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="attributes_item">
|
||||
<span class="f-fallback">
|
||||
<strong>Username:</strong> {{v.username}}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>Please note that {{'SITE_NAME' | app_config}} will never ask you for your email, password, or two-factor token via email, text, or phone.</p>
|
||||
<table class="body-sub" role="presentation">
|
||||
<tr>
|
||||
<td>
|
||||
<p class="f-fallback sub">If you’re having trouble with the button above, copy and paste the URL below into your web browser.</p>
|
||||
<p class="f-fallback sub">{{action_url}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% endblock %}
|
|
@ -1,54 +0,0 @@
|
|||
{% extends "CHRISTMAS/email/default.html" %}
|
||||
|
||||
{% block title %}Welcome to {{'SITE_NAME' | app_config}}!{% endblock %}</h1>
|
||||
|
||||
{% block content %}
|
||||
<p>Thanks for joining {{'SITE_NAME' | app_config}}. We’re happy to have you on board. To get the most out of {{'SITE_NAME' | app_config}}, please verify your account email:</p>
|
||||
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<!-- Border based button
|
||||
https://litmus.com/blog/a-guide-to-bulletproof-buttons-in-email-design -->
|
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="{{action_url}}" class="f-fallback button" target="_blank">Verify email</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>For reference, here's your username.</p>
|
||||
<table class="attributes" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="attributes_content">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="attributes_item">
|
||||
<span class="f-fallback">
|
||||
<strong>Email:</strong> {{v.email}}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="attributes_item">
|
||||
<span class="f-fallback">
|
||||
<strong>Username:</strong> {{v.username}}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>Please note that {{'SITE_NAME' | app_config}} will never ask you for your email, password, or two-factor token via email, text, or phone.</p>
|
||||
<table class="body-sub" role="presentation">
|
||||
<tr>
|
||||
<td>
|
||||
<p class="f-fallback sub">If you’re having trouble with the button above, copy and paste the URL below into your web browser.</p>
|
||||
<p class="f-fallback sub">{{action_url}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% endblock %}
|
|
@ -1,54 +0,0 @@
|
|||
{% extends "CHRISTMAS/email/default.html" %}
|
||||
|
||||
{% block title %}Reset Your Password{% endblock %}
|
||||
{% block preheader %}Reset your {{'SITE_NAME' | app_config}} password.{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<p>To reset your password, click the button below:</p>
|
||||
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<!-- Border based button
|
||||
https://litmus.com/blog/a-guide-to-bulletproof-buttons-in-email-design -->
|
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="{{action_url}}" class="f-fallback button" target="_blank">Reset password</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>For reference, here's your login information:</p>
|
||||
<table class="attributes" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="attributes_content">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="attributes_item">
|
||||
<span class="f-fallback">
|
||||
<strong>Email:</strong> {{v.email}}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="attributes_item">
|
||||
<span class="f-fallback">
|
||||
<strong>Username:</strong> {{v.username}}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table class="body-sub" role="presentation">
|
||||
<tr>
|
||||
<td>
|
||||
<p class="f-fallback sub">If you’re having trouble with the button above, copy and paste the URL below into your web browser.</p>
|
||||
<p class="f-fallback sub">{{action_url}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% endblock %}
|
|
@ -1,102 +0,0 @@
|
|||
<div id="form" class="d-none"></div>
|
||||
<div class="modal fade" id="emojiModal" tabindex="-1" role="dialog" aria-labelledby="emojiModalTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-scrollable modal-dialog-centered p-2 py-5" role="document">
|
||||
<div class="modal-content bg-gray-100 dark:bg-gray-700 rounded-md shadow-lg" id="emojiTabs">
|
||||
<div class="modal-header">
|
||||
<div>
|
||||
<ul class="nav nav-pills py-2">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active emojitab" data-bs-toggle="tab" href="#emoji-tab-favorite">Favorite</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link emojitab" data-bs-toggle="tab" href="#emoji-tab-marsey">Marsey</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link emojitab" data-bs-toggle="tab" href="#emoji-tab-platy">Platy</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link emojitab" data-bs-toggle="tab" href="#emoji-tab-tay">Tay</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link emojitab" data-bs-toggle="tab" href="#emoji-tab-classic">Classic</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link emojitab" data-bs-toggle="tab" href="#emoji-tab-rage">Rage</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link emojitab" data-bs-toggle="tab" href="#emoji-tab-wojak">Wojak</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link emojitab" data-bs-toggle="tab" href="#emoji-tab-flags">Flags</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link emojitab" data-bs-toggle="tab" href="#emoji-tab-misc">Misc</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
|
||||
<i class="fal fa-times text-gray-700 hover:text-gray-900 dark:text-gray-500 dark:hover:text-gray-400"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="px-3">
|
||||
<input class="form-input" type="text" id="emoji_search" autocomplete="false" placeholder="Search emoji..">
|
||||
</div>
|
||||
|
||||
<div style="overflow-y: scroll;">
|
||||
<div class="modal-body p-0" id="emoji-modal-body">
|
||||
<div id="emoji-tab-search"></div>
|
||||
<div id="no-emojis-found"></div>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane fade show active" id="emoji-tab-favorite">
|
||||
<div class="flex flex-wrap p-3" id="EMOJIS_favorite">
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="emoji-tab-marsey">
|
||||
<div class="flex flex-wrap p-3" id="EMOJIS_marsey"></div>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="emoji-tab-platy">
|
||||
<div class="flex flex-wrap p-3" id="EMOJIS_platy"></div>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="emoji-tab-tay">
|
||||
<div class="flex flex-wrap p-3" id="EMOJIS_tay"></div>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="emoji-tab-classic">
|
||||
<div class="flex flex-wrap p-3" id="EMOJIS_classic"></div>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="emoji-tab-rage">
|
||||
<div class="flex flex-wrap p-3" id="EMOJIS_rage"></div>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="emoji-tab-wojak">
|
||||
<div class="flex flex-wrap p-3" id="EMOJIS_wojak"></div>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="emoji-tab-flags">
|
||||
<div class="flex flex-wrap p-3" id="EMOJIS_flags"></div>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="emoji-tab-misc">
|
||||
<div class="flex flex-wrap p-3" id="EMOJIS_misc"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
a.emojitab {
|
||||
padding: 0.5rem 0.7rem !important;
|
||||
font-size: 13px !important;
|
||||
}
|
||||
|
||||
.emoji2 {
|
||||
background: None!important;
|
||||
width:60px;
|
||||
overflow: hidden;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.emoji2:focus {
|
||||
border: 1px solid var(--primary) !important;
|
||||
}
|
||||
</style>
|
|
@ -1,26 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
{% block content %}
|
||||
<pre>
|
||||
|
||||
|
||||
</pre>
|
||||
<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">Emoji</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="followers-table">
|
||||
{% for emoji in emojis %}
|
||||
<tr>
|
||||
<td style="font-weight: bold">{{loop.index}}</td>
|
||||
<td style="font-weight: bold">{{emoji}}</td>
|
||||
<td><img loading="lazy" data-bs-toggle="tooltip" alt=":{{emoji}}:" title=":{{emoji}}:" delay="0" src="/assets/images/emojis/{{emoji}}.webp" ></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{% endblock %}
|
|
@ -1,19 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>400 Bad Request</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagetype %}error-400{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full h-screen flex items-center justify-center">
|
||||
<div class="md:max-w-xl text-center">
|
||||
<img loading="lazy" src="/assets/images/emojis/marseybrainlet.webp?a=1" class="w-14 h-14 object-contain mb-4">
|
||||
<h1 class="h5">400 Bad Request</h1>
|
||||
<p class="text-gray-500">
|
||||
That request was bad and you should feel bad.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,21 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>401 Not Authorized</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagetype %}error-401{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full h-screen flex items-center justify-center">
|
||||
<div class="md:max-w-xl text-center">
|
||||
<img loading="lazy" src="/assets/images/emojis/marseydead.webp?a=1" class="w-14 h-14 object-contain mb-4">
|
||||
<h1 class="h5">401 Not Authorized</h1>
|
||||
<p class="text-gray-500 mb-3">
|
||||
What you're trying to do requires an account. I think. The original error message said something about a castle and I hated that.
|
||||
</p>
|
||||
<a href="/signup" class="btn btn-gray">Create an account</a>
|
||||
<a href="/login" class="btn btn-gray">Login</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,20 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>403 Forbidden</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagetype %}error-403{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full h-screen flex items-center justify-center">
|
||||
<div class="md:max-w-xl text-center">
|
||||
<img loading="lazy" src="/assets/images/emojis/marseytroll.webp?a=1" class="w-14 h-14 object-contain mb-4">
|
||||
<h1 class="h5">403 Forbidden</h1>
|
||||
<p class="text-gray-500 mb-3">
|
||||
YOU AREN'T WELCOME HERE GO AWAY
|
||||
</p>
|
||||
<a href="/" class="btn btn-gray">Go to frontpage</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,19 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>404 Page Not Found</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagetype %}error-404{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full h-screen flex items-center justify-center">
|
||||
<div class="md:max-w-xl text-center">
|
||||
<img loading="lazy" src="/assets/images/emojis/marseyconfused.webp?a=1" class="w-14 h-14 object-contain mb-4">
|
||||
<h1 class="h5">404 Page Not Found</h1>
|
||||
<p class="text-gray-500">
|
||||
Someone typed something wrong and it was probably you, please do better.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,23 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>405 Method Not Allowed</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagetype %}error-405{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full h-screen flex items-center justify-center">
|
||||
<div class="md:max-w-xl text-center">
|
||||
<img loading="lazy" src="/assets/images/emojis/marseyretard.webp?a=1" class="w-14 h-14 object-contain mb-4">
|
||||
<h1 class="h5">405 Method Not Allowed</h1>
|
||||
<p class="text-gray-500">
|
||||
idk how anyone gets this error but if you see this, remember to follow @carpathianflorist
|
||||
</p>
|
||||
<p class="text-gray-500 mb-3">
|
||||
the original error text here talked about internet gremlins and wtf
|
||||
</p>
|
||||
<a href="/" class="btn btn-gray">Go to frontpage</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,20 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>429 Too Many Requests</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagetype %}error-429{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full h-screen flex items-center justify-center">
|
||||
<div class="md:max-w-xl text-center">
|
||||
<img loading="lazy" src="/assets/images/emojis/marseyrentfree.webp?a=1" class="w-14 h-14 object-contain mb-4">
|
||||
<h1 class="h5">429 Too Many Requests</h1>
|
||||
<p class="text-gray-500 mb-3">
|
||||
go spam somewhere else nerd
|
||||
</p>
|
||||
<a href="https://www.youtube.com/watch?v=1" class="btn btn-gray">Go to frontpage</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,20 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>500 Internal Server Error</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagetype %}error-500{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full h-screen flex items-center justify-center">
|
||||
<div class="md:max-w-xl text-center">
|
||||
<img loading="lazy" src="/assets/images/emojis/marseydead.webp?a=1" class="w-14 h-14 object-contain mb-4">
|
||||
<h1 class="h5">500 Interal Server Error</h1>
|
||||
<p class="text-gray-500 mb-3">
|
||||
Hiiiii it's carp! I think this error means that there's a timeout error. And I think that means something took too long to load so it decided not to work at all. If you keep seeing this on the same page <em>but not other pages</em>, then something is probably wrong with that specific function. It may not be called a function, but that sounds right to me. Anyway, ping me and I'll whine to someone smarter to fix it. Don't bother them. Thanks ily <3
|
||||
</p>
|
||||
<a href="/" class="btn btn-gray">Go to frontpage</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,27 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>+18</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagetype %}error-451{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full h-screen flex items-center justify-center">
|
||||
<div class="md:max-w-xl text-center">
|
||||
<img loading="lazy" src="/assets/images/emojis/marseytwerking.webp?a=1" class="w-14 h-14 object-contain mb-4">
|
||||
<h1 class="h5">Are you over 18?</h1>
|
||||
<p class="text-gray-500 mb-3">
|
||||
This post is rated +18 (Adult-Only). You must be 18 or older to continue. Are you sure you want to proceed?
|
||||
</p>
|
||||
<div class="flex flex-wrap justify-center space-x-2">
|
||||
<form action="/allow_nsfw" method="post">
|
||||
<input type="hidden" name="redir" value="{{request.path}}">
|
||||
<input type="submit" class="btn btn-red" value="Yes, I am +18">
|
||||
</form>
|
||||
<a href="/" class="btn btn-gray">No</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>401 Not Authorized</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagetype %}error-401{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full h-screen flex items-center justify-center">
|
||||
<div class="md:max-w-xl text-center">
|
||||
<img loading="lazy" src="/assets/images/emojis/marseymerchant.webp?a=1" class="w-14 h-14 object-contain mb-4">
|
||||
<h1 class="h5">401 Not Authorized</h1>
|
||||
<p class="text-gray-500 mb-3">
|
||||
This page is only available to {% if request.host == "rdrama.net" %}paypigs{% else %}patrons{% endif %}:
|
||||
</p>
|
||||
<a rel="nofollow noopener noreferrer" href="{{'GUMROAD_LINK' | app_config}}" class='btn btn-gray'>{{'GUMROAD_LINK' | app_config}}</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,23 +0,0 @@
|
|||
<div class="modal desktop-expanded-image-modal" id="expandImageModal" tabindex="-1" role="dialog" aria-labelledby="expandImageModalTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-xl modal-dialog-centered mx-auto expandedimage" role="document">
|
||||
<div class="modal-content bg-transparent shadow-none m-5 md:m-0">
|
||||
<div class="modal-body text-center p-0">
|
||||
<div class="inline-block relative">
|
||||
<a rel="nofollow noopener noreferrer" target="_blank" id="desktop-expanded-image-wrap-link">
|
||||
<img loading="lazy" src="" class="img-fluid rounded" id="desktop-expanded-image" style="min-width: 250px;">
|
||||
</a>
|
||||
<div class="absolute flex justify-between items-center w-full mt-1">
|
||||
<a rel="nofollow noopener noreferrer" target="_blank" class="text-gray-500 font-bold text-left" id="desktop-expanded-image-link">View original</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.expandedimage {
|
||||
width: fit-content;
|
||||
width: -moz-fit-content;
|
||||
}
|
||||
</style>
|
|
@ -1,37 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
{% block content %}
|
||||
<div class="col-span-full">
|
||||
<pre>
|
||||
|
||||
|
||||
</pre>
|
||||
<h5>@{{u.username}}'s followers</h5>
|
||||
<pre></pre>
|
||||
<table class="w-full 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>
|
||||
{% if v.id == u.id %}
|
||||
<th style="font-weight: bold"></th>
|
||||
{% endif %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="followers-table">
|
||||
{% for user in users %}
|
||||
<tr>
|
||||
<td style="font-weight: bold">{{loop.index}}</td>
|
||||
<td><a style="color:#{{user.namecolor}}; font-weight:bold;" href="/@{{user.username}}"><img loading="lazy" src="/uid/{{user.id}}/pic" class="pp20"><span {% if user.patron %}class="patron" style="background-color:#{{user.namecolor}};"{% endif %}>{{user.username}}</span></a></td>
|
||||
{% if v.id == u.id %}
|
||||
<td><div class="btn btn-red" onclick="removeFollower(event, '{{user.username}}')">Remove follow</div></td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
<script src="/assets/CHRISTMAS/js/followers.js?a=1"></script>
|
||||
{% endblock %}
|
|
@ -1,33 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
{% block content %}
|
||||
<div class="col-span-full my-4">
|
||||
<h5>Users followed by @{{u.username}}</h5>
|
||||
<pre></pre>
|
||||
<table class="w-full 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>
|
||||
{% if v.id == u.id %}
|
||||
<th style="font-weight: bold"></th>
|
||||
{% endif %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="followers-table">
|
||||
{% for user in users %}
|
||||
<tr>
|
||||
<td style="font-weight: bold">{{loop.index}}</td>
|
||||
<td><a style="color:#{{user.namecolor}}; font-weight:bold;" href="/@{{user.username}}"><img loading="lazy" src="/uid/{{user.id}}/pic" class="pp20"><span {% if user.patron %}class="patron" style="background-color:#{{user.namecolor}};"{% endif %}>{{user.username}}</span></a></td>
|
||||
{% if v.id == u.id %}
|
||||
<td><div class="btn btn-danger" onclick="removeFollowing(event, '{{user.username}}')">Unfollow</div></td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
<script src="/assets/CHRISTMAS/js/following.js?a=1"></script>
|
||||
{% endblock %}
|
|
@ -1,131 +0,0 @@
|
|||
<div class="w-full md:px-4">
|
||||
<div class="relative w-full max-w-screen-2xl mx-auto flex flex-col py-4 items-start bg-gray-800 rounded-t lights">
|
||||
<div class="grid grid-cols-4 divide-x divide-gray-900">
|
||||
<div class="col-span-full md:col-span-1 px-4 py-2 shadow-inset-r-white-05">
|
||||
<h2 class="font-bold text-gray-400 dark:text-gray-500 text-xl font-heading leading-normal mb-2">
|
||||
Noteworthy Threads
|
||||
</h2>
|
||||
<ul class="flex flex-col mb-0">
|
||||
<li class="flex rounded p-2.5 -mx-2.5 hover:bg-gray-700">
|
||||
<div class="flex items-center justify-center h-10 px-4 rounded-md shadow-sm bg-gray-900 shadow-inset-t-white-05">
|
||||
<span class="font-bold text-gray-200">55</span>
|
||||
</div>
|
||||
<div class="pl-3 mt-[-1px]">
|
||||
<a href="/post/16583/" class="block font-bold text-gray-100">
|
||||
[MEGATHREAD] posts here marseys (or other emojis) u want added
|
||||
</a>
|
||||
<small class="block text-gray-400">
|
||||
posted by <a href="/@aevann" class="text-gray-400 hover:text-gray-300">@aevann</a>
|
||||
</small>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex rounded p-2.5 -mx-2.5 hover:bg-gray-700">
|
||||
<div class="flex items-center justify-center h-10 px-4 rounded-md shadow-sm bg-gray-900 shadow-inset-t-white-05">
|
||||
<span class="font-bold text-gray-200">25</span>
|
||||
</div>
|
||||
<div class="pl-3 mt-[-1px]">
|
||||
<a href="https://rdrama.net/post/23770/suggestion-some-award-ideas" class="block font-bold text-gray-100">
|
||||
[Suggestion] Some award ideas
|
||||
</a>
|
||||
<small class="block text-gray-400">
|
||||
posted by <a href="/@dramarama" class="text-gray-400 hover:text-gray-300">@dramarama</a>
|
||||
</small>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-span-full md:col-span-1 px-4 py-2 shadow-inset-r-white-05">
|
||||
<h2 class="font-bold text-gray-400 dark:text-gray-500 text-xl font-heading leading-normal mb-2">
|
||||
Quote of the Week
|
||||
</h2>
|
||||
<div class="flex flex-col gap-2">
|
||||
<div class="bg-gray-700 shadow-inner border border-gray-900 rounded-md overflow-hidden">
|
||||
<p class="p-2 text-sm font-serif italic text-gray-300">
|
||||
"People who open presents and celebrate on Christmas Eve may be godless heathens damned to eternal suffering in the deepest layer of hell, but I'm willing look past it for the sake of these cute oversized squirrels. Here's one trying to say hi up at our cabin."
|
||||
</p>
|
||||
<div class="p-2 bg-gray-700 border-t border-gray-800 shadow-inset-t-white-05">
|
||||
<img loading="lazy" src="https://i.imgur.com/92Oq1k1.webp" class="inline-block flex-shrink-0 object-cover h-9 w-9 p-[3px] bg-white border border-gray-800" alt="avatar"/>
|
||||
<strong class="pl-1 text-sm font-bold">
|
||||
<a href="https://rdrama.com/post/32017/merry-christmas/1063687?context=9#context" class="text-gray-300 hover:text-gray-200">
|
||||
@Slugabed
|
||||
</a>
|
||||
</strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-span-full md:col-span-1 px-4 py-2 shadow-inset-r-white-05">
|
||||
<h2 class="font-bold text-gray-400 dark:text-gray-500 text-xl font-heading leading-normal mb-2">
|
||||
Newest Members
|
||||
</h2>
|
||||
<ul class="hidden flex-wrap gap-x-3 gap-y-2 mb-3">
|
||||
{% for user in kek %}
|
||||
<li class="w-10 flex-shrink-0 overflow-hidden">
|
||||
<img loading="lazy" src="{{ user.profile_url }}" class="object-cover h-10 w-10 rounded bg-white inner-shadow" alt="avatar"/>
|
||||
<small class="block">{{ user.username }}</small>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<p class="text-gray-500 text-xs">
|
||||
Coming soon...
|
||||
</p>
|
||||
{% if not v %}
|
||||
<div class="leading-none">
|
||||
<a href="/signup" class="text-red-600 font-bold text-xs">Become an rdramanaut</a>
|
||||
</div>
|
||||
<div class="leading-none mt-1">
|
||||
<a href="/login" class="text-gray-500 font-bold text-xs">or log in</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-span-full md:col-span-1 px-4 py-2 shadow-inset-r-white-05">
|
||||
<h2 class="font-bold text-gray-400 dark:text-gray-500 text-xl font-heading leading-normal mb-2">
|
||||
rdrama
|
||||
</h2>
|
||||
<p class="mt-1 text-xs text-gray-500">
|
||||
rdrama caters to drama in all forms such as: Real life, videos, images, gossip, rumors, news sites, Reddit, and Beyond™. There is no drama we won't touch, and we want it all.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-4 w-full px-4 sm:px-0">
|
||||
<ul class="mx-auto max-w-2xl flex flex-col md:flex-row md:items-center md:justify-center md:space-x-3 md:divide-x md:divide-gray-700 text-xs font-medium leading-none">
|
||||
<li>
|
||||
<a href="/post/5500" class="text-gray-500 hover:text-gray-400">
|
||||
About
|
||||
</a>
|
||||
</li>
|
||||
<li class="mt-4 md:mt-0 md:pl-3">
|
||||
<a href="/contact" class="text-gray-500 hover:text-gray-400">
|
||||
Contact
|
||||
</a>
|
||||
</li>
|
||||
<li class="mt-4 md:mt-0 md:pl-3">
|
||||
<a href="/post/5500" class="text-gray-500 hover:text-gray-400">
|
||||
Welcome Guide
|
||||
</a>
|
||||
</li>
|
||||
<li class="mt-4 md:mt-0 md:pl-3">
|
||||
<a href="/rules" class="text-gray-500 hover:text-gray-400">
|
||||
Community Etiquette
|
||||
</a>
|
||||
</li>
|
||||
<li class="mt-4 md:mt-0 md:pl-3">
|
||||
<a href="/changelog" class="text-gray-500 hover:text-gray-400">
|
||||
Changelog
|
||||
</a>
|
||||
</li>
|
||||
<li class="mt-4 md:mt-0 md:pl-3">
|
||||
<a href="https://github.com/Aevann1/Drama" class="text-gray-500 hover:text-gray-400">
|
||||
GitHub
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="w-full mt-4 px-4 text-sm text-gray-600">
|
||||
<div class="flex flex-col md:flex-row justify-between pt-4 shadow-inset-t-white-05 border-t border-gray-900 leading-none">
|
||||
<small>©2021 Copyright rdrama.net</small>
|
||||
<small class="hidden md:block">Deus, rex, et bussy</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,31 +0,0 @@
|
|||
{% extends "CHRISTMAS/authforms.html" %}
|
||||
|
||||
{% block pagetitle %}{{'SITE_NAME' | app_config}} Password Reset{% endblock %}
|
||||
|
||||
{% block authtitle %}Reset your password.{% endblock %}
|
||||
|
||||
{% block authtext %}If there's an email address associated with your account, you can use it to recover your {{'SITE_NAME' | app_config}} account and change your password.{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div id="login-form" class="">
|
||||
|
||||
<form action="/forgot" method="post" class="mt-3">
|
||||
|
||||
<label for="username" class="mt-3">Username</label>
|
||||
|
||||
<input class="form-control" id="username" aria-describedby="usernameHelp"
|
||||
type="text" name="username" required="">
|
||||
|
||||
<label for="email" class="mt-3">Email</label>
|
||||
|
||||
<input class="form-control" id="password" aria-describedby="passwordHelp"
|
||||
type="email" name="email" required="">
|
||||
|
||||
<input class="btn btn-primary login w-100 mt-3" type="submit" value="Send recovery link">
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -1,519 +0,0 @@
|
|||
{% extends "CHRISTMAS/settings2.html" %}
|
||||
{% block title %}
|
||||
<title>{{'SITE_NAME' | app_config}} - Formatting</title>
|
||||
<meta name="description" content="{{'SITE_NAME' | app_config}} Formatting">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<pre>
|
||||
|
||||
|
||||
</pre>
|
||||
<h1>Markdown Formatting</h1>
|
||||
|
||||
You can use Markdown formatting:
|
||||
|
||||
<pre>
|
||||
|
||||
</pre>
|
||||
|
||||
<table class="table table-striped mb-5">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>What you type</th>
|
||||
<th>What gets displayed</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Italics</td>
|
||||
<td>*text*</td>
|
||||
<td><i>text</i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bold</td>
|
||||
<td>**text**</td>
|
||||
<td><b>text</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Code</td>
|
||||
<td>`text`</td>
|
||||
<td><code>text</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Strikethrough</td>
|
||||
<td>~~text~~</td>
|
||||
<td><del>text</del></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Links</td>
|
||||
<td>[{{'SITE_NAME' | app_config}}]({{request.host_url}})</td>
|
||||
<td><a href="{{request.host_url}}">{{'SITE_NAME' | app_config}}</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Images</td>
|
||||
<td>https://i.imgur.com/Lf6dfPO.jpg</td>
|
||||
<td><img src="https://i.imgur.com/Lf6dfPO.jpg"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Youtube Videos</td>
|
||||
<td>https://youtube.com/watch?v=3Hecr51ByE4</td>
|
||||
<td><lite-youtube videoid="3Hecr51ByE4" params="controls=0&modestbranding=1"></lite-youtube></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Video Files</td>
|
||||
<td>https://files.catbox.moe/v4om92.mp4</td>
|
||||
<td><video controls preload="none" class="embedvid"><source src="https://files.catbox.moe/v4om92.mp4" type="video/mp4"></video></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Emojis</td>
|
||||
<td>:marseylove:</td>
|
||||
<td><img loading="lazy" data-bs-toggle="tooltip" class="emj" alt=":marseylove:" data-bs-original-title=":marseylove:" delay="0" height="30" src="/assets/images/emojis/marseylove.webp?a=1"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Mirrored Emojis</td>
|
||||
<td>:!marseylove:</td>
|
||||
<td><img loading="lazy" data-bs-toggle="tooltip" class="emj mirrored" alt=":!marseylove:" data-bs-original-title=":!marseylove:" delay="0" height="30" src="/assets/images/emojis/marseylove.webp?a=1"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Large Emojis</td>
|
||||
<td>:#marseylove:</td>
|
||||
<td><img loading="lazy" data-bs-toggle="tooltip" class="emj" alt=":!marseylove:" data-bs-original-title=":!marseylove:" delay="0" src="/assets/images/emojis/marseylove.webp?a=1"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Large Mirroed Emojis</td>
|
||||
<td>:#!marseylove:</td>
|
||||
<td><img loading="lazy" data-bs-toggle="tooltip" class="emj mirrored" alt=":!marseylove:" data-bs-original-title=":!marseylove:" delay="0" src="/assets/images/emojis/marseylove.webp?a=1"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Poll Options</td>
|
||||
<td>$$bussy$$</td>
|
||||
<td>
|
||||
<div class="custom-control">
|
||||
<input type="checkbox" class="custom-control-input" id="422741" name="option">
|
||||
<label class="custom-control-label" for="422741">bussy - <a href="/votes?link=t3_422741"><span id="poll-422741">0</span> votes</a></label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Blockquote</td>
|
||||
<td>> text</td>
|
||||
<td><blockquote>text</blockquote></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Headers 1-6</td>
|
||||
<td># Header 1<br>## Header 2<br>### Header 3<br>#### Header 4<br>##### Header 5<br>###### Header 6</td>
|
||||
<td><h1>Header 1</h1><h2>Header 2</h2><h3>Header 3</h3><h4>Header 4</h4><h5>Header 5</h5><h6>Header 6</h6></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ordered list</td>
|
||||
<td>1. First thing<br>2. Second thing</td>
|
||||
<td><ol><li>First thing</li><li>Second thing</li></ol></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unordered list</td>
|
||||
<td>* First thing<br>* Second thing</td>
|
||||
<td><ul><li>First thing</li><li>Second thing</li></ul></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Code Block</td>
|
||||
<td>```<br>Use three backticks above and below.<br>Or, indent the lines with four spaces.<br>```</td>
|
||||
<td>
|
||||
<pre>
|
||||
Use three backticks above and below.
|
||||
Or, indent the lines with four spaces.
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Spoilers</td>
|
||||
<td>||bussy > gussy||</td>
|
||||
<td><p class="spoiler">bussy > gussy</p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Username Mention</td>
|
||||
<td>@QuadNarca</td>
|
||||
<td><a class="d-inline-block" href="/@QuadNarca"><img loading="lazy" src="/uid/29/pic" class="pp20">@QuadNarca</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Subreddit Mention</td>
|
||||
<td>r/{{'SITE_NAME' | app_config}}</td>
|
||||
<td><a class="d-inline-block" rel="nofollow noopener noreferrer" href="https://www.reddit.com/r/{{'SITE_NAME' | app_config}}/">r/{{'SITE_NAME' | app_config}}</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Redditor Mention</td>
|
||||
<td>u/Bardfinn</td>
|
||||
<td><a class="d-inline-block" rel="nofollow noopener noreferrer" href="https://www.reddit.com/u/Bardfinn/">u/Bardfinn</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h1>HTML Formatting</h1>
|
||||
|
||||
And we allow custom HTML in most places:
|
||||
|
||||
<pre>
|
||||
|
||||
</pre>
|
||||
|
||||
<h4>Allowed Tags</h4>
|
||||
|
||||
<table class="table table-striped mb-5">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>What you type</th>
|
||||
<th>What gets displayed</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Span</td>
|
||||
<td>
|
||||
My mother has <span style="color:blue">blue</span> eyes.
|
||||
</td>
|
||||
<td>
|
||||
My mother has <span style="color:blue">blue</span> eyes.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bold</td>
|
||||
<td>This will be <b>bold</b></td>
|
||||
<td>
|
||||
This will be <b>bold</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Blockquote</td>
|
||||
<td>
|
||||
<blockquote>This is a blockquote</blockquote>
|
||||
</td>
|
||||
<td>
|
||||
<blockquote>
|
||||
This is a blockquote
|
||||
</blockquote>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Line Break</td>
|
||||
<td>
|
||||
<pre style="color:var(--white)">
|
||||
Line 1
|
||||
<br>
|
||||
Line 2
|
||||
</pre>
|
||||
</td>
|
||||
<td>
|
||||
Line 1
|
||||
<br>
|
||||
Line 2
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Code</td>
|
||||
<td>
|
||||
<code>This is code</code>
|
||||
</td>
|
||||
<td>
|
||||
<code>This is code</code>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Strikethrough</td>
|
||||
<td>
|
||||
The last word will have a <del>strikethrough</del>
|
||||
</td>
|
||||
<td>
|
||||
The last word will have a <del>strikethrough</del>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Emphasis</td>
|
||||
<td>
|
||||
We <em>cannot</em> live like this.
|
||||
</td>
|
||||
<td>
|
||||
We <em>cannot</em> live like this.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Headings</td>
|
||||
<td>
|
||||
<pre>
|
||||
<h1>This is heading 1</h1>
|
||||
<h2>This is heading 2</h2>
|
||||
<h3>This is heading 3</h3>
|
||||
<h4>This is heading 4</h4>
|
||||
<h5>This is heading 5</h5>
|
||||
<h6>This is heading 6</h6>
|
||||
</pre>
|
||||
</td>
|
||||
<td>
|
||||
<h1>This is heading 1</h1>
|
||||
<h2>This is heading 2</h2>
|
||||
<h3>This is heading 3</h3>
|
||||
<h4>This is heading 4</h4>
|
||||
<h5>This is heading 5</h5>
|
||||
<h6>This is heading 6</h6>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Horizontal Rule</td>
|
||||
<td>
|
||||
<pre>
|
||||
Text 1
|
||||
<hr>
|
||||
Text 2
|
||||
</pre>
|
||||
</td>
|
||||
<td>
|
||||
Text 1
|
||||
<hr>
|
||||
Text 2
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Italics</td>
|
||||
<td>
|
||||
<i>This</i> is how you get italics.
|
||||
</td>
|
||||
<td>
|
||||
<i>This</i> is how you get italics.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lists</td>
|
||||
<td>
|
||||
<pre>
|
||||
<ul>
|
||||
<li>Bullet 1</li>
|
||||
<li>Bullet 2</li>
|
||||
</ul>
|
||||
<ol>
|
||||
<li>Number 1</li>
|
||||
<li>Number 2</li>
|
||||
</ol>
|
||||
</pre>
|
||||
</td>
|
||||
<td>
|
||||
<ul>
|
||||
<li>Bullet 1</li>
|
||||
<li>Bullet 2</li>
|
||||
</ul>
|
||||
<ol>
|
||||
<li>Number 1</li>
|
||||
<li>Number 2</li>
|
||||
</ol>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Paragraphs</td>
|
||||
<td>
|
||||
<pre>
|
||||
<p>Paragraph 1</p>
|
||||
<p>Paragraph 2</p>
|
||||
</pre>
|
||||
</td>
|
||||
<td>
|
||||
<p>Paragraph 1</p>
|
||||
<p>Paragraph 2</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Preformatted Text</td>
|
||||
<td><pre>
|
||||
<pre>
|
||||
Text in a pre element
|
||||
is displayed in a fixed-width
|
||||
font, and it preserves
|
||||
both spaces and
|
||||
line breaks
|
||||
</pre>
|
||||
</pre></td>
|
||||
<td>
|
||||
<pre>
|
||||
Text in a pre element
|
||||
is displayed in a fixed-width
|
||||
font, and it preserves
|
||||
both spaces and
|
||||
line breaks
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Strong</td>
|
||||
<td>
|
||||
<strong>This text is important!</strong>
|
||||
</td>
|
||||
<td>
|
||||
<strong>This text is important!</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Subscript</td>
|
||||
<td>
|
||||
This text contains <sub>subscript</sub> text.
|
||||
</td>
|
||||
<td>
|
||||
This text contains <sub>subscript</sub> text.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Superscript</td>
|
||||
<td>
|
||||
E = mc<sup>2</sup>
|
||||
</td>
|
||||
<td>
|
||||
E = mc<sup>2</sup>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tables</td>
|
||||
<td><pre>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Col 1</td>
|
||||
<td>Col 2</td>
|
||||
<td>Col 3</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td>2</td>
|
||||
<td>3</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>4</td>
|
||||
<td>5</td>
|
||||
<td>6</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table></pre>
|
||||
</td>
|
||||
<td>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Col 1</td>
|
||||
<td>Col 2</td>
|
||||
<td>Col 3</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td>2</td>
|
||||
<td>3</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>4</td>
|
||||
<td>5</td>
|
||||
<td>6</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Marquee</td>
|
||||
<td>
|
||||
<marquee direction="up" behavior="scroll" scrollamount="10" height="100">
|
||||
This is a sample scrolling text that has scrolls in the upper direction.
|
||||
</marquee>
|
||||
</td>
|
||||
<td>
|
||||
<marquee direction="up" behavior="scroll" scrollamount="10" height="100">
|
||||
This is a sample scrolling text that has scrolls in the upper direction.
|
||||
</marquee>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Links</td>
|
||||
<td>
|
||||
This is a <a href='https://www.w3schools.com/tags/tag_a.asp'>link</a>
|
||||
</td>
|
||||
<td>
|
||||
This is a <a href='https://www.w3schools.com/tags/tag_a.asp'>link</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Images</td>
|
||||
<td>
|
||||
<img src="https://i.imgur.com/SwVuagI_d.webp" width="200">
|
||||
</td>
|
||||
<td>
|
||||
<img src="https://i.imgur.com/SwVuagI_d.webp" width="200">
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4>Allowed Attributes</h4>
|
||||
|
||||
<table class="table table-striped mb-5">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>href</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>style</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>src</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>class</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>title</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>direction</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>behavior</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>scrollamount</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h5>Allowed Styles</h5>
|
||||
|
||||
<table class="table table-striped mb-5">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>color</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>background-color</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>font-weight</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>transform</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-webkit-transform</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{% include "CHRISTMAS/expanded_image_modal.html" %}
|
||||
|
||||
{% endblock %}
|
|
@ -1,23 +0,0 @@
|
|||
<div class="modal fade" id="gifModal" tabindex="-1" role="dialog" aria-labelledby="gifModalTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-scrollable modal-dialog-centered p-5" role="document">
|
||||
<div class="modal-content mx-auto max-w-3xl bg-gray-100 dark:bg-gray-700 rounded-md shadow-lg">
|
||||
<div class="flex justify-between border-b border-gray-300 dark:border-gray-900 p-3">
|
||||
<div class="form-group flex items-center w-full mb-0">
|
||||
<div id="gifs-back-btn"></div>
|
||||
<input type="text" class="form-input w-full" id="gifSearch" placeholder="Search and press enter" onchange="getGif(this.value);">
|
||||
<div id="gifs-cancel-btn"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="overflow-y-scroll">
|
||||
<div class="modal-body p-0" id="gif-modal-body">
|
||||
<div id="no-gifs-found">
|
||||
</div>
|
||||
<div class="card-columns gif-categories pt-3 px-3 pb-0" id="GIFs">
|
||||
</div>
|
||||
<div id="gifs-load-more">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,74 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block subHeader %}
|
||||
<div class="relative max-w-screen-2xl mx-auto px-4 py-4 grid grid-cols-12 rounded-t">
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-gradient-to-t from-gray-300 to-gray-200 dark:bg-none dark:bg-gray-800 rounded-t sub-header-shadow dark:border-b dark:border-gray-700 sub-header"></div>
|
||||
<div class="relative col-span-full flex items-center">
|
||||
<div>
|
||||
<h1 class="font-bold text-xl font-heading leading-normal mb-0">
|
||||
Grassed Users
|
||||
</h1>
|
||||
<ul class="flex space-x-2 text-xs text-gray-500 dark:text-gray-400 leading-normal mb-0">
|
||||
{% if v and v.admin_level > 2 %}
|
||||
<li>
|
||||
<a href="/admin" class="text-gray-500 hover:underline">Admin Dashboard</a>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-arrow-alt-right text-shadow fa-fw fa-sm"></i>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a href="#" class="text-gray-700 dark:text-gray-500 hover:underline">Grassed Users</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-span-full my-4 px-2.5 md:px-0">
|
||||
{% if users %}
|
||||
<table class="w-full table">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th scope="col" class="p-2.5">#</th>
|
||||
<th scope="col" class="p-2.5">Username</th>
|
||||
<th scope="col" class="p-2.5">Grasser</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for user in users %}
|
||||
<tr class="h-16 odd:bg-gray-300 dark:odd:bg-white/[.05] hover:bg-gray-400 dark:hover:bg-white/10">
|
||||
<td class="px-2.5 font-bold">{{loop.index}}</td>
|
||||
<td class="px-2.5">
|
||||
<a style="color:#{{user.namecolor}}; font-weight:bold;" href="/@{{user.username}}">
|
||||
<img loading="lazy" src="/uid/{{user.id}}/pic" class="pp20">
|
||||
<span {% if user.patron %}class="patron" style="background-color:#{{user.namecolor}};"{% endif %}>{{user.username}}</span>
|
||||
</a>
|
||||
</td>
|
||||
<td class="px-2.5 font-bold">{{user.ban_reason.split('by ')[1]}}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% 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">No grassed users</h2>
|
||||
<p class="text-gray-500 text-sm">
|
||||
When users have an active grass award, it will show up here.
|
||||
</p>
|
||||
{% if v and v.admin_level > 2 %}
|
||||
<a href="/admin" class="mt-3 btn btn-gray">
|
||||
Go to admin dashboard
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/" class="mt-3 btn btn-gray">
|
||||
Go to homepage
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,220 +0,0 @@
|
|||
<!-- This example requires Tailwind CSS v2.0+ -->
|
||||
<nav class="fixed top-0 w-full bg-gray-700" style="z-index: 1030;">
|
||||
<!-- Banner -->
|
||||
{% include "CHRISTMAS/banner.html" %}
|
||||
<!-- Navigation bar -->
|
||||
<div class="w-full max-w-screen-2xl mx-auto grid grid-cols-12 px-4">
|
||||
<div class="relative col-span-full flex items-center justify-between h-14 md:px-4">
|
||||
<div class="flex-1 flex items-center sm:items-stretch sm:justify-start">
|
||||
<div class="flex-shrink-0 flex items-center">
|
||||
<a class="flex items-center" href="{{ '/' if v else '/logged_out'}}">
|
||||
<img class="block lg:hidden h-7 w-7 object-contain" src="/static/assets/images/Drama/headericon.webp?a=7" alt="logo">
|
||||
<img class="hidden lg:block h-7 w-7 object-contain" src="/static/assets/images/Drama/headericon.webp?a=7" alt="logo">
|
||||
<span class="pl-2 text-white text-2xl font-bold">rdrama</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="relative hidden sm:flex flex-shrink-0 items-center sm:ml-6">
|
||||
<form action="/search/posts/" method="get" class="relative mb-0">
|
||||
<input placeholder="Search" class="w-full text-gray-500 focus:text-black rounded border border-gray-800 bg-black/20 focus:bg-white hover:bg-black/30 shadow-inner w-full px-2 py-1.5 pr-7" aria-label="Search" name="q" value="{{request.values.get('q', '')}}">
|
||||
<i class="fas fa-search text-gray-600 absolute top-3 right-2"></i>
|
||||
</form>
|
||||
</div>
|
||||
<div class="hidden lg:flex items-center sm:ml-4">
|
||||
<!-- Current: "bg-gray-900 text-white", Default: "text-gray-300 hover:bg-gray-700 hover:text-white" -->
|
||||
<a href="/" class="relative px-3 py-2.5 rounded text-sm leading-normal {{ 'text-gray-200 font-bold text-shadow' if request.path == '/' else 'text-gray-400 hover:text-gray-300 dark:text-gray-500 dark:hover:text-gray-400' }}" aria-current="page">
|
||||
<i class="fas fa-home-lg-alt fa-fw mr-2"></i>
|
||||
Home
|
||||
</a>
|
||||
|
||||
<a href="/comments" class="relative px-3 py-2.5 rounded text-sm leading-normal {{ 'text-gray-200 font-bold text-shadow' if request.path == '/comments' else 'text-gray-400 hover:text-gray-300 dark:text-gray-500 dark:hover:text-gray-400' }}" aria-current="page">
|
||||
<i class="fas fa-comments-alt fa-fw mr-2"></i>
|
||||
Comments
|
||||
</a>
|
||||
|
||||
<a href="/leaderboard" class="hidden xl:inline-block relative px-3 py-2.5 rounded text-sm leading-normal {{ 'text-gray-200 font-bold text-shadow' if request.path == '/leaderboard' else 'text-gray-400 hover:text-gray-300 dark:text-gray-500 dark:hover:text-gray-400' }}" aria-current="page">
|
||||
<i class="fas fa-trophy fa-fw mr-2"></i>
|
||||
Leaderboards
|
||||
</a>
|
||||
|
||||
{% include "CHRISTMAS/dropdowns/NavbarExtraLinks.html" %}
|
||||
|
||||
<a href="/shop" class="hidden xl:flex items-center relative px-3 py-2.5 rounded text-sm text-yellow-500 leading-normal {{ 'font-bold text-shadow' if request.path == '/shop' else 'font-medium' }}">
|
||||
<img src="https://i.ibb.co/xFgG6yf/Coinfixed.gif" width="15px" height="12px" class="object-contain mr-2.5"/>
|
||||
Shop
|
||||
</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% if not error %}
|
||||
<div class="absolute inset-y-0 right-0 flex items-center space-x-2 sm:static sm:inset-auto -mr-2 sm:mr-0 sm:ml-6 sm:pr-0">
|
||||
<!-- Logged in -->
|
||||
{% if v %}
|
||||
<!-- Profile dropdown -->
|
||||
<div class="ml-3 relative hidden sm:block">
|
||||
{% include "CHRISTMAS/dropdowns/NavbarProfile.html" %}
|
||||
</div>
|
||||
{% if v.admin_level > 1 %}
|
||||
<!-- Admin link -->
|
||||
<a href="{{ '/admin' if v else '/signup?redirect={{request.path | urlencode}}' }}" class="inline-block bg-transparent p-2 rounded-full text-yellow-500 hover:text-yellow-400 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-800 focus:ring-white">
|
||||
<span class="sr-only">Admin tools</span>
|
||||
<i class="fas fa-crown fa-fw text-lg sm:text-base"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
<!-- Profile link -->
|
||||
<a href="{{ '/me' if v else '/signup?redirect={{request.path | urlencode}}' }}" class="inline-block bg-transparent p-2 rounded-full text-gray-400 hover:text-gray-300 dark:text-gray-500 dark:hover:text-gray-400 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-800 focus:ring-white">
|
||||
<span class="sr-only">My profile</span>
|
||||
<i class="fas fa-user fa-fw text-lg sm:text-base"></i>
|
||||
</a>
|
||||
<!-- Notifications -->
|
||||
<a href="/notifications{% if v.notifications_count and v.notifications_count == v.post_notifications_count %}?posts=true{% endif %}" class="inline-block bg-transparent p-2 rounded-full text-gray-400 hover:text-gray-300 dark:text-gray-500 dark:hover:text-gray-400 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-800 focus:ring-white">
|
||||
<span class="sr-only">View notifications</span>
|
||||
<div class="relative">
|
||||
<i class="fas fa-envelope fa-fw text-lg sm:text-base"></i>
|
||||
<!-- Counter -->
|
||||
{% if v.notifications_count %}
|
||||
<div class="absolute -top-1.5 -right-3 {{ 'w-10' if v.notifications_count > 99 else 'w-6' }} h-6 rounded-full border-2 border-gray-700 flex items-center justify-center bg-red-600">
|
||||
<span class="text-xs text-gray-100 font-bold leading-none">{{ v.notifications_count }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</a>
|
||||
<!-- Post Creation -->
|
||||
<a href="{{ '/submit' if v else '/signup?redirect={{request.path | urlencode}}' }}" class="inline-block bg-transparent p-2 rounded-full text-gray-400 hover:text-gray-300 dark:text-gray-500 dark:hover:text-gray-400 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-800 focus:ring-white">
|
||||
<span class="sr-only">Submit post</span>
|
||||
<i class="fas fa-pencil fa-fw text-lg sm:text-base"></i>
|
||||
</a>
|
||||
<!-- Not logged in -->
|
||||
{% else %}
|
||||
<!-- Login button -->
|
||||
<a class="btn btn-gray" href="/login?redirect={{request.path | urlencode}}">
|
||||
Login
|
||||
</a>
|
||||
<!-- Register button -->
|
||||
<a class="hidden sm: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- hover:bg-gradient-to-t hover:from-gray-100 hover:to-gray-200 border-gray-300 text-gray-200 hover:text-gray-700 focus:text-gray-900" href="/signup?redirect={{request.path | urlencode}}">
|
||||
Sign up
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if not error %}
|
||||
<!-- Mobile menu button-->
|
||||
<button type="button" class="flex items-center justify-center sm:hidden bg-transparent p-2 rounded text-gray-400 hover:text-gray-300 dark:text-gray-500 dark:hover:text-gray-400 focus:outline-none focus:ring-2 focus:ring-opacity-50 focus:ring-white" data-bs-toggle="offcanvas" data-bs-target="#offcanvasNavbar" aria-controls="offcanvasNavbar">
|
||||
<span class="sr-only">Open main menu</span>
|
||||
<svg class="block h-7 w-7" xmlns="https://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
|
||||
</svg>
|
||||
</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Mobile menu, show/hide based on menu state. -->
|
||||
<div class="offcanvas offcanvas-end bg-gray-200 dark:bg-gray-800" tabindex="-1" id="offcanvasNavbar" aria-labelledby="offcanvasNavbarLabel">
|
||||
<div class="relative flex w-full bg-gray-700 dark:bg-gray-800 h-20 px-4 items-center">
|
||||
<a class="flex items-center" href="{{ '/' if v else '/logged_out'}}">
|
||||
<img class="block lg:hidden h-7 w-7 object-contain" src="/static/assets/images/Drama/headericon.webp?a=7" alt="logo">
|
||||
<img class="hidden lg:block h-7 w-7 object-contain" src="/static/assets/images/Drama/headericon.webp?a=7" alt="logo">
|
||||
<span class="pl-2 text-white text-2xl font-bold">rdrama</span>
|
||||
</a>
|
||||
<button type="button" class="-mr-4 ml-auto text-white/50 text-2xl font-bold p-4" data-bs-dismiss="offcanvas" aria-label="Close">
|
||||
<span aria-hidden="true">
|
||||
<i class="far fa-times"></i>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<!-- Search box -->
|
||||
<form action="/search/posts/" method="get" class="relative mb-4">
|
||||
<input placeholder="Search" class="block w-full rounded shadow-inner py-2 pl-2 pr-7 bg-white dark:bg-white/[.06] border border-gray-300 dark:border-gray-900 hover:border-gray-400 focus:border-blue-300 focus:ring focus:ring-blue-200 focus:ring-opacity-50" aria-label="Search" name="q" value="{{request.values.get('q', '')}}">
|
||||
<i class="fas fa-search text-gray-400 absolute top-3 right-3"></i>
|
||||
</form>
|
||||
{% if v %}
|
||||
<!-- Submit post link -->
|
||||
<a href="/submit" class="w-full btn btn-primary mb-4">
|
||||
<i class="fas fa-pen fa-sm fa-fw mr-2"></i>
|
||||
Create post
|
||||
</a>
|
||||
<!-- Meta links -->
|
||||
<ul class="flex flex-col space-y-3 font-bold text-base text-gray-600 dark:text-gray-200">
|
||||
<li>
|
||||
<a class="inline-flex items-center" aria-current="page" href="/me">
|
||||
<img src="{{ v.profile_url }}" class="w-14 h-14 p-[3px] bg-white dark:bg-gray-900 border border-gray-300 dark:border-gray-700 object-cover"/>
|
||||
<div class="pl-3">
|
||||
<div class="text-base text-black dark:text-gray-100 leading-5">
|
||||
{{ v.username }}
|
||||
</div>
|
||||
<div class="flex space-x-3 mt-1">
|
||||
<small class="flex items-center block mt-1 text-gray-500">
|
||||
<img data-bs-toggle="tooltip" data-bs-placement="bottom" src="/assets/images/emojis/marseycoin.webp" data-bs-original-title="{{'COINS_NAME' | app_config}}" aria-label="{{'COINS_NAME' | app_config}}" class="w-6 h-6 object-contain" alt="coin icon"/>
|
||||
<span class="pl-1">
|
||||
<span id="user-coins-amount">{{v.coins}}</span>
|
||||
{{'COINS_NAME' | app_config}}
|
||||
</span>
|
||||
</small>
|
||||
{% if v.procoins %}
|
||||
<small class="flex items-center block mt-1 text-gray-500">
|
||||
<img data-bs-toggle="tooltip" data-bs-placement="bottom" src="/assets/images/emojis/marseybux.webp" data-bs-original-title="{{'COINS_NAME' | app_config}}" aria-label="{{'COINS_NAME' | app_config}}" class="w-6 h-6 object-contain" alt="coin icon"/>
|
||||
<span class="pl-1">{{v.procoins}} MarseyBux</span>
|
||||
</small>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="text-gray-700 hover:text-gray-900 dark:text-gray-200 dark:hover:text-gray-400" href="/@me">
|
||||
<i class="fas fa-user fa-fw mr-2"></i>
|
||||
My Profile
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="text-gray-700 hover:text-gray-900 dark:text-gray-200 dark:hover:text-gray-400" href="/notifications{% if v.notifications_count and v.notifications_count == v.post_notifications_count %}?posts=true{% endif %}">
|
||||
<i class="fas fa-envelope fa-fw mr-2"></i>
|
||||
Inbox
|
||||
{% if v.notifications_count %}
|
||||
<span class="text-red-600">{{ v.notifications_count }}</span>
|
||||
{% endif %}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="text-gray-700 hover:text-gray-900 dark:text-gray-200 dark:hover:text-gray-400" href="/settings">
|
||||
<i class="fas fa-cog fa-fw mr-2"></i>
|
||||
Settings
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<button class="text-gray-700 hover:text-gray-900 dark:text-gray-200 dark:hover:text-gray-400 font-bold" data-bs-toggle="modal" data-bs-target="#themePickerModal">
|
||||
<i class="fas fa-paint-brush fa-fw mr-2"></i>
|
||||
Pick theme
|
||||
</button>
|
||||
<li>
|
||||
<button class="text-gray-700 hover:text-gray-900 dark:text-gray-200 dark:hover:text-gray-400 font-bold" onclick="post_toast('/logout', '1')">
|
||||
<i class="fas fa-power-off fa-fw mr-2"></i>
|
||||
Log out
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
{% else %}
|
||||
<ul class="flex flex-col space-y-2">
|
||||
<li>
|
||||
<a class="btn btn-gray w-full" href="/login?redirect={{request.path | urlencode}}">
|
||||
Login
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="btn btn-gray w-full" href="/signup?redirect={{request.path | urlencode}}">
|
||||
Signup
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
<a href="/static/assets/images/{{'SITE_NAME' | app_config}}/banners/{{range(1,95)|random()}}.webp?a=3" class="block w-full h-64 shadow-sm p-[3px] bg-white dark:bg-gray-900 overflow-hidden">
|
||||
<img loading="lazy" class="w-full h-full flex-shrink-0 object-contain cursor-pointer" src="/static/assets/images/{{'SITE_NAME' | app_config}}/banners/{{range(1,95)|random()}}.webp?a=3" alt="artwork featuring an orange and white cat"/>
|
||||
</a>
|
||||
<small class="hidden mt-1 text-gray-500">
|
||||
Artwork by <a href="/me" class="font-bold">@username</a>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
|
@ -1,227 +0,0 @@
|
|||
<nav class="shadow shadow-md fixed-top">
|
||||
{% if request.host == "rdrama.net" %}
|
||||
<div id="srd" style="width: 100%; background-color: var(--primary); padding: 2px; text-align: center; font-weight: bold;">
|
||||
<a style="color: white" href="https://reddit.com/r/SubredditDrama">/r/SubredditDrama official site</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="navbar navbar-expand-md navbar-light" id="navbar">
|
||||
<div class="container-fluid" style="padding:0;">
|
||||
<div class="flex-grow-1">
|
||||
<a href="/" class="navbar-brand mr-auto">
|
||||
<img loading="lazy" height="30" src="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/headericon.webp?a=1">
|
||||
{% if request.host != 'pcmemes.net' %}
|
||||
<img loading="lazy" src="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/logo.webp?a=1" height="20">
|
||||
{% endif %}
|
||||
</a>
|
||||
</div>
|
||||
<div class="flex-grow-1 d-fl d-none d-md-block">
|
||||
<form class="form-inline search flex-nowrap mx-0 mx-lg-auto" action="/search/posts/" method="get">
|
||||
<input class="form-control w-100" type="search" placeholder="Search" aria-label="Search" name="q" value="{{request.values.get('q', '')}}">
|
||||
<span class="input-group-append">
|
||||
<span class="input-group-text border-0 bg-transparent" style="margin-left: -2.5rem;">
|
||||
<i class="fa fa-search" aria-hidden="true"></i>
|
||||
</span>
|
||||
</span>
|
||||
</form>
|
||||
</div>
|
||||
<a class="mobile-nav-icon d-md-none" href="/random"><i class="fas fa-random align-middle text-gray-500 black"></i></a>
|
||||
{% if v and v.admin_level > 0 %}
|
||||
<a class="mobile-nav-icon d-md-none" href="/admin"><i class="fas fa-crown align-middle text-gray-500 black"></i></a>
|
||||
{% endif %}
|
||||
{% if v %}
|
||||
<a class="mobile-nav-icon d-md-none" href="/submit"><i class="fas fa-feather-alt align-middle text-gray-500 black"></i></a>
|
||||
{% else %}
|
||||
<a class="mobile-nav-icon d-md-none" href="/login"><i class="fas fa-feather-alt align-middle text-gray-500 black"></i></a>
|
||||
{% endif %}
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarResponsive"
|
||||
aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon {% if v and v.notifications_count %}position-relative{% endif %}"><i class="fal fa-bars text-gray-500 black"></i>
|
||||
{% if v and v.notifications_count %}
|
||||
<span class="notif-count">{{v.notifications_count}}</span>
|
||||
{% endif %}
|
||||
</span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarResponsive">
|
||||
<ul class="navbar-nav ml-auto d-none d-md-flex">
|
||||
|
||||
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
||||
<a class="nav-link" href="/random/" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Random post"><i class="fas fa-random"></i></a>
|
||||
</li>
|
||||
|
||||
{% if v and v.admin_level > 1 %}
|
||||
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
||||
<a class="nav-link" href="/admin/" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Admin tools"><i class="fas fa-crown{% if v.has_report_queue %} text-success{% endif %}"></i></a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if v %}
|
||||
|
||||
{% if v.notifications_count %}
|
||||
|
||||
<li class="nav-item d-flex align-items-center text-center justify-content-center mx-1">
|
||||
<a class="nav-link position-relative" href="/notifications{% if v.notifications_count and v.notifications_count == v.post_notifications_count %}?posts=true{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Notifications"><i class="fas fa-bell text-danger"></i><span class="notif-count ml-1" style="padding-left: 4.5px;">{{v.notifications_count}}</span></a>
|
||||
</li>
|
||||
|
||||
{% else %}
|
||||
|
||||
<li class="nav-item d-flex align-items-center text-center justify-content-center mx-1">
|
||||
<a class="nav-link" href="/notifications" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Notifications"><i class="fas fa-bell"></i></a>
|
||||
</li>
|
||||
|
||||
{% endif %}
|
||||
|
||||
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
||||
<a class="nav-link" href="/submit" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Create post"><i class="fas fa-feather-alt"></i></a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
||||
<a class="nav-link" href="/comments" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Comments"><i class="fas fa-comment-dots"></i></a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
||||
<a class="nav-link" href="/leaderboard" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Users"><i class="fas fa-trophy"></i></a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
|
||||
<a class="nav-link" href="/shop" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Shop"><i class="fas fa-store"></i></a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item d-flex align-items-center justify-content-center text-center">
|
||||
<div class="dropdown">
|
||||
<a class="nav-link bg-transparent py-0 pr-0" href="javascript:void(0)" role="button" id="dropdownMenuLink" data-bs-toggle="dropdown"
|
||||
aria-haspopup="true" aria-expanded="false">
|
||||
<div class="d-flex">
|
||||
<div><img loading="lazy" src="{{v.profile_url}}" class="profile-pic-35"></div>
|
||||
<div class="text-left pl-2">
|
||||
<div style="color: #{{v.namecolor}}" class="text-small font-weight-bold {% if v.patron %}patron{% endif %}"><span {% if v.patron %}class="patron" style="background-color:#{{v.namecolor}};"{% endif %}>{{v.username}}</span></div>
|
||||
<div class="text-small-extra text-primary"><img class="mr-1 ml-1" data-bs-toggle="tooltip" data-bs-placement="bottom" height="13" src="/assets/images/emojis/marseycoin.webp" data-bs-original-title="{{'COINS_NAME' | app_config}}" aria-label="{{'COINS_NAME' | app_config}}"><span id="user-coins-amount">{{v.coins}}</span> {{'COINS_NAME' | app_config}}</div>
|
||||
{% if v.procoins %}<div class="text-small-extra text-primary"><img class="mr-1 ml-1" data-bs-toggle="tooltip" data-bs-placement="bottom" height="13" src="/assets/images/emojis/marseybux.webp" data-bs-original-title="Marseybux" aria-label="Marseybux"><span>{{v.procoins}}</span> Marseybux</div>{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-right dropdown-menu-lg-left border-0 shadow fade px-0 mt-2">
|
||||
<div class="px-2">
|
||||
<a class="dropdown-item" href="{{v.url}}"><i class="fas fa-user-circle fa-fw text-left mr-3"></i>My
|
||||
profile</a>
|
||||
<a class="dropdown-item" href="/settings"><i class="fas fa-cog fa-fw text-left mr-3"></i>Settings</a>
|
||||
</div>
|
||||
<div class="px-2">
|
||||
<button class="dropdown-item copy-link" data-clipboard-text="/signup?ref={{v.username}}"><i class="fad fa-user-friends fa-fw text-left mr-3"></i>Invite friends</button>
|
||||
</div>
|
||||
<div class="px-2">
|
||||
<a class="dropdown-item" href="https://play.google.com/store/apps/details?id=com.rdrama"><i class="fab fa-android fa-fw text-left mr-3"></i>Android app</a>
|
||||
|
||||
<a class="dropdown-item" href="/rules"><i class="fas fa-balance-scale fa-fw text-left mr-3"></i>Rules</a>
|
||||
|
||||
<a class="dropdown-item" href="/changelog"><i class="fas fa-clipboard fa-fw text-left mr-3"></i>Changelog</a>
|
||||
|
||||
<a class="dropdown-item" rel="nofollow noopener noreferrer" href="https://github.com/Aevann1/Drama"><i class="fab fa-github fa-fw text-left mr-3"></i>Source code</a>
|
||||
|
||||
{% if request.host in ['rdrama.net', 'pcmemes.net'] %}
|
||||
<a class="dropdown-item" rel="nofollow noopener noreferrer" href="/report_bugs"><i class="fas fa-bug fa-fw text-left mr-3"></i>Report bugs or suggestions</a>
|
||||
{% endif %}
|
||||
|
||||
{% if request.host != 'pcmemes.net' %}
|
||||
<a class="dropdown-item" href="/discord"><i class="fab fa-discord fa-fw text-left mr-3"></i>Discord</a>
|
||||
{% endif %}
|
||||
<a class="dropdown-item" rel="nofollow noopener noreferrer" href="{{'GUMROAD_LINK' | app_config}}"><i class="fas fa-dollar-sign fa-fw text-left mr-3"></i>Donate</a>
|
||||
{% if request.host == 'rdrama.net' %}<a class="dropdown-item" href="/archives"><i class="fas fa-book fa-fw text-left mr-3"></i>Archives</a>{% endif %}
|
||||
<a class="dropdown-item" href="/contact"><i class="fas fa-file-signature fa-fw text-left mr-3"></i>Contact us</a>
|
||||
</div>
|
||||
<div class="px-2">
|
||||
<a class="dropdown-item" href="javascript:void(0)", onclick="post_toast('/logout', '1')"><i class="fas fa-sign-out fa-fw text-left mr-3"></i>Log out</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="nav-item d-flex align-items-center justify-content-center mx-1">
|
||||
<a class="btn btn-outline-purple" href="/contact">Contact us</a>
|
||||
</li>
|
||||
<li class="nav-item d-flex align-items-center justify-content-center mx-1">
|
||||
<a class="btn btn-outline-purple" href="/login?redirect={{request.path | urlencode}}">Sign in</a>
|
||||
</li>
|
||||
<li class="nav-item d-flex align-items-center justify-content-center mx-1">
|
||||
<a class="btn btn-outline-purple" href="/signup?redirect={{request.path | urlencode}}">Sign up</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
|
||||
<ul class="navbar-nav ml-auto d-flex d-md-none mt-3">
|
||||
<li class="nav-item pb-3">
|
||||
<form id="searchform" class="form-inline search flex-nowrap mx-0 mx-lg-auto" action="/search/posts/" method="get">
|
||||
<input class="form-control form-control-sm w-100" type="search" placeholder="Search" aria-label="Search" name="q">
|
||||
<span class="input-group-append">
|
||||
<span class="input-group-text border-0 bg-transparent" style="margin-left: -2.5rem;" onclick="document.getElementById('searchform').submit()">
|
||||
<i class="fa fa-search" aria-hidden="true"></i>
|
||||
</span>
|
||||
</span>
|
||||
</form>
|
||||
</li>
|
||||
{% if v %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{v.url}}"><i class="fas fa-user-circle fa-fw mr-3"></i>@{{v.username}}</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {% if v.notifications_count %}position-relative{% endif %}" href="/notifications{% if v.notifications_count and v.notifications_count == v.post_notifications_count %}?posts=true{% endif %}">
|
||||
<i class="fas fa-envelope fa-fw mr-3"></i>Inbox
|
||||
{% if v.notifications_count %}
|
||||
<i class="fas fa-circle text-danger position-absolute" style="left: 19px; top: 5px; font-size: 10px;"></i>
|
||||
{% endif %}
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/settings"><i class="fas fa-cog fa-fw mr-3"></i>Settings</a>
|
||||
</li>
|
||||
<a class="nav-item nav-link" href="https://play.google.com/store/apps/details?id=com.rdrama"><i class="fab fa-android fa-fw mr-3"></i>Android app</a>
|
||||
|
||||
<a class="nav-item nav-link" href="/rules"><i class="fas fa-balance-scale fa-fw mr-3"></i>Rules</a>
|
||||
|
||||
<a class="nav-item nav-link" rel="nofollow noopener noreferrer" href="https://github.com/Aevann1/Drama"><i class="fab fa-github fa-fw mr-3"></i>Source code</a>
|
||||
|
||||
{% if request.host in ['rdrama.net', 'pcmemes.net'] %}
|
||||
<a class="nav-item nav-link" rel="nofollow noopener noreferrer" href="/report_bugs"><i class="fas fa-bug fa-fw mr-3"></i>Report bugs or suggestions</a>
|
||||
{% endif %}
|
||||
|
||||
{% if request.host != 'pcmemes.net' %}
|
||||
<a class="nav-item nav-link" href="/discord"><i class="fab fa-discord fa-fw mr-3"></i>Discord</a>
|
||||
{% endif %}
|
||||
<a class="nav-item nav-link" rel="nofollow noopener noreferrer" href="{{'GUMROAD_LINK' | app_config}}"><i class="fas fa-dollar-sign fa-fw mr-3"></i>Donate</a>
|
||||
{% if request.host == 'rdrama.net' %}<a class="nav-item nav-link" href="/archives"><i class="fas fa-book fa-fw mr-3"></i>Archives</a>{% endif %}
|
||||
<a class="nav-item nav-link" href="/contact"><i class="fas fa-file-signature fa-fw mr-3"></i>Contact us</a>
|
||||
|
||||
<li class="nav-item border-top border-bottom mt-2 pt-2">
|
||||
<a class="nav-link" href="javascript:void(0)", onclick="post_toast('/logout', '1')"><i class="fas fa-sign-out fa-fw mr-3 text-danger"></i>Log out</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="nav-item d-flex align-items-center justify-content-center pb-3">
|
||||
<a class="btn btn-outline-purple btn-block" href="/contact">Contact us</a>
|
||||
</li>
|
||||
<li class="nav-item d-flex align-items-center justify-content-center pb-3">
|
||||
<a class="btn btn-outline-purple btn-block" href="/login?redirect={{request.path | urlencode}}">Sign in</a>
|
||||
</li>
|
||||
<li class="nav-item d-flex align-items-center justify-content-center">
|
||||
<a class="btn btn-outline-purple btn-block" href="/signup?redirect={{request.path | urlencode}}">Sign up</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<script src="/assets/CHRISTMAS/js/header.js?a=1"></script>
|
||||
|
||||
<style>
|
||||
.notif-count {
|
||||
background: red;
|
||||
border-radius: 20%;
|
||||
color: white;
|
||||
padding: 2px 5px;
|
||||
font-weight: 700;
|
||||
}
|
||||
</style>
|
||||
|
||||
{% if v and not error %}
|
||||
<div id="formkey" class="d-none">{{v.formkey}}</div>
|
||||
{% endif %}
|
|
@ -1,113 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block subHeader %}
|
||||
<div class="relative max-w-screen-2xl mx-auto px-4 py-4 grid grid-cols-12 rounded-t">
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-gradient-to-t from-gray-300 to-gray-200 dark:bg-none dark:bg-gray-800 rounded-t sub-header-shadow dark:border-b dark:border-gray-700 sub-header"></div>
|
||||
<div class="relative col-span-full flex items-center">
|
||||
<div>
|
||||
<h1 class="font-bold text-xl font-heading leading-normal mb-0">
|
||||
Home
|
||||
</h1>
|
||||
<small class="block text-gray-700 dark:text-gray-400">
|
||||
<span class="capitalize font-bold">{{ sort }}</span>
|
||||
posts {{ 'from all time' if t=='all' else 'in the last' }}
|
||||
{% if t != 'all' %}<span class="font-bold">{{ t }}{% endif %}
|
||||
</small>
|
||||
</div>
|
||||
<div class="ml-auto">
|
||||
{% include "CHRISTMAS/dropdowns/SubmissionSorts.html" %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block desktopBanner %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<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/SubmissionList.html" %}
|
||||
</ul>
|
||||
|
||||
{% if listing %}
|
||||
<nav aria-label="Page navigation">
|
||||
<ul class="flex flex-wrap items-center mb-0 py-4 px-2.5 md:px-0">
|
||||
<li>
|
||||
{% if page > 1 %}
|
||||
<small>
|
||||
<a class="block px-2 py-1 text-sm font-bold text-primary bg-gray-900" href="?sort={{sort}}&page={{page-1}}&t={{t}}{% if only %}&only={{only}}{% endif %}" tabindex="-1">
|
||||
Back
|
||||
</a>
|
||||
</small>
|
||||
{% else %}
|
||||
<button disabled class="block px-2 py-1 text-sm font-bold text-gray-700 bg-gray-800 cursor-not-allowed">Back</button>
|
||||
{% endif %}
|
||||
</li>
|
||||
<li>
|
||||
{% if next_exists %}
|
||||
<small>
|
||||
<a class="block px-2 py-1 text-sm font-bold text-primary bg-gray-900" href="?sort={{sort}}&page={{page+1}}&t={{t}}{% if only %}&only={{only}}{% endif %}">
|
||||
Next
|
||||
</a>
|
||||
</small>
|
||||
{% else %}
|
||||
<button disabled class="block px-2 py-1 text-sm font-bold text-gray-700 bg-gray-800 cursor-not-allowed">Next</button>
|
||||
{% endif %}
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
<!-- Sidebar -->
|
||||
{% block sidebar %}
|
||||
{% include "CHRISTMAS/sidebars/HomeSidebar.html" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block modals %}
|
||||
{% if v %}
|
||||
{% include "CHRISTMAS/award_modal.html" %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
|
||||
{% if v %}
|
||||
<script src="/assets/CHRISTMAS/js/award_modal.js?a=1"></script>
|
||||
<script src="/assets/CHRISTMAS/js/pusher.js?a=1"></script>
|
||||
{% endif %}
|
||||
|
||||
<script src="/assets/CHRISTMAS/js/submission_listing.js?a=6"></script>
|
||||
|
||||
{% if v and not v.fp %}
|
||||
<script>
|
||||
function fp(fp) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", '{{request.host_url}}fp/'+fp, true);
|
||||
var form = new FormData()
|
||||
form.append("formkey", formkey());
|
||||
xhr.withCredentials=true;
|
||||
xhr.send(form);
|
||||
};
|
||||
|
||||
const fpPromise = new Promise((resolve, reject) => {
|
||||
const script = document.createElement('script');
|
||||
script.onload = resolve;
|
||||
script.onerror = reject;
|
||||
script.async = true;
|
||||
script.src = 'https://cdn.jsdelivr.net/npm/@fingerprintjs/fingerprintjs-pro@3/dist/fp.min.js';
|
||||
document.head.appendChild(script);
|
||||
})
|
||||
.then(() => FingerprintJS.load({token: '{{environ.get("FP")}}'}));
|
||||
|
||||
fpPromise
|
||||
.then(fp => fp.get())
|
||||
.then(result => {if (result.visitorId != '{{v.fp}}') fp(result.visitorId);})
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
|
@ -1,50 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block subHeader %}
|
||||
<div class="relative max-w-screen-2xl mx-auto px-4 py-4 grid grid-cols-12 rounded-t">
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-gradient-to-t from-gray-300 to-gray-200 dark:bg-none dark:bg-gray-800 rounded-t sub-header-shadow dark:border-b dark:border-gray-700"></div>
|
||||
<div class="relative col-span-full flex items-center">
|
||||
<div>
|
||||
<h1 class="font-bold text-xl font-heading leading-normal mb-0">
|
||||
Comments
|
||||
</h1>
|
||||
<small class="block text-gray-700 dark:text-gray-400">
|
||||
<span class="capitalize font-bold">{{ sort }}</span>
|
||||
comments {{ 'from all time' if t=='all' else 'in the last' }}
|
||||
{% if t != 'all' %}<strong>{{ t }}</strong>{% endif %}
|
||||
</small>
|
||||
</div>
|
||||
<div class="ml-auto">
|
||||
{% include "CHRISTMAS/dropdowns/SubmissionSorts.html" %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<!-- Comments list -->
|
||||
<div class="col-span-full px-2.5 md:px-0" id="posts">
|
||||
{% include "CHRISTMAS/comments.html" %}
|
||||
</div>
|
||||
<!-- Pagination -->
|
||||
<div class="col-span-full">
|
||||
<ul class="flex flex-wrap items-center mb-4">
|
||||
{% if page>1 %}
|
||||
<li>
|
||||
<a class="block px-2 py-1 text-sm font-bold text-gray-700 hover:text-gray-900 bg-gray-300 hover:bg-gray-400 active:shadow-inner" href="?page={{page-1}}&sort={{sort}}&t={{t}}" tabindex="-1">
|
||||
Prev
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li><span class="block px-2 py-1 text-sm font-bold text-gray-400 bg-gray-300/50 disabled">Prev</span></li>
|
||||
{% endif %}
|
||||
{% if next_exists %}
|
||||
<li class="page-item">
|
||||
<a class="block px-2 py-1 text-sm font-bold text-gray-700 hover:text-gray-900 bg-gray-300 hover:bg-gray-400 active:shadow-inner" href="?page={{page+1}}&sort={{sort}}&t={{t}}">Next</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li><span class="block px-2 py-1 text-sm font-bold text-gray-400 bg-gray-300/50 disabled">Next</span></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,413 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block pagetitle %}Leaderboard{% endblock %}
|
||||
|
||||
{% block subHeader %}
|
||||
<div class="relative max-w-screen-2xl mx-auto px-4 py-4 grid grid-cols-12 rounded-t">
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-gradient-to-t from-gray-300 to-gray-200 dark:bg-none dark:bg-gray-800 rounded-t sub-header-shadow"></div>
|
||||
<div class="relative col-span-full flex items-center">
|
||||
<div>
|
||||
<h1 class="font-bold text-xl font-heading leading-normal mb-0">
|
||||
Leaderboards
|
||||
</h1>
|
||||
<small class="block text-gray-700 dark:text-gray-400 leading-normal">
|
||||
In-depth analysis of our most terminally online members' careers.
|
||||
</small>
|
||||
<ul class="hidden text-gray-500 text-sm flex items-center space-x-3 leading-normal mb-0">
|
||||
<li>
|
||||
<a class="{% if not '=true' in request.full_path %}font-bold text-primary{% endif %}" href="/notifications">
|
||||
Wealthiest
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="{% if '/notifications?posts=true' in request.full_path %}font-bold text-primary{% endif %}" href="/notifications?posts=true">
|
||||
Spenders
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="{% if '/notifications?messages=true' in request.full_path %}font-bold text-primary{% endif %}" href="/notifications?messages=true">
|
||||
Followers
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="{% if '/notifications?messages=true' in request.full_path %}font-bold text-primary{% endif %}" href="/notifications?messages=true">
|
||||
Posts
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="{% if '/notifications?messages=true' in request.full_path %}font-bold text-primary{% endif %}" href="/notifications?messages=true">
|
||||
Comments
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="{% if '/notifications?messages=true' in request.full_path %}font-bold text-primary{% endif %}" href="/notifications?messages=true">
|
||||
Awards
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<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 Greediest Members
|
||||
</h2>
|
||||
</div>
|
||||
<div class="mb-4 flex flex-col bg-gray-100 dark:bg-gray-900 rounded-lg overflow-hidden">
|
||||
{% for user in users1 %}
|
||||
<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-gray-900 text-shadow-light bg-primary{% elif users1.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' }}">
|
||||
{{users1.index(user)+1}}
|
||||
</h2>
|
||||
<div class="relative flex-shrink-0">
|
||||
<img src="{{user.profile_url}}" class="flex-shrink-0 p-[3px] border w-12 h-12 object-cover {{ 'bg-red-800 border-red-900' if v.username == user.username else 'bg-white border-gray-300' }}" alt="{{ user.username }} avatar"/>
|
||||
{% if users1.index(user)+1 == 1 %}
|
||||
<img src="https://i.ibb.co/xFgG6yf/Coinfixed.gif" width="20px" height="12px" class="absolute -top-1 -right-2.5 object-contain"/>
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- User Details -->
|
||||
<div class="ml-3">
|
||||
<a class="block font-heading font-bold text-lg md:text-xl text-black dark:text-gray-200 hover:text-primary" href="/@{{user.username}}">
|
||||
{{user.username}}
|
||||
</a>
|
||||
{% if user.customtitle %}
|
||||
<p class="text-sm" style="#{{user.namecolor}}">
|
||||
{{user.customtitle | safe}}
|
||||
</p>
|
||||
{% 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.coins}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<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 20 Top Spenders
|
||||
</h2>
|
||||
</div>
|
||||
<div class="mb-4 flex flex-col bg-gray-100 dark:bg-gray-900 rounded-lg overflow-hidden">
|
||||
{% for user in users7 %}
|
||||
<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 users7.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' }}">
|
||||
{{users7.index(user)+1}}
|
||||
</h2>
|
||||
<div class="relative flex-shrink-0">
|
||||
<img src="{{user.profile_url}}" class="flex-shrink-0 p-[3px] border w-12 h-12 object-cover {{ 'bg-red-800 border-red-900' if v.username == user.username else 'bg-white border-gray-300' }}" alt="{{ user.username }} avatar"/>
|
||||
{% if users7.index(user)+1 == 1 %}
|
||||
<img src="https://i.ibb.co/xFgG6yf/Coinfixed.gif" width="20px" height="12px" class="absolute -top-1 -right-2.5 object-contain"/>
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- User Details -->
|
||||
<div class="ml-3">
|
||||
<a class="block font-heading font-bold text-lg md:text-xl text-black dark:text-gray-200 hover:text-primary" href="/@{{user.username}}">
|
||||
{{user.username}}
|
||||
</a>
|
||||
{% if user.customtitle %}
|
||||
<p class="text-sm" style="#{{user.namecolor}}">
|
||||
{{user.customtitle | safe}}
|
||||
</p>
|
||||
{% 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.coins_spent}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<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 15 Most Popular
|
||||
</h2>
|
||||
</div>
|
||||
<div class="mb-4 flex flex-col bg-gray-100 dark:bg-gray-900 rounded-lg overflow-hidden">
|
||||
{% for user in users2 %}
|
||||
<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 users2.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' }}">
|
||||
{{users2.index(user)+1}}
|
||||
</h2>
|
||||
<div class="relative flex-shrink-0">
|
||||
<img src="{{user.profile_url}}" class="flex-shrink-0 p-[3px] border w-12 h-12 object-cover {{ 'bg-red-800 border-red-900' if v.username == user.username else 'bg-white border-gray-300' }}" alt="{{ user.username }} avatar"/>
|
||||
{% if users2.index(user)+1 == 1 %}
|
||||
<img src="https://i.ibb.co/xFgG6yf/Coinfixed.gif" width="20px" height="12px" class="absolute -top-1 -right-2.5 object-contain"/>
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- User Details -->
|
||||
<div class="ml-3">
|
||||
<a class="block font-heading font-bold text-lg md:text-xl text-black dark:text-gray-200 hover:text-primary" href="/@{{user.username}}">
|
||||
{{user.username}}
|
||||
</a>
|
||||
{% if user.customtitle %}
|
||||
<p class="text-sm" style="#{{user.namecolor}}">
|
||||
{{user.customtitle | safe}}
|
||||
</p>
|
||||
{% 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.stored_subscriber_count}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<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 10 Most Terminally Online (Posts)
|
||||
</h2>
|
||||
</div>
|
||||
<div class="mb-4 flex flex-col bg-gray-100 dark:bg-gray-900 rounded-lg overflow-hidden">
|
||||
{% for user in users3 %}
|
||||
<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 users3.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' }}">
|
||||
{{users3.index(user)+1}}
|
||||
</h2>
|
||||
<div class="relative flex-shrink-0">
|
||||
<img src="{{user.profile_url}}" class="flex-shrink-0 p-[3px] border w-12 h-12 object-cover {{ 'bg-red-800 border-red-900' if v.username == user.username else 'bg-white border-gray-300' }}" alt="{{ user.username }} avatar"/>
|
||||
{% if users3.index(user)+1 == 1 %}
|
||||
<img src="https://i.ibb.co/xFgG6yf/Coinfixed.gif" width="20px" height="12px" class="absolute -top-1 -right-2.5 object-contain"/>
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- User Details -->
|
||||
<div class="ml-3">
|
||||
<a class="block font-heading font-bold text-lg md:text-xl text-black dark:text-gray-200 hover:text-primary" href="/@{{user.username}}">
|
||||
{{user.username}}
|
||||
</a>
|
||||
{% if user.customtitle %}
|
||||
<p class="text-sm" style="#{{user.namecolor}}">
|
||||
{{user.customtitle | safe}}
|
||||
</p>
|
||||
{% 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.post_count}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<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 10 Most Terminally Online (Comments)
|
||||
</h2>
|
||||
</div>
|
||||
<div class="mb-4 flex flex-col bg-gray-100 dark:bg-gray-900 rounded-lg overflow-hidden">
|
||||
{% for user in users4 %}
|
||||
<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 users4.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' }}">
|
||||
{{users4.index(user)+1}}
|
||||
</h2>
|
||||
<div class="relative flex-shrink-0">
|
||||
<img src="{{user.profile_url}}" class="flex-shrink-0 p-[3px] border w-12 h-12 object-cover {{ 'bg-red-800 border-red-900' if v.username == user.username else 'bg-white border-gray-300' }}" alt="{{ user.username }} avatar"/>
|
||||
{% if users4.index(user)+1 == 1 %}
|
||||
<img src="https://i.ibb.co/xFgG6yf/Coinfixed.gif" width="20px" height="12px" class="absolute -top-1 -right-2.5 object-contain"/>
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- User Details -->
|
||||
<div class="ml-3">
|
||||
<a class="block font-heading font-bold text-lg md:text-xl text-black dark:text-gray-200 hover:text-primary" href="/@{{user.username}}">
|
||||
{{user.username}}
|
||||
</a>
|
||||
{% if user.customtitle %}
|
||||
<p class="text-sm" style="#{{user.namecolor}}">
|
||||
{{user.customtitle | safe}}
|
||||
</p>
|
||||
{% 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.comment_count}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<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 10 Biggest Winners
|
||||
</h2>
|
||||
</div>
|
||||
<div class="mb-4 flex flex-col bg-gray-100 dark:bg-gray-900 rounded-lg overflow-hidden">
|
||||
{% for user in users5 %}
|
||||
<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 users5.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' }}">
|
||||
{{users5.index(user)+1}}
|
||||
</h2>
|
||||
<div class="relative flex-shrink-0">
|
||||
<img src="{{user.profile_url}}" class="flex-shrink-0 p-[3px] border w-12 h-12 object-cover {{ 'bg-red-800 border-red-900' if v.username == user.username else 'bg-white border-gray-300' }}" alt="{{ user.username }} avatar"/>
|
||||
{% if users5.index(user)+1 == 1 %}
|
||||
<img src="https://i.ibb.co/xFgG6yf/Coinfixed.gif" width="20px" height="12px" class="absolute -top-1 -right-2.5 object-contain"/>
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- User Details -->
|
||||
<div class="ml-3">
|
||||
<a class="block font-heading font-bold text-lg md:text-xl text-black dark:text-gray-200 hover:text-primary" href="/@{{user.username}}">
|
||||
{{user.username}}
|
||||
</a>
|
||||
{% if user.customtitle %}
|
||||
<p class="text-sm" style="#{{user.namecolor}}">
|
||||
{{user.customtitle | safe}}
|
||||
</p>
|
||||
{% 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.received_award_count}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<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 Most Downvoted
|
||||
</h2>
|
||||
</div>
|
||||
<div class="mb-4 flex flex-col bg-gray-100 dark:bg-gray-900 rounded-lg overflow-hidden">
|
||||
{% for user in users9 %}
|
||||
<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 users9.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-12 h-12 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="12px" class="absolute -top-1 -right-2.5 object-contain"/>
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- User Details -->
|
||||
<div class="ml-3">
|
||||
<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 %}
|
||||
</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>
|
||||
<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 Highest Badge Earners
|
||||
</h2>
|
||||
</div>
|
||||
<div class="mb-4 flex flex-col bg-gray-100 dark:bg-gray-900 rounded-lg overflow-hidden">
|
||||
{% for user in users12 %}
|
||||
<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 users12.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-12 h-12 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="12px" class="absolute -top-1 -right-2.5 object-contain"/>
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- User Details -->
|
||||
<div class="ml-3">
|
||||
<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 %}
|
||||
</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>
|
||||
{% 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 %}
|
|
@ -1,154 +0,0 @@
|
|||
{%
|
||||
set colors = {
|
||||
'fa-user-slash': 'text-red-600',
|
||||
'fa-feather-alt': 'text-gray-500',
|
||||
'fa-eye-evil': 'text-red-600'
|
||||
}
|
||||
%}
|
||||
|
||||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block pagetitle %}Moderation Log{% endblock %}
|
||||
|
||||
{% block subHeader %}
|
||||
<div class="relative max-w-screen-2xl mx-auto px-4 py-4 grid grid-cols-12 rounded-t">
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-gradient-to-t from-gray-300 to-gray-200 dark:bg-none dark:bg-gray-800 rounded-t sub-header-shadow dark:border-b dark:border-gray-700 sub-header"></div>
|
||||
<div class="relative col-span-full flex items-center">
|
||||
<div>
|
||||
<h1 class="font-bold text-xl font-heading leading-normal mb-0">
|
||||
Moderation Log
|
||||
</h1>
|
||||
<ul class="flex space-x-2 text-xs text-gray-500 dark:text-gray-400 leading-normal mb-0">
|
||||
{% if v and v.admin_level > 2 %}
|
||||
<li>
|
||||
<a href="/admin" class="text-gray-500 hover:underline">Admin Dashboard</a>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-arrow-alt-right text-shadow fa-fw fa-sm"></i>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a href="#" class="text-gray-700 dark:text-gray-500 hover:underline">Moderation Log</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="ml-auto flex space-x-2">
|
||||
<!-- Filter by mod -->
|
||||
<div class="dropdown">
|
||||
<button class="inline-flex items-center px-4 py-2 bg-gradient-to-t from-gray-200 to-gray-100 focus:from-gray-100 focus:to-gray-200 border border-gray-300 rounded-md text-shadow shadow-inset-t-white-10 text-sm font-bold text-gray-700 focus:text-gray-900 focus:shadow-inner focus:outline-none dropdown-toggle" type="button" id="dropdownLogSortsButton" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
{% if admin %}
|
||||
<img src="/@{{admin}}/pic" alt="{{ admin }}avatar" class="flex-shrink-0 w-4 h-4 object-cover mr-2">{{ admin }}
|
||||
{% else %}
|
||||
<img src="/assets/images/emojis/marseyjanny.webp" alt="default mod avatar" class="flex-shrink-0 w-4 h-4 object-cover mr-4">All
|
||||
{% endif %}
|
||||
</button>
|
||||
<ul class="dropdown-menu w-56 bg-gray-900 rounded-md shadow-lg" aria-labelledby="dropdownLogSortsButton" x-placement="bottom-start">
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/log{% if type %}?kind={{type}}{% endif %}">
|
||||
<img src="/assets/images/emojis/marseyjanny.webp" alt="default mod avatar" class="flex-shrink-0 w-4 h-4 object-cover mr-4">All
|
||||
</a>
|
||||
</li>
|
||||
{% for a in admins %}
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="?admin={{a}}{% if type %}&kind={{type}}{% endif %}">
|
||||
<img src="/@{{a}}/pic" alt="{{ a }} avatar" class="flex-shrink-0 w-4 h-4 object-cover mr-4">{{ a }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
<!-- Filter by action -->
|
||||
<div class="dropdown">
|
||||
<button class="inline-flex items-center px-4 py-2 bg-gradient-to-t from-gray-200 to-gray-100 focus:from-gray-100 focus:to-gray-200 border border-gray-300 rounded-md text-shadow shadow-inset-t-white-10 text-sm font-bold text-gray-700 focus:text-gray-900 focus:shadow-inner focus:outline-none dropdown-toggle" type="button" id="dropdownLogActionSortsButton" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
{% if type %}
|
||||
<i class="fas {{types[type]['icon']}} fa-fw mr-2"></i>{{type}}
|
||||
{% else %}
|
||||
<i class="fas fa-broom fa-fw mr-2"></i>All
|
||||
{% endif %}
|
||||
</button>
|
||||
<ul class="dropdown-menu w-56 bg-gray-900 rounded-md shadow-lg" aria-labelledby="dropdownLogActionSortsButton" x-placement="bottom-start">
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="/log{% if admin %}?admin={{admin}}{% endif %}">
|
||||
<i class="fas fa-broom fa-fw mr-2"></i>All
|
||||
</a>
|
||||
</li>
|
||||
{% for t, v in types.items() %}
|
||||
<li>
|
||||
<a class="dropdown-item dropdown-item-primary" href="?{% if admin %}admin={{admin}}&{% endif %}kind={{t}}">
|
||||
<i class="fas {{v['icon']}} fa-fw mr-2"></i>{{t}}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="col-span-full my-4">
|
||||
|
||||
{% if actions %}
|
||||
<ul class="flex flex-col divide-y divide-gray-300 dark:divide-gray-700 space-y-2.5 mb-0 list-none">
|
||||
{% for ma in actions %}
|
||||
<li id="action-{{ma.id}}" class="relative flex pt-2.5 first:pt-0">
|
||||
<div class="w-6 h-6 flex justify-center items-center flex-shrink-0">
|
||||
<i class="far {{ ma.icon }} {{ colors[ma.icon] }} fa-fw"></i>
|
||||
</div>
|
||||
<div class="pl-2 text-gray-500 dark:text-gray-400 text-sm">
|
||||
<div>
|
||||
<a href="{{ma.user.url}}" class="font-font text-black dark:text-gray-200 hover:text-primary dark:hover:text-primary" target="_self">@{{ma.user.username}}
|
||||
</a>
|
||||
<span>{{ma.string | safe}}</span>
|
||||
</div>
|
||||
<div class="text-gray-400 dark:text-gray-500 text-xs">
|
||||
<span>{{ma.age_string}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% 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">No logs</h2>
|
||||
<p class="text-gray-500 text-sm">
|
||||
When mods perform actions, it will show up here.
|
||||
</p>
|
||||
{% if v and v.admin_level > 2 %}
|
||||
<a href="/admin" class="mt-3 btn btn-gray">
|
||||
Go to admin dashboard
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="/" class="mt-3 btn btn-gray">
|
||||
Go to homepage
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<nav aria-label="Page navigation" class="mb-5">
|
||||
<ul class="pagination pagination-sm mb-0">
|
||||
{% if page>1 %}
|
||||
<li class="page-item">
|
||||
<small><a class="page-link" href="/log?page={{page+1}}{% if admin %}&admin={{admin}}{% endif %}{% if type %}&kind={{type}}{% endif %}" tabindex="-1">Prev</a></small>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item disabled"><span class="page-link">Prev</span></li>
|
||||
{% endif %}
|
||||
{% if next_exists %}
|
||||
<li class="page-item">
|
||||
<small><a class="page-link" href="/log?page={{page+1}}{% if admin %}&admin={{admin}}{% endif %}{% if type %}&kind={{type}}{% endif %}">Next</a></small>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item disabled"><span class="page-link">Next</span></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -1,103 +0,0 @@
|
|||
{% set random = range(1, 13)|random() %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="h-full" lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="Sign in to {{'SITE_NAME' | app_config}}">
|
||||
<meta name="author" content="">
|
||||
|
||||
{% block title %}
|
||||
<title>Login - {{'SITE_NAME' | app_config}}</title>
|
||||
{% endblock %}
|
||||
|
||||
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?a=2">
|
||||
|
||||
<link rel="stylesheet" href="/static/dist/main.css?a=5">
|
||||
|
||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||
|
||||
<link rel="preload" href="/assets/CHRISTMAS/css/fa.css?a=1" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<noscript><link rel="stylesheet" href="/assets/CHRISTMAS/css/fa.css?a=1"></noscript>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="theme-iron dark relative h-full bg-gradient-to-t from-gray-500 to-gray-400">
|
||||
|
||||
<div class="relative min-h-full flex flex-col items-center justify-center pt-28 pb-12 px-4 sm:px-6 lg:px-8">
|
||||
|
||||
<div class="max-w-md w-full">
|
||||
|
||||
<div class="max-w-3xl mx-8 p-3 flex justify-center items-center rounded-t-lg bg-gray-700 border border-gray-800 shadow-inset-t-white-10">
|
||||
<a href="/">
|
||||
<img class="-ml-4 block w-32 object-contain" src="/assets/CHRISTMAS/images/logos/winter/logo-{{ random }}.png" alt="logo"/>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="max-w-2xl w-full space-y-6 px-6 py-5 bg-gray-200 rounded shadow">
|
||||
|
||||
<form action="/login" method="post" class="mt-md-3" id="login">
|
||||
|
||||
<input type="hidden" name="redirect" value="{{redirect}}">
|
||||
|
||||
<div class="space-y-4">
|
||||
|
||||
<h2 class="text-base label text-black">
|
||||
Login to rDrama
|
||||
<span class="text-gray-500">or</span>
|
||||
<a href="/signup{{'?redirect='+redirect if redirect else ''}}" class="text-green-600 hover:text-green-700">
|
||||
Create an Account
|
||||
</a>
|
||||
</h2>
|
||||
|
||||
<div>
|
||||
<label for="username" class="hidden">Username or Email Address</label>
|
||||
<input class="form-input" id="username" aria-describedby="usernameHelp" type="text" name="username" required placeholder="Username or Email Address">
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label for="password" class="hidden">Password</label>
|
||||
<input class="form-input" id="password" aria-describedby="passwordHelp" type="password" name="password" required placeholder="Password">
|
||||
<small class="block mt-1">
|
||||
<a href="/forgot" class="text-gray-400 hover:text-gray-500">Forgot password?</a>
|
||||
</small>
|
||||
</div>
|
||||
|
||||
<button class="btn btn-green w-full" id="login_button">Log in</button>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
<ul class="pt-4 mx-auto w-full flex flex-col md:flex-row md:items-center md:justify-center md:space-x-3 md:divide-x md:divide-gray-300 text-xs leading-none border-t border-gray-300">
|
||||
<li>
|
||||
<a href="#" class="text-gray-400 hover:text-gray-500">
|
||||
About
|
||||
</a>
|
||||
</li>
|
||||
<li class="mt-2 md:mt-0 md:pl-3">
|
||||
<a href="/rules" class="text-gray-400 hover:text-gray-500">
|
||||
Community Etiquette
|
||||
</a>
|
||||
</li>
|
||||
<li class="mt-2 md:mt-0 md:pl-3">
|
||||
<span class="text-gray-400">
|
||||
©2021 Copyright rdrama.net
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{% include 'CHRISTMAS//awards/Christmas/Snow.html' %}
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -1,106 +0,0 @@
|
|||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; connect-src 'self'; object-src 'none';">
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="Sign in to {{'SITE_NAME' | app_config}}">
|
||||
<meta name="author" content="">
|
||||
|
||||
<title>2-Step Login - {{'SITE_NAME' | app_config}}</title>
|
||||
|
||||
<style>:root{--primary:#{{'DEFAULT_COLOR' | app_config}}</style>
|
||||
<link rel="stylesheet" href="/assets/CHRISTMAS/css/main.css?a=2"><link rel="stylesheet" href="/assets/CHRISTMAS/css/{{'DEFAULT_THEME' | app_config}}.css?a=1">
|
||||
|
||||
</head>
|
||||
|
||||
<body id="login">
|
||||
|
||||
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-transparent fixed-top border-0">
|
||||
<div class="container-fluid">
|
||||
<button class="navbar-toggler d-none" type="button" data-bs-toggle="collapse" data-bs-target="#navbarResponsive"
|
||||
aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="container-fluid position-absolute h-100 p-0 overflow-auto">
|
||||
<div class="row no-gutters h-100">
|
||||
|
||||
<div class="col-12 col-md-6 my-auto p-3">
|
||||
|
||||
<div class="row justify-content-center">
|
||||
|
||||
<div class="col-10 col-md-7">
|
||||
|
||||
<div class="mb-5">
|
||||
<a href="/" class="text-decoration-none"><span class="h3 text-primary">{{'SITE_NAME' | app_config}}</span></a>
|
||||
</div>
|
||||
|
||||
<div id="login-form" class="">
|
||||
|
||||
<h1 class="h2">Two-step login</h1>
|
||||
|
||||
<p class="text-muted mb-md-5">To login, please enter the 6-digit verification code generated in your authenticator app.</p>
|
||||
|
||||
{% if failed %}
|
||||
<div class="alert alert-danger alert-dismissible fade show d-flex my-3" role="alert">
|
||||
<i class="fas fa-exclamation-circle my-auto"></i>
|
||||
<div>
|
||||
Invalid verification code. Please try again.
|
||||
</div>
|
||||
<button type="button" class="close" data-bs-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<form action="/login" method="post" class="mt-md-3" id="login">
|
||||
|
||||
<input type="hidden" name="username" value="{{v.username}}">
|
||||
<input type="hidden" name="redirect" value="{{redirect}}">
|
||||
|
||||
<input type="hidden" name="time" value="{{time}}">
|
||||
<input type="hidden" name="hash" value="{{hash}}">
|
||||
|
||||
<label for="2fa_token" class="mt-3">Your verification code</label>
|
||||
|
||||
<input class="form-control" id="2fa_token" name="2fa_token" type="text" placeholder="6-digit code">
|
||||
<small><a href="/lost_2fa">Lost your 2FA device?</a></small>
|
||||
|
||||
<button class="btn btn-primary login w-100 mt-3" id="login_button">Sign in</button>
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-md-6 d-none d-md-block">
|
||||
|
||||
<div class="splash-wrapper">
|
||||
|
||||
<div class="splash-overlay"></div>
|
||||
|
||||
<img loading="lazy" class="splash-img" src="/assets/CHRISTMAS/images/{{'SITE_NAME' | app_config}}/cover.webp?a=1"></img>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -1,36 +0,0 @@
|
|||
{% extends "CHRISTMAS/authforms.html" %}
|
||||
|
||||
{% block pagetitle %}{{'SITE_NAME' | app_config}} Two-Factor Removal{% endblock %}
|
||||
|
||||
{% block authtitle %}Remove the two-factor authentication from your account.{% endblock %}
|
||||
|
||||
{% block authtext %}If all information is correct, you will be able to remove 2-factor authentication from your account in 24 hours.{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div id="login-form" class="">
|
||||
|
||||
<form action="/request_2fa_disable" method="post" class="mt-3" autocomplete="off">
|
||||
|
||||
<label for="username" class="mt-3">Username</label>
|
||||
|
||||
<input class="form-control" id="username" aria-describedby="usernameHelp"
|
||||
type="text" name="username" required=""{% if v %} value="{{v.username}}" disabled{% endif %}>
|
||||
|
||||
<label for="email" class="mt-3">Password</label>
|
||||
|
||||
<input class="form-control" id="password" aria-describedby="passwordHelp" autocomplete="off"
|
||||
type="password" name="password" required="">
|
||||
|
||||
<label for="email" class="mt-3">Email</label>
|
||||
|
||||
<input class="form-control" id="password"
|
||||
type="text" name="email" required=""{% if v %} value="{{v.email}}" disabled{% endif %}>
|
||||
|
||||
<input class="btn btn-primary login w-100 mt-3" type="submit" value="Send recovery link">
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -1,28 +0,0 @@
|
|||
{% 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 %}
|
|
@ -1,27 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>{{title}}</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagetype %}message{% endblock %}
|
||||
|
||||
{% block customPadding %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-10 col-md-5">
|
||||
<div class="text-center py-7 py-md-8">
|
||||
|
||||
<span class="fa-stack fa-2x text-muted mb-4">
|
||||
<i class="fas fa-square text-gray-400 fa-stack-2x"></i>
|
||||
<i class="fas text-gray-600 {% if message %}fa-envelope-open-text{% elif error %}fa-exclamation-triangle{% endif %} fa-stack-1x text-lg"></i>
|
||||
</span>
|
||||
|
||||
<h1 class="h5">{{title}}</h1>
|
||||
<div class="text-small text-muted mb-3">{{message if message else error}}</div>
|
||||
<a href="/" class="btn btn-primary ">Go to homepage</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,17 +0,0 @@
|
|||
{% extends "CHRISTMAS/default.html" %}
|
||||
|
||||
{% block title %}
|
||||
<title>{{title}}</title>
|
||||
{% endblock %}
|
||||
|
||||
{% block pagetype %}message-success{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="text-center py-7 py-md-8">
|
||||
|
||||
<img loading="lazy" src="/assets/CHRISTMAS/images/ruckus.webp" class="empty-state-img mb-3" alt="success state">
|
||||
<div class="font-weight-bold text-muted mb-4">{{title}}</div>
|
||||
<p class="text-muted">{{text}}</p>
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,39 +0,0 @@
|
|||
{% extends "CHRISTMAS/home.html" %}
|
||||
|
||||
{% block PseudoSubmitForm %}{% endblock %}
|
||||
|
||||
|
||||
{% block customPadding %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
|
||||
<div class="col-span-full">
|
||||
|
||||
{% block maincontent %}
|
||||
{% endblock %}
|
||||
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block pagenav %}
|
||||
<nav class="col-span-full" aria-label="Page navigation">
|
||||
<ul class="pagination pagination-sm mb-0">
|
||||
{% if page>1 %}
|
||||
<li class="page-item">
|
||||
<small><a class="page-link" href="?kind={{kind}}&page={{page-1}}" tabindex="-1">Prev</a></small>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item disabled"><span class="page-link">Prev</span></li>
|
||||
{% endif %}
|
||||
{% if next_exists %}
|
||||
<li class="page-item">
|
||||
<small><a class="page-link" href="?kind={{kind}}&page={{page+1}}">Next</a></small>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item disabled"><span class="page-link">Next</span></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</nav>
|
||||
{% endblock %}
|
|
@ -1,84 +0,0 @@
|
|||
<div class="container inline-flex sm:hidden">
|
||||
|
||||
<div class="z-100 fixed shadow-sm bottom-0 w-full dark:bg-none bg-gradient-to-t from-gray-200 to-gray-100 dark:bg-gray-700 border-t border-gray-300 dark:border-transparent px-4 py-3" id="mobile-bottom-navigation-bar" style="transition: transform cubic-bezier(0, 0, 0.2, 1) 220ms;">
|
||||
|
||||
<ul class="flex flex-nowrap justify-around text-shadow mb-0">
|
||||
<li>
|
||||
<button type="button" class="px-2">
|
||||
<a href="/" class="text-decoration-none" role="button">
|
||||
<div class="text-center {% if request.path=='/' and request.full_path!='/?sort=hot&t=all' and request.full_path!='/?sort=new&t=all' %}text-gray-700 dark:text-gray-200{% else %}text-gray-400 dark:text-gray-500{% endif %}">
|
||||
<i class="fas fa-home-alt fa-fw text-lg"></i>
|
||||
<div class="text-sm font-bold">Home</div>
|
||||
</div>
|
||||
</a>
|
||||
</button>
|
||||
</li>
|
||||
{% if v and v.defaultsorting == 'new' %}
|
||||
<li>
|
||||
<button type="button" class="px-2">
|
||||
<a href="/?sort=hot&t=all" class="text-decoration-none" role="button">
|
||||
<div class="text-center {% if request.full_path=='/?sort=hot&t=all' %}text-gray-700 dark:text-gray-200{% else %}text-gray-400 dark:text-gray-500{% endif %}">
|
||||
<i class="fas fa-fire fa-fw text-lg"></i>
|
||||
<div class="text-sm font-bold">Hot</div>
|
||||
</div>
|
||||
</a>
|
||||
</button>
|
||||
</li>
|
||||
{% else %}
|
||||
<li>
|
||||
<button type="button" class="px-2">
|
||||
<a href="/?sort=new&t=all" class="text-decoration-none" role="button">
|
||||
<div class="text-center {% if request.full_path=='/?sort=new&t=all' %}text-gray-700 dark:text-gray-200{% else %}text-gray-400 dark:text-gray-500{% endif %}">
|
||||
<i class="fas fa-sparkles fa-fw text-lg"></i>
|
||||
<div class="text-sm font-bold">New</div>
|
||||
</div>
|
||||
</a>
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<button type="button" class="px-2">
|
||||
<a href="/comments" class="text-decoration-none" role="button">
|
||||
<div class="text-center {% if request.path=='/comments' %}text-gray-700 dark:text-gray-200{% else %}text-gray-400 dark:text-gray-500{% endif %}">
|
||||
<i class="fas fa-comment-dots fa-fw text-lg"></i>
|
||||
<div class="text-sm font-bold">Comments</div>
|
||||
</div>
|
||||
</a>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="px-2">
|
||||
<a href="/leaderboard" class="text-decoration-none" role="button">
|
||||
<div class="text-center {% if request.path=='/leaderboard' %}text-gray-700 dark:text-gray-200{% else %}text-gray-400 dark:text-gray-500{% endif %}">
|
||||
<i class="fas fa-trophy fa-fw text-lg"></i>
|
||||
<div class="text-sm font-bold">Members</div>
|
||||
</div>
|
||||
</a>
|
||||
</button>
|
||||
</li>
|
||||
{% if v %}
|
||||
<li>
|
||||
<button type="button" class="px-2">
|
||||
<a href="/shop" class="text-decoration-none" role="button">
|
||||
<div class="text-center {% if request.path=='/shop' %}text-gray-700 dark:text-gray-200{% else %}text-gray-400 dark:text-gray-500{% endif %}">
|
||||
<i class="fas fa-store fa-fw text-lg"></i>
|
||||
<div class="text-sm font-bold">Shop</div>
|
||||
</div>
|
||||
</a>
|
||||
</button>
|
||||
</li>
|
||||
{% else %}
|
||||
<li>
|
||||
<button type="button" class="px-2">
|
||||
<a href="/signup" class="text-decoration-none" role="button">
|
||||
<div class="text-center text-gray-400">
|
||||
<i class="fas fa-user-plus fa-fw text-lg"></i>
|
||||
<div class="text-sm font-bold">Join</div>
|
||||
</div>
|
||||
</a>
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
|
@ -1,65 +0,0 @@
|
|||
<div class="modal fade" id="2faModal" tabindex="-1" role="dialog" aria-labelledby="2faModalTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered mx-auto max-w-xl" role="document">
|
||||
<div class="modal-content mx-auto max-w-2xl bg-gray-100 rounded-md shadow-lg">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">{% if mfa_secret %}Setup two-step login{% elif mfa_secret and not v.email %}Email required for two-step login{% else %}Disable two-step login{% endif %}</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>
|
||||
{% if mfa_secret %}
|
||||
<div>
|
||||
<form action="/settings/security" method="post">
|
||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||
<input type="hidden" name="2fa_secret" value="{{mfa_secret}}">
|
||||
<div class="modal-body">
|
||||
<p>
|
||||
<span class="font-bold">Step 1:</span> Scan this barcode (or enter the code) using a two-factor authentication app such as Google Authenticator or Authy.
|
||||
</p>
|
||||
<div class="text-center mb-3">
|
||||
<img loading="lazy" class="w-48 h-48 object-contain" src="/2faqr/{{mfa_secret}}">
|
||||
<div class="mt-2 text-small text-muted">Or enter this code: {{mfa_secret}}</div>
|
||||
</div>
|
||||
<p>
|
||||
<span class="font-bold">Step 2:</span> Enter the six-digit code generated in the authenticator app and your {{'SITE_NAME' | app_config}} account password.
|
||||
</p>
|
||||
<label for="2fa_input">6-digit code</label>
|
||||
<input type="text" class="form-input mb-2" id="2fa_input" name="2fa_token" placeholder="# # # # # #" required>
|
||||
|
||||
<label for="2fa_input_password">Password</label>
|
||||
<input type="password" autocomplete="new-password" class="form-input mb-2" id="2fa_input_password" name="password" oninput="document.getElementById('enable2faButton').disabled=false" autocomplete="off" required>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-gray" data-bs-dismiss="modal">Cancel</button>
|
||||
<input id="enable2faButton" class="btn btn-green" type="submit" value="Enable 2-step login" disabled>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% else %}
|
||||
<div>
|
||||
<form action="/settings/security" method="post">
|
||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||
<input type="hidden" name="2fa_secret" value="{{mfa_secret}}">
|
||||
<div class="modal-body">
|
||||
|
||||
<div class="alert alert-warning" role="alert">
|
||||
<i class="fas fa-info-circle"></i>
|
||||
To disable two-step login, please enter your {{'SITE_NAME' | app_config}} account password and the 6-digit code generated in your authentication app. If you no longer have your two-step device, <a href="/lost_2fa">click here</a>.
|
||||
</div>
|
||||
|
||||
<label for="2fa_input_password">Password</label>
|
||||
<input type="password" autocomplete="new-password" class="form-input mb-2" id="2fa_input_password" name="password" autocomplete="off" required>
|
||||
|
||||
<label for="2fa_input">6-digit code</label>
|
||||
<input type="text" class="form-input mb-2" id="2fa_input" name="2fa_remove" placeholder="# # # # # #" oninput="document.getElementById('disable2faButton').disabled=false" required>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-link text-muted" data-bs-dismiss="modal">Cancel</button>
|
||||
<input id="disable2faButton" class="btn btn-primary" type="submit" value="Disable 2-step login" disabled>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,102 +0,0 @@
|
|||
<div class="modal fade" id="adminManageUserModal" tabindex="-1" role="dialog" aria-labelledby="adminManageUserModalTitle" aria-hidden="true">
|
||||
<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 rounded-md shadow-lg">
|
||||
<div class="modal-header">
|
||||
<h5 class="font-bold text-xl text-black font-heading leading-normal">Manage @{{u.username}}</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 flex flex-col space-y-4">
|
||||
<div class="p-4 rounded bg-gray-300 border border-gray-400 shadow-inset-t-white-10">
|
||||
{% if v and v.admin_level > 1 %}
|
||||
<div>
|
||||
<strong>True score:</strong> {{u.truecoins}}
|
||||
</div>
|
||||
{% if u.is_private %}
|
||||
<p>User has private mode enabled.</p>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if v and (v.admin_level > 1 or v.alt) %}
|
||||
<storng>Alts:</span>
|
||||
<ul>
|
||||
{% for account in u.alts_unique %}
|
||||
<li>
|
||||
<a href="{{account.url}}">@{{account.username}}</a>{% if account._is_manual %} [m]{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="w-full">
|
||||
<form action="/admin/title_change/{{u.id}}" method="post">
|
||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||
<input id="customtitlebody-mobile" type="text" name="title" class="form-input" placeholder='Enter a flair here' value="{% if u.customtitle %}{{u.customtitle}}{% endif %}">
|
||||
<div class="flex mt-2">
|
||||
<a class="format" href="javascript:void(0)"><i class="btn btn-secondary format inline-block m-0 fas fa-smile-beam" onclick="loadEmojis('customtitlebody-mobile')" aria-hidden="true" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-original-title="Add Emoji"></i></a>
|
||||
|
||||
<div class="custom-control custom-checkbox">
|
||||
<input type="checkbox" class="custom-control-input" id="locked-mobile" name="locked" {% if u.flairchanged %}checked{% endif %}>
|
||||
<label class="custom-control-label" for="locked-mobile">locked</label>
|
||||
</div>
|
||||
|
||||
<input class="btn btn-primary ml-auto" type="submit" value="Change Flair">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% if u.is_suspended %}
|
||||
<form action="/unban_user/{{u.id}}" method="post">
|
||||
<input type="hidden" name="formkey", value="{{v.formkey}}">
|
||||
<input type="hidden" name="redir" value="true">
|
||||
<br>
|
||||
<div class="custom-control custom-checkbox">
|
||||
<input type="checkbox" id="alts-1-mobile" class="custom-control-input" name="alts" value="1">
|
||||
<label class="custom-control-label" for="alts-1-mobile">Include alts</label>
|
||||
</div>
|
||||
<br >
|
||||
<input type="submit" class="btn btn-gray" value="Unban user">
|
||||
</form>
|
||||
{% else %}
|
||||
<form action="/ban_user/{{u.id}}/" method="post">
|
||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||
<input type="hidden" name="redir" value="true">
|
||||
<input style="font-size:11px;" type="text" class="form-input" name="reason" placeholder="Ban Reason" onchange="document.getElementById('user-ban-submit2').disabled=false">
|
||||
<input style="font-size:11px;" type="number" step="any" class="form-input" name="days" placeholder="Days (blank = permanent)">
|
||||
<br >
|
||||
<div class="custom-control custom-checkbox">
|
||||
<input type="checkbox" id="alts-2-mobile" class="custom-control-input" name="alts" value="1">
|
||||
<label class="custom-control-label" for="alts-2-mobile">Include alts</label>
|
||||
</div>
|
||||
<br >
|
||||
<input id="user-ban-submit2" type="submit" class="btn btn-red" value="Ban user" disabled>
|
||||
</form>
|
||||
{% endif %}
|
||||
<form id="agendaposter2" class="{% if u.agendaposter %}hidden{% endif %}" action="/agendaposter/{{u.id}}" method="post">
|
||||
<input type="hidden" name="formkey", value="{{v.formkey}}">
|
||||
<input type="number" step="any" name="days" class="form-input" placeholder="Days (0 or blank = permanent)" >
|
||||
<input type="submit" class="btn btn-red" value="Lock Agendaposter Theme" >
|
||||
</form>
|
||||
<a id="unagendaposter2" class="{% if not u.agendaposter %}hidden{% endif %} btn btn-gray" href="javascript:void(0)" onclick="post_toast2('/agendaposter/{{u.id}}','agendaposter2','unagendaposter2')">Disable Agendaposter Theme</a>
|
||||
<form action="/admin/unnuke_user" method="post">
|
||||
<input type="hidden" name="formkey", value="{{v.formkey}}">
|
||||
<input type="hidden" name="user" value="{{u.username}}">
|
||||
<input type="submit" class="btn btn-gray" value="Approve User's Content">
|
||||
</form>
|
||||
<pre></pre>
|
||||
<form action="/admin/nuke_user" method="post">
|
||||
<input type="hidden" name="formkey", value="{{v.formkey}}">
|
||||
<input type="hidden" name="user" value="{{u.username}}">
|
||||
<input type="submit" class="btn btn-red" value="Remove User's Content">
|
||||
</form>
|
||||
</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">
|
||||
Cancel
|
||||
</button>
|
||||
<button type="submit" form="message" class="btn btn-green">
|
||||
Done
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,177 +0,0 @@
|
|||
<div class="modal fade modal-sm-bottom md:hidden" id="actionsModal-{{c.id}}" tabindex="-1" role="dialog" aria-labelledby="actionsModalTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content rounded-t-md w-full bg-gray-200">
|
||||
<div class="relative rounded-t-md border-b border-gray-300 p-3">
|
||||
<h5 class="font-bold text-black text-lg mb-0">More options</h5>
|
||||
<button type="button" class="close absolute right-3.5 top-3.5" data-bs-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">
|
||||
<i class="fas fa-times-circle text-gray-500"></i>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="relative p-3">
|
||||
<ul class="flex flex-col space-y-1">
|
||||
<li>
|
||||
<a class="btn btn-gray w-full text-left" href="/votes?link={{c.fullname}}">
|
||||
<i class="fas fa-poll fa-fw mr-4"></i>Votes
|
||||
</a>
|
||||
</li>
|
||||
{% if v %}
|
||||
<li>
|
||||
<button class="btn btn-gray w-full text-left" data-bs-toggle="modal" data-bs-dismiss="modal" data-bs-target="#awardModal" onclick="awardModal('/comment/{{c.id}}/awards')">
|
||||
<i class="fas fa-gift fa-fw mr-4"></i>Award
|
||||
</button>
|
||||
</li>
|
||||
<li id="save2-{{c.id}}" class="{% if c.id in v.saved_comment_idlist() %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/save_comment/{{c.id}}','save2-{{c.id}}','unsave2-{{c.id}}')">
|
||||
<i class="far fa-bookmark fa-fw mr-4"></i>Save
|
||||
</button>
|
||||
</li>
|
||||
<li id="unsave2-{{c.id}}" class="{% if c.id not in v.saved_comment_idlist() %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/unsave_comment/{{c.id}}','save2-{{c.id}}','unsave2-{{c.id}}')">
|
||||
<i class="fas fa-bookmark fa-fw mr-4"></i>Unsave
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<button class="btn btn-gray w-full text-left copy-link" data-bs-dismiss="modal" data-clipboard-text="{% if request.host == 'rdrama.net' %}https://rdrama.com{{c.permalink}}{% else %}{{c.permalink | full_link}}{% endif %}">
|
||||
<i class="fas fa-copy fa-fw mr-4"></i>Copy link
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<a class="btn btn-gray w-full text-left" href="{{c.permalink}}">
|
||||
<i class="fas fa-dna fa-fw mr-4"></i>Context
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<button class="btn btn-gray w-full text-left" data-bs-toggle="modal" data-bs-dismiss="modal" data-bs-target="#reportCommentModal" onclick="report_commentModal('{{c.id}}','{{c.author.username}}')">
|
||||
<i class="fas fa-flag fa-fw mr-4"></i>Report
|
||||
</button>
|
||||
</li>
|
||||
{% if v and c.parent_submission and c.author_id==v.id %}
|
||||
<li>
|
||||
<button class="btn btn-gray w-full text-left" data-bs-dismiss="modal" onclick="toggleEdit('{{c.id}}')">
|
||||
<i class="fas fa-pencil fa-fw mr-4"></i>Edit
|
||||
</button>
|
||||
</li>
|
||||
{% if c.deleted_utc > 0 %}
|
||||
<li>
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast('/undelete/comment/{{c.id}}')" data-bs-dismiss="modal">
|
||||
<i class="fas fa-trash-alt fa-fw mr-4"></i>Undelete
|
||||
</button>
|
||||
</li>
|
||||
{% else %}
|
||||
<li>
|
||||
<button class="btn btn-gray w-full text-left" data-bs-toggle="modal" data-bs-target="#deleteCommentModal" onclick="delete_commentModal('{{c.id}}')">
|
||||
<i class="fas fa-trash-alt fa-fw mr-4"></i>Delete
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if v and c.post %}
|
||||
{% if v.admin_level > 1 %}
|
||||
<li id="pin2-{{c.id}}" class="{% if c.is_pinned %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/sticky_comment/{{c.id}}','pin2-{{c.id}}','unpin2-{{c.id}}')">
|
||||
<i class="fas fa-thumbtack fa-rotate--45 fa-fw mr-4"></i>Pin
|
||||
</button>
|
||||
</li>
|
||||
<li id="unpin2-{{c.id}}" class="{% if not c.is_pinned %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/unsticky_comment/{{c.id}}','pin2-{{c.id}}','unpin2-{{c.id}}')">
|
||||
<i class="fas fa-thumbtack fa-rotate--45 fa-fw mr-4"></i>Unpin
|
||||
</button>
|
||||
</li>
|
||||
{% elif v.id == c.post.author_id %}
|
||||
<li id="pin2-{{c.id}}" class="{% if c.is_pinned %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/pin_comment/{{c.id}}','pin2-{{c.id}}','unpin2-{{c.id}}')">
|
||||
<i class="fas fa-thumbtack fa-rotate--45 fa-fw mr-4"></i>Pin
|
||||
</button>
|
||||
</li>
|
||||
<li id="unpin2-{{c.id}}" class="{% if not c.is_pinned %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/unpin_comment/{{c.id}}','pin2-{{c.id}}','unpin2-{{c.id}}')">
|
||||
<i class="fas fa-thumbtack fa-rotate--45 fa-fw mr-4"></i>Unpin
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if v %}
|
||||
{% if v.admin_level > 0 and v.id==c.author_id %}
|
||||
<li id="distinguish2-{{c.id}}" class="{% if c.distinguish_level %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/distinguish_comment/{{c.id}}','distinguish2-{{c.id}}','undistinguish2-{{c.id}}')">
|
||||
<i class="fas fa-id-badge fa-fw mr-4"></i>Distinguish
|
||||
</button>
|
||||
</li>
|
||||
<li id="undistinguish2-{{c.id}}" class="{% if not c.distinguish_level %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/distinguish_comment/{{c.id}}','distinguish2-{{c.id}}','undistinguish2-{{c.id}}')">
|
||||
<i class="fas fa-id-badge fa-fw mr-4"></i>Undistinguish
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if v.admin_level>=3 %}
|
||||
<li id="remove2-{{c.id}}" class="{% if c.is_banned %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="removeComment2('{{c.id}}','approve2-{{c.id}}','remove2-{{c.id}}')">
|
||||
<i class="fas fa-ban fa-fw mr-4"></i>Remove
|
||||
</button>
|
||||
</li>
|
||||
<li id="approve2-{{c.id}}" class="{% if not c.is_banned %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="approveComment2('{{c.id}}','approve2-{{c.id}}','remove2-{{c.id}}')">
|
||||
<i class="fas fa-check fa-fw mr-4"></i>Approve
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if v.admin_level >=4 and c.oauth_app %}
|
||||
<li>
|
||||
<a href="{{c.oauth_app.permalink}}/comments" class="btn btn-gray w-full text-left">
|
||||
<i class="fas fa-code fa-fw mr-4"></i>API App
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if not v.id==c.author_id and not (c.post and c.post.award_count("ghosts")) %}
|
||||
<li id="unblock2-{{c.id}}" class="{% if not c.is_blocking %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/settings/unblock?username={{c.author.username}}','block2-{{c.id}}','unblock2-{{c.id}}')">
|
||||
<i class="fas fa-user-check fa-fw mr-4"></i>Unblock user
|
||||
</button>
|
||||
</li>
|
||||
<li id="prompt2-{{c.id}}" class="blockuser hidden">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/settings/block?username={{c.author.username}}','prompt2-{{c.id}}','unblock2-{{c.id}}')">
|
||||
<i class="fas fa-question-circle fa-fw mr-4"></i>Are you sure?
|
||||
</button>
|
||||
</li>
|
||||
<li id="block2-{{c.id}}" class="{% if c.is_blocking %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="document.getElementById('block2-{{c.id}}').classList.toggle('hidden');document.getElementById('prompt2-{{c.id}}').classList.toggle('hidden');">
|
||||
<i class="fas fa-user-slash fa-fw mr-4"></i>Block user
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if v and c.parent_submission and (c.author_id==v.id or v.admin_level > 0) %}
|
||||
<li id="mark2-{{c.id}}" class="{% if c.over_18 %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/toggle_comment_nsfw/{{c.id}}','mark2-{{c.id}}','unmark2-{{c.id}}')">
|
||||
<i class="fas fa-eye-evil fa-fw mr-4"></i>Mark +18
|
||||
</button>
|
||||
</li>
|
||||
<li id="unmark2-{{c.id}}" class="{% if not c.over_18 %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/toggle_comment_nsfw/{{c.id}}','mark2-{{c.id}}','unmark2-{{c.id}}')">
|
||||
<i class="fas fa-eye-evil fa-fw mr-4"></i>Unmark +18
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if v and (c.post and v.admin_level == 6) %}
|
||||
{% if c.author_id != v.id %}
|
||||
<li id="ban2-{{c.id}}" class="{% if c.author.is_suspended %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#banModal" onclick="banModal('/comment/{{c.id}}', '{{ c.author.id }}', '{{c.author.username}}')">
|
||||
<i class="fas fa-user-minus fa-fw mr-4"></i>Ban user
|
||||
</button>
|
||||
</li>
|
||||
|
||||
<li id="unban2-{{c.id}}" class="{% if not c.author.is_suspended %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/unban_user/{{c.author_id}}','ban2-{{c.id}}','unban2-{{c.id}}')">
|
||||
<i class="fas fa-user-minus fa-fw mr-4"></i>Unban user
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,47 +0,0 @@
|
|||
<div class="modal fade" id="deleteAccountModal" tabindex="-1" role="dialog" aria-labelledby="deleteAccountModal" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Delete your {{'SITE_NAME' | app_config}} account</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="" id="deleteFormContainer">
|
||||
<form id="deleteAccountForm" method="post" action="/settings/delete_account">
|
||||
<input type="hidden" name="formkey" value="{{v.formkey}}">
|
||||
<div class="modal-body body">
|
||||
|
||||
<div class="d-lg-flex">
|
||||
|
||||
<label for="delete-password" class="w-lg-25" id="email-password-label">Password</label>
|
||||
|
||||
<div class="w-lg-100">
|
||||
|
||||
<input autocomplete="new-password" type="password" class="form-control mb-2" id="delete-password" name="password" required>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{% if v.mfa_secret %}
|
||||
<div class="d-lg-flex mt-3">
|
||||
|
||||
<label for="delete-mfa" class="w-lg-25" id="email-password-label">Two-Factor Code</label>
|
||||
|
||||
<div class="w-lg-100">
|
||||
|
||||
<input autocomplete="new-password" type="text" class="form-control mb-2" id="delete-mfa" name="twofactor" required>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
|
@ -1,46 +0,0 @@
|
|||
<div class="modal fade" id="directMessageModal" tabindex="-1" role="dialog" aria-labelledby="directMessageModalTitle" aria-hidden="true">
|
||||
<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="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 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="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('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('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('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>
|
||||
</ul>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<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 type="submit" form="message" class="btn btn-primary">
|
||||
Send message
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,62 +0,0 @@
|
|||
<div class="modal fade" id="giftCoinsModal" tabindex="-1" role="dialog" aria-labelledby="giftCoinsTitle" aria-hidden="true">
|
||||
<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 leading-normal">Gift Dramacoin to @{{u.username}}</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="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-gray-700/90 z-10">
|
||||
<p class="text-lg font-bold mb-0">
|
||||
You need at least 100 dramacoin to send coins.
|
||||
</p>
|
||||
<small class="mt-1 block text-gray-500">
|
||||
Earn dramacoin by creating content and receiving votes.
|
||||
</small>
|
||||
</div>
|
||||
{% endif %}
|
||||
<!-- Form -->
|
||||
<div class="profile-toggleable" id="giftCoins">
|
||||
<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" 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">
|
||||
<li>
|
||||
<button type="button" class="text-gray-400 hover:text-gray-500" onclick="makeBold('gift-message')">
|
||||
<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('gift-message')">
|
||||
<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('gift-message')">
|
||||
<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>
|
||||
</ul>
|
||||
</div>
|
||||
</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">
|
||||
Recipient will receive <strong id="coins-transfer-taxed">0</strong> coins
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<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-yellow {{ 'cursor-not-allowed' if v.coins < 100 }}" {% if v.coins < 100 %}disabled{% endif %}>
|
||||
Gift coins
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,38 +0,0 @@
|
|||
<div class="modal fade" id="reportCommentModal" tabindex="-1" role="dialog" aria-labelledby="reportCommentModalTitle" aria-hidden="true">
|
||||
<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">Report <span id="comment-author"></span>'s comment</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 id="reportCommentFormBefore">
|
||||
<div class="modal-body">
|
||||
<div class="font-bold text-lg leading-normal">We're sorry something here is wrong.</div>
|
||||
<small class="text-gray-500">Please enter a reason for reporting below.</small>
|
||||
<input maxlength="100" id="reason-comment" class="mt-3 form-input" placeholder="e.g. this comment violates community standards">
|
||||
</div>
|
||||
<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-700" data-bs-dismiss="modal">
|
||||
Cancel
|
||||
</button>
|
||||
<button type="button" id="reportCommentButton" class="btn btn-red">
|
||||
Report comment
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hidden" id="reportCommentFormAfter">
|
||||
<div class="modal-body">
|
||||
<div class="font-bold text-lg leading-normal">Thank you for reporting this comment!</div>
|
||||
<small class="text-gray-500">By the power of the mop, our internet janitors will take it from here.</small>
|
||||
</div>
|
||||
<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">
|
||||
Close
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,200 +0,0 @@
|
|||
<div class="modal fade modal-sm-bottom md:hidden" id="actionsModal-{{p.id}}" tabindex="-1" role="dialog" aria-labelledby="actionsModalTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content rounded-t-md w-full bg-gray-200">
|
||||
<div class="relative rounded-t-md border-b border-gray-300 p-3">
|
||||
<h5 class="font-bold text-black text-lg mb-0">More options</h5>
|
||||
<button type="button" class="close absolute right-3.5 top-3.5" data-bs-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">
|
||||
<i class="fas fa-times-circle text-gray-500"></i>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="relative p-3">
|
||||
<ul class="flex flex-col space-y-1">
|
||||
<li>
|
||||
<button class="btn btn-gray w-full text-left" data-bs-toggle="modal" data-bs-dismiss="modal" data-bs-target="#reportPostModal" onclick="report_postModal('{{p.id}}')">
|
||||
<i class="fas fa-flag text-center text-muted mr-3"></i>Report
|
||||
</button>
|
||||
</li>
|
||||
{% if v and (v.id==p.author_id or v.admin_level > 1 and v.admin_level > 2) %}
|
||||
<li>
|
||||
<button class="btn btn-gray w-full text-left" data-bs-dismiss="modal" onclick="togglePostEdit('{{p.id}}')">
|
||||
<i class="fas fa-pencil fa-fw mr-4"></i>Edit
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if v and v.id==p.author_id %}
|
||||
{% if p.private %}
|
||||
<li>
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast('/publish/{{p.id}}')" data-bs-dismiss="modal">
|
||||
<i class="fas fa-globe fa-fw mr-4"></i>Publish
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li id="pin-profile2-{{p.id}}" class="{% if p.is_pinned %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/pin/{{p.id}}','pin-profile2-{{p.id}}','unpin-profile2-{{p.id}}')">
|
||||
<i class="fas fa-thumbtack fa-rotate--45 fa-fw mr-4"></i>Pin to profile
|
||||
</button>
|
||||
</li>
|
||||
<li id="unpin-profile2-{{p.id}}" class="{% if not p.is_pinned %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/pin/{{p.id}}','pin-profile2-{{p.id}}','unpin-profile2-{{p.id}}')">
|
||||
<i class="fas fa-thumbtack fa-rotate--45 fa-fw mr-4"></i>Unpin from profile
|
||||
</button>
|
||||
</li>
|
||||
{% if p.deleted_utc > 0 %}
|
||||
<li>
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast('/undelete_post/{{p.id}}')" data-bs-dismiss="modal">
|
||||
<i class="fas fa-trash-alt fa-fw mr-4"></i>Undelete
|
||||
</button>
|
||||
</li>
|
||||
{% else %}
|
||||
<li>
|
||||
<button class="btn btn-gray w-full text-left" data-bs-toggle="modal" data-bs-dismiss="modal" data-bs-target="#deletePostModal" onclick="delete_postModal('{{p.id}}')">
|
||||
<i class="fas fa-trash-alt fa-fw mr-4"></i>Delete
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<li>
|
||||
<a class="btn btn-gray w-full text-left" href="/votes?link={{p.fullname}}">
|
||||
<i class="fas fa-poll fa-fw mr-4"></i>Votes
|
||||
</a>
|
||||
</li>
|
||||
|
||||
{% if v %}
|
||||
<li>
|
||||
<button class="btn btn-gray w-full text-left" data-bs-toggle="modal" data-bs-dismiss="modal" data-bs-target="#awardModal" onclick="awardModal('/post/{{p.id}}/awards')">
|
||||
<i class="fas fa-gift fa-fw mr-4"></i>Award
|
||||
</button>
|
||||
</li>
|
||||
|
||||
<li id="subscribe2-{{p.id}}" class="{% if p.id in v.subscribed_idlist() %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/subscribe/{{p.id}}','subscribe2-{{p.id}}','unsubscribe2-{{p.id}}')">
|
||||
<i class="fas fa-bell fa-fw mr-4"></i>Subscribe
|
||||
</button>
|
||||
</li>
|
||||
|
||||
<li id="unsubscribe2-{{p.id}}" class="{% if not p.id in v.subscribed_idlist() %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/unsubscribe/{{p.id}}','subscribe2-{{p.id}}','unsubscribe2-{{p.id}}')">
|
||||
<i class="fas fa-bell-slash fa-fw mr-4"></i>Unsubscribe
|
||||
</button>
|
||||
</li>
|
||||
|
||||
<li id="save2-{{p.id}}" class="{% if p.id in v.saved_idlist() %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/save_post/{{p.id}}','save2-{{p.id}}','unsave2-{{p.id}}')">
|
||||
<i class="far fa-bookmark fa-fw mr-4"></i>Save
|
||||
</button>
|
||||
</li>
|
||||
|
||||
<li id="unsave2-{{p.id}}" class="{% if not p.id in v.saved_idlist() %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/unsave_post/{{p.id}}','save2-{{p.id}}','unsave2-{{p.id}}')">
|
||||
<i class="fas fa-bookmark fa-fw mr-4"></i>Unsave
|
||||
</button>
|
||||
</li>
|
||||
|
||||
{% if v.admin_level > 1 or v.id == p.author.id and not v.club_banned %}
|
||||
<li id="club2-{{p.id}}" class="{% if p.club %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/toggle_club/{{p.id}}','club2-{{p.id}}','unclub2-{{p.id}}')">
|
||||
<i class="fas fa-eye-slash fa-fw mr-4"></i>Mark club
|
||||
</button>
|
||||
</li>
|
||||
<li id="unclub2-{{p.id}}" class="{% if not p.club %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/toggle_club/{{p.id}}','club2-{{p.id}}','unclub2-{{p.id}}')">
|
||||
<i class="fas fa-eye fa-fw mr-4"></i>Unmark club
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if v.admin_level > 0 %}
|
||||
<li id="pin2-{{p.id}}" class="{% if p.stickied %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/sticky/{{p.id}}','pin2-{{p.id}}','unpin2-{{p.id}}')">
|
||||
<i class="fas fa-thumbtack fa-rotate--45 fa-fw mr-4"></i>Pin
|
||||
</button>
|
||||
</li>
|
||||
<li id="unpin2-{{p.id}}" class="{% if not p.stickied %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/unsticky/{{p.id}}','pin2-{{p.id}}','unpin2-{{p.id}}')">
|
||||
<i class="fas fa-thumbtack fa-rotate--45 fa-fw mr-4"></i>Unpin
|
||||
</button>
|
||||
</li>
|
||||
{% if v==p.author %}
|
||||
<li id="distinguish2-{{p.id}}" class="{% if p.distinguish_level %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/distinguish/{{p.id}}','distinguish2-{{p.id}}','undistinguish2-{{p.id}}')">
|
||||
<i class="fas fa-id-badge fa-fw mr-4"></i>Distinguish
|
||||
</button>
|
||||
</li>
|
||||
<li id="undistinguish2-{{p.id}}" class="{% if not p.distinguish_level %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/distinguish/{{p.id}}','distinguish2-{{p.id}}','undistinguish2-{{p.id}}')">
|
||||
<i class="fas fa-id-badge fa-fw mr-4"></i>Undistinguish
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li id="remove2-{{p.id}}" class="{% if p.is_banned %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/ban_post/{{p.id}}','remove2-{{p.id}}','approve2-{{p.id}}')">
|
||||
<i class="fas fa-ban fa-fw mr-4"></i>Remove
|
||||
</button>
|
||||
</li>
|
||||
<li id="approve2-{{p.id}}" class="{% if not p.is_banned %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/unban_post/{{p.id}}','remove2-{{p.id}}','approve2-{{p.id}}')">
|
||||
<i class="fas fa-check fa-fw mr-4"></i>Approve
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if v.admin_level > 1 and p.oauth_app %}
|
||||
<li>
|
||||
<a href="{{p.oauth_app.permalink}}" class="btn btn-gray w-full text-left">
|
||||
<i class="fas fa-code fa-fw mr-4"></i>API App
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if v and v.id != p.author_id and not p.award_count("ghosts") %}
|
||||
<li id="unblock2-{{p.id}}" class="{% if not p.is_blocking %} hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/settings/unblock?username={{p.author.username}}','block2-{{p.id}}','unblock2-{{p.id}}')">
|
||||
<i class="fas fa-user-check fa-fw mr-4"></i>Unblock user
|
||||
</button>
|
||||
</li>
|
||||
<li id="prompt2-{{p.id}}" class="blockuser hidden">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/settings/block?username={{p.author.username}}','prompt2-{{p.id}}','unblock2-{{p.id}}')">
|
||||
<i class="fas fa-question-circle fa-fw mr-4"></i>Are you sure?
|
||||
</button>
|
||||
</li>
|
||||
<li id="block2-{{p.id}}" class="{% if p.is_blocking %} hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="document.getElementById('block2-{{p.id}}').classList.toggle('hidden');document.getElementById('prompt2-{{p.id}}').classList.toggle('hidden');">
|
||||
<i class="fas fa-user-slash fa-fw mr-4"></i>Block user
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if v and (v.id==p.author_id or v.admin_level > 1) %}
|
||||
<li id="mark2-{{p.id}}" class="{% if p.over_18 %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/toggle_post_nsfw/{{p.id}}','mark2-{{p.id}}','unmark2-{{p.id}}')">
|
||||
<i class="fas fa-eye-evil fa-fw mr-4"></i>Mark +18
|
||||
</button>
|
||||
</li>
|
||||
<li id="unmark2-{{p.id}}" class="{% if not p.over_18 %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/toggle_post_nsfw/{{p.id}}','mark2-{{p.id}}','unmark2-{{p.id}}')">
|
||||
<i class="fas fa-eye-evil fa-fw mr-4"></i>Unmark +18
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if v and v.admin_level > 1 and v.id!=p.author_id %}
|
||||
<li id="ban2-{{p.id}}" class="{% if p.author.is_suspended %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#banModal" onclick="banModal('/post/{{p.id}}', '{{ p.author.id }}', '{{p.author.username}}')">
|
||||
<i class="fas fa-user-minus fa-fw mr-4"></i>Ban user
|
||||
</button>
|
||||
</li>
|
||||
<li id="unban2-{{p.id}}" class="{% if not p.author.is_suspended %}hidden{% endif %}">
|
||||
<button class="btn btn-gray w-full text-left" onclick="post_toast2('/unban_user/{{p.author_id}}','ban2-{{p.id}}','unban2-{{p.id}}')">
|
||||
<i class="fas fa-user-minus fa-fw mr-4"></i>Unban user
|
||||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue