From fe10a00ba9a3c30d8718ca004ccd19518466f5bd Mon Sep 17 00:00:00 2001
From: Pitu <7425261+Pitu@users.noreply.github.com>
Date: Sun, 16 Sep 2018 01:09:02 -0300
Subject: Site

---
 .../components/grid/waterfall/WaterfallItem.vue    | 60 ++++++++++++++++++++++
 1 file changed, 60 insertions(+)
 create mode 100644 src/site/components/grid/waterfall/WaterfallItem.vue

(limited to 'src/site/components/grid/waterfall/WaterfallItem.vue')

diff --git a/src/site/components/grid/waterfall/WaterfallItem.vue b/src/site/components/grid/waterfall/WaterfallItem.vue
new file mode 100644
index 0000000..597cca6
--- /dev/null
+++ b/src/site/components/grid/waterfall/WaterfallItem.vue
@@ -0,0 +1,60 @@
+<style>
+	.waterfall-item {
+		position: absolute;
+	}
+</style>
+<template>
+	<div class="waterfall-item">
+		<slot/>
+	</div>
+</template>
+<script>
+import imagesLoaded from 'imagesloaded';
+export default {
+	name: 'WaterfallItem',
+	props: {
+		order: {
+			type: Number,
+			default: 0
+		},
+		width: {
+			type: Number,
+			default: 150
+		}
+	},
+	data() {
+		return {
+			itemWidth: 0,
+			height: 0
+		};
+	},
+	created() {
+		this.$watch(() => this.height, this.emit);
+	},
+	mounted() {
+		this.$el.style.display = 'none';
+		this.$el.style.width = `${this.width}px`;
+		this.emit();
+		imagesLoaded(this.$el, () => {
+			this.$el.style.left = '-9999px';
+			this.$el.style.top = '-9999px';
+			this.$el.style.display = 'block';
+			this.height = this.$el.offsetHeight;
+			this.itemWidth = this.$el.offsetWidth;
+		});
+	},
+	methods: {
+		emit() {
+			this.$parent.$emit('itemRender');
+		},
+		getMeta() {
+			return {
+				el: this.$el,
+				height: this.height,
+				width: this.itemWidth,
+				order: this.order
+			};
+		}
+	}
+}
+</script>
-- 
cgit v1.2.3

