Move non-QR related code out of QR's code using the QRPostSuccessful CustomEvent. So pure~

This commit is contained in:
Nicolas Stepien 2012-07-12 14:31:55 +02:00
parent b505dd34df
commit 19d4e1c777
2 changed files with 52 additions and 30 deletions

View File

@ -2396,9 +2396,6 @@
if (Conf['Auto Hide QR'] && !QR.cooldown.auto) {
QR.hide();
}
if (Conf['Thread Watcher'] && Conf['Auto Watch Reply'] && threadID !== 'new') {
Watcher.watch(threadID);
}
if (!QR.cooldown.auto && $.x('ancestor::div[@id="qr"]', d.activeElement)) {
d.activeElement.blur();
}
@ -2487,15 +2484,13 @@
$.set('QR.persona', persona);
_ref = msg.lastChild.textContent.match(/thread:(\d+),no:(\d+)/), _ = _ref[0], threadID = _ref[1], postID = _ref[2];
$.event(QR.el, new CustomEvent('QRPostSuccessful', {
bubbles: true,
detail: {
threadID: threadID,
postID: postID
}
}));
if (threadID === '0') {
if (Conf['Thread Watcher'] && Conf['Auto Watch']) {
$.set('autoWatch', postID);
}
location.pathname = "/" + g.BOARD + "/res/" + postID;
} else {
QR.cooldown.auto = QR.replies.length > 1;
@ -2509,13 +2504,6 @@
} else {
QR.close();
}
if (g.REPLY && (Conf['Unread Count'] || Conf['Unread Favicon'])) {
Unread.foresee.push(postID);
}
if (g.REPLY && Conf['Thread Updater'] && Conf['Auto Update This']) {
Updater.unsuccessfulFetchCount = 0;
setTimeout(Updater.update, 500);
}
QR.status();
return QR.resetFileInput();
},
@ -2878,7 +2866,18 @@
}
}
$.add(d.body, dialog);
return $.on(d, 'visibilitychange ovisibilitychange mozvisibilitychange webkitvisibilitychange', function() {
$.on(d, 'QRPostSuccessful', this.cb.post);
return $.on(d, 'visibilitychange ovisibilitychange mozvisibilitychange webkitvisibilitychange', this.cb.visibility);
},
cb: {
post: function() {
if (!Conf['Auto Update This']) {
return;
}
Updater.unsuccessfulFetchCount = 0;
return setTimeout(Updater.update, 500);
},
visibility: function() {
var state;
state = d.visibilityState || d.oVisibilityState || d.mozVisibilityState || d.webkitVisibilityState;
if (state !== 'visible') {
@ -2888,9 +2887,7 @@
if (Updater.timer.textContent < -Conf['Interval']) {
return Updater.timer.textContent = -Updater.getInterval();
}
});
},
cb: {
},
interval: function() {
var val;
val = parseInt(this.value, 10);
@ -3058,6 +3055,7 @@
} else {
this.refresh();
}
$.on(d, 'QRPostSuccessful', this.cb.post);
return $.sync('watched', this.refresh);
},
refresh: function(watched) {
@ -3106,6 +3104,17 @@
var thread;
thread = this.nextElementSibling.pathname.split('/');
return Watcher.unwatch(thread[3], thread[1]);
},
post: function(e) {
var postID, threadID, _ref;
_ref = e.detail, postID = _ref.postID, threadID = _ref.threadID;
if (threadID === '0') {
if (Conf['Auto Watch']) {
return $.set('autoWatch', postID);
}
} else if (Conf['Auto Watch Reply']) {
return Watcher.watch(threadID);
}
}
},
toggle: function(thread) {
@ -4274,12 +4283,16 @@
Unread = {
init: function() {
this.title = d.title;
$.on(d, 'QRPostSuccessful', this.post);
this.update();
$.on(window, 'scroll', Unread.scroll);
return Main.callbacks.push(this.node);
},
replies: [],
foresee: [],
post: function(e) {
return Unread.foresee.push(e.detail.postID);
},
node: function(post) {
var count, el, index;
if ((index = Unread.foresee.indexOf(post.ID)) !== -1) {

View File

@ -1860,8 +1860,6 @@ QR =
QR.cooldown.auto = QR.replies.length > 1
if Conf['Auto Hide QR'] and not QR.cooldown.auto
QR.hide()
if Conf['Thread Watcher'] and Conf['Auto Watch Reply'] and threadID isnt 'new'
Watcher.watch threadID
if not QR.cooldown.auto and $.x 'ancestor::div[@id="qr"]', d.activeElement
# Unfocus the focused element if it is one within the QR and we're not auto-posting.
d.activeElement.blur()
@ -1951,13 +1949,12 @@ QR =
# Post/upload confirmed as successful.
$.event QR.el, new CustomEvent 'QRPostSuccessful',
bubbles: true
detail:
threadID: threadID
postID: postID
if threadID is '0' # new thread
if Conf['Thread Watcher'] and Conf['Auto Watch']
$.set 'autoWatch', postID
# auto-noko
location.pathname = "/#{g.BOARD}/res/#{postID}"
else
@ -1972,12 +1969,6 @@ QR =
else
QR.close()
if g.REPLY and (Conf['Unread Count'] or Conf['Unread Favicon'])
Unread.foresee.push postID
if g.REPLY and Conf['Thread Updater'] and Conf['Auto Update This']
Updater.unsuccessfulFetchCount = 0
setTimeout Updater.update, 500
QR.status()
QR.resetFileInput()
@ -2308,15 +2299,21 @@ Updater =
$.add d.body, dialog
$.on d, 'visibilitychange ovisibilitychange mozvisibilitychange webkitvisibilitychange', ->
$.on d, 'QRPostSuccessful', @cb.post
$.on d, 'visibilitychange ovisibilitychange mozvisibilitychange webkitvisibilitychange', @cb.visibility
cb:
post: ->
return unless Conf['Auto Update This']
Updater.unsuccessfulFetchCount = 0
setTimeout Updater.update, 500
visibility: ->
state = d.visibilityState or d.oVisibilityState or d.mozVisibilityState or d.webkitVisibilityState
return if state isnt 'visible'
# Reset the counter when we focus this tab.
Updater.unsuccessfulFetchCount = 0
if Updater.timer.textContent < -Conf['Interval']
Updater.timer.textContent = -Updater.getInterval()
cb:
interval: ->
val = parseInt @value, 10
@value = if val > 5 then val else 5
@ -2456,6 +2453,7 @@ Watcher =
#populate watcher, display watch buttons
@refresh()
$.on d, 'QRPostSuccessful', @cb.post
$.sync 'watched', @refresh
refresh: (watched) ->
@ -2493,6 +2491,13 @@ Watcher =
x: ->
thread = @nextElementSibling.pathname.split '/'
Watcher.unwatch thread[3], thread[1]
post: (e) ->
{postID, threadID} = e.detail
if threadID is '0'
if Conf['Auto Watch']
$.set 'autoWatch', postID
else if Conf['Auto Watch Reply']
Watcher.watch threadID
toggle: (thread) ->
id = $('.favicon + input', thread).name
@ -3390,6 +3395,7 @@ ThreadStats =
Unread =
init: ->
@title = d.title
$.on d, 'QRPostSuccessful', @post
@update()
$.on window, 'scroll', Unread.scroll
Main.callbacks.push @node
@ -3397,6 +3403,9 @@ Unread =
replies: []
foresee: []
post: (e) ->
Unread.foresee.push e.detail.postID
node: (post) ->
if (index = Unread.foresee.indexOf post.ID) isnt -1
Unread.foresee.splice index, 1