88 lines
2.6 KiB
CoffeeScript
88 lines
2.6 KiB
CoffeeScript
Sauce =
|
|
init: ->
|
|
return unless g.VIEW in ['index', 'thread'] and Conf['Sauce']
|
|
|
|
links = []
|
|
for link in Conf['sauces'].split '\n'
|
|
try
|
|
links.push link.trim() if link[0] isnt '#'
|
|
catch err
|
|
# Don't add random text plz.
|
|
return unless links.length
|
|
|
|
@links = links
|
|
@link = $.el 'a',
|
|
target: '_blank'
|
|
className: 'sauce'
|
|
Post.callbacks.push
|
|
name: 'Sauce'
|
|
cb: @node
|
|
|
|
sandbox: (url) ->
|
|
E.url <%= importHTML('Images/Sandbox') %>
|
|
|
|
rmOrigin: (e) ->
|
|
return if e.shiftKey or e.altKey or e.ctrlKey or e.metaKey or e.button isnt 0
|
|
# Work around mixed content restrictions (data: URIs have inherited origin).
|
|
$.open @href
|
|
e.preventDefault()
|
|
|
|
createSauceLink: (link, post) ->
|
|
return null unless link = link.trim()
|
|
|
|
parts = {}
|
|
for part, i in link.split /;(?=(?:text|boards|types|sandbox):?)/
|
|
if i is 0
|
|
parts['url'] = part
|
|
else
|
|
m = part.match /^(\w*):?(.*)$/
|
|
parts[m[1]] = m[2]
|
|
parts['text'] or= parts['url'].match(/(\w+)\.\w+\//)?[1] or '?'
|
|
ext = post.file.url.match(/[^.]*$/)[0]
|
|
|
|
skip = false
|
|
for key of parts
|
|
parts[key] = parts[key].replace /%(T?URL|IMG|s?MD5|board|name|%|semi)/g, (parameter) ->
|
|
type = {
|
|
'%TURL': post.file.thumbURL
|
|
'%URL': post.file.url
|
|
'%IMG': if ext in ['gif', 'jpg', 'png'] then post.file.url else post.file.thumbURL
|
|
'%MD5': post.file.MD5
|
|
'%sMD5': post.file.MD5?.replace /[+/=]/g, (c) -> {'+': '-', '/': '_', '=': ''}[c]
|
|
'%board': post.board.ID
|
|
'%name': post.file.name
|
|
'%%': '%'
|
|
'%semi': ';'
|
|
}[parameter]
|
|
if not type?
|
|
skip = true
|
|
return ''
|
|
|
|
if key is 'url' and parameter isnt '%%' and parameter isnt '%semi'
|
|
type = JSON.stringify type if /^javascript:/i.test parts['url']
|
|
type = encodeURIComponent type
|
|
type
|
|
|
|
return null if skip
|
|
return null unless !parts['boards'] or post.board.ID in parts['boards'].split ','
|
|
return null unless !parts['types'] or ext in parts['types'].split ','
|
|
|
|
url = parts['url']
|
|
url = Sauce.sandbox url if parts['sandbox']?
|
|
|
|
a = Sauce.link.cloneNode true
|
|
a.href = url
|
|
a.textContent = parts['text']
|
|
a.removeAttribute 'target' if /^javascript:/i.test parts['url']
|
|
$.on a, 'click', Sauce.rmOrigin if parts['sandbox']?
|
|
a
|
|
|
|
node: ->
|
|
return if @isClone or !@file
|
|
|
|
nodes = []
|
|
for link in Sauce.links when node = Sauce.createSauceLink link, @
|
|
# \u00A0 is nbsp
|
|
nodes.push $.tn('\u00A0'), node
|
|
$.add @file.text, nodes
|