mirror of
https://github.com/thegeeklab/hugo-geekdoc.git
synced 2024-11-16 18:00:39 +00:00
Robert Kaussow
5c5e2d59cb
BREAKING CHANGE: We have replaced `gulp` with `webpack` and `npm scripts` to build this theme. If you build it on your own or use build commands during the deployment, you may have to adjust your setup. BREAKING CHANGE: The `GeekblogIcons` font is using the icon name as Unicode now. As a consequence, you have to replace all references to Icons from this font if you have customized the theme. BREAKING CHANGE: We have refactored the search integration to split Hugo templates from JavaScript code. To get it working again, you need to adjust the `outputFormats` and `outputs` in your Hugo configuration file, as [documented](https://geekdocs.de/usage/configuration/#site-configuration).
32 lines
1.0 KiB
JavaScript
32 lines
1.0 KiB
JavaScript
/**
|
|
* Part of [Canivete](http://canivete.leofavre.com/#deepgroupby)
|
|
*
|
|
* Groups the contents of an array by one or more iteratees.
|
|
* Unlike Lodash [`groupBy()`](https://lodash.com/docs/4.17.4#groupBy),
|
|
* this function can create nested groups, but cannot receive
|
|
* strings for iteratees.
|
|
*/
|
|
|
|
export const groupBy = (e, ...t) => {
|
|
let r = e.map((e) => t.map((t) => t(e))),
|
|
a = {}
|
|
return (
|
|
r.forEach((t, r) => {
|
|
let l = (_simpleAt(a, t) || []).concat([e[r]])
|
|
_simpleSet(a, t, l)
|
|
}),
|
|
a
|
|
)
|
|
},
|
|
_isPlainObject = (e) => null != e && "object" == typeof e && e.constructor == Object,
|
|
_parsePath = (e) => (Array.isArray(e) ? e : `${e}`.split(".")),
|
|
_simpleAt = (e, t) =>
|
|
_parsePath(t).reduce((e, t) => (null != e && e.hasOwnProperty(t) ? e[t] : void 0), e),
|
|
_simpleSet = (e, t, r) =>
|
|
_parsePath(t).reduce((e, t, a, l) => {
|
|
let s = a === l.length - 1
|
|
return (
|
|
(e.hasOwnProperty(t) && (s || _isPlainObject(e[t]))) || (e[t] = {}), s ? (e[t] = r) : e[t]
|
|
)
|
|
}, e)
|