This commit is contained in:
harttle
2017-07-13 23:24:48 +08:00
2 changed files with 15 additions and 2 deletions
+10
View File
@@ -94,6 +94,15 @@ function isObject (value) {
return value !== null && typeof value === 'object'
}
/*
* Checks if value's prototype is Object or undefined.
* @param {any} value The value to check.
* @return {Boolean} Returns true if value is a plain object, else false.
*/
function isPlainObject(value) {
return value && !value.constructor || value.constructor === Object
}
/*
* A function to create flexibly-numbered lists of integers,
* handy for each and map loops. start, if omitted, defaults to 0; step defaults to 1.
@@ -119,6 +128,7 @@ function range (start, stop, step) {
exports.isString = isString
exports.isArray = isArray
exports.isObject = isObject
exports.isPlainObject = isPlainObject
exports.isError = isError
exports.range = range
+5 -2
View File
@@ -1,6 +1,7 @@
const Liquid = require('..')
const lexical = Liquid.lexical
const mapSeries = require('../src/util/promise.js').mapSeries
const isPlainObject = require('../src/util/underscore.js').isPlainObject
const RenderBreakError = Liquid.Types.RenderBreakError
const assert = require('../src/util/assert.js')
const re = new RegExp(`^(${lexical.identifier.source})\\s+in\\s+` +
@@ -38,8 +39,10 @@ module.exports = function (liquid) {
render: function (scope, hash) {
var collection = Liquid.evalExp(this.collection, scope)
if (!Array.isArray(collection) ||
(Array.isArray(collection) && collection.length === 0)) {
if (isPlainObject(collection)) {
collection = Object.keys(collection)
}
if (!Array.isArray(collection) || !collection.length) {
return liquid.renderer.renderTemplates(this.elseTemplates, scope)
}