local-store.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import Ember from 'ember';
  2. export default Ember.Service.extend({
  3. _storage: window.localStorage,
  4. _prefix: '_misago_',
  5. _watchers: null,
  6. _initWatches: function() {
  7. this.set('_watchers', []);
  8. var self = this;
  9. window.addEventListener('storage', function(e) {
  10. self._handleStorageEvent(e);
  11. });
  12. }.on('init'),
  13. _handleStorageEvent: function(e) {
  14. var newValueJson = JSON.parse(e.newValue);
  15. Ember.$.each(this.get('_watchers'), function(i, watcher) {
  16. if (watcher.keyName === e.key && e.oldValue !== e.newValue) {
  17. watcher.callback(newValueJson);
  18. }
  19. });
  20. },
  21. prefixKey: function(keyName) {
  22. return this.get('_prefix') + keyName;
  23. },
  24. setItem: function(keyName, value) {
  25. this.get('_storage').setItem(this.prefixKey(keyName), JSON.stringify(value));
  26. },
  27. getItem: function(keyName) {
  28. var itemString = this.get('_storage').getItem(this.prefixKey(keyName));
  29. if (itemString) {
  30. return JSON.parse(itemString);
  31. } else {
  32. return null;
  33. }
  34. },
  35. watchItem: function(keyName, callback) {
  36. this.get('_watchers').push({keyName: this.prefixKey(keyName), callback: callback});
  37. }
  38. });