$(document).ready(function() { 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) }) }, options: { add: function(key, description, tab) { tab || (tab = 'general') var checked = App.options.get(key) var $el = $( '
' + '' + '
') $el .find('input') .prop('checked', checked) .on('change', App.options.check(key)) window.Options.extend_tab(tab, $el) }, get: function(key) { if (localStorage[key]) return JSON.parse(localStorage[key]) }, check: function(key) { return function(e) { var val = this.checked localStorage[key] = JSON.stringify(val) } } } } var inline = function(e) { e.preventDefault() var $root = $(this).closest('.post') var targetNum = this.textContent.slice(2) var srcOP = $root.closest('[id^=thread]').attr('id').match(/\d+/)[0] var node, targetOP var isBacklink = !!this.className if (isBacklink) { node = $root.find('> .intro') targetOP = srcOP } else { node = $(this) var to_search = inMod ? this.search : this.pathname; targetOP = to_search.match(/(\d+).html/)[1] } var link = { id: 'inline_' + targetNum, isBacklink: isBacklink, node: node } var selector = targetNum === targetOP ? '#op_' + srcOP : '#reply_' + targetNum var $clone = $root.find('#inline_' + targetNum) if ($clone.length) { $clone.remove() $(selector) .show() .next() .show() return } if (srcOP === targetOP) { if (targetNum === targetOP) link.node = link.node.next()// bypass `(OP)` var $target = $(selector) if ($target.length) return add(link, $target) } var $loading = $('
loading...
') .attr('id', link.id) .insertAfter(link.node) App.get(this.pathname, function($page) { $loading.remove() var $target = $page.find(selector) add(link, $target) }) } var add = function(link, $target) { var $clone = $target.clone(true) if (link.isBacklink && App.options.get('hidePost')) $target .hide() .next() .hide() $clone.find('.inline').remove() $clone.attr({ "class": 'inline post', id: link.id, style: null// XXX remove post hover styling }) $clone.insertAfter(link.node) } App.options.add('useInlining', 'Enable inlining') App.options.add('hidePost', 'Hide inlined backlinked posts') $('head').append( '') // don't attach to outbound links if (App.options.get('useInlining')) { var assign_inline = function() { $('.body a:not([rel]), .mentioned a') .attr('onclick', null)// XXX disable highlightReply .off('click') .click(inline) } assign_inline(); $(document).on('new_post', function(e, post) { assign_inline(); }); } });