Example #1
0
  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}}}`);
    }
  }
Example #2
0
  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}}}`);
    }
  }
Example #3
0
  toBool(predicate) {
    this.objectTag.update(tagFor(predicate));

    if (isProxy(predicate)) {
      return get(predicate, 'isTruthy');
    } else {
      return emberToBool(predicate);
    }
  }
Example #4
0
  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);
  }
Example #5
0
  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;
    }
  }