Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // LJ Thread Unfolder
- // version 0.2
- // 2005-08-23
- // Copyright (c) 2005, Tim Babych
- // Homepage: http://clear.com.ua/projects/firefox/unfolder
- // Released under the GPL license
- // http://www.gnu.org/copyleft/gpl.html
- // Branched 2006-09-09 by Henrik Nyh <http://henrik.nyh.se>
- // Added "Unfold all".
- // ==UserScript==
- // @name LJ Thread Unfolder with "Unfold all"
- // @namespace http://clear.com.ua/projects/firefox/unfolder+http://henrik.nyh.se
- // @description Expands nested discussion threads in place.
- // @include http://*.insanejournal.com/*
- // @version 1
- // @grant none
- // @require https://gist.githubusercontent.com/arantius/3123124/raw/grant-none-shim.js
- // ==/UserScript==
- var unfoldNodes = [];
- function unfold_all() {
- unfoldNodes.forEach(unfold_thread);
- }
- var threadIdRE = /thread=(\d+)/;
- var allReplies = $x("//td/a[contains(@href, '?thread')]");
- allReplies.forEach(function(thisReplyLink) {
- t = document.createTextNode(' - ');
- thisReplyLink.parentNode.insertBefore(t, thisReplyLink.nextSibling);
- var threadId = thisReplyLink.href.match(threadIdRE)[1];
- a = document.createElement('A');
- with (a) {
- innerHTML = "Unfold";
- href = 'javascript:void(0)';
- addEventListener("click", unfold_click, false)
- setAttribute('thread_id', threadId);
- setAttribute('thread_href', thisReplyLink.href);
- }
- t.parentNode.insertBefore(a, t.nextSibling);
- unfoldNodes.push(a);
- d = document.createElement('div');
- d.style.display = 'none';
- d.id = 'thread_unfolder_temp_div_' + threadId;
- document.body.appendChild(d);
- });
- GM_addStyle(
- "a.unfold_thread {color:black; text-decoration:none; cursor:default; } " +
- "a.unfold_thread:hover {color:black; text-decoration:none; }" +
- "a.unfold_thread img { border:none; }"
- );
- // Inject "Unfold all" links
- if (!unfoldNodes.length)
- return;
- $x("//a[contains(@href, '?mode=reply')]/ancestor::b").forEach(function(b) {
- var comma = document.createTextNode(', ');
- b.appendChild(comma);
- var newA = document.createElement("A");
- with (newA) {
- innerHTML = "Unfold all";
- href = "javascript:void(0)";
- addEventListener("click", unfold_all, false);
- }
- b.appendChild(newA);
- b.insertBefore(newA, newA.previousSibling.previousSibling);
- b.insertBefore(comma, comma.previousSibling.previousSibling);
- });
- // Workhorses
- function unfold_click() {
- unfold_thread(this);
- }
- function unfold_thread(link) {
- with (link) {
- className = 'unfold_thread';
- innerHTML = loader;
- blur();
- }
- elem = link;
- // Closure yo!
- (function(elem) {
- GM_xmlhttpRequest({
- method: 'GET',
- url: link.getAttribute('thread_href'),
- onload: function(responseDetails) {
- dummy = document.getElementById('thread_unfolder_temp_div_'+elem.getAttribute('thread_id'));
- dummy.innerHTML = responseDetails.responseText;
- reply = document.getElementById('ljcmt'+elem.getAttribute('thread_id'));
- try { // If we fail, fail silently
- // get cell
- td = elem;
- while (td.nodeName != 'TD')
- td = td.parentNode;
- //cleanse cell
- while(td.firstChild)
- td.removeChild(td.firstChild);
- // remove nesting comments
- tbody = td.parentNode.parentNode;
- my_padding = tbody.firstChild.firstChild.firstChild.width;
- next_comment = tbody.parentNode.nextSibling.nextSibling.nextSibling;
- while(next_comment &&
- next_comment.firstChild &&
- next_comment.firstChild.firstChild &&
- next_comment.firstChild.firstChild.firstChild &&
- next_comment.firstChild.firstChild.firstChild.firstChild &&
- (next_comment.firstChild.firstChild.firstChild.firstChild.width > my_padding)) {
- to_del = next_comment;
- next_comment = next_comment.nextSibling.nextSibling.nextSibling;
- to_del.parentNode.removeChild(to_del);
- }
- // add comments there
- while(reply && reply.nodeName != 'HR') {
- next_one = reply.nextSibling;
- td.appendChild(reply);
- reply = next_one;
- }
- } catch(e) {}
- dummy.innerHTML = '';
- }
- });
- })(elem);
- }
- //========================================
- // ROUTINES
- //========================================
- loader = '<img src="data:image/gif;base64,R0lGODlhEAAQAMQAAP///+7u7t3d3bu7u6qqqpmZmYi'+
- 'IiHd3d2ZmZlVVVURERDMzMyIiIhEREQAR'+
- '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'+
- 'fySDhGYQdDWGQyUhADs="> Loading...'
- /* Staple functions */
- function $(id) { return document.getElementById(id); }
- function $x(path, root) {
- if (!root) root = document;
- var i, arr = [], xpr = document.evaluate(path, root, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for (i = 0; item = xpr.snapshotItem(i); i++) arr.push(item);
- return arr;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement