dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

messages.qtpl.go (45783B)


      1 // Code generated by qtc from "messages.qtpl". DO NOT EDIT.
      2 // See https://github.com/valyala/quicktemplate for details.
      3 
      4 //line messages.qtpl:1
      5 package v1
      6 
      7 //line messages.qtpl:1
      8 import "dkforest/pkg/database"
      9 
     10 //line messages.qtpl:2
     11 import "dkforest/pkg/managers"
     12 
     13 //line messages.qtpl:3
     14 import humanize "github.com/dustin/go-humanize"
     15 
     16 //line messages.qtpl:5
     17 import (
     18 	qtio422016 "io"
     19 
     20 	qt422016 "github.com/valyala/quicktemplate"
     21 )
     22 
     23 //line messages.qtpl:5
     24 var (
     25 	_ = qtio422016.Copy
     26 	_ = qt422016.AcquireByteBuffer
     27 )
     28 
     29 //line messages.qtpl:5
     30 func StreamGenerateStyle(qw422016 *qt422016.Writer, AuthUser *database.User, Data ChatMessagesData) {
     31 //line messages.qtpl:5
     32 	qw422016.N().S(`<style>
     33    /* http://meyerweb.com/eric/tools/css/reset/
     34        v2.0 | 20110126
     35        License: none (public domain)
     36     */
     37     html, body, div, span, applet, object, iframe,
     38     h1, h2, h3, h4, h5, h6, p, blockquote, pre,
     39     a, abbr, acronym, address, big, cite, code,
     40     del, dfn, em, img, ins, kbd, q, s, samp,
     41     small, strike, strong, sub, sup, tt, var,
     42     b, u, i, center,
     43     dl, dt, dd, ol, ul, li,
     44     fieldset, form, label, legend,
     45     table, caption, tbody, tfoot, thead, tr, th, td,
     46     article, aside, canvas, details, embed,
     47     figure, figcaption, footer, header, hgroup,
     48     menu, nav, output, ruby, section, summary,
     49     time, mark, audio, video {
     50         margin: 0;
     51         padding: 0;
     52         border: 0;
     53         font-size: 100%;
     54         font: inherit;
     55         vertical-align: baseline;
     56     }
     57     /* HTML5 display-role reset for older browsers */
     58     article, aside, details, figcaption, figure,
     59     footer, header, hgroup, menu, nav, section {
     60         display: block;
     61     }
     62     body {
     63         line-height: 1;
     64     }
     65     ol, ul {
     66         list-style: none;
     67     }
     68     blockquote, q {
     69         quotes: none;
     70     }
     71     blockquote:before, blockquote:after,
     72     q:before, q:after {
     73         content: '';
     74         content: none;
     75     }
     76     table {
     77         border-collapse: collapse;
     78         border-spacing: 0;
     79     }
     80     /* --- end --- */
     81 
     82     i { font-style: italic; }
     83 
     84     /* Remove button padding in FF */
     85     button::-moz-focus-inner {
     86         border:0;
     87         padding:0;
     88     }
     89 
     90     body { font-family: Lato,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; }
     91     a       { color: #00bc8c; text-decoration: none; }
     92     a:hover { color: #007053; text-decoration: underline; }
     93     .unread_room       { color: #2392da; text-decoration: none; }
     94     .unread_room:hover { color: #004970; text-decoration: underline; }
     95     .emoji {
     96         font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort;
     97         font-size: 17px;
     98     }
     99     .mod-btn {
    100         width: 16px; height: 16px;
    101         margin: 0; padding: 0;
    102         border: 1px solid gray;
    103         display: inline;
    104         text-align: center;
    105         vertical-align: middle;
    106         user-select: none;
    107         background-color: #444;
    108         color: #ea2a2a;
    109         -webkit-box-shadow: 1px 1px 1px rgba(0,0,0,0.25);
    110         -moz-box-shadow: 1px 1px 1px rgba(0,0,0,0.25);
    111         -webkit-border-radius: 3px;
    112         -moz-border-radius: 3px;
    113     }
    114     .mod-btn:hover {
    115         background-color: #222;
    116     }
    117     .delete_msg_btn {
    118         font-size: 15px;
    119         line-height: 1;
    120     }
    121     @keyframes hide_btn {
    122         100% { visibility: hidden;  }
    123     }
    124     @keyframes orange_btn {
    125         99% { color: ea2a2a; } 100% { color: orange;  }
    126     }
    127     .delete_msg_btn::after { content: "×"; }
    128     .hb_btn {
    129         font-size: 10px;
    130         line-height: 1.4;
    131     }
    132     .hb_btn::after { content: "hb"; }
    133     .k_btn {
    134         font-size: 10px;
    135         line-height: 1.4;
    136     }
    137     .k_btn::after { content: "k"; }
    138     .connection-closed {
    139         color: #bf2718;
    140         display: block;
    141         position: fixed;
    142         text-align: center;
    143         top: 0;
    144         left: calc(50% - 200px);
    145         width: 400px;
    146         z-index: 2;
    147         background-color: #500000;
    148         border: 2px solid #ff0000;
    149     }
    150     #manualrefresh {
    151         `)
    152 //line messages.qtpl:125
    153 	if !Data.ForceManualRefresh {
    154 //line messages.qtpl:125
    155 		qw422016.N().S(`
    156             top: -200%;
    157             animation: timeout_messages `)
    158 //line messages.qtpl:127
    159 		qw422016.N().DL(Data.ManualRefreshTimeout)
    160 //line messages.qtpl:127
    161 		qw422016.N().S(`s forwards;
    162         `)
    163 //line messages.qtpl:128
    164 	}
    165 //line messages.qtpl:128
    166 	qw422016.N().S(`
    167         color: #bf2718;
    168         display: block;
    169         position: fixed;
    170         text-align: center;
    171         left: calc(50% - 200px);
    172         width: 400px;
    173         z-index: 2;
    174         background-color: #500000;
    175         border: 2px solid #ff0000;
    176     }
    177     @keyframes timeout_messages {
    178         0%   { top: -200%; }
    179         99% { top: -200%; }
    180         100% { top: 0; }
    181     }
    182     .date { color: #999; font-family: 'Courier New', Courier, monospace; font-size: 14px; }
    183     .date-link:hover { color: #999; text-decoration: underline; }
    184     .sysmsg { color: #fff; font-family: 'Courier New', Courier, monospace; font-size: 14px; }
    185     small { font-size: 80%; font-weight: 400; }
    186     .msg { padding: 3px 0 3px 8px; border-bottom: 1px solid #444; color: #888; position: relative; }
    187     .msg p:first-of-type { display: inline; }
    188     strong { font-weight: bold; }
    189     em { font-style: italic; }
    190     pre { border: 1px solid #2b442b; padding: 2px; margin: 2px 0; max-height: `)
    191 //line messages.qtpl:152
    192 	qw422016.N().DL(AuthUser.CodeBlockHeight)
    193 //line messages.qtpl:152
    194 	qw422016.N().S(`px; overflow: auto; background-color: rgba(39,40,34,0.6) !important;
    195         font-family: SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace; }
    196     .fullscreen { position: absolute; margin-top: -19px; right: 3px; }
    197     code {  border: 1px solid #2b442b; color: #f92672; padding: 0 2px; margin: 0px 0; background-color: rgba(39,40,34,0.6) !important; }
    198     .censored { background-color: black; color: black; padding: 0 3px; }
    199     .censored:hover { background-color: black; color: white; }
    200     .censored > a { color: black; }
    201     .censored > a:hover { color: #007053; text-decoration: underline; }
    202     ul { list-style-type: disc; margin: 0 0 0 15px; }
    203     * {
    204         -webkit-font-smoothing: antialiased;
    205         -moz-osx-font-smoothing: grayscale;
    206     }
    207     .afk-indicator { color: #ff9a27; }
    208     .spacer16 { display: inline-block; width: 16px; }
    209     .spacer36 { display: inline-block; width: 36px; }
    210     .spacer56 { display: inline-block; width: 56px; }
    211     .d-inline { display: inline; }
    212     .o-wrap { overflow-wrap: break-word; }
    213     .f-def-clr { color: #888; }
    214     .f-orange-clr { color: orange; }
    215     .f-white-clr, .f-white-clr:hover { color: white; }
    216     .line-through { text-decoration: line-through; }
    217     .hb-row { background-color: rgba(0, 0, 0, 0.7); opacity: `)
    218 //line messages.qtpl:175
    219 	qw422016.N().F(AuthUser.GetHellbanOpacityF64())
    220 //line messages.qtpl:175
    221 	qw422016.N().S(`; }
    222     .own-highlight { background-color: rgba(255,241,176,0.05); }
    223     .read-marker { border-style: outset; border-top: `)
    224 //line messages.qtpl:177
    225 	qw422016.N().DL(AuthUser.ChatReadMarkerSize)
    226 //line messages.qtpl:177
    227 	qw422016.N().S(`px solid `)
    228 //line messages.qtpl:177
    229 	qw422016.E().S(AuthUser.ChatReadMarkerColor)
    230 //line messages.qtpl:177
    231 	qw422016.N().S(`; }
    232     #msgs { `)
    233 //line messages.qtpl:178
    234 	if !Data.HideRightColumn {
    235 //line messages.qtpl:178
    236 		qw422016.N().S(`width: calc(100% - 185px); float: left; `)
    237 //line messages.qtpl:178
    238 	}
    239 //line messages.qtpl:178
    240 	qw422016.N().S(`line-height: 1.2; }
    241     #no-msg { padding-left: 10px; color: #ddd; }
    242     #rgt-pane-w { width: 150px; height: 100%; position: fixed; right: 15px; overflow-y: auto; }
    243     #rgt-pane { line-height: 1.15; }
    244     .rgt-title { font-weight: bolder; color: #ced4da; }
    245     .mb-20px { margin-bottom: 20px; }
    246     .mb-30px { margin-bottom: 30px; }
    247     .mt-5px { margin-top: 5px; }
    248     .mt-10px { margin-top: 10px; }
    249     .notif, .notif:hover { color: #e74c3c; }
    250     #msg-err { background-color: #8f2d2d; color: #ffffff; padding: 1px 5px 2px 5px; display: block; text-decoration: none; }
    251     #i {
    252         background-color: #006400;
    253         width: 18px;
    254         height: 18px;
    255         position: fixed;
    256         top: 1px;
    257         right: `)
    258 //line messages.qtpl:195
    259 	if !Data.HideRightColumn {
    260 //line messages.qtpl:195
    261 		qw422016.N().S(`35px`)
    262 //line messages.qtpl:195
    263 	} else {
    264 //line messages.qtpl:195
    265 		qw422016.N().S(`8px`)
    266 //line messages.qtpl:195
    267 	}
    268 //line messages.qtpl:195
    269 	qw422016.N().S(`;
    270         border-radius: 9px;
    271         animation: i1 30s forwards;
    272     }
    273     @keyframes i1 { 0% { background-color: #006400; } 32% { background-color: #006400; } 33% { background-color: #626400; } 99% { background-color: #626400; } 100% { background-color: #8b0000; } }
    274     @keyframes i2 { 0% { background-color: #006400; } 32% { background-color: #006400; } 33% { background-color: #626400; } 99% { background-color: #626400; } 100% { background-color: #8b0000; } }
    275     @keyframes horizontal-shaking1 {
    276         0% { transform: translateX(0) }
    277         25% { transform: translateX(9px) }
    278         50% { transform: translateX(-9px) }
    279         75% { transform: translateX(9px) }
    280         100% { transform: translateX(0) }
    281     }
    282     @keyframes horizontal-shaking2 {
    283         0% { transform: translateX(0) }
    284         25% { transform: translateX(9px) }
    285         50% { transform: translateX(-9px) }
    286         75% { transform: translateX(9px) }
    287         100% { transform: translateX(0) }
    288     }
    289 </style>
    290 `)
    291 //line messages.qtpl:216
    292 }
    293 
    294 //line messages.qtpl:216
    295 func WriteGenerateStyle(qq422016 qtio422016.Writer, AuthUser *database.User, Data ChatMessagesData) {
    296 //line messages.qtpl:216
    297 	qw422016 := qt422016.AcquireWriter(qq422016)
    298 //line messages.qtpl:216
    299 	StreamGenerateStyle(qw422016, AuthUser, Data)
    300 //line messages.qtpl:216
    301 	qt422016.ReleaseWriter(qw422016)
    302 //line messages.qtpl:216
    303 }
    304 
    305 //line messages.qtpl:216
    306 func GenerateStyle(AuthUser *database.User, Data ChatMessagesData) string {
    307 //line messages.qtpl:216
    308 	qb422016 := qt422016.AcquireByteBuffer()
    309 //line messages.qtpl:216
    310 	WriteGenerateStyle(qb422016, AuthUser, Data)
    311 //line messages.qtpl:216
    312 	qs422016 := string(qb422016.B)
    313 //line messages.qtpl:216
    314 	qt422016.ReleaseByteBuffer(qb422016)
    315 //line messages.qtpl:216
    316 	return qs422016
    317 //line messages.qtpl:216
    318 }
    319 
    320 //line messages.qtpl:218
    321 func StreamMessages(qw422016 *qt422016.Writer, VERSION, CSRF, NullUsername string, AuthUser *database.User, Data ChatMessagesData) {
    322 //line messages.qtpl:218
    323 	qw422016.N().S(`<html lang="en">
    324     <head>
    325         <title></title>
    326 `)
    327 //line messages.qtpl:222
    328 	if !Data.ChatMenuData.PreventRefresh && !Data.ForceManualRefresh {
    329 //line messages.qtpl:222
    330 		qw422016.N().S(`<meta http-equiv="refresh" content="`)
    331 //line messages.qtpl:222
    332 		qw422016.N().DL(AuthUser.RefreshRate)
    333 //line messages.qtpl:222
    334 		qw422016.N().S(`">`)
    335 //line messages.qtpl:222
    336 	}
    337 //line messages.qtpl:223
    338 	if AuthUser.CollectMetadata {
    339 //line messages.qtpl:223
    340 		qw422016.N().S(`<link rel="stylesheet" type="text/css" href="/public/css/meta.css?v=`)
    341 //line messages.qtpl:223
    342 		qw422016.E().S(VERSION)
    343 //line messages.qtpl:223
    344 		qw422016.N().S(`" />`)
    345 //line messages.qtpl:223
    346 	}
    347 //line messages.qtpl:224
    348 	StreamGenerateStyle(qw422016, AuthUser, Data)
    349 //line messages.qtpl:224
    350 	qw422016.N().S(`        <style>#btn_delete_useless:active { background-image: url('/api/v1/chat/messages/delete/useless'); }</style>
    351     </head>
    352     <body>
    353 
    354 `)
    355 //line messages.qtpl:229
    356 	if Data.ForceManualRefresh {
    357 //line messages.qtpl:229
    358 		qw422016.N().S(`            <div id="manualrefresh">
    359                 <h4>Manual refresh required</h4>
    360                 <form method="get" action="/chat/`)
    361 //line messages.qtpl:232
    362 		qw422016.E().S(Data.ChatMenuData.RoomName)
    363 //line messages.qtpl:232
    364 		qw422016.N().S(`" target="_top">
    365                     <input type="submit" value="Reload" />
    366                 </form>
    367             </div>
    368 `)
    369 //line messages.qtpl:236
    370 	} else if !Data.ChatMenuData.PreventRefresh {
    371 //line messages.qtpl:236
    372 		qw422016.N().S(`            <div id="manualrefresh">
    373                 <h4>Manual refresh required</h4>
    374                 <form method="get">
    375                     <input type="submit" value="Reload" />
    376                 </form>
    377             </div>
    378 `)
    379 //line messages.qtpl:243
    380 	}
    381 //line messages.qtpl:243
    382 	qw422016.N().S(`
    383 `)
    384 //line messages.qtpl:245
    385 	if Data.Error != "" {
    386 //line messages.qtpl:245
    387 		qw422016.N().S(`            <a href="/api/v1/chat/messages/`)
    388 //line messages.qtpl:246
    389 		qw422016.E().S(Data.ChatMenuData.RoomName)
    390 //line messages.qtpl:246
    391 		qw422016.N().S(`" id="msg-err">× `)
    392 //line messages.qtpl:246
    393 		qw422016.E().S(Data.Error)
    394 //line messages.qtpl:246
    395 		qw422016.N().S(`</a>
    396 `)
    397 //line messages.qtpl:247
    398 	}
    399 //line messages.qtpl:247
    400 	qw422016.N().S(`
    401 `)
    402 //line messages.qtpl:249
    403 	if Data.PmSound || Data.TaggedSound {
    404 //line messages.qtpl:249
    405 		qw422016.N().S(`            <audio src="/public/mp3/sound5.mp3" autoplay></audio>
    406 `)
    407 //line messages.qtpl:251
    408 	} else if Data.NewMessageSound {
    409 //line messages.qtpl:251
    410 		qw422016.N().S(`            <audio src="/public/mp3/sound6.mp3" autoplay></audio>
    411 `)
    412 //line messages.qtpl:253
    413 	}
    414 //line messages.qtpl:253
    415 	qw422016.N().S(`
    416         <div id="msgs">
    417 `)
    418 //line messages.qtpl:256
    419 	StreamRenderMessages(qw422016, AuthUser, Data, CSRF, NullUsername, nil, false)
    420 //line messages.qtpl:256
    421 	qw422016.N().S(`        </div>
    422 
    423         `)
    424 //line messages.qtpl:259
    425 	if !AuthUser.HideRightColumn {
    426 //line messages.qtpl:259
    427 		qw422016.N().S(`
    428             <div id="rgt-pane-w">
    429 `)
    430 //line messages.qtpl:261
    431 		StreamRenderRightColumn(qw422016, AuthUser, Data.ChatMenuData)
    432 //line messages.qtpl:261
    433 		qw422016.N().S(`            </div>
    434 `)
    435 //line messages.qtpl:263
    436 	}
    437 //line messages.qtpl:264
    438 	if AuthUser.CollectMetadata {
    439 //line messages.qtpl:264
    440 		qw422016.N().S(`            <div class="div_1"></div>
    441             <div class="div_2"></div>
    442             <div class="div_f0">a</div>
    443 `)
    444 //line messages.qtpl:268
    445 	}
    446 //line messages.qtpl:268
    447 	qw422016.N().S(`    </body>
    448 </html>
    449 `)
    450 //line messages.qtpl:271
    451 }
    452 
    453 //line messages.qtpl:271
    454 func WriteMessages(qq422016 qtio422016.Writer, VERSION, CSRF, NullUsername string, AuthUser *database.User, Data ChatMessagesData) {
    455 //line messages.qtpl:271
    456 	qw422016 := qt422016.AcquireWriter(qq422016)
    457 //line messages.qtpl:271
    458 	StreamMessages(qw422016, VERSION, CSRF, NullUsername, AuthUser, Data)
    459 //line messages.qtpl:271
    460 	qt422016.ReleaseWriter(qw422016)
    461 //line messages.qtpl:271
    462 }
    463 
    464 //line messages.qtpl:271
    465 func Messages(VERSION, CSRF, NullUsername string, AuthUser *database.User, Data ChatMessagesData) string {
    466 //line messages.qtpl:271
    467 	qb422016 := qt422016.AcquireByteBuffer()
    468 //line messages.qtpl:271
    469 	WriteMessages(qb422016, VERSION, CSRF, NullUsername, AuthUser, Data)
    470 //line messages.qtpl:271
    471 	qs422016 := string(qb422016.B)
    472 //line messages.qtpl:271
    473 	qt422016.ReleaseByteBuffer(qb422016)
    474 //line messages.qtpl:271
    475 	return qs422016
    476 //line messages.qtpl:271
    477 }
    478 
    479 //line messages.qtpl:274
    480 func StreamRenderRightColumn(qw422016 *qt422016.Writer, AuthUser *database.User, Data ChatMenuData) {
    481 //line messages.qtpl:274
    482 	qw422016.N().S(`<div id="rgt-pane">
    483     <div class="mb-20px">
    484         <div class="rgt-title">Inbox (<a href="/settings/inbox" target="_top"`)
    485 //line messages.qtpl:277
    486 	if Data.InboxCount > 0 {
    487 //line messages.qtpl:277
    488 		qw422016.N().S(`class="notif"`)
    489 //line messages.qtpl:277
    490 	}
    491 //line messages.qtpl:277
    492 	qw422016.N().S(`>`)
    493 //line messages.qtpl:277
    494 	qw422016.N().DL(Data.InboxCount)
    495 //line messages.qtpl:277
    496 	qw422016.N().S(`</a>)</div>
    497     </div>
    498     <div class="mb-20px">
    499         <div class="rgt-title">Rooms:</div>
    500 `)
    501 //line messages.qtpl:281
    502 	for _, e := range Data.OfficialRooms {
    503 //line messages.qtpl:282
    504 		if e.Name == "club" {
    505 //line messages.qtpl:283
    506 			if AuthUser.IsClubMember {
    507 //line messages.qtpl:283
    508 				qw422016.N().S(`                    <div><a href="/chat/club" target="_top"`)
    509 //line messages.qtpl:284
    510 				if e.IsUnread {
    511 //line messages.qtpl:284
    512 					qw422016.N().S(` class="unread_room"`)
    513 //line messages.qtpl:284
    514 				}
    515 //line messages.qtpl:284
    516 				qw422016.N().S(`>#club</a></div>
    517 `)
    518 //line messages.qtpl:285
    519 			}
    520 //line messages.qtpl:286
    521 		} else if e.Name == "moderators" {
    522 //line messages.qtpl:287
    523 			if AuthUser.IsModerator() {
    524 //line messages.qtpl:287
    525 				qw422016.N().S(`                    <div><a href="/chat/moderators" target="_top"`)
    526 //line messages.qtpl:288
    527 				if e.IsUnread {
    528 //line messages.qtpl:288
    529 					qw422016.N().S(` class="unread_room"`)
    530 //line messages.qtpl:288
    531 				}
    532 //line messages.qtpl:288
    533 				qw422016.N().S(`>#moderators</a></div>
    534 `)
    535 //line messages.qtpl:289
    536 			}
    537 //line messages.qtpl:290
    538 		} else {
    539 //line messages.qtpl:290
    540 			qw422016.N().S(`                <div><a href="/chat/`)
    541 //line messages.qtpl:291
    542 			qw422016.E().S(e.Name)
    543 //line messages.qtpl:291
    544 			qw422016.N().S(`" target="_top"`)
    545 //line messages.qtpl:291
    546 			if e.IsUnread {
    547 //line messages.qtpl:291
    548 				qw422016.N().S(` class="unread_room"`)
    549 //line messages.qtpl:291
    550 			}
    551 //line messages.qtpl:291
    552 			qw422016.N().S(`>#`)
    553 //line messages.qtpl:291
    554 			qw422016.E().S(e.Name)
    555 //line messages.qtpl:291
    556 			qw422016.N().S(`</a></div>
    557 `)
    558 //line messages.qtpl:292
    559 		}
    560 //line messages.qtpl:293
    561 	}
    562 //line messages.qtpl:294
    563 	if len(Data.SubscribedRooms) > 0 {
    564 //line messages.qtpl:294
    565 		qw422016.N().S(`            <div class="mt-10px"></div>
    566 `)
    567 //line messages.qtpl:296
    568 		for _, e := range Data.SubscribedRooms {
    569 //line messages.qtpl:296
    570 			qw422016.N().S(`                <div><a href="/chat/`)
    571 //line messages.qtpl:297
    572 			qw422016.E().S(e.Name)
    573 //line messages.qtpl:297
    574 			qw422016.N().S(`" target="_top"`)
    575 //line messages.qtpl:297
    576 			if e.IsUnread {
    577 //line messages.qtpl:297
    578 				qw422016.N().S(` class="unread_room"`)
    579 //line messages.qtpl:297
    580 			}
    581 //line messages.qtpl:297
    582 			qw422016.N().S(`>#`)
    583 //line messages.qtpl:297
    584 			qw422016.E().S(e.Name)
    585 //line messages.qtpl:297
    586 			qw422016.N().S(`</a></div>
    587 `)
    588 //line messages.qtpl:298
    589 		}
    590 //line messages.qtpl:299
    591 	}
    592 //line messages.qtpl:299
    593 	qw422016.N().S(`        <div class="mt-5px"><a href="/rooms" target="_top">[...]</a></div>
    594     </div>
    595     <div class="mb-20px">
    596         <div class="rgt-title">In this room:</div>
    597 `)
    598 //line messages.qtpl:304
    599 	for _, e := range Data.Members {
    600 //line messages.qtpl:304
    601 		qw422016.N().S(`            `)
    602 //line messages.qtpl:305
    603 		StreamMember(qw422016, AuthUser, Data, e)
    604 //line messages.qtpl:305
    605 		qw422016.N().S(`
    606 `)
    607 //line messages.qtpl:306
    608 	}
    609 //line messages.qtpl:306
    610 	qw422016.N().S(`    </div>
    611 `)
    612 //line messages.qtpl:308
    613 	if Data.VisibleMemberInChat || AuthUser.DisplayHellbanned {
    614 //line messages.qtpl:308
    615 		qw422016.N().S(`        <div class="mb-30px">
    616 `)
    617 //line messages.qtpl:310
    618 		if len(Data.MembersInChat) > 0 {
    619 //line messages.qtpl:310
    620 			qw422016.N().S(`                <div class="rgt-title">In other rooms:</div>
    621 `)
    622 //line messages.qtpl:312
    623 			for _, e := range Data.MembersInChat {
    624 //line messages.qtpl:312
    625 				qw422016.N().S(`                    `)
    626 //line messages.qtpl:313
    627 				StreamMember(qw422016, AuthUser, Data, e)
    628 //line messages.qtpl:313
    629 				qw422016.N().S(`
    630 `)
    631 //line messages.qtpl:314
    632 			}
    633 //line messages.qtpl:315
    634 		}
    635 //line messages.qtpl:315
    636 		qw422016.N().S(`        </div>
    637 `)
    638 //line messages.qtpl:317
    639 	}
    640 //line messages.qtpl:317
    641 	qw422016.N().S(`</div>
    642 `)
    643 //line messages.qtpl:319
    644 }
    645 
    646 //line messages.qtpl:319
    647 func WriteRenderRightColumn(qq422016 qtio422016.Writer, AuthUser *database.User, Data ChatMenuData) {
    648 //line messages.qtpl:319
    649 	qw422016 := qt422016.AcquireWriter(qq422016)
    650 //line messages.qtpl:319
    651 	StreamRenderRightColumn(qw422016, AuthUser, Data)
    652 //line messages.qtpl:319
    653 	qt422016.ReleaseWriter(qw422016)
    654 //line messages.qtpl:319
    655 }
    656 
    657 //line messages.qtpl:319
    658 func RenderRightColumn(AuthUser *database.User, Data ChatMenuData) string {
    659 //line messages.qtpl:319
    660 	qb422016 := qt422016.AcquireByteBuffer()
    661 //line messages.qtpl:319
    662 	WriteRenderRightColumn(qb422016, AuthUser, Data)
    663 //line messages.qtpl:319
    664 	qs422016 := string(qb422016.B)
    665 //line messages.qtpl:319
    666 	qt422016.ReleaseByteBuffer(qb422016)
    667 //line messages.qtpl:319
    668 	return qs422016
    669 //line messages.qtpl:319
    670 }
    671 
    672 //line messages.qtpl:321
    673 func StreamRenderMessages(qw422016 *qt422016.Writer, AuthUser database.IUserRenderMessage, Data ChatMessagesData, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) {
    674 //line messages.qtpl:323
    675 	baseTopBarURL := "/api/v1/chat/top-bar/" + Data.ChatMenuData.RoomName
    676 	readMarkerRendered := false
    677 	isFirstMsg := true
    678 
    679 //line messages.qtpl:326
    680 	qw422016.N().S(`    <style>#btn_delete_useless:active { background-image: url('/api/v1/chat/messages/delete/useless'); }</style>
    681 `)
    682 //line messages.qtpl:328
    683 	for idx, e := range Data.Messages {
    684 //line messages.qtpl:329
    685 		StreamRenderMessage(qw422016, idx, e, AuthUser, Data, baseTopBarURL, &readMarkerRendered, &isFirstMsg, CSRF, NullUsername, readMarkerRev, isEdit)
    686 //line messages.qtpl:329
    687 		qw422016.N().S(`    `)
    688 //line messages.qtpl:330
    689 	}
    690 //line messages.qtpl:330
    691 	qw422016.N().S(`
    692     `)
    693 //line messages.qtpl:331
    694 	if len(Data.Messages) == 0 {
    695 //line messages.qtpl:331
    696 		qw422016.N().S(`
    697         <div id="no-msg"><em>No message yet</em></div>
    698     `)
    699 //line messages.qtpl:333
    700 	}
    701 //line messages.qtpl:333
    702 	qw422016.N().S(`
    703 `)
    704 //line messages.qtpl:334
    705 }
    706 
    707 //line messages.qtpl:334
    708 func WriteRenderMessages(qq422016 qtio422016.Writer, AuthUser database.IUserRenderMessage, Data ChatMessagesData, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) {
    709 //line messages.qtpl:334
    710 	qw422016 := qt422016.AcquireWriter(qq422016)
    711 //line messages.qtpl:334
    712 	StreamRenderMessages(qw422016, AuthUser, Data, CSRF, NullUsername, readMarkerRev, isEdit)
    713 //line messages.qtpl:334
    714 	qt422016.ReleaseWriter(qw422016)
    715 //line messages.qtpl:334
    716 }
    717 
    718 //line messages.qtpl:334
    719 func RenderMessages(AuthUser database.IUserRenderMessage, Data ChatMessagesData, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) string {
    720 //line messages.qtpl:334
    721 	qb422016 := qt422016.AcquireByteBuffer()
    722 //line messages.qtpl:334
    723 	WriteRenderMessages(qb422016, AuthUser, Data, CSRF, NullUsername, readMarkerRev, isEdit)
    724 //line messages.qtpl:334
    725 	qs422016 := string(qb422016.B)
    726 //line messages.qtpl:334
    727 	qt422016.ReleaseByteBuffer(qb422016)
    728 //line messages.qtpl:334
    729 	return qs422016
    730 //line messages.qtpl:334
    731 }
    732 
    733 //line messages.qtpl:336
    734 func StreamRenderMessage(qw422016 *qt422016.Writer, idx int, e database.ChatMessage, AuthUser database.IUserRenderMessage,
    735 	Data ChatMessagesData, baseTopBarURL string, readMarkerRendered, isFirstMsg *bool, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) {
    736 //line messages.qtpl:338
    737 	if e.UserCanSee(AuthUser) {
    738 //line messages.qtpl:339
    739 		if AuthUser.GetChatReadMarkerEnabled() && e.CreatedAt.Before(Data.ReadMarker.ReadAt) && !*readMarkerRendered && !isEdit {
    740 //line messages.qtpl:339
    741 			qw422016.N().S(`
    742             <div class="read-marker read-marker-0"`)
    743 //line messages.qtpl:340
    744 			if idx == 0 {
    745 //line messages.qtpl:340
    746 				qw422016.N().S(` style="display:none;"`)
    747 //line messages.qtpl:340
    748 			}
    749 //line messages.qtpl:340
    750 			qw422016.N().S(`></div>
    751 `)
    752 //line messages.qtpl:341
    753 			*readMarkerRendered = true
    754 
    755 //line messages.qtpl:342
    756 		} else if AuthUser.GetChatReadMarkerEnabled() && e.CreatedAt.After(Data.ReadMarker.ReadAt) && !*readMarkerRendered && isEdit && readMarkerRev != nil {
    757 //line messages.qtpl:342
    758 			qw422016.N().S(`            <style>.read-marker-`)
    759 //line messages.qtpl:343
    760 			qw422016.N().D((*readMarkerRev))
    761 //line messages.qtpl:343
    762 			qw422016.N().S(`{display:none !important;}</style>
    763 `)
    764 //line messages.qtpl:344
    765 			*readMarkerRev++
    766 
    767 //line messages.qtpl:344
    768 			qw422016.N().S(`            <div class="read-marker read-marker-`)
    769 //line messages.qtpl:345
    770 			qw422016.N().D(*readMarkerRev)
    771 //line messages.qtpl:345
    772 			qw422016.N().S(`"></div>
    773 `)
    774 //line messages.qtpl:346
    775 			*readMarkerRendered = true
    776 
    777 //line messages.qtpl:346
    778 			qw422016.N().S(`        `)
    779 //line messages.qtpl:347
    780 		}
    781 //line messages.qtpl:347
    782 		qw422016.N().S(`
    783         <div id="msgid-`)
    784 //line messages.qtpl:348
    785 		qw422016.E().S(e.UUID)
    786 //line messages.qtpl:348
    787 		qw422016.N().S(`" class="msgidc-`)
    788 //line messages.qtpl:348
    789 		qw422016.E().S(e.UUID)
    790 //line messages.qtpl:348
    791 		qw422016.N().S(`-`)
    792 //line messages.qtpl:348
    793 		qw422016.N().DL(e.Rev)
    794 //line messages.qtpl:348
    795 		qw422016.N().S(` msg
    796 `)
    797 //line messages.qtpl:349
    798 		if (e.User.IsHellbanned || e.IsHellbanned) && AuthUser.GetDisplayHellbanned() {
    799 //line messages.qtpl:349
    800 			qw422016.N().S(` hb-row
    801 `)
    802 //line messages.qtpl:350
    803 		} else if AuthUser.GetID() == e.User.ID && AuthUser.GetHighlightOwnMessages() {
    804 //line messages.qtpl:350
    805 			qw422016.N().S(` own-highlight`)
    806 //line messages.qtpl:350
    807 		}
    808 //line messages.qtpl:350
    809 		qw422016.N().S(`        ">
    810 `)
    811 //line messages.qtpl:352
    812 		if e.UserCanDelete(AuthUser) {
    813 //line messages.qtpl:353
    814 			if AuthUser.GetDisplayDeleteButton() {
    815 //line messages.qtpl:354
    816 				if e.TooOldToDelete() {
    817 //line messages.qtpl:354
    818 					qw422016.N().S(`                        <button id="btn_delete_`)
    819 //line messages.qtpl:355
    820 					qw422016.E().S(e.UUID)
    821 //line messages.qtpl:355
    822 					qw422016.N().S(`" class="mod-btn delete_msg_btn f-orange-clr" title="delete"></button>
    823 `)
    824 //line messages.qtpl:356
    825 				} else {
    826 //line messages.qtpl:356
    827 					qw422016.N().S(`                        <button id="btn_delete_`)
    828 //line messages.qtpl:357
    829 					qw422016.E().S(e.UUID)
    830 //line messages.qtpl:357
    831 					qw422016.N().S(`" class="mod-btn delete_msg_btn" title="delete"
    832                             style="
    833 `)
    834 //line messages.qtpl:359
    835 					if string(e.User.Username) != NullUsername {
    836 //line messages.qtpl:360
    837 						if (AuthUser.IsModerator() && e.UserID != AuthUser.GetID()) || AuthUser.GetIsAdmin() || e.IsRoomOwner(AuthUser.GetID()) {
    838 //line messages.qtpl:360
    839 							qw422016.N().S(`                                    animation: `)
    840 //line messages.qtpl:361
    841 							qw422016.N().DL(e.DeleteSecondsRemaining())
    842 //line messages.qtpl:361
    843 							qw422016.N().S(`s 1s forwards orange_btn;
    844 `)
    845 //line messages.qtpl:362
    846 						} else {
    847 //line messages.qtpl:362
    848 							qw422016.N().S(`                                    animation: `)
    849 //line messages.qtpl:363
    850 							qw422016.N().DL(e.DeleteSecondsRemaining())
    851 //line messages.qtpl:363
    852 							qw422016.N().S(`s 1s forwards hide_btn;
    853 `)
    854 //line messages.qtpl:364
    855 						}
    856 //line messages.qtpl:365
    857 					}
    858 //line messages.qtpl:365
    859 					qw422016.N().S(`                            "
    860                             ></button>
    861 `)
    862 //line messages.qtpl:368
    863 				}
    864 //line messages.qtpl:368
    865 				qw422016.N().S(`                    <style>#btn_delete_`)
    866 //line messages.qtpl:369
    867 				qw422016.E().S(e.UUID)
    868 //line messages.qtpl:369
    869 				qw422016.N().S(`:active { background-image: url('/api/v1/chat/messages/delete/`)
    870 //line messages.qtpl:369
    871 				qw422016.E().S(e.UUID)
    872 //line messages.qtpl:369
    873 				qw422016.N().S(`'); }</style>
    874 `)
    875 //line messages.qtpl:370
    876 			}
    877 //line messages.qtpl:371
    878 			if AuthUser.IsModerator() {
    879 //line messages.qtpl:372
    880 				if !e.OwnMessage(AuthUser.GetID()) {
    881 //line messages.qtpl:373
    882 					if AuthUser.GetDisplayHellbanButton() {
    883 //line messages.qtpl:374
    884 						if string(e.User.Username) == NullUsername {
    885 //line messages.qtpl:374
    886 							qw422016.N().S(`                                <div class="spacer16"></div>
    887 `)
    888 //line messages.qtpl:376
    889 						} else {
    890 //line messages.qtpl:377
    891 							if e.User.IsHellbanned {
    892 //line messages.qtpl:377
    893 								qw422016.N().S(`                                    <form method="post" action="/api/v1/users/`)
    894 //line messages.qtpl:378
    895 								qw422016.E().S(e.UserID.String())
    896 //line messages.qtpl:378
    897 								qw422016.N().S(`/unhellban" class="d-inline">
    898                                         <input type="hidden" name="csrf" value="`)
    899 //line messages.qtpl:379
    900 								qw422016.E().S(CSRF)
    901 //line messages.qtpl:379
    902 								qw422016.N().S(`" />
    903                                         <button class="mod-btn hb_btn f-orange-clr line-through" title="unhellban"></button>
    904                                     </form>
    905 `)
    906 //line messages.qtpl:382
    907 							} else {
    908 //line messages.qtpl:382
    909 								qw422016.N().S(`                                    <form method="post" action="/api/v1/users/`)
    910 //line messages.qtpl:383
    911 								qw422016.E().S(e.UserID.String())
    912 //line messages.qtpl:383
    913 								qw422016.N().S(`/hellban" class="d-inline">
    914                                         <input type="hidden" name="csrf" value="`)
    915 //line messages.qtpl:384
    916 								qw422016.E().S(CSRF)
    917 //line messages.qtpl:384
    918 								qw422016.N().S(`" />
    919                                         <button class="mod-btn hb_btn f-orange-clr" title="hellban"></button>
    920                                     </form>
    921 `)
    922 //line messages.qtpl:387
    923 							}
    924 //line messages.qtpl:388
    925 						}
    926 //line messages.qtpl:389
    927 					}
    928 //line messages.qtpl:390
    929 					if AuthUser.GetDisplayKickButton() {
    930 //line messages.qtpl:390
    931 						qw422016.N().S(`                            <form method="post" action="/api/v1/users/`)
    932 //line messages.qtpl:391
    933 						qw422016.E().S(e.UserID.String())
    934 //line messages.qtpl:391
    935 						qw422016.N().S(`/kick" class="d-inline">
    936                                 <input type="hidden" name="csrf" value="`)
    937 //line messages.qtpl:392
    938 						qw422016.E().S(CSRF)
    939 //line messages.qtpl:392
    940 						qw422016.N().S(`" />
    941                                 <button class="mod-btn k_btn f-orange-clr" title="kick"></button>
    942                             </form>
    943 `)
    944 //line messages.qtpl:395
    945 					}
    946 //line messages.qtpl:396
    947 				} else {
    948 //line messages.qtpl:397
    949 					if AuthUser.GetDisplayKickButton() && AuthUser.GetDisplayHellbanButton() {
    950 //line messages.qtpl:397
    951 						qw422016.N().S(`                            <div class="spacer36"></div>
    952 `)
    953 //line messages.qtpl:399
    954 					} else if AuthUser.GetDisplayKickButton() || AuthUser.GetDisplayHellbanButton() {
    955 //line messages.qtpl:399
    956 						qw422016.N().S(`                            <div class="spacer16"></div>
    957 `)
    958 //line messages.qtpl:401
    959 					}
    960 //line messages.qtpl:402
    961 				}
    962 //line messages.qtpl:403
    963 			}
    964 //line messages.qtpl:404
    965 		} else {
    966 //line messages.qtpl:405
    967 			if Data.NbButtons == 3 {
    968 //line messages.qtpl:405
    969 				qw422016.N().S(`                    <div class="spacer56"></div>
    970 `)
    971 //line messages.qtpl:407
    972 			} else if Data.NbButtons == 2 {
    973 //line messages.qtpl:407
    974 				qw422016.N().S(`                    <div class="spacer36"></div>
    975 `)
    976 //line messages.qtpl:409
    977 			} else if Data.NbButtons == 1 {
    978 //line messages.qtpl:409
    979 				qw422016.N().S(`                    <div class="spacer16"></div>
    980 `)
    981 //line messages.qtpl:411
    982 			}
    983 //line messages.qtpl:412
    984 		}
    985 //line messages.qtpl:413
    986 		if !Data.HideTimestamps {
    987 //line messages.qtpl:413
    988 			qw422016.N().S(`                <a href="`)
    989 //line messages.qtpl:414
    990 			qw422016.E().S(baseTopBarURL)
    991 //line messages.qtpl:414
    992 			qw422016.N().S(`?quote=`)
    993 //line messages.qtpl:414
    994 			qw422016.E().S(e.UUID)
    995 //line messages.qtpl:414
    996 			streamunesc(qw422016, Data.TopBarQueryParams)
    997 //line messages.qtpl:414
    998 			qw422016.N().S(`" target="iframe1" class="date date-link" title="`)
    999 //line messages.qtpl:414
   1000 			qw422016.E().S(e.CreatedAt.Format("01-02 15:04:05"))
   1001 //line messages.qtpl:414
   1002 			if *isFirstMsg {
   1003 //line messages.qtpl:414
   1004 				qw422016.N().S(` (`)
   1005 //line messages.qtpl:414
   1006 				qw422016.E().S(humanize.Time(e.CreatedAt))
   1007 //line messages.qtpl:414
   1008 				qw422016.N().S(`)`)
   1009 //line messages.qtpl:414
   1010 			}
   1011 //line messages.qtpl:414
   1012 			qw422016.N().S(`">`)
   1013 //line messages.qtpl:414
   1014 			qw422016.E().S(e.CreatedAt.Format(AuthUser.GetDateFormat()))
   1015 //line messages.qtpl:414
   1016 			qw422016.N().S(`</a>
   1017                 `)
   1018 //line messages.qtpl:415
   1019 			*isFirstMsg = false
   1020 
   1021 //line messages.qtpl:415
   1022 			qw422016.N().S(`
   1023 `)
   1024 //line messages.qtpl:416
   1025 		}
   1026 //line messages.qtpl:416
   1027 		qw422016.N().S(`            <a href="/u/`)
   1028 //line messages.qtpl:417
   1029 		qw422016.E().S(string(e.GetProfile(AuthUser.GetID())))
   1030 //line messages.qtpl:417
   1031 		qw422016.N().S(`" target="_blank" class="f-def-clr">-</a>
   1032 `)
   1033 //line messages.qtpl:418
   1034 		if e.System {
   1035 //line messages.qtpl:418
   1036 			qw422016.N().S(`                <span class="sysmsg">`)
   1037 //line messages.qtpl:419
   1038 			streamunesc(qw422016, e.Message)
   1039 //line messages.qtpl:419
   1040 			qw422016.N().S(`</span>
   1041 `)
   1042 //line messages.qtpl:420
   1043 		} else {
   1044 //line messages.qtpl:421
   1045 			if e.Moderators {
   1046 //line messages.qtpl:421
   1047 				qw422016.N().S(`<span class="sysmsg">[<a href="`)
   1048 //line messages.qtpl:421
   1049 				qw422016.E().S(baseTopBarURL)
   1050 //line messages.qtpl:421
   1051 				qw422016.N().S(`?m=1`)
   1052 //line messages.qtpl:421
   1053 				streamunesc(qw422016, Data.TopBarQueryParams)
   1054 //line messages.qtpl:421
   1055 				qw422016.N().S(`" target="iframe1" class="sysmsg f-white-clr">M</a>]</span>&nbsp;`)
   1056 //line messages.qtpl:421
   1057 			}
   1058 //line messages.qtpl:422
   1059 			if e.GroupID != nil {
   1060 //line messages.qtpl:422
   1061 				qw422016.N().S(`<span class="sysmsg">[<a href="`)
   1062 //line messages.qtpl:422
   1063 				qw422016.E().S(baseTopBarURL)
   1064 //line messages.qtpl:422
   1065 				qw422016.N().S(`?g=`)
   1066 //line messages.qtpl:422
   1067 				qw422016.E().S(e.Group.Name)
   1068 //line messages.qtpl:422
   1069 				streamunesc(qw422016, Data.TopBarQueryParams)
   1070 //line messages.qtpl:422
   1071 				qw422016.N().S(`" target="iframe1" class="sysmsg f-white-clr">`)
   1072 //line messages.qtpl:422
   1073 				qw422016.E().S(e.Group.Name)
   1074 //line messages.qtpl:422
   1075 				qw422016.N().S(`</a>]</span>&nbsp;`)
   1076 //line messages.qtpl:422
   1077 			}
   1078 //line messages.qtpl:423
   1079 			if e.ToUserID != nil {
   1080 //line messages.qtpl:423
   1081 				qw422016.N().S(`                    [`)
   1082 //line messages.qtpl:424
   1083 				streamfromUsername(qw422016, AuthUser, Data, e, baseTopBarURL)
   1084 //line messages.qtpl:424
   1085 				qw422016.N().S(`                    →
   1086 `)
   1087 //line messages.qtpl:426
   1088 				if e.ToUser.ID == AuthUser.GetID() {
   1089 //line messages.qtpl:426
   1090 					qw422016.N().S(`<span `)
   1091 //line messages.qtpl:426
   1092 					streamunesc(qw422016, e.ToUser.GenerateChatStyle())
   1093 //line messages.qtpl:426
   1094 					qw422016.N().S(`>`)
   1095 //line messages.qtpl:426
   1096 					qw422016.E().S(string(e.ToUser.Username))
   1097 //line messages.qtpl:426
   1098 					qw422016.N().S(`</span>`)
   1099 //line messages.qtpl:426
   1100 				} else {
   1101 //line messages.qtpl:426
   1102 					qw422016.N().S(`<a `)
   1103 //line messages.qtpl:426
   1104 					streamunesc(qw422016, e.ToUser.GenerateChatStyle())
   1105 //line messages.qtpl:426
   1106 					qw422016.N().S(` href="`)
   1107 //line messages.qtpl:426
   1108 					qw422016.E().S(baseTopBarURL)
   1109 //line messages.qtpl:426
   1110 					qw422016.N().S(`?pm=`)
   1111 //line messages.qtpl:426
   1112 					qw422016.E().S(string(e.ToUser.Username))
   1113 //line messages.qtpl:426
   1114 					qw422016.E().S(Data.TopBarQueryParams)
   1115 //line messages.qtpl:426
   1116 					qw422016.N().S(`" target="iframe1">`)
   1117 //line messages.qtpl:426
   1118 					qw422016.E().S(string(e.ToUser.Username))
   1119 //line messages.qtpl:426
   1120 					qw422016.N().S(`</a>`)
   1121 //line messages.qtpl:426
   1122 				}
   1123 //line messages.qtpl:426
   1124 				qw422016.N().S(`] -
   1125 `)
   1126 //line messages.qtpl:427
   1127 			} else {
   1128 //line messages.qtpl:428
   1129 				streamfromUsername(qw422016, AuthUser, Data, e, baseTopBarURL)
   1130 //line messages.qtpl:429
   1131 				if !e.IsMe() {
   1132 //line messages.qtpl:430
   1133 					if AuthUser.CanSeeHB() && (e.IsHellbanned || e.User.IsHellbanned) && (e.ToUserID == nil) {
   1134 //line messages.qtpl:430
   1135 						qw422016.N().S(`                            <a href="`)
   1136 //line messages.qtpl:431
   1137 						qw422016.E().S(baseTopBarURL)
   1138 //line messages.qtpl:431
   1139 						qw422016.N().S(`?hbm=1`)
   1140 //line messages.qtpl:431
   1141 						streamunesc(qw422016, Data.TopBarQueryParams)
   1142 //line messages.qtpl:431
   1143 						qw422016.N().S(`" target="iframe1" class="f-def-clr">-</a>
   1144 `)
   1145 //line messages.qtpl:432
   1146 					} else {
   1147 //line messages.qtpl:432
   1148 						qw422016.N().S(`                            -
   1149 `)
   1150 //line messages.qtpl:434
   1151 					}
   1152 //line messages.qtpl:435
   1153 				}
   1154 //line messages.qtpl:436
   1155 			}
   1156 //line messages.qtpl:436
   1157 			qw422016.N().S(`                <span `)
   1158 //line messages.qtpl:437
   1159 			streamunesc(qw422016, e.User.GenerateChatStyle())
   1160 //line messages.qtpl:437
   1161 			qw422016.N().S(`><span class="o-wrap">`)
   1162 //line messages.qtpl:437
   1163 			qw422016.N().S(unesc(e.MsgToDisplay(AuthUser)))
   1164 //line messages.qtpl:437
   1165 			qw422016.N().S(`</span></span>
   1166 `)
   1167 //line messages.qtpl:438
   1168 		}
   1169 //line messages.qtpl:438
   1170 		qw422016.N().S(`        </div>
   1171 `)
   1172 //line messages.qtpl:440
   1173 	}
   1174 //line messages.qtpl:441
   1175 }
   1176 
   1177 //line messages.qtpl:441
   1178 func WriteRenderMessage(qq422016 qtio422016.Writer, idx int, e database.ChatMessage, AuthUser database.IUserRenderMessage,
   1179 	Data ChatMessagesData, baseTopBarURL string, readMarkerRendered, isFirstMsg *bool, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) {
   1180 //line messages.qtpl:441
   1181 	qw422016 := qt422016.AcquireWriter(qq422016)
   1182 //line messages.qtpl:441
   1183 	StreamRenderMessage(qw422016, idx, e, AuthUser, Data, baseTopBarURL, readMarkerRendered, isFirstMsg, CSRF, NullUsername, readMarkerRev, isEdit)
   1184 //line messages.qtpl:441
   1185 	qt422016.ReleaseWriter(qw422016)
   1186 //line messages.qtpl:441
   1187 }
   1188 
   1189 //line messages.qtpl:441
   1190 func RenderMessage(idx int, e database.ChatMessage, AuthUser database.IUserRenderMessage,
   1191 	Data ChatMessagesData, baseTopBarURL string, readMarkerRendered, isFirstMsg *bool, CSRF, NullUsername string, readMarkerRev *int, isEdit bool) string {
   1192 //line messages.qtpl:441
   1193 	qb422016 := qt422016.AcquireByteBuffer()
   1194 //line messages.qtpl:441
   1195 	WriteRenderMessage(qb422016, idx, e, AuthUser, Data, baseTopBarURL, readMarkerRendered, isFirstMsg, CSRF, NullUsername, readMarkerRev, isEdit)
   1196 //line messages.qtpl:441
   1197 	qs422016 := string(qb422016.B)
   1198 //line messages.qtpl:441
   1199 	qt422016.ReleaseByteBuffer(qb422016)
   1200 //line messages.qtpl:441
   1201 	return qs422016
   1202 //line messages.qtpl:441
   1203 }
   1204 
   1205 //line messages.qtpl:444
   1206 func StreamMember(qw422016 *qt422016.Writer, AuthUser *database.User, Data ChatMenuData, El managers.UserInfo) {
   1207 //line messages.qtpl:444
   1208 	qw422016.N().S(`
   1209 `)
   1210 //line messages.qtpl:445
   1211 	baseTopBarURL := "/api/v1/chat/top-bar/" + Data.RoomName
   1212 
   1213 //line messages.qtpl:446
   1214 	if El.Username == AuthUser.GetUsername() {
   1215 //line messages.qtpl:446
   1216 		qw422016.N().S(`        <div>
   1217             <span style="color: `)
   1218 //line messages.qtpl:448
   1219 		qw422016.E().S(El.Color)
   1220 //line messages.qtpl:448
   1221 		qw422016.N().S(`;">`)
   1222 //line messages.qtpl:448
   1223 		qw422016.E().S(string(El.Username))
   1224 //line messages.qtpl:448
   1225 		qw422016.N().S(`</span>
   1226 `)
   1227 //line messages.qtpl:449
   1228 		if El.AfkIndicatorEnabled {
   1229 //line messages.qtpl:449
   1230 			qw422016.N().S(`                <small class="afk-indicator">afk</small>
   1231 `)
   1232 //line messages.qtpl:451
   1233 		}
   1234 //line messages.qtpl:451
   1235 		qw422016.N().S(`        </div>
   1236 `)
   1237 //line messages.qtpl:453
   1238 	} else if len(El.Username) > 0 {
   1239 //line messages.qtpl:454
   1240 		if !El.IsHellbanned || AuthUser.GetID() == El.UserID || (El.IsHellbanned && AuthUser.GetIsHellbanned()) || AuthUser.GetDisplayHellbanned() {
   1241 //line messages.qtpl:454
   1242 			qw422016.N().S(`            <div>
   1243 `)
   1244 //line messages.qtpl:456
   1245 			tagType := "tag"
   1246 
   1247 //line messages.qtpl:457
   1248 			if AuthUser.CanSeeHB() && El.IsHellbanned {
   1249 //line messages.qtpl:458
   1250 				tagType = "htag"
   1251 
   1252 //line messages.qtpl:459
   1253 			}
   1254 //line messages.qtpl:460
   1255 			qw422016.N().S(`<a href="`)
   1256 //line messages.qtpl:461
   1257 			qw422016.E().S(baseTopBarURL)
   1258 //line messages.qtpl:461
   1259 			qw422016.N().S(`?`)
   1260 //line messages.qtpl:461
   1261 			qw422016.E().S(tagType)
   1262 //line messages.qtpl:461
   1263 			qw422016.N().S(`=`)
   1264 //line messages.qtpl:461
   1265 			qw422016.E().S(string(El.Username))
   1266 //line messages.qtpl:461
   1267 			streamunesc(qw422016, Data.TopBarQueryParams)
   1268 //line messages.qtpl:461
   1269 			qw422016.N().S(`"target="iframe1"`)
   1270 //line messages.qtpl:463
   1271 			if El.IsHellbanned && AuthUser.GetDisplayHellbanned() {
   1272 //line messages.qtpl:463
   1273 				qw422016.N().S(`class="hb-row"`)
   1274 //line messages.qtpl:463
   1275 			}
   1276 //line messages.qtpl:463
   1277 			qw422016.N().S(`style="color:`)
   1278 //line messages.qtpl:464
   1279 			qw422016.E().S(El.Color)
   1280 //line messages.qtpl:464
   1281 			qw422016.N().S(`;">`)
   1282 //line messages.qtpl:464
   1283 			qw422016.E().S(string(El.Username[0]))
   1284 //line messages.qtpl:464
   1285 			qw422016.N().S(`</a><a href="`)
   1286 //line messages.qtpl:465
   1287 			qw422016.E().S(baseTopBarURL)
   1288 //line messages.qtpl:465
   1289 			qw422016.N().S(`?pm=`)
   1290 //line messages.qtpl:465
   1291 			qw422016.E().S(string(El.Username))
   1292 //line messages.qtpl:465
   1293 			streamunesc(qw422016, Data.TopBarQueryParams)
   1294 //line messages.qtpl:465
   1295 			qw422016.N().S(`"target="iframe1"`)
   1296 //line messages.qtpl:467
   1297 			if El.IsHellbanned && AuthUser.GetDisplayHellbanned() {
   1298 //line messages.qtpl:467
   1299 				qw422016.N().S(`class="hb-row"`)
   1300 //line messages.qtpl:467
   1301 			}
   1302 //line messages.qtpl:467
   1303 			qw422016.N().S(`style="color:`)
   1304 //line messages.qtpl:468
   1305 			qw422016.E().S(El.Color)
   1306 //line messages.qtpl:468
   1307 			qw422016.N().S(`;">`)
   1308 //line messages.qtpl:468
   1309 			qw422016.E().S(string(El.Username[1 : len(El.Username)-1]))
   1310 //line messages.qtpl:468
   1311 			qw422016.N().S(`</a><a href="/u/`)
   1312 //line messages.qtpl:469
   1313 			qw422016.E().S(string(El.Username))
   1314 //line messages.qtpl:469
   1315 			qw422016.N().S(`"rel="noopener noreferrer" target="_blank"`)
   1316 //line messages.qtpl:471
   1317 			if El.IsHellbanned && AuthUser.GetDisplayHellbanned() {
   1318 //line messages.qtpl:471
   1319 				qw422016.N().S(`class="hb-row"`)
   1320 //line messages.qtpl:471
   1321 			}
   1322 //line messages.qtpl:471
   1323 			qw422016.N().S(`style="color:`)
   1324 //line messages.qtpl:472
   1325 			qw422016.E().S(El.Color)
   1326 //line messages.qtpl:472
   1327 			qw422016.N().S(`;">`)
   1328 //line messages.qtpl:472
   1329 			qw422016.E().S(string(El.Username[len(El.Username)-1]))
   1330 //line messages.qtpl:472
   1331 			qw422016.N().S(`</a>`)
   1332 //line messages.qtpl:474
   1333 			if El.AfkIndicatorEnabled {
   1334 //line messages.qtpl:474
   1335 				qw422016.N().S(`                    <small class="afk-indicator">afk</small>
   1336 `)
   1337 //line messages.qtpl:476
   1338 			}
   1339 //line messages.qtpl:476
   1340 			qw422016.N().S(`            </div>
   1341 `)
   1342 //line messages.qtpl:478
   1343 		}
   1344 //line messages.qtpl:479
   1345 	}
   1346 //line messages.qtpl:480
   1347 }
   1348 
   1349 //line messages.qtpl:480
   1350 func WriteMember(qq422016 qtio422016.Writer, AuthUser *database.User, Data ChatMenuData, El managers.UserInfo) {
   1351 //line messages.qtpl:480
   1352 	qw422016 := qt422016.AcquireWriter(qq422016)
   1353 //line messages.qtpl:480
   1354 	StreamMember(qw422016, AuthUser, Data, El)
   1355 //line messages.qtpl:480
   1356 	qt422016.ReleaseWriter(qw422016)
   1357 //line messages.qtpl:480
   1358 }
   1359 
   1360 //line messages.qtpl:480
   1361 func Member(AuthUser *database.User, Data ChatMenuData, El managers.UserInfo) string {
   1362 //line messages.qtpl:480
   1363 	qb422016 := qt422016.AcquireByteBuffer()
   1364 //line messages.qtpl:480
   1365 	WriteMember(qb422016, AuthUser, Data, El)
   1366 //line messages.qtpl:480
   1367 	qs422016 := string(qb422016.B)
   1368 //line messages.qtpl:480
   1369 	qt422016.ReleaseByteBuffer(qb422016)
   1370 //line messages.qtpl:480
   1371 	return qs422016
   1372 //line messages.qtpl:480
   1373 }
   1374 
   1375 //line messages.qtpl:483
   1376 func streamfromUsername(qw422016 *qt422016.Writer, AuthUser database.IUserRenderMessage, Data ChatMessagesData, El database.ChatMessage, baseTopBarURL string) {
   1377 //line messages.qtpl:484
   1378 	tagType := "tag"
   1379 
   1380 //line messages.qtpl:485
   1381 	if El.ToUserID != nil {
   1382 //line messages.qtpl:486
   1383 		tagType = "pm"
   1384 
   1385 //line messages.qtpl:487
   1386 	} else if AuthUser.CanSeeHB() && (El.IsHellbanned || El.User.IsHellbanned) {
   1387 //line messages.qtpl:488
   1388 		tagType = "htag"
   1389 
   1390 //line messages.qtpl:489
   1391 	} else if AuthUser.IsModerator() && El.Moderators {
   1392 //line messages.qtpl:490
   1393 		tagType = "mtag"
   1394 
   1395 //line messages.qtpl:491
   1396 	}
   1397 //line messages.qtpl:492
   1398 	if El.User.ID == AuthUser.GetID() {
   1399 //line messages.qtpl:493
   1400 		if El.CanBeEdited() {
   1401 //line messages.qtpl:493
   1402 			qw422016.N().S(`<a `)
   1403 //line messages.qtpl:493
   1404 			streamunesc(qw422016, El.User.GenerateChatStyle())
   1405 //line messages.qtpl:493
   1406 			qw422016.N().S(` href="`)
   1407 //line messages.qtpl:493
   1408 			qw422016.E().S(baseTopBarURL)
   1409 //line messages.qtpl:493
   1410 			qw422016.N().S(`?e=`)
   1411 //line messages.qtpl:493
   1412 			qw422016.E().S(El.CreatedAt.Format("15:04:05"))
   1413 //line messages.qtpl:493
   1414 			streamunesc(qw422016, Data.TopBarQueryParams)
   1415 //line messages.qtpl:493
   1416 			qw422016.N().S(`" target="iframe1">`)
   1417 //line messages.qtpl:493
   1418 			qw422016.E().S(string(El.User.Username))
   1419 //line messages.qtpl:493
   1420 			qw422016.N().S(`</a>`)
   1421 //line messages.qtpl:493
   1422 		} else {
   1423 //line messages.qtpl:493
   1424 			qw422016.N().S(`<span `)
   1425 //line messages.qtpl:493
   1426 			streamunesc(qw422016, El.User.GenerateChatStyle())
   1427 //line messages.qtpl:493
   1428 			qw422016.N().S(`>`)
   1429 //line messages.qtpl:493
   1430 			qw422016.E().S(string(El.User.Username))
   1431 //line messages.qtpl:493
   1432 			qw422016.N().S(`</span>`)
   1433 //line messages.qtpl:493
   1434 		}
   1435 //line messages.qtpl:494
   1436 	} else {
   1437 //line messages.qtpl:494
   1438 		qw422016.N().S(`<a `)
   1439 //line messages.qtpl:494
   1440 		streamunesc(qw422016, El.User.GenerateChatStyle())
   1441 //line messages.qtpl:494
   1442 		qw422016.N().S(` href="`)
   1443 //line messages.qtpl:494
   1444 		qw422016.E().S(baseTopBarURL)
   1445 //line messages.qtpl:494
   1446 		qw422016.N().S(`?`)
   1447 //line messages.qtpl:494
   1448 		qw422016.E().S(tagType)
   1449 //line messages.qtpl:494
   1450 		qw422016.N().S(`=`)
   1451 //line messages.qtpl:494
   1452 		qw422016.E().S(string(El.User.Username))
   1453 //line messages.qtpl:494
   1454 		streamunesc(qw422016, Data.TopBarQueryParams)
   1455 //line messages.qtpl:494
   1456 		qw422016.N().S(`" target="iframe1">`)
   1457 //line messages.qtpl:494
   1458 		qw422016.E().S(string(El.User.Username))
   1459 //line messages.qtpl:494
   1460 		qw422016.N().S(`</a>`)
   1461 //line messages.qtpl:494
   1462 	}
   1463 //line messages.qtpl:495
   1464 }
   1465 
   1466 //line messages.qtpl:495
   1467 func writefromUsername(qq422016 qtio422016.Writer, AuthUser database.IUserRenderMessage, Data ChatMessagesData, El database.ChatMessage, baseTopBarURL string) {
   1468 //line messages.qtpl:495
   1469 	qw422016 := qt422016.AcquireWriter(qq422016)
   1470 //line messages.qtpl:495
   1471 	streamfromUsername(qw422016, AuthUser, Data, El, baseTopBarURL)
   1472 //line messages.qtpl:495
   1473 	qt422016.ReleaseWriter(qw422016)
   1474 //line messages.qtpl:495
   1475 }
   1476 
   1477 //line messages.qtpl:495
   1478 func fromUsername(AuthUser database.IUserRenderMessage, Data ChatMessagesData, El database.ChatMessage, baseTopBarURL string) string {
   1479 //line messages.qtpl:495
   1480 	qb422016 := qt422016.AcquireByteBuffer()
   1481 //line messages.qtpl:495
   1482 	writefromUsername(qb422016, AuthUser, Data, El, baseTopBarURL)
   1483 //line messages.qtpl:495
   1484 	qs422016 := string(qb422016.B)
   1485 //line messages.qtpl:495
   1486 	qt422016.ReleaseByteBuffer(qb422016)
   1487 //line messages.qtpl:495
   1488 	return qs422016
   1489 //line messages.qtpl:495
   1490 }