91 lines
2.8 KiB
JavaScript
91 lines
2.8 KiB
JavaScript
var h = require('hyperscript')
|
|
var suggestBox = require('suggest-box')
|
|
var multicb = require('multicb')
|
|
var schemas = require('ssb-msg-schemas')
|
|
var app = require('../app')
|
|
var ui = require('../ui')
|
|
var modals = require('../ui/modals')
|
|
var com = require('./index')
|
|
var mentionslib = require('../mentions')
|
|
|
|
module.exports = function (id, opts) {
|
|
|
|
// markup
|
|
|
|
var name = com.userName(id)
|
|
var textarea = h('textarea.form-control', { placeholder: 'Write your reason for flagging here.', rows: 4 })
|
|
suggestBox(textarea, app.suggestOptions)
|
|
var form = h('.flag-form',
|
|
h('h3', com.icon('flag'), ' Flag "', name, '"'),
|
|
h('p.text-muted', h('small', 'Warn your followers about this user.')),
|
|
h('form', { onsubmit: onsubmit },
|
|
h('.radios',
|
|
opt('old-account', 'Old account'),
|
|
opt('spammer', 'Spammer'),
|
|
opt('abusive', 'Abusive'),
|
|
opt('nsfw', 'NSFW'),
|
|
opt('other', 'Other')
|
|
),
|
|
h('p', textarea),
|
|
h('p.text-right', h('button.btn.btn-3d', 'Publish'))
|
|
)
|
|
)
|
|
|
|
function opt (value, label) {
|
|
return h('.radio',
|
|
h('label',
|
|
h('input', { type: 'radio', name: 'flag-choice', value: value }),
|
|
label
|
|
)
|
|
)
|
|
}
|
|
|
|
// handlers
|
|
|
|
function onsubmit (e) {
|
|
e.preventDefault()
|
|
|
|
// prep text
|
|
ui.pleaseWait(true)
|
|
ui.setStatus('Publishing...')
|
|
var reason = textarea.value
|
|
var flag
|
|
try { flag = form.querySelector(':checked').value } catch (e) {}
|
|
mentionslib.extract(reason, function (err, mentions) {
|
|
if (err) {
|
|
ui.setStatus(null)
|
|
ui.pleaseWait(false)
|
|
if (err.conflict)
|
|
modals.error('Error While Publishing', 'You follow multiple people with the name "'+err.name+'." Go to the homepage to resolve this before publishing.')
|
|
else
|
|
modals.error('Error While Publishing', err, 'This error occurred while trying to extract the mentions from the text of a flag post.')
|
|
return
|
|
}
|
|
|
|
// publish
|
|
var done = multicb({ pluck: 1 })
|
|
app.ssb.publish(schemas.block(id), done())
|
|
app.ssb.publish(schemas.flag(id, flag||'other'), done())
|
|
done(function (err, msgs) {
|
|
if (err) {
|
|
ui.setStatus(null)
|
|
ui.pleaseWait(false)
|
|
return modals.error('Error While Publishing', err, 'This error occurred while trying to publish the block and flag messages.')
|
|
}
|
|
|
|
if (!reason) {
|
|
ui.setStatus(null)
|
|
ui.pleaseWait(false)
|
|
return opts.onsubmit()
|
|
}
|
|
|
|
app.ssb.publish(schemas.post(reason, msgs[1].key, msgs[1].key, (mentions.length) ? mentions : null), function (err) {
|
|
if (err) modals.error('Error While Publishing', err, 'This error occured while trying to publish the reason-post of a new flag.')
|
|
else opts.onsubmit()
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
return form
|
|
} |