diff --git a/src/General/Config.coffee b/src/General/Config.coffee
index 322bcc5f9..60c3822af 100755
--- a/src/General/Config.coffee
+++ b/src/General/Config.coffee
@@ -935,6 +935,10 @@ Config =
true
'Automatically fetch new posts.'
]
+ 'Ignore Offline Status': [
+ false
+ 'Update even if your browser reports you are offline.'
+ ]
'Optional Increase': [
false
'Increase the intervals between updates on threads without new posts.'
diff --git a/src/General/css/style.css b/src/General/css/style.css
index 724b4e886..532e62b48 100755
--- a/src/General/css/style.css
+++ b/src/General/css/style.css
@@ -777,8 +777,8 @@ span.hide-announcement {
.new {
color: limegreen;
}
-#update-status.new {
- margin-right: 5px;
+#update-status:not(.empty) + #update-timer:not(.empty):not(.loading) {
+ margin-left: 5px;
}
#update-timer {
cursor: pointer;
diff --git a/src/Monitoring/ThreadUpdater.coffee b/src/Monitoring/ThreadUpdater.coffee
index f967e5ec9..22c04c557 100755
--- a/src/Monitoring/ThreadUpdater.coffee
+++ b/src/Monitoring/ThreadUpdater.coffee
@@ -5,7 +5,7 @@ ThreadUpdater =
if Conf['Updater and Stats in Header']
@dialog = sc = $.el 'span',
id: 'updater'
- $.extend sc, <%= html('') %>
+ $.extend sc, <%= html('') %>
$.ready ->
Header.addShortcut sc
else
@@ -19,7 +19,6 @@ ThreadUpdater =
@timer = $ '#update-timer', sc
@status = $ '#update-status', sc
- @isUpdating = Conf['Auto Update']
$.on @timer, 'click', @update
$.on @status, 'click', @update
@@ -41,7 +40,7 @@ ThreadUpdater =
$.on input, 'change', @cb.scrollBG
@cb.scrollBG()
else if input.name is 'Auto Update'
- $.on input, 'change', @cb.autoUpdate
+ $.on input, 'change', @setInterval
subEntries.push el: el
@settings = $.el 'span',
@@ -73,10 +72,7 @@ ThreadUpdater =
$.on d, 'QRPostSuccessful', ThreadUpdater.cb.checkpost
$.on d, 'visibilitychange', ThreadUpdater.cb.visibility
- if ThreadUpdater.thread.isArchived
- ThreadUpdater.set 'status', 'Archived', 'warning'
- else
- ThreadUpdater.cb.online()
+ ThreadUpdater.setInterval()
###
http://freesound.org/people/pierrecartoons1979/sounds/90112/
@@ -87,51 +83,54 @@ ThreadUpdater =
cb:
online: ->
return if ThreadUpdater.thread.isDead
- if ThreadUpdater.online = navigator.onLine
+
+ if navigator.onLine
+ ThreadUpdater.set 'status', ''
+ else
+ ThreadUpdater.set 'status', 'Offline', 'warning'
+
+ if Conf['Auto Update'] and not Conf['Ignore Offline Status']
ThreadUpdater.outdateCount = 0
ThreadUpdater.setInterval()
- ThreadUpdater.set 'status', '', ''
- else
- ThreadUpdater.set 'timer', ''
- ThreadUpdater.set 'status', 'Offline', 'warning'
- clearTimeout ThreadUpdater.timeoutID
+
checkpost: (e) ->
unless ThreadUpdater.checkPostCount
return if e and e.detail.threadID isnt ThreadUpdater.thread.ID
ThreadUpdater.seconds = 0
ThreadUpdater.outdateCount = 0
- ThreadUpdater.set 'timer', '...'
+ ThreadUpdater.set 'timer', '...', 'loading'
unless ThreadUpdater.thread.isDead or ThreadUpdater.foundPost or ThreadUpdater.checkPostCount >= 5
return setTimeout ThreadUpdater.update, ++ThreadUpdater.checkPostCount * $.SECOND
ThreadUpdater.setInterval()
ThreadUpdater.checkPostCount = 0
delete ThreadUpdater.foundPost
delete ThreadUpdater.postID
+
visibility: ->
return if d.hidden
# Reset the counter when we focus this tab.
ThreadUpdater.outdateCount = 0
if ThreadUpdater.seconds > ThreadUpdater.interval
ThreadUpdater.setInterval()
+
scrollBG: ->
ThreadUpdater.scrollBG = if Conf['Scroll BG']
-> true
else
-> not d.hidden
- autoUpdate: ->
- ThreadUpdater.count ThreadUpdater.isUpdating = @checked
+
interval: (e) ->
val = parseInt @value, 10
if val < 1 then val = 1
ThreadUpdater.interval = @value = val
$.cb.value.call @ if e
+
load: ->
{req} = ThreadUpdater
switch req.status
when 200
ThreadUpdater.parse req.response.posts
if ThreadUpdater.thread.isArchived
- ThreadUpdater.set 'status', 'Archived', 'warning'
ThreadUpdater.kill()
else
ThreadUpdater.setInterval()
@@ -148,7 +147,6 @@ ThreadUpdater =
else
confirmed = false
if confirmed
- ThreadUpdater.set 'status', '404', 'warning'
ThreadUpdater.kill()
else
ThreadUpdater.error req
@@ -159,23 +157,40 @@ ThreadUpdater =
ThreadUpdater.cb.checkpost()
kill: ->
- ThreadUpdater.set 'timer', ''
- clearTimeout ThreadUpdater.timeoutID
ThreadUpdater.thread.kill()
+ ThreadUpdater.setInterval()
$.event 'ThreadUpdate',
404: true
threadID: ThreadUpdater.thread.fullID
error: (req) ->
+ if req.status is 304
+ ThreadUpdater.set 'status', ''
ThreadUpdater.setInterval()
- [text, klass] = if req.status is 304
- ['', '']
- else
- ["#{req.statusText} (#{req.status})", 'warning']
- ThreadUpdater.set 'status', text, klass
+ unless req.status
+ ThreadUpdater.set 'status', 'Connection Failed', 'warning'
+ else if req.status isnt 304
+ ThreadUpdater.set 'status', "#{req.statusText} (#{req.status})", 'warning'
setInterval: ->
- i = ThreadUpdater.interval + 1
+ clearTimeout ThreadUpdater.timeoutID
+
+ if ThreadUpdater.thread.isDead
+ ThreadUpdater.set 'status', (if ThreadUpdater.thread.isArchived then 'Archived' else '404'), 'warning'
+ ThreadUpdater.set 'timer', ''
+ return
+
+ unless Conf['Auto Update']
+ ThreadUpdater.set 'timer', 'Update'
+ return
+
+ unless navigator.onLine
+ ThreadUpdater.set 'status', 'Offline', 'warning'
+ unless Conf['Ignore Offline Status']
+ ThreadUpdater.set 'timer', ''
+ return
+
+ i = ThreadUpdater.interval + 1
if Conf['Optional Increase']
# Lower the max refresh rate limit on visible tabs.
@@ -196,8 +211,7 @@ ThreadUpdater =
else
ThreadUpdater.seconds = i
- ThreadUpdater.set 'timer', ThreadUpdater.seconds
- ThreadUpdater.count true
+ ThreadUpdater.timeout()
intervalShortcut: ->
Settings.open 'Advanced'
@@ -212,11 +226,7 @@ ThreadUpdater =
node.data = text
else
el.textContent = text
- el.className = klass if klass isnt undefined
-
- count: (start) ->
- clearTimeout ThreadUpdater.timeoutID
- ThreadUpdater.timeout() if start and ThreadUpdater.isUpdating and navigator.onLine
+ el.className = klass ? (if text is '' then 'empty' else '')
timeout: ->
ThreadUpdater.timeoutID = setTimeout ThreadUpdater.timeout, 1000
@@ -224,18 +234,14 @@ ThreadUpdater =
ThreadUpdater.outdateCount++
ThreadUpdater.update()
else if n <= -60
- ThreadUpdater.set 'status', 'Retrying', ''
+ ThreadUpdater.set 'status', 'Retrying'
ThreadUpdater.update()
else if n > 0
ThreadUpdater.set 'timer', n
update: ->
- return unless navigator.onLine
- ThreadUpdater.count()
- if Conf['Auto Update']
- ThreadUpdater.set 'timer', '...'
- else
- ThreadUpdater.set 'timer', 'Update'
+ clearTimeout ThreadUpdater.timeoutID
+ ThreadUpdater.set 'timer', '...', 'loading'
ThreadUpdater.req?.abort()
ThreadUpdater.req = $.ajax "//a.4cdn.org/#{ThreadUpdater.thread.board}/thread/#{ThreadUpdater.thread}.json",
onloadend: ThreadUpdater.cb.load
@@ -307,7 +313,7 @@ ThreadUpdater =
ThreadUpdater.foundPost = true
unless count
- ThreadUpdater.set 'status', '', ''
+ ThreadUpdater.set 'status', ''
else
ThreadUpdater.set 'status', "+#{count}", 'new'
ThreadUpdater.outdateCount = 0