omega_target_web.coffee 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. angular.module('omegaTarget', []).factory 'omegaTarget', ($q) ->
  2. decodeError = (obj) ->
  3. if obj._error == 'error'
  4. err = new Error(obj.message)
  5. err.name = obj.name
  6. err.stack = obj.stack
  7. err.original = obj.original
  8. err
  9. else
  10. obj
  11. callBackground = (method, args...) ->
  12. d = $q['defer']()
  13. chrome.runtime.sendMessage({
  14. method: method
  15. args: args
  16. }, (response) ->
  17. if chrome.runtime.lastError?
  18. d.reject(chrome.runtime.lastError)
  19. return
  20. if response.error
  21. d.reject(decodeError(response.error))
  22. else
  23. d.resolve(response.result)
  24. )
  25. return d.promise
  26. isChromeUrl = (url) -> url.substr(0, 6) == 'chrome'
  27. optionsChangeCallback = []
  28. urlParser = document.createElement('a')
  29. omegaTarget =
  30. options: null
  31. state: (name, value) ->
  32. prefix = 'omega.local.'
  33. if arguments.length == 1
  34. getValue = (key) -> try JSON.parse(localStorage[prefix + key])
  35. if Array.isArray(name)
  36. return $q.when(name.map(getValue))
  37. else
  38. value = getValue(name)
  39. else
  40. localStorage[prefix + name] = JSON.stringify(value)
  41. return $q.when(value)
  42. addOptionsChangeCallback: (callback) ->
  43. optionsChangeCallback.push(callback)
  44. refresh: (args) ->
  45. return callBackground('getAll').then (opt) ->
  46. omegaTarget.options = opt
  47. for callback in optionsChangeCallback
  48. callback(omegaTarget.options)
  49. return args
  50. renameProfile: (fromName, toName) ->
  51. callBackground('renameProfile', fromName, toName).then omegaTarget.refresh
  52. optionsPatch: (patch) ->
  53. callBackground('patch', patch).then omegaTarget.refresh
  54. resetOptions: (opt) ->
  55. callBackground('reset', opt).then omegaTarget.refresh
  56. updateProfile: (name) ->
  57. callBackground('updateProfile', name).then((results) ->
  58. for own key, value of results
  59. results[key] = decodeError(value)
  60. results
  61. ).then omegaTarget.refresh
  62. getMessage: chrome.i18n.getMessage.bind(chrome.i18n)
  63. openOptions: ->
  64. d = $q['defer']()
  65. options_url = chrome.extension.getURL('options.html')
  66. chrome.tabs.query url: options_url, (tabs) ->
  67. if tabs.length > 0
  68. chrome.tabs.update(tabs[0].id, {active: true})
  69. else
  70. chrome.tabs.create({url: options_url})
  71. d.resolve()
  72. return d.promise
  73. applyProfile: (name) ->
  74. callBackground('applyProfile', name)
  75. addTempRule: (domain, profileName) ->
  76. callBackground('addTempRule', domain, profileName)
  77. addCondition: (condition, profileName) ->
  78. callBackground('addCondition', condition, profileName)
  79. addProfile: (profile) ->
  80. callBackground('addProfile', profile).then omegaTarget.refresh
  81. getActivePageInfo: ->
  82. # First, try to clear badges on opening the popup.
  83. callBackground('clearBadge')
  84. d = $q['defer']()
  85. chrome.tabs.query {active: true, lastFocusedWindow: true}, (tabs) ->
  86. d.resolve(tabs[0]?.url)
  87. return d.promise.then (url) ->
  88. return null if not url or isChromeUrl(url)
  89. urlParser.href = url
  90. domain = urlParser.hostname
  91. callBackground('queryTempRule', domain).then (profileName) ->
  92. url: url
  93. domain: domain
  94. tempRuleProfileName: profileName
  95. refreshActivePage: ->
  96. d = $q['defer']()
  97. chrome.tabs.query {active: true, lastFocusedWindow: true}, (tabs) ->
  98. if tabs[0].url and not isChromeUrl(tabs[0].url)
  99. chrome.tabs.reload(tabs[0].id)
  100. d.resolve()
  101. return d.promise
  102. return omegaTarget