summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2014-05-22 01:26:06 +0200
committerBernhard Posselt <dev@bernhard-posselt.com>2014-05-22 01:26:06 +0200
commit780fa978642bf7004023e5a558744fa610f5bc32 (patch)
tree78d9b3192d650871fde1cbd424bdc69bcf7a514c
parent772b4e86c2fc106090d7c658157772614807f4e1 (diff)
add docs on iterators
-rw-r--r--js/README.md21
-rw-r--r--js/build/app.js149
-rw-r--r--js/service/FeedResource.js2
-rw-r--r--js/service/FolderResource.js2
-rw-r--r--js/service/ItemResource.js2
-rw-r--r--js/service/Resource.js16
-rw-r--r--js/tests/unit/service/ResourceSpec.js2
-rw-r--r--js/utility/iterators.js21
8 files changed, 175 insertions, 40 deletions
diff --git a/js/README.md b/js/README.md
index 8a46f598b..8e2a373da 100644
--- a/js/README.md
+++ b/js/README.md
@@ -9,8 +9,25 @@ then run:
The news app uses [Traceur](https://github.com/google/traceur-compiler) to transpile ES6 into ES5. If you want to take a look at the features see [the language features reference](https://github.com/google/traceur-compiler/wiki/LanguageFeatures#language-features).
-* Modules can not be used since the code is inlined
-* The following iterators are available: **items**
+### Iterator
+The following iterators are defined and availabe:
+
+* **items**:
+
+ ```js
+ // iterate over object key and value
+ for (let [key, value] of items(obj)) {
+ console.log(`object key: ${key}, object value: ${value}`)
+ }
+ ```
+* **enumerate**:
+
+ ```js
+ // iterate over object key and value
+ for (let [index, value] of enumerate(list)) {
+ console.log(`at position: ${index}, value is: ${value}`)
+ }
+ ```
## Building
Watch mode:
diff --git a/js/build/app.js b/js/build/app.js
index 4a3eed819..8f09b44d1 100644
--- a/js/build/app.js
+++ b/js/build/app.js
@@ -206,8 +206,8 @@ var $__build_47_app__ = function () {
'use strict';
var FeedResource = function FeedResource($http) {
$traceurRuntime.superCall(this, $FeedResource.prototype, 'constructor', [
- 'url',
- $http
+ $http,
+ 'url'
]);
};
var $FeedResource = FeedResource;
@@ -222,8 +222,8 @@ var $__build_47_app__ = function () {
'use strict';
var FolderResource = function FolderResource($http) {
$traceurRuntime.superCall(this, $FolderResource.prototype, 'constructor', [
- 'name',
- $http
+ $http,
+ 'name'
]);
};
var $FolderResource = FolderResource;
@@ -237,10 +237,7 @@ var $__build_47_app__ = function () {
function (Resource, $http) {
'use strict';
var ItemResource = function ItemResource($http) {
- $traceurRuntime.superCall(this, $ItemResource.prototype, 'constructor', [
- 'id',
- $http
- ]);
+ $traceurRuntime.superCall(this, $ItemResource.prototype, 'constructor', [$http]);
};
var $ItemResource = ItemResource;
$traceurRuntime.createClass(ItemResource, {
@@ -345,18 +342,25 @@ var $__build_47_app__ = function () {
});
app.factory('Resource', function () {
'use strict';
- var Resource = function Resource(id, http) {
+ var Resource = function Resource(http) {
+ var id = arguments[1] !== void 0 ? arguments[1] : 'id';
this.id = id;
this.values = [];
this.hashMap = {};
this.http = http;
};
$traceurRuntime.createClass(Resource, {
- receive: function (values) {
- var $__0 = this;
- values.forEach(function (value) {
- $__0.add(value);
- });
+ receive: function (objs) {
+ for (var $__3 = objs[$traceurRuntime.toProperty(Symbol.iterator)](), $__4; !($__4 = $__3.next()).done;) {
+ try {
+ throw undefined;
+ } catch (obj) {
+ obj = $__4.value;
+ {
+ this.add(obj);
+ }
+ }
+ }
},
add: function (obj) {
var existing = this.hashMap[$traceurRuntime.toProperty(obj[$traceurRuntime.toProperty(this.id)])];
@@ -396,23 +400,26 @@ var $__build_47_app__ = function () {
},
delete: function (id) {
var deleteAtIndex;
- {
+ for (var $__3 = enumerate(this.values)[$traceurRuntime.toProperty(Symbol.iterator)](), $__4; !($__4 = $__3.next()).done;) {
try {
throw undefined;
- } catch ($i) {
- $i = 0;
- for (; $i < this.values.length; $i += 1) {
+ } catch (value) {
+ try {
+ throw undefined;
+ } catch (index) {
try {
throw undefined;
- } catch (i) {
- i = $i;
- try {
- if (this.values[$traceurRuntime.toProperty(i)][$traceurRuntime.toProperty(this.id)] === id) {
- deleteAtIndex = i;
+ } catch ($__8) {
+ {
+ $__8 = $traceurRuntime.assertObject($__4.value);
+ index = $__8[0];
+ value = $__8[1];
+ }
+ {
+ if (value[$traceurRuntime.toProperty(this.id)] === id) {
+ deleteAtIndex = index;
break;
}
- } finally {
- $i = i;
}
}
}
@@ -685,6 +692,98 @@ var $__build_47_app__ = function () {
writable: true
}), $__2;
};
+ window.enumerate = function (list) {
+ 'use strict';
+ var $__2;
+ return $__2 = {}, Object.defineProperty($__2, Symbol.iterator, {
+ value: function () {
+ return $traceurRuntime.initGeneratorFunction(function $__9() {
+ var counter, $counter;
+ return $traceurRuntime.createGeneratorInstance(function ($ctx) {
+ while (true)
+ switch ($ctx.state) {
+ case 0:
+ $ctx.pushTry(28, null);
+ $ctx.state = 31;
+ break;
+ case 31:
+ throw undefined;
+ $ctx.state = 33;
+ break;
+ case 33:
+ $ctx.popTry();
+ $ctx.state = -2;
+ break;
+ case 28:
+ $ctx.popTry();
+ $counter = $ctx.storedException;
+ $ctx.state = 26;
+ break;
+ case 26:
+ $counter = 0;
+ $ctx.state = 27;
+ break;
+ case 27:
+ $ctx.state = $counter < list.length ? 17 : -2;
+ break;
+ case 22:
+ $counter += 1;
+ $ctx.state = 27;
+ break;
+ case 17:
+ $ctx.pushTry(15, null);
+ $ctx.state = 18;
+ break;
+ case 18:
+ throw undefined;
+ $ctx.state = 20;
+ break;
+ case 20:
+ $ctx.popTry();
+ $ctx.state = 22;
+ break;
+ case 15:
+ $ctx.popTry();
+ counter = $ctx.storedException;
+ $ctx.state = 13;
+ break;
+ case 13:
+ counter = $counter;
+ $ctx.state = 14;
+ break;
+ case 14:
+ $ctx.pushTry(null, 6);
+ $ctx.state = 8;
+ break;
+ case 8:
+ $ctx.state = 2;
+ return [
+ counter,
+ list[$traceurRuntime.toProperty(counter)]
+ ];
+ case 2:
+ $ctx.maybeThrow();
+ $ctx.state = 22;
+ break;
+ case 6:
+ $ctx.popTry();
+ $ctx.state = 12;
+ break;
+ case 12:
+ $counter = counter;
+ $ctx.state = 10;
+ break;
+ default:
+ return $ctx.end();
+ }
+ }, $__9, this);
+ })();
+ },
+ configurable: true,
+ enumerable: true,
+ writable: true
+ }), $__2;
+ };
}(window, document, angular, jQuery, OC, oc_requesttoken));
return {};
}(); \ No newline at end of file
diff --git a/js/service/FeedResource.js b/js/service/FeedResource.js
index 903a58241..579396b9d 100644
--- a/js/service/FeedResource.js
+++ b/js/service/FeedResource.js
@@ -12,7 +12,7 @@ app.factory('FeedResource', (Resource, $http) => {
class FeedResource extends Resource {
constructor ($http) {
- super('url', $http);
+ super($http, 'url');
}
}
diff --git a/js/service/FolderResource.js b/js/service/FolderResource.js
index b1c0271dd..314900e37 100644
--- a/js/service/FolderResource.js
+++ b/js/service/FolderResource.js
@@ -12,7 +12,7 @@ app.factory('FolderResource', (Resource, $http) => {
class FolderResource extends Resource {
constructor ($http) {
- super('name', $http);
+ super($http, 'name');
}
}
diff --git a/js/service/ItemResource.js b/js/service/ItemResource.js
index 8cb47d527..5750f2c6b 100644
--- a/js/service/ItemResource.js
+++ b/js/service/ItemResource.js
@@ -13,7 +13,7 @@ app.factory('ItemResource', (Resource, $http) => {
class ItemResource extends Resource {
constructor ($http) {
- super('id', $http);
+ super($http);
}
receive (value, channel) {
diff --git a/js/service/Resource.js b/js/service/Resource.js
index 832b9d791..44a7277b6 100644
--- a/js/service/Resource.js
+++ b/js/service/Resource.js
@@ -12,17 +12,17 @@ app.factory('Resource', () => {
class Resource {
- constructor (id, http) {
+ constructor (http, id='id') {
this.id = id;
this.values = [];
this.hashMap = {};
this.http = http;
}
- receive (values) {
- values.forEach((value) => {
- this.add(value);
- });
+ receive (objs) {
+ for (let obj of objs) {
+ this.add(obj);
+ }
}
add (obj) {
@@ -51,9 +51,9 @@ app.factory('Resource', () => {
// find index of object that should be deleted
let deleteAtIndex;
- for (let i = 0; i < this.values.length; i += 1) {
- if (this.values[i][this.id] === id) {
- deleteAtIndex = i;
+ for (let [index, value] of enumerate(this.values)) {
+ if (value[this.id] === id) {
+ deleteAtIndex = index;
break;
}
}
diff --git a/js/tests/unit/service/ResourceSpec.js b/js/tests/unit/service/ResourceSpec.js
index ec0b95ed9..2fead3479 100644
--- a/js/tests/unit/service/ResourceSpec.js
+++ b/js/tests/unit/service/ResourceSpec.js
@@ -17,7 +17,7 @@ describe('Resource', () => {
beforeEach(inject((Resource, $http) => {
class ChildResource extends Resource {
constructor ($http) {
- super('id', $http);
+ super($http);
}
}
diff --git a/js/utility/iterators.js b/js/utility/iterators.js
index e40a07110..b83e5de82 100644
--- a/js/utility/iterators.js
+++ b/js/utility/iterators.js
@@ -28,4 +28,23 @@ window.items = function (obj) {
})();
}
};
-} \ No newline at end of file
+};
+
+/**
+ * Iterates over a list and returns the item and index
+ * like: (let [index, value] of list)
+ * Similar to Pythons enumerate() iterator function
+ */
+window.enumerate = function (list) {
+ 'use strict';
+
+ return {
+ [Symbol.iterator]: function () {
+ return (function*() {
+ for (let counter = 0; counter < list.length; counter += 1) {
+ yield [counter, list[counter]];
+ }
+ })();
+ }
+ };
+}; \ No newline at end of file