leftypol/js/inline.js

87 lines
1.9 KiB
JavaScript
Raw Normal View History

2014-09-23 19:52:06 -07:00
;(function() {
2014-10-05 15:51:22 -07:00
var App = {
cache: {},
get: function(url, cb) {
var $page = App.cache[url]
if ($page)
return cb($page)
$.get(url, function(data) {
var $page = $(data)
App.cache[url] = $page
cb($page)
})
}
}
2014-09-24 12:49:18 -07:00
2014-09-23 21:25:34 -07:00
var inline = function(e) {
e.preventDefault()
2014-09-25 10:11:33 -07:00
var $root = $(this).closest('.post')
2014-10-03 13:32:41 -07:00
var targetNum = this.textContent.slice(2)
2014-09-23 21:25:34 -07:00
2014-10-03 13:32:41 -07:00
var $clone = $root.find('#inline_' + targetNum)
2014-09-23 21:25:34 -07:00
if ($clone.length)
return $clone.remove()
2014-10-03 13:40:05 -07:00
var srcOP = $root.closest('[id^=thread]').attr('id').match(/\d+/)[0]
2014-09-23 21:25:34 -07:00
2014-10-03 13:40:05 -07:00
var node, targetOP
if (this.className) {// backlink
node = $root.find('> .intro')
targetOP = srcOP
} else {
node = $(this)
targetOP = this.pathname.match(/(\d+).html/)[1]
}
2014-09-25 10:11:33 -07:00
2014-09-23 21:25:34 -07:00
var link = {
2014-09-25 10:11:33 -07:00
node: node,
2014-10-03 13:32:41 -07:00
targetNum: targetNum
2014-09-23 21:25:34 -07:00
}
2014-09-24 12:17:30 -07:00
2014-10-03 13:40:05 -07:00
var selector = targetNum === targetOP
? '#op_' + srcOP
2014-10-03 13:40:05 -07:00
: '#reply_' + targetNum
2014-10-03 13:32:41 -07:00
if (srcOP === targetOP) {
2014-10-04 08:16:01 -07:00
if (targetNum === targetOP)
link.node = link.node.next()// bypass `(OP)`
2014-10-03 13:28:52 -07:00
2014-09-24 12:17:30 -07:00
var $target = $(selector)
2014-10-03 13:28:52 -07:00
if ($target.length)
return add(link, $target)
2014-09-24 12:49:18 -07:00
}
2014-10-05 15:51:22 -07:00
App.get(this.pathname, function($page) {
var $target = $page.find(selector)
2014-09-24 12:49:18 -07:00
add(link, $target)
})
2014-09-23 21:25:34 -07:00
}
var add = function(link, $target) {
var $clone = $target.clone(true)
$clone.find('.inline').remove()
2014-09-23 21:25:34 -07:00
$clone.attr({
2014-10-03 09:53:11 -07:00
"class": 'inline post',
2014-10-03 13:32:41 -07:00
id: 'inline_' + link.targetNum,
2014-10-03 13:28:52 -07:00
style: null// XXX remove post hover styling
2014-09-23 21:25:34 -07:00
})
2014-10-03 13:05:45 -07:00
$clone.insertAfter(link.node)
2014-09-23 21:25:34 -07:00
}
2014-09-23 19:52:06 -07:00
$('head').append(
'<style>' +
2014-10-04 06:48:29 -07:00
'.inline {' +
'border: 1px dashed black;' +
'white-space: normal;' +
'overflow: auto;' + // clearfix
'}' +
2014-09-23 19:52:06 -07:00
'</style>')
// don't attach to outbound links
$('.body a:not([rel]), .mentioned a')
2014-10-03 09:17:19 -07:00
.attr('onclick', null)// XXX disable highlightReply
2014-09-25 09:58:44 -07:00
.click(inline)
2014-09-23 21:25:34 -07:00
})()