<template>
	<view>
		<uni-transition ref="trans" mode-class="fade" :duration="0" :show="true" >
			<uni-search-bar @confirm="search" v-model="searchValue" @cancel="cancel" @clear="clear" @input="input"
				placeholder="请输入色彩名称">
			</uni-search-bar>
			<view class="content">
				<view class="card-padding">
					<uni-row style="padding-bottom: 50px">
						<uni-col :xs="8" :sm="6" :md="4" :lg="3" :xl="2" v-for="(item,index) in colors" 
						:key="index">
							<ColorPanel :hsb="hsb(item.hexadecimal.substring(1,))" name="item.name" @clickPanel="onClickPanel" :name="item.name"></ColorPanel>
							<view style="padding-bottom: 10px;"></view>
						</uni-col>
					</uni-row>
				</view>
			</view>
		</uni-transition>
	</view>
</template>

<script>
	import {
		chineseColors
	} from '../../common/chineseColors.js';
	export default {
		data() {
			return {
				colors: chineseColors,
				searchValue: "",
			}
		},
		onReady() {
			// this.$refs.trans.init({
			// 	duration: 2000,
			// 	timingFunction: 'ease-in-out',
			// 	delay: 500,
			// });
		},
		methods: {
			onClickPanel(hex) {
				// this.$refs.trans.step({
				// 	backgroundColor: "#" + hex,
				// });
				// // 开始执行动画
				// this.$refs.trans.run(() => {});
			},
			input(res) {
				if (res === "") {
					this.colors = chineseColors;
				}
			},
			cancel(res) {
				res.value = "";
				this.colors = chineseColors;
			},
			search(res) {
				this.colors = chineseColors.filter(x => x.name.includes(res.value));
			},

			clear(res) {
				res.value = "";
				this.colors = chineseColors;
			},
			// focus(res) {
			// 	res.value = "";
			// 	this.colors = chineseColors;
			// },
			// 将hex转换为rgb
			hexToRgb(hex) {
				// 将hex切割为rgb数组
				const hexArr = hex.match(/[\s\S]{1,2}/g) || []
				// 转换为10进制数组
				const rgbArr = hexArr.map(hex => parseInt(hex, 16));
				return {
					r: rgbArr[0],
					g: rgbArr[1],
					b: rgbArr[2],
					a: 1,
				}
			},
			// 将rgb转化为hsb
			hsb(hex) {
				const rgb = this.hexToRgb(hex);
				let hsb = {
					h: 0,
					s: 0,
					b: 0,
				};
				let min = Math.min(rgb.r, rgb.g, rgb.b);
				let max = Math.max(rgb.r, rgb.g, rgb.b);
				let delta = max - min;
				hsb.b = max;
				hsb.s = max != 0 ? 255 * delta / max : 0;
				if (hsb.s != 0) {
					if (rgb.r === max) {
						hsb.h = (rgb.g - rgb.b) / delta;
					} else if (rgb.g === max) {
						hsb.h = 2 + (rgb.b - rgb.r) / delta;
					} else {
						hsb.h = 4 + (rgb.r - rgb.g) / delta;
					}
				} else {
					hsb.h = -1;
				}
				hsb.h *= 60;
				if (hsb.h < 0) hsb.h = 0;
			
				hsb.s *= 100 / 255;
				hsb.b *= 100 / 255;
				return hsb;
			}
		}
		
	}
</script>

<style scoped>
	.content {
		width: 100vw;
		height: 100vh;
	
	}

	.card-padding {
		padding-left: 20px;
		padding-top: 15px;
	}

	.search-result {
		padding-top: 10px;
		padding-bottom: 20px;
		text-align: center;
	}

	.search-result-text {
		text-align: center;
		font-size: 14px;
		color: #666;
	}

	.example-body {
		/* #ifndef APP-NVUE */
		display: block;
		/* #endif */
		padding: 0px;
	}

	.uni-mt-10 {
		margin-top: 10px;
	}
</style>
