summaryrefslogtreecommitdiffstats
path: root/js/utility/Iterators.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/utility/Iterators.js')
-rw-r--r--js/utility/Iterators.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/js/utility/Iterators.js b/js/utility/Iterators.js
new file mode 100644
index 000000000..3c5e34b18
--- /dev/null
+++ b/js/utility/Iterators.js
@@ -0,0 +1,51 @@
+/**
+ * ownCloud - News
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Bernhard Posselt <dev@bernhard-posselt.com>
+ * @copyright Bernhard Posselt 2014
+ */
+
+const call = Function.prototype.call.bind(Function.prototype.call);
+const hasOwn = Object.prototype.hasOwnProperty;
+
+/**
+ * From http://wiki.ecmascript.org/doku.php?id=harmony:iterators#standard_api
+ * Allows to iterate over objects
+ * like: for (let [key, value] of objects)
+ */
+window.items = function (obj) {
+ 'use strict';
+
+ return {
+ [Symbol.iterator]: function () {
+ return (function*() {
+ for (let x in obj) {
+ if (call(hasOwn, obj, x))
+ yield [x, obj[x]];
+ }
+ })();
+ }
+ };
+};
+
+/**
+ * Iterates over a list and returns the item and index
+ * like: for (let [index, value] of enumerate(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