104 lines
3.1 KiB
CoffeeScript
104 lines
3.1 KiB
CoffeeScript
Report =
|
|
init: ->
|
|
return if not (match = location.search.match /\bno=(\d+)/)
|
|
Captcha.replace.init()
|
|
@postID = +match[1]
|
|
$.ready @ready
|
|
|
|
ready: ->
|
|
$.addStyle CSS.report
|
|
|
|
Report.archive() if Conf['Archive Report']
|
|
|
|
new MutationObserver(->
|
|
Report.fit 'iframe[src^="https://www.google.com/recaptcha/api2/frame"]'
|
|
Report.fit 'body'
|
|
).observe d.body,
|
|
childList: true
|
|
attributes: true
|
|
subtree: true
|
|
Report.fit 'body'
|
|
|
|
fit: (selector) ->
|
|
return if not ((el = $ selector, doc) and getComputedStyle(el).visibility isnt 'hidden')
|
|
dy = el.getBoundingClientRect().bottom - doc.clientHeight + 8
|
|
window.resizeBy 0, dy if dy > 0
|
|
|
|
archive: ->
|
|
return unless (urls = Redirect.report g.BOARD.ID).length
|
|
|
|
form = $ 'form'
|
|
types = $.id 'reportTypes'
|
|
message = $ 'h3'
|
|
|
|
fieldset = $.el 'fieldset',
|
|
id: 'archive-report'
|
|
hidden: true
|
|
,
|
|
<%= readHTML('ArchiveReport.html') %>
|
|
enabled = $ '#archive-report-enabled', fieldset
|
|
reason = $ '#archive-report-reason', fieldset
|
|
submit = $ '#archive-report-submit', fieldset
|
|
|
|
$.on enabled, 'change', ->
|
|
reason.disabled = !@checked
|
|
|
|
if form and types
|
|
fieldset.hidden = !$('[value="31"]', types).checked
|
|
$.on types, 'change', (e) ->
|
|
fieldset.hidden = (e.target.value isnt '31')
|
|
Report.fit 'body'
|
|
$.after types, fieldset
|
|
Report.fit 'body'
|
|
$.one form, 'submit', (e) ->
|
|
if !fieldset.hidden and enabled.checked
|
|
e.preventDefault()
|
|
Report.archiveSubmit urls, reason.value, (results) =>
|
|
@action = '#archiveresults=' + encodeURIComponent JSON.stringify results
|
|
@submit()
|
|
else if message
|
|
fieldset.hidden = /Report submitted!/.test(message.textContent)
|
|
$.on enabled, 'change', ->
|
|
submit.hidden = !@checked
|
|
$.after message, fieldset
|
|
$.on submit, 'click', ->
|
|
Report.archiveSubmit urls, reason.value, Report.archiveResults
|
|
|
|
if (match = location.hash.match /^#archiveresults=(.*)$/)
|
|
try
|
|
Report.archiveResults JSON.parse decodeURIComponent match[1]
|
|
|
|
archiveSubmit: (urls, reason, cb) ->
|
|
form = $.formData
|
|
board: g.BOARD.ID
|
|
num: Report.postID
|
|
reason: reason
|
|
results = []
|
|
for [name, url] in urls
|
|
do (name, url) ->
|
|
$.ajax url, {
|
|
onloadend: ->
|
|
results.push [name, @response or {error: ''}]
|
|
if results.length is urls.length
|
|
cb results
|
|
form
|
|
}
|
|
return
|
|
|
|
archiveResults: (results) ->
|
|
fieldset = $.id 'archive-report'
|
|
for [name, response] in results
|
|
line = $.el 'h3',
|
|
className: 'archive-report-response'
|
|
if 'success' of response
|
|
$.addClass line, 'archive-report-success'
|
|
line.textContent = "#{name}: #{response.success}"
|
|
else
|
|
$.addClass line, 'archive-report-error'
|
|
line.textContent = "#{name}: #{response.error or 'Error reporting post.'}"
|
|
if fieldset
|
|
$.before fieldset, line
|
|
else
|
|
$.add d.body, line
|
|
return
|