Chromium Code Reviews| Index: chrome/browser/resources/md_bookmarks/bookmarks_store.js |
| diff --git a/chrome/browser/resources/md_bookmarks/bookmarks_store.js b/chrome/browser/resources/md_bookmarks/bookmarks_store.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..2e895bb60cf499c965a6096e3c783b131ccf3f15 |
| --- /dev/null |
| +++ b/chrome/browser/resources/md_bookmarks/bookmarks_store.js |
| @@ -0,0 +1,81 @@ |
| +// Copyright 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +/** |
| + * @fileoverview A singleton datastore for the Bookmarks page. Page state is |
| + * publicly readable, but can only be modified by dispatching an Action to |
| + * the store. |
| + */ |
| + |
| +cr.define('bookmarks', function() { |
| + /** @constructor */ |
| + function Store() { |
| + /** @type {!BookmarksPageState} */ |
| + this.data_ = {}; |
| + /** @type {boolean} */ |
| + this.initialized_ = false; |
| + /** @type {!Array<!StoreObserver>} */ |
| + this.observers_ = []; |
| + } |
| + |
| + Store.prototype = { |
| + /** |
| + * @param {!BookmarksPageState} initialState |
| + */ |
| + init: function(initialState) { |
| + this.data_ = initialState; |
| + this.initialized_ = true; |
| + this.notifyObservers_(this.data_); |
| + }, |
| + |
| + /** @type {!BookmarksPageState} */ |
| + get data() { |
| + return this.data_; |
| + }, |
| + |
| + /** @return {boolean} */ |
| + isInitialized: function() { |
| + return this.initialized_; |
| + }, |
| + |
| + /** @param {!StoreObserver} observer */ |
| + addObserver: function(observer) { |
| + this.observers_.push(observer); |
| + }, |
| + |
| + /** @param {!StoreObserver} observer */ |
| + removeObserver: function(observer) { |
| + var index = this.observers_.indexOf(observer); |
| + this.observers_.splice(index, 1); |
| + }, |
| + |
| + /** |
| + * Transition to a new UI state based on the supplied |action|, and notify |
| + * observers of the change. |
| + * @param {Action} action |
| + */ |
| + handleAction: function(action) { |
| + if (!this.initialized_) |
| + return; |
|
calamity
2017/03/03 02:29:03
nit: newline.
Also, when does this happen?
tsergeant
2017/03/03 05:08:00
Mainly in the router, which likes to fire off acti
|
| + this.data_ = bookmarks.reduceAction(this.data_, action); |
| + this.notifyObservers_(this.data_); |
| + }, |
| + |
| + /** |
| + * @param {!BookmarksPageState} state |
| + * @private |
| + */ |
| + notifyObservers_: function(state) { |
| + this.observers_.forEach(function(o) { |
| + o.onStateChanged(state); |
| + }); |
| + }, |
| + }; |
| + |
| + cr.addSingletonGetter(Store); |
| + |
| + return { |
| + Store: Store, |
| + }; |
| +}); |