From 0d0b16addc2f23d2840d6edf774545cb7c955f18 Mon Sep 17 00:00:00 2001 From: Stefan Penner Date: Sun, 14 Jun 2015 21:57:03 -0400 Subject: [PATCH] [Cleanup beta] Enumerable Utils MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (╯°□°)╯︵ sʃıʇn ǝʃqɐɹǝɯnuǝ --- .../lib/system/application.js | 3 +- .../helpers/-legacy-each-with-controller.js | 3 +- .../lib/helpers/-legacy-each-with-keyword.js | 3 +- packages/ember-htmlbars/lib/helpers/each.js | 7 +- packages/ember-htmlbars/lib/streams/utils.js | 7 +- .../tests/helpers/if_unless_test.js | 13 +- packages/ember-metal-views/lib/renderer.js | 4 +- packages/ember-metal/lib/enumerable_utils.js | 264 ------------------ packages/ember-metal/lib/libraries.js | 8 +- packages/ember-metal/lib/main.js | 3 - packages/ember-metal/lib/replace.js | 60 ++++ packages/ember-metal/tests/computed_test.js | 3 +- .../tests/enumerable_utils_test.js | 22 -- .../tests/mixin/introspection_test.js | 3 +- .../tests/platform/define_property_test.js | 3 +- .../ember-metal/tests/watching/watch_test.js | 9 +- packages/ember-routing/lib/system/route.js | 7 +- .../ember-routing/tests/system/dsl_test.js | 4 +- .../ember-routing/tests/system/router_test.js | 3 +- .../lib/computed/array_computed.js | 3 +- .../lib/computed/reduce_computed.js | 25 +- .../lib/computed/reduce_computed_macros.js | 5 +- .../lib/controllers/array_controller.js | 8 +- packages/ember-runtime/lib/copy.js | 3 +- packages/ember-runtime/lib/inject.js | 3 +- packages/ember-runtime/lib/mixins/array.js | 3 +- .../ember-runtime/lib/mixins/enumerable.js | 9 +- .../lib/mixins/mutable_enumerable.js | 3 +- packages/ember-runtime/lib/mixins/sortable.js | 48 ++-- .../ember-runtime/lib/system/core_object.js | 5 +- .../ember-runtime/lib/system/each_proxy.js | 5 +- .../ember-runtime/lib/system/native_array.js | 10 +- packages/ember-runtime/lib/system/subarray.js | 3 +- .../ember-runtime/lib/system/tracked_array.js | 5 +- .../tests/computed/reduce_computed_test.js | 3 +- .../mixins/observable/observable_test.js | 12 +- .../tests/mixins/enumerable_test.js | 3 +- .../tests/mixins/mutable_enumerable_test.js | 5 +- .../tests/suites/enumerable/map.js | 9 +- packages/ember-runtime/tests/suites/suite.js | 6 +- .../tests/system/set/extra_test.js | 5 +- .../tests/system/subarray_test.js | 3 +- .../lib/mixins/view_child_views_support.js | 4 +- packages/ember-views/lib/system/jquery.js | 3 +- .../ember-views/lib/views/container_view.js | 9 +- packages/ember-views/lib/views/select.js | 39 ++- .../tests/views/collection_test.js | 57 ++-- .../ember-views/tests/views/select_test.js | 47 +++- .../tests/views/view/remove_test.js | 7 +- packages/ember/tests/routing/basic_test.js | 3 +- 50 files changed, 251 insertions(+), 531 deletions(-) delete mode 100644 packages/ember-metal/lib/enumerable_utils.js create mode 100644 packages/ember-metal/lib/replace.js delete mode 100644 packages/ember-metal/tests/enumerable_utils_test.js diff --git a/packages/ember-application/lib/system/application.js b/packages/ember-application/lib/system/application.js index d7099eaca72..bf03d19cc33 100644 --- a/packages/ember-application/lib/system/application.js +++ b/packages/ember-application/lib/system/application.js @@ -16,7 +16,6 @@ import create from "ember-metal/platform/create"; import run from "ember-metal/run_loop"; import { canInvoke } from "ember-metal/utils"; import Controller from "ember-runtime/controllers/controller"; -import { map } from "ember-metal/enumerable_utils"; import ObjectController from "ember-runtime/controllers/object_controller"; import ArrayController from "ember-runtime/controllers/array_controller"; import Renderer from "ember-metal-views/renderer"; @@ -1151,7 +1150,7 @@ function logLibraryVersions() { Ember.LOG_VERSION = false; var libs = Ember.libraries._registry; - var nameLengths = map(libs, function(item) { + var nameLengths = libs.map(function(item) { return get(item, 'name.length'); }); diff --git a/packages/ember-htmlbars/lib/helpers/-legacy-each-with-controller.js b/packages/ember-htmlbars/lib/helpers/-legacy-each-with-controller.js index a9a1fa01549..d3e6e4cc7dd 100644 --- a/packages/ember-htmlbars/lib/helpers/-legacy-each-with-controller.js +++ b/packages/ember-htmlbars/lib/helpers/-legacy-each-with-controller.js @@ -1,5 +1,4 @@ import { get } from "ember-metal/property_get"; -import { forEach } from "ember-metal/enumerable_utils"; import normalizeSelf from "ember-htmlbars/utils/normalize-self"; import decodeEachKey from "ember-htmlbars/utils/decode-each-key"; @@ -13,7 +12,7 @@ export default function legacyEachWithControllerHelper(params, hash, blocks) { return; } - forEach(list, function(item, i) { + list.forEach(function(item, i) { var self; if (blocks.template.arity === 0) { diff --git a/packages/ember-htmlbars/lib/helpers/-legacy-each-with-keyword.js b/packages/ember-htmlbars/lib/helpers/-legacy-each-with-keyword.js index fae11938bbe..ab6dc4ed3c0 100644 --- a/packages/ember-htmlbars/lib/helpers/-legacy-each-with-keyword.js +++ b/packages/ember-htmlbars/lib/helpers/-legacy-each-with-keyword.js @@ -1,4 +1,3 @@ -import { forEach } from "ember-metal/enumerable_utils"; import shouldDisplay from "ember-views/streams/should_display"; import decodeEachKey from "ember-htmlbars/utils/decode-each-key"; @@ -8,7 +7,7 @@ export default function legacyEachWithKeywordHelper(params, hash, blocks) { var legacyKeyword = hash['-legacy-keyword']; if (shouldDisplay(list)) { - forEach(list, function(item, i) { + list.forEach(function(item, i) { var self; if (legacyKeyword) { self = bindKeyword(self, legacyKeyword, item); diff --git a/packages/ember-htmlbars/lib/helpers/each.js b/packages/ember-htmlbars/lib/helpers/each.js index 21d146c7ab6..9e6c0af417e 100644 --- a/packages/ember-htmlbars/lib/helpers/each.js +++ b/packages/ember-htmlbars/lib/helpers/each.js @@ -1,4 +1,3 @@ -import { forEach } from "ember-metal/enumerable_utils"; import normalizeSelf from "ember-htmlbars/utils/normalize-self"; import shouldDisplay from "ember-views/streams/should_display"; import decodeEachKey from "ember-htmlbars/utils/decode-each-key"; @@ -84,7 +83,7 @@ export default function eachHelper(params, hash, blocks) { } if (shouldDisplay(list)) { - forEach(list, function(item, i) { + forEach(list, (item, i) => { var self; if (blocks.template.arity === 0) { self = normalizeSelf(item); @@ -98,4 +97,8 @@ export default function eachHelper(params, hash, blocks) { } } +function forEach(iterable, cb) { + return iterable.forEach ? iterable.forEach(cb) : Array.prototype.forEach.call(iterable, cb); +} + export var deprecation = "Using the context switching form of {{each}} is deprecated. Please use the keyword form (`{{#each items as |item|}}`) instead."; diff --git a/packages/ember-htmlbars/lib/streams/utils.js b/packages/ember-htmlbars/lib/streams/utils.js index 6e1615f1193..451f33859df 100644 --- a/packages/ember-htmlbars/lib/streams/utils.js +++ b/packages/ember-htmlbars/lib/streams/utils.js @@ -3,9 +3,10 @@ import getValue from "ember-htmlbars/hooks/get-value"; // We don't want to leak mutable cells into helpers, which // are pure functions that can only work with values. export function getArrayValues(params) { - let out = []; - for (let i=0, l=params.length; i { - return indexOf(obj, item); - }); -} -var deprecatedIndexesOf = Ember.deprecateFunc('Ember.EnumerableUtils.indexesOf is deprecated.', indexesOf); - -/** - Adds an object to an array. If the array already includes the object this - method has no effect. - - @method addObject - @deprecated - @param {Array} array The array the passed item should be added to - @param {Object} item The item to add to the passed array - - @return 'undefined' - @public -*/ -export function addObject(array, item) { - var index = indexOf(array, item); - if (index === -1) { array.push(item); } -} -var deprecatedAddObject = Ember.deprecateFunc('Ember.EnumerableUtils.addObject is deprecated.', addObject); - -/** - Removes an object from an array. If the array does not contain the passed - object this method has no effect. - - @method removeObject - @deprecated - @param {Array} array The array to remove the item from. - @param {Object} item The item to remove from the passed array. - - @return 'undefined' - @public -*/ -export function removeObject(array, item) { - var index = indexOf(array, item); - if (index !== -1) { array.splice(index, 1); } -} -var deprecatedRemoveObject = Ember.deprecateFunc('Ember.EnumerableUtils.removeObject is deprecated.', removeObject); - -export function _replace(array, idx, amt, objects) { - var args = [].concat(objects); - var ret = []; - // https://code.google.com/p/chromium/issues/detail?id=56588 - var size = 60000; - var start = idx; - var ends = amt; - var count, chunk; - - while (args.length) { - count = ends > size ? size : ends; - if (count <= 0) { count = 0; } - - chunk = args.splice(0, size); - chunk = [start, count].concat(chunk); - - start += size; - ends -= count; - - ret = ret.concat(splice.apply(array, chunk)); - } - return ret; -} - -/** - Replaces objects in an array with the passed objects. - - ```javascript - var array = [1,2,3]; - Ember.EnumerableUtils.replace(array, 1, 2, [4, 5]); // [1, 4, 5] - - var array = [1,2,3]; - Ember.EnumerableUtils.replace(array, 1, 1, [4, 5]); // [1, 4, 5, 3] - - var array = [1,2,3]; - Ember.EnumerableUtils.replace(array, 10, 1, [4, 5]); // [1, 2, 3, 4, 5] - ``` - - @method replace - @deprecated - @param {Array} array The array the objects should be inserted into. - @param {Number} idx Starting index in the array to replace. If *idx* >= - length, then append to the end of the array. - @param {Number} amt Number of elements that should be removed from the array, - starting at *idx* - @param {Array} objects An array of zero or more objects that should be - inserted into the array at *idx* - - @return {Array} The modified array. - @public -*/ -export function replace(array, idx, amt, objects) { - if (array.replace) { - return array.replace(idx, amt, objects); - } else { - return _replace(array, idx, amt, objects); - } -} -var deprecatedReplace = Ember.deprecateFunc('Ember.EnumerableUtils.replace is deprecated.', replace); - -/** - Calculates the intersection of two arrays. This method returns a new array - filled with the records that the two passed arrays share with each other. - If there is no intersection, an empty array will be returned. - - ```javascript - var array1 = [1, 2, 3, 4, 5]; - var array2 = [1, 3, 5, 6, 7]; - - Ember.EnumerableUtils.intersection(array1, array2); // [1, 3, 5] - - var array1 = [1, 2, 3]; - var array2 = [4, 5, 6]; - - Ember.EnumerableUtils.intersection(array1, array2); // [] - ``` - - @method intersection - @deprecated - @param {Array} array1 The first array - @param {Array} array2 The second array - - @return {Array} The intersection of the two passed arrays. - @public -*/ -export function intersection(array1, array2) { - var result = []; - forEach(array1, (element) => { - if (indexOf(array2, element) >= 0) { - result.push(element); - } - }); - - return result; -} -var deprecatedIntersection = Ember.deprecateFunc('Ember.EnumerableUtils.intersection is deprecated.', intersection); - -// TODO: this only exists to maintain the existing api, as we move forward it -// should only be part of the "global build" via some shim -export default { - _replace: _replace, - addObject: deprecatedAddObject, - filter: deprecatedFilter, - forEach: deprecatedForEach, - indexOf: deprecatedIndexOf, - indexesOf: deprecatedIndexesOf, - intersection: deprecatedIntersection, - map: deprecatedMap, - removeObject: deprecatedRemoveObject, - replace: deprecatedReplace -}; diff --git a/packages/ember-metal/lib/libraries.js b/packages/ember-metal/lib/libraries.js index f86aeab3ac1..1106e82676a 100644 --- a/packages/ember-metal/lib/libraries.js +++ b/packages/ember-metal/lib/libraries.js @@ -1,9 +1,5 @@ import Ember from "ember-metal/core"; import isEnabled from "ember-metal/features"; -import { - forEach, - indexOf -} from "ember-metal/enumerable_utils"; /** Helper class that allows you to register your library with Ember. @@ -55,14 +51,14 @@ Libraries.prototype = { var index; if (lib) { - index = indexOf(this._registry, lib); + index = this._registry.indexOf(lib); this._registry.splice(index, 1); } }, each(callback) { Ember.deprecate('Using Ember.libraries.each() is deprecated. Access to a list of registered libraries is currently a private API. If you are not knowingly accessing this method, your out-of-date Ember Inspector may be doing so.'); - forEach(this._registry, (lib) => { + this._registry.forEach((lib) => { callback(lib.name, lib.version); }); } diff --git a/packages/ember-metal/lib/main.js b/packages/ember-metal/lib/main.js index d979f687377..0e82ebacacc 100644 --- a/packages/ember-metal/lib/main.js +++ b/packages/ember-metal/lib/main.js @@ -35,7 +35,6 @@ import { wrap } from "ember-metal/utils"; import EmberError from "ember-metal/error"; -import EnumerableUtils from "ember-metal/enumerable_utils"; import Cache from "ember-metal/cache"; import { hasPropertyAccessors @@ -275,8 +274,6 @@ Ember.getWithDefault = getWithDefault; Ember.normalizeTuple = normalizeTuple; Ember._getPath = _getPath; -Ember.EnumerableUtils = EnumerableUtils; - Ember.on = on; Ember.addListener = addListener; Ember.removeListener = removeListener; diff --git a/packages/ember-metal/lib/replace.js b/packages/ember-metal/lib/replace.js new file mode 100644 index 00000000000..b3aec54e5d8 --- /dev/null +++ b/packages/ember-metal/lib/replace.js @@ -0,0 +1,60 @@ +var splice = Array.prototype.splice; + +export function _replace(array, idx, amt, objects) { + var args = [].concat(objects); + var ret = []; + // https://code.google.com/p/chromium/issues/detail?id=56588 + var size = 60000; + var start = idx; + var ends = amt; + var count, chunk; + + while (args.length) { + count = ends > size ? size : ends; + if (count <= 0) { count = 0; } + + chunk = args.splice(0, size); + chunk = [start, count].concat(chunk); + + start += size; + ends -= count; + + ret = ret.concat(splice.apply(array, chunk)); + } + return ret; +} + +/** + Replaces objects in an array with the passed objects. + + ```javascript + var array = [1,2,3]; + Ember.EnumerableUtils.replace(array, 1, 2, [4, 5]); // [1, 4, 5] + + var array = [1,2,3]; + Ember.EnumerableUtils.replace(array, 1, 1, [4, 5]); // [1, 4, 5, 3] + + var array = [1,2,3]; + Ember.EnumerableUtils.replace(array, 10, 1, [4, 5]); // [1, 2, 3, 4, 5] + ``` + + @method replace + @deprecated + @param {Array} array The array the objects should be inserted into. + @param {Number} idx Starting index in the array to replace. If *idx* >= + length, then append to the end of the array. + @param {Number} amt Number of elements that should be removed from the array, + starting at *idx* + @param {Array} objects An array of zero or more objects that should be + inserted into the array at *idx* + + @return {Array} The modified array. + @public +*/ +export default function replace(array, idx, amt, objects) { + if (array.replace) { + return array.replace(idx, amt, objects); + } else { + return _replace(array, idx, amt, objects); + } +} diff --git a/packages/ember-metal/tests/computed_test.js b/packages/ember-metal/tests/computed_test.js index ca29545d07f..27c1bc0d4fb 100644 --- a/packages/ember-metal/tests/computed_test.js +++ b/packages/ember-metal/tests/computed_test.js @@ -18,7 +18,6 @@ import { addObserver, addBeforeObserver } from "ember-metal/observer"; -import { indexOf } from 'ember-metal/enumerable_utils'; var originalLookup = Ember.lookup; var obj, count, Global, lookup; @@ -671,7 +670,7 @@ QUnit.test('adding a computed property should show up in key iteration', functio for (var key in obj) { found.push(key); } - ok(indexOf(found, 'foo')>=0, 'should find computed property in iteration found=' + found); + ok(found.indexOf('foo')>=0, 'should find computed property in iteration found=' + found); ok('foo' in obj, 'foo in obj should pass'); }); diff --git a/packages/ember-metal/tests/enumerable_utils_test.js b/packages/ember-metal/tests/enumerable_utils_test.js deleted file mode 100644 index cd7ca781465..00000000000 --- a/packages/ember-metal/tests/enumerable_utils_test.js +++ /dev/null @@ -1,22 +0,0 @@ -import EnumerableUtils from 'ember-metal/enumerable_utils'; - -QUnit.module('Ember.EnumerableUtils.intersection'); - -QUnit.test('returns an array of objects that appear in both enumerables', function() { - var a = [1,2,3]; - var b = [2,3,4]; - var result; - - result = EnumerableUtils.intersection(a, b); - - deepEqual(result, [2,3]); -}); - -QUnit.test("large replace", function() { - expect(0); - - // https://code.google.com/p/chromium/issues/detail?id=56588 - EnumerableUtils.replace([], 0, undefined, new Array(62401)); // max + 1 in Chrome 28.0.1500.71 - EnumerableUtils.replace([], 0, undefined, new Array(65535)); // max + 1 in Safari 6.0.5 (8536.30.1) - EnumerableUtils.replace([], 0, undefined, new Array(491519)); // max + 1 in FireFox 22.0 -}); diff --git a/packages/ember-metal/tests/mixin/introspection_test.js b/packages/ember-metal/tests/mixin/introspection_test.js index 2526ecdfa87..62f6e2804ba 100644 --- a/packages/ember-metal/tests/mixin/introspection_test.js +++ b/packages/ember-metal/tests/mixin/introspection_test.js @@ -7,7 +7,6 @@ import { mixin, Mixin } from 'ember-metal/mixin'; -import EnumerableUtils from 'ember-metal/enumerable_utils'; var PrivateProperty = Mixin.create({ _foo: '_FOO' @@ -49,7 +48,7 @@ QUnit.module('Basic introspection', { QUnit.test('Ember.mixins()', function() { function mapGuids(ary) { - return EnumerableUtils.map(ary, function(x) { return guidFor(x); }); + return ary.map(function(x) { return guidFor(x); }); } deepEqual(mapGuids(Mixin.mixins(obj)), mapGuids([PrivateProperty, PublicProperty, PrivateMethod, PublicMethod, Combined, BarProperties, BarMethods]), 'should return included mixins'); diff --git a/packages/ember-metal/tests/platform/define_property_test.js b/packages/ember-metal/tests/platform/define_property_test.js index 1b92c439611..b5dccf26bfe 100644 --- a/packages/ember-metal/tests/platform/define_property_test.js +++ b/packages/ember-metal/tests/platform/define_property_test.js @@ -3,7 +3,6 @@ import { hasPropertyAccessors, canDefineNonEnumerableProperties } from 'ember-metal/platform/define_property'; -import { indexOf } from 'ember-metal/enumerable_utils'; function isEnumerable(obj, keyName) { var keys = []; @@ -12,7 +11,7 @@ function isEnumerable(obj, keyName) { keys.push(key); } } - return indexOf(keys, keyName)>=0; + return keys.indexOf(keyName)>=0; } QUnit.module("defineProperty()"); diff --git a/packages/ember-metal/tests/watching/watch_test.js b/packages/ember-metal/tests/watching/watch_test.js index ed2306f33de..a298b10abae 100644 --- a/packages/ember-metal/tests/watching/watch_test.js +++ b/packages/ember-metal/tests/watching/watch_test.js @@ -1,6 +1,5 @@ import Ember from 'ember-metal/core'; import { testBoth } from 'ember-metal/tests/props_helper'; -import { indexOf } from 'ember-metal/enumerable_utils'; import { addListener } from "ember-metal/events"; import { watch, @@ -206,14 +205,14 @@ QUnit.test('when watching a global object, destroy should remove chain watchers var meta_Global = Ember.meta(Global); var chainNode = Ember.meta(obj).chains._chains.Global._chains.foo; - var index = indexOf(meta_Global.chainWatchers.foo, chainNode); + var index = meta_Global.chainWatchers.foo.indexOf(chainNode); equal(meta_Global.watching.foo, 1, 'should be watching foo'); strictEqual(meta_Global.chainWatchers.foo[index], chainNode, 'should have chain watcher'); destroy(obj); - index = indexOf(meta_Global.chainWatchers.foo, chainNode); + index = meta_Global.chainWatchers.foo.indexOf(chainNode); equal(meta_Global.watching.foo, 0, 'should not be watching foo'); equal(index, -1, 'should not have chain watcher'); @@ -230,14 +229,14 @@ QUnit.test('when watching another object, destroy should remove chain watchers f var meta_objB = Ember.meta(objB); var chainNode = Ember.meta(objA).chains._chains.b._chains.foo; - var index = indexOf(meta_objB.chainWatchers.foo, chainNode); + var index = meta_objB.chainWatchers.foo.indexOf(chainNode); equal(meta_objB.watching.foo, 1, 'should be watching foo'); strictEqual(meta_objB.chainWatchers.foo[index], chainNode, 'should have chain watcher'); destroy(objA); - index = indexOf(meta_objB.chainWatchers.foo, chainNode); + index = meta_objB.chainWatchers.foo.indexOf(chainNode); equal(meta_objB.watching.foo, 0, 'should not be watching foo'); equal(index, -1, 'should not have chain watcher'); }); diff --git a/packages/ember-routing/lib/system/route.js b/packages/ember-routing/lib/system/route.js index 86c456a0f73..5295275b8b4 100644 --- a/packages/ember-routing/lib/system/route.js +++ b/packages/ember-routing/lib/system/route.js @@ -4,7 +4,6 @@ import EmberError from "ember-metal/error"; import { get } from "ember-metal/property_get"; import { set } from "ember-metal/property_set"; import getProperties from "ember-metal/get_properties"; -import { forEach } from "ember-metal/enumerable_utils"; import isNone from "ember-metal/is_none"; import { computed } from "ember-metal/computed"; import merge from "ember-metal/merge"; @@ -826,7 +825,7 @@ var Route = EmberObject.extend(ActionHandler, Evented, { transition.method('replace'); } - forEach(qpMeta.qps, function(qp) { + qpMeta.qps.forEach(function(qp) { var routeQpMeta = get(qp.route, '_qp'); var finalizedController = qp.route.controller; finalizedController._qpDelegate = get(routeQpMeta, 'states.active'); @@ -1195,7 +1194,7 @@ var Route = EmberObject.extend(ActionHandler, Evented, { var allParams = queryParams.propertyNames; var cache = this._bucketCache; - forEach(allParams, function(prop) { + allParams.forEach(function(prop) { var aQp = queryParams.map[prop]; aQp.values = params; @@ -2254,7 +2253,7 @@ function mergeEachQueryParams(controllerQP, routeQP) { } function addQueryParamsObservers(controller, propNames) { - forEach(propNames, function(prop) { + propNames.forEach(function(prop) { controller.addObserver(prop + '.[]', controller, controller._qpChanged); }); } diff --git a/packages/ember-routing/tests/system/dsl_test.js b/packages/ember-routing/tests/system/dsl_test.js index 7e467175f09..4de698d02b1 100644 --- a/packages/ember-routing/tests/system/dsl_test.js +++ b/packages/ember-routing/tests/system/dsl_test.js @@ -1,6 +1,5 @@ import isEnabled from "ember-metal/features"; import EmberRouter from "ember-routing/system/router"; -import { forEach } from "ember-metal/enumerable_utils"; var Router; @@ -18,8 +17,7 @@ QUnit.test("should fail when using a reserved route name", function() { expect(reservedNames.length * 2); - forEach(reservedNames, function(reservedName) { - + reservedNames.forEach(function(reservedName) { expectAssertion(function() { Router = EmberRouter.extend(); diff --git a/packages/ember-routing/tests/system/router_test.js b/packages/ember-routing/tests/system/router_test.js index b8820643d4a..26760b086a8 100644 --- a/packages/ember-routing/tests/system/router_test.js +++ b/packages/ember-routing/tests/system/router_test.js @@ -1,5 +1,4 @@ import merge from "ember-metal/merge"; -import { map } from "ember-metal/enumerable_utils"; import Registry from "container/registry"; import HashLocation from "ember-routing/location/hash_location"; import HistoryLocation from "ember-routing/location/history_location"; @@ -110,7 +109,7 @@ QUnit.test("Ember.Router._routePath should consume identical prefixes", function expect(8); function routePath(s1, s2, s3) { - var handlerInfos = map(arguments, function(s) { + var handlerInfos = Array.prototype.slice.call(arguments).map(function(s) { return { name: s }; }); handlerInfos.unshift({ name: 'ignored' }); diff --git a/packages/ember-runtime/lib/computed/array_computed.js b/packages/ember-runtime/lib/computed/array_computed.js index 7873f91209c..9974cc245c9 100644 --- a/packages/ember-runtime/lib/computed/array_computed.js +++ b/packages/ember-runtime/lib/computed/array_computed.js @@ -2,7 +2,6 @@ import Ember from 'ember-metal/core'; import { ReduceComputedProperty } from 'ember-runtime/computed/reduce_computed'; -import { forEach } from 'ember-metal/enumerable_utils'; import o_create from 'ember-metal/platform/create'; import { addObserver } from 'ember-metal/observer'; import EmberError from 'ember-metal/error'; @@ -21,7 +20,7 @@ function ArrayComputedProperty() { // When we recompute an array computed property, we need already // retrieved arrays to be updated; we can't simply empty the cache and // hope the array is re-retrieved. - forEach(cp._dependentKeys, function(dependentKey) { + cp._dependentKeys.forEach(function(dependentKey) { addObserver(this, dependentKey, function() { cp.recomputeOnce.call(this, propertyName); }); diff --git a/packages/ember-runtime/lib/computed/reduce_computed.js b/packages/ember-runtime/lib/computed/reduce_computed.js index b66e4b646aa..0cf883b1c97 100644 --- a/packages/ember-runtime/lib/computed/reduce_computed.js +++ b/packages/ember-runtime/lib/computed/reduce_computed.js @@ -22,7 +22,6 @@ import { cacheFor } from 'ember-metal/computed'; import o_create from 'ember-metal/platform/create'; -import { forEach } from 'ember-metal/enumerable_utils'; import TrackedArray from 'ember-runtime/system/tracked_array'; import EmberArray from 'ember-runtime/mixins/array'; import run from 'ember-metal/run_loop'; @@ -147,11 +146,11 @@ DependentArraysObserver.prototype = { this.resetTransformations(dependentKey, observerContexts); - forEach(dependentArray, function (item, index) { + dependentArray.forEach(function (item, index) { var observerContext = this.createPropertyObserverContext(dependentArray, index, this.trackedArraysByGuid[dependentKey]); observerContexts[index] = observerContext; - forEach(itemPropertyKeys, function (propertyKey) { + itemPropertyKeys.forEach(function (propertyKey) { addBeforeObserver(item, propertyKey, this, observerContext.beforeObserver); addObserver(item, propertyKey, this, observerContext.observer); }, this); @@ -168,13 +167,13 @@ DependentArraysObserver.prototype = { trackedArray.apply(function (observerContexts, offset, operation) { if (operation === TrackedArray.DELETE) { return; } - forEach(observerContexts, function (observerContext) { + observerContexts.forEach(function (observerContext) { observerContext.destroyed = true; beforeObserver = observerContext.beforeObserver; observer = observerContext.observer; item = observerContext.item; - forEach(itemPropertyKeys, function (propertyKey) { + itemPropertyKeys.forEach(function (propertyKey) { removeBeforeObserver(item, propertyKey, dependentArrayObserver, beforeObserver); removeObserver(item, propertyKey, dependentArrayObserver, observer); }); @@ -238,7 +237,7 @@ DependentArraysObserver.prototype = { return; } - forEach(observerContexts, function (context, index) { + observerContexts.forEach(function (context, index) { context.index = index + offset; }); }); @@ -271,7 +270,7 @@ DependentArraysObserver.prototype = { item = dependentArray.objectAt(itemIndex); - forEach(itemPropertyKeys, removeObservers, this); + itemPropertyKeys.forEach(removeObservers, this); changeMeta = new ChangeMeta(dependentArray, item, itemIndex, this.instanceMeta.propertyName, this.cp, normalizedRemoveCount); this.setValue(removedItem.call( @@ -293,13 +292,13 @@ DependentArraysObserver.prototype = { var endIndex = normalizedIndex + addedCount; var changeMeta, observerContext; - forEach(dependentArray.slice(normalizedIndex, endIndex), function (item, sliceIndex) { + dependentArray.slice(normalizedIndex, endIndex).forEach(function (item, sliceIndex) { if (itemPropertyKeys) { observerContext = this.createPropertyObserverContext(dependentArray, normalizedIndex + sliceIndex, this.trackedArraysByGuid[dependentKey]); observerContexts[sliceIndex] = observerContext; - forEach(itemPropertyKeys, function (propertyKey) { + itemPropertyKeys.forEach(function (propertyKey) { addBeforeObserver(item, propertyKey, this, observerContext.beforeObserver); addObserver(item, propertyKey, this, observerContext.observer); }, this); @@ -386,7 +385,7 @@ function ChangeMeta(dependentArray, item, index, propertyName, property, changed } function addItems(dependentArray, callbacks, cp, propertyName, meta) { - forEach(dependentArray, function (item, index) { + dependentArray.forEach(function (item, index) { meta.setValue(callbacks.addedItem.call( this, meta.getValue(), item, new ChangeMeta(dependentArray, item, index, propertyName, cp, dependentArray.length), meta.sugarMeta)); }, this); @@ -518,7 +517,7 @@ function ReduceComputedProperty(options) { reset.call(this, cp, propertyName); meta.dependentArraysObserver.suspendArrayObservers(function () { - forEach(cp._dependentKeys, function (dependentKey) { + cp._dependentKeys.forEach(function (dependentKey) { Ember.assert( 'dependent array ' + dependentKey + ' must be an `Ember.Array`. ' + 'If you are not extending arrays, you will need to wrap native arrays with `Ember.A`', @@ -554,7 +553,7 @@ function ReduceComputedProperty(options) { }, this); }, this); - forEach(cp._dependentKeys, function(dependentKey) { + cp._dependentKeys.forEach(function(dependentKey) { if (!partiallyRecomputeFor(this, dependentKey)) { return; } var dependentArray = get(this, dependentKey); @@ -647,7 +646,7 @@ ReduceComputedProperty.prototype.property = function () { var propertyArgs = {}; var match, dependentArrayKey; - forEach(args, function (dependentKey) { + args.forEach(function (dependentKey) { if (doubleEachPropertyPattern.test(dependentKey)) { throw new EmberError('Nested @each properties not supported: ' + dependentKey); } else if (match = eachPropertyPattern.exec(dependentKey)) { diff --git a/packages/ember-runtime/lib/computed/reduce_computed_macros.js b/packages/ember-runtime/lib/computed/reduce_computed_macros.js index 3c8a41e3351..8b56327d165 100644 --- a/packages/ember-runtime/lib/computed/reduce_computed_macros.js +++ b/packages/ember-runtime/lib/computed/reduce_computed_macros.js @@ -10,9 +10,6 @@ import { guidFor } from 'ember-metal/utils'; import EmberError from 'ember-metal/error'; -import { - forEach -} from 'ember-metal/enumerable_utils'; import run from 'ember-metal/run_loop'; import { addObserver } from 'ember-metal/observer'; import { arrayComputed } from 'ember-runtime/computed/array_computed'; @@ -780,7 +777,7 @@ function propertySort(itemsKey, sortPropertiesKey) { changeMeta.property.clearItemPropertyKeys(itemsKey); - forEach(sortPropertyDefinitions, function (sortPropertyDefinition) { + sortPropertyDefinitions.forEach(function (sortPropertyDefinition) { if ((idx = sortPropertyDefinition.indexOf(':')) !== -1) { sortProperty = sortPropertyDefinition.substring(0, idx); asc = sortPropertyDefinition.substring(idx+1).toLowerCase() !== 'desc'; diff --git a/packages/ember-runtime/lib/controllers/array_controller.js b/packages/ember-runtime/lib/controllers/array_controller.js index a519898a624..dcae0374c8f 100644 --- a/packages/ember-runtime/lib/controllers/array_controller.js +++ b/packages/ember-runtime/lib/controllers/array_controller.js @@ -5,17 +5,13 @@ import Ember from 'ember-metal/core'; import { get } from 'ember-metal/property_get'; -import { - forEach, - replace -} from 'ember-metal/enumerable_utils'; import ArrayProxy from 'ember-runtime/system/array_proxy'; import SortableMixin from 'ember-runtime/mixins/sortable'; import ControllerMixin from 'ember-runtime/mixins/controller'; import { computed } from 'ember-metal/computed'; import EmberError from 'ember-metal/error'; import EmberArray from 'ember-runtime/mixins/array'; - +import replace from 'ember-metal/replace'; /** `Ember.ArrayController` provides a way for you to publish a collection of @@ -187,7 +183,7 @@ export default ArrayProxy.extend(ControllerMixin, SortableMixin, { if (subControllers.length) { var subControllersToRemove = subControllers.slice(idx, idx + removedCnt); - forEach(subControllersToRemove, function(subController) { + subControllersToRemove.forEach(function(subController) { if (subController) { subController.destroy(); } diff --git a/packages/ember-runtime/lib/copy.js b/packages/ember-runtime/lib/copy.js index 3f5f78f4610..1045f6d5761 100644 --- a/packages/ember-runtime/lib/copy.js +++ b/packages/ember-runtime/lib/copy.js @@ -1,4 +1,3 @@ -import { indexOf } from 'ember-metal/enumerable_utils'; import { isArray } from 'ember-metal/utils'; import EmberObject from 'ember-runtime/system/object'; import Copyable from 'ember-runtime/mixins/copyable'; @@ -12,7 +11,7 @@ function _copy(obj, deep, seen, copies) { } // avoid cyclical loops - if (deep && (loc = indexOf(seen, obj)) >= 0) { + if (deep && (loc = seen.indexOf(obj)) >= 0) { return copies[loc]; } diff --git a/packages/ember-runtime/lib/inject.js b/packages/ember-runtime/lib/inject.js index a94be70096f..f999484c234 100644 --- a/packages/ember-runtime/lib/inject.js +++ b/packages/ember-runtime/lib/inject.js @@ -1,5 +1,4 @@ import Ember from "ember-metal/core"; // Ember.assert -import { indexOf } from "ember-metal/enumerable_utils"; import InjectedProperty from "ember-metal/injected_property"; import keys from "ember-metal/keys"; @@ -56,7 +55,7 @@ export function validatePropertyInjections(factory) { for (key in proto) { desc = proto[key]; - if (desc instanceof InjectedProperty && indexOf(types, desc.type) === -1) { + if (desc instanceof InjectedProperty && types.indexOf(desc.type) === -1) { types.push(desc.type); } } diff --git a/packages/ember-runtime/lib/mixins/array.js b/packages/ember-runtime/lib/mixins/array.js index bc0e136c56c..297cdfc975c 100644 --- a/packages/ember-runtime/lib/mixins/array.js +++ b/packages/ember-runtime/lib/mixins/array.js @@ -15,7 +15,6 @@ import { } from 'ember-metal/computed'; import isNone from 'ember-metal/is_none'; import Enumerable from 'ember-runtime/mixins/enumerable'; -import { map } from 'ember-metal/enumerable_utils'; import { Mixin } from 'ember-metal/mixin'; import { propertyWillChange, @@ -151,7 +150,7 @@ export default Mixin.create(Enumerable, { objectsAt(indexes) { var self = this; - return map(indexes, function(idx) { + return indexes.map(function(idx) { return self.objectAt(idx); }); }, diff --git a/packages/ember-runtime/lib/mixins/enumerable.js b/packages/ember-runtime/lib/mixins/enumerable.js index ef405978ff3..e06e5bc467d 100644 --- a/packages/ember-runtime/lib/mixins/enumerable.js +++ b/packages/ember-runtime/lib/mixins/enumerable.js @@ -14,7 +14,6 @@ import { Mixin, aliasMethod } from 'ember-metal/mixin'; -import { indexOf } from 'ember-metal/enumerable_utils'; import { computed } from 'ember-metal/computed'; import { propertyWillChange, @@ -640,9 +639,7 @@ export default Mixin.create({ @private */ every(callback, target) { - return !this.find(function(x, idx, i) { - return !callback.call(target, x, idx, i); - }); + return !this.find((x, idx, i) => !callback.call(target, x, idx, i)); }, /** @@ -970,8 +967,8 @@ export default Mixin.create({ uniq() { var ret = Ember.A(); - this.forEach(function(k) { - if (indexOf(ret, k) < 0) { + this.forEach((k) => { + if (ret.indexOf(k) < 0) { ret.push(k); } }); diff --git a/packages/ember-runtime/lib/mixins/mutable_enumerable.js b/packages/ember-runtime/lib/mixins/mutable_enumerable.js index 577f43599d3..e7b733a2104 100644 --- a/packages/ember-runtime/lib/mixins/mutable_enumerable.js +++ b/packages/ember-runtime/lib/mixins/mutable_enumerable.js @@ -1,4 +1,3 @@ -import { forEach } from "ember-metal/enumerable_utils"; import Enumerable from "ember-runtime/mixins/enumerable"; import { Mixin } from "ember-metal/mixin"; import {beginPropertyChanges, endPropertyChanges} from "ember-metal/property_events"; @@ -77,7 +76,7 @@ export default Mixin.create(Enumerable, { */ addObjects(objects) { beginPropertyChanges(this); - forEach(objects, function(obj) { this.addObject(obj); }, this); + objects.forEach((obj) => this.addObject(obj)); endPropertyChanges(this); return this; }, diff --git a/packages/ember-runtime/lib/mixins/sortable.js b/packages/ember-runtime/lib/mixins/sortable.js index d981ceb0360..1c68b865c6d 100644 --- a/packages/ember-runtime/lib/mixins/sortable.js +++ b/packages/ember-runtime/lib/mixins/sortable.js @@ -6,7 +6,6 @@ import Ember from "ember-metal/core"; // Ember.assert, Ember.A import { get } from "ember-metal/property_get"; -import { forEach } from "ember-metal/enumerable_utils"; import MutableEnumerable from "ember-runtime/mixins/mutable_enumerable"; import compare from "ember-runtime/compare"; import { @@ -130,14 +129,14 @@ export default Mixin.create(MutableEnumerable, { Ember.assert("you need to define `sortProperties`", !!sortProperties); - forEach(sortProperties, function(propertyName) { + sortProperties.forEach((propertyName) => { if (result === 0) { result = sortFunction.call(this, get(item1, propertyName), get(item2, propertyName)); if ((result !== 0) && !sortAscending) { result = (-1) * result; } } - }, this); + }); return result; }, @@ -147,11 +146,11 @@ export default Mixin.create(MutableEnumerable, { var sortProperties = get(this, 'sortProperties'); if (content && sortProperties) { - forEach(content, function(item) { - forEach(sortProperties, function(sortProperty) { + content.forEach((item) => { + sortProperties.forEach((sortProperty) => { removeObserver(item, sortProperty, this, 'contentItemSortPropertyDidChange'); - }, this); - }, this); + }); + }); } return this._super(...arguments); @@ -171,18 +170,17 @@ export default Mixin.create(MutableEnumerable, { var content = get(this, 'content'); var isSorted = get(this, 'isSorted'); var sortProperties = get(this, 'sortProperties'); - var self = this; if (content && isSorted) { content = content.slice(); - content.sort(function(item1, item2) { - return self.orderBy(item1, item2); - }); - forEach(content, function(item) { - forEach(sortProperties, function(sortProperty) { + content.sort((item1, item2) => this.orderBy(item1, item2)); + + content.forEach((item) => { + sortProperties.forEach((sortProperty) => { addObserver(item, sortProperty, this, 'contentItemSortPropertyDidChange'); - }, this); - }, this); + }); + }); + return Ember.A(content); } @@ -195,11 +193,11 @@ export default Mixin.create(MutableEnumerable, { var sortProperties = get(this, 'sortProperties'); if (content && sortProperties) { - forEach(content, function(item) { - forEach(sortProperties, function(sortProperty) { + content.forEach((item) => { + sortProperties.forEach((sortProperty) => { removeObserver(item, sortProperty, this, 'contentItemSortPropertyDidChange'); - }, this); - }, this); + }); + }); } this._super(...arguments); @@ -232,10 +230,10 @@ export default Mixin.create(MutableEnumerable, { var removedObjects = array.slice(idx, idx+removedCount); var sortProperties = get(this, 'sortProperties'); - forEach(removedObjects, function(item) { + removedObjects.forEach((item) => { arrangedContent.removeObject(item); - forEach(sortProperties, function(sortProperty) { + sortProperties.forEach((sortProperty) => { removeObserver(item, sortProperty, this, 'contentItemSortPropertyDidChange'); }, this); }, this); @@ -251,13 +249,13 @@ export default Mixin.create(MutableEnumerable, { if (isSorted) { var addedObjects = array.slice(idx, idx+addedCount); - forEach(addedObjects, function(item) { + addedObjects.forEach((item) => { this.insertItemSorted(item); - forEach(sortProperties, function(sortProperty) { + sortProperties.forEach((sortProperty) => { addObserver(item, sortProperty, this, 'contentItemSortPropertyDidChange'); - }, this); - }, this); + }); + }); } return this._super(array, idx, removedCount, addedCount); diff --git a/packages/ember-runtime/lib/system/core_object.js b/packages/ember-runtime/lib/system/core_object.js index 6cf361e4691..473cd5a9b4e 100644 --- a/packages/ember-runtime/lib/system/core_object.js +++ b/packages/ember-runtime/lib/system/core_object.js @@ -37,7 +37,6 @@ import { Mixin, REQUIRED } from "ember-metal/mixin"; -import { indexOf } from "ember-metal/enumerable_utils"; import EmberError from "ember-metal/error"; import { defineProperty as o_defineProperty } from "ember-metal/platform/define_property"; import keys from "ember-metal/keys"; @@ -130,7 +129,7 @@ function makeCtor() { if (concatenatedProperties && concatenatedProperties.length > 0 && - indexOf(concatenatedProperties, keyName) >= 0) { + concatenatedProperties.indexOf(keyName) >= 0) { var baseValue = this[keyName]; if (baseValue) { @@ -146,7 +145,7 @@ function makeCtor() { if (mergedProperties && mergedProperties.length && - indexOf(mergedProperties, keyName) >= 0) { + mergedProperties.indexOf(keyName) >= 0) { var originalValue = this[keyName]; value = merge(originalValue, value); diff --git a/packages/ember-runtime/lib/system/each_proxy.js b/packages/ember-runtime/lib/system/each_proxy.js index 840a727aaf6..94d06bf1380 100644 --- a/packages/ember-runtime/lib/system/each_proxy.js +++ b/packages/ember-runtime/lib/system/each_proxy.js @@ -8,7 +8,6 @@ import Ember from "ember-metal/core"; // Ember.assert import { get } from "ember-metal/property_get"; import { guidFor } from "ember-metal/utils"; import { typeOf } from "ember-runtime/utils"; -import { forEach } from "ember-metal/enumerable_utils"; import { indexOf } from "ember-metal/array"; import EmberArray from "ember-runtime/mixins/array"; // ES6TODO: WAT? Circular dep? import EmberObject from "ember-runtime/system/object"; @@ -115,9 +114,9 @@ var EachProxy = EmberObject.extend({ // in case someone is already observing some keys make sure they are // added - forEach(watchedEvents(this), function(eventName) { + watchedEvents(this).forEach((eventName) => { this.didAddListener(eventName); - }, this); + }); }, /** diff --git a/packages/ember-runtime/lib/system/native_array.js b/packages/ember-runtime/lib/system/native_array.js index 36a1fdd0344..350ff543ee9 100644 --- a/packages/ember-runtime/lib/system/native_array.js +++ b/packages/ember-runtime/lib/system/native_array.js @@ -4,12 +4,8 @@ */ import Ember from "ember-metal/core"; // Ember.EXTEND_PROTOTYPES - +import { _replace as replace } from "ember-metal/replace"; import { get } from "ember-metal/property_get"; -import { - _replace as replace, - forEach -} from "ember-metal/enumerable_utils"; import { Mixin } from "ember-metal/mixin"; import { indexOf, lastIndexOf } from "ember-metal/array"; import EmberArray from "ember-runtime/mixins/array"; @@ -94,7 +90,7 @@ var NativeArray = Mixin.create(MutableArray, Observable, Copyable, { copy(deep) { if (deep) { - return this.map(function(item) { return copy(item, true); }); + return this.map((item) => copy(item, true)); } return this.slice(); @@ -103,7 +99,7 @@ var NativeArray = Mixin.create(MutableArray, Observable, Copyable, { // Remove any methods implemented natively so we don't override them var ignore = ['length']; -forEach(NativeArray.keys(), function(methodName) { +NativeArray.keys().forEach((methodName) => { if (Array.prototype[methodName]) { ignore.push(methodName); } diff --git a/packages/ember-runtime/lib/system/subarray.js b/packages/ember-runtime/lib/system/subarray.js index d4ef6c7a86f..7a33b23bd06 100644 --- a/packages/ember-runtime/lib/system/subarray.js +++ b/packages/ember-runtime/lib/system/subarray.js @@ -1,5 +1,4 @@ import EmberError from "ember-metal/error"; -import { forEach } from "ember-metal/enumerable_utils"; var RETAIN = 'r'; var FILTER = 'f'; @@ -171,7 +170,7 @@ SubArray.prototype = { toString() { var str = ""; - forEach(this._operations, function (operation) { + this._operations.forEach((operation) => { str += " " + operation.type + ":" + operation.count; }); return str.substring(1); diff --git a/packages/ember-runtime/lib/system/tracked_array.js b/packages/ember-runtime/lib/system/tracked_array.js index 5cca92c4118..a1e9ec53e6b 100644 --- a/packages/ember-runtime/lib/system/tracked_array.js +++ b/packages/ember-runtime/lib/system/tracked_array.js @@ -1,5 +1,4 @@ import { get } from "ember-metal/property_get"; -import { forEach } from "ember-metal/enumerable_utils"; var RETAIN = 'r'; var INSERT = 'i'; @@ -123,7 +122,7 @@ TrackedArray.prototype = { var items = []; var offset = 0; - forEach(this._operations, function (arrayOperation, operationIndex) { + this._operations.forEach((arrayOperation, operationIndex) => { callback(arrayOperation.items, offset, arrayOperation.type, operationIndex); if (arrayOperation.type !== DELETE) { @@ -284,7 +283,7 @@ TrackedArray.prototype = { toString() { var str = ""; - forEach(this._operations, function (operation) { + this._operations.forEach((operation) => { str += " " + operation.type + ":" + operation.count; }); return str.substring(1); diff --git a/packages/ember-runtime/tests/computed/reduce_computed_test.js b/packages/ember-runtime/tests/computed/reduce_computed_test.js index dcbe01f8e50..8675e0ea8ac 100644 --- a/packages/ember-runtime/tests/computed/reduce_computed_test.js +++ b/packages/ember-runtime/tests/computed/reduce_computed_test.js @@ -1,5 +1,4 @@ import Ember from 'ember-metal/core'; -import { map } from 'ember-metal/enumerable_utils'; import { get, getWithDefault @@ -58,7 +57,7 @@ QUnit.module('arrayComputed - [DEPRECATED]', { } }), - nestedNumbers: Ember.A(map([1,2,3,4,5,6], function (n) { + nestedNumbers: Ember.A([1,2,3,4,5,6].map((n) => { return EmberObject.create({ p: 'otherProperty', v: n }); })), diff --git a/packages/ember-runtime/tests/legacy_1x/mixins/observable/observable_test.js b/packages/ember-runtime/tests/legacy_1x/mixins/observable/observable_test.js index 26ba600a88a..24c440c47ef 100644 --- a/packages/ember-runtime/tests/legacy_1x/mixins/observable/observable_test.js +++ b/packages/ember-runtime/tests/legacy_1x/mixins/observable/observable_test.js @@ -1,5 +1,4 @@ import { get } from 'ember-metal/property_get'; -import { forEach } from 'ember-metal/enumerable_utils'; import { computed } from 'ember-metal/computed'; import run from 'ember-metal/run_loop'; import { observer } from 'ember-metal/mixin'; @@ -429,17 +428,17 @@ QUnit.test("getting values should call function return value", function() { // get each property twice. Verify return. var keys = w('computed computedCached dependent dependentFront dependentCached'); - forEach(keys, function(key) { + keys.forEach(function(key) { equal(object.get(key), key, fmt('Try #1: object.get(%@) should run function', [key])); equal(object.get(key), key, fmt('Try #2: object.get(%@) should run function', [key])); }); // verify each call count. cached should only be called once - forEach(w('computedCalls dependentFrontCalls dependentCalls'), function(key) { + w('computedCalls dependentFrontCalls dependentCalls').forEach((key) => { equal(object[key].length, 2, fmt('non-cached property %@ should be called 2x', [key])); }); - forEach(w('computedCachedCalls dependentCachedCalls'), function(key) { + w('computedCachedCalls dependentCachedCalls').forEach((key) => { equal(object[key].length, 1, fmt('non-cached property %@ should be called 1x', [key])); }); @@ -451,7 +450,7 @@ QUnit.test("setting values should call function return value", function() { var keys = w('computed dependent dependentFront computedCached dependentCached'); var values = w('value1 value2'); - forEach(keys, function(key) { + keys.forEach((key) => { equal(object.set(key, values[0]), object, fmt('Try #1: object.set(%@, %@) should run function', [key, values[0]])); @@ -461,9 +460,8 @@ QUnit.test("setting values should call function return value", function() { }); - // verify each call count. cached should only be called once - forEach(keys, function(key) { + keys.forEach((key) => { var calls = object[key + 'Calls']; var idx, expectedLength; diff --git a/packages/ember-runtime/tests/mixins/enumerable_test.js b/packages/ember-runtime/tests/mixins/enumerable_test.js index 47c55a21901..400a4498cbe 100644 --- a/packages/ember-runtime/tests/mixins/enumerable_test.js +++ b/packages/ember-runtime/tests/mixins/enumerable_test.js @@ -1,6 +1,5 @@ import Ember from 'ember-metal/core'; // for Ember.A import EnumerableTests from 'ember-runtime/tests/suites/enumerable'; -import { indexOf } from 'ember-metal/enumerable_utils'; import EmberObject from 'ember-runtime/system/object'; import Enumerable from 'ember-runtime/mixins/enumerable'; import EmberArray from 'ember-runtime/mixins/array'; @@ -25,7 +24,7 @@ var TestEnumerable = EmberObject.extend(Enumerable, { }, addObject(obj) { - if (indexOf(this._content, obj)>=0) { + if (this._content.indexOf(obj)>=0) { return this; } diff --git a/packages/ember-runtime/tests/mixins/mutable_enumerable_test.js b/packages/ember-runtime/tests/mixins/mutable_enumerable_test.js index 24391d2a57e..d0c5582226d 100644 --- a/packages/ember-runtime/tests/mixins/mutable_enumerable_test.js +++ b/packages/ember-runtime/tests/mixins/mutable_enumerable_test.js @@ -1,6 +1,5 @@ import MutableEnumerableTests from 'ember-runtime/tests/suites/mutable_enumerable'; import MutableEnumerable from 'ember-runtime/mixins/mutable_enumerable'; -import { indexOf } from 'ember-metal/enumerable_utils'; import EmberObject from 'ember-runtime/system/object'; import { computed } from 'ember-metal/computed'; import { get } from 'ember-metal/property_get'; @@ -14,7 +13,7 @@ var TestMutableEnumerable = EmberObject.extend(MutableEnumerable, { _content: null, addObject(obj) { - if (indexOf(this._content, obj)>=0) { + if (this._content.indexOf(obj)>=0) { return this; } @@ -24,7 +23,7 @@ var TestMutableEnumerable = EmberObject.extend(MutableEnumerable, { }, removeObject(obj) { - var idx = indexOf(this._content, obj); + var idx = this._content.indexOf(obj); if (idx<0) { return this; } diff --git a/packages/ember-runtime/tests/suites/enumerable/map.js b/packages/ember-runtime/tests/suites/enumerable/map.js index 9aa2cab56ce..f5e275138e6 100644 --- a/packages/ember-runtime/tests/suites/enumerable/map.js +++ b/packages/ember-runtime/tests/suites/enumerable/map.js @@ -1,7 +1,6 @@ -import {SuiteModuleBuilder} from 'ember-runtime/tests/suites/suite'; -import { map } from 'ember-metal/enumerable_utils'; -import {get} from 'ember-metal/property_get'; -import {guidFor} from "ember-metal/utils"; +import { SuiteModuleBuilder } from 'ember-runtime/tests/suites/suite'; +import { get } from 'ember-metal/property_get'; +import { guidFor } from "ember-metal/utils"; var suite = SuiteModuleBuilder.create(); @@ -11,7 +10,7 @@ function mapFunc(item) { return item ? item.toString() : null; } suite.test('map should iterate over list', function() { var obj = this.newObject(); - var ary = map(this.toArray(obj), mapFunc); + var ary = this.toArray(obj).map(mapFunc); var found = []; found = obj.map(mapFunc); diff --git a/packages/ember-runtime/tests/suites/suite.js b/packages/ember-runtime/tests/suites/suite.js index 0318b5510e7..10d303bf94d 100644 --- a/packages/ember-runtime/tests/suites/suite.js +++ b/packages/ember-runtime/tests/suites/suite.js @@ -3,7 +3,6 @@ import { guidFor } from "ember-metal/utils"; import { get } from "ember-metal/property_get"; -import { forEach } from "ember-metal/enumerable_utils"; /* @class @@ -118,11 +117,10 @@ Suite.reopenClass({ notest() {}, importModuleTests(builder) { - var self = this; this.module(builder._module); - forEach(builder._tests, function(descAndFunc) { - self.test.apply(self, descAndFunc); + builder._tests.forEach((descAndFunc) => { + this.test.apply(this, descAndFunc); }); } }); diff --git a/packages/ember-runtime/tests/system/set/extra_test.js b/packages/ember-runtime/tests/system/set/extra_test.js index 19ab34ea101..f3329f872c7 100644 --- a/packages/ember-runtime/tests/system/set/extra_test.js +++ b/packages/ember-runtime/tests/system/set/extra_test.js @@ -1,4 +1,3 @@ -import { indexOf } from "ember-metal/enumerable_utils"; import {get} from "ember-metal/property_get"; import {addObserver} from "ember-metal/observer"; import Set from "ember-runtime/system/set"; @@ -16,8 +15,8 @@ QUnit.test('passing an array to new Set() should instantiate w/ items', function }); equal(get(aSet, 'length'), 3, 'should have three items'); - aSet.forEach(function(x) { - ok(indexOf(ary, x)>=0, 'should find passed item in array'); + aSet.forEach((x) => { + ok(ary.indexOf(x)>=0, 'should find passed item in array'); count++; }); equal(count, 3, 'iterating should have returned three objects'); diff --git a/packages/ember-runtime/tests/system/subarray_test.js b/packages/ember-runtime/tests/system/subarray_test.js index 51f5de51d82..4a747db3974 100644 --- a/packages/ember-runtime/tests/system/subarray_test.js +++ b/packages/ember-runtime/tests/system/subarray_test.js @@ -1,4 +1,3 @@ -import { forEach } from "ember-metal/enumerable_utils"; import SubArray from "ember-runtime/system/subarray"; var subarray; @@ -11,7 +10,7 @@ QUnit.module('SubArray', { function operationsString() { var str = ""; - forEach(subarray._operations, function (operation) { + subarray._operations.forEach((operation) => { str += " " + operation.type + ":" + operation.count; }); return str.substring(1); diff --git a/packages/ember-views/lib/mixins/view_child_views_support.js b/packages/ember-views/lib/mixins/view_child_views_support.js index efca238b67c..ce111c1d49d 100644 --- a/packages/ember-views/lib/mixins/view_child_views_support.js +++ b/packages/ember-views/lib/mixins/view_child_views_support.js @@ -4,7 +4,6 @@ */ import Ember from 'ember-metal/core'; import { Mixin } from "ember-metal/mixin"; -import { removeObject } from "ember-metal/enumerable_utils"; import { get } from "ember-metal/property_get"; import { set } from "ember-metal/property_set"; import setProperties from "ember-metal/set_properties"; @@ -61,7 +60,8 @@ var ViewChildViewsSupport = Mixin.create({ // remove view from childViews array. var childViews = get(this, 'childViews'); - removeObject(childViews, view); + var index = childViews.indexOf(view); + if (index !== -1) { childViews.splice(index, 1); } return this; }, diff --git a/packages/ember-views/lib/system/jquery.js b/packages/ember-views/lib/system/jquery.js index fb1e6876a98..085fca6367b 100644 --- a/packages/ember-views/lib/system/jquery.js +++ b/packages/ember-views/lib/system/jquery.js @@ -1,7 +1,6 @@ import Ember from 'ember-metal/core'; // Ember.assert // ES6TODO: the functions on EnumerableUtils need their own exports -import { forEach } from 'ember-metal/enumerable_utils'; import environment from 'ember-metal/environment'; var jQuery; @@ -31,7 +30,7 @@ if (environment.hasDOM) { // Copies the `dataTransfer` property from a browser event object onto the // jQuery event object for the specified events - forEach(dragEvents, function(eventName) { + dragEvents.forEach(function(eventName) { jQuery.event.fixHooks[eventName] = { props: ['dataTransfer'] }; diff --git a/packages/ember-views/lib/views/container_view.js b/packages/ember-views/lib/views/container_view.js index a2d376091ae..80f3ef85012 100644 --- a/packages/ember-views/lib/views/container_view.js +++ b/packages/ember-views/lib/views/container_view.js @@ -4,7 +4,6 @@ import View from "ember-views/views/view"; import { get } from "ember-metal/property_get"; import { set } from "ember-metal/property_set"; -import { forEach } from "ember-metal/enumerable_utils"; import { observer, beforeObserver @@ -189,7 +188,7 @@ var ContainerView = View.extend(MutableArray, { // don't pay a penalty. var childViews = this.childViews = Ember.A([]); - forEach(userChildViews, function(viewName, idx) { + userChildViews.forEach((viewName, idx) => { var view; if ('string' === typeof viewName) { @@ -201,7 +200,7 @@ var ContainerView = View.extend(MutableArray, { } childViews[idx] = view; - }, this); + }); var currentView = get(this, 'currentView'); if (currentView) { @@ -265,8 +264,8 @@ var ContainerView = View.extend(MutableArray, { // as soon as views are added or removed, despite the fact that this will // happen automatically when we render. var removedViews = childViews.slice(idx, idx+removedCount); - forEach(removedViews, view => this.unlinkChild(view)); - forEach(addedViews, view => this.linkChild(view)); + removedViews.forEach(view => this.unlinkChild(view)); + addedViews.forEach(view => this.linkChild(view)); childViews.splice(idx, removedCount, ...addedViews); diff --git a/packages/ember-views/lib/views/select.js b/packages/ember-views/lib/views/select.js index ff5fdbb6a1d..066282c2886 100644 --- a/packages/ember-views/lib/views/select.js +++ b/packages/ember-views/lib/views/select.js @@ -3,13 +3,7 @@ @submodule ember-views */ -import { - forEach, - indexOf, - indexesOf, - replace, - map -} from "ember-metal/enumerable_utils"; +import replace from "ember-metal/replace"; import { get } from "ember-metal/property_get"; import { set } from "ember-metal/property_set"; @@ -42,17 +36,17 @@ var SelectOption = View.extend({ this.valuePathDidChange(); }, - selected: computed(function() { + selected: computed('attrs.content', 'attrs.selection', function() { var value = get(this, 'value'); var selection = get(this, 'attrs.selection'); if (get(this, 'attrs.multiple')) { - return selection && indexOf(selection, value) > -1; + return selection && selection.indexOf(value) > -1; } else { // Primitives get passed through bindings as objects... since // `new Number(4) !== 4`, we use `==` below return value == get(this, 'attrs.parentValue'); // jshint ignore:line } - }).property('attrs.content', 'attrs.selection'), + }), labelPathDidChange: observer('attrs.optionLabelPath', function() { var labelPath = get(this, 'attrs.optionLabelPath'); @@ -418,7 +412,7 @@ var Select = View.extend({ @default null @public */ - value: computed({ + value: computed('_valuePath', 'selection', { get(key) { var valuePath = get(this, '_valuePath'); return valuePath ? get(this, 'selection.' + valuePath) : get(this, 'selection'); @@ -426,7 +420,7 @@ var Select = View.extend({ set(key, value) { return value; } - }).property('_valuePath', 'selection'), + }), /** If given, a top-most dummy option will be rendered to serve as a user @@ -480,12 +474,12 @@ var Select = View.extend({ */ groupView: SelectOptgroup, - groupedContent: computed(function() { + groupedContent: computed('optionGroupPath', 'content.@each', function() { var groupPath = get(this, 'optionGroupPath'); var groupedContent = emberA(); var content = get(this, 'content') || []; - forEach(content, function(item) { + content.forEach((item) => { var label = get(item, groupPath); if (get(groupedContent, 'lastObject.label') !== label) { @@ -499,7 +493,7 @@ var Select = View.extend({ }); return groupedContent; - }).property('optionGroupPath', 'content.@each'), + }), /** The view class for option. @@ -578,7 +572,7 @@ var Select = View.extend({ _selectedIndex(value, defaultIndex = 0) { var content = get(this, 'contentValues'); - var selectionIndex = indexOf(content, value); + var selectionIndex = content.indexOf(value); var prompt = get(this, 'prompt'); if (prompt) { selectionIndex += 1; } @@ -642,9 +636,9 @@ var Select = View.extend({ var content = get(this, 'content') || []; if (valuePath) { - return map(content, function (el) { return get(el, valuePath); }); + return content.map((el) => get(el, valuePath)); } else { - return map(content, function (el) { return el; }); + return content.slice(); } }), @@ -660,7 +654,7 @@ var Select = View.extend({ if (options) { options.each(function() { adjusted = this.index > -1 ? this.index - offset : -1; - this.selected = indexOf(selectedIndexes, adjusted) > -1; + this.selected = selectedIndexes.indexOf(adjusted) > -1; }); } }, @@ -671,7 +665,7 @@ var Select = View.extend({ init() { this._super(...arguments); - this.on("change", this, this._change); + this.on('change', this, this._change); } }); @@ -682,6 +676,11 @@ var DeprecatedSelect = Select.extend({ } }); + +function indexesOf(iterable, elements) { + return elements === undefined ? [] : elements.map((item) => iterable.indexOf(item)); +} + export default Select; export { Select, diff --git a/packages/ember-views/tests/views/collection_test.js b/packages/ember-views/tests/views/collection_test.js index e3ece283521..01645ccff0c 100644 --- a/packages/ember-views/tests/views/collection_test.js +++ b/packages/ember-views/tests/views/collection_test.js @@ -1,7 +1,6 @@ import Ember from "ember-metal/core"; // Ember.A import { set } from "ember-metal/property_set"; import run from "ember-metal/run_loop"; -import { forEach } from "ember-metal/enumerable_utils"; import { Mixin } from "ember-metal/mixin"; import { fmt } from "ember-runtime/system/string"; import ArrayProxy from "ember-runtime/system/array_proxy"; @@ -130,9 +129,7 @@ QUnit.test("should allow custom item views by setting itemViewClass", function() view.append(); }); - forEach(content, function(item) { - equal(view.$(':contains("'+item+'")').length, 1); - }); + content.forEach((item) => equal(view.$(':contains("'+item+'")').length, 1)); }); QUnit.test("should insert a new item in DOM when an item is added to the content array", function() { @@ -150,7 +147,7 @@ QUnit.test("should insert a new item in DOM when an item is added to the content view.append(); }); - forEach(content, function(item) { + content.forEach((item) => { equal(view.$(':contains("'+item+'")').length, 1, "precond - generates pre-existing items"); }); @@ -172,19 +169,15 @@ QUnit.test("should remove an item from DOM when an item is removed from the cont }) }); - run(function() { - view.append(); - }); + run(() => view.append()); - forEach(content, function(item) { + content.forEach((item) => { equal(view.$(':contains("'+item+'")').length, 1, "precond - generates pre-existing items"); }); - run(function() { - content.removeAt(1); - }); + run(() => content.removeAt(1)); - forEach(content, function(item, idx) { + content.forEach((item, idx) => { equal(view.$(fmt(':nth-child(%@)', [String(idx+1)])).text(), item); }); }); @@ -203,7 +196,7 @@ QUnit.test("it updates the view if an item is replaced", function() { view.append(); }); - forEach(content, function(item) { + content.forEach((item) => { equal(view.$(':contains("'+item+'")').length, 1, "precond - generates pre-existing items"); }); @@ -212,7 +205,7 @@ QUnit.test("it updates the view if an item is replaced", function() { content.insertAt(1, "Kazuki"); }); - forEach(content, function(item, idx) { + content.forEach((item, idx) => { equal(trim(view.$(fmt(':nth-child(%@)', [String(idx+1)])).text()), item, "postcond - correct array update"); }); }); @@ -227,21 +220,19 @@ QUnit.test("can add and replace in the same runloop", function() { }) }); - run(function() { - view.append(); - }); + run(() => view.append()); - forEach(content, function(item) { + content.forEach((item) => { equal(view.$(':contains("'+item+'")').length, 1, "precond - generates pre-existing items"); }); - run(function() { + run(() => { content.pushObject("Tom Dale"); content.removeAt(0); content.insertAt(0, "Kazuki"); }); - forEach(content, function(item, idx) { + content.forEach((item, idx) => { equal(trim(view.$(fmt(':nth-child(%@)', [String(idx+1)])).text()), item, "postcond - correct array update"); }); @@ -257,21 +248,19 @@ QUnit.test("can add and replace the object before the add in the same runloop", }) }); - run(function() { - view.append(); - }); + run(() => view.append()); - forEach(content, function(item) { + content.forEach((item) => { equal(view.$(':contains("'+item+'")').length, 1, "precond - generates pre-existing items"); }); - run(function() { + run(() => { content.pushObject("Tom Dale"); content.removeAt(1); content.insertAt(1, "Kazuki"); }); - forEach(content, function(item, idx) { + content.forEach((item, idx) => { equal(trim(view.$(fmt(':nth-child(%@)', [String(idx+1)])).text()), item, "postcond - correct array update"); }); }); @@ -286,15 +275,13 @@ QUnit.test("can add and replace complicatedly", function() { }) }); - run(function() { - view.append(); - }); + run(() => view.append()); - forEach(content, function(item) { + content.forEach((item) => { equal(view.$(':contains("'+item+'")').length, 1, "precond - generates pre-existing items"); }); - run(function() { + run(() => { content.pushObject("Tom Dale"); content.removeAt(1); content.insertAt(1, "Kazuki"); @@ -302,7 +289,7 @@ QUnit.test("can add and replace complicatedly", function() { content.pushObject("McMunch"); }); - forEach(content, function(item, idx) { + content.forEach((item, idx) => { equal(trim(view.$(fmt(':nth-child(%@)', [String(idx+1)])).text()), item, "postcond - correct array update: "+item.name+"!="+view.$(fmt(':nth-child(%@)', [String(idx+1)])).text()); }); }); @@ -321,7 +308,7 @@ QUnit.test("can add and replace complicatedly harder", function() { view.append(); }); - forEach(content, function(item) { + content.forEach((item) => { equal(view.$(':contains("'+item+'")').length, 1, "precond - generates pre-existing items"); }); @@ -334,7 +321,7 @@ QUnit.test("can add and replace complicatedly harder", function() { content.removeAt(2); }); - forEach(content, function(item, idx) { + content.forEach((item, idx) => { equal(trim(view.$(fmt(':nth-child(%@)', [String(idx+1)])).text()), item, "postcond - correct array update"); }); }); diff --git a/packages/ember-views/tests/views/select_test.js b/packages/ember-views/tests/views/select_test.js index 15c226b0f03..ffa0d5e97db 100644 --- a/packages/ember-views/tests/views/select_test.js +++ b/packages/ember-views/tests/views/select_test.js @@ -2,7 +2,6 @@ import EmberSelect from "ember-views/views/select"; import EmberObject from "ember-runtime/system/object"; import run from "ember-metal/run_loop"; import jQuery from "ember-views/system/jquery"; -import { map } from "ember-metal/enumerable_utils"; import EventDispatcher from "ember-views/system/event_dispatcher"; import SafeString from 'htmlbars-util/safe-string'; @@ -137,7 +136,7 @@ QUnit.test("can specify the property path for an option's label and value", func equal(select.$('option').length, 2, "Should have two options"); // IE 8 adds whitespace equal(trim(select.$().text()), "YehudaTom", "Options should have content"); - deepEqual(map(select.$('option').toArray(), function(el) { return jQuery(el).attr('value'); }), ["1", "2"], "Options should have values"); + deepEqual(select.$('option').toArray().map((el) => jQuery(el).attr('value')), ["1", "2"], "Options should have values"); }); QUnit.test("XSS: does not escape label value when it is a SafeString", function() { @@ -156,7 +155,7 @@ QUnit.test("XSS: does not escape label value when it is a SafeString", function( // IE 8 adds whitespace equal(trim(select.$().text()), "YehudaTom", "Options should have content"); - deepEqual(map(select.$('option').toArray(), function(el) { return jQuery(el).attr('value'); }), ["1", "2"], "Options should have values"); + deepEqual(select.$('option').toArray().map((el) => jQuery(el).attr('value')), ["1", "2"], "Options should have values"); }); QUnit.test("XSS: escapes label value content", function() { @@ -175,7 +174,7 @@ QUnit.test("XSS: escapes label value content", function() { // IE 8 adds whitespace equal(trim(select.$().text()), "

Yehuda

Tom

", "Options should have content"); - deepEqual(map(select.$('option').toArray(), function(el) { return jQuery(el).attr('value'); }), ["1", "2"], "Options should have values"); + deepEqual(select.$('option').toArray().map((el) => jQuery(el).attr('value')), ["1", "2"], "Options should have values"); }); QUnit.test("can retrieve the current selected option when multiple=false", function() { @@ -312,8 +311,13 @@ QUnit.test("selection can be set when multiple=true", function() { var david = { id: 3, firstName: 'David' }; var brennain = { id: 4, firstName: 'Brennain' }; - run(function() { - select.set('content', Ember.A([yehuda, tom, david, brennain])); + run(() => { + select.set('content', Ember.A([ + yehuda, + tom, + david, + brennain + ])); select.set('multiple', true); select.set('selection', tom); }); @@ -322,7 +326,7 @@ QUnit.test("selection can be set when multiple=true", function() { deepEqual(select.get('selection'), [tom], "Initial selection should be correct"); - run(function() { select.set('selection', yehuda); }); + run(() => select.set('selection', yehuda)); deepEqual(select.get('selection'), [yehuda], "After changing it, selection should be correct"); }); @@ -333,8 +337,13 @@ QUnit.test("selection can be set when multiple=true and prompt", function() { var david = { id: 3, firstName: 'David' }; var brennain = { id: 4, firstName: 'Brennain' }; - run(function() { - select.set('content', Ember.A([yehuda, tom, david, brennain])); + run(() => { + select.set('content', Ember.A([ + yehuda, + tom, + david, + brennain + ])); select.set('multiple', true); select.set('prompt', 'Pick one!'); select.set('selection', tom); @@ -344,7 +353,7 @@ QUnit.test("selection can be set when multiple=true and prompt", function() { deepEqual(select.get('selection'), [tom], "Initial selection should be correct"); - run(function() { + run(() => { select.set('selection', yehuda); }); @@ -357,8 +366,13 @@ QUnit.test("multiple selections can be set when multiple=true", function() { var david = { id: 3, firstName: 'David' }; var brennain = { id: 4, firstName: 'Brennain' }; - run(function() { - select.set('content', Ember.A([yehuda, tom, david, brennain])); + run(() => { + select.set('content', Ember.A([ + yehuda, + tom, + david, + brennain + ])); select.set('optionLabelPath', 'content.firstName'); select.set('multiple', true); @@ -369,10 +383,13 @@ QUnit.test("multiple selections can be set when multiple=true", function() { deepEqual(select.get('selection'), [yehuda, david], "Initial selection should be correct"); - run(function() { select.set('selection', Ember.A([tom, brennain])); }); + run(() => select.set('selection', Ember.A([ + tom, + brennain + ]))); deepEqual( - select.$(':selected').map(function() { return trim(jQuery(this).text());}).toArray(), + select.$(':selected').map((index, element) => trim(jQuery(element).text())).toArray(), ['Tom', 'Brennain'], "After changing it, selection should be correct"); }); @@ -400,7 +417,7 @@ QUnit.test("multiple selections can be set by changing in place the selection ar }); deepEqual( - select.$(':selected').map(function() { return trim(jQuery(this).text());}).toArray(), + select.$(':selected').map((index, element) => trim(jQuery(element).text())).toArray(), ['David', 'Brennain'], "After updating the selection array in-place, selection should be correct"); }); diff --git a/packages/ember-views/tests/views/view/remove_test.js b/packages/ember-views/tests/views/view/remove_test.js index 62772e8f370..5f7356cf5aa 100644 --- a/packages/ember-views/tests/views/view/remove_test.js +++ b/packages/ember-views/tests/views/view/remove_test.js @@ -1,6 +1,5 @@ import { get } from "ember-metal/property_get"; import run from "ember-metal/run_loop"; -import { indexOf } from "ember-metal/enumerable_utils"; import jQuery from "ember-views/system/jquery"; import View from "ember-views/views/view"; import ContainerView from "ember-views/views/container_view"; @@ -30,9 +29,9 @@ QUnit.test("returns receiver", function() { }); QUnit.test("removes child from parent.childViews array", function() { - ok(indexOf(get(parentView, 'childViews'), child)>=0, 'precond - has child in childViews array before remove'); + ok(get(parentView, 'childViews').indexOf(child)>=0, 'precond - has child in childViews array before remove'); parentView.removeChild(child); - ok(indexOf(get(parentView, 'childViews'), child)<0, 'removed child'); + ok(get(parentView, 'childViews').indexOf(child)<0, 'removed child'); }); QUnit.test("sets parentView property to null", function() { @@ -104,7 +103,7 @@ QUnit.test("removes view from parent view", function() { }); ok(!get(child, 'parentView'), 'no longer has parentView'); - ok(indexOf(get(parentView, 'childViews'), child)<0, 'no longer in parent childViews'); + ok(get(parentView, 'childViews').indexOf(child)<0, 'no longer in parent childViews'); equal(parentView.$('div').length, 0, "removes DOM element from parent"); }); diff --git a/packages/ember/tests/routing/basic_test.js b/packages/ember/tests/routing/basic_test.js index c8cbb930e51..04324bc38dd 100644 --- a/packages/ember/tests/routing/basic_test.js +++ b/packages/ember/tests/routing/basic_test.js @@ -1,6 +1,5 @@ import "ember"; import isEnabled from "ember-metal/features"; -import { forEach } from "ember-metal/enumerable_utils"; import { get } from "ember-metal/property_get"; import { set } from "ember-metal/property_set"; import ActionManager from "ember-views/system/action_manager"; @@ -1483,7 +1482,7 @@ QUnit.test('navigating away triggers a url property change', function() { }); }); - forEach(['foo', 'bar', '/foo'], function(destination) { + ['foo', 'bar', '/foo'].forEach(function(destination) { Ember.run(router, 'transitionTo', destination); }); });