jschan - Anonymous imageboard software. Classic look, modern features and feel. Works without JavaScript and supports Tor, I2P, Lokinet, etc.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

92 lines
4.4 KiB

include ../mixins/filelabel.pug
- const isThread = thread != null;
- const subjectRequired = (!isThread && board.settings.forceThreadSubject);
- const messageRequired = (!isThread && board.settings.forceThreadMessage) || (isThread && board.settings.forceReplyMessage);
- const fileRequired = (!isThread && board.settings.forceThreadFile) || (isThread && board.settings.forceReplyFile);
section.form-wrapper.flex-center
form.form-post#postform(action=`/forms/board/${board._id}/${modview ? 'mod' : ''}post`, enctype='multipart/form-data', method='POST' data-reset-on-submit='true')
if modview
input(type='hidden' name='_csrf' value=csrf)
input(type='hidden' name='thread' value=isThread ? thread.postId : null)
section.row.jsonly
.noselect#postform-dragHandle #{isThread ? __('New Reply') : __('New Thread')}
if board.settings.forceAnon && !modview
section.row
.label Sage
label.postform-style.ph-5
input(type='checkbox', name='email', value='sage')
a.close.postform-style(href='#!') ×
include ./subjectfield.pug
else
section.row
.label #{__('Name')}
input.mr-1(type='text', name='name', placeholder=board.settings.defaultName maxlength=globalLimits.fieldLength.name)
a.close.postform-style(href='#!') ×
if board.settings.sageOnlyEmail && !modview
section.row
.label #{__('Sage')}
label.postform-style.ph-5
input(type='checkbox', name='email', value='sage')
else
section.row
.label #{__('Email')}
input(type='text', name='email', autocomplete='off' maxlength=globalLimits.fieldLength.email)
include ./subjectfield.pug
section.row
.label
span #{__('Message')}
if messageRequired
span.required *
- const minLength = (isThread ? board.settings.minReplyMessageLength : board.settings.minThreadMessageLength) || 0;
- const maxLength = Math.min((isThread ? board.settings.maxReplyMessageLength : board.settings.maxThreadMessageLength), globalLimits.fieldLength.message) || globalLimits.fieldLength.message;
textarea#message(name='message', rows='5', autocomplete='off' minlength=minLength maxlength=maxLength required=messageRequired)
if board.settings.maxFiles > 0 && Object.values(board.settings.allowedFileTypes).some(x => x === true)
- const maxFiles = board.settings.maxFiles;
section.row
.label
span #{__n('Files', maxFiles)}
if fileRequired
span.required *
|
|
if maxFiles > 1
small #{__n('Max %s files', maxFiles)}
small #{postFilesSize} #{__('total')}
span.col
+filelabel('file', maxFiles)
input#file(type='file', name='file' multiple required=fileRequired )
.upload-list(data-spoilers=(board.settings.userPostSpoiler ? 'true' : 'false') data-strip-filenames='true')
if board.settings.userPostSpoiler
noscript
label.noselect.postform-style.ph-5.ml-1.fh
input(type='checkbox', name='spoiler_all', value='true')
| Spoiler
if board.settings.enableTegaki && board.settings.allowedFileTypes.image === true
section.row.jsonly
.label #{__('Tegaki')}
input.dummy-link.tegaki-button(type='button', value=__('Draw'))
if board.settings.allowedFileTypes.other === true
label.noselect.postform-style.ph-5.ml-1.fh
input(type='checkbox' name='tegakireplay')
| #{__('Replayable?')}
if board.settings.userPostSpoiler || board.settings.userPostDelete || board.settings.userPostUnlink || modview
section.row
.label Password
input(type='password', name='postpassword', placeholder='Password to delete/spoiler/unlink later' maxlength='50' autocomplete='new-password')
if modview || board.settings.customFlags === true
- const boardFlags = Object.entries(board.flags)
if boardFlags.length > 0
section.row
.label #{__('Flag')}
select#customflag(name='customflag')
option(value='') #{board.settings.geoFlags === true ? __('Geographic Flag') : __('None')}
each flag in boardFlags
option(value=flag[0] data-src=`/flag/${board._id}/${flag[1]}`) #{flag[0]}
img.jsonly#selected-flag
if ((board.settings.captchaMode === 1 && !isThread) || board.settings.captchaMode === 2) && !modview
if captchaOptions.type === 'text'
include ./captchasidelabel.pug
else
include ./captchaexpand.pug
input#submitpost(type='submit', value=(isThread ? __('New Reply') : __('New Thread')))
a.collapse.no-decoration.post-button(href='#postform') [#{isThread ? __('New Reply') : __('New Thread')}]