From ebd00f5a722804ef86cf6609056d6f59303d8b83 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 11 Jan 2015 17:52:45 -0500 Subject: [PATCH] Check for offline doc updates automatically --- assets/javascripts/app/app.coffee | 5 +++++ assets/javascripts/collections/docs.coffee | 13 +++++++++++++ assets/javascripts/templates/notif_tmpl.coffee | 4 ++++ .../javascripts/templates/pages/offline_tmpl.coffee | 4 ++-- .../javascripts/views/content/offline_page.coffee | 12 ++++++------ 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/assets/javascripts/app/app.coffee b/assets/javascripts/app/app.coffee index ebdd0396..ad0772f6 100644 --- a/assets/javascripts/app/app.coffee +++ b/assets/javascripts/app/app.coffee @@ -96,6 +96,11 @@ new app.views.Notif 'Share', autoHide: null if visitCount is 5 new app.views.Notif 'Thanks', autoHide: null if visitCount is 10 new app.views.News() + @checkForDocUpdates() + + checkForDocUpdates: -> + @docs.checkForUpdates (i) -> + new app.views.Notif 'UpdateDocs', autoHide: null if i > 0 reload: -> @docs.clearCache() diff --git a/assets/javascripts/collections/docs.coffee b/assets/javascripts/collections/docs.coffee index 55d3c8d5..1a69ac85 100644 --- a/assets/javascripts/collections/docs.coffee +++ b/assets/javascripts/collections/docs.coffee @@ -42,7 +42,9 @@ class app.collections.Docs extends app.Collection @models[i++].uninstall(next, next) else callback() + return next() + return getInstallStatuses: (callback) -> app.db.versions @models, (statuses) -> @@ -50,3 +52,14 @@ class app.collections.Docs extends app.Collection for key, value of statuses statuses[key] = installed: !!value, mtime: value callback(statuses) + return + return + + checkForUpdates: (callback) -> + @getInstallStatuses (statuses) => + i = 0 + if statuses + i += 1 for slug, status of statuses when status.installed and @findBy('slug', slug).mtime isnt status.mtime + callback(i) + return + return diff --git a/assets/javascripts/templates/notif_tmpl.coffee b/assets/javascripts/templates/notif_tmpl.coffee index 4859e6d4..9298c260 100644 --- a/assets/javascripts/templates/notif_tmpl.coffee +++ b/assets/javascripts/templates/notif_tmpl.coffee @@ -36,3 +36,7 @@ app.templates.notifThanks = ->
  • Shopify is where I spend my weekdays. Interested in working on one of the biggest commerce platforms in the world, in a delightful work environment? We're hiring!

    Have a great day :) """ + +app.templates.notifUpdateDocs = -> + textNotif """ Documentation updates available. """, + """ Install them as soon as possible to avoid broken pages. """ diff --git a/assets/javascripts/templates/pages/offline_tmpl.coffee b/assets/javascripts/templates/pages/offline_tmpl.coffee index 6af80e41..c8bfb376 100644 --- a/assets/javascripts/templates/pages/offline_tmpl.coffee +++ b/assets/javascripts/templates/pages/offline_tmpl.coffee @@ -3,7 +3,7 @@ app.templates.offlinePage = (docs) -> """

    @@ -59,7 +59,7 @@ app.templates.offlineDoc = (doc, status) -> """ else if outdated """ - Outdated + Outdated Update - Uninstall """ else diff --git a/assets/javascripts/views/content/offline_page.coffee b/assets/javascripts/views/content/offline_page.coffee index e9bc12a3..6acc446a 100644 --- a/assets/javascripts/views/content/offline_page.coffee +++ b/assets/javascripts/views/content/offline_page.coffee @@ -45,16 +45,16 @@ class app.views.OfflinePage extends app.View return onClick: (event) => - target = event.target - if action = target.getAttribute('data-action') + return unless link = $.closestLink(event.target) + if action = link.getAttribute('data-action') $.stopEvent(event) - doc = @docByEl(target) + doc = @docByEl(link) action = 'install' if action is 'update' doc[action](@onInstallSuccess.bind(@, doc), @onInstallError.bind(@, doc)) - target.parentNode.innerHTML = "#{target.textContent.replace(/e$/, '')}ing…" - else if action = target.getAttribute('data-action-all') + link.parentNode.innerHTML = "#{link.textContent.replace(/e$/, '')}ing…" + else if action = link.getAttribute('data-action-all') $.stopEvent(event) - link.click() for link in @findAll("a[data-action='#{action}']") + el.click() for el in @findAll("a[data-action='#{action}']") return onInstallSuccess: (doc) ->