forked from MarseyWorld/MarseyWorld
allow positioning of files
parent
490d5765fa
commit
6ac9b32834
|
@ -265,64 +265,35 @@ document.onpaste = function(event) {
|
||||||
const focused = document.activeElement;
|
const focused = document.activeElement;
|
||||||
const files = structuredClone(event.clipboardData.files);
|
const files = structuredClone(event.clipboardData.files);
|
||||||
|
|
||||||
if (files.length > 4)
|
|
||||||
{
|
|
||||||
alert("You can't upload more than 4 files at one time!")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!files.length) return
|
if (!files.length) return
|
||||||
|
|
||||||
if (focused.id.includes('reply-form-body-')) {
|
if (focused.id.includes('reply-form-body-')) {
|
||||||
const fullname = focused.dataset.fullname;
|
const fullname = focused.dataset.fullname;
|
||||||
f=document.getElementById('file-upload-reply-' + fullname);
|
f=document.getElementById('file-upload-reply-' + fullname);
|
||||||
try {
|
f.files = files;
|
||||||
let filename = ''
|
changename('filename-show-reply-' + fullname, f.id, focused.id)
|
||||||
for (const file of files)
|
|
||||||
filename += file.name + ', '
|
|
||||||
filename = filename.toLowerCase().slice(0, -2)
|
|
||||||
f.files = files;
|
|
||||||
document.getElementById('filename-show-reply-' + fullname).textContent = filename;
|
|
||||||
}
|
|
||||||
catch(e) {}
|
|
||||||
}
|
}
|
||||||
else if (focused.id.includes('comment-edit-body-')) {
|
else if (focused.id.includes('comment-edit-body-')) {
|
||||||
const id = focused.dataset.id;
|
const id = focused.dataset.id;
|
||||||
f=document.getElementById('file-edit-reply-' + id);
|
f=document.getElementById('file-edit-reply-' + id);
|
||||||
let filename = ''
|
|
||||||
for (const file of files)
|
|
||||||
filename += file.name + ', '
|
|
||||||
filename = filename.toLowerCase().slice(0, -2)
|
|
||||||
f.files = files;
|
f.files = files;
|
||||||
document.getElementById('filename-edit-reply-' + id).textContent = filename;
|
changename('filename-edit-reply-' + id, f.id, focused.id)
|
||||||
}
|
}
|
||||||
else if (focused.id.includes('post-edit-box-')) {
|
else if (focused.id.includes('post-edit-box-')) {
|
||||||
const id = focused.dataset.id;
|
const id = focused.dataset.id;
|
||||||
f=document.getElementById('file-upload-edit-' + id);
|
f=document.getElementById('file-upload-edit-' + id);
|
||||||
let filename = ''
|
|
||||||
for (const file of files)
|
|
||||||
filename += file.name + ', '
|
|
||||||
filename = filename.toLowerCase().slice(0, -2)
|
|
||||||
f.files = files;
|
f.files = files;
|
||||||
document.getElementById('filename-show-edit-' + id).textContent = filename;
|
changename('filename-show-edit-' + id, f.id, focused.id)
|
||||||
}
|
}
|
||||||
else if (focused.id == "input-message") {
|
else if (focused.id == "input-message") {
|
||||||
f=document.getElementById('file-upload');
|
f=document.getElementById('file-upload');
|
||||||
let filename = ''
|
|
||||||
for (const file of files)
|
|
||||||
filename += file.name + ', '
|
|
||||||
filename = filename.toLowerCase().slice(0, -2)
|
|
||||||
f.files = files;
|
f.files = files;
|
||||||
document.getElementById('filename').textContent = filename;
|
changename('filename', f.id, focused.id)
|
||||||
}
|
}
|
||||||
else if (focused.id == "input-message-mobile") {
|
else if (focused.id == "input-message-mobile") {
|
||||||
f=document.getElementById('file-upload-mobile');
|
f=document.getElementById('file-upload-mobile');
|
||||||
let filename = ''
|
|
||||||
for (const file of files)
|
|
||||||
filename += file.name + ', '
|
|
||||||
filename = filename.toLowerCase().slice(0, -2)
|
|
||||||
f.files = files;
|
f.files = files;
|
||||||
document.getElementById('filename-mobile').textContent = filename;
|
changename('filename-mobile', f.id, focused.id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,19 +1,9 @@
|
||||||
document.onpaste = function(event) {
|
document.onpaste = function(event) {
|
||||||
const files = structuredClone(event.clipboardData.files);
|
const files = structuredClone(event.clipboardData.files);
|
||||||
|
|
||||||
if (files.length > 4)
|
|
||||||
{
|
|
||||||
alert("You can't upload more than 4 files at one time!")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!files.length) return
|
if (!files.length) return
|
||||||
|
|
||||||
const f = document.getElementById('file-upload');
|
const f = document.getElementById('file-upload');
|
||||||
let filename = ''
|
|
||||||
for (const file of files)
|
|
||||||
filename += file.name + ', '
|
|
||||||
filename = filename.toLowerCase().slice(0, -2)
|
|
||||||
f.files = files;
|
f.files = files;
|
||||||
document.getElementById('filename').textContent = filename;
|
changename('filename', f.id, 'input-message')
|
||||||
}
|
}
|
||||||
|
|
|
@ -244,7 +244,8 @@ function escapeHTML(unsafe) {
|
||||||
return unsafe.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
return unsafe.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
function changename(s1,s2) {
|
function changename(s1,s2,textarea) {
|
||||||
|
console.log('nigg')
|
||||||
const files = document.getElementById(s2).files;
|
const files = document.getElementById(s2).files;
|
||||||
if (files.length > 4)
|
if (files.length > 4)
|
||||||
{
|
{
|
||||||
|
@ -252,11 +253,24 @@ function changename(s1,s2) {
|
||||||
document.getElementById(s2).value = null
|
document.getElementById(s2).value = null
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ta = document.getElementById(textarea);
|
||||||
|
ta.value = ta.value.replace(/<file>\n/g, "")
|
||||||
|
if (ta.value) {
|
||||||
|
ta.value += '\n'
|
||||||
|
}
|
||||||
|
|
||||||
let filename = '';
|
let filename = '';
|
||||||
for (const e of files) {
|
for (const e of files) {
|
||||||
filename += e.name.substr(0, 22) + ', ';
|
filename += e.name.substr(0, 22) + ', ';
|
||||||
|
ta.value += '<file>\n'
|
||||||
}
|
}
|
||||||
document.getElementById(s1).innerHTML = escapeHTML(filename.slice(0, -2));
|
document.getElementById(s1).innerHTML = escapeHTML(filename.slice(0, -2));
|
||||||
|
|
||||||
|
console.log(ta)
|
||||||
|
autoExpand(ta)
|
||||||
|
ta.focus()
|
||||||
|
ta.selectionStart = ta.selectionEnd = ta.value.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
function showmore(t) {
|
function showmore(t) {
|
||||||
|
|
|
@ -101,24 +101,14 @@ function updatebgselection(){
|
||||||
|
|
||||||
document.onpaste = function(event) {
|
document.onpaste = function(event) {
|
||||||
const focused = document.activeElement;
|
const focused = document.activeElement;
|
||||||
if (focused.id == 'bio-text') {
|
if (focused.id == 'profile-bio-text') {
|
||||||
const files = structuredClone(event.clipboardData.files);
|
const files = structuredClone(event.clipboardData.files);
|
||||||
|
|
||||||
if (files.length > 4)
|
|
||||||
{
|
|
||||||
alert("You can't upload more than 4 files at one time!")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (files.length)
|
if (files.length)
|
||||||
{
|
{
|
||||||
f=document.getElementById('file-upload');
|
f=document.getElementById('file-upload');
|
||||||
let filename = ''
|
|
||||||
for (const file of files)
|
|
||||||
filename += file.name + ', '
|
|
||||||
filename = filename.toLowerCase().slice(0, -2)
|
|
||||||
f.files = files;
|
f.files = files;
|
||||||
document.getElementById('filename-show').textContent = filename;
|
changename('filename-show', f.id, focused.id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,12 +78,8 @@ document.onpaste = function(event) {
|
||||||
{
|
{
|
||||||
filename = filename.name.toLowerCase()
|
filename = filename.name.toLowerCase()
|
||||||
if (document.activeElement.id == 'post-text') {
|
if (document.activeElement.id == 'post-text') {
|
||||||
let filename = ''
|
|
||||||
for (const file of files)
|
|
||||||
filename += file.name + ', '
|
|
||||||
filename = filename.toLowerCase().slice(0, -2)
|
|
||||||
document.getElementById('file-upload-submit').value = files;
|
document.getElementById('file-upload-submit').value = files;
|
||||||
document.getElementById('filename-show-submit').textContent = filename;
|
changename('filename-show-submit', 'file-upload-submit', 'post-text')
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
f=document.getElementById('file-upload');
|
f=document.getElementById('file-upload');
|
||||||
|
|
|
@ -25,8 +25,7 @@ def media_ratelimit(v):
|
||||||
count = g.db.query(Media).filter(Media.user_id == v.id, Media.created_utc > t).count()
|
count = g.db.query(Media).filter(Media.user_id == v.id, Media.created_utc > t).count()
|
||||||
if count > 50: abort(500)
|
if count > 50: abort(500)
|
||||||
|
|
||||||
def process_files(files, v):
|
def process_files(files, v, body):
|
||||||
body = ''
|
|
||||||
if g.is_tor or not files.get("file"): return body
|
if g.is_tor or not files.get("file"): return body
|
||||||
files = files.getlist('file')[:4]
|
files = files.getlist('file')[:4]
|
||||||
|
|
||||||
|
@ -34,15 +33,17 @@ def process_files(files, v):
|
||||||
media_ratelimit(v)
|
media_ratelimit(v)
|
||||||
|
|
||||||
for file in files:
|
for file in files:
|
||||||
|
if '<file>' not in body:
|
||||||
|
abort(400, "Missing <file> in text!")
|
||||||
if file.content_type.startswith('image/'):
|
if file.content_type.startswith('image/'):
|
||||||
name = f'/images/{time.time()}'.replace('.','') + '.webp'
|
name = f'/images/{time.time()}'.replace('.','') + '.webp'
|
||||||
file.save(name)
|
file.save(name)
|
||||||
url = process_image(name, v)
|
url = process_image(name, v)
|
||||||
body += f"\n\n![]({url})"
|
body = body.replace('<file>', f"![]({url})", 1)
|
||||||
elif file.content_type.startswith('video/'):
|
elif file.content_type.startswith('video/'):
|
||||||
body += f"\n\n{SITE_FULL}{process_video(file, v)}"
|
body = body.replace('<file>', f"{SITE_FULL}{process_video(file, v)}", 1)
|
||||||
elif file.content_type.startswith('audio/'):
|
elif file.content_type.startswith('audio/'):
|
||||||
body += f"\n\n{SITE_FULL}{process_audio(file, v)}"
|
body = body.replace('<file>', f"{SITE_FULL}{process_audio(file, v)}", 1)
|
||||||
else:
|
else:
|
||||||
abort(415)
|
abort(415)
|
||||||
return body
|
return body
|
||||||
|
@ -229,13 +230,15 @@ def process_image(filename:str, v, resize=0, trim=False, uploader_id:Optional[in
|
||||||
return filename
|
return filename
|
||||||
|
|
||||||
|
|
||||||
def process_dm_images(v, user):
|
def process_dm_images(v, user, body):
|
||||||
if not request.files.get("file") or g.is_tor or not get_setting("dm_images"):
|
if not request.files.get("file") or g.is_tor or not get_setting("dm_images"):
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
body = ''
|
|
||||||
files = request.files.getlist('file')[:4]
|
files = request.files.getlist('file')[:4]
|
||||||
for file in files:
|
for file in files:
|
||||||
|
if '<file>' not in body:
|
||||||
|
abort(400, "Missing <file> in text!")
|
||||||
|
|
||||||
if file.content_type.startswith('image/'):
|
if file.content_type.startswith('image/'):
|
||||||
filename = f'/dm_images/{time.time()}'.replace('.','') + '.webp'
|
filename = f'/dm_images/{time.time()}'.replace('.','') + '.webp'
|
||||||
file.save(filename)
|
file.save(filename)
|
||||||
|
@ -263,12 +266,12 @@ def process_dm_images(v, user):
|
||||||
try: url = req['files'][0]['url']
|
try: url = req['files'][0]['url']
|
||||||
except: abort(400, req['description'])
|
except: abort(400, req['description'])
|
||||||
|
|
||||||
body += f'\n\n{url}\n\n'
|
body = body.replace('<file>', url, 1)
|
||||||
|
|
||||||
|
with open(f"{LOG_DIRECTORY}/dm_images.log", "a+", encoding="utf-8") as f:
|
||||||
|
if user:
|
||||||
|
f.write(f'{url}, {v.username}, {v.id}, {user.username}, {user.id}, {int(time.time())}\n')
|
||||||
|
else:
|
||||||
|
f.write(f'{url}, {v.username}, {v.id}, Modmail, Modmail, {int(time.time())}\n')
|
||||||
|
|
||||||
if body:
|
return body.strip()
|
||||||
with open(f"{LOG_DIRECTORY}/dm_images.log", "a+", encoding="utf-8") as f:
|
|
||||||
if user:
|
|
||||||
f.write(f'{body.strip()}, {v.username}, {v.id}, {user.username}, {user.id}, {int(time.time())}\n')
|
|
||||||
else:
|
|
||||||
f.write(f'{body.strip()}, {v.username}, {v.id}, Modmail, Modmail, {int(time.time())}\n')
|
|
||||||
return body
|
|
||||||
|
|
|
@ -159,6 +159,8 @@ def comment(v:User):
|
||||||
media_ratelimit(v)
|
media_ratelimit(v)
|
||||||
|
|
||||||
for file in files:
|
for file in files:
|
||||||
|
if '<file>' not in body: abort(400, "Missing <file> in text!")
|
||||||
|
|
||||||
if file.content_type.startswith('image/'):
|
if file.content_type.startswith('image/'):
|
||||||
oldname = f'/images/{time.time()}'.replace('.','') + '.webp'
|
oldname = f'/images/{time.time()}'.replace('.','') + '.webp'
|
||||||
file.save(oldname)
|
file.save(oldname)
|
||||||
|
@ -201,11 +203,11 @@ def comment(v:User):
|
||||||
purge_files_in_cache(f"https://{SITE}/assets/images/badges/{badge.id}.webp")
|
purge_files_in_cache(f"https://{SITE}/assets/images/badges/{badge.id}.webp")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
abort(400, str(e))
|
abort(400, str(e))
|
||||||
body += f"\n\n![]({image})"
|
body = body.replace('<file>', f"![]({image})", 1)
|
||||||
elif file.content_type.startswith('video/'):
|
elif file.content_type.startswith('video/'):
|
||||||
body += f"\n\n{SITE_FULL}{process_video(file, v)}"
|
body = body.replace('<file>', f"{SITE_FULL}{process_video(file, v)}", 1)
|
||||||
elif file.content_type.startswith('audio/'):
|
elif file.content_type.startswith('audio/'):
|
||||||
body += f"\n\n{SITE_FULL}{process_audio(file, v)}"
|
body = body.replace('<file>', f"{SITE_FULL}{process_audio(file, v)}", 1)
|
||||||
else:
|
else:
|
||||||
abort(415)
|
abort(415)
|
||||||
|
|
||||||
|
@ -405,7 +407,7 @@ def edit_comment(cid, v):
|
||||||
|
|
||||||
execute_antispam_comment_check(body, v)
|
execute_antispam_comment_check(body, v)
|
||||||
|
|
||||||
body += process_files(request.files, v)
|
body = process_files(request.files, v, body)
|
||||||
body = body.strip()[:COMMENT_BODY_LENGTH_LIMIT] # process_files potentially adds characters to the post
|
body = body.strip()[:COMMENT_BODY_LENGTH_LIMIT] # process_files potentially adds characters to the post
|
||||||
|
|
||||||
body_for_sanitize = body
|
body_for_sanitize = body
|
||||||
|
|
|
@ -294,7 +294,7 @@ def edit_post(pid, v):
|
||||||
p.title = title
|
p.title = title
|
||||||
p.title_html = title_html
|
p.title_html = title_html
|
||||||
|
|
||||||
body += process_files(request.files, v)
|
body = process_files(request.files, v, body)
|
||||||
body = body.strip()[:POST_BODY_LENGTH_LIMIT] # process_files() may be adding stuff to the body
|
body = body.strip()[:POST_BODY_LENGTH_LIMIT] # process_files() may be adding stuff to the body
|
||||||
|
|
||||||
if body != p.body:
|
if body != p.body:
|
||||||
|
@ -655,7 +655,7 @@ def submit_post(v:User, sub=None):
|
||||||
|
|
||||||
body, bets, options, choices = sanitize_poll_options(v, body, True)
|
body, bets, options, choices = sanitize_poll_options(v, body, True)
|
||||||
|
|
||||||
body += process_files(request.files, v)
|
body = process_files(request.files, v, body)
|
||||||
body = body.strip()[:POST_BODY_LENGTH_LIMIT] # process_files() adds content to the body, so we need to re-strip
|
body = body.strip()[:POST_BODY_LENGTH_LIMIT] # process_files() adds content to the body, so we need to re-strip
|
||||||
|
|
||||||
torture = (v.agendaposter and not v.marseyawarded and sub != 'chudrama')
|
torture = (v.agendaposter and not v.marseyawarded and sub != 'chudrama')
|
||||||
|
|
|
@ -298,7 +298,7 @@ def settings_personal_post(v):
|
||||||
elif not updated and FEATURES['USERS_PROFILE_BODYTEXT'] and \
|
elif not updated and FEATURES['USERS_PROFILE_BODYTEXT'] and \
|
||||||
(request.values.get("bio") or request.files.get('file')):
|
(request.values.get("bio") or request.files.get('file')):
|
||||||
bio = request.values.get("bio")[:1500]
|
bio = request.values.get("bio")[:1500]
|
||||||
bio += process_files(request.files, v)
|
bio = process_files(request.files, v, bio)
|
||||||
bio = bio.strip()
|
bio = bio.strip()
|
||||||
bio_html = sanitize(bio, blackjack="bio")
|
bio_html = sanitize(bio, blackjack="bio")
|
||||||
|
|
||||||
|
|
|
@ -256,7 +256,7 @@ def submit_contact(v):
|
||||||
abort(403)
|
abort(403)
|
||||||
|
|
||||||
body = f'This message has been sent automatically to all admins via [/contact](/contact)\n\nMessage:\n\n{body}'
|
body = f'This message has been sent automatically to all admins via [/contact](/contact)\n\nMessage:\n\n{body}'
|
||||||
body += process_files(request.files, v)
|
body = process_files(request.files, v, body)
|
||||||
body = body.strip()
|
body = body.strip()
|
||||||
body_html = sanitize(body)
|
body_html = sanitize(body)
|
||||||
|
|
||||||
|
|
|
@ -518,7 +518,7 @@ def message2(v:User, username:str):
|
||||||
|
|
||||||
message = sanitize_raw_body(request.values.get("message"), False)
|
message = sanitize_raw_body(request.values.get("message"), False)
|
||||||
|
|
||||||
message += process_dm_images(v, user)
|
message = process_dm_images(v, user, message)
|
||||||
|
|
||||||
if not message: abort(400, "Message is empty!")
|
if not message: abort(400, "Message is empty!")
|
||||||
|
|
||||||
|
@ -592,9 +592,7 @@ def messagereply(v:User):
|
||||||
and hasattr(user, 'is_blocked') and user.is_blocked):
|
and hasattr(user, 'is_blocked') and user.is_blocked):
|
||||||
abort(403, f"You're blocked by @{user.username}")
|
abort(403, f"You're blocked by @{user.username}")
|
||||||
|
|
||||||
body += process_dm_images(v, user)
|
body = process_dm_images(v, user, body)
|
||||||
|
|
||||||
body = body.strip()
|
|
||||||
|
|
||||||
if not body: abort(400, "Message is empty!")
|
if not body: abort(400, "Message is empty!")
|
||||||
|
|
||||||
|
|
|
@ -116,7 +116,7 @@
|
||||||
<span class="my-auto ml-1">
|
<span class="my-auto ml-1">
|
||||||
<label class="btn btn-secondary format mb-0">
|
<label class="btn btn-secondary format mb-0">
|
||||||
<div id="filename" class="mr-3" style="font-size:12px"><i class="fas fa-image" style="font-size:1.3rem!important"></i></div>
|
<div id="filename" class="mr-3" style="font-size:12px"><i class="fas fa-image" style="font-size:1.3rem!important"></i></div>
|
||||||
<input autocomplete="off" id="file" accept="image/*" type="file" multiple="multiple" name="file" {% if g.is_tor %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename','file')" hidden>
|
<input autocomplete="off" id="file" accept="image/*" type="file" multiple="multiple" name="file" {% if g.is_tor %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename','file','input-text')" hidden>
|
||||||
</label>
|
</label>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
|
|
|
@ -273,7 +273,7 @@
|
||||||
|
|
||||||
<label class="btn btn-secondary format m-0" for="file-edit-reply-{{c.id}}">
|
<label class="btn btn-secondary format m-0" for="file-edit-reply-{{c.id}}">
|
||||||
<div id="filename-edit-reply-{{c.id}}"><i class="fas fa-file"></i></div>
|
<div id="filename-edit-reply-{{c.id}}"><i class="fas fa-file"></i></div>
|
||||||
<input autocomplete="off" id="file-edit-reply-{{c.id}}" accept="image/*, video/*, audio/*" type="file" multiple="multiple" name="file" {% if g.is_tor %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename-edit-reply-{{c.id}}','file-edit-reply-{{c.id}}')" hidden>
|
<input autocomplete="off" id="file-edit-reply-{{c.id}}" accept="image/*, video/*, audio/*" type="file" multiple="multiple" name="file" {% if g.is_tor %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename-edit-reply-{{c.id}}','file-edit-reply-{{c.id}}','comment-edit-body-{{c.id}}')" hidden>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<a class="text-small mt-3 d-inline-block" href="/formatting" {% if v and v.newtab %}data-target="t" target="_blank"{% endif %}>Formatting help</a>
|
<a class="text-small mt-3 d-inline-block" href="/formatting" {% if v and v.newtab %}data-target="t" target="_blank"{% endif %}>Formatting help</a>
|
||||||
|
@ -540,7 +540,7 @@
|
||||||
|
|
||||||
<label class="btn btn-secondary m-0 mt-3 {% if upload_disabled %}disabled{% endif %}" for="file-upload-reply-{{c.fullname}}">
|
<label class="btn btn-secondary m-0 mt-3 {% if upload_disabled %}disabled{% endif %}" for="file-upload-reply-{{c.fullname}}">
|
||||||
<div id="filename-show-reply-{{c.fullname}}"><i class="fas fa-image"></i></div>
|
<div id="filename-show-reply-{{c.fullname}}"><i class="fas fa-image"></i></div>
|
||||||
<input autocomplete="off" id="file-upload-reply-{{c.fullname}}" accept="image/*" type="file" name="file" multiple="multiple" {% if upload_disabled %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename-show-reply-{{c.fullname}}','file-upload-reply-{{c.fullname}}')" hidden>
|
<input autocomplete="off" id="file-upload-reply-{{c.fullname}}" accept="image/*" type="file" name="file" multiple="multiple" {% if upload_disabled %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename-show-reply-{{c.fullname}}','file-upload-reply-{{c.fullname}}','reply-form-body-{{c.id}}')" hidden>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
</label>
|
</label>
|
||||||
<label class="btn btn-secondary m-0 mt-3" for="file-upload">
|
<label class="btn btn-secondary m-0 mt-3" for="file-upload">
|
||||||
<div id="filename"><i class="fas fa-file"></i></div>
|
<div id="filename"><i class="fas fa-file"></i></div>
|
||||||
<input autocomplete="off" id="file-upload" accept="image/*, video/*, audio/*" type="file" name="file" multiple="multiple" {% if g.is_tor %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename','file-upload')" hidden>
|
<input autocomplete="off" id="file-upload" accept="image/*, video/*, audio/*" type="file" name="file" multiple="multiple" {% if g.is_tor %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename','file-upload','input-message')" hidden>
|
||||||
</label>
|
</label>
|
||||||
<input type="submit" data-nonce="{{g.nonce}}" data-onclick="disable(this)" value="Submit" class="btn btn-primary mt-3">
|
<input type="submit" data-nonce="{{g.nonce}}" data-onclick="disable(this)" value="Submit" class="btn btn-primary mt-3">
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -88,7 +88,7 @@
|
||||||
{% if show_file_upload %}
|
{% if show_file_upload %}
|
||||||
<label style="padding:0.3rem" class="btn btn-secondary format d-inline-block m-0">
|
<label style="padding:0.3rem" class="btn btn-secondary format d-inline-block m-0">
|
||||||
<div id="filename-show"><i class="fas fa-file"></i></div>
|
<div id="filename-show"><i class="fas fa-file"></i></div>
|
||||||
<input autocomplete="off" id="file-upload" accept="image/*, video/*, audio/*" type="file" name="file" multiple="multiple" {% if g.is_tor %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename-show','file-upload')" hidden>
|
<input autocomplete="off" id="file-upload" accept="image/*, video/*, audio/*" type="file" name="file" multiple="multiple" {% if g.is_tor %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename-show','file-upload','{{id}}-text')" hidden>
|
||||||
</label>
|
</label>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -178,7 +178,7 @@
|
||||||
|
|
||||||
<label class="format btn btn-secondary m-0 {% if v %}d-inline-block{% else %}d-none{% endif %}" for="file-upload-edit-{{p.id}}">
|
<label class="format btn btn-secondary m-0 {% if v %}d-inline-block{% else %}d-none{% endif %}" for="file-upload-edit-{{p.id}}">
|
||||||
<div id="filename-show-edit-{{p.id}}"><i class="fas fa-file"></i></div>
|
<div id="filename-show-edit-{{p.id}}"><i class="fas fa-file"></i></div>
|
||||||
<input autocomplete="off" id="file-upload-edit-{{p.id}}" accept="image/*, video/*, audio/*" type="file" multiple="multiple" name="file" {% if g.is_tor %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename-show-edit-{{p.id}}','file-upload-edit-{{p.id}}')" hidden>
|
<input autocomplete="off" id="file-upload-edit-{{p.id}}" accept="image/*, video/*, audio/*" type="file" multiple="multiple" name="file" {% if g.is_tor %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename-show-edit-{{p.id}}','file-upload-edit-{{p.id}}','post-edit-box-{{p.id}}')" hidden>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<small class="format d-none"><i class="fas fa-link"></i></small>
|
<small class="format d-none"><i class="fas fa-link"></i></small>
|
||||||
|
|
|
@ -62,7 +62,7 @@
|
||||||
<button type="button" data-nonce="{{g.nonce}}" data-onclick="loadEmojis('post-text')" class="btn btn-secondary format d-inline-block m-0" id="emoji-reply-btn" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Add Emoji"><i class="fas fa-smile-beam"></i></button>
|
<button type="button" data-nonce="{{g.nonce}}" data-onclick="loadEmojis('post-text')" class="btn btn-secondary format d-inline-block m-0" id="emoji-reply-btn" data-bs-toggle="modal" data-bs-target="#emojiModal" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Add Emoji"><i class="fas fa-smile-beam"></i></button>
|
||||||
<label class="format btn btn-secondary m-0 ml-2 {% if v %}d-inline-block{% else %}d-none{% endif %}" for="file-upload-submit">
|
<label class="format btn btn-secondary m-0 ml-2 {% if v %}d-inline-block{% else %}d-none{% endif %}" for="file-upload-submit">
|
||||||
<div id="filename-show-submit"><i class="fas fa-file"></i></div>
|
<div id="filename-show-submit"><i class="fas fa-file"></i></div>
|
||||||
<input autocomplete="off" id="file-upload-submit" multiple="multiple" accept="image/*, video/*, audio/*" type="file" name="file" {% if g.is_tor %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename-show-submit','file-upload-submit');checkForRequired()" hidden>
|
<input autocomplete="off" id="file-upload-submit" multiple="multiple" accept="image/*, video/*, audio/*" type="file" name="file" {% if g.is_tor %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename-show-submit','file-upload-submit','post-text');checkForRequired()" hidden>
|
||||||
</label>
|
</label>
|
||||||
<div id="preview" class="preview my-3"></div>
|
<div id="preview" class="preview my-3"></div>
|
||||||
<div class="form-text text-small mt-1 mb-3"><a href="/formatting" {% if v and v.newtab %}data-target="t" target="_blank"{% endif %}>Formatting help</a></div>
|
<div class="form-text text-small mt-1 mb-3"><a href="/formatting" {% if v and v.newtab %}data-target="t" target="_blank"{% endif %}>Formatting help</a></div>
|
||||||
|
|
|
@ -161,7 +161,7 @@
|
||||||
|
|
||||||
<label class="btn btn-secondary m-0 py-1 px-2 {% if upload_disabled %}disabled{% endif %}" for="file-upload">
|
<label class="btn btn-secondary m-0 py-1 px-2 {% if upload_disabled %}disabled{% endif %}" for="file-upload">
|
||||||
<div id="filename"><i class="fas fa-image"></i></div>
|
<div id="filename"><i class="fas fa-image"></i></div>
|
||||||
<input autocomplete="off" id="file-upload" accept="image/*" type="file" name="file" multiple="multiple" {% if upload_disabled %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename','file-upload')" hidden>
|
<input autocomplete="off" id="file-upload" accept="image/*" type="file" name="file" multiple="multiple" {% if upload_disabled %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename','file-upload','input-message')" hidden>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
@ -468,7 +468,7 @@
|
||||||
|
|
||||||
<label class="btn btn-secondary m-0 py-1 px-2 {% if upload_disabled %}disabled{% endif %}" for="file-upload-mobile">
|
<label class="btn btn-secondary m-0 py-1 px-2 {% if upload_disabled %}disabled{% endif %}" for="file-upload-mobile">
|
||||||
<div id="filename-mobile"><i class="fas fa-image"></i></div>
|
<div id="filename-mobile"><i class="fas fa-image"></i></div>
|
||||||
<input autocomplete="off" id="file-upload-mobile" accept="image/*" type="file" name="file" multiple="multiple" {% if upload_disabled %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename-mobile','file-upload-mobile')" hidden>
|
<input autocomplete="off" id="file-upload-mobile" accept="image/*" type="file" name="file" multiple="multiple" {% if upload_disabled %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename-mobile','file-upload-mobile','input-message')" hidden>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -130,7 +130,7 @@
|
||||||
{% if allow_file_upload %}
|
{% if allow_file_upload %}
|
||||||
<label class="format btn btn-secondary m-0 {% if v %}d-inline-block{% else %}d-none{% endif %}" for="file-upload-reply-{{target_fullname}}">
|
<label class="format btn btn-secondary m-0 {% if v %}d-inline-block{% else %}d-none{% endif %}" for="file-upload-reply-{{target_fullname}}">
|
||||||
<div id="filename-show-reply-{{target_fullname}}"><i class="fas fa-file"></i></div>
|
<div id="filename-show-reply-{{target_fullname}}"><i class="fas fa-file"></i></div>
|
||||||
<input autocomplete="off" id="file-upload-reply-{{target_fullname}}" accept="image/*, video/*, audio/*" type="file" multiple="multiple" name="file" {% if g.is_tor %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename-show-reply-{{target_fullname}}','file-upload-reply-{{target_fullname}}')" hidden>
|
<input autocomplete="off" id="file-upload-reply-{{target_fullname}}" accept="image/*, video/*, audio/*" type="file" multiple="multiple" name="file" {% if g.is_tor %}disabled{% endif %} data-nonce="{{g.nonce}}" data-onchange="changename('filename-show-reply-{{target_fullname}}','file-upload-reply-{{target_fullname}}','reply-form-body-{{target_fullname}}')" hidden>
|
||||||
</label>
|
</label>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue