diff --git a/4chan_x.user.js b/4chan_x.user.js index 6c432454c..d6e631ca4 100644 --- a/4chan_x.user.js +++ b/4chan_x.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name 4chan x -// @version 2.28.0 +// @version 2.28.1 // @namespace aeosynth // @description Adds various features. // @copyright 2009-2011 James Campos @@ -20,7 +20,7 @@ * Copyright (c) 2009-2011 James Campos * Copyright (c) 2012 Nicolas Stepien * http://mayhemydg.github.com/4chan-x/ - * 4chan X 2.28.0 + * 4chan X 2.28.1 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation @@ -212,7 +212,7 @@ NAMESPACE = '4chan_x.'; - VERSION = '2.28.0'; + VERSION = '2.28.1'; SECOND = 1000; @@ -676,8 +676,9 @@ return text.join(''); }, filename: function(post) { - var file; - if (file = $('span', post.filesize)) return file.title; + var file, filesize; + filesize = post.filesize; + if (filesize && (file = $('span', filesize))) return file.title; return false; }, dimensions: function(post) { @@ -889,22 +890,21 @@ ReplyHiding = { init: function() { - return g.callbacks.push(this.node); - }, - node: function(post) { - var a, dd, id, reply; - if (post["class"]) return; - dd = $('.doubledash', post.root); - dd.className = 'replyhider'; - a = $.el('a', { + this.a = $.el('a', { textContent: '[ - ]', href: 'javascript:;' }); + return g.callbacks.push(this.node); + }, + node: function(post) { + var a, dd; + if (post["class"]) return; + dd = post.el.previousSibling; + dd.className = 'replyhider'; + a = ReplyHiding.a.cloneNode(true); $.on(a, 'click', ReplyHiding.cb.hide); $.replace(dd.firstChild, a); - reply = dd.nextSibling; - id = reply.id; - if (id in g.hiddenReplies) return ReplyHiding.hide(reply); + if (post.id in g.hiddenReplies) return ReplyHiding.hide(post.el); }, cb: { hide: function() { @@ -1315,8 +1315,10 @@ return $.rm(script); }); if (conf['Persistent QR']) { - qr.dialog(); - if (conf['Auto Hide QR']) qr.hide(); + setTimeout(function() { + qr.dialog(); + if (conf['Auto Hide QR']) return qr.hide(); + }); } $.on(d, 'dragover', qr.dragOver); $.on(d, 'drop', qr.dropFile); @@ -2813,6 +2815,7 @@ }, node: function(post) { var name, node; + if (post["class"] === 'inline') return; name = $('.commentpostername, .postername', post.el); name.textContent = 'Anonymous'; node = name.nextElementSibling; @@ -3536,11 +3539,22 @@ Unread.replies = Unread.replies.slice(i); return Unread.update(); }, + setTitle: function(count) { + if (this.scheduled) { + clearTimeout(this.scheduled); + delete Unread.scheduled; + this.setTitle(count); + return; + } + return this.scheduled = setTimeout((function() { + return d.title = "(" + count + ") " + Unread.title; + }), 5); + }, update: function(forceUpdate) { var count; if (!g.REPLY) return; count = this.replies.length; - if (conf['Unread Count']) d.title = "(" + count + ") " + this.title; + if (conf['Unread Count']) this.setTitle(count); if (!(conf['Unread Favicon'] && (count < 2 || forceUpdate))) return; Favicon.el.href = g.dead ? count ? Favicon.unreadDead : Favicon.dead : count ? Favicon.unread : Favicon["default"]; return $.add(d.head, Favicon.el); diff --git a/Cakefile b/Cakefile index 8e31a681b..83e63d033 100644 --- a/Cakefile +++ b/Cakefile @@ -2,7 +2,7 @@ {exec} = require 'child_process' fs = require 'fs' -VERSION = '2.28.0' +VERSION = '2.28.1' HEADER = """ // ==UserScript== diff --git a/changelog b/changelog index 76770c09f..fd2f7eacf 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,6 @@ master + +2.28.1 - Mayhem General performance improvements. Threads will now be updated instantly after posting through the QR. diff --git a/latest.js b/latest.js index 37b46db7e..7ea5bbcc8 100644 --- a/latest.js +++ b/latest.js @@ -1 +1 @@ -postMessage({version:'2.28.0'},'*') \ No newline at end of file +postMessage({version:'2.28.1'},'*') \ No newline at end of file diff --git a/script.coffee b/script.coffee index c79f21e07..5878fae00 100644 --- a/script.coffee +++ b/script.coffee @@ -172,7 +172,7 @@ conf = {} ) null, config NAMESPACE = '4chan_x.' -VERSION = '2.28.0' +VERSION = '2.28.1' SECOND = 1000 MINUTE = 60*SECOND HOUR = 60*MINUTE @@ -594,7 +594,8 @@ Filter = text.push if data = nodes.snapshotItem(i).data then data else '\n' text.join '' filename: (post) -> - if file = $ 'span', post.filesize + {filesize} = post + if filesize and file = $ 'span', filesize return file.title false dimensions: (post) -> @@ -748,22 +749,21 @@ ExpandThread = ReplyHiding = init: -> + @a = $.el 'a', + textContent: '[ - ]' + href: 'javascript:;' g.callbacks.push @node node: (post) -> return if post.class - dd = $ '.doubledash', post.root + dd = post.el.previousSibling dd.className = 'replyhider' - a = $.el 'a', - textContent: '[ - ]' - href: 'javascript:;' + a = ReplyHiding.a.cloneNode true $.on a, 'click', ReplyHiding.cb.hide $.replace dd.firstChild, a - reply = dd.nextSibling - id = reply.id - if id of g.hiddenReplies - ReplyHiding.hide reply + if post.id of g.hiddenReplies + ReplyHiding.hide post.el cb: hide: -> @@ -1071,8 +1071,9 @@ qr = $.rm script if conf['Persistent QR'] - qr.dialog() - qr.hide() if conf['Auto Hide QR'] + setTimeout -> + qr.dialog() + qr.hide() if conf['Auto Hide QR'] $.on d, 'dragover', qr.dragOver $.on d, 'drop', qr.dropFile $.on d, 'dragstart', qr.drag @@ -2368,6 +2369,7 @@ Anonymize = init: -> g.callbacks.push @node node: (post) -> + return if post.class is 'inline' name = $ '.commentpostername, .postername', post.el name.textContent = 'Anonymous' node = name.nextElementSibling @@ -2909,13 +2911,23 @@ Unread = Unread.replies = Unread.replies[i..] Unread.update() + setTitle: (count) -> + if @scheduled + clearTimeout @scheduled + delete Unread.scheduled + @setTitle count + return + @scheduled = setTimeout (-> + d.title = "(#{count}) #{Unread.title}" + ), 5 + update: (forceUpdate) -> return unless g.REPLY count = @replies.length if conf['Unread Count'] - d.title = "(#{count}) #{@title}" + @setTitle count unless conf['Unread Favicon'] and (count < 2 or forceUpdate) return