Bans, ban, boardlist, catalog, changepassword, create, +mixins/include + some fixes

indiachan-spamvector
Thomas Lynch 1 year ago
parent c04f9d90dd
commit 64290c57dd
  1. 70
      locales/en.json
  2. 68
      locales/pt.json
  3. 6
      views/includes/banform.pug
  4. 26
      views/includes/bantable.pug
  5. 20
      views/includes/managebanform.pug
  6. 14
      views/mixins/ban.pug
  7. 16
      views/mixins/boardtable.pug
  8. 6
      views/pages/ban.pug
  9. 2
      views/pages/board.pug
  10. 30
      views/pages/boardlist.pug
  11. 4
      views/pages/catalog.pug
  12. 22
      views/pages/changepassword.pug
  13. 18
      views/pages/create.pug

@ -67,27 +67,40 @@
"one": "%s year from now", "one": "%s year from now",
"other": "%s years from now" "other": "%s years from now"
}, },
"2FA Code": "2FA Code",
"Account": "Account", "Account": "Account",
"Accounts": "Accounts", "Accounts": "Accounts",
"Actions": "Actions", "Actions": "Actions",
"Active sessions": "Active sessions", "Active sessions": "Active sessions",
"alphanumeric only": "alphanumeric only",
"Appeal": "Appeal",
"Appealable?": "Appealable?",
"Archive": "Archive", "Archive": "Archive",
"Ascending": "Ascending",
"Ban duration e.g. 7d": "Ban duration e.g. 7d", "Ban duration e.g. 7d": "Ban duration e.g. 7d",
"Ban Poster": "Ban Poster", "Ban Poster": "Ban Poster",
"Ban reason": "Ban reason", "Ban reason": "Ban reason",
"Ban Reporters": "Ban Reporters", "Ban Reporters": "Ban Reporters",
"Banned!": "Banned!",
"Banners": "Banners", "Banners": "Banners",
"Bans": "Bans", "Bans": "Bans",
"Bans currently in place against your IP": "Bans currently in place against your IP",
"Block Bypass": "Block Bypass", "Block Bypass": "Block Bypass",
"Board": "Board", "Board": "Board",
"Board List": "Board List",
"Boards": "Boards", "Boards": "Boards",
"Boards you are staff on": "Boards you are staff on", "Boards you are staff on": "Boards you are staff on",
"Boards you own": "Boards you own", "Boards you own": "Boards you own",
"Bump Order": "Bump Order", "Bump Order": "Bump Order",
"Bypass": "Bypass",
"Captcha text": "Captcha text", "Captcha text": "Captcha text",
"Catalog": "Catalog", "Catalog": "Catalog",
"Change password": "Change password", "Change password": "Change password",
"Change Password": "Change Password",
"Confirm New Password": "Confirm New Password",
"Create": "Create",
"Create a board": "Create a board", "Create a board": "Create a board",
"Create Board": "Create Board",
"Creation Date": "Creation Date", "Creation Date": "Creation Date",
"Custom Pages": "Custom Pages", "Custom Pages": "Custom Pages",
"Delete": "Delete", "Delete": "Delete",
@ -97,6 +110,9 @@
"Delete from IP on board": "Delete from IP on board", "Delete from IP on board": "Delete from IP on board",
"Delete Posts": "Delete Posts", "Delete Posts": "Delete Posts",
"Delete your account": "Delete your account", "Delete your account": "Delete your account",
"Deny Appeal": "Deny Appeal",
"Descending": "Descending",
"Description": "Description",
"Dismiss Global Reports": "Dismiss Global Reports", "Dismiss Global Reports": "Dismiss Global Reports",
"Dismiss Reports": "Dismiss Reports", "Dismiss Reports": "Dismiss Reports",
"Double click to highlight (%s)": { "Double click to highlight (%s)": {
@ -107,8 +123,12 @@
}, },
"Draw": "Draw", "Draw": "Draw",
"Edit": "Edit", "Edit": "Edit",
"Edit Duration": "Edit Duration",
"Edit Note": "Edit Note",
"Edit Post": "Edit Post", "Edit Post": "Edit Post",
"Email": "Email", "Email": "Email",
"Existing Password": "Existing Password",
"Expiry": "Expiry",
"Files": { "Files": {
"one": "File", "one": "File",
"other": "Files" "other": "Files"
@ -122,18 +142,30 @@
"focus to load captcha": "focus to load captcha", "focus to load captcha": "focus to load captcha",
"General": "General", "General": "General",
"Geographic Flag": "Geographic Flag", "Geographic Flag": "Geographic Flag",
"Global": "Global",
"Global Ban Poster": "Global Ban Poster", "Global Ban Poster": "Global Ban Poster",
"Global Ban Reporters": "Global Ban Reporters", "Global Ban Reporters": "Global Ban Reporters",
"Global management": "Global management", "Global management": "Global management",
"Global Report": "Global Report", "Global Report": "Global Report",
"Global Settings": "Global Settings", "Global Settings": "Global Settings",
"Hidden User": "Hidden User",
"Hide": "Hide", "Hide": "Hide",
"Hide Username In Modlog": "Hide Username In Modlog", "Hide Username In Modlog": "Hide Username In Modlog",
"Home": "Home", "Home": "Home",
"Hover to view": "Hover to view",
"I'm sure": "I'm sure", "I'm sure": "I'm sure",
"if enabled": "if enabled",
"Index": "Index", "Index": "Index",
"IP/ID": "IP/ID",
"IPV4": "IPV4",
"IPV6": "IPV6",
"Issue Date": "Issue Date",
"Issuer": "Issuer",
"Latest Activity": "Latest Activity",
"loading": "loading", "loading": "loading",
"Local First": "Local First",
"Log out": "Log out", "Log out": "Log out",
"Login": "Login",
"Logs": "Logs", "Logs": "Logs",
"Manage": "Manage", "Manage": "Manage",
"Max %s files": { "Max %s files": {
@ -148,17 +180,26 @@
"Move": "Move", "Move": "Move",
"My permissions": "My permissions", "My permissions": "My permissions",
"Name": "Name", "Name": "Name",
"Narrow": "Narrow",
"Narrow Range": "Narrow Range", "Narrow Range": "Narrow Range",
"New Password": "New Password",
"New Reply": "New Reply", "New Reply": "New Reply",
"New Thread": "New Thread", "New Thread": "New Thread",
"Newline separated, max 10": "Newline separated, max 10",
"News": "News", "News": "News",
"No posts.": "Sem publicações.", "No appeal submitted": "No appeal submitted",
"No bans.": "No bans.",
"No posts.": "No posts.",
"No video/audio files in this thread.": "No video/audio files in this thread.", "No video/audio files in this thread.": "No video/audio files in this thread.",
"Non-appealable Ban": "Non-appealable Ban", "Non-appealable Ban": "Non-appealable Ban",
"None": "None", "None": "None",
"Not Shown": "Not Shown",
"Note": "Note",
"Nothing": "None", "Nothing": "None",
"Now": "Now", "Now": "Now",
"Order": "Order",
"Overboard": "Overboard", "Overboard": "Overboard",
"Owner": "Owner",
"Page": "Page", "Page": "Page",
"Page %s": { "Page %s": {
"other": "Page %s" "other": "Page %s"
@ -167,8 +208,18 @@
"Payload Too Large": "Payload Too Large", "Payload Too Large": "Payload Too Large",
"Playlist": "Playlist", "Playlist": "Playlist",
"Please enable JavaScript to solve the captcha.": "Please enable JavaScript to solve the captcha.", "Please enable JavaScript to solve the captcha.": "Please enable JavaScript to solve the captcha.",
"Popularity": "Popularity",
"Post(s)": "Post(s)",
"Posts": "Posts",
"Posts must include a message or file": "Posts must include a message or file", "Posts must include a message or file": "Posts must include a message or file",
"Posts not shown": "Posts not shown",
"PPD": "PPD",
"PPH": "PPH",
"Pruned IP": "Pruned IP",
"Range": "Range",
"Reason": "Reason",
"Recent": "Recent", "Recent": "Recent",
"Register": "Register",
"Register an account": "Register an account", "Register an account": "Register an account",
"Replayable?": "Replayable?", "Replayable?": "Replayable?",
"Replies": { "Replies": {
@ -184,15 +235,21 @@
"Reverse": "Reverse", "Reverse": "Reverse",
"Reverse Image Search": "Reverse Image Search", "Reverse Image Search": "Reverse Image Search",
"Roles": "Roles", "Roles": "Roles",
"Search": "Search",
"Seen?": "Visto?",
"Select/Drop/Paste files": { "Select/Drop/Paste files": {
"one": "Select/Drop/Paste file", "one": "Select/Drop/Paste file",
"other": "Select/Drop/Paste files" "other": "Select/Drop/Paste files"
}, },
"Settings": "Settings", "Settings": "Settings",
"Setup 2FA (TOTP)": "Setup 2FA (TOTP)", "Setup 2FA (TOTP)": "Setup 2FA (TOTP)",
"SFW": "SFW",
"Show": "Show", "Show": "Show",
"Show Post Actions": "Show Post Actions", "Show Post Actions": "Show Post Actions",
"Show Post In Ban": "Show Post In Ban", "Show Post In Ban": "Show Post In Ban",
"Shown": "Shown",
"Single": "Single",
"Sort": "Sort",
"Sort By": "Sort By", "Sort By": "Sort By",
"Spoiler": "Spoiler", "Spoiler": "Spoiler",
"Spoiler File": "Spoiler File", "Spoiler File": "Spoiler File",
@ -202,6 +259,7 @@
"Strip Filename": "Strip Filename", "Strip Filename": "Strip Filename",
"Subject": "Subject", "Subject": "Subject",
"Submit": "Submit", "Submit": "Submit",
"Tags": "Tags",
"Tegaki": "Tegaki", "Tegaki": "Tegaki",
"Thread No.": "Thread No.", "Thread No.": "Thread No.",
"Thread Watcher": "Thread Watcher", "Thread Watcher": "Thread Watcher",
@ -209,12 +267,20 @@
"Toggle Cycle": "Toggle Cycle", "Toggle Cycle": "Toggle Cycle",
"Toggle Lock": "Toggle Lock", "Toggle Lock": "Toggle Lock",
"total": "total", "total": "total",
"Type": "Type",
"Unban": "Unban",
"Unlink Files": "Unlink Files", "Unlink Files": "Unlink Files",
"Upgrade Ban": "Upgrade Ban",
"URI e.g. /uri/": "URI e.g. /uri/",
"Username": "Username",
"Users": "Users",
"Watch": "Watch", "Watch": "Watch",
"Webring": "Webring",
"Welcome": "Welcome", "Welcome": "Welcome",
"Wide": "Wide",
"Wide Range": "Wide Range", "Wide Range": "Wide Range",
"You": "You", "You": "You",
"You moderate": "You moderate", "You moderate": "You moderate",
"You own": "You own", "You own": "You own",
"Your upload was too large": "Your upload was too large" "Your upload was too large": "Your upload was too large"
} }

@ -67,27 +67,40 @@
"one": "%s ano desde agora", "one": "%s ano desde agora",
"other": "%s anos desde agora" "other": "%s anos desde agora"
}, },
"2FA Code": "2FA Code",
"Account": "Conta", "Account": "Conta",
"Accounts": "Contas", "Accounts": "Contas",
"Actions": "Ações", "Actions": "Ações",
"Active sessions": "Sessões ativas", "Active sessions": "Sessões ativas",
"alphanumeric only": "Alfanumérico apenas",
"Appeal": "Recurso",
"Appealable?": "Recurso?",
"Archive": "Arquivo", "Archive": "Arquivo",
"Ascending": "Ascendente",
"Ban duration e.g. 7d": "Duração do ban e.g. 7d", "Ban duration e.g. 7d": "Duração do ban e.g. 7d",
"Ban Poster": "Banir Utilizador", "Ban Poster": "Banir Utilizador",
"Ban reason": "Motivodo do Ban", "Ban reason": "Motivodo do Ban",
"Ban Reporters": "Banir Denunciantes", "Ban Reporters": "Banir Denunciantes",
"Banned!": "Banned!",
"Banners": "Banners", "Banners": "Banners",
"Bans": "Bans", "Bans": "Bans",
"Bans currently in place against your IP": "Bans colocados no teu IP",
"Block Bypass": "Bypass", "Block Bypass": "Bypass",
"Board": "Tábua", "Board": "Tábua",
"Board List": "Tábuas",
"Boards": "Tábuas", "Boards": "Tábuas",
"Boards you are staff on": "Tábuas em que fazes parte do staff", "Boards you are staff on": "Tábuas em que fazes parte do staff",
"Boards you own": "Administrador das tábuas", "Boards you own": "Administrador das tábuas",
"Bump Order": "Bump", "Bump Order": "Bump",
"Bypass": "Bypass",
"Captcha text": "Código captcha", "Captcha text": "Código captcha",
"Catalog": "Catálogo", "Catalog": "Catálogo",
"Change password": "Alterar password", "Change password": "Alterar password",
"Change Password": "Change Password",
"Confirm New Password": "Confirm New Password",
"Create": "Criar",
"Create a board": "Criar tábua", "Create a board": "Criar tábua",
"Create Board": "Criar Tábua",
"Creation Date": "Criação", "Creation Date": "Criação",
"Custom Pages": "Páginas", "Custom Pages": "Páginas",
"Delete": "Apagar", "Delete": "Apagar",
@ -97,6 +110,9 @@
"Delete from IP on board": "Apagar do IP na Tábua", "Delete from IP on board": "Apagar do IP na Tábua",
"Delete Posts": "Apagar Publicação", "Delete Posts": "Apagar Publicação",
"Delete your account": "Apagar conta", "Delete your account": "Apagar conta",
"Deny Appeal": "Negar Recurso",
"Descending": "Descendente",
"Description": "Descrição",
"Dismiss Global Reports": "Dismiss Global Reports", "Dismiss Global Reports": "Dismiss Global Reports",
"Dismiss Reports": "Dismiss Denúncias", "Dismiss Reports": "Dismiss Denúncias",
"Double click to highlight (%s)": { "Double click to highlight (%s)": {
@ -107,8 +123,12 @@
}, },
"Draw": "Desenhar", "Draw": "Desenhar",
"Edit": "Editar", "Edit": "Editar",
"Edit Duration": "Alterar Duração",
"Edit Note": "Editar Nota",
"Edit Post": "Editar Publicação", "Edit Post": "Editar Publicação",
"Email": "Opção", "Email": "Opção",
"Existing Password": "Existing Password",
"Expiry": "Expira",
"Files": { "Files": {
"one": "Ficheiro", "one": "Ficheiro",
"other": "Ficheiros" "other": "Ficheiros"
@ -122,18 +142,30 @@
"focus to load captcha": "Seleciona para carregar captcha", "focus to load captcha": "Seleciona para carregar captcha",
"General": "Geral", "General": "Geral",
"Geographic Flag": "Bandeira Geográfica", "Geographic Flag": "Bandeira Geográfica",
"Global": "Global",
"Global Ban Poster": "Banir Globalmente Utilizador", "Global Ban Poster": "Banir Globalmente Utilizador",
"Global Ban Reporters": "Global Ban Reporters", "Global Ban Reporters": "Global Ban Reporters",
"Global management": "Global management", "Global management": "Global management",
"Global Report": "Denúncia Global", "Global Report": "Denúncia Global",
"Global Settings": "Opções Globais", "Global Settings": "Opções Globais",
"Hidden User": "Esconder",
"Hide": "Esconder", "Hide": "Esconder",
"Hide Username In Modlog": "Esconder Username", "Hide Username In Modlog": "Esconder Username",
"Home": "Início", "Home": "Início",
"Hover to view": "Hover to view",
"I'm sure": "Tenho a certeza", "I'm sure": "Tenho a certeza",
"if enabled": "opcional, se ativo",
"Index": "Index", "Index": "Index",
"IP/ID": "IP/ID",
"IPV4": "IPV4",
"IPV6": "IPV6",
"Issue Date": "Data",
"Issuer": "Autor",
"Latest Activity": "Última Atividade",
"loading": "loading", "loading": "loading",
"Local First": "Locais Primeiro",
"Log out": "Log out", "Log out": "Log out",
"Login": "Entrar",
"Logs": "Logs", "Logs": "Logs",
"Manage": "Gerir", "Manage": "Gerir",
"Max %s files": { "Max %s files": {
@ -148,17 +180,26 @@
"Move": "Move", "Move": "Move",
"My permissions": "Minhas permissões", "My permissions": "Minhas permissões",
"Name": "Nome", "Name": "Nome",
"Narrow": "Curto",
"Narrow Range": "Range Curto", "Narrow Range": "Range Curto",
"New Password": "New Password",
"New Reply": "Nova Resposta", "New Reply": "Nova Resposta",
"New Thread": "Novo Fio", "New Thread": "Novo Fio",
"Newline separated, max 10": "Separadas por nova linha, máx 10",
"News": "Notícias", "News": "Notícias",
"No appeal submitted": "Sem recurso enviado",
"No bans.": "Sem bans.",
"No posts.": "Sem publicações.", "No posts.": "Sem publicações.",
"No video/audio files in this thread.": "No video/audio files in this thread.", "No video/audio files in this thread.": "No video/audio files in this thread.",
"Non-appealable Ban": "Ban sem Recurso", "Non-appealable Ban": "Ban sem Recurso",
"None": "Nada", "None": "Nada",
"Not Shown": "Not Shown",
"Note": "Nota",
"Nothing": "Nenhuma", "Nothing": "Nenhuma",
"Now": "Agora", "Now": "Agora",
"Order": "Ordem",
"Overboard": "Tudo", "Overboard": "Tudo",
"Owner": "Admin",
"Page": "Página", "Page": "Página",
"Page %s": { "Page %s": {
"other": "Página %s" "other": "Página %s"
@ -167,8 +208,18 @@
"Payload Too Large": "Payload Too Large", "Payload Too Large": "Payload Too Large",
"Playlist": "Playlist", "Playlist": "Playlist",
"Please enable JavaScript to solve the captcha.": "Necessita JavaScript.", "Please enable JavaScript to solve the captcha.": "Necessita JavaScript.",
"Popularity": "Popularidade",
"Post(s)": "Publicação",
"Posts": "Publicações",
"Posts must include a message or file": "Posts must include a message or file", "Posts must include a message or file": "Posts must include a message or file",
"Posts not shown": "Posts sem",
"PPD": "PPD",
"PPH": "PPH",
"Pruned IP": "IP Removido",
"Range": "Range",
"Reason": "Motivo",
"Recent": "Recentes", "Recent": "Recentes",
"Register": "Registar",
"Register an account": "Registar conta", "Register an account": "Registar conta",
"Replayable?": "Replay?", "Replayable?": "Replay?",
"Replies": { "Replies": {
@ -184,16 +235,22 @@
"Reverse": "ImgOps", "Reverse": "ImgOps",
"Reverse Image Search": "Procura reversa de imagem", "Reverse Image Search": "Procura reversa de imagem",
"Roles": "Permissões", "Roles": "Permissões",
"Search": "Procurar",
"Seen?": "Visto?",
"Select/Drop/Paste files": { "Select/Drop/Paste files": {
"one": "Seleciona/Arrasta/Cola ficheiro", "one": "Seleciona/Arrasta/Cola ficheiro",
"other": "Seleciona/Arrasta/Cola ficheiros" "other": "Seleciona/Arrasta/Cola ficheiros"
}, },
"Settings": "Opções", "Settings": "Opções",
"Setup 2FA (TOTP)": "Configurar 2FA (TOTP)", "Setup 2FA (TOTP)": "Configurar 2FA (TOTP)",
"SFW": "SFW",
"Show": "Mostrar", "Show": "Mostrar",
"Show Post Actions": "Denunciar/Moderar", "Show Post Actions": "Denunciar/Moderar",
"Show Post In Ban": "Mostrar Publicação no Ban", "Show Post In Ban": "Mostrar Publicação no Ban",
"Sort By": "Ordenar", "Shown": "Shown",
"Single": "Único",
"Sort": "Ordenar",
"Sort By": "Ordem",
"Spoiler": "Spoiler", "Spoiler": "Spoiler",
"Spoiler File": "Spoiler Ficheiro", "Spoiler File": "Spoiler Ficheiro",
"Spoiler Files": "Spoiler Ficheiros", "Spoiler Files": "Spoiler Ficheiros",
@ -202,6 +259,7 @@
"Strip Filename": "Limpar Nome", "Strip Filename": "Limpar Nome",
"Subject": "Assunto", "Subject": "Assunto",
"Submit": "Enviar", "Submit": "Enviar",
"Tags": "Tags",
"Tegaki": "Tegaki", "Tegaki": "Tegaki",
"Thread No.": "Fio n.º", "Thread No.": "Fio n.º",
"Thread Watcher": "Favoritos", "Thread Watcher": "Favoritos",
@ -209,9 +267,17 @@
"Toggle Cycle": "Toggle Cycle", "Toggle Cycle": "Toggle Cycle",
"Toggle Lock": "Trancar", "Toggle Lock": "Trancar",
"total": "total", "total": "total",
"Type": "Tipo",
"Unban": "Remover Ban",
"Unlink Files": "Unlink Ficheiros", "Unlink Files": "Unlink Ficheiros",
"Upgrade Ban": "Alterar Range",
"URI e.g. /uri/": "URI e.g. /uri/",
"Username": "Username",
"Users": "Utilizadores",
"Watch": "+Favorito", "Watch": "+Favorito",
"Webring": "Webring",
"Welcome": "Bem-vindo", "Welcome": "Bem-vindo",
"Wide": "Longo",
"Wide Range": "Range Longo", "Wide Range": "Range Longo",
"You": "You", "You": "You",
"You moderate": "Que moderas", "You moderate": "Que moderas",

@ -4,14 +4,14 @@ form.form-post(action=`/forms/appeal`, enctype='application/x-www-form-urlencode
+ban(ban, true) +ban(ban, true)
- const allowAppeal = bans.filter(ban => ban.allowAppeal === true && !ban.appeal).length > 0; - const allowAppeal = bans.filter(ban => ban.allowAppeal === true && !ban.appeal).length > 0;
if allowAppeal === true if allowAppeal === true
h4.no-m-p Appeal: h4.no-m-p #{__('Appeal')}:
.form-wrapper.flexleft.mt-10 .form-wrapper.flexleft.mt-10
input(type='hidden' name='_csrf' value=csrf) input(type='hidden' name='_csrf' value=csrf)
.row .row
.label Message .label #{__('Message')}
textarea(rows='5' name='message' required) textarea(rows='5' name='message' required)
if captchaOptions.type === 'text' if captchaOptions.type === 'text'
include ./captchasidelabel.pug include ./captchasidelabel.pug
else else
include ./captchafieldrow.pug include ./captchafieldrow.pug
input(type='submit', value='Submit') input(type='submit', value=__('Submit'))

@ -2,16 +2,16 @@
table.bantable table.bantable
tr tr
th th
th Board th #{__('Board')}
th Reason th #{__('Reason')}
th IP/ID th #{__('IP/ID')}
th Type th #{__('Type')}
th Range th #{__('Range')}
th Issuer th #{__('Issuer')}
th Issue Date th #{__('Issue Date')}
th Expiry th #{__('Expiry')}
th Post(s) th #{__('Post(s)')}
th Seen? th #{__('Seen?')}
th Appealable? th #{__('Appealable?')}
th Appeal th #{__('Appeal')}
th Note th #{__('Note')}

@ -1,5 +1,5 @@
if bans.length === 0 if bans.length === 0
p No bans. p #{__('No bans.')}
else else
input(type='hidden' name='_csrf' value=csrf) input(type='hidden' name='_csrf' value=csrf)
include ../includes/bantable.pug include ../includes/bantable.pug
@ -7,30 +7,30 @@ else
+ban(ban) +ban(ban)
.action-wrapper.mv-10 .action-wrapper.mv-10
.row .row
.label Unban .label #{__('Unban')}
label.postform-style.ph-5 label.postform-style.ph-5
input(type='radio' name='option' value='unban' checked='checked') input(type='radio' name='option' value='unban' checked='checked')
.row .row
.label Deny Appeal .label #{__('Deny Appeal')}
label.postform-style.ph-5 label.postform-style.ph-5
input(type='radio' name='option' value='deny_appeal') input(type='radio' name='option' value='deny_appeal')
.row .row
.label Upgrade Ban .label #{__('Upgrade Ban')}
label.postform-style.ph-5.mr-1 label.postform-style.ph-5.mr-1
input(type='radio' name='option' value='upgrade') input(type='radio' name='option' value='upgrade')
select(name='upgrade') select(name='upgrade')
option(value='') option(value='')
option(value='1') Narrow Range option(value='1') #{__('Narrow Range')}
option(value='2') Wide Range option(value='2') #{__('Wide Range')}
.row .row
.label Edit Duration .label #{__('Edit Duration')}
label.postform-style.ph-5.mr-1 label.postform-style.ph-5.mr-1
input(type='radio' name='option' value='edit_duration') input(type='radio' name='option' value='edit_duration')
input(type='text' name='ban_duration' placeholder='Ban duration e.g. 7d' autocomplete='off') input(type='text' name='ban_duration' placeholder=__('Ban duration e.g. 7d') autocomplete='off')
.row .row
.label Edit Note .label #{__('Edit Note')}
label.postform-style.ph-5.mr-1 label.postform-style.ph-5.mr-1
input(type='radio' name='option' value='edit_note') input(type='radio' name='option' value='edit_note')
input(type='text' name='ban_note') input(type='text' name='ban_note')
input(type='submit' value='Submit') input(type='submit' value=__('Submit'))

@ -9,28 +9,28 @@ mixin ban(ban, banpage)
if ban.board if ban.board
a(href=`/${ban.board}/`) /#{ban.board}/ a(href=`/${ban.board}/`) /#{ban.board}/
else else
| Global | #{__('Global')}
td= ban.reason td= ban.reason
- const ip = viewRawIp === true ? ban.ip.raw : ban.ip.cloak; - const ip = viewRawIp === true ? ban.ip.raw : ban.ip.cloak;
if viewRawIp === true if viewRawIp === true
td #{ip} td #{ip}
else else
td #{ip}#{'.*'.repeat(ban.range)} td #{ip}#{'.*'.repeat(ban.range)}
td #{['IPV4', 'IPV6', 'Bypass', 'Pruned IP'][ban.ip.type]} td #{__(['IPV4', 'IPV6', 'Bypass', 'Pruned IP'][ban.ip.type])}
td #{['Single', 'Narrow', 'Wide'][ban.range]} td #{__(['Single', 'Narrow', 'Wide'][ban.range])}
td #{(!banpage || ban.showUser === true) ? ban.issuer : 'Hidden User'} td #{(!banpage || ban.showUser === true) ? ban.issuer : __('Hidden User')}
- const banDate = new Date(ban.date); - const banDate = new Date(ban.date);
td: time.right.reltime(datetime=banDate.toISOString()) #{banDate.toLocaleString(undefined, {hourCycle:'h23'})} td: time.right.reltime(datetime=banDate.toISOString()) #{banDate.toLocaleString(undefined, {hourCycle:'h23'})}
- const expireDate = new Date(ban.expireAt); - const expireDate = new Date(ban.expireAt);
td: time.right.reltime(datetime=expireDate.toISOString()) #{expireDate.toLocaleString(undefined, {hourCycle:'h23'})} td: time.right.reltime(datetime=expireDate.toISOString()) #{expireDate.toLocaleString(undefined, {hourCycle:'h23'})}
td.banposts td.banposts
if ban.posts && ban.posts.length > 0 if ban.posts && ban.posts.length > 0
| Hover to view | #{__('Hover to view')}
.thread .thread
each p in ban.posts each p in ban.posts
+post(p, false, false, false, true) +post(p, false, false, false, true)
else else
Posts not shown #{__('Posts not shown')}
td td
if ban.seen if ban.seen
| ✓ | ✓
@ -45,7 +45,7 @@ mixin ban(ban, banpage)
if ban.appeal if ban.appeal
textarea(rows=1 disabled='true') #{ban.appeal} textarea(rows=1 disabled='true') #{ban.appeal}
else if ban.allowAppeal else if ban.allowAppeal
| No appeal submitted | #{__('No appeal submitted')}
else else
| - | -
td td

@ -2,15 +2,15 @@ mixin boardtable(ppd=false, activity=false, owner=false)
.table-container.flex-center.mv-10.text-center .table-container.flex-center.mv-10.text-center
table(class=`boardtable${activity ? ' w900' : ''}`) table(class=`boardtable${activity ? ' w900' : ''}`)
tr tr
th Board th #{__('Board')}
if owner if owner
th Owner th #{__('Owner')}
th Description th #{__('Description')}
th PPH th #{__('PPH')}
if ppd if ppd
th PPD th #{__('PPD')}
th Users th #{__('Users')}
th Posts th #{__('Posts')}
if activity if activity
th Last Activity th #{__('Latest Activity')}
block block

@ -2,9 +2,9 @@ extends ../layout.pug
include ../mixins/ban.pug include ../mixins/ban.pug
block head block head
title Banned! title #{__('Banned!')}
block content block content
h1.board-title Banned! h1.board-title #{__('Banned!')}
h4.board-description Bans currently in place against your IP: h4.board-description #{__('Bans currently in place against your IP')}:
include ../includes/banform.pug include ../includes/banform.pug

@ -9,7 +9,7 @@ block head
title /#{board._id}/ - #{board.settings.name} - #{__n('Page %s', page)} title /#{board._id}/ - #{board.settings.name} - #{__n('Page %s', page)}
block content block content
+boardheader(modview ? 'Mod Index' : null) +boardheader(modview ? __('Mod Index') : null)
br br
include ../includes/postform.pug include ../includes/postform.pug
br br

@ -2,42 +2,42 @@ extends ../layout.pug
include ../mixins/boardtable.pug include ../mixins/boardtable.pug
block head block head
title Board List title #{__('Board List')}
block content block content
h1.board-title Board List h1.board-title #{__('Board List')}
.flexcenter.mv-10 .flexcenter.mv-10
form.form-post(action='/boards.html' method='GET') form.form-post(action='/boards.html' method='GET')
input(type='hidden' value=page) input(type='hidden' value=page)
.row.wrap.sb .row.wrap.sb
div(class=`col${enableWebring ? ' mr-5' : ''}`) div(class=`col${enableWebring ? ' mr-5' : ''}`)
.row .row
.label Search .label #{__('Search')}
input(type='text' name='search' value=search placeholder='Uri or tags') input(type='text' name='search' value=search placeholder='Uri or tags')
.row .row
.label Sort .label #{__('Sort')}
select(name='sort') select(name='sort')
option(value='popularity') Popularity option(value='popularity') #{__('Popularity')}
option(value='activity' selected=query.sort === 'activity') Latest Activity option(value='activity' selected=query.sort === 'activity') #{__('Latest Activity')}
.row .row
.label Order .label #{__('Order')}
select(name='direction') select(name='direction')
option(value='desc') Descending option(value='desc') #{__('Descending')}
option(value='asc' selected=query.direction === 'asc') Ascending option(value='asc' selected=query.direction === 'asc') #{__('Ascending')}
if enableWebring if enableWebring
.row .row
.label Local First .label #{__('Local First')}
label.postform-style.ph-5 label.postform-style.ph-5
input(type='checkbox', name='local_first', value='true' checked=localFirst) input(type='checkbox', name='local_first', value='true' checked=localFirst)
if enableWebring if enableWebring
.col .col
.row .row
.label Sites .label #{__('Sites')}
select(name='sites' size='5' multiple) select(name='sites' size='5' multiple)
optgroup(label='Shown') optgroup(label=__('Shown'))
each site in shown each site in shown
option(value=site selected=true) #{site} option(value=site selected=true) #{site}
optgroup(label='Not Shown') optgroup(label=__('Not Shown'))
each site in notShown each site in notShown
option(value=site) #{site} option(value=site) #{site}
input(type='submit', value='Filter') input(type='submit', value='Filter')
@ -49,10 +49,10 @@ block content
td td
span.left span.left
if board.webring === true if board.webring === true
span.help(title='Webring') 🔗 span.help(title=__('Webring')) 🔗
| |
if board.settings.sfw === true if board.settings.sfw === true
span.help(title='SFW') 💼 span.help(title=__('SFW')) 💼
| |
a(href=path) #{board.webring ? board.siteName : ''} /#{board.webring ? board.uri : board._id}/ - #{board.settings.name} a(href=path) #{board.webring ? board.siteName : ''} /#{board.webring ? board.uri : board._id}/ - #{board.settings.name}
td #{board.settings.description || '-'} td #{board.settings.description || '-'}

@ -6,10 +6,10 @@ include ../mixins/boardheader.pug
include ../mixins/announcements.pug include ../mixins/announcements.pug
block head block head
title /#{board._id}/ - Catalog title /#{board._id}/ - #{__('Catalog')}
block content block content
+boardheader(modview ? 'Mod Catalog' : 'Catalog') +boardheader(modview ? __('Mod Catalog') : __('Catalog'))
br br
include ../includes/postform.pug include ../includes/postform.pug
br br

@ -1,31 +1,31 @@
extends ../layout.pug extends ../layout.pug
block head block head
title Change Password title #{__('Change Password')}
block content block content
h1.board-title Change Password h1.board-title #{__('Change Password')}
.form-wrapper.flex-center.mv-10 .form-wrapper.flex-center.mv-10
form.form-post(action='/forms/changepassword' method='POST' data-captcha-preload='true') form.form-post(action='/forms/changepassword' method='POST' data-captcha-preload='true')
.row .row
.label Username .label #{__('Username')}
input(type='text', name='username', maxlength='50' required) input(type='text', name='username', maxlength='50' required)
.row .row
.label Existing Password .label #{__('Existing Password')}
input(type='password', name='password', maxlength='100' required) input(type='password', name='password', maxlength='100' required)
.row .row
.label New Password .label #{__('New Password')}
input(type='password', name='newpassword', maxlength='100' required) input(type='password', name='newpassword', maxlength='100' required)
.row .row
.label Confirm New Password .label #{__('Confirm New Password')}
input(type='password', name='newpasswordconfirm', maxlength='100' required) input(type='password', name='newpasswordconfirm', maxlength='100' required)
.row .row
.label 2FA Code .label #{__('2FA Code')}
input(type='number' name='twofactor' placeholder='if enabled') input(type='number' name='twofactor' placeholder=__('if enabled'))
if captchaOptions.type === 'text' if captchaOptions.type === 'text'
include ../includes/captchasidelabel.pug include ../includes/captchasidelabel.pug
else else
include ../includes/captchafieldrow.pug include ../includes/captchafieldrow.pug
input(type='submit', value='Change Password') input(type='submit', value=__('Change Password'))
p: a(href='/login.html') Login p: a(href='/login.html') #{__('Login')}
p: a(href='/register.html') Register p: a(href='/register.html') #{__('Register')}

@ -1,27 +1,27 @@
extends ../layout.pug extends ../layout.pug
block head block head
title Create Board title #{__('Create Board')}
block content block content
h1.board-title Create Board h1.board-title #{__('Create Board')}
.form-wrapper.flex-center.mv-10 .form-wrapper.flex-center.mv-10
form.form-post(action='/forms/create' method='POST' data-captcha-preload='true') form.form-post(action='/forms/create' method='POST' data-captcha-preload='true')
.row .row
.label URI e.g. /uri/ .label #{__('URI e.g. /uri/')}
input(type='text', name='uri', maxlength=globalLimits.fieldLength.uri pattern='[a-zA-Z0-9]+' required title='alphanumeric only') input(type='text', name='uri', maxlength=globalLimits.fieldLength.uri pattern='[a-zA-Z0-9]+' required title=__('alphanumeric only'))
.row .row
.label Name .label #{__('Name')}
input(type='text', name='name', maxlength=globalLimits.fieldLength.boardname required) input(type='text', name='name', maxlength=globalLimits.fieldLength.boardname required)
.row .row
.label Description .label #{__('Description')}
input(type='text', name='description', maxlength=globalLimits.fieldLength.description) input(type='text', name='description', maxlength=globalLimits.fieldLength.description)
.row .row
.label Tags .label #{__('Tags')}
textarea(name='tags' placeholder='Newline separated, max 10') textarea(name='tags' placeholder=__('Newline separated, max 10'))
if captchaOptions.type === 'text' if captchaOptions.type === 'text'
include ../includes/captchasidelabel.pug include ../includes/captchasidelabel.pug
else else
include ../includes/captchafieldrow.pug include ../includes/captchafieldrow.pug
input(type='submit', value='Submit') input(type='submit', value=__('Create'))

Loading…
Cancel
Save