Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Unified Diff: third_party/polymer/v0_8/components-chromium/polymer/src/lib/array-observe-extracted.js

Issue 1082403004: Import Polymer 0.8 and several key elements. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Also remove polymer/explainer Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/polymer/v0_8/components-chromium/polymer/src/lib/array-observe-extracted.js
diff --git a/third_party/polymer/v0_8/components-chromium/polymer/src/lib/array-observe-extracted.js b/third_party/polymer/v0_8/components-chromium/polymer/src/lib/array-observe-extracted.js
new file mode 100644
index 0000000000000000000000000000000000000000..e89ce32024c6ed130772ff778ad7fbded337b26c
--- /dev/null
+++ b/third_party/polymer/v0_8/components-chromium/polymer/src/lib/array-observe-extracted.js
@@ -0,0 +1,106 @@
+
+
+(function() {
+
+ var callbacks = new WeakMap();
+
+ function observe(array, cb) {
+ if (Array.observe) {
+ var ncb = function(changes) {
+ changes = changes.filter(function(o) { return o.type == 'splice'; });
+ if (changes.length) {
+ cb(changes);
+ }
+ };
+ callbacks.set(cb, ncb);
+ Array.observe(array, ncb);
+ } else {
+ if (!array.__polymerObservable) {
+ makeObservable(array);
+ }
+ callbacks.get(array).push(cb);
+ }
+ }
+
+ function unobserve(array, cb) {
+ if (Array.observe) {
+ var ncb = callbacks.get(cb);
+ callbacks.delete(cb);
+ Array.unobserve(array, ncb);
+ } else {
+ var cbs = callbacks.get(array);
+ var idx = cbs.indexOf(cb);
+ if (idx >= 0) {
+ cbs.splice(idx, 1);
+ }
+ }
+ }
+
+ function makeObservable(array) {
+ var splices = [];
+ var debounce;
+ var orig = {
+ push: array.push,
+ pop: array.pop,
+ splice: array.splice,
+ shift: array.shift,
+ unshift: array.unshift,
+ sort: array.sort
+ };
+ var addSplice = function(index, added, removed) {
+ splices.push({
+ index: index,
+ addedCount: added,
+ removed: removed,
+ object: array,
+ type: 'splice'
+ });
+ };
+ callbacks.set(array, []);
+ array.push = function() {
+ debounce = Polymer.Debounce(debounce, fin);
+ addSplice(array.length, 1, []);
+ return orig.push.apply(this, arguments);
+ };
+ array.pop = function() {
+ debounce = Polymer.Debounce(debounce, fin);
+ addSplice(array.length - 1, 0, array.slice(-1));
+ return orig.pop.apply(this, arguments);
+ };
+ array.splice = function(start, deleteCount) {
+ debounce = Polymer.Debounce(debounce, fin);
+ addSplice(start, arguments.length - 2, array.slice(start, start + deleteCount));
+ return orig.splice.apply(this, arguments);
+ };
+ array.shift = function() {
+ debounce = Polymer.Debounce(debounce, fin);
+ addSplice(0, 0, [array[0]]);
+ return orig.shift.apply(this, arguments);
+ };
+ array.unshift = function() {
+ debounce = Polymer.Debounce(debounce, fin);
+ addSplice(0, 1, []);
+ return orig.unshift.apply(this, arguments);
+ };
+ array.sort = function() {
+ debounce = Polymer.Debounce(debounce, fin);
+ console.warn('[ArrayObserve]: sort not observable');
+ return orig.sort.apply(this, arguments);
+ };
+ var fin = function() {
+ var cbs = callbacks.get(array);
+ for (var i=0; i<cbs.length; i++) {
+ cbs[i](splices);
+ }
+ splices = [];
+ };
+ array.__polymerObservable = true;
+ }
+
+ Polymer.ArrayObserve = {
+ observe: observe,
+ unobserve: unobserve
+ };
+
+})();
+

Powered by Google App Engine
This is Rietveld 408576698