summaryrefslogtreecommitdiff
path: root/animism-align/frontend/app/utils/vendor/keen-slider/react.js
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2020-09-08 18:15:53 +0200
committerJules Laplace <julescarbon@gmail.com>2020-09-08 18:15:53 +0200
commitd919bdd91a540050e792a11e9837223388fd6aa7 (patch)
treee626eae9f8a51ace1c62c9c6fdfdd3ed7cd97d34 /animism-align/frontend/app/utils/vendor/keen-slider/react.js
parent9a27f55d7766629d71c2d93bb63609f6e890ae8b (diff)
forking keen-slider... adding scroll
Diffstat (limited to 'animism-align/frontend/app/utils/vendor/keen-slider/react.js')
-rw-r--r--animism-align/frontend/app/utils/vendor/keen-slider/react.js93
1 files changed, 93 insertions, 0 deletions
diff --git a/animism-align/frontend/app/utils/vendor/keen-slider/react.js b/animism-align/frontend/app/utils/vendor/keen-slider/react.js
new file mode 100644
index 0000000..9da1b22
--- /dev/null
+++ b/animism-align/frontend/app/utils/vendor/keen-slider/react.js
@@ -0,0 +1,93 @@
+import KeenSlider from './keen-slider'
+import { useEffect, useRef, useState } from 'react'
+
+export default KeenSlider
+
+export function useKeenSlider(options = {}) {
+ const ref = useRef()
+ const savedOptions = useRef()
+
+ function checkOptions(options) {
+ if (!isEqual(savedOptions.current, options)) {
+ savedOptions.current = options
+ }
+ return savedOptions.current
+ }
+
+ const [slider, setSlider] = useState(null)
+
+ useEffect(() => {
+ const new_slider = new KeenSlider(ref.current, savedOptions.current)
+ setSlider(new_slider)
+ return () => {
+ new_slider.destroy()
+ }
+ }, [checkOptions(options)])
+ return [ref, slider]
+}
+
+/*!
+ * Check if two objects or arrays are equal
+ * (c) 2017 Chris Ferdinandi, MIT License, https://gomakethings.com
+ * @param {Object|Array} value The first object or array to compare
+ * @param {Object|Array} other The second object or array to compare
+ * @return {Boolean} Returns true if they're equal
+ */
+var isEqual = function (value, other) {
+ // Get the value type
+ var type = Object.prototype.toString.call(value)
+
+ // If the two objects are not the same type, return false
+ if (type !== Object.prototype.toString.call(other)) return false
+
+ // If items are not an object or array, return false
+ if (['[object Array]', '[object Object]'].indexOf(type) < 0) return false
+
+ // Compare the length of the length of the two items
+ var valueLen =
+ type === '[object Array]' ? value.length : Object.keys(value).length
+ var otherLen =
+ type === '[object Array]' ? other.length : Object.keys(other).length
+ if (valueLen !== otherLen) return false
+
+ // Compare two items
+ var compare = function (item1, item2) {
+ // Get the object type
+ var itemType = Object.prototype.toString.call(item1)
+
+ // If an object or array, compare recursively
+ if (['[object Array]', '[object Object]'].indexOf(itemType) >= 0) {
+ if (!isEqual(item1, item2)) return false
+ }
+
+ // Otherwise, do a simple comparison
+ else {
+ // If the two items are not the same type, return false
+ if (itemType !== Object.prototype.toString.call(item2)) return false
+
+ // Else if it's a function, convert to a string and compare
+ // Otherwise, just compare
+ if (itemType === '[object Function]') {
+ if (item1.toString() !== item2.toString()) return false
+ } else {
+ if (item1 !== item2) return false
+ }
+ }
+ }
+
+ // Compare properties
+ if (type === '[object Array]') {
+ for (var i = 0; i < valueLen; i++) {
+ if (compare(value[i], other[i]) === false) return false
+ }
+ } else {
+ for (var key in value) {
+ if (value.hasOwnProperty(key)) {
+ if (compare(value[key], other[key]) === false) return false
+ }
+ }
+ }
+
+ // If nothing failed, return true
+ return true
+}