iterate() { let { ref, keyFor, valueTag } = this; let iterable = ref.value(); if (isProxy(iterable)) { valueTag.update(VOLATILE_TAG); } else { valueTag.update(tagFor(iterable)); } if (iterable === undefined || iterable === null) { return EMPTY_ITERATOR; } else if (isEmberArray(iterable)) { return new EmberArrayIterator(iterable, keyFor); } else if (Array.isArray(iterable)) { return iterable.length > 0 ? new ArrayIterator(iterable, keyFor) : EMPTY_ITERATOR; } else if (isEachIn(ref)) { let keys = Object.keys(iterable); let values = keys.map(key => iterable[key]); return keys.length > 0 ? new ObjectKeysIterator(keys, values, keyFor) : EMPTY_ITERATOR; } else { throw new Error(`Don't know how to {{#each ${iterable}}}`); } }
iterate() { let { ref, keyFor, valueTag } = this; let iterable = ref.value(); if (isProxy(iterable)) { valueTag.update(CURRENT_TAG); } else { valueTag.update(tagFor(iterable)); } if (iterable === undefined || iterable === null) { return EMPTY_ITERATOR; } else if (isEachIn(ref)) { let keys = Object.keys(iterable); let values = keys.map(key => iterable[key]); return keys.length > 0 ? new ObjectKeysIterator(keys, values, keyFor) : EMPTY_ITERATOR; } else if (isEmberArray(iterable)) { return new EmberArrayIterator(iterable, keyFor); } else if (Array.isArray(iterable)) { return iterable.length > 0 ? new ArrayIterator(iterable, keyFor) : EMPTY_ITERATOR; } else if (typeof iterable.forEach === 'function') { let array = []; iterable.forEach(function(item) { array.push(item); }); return array.length > 0 ? new ArrayIterator(array, keyFor) : EMPTY_ITERATOR; } else { throw new Error(`Don't know how to {{#each ${iterable}}}`); } }
toBool(predicate) { this.objectTag.update(tagFor(predicate)); if (isProxy(predicate)) { return get(predicate, 'isTruthy'); } else { return emberToBool(predicate); } }
static create(reference) { if (isConst(reference)) { let value = reference.value(); if (isProxy(value)) { return new RootPropertyReference(value, 'isTruthy'); } else { return new PrimitiveReference(emberToBool(value)); } } return new ConditionalReference(reference); }
iterate() { let { ref, keyFor, valueTag } = this; let iterable = ref.value(); if (isProxy(iterable)) { valueTag.update(CURRENT_TAG); iterable = get(iterable, 'content'); } else { valueTag.update(tagFor(iterable)); } if (iterable === undefined || iterable === null) { return EMPTY_ITERATOR; } let typeofIterable = typeof iterable; if (typeofIterable !== 'object' && typeofIterable !== 'function') { return EMPTY_ITERATOR; } if (isEachIn(ref)) { let keys = Object.keys(iterable); let values = keys.map(key => iterable[key]); return keys.length > 0 ? new ObjectKeysIterator(keys, values, keyFor) : EMPTY_ITERATOR; } if (Array.isArray(iterable)) { return iterable.length > 0 ? new ArrayIterator(iterable, keyFor) : EMPTY_ITERATOR; } else if (isEmberArray(iterable)) { return get(iterable, 'length') > 0 ? new EmberArrayIterator(iterable, keyFor) : EMPTY_ITERATOR; } else if (typeof iterable.forEach === 'function') { let array = []; iterable.forEach(function(item) { array.push(item); }); return array.length > 0 ? new ArrayIterator(array, keyFor) : EMPTY_ITERATOR; } else { return EMPTY_ITERATOR; } }