@glidejs/glide
Version:
Glide.js is a dependency-free JavaScript ES6 slider and carousel. It’s lightweight, flexible and fast. Designed to slide. No less, no more
59 lines (51 loc) • 1.69 kB
JavaScript
/**
* Defines getter and setter property on the specified object.
*
* @param {Object} obj Object where property has to be defined.
* @param {String} prop Name of the defined property.
* @param {Object} definition Get and set definitions for the property.
* @return {Void}
*/
export function define (obj, prop, definition) {
Object.defineProperty(obj, prop, definition)
}
/**
* Sorts aphabetically object keys.
*
* @param {Object} obj
* @return {Object}
*/
export function sortKeys (obj) {
return Object.keys(obj).sort().reduce((r, k) => {
r[k] = obj[k]
return (r[k], r)
}, {})
}
/**
* Merges passed settings object with default options.
*
* @param {Object} defaults
* @param {Object} settings
* @return {Object}
*/
export function mergeOptions (defaults, settings) {
let options = Object.assign({}, defaults, settings)
// `Object.assign` do not deeply merge objects, so we
// have to do it manually for every nested object
// in options. Although it does not look smart,
// it's smaller and faster than some fancy
// merging deep-merge algorithm script.
if (settings.hasOwnProperty('classes')) {
options.classes = Object.assign({}, defaults.classes, settings.classes)
const properties = ['direction', 'type', 'slide', 'arrow', 'nav']
properties.forEach(property => {
if (settings.classes.hasOwnProperty(property)) {
options.classes[property] = { ...defaults.classes[property], ...settings.classes[property] }
}
})
}
if (settings.hasOwnProperty('breakpoints')) {
options.breakpoints = Object.assign({}, defaults.breakpoints, settings.breakpoints)
}
return options
}