mirror of
https://github.com/harttle/liquidjs.git
synced 2026-09-15 12:20:40 -07:00
feat: Add support for the Jekyll sample filter (#612)
* Add support for the Jekyll sample filter See https://jekyllrb.com/docs/liquid/filters I am sorting the array randomly and then picking the first N items or all items if there is no sample limit. * Remove incorrect spaces before parens Typo and copy-paste meet
This commit is contained in:
@@ -88,3 +88,14 @@ export function uniq<T> (arr: T[]): T[] {
|
|||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function sample<T> (v: T[] | string, count: number | undefined = undefined): T[] | string {
|
||||||
|
v = toValue(v)
|
||||||
|
if (isNil(v)) return []
|
||||||
|
if (!isArray(v)) {
|
||||||
|
v = stringify(v)
|
||||||
|
return [...v].sort(() => Math.random()).slice(0, count).join('')
|
||||||
|
}
|
||||||
|
|
||||||
|
return [...v].sort(() => Math.random()).slice(0, count)
|
||||||
|
}
|
||||||
|
|||||||
@@ -104,6 +104,20 @@ describe('filters/array', function () {
|
|||||||
expect(html).toBe('abc')
|
expect(html).toBe('abc')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
describe('sample', function () {
|
||||||
|
it('should return full array sample', () => test(
|
||||||
|
'{{ "hello,world" | split: "," | sample | size }}',
|
||||||
|
'2'
|
||||||
|
))
|
||||||
|
it('should return full array sample even if excess count', () => test(
|
||||||
|
'{{ "hello,world" | split: "," | sample: 10 | size }}',
|
||||||
|
'2'
|
||||||
|
))
|
||||||
|
it('should return partial array sample', () => test(
|
||||||
|
'{{ "hello,world" | split: "," | sample: 1 | size }}',
|
||||||
|
'1'
|
||||||
|
))
|
||||||
|
})
|
||||||
describe('size', function () {
|
describe('size', function () {
|
||||||
it('should return string length', () => test(
|
it('should return string length', () => test(
|
||||||
'{{ "Ground control to Major Tom." | size }}',
|
'{{ "Ground control to Major Tom." | size }}',
|
||||||
|
|||||||
Reference in New Issue
Block a user