diff --git a/404.html b/404.html new file mode 100644 index 0000000..7919d23 --- /dev/null +++ b/404.html @@ -0,0 +1,468 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 页面不存在 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..bfab949 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +awaw.cc \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..7f6b598 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +## Acknowledgements + +- [Github](https://github.com/) +- [GitHub Proxy](https://mirror.ghproxy.com/) +- [Hexo](https://hexo.io/) +- [Hexo Theme Fluid](https://github.com/fluid-dev/hexo-theme-fluid) +- [JSDelivr](https://www.jsdelivr.com/) +- [LeanCloud](https://leancloud.app/) +- [Staticfile](https://staticfile.org/) +- [Vercel](https://vercel.com/) \ No newline at end of file diff --git a/about/index.html b/about/index.html new file mode 100644 index 0000000..b19a74a --- /dev/null +++ b/about/index.html @@ -0,0 +1,631 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 关于 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+ avatar +
+ +
+
+
+ + +
+
+
pdone
+
A developer with C++, C#, Vue, Electron.
+
+ + + + + + + + + + + + + + + + + + + + + + + + qrcode + + + + + + + + + + qrcode + + + +
+
+
+ +
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2018/09/index.html b/archives/2018/09/index.html new file mode 100644 index 0000000..122d1a8 --- /dev/null +++ b/archives/2018/09/index.html @@ -0,0 +1,502 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2018/10/index.html b/archives/2018/10/index.html new file mode 100644 index 0000000..17de03c --- /dev/null +++ b/archives/2018/10/index.html @@ -0,0 +1,502 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2018/11/index.html b/archives/2018/11/index.html new file mode 100644 index 0000000..b3be40d --- /dev/null +++ b/archives/2018/11/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 32 篇文章

+
+ + + + +

2018

+ + + +
用Python爬 历史的今天 数据
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2018/12/index.html b/archives/2018/12/index.html new file mode 100644 index 0000000..73185e2 --- /dev/null +++ b/archives/2018/12/index.html @@ -0,0 +1,496 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2018/index.html b/archives/2018/index.html new file mode 100644 index 0000000..576cd78 --- /dev/null +++ b/archives/2018/index.html @@ -0,0 +1,538 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2019/02/index.html b/archives/2019/02/index.html new file mode 100644 index 0000000..f3d8824 --- /dev/null +++ b/archives/2019/02/index.html @@ -0,0 +1,496 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ + +
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2019/04/index.html b/archives/2019/04/index.html new file mode 100644 index 0000000..db11e12 --- /dev/null +++ b/archives/2019/04/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 32 篇文章

+
+ + + + +

2019

+ + + +
心中尚未崩坏的地方
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2019/06/index.html b/archives/2019/06/index.html new file mode 100644 index 0000000..130dd42 --- /dev/null +++ b/archives/2019/06/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 32 篇文章

+
+ + + + +

2019

+ + + +
SSMS18闪退解决方法
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2019/07/index.html b/archives/2019/07/index.html new file mode 100644 index 0000000..f5a9b5c --- /dev/null +++ b/archives/2019/07/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 32 篇文章

+
+ + + + +

2019

+ + + +
Steam免费游戏一键领取
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2019/index.html b/archives/2019/index.html new file mode 100644 index 0000000..4e0a04f --- /dev/null +++ b/archives/2019/index.html @@ -0,0 +1,514 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2020/03/index.html b/archives/2020/03/index.html new file mode 100644 index 0000000..53f94b3 --- /dev/null +++ b/archives/2020/03/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 32 篇文章

+
+ + + + +

2020

+ + + +
DapperHelper
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2020/04/index.html b/archives/2020/04/index.html new file mode 100644 index 0000000..27f6762 --- /dev/null +++ b/archives/2020/04/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 32 篇文章

+
+ + + + +

2020

+ + + +
WinForm加载中窗体
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2020/09/index.html b/archives/2020/09/index.html new file mode 100644 index 0000000..346f2ce --- /dev/null +++ b/archives/2020/09/index.html @@ -0,0 +1,496 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ + +
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2020/12/index.html b/archives/2020/12/index.html new file mode 100644 index 0000000..40717c2 --- /dev/null +++ b/archives/2020/12/index.html @@ -0,0 +1,496 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2020/index.html b/archives/2020/index.html new file mode 100644 index 0000000..670389f --- /dev/null +++ b/archives/2020/index.html @@ -0,0 +1,520 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2021/01/index.html b/archives/2021/01/index.html new file mode 100644 index 0000000..cac7c8c --- /dev/null +++ b/archives/2021/01/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 32 篇文章

+
+ + + + +

2021

+ + + +
Markdown代码块支持的语言
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2021/02/index.html b/archives/2021/02/index.html new file mode 100644 index 0000000..36ba3a9 --- /dev/null +++ b/archives/2021/02/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 32 篇文章

+
+ + + + +

2021

+ + + +
数据库调优
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2021/03/index.html b/archives/2021/03/index.html new file mode 100644 index 0000000..37fde86 --- /dev/null +++ b/archives/2021/03/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 32 篇文章

+
+ + + + +

2021

+ + + +
洛阳地铁一号线开通啦!(内附线路图)
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2021/04/index.html b/archives/2021/04/index.html new file mode 100644 index 0000000..07b15aa --- /dev/null +++ b/archives/2021/04/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 32 篇文章

+
+ + + + +

2021

+ + + +
批处理获取时间小于10点时补零
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2021/05/index.html b/archives/2021/05/index.html new file mode 100644 index 0000000..8c445ca --- /dev/null +++ b/archives/2021/05/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 32 篇文章

+
+ + + + +

2021

+ + + +
最常用的 35 个 Git 命令
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2021/06/index.html b/archives/2021/06/index.html new file mode 100644 index 0000000..d30b24e --- /dev/null +++ b/archives/2021/06/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 32 篇文章

+
+ + + + +

2021

+ + + +
挪车码生成器 - 开源
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2021/index.html b/archives/2021/index.html new file mode 100644 index 0000000..91701bd --- /dev/null +++ b/archives/2021/index.html @@ -0,0 +1,520 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2022/06/index.html b/archives/2022/06/index.html new file mode 100644 index 0000000..0887332 --- /dev/null +++ b/archives/2022/06/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 32 篇文章

+
+ + + + +

2022

+ + + +
NAS诞生记
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2022/index.html b/archives/2022/index.html new file mode 100644 index 0000000..291caf0 --- /dev/null +++ b/archives/2022/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 32 篇文章

+
+ + + + +

2022

+ + + +
NAS诞生记
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2023/04/index.html b/archives/2023/04/index.html new file mode 100644 index 0000000..841d50b --- /dev/null +++ b/archives/2023/04/index.html @@ -0,0 +1,496 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2023/07/index.html b/archives/2023/07/index.html new file mode 100644 index 0000000..684c726 --- /dev/null +++ b/archives/2023/07/index.html @@ -0,0 +1,496 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2023/08/index.html b/archives/2023/08/index.html new file mode 100644 index 0000000..e8a2913 --- /dev/null +++ b/archives/2023/08/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 32 篇文章

+
+ + + + +

2023

+ + + +
奇思妙想💭
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2023/index.html b/archives/2023/index.html new file mode 100644 index 0000000..ce10c51 --- /dev/null +++ b/archives/2023/index.html @@ -0,0 +1,514 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/index.html b/archives/index.html new file mode 100644 index 0000000..27a179c --- /dev/null +++ b/archives/index.html @@ -0,0 +1,556 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/page/2/index.html b/archives/page/2/index.html new file mode 100644 index 0000000..3122ed7 --- /dev/null +++ b/archives/page/2/index.html @@ -0,0 +1,556 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/page/3/index.html b/archives/page/3/index.html new file mode 100644 index 0000000..3547217 --- /dev/null +++ b/archives/page/3/index.html @@ -0,0 +1,553 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/page/4/index.html b/archives/page/4/index.html new file mode 100644 index 0000000..a17a7fc --- /dev/null +++ b/archives/page/4/index.html @@ -0,0 +1,502 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 归档 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + + + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/custom.css b/assets/custom.css new file mode 100644 index 0000000..b82db01 --- /dev/null +++ b/assets/custom.css @@ -0,0 +1,145 @@ +/* body { + --body-bg-color: transparent; + background-attachment: fixed; + background-size: 400%; + background-image: linear-gradient(125deg, #3a6ea3, #27ae60, #2980b9, #e74c3c, #8e44ad); + animation: bg_move 20s ease-in-out infinite; +} + +@keyframes bg_move { + 0% { + background-position: 0% 50%; + } + + 50% { + background-position: 100% 50%; + } + + 100% { + background-position: 0% 50%; + } +} */ + + +.dplayer { + border-radius: 8px !important; +} + +img[src$="boxshadow=none"] { + box-shadow: none !important; +} + +#comments { + --waline-theme-color: var(--link-hover-color); + --waline-active-color: var(--link-hover-color); + --waline-color: var(--post-text-color); + --waline-border: 1px solid var(--sec-text-color); + --waline-info-color: var(--sec-text-color); + --waline-bgcolor: var(--board-bg-color); + --waline-bgcolor-light: var(--board-bg-color); + --waline-info-bgcolor: var(--inlinecode-bg-color); +} + +@media not print { + [data-user-color-scheme="light"] { + /* background-attachment: fixed; + background-image: linear-gradient(to bottom, #5482b3, #b5ceff); */ + --body-bg-color: #87a7d7; + + --navbar-bg-color: #5482b3CC; + --link-hover-color: #2067ed; + + --scrollbar-color: #c1dfff; + --scrollbar-hover-color: #e5effc; + + --my-navbar-text-color: #fff; + --my-navbar-text-shadow: 1px 1px 5px #575863; + + ::-webkit-scrollbar-track-piece { + background-color: #87a7d7; + } + + #navbar { + text-shadow: var(--my-navbar-text-shadow); + } + + #subtitle { + text-shadow: var(--my-navbar-text-shadow); + } + + /* 文章目录 */ + #toc { + --text-color: #111; + color: #111; + } + .tocbot-active-link { + font-size: 1.1rem; + color: #222; + } + + /* 导航栏 */ + .navbar .nav-item .nav-link:hover { + color: var(--my-navbar-text-color); + } + .navbar .dropdown-item:hover, + .navbar .dropdown-item:focus { + color: var(--my-navbar-text-color); + } + + ::selection { + background-color: #6d96cf; + color: #fff; + } + } + + [data-user-color-scheme="dark"] { + /* background-attachment: fixed; + background-image: linear-gradient(to bottom, #131f29, #4b5466); */ + --body-bg-color: #303a47; + + --navbar-bg-color: #131f29CC; + + ::-webkit-scrollbar-track-piece { + background-color: #303a47; + } + + ::selection { + background-color: #666; + color: #fff; + } + + .tocbot-active-link { + font-size: 1.1rem; + } + } +} + +body, +div { + cursor: url(https://cdn.awaw.cc/raw/pdone/static/master/img/cursor/pointer.cur), default !important; +} + +a, +button, +img, +p>a, +div>i.iconfont.icon-arrowdown, +a>div { + cursor: url(https://cdn.awaw.cc/raw/pdone/static/master/img/cursor/link.cur), pointer !important; +} + +@font-face { + font-family: AlibabaPuHuiTi-3-55-Regular; + font-display: swap; + src: + + url(https://cdn.awaw.cc/raw/pdone/static/master/font/AlibabaPuHuiTi-3-55-Regular.subset.woff2) format('woff2'), + url(https://cdn.awaw.cc/raw/pdone/static/master/font/AlibabaPuHuiTi-3-55-Regular.subset.woff) format('woff'), + url(https://cdn.awaw.cc/raw/pdone/static/master/font/AlibabaPuHuiTi-3-55-Regular.subset.ttf) format('TrueType'), + url(https://cdn.awaw.cc/raw/pdone/static/master/font/AlibabaPuHuiTi-3-55-Regular.subset.otf) format('opentype'); + + /* url(//puhuiti.oss-cn-hangzhou.aliyuncs.com/AlibabaPuHuiTi-3/AlibabaPuHuiTi-3-55-Regular/AlibabaPuHuiTi-3-55-Regular.woff2) format('woff2'), + url(//puhuiti.oss-cn-hangzhou.aliyuncs.com/AlibabaPuHuiTi-3/AlibabaPuHuiTi-3-55-Regular/AlibabaPuHuiTi-3-55-Regular.woff) format('woff'), + url(//puhuiti.oss-cn-hangzhou.aliyuncs.com/AlibabaPuHuiTi-3/AlibabaPuHuiTi-3-55-Regular/AlibabaPuHuiTi-3-55-Regular.ttf) format('TrueType'), + url(//puhuiti.oss-cn-hangzhou.aliyuncs.com/AlibabaPuHuiTi-3/AlibabaPuHuiTi-3-55-Regular/AlibabaPuHuiTi-3-55-Regular.otf) format('opentype'); */ +} \ No newline at end of file diff --git a/assets/font-awesome.min.css b/assets/font-awesome.min.css new file mode 100644 index 0000000..540440c --- /dev/null +++ b/assets/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/assets/js/DPlayer.min.js b/assets/js/DPlayer.min.js new file mode 100644 index 0000000..290e488 --- /dev/null +++ b/assets/js/DPlayer.min.js @@ -0,0 +1,2 @@ +!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("DPlayer",[],e):"object"==typeof exports?exports.DPlayer=e():n.DPlayer=e()}(self,(()=>(()=>{var n={916:(n,e,t)=>{var a=t(471);n.exports=function(n){"use strict";var e,o="",r=(n=n||{}).video,i=n.options,l=a.$escape,s=n.tran,p=n.icons,d=n.index,c=a.$each;return n.$value,n.$index,o+='
\n
\n ',e=t(568)(r),o+=e,o+="\n ",i.logo&&(o+='\n \n '),o+='\n
\n
\n
\n
\n
\n \n ',i.danmaku&&(o+='\n ',o+=l(s("danmaku-loading")),o+="\n "),o+='\n ',o+=p.loading,o+='\n
\n
\n
\n
\n
\n \n
\n
\n
',o+=l(s("set-danmaku-color")),o+='
\n \n \n \n \n \n \n
\n
\n
',o+=l(s("set-danmaku-type")),o+='
\n \n \n \n
\n
\n \n ',o+=p.send,o+='\n \n
\n
\n \n
\n \n
\n
\n
\n \n
\n
\n
\n
\n \n 0:00 /\n 0:00\n \n ',i.live&&(o+='\n ',o+=l(s("live")),o+="\n "),o+='\n
\n
\n ',i.video.quality&&(o+='\n
\n \n
\n
\n ',c(i.video.quality,(function(n,e){o+='\n
',o+=l(n.name),o+="
\n "})),o+="\n
\n
\n
\n "),o+="\n ",i.screenshot&&(o+='\n
\n
\n "),o+="\n ",i.airplay&&(o+='\n
\n
\n "),o+="\n ",i.chromecast&&(o+='\n
\n
\n "),o+='\n
\n \n
\n ",i.subtitle&&(o+="\n ","string"==typeof i.subtitle.url?(o+='\n
\n \n
\n "):(o+='\n
\n \n
\n
\n ',c(i.subtitle.url,(function(n,e){o+='\n
\n \x3c!-- if lang, show tran(lang). if lang and name, show name + (tran(lang)). if name, show name. off option use lang for translation. --\x3e\n ',o+=l(n.lang?n.name?n.name+" ("+s(n.lang)+")":s(n.lang):n.name),o+="\n
\n "})),o+="\n
\n
\n
\n "),o+="\n "),o+='\n
\n \n
\n
\n
\n ',o+=l(s("speed")),o+='\n
',o+=p.right,o+='
\n
\n
\n ',o+=l(s("loop")),o+='\n
\n \n \n
\n
\n
\n ',o+=l(s("show-danmaku")),o+='\n
\n \n \n
\n
\n
\n ',o+=l(s("unlimited-danmaku")),o+='\n
\n \n \n
\n
\n
\n ',o+=l(s("opacity-danmaku")),o+='\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n ',c(i.playbackSpeed,(function(n,e){o+='\n
\n ',o+=l(1===n?s("normal"):n),o+="\n
\n "})),o+='\n
\n
\n
\n
\n \n \n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
[x]
\n
\n Player version\n \n
\n
\n Player FPS\n \n
\n
\n Video type\n \n
\n
\n Video url\n \n
\n
\n Video resolution\n \n
\n
\n Video duration\n \n
\n ',i.danmaku&&(o+='\n
\n Danmaku id\n \n
\n
\n Danmaku api\n \n
\n
\n Danmaku amount\n \n
\n '),o+='\n
\n
\n ',c(i.contextmenu,(function(n,e){o+='\n
\n ',n.key&&(o+=" ",o+=l(s(n.key))),n.text&&(o+=" ",o+=l(n.text)),o+="\n
\n "})),o+='\n
\n
\n"}},568:(n,e,t)=>{var a=t(471);n.exports=function(n){"use strict";var e="",t=(n=n||{}).enableSubtitle,o=n.subtitle,r=n.current,i=n.airplay,l=n.pic,s=a.$escape,p=n.screenshot,d=n.preload,c=n.url;return t=o&&"webvtt"===o.type,e+='\n\n '),e+="\n ",t&&(e+='\n "}},49:(n,e,t)=>{"use strict";t.d(e,{Z:()=>l});var a=t(415),o=t.n(a),r=t(352),i=t.n(r)()(o());i.push([n.id,':root {\n --balloon-border-radius: 2px;\n --balloon-color: rgba(16, 16, 16, 0.95);\n --balloon-text-color: #fff;\n --balloon-font-size: 12px;\n --balloon-move: 4px; }\n\nbutton[aria-label][data-balloon-pos] {\n overflow: visible; }\n\n[aria-label][data-balloon-pos] {\n position: relative;\n cursor: pointer; }\n [aria-label][data-balloon-pos]:after {\n opacity: 0;\n pointer-events: none;\n transition: all 0.18s ease-out 0.18s;\n text-indent: 0;\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;\n font-weight: normal;\n font-style: normal;\n text-shadow: none;\n font-size: 12px;\n font-size: var(--balloon-font-size);\n background: rgba(16, 16, 16, 0.95);\n background: var(--balloon-color);\n border-radius: 2px;\n color: #fff;\n color: var(--balloon-text-color);\n border-radius: var(--balloon-border-radius);\n content: attr(aria-label);\n padding: .5em 1em;\n position: absolute;\n white-space: nowrap;\n z-index: 10; }\n [aria-label][data-balloon-pos]:before {\n width: 0;\n height: 0;\n border: 5px solid transparent;\n border-top-color: rgba(16, 16, 16, 0.95);\n border-top-color: var(--balloon-color);\n opacity: 0;\n pointer-events: none;\n transition: all 0.18s ease-out 0.18s;\n content: "";\n position: absolute;\n z-index: 10; }\n [aria-label][data-balloon-pos]:hover:before, [aria-label][data-balloon-pos]:hover:after, [aria-label][data-balloon-pos][data-balloon-visible]:before, [aria-label][data-balloon-pos][data-balloon-visible]:after, [aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:before, [aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:after {\n opacity: 1;\n pointer-events: none; }\n [aria-label][data-balloon-pos].font-awesome:after {\n font-family: FontAwesome, -apple-system, BlinkMacSystemFont, \'Segoe UI\', Roboto, Oxygen, Ubuntu, Cantarell, \'Open Sans\', \'Helvetica Neue\', sans-serif; }\n [aria-label][data-balloon-pos][data-balloon-break]:after {\n white-space: pre; }\n [aria-label][data-balloon-pos][data-balloon-break][data-balloon-length]:after {\n white-space: pre-line;\n word-break: break-word; }\n [aria-label][data-balloon-pos][data-balloon-blunt]:before, [aria-label][data-balloon-pos][data-balloon-blunt]:after {\n transition: none; }\n [aria-label][data-balloon-pos][data-balloon-pos="up"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos="up"][data-balloon-visible]:after, [aria-label][data-balloon-pos][data-balloon-pos="down"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos="down"][data-balloon-visible]:after {\n transform: translate(-50%, 0); }\n [aria-label][data-balloon-pos][data-balloon-pos="up"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos="up"][data-balloon-visible]:before, [aria-label][data-balloon-pos][data-balloon-pos="down"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos="down"][data-balloon-visible]:before {\n transform: translate(-50%, 0); }\n [aria-label][data-balloon-pos][data-balloon-pos*="-left"]:after {\n left: 0; }\n [aria-label][data-balloon-pos][data-balloon-pos*="-left"]:before {\n left: 5px; }\n [aria-label][data-balloon-pos][data-balloon-pos*="-right"]:after {\n right: 0; }\n [aria-label][data-balloon-pos][data-balloon-pos*="-right"]:before {\n right: 5px; }\n [aria-label][data-balloon-pos][data-balloon-po*="-left"]:hover:after, [aria-label][data-balloon-pos][data-balloon-po*="-left"][data-balloon-visible]:after, [aria-label][data-balloon-pos][data-balloon-pos*="-right"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos*="-right"][data-balloon-visible]:after {\n transform: translate(0, 0); }\n [aria-label][data-balloon-pos][data-balloon-po*="-left"]:hover:before, [aria-label][data-balloon-pos][data-balloon-po*="-left"][data-balloon-visible]:before, [aria-label][data-balloon-pos][data-balloon-pos*="-right"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos*="-right"][data-balloon-visible]:before {\n transform: translate(0, 0); }\n [aria-label][data-balloon-pos][data-balloon-pos^="up"]:before, [aria-label][data-balloon-pos][data-balloon-pos^="up"]:after {\n bottom: 100%;\n transform-origin: top;\n transform: translate(0, 4px);\n transform: translate(0, var(--balloon-move)); }\n [aria-label][data-balloon-pos][data-balloon-pos^="up"]:after {\n margin-bottom: 10px; }\n [aria-label][data-balloon-pos][data-balloon-pos="up"]:before, [aria-label][data-balloon-pos][data-balloon-pos="up"]:after {\n left: 50%;\n transform: translate(-50%, 4px);\n transform: translate(-50%, var(--balloon-move)); }\n [aria-label][data-balloon-pos][data-balloon-pos^="down"]:before, [aria-label][data-balloon-pos][data-balloon-pos^="down"]:after {\n top: 100%;\n transform: translate(0, calc(4px * -1));\n transform: translate(0, calc(var(--balloon-move) * -1)); }\n [aria-label][data-balloon-pos][data-balloon-pos^="down"]:after {\n margin-top: 10px; }\n [aria-label][data-balloon-pos][data-balloon-pos^="down"]:before {\n width: 0;\n height: 0;\n border: 5px solid transparent;\n border-bottom-color: rgba(16, 16, 16, 0.95);\n border-bottom-color: var(--balloon-color); }\n [aria-label][data-balloon-pos][data-balloon-pos="down"]:after, [aria-label][data-balloon-pos][data-balloon-pos="down"]:before {\n left: 50%;\n transform: translate(-50%, calc(4px * -1));\n transform: translate(-50%, calc(var(--balloon-move) * -1)); }\n [aria-label][data-balloon-pos][data-balloon-pos="left"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos="left"][data-balloon-visible]:after, [aria-label][data-balloon-pos][data-balloon-pos="right"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos="right"][data-balloon-visible]:after {\n transform: translate(0, -50%); }\n [aria-label][data-balloon-pos][data-balloon-pos="left"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos="left"][data-balloon-visible]:before, [aria-label][data-balloon-pos][data-balloon-pos="right"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos="right"][data-balloon-visible]:before {\n transform: translate(0, -50%); }\n [aria-label][data-balloon-pos][data-balloon-pos="left"]:after, [aria-label][data-balloon-pos][data-balloon-pos="left"]:before {\n right: 100%;\n top: 50%;\n transform: translate(4px, -50%);\n transform: translate(var(--balloon-move), -50%); }\n [aria-label][data-balloon-pos][data-balloon-pos="left"]:after {\n margin-right: 10px; }\n [aria-label][data-balloon-pos][data-balloon-pos="left"]:before {\n width: 0;\n height: 0;\n border: 5px solid transparent;\n border-left-color: rgba(16, 16, 16, 0.95);\n border-left-color: var(--balloon-color); }\n [aria-label][data-balloon-pos][data-balloon-pos="right"]:after, [aria-label][data-balloon-pos][data-balloon-pos="right"]:before {\n left: 100%;\n top: 50%;\n transform: translate(calc(4px * -1), -50%);\n transform: translate(calc(var(--balloon-move) * -1), -50%); }\n [aria-label][data-balloon-pos][data-balloon-pos="right"]:after {\n margin-left: 10px; }\n [aria-label][data-balloon-pos][data-balloon-pos="right"]:before {\n width: 0;\n height: 0;\n border: 5px solid transparent;\n border-right-color: rgba(16, 16, 16, 0.95);\n border-right-color: var(--balloon-color); }\n [aria-label][data-balloon-pos][data-balloon-length]:after {\n white-space: normal; }\n [aria-label][data-balloon-pos][data-balloon-length="small"]:after {\n width: 80px; }\n [aria-label][data-balloon-pos][data-balloon-length="medium"]:after {\n width: 150px; }\n [aria-label][data-balloon-pos][data-balloon-length="large"]:after {\n width: 260px; }\n [aria-label][data-balloon-pos][data-balloon-length="xlarge"]:after {\n width: 380px; }\n @media screen and (max-width: 768px) {\n [aria-label][data-balloon-pos][data-balloon-length="xlarge"]:after {\n width: 90vw; } }\n [aria-label][data-balloon-pos][data-balloon-length="fit"]:after {\n width: 100%; }\n',"",{version:3,sources:["webpack://./node_modules/.pnpm/balloon-css@1.2.0/node_modules/balloon-css/balloon.css"],names:[],mappings:"AAAA;EACE,4BAA4B;EAC5B,uCAAuC;EACvC,0BAA0B;EAC1B,yBAAyB;EACzB,mBAAmB,EAAE;;AAEvB;EACE,iBAAiB,EAAE;;AAErB;EACE,kBAAkB;EAClB,eAAe,EAAE;EACjB;IACE,UAAU;IACV,oBAAoB;IACpB,oCAAoC;IACpC,cAAc;IACd,wIAAwI;IACxI,mBAAmB;IACnB,kBAAkB;IAClB,iBAAiB;IACjB,eAAmC;IAAnC,mCAAmC;IACnC,kCAAgC;IAAhC,gCAAgC;IAChC,kBAAkB;IAClB,WAAgC;IAAhC,gCAAgC;IAChC,2CAA2C;IAC3C,yBAAyB;IACzB,iBAAiB;IACjB,kBAAkB;IAClB,mBAAmB;IACnB,WAAW,EAAE;EACf;IACE,QAAQ;IACR,SAAS;IACT,6BAA6B;IAC7B,wCAAsC;IAAtC,sCAAsC;IACtC,UAAU;IACV,oBAAoB;IACpB,oCAAoC;IACpC,WAAW;IACX,kBAAkB;IAClB,WAAW,EAAE;EACf;IACE,UAAU;IACV,oBAAoB,EAAE;EACxB;IACE,qJAAqJ,EAAE;EACzJ;IACE,gBAAgB,EAAE;EACpB;IACE,qBAAqB;IACrB,sBAAsB,EAAE;EAC1B;IACE,gBAAgB,EAAE;EACpB;IACE,6BAA6B,EAAE;EACjC;IACE,6BAA6B,EAAE;EACjC;IACE,OAAO,EAAE;EACX;IACE,SAAS,EAAE;EACb;IACE,QAAQ,EAAE;EACZ;IACE,UAAU,EAAE;EACd;IACE,0BAA0B,EAAE;EAC9B;IACE,0BAA0B,EAAE;EAC9B;IACE,YAAY;IACZ,qBAAqB;IACrB,4BAA4C;IAA5C,4CAA4C,EAAE;EAChD;IACE,mBAAmB,EAAE;EACvB;IACE,SAAS;IACT,+BAA+C;IAA/C,+CAA+C,EAAE;EACnD;IACE,SAAS;IACT,uCAAuD;IAAvD,uDAAuD,EAAE;EAC3D;IACE,gBAAgB,EAAE;EACpB;IACE,QAAQ;IACR,SAAS;IACT,6BAA6B;IAC7B,2CAAyC;IAAzC,yCAAyC,EAAE;EAC7C;IACE,SAAS;IACT,0CAA0D;IAA1D,0DAA0D,EAAE;EAC9D;IACE,6BAA6B,EAAE;EACjC;IACE,6BAA6B,EAAE;EACjC;IACE,WAAW;IACX,QAAQ;IACR,+BAA+C;IAA/C,+CAA+C,EAAE;EACnD;IACE,kBAAkB,EAAE;EACtB;IACE,QAAQ;IACR,SAAS;IACT,6BAA6B;IAC7B,yCAAuC;IAAvC,uCAAuC,EAAE;EAC3C;IACE,UAAU;IACV,QAAQ;IACR,0CAA0D;IAA1D,0DAA0D,EAAE;EAC9D;IACE,iBAAiB,EAAE;EACrB;IACE,QAAQ;IACR,SAAS;IACT,6BAA6B;IAC7B,0CAAwC;IAAxC,wCAAwC,EAAE;EAC5C;IACE,mBAAmB,EAAE;EACvB;IACE,WAAW,EAAE;EACf;IACE,YAAY,EAAE;EAChB;IACE,YAAY,EAAE;EAChB;IACE,YAAY,EAAE;IACd;MACE;QACE,WAAW,EAAE,EAAE;EACrB;IACE,WAAW,EAAE",sourcesContent:[':root {\n --balloon-border-radius: 2px;\n --balloon-color: rgba(16, 16, 16, 0.95);\n --balloon-text-color: #fff;\n --balloon-font-size: 12px;\n --balloon-move: 4px; }\n\nbutton[aria-label][data-balloon-pos] {\n overflow: visible; }\n\n[aria-label][data-balloon-pos] {\n position: relative;\n cursor: pointer; }\n [aria-label][data-balloon-pos]:after {\n opacity: 0;\n pointer-events: none;\n transition: all 0.18s ease-out 0.18s;\n text-indent: 0;\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;\n font-weight: normal;\n font-style: normal;\n text-shadow: none;\n font-size: var(--balloon-font-size);\n background: var(--balloon-color);\n border-radius: 2px;\n color: var(--balloon-text-color);\n border-radius: var(--balloon-border-radius);\n content: attr(aria-label);\n padding: .5em 1em;\n position: absolute;\n white-space: nowrap;\n z-index: 10; }\n [aria-label][data-balloon-pos]:before {\n width: 0;\n height: 0;\n border: 5px solid transparent;\n border-top-color: var(--balloon-color);\n opacity: 0;\n pointer-events: none;\n transition: all 0.18s ease-out 0.18s;\n content: "";\n position: absolute;\n z-index: 10; }\n [aria-label][data-balloon-pos]:hover:before, [aria-label][data-balloon-pos]:hover:after, [aria-label][data-balloon-pos][data-balloon-visible]:before, [aria-label][data-balloon-pos][data-balloon-visible]:after, [aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:before, [aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:after {\n opacity: 1;\n pointer-events: none; }\n [aria-label][data-balloon-pos].font-awesome:after {\n font-family: FontAwesome, -apple-system, BlinkMacSystemFont, \'Segoe UI\', Roboto, Oxygen, Ubuntu, Cantarell, \'Open Sans\', \'Helvetica Neue\', sans-serif; }\n [aria-label][data-balloon-pos][data-balloon-break]:after {\n white-space: pre; }\n [aria-label][data-balloon-pos][data-balloon-break][data-balloon-length]:after {\n white-space: pre-line;\n word-break: break-word; }\n [aria-label][data-balloon-pos][data-balloon-blunt]:before, [aria-label][data-balloon-pos][data-balloon-blunt]:after {\n transition: none; }\n [aria-label][data-balloon-pos][data-balloon-pos="up"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos="up"][data-balloon-visible]:after, [aria-label][data-balloon-pos][data-balloon-pos="down"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos="down"][data-balloon-visible]:after {\n transform: translate(-50%, 0); }\n [aria-label][data-balloon-pos][data-balloon-pos="up"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos="up"][data-balloon-visible]:before, [aria-label][data-balloon-pos][data-balloon-pos="down"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos="down"][data-balloon-visible]:before {\n transform: translate(-50%, 0); }\n [aria-label][data-balloon-pos][data-balloon-pos*="-left"]:after {\n left: 0; }\n [aria-label][data-balloon-pos][data-balloon-pos*="-left"]:before {\n left: 5px; }\n [aria-label][data-balloon-pos][data-balloon-pos*="-right"]:after {\n right: 0; }\n [aria-label][data-balloon-pos][data-balloon-pos*="-right"]:before {\n right: 5px; }\n [aria-label][data-balloon-pos][data-balloon-po*="-left"]:hover:after, [aria-label][data-balloon-pos][data-balloon-po*="-left"][data-balloon-visible]:after, [aria-label][data-balloon-pos][data-balloon-pos*="-right"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos*="-right"][data-balloon-visible]:after {\n transform: translate(0, 0); }\n [aria-label][data-balloon-pos][data-balloon-po*="-left"]:hover:before, [aria-label][data-balloon-pos][data-balloon-po*="-left"][data-balloon-visible]:before, [aria-label][data-balloon-pos][data-balloon-pos*="-right"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos*="-right"][data-balloon-visible]:before {\n transform: translate(0, 0); }\n [aria-label][data-balloon-pos][data-balloon-pos^="up"]:before, [aria-label][data-balloon-pos][data-balloon-pos^="up"]:after {\n bottom: 100%;\n transform-origin: top;\n transform: translate(0, var(--balloon-move)); }\n [aria-label][data-balloon-pos][data-balloon-pos^="up"]:after {\n margin-bottom: 10px; }\n [aria-label][data-balloon-pos][data-balloon-pos="up"]:before, [aria-label][data-balloon-pos][data-balloon-pos="up"]:after {\n left: 50%;\n transform: translate(-50%, var(--balloon-move)); }\n [aria-label][data-balloon-pos][data-balloon-pos^="down"]:before, [aria-label][data-balloon-pos][data-balloon-pos^="down"]:after {\n top: 100%;\n transform: translate(0, calc(var(--balloon-move) * -1)); }\n [aria-label][data-balloon-pos][data-balloon-pos^="down"]:after {\n margin-top: 10px; }\n [aria-label][data-balloon-pos][data-balloon-pos^="down"]:before {\n width: 0;\n height: 0;\n border: 5px solid transparent;\n border-bottom-color: var(--balloon-color); }\n [aria-label][data-balloon-pos][data-balloon-pos="down"]:after, [aria-label][data-balloon-pos][data-balloon-pos="down"]:before {\n left: 50%;\n transform: translate(-50%, calc(var(--balloon-move) * -1)); }\n [aria-label][data-balloon-pos][data-balloon-pos="left"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos="left"][data-balloon-visible]:after, [aria-label][data-balloon-pos][data-balloon-pos="right"]:hover:after, [aria-label][data-balloon-pos][data-balloon-pos="right"][data-balloon-visible]:after {\n transform: translate(0, -50%); }\n [aria-label][data-balloon-pos][data-balloon-pos="left"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos="left"][data-balloon-visible]:before, [aria-label][data-balloon-pos][data-balloon-pos="right"]:hover:before, [aria-label][data-balloon-pos][data-balloon-pos="right"][data-balloon-visible]:before {\n transform: translate(0, -50%); }\n [aria-label][data-balloon-pos][data-balloon-pos="left"]:after, [aria-label][data-balloon-pos][data-balloon-pos="left"]:before {\n right: 100%;\n top: 50%;\n transform: translate(var(--balloon-move), -50%); }\n [aria-label][data-balloon-pos][data-balloon-pos="left"]:after {\n margin-right: 10px; }\n [aria-label][data-balloon-pos][data-balloon-pos="left"]:before {\n width: 0;\n height: 0;\n border: 5px solid transparent;\n border-left-color: var(--balloon-color); }\n [aria-label][data-balloon-pos][data-balloon-pos="right"]:after, [aria-label][data-balloon-pos][data-balloon-pos="right"]:before {\n left: 100%;\n top: 50%;\n transform: translate(calc(var(--balloon-move) * -1), -50%); }\n [aria-label][data-balloon-pos][data-balloon-pos="right"]:after {\n margin-left: 10px; }\n [aria-label][data-balloon-pos][data-balloon-pos="right"]:before {\n width: 0;\n height: 0;\n border: 5px solid transparent;\n border-right-color: var(--balloon-color); }\n [aria-label][data-balloon-pos][data-balloon-length]:after {\n white-space: normal; }\n [aria-label][data-balloon-pos][data-balloon-length="small"]:after {\n width: 80px; }\n [aria-label][data-balloon-pos][data-balloon-length="medium"]:after {\n width: 150px; }\n [aria-label][data-balloon-pos][data-balloon-length="large"]:after {\n width: 260px; }\n [aria-label][data-balloon-pos][data-balloon-length="xlarge"]:after {\n width: 380px; }\n @media screen and (max-width: 768px) {\n [aria-label][data-balloon-pos][data-balloon-length="xlarge"]:after {\n width: 90vw; } }\n [aria-label][data-balloon-pos][data-balloon-length="fit"]:after {\n width: 100%; }\n'],sourceRoot:""}]);const l=i},685:(n,e,t)=>{"use strict";t.d(e,{Z:()=>u});var a=t(415),o=t.n(a),r=t(352),i=t.n(r),l=t(49),s=t(80),p=t.n(s),d=new URL(t(831),t.b),c=i()(o());c.i(l.Z);var A=p()(d);c.push([n.id,'@keyframes my-face {\n 2% {\n transform: translate(0, 1.5px) rotate(1.5deg);\n }\n 4% {\n transform: translate(0, -1.5px) rotate(-0.5deg);\n }\n 6% {\n transform: translate(0, 1.5px) rotate(-1.5deg);\n }\n 8% {\n transform: translate(0, -1.5px) rotate(-1.5deg);\n }\n 10% {\n transform: translate(0, 2.5px) rotate(1.5deg);\n }\n 12% {\n transform: translate(0, -0.5px) rotate(1.5deg);\n }\n 14% {\n transform: translate(0, -1.5px) rotate(1.5deg);\n }\n 16% {\n transform: translate(0, -0.5px) rotate(-1.5deg);\n }\n 18% {\n transform: translate(0, 0.5px) rotate(-1.5deg);\n }\n 20% {\n transform: translate(0, -1.5px) rotate(2.5deg);\n }\n 22% {\n transform: translate(0, 0.5px) rotate(-1.5deg);\n }\n 24% {\n transform: translate(0, 1.5px) rotate(1.5deg);\n }\n 26% {\n transform: translate(0, 0.5px) rotate(0.5deg);\n }\n 28% {\n transform: translate(0, 0.5px) rotate(1.5deg);\n }\n 30% {\n transform: translate(0, -0.5px) rotate(2.5deg);\n }\n 32% {\n transform: translate(0, 1.5px) rotate(-0.5deg);\n }\n 34% {\n transform: translate(0, 1.5px) rotate(-0.5deg);\n }\n 36% {\n transform: translate(0, -1.5px) rotate(2.5deg);\n }\n 38% {\n transform: translate(0, 1.5px) rotate(-1.5deg);\n }\n 40% {\n transform: translate(0, -0.5px) rotate(2.5deg);\n }\n 42% {\n transform: translate(0, 2.5px) rotate(-1.5deg);\n }\n 44% {\n transform: translate(0, 1.5px) rotate(0.5deg);\n }\n 46% {\n transform: translate(0, -1.5px) rotate(2.5deg);\n }\n 48% {\n transform: translate(0, -0.5px) rotate(0.5deg);\n }\n 50% {\n transform: translate(0, 0.5px) rotate(0.5deg);\n }\n 52% {\n transform: translate(0, 2.5px) rotate(2.5deg);\n }\n 54% {\n transform: translate(0, -1.5px) rotate(1.5deg);\n }\n 56% {\n transform: translate(0, 2.5px) rotate(2.5deg);\n }\n 58% {\n transform: translate(0, 0.5px) rotate(2.5deg);\n }\n 60% {\n transform: translate(0, 2.5px) rotate(2.5deg);\n }\n 62% {\n transform: translate(0, -0.5px) rotate(2.5deg);\n }\n 64% {\n transform: translate(0, -0.5px) rotate(1.5deg);\n }\n 66% {\n transform: translate(0, 1.5px) rotate(-0.5deg);\n }\n 68% {\n transform: translate(0, -1.5px) rotate(-0.5deg);\n }\n 70% {\n transform: translate(0, 1.5px) rotate(0.5deg);\n }\n 72% {\n transform: translate(0, 2.5px) rotate(1.5deg);\n }\n 74% {\n transform: translate(0, -0.5px) rotate(0.5deg);\n }\n 76% {\n transform: translate(0, -0.5px) rotate(2.5deg);\n }\n 78% {\n transform: translate(0, -0.5px) rotate(1.5deg);\n }\n 80% {\n transform: translate(0, 1.5px) rotate(1.5deg);\n }\n 82% {\n transform: translate(0, -0.5px) rotate(0.5deg);\n }\n 84% {\n transform: translate(0, 1.5px) rotate(2.5deg);\n }\n 86% {\n transform: translate(0, -1.5px) rotate(-1.5deg);\n }\n 88% {\n transform: translate(0, -0.5px) rotate(2.5deg);\n }\n 90% {\n transform: translate(0, 2.5px) rotate(-0.5deg);\n }\n 92% {\n transform: translate(0, 0.5px) rotate(-0.5deg);\n }\n 94% {\n transform: translate(0, 2.5px) rotate(0.5deg);\n }\n 96% {\n transform: translate(0, -0.5px) rotate(1.5deg);\n }\n 98% {\n transform: translate(0, -1.5px) rotate(-0.5deg);\n }\n 0%,\n 100% {\n transform: translate(0, 0) rotate(0deg);\n }\n}\n.dplayer {\n position: relative;\n overflow: hidden;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n line-height: 1;\n}\n.dplayer * {\n box-sizing: content-box;\n}\n.dplayer svg {\n width: 100%;\n height: 100%;\n}\n.dplayer svg path,\n.dplayer svg circle {\n fill: #fff;\n}\n.dplayer:-webkit-full-screen {\n width: 100%;\n height: 100%;\n background: #000;\n position: fixed;\n z-index: 100000;\n left: 0;\n top: 0;\n margin: 0;\n padding: 0;\n transform: translate(0, 0);\n}\n.dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box .dplayer-setting-showdan,\n.dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box .dplayer-setting-danmaku,\n.dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box .dplayer-setting-danunlimit {\n display: none;\n}\n.dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-comment {\n display: none;\n}\n.dplayer.dplayer-no-danmaku .dplayer-danmaku {\n display: none;\n}\n.dplayer.dplayer-live .dplayer-time {\n display: none;\n}\n.dplayer.dplayer-live .dplayer-bar-wrap {\n display: none;\n}\n.dplayer.dplayer-live .dplayer-setting-speed {\n display: none;\n}\n.dplayer.dplayer-live .dplayer-setting-loop {\n display: none;\n}\n.dplayer.dplayer-live.dplayer-no-danmaku .dplayer-setting {\n display: none;\n}\n.dplayer.dplayer-arrow .dplayer-danmaku {\n font-size: 18px;\n}\n.dplayer.dplayer-arrow .dplayer-icon {\n margin: 0 -3px;\n}\n.dplayer.dplayer-playing .dplayer-danmaku .dplayer-danmaku-move {\n animation-play-state: running;\n}\n@media (min-width: 900px) {\n .dplayer.dplayer-playing .dplayer-controller-mask {\n opacity: 0;\n }\n .dplayer.dplayer-playing .dplayer-controller {\n opacity: 0;\n }\n .dplayer.dplayer-playing:hover .dplayer-controller-mask {\n opacity: 1;\n }\n .dplayer.dplayer-playing:hover .dplayer-controller {\n opacity: 1;\n }\n}\n.dplayer.dplayer-loading .dplayer-bezel .diplayer-loading-icon {\n display: block;\n}\n.dplayer.dplayer-loading .dplayer-danmaku,\n.dplayer.dplayer-paused .dplayer-danmaku,\n.dplayer.dplayer-loading .dplayer-danmaku-move,\n.dplayer.dplayer-paused .dplayer-danmaku-move {\n animation-play-state: paused;\n}\n.dplayer.dplayer-hide-controller {\n cursor: none;\n}\n.dplayer.dplayer-hide-controller .dplayer-controller-mask {\n opacity: 0;\n transform: translateY(100%);\n}\n.dplayer.dplayer-hide-controller .dplayer-controller {\n opacity: 0;\n transform: translateY(100%);\n}\n.dplayer.dplayer-show-controller .dplayer-controller-mask {\n opacity: 1;\n}\n.dplayer.dplayer-show-controller .dplayer-controller {\n opacity: 1;\n}\n.dplayer.dplayer-fulled {\n width: 100% !important;\n height: 100% !important;\n}\n.dplayer.dplayer-fulled {\n position: fixed;\n z-index: 100000;\n left: 0;\n top: 0;\n}\n.dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-volume,\n.dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-camera-icon,\n.dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-airplay-icon,\n.dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-chromecast-icon,\n.dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-play-icon {\n display: none;\n}\n.dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-full .dplayer-full-in-icon {\n position: static;\n display: inline-block;\n}\n.dplayer.dplayer-mobile .dplayer-bar-time {\n display: none;\n}\n.dplayer.dplayer-mobile.dplayer-hide-controller .dplayer-mobile-play {\n display: none;\n}\n.dplayer.dplayer-mobile .dplayer-mobile-play {\n display: block;\n}\n.dplayer-web-fullscreen-fix {\n position: fixed;\n top: 0;\n left: 0;\n margin: 0;\n padding: 0;\n}\n[data-balloon]:before {\n display: none;\n}\n[data-balloon]:after {\n padding: 0.3em 0.7em;\n background: rgba(17, 17, 17, 0.7);\n}\n[data-balloon][data-balloon-pos="up"]:after {\n margin-bottom: 0;\n}\n.dplayer-bezel {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n font-size: 22px;\n color: #fff;\n pointer-events: none;\n}\n.dplayer-bezel .dplayer-bezel-icon {\n position: absolute;\n top: 50%;\n left: 50%;\n margin: -26px 0 0 -26px;\n height: 52px;\n width: 52px;\n padding: 12px;\n box-sizing: border-box;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 50%;\n opacity: 0;\n pointer-events: none;\n}\n.dplayer-bezel .dplayer-bezel-icon.dplayer-bezel-transition {\n animation: bezel-hide 0.5s linear;\n}\n@keyframes bezel-hide {\n from {\n opacity: 1;\n transform: scale(1);\n }\n to {\n opacity: 0;\n transform: scale(2);\n }\n}\n.dplayer-bezel .dplayer-danloading {\n position: absolute;\n top: 50%;\n margin-top: -7px;\n width: 100%;\n text-align: center;\n font-size: 14px;\n line-height: 14px;\n animation: my-face 5s infinite ease-in-out;\n}\n.dplayer-bezel .diplayer-loading-icon {\n display: none;\n position: absolute;\n top: 50%;\n left: 50%;\n margin: -18px 0 0 -18px;\n height: 36px;\n width: 36px;\n pointer-events: none;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-hide {\n display: none;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot {\n animation: diplayer-loading-dot-fade 0.8s ease infinite;\n opacity: 0;\n transform-origin: 4px 4px;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-1 {\n animation-delay: 0.1s;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-2 {\n animation-delay: 0.2s;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-3 {\n animation-delay: 0.3s;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-4 {\n animation-delay: 0.4s;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-5 {\n animation-delay: 0.5s;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-6 {\n animation-delay: 0.6s;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-7 {\n animation-delay: 0.7s;\n}\n@keyframes diplayer-loading-dot-fade {\n 0% {\n opacity: 0.7;\n transform: scale(1.2, 1.2);\n }\n 50% {\n opacity: 0.25;\n transform: scale(0.9, 0.9);\n }\n to {\n opacity: 0.25;\n transform: scale(0.85, 0.85);\n }\n}\n.dplayer-controller-mask {\n background: url('+A+") repeat-x bottom;\n height: 98px;\n width: 100%;\n position: absolute;\n bottom: 0;\n transition: all 0.3s ease;\n}\n.dplayer-controller {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 41px;\n padding: 0 20px;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n transition: all 0.3s ease;\n}\n.dplayer-controller.dplayer-controller-comment .dplayer-icons {\n display: none;\n}\n.dplayer-controller.dplayer-controller-comment .dplayer-icons.dplayer-comment-box {\n display: block;\n}\n.dplayer-controller .dplayer-bar-wrap {\n padding: 5px 0;\n cursor: pointer;\n position: absolute;\n bottom: 33px;\n width: calc(100% - 40px);\n height: 3px;\n}\n.dplayer-controller .dplayer-bar-wrap:hover .dplayer-bar .dplayer-played .dplayer-thumb {\n transform: scale(1);\n}\n.dplayer-controller .dplayer-bar-wrap:hover .dplayer-highlight {\n display: block;\n width: 8px;\n transform: translateX(-4px);\n top: 4px;\n height: 40%;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-highlight {\n z-index: 12;\n position: absolute;\n top: 5px;\n width: 6px;\n height: 20%;\n border-radius: 6px;\n background-color: #fff;\n text-align: center;\n transform: translateX(-3px);\n transition: all 0.2s ease-in-out;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-highlight:hover .dplayer-highlight-text {\n display: block;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-highlight:hover ~ .dplayer-bar-preview {\n opacity: 0;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-highlight:hover ~ .dplayer-bar-time {\n opacity: 0;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-highlight .dplayer-highlight-text {\n display: none;\n position: absolute;\n left: 50%;\n top: -24px;\n padding: 5px 8px;\n background-color: rgba(0, 0, 0, 0.62);\n color: #fff;\n border-radius: 4px;\n font-size: 12px;\n white-space: nowrap;\n transform: translateX(-50%);\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-bar-preview {\n position: absolute;\n background: #fff;\n pointer-events: none;\n display: none;\n background-size: 16000px 100%;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-bar-preview-canvas {\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: 1;\n pointer-events: none;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-bar-time {\n position: absolute;\n left: 0px;\n top: -20px;\n border-radius: 4px;\n padding: 5px 7px;\n background-color: rgba(0, 0, 0, 0.62);\n color: #fff;\n font-size: 12px;\n text-align: center;\n opacity: 1;\n transition: opacity 0.1s ease-in-out;\n word-wrap: normal;\n word-break: normal;\n z-index: 2;\n pointer-events: none;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-bar-time.hidden {\n opacity: 0;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-bar {\n position: relative;\n height: 3px;\n width: 100%;\n background: rgba(255, 255, 255, 0.2);\n cursor: pointer;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-loaded {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n background: rgba(255, 255, 255, 0.4);\n height: 3px;\n transition: all 0.5s ease;\n will-change: width;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-played {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n height: 3px;\n will-change: width;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-played .dplayer-thumb {\n position: absolute;\n top: 0;\n right: 5px;\n margin-top: -4px;\n margin-right: -10px;\n height: 11px;\n width: 11px;\n border-radius: 50%;\n cursor: pointer;\n transition: all 0.3s ease-in-out;\n transform: scale(0);\n}\n.dplayer-controller .dplayer-icons {\n height: 38px;\n position: absolute;\n bottom: 0;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box {\n display: none;\n position: absolute;\n transition: all 0.3s ease-in-out;\n z-index: 2;\n height: 38px;\n bottom: 0;\n left: 20px;\n right: 20px;\n color: #fff;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-icon {\n padding: 7px;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-icon {\n position: absolute;\n left: 0;\n top: 0;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-send-icon {\n position: absolute;\n right: 0;\n top: 0;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box {\n position: absolute;\n background: rgba(28, 28, 28, 0.9);\n bottom: 41px;\n left: 0;\n box-shadow: 0 0 25px rgba(0, 0, 0, 0.3);\n border-radius: 4px;\n padding: 10px 10px 16px;\n font-size: 14px;\n width: 204px;\n transition: all 0.3s ease-in-out;\n transform: scale(0);\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box.dplayer-comment-setting-open {\n transform: scale(1);\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box input[type=radio] {\n display: none;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box label {\n cursor: pointer;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-title {\n font-size: 13px;\n color: #fff;\n line-height: 30px;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type {\n font-size: 0;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type .dplayer-comment-setting-title {\n margin-bottom: 6px;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type label:nth-child(2) span {\n border-radius: 4px 0 0 4px;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type label:nth-child(4) span {\n border-radius: 0 4px 4px 0;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type span {\n width: 33%;\n padding: 4px 6px;\n line-height: 16px;\n display: inline-block;\n font-size: 12px;\n color: #fff;\n border: 1px solid #fff;\n margin-right: -1px;\n box-sizing: border-box;\n text-align: center;\n cursor: pointer;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type input:checked + span {\n background: #E4E4E6;\n color: #1c1c1c;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color {\n font-size: 0;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color label {\n font-size: 0;\n padding: 6px;\n display: inline-block;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color span {\n width: 22px;\n height: 22px;\n display: inline-block;\n border-radius: 50%;\n box-sizing: border-box;\n cursor: pointer;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color span:hover {\n animation: my-face 5s infinite ease-in-out;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input {\n outline: none;\n border: none;\n padding: 8px 31px;\n font-size: 14px;\n line-height: 18px;\n text-align: center;\n border-radius: 4px;\n background: none;\n margin: 0;\n height: 100%;\n box-sizing: border-box;\n width: 100%;\n color: #fff;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input::-moz-placeholder {\n color: #fff;\n opacity: 0.8;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input::placeholder {\n color: #fff;\n opacity: 0.8;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input::-ms-clear {\n display: none;\n}\n.dplayer-controller .dplayer-icons.dplayer-icons-left .dplayer-icon {\n padding: 7px;\n}\n.dplayer-controller .dplayer-icons.dplayer-icons-right {\n right: 20px;\n}\n.dplayer-controller .dplayer-icons.dplayer-icons-right .dplayer-icon {\n padding: 8px;\n}\n.dplayer-controller .dplayer-icons .dplayer-time,\n.dplayer-controller .dplayer-icons .dplayer-live-badge {\n line-height: 38px;\n color: #eee;\n text-shadow: 0 0 2px rgba(0, 0, 0, 0.5);\n vertical-align: middle;\n font-size: 13px;\n cursor: default;\n}\n.dplayer-controller .dplayer-icons .dplayer-live-dot {\n display: inline-block;\n width: 6px;\n height: 6px;\n vertical-align: 4%;\n margin-right: 5px;\n content: '';\n border-radius: 6px;\n}\n.dplayer-controller .dplayer-icons .dplayer-icon {\n width: 40px;\n height: 100%;\n border: none;\n background-color: transparent;\n outline: none;\n cursor: pointer;\n vertical-align: middle;\n box-sizing: border-box;\n display: inline-block;\n}\n.dplayer-controller .dplayer-icons .dplayer-icon .dplayer-icon-content {\n transition: all 0.2s ease-in-out;\n opacity: 0.8;\n}\n.dplayer-controller .dplayer-icons .dplayer-icon:hover .dplayer-icon-content {\n opacity: 1;\n}\n.dplayer-controller .dplayer-icons .dplayer-icon.dplayer-quality-icon {\n color: #fff;\n width: auto;\n line-height: 22px;\n font-size: 14px;\n}\n.dplayer-controller .dplayer-icons .dplayer-icon.dplayer-comment-icon {\n padding: 10px 9px 9px;\n}\n.dplayer-controller .dplayer-icons .dplayer-icon.dplayer-setting-icon {\n padding-top: 8.5px;\n}\n.dplayer-controller .dplayer-icons .dplayer-icon.dplayer-volume-icon {\n width: 43px;\n}\n.dplayer-controller .dplayer-icons .dplayer-volume {\n position: relative;\n display: inline-block;\n cursor: pointer;\n height: 100%;\n}\n.dplayer-controller .dplayer-icons .dplayer-volume:hover .dplayer-volume-bar-wrap .dplayer-volume-bar {\n width: 45px;\n}\n.dplayer-controller .dplayer-icons .dplayer-volume:hover .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner .dplayer-thumb {\n transform: scale(1);\n}\n.dplayer-controller .dplayer-icons .dplayer-volume.dplayer-volume-active .dplayer-volume-bar-wrap .dplayer-volume-bar {\n width: 45px;\n}\n.dplayer-controller .dplayer-icons .dplayer-volume.dplayer-volume-active .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner .dplayer-thumb {\n transform: scale(1);\n}\n.dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap {\n display: inline-block;\n margin: 0 10px 0 -5px;\n vertical-align: middle;\n height: 100%;\n}\n.dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar {\n position: relative;\n top: 17px;\n width: 0;\n height: 3px;\n background: #aaa;\n transition: all 0.3s ease-in-out;\n}\n.dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner {\n position: absolute;\n bottom: 0;\n left: 0;\n height: 100%;\n transition: all 0.1s ease;\n will-change: width;\n}\n.dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner .dplayer-thumb {\n position: absolute;\n top: 0;\n right: 5px;\n margin-top: -4px;\n margin-right: -10px;\n height: 11px;\n width: 11px;\n border-radius: 50%;\n cursor: pointer;\n transition: all 0.3s ease-in-out;\n transform: scale(0);\n}\n.dplayer-controller .dplayer-icons .dplayer-subtitle-btn {\n display: inline-block;\n height: 100%;\n}\n.dplayer-controller .dplayer-icons .dplayer-subtitles {\n display: inline-block;\n height: 100%;\n}\n.dplayer-controller .dplayer-icons .dplayer-subtitles .dplayer-subtitles-box {\n position: absolute;\n right: 0;\n bottom: 50px;\n transform: scale(0);\n width: -moz-fit-content;\n width: fit-content;\n max-width: 240px;\n min-width: 120px;\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.9);\n padding: 7px 0;\n transition: all 0.3s ease-in-out;\n overflow: auto;\n z-index: 2;\n}\n.dplayer-controller .dplayer-icons .dplayer-subtitles .dplayer-subtitles-box.dplayer-subtitles-panel {\n display: block;\n}\n.dplayer-controller .dplayer-icons .dplayer-subtitles .dplayer-subtitles-box.dplayer-subtitles-box-open {\n transform: scale(1);\n}\n.dplayer-controller .dplayer-icons .dplayer-subtitles .dplayer-subtitles-item {\n height: 30px;\n padding: 5px 10px;\n box-sizing: border-box;\n cursor: pointer;\n position: relative;\n}\n.dplayer-controller .dplayer-icons .dplayer-subtitles .dplayer-subtitles-item:hover {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dplayer-controller .dplayer-icons .dplayer-setting {\n display: inline-block;\n height: 100%;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box {\n position: absolute;\n right: 0;\n bottom: 50px;\n transform: scale(0);\n width: 150px;\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.9);\n padding: 7px 0;\n transition: all 0.3s ease-in-out;\n overflow: hidden;\n z-index: 2;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box > div {\n display: none;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box > div.dplayer-setting-origin-panel {\n display: block;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-open {\n transform: scale(1);\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-narrow {\n width: 70px;\n text-align: center;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-speed .dplayer-setting-origin-panel {\n display: none;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-speed .dplayer-setting-speed-panel {\n display: block;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-item,\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-speed-item {\n height: 30px;\n padding: 5px 10px;\n box-sizing: border-box;\n cursor: pointer;\n position: relative;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-item:hover,\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-speed-item:hover {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku {\n padding: 5px 0;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-label {\n padding: 0 10px;\n display: inline;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku:hover .dplayer-label {\n display: none;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku:hover .dplayer-danmaku-bar-wrap {\n display: inline-block;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku.dplayer-setting-danmaku-active .dplayer-label {\n display: none;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku.dplayer-setting-danmaku-active .dplayer-danmaku-bar-wrap {\n display: inline-block;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap {\n padding: 0 10px;\n box-sizing: border-box;\n display: none;\n vertical-align: middle;\n height: 100%;\n width: 100%;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar {\n position: relative;\n top: 8.5px;\n width: 100%;\n height: 3px;\n background: #fff;\n transition: all 0.3s ease-in-out;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar .dplayer-danmaku-bar-inner {\n position: absolute;\n bottom: 0;\n left: 0;\n height: 100%;\n transition: all 0.1s ease;\n background: #aaa;\n will-change: width;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar .dplayer-danmaku-bar-inner .dplayer-thumb {\n position: absolute;\n top: 0;\n right: 5px;\n margin-top: -4px;\n margin-right: -10px;\n height: 11px;\n width: 11px;\n border-radius: 50%;\n cursor: pointer;\n transition: all 0.3s ease-in-out;\n background: #aaa;\n}\n.dplayer-controller .dplayer-icons .dplayer-full {\n display: inline-block;\n height: 100%;\n position: relative;\n}\n.dplayer-controller .dplayer-icons .dplayer-full:hover .dplayer-full-in-icon {\n display: block;\n}\n.dplayer-controller .dplayer-icons .dplayer-full .dplayer-full-in-icon {\n position: absolute;\n top: -30px;\n z-index: 1;\n display: none;\n}\n.dplayer-controller .dplayer-icons .dplayer-quality {\n position: relative;\n display: inline-block;\n height: 100%;\n z-index: 2;\n}\n.dplayer-controller .dplayer-icons .dplayer-quality:hover .dplayer-quality-list {\n display: block;\n}\n.dplayer-controller .dplayer-icons .dplayer-quality:hover .dplayer-quality-mask {\n display: block;\n}\n.dplayer-controller .dplayer-icons .dplayer-quality .dplayer-quality-mask {\n display: none;\n position: absolute;\n bottom: 38px;\n left: -18px;\n width: 80px;\n padding-bottom: 12px;\n}\n.dplayer-controller .dplayer-icons .dplayer-quality .dplayer-quality-list {\n display: none;\n font-size: 12px;\n width: 80px;\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.9);\n padding: 5px 0;\n transition: all 0.3s ease-in-out;\n overflow: hidden;\n color: #fff;\n text-align: center;\n}\n.dplayer-controller .dplayer-icons .dplayer-quality .dplayer-quality-item {\n height: 25px;\n box-sizing: border-box;\n cursor: pointer;\n line-height: 25px;\n}\n.dplayer-controller .dplayer-icons .dplayer-quality .dplayer-quality-item:hover {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dplayer-controller .dplayer-icons .dplayer-comment {\n display: inline-block;\n height: 100%;\n}\n.dplayer-controller .dplayer-icons .dplayer-label {\n color: #eee;\n font-size: 13px;\n display: inline-block;\n vertical-align: middle;\n white-space: nowrap;\n}\n.dplayer-controller .dplayer-icons .dplayer-toggle {\n width: 32px;\n height: 20px;\n text-align: center;\n font-size: 0;\n vertical-align: middle;\n position: absolute;\n top: 5px;\n right: 10px;\n}\n.dplayer-controller .dplayer-icons .dplayer-toggle input {\n max-height: 0;\n max-width: 0;\n display: none;\n}\n.dplayer-controller .dplayer-icons .dplayer-toggle input + label {\n display: inline-block;\n position: relative;\n box-shadow: #dfdfdf 0 0 0 0 inset;\n border: 1px solid #dfdfdf;\n height: 20px;\n width: 32px;\n border-radius: 10px;\n box-sizing: border-box;\n cursor: pointer;\n transition: 0.2s ease-in-out;\n}\n.dplayer-controller .dplayer-icons .dplayer-toggle input + label:before {\n content: \"\";\n position: absolute;\n display: block;\n height: 18px;\n width: 18px;\n top: 0;\n left: 0;\n border-radius: 15px;\n transition: 0.2s ease-in-out;\n}\n.dplayer-controller .dplayer-icons .dplayer-toggle input + label:after {\n content: \"\";\n position: absolute;\n display: block;\n left: 0;\n top: 0;\n border-radius: 15px;\n background: #fff;\n transition: 0.2s ease-in-out;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);\n height: 18px;\n width: 18px;\n}\n.dplayer-controller .dplayer-icons .dplayer-toggle input:checked + label {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dplayer-controller .dplayer-icons .dplayer-toggle input:checked + label:before {\n width: 30px;\n background: rgba(255, 255, 255, 0.5);\n}\n.dplayer-controller .dplayer-icons .dplayer-toggle input:checked + label:after {\n left: 12px;\n}\n.dplayer-mobile-play {\n display: none;\n width: 50px;\n height: 50px;\n border: none;\n background-color: transparent;\n outline: none;\n cursor: pointer;\n box-sizing: border-box;\n bottom: 0;\n opacity: 0.8;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n}\n.dplayer-danmaku {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n font-size: 22px;\n color: #fff;\n}\n.dplayer-danmaku .dplayer-danmaku-item {\n display: inline-block;\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n cursor: default;\n white-space: nowrap;\n text-shadow: 0.5px 0.5px 0.5px rgba(0, 0, 0, 0.5);\n}\n.dplayer-danmaku .dplayer-danmaku-item--demo {\n position: absolute;\n visibility: hidden;\n}\n.dplayer-danmaku .dplayer-danmaku-right {\n position: absolute;\n right: 0;\n transform: translateX(100%);\n}\n.dplayer-danmaku .dplayer-danmaku-right.dplayer-danmaku-move {\n will-change: transform;\n animation-name: 'danmaku';\n animation-timing-function: linear;\n animation-play-state: paused;\n}\n@keyframes danmaku {\n from {\n transform: translateX(100%);\n }\n}\n.dplayer-danmaku .dplayer-danmaku-top,\n.dplayer-danmaku .dplayer-danmaku-bottom {\n position: absolute;\n width: 100%;\n text-align: center;\n visibility: hidden;\n}\n.dplayer-danmaku .dplayer-danmaku-top.dplayer-danmaku-move,\n.dplayer-danmaku .dplayer-danmaku-bottom.dplayer-danmaku-move {\n will-change: visibility;\n animation-name: 'danmaku-center';\n animation-timing-function: linear;\n animation-play-state: paused;\n}\n@keyframes danmaku-center {\n from {\n visibility: visible;\n }\n to {\n visibility: visible;\n }\n}\n.dplayer-logo {\n pointer-events: none;\n position: absolute;\n left: 20px;\n top: 20px;\n max-width: 50px;\n max-height: 50px;\n}\n.dplayer-logo img {\n max-width: 100%;\n max-height: 100%;\n background: none;\n}\n.dplayer-menu {\n position: absolute;\n width: 170px;\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.85);\n padding: 5px 0;\n overflow: hidden;\n z-index: 3;\n display: none;\n}\n.dplayer-menu.dplayer-menu-show {\n display: block;\n}\n.dplayer-menu .dplayer-menu-item {\n height: 30px;\n box-sizing: border-box;\n cursor: pointer;\n}\n.dplayer-menu .dplayer-menu-item:hover {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dplayer-menu .dplayer-menu-item a {\n padding: 0 10px;\n line-height: 30px;\n color: #eee;\n font-size: 13px;\n display: inline-block;\n vertical-align: middle;\n width: 100%;\n box-sizing: border-box;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.dplayer-menu .dplayer-menu-item a:hover {\n text-decoration: none;\n}\n.dplayer-notice-list {\n position: absolute;\n bottom: 60px;\n left: 20px;\n}\n.dplayer-notice-list .dplayer-notice {\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.9);\n transition: all 0.3s ease-in-out;\n overflow: hidden;\n color: #fff;\n display: table;\n pointer-events: none;\n animation: showNotice 0.3s ease 1 forwards;\n}\n.dplayer-notice-list .remove-notice {\n animation: removeNotice 0.3s ease 1 forwards;\n}\n@keyframes showNotice {\n from {\n padding: 0;\n font-size: 0;\n margin-top: 0;\n }\n to {\n padding: 7px 20px;\n font-size: 14px;\n margin-top: 5px;\n }\n}\n@keyframes removeNotice {\n 0% {\n padding: 7px 20px;\n font-size: 14px;\n margin-top: 5px;\n }\n 20% {\n font-size: 12px;\n }\n 21% {\n font-size: 0;\n padding: 7px 10px;\n }\n 100% {\n padding: 0;\n margin-top: 0;\n font-size: 0;\n }\n}\n.dplayer-subtitle {\n position: absolute;\n bottom: 40px;\n width: 90%;\n left: 5%;\n text-align: center;\n color: #fff;\n text-shadow: 0.5px 0.5px 0.5px rgba(0, 0, 0, 0.5);\n font-size: 20px;\n}\n.dplayer-subtitle.dplayer-subtitle-hide {\n display: none;\n}\n.dplayer-mask {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1;\n display: none;\n}\n.dplayer-mask.dplayer-mask-show {\n display: block;\n}\n.dplayer-video-wrap {\n position: relative;\n background: #000;\n font-size: 0;\n width: 100%;\n height: 100%;\n}\n.dplayer-video-wrap .dplayer-video {\n width: 100%;\n height: 100%;\n display: none;\n}\n.dplayer-video-wrap .dplayer-video-current {\n display: block;\n}\n.dplayer-video-wrap .dplayer-video-prepare {\n display: none;\n}\n.dplayer-info-panel {\n position: absolute;\n top: 10px;\n left: 10px;\n width: 400px;\n background: rgba(28, 28, 28, 0.8);\n padding: 10px;\n color: #fff;\n font-size: 12px;\n border-radius: 2px;\n}\n.dplayer-info-panel-hide {\n display: none;\n}\n.dplayer-info-panel .dplayer-info-panel-close {\n cursor: pointer;\n position: absolute;\n right: 10px;\n top: 10px;\n}\n.dplayer-info-panel .dplayer-info-panel-item > span {\n display: inline-block;\n vertical-align: middle;\n line-height: 15px;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.dplayer-info-panel .dplayer-info-panel-item-title {\n width: 100px;\n text-align: right;\n margin-right: 10px;\n}\n.dplayer-info-panel .dplayer-info-panel-item-data {\n width: 260px;\n}\n","",{version:3,sources:["webpack://./src/css/global.less","webpack://./src/css/index.less","webpack://./src/css/player.less","webpack://./src/css/balloon.less","webpack://./src/css/bezel.less","webpack://./src/css/notice.less","webpack://./src/css/controller.less","webpack://./src/css/danmaku.less","webpack://./src/css/logo.less","webpack://./src/css/menu.less","webpack://./src/css/subtitle.less","webpack://./src/css/video.less","webpack://./src/css/info-panel.less"],names:[],mappings:"AAAA;EACI;IACI,6CAAA;ECEN;EDAE;IACI,+CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,+CAAA;ECEN;EDAE;IACI,6CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,+CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,6CAAA;ECEN;EDAE;IACI,6CAAA;ECEN;EDAE;IACI,6CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,6CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,6CAAA;ECEN;EDAE;IACI,6CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,6CAAA;ECEN;EDAE;IACI,6CAAA;ECEN;EDAE;IACI,6CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,+CAAA;ECEN;EDAE;IACI,6CAAA;ECEN;EDAE;IACI,6CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,6CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,6CAAA;ECEN;EDAE;IACI,+CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,6CAAA;ECEN;EDAE;IACI,8CAAA;ECEN;EDAE;IACI,+CAAA;ECEN;EDAE;;IAEI,uCAAA;ECEN;AACF;ACzJA;EACI,kBAAA;EACA,gBAAA;EACA,yBAAA;KAAA,sBAAA;UAAA,iBAAA;EACA,cAAA;AD2JJ;AC/JA;EAOQ,uBAAA;AD2JR;AClKA;EAWQ,WAAA;EACA,YAAA;AD0JR;ACtKA;;EAgBY,UAAA;AD0JZ;ACtJI;EACI,WAAA;EACA,YAAA;EACA,gBAAA;EACA,eAAA;EACA,eAAA;EACA,OAAA;EACA,MAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;ADwJR;ACpJI;;;EAKY,aAAA;ADoJhB;ACzJI;EAUQ,aAAA;ADkJZ;AC5JI;EAcQ,aAAA;ADiJZ;AC7II;EAEQ,aAAA;AD8IZ;AChJI;EAKQ,aAAA;AD8IZ;ACnJI;EAQQ,aAAA;AD8IZ;ACtJI;EAWQ,aAAA;AD8IZ;AC3IQ;EAEQ,aAAA;AD4IhB;ACvII;EAEQ,eAAA;ADwIZ;AC1II;EAKQ,cAAA;ADwIZ;ACpII;EAEQ,6BAAA;ADqIZ;AClIQ;EAAA;IAEQ,UAAA;EDoId;ECtIM;IAKQ,UAAA;EDoId;ECjIU;IAEQ,UAAA;EDkIlB;ECpIU;IAKQ,UAAA;EDkIlB;AACF;AC7HI;EAEQ,cAAA;AD8HZ;AC1HI;;;;EAIQ,4BAAA;AD4HZ;ACxHI;EACI,YAAA;AD0HR;AC3HI;EAIQ,UAAA;EACA,2BAAA;AD0HZ;AC/HI;EAQQ,UAAA;EACA,2BAAA;AD0HZ;ACvHI;EAEQ,UAAA;ADwHZ;AC1HI;EAKQ,UAAA;ADwHZ;ACrHI;EAKI,sBAAA;EACA,uBAAA;ADuHR;AC7HI;EACI,eAAA;EACA,eAAA;EACA,OAAA;EACA,MAAA;ADyHR;ACrHI;;;;;EAOY,aAAA;ADqHhB;AC5HI;EAUY,gBAAA;EACA,qBAAA;ADqHhB;AChII;EAgBQ,aAAA;ADmHZ;AChHQ;EAEQ,aAAA;ADiHhB;ACtII;EA0BQ,cAAA;AD+GZ;ACzGA;EACI,eAAA;EACA,MAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;AD2GJ;AElSA;EACI,aAAA;AFoSJ;AEjSA;EACI,oBAAA;EACA,iCAAA;AFmSJ;AEhSA;EACI,gBAAA;AFkSJ;AG9SA;EACI,kBAAA;EACA,OAAA;EACA,QAAA;EACA,MAAA;EACA,SAAA;EACA,eAAA;EACA,WAAA;EACA,oBAAA;AHgTJ;AGxTA;EAUQ,kBAAA;EACA,QAAA;EACA,SAAA;EACA,uBAAA;EACA,YAAA;EACA,WAAA;EACA,aAAA;EACA,sBAAA;EACA,8BAAA;EACA,kBAAA;EACA,UAAA;EACA,oBAAA;AHiTR;AGhTQ;EACI,iCAAA;AHkTZ;AGhTQ;EACI;IACI,UAAA;IACA,mBAAA;EHkTd;EGhTU;IACI,UAAA;IACA,mBAAA;EHkTd;AACF;AGnVA;EAqCQ,kBAAA;EACA,QAAA;EACA,gBAAA;EACA,WAAA;EACA,kBAAA;EACA,eAAA;EACA,iBAAA;EACA,0CAAA;AHiTR;AG7VA;EA+CQ,aAAA;EACA,kBAAA;EACA,QAAA;EACA,SAAA;EACA,uBAAA;EACA,YAAA;EACA,WAAA;EACA,oBAAA;AHiTR;AGvWA;EAwDY,aAAA;AHkTZ;AG1WA;EA2DY,uDAAA;EACA,UAAA;EACA,yBAAA;AHkTZ;AI/WC;EDgEmB,qBAAA;AHkTpB;AIlXC;EDgEmB,qBAAA;AHqTpB;AIrXC;EDgEmB,qBAAA;AHwTpB;AIxXC;EDgEmB,qBAAA;AH2TpB;AI3XC;EDgEmB,qBAAA;AH8TpB;AI9XC;EDgEmB,qBAAA;AHiUpB;AIjYC;EDgEmB,qBAAA;AHoUpB;AGhUQ;EACI;IACI,YAAA;IACA,0BAAA;EHkUd;EGhUU;IACI,aAAA;IACA,0BAAA;EHkUd;EGhUU;IACI,aAAA;IACA,4BAAA;EHkUd;AACF;AKlZA;EACI,mEAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,SAAA;EACA,yBAAA;ALoZJ;AKjZA;EACI,kBAAA;EACA,SAAA;EACA,OAAA;EACA,QAAA;EACA,YAAA;EACA,eAAA;EACA,yBAAA;KAAA,sBAAA;UAAA,iBAAA;EACA,yBAAA;ALmZJ;AKlZI;EAEQ,aAAA;ALmZZ;AKrZI;EAKQ,cAAA;ALmZZ;AKjaA;EAkBQ,cAAA;EACA,eAAA;EACA,kBAAA;EACA,YAAA;EACA,wBAAA;EACA,WAAA;ALkZR;AKjZQ;EAEQ,mBAAA;ALkZhB;AKpZQ;EAKQ,cAAA;EACA,UAAA;EACA,2BAAA;EACA,QAAA;EACA,WAAA;ALkZhB;AKnbA;EAqCY,WAAA;EACA,kBAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,2BAAA;EACA,gCAAA;ALiZZ;AKhZY;EAEQ,cAAA;ALiZpB;AK/YgB;EACI,UAAA;ALiZpB;AK/YgB;EACI,UAAA;ALiZpB;AKxcA;EA2DgB,aAAA;EACA,kBAAA;EACA,SAAA;EACA,UAAA;EACA,gBAAA;EACA,qCAAA;EACA,WAAA;EACA,kBAAA;EACA,eAAA;EACA,mBAAA;EACA,2BAAA;ALgZhB;AKrdA;EAyEY,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,aAAA;EACA,6BAAA;AL+YZ;AK5dA;EAgFY,kBAAA;EACA,WAAA;EACA,YAAA;EACA,UAAA;EACA,oBAAA;AL+YZ;AKneA;EA0FY,kBAAA;EACA,SAAA;EACA,UAAA;EACA,kBAAA;EACA,gBAAA;EACA,qCAAA;EACA,WAAA;EACA,eAAA;EACA,kBAAA;EACA,UAAA;EACA,oCAAA;EACA,iBAAA;EACA,kBAAA;EACA,UAAA;EACA,oBAAA;AL4YZ;AK7ZY;EACI,UAAA;AL+ZhB;AKvfA;EA2GY,kBAAA;EACA,WAAA;EACA,WAAA;EACA,oCAAA;EACA,eAAA;AL+YZ;AK9fA;EAiHgB,kBAAA;EACA,OAAA;EACA,MAAA;EACA,SAAA;EACA,oCAAA;EACA,WAAA;EACA,yBAAA;EACA,kBAAA;ALgZhB;AKxgBA;EA2HgB,kBAAA;EACA,OAAA;EACA,MAAA;EACA,SAAA;EACA,WAAA;EACA,kBAAA;ALgZhB;AKhhBA;EAkIoB,kBAAA;EACA,MAAA;EACA,UAAA;EACA,gBAAA;EACA,mBAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,eAAA;EACA,gCAAA;EACA,mBAAA;ALiZpB;AK7hBA;EAkJQ,YAAA;EACA,kBAAA;EACA,SAAA;AL8YR;AK7YQ;EACI,aAAA;EACA,kBAAA;EACA,gCAAA;EACA,UAAA;EACA,YAAA;EACA,SAAA;EACA,UAAA;EACA,WAAA;EACA,WAAA;AL+YZ;AKxZQ;EAWQ,YAAA;ALgZhB;AK3ZQ;EAcQ,kBAAA;EACA,OAAA;EACA,MAAA;ALgZhB;AKhaQ;EAmBQ,kBAAA;EACA,QAAA;EACA,MAAA;ALgZhB;AKraQ;EAwBQ,kBAAA;EACA,iCAAA;EACA,YAAA;EACA,OAAA;EACA,uCAAA;EACA,kBAAA;EACA,uBAAA;EACA,eAAA;EACA,YAAA;EACA,gCAAA;EACA,mBAAA;ALgZhB;AK/YgB;EACI,mBAAA;ALiZpB;AKrbQ;EAuCY,aAAA;ALiZpB;AKxbQ;EA0CY,eAAA;ALiZpB;AK3bQ;EA6CY,eAAA;EACA,WAAA;EACA,iBAAA;ALiZpB;AKhcQ;EAkDY,YAAA;ALiZpB;AKncQ;EAoDgB,kBAAA;ALkZxB;AK/YwB;EAEQ,0BAAA;ALgZhC;AK7YwB;EAEQ,0BAAA;AL8YhC;AK5cQ;EAmEgB,UAAA;EACA,gBAAA;EACA,iBAAA;EACA,qBAAA;EACA,eAAA;EACA,WAAA;EACA,sBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,eAAA;AL4YxB;AKzdQ;EAgFgB,mBAAA;EACA,cAAA;AL4YxB;AK7dQ;EAqFY,YAAA;AL2YpB;AKheQ;EAuFgB,YAAA;EACA,YAAA;EACA,qBAAA;AL4YxB;AKreQ;EA4FgB,WAAA;EACA,YAAA;EACA,qBAAA;EACA,kBAAA;EACA,sBAAA;EACA,eAAA;AL4YxB;AK3YwB;EACI,0CAAA;AL6Y5B;AKhfQ;EAyGQ,aAAA;EACA,YAAA;EACA,iBAAA;EACA,eAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;EACA,SAAA;EACA,YAAA;EACA,sBAAA;EACA,WAAA;EACA,WAAA;AL0YhB;AKzYgB;EACI,WAAA;EACA,YAAA;AL2YpB;AK7YgB;EACI,WAAA;EACA,YAAA;AL2YpB;AKzYgB;EACI,aAAA;AL2YpB;AKvYQ;EAEQ,YAAA;ALwYhB;AKrYQ;EACI,WAAA;ALuYZ;AKxYQ;EAGQ,YAAA;ALwYhB;AKpqBA;;EAiSY,iBAAA;EACA,WAAA;EACA,uCAAA;EACA,sBAAA;EACA,eAAA;EACA,eAAA;ALuYZ;AK7qBA;EAySY,qBAAA;EACA,UAAA;EACA,WAAA;EACA,kBAAA;EACA,iBAAA;EACA,WAAA;EACA,kBAAA;ALuYZ;AKtrBA;EAkTY,WAAA;EACA,YAAA;EACA,YAAA;EACA,6BAAA;EACA,aAAA;EACA,eAAA;EACA,sBAAA;EACA,sBAAA;EACA,qBAAA;ALuYZ;AKjsBA;EA4TgB,gCAAA;EACA,YAAA;ALwYhB;AKtYY;EAEQ,UAAA;ALuYpB;AKpYY;EACI,WAAA;EACA,WAAA;EACA,iBAAA;EACA,eAAA;ALsYhB;AKpYY;EACI,qBAAA;ALsYhB;AKpYY;EACI,kBAAA;ALsYhB;AKpYY;EACI,WAAA;ALsYhB;AKvtBA;EAqVY,kBAAA;EACA,qBAAA;EACA,eAAA;EACA,YAAA;ALqYZ;AKpYY;EAEQ,WAAA;ALqYpB;AKvYY;EAKQ,mBAAA;ALqYpB;AKlYY;EAEQ,WAAA;ALmYpB;AKrYY;EAKQ,mBAAA;ALmYpB;AKzuBA;EA0WgB,qBAAA;EACA,qBAAA;EACA,sBAAA;EACA,YAAA;ALkYhB;AK/uBA;EA+WoB,kBAAA;EACA,SAAA;EACA,QAAA;EACA,WAAA;EACA,gBAAA;EACA,gCAAA;ALmYpB;AKvvBA;EAsXwB,kBAAA;EACA,SAAA;EACA,OAAA;EACA,YAAA;EACA,yBAAA;EACA,kBAAA;ALoYxB;AK/vBA;EA6X4B,kBAAA;EACA,MAAA;EACA,UAAA;EACA,gBAAA;EACA,mBAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,eAAA;EACA,gCAAA;EACA,mBAAA;ALqY5B;AK5wBA;EA8YY,qBAAA;EACA,YAAA;ALiYZ;AKhxBA;EAkZY,qBAAA;EACA,YAAA;ALiYZ;AKpxBA;EAqZgB,kBAAA;EACA,QAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EAAA,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,iCAAA;EACA,cAAA;EACA,gCAAA;EACA,cAAA;EACA,UAAA;ALkYhB;AKjYgB;EACI,cAAA;ALmYpB;AKjYgB;EACI,mBAAA;ALmYpB;AKzyBA;EA0agB,YAAA;EACA,iBAAA;EACA,sBAAA;EACA,eAAA;EACA,kBAAA;ALkYhB;AKjYgB;EACI,0CAAA;ALmYpB;AKnzBA;EAqbY,qBAAA;EACA,YAAA;ALiYZ;AKvzBA;EAwbgB,kBAAA;EACA,QAAA;EACA,YAAA;EACA,mBAAA;EACA,YAAA;EACA,kBAAA;EACA,iCAAA;EACA,cAAA;EACA,gCAAA;EACA,gBAAA;EACA,UAAA;ALkYhB;AKjYgB;EACI,aAAA;ALmYpB;AKlYoB;EACI,cAAA;ALoYxB;AKjYgB;EACI,mBAAA;ALmYpB;AKjYgB;EACI,WAAA;EACA,kBAAA;ALmYpB;AKjYgB;EAEQ,aAAA;ALkYxB;AKpYgB;EAKQ,cAAA;ALkYxB;AKv1BA;;EA2dgB,YAAA;EACA,iBAAA;EACA,sBAAA;EACA,eAAA;EACA,kBAAA;ALgYhB;AK/XgB;;EACI,0CAAA;ALkYpB;AKn2BA;EAqegB,cAAA;ALiYhB;AKt2BA;EAueoB,eAAA;EACA,eAAA;ALkYpB;AKhYgB;EAEQ,aAAA;ALiYxB;AKnYgB;EAKQ,qBAAA;ALiYxB;AK9XgB;EAEQ,aAAA;AL+XxB;AKjYgB;EAKQ,qBAAA;AL+XxB;AKt3BA;EA2foB,eAAA;EACA,sBAAA;EACA,aAAA;EACA,sBAAA;EACA,YAAA;EACA,WAAA;AL8XpB;AK93BA;EAkgBwB,kBAAA;EACA,UAAA;EACA,WAAA;EACA,WAAA;EACA,gBAAA;EACA,gCAAA;AL+XxB;AKt4BA;EAygB4B,kBAAA;EACA,SAAA;EACA,OAAA;EACA,YAAA;EACA,yBAAA;EACA,gBAAA;EACA,kBAAA;ALgY5B;AK/4BA;EAihBgC,kBAAA;EACA,MAAA;EACA,UAAA;EACA,gBAAA;EACA,mBAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,eAAA;EACA,gCAAA;EACA,gBAAA;ALiYhC;AK55BA;EAmiBY,qBAAA;EACA,YAAA;EACA,kBAAA;AL4XZ;AK3XY;EAEQ,cAAA;AL4XpB;AKp6BA;EA4iBgB,kBAAA;EACA,UAAA;EACA,UAAA;EACA,aAAA;AL2XhB;AK16BA;EAmjBY,kBAAA;EACA,qBAAA;EACA,YAAA;EACA,UAAA;AL0XZ;AKzXY;EAEQ,cAAA;AL0XpB;AK5XY;EAKQ,cAAA;AL0XpB;AKt7BA;EAgkBgB,aAAA;EACA,kBAAA;EACA,YAAA;EACA,WAAA;EACA,WAAA;EACA,oBAAA;ALyXhB;AK97BA;EAwkBgB,aAAA;EACA,eAAA;EACA,WAAA;EACA,kBAAA;EACA,iCAAA;EACA,cAAA;EACA,gCAAA;EACA,gBAAA;EACA,WAAA;EACA,kBAAA;ALyXhB;AK18BA;EAolBgB,YAAA;EACA,sBAAA;EACA,eAAA;EACA,iBAAA;ALyXhB;AKxXgB;EACI,0CAAA;AL0XpB;AKn9BA;EA8lBY,qBAAA;EACA,YAAA;ALwXZ;AKv9BA;EAkmBY,WAAA;EACA,eAAA;EACA,qBAAA;EACA,sBAAA;EACA,mBAAA;ALwXZ;AK99BA;EAymBY,WAAA;EACA,YAAA;EACA,kBAAA;EACA,YAAA;EACA,sBAAA;EACA,kBAAA;EACA,QAAA;EACA,WAAA;ALwXZ;AKx+BA;EAknBgB,aAAA;EACA,YAAA;EACA,aAAA;ALyXhB;AK7+BA;EAunBgB,qBAAA;EACA,kBAAA;EACA,iCAAA;EACA,yBAAA;EACA,YAAA;EACA,WAAA;EACA,mBAAA;EACA,sBAAA;EACA,eAAA;EACA,4BAAA;ALyXhB;AKz/BA;EAmoBgB,WAAA;EACA,kBAAA;EACA,cAAA;EACA,YAAA;EACA,WAAA;EACA,MAAA;EACA,OAAA;EACA,mBAAA;EACA,4BAAA;ALyXhB;AKpgCA;EA8oBgB,WAAA;EACA,kBAAA;EACA,cAAA;EACA,OAAA;EACA,MAAA;EACA,mBAAA;EACA,gBAAA;EACA,4BAAA;EACA,wCAAA;EACA,YAAA;EACA,WAAA;ALyXhB;AKjhCA;EA2pBgB,sCAAA;ALyXhB;AKphCA;EA8pBgB,WAAA;EACA,oCAAA;ALyXhB;AKxhCA;EAkqBgB,UAAA;ALyXhB;AKnXA;EACI,aAAA;EACA,WAAA;EACA,YAAA;EACA,YAAA;EACA,6BAAA;EACA,aAAA;EACA,eAAA;EACA,sBAAA;EAEA,SAAA;EACA,YAAA;EACA,kBAAA;EACA,SAAA;EACA,QAAA;EACA,gCAAA;ALoXJ;AMpjCA;EACI,kBAAA;EACA,OAAA;EACA,QAAA;EACA,MAAA;EACA,SAAA;EACA,eAAA;EACA,WAAA;ANsjCJ;AM7jCA;EASQ,qBAAA;EACA,oBAAA;EACA,yBAAA;KAAA,sBAAA;UAAA,iBAAA;EACA,eAAA;EACA,mBAAA;EACA,iDAAA;ANujCR;AMtjCQ;EACI,kBAAA;EACA,kBAAA;ANwjCZ;AMzkCA;EAqBQ,kBAAA;EACA,QAAA;EACA,2BAAA;ANujCR;AMtjCQ;EACI,sBAAA;EACA,yBAAA;EACA,iCAAA;EACA,4BAAA;ANwjCZ;AMrjCI;EACI;IACI,2BAAA;ENujCV;AACF;AMzlCA;;EAsCQ,kBAAA;EACA,WAAA;EACA,kBAAA;EACA,kBAAA;ANujCR;AMtjCQ;;EACI,uBAAA;EACA,gCAAA;EACA,iCAAA;EACA,4BAAA;ANyjCZ;AMtjCI;EACI;IACI,mBAAA;ENwjCV;EMtjCM;IACI,mBAAA;ENwjCV;AACF;AO/mCA;EACI,oBAAA;EACA,kBAAA;EACA,UAAA;EACA,SAAA;EACA,eAAA;EACA,gBAAA;APinCJ;AOvnCA;EAQQ,eAAA;EACA,gBAAA;EACA,gBAAA;APknCR;AQ5nCA;EACI,kBAAA;EACA,YAAA;EACA,kBAAA;EACA,kCAAA;EACA,cAAA;EACA,gBAAA;EACA,UAAA;EACA,aAAA;AR8nCJ;AQ7nCI;EACI,cAAA;AR+nCR;AQzoCA;EAaQ,YAAA;EACA,sBAAA;EACA,eAAA;AR+nCR;AQ9nCQ;EACI,0CAAA;ARgoCZ;AQjpCA;EAqBY,eAAA;EACA,iBAAA;EACA,WAAA;EACA,eAAA;EACA,qBAAA;EACA,sBAAA;EACA,WAAA;EACA,sBAAA;EACA,mBAAA;EACA,uBAAA;EACA,gBAAA;AR+nCZ;AQ9nCY;EACI,qBAAA;ARgoChB;AIjqCA;EACI,kBAAA;EACA,YAAA;EACA,UAAA;AJmqCJ;AItqCA;EAMQ,kBAAA;EACA,iCAAA;EACA,gCAAA;EACA,gBAAA;EACA,WAAA;EACA,cAAA;EACA,oBAAA;EACA,0CAAA;AJmqCR;AIhrCA;EAiBQ,4CAAA;AJkqCR;AI9pCA;EACI;IACI,UAAA;IACA,YAAA;IACA,aAAA;EJgqCN;EI9pCE;IACI,iBAAA;IACA,eAAA;IACA,eAAA;EJgqCN;AACF;AI7pCA;EACI;IACI,iBAAA;IACA,eAAA;IACA,eAAA;EJ+pCN;EI7pCE;IACI,eAAA;EJ+pCN;EI7pCE;IACI,YAAA;IACA,iBAAA;EJ+pCN;EI7pCE;IACI,UAAA;IACA,aAAA;IACA,YAAA;EJ+pCN;AACF;ASltCA;EACI,kBAAA;EACA,YAAA;EACA,UAAA;EACA,QAAA;EACA,kBAAA;EACA,WAAA;EACA,iDAAA;EACA,eAAA;ATotCJ;ASntCI;EACI,aAAA;ATqtCR;AU/tCA;EACI,kBAAA;EACA,MAAA;EACA,SAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,aAAA;AViuCJ;AUhuCI;EACI,cAAA;AVkuCR;AU9tCA;EACI,kBAAA;EACA,gBAAA;EACA,YAAA;EACA,WAAA;EACA,YAAA;AVguCJ;AUruCA;EAOQ,WAAA;EACA,YAAA;EACA,aAAA;AViuCR;AU1uCA;EAYQ,cAAA;AViuCR;AU7uCA;EAeQ,aAAA;AViuCR;AW7vCA;EACI,kBAAA;EACA,SAAA;EACA,UAAA;EACA,YAAA;EACA,iCAAA;EACA,aAAA;EACA,WAAA;EACA,eAAA;EACA,kBAAA;AX+vCJ;AW7vCI;EACI,aAAA;AX+vCR;AW3wCA;EAgBQ,eAAA;EACA,kBAAA;EACA,WAAA;EACA,SAAA;AX8vCR;AW1vCQ;EACI,qBAAA;EACA,sBAAA;EACA,iBAAA;EACA,mBAAA;EACA,uBAAA;EACA,gBAAA;AX4vCZ;AWzxCA;EAkCQ,YAAA;EACA,iBAAA;EACA,kBAAA;AX0vCR;AW9xCA;EAwCQ,YAAA;AXyvCR",sourcesContent:["@keyframes my-face {\n 2% {\n transform: translate(0, 1.5px) rotate(1.5deg);\n }\n 4% {\n transform: translate(0, -1.5px) rotate(-0.5deg);\n }\n 6% {\n transform: translate(0, 1.5px) rotate(-1.5deg);\n }\n 8% {\n transform: translate(0, -1.5px) rotate(-1.5deg);\n }\n 10% {\n transform: translate(0, 2.5px) rotate(1.5deg);\n }\n 12% {\n transform: translate(0, -0.5px) rotate(1.5deg);\n }\n 14% {\n transform: translate(0, -1.5px) rotate(1.5deg);\n }\n 16% {\n transform: translate(0, -0.5px) rotate(-1.5deg);\n }\n 18% {\n transform: translate(0, 0.5px) rotate(-1.5deg);\n }\n 20% {\n transform: translate(0, -1.5px) rotate(2.5deg);\n }\n 22% {\n transform: translate(0, 0.5px) rotate(-1.5deg);\n }\n 24% {\n transform: translate(0, 1.5px) rotate(1.5deg);\n }\n 26% {\n transform: translate(0, 0.5px) rotate(0.5deg);\n }\n 28% {\n transform: translate(0, 0.5px) rotate(1.5deg);\n }\n 30% {\n transform: translate(0, -0.5px) rotate(2.5deg);\n }\n 32% {\n transform: translate(0, 1.5px) rotate(-0.5deg);\n }\n 34% {\n transform: translate(0, 1.5px) rotate(-0.5deg);\n }\n 36% {\n transform: translate(0, -1.5px) rotate(2.5deg);\n }\n 38% {\n transform: translate(0, 1.5px) rotate(-1.5deg);\n }\n 40% {\n transform: translate(0, -0.5px) rotate(2.5deg);\n }\n 42% {\n transform: translate(0, 2.5px) rotate(-1.5deg);\n }\n 44% {\n transform: translate(0, 1.5px) rotate(0.5deg);\n }\n 46% {\n transform: translate(0, -1.5px) rotate(2.5deg);\n }\n 48% {\n transform: translate(0, -0.5px) rotate(0.5deg);\n }\n 50% {\n transform: translate(0, 0.5px) rotate(0.5deg);\n }\n 52% {\n transform: translate(0, 2.5px) rotate(2.5deg);\n }\n 54% {\n transform: translate(0, -1.5px) rotate(1.5deg);\n }\n 56% {\n transform: translate(0, 2.5px) rotate(2.5deg);\n }\n 58% {\n transform: translate(0, 0.5px) rotate(2.5deg);\n }\n 60% {\n transform: translate(0, 2.5px) rotate(2.5deg);\n }\n 62% {\n transform: translate(0, -0.5px) rotate(2.5deg);\n }\n 64% {\n transform: translate(0, -0.5px) rotate(1.5deg);\n }\n 66% {\n transform: translate(0, 1.5px) rotate(-0.5deg);\n }\n 68% {\n transform: translate(0, -1.5px) rotate(-0.5deg);\n }\n 70% {\n transform: translate(0, 1.5px) rotate(0.5deg);\n }\n 72% {\n transform: translate(0, 2.5px) rotate(1.5deg);\n }\n 74% {\n transform: translate(0, -0.5px) rotate(0.5deg);\n }\n 76% {\n transform: translate(0, -0.5px) rotate(2.5deg);\n }\n 78% {\n transform: translate(0, -0.5px) rotate(1.5deg);\n }\n 80% {\n transform: translate(0, 1.5px) rotate(1.5deg);\n }\n 82% {\n transform: translate(0, -0.5px) rotate(0.5deg);\n }\n 84% {\n transform: translate(0, 1.5px) rotate(2.5deg);\n }\n 86% {\n transform: translate(0, -1.5px) rotate(-1.5deg);\n }\n 88% {\n transform: translate(0, -0.5px) rotate(2.5deg);\n }\n 90% {\n transform: translate(0, 2.5px) rotate(-0.5deg);\n }\n 92% {\n transform: translate(0, 0.5px) rotate(-0.5deg);\n }\n 94% {\n transform: translate(0, 2.5px) rotate(0.5deg);\n }\n 96% {\n transform: translate(0, -0.5px) rotate(1.5deg);\n }\n 98% {\n transform: translate(0, -1.5px) rotate(-0.5deg);\n }\n 0%,\n 100% {\n transform: translate(0, 0) rotate(0deg);\n }\n}","@import '../../node_modules/balloon-css/balloon.css';\n@keyframes my-face {\n 2% {\n transform: translate(0, 1.5px) rotate(1.5deg);\n }\n 4% {\n transform: translate(0, -1.5px) rotate(-0.5deg);\n }\n 6% {\n transform: translate(0, 1.5px) rotate(-1.5deg);\n }\n 8% {\n transform: translate(0, -1.5px) rotate(-1.5deg);\n }\n 10% {\n transform: translate(0, 2.5px) rotate(1.5deg);\n }\n 12% {\n transform: translate(0, -0.5px) rotate(1.5deg);\n }\n 14% {\n transform: translate(0, -1.5px) rotate(1.5deg);\n }\n 16% {\n transform: translate(0, -0.5px) rotate(-1.5deg);\n }\n 18% {\n transform: translate(0, 0.5px) rotate(-1.5deg);\n }\n 20% {\n transform: translate(0, -1.5px) rotate(2.5deg);\n }\n 22% {\n transform: translate(0, 0.5px) rotate(-1.5deg);\n }\n 24% {\n transform: translate(0, 1.5px) rotate(1.5deg);\n }\n 26% {\n transform: translate(0, 0.5px) rotate(0.5deg);\n }\n 28% {\n transform: translate(0, 0.5px) rotate(1.5deg);\n }\n 30% {\n transform: translate(0, -0.5px) rotate(2.5deg);\n }\n 32% {\n transform: translate(0, 1.5px) rotate(-0.5deg);\n }\n 34% {\n transform: translate(0, 1.5px) rotate(-0.5deg);\n }\n 36% {\n transform: translate(0, -1.5px) rotate(2.5deg);\n }\n 38% {\n transform: translate(0, 1.5px) rotate(-1.5deg);\n }\n 40% {\n transform: translate(0, -0.5px) rotate(2.5deg);\n }\n 42% {\n transform: translate(0, 2.5px) rotate(-1.5deg);\n }\n 44% {\n transform: translate(0, 1.5px) rotate(0.5deg);\n }\n 46% {\n transform: translate(0, -1.5px) rotate(2.5deg);\n }\n 48% {\n transform: translate(0, -0.5px) rotate(0.5deg);\n }\n 50% {\n transform: translate(0, 0.5px) rotate(0.5deg);\n }\n 52% {\n transform: translate(0, 2.5px) rotate(2.5deg);\n }\n 54% {\n transform: translate(0, -1.5px) rotate(1.5deg);\n }\n 56% {\n transform: translate(0, 2.5px) rotate(2.5deg);\n }\n 58% {\n transform: translate(0, 0.5px) rotate(2.5deg);\n }\n 60% {\n transform: translate(0, 2.5px) rotate(2.5deg);\n }\n 62% {\n transform: translate(0, -0.5px) rotate(2.5deg);\n }\n 64% {\n transform: translate(0, -0.5px) rotate(1.5deg);\n }\n 66% {\n transform: translate(0, 1.5px) rotate(-0.5deg);\n }\n 68% {\n transform: translate(0, -1.5px) rotate(-0.5deg);\n }\n 70% {\n transform: translate(0, 1.5px) rotate(0.5deg);\n }\n 72% {\n transform: translate(0, 2.5px) rotate(1.5deg);\n }\n 74% {\n transform: translate(0, -0.5px) rotate(0.5deg);\n }\n 76% {\n transform: translate(0, -0.5px) rotate(2.5deg);\n }\n 78% {\n transform: translate(0, -0.5px) rotate(1.5deg);\n }\n 80% {\n transform: translate(0, 1.5px) rotate(1.5deg);\n }\n 82% {\n transform: translate(0, -0.5px) rotate(0.5deg);\n }\n 84% {\n transform: translate(0, 1.5px) rotate(2.5deg);\n }\n 86% {\n transform: translate(0, -1.5px) rotate(-1.5deg);\n }\n 88% {\n transform: translate(0, -0.5px) rotate(2.5deg);\n }\n 90% {\n transform: translate(0, 2.5px) rotate(-0.5deg);\n }\n 92% {\n transform: translate(0, 0.5px) rotate(-0.5deg);\n }\n 94% {\n transform: translate(0, 2.5px) rotate(0.5deg);\n }\n 96% {\n transform: translate(0, -0.5px) rotate(1.5deg);\n }\n 98% {\n transform: translate(0, -1.5px) rotate(-0.5deg);\n }\n 0%,\n 100% {\n transform: translate(0, 0) rotate(0deg);\n }\n}\n.dplayer {\n position: relative;\n overflow: hidden;\n user-select: none;\n line-height: 1;\n}\n.dplayer * {\n box-sizing: content-box;\n}\n.dplayer svg {\n width: 100%;\n height: 100%;\n}\n.dplayer svg path,\n.dplayer svg circle {\n fill: #fff;\n}\n.dplayer:-webkit-full-screen {\n width: 100%;\n height: 100%;\n background: #000;\n position: fixed;\n z-index: 100000;\n left: 0;\n top: 0;\n margin: 0;\n padding: 0;\n transform: translate(0, 0);\n}\n.dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box .dplayer-setting-showdan,\n.dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box .dplayer-setting-danmaku,\n.dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box .dplayer-setting-danunlimit {\n display: none;\n}\n.dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-comment {\n display: none;\n}\n.dplayer.dplayer-no-danmaku .dplayer-danmaku {\n display: none;\n}\n.dplayer.dplayer-live .dplayer-time {\n display: none;\n}\n.dplayer.dplayer-live .dplayer-bar-wrap {\n display: none;\n}\n.dplayer.dplayer-live .dplayer-setting-speed {\n display: none;\n}\n.dplayer.dplayer-live .dplayer-setting-loop {\n display: none;\n}\n.dplayer.dplayer-live.dplayer-no-danmaku .dplayer-setting {\n display: none;\n}\n.dplayer.dplayer-arrow .dplayer-danmaku {\n font-size: 18px;\n}\n.dplayer.dplayer-arrow .dplayer-icon {\n margin: 0 -3px;\n}\n.dplayer.dplayer-playing .dplayer-danmaku .dplayer-danmaku-move {\n animation-play-state: running;\n}\n@media (min-width: 900px) {\n .dplayer.dplayer-playing .dplayer-controller-mask {\n opacity: 0;\n }\n .dplayer.dplayer-playing .dplayer-controller {\n opacity: 0;\n }\n .dplayer.dplayer-playing:hover .dplayer-controller-mask {\n opacity: 1;\n }\n .dplayer.dplayer-playing:hover .dplayer-controller {\n opacity: 1;\n }\n}\n.dplayer.dplayer-loading .dplayer-bezel .diplayer-loading-icon {\n display: block;\n}\n.dplayer.dplayer-loading .dplayer-danmaku,\n.dplayer.dplayer-paused .dplayer-danmaku,\n.dplayer.dplayer-loading .dplayer-danmaku-move,\n.dplayer.dplayer-paused .dplayer-danmaku-move {\n animation-play-state: paused;\n}\n.dplayer.dplayer-hide-controller {\n cursor: none;\n}\n.dplayer.dplayer-hide-controller .dplayer-controller-mask {\n opacity: 0;\n transform: translateY(100%);\n}\n.dplayer.dplayer-hide-controller .dplayer-controller {\n opacity: 0;\n transform: translateY(100%);\n}\n.dplayer.dplayer-show-controller .dplayer-controller-mask {\n opacity: 1;\n}\n.dplayer.dplayer-show-controller .dplayer-controller {\n opacity: 1;\n}\n.dplayer.dplayer-fulled {\n position: fixed;\n z-index: 100000;\n left: 0;\n top: 0;\n width: 100% !important;\n height: 100% !important;\n}\n.dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-volume,\n.dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-camera-icon,\n.dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-airplay-icon,\n.dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-chromecast-icon,\n.dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-play-icon {\n display: none;\n}\n.dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-full .dplayer-full-in-icon {\n position: static;\n display: inline-block;\n}\n.dplayer.dplayer-mobile .dplayer-bar-time {\n display: none;\n}\n.dplayer.dplayer-mobile.dplayer-hide-controller .dplayer-mobile-play {\n display: none;\n}\n.dplayer.dplayer-mobile .dplayer-mobile-play {\n display: block;\n}\n.dplayer-web-fullscreen-fix {\n position: fixed;\n top: 0;\n left: 0;\n margin: 0;\n padding: 0;\n}\n[data-balloon]:before {\n display: none;\n}\n[data-balloon]:after {\n padding: 0.3em 0.7em;\n background: rgba(17, 17, 17, 0.7);\n}\n[data-balloon][data-balloon-pos=\"up\"]:after {\n margin-bottom: 0;\n}\n.dplayer-bezel {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n font-size: 22px;\n color: #fff;\n pointer-events: none;\n}\n.dplayer-bezel .dplayer-bezel-icon {\n position: absolute;\n top: 50%;\n left: 50%;\n margin: -26px 0 0 -26px;\n height: 52px;\n width: 52px;\n padding: 12px;\n box-sizing: border-box;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 50%;\n opacity: 0;\n pointer-events: none;\n}\n.dplayer-bezel .dplayer-bezel-icon.dplayer-bezel-transition {\n animation: bezel-hide 0.5s linear;\n}\n@keyframes bezel-hide {\n from {\n opacity: 1;\n transform: scale(1);\n }\n to {\n opacity: 0;\n transform: scale(2);\n }\n}\n.dplayer-bezel .dplayer-danloading {\n position: absolute;\n top: 50%;\n margin-top: -7px;\n width: 100%;\n text-align: center;\n font-size: 14px;\n line-height: 14px;\n animation: my-face 5s infinite ease-in-out;\n}\n.dplayer-bezel .diplayer-loading-icon {\n display: none;\n position: absolute;\n top: 50%;\n left: 50%;\n margin: -18px 0 0 -18px;\n height: 36px;\n width: 36px;\n pointer-events: none;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-hide {\n display: none;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot {\n animation: diplayer-loading-dot-fade 0.8s ease infinite;\n opacity: 0;\n transform-origin: 4px 4px;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-1 {\n animation-delay: 0.1s;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-2 {\n animation-delay: 0.2s;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-3 {\n animation-delay: 0.3s;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-4 {\n animation-delay: 0.4s;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-5 {\n animation-delay: 0.5s;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-6 {\n animation-delay: 0.6s;\n}\n.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-7 {\n animation-delay: 0.7s;\n}\n@keyframes diplayer-loading-dot-fade {\n 0% {\n opacity: 0.7;\n transform: scale(1.2, 1.2);\n }\n 50% {\n opacity: 0.25;\n transform: scale(0.9, 0.9);\n }\n to {\n opacity: 0.25;\n transform: scale(0.85, 0.85);\n }\n}\n.dplayer-controller-mask {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==) repeat-x bottom;\n height: 98px;\n width: 100%;\n position: absolute;\n bottom: 0;\n transition: all 0.3s ease;\n}\n.dplayer-controller {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 41px;\n padding: 0 20px;\n user-select: none;\n transition: all 0.3s ease;\n}\n.dplayer-controller.dplayer-controller-comment .dplayer-icons {\n display: none;\n}\n.dplayer-controller.dplayer-controller-comment .dplayer-icons.dplayer-comment-box {\n display: block;\n}\n.dplayer-controller .dplayer-bar-wrap {\n padding: 5px 0;\n cursor: pointer;\n position: absolute;\n bottom: 33px;\n width: calc(100% - 40px);\n height: 3px;\n}\n.dplayer-controller .dplayer-bar-wrap:hover .dplayer-bar .dplayer-played .dplayer-thumb {\n transform: scale(1);\n}\n.dplayer-controller .dplayer-bar-wrap:hover .dplayer-highlight {\n display: block;\n width: 8px;\n transform: translateX(-4px);\n top: 4px;\n height: 40%;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-highlight {\n z-index: 12;\n position: absolute;\n top: 5px;\n width: 6px;\n height: 20%;\n border-radius: 6px;\n background-color: #fff;\n text-align: center;\n transform: translateX(-3px);\n transition: all 0.2s ease-in-out;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-highlight:hover .dplayer-highlight-text {\n display: block;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-highlight:hover ~ .dplayer-bar-preview {\n opacity: 0;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-highlight:hover ~ .dplayer-bar-time {\n opacity: 0;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-highlight .dplayer-highlight-text {\n display: none;\n position: absolute;\n left: 50%;\n top: -24px;\n padding: 5px 8px;\n background-color: rgba(0, 0, 0, 0.62);\n color: #fff;\n border-radius: 4px;\n font-size: 12px;\n white-space: nowrap;\n transform: translateX(-50%);\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-bar-preview {\n position: absolute;\n background: #fff;\n pointer-events: none;\n display: none;\n background-size: 16000px 100%;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-bar-preview-canvas {\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: 1;\n pointer-events: none;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-bar-time {\n position: absolute;\n left: 0px;\n top: -20px;\n border-radius: 4px;\n padding: 5px 7px;\n background-color: rgba(0, 0, 0, 0.62);\n color: #fff;\n font-size: 12px;\n text-align: center;\n opacity: 1;\n transition: opacity 0.1s ease-in-out;\n word-wrap: normal;\n word-break: normal;\n z-index: 2;\n pointer-events: none;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-bar-time.hidden {\n opacity: 0;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-bar {\n position: relative;\n height: 3px;\n width: 100%;\n background: rgba(255, 255, 255, 0.2);\n cursor: pointer;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-loaded {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n background: rgba(255, 255, 255, 0.4);\n height: 3px;\n transition: all 0.5s ease;\n will-change: width;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-played {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n height: 3px;\n will-change: width;\n}\n.dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-played .dplayer-thumb {\n position: absolute;\n top: 0;\n right: 5px;\n margin-top: -4px;\n margin-right: -10px;\n height: 11px;\n width: 11px;\n border-radius: 50%;\n cursor: pointer;\n transition: all 0.3s ease-in-out;\n transform: scale(0);\n}\n.dplayer-controller .dplayer-icons {\n height: 38px;\n position: absolute;\n bottom: 0;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box {\n display: none;\n position: absolute;\n transition: all 0.3s ease-in-out;\n z-index: 2;\n height: 38px;\n bottom: 0;\n left: 20px;\n right: 20px;\n color: #fff;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-icon {\n padding: 7px;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-icon {\n position: absolute;\n left: 0;\n top: 0;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-send-icon {\n position: absolute;\n right: 0;\n top: 0;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box {\n position: absolute;\n background: rgba(28, 28, 28, 0.9);\n bottom: 41px;\n left: 0;\n box-shadow: 0 0 25px rgba(0, 0, 0, 0.3);\n border-radius: 4px;\n padding: 10px 10px 16px;\n font-size: 14px;\n width: 204px;\n transition: all 0.3s ease-in-out;\n transform: scale(0);\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box.dplayer-comment-setting-open {\n transform: scale(1);\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box input[type=radio] {\n display: none;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box label {\n cursor: pointer;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-title {\n font-size: 13px;\n color: #fff;\n line-height: 30px;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type {\n font-size: 0;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type .dplayer-comment-setting-title {\n margin-bottom: 6px;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type label:nth-child(2) span {\n border-radius: 4px 0 0 4px;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type label:nth-child(4) span {\n border-radius: 0 4px 4px 0;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type span {\n width: 33%;\n padding: 4px 6px;\n line-height: 16px;\n display: inline-block;\n font-size: 12px;\n color: #fff;\n border: 1px solid #fff;\n margin-right: -1px;\n box-sizing: border-box;\n text-align: center;\n cursor: pointer;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type input:checked + span {\n background: #E4E4E6;\n color: #1c1c1c;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color {\n font-size: 0;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color label {\n font-size: 0;\n padding: 6px;\n display: inline-block;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color span {\n width: 22px;\n height: 22px;\n display: inline-block;\n border-radius: 50%;\n box-sizing: border-box;\n cursor: pointer;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color span:hover {\n animation: my-face 5s infinite ease-in-out;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input {\n outline: none;\n border: none;\n padding: 8px 31px;\n font-size: 14px;\n line-height: 18px;\n text-align: center;\n border-radius: 4px;\n background: none;\n margin: 0;\n height: 100%;\n box-sizing: border-box;\n width: 100%;\n color: #fff;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input::placeholder {\n color: #fff;\n opacity: 0.8;\n}\n.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input::-ms-clear {\n display: none;\n}\n.dplayer-controller .dplayer-icons.dplayer-icons-left .dplayer-icon {\n padding: 7px;\n}\n.dplayer-controller .dplayer-icons.dplayer-icons-right {\n right: 20px;\n}\n.dplayer-controller .dplayer-icons.dplayer-icons-right .dplayer-icon {\n padding: 8px;\n}\n.dplayer-controller .dplayer-icons .dplayer-time,\n.dplayer-controller .dplayer-icons .dplayer-live-badge {\n line-height: 38px;\n color: #eee;\n text-shadow: 0 0 2px rgba(0, 0, 0, 0.5);\n vertical-align: middle;\n font-size: 13px;\n cursor: default;\n}\n.dplayer-controller .dplayer-icons .dplayer-live-dot {\n display: inline-block;\n width: 6px;\n height: 6px;\n vertical-align: 4%;\n margin-right: 5px;\n content: '';\n border-radius: 6px;\n}\n.dplayer-controller .dplayer-icons .dplayer-icon {\n width: 40px;\n height: 100%;\n border: none;\n background-color: transparent;\n outline: none;\n cursor: pointer;\n vertical-align: middle;\n box-sizing: border-box;\n display: inline-block;\n}\n.dplayer-controller .dplayer-icons .dplayer-icon .dplayer-icon-content {\n transition: all 0.2s ease-in-out;\n opacity: 0.8;\n}\n.dplayer-controller .dplayer-icons .dplayer-icon:hover .dplayer-icon-content {\n opacity: 1;\n}\n.dplayer-controller .dplayer-icons .dplayer-icon.dplayer-quality-icon {\n color: #fff;\n width: auto;\n line-height: 22px;\n font-size: 14px;\n}\n.dplayer-controller .dplayer-icons .dplayer-icon.dplayer-comment-icon {\n padding: 10px 9px 9px;\n}\n.dplayer-controller .dplayer-icons .dplayer-icon.dplayer-setting-icon {\n padding-top: 8.5px;\n}\n.dplayer-controller .dplayer-icons .dplayer-icon.dplayer-volume-icon {\n width: 43px;\n}\n.dplayer-controller .dplayer-icons .dplayer-volume {\n position: relative;\n display: inline-block;\n cursor: pointer;\n height: 100%;\n}\n.dplayer-controller .dplayer-icons .dplayer-volume:hover .dplayer-volume-bar-wrap .dplayer-volume-bar {\n width: 45px;\n}\n.dplayer-controller .dplayer-icons .dplayer-volume:hover .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner .dplayer-thumb {\n transform: scale(1);\n}\n.dplayer-controller .dplayer-icons .dplayer-volume.dplayer-volume-active .dplayer-volume-bar-wrap .dplayer-volume-bar {\n width: 45px;\n}\n.dplayer-controller .dplayer-icons .dplayer-volume.dplayer-volume-active .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner .dplayer-thumb {\n transform: scale(1);\n}\n.dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap {\n display: inline-block;\n margin: 0 10px 0 -5px;\n vertical-align: middle;\n height: 100%;\n}\n.dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar {\n position: relative;\n top: 17px;\n width: 0;\n height: 3px;\n background: #aaa;\n transition: all 0.3s ease-in-out;\n}\n.dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner {\n position: absolute;\n bottom: 0;\n left: 0;\n height: 100%;\n transition: all 0.1s ease;\n will-change: width;\n}\n.dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner .dplayer-thumb {\n position: absolute;\n top: 0;\n right: 5px;\n margin-top: -4px;\n margin-right: -10px;\n height: 11px;\n width: 11px;\n border-radius: 50%;\n cursor: pointer;\n transition: all 0.3s ease-in-out;\n transform: scale(0);\n}\n.dplayer-controller .dplayer-icons .dplayer-subtitle-btn {\n display: inline-block;\n height: 100%;\n}\n.dplayer-controller .dplayer-icons .dplayer-subtitles {\n display: inline-block;\n height: 100%;\n}\n.dplayer-controller .dplayer-icons .dplayer-subtitles .dplayer-subtitles-box {\n position: absolute;\n right: 0;\n bottom: 50px;\n transform: scale(0);\n width: fit-content;\n max-width: 240px;\n min-width: 120px;\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.9);\n padding: 7px 0;\n transition: all 0.3s ease-in-out;\n overflow: auto;\n z-index: 2;\n}\n.dplayer-controller .dplayer-icons .dplayer-subtitles .dplayer-subtitles-box.dplayer-subtitles-panel {\n display: block;\n}\n.dplayer-controller .dplayer-icons .dplayer-subtitles .dplayer-subtitles-box.dplayer-subtitles-box-open {\n transform: scale(1);\n}\n.dplayer-controller .dplayer-icons .dplayer-subtitles .dplayer-subtitles-item {\n height: 30px;\n padding: 5px 10px;\n box-sizing: border-box;\n cursor: pointer;\n position: relative;\n}\n.dplayer-controller .dplayer-icons .dplayer-subtitles .dplayer-subtitles-item:hover {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dplayer-controller .dplayer-icons .dplayer-setting {\n display: inline-block;\n height: 100%;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box {\n position: absolute;\n right: 0;\n bottom: 50px;\n transform: scale(0);\n width: 150px;\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.9);\n padding: 7px 0;\n transition: all 0.3s ease-in-out;\n overflow: hidden;\n z-index: 2;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box > div {\n display: none;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box > div.dplayer-setting-origin-panel {\n display: block;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-open {\n transform: scale(1);\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-narrow {\n width: 70px;\n text-align: center;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-speed .dplayer-setting-origin-panel {\n display: none;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-speed .dplayer-setting-speed-panel {\n display: block;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-item,\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-speed-item {\n height: 30px;\n padding: 5px 10px;\n box-sizing: border-box;\n cursor: pointer;\n position: relative;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-item:hover,\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-speed-item:hover {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku {\n padding: 5px 0;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-label {\n padding: 0 10px;\n display: inline;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku:hover .dplayer-label {\n display: none;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku:hover .dplayer-danmaku-bar-wrap {\n display: inline-block;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku.dplayer-setting-danmaku-active .dplayer-label {\n display: none;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku.dplayer-setting-danmaku-active .dplayer-danmaku-bar-wrap {\n display: inline-block;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap {\n padding: 0 10px;\n box-sizing: border-box;\n display: none;\n vertical-align: middle;\n height: 100%;\n width: 100%;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar {\n position: relative;\n top: 8.5px;\n width: 100%;\n height: 3px;\n background: #fff;\n transition: all 0.3s ease-in-out;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar .dplayer-danmaku-bar-inner {\n position: absolute;\n bottom: 0;\n left: 0;\n height: 100%;\n transition: all 0.1s ease;\n background: #aaa;\n will-change: width;\n}\n.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar .dplayer-danmaku-bar-inner .dplayer-thumb {\n position: absolute;\n top: 0;\n right: 5px;\n margin-top: -4px;\n margin-right: -10px;\n height: 11px;\n width: 11px;\n border-radius: 50%;\n cursor: pointer;\n transition: all 0.3s ease-in-out;\n background: #aaa;\n}\n.dplayer-controller .dplayer-icons .dplayer-full {\n display: inline-block;\n height: 100%;\n position: relative;\n}\n.dplayer-controller .dplayer-icons .dplayer-full:hover .dplayer-full-in-icon {\n display: block;\n}\n.dplayer-controller .dplayer-icons .dplayer-full .dplayer-full-in-icon {\n position: absolute;\n top: -30px;\n z-index: 1;\n display: none;\n}\n.dplayer-controller .dplayer-icons .dplayer-quality {\n position: relative;\n display: inline-block;\n height: 100%;\n z-index: 2;\n}\n.dplayer-controller .dplayer-icons .dplayer-quality:hover .dplayer-quality-list {\n display: block;\n}\n.dplayer-controller .dplayer-icons .dplayer-quality:hover .dplayer-quality-mask {\n display: block;\n}\n.dplayer-controller .dplayer-icons .dplayer-quality .dplayer-quality-mask {\n display: none;\n position: absolute;\n bottom: 38px;\n left: -18px;\n width: 80px;\n padding-bottom: 12px;\n}\n.dplayer-controller .dplayer-icons .dplayer-quality .dplayer-quality-list {\n display: none;\n font-size: 12px;\n width: 80px;\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.9);\n padding: 5px 0;\n transition: all 0.3s ease-in-out;\n overflow: hidden;\n color: #fff;\n text-align: center;\n}\n.dplayer-controller .dplayer-icons .dplayer-quality .dplayer-quality-item {\n height: 25px;\n box-sizing: border-box;\n cursor: pointer;\n line-height: 25px;\n}\n.dplayer-controller .dplayer-icons .dplayer-quality .dplayer-quality-item:hover {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dplayer-controller .dplayer-icons .dplayer-comment {\n display: inline-block;\n height: 100%;\n}\n.dplayer-controller .dplayer-icons .dplayer-label {\n color: #eee;\n font-size: 13px;\n display: inline-block;\n vertical-align: middle;\n white-space: nowrap;\n}\n.dplayer-controller .dplayer-icons .dplayer-toggle {\n width: 32px;\n height: 20px;\n text-align: center;\n font-size: 0;\n vertical-align: middle;\n position: absolute;\n top: 5px;\n right: 10px;\n}\n.dplayer-controller .dplayer-icons .dplayer-toggle input {\n max-height: 0;\n max-width: 0;\n display: none;\n}\n.dplayer-controller .dplayer-icons .dplayer-toggle input + label {\n display: inline-block;\n position: relative;\n box-shadow: #dfdfdf 0 0 0 0 inset;\n border: 1px solid #dfdfdf;\n height: 20px;\n width: 32px;\n border-radius: 10px;\n box-sizing: border-box;\n cursor: pointer;\n transition: 0.2s ease-in-out;\n}\n.dplayer-controller .dplayer-icons .dplayer-toggle input + label:before {\n content: \"\";\n position: absolute;\n display: block;\n height: 18px;\n width: 18px;\n top: 0;\n left: 0;\n border-radius: 15px;\n transition: 0.2s ease-in-out;\n}\n.dplayer-controller .dplayer-icons .dplayer-toggle input + label:after {\n content: \"\";\n position: absolute;\n display: block;\n left: 0;\n top: 0;\n border-radius: 15px;\n background: #fff;\n transition: 0.2s ease-in-out;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);\n height: 18px;\n width: 18px;\n}\n.dplayer-controller .dplayer-icons .dplayer-toggle input:checked + label {\n border-color: rgba(255, 255, 255, 0.5);\n}\n.dplayer-controller .dplayer-icons .dplayer-toggle input:checked + label:before {\n width: 30px;\n background: rgba(255, 255, 255, 0.5);\n}\n.dplayer-controller .dplayer-icons .dplayer-toggle input:checked + label:after {\n left: 12px;\n}\n.dplayer-mobile-play {\n display: none;\n width: 50px;\n height: 50px;\n border: none;\n background-color: transparent;\n outline: none;\n cursor: pointer;\n box-sizing: border-box;\n bottom: 0;\n opacity: 0.8;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n}\n.dplayer-danmaku {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n font-size: 22px;\n color: #fff;\n}\n.dplayer-danmaku .dplayer-danmaku-item {\n display: inline-block;\n pointer-events: none;\n user-select: none;\n cursor: default;\n white-space: nowrap;\n text-shadow: 0.5px 0.5px 0.5px rgba(0, 0, 0, 0.5);\n}\n.dplayer-danmaku .dplayer-danmaku-item--demo {\n position: absolute;\n visibility: hidden;\n}\n.dplayer-danmaku .dplayer-danmaku-right {\n position: absolute;\n right: 0;\n transform: translateX(100%);\n}\n.dplayer-danmaku .dplayer-danmaku-right.dplayer-danmaku-move {\n will-change: transform;\n animation-name: 'danmaku';\n animation-timing-function: linear;\n animation-play-state: paused;\n}\n@keyframes danmaku {\n from {\n transform: translateX(100%);\n }\n}\n.dplayer-danmaku .dplayer-danmaku-top,\n.dplayer-danmaku .dplayer-danmaku-bottom {\n position: absolute;\n width: 100%;\n text-align: center;\n visibility: hidden;\n}\n.dplayer-danmaku .dplayer-danmaku-top.dplayer-danmaku-move,\n.dplayer-danmaku .dplayer-danmaku-bottom.dplayer-danmaku-move {\n will-change: visibility;\n animation-name: 'danmaku-center';\n animation-timing-function: linear;\n animation-play-state: paused;\n}\n@keyframes danmaku-center {\n from {\n visibility: visible;\n }\n to {\n visibility: visible;\n }\n}\n.dplayer-logo {\n pointer-events: none;\n position: absolute;\n left: 20px;\n top: 20px;\n max-width: 50px;\n max-height: 50px;\n}\n.dplayer-logo img {\n max-width: 100%;\n max-height: 100%;\n background: none;\n}\n.dplayer-menu {\n position: absolute;\n width: 170px;\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.85);\n padding: 5px 0;\n overflow: hidden;\n z-index: 3;\n display: none;\n}\n.dplayer-menu.dplayer-menu-show {\n display: block;\n}\n.dplayer-menu .dplayer-menu-item {\n height: 30px;\n box-sizing: border-box;\n cursor: pointer;\n}\n.dplayer-menu .dplayer-menu-item:hover {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.dplayer-menu .dplayer-menu-item a {\n padding: 0 10px;\n line-height: 30px;\n color: #eee;\n font-size: 13px;\n display: inline-block;\n vertical-align: middle;\n width: 100%;\n box-sizing: border-box;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.dplayer-menu .dplayer-menu-item a:hover {\n text-decoration: none;\n}\n.dplayer-notice-list {\n position: absolute;\n bottom: 60px;\n left: 20px;\n}\n.dplayer-notice-list .dplayer-notice {\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.9);\n transition: all 0.3s ease-in-out;\n overflow: hidden;\n color: #fff;\n display: table;\n pointer-events: none;\n animation: showNotice 0.3s ease 1 forwards;\n}\n.dplayer-notice-list .remove-notice {\n animation: removeNotice 0.3s ease 1 forwards;\n}\n@keyframes showNotice {\n from {\n padding: 0;\n font-size: 0;\n margin-top: 0;\n }\n to {\n padding: 7px 20px;\n font-size: 14px;\n margin-top: 5px;\n }\n}\n@keyframes removeNotice {\n 0% {\n padding: 7px 20px;\n font-size: 14px;\n margin-top: 5px;\n }\n 20% {\n font-size: 12px;\n }\n 21% {\n font-size: 0;\n padding: 7px 10px;\n }\n 100% {\n padding: 0;\n margin-top: 0;\n font-size: 0;\n }\n}\n.dplayer-subtitle {\n position: absolute;\n bottom: 40px;\n width: 90%;\n left: 5%;\n text-align: center;\n color: #fff;\n text-shadow: 0.5px 0.5px 0.5px rgba(0, 0, 0, 0.5);\n font-size: 20px;\n}\n.dplayer-subtitle.dplayer-subtitle-hide {\n display: none;\n}\n.dplayer-mask {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1;\n display: none;\n}\n.dplayer-mask.dplayer-mask-show {\n display: block;\n}\n.dplayer-video-wrap {\n position: relative;\n background: #000;\n font-size: 0;\n width: 100%;\n height: 100%;\n}\n.dplayer-video-wrap .dplayer-video {\n width: 100%;\n height: 100%;\n display: none;\n}\n.dplayer-video-wrap .dplayer-video-current {\n display: block;\n}\n.dplayer-video-wrap .dplayer-video-prepare {\n display: none;\n}\n.dplayer-info-panel {\n position: absolute;\n top: 10px;\n left: 10px;\n width: 400px;\n background: rgba(28, 28, 28, 0.8);\n padding: 10px;\n color: #fff;\n font-size: 12px;\n border-radius: 2px;\n}\n.dplayer-info-panel-hide {\n display: none;\n}\n.dplayer-info-panel .dplayer-info-panel-close {\n cursor: pointer;\n position: absolute;\n right: 10px;\n top: 10px;\n}\n.dplayer-info-panel .dplayer-info-panel-item > span {\n display: inline-block;\n vertical-align: middle;\n line-height: 15px;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.dplayer-info-panel .dplayer-info-panel-item-title {\n width: 100px;\n text-align: right;\n margin-right: 10px;\n}\n.dplayer-info-panel .dplayer-info-panel-item-data {\n width: 260px;\n}\n",".dplayer {\n position: relative;\n overflow: hidden;\n user-select: none;\n line-height: 1;\n\n * {\n box-sizing: content-box;\n }\n\n svg {\n width: 100%;\n height: 100%;\n\n path,\n circle {\n fill: #fff;\n }\n }\n\n &:-webkit-full-screen {\n width: 100%;\n height: 100%;\n background: #000;\n position: fixed;\n z-index: 100000;\n left: 0;\n top: 0;\n margin: 0;\n padding: 0;\n transform: translate(0, 0);\n \n }\n\n &.dplayer-no-danmaku {\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box {\n .dplayer-setting-showdan,\n .dplayer-setting-danmaku,\n .dplayer-setting-danunlimit {\n display: none;\n }\n }\n\n .dplayer-controller .dplayer-icons .dplayer-comment {\n display: none;\n }\n\n .dplayer-danmaku {\n display: none;\n }\n }\n\n &.dplayer-live {\n .dplayer-time {\n display: none;\n }\n .dplayer-bar-wrap {\n display: none;\n }\n .dplayer-setting-speed {\n display: none;\n }\n .dplayer-setting-loop {\n display: none;\n }\n\n &.dplayer-no-danmaku {\n .dplayer-setting {\n display: none;\n }\n }\n }\n\n &.dplayer-arrow {\n .dplayer-danmaku {\n font-size: 18px;\n }\n .dplayer-icon {\n margin: 0 -3px;\n }\n }\n\n &.dplayer-playing {\n .dplayer-danmaku .dplayer-danmaku-move {\n animation-play-state: running;\n }\n\n @media (min-width: 900px) {\n .dplayer-controller-mask {\n opacity: 0;\n }\n .dplayer-controller {\n opacity: 0;\n }\n\n &:hover {\n .dplayer-controller-mask {\n opacity: 1;\n }\n .dplayer-controller {\n opacity: 1;\n }\n }\n }\n }\n\n &.dplayer-loading {\n .dplayer-bezel .diplayer-loading-icon {\n display: block;\n }\n }\n\n &.dplayer-loading,\n &.dplayer-paused {\n .dplayer-danmaku,\n .dplayer-danmaku-move {\n animation-play-state: paused;\n }\n }\n\n &.dplayer-hide-controller {\n cursor: none;\n\n .dplayer-controller-mask {\n opacity: 0;\n transform: translateY(100%);\n }\n .dplayer-controller {\n opacity: 0;\n transform: translateY(100%);\n }\n }\n &.dplayer-show-controller {\n .dplayer-controller-mask {\n opacity: 1;\n }\n .dplayer-controller {\n opacity: 1;\n }\n }\n &.dplayer-fulled {\n position: fixed;\n z-index: 100000;\n left: 0;\n top: 0;\n width: 100% !important;\n height: 100% !important;\n }\n &.dplayer-mobile {\n .dplayer-controller .dplayer-icons {\n .dplayer-volume,\n .dplayer-camera-icon,\n .dplayer-airplay-icon,\n .dplayer-chromecast-icon,\n .dplayer-play-icon {\n display: none;\n }\n .dplayer-full .dplayer-full-in-icon {\n position: static;\n display: inline-block;\n }\n }\n\n .dplayer-bar-time {\n display: none;\n }\n\n &.dplayer-hide-controller {\n .dplayer-mobile-play {\n display: none;\n }\n }\n\n .dplayer-mobile-play {\n display: block;\n }\n }\n}\n\n// To hide scroll bar, apply this class to \n.dplayer-web-fullscreen-fix {\n position: fixed;\n top: 0;\n left: 0;\n margin: 0;\n padding: 0;\n}\n","@import '../../node_modules/balloon-css/balloon.css';\n\n[data-balloon]:before {\n display: none;\n}\n\n[data-balloon]:after {\n padding: 0.3em 0.7em;\n background: rgba(17, 17, 17, 0.7);\n}\n\n[data-balloon][data-balloon-pos=\"up\"]:after {\n margin-bottom: 0;\n}",".dplayer-bezel {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n font-size: 22px;\n color: #fff;\n pointer-events: none;\n .dplayer-bezel-icon {\n position: absolute;\n top: 50%;\n left: 50%;\n margin: -26px 0 0 -26px;\n height: 52px;\n width: 52px;\n padding: 12px;\n box-sizing: border-box;\n background: rgba(0, 0, 0, .5);\n border-radius: 50%;\n opacity: 0;\n pointer-events: none;\n &.dplayer-bezel-transition {\n animation: bezel-hide .5s linear;\n }\n @keyframes bezel-hide {\n from {\n opacity: 1;\n transform: scale(1);\n }\n to {\n opacity: 0;\n transform: scale(2);\n }\n }\n }\n .dplayer-danloading {\n position: absolute;\n top: 50%;\n margin-top: -7px;\n width: 100%;\n text-align: center;\n font-size: 14px;\n line-height: 14px;\n animation: my-face 5s infinite ease-in-out;\n }\n .diplayer-loading-icon {\n display: none;\n position: absolute;\n top: 50%;\n left: 50%;\n margin: -18px 0 0 -18px;\n height: 36px;\n width: 36px;\n pointer-events: none;\n .diplayer-loading-hide {\n display: none;\n }\n .diplayer-loading-dot {\n animation: diplayer-loading-dot-fade .8s ease infinite;\n opacity: 0;\n transform-origin: 4px 4px;\n each(range(7), {\n &.diplayer-loading-dot-@{value} {\n animation-delay: (@value * 0.1s);\n }\n });\n }\n @keyframes diplayer-loading-dot-fade {\n 0% {\n opacity: .7;\n transform: scale(1.2, 1.2)\n }\n 50% {\n opacity: .25;\n transform: scale(.9, .9)\n }\n to {\n opacity: .25;\n transform: scale(.85, .85)\n }\n }\n }\n}",".dplayer-notice-list{\n position: absolute;\n bottom: 60px;\n left: 20px;\n\n .dplayer-notice {\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.9);\n transition: all .3s ease-in-out;\n overflow: hidden;\n color: #fff;\n display: table;\n pointer-events: none;\n animation: showNotice .3s ease 1 forwards;\n }\n\n .remove-notice{\n animation: removeNotice .3s ease 1 forwards;\n }\n}\n\n@keyframes showNotice {\n from {\n padding: 0;\n font-size: 0;\n margin-top: 0;\n }\n to {\n padding: 7px 20px;\n font-size: 14px;\n margin-top: 5px;\n }\n}\n\n@keyframes removeNotice {\n 0%{\n padding: 7px 20px;\n font-size: 14px;\n margin-top: 5px;\n }\n 20%{\n font-size: 12px;\n }\n 21%{\n font-size: 0;\n padding: 7px 10px;\n }\n 100%{\n padding: 0;\n margin-top: 0;\n font-size: 0;\n }\n}\n",'.dplayer-controller-mask {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==) repeat-x bottom;\n height: 98px;\n width: 100%;\n position: absolute;\n bottom: 0;\n transition: all 0.3s ease;\n}\n\n.dplayer-controller {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 41px;\n padding: 0 20px;\n user-select: none;\n transition: all 0.3s ease;\n &.dplayer-controller-comment {\n .dplayer-icons {\n display: none;\n }\n .dplayer-icons.dplayer-comment-box {\n display: block;\n }\n }\n .dplayer-bar-wrap {\n padding: 5px 0;\n cursor: pointer;\n position: absolute;\n bottom: 33px;\n width: calc(100% - 40px);\n height: 3px;\n &:hover {\n .dplayer-bar .dplayer-played .dplayer-thumb {\n transform: scale(1);\n }\n .dplayer-highlight {\n display: block;\n width: 8px;\n transform: translateX(-4px);\n top: 4px;\n height: 40%;\n }\n }\n .dplayer-highlight {\n z-index: 12;\n position: absolute;\n top: 5px;\n width: 6px;\n height: 20%;\n border-radius: 6px;\n background-color: #fff;\n text-align: center;\n transform: translateX(-3px);\n transition: all .2s ease-in-out;\n &:hover {\n .dplayer-highlight-text {\n display: block;\n }\n &~.dplayer-bar-preview {\n opacity: 0;\n }\n &~.dplayer-bar-time {\n opacity: 0;\n }\n }\n .dplayer-highlight-text {\n display: none;\n position: absolute;\n left: 50%;\n top: -24px;\n padding: 5px 8px;\n background-color: rgba(0, 0, 0, .62);\n color: #fff;\n border-radius: 4px;\n font-size: 12px;\n white-space: nowrap;\n transform: translateX(-50%);\n }\n }\n .dplayer-bar-preview {\n position: absolute;\n background: #fff;\n pointer-events: none;\n display: none;\n background-size: 16000px 100%;\n }\n .dplayer-bar-preview-canvas {\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: 1;\n pointer-events: none;\n }\n .dplayer-bar-time {\n &.hidden {\n opacity: 0;\n }\n position: absolute;\n left: 0px;\n top: -20px;\n border-radius: 4px;\n padding: 5px 7px;\n background-color: rgba(0, 0, 0, 0.62);\n color: #fff;\n font-size: 12px;\n text-align: center;\n opacity: 1;\n transition: opacity .1s ease-in-out;\n word-wrap: normal;\n word-break: normal;\n z-index: 2;\n pointer-events: none;\n }\n .dplayer-bar {\n position: relative;\n height: 3px;\n width: 100%;\n background: rgba(255, 255, 255, .2);\n cursor: pointer;\n .dplayer-loaded {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n background: rgba(255, 255, 255, .4);\n height: 3px;\n transition: all 0.5s ease;\n will-change: width;\n }\n .dplayer-played {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n height: 3px;\n will-change: width;\n .dplayer-thumb {\n position: absolute;\n top: 0;\n right: 5px;\n margin-top: -4px;\n margin-right: -10px;\n height: 11px;\n width: 11px;\n border-radius: 50%;\n cursor: pointer;\n transition: all .3s ease-in-out;\n transform: scale(0);\n }\n }\n }\n }\n .dplayer-icons {\n height: 38px;\n position: absolute;\n bottom: 0;\n &.dplayer-comment-box {\n display: none;\n position: absolute;\n transition: all .3s ease-in-out;\n z-index: 2;\n height: 38px;\n bottom: 0;\n left: 20px;\n right: 20px;\n color: #fff;\n .dplayer-icon {\n padding: 7px;\n }\n .dplayer-comment-setting-icon {\n position: absolute;\n left: 0;\n top: 0;\n }\n .dplayer-send-icon {\n position: absolute;\n right: 0;\n top: 0;\n }\n .dplayer-comment-setting-box {\n position: absolute;\n background: rgba(28, 28, 28, 0.9);\n bottom: 41px;\n left: 0;\n box-shadow: 0 0 25px rgba(0, 0, 0, .3);\n border-radius: 4px;\n padding: 10px 10px 16px;\n font-size: 14px;\n width: 204px;\n transition: all .3s ease-in-out;\n transform: scale(0);\n &.dplayer-comment-setting-open {\n transform: scale(1);\n }\n input[type=radio] {\n display: none;\n }\n label {\n cursor: pointer;\n }\n .dplayer-comment-setting-title {\n font-size: 13px;\n color: #fff;\n line-height: 30px;\n }\n .dplayer-comment-setting-type {\n font-size: 0;\n .dplayer-comment-setting-title {\n margin-bottom: 6px;\n }\n label {\n &:nth-child(2) {\n span {\n border-radius: 4px 0 0 4px;\n }\n }\n &:nth-child(4) {\n span {\n border-radius: 0 4px 4px 0;\n }\n }\n }\n span {\n width: 33%;\n padding: 4px 6px;\n line-height: 16px;\n display: inline-block;\n font-size: 12px;\n color: #fff;\n border: 1px solid #fff;\n margin-right: -1px;\n box-sizing: border-box;\n text-align: center;\n cursor: pointer;\n }\n input:checked+span {\n background: #E4E4E6;\n color: #1c1c1c;\n }\n }\n .dplayer-comment-setting-color {\n font-size: 0;\n label {\n font-size: 0;\n padding: 6px;\n display: inline-block;\n }\n span {\n width: 22px;\n height: 22px;\n display: inline-block;\n border-radius: 50%;\n box-sizing: border-box;\n cursor: pointer;\n &:hover {\n animation: my-face 5s infinite ease-in-out;\n }\n }\n }\n }\n .dplayer-comment-input {\n outline: none;\n border: none;\n padding: 8px 31px;\n font-size: 14px;\n line-height: 18px;\n text-align: center;\n border-radius: 4px;\n background: none;\n margin: 0;\n height: 100%;\n box-sizing: border-box;\n width: 100%;\n color: #fff;\n &::placeholder {\n color: #fff;\n opacity: 0.8;\n }\n &::-ms-clear {\n display: none;\n }\n }\n }\n &.dplayer-icons-left {\n .dplayer-icon {\n padding: 7px;\n }\n }\n &.dplayer-icons-right {\n right: 20px;\n .dplayer-icon {\n padding: 8px;\n }\n }\n .dplayer-time,\n .dplayer-live-badge {\n line-height: 38px;\n color: #eee;\n text-shadow: 0 0 2px rgba(0, 0, 0, .5);\n vertical-align: middle;\n font-size: 13px;\n cursor: default;\n }\n .dplayer-live-dot {\n display: inline-block;\n width: 6px;\n height: 6px;\n vertical-align: 4%;\n margin-right: 5px;\n content: \'\';\n border-radius: 6px;\n }\n .dplayer-icon {\n width: 40px;\n height: 100%;\n border: none;\n background-color: transparent;\n outline: none;\n cursor: pointer;\n vertical-align: middle;\n box-sizing: border-box;\n display: inline-block;\n .dplayer-icon-content {\n transition: all .2s ease-in-out;\n opacity: .8;\n }\n &:hover {\n .dplayer-icon-content {\n opacity: 1;\n }\n }\n &.dplayer-quality-icon {\n color: #fff;\n width: auto;\n line-height: 22px;\n font-size: 14px;\n }\n &.dplayer-comment-icon {\n padding: 10px 9px 9px;\n }\n &.dplayer-setting-icon {\n padding-top: 8.5px;\n }\n &.dplayer-volume-icon {\n width: 43px;\n }\n }\n .dplayer-volume {\n position: relative;\n display: inline-block;\n cursor: pointer;\n height: 100%;\n &:hover {\n .dplayer-volume-bar-wrap .dplayer-volume-bar {\n width: 45px;\n }\n .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner .dplayer-thumb {\n transform: scale(1);\n }\n }\n &.dplayer-volume-active {\n .dplayer-volume-bar-wrap .dplayer-volume-bar {\n width: 45px;\n }\n .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner .dplayer-thumb {\n transform: scale(1);\n }\n }\n .dplayer-volume-bar-wrap {\n display: inline-block;\n margin: 0 10px 0 -5px;\n vertical-align: middle;\n height: 100%;\n .dplayer-volume-bar {\n position: relative;\n top: 17px;\n width: 0;\n height: 3px;\n background: #aaa;\n transition: all 0.3s ease-in-out;\n .dplayer-volume-bar-inner {\n position: absolute;\n bottom: 0;\n left: 0;\n height: 100%;\n transition: all 0.1s ease;\n will-change: width;\n .dplayer-thumb {\n position: absolute;\n top: 0;\n right: 5px;\n margin-top: -4px;\n margin-right: -10px;\n height: 11px;\n width: 11px;\n border-radius: 50%;\n cursor: pointer;\n transition: all .3s ease-in-out;\n transform: scale(0);\n }\n }\n }\n }\n }\n .dplayer-subtitle-btn {\n display: inline-block;\n height: 100%;\n }\n .dplayer-subtitles {\n display: inline-block;\n height: 100%;\n .dplayer-subtitles-box {\n position: absolute;\n right: 0;\n bottom: 50px;\n transform: scale(0);\n width: fit-content;\n max-width: 240px;\n min-width: 120px;\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.9);\n padding: 7px 0;\n transition: all .3s ease-in-out;\n overflow: auto;\n z-index: 2;\n &.dplayer-subtitles-panel {\n display: block;\n }\n &.dplayer-subtitles-box-open {\n transform: scale(1);\n }\n }\n .dplayer-subtitles-item {\n height: 30px;\n padding: 5px 10px;\n box-sizing: border-box;\n cursor: pointer;\n position: relative;\n &:hover {\n background-color: rgba(255, 255, 255, .1);\n }\n }\n }\n .dplayer-setting {\n display: inline-block;\n height: 100%;\n .dplayer-setting-box {\n position: absolute;\n right: 0;\n bottom: 50px;\n transform: scale(0);\n width: 150px;\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.9);\n padding: 7px 0;\n transition: all .3s ease-in-out;\n overflow: hidden;\n z-index: 2;\n &>div {\n display: none;\n &.dplayer-setting-origin-panel {\n display: block;\n }\n }\n &.dplayer-setting-box-open {\n transform: scale(1);\n }\n &.dplayer-setting-box-narrow {\n width: 70px;\n text-align: center;\n }\n &.dplayer-setting-box-speed {\n .dplayer-setting-origin-panel {\n display: none;\n }\n .dplayer-setting-speed-panel {\n display: block;\n }\n }\n }\n .dplayer-setting-item,\n .dplayer-setting-speed-item {\n height: 30px;\n padding: 5px 10px;\n box-sizing: border-box;\n cursor: pointer;\n position: relative;\n &:hover {\n background-color: rgba(255, 255, 255, .1);\n }\n }\n .dplayer-setting-danmaku {\n padding: 5px 0;\n .dplayer-label {\n padding: 0 10px;\n display: inline;\n }\n &:hover {\n .dplayer-label {\n display: none;\n }\n .dplayer-danmaku-bar-wrap {\n display: inline-block;\n }\n }\n &.dplayer-setting-danmaku-active {\n .dplayer-label {\n display: none;\n }\n .dplayer-danmaku-bar-wrap {\n display: inline-block;\n }\n }\n .dplayer-danmaku-bar-wrap {\n padding: 0 10px;\n box-sizing: border-box;\n display: none;\n vertical-align: middle;\n height: 100%;\n width: 100%;\n .dplayer-danmaku-bar {\n position: relative;\n top: 8.5px;\n width: 100%;\n height: 3px;\n background: #fff;\n transition: all 0.3s ease-in-out;\n .dplayer-danmaku-bar-inner {\n position: absolute;\n bottom: 0;\n left: 0;\n height: 100%;\n transition: all 0.1s ease;\n background: #aaa;\n will-change: width;\n .dplayer-thumb {\n position: absolute;\n top: 0;\n right: 5px;\n margin-top: -4px;\n margin-right: -10px;\n height: 11px;\n width: 11px;\n border-radius: 50%;\n cursor: pointer;\n transition: all .3s ease-in-out;\n background: #aaa;\n }\n }\n }\n }\n }\n }\n .dplayer-full {\n display: inline-block;\n height: 100%;\n position: relative;\n &:hover {\n .dplayer-full-in-icon {\n display: block;\n }\n }\n .dplayer-full-in-icon {\n position: absolute;\n top: -30px;\n z-index: 1;\n display: none;\n }\n }\n .dplayer-quality {\n position: relative;\n display: inline-block;\n height: 100%;\n z-index: 2;\n &:hover {\n .dplayer-quality-list {\n display: block;\n }\n .dplayer-quality-mask {\n display: block;\n }\n }\n .dplayer-quality-mask {\n display: none;\n position: absolute;\n bottom: 38px;\n left: -18px;\n width: 80px;\n padding-bottom: 12px;\n }\n .dplayer-quality-list {\n display: none;\n font-size: 12px;\n width: 80px;\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.9);\n padding: 5px 0;\n transition: all .3s ease-in-out;\n overflow: hidden;\n color: #fff;\n text-align: center;\n }\n .dplayer-quality-item {\n height: 25px;\n box-sizing: border-box;\n cursor: pointer;\n line-height: 25px;\n &:hover {\n background-color: rgba(255, 255, 255, .1);\n }\n }\n }\n .dplayer-comment {\n display: inline-block;\n height: 100%;\n }\n .dplayer-label {\n color: #eee;\n font-size: 13px;\n display: inline-block;\n vertical-align: middle;\n white-space: nowrap;\n }\n .dplayer-toggle {\n width: 32px;\n height: 20px;\n text-align: center;\n font-size: 0;\n vertical-align: middle;\n position: absolute;\n top: 5px;\n right: 10px;\n input {\n max-height: 0;\n max-width: 0;\n display: none;\n }\n input+label {\n display: inline-block;\n position: relative;\n box-shadow: rgb(223, 223, 223) 0 0 0 0 inset;\n border: 1px solid rgb(223, 223, 223);\n height: 20px;\n width: 32px;\n border-radius: 10px;\n box-sizing: border-box;\n cursor: pointer;\n transition: .2s ease-in-out;\n }\n input+label:before {\n content: "";\n position: absolute;\n display: block;\n height: 18px;\n width: 18px;\n top: 0;\n left: 0;\n border-radius: 15px;\n transition: .2s ease-in-out;\n }\n input+label:after {\n content: "";\n position: absolute;\n display: block;\n left: 0;\n top: 0;\n border-radius: 15px;\n background: #fff;\n transition: .2s ease-in-out;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);\n height: 18px;\n width: 18px;\n }\n input:checked+label {\n border-color: rgba(255, 255, 255, 0.5);\n }\n input:checked+label:before {\n width: 30px;\n background: rgba(255, 255, 255, 0.5);\n }\n input:checked+label:after {\n left: 12px;\n }\n }\n }\n}\n\n.dplayer-mobile-play {\n display: none;\n width: 50px;\n height: 50px;\n border: none;\n background-color: transparent;\n outline: none;\n cursor: pointer;\n box-sizing: border-box;\n position: absolute;\n bottom: 0;\n opacity: 0.8;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n}',".dplayer-danmaku {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n font-size: 22px;\n color: #fff;\n .dplayer-danmaku-item {\n display: inline-block;\n pointer-events: none;\n user-select: none;\n cursor: default;\n white-space: nowrap;\n text-shadow: .5px .5px .5px rgba(0, 0, 0, .5);\n &--demo {\n position: absolute;\n visibility: hidden;\n }\n }\n .dplayer-danmaku-right {\n position: absolute;\n right: 0;\n transform: translateX(100%);\n &.dplayer-danmaku-move {\n will-change: transform;\n animation-name: 'danmaku';\n animation-timing-function: linear;\n animation-play-state: paused;\n }\n }\n @keyframes danmaku {\n from {\n transform: translateX(100%);\n }\n }\n .dplayer-danmaku-top,\n .dplayer-danmaku-bottom {\n position: absolute;\n width: 100%;\n text-align: center;\n visibility: hidden;\n &.dplayer-danmaku-move {\n will-change: visibility;\n animation-name: 'danmaku-center';\n animation-timing-function: linear;\n animation-play-state: paused;\n }\n }\n @keyframes danmaku-center {\n from {\n visibility: visible;\n }\n to {\n visibility: visible;\n }\n }\n}",".dplayer-logo {\n pointer-events: none;\n position: absolute;\n left: 20px;\n top: 20px;\n max-width: 50px;\n max-height: 50px;\n img {\n max-width: 100%;\n max-height: 100%;\n background: none;\n }\n}",".dplayer-menu {\n position: absolute;\n width: 170px;\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.85);\n padding: 5px 0;\n overflow: hidden;\n z-index: 3;\n display: none;\n &.dplayer-menu-show {\n display: block;\n }\n .dplayer-menu-item {\n height: 30px;\n box-sizing: border-box;\n cursor: pointer;\n &:hover {\n background-color: rgba(255, 255, 255, .1);\n }\n a {\n display: inline-block;\n padding: 0 10px;\n line-height: 30px;\n color: #eee;\n font-size: 13px;\n display: inline-block;\n vertical-align: middle;\n width: 100%;\n box-sizing: border-box;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n &:hover {\n text-decoration: none;\n }\n }\n }\n}",".dplayer-subtitle {\n position: absolute;\n bottom: 40px;\n width: 90%;\n left: 5%;\n text-align: center;\n color: #fff;\n text-shadow: 0.5px 0.5px 0.5px rgba(0, 0, 0, 0.5);\n font-size: 20px;\n &.dplayer-subtitle-hide {\n display: none;\n }\n}",".dplayer-mask {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1;\n display: none;\n &.dplayer-mask-show {\n display: block;\n }\n}\n\n.dplayer-video-wrap {\n position: relative;\n background: #000;\n font-size: 0;\n width: 100%;\n height: 100%;\n .dplayer-video {\n width: 100%;\n height: 100%;\n display: none;\n }\n .dplayer-video-current {\n display: block;\n }\n .dplayer-video-prepare {\n display: none;\n }\n}",".dplayer-info-panel {\n position: absolute;\n top: 10px;\n left: 10px;\n width: 400px;\n background: rgba(28, 28, 28, 0.8);\n padding: 10px;\n color: #fff;\n font-size: 12px;\n border-radius: 2px;\n\n &-hide {\n display: none;\n }\n\n .dplayer-info-panel-close {\n cursor: pointer;\n position: absolute;\n right: 10px;\n top: 10px;\n }\n\n .dplayer-info-panel-item {\n & > span {\n display: inline-block;\n vertical-align: middle;\n line-height: 15px;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n }\n\n .dplayer-info-panel-item-title {\n width: 100px;\n text-align: right;\n margin-right: 10px;\n }\n \n .dplayer-info-panel-item-data {\n width: 260px;\n }\n}"],sourceRoot:""}]);const u=c},856:n=>{"use strict";var e=[];function t(n){for(var t=-1,a=0;a{"use strict";var e={};n.exports=function(n,t){var a=function(n){if(void 0===e[n]){var t=document.querySelector(n);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(n){t=null}e[n]=t}return e[n]}(n);if(!a)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");a.appendChild(t)}},278:n=>{"use strict";n.exports=function(n){var e=document.createElement("style");return n.setAttributes(e,n.attributes),n.insert(e,n.options),e}},458:(n,e,t)=>{"use strict";n.exports=function(n){var e=t.nc;e&&n.setAttribute("nonce",e)}},470:n=>{"use strict";n.exports=function(n){var e=n.insertStyleElement(n);return{update:function(t){!function(n,e,t){var a="";t.supports&&(a+="@supports (".concat(t.supports,") {")),t.media&&(a+="@media ".concat(t.media," {"));var o=void 0!==t.layer;o&&(a+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),a+=t.css,o&&(a+="}"),t.media&&(a+="}"),t.supports&&(a+="}");var r=t.sourceMap;r&&"undefined"!=typeof btoa&&(a+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),e.styleTagTransform(a,n,e.options)}(e,n,t)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(e)}}}},488:n=>{"use strict";n.exports=function(n,e){if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}},251:n=>{n.exports=''},113:n=>{n.exports=''},193:n=>{n.exports=''},338:n=>{n.exports=''},807:n=>{n.exports=''},300:n=>{n.exports=''},574:n=>{n.exports=''},182:n=>{n.exports=''},965:n=>{n.exports=''},74:n=>{n.exports=''},730:n=>{n.exports=''},428:n=>{n.exports=''},254:n=>{n.exports=''},934:n=>{n.exports=''},410:n=>{n.exports=''},644:n=>{n.exports=''},324:n=>{n.exports=''},437:n=>{n.exports=''},897:(n,e,t)=>{"use strict";var a="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:{},o=Object.create(a),r=/["&'<>]/;function i(n){return"string"!=typeof n&&(n=null==n?"":"function"==typeof n?i(n.call(n)):JSON.stringify(n)),n}o.$escape=function(n){return function(n){var e=""+n,t=r.exec(e);if(!t)return n;var a="",o=void 0,i=void 0,l=void 0;for(o=t.index,i=0;o{"use strict";n.exports=t(897)},352:n=>{"use strict";n.exports=function(n){var e=[];return e.toString=function(){return this.map((function(e){var t="",a=void 0!==e[5];return e[4]&&(t+="@supports (".concat(e[4],") {")),e[2]&&(t+="@media ".concat(e[2]," {")),a&&(t+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),t+=n(e),a&&(t+="}"),e[2]&&(t+="}"),e[4]&&(t+="}"),t})).join("")},e.i=function(n,t,a,o,r){"string"==typeof n&&(n=[[null,n,void 0]]);var i={};if(a)for(var l=0;l0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=r),t&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=t):d[2]=t),o&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=o):d[4]="".concat(o)),e.push(d))}},e}},80:n=>{"use strict";n.exports=function(n,e){return e||(e={}),n?(n=String(n.__esModule?n.default:n),/^['"].*['"]$/.test(n)&&(n=n.slice(1,-1)),e.hash&&(n+=e.hash),/["'() \t\n]|(%20)/.test(n)||e.needQuotes?'"'.concat(n.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):n):n}},415:n=>{"use strict";n.exports=function(n){var e=n[1],t=n[3];if(!t)return e;if("function"==typeof btoa){var a=btoa(unescape(encodeURIComponent(JSON.stringify(t)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(a),r="/*# ".concat(o," */");return[e].concat([r]).join("\n")}return[e].join("\n")}},937:n=>{function e(n){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},e(n)}n.exports="object"==("undefined"==typeof self?"undefined":e(self))?self.FormData:window.FormData},831:n=>{"use strict";n.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg=="}},e={};function t(a){var o=e[a];if(void 0!==o)return o.exports;var r=e[a]={id:a,exports:{}};return n[a](r,r.exports,t),r.exports}t.m=n,t.n=n=>{var e=n&&n.__esModule?()=>n.default:()=>n;return t.d(e,{a:e}),e},t.d=(n,e)=>{for(var a in e)t.o(e,a)&&!t.o(n,a)&&Object.defineProperty(n,a,{enumerable:!0,get:e[a]})},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),t.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e),t.b=document.baseURI||self.location.href,t.nc=void 0;var a={};return(()=>{"use strict";t.d(a,{default:()=>Za});var n=t(856),e=t.n(n),o=t(470),r=t.n(o),i=t(370),l=t.n(i),s=t(458),p=t.n(s),d=t(278),c=t.n(d),A=t(488),u=t.n(A),y=t(685),m={};m.styleTagTransform=u(),m.setAttributes=p(),m.insert=l().bind(null,"head"),m.domAPI=r(),m.insertStyleElement=c(),e()(y.Z,m),y.Z&&y.Z.locals&&y.Z.locals;function h(n){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},h(n)}function f(n,e){this.name="AggregateError",this.errors=n,this.message=e||""}f.prototype=Error.prototype;function b(n){return b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},b(n)}var g=setTimeout;function v(n){return Boolean(n&&void 0!==n.length)}function x(){}function E(n){if(!(this instanceof E))throw new TypeError("Promises must be constructed via new");if("function"!=typeof n)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],I(n,this)}function w(n,e){for(;3===n._state;)n=n._value;0!==n._state?(n._handled=!0,E._immediateFn((function(){var t=1===n._state?e.onFulfilled:e.onRejected;if(null!==t){var a;try{a=t(n._value)}catch(n){return void k(e.promise,n)}C(e.promise,a)}else(1===n._state?C:k)(e.promise,n._value)}))):n._deferreds.push(e)}function C(n,e){try{if(e===n)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"===b(e)||"function"==typeof e)){var t=e.then;if(e instanceof E)return n._state=3,n._value=e,void B(n);if("function"==typeof t)return void I((a=t,o=e,function(){a.apply(o,arguments)}),n)}n._state=1,n._value=e,B(n)}catch(e){k(n,e)}var a,o}function k(n,e){n._state=2,n._value=e,B(n)}function B(n){2===n._state&&0===n._deferreds.length&&E._immediateFn((function(){n._handled||E._unhandledRejectionFn(n._value)}));for(var e=0,t=n._deferreds.length;e0?[e,t,a]:[t,a]).map((function(n){return n<10?"0"+n:""+n})).join(":")},getElementViewLeft:function(n){var e=n.offsetLeft,t=n.offsetParent,a=document.body.scrollLeft+document.documentElement.scrollLeft;if(document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement)for(;null!==t&&t!==n;)e+=t.offsetLeft,t=t.offsetParent;else for(;null!==t;)e+=t.offsetLeft,t=t.offsetParent;return e-a},getBoundingClientRectViewLeft:function(n){var e=window.scrollY||window.pageYOffset||document.body.scrollTop+(document.documentElement&&document.documentElement.scrollTop||0);if(n.getBoundingClientRect){if("number"!=typeof this.getBoundingClientRectViewLeft.offset){var t=document.createElement("div");t.style.cssText="position:absolute;top:0;left:0;",document.body.appendChild(t),this.getBoundingClientRectViewLeft.offset=-t.getBoundingClientRect().top-e,document.body.removeChild(t),t=null}var a=n.getBoundingClientRect(),o=this.getBoundingClientRectViewLeft.offset;return a.left+o}return this.getElementViewLeft(n)},getScrollPosition:function(){return{left:window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0,top:window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0}},setScrollPosition:function(n){var e=n.left,t=void 0===e?0:e,a=n.top,o=void 0===a?0:a;this.isFirefox?(document.documentElement.scrollLeft=t,document.documentElement.scrollTop=o):window.scrollTo(t,o)},isMobile:z,isFirefox:/firefox/i.test(window.navigator.userAgent),isChrome:/chrome/i.test(window.navigator.userAgent),isSafari:/safari/i.test(window.navigator.userAgent),storage:{set:function(n,e){localStorage.setItem(n,e)},get:function(n){return localStorage.getItem(n)}},nameMap:{dragStart:z?"touchstart":"mousedown",dragMove:z?"touchmove":"mousemove",dragEnd:z?"touchend":"mouseup"},color2Number:function(n){return"#"===n[0]&&(n=n.substr(1)),3===n.length&&(n="".concat(n[0]).concat(n[0]).concat(n[1]).concat(n[1]).concat(n[2]).concat(n[2])),parseInt(n,16)+0&16777215},number2Color:function(n){return"#"+("00000"+n.toString(16)).slice(-6)},number2Type:function(n){switch(n){case 0:default:return"right";case 1:return"top";case 2:return"bottom"}}};function q(n,e){return function(){return n.apply(e,arguments)}}function O(n){return O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},O(n)}var j,D=Object.prototype.toString,P=Object.getPrototypeOf,R=(j=Object.create(null),function(n){var e=D.call(n);return j[e]||(j[e]=e.slice(8,-1).toLowerCase())}),Y=function(n){return n=n.toLowerCase(),function(e){return R(e)===n}},M=function(n){return function(e){return O(e)===n}},F=Array.isArray,W=M("undefined"),U=Y("ArrayBuffer"),N=M("string"),Q=M("function"),H=M("number"),_=function(n){return null!==n&&"object"===O(n)},K=function(n){if("object"!==R(n))return!1;var e=P(n);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e)||Symbol.toStringTag in n||Symbol.iterator in n)},Z=Y("Date"),V=Y("File"),X=Y("Blob"),J=Y("FileList"),G=Y("URLSearchParams");function $(n,e){var t,a,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=o.allOwnKeys,i=void 0!==r&&r;if(null!=n)if("object"!==O(n)&&(n=[n]),F(n))for(t=0,a=n.length;t0;)if(e===(t=a[o]).toLowerCase())return t;return null}var en,tn,an="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,on=function(n){return!W(n)&&n!==an},rn=(en="undefined"!=typeof Uint8Array&&P(Uint8Array),function(n){return en&&n instanceof en}),ln=Y("HTMLFormElement"),sn=(tn=Object.prototype.hasOwnProperty,function(n,e){return tn.call(n,e)}),pn=Y("RegExp"),dn=function(n,e){var t=Object.getOwnPropertyDescriptors(n),a={};$(t,(function(t,o){!1!==e(t,o,n)&&(a[o]=t)})),Object.defineProperties(n,a)};const cn={isArray:F,isArrayBuffer:U,isBuffer:function(n){return null!==n&&!W(n)&&null!==n.constructor&&!W(n.constructor)&&Q(n.constructor.isBuffer)&&n.constructor.isBuffer(n)},isFormData:function(n){var e="[object FormData]";return n&&("function"==typeof FormData&&n instanceof FormData||D.call(n)===e||Q(n.toString)&&n.toString()===e)},isArrayBufferView:function(n){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(n):n&&n.buffer&&U(n.buffer)},isString:N,isNumber:H,isBoolean:function(n){return!0===n||!1===n},isObject:_,isPlainObject:K,isUndefined:W,isDate:Z,isFile:V,isBlob:X,isRegExp:pn,isFunction:Q,isStream:function(n){return _(n)&&Q(n.pipe)},isURLSearchParams:G,isTypedArray:rn,isFileList:J,forEach:$,merge:function n(){for(var e=on(this)&&this||{},t=e.caseless,a={},o=function(e,o){var r=t&&nn(a,o)||o;K(a[r])&&K(e)?a[r]=n(a[r],e):K(e)?a[r]=n({},e):F(e)?a[r]=e.slice():a[r]=e},r=0,i=arguments.length;r3&&void 0!==arguments[3]?arguments[3]:{},o=a.allOwnKeys;return $(e,(function(e,a){t&&Q(e)?n[a]=q(e,t):n[a]=e}),{allOwnKeys:o}),n},trim:function(n){return n.trim?n.trim():n.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},stripBOM:function(n){return 65279===n.charCodeAt(0)&&(n=n.slice(1)),n},inherits:function(n,e,t,a){n.prototype=Object.create(e.prototype,a),n.prototype.constructor=n,Object.defineProperty(n,"super",{value:e.prototype}),t&&Object.assign(n.prototype,t)},toFlatObject:function(n,e,t,a){var o,r,i,l={};if(e=e||{},null==n)return e;do{for(r=(o=Object.getOwnPropertyNames(n)).length;r-- >0;)i=o[r],a&&!a(i,n,e)||l[i]||(e[i]=n[i],l[i]=!0);n=!1!==t&&P(n)}while(n&&(!t||t(n,e))&&n!==Object.prototype);return e},kindOf:R,kindOfTest:Y,endsWith:function(n,e,t){n=String(n),(void 0===t||t>n.length)&&(t=n.length),t-=e.length;var a=n.indexOf(e,t);return-1!==a&&a===t},toArray:function(n){if(!n)return null;if(F(n))return n;var e=n.length;if(!H(e))return null;for(var t=new Array(e);e-- >0;)t[e]=n[e];return t},forEachEntry:function(n,e){for(var t,a=(n&&n[Symbol.iterator]).call(n);(t=a.next())&&!t.done;){var o=t.value;e.call(n,o[0],o[1])}},matchAll:function(n,e){for(var t,a=[];null!==(t=n.exec(e));)a.push(t);return a},isHTMLForm:ln,hasOwnProperty:sn,hasOwnProp:sn,reduceDescriptors:dn,freezeMethods:function(n){dn(n,(function(e,t){if(Q(n)&&-1!==["arguments","caller","callee"].indexOf(t))return!1;var a=n[t];Q(a)&&(e.enumerable=!1,"writable"in e?e.writable=!1:e.set||(e.set=function(){throw Error("Can not rewrite read-only method '"+t+"'")}))}))},toObjectSet:function(n,e){var t={},a=function(n){n.forEach((function(n){t[n]=!0}))};return F(n)?a(n):a(String(n).split(e)),t},toCamelCase:function(n){return n.toLowerCase().replace(/[_-\s]([a-z\d])(\w*)/g,(function(n,e,t){return e.toUpperCase()+t}))},noop:function(){},toFiniteNumber:function(n,e){return n=+n,Number.isFinite(n)?n:e},findKey:nn,global:an,isContextDefined:on,toJSONObject:function(n){var e=new Array(10);return function n(t,a){if(_(t)){if(e.indexOf(t)>=0)return;if(!("toJSON"in t)){e[a]=t;var o=F(t)?[]:{};return $(t,(function(e,t){var r=n(e,a+1);!W(r)&&(o[t]=r)})),e[a]=void 0,o}}return t}(n,0)}};function An(n,e,t,a,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=n,this.name="AxiosError",e&&(this.code=e),t&&(this.config=t),a&&(this.request=a),o&&(this.response=o)}cn.inherits(An,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:cn.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var un=An.prototype,yn={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((function(n){yn[n]={value:n}})),Object.defineProperties(An,yn),Object.defineProperty(un,"isAxiosError",{value:!0}),An.from=function(n,e,t,a,o,r){var i=Object.create(un);return cn.toFlatObject(n,i,(function(n){return n!==Error.prototype}),(function(n){return"isAxiosError"!==n})),An.call(i,n.message,e,t,a,o),i.cause=n,i.name=n.name,r&&Object.assign(i,r),i};const mn=An,hn=t(937);function fn(n){return fn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},fn(n)}function bn(n){return cn.isPlainObject(n)||cn.isArray(n)}function gn(n){return cn.endsWith(n,"[]")?n.slice(0,-2):n}function vn(n,e,t){return n?n.concat(e).map((function(n,e){return n=gn(n),!t&&e?"["+n+"]":n})).join(t?".":""):e}var xn=cn.toFlatObject(cn,{},null,(function(n){return/^is[A-Z]/.test(n)}));const En=function(n,e,t){if(!cn.isObject(n))throw new TypeError("target must be an object");e=e||new(hn||FormData);var a,o=(t=cn.toFlatObject(t,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(n,e){return!cn.isUndefined(e[n])}))).metaTokens,r=t.visitor||d,i=t.dots,l=t.indexes,s=(t.Blob||"undefined"!=typeof Blob&&Blob)&&(a=e)&&cn.isFunction(a.append)&&"FormData"===a[Symbol.toStringTag]&&a[Symbol.iterator];if(!cn.isFunction(r))throw new TypeError("visitor must be a function");function p(n){if(null===n)return"";if(cn.isDate(n))return n.toISOString();if(!s&&cn.isBlob(n))throw new mn("Blob is not supported. Use a Buffer instead.");return cn.isArrayBuffer(n)||cn.isTypedArray(n)?s&&"function"==typeof Blob?new Blob([n]):Buffer.from(n):n}function d(n,t,a){var r=n;if(n&&!a&&"object"===fn(n))if(cn.endsWith(t,"{}"))t=o?t:t.slice(0,-2),n=JSON.stringify(n);else if(cn.isArray(n)&&function(n){return cn.isArray(n)&&!n.some(bn)}(n)||cn.isFileList(n)||cn.endsWith(t,"[]")&&(r=cn.toArray(n)))return t=gn(t),r.forEach((function(n,a){!cn.isUndefined(n)&&null!==n&&e.append(!0===l?vn([t],a,i):null===l?t:t+"[]",p(n))})),!1;return!!bn(n)||(e.append(vn(a,t,i),p(n)),!1)}var c=[],A=Object.assign(xn,{defaultVisitor:d,convertValue:p,isVisitable:bn});if(!cn.isObject(n))throw new TypeError("data must be an object");return function n(t,a){if(!cn.isUndefined(t)){if(-1!==c.indexOf(t))throw Error("Circular reference detected in "+a.join("."));c.push(t),cn.forEach(t,(function(t,o){!0===(!(cn.isUndefined(t)||null===t)&&r.call(e,t,cn.isString(o)?o.trim():o,a,A))&&n(t,a?a.concat(o):[o])})),c.pop()}}(n),e};function wn(n){var e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(n).replace(/[!'()~]|%20|%00/g,(function(n){return e[n]}))}function Cn(n,e){this._pairs=[],n&&En(n,this,e)}var kn=Cn.prototype;kn.append=function(n,e){this._pairs.push([n,e])},kn.toString=function(n){var e=n?function(e){return n.call(this,e,wn)}:wn;return this._pairs.map((function(n){return e(n[0])+"="+e(n[1])}),"").join("&")};const Bn=Cn;function Sn(n){return encodeURIComponent(n).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function In(n,e,t){if(!e)return n;var a,o=t&&t.encode||Sn,r=t&&t.serialize;if(a=r?r(e,t):cn.isURLSearchParams(e)?e.toString():new Bn(e,t).toString(o)){var i=n.indexOf("#");-1!==i&&(n=n.slice(0,i)),n+=(-1===n.indexOf("?")?"?":"&")+a}return n}function Ln(n){return Ln="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Ln(n)}function zn(n,e){for(var t=0;t=n.length;return r=!r&&cn.isArray(a)?a.length:r,l?(cn.hasOwnProp(a,r)?a[r]=[a[r],t]:a[r]=t,!i):(a[r]&&cn.isObject(a[r])||(a[r]=[]),e(n,t,a[r],o)&&cn.isArray(a[r])&&(a[r]=function(n){var e,t,a={},o=Object.keys(n),r=o.length;for(e=0;e-1,r=cn.isObject(n);if(r&&cn.isHTMLForm(n)&&(n=new FormData(n)),cn.isFormData(n))return o&&o?JSON.stringify(Fn(n)):n;if(cn.isArrayBuffer(n)||cn.isBuffer(n)||cn.isStream(n)||cn.isFile(n)||cn.isBlob(n))return n;if(cn.isArrayBufferView(n))return n.buffer;if(cn.isURLSearchParams(n))return e.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),n.toString();if(r){if(a.indexOf("application/x-www-form-urlencoded")>-1)return function(n,e){return En(n,new Mn.classes.URLSearchParams,Object.assign({visitor:function(n,e,t,a){return Mn.isNode&&cn.isBuffer(n)?(this.append(e,n.toString("base64")),!1):a.defaultVisitor.apply(this,arguments)}},e))}(n,this.formSerializer).toString();if((t=cn.isFileList(n))||a.indexOf("multipart/form-data")>-1){var i=this.env&&this.env.FormData;return En(t?{"files[]":n}:n,i&&new i,this.formSerializer)}}return r||o?(e.setContentType("application/json",!1),function(n,e,t){if(cn.isString(n))try{return(0,JSON.parse)(n),cn.trim(n)}catch(n){if("SyntaxError"!==n.name)throw n}return(0,JSON.stringify)(n)}(n)):n}],transformResponse:[function(n){var e=this.transitional||Un.transitional,t=e&&e.forcedJSONParsing,a="json"===this.responseType;if(n&&cn.isString(n)&&(t&&!this.responseType||a)){var o=!(e&&e.silentJSONParsing)&&a;try{return JSON.parse(n)}catch(n){if(o){if("SyntaxError"===n.name)throw mn.from(n,mn.ERR_BAD_RESPONSE,this,null,this.response);throw n}}}return n}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Mn.classes.FormData,Blob:Mn.classes.Blob},validateStatus:function(n){return n>=200&&n<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};cn.forEach(["delete","get","head"],(function(n){Un.headers[n]={}})),cn.forEach(["post","put","patch"],(function(n){Un.headers[n]=cn.merge(Wn)}));const Nn=Un;var Qn=cn.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);function Hn(n){return Hn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Hn(n)}function _n(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,a=new Array(e);t1?t-1:0),o=1;o0;){var r=a[o],i=e[r];if(i){var l=n[r],s=void 0===l||i(l,r,n);if(!0!==s)throw new mn("option "+r+" must be "+s,mn.ERR_BAD_OPTION_VALUE)}else if(!0!==t)throw new mn("Unknown option "+r,mn.ERR_BAD_OPTION)}},validators:me};function be(n){return be="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},be(n)}function ge(n,e){for(var t=0;t0;)a._listeners[e](n);a._listeners=null}})),this.promise.then=function(n){var e,t=new Promise((function(n){a.subscribe(n),e=n})).then(n);return t.cancel=function(){a.unsubscribe(e)},t},e((function(n,e,o){a.reason||(a.reason=new ae(n,e,o),t(a.reason))}))}var e,t,a;return e=n,t=[{key:"throwIfRequested",value:function(){if(this.reason)throw this.reason}},{key:"subscribe",value:function(n){this.reason?n(this.reason):this._listeners?this._listeners.push(n):this._listeners=[n]}},{key:"unsubscribe",value:function(n){if(this._listeners){var e=this._listeners.indexOf(n);-1!==e&&this._listeners.splice(e,1)}}}],a=[{key:"source",value:function(){var e;return{token:new n((function(n){e=n})),cancel:e}}}],t&&Ce(e.prototype,t),a&&Ce(e,a),Object.defineProperty(e,"prototype",{writable:!1}),n}();const Be=ke;function Se(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,a=new Array(e);tparseFloat(e.time);)t.push(e),e=this.dan[++this.danIndex];this.draw(t)}window.requestAnimationFrame((function(){n.frame()}))}},{key:"opacity",value:function(n){if(void 0!==n){for(var e=this.container.getElementsByClassName("dplayer-danmaku-item"),t=0;t').concat(n[c].text,""):o.innerHTML=n[c].text,o.style.opacity=e._opacity,o.style.color=T.number2Color(n[c].color),o.addEventListener("animationend",(function(){e.container.removeChild(o)}));var r,i=e._measure(n[c].text);switch(n[c].type){case"right":(r=s(o,n[c].type,i))>=0&&(o.style.width=i+1+"px",o.style.top=t*r+"px",o.style.transform="translateX(-".concat(a,"px)"));break;case"top":(r=s(o,n[c].type))>=0&&(o.style.top=t*r+"px");break;case"bottom":(r=s(o,n[c].type))>=0&&(o.style.bottom=t*r+"px");break;default:console.error("Can't handled danmaku type: ".concat(n[c].type))}r>=0&&(o.classList.add("dplayer-danmaku-move"),o.style.animationDuration=e._danAnimation(n[c].type),p.appendChild(o))},c=0;c=this.options.time()){this.danIndex=n;break}this.danIndex=this.dan.length}}},{key:"clear",value:function(){this.danTunnel={right:{},top:{},bottom:{}},this.danIndex=0,this.options.container.innerHTML="",this.events&&this.events.trigger("danmaku_clear")}},{key:"htmlEncode",value:function(n){return n.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")}},{key:"resize",value:function(){for(var n=this.container.offsetWidth,e=this.container.getElementsByClassName("dplayer-danmaku-item"),t=0;t0&&void 0!==arguments[0]?arguments[0]:"browser";switch(n){case"browser":return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;case"web":return this.player.container.classList.contains("dplayer-fulled")}}},{key:"request",value:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"browser",e="browser"===n?"web":"browser",t=this.isFullScreen(e);switch(t||(this.lastScrollPosition=T.getScrollPosition()),n){case"browser":this.player.container.requestFullscreen?this.player.container.requestFullscreen():this.player.container.mozRequestFullScreen?this.player.container.mozRequestFullScreen():this.player.container.webkitRequestFullscreen?this.player.container.webkitRequestFullscreen():this.player.video.webkitEnterFullscreen?this.player.video.webkitEnterFullscreen():this.player.video.webkitEnterFullScreen?this.player.video.webkitEnterFullScreen():this.player.container.msRequestFullscreen&&this.player.container.msRequestFullscreen();break;case"web":this.player.container.classList.add("dplayer-fulled"),document.body.classList.add("dplayer-web-fullscreen-fix"),this.player.events.trigger("webfullscreen")}t&&this.cancel(e)}},{key:"cancel",value:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"browser";switch(n){case"browser":document.cancelFullScreen?document.cancelFullScreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen?document.webkitCancelFullScreen():document.webkitCancelFullscreen?document.webkitCancelFullscreen():document.msCancelFullScreen?document.msCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen();break;case"web":this.player.container.classList.remove("dplayer-fulled"),document.body.classList.remove("dplayer-web-fullscreen-fix"),this.player.events.trigger("webfullscreen_cancel")}}},{key:"toggle",value:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"browser";this.isFullScreen(n)?this.cancel(n):this.request(n)}},{key:"destroy",value:function(){/Firefox/.test(navigator.userAgent)?(document.removeEventListener("mozfullscreenchange",this.docfullscreenchange),document.removeEventListener("fullscreenchange",this.docfullscreenchange)):(this.player.container.removeEventListener("fullscreenchange",this.fullscreenchange),this.player.container.removeEventListener("webkitfullscreenchange",this.fullscreenchange),document.removeEventListener("msfullscreenchange",this.docfullscreenchange),document.removeEventListener("MSFullscreenChange",this.docfullscreenchange))}}],t&&jt(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),n}();const Pt=Dt;function Rt(n){return Rt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Rt(n)}function Yt(n,e){for(var t=0;t".concat(n,"

")})).join("");n.container.innerHTML=o}n.events.trigger("subtitle_change")}}}},{key:"show",value:function(){this.container.classList.remove("dplayer-subtitle-hide"),this.events.trigger("subtitle_show")}},{key:"hide",value:function(){this.container.classList.add("dplayer-subtitle-hide"),this.events.trigger("subtitle_hide")}},{key:"toggle",value:function(){this.container.classList.contains("dplayer-subtitle-hide")?this.show():this.hide()}}],t&&Ut(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),n}();const Qt=Nt;function Ht(n){return Ht="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Ht(n)}function _t(n,e){for(var t=0;t

",t.player.template.subtrack.src=t.player.template.subtitlesItem[n].dataset.subtitle,t.player.options.subtitle.index=n,t.player.template.subtitle.classList.contains("dplayer-subtitle-hide")&&t.subContainerShow())}))},r=0;r

",t.player.template.subtrack.src="",t.player.options.subtitle.index=a,t.subContainerHide())}))}var e,t;return e=n,(t=[{key:"subContainerShow",value:function(){this.player.template.subtitle.classList.remove("dplayer-subtitle-hide"),this.player.events.trigger("subtitle_show")}},{key:"subContainerHide",value:function(){this.player.template.subtitle.classList.add("dplayer-subtitle-hide"),this.player.events.trigger("subtitle_hide")}},{key:"hide",value:function(){this.player.template.subtitlesBox.classList.remove("dplayer-subtitles-box-open"),this.player.template.mask.classList.remove("dplayer-mask-show"),this.player.controller.disableAutoHide=!1}},{key:"show",value:function(){this.player.template.subtitlesBox.classList.add("dplayer-subtitles-box-open"),this.player.template.mask.classList.add("dplayer-mask-show"),this.player.controller.disableAutoHide=!0}},{key:"adaptiveHeight",value:function(){var n=30*this.player.template.subtitlesItem.length+14,e=.8*this.player.template.videoWrap.offsetHeight;n>=e-50?(this.player.template.subtitlesBox.style.bottom="8px",this.player.template.subtitlesBox.style["max-height"]=e-8+"px"):(this.player.template.subtitlesBox.style.bottom="50px",this.player.template.subtitlesBox.style["max-height"]=e-50+"px")}}])&&_t(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),n}();const Zt=Kt;function Vt(n){return Vt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Vt(n)}function Xt(n,e){for(var t=0;te&&!n.player.video.paused&&(n.player.container.classList.remove("dplayer-loading"),a=!1),e=t)}),100)}},{key:"initfpsChecker",value:function(){var n=this;window.requestAnimationFrame((function(){if(n.enablefpsChecker)if(n.initfpsChecker(),n.fpsStart){n.fpsIndex++;var e=new Date;e-n.fpsStart>1e3&&(n.player.infoPanel.fps(n.fpsIndex/(e-n.fpsStart)*1e3),n.fpsStart=new Date,n.fpsIndex=0)}else n.fpsStart=new Date,n.fpsIndex=0;else n.fpsStart=0,n.fpsIndex=0}))}},{key:"initinfoChecker",value:function(){var n=this;this.infoChecker=setInterval((function(){n.enableinfoChecker&&n.player.infoPanel.update()}),1e3)}},{key:"enable",value:function(n){this["enable".concat(n,"Checker")]=!0,"fps"===n&&this.initfpsChecker()}},{key:"disable",value:function(n){this["enable".concat(n,"Checker")]=!1}},{key:"destroy",value:function(){var n=this;this.types.map((function(e){return n["enable".concat(e,"Checker")]=!1,n["".concat(e,"Checker")]&&clearInterval(n["".concat(e,"Checker")]),e}))}}])&&na(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),n}();const ta=ea;function aa(n){return aa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},aa(n)}function oa(n,e){for(var t=0;t'+n.player.options.highlight[t].text+"",n.player.template.playedBarWrap.insertBefore(a,n.player.template.playedBarTime)}}}))}},{key:"initThumbnails",value:function(){var n=this;this.player.options.video.thumbnails&&(this.thumbnails=new pa({container:this.player.template.barPreview,barWidth:this.player.template.barWrap.offsetWidth,url:this.player.options.video.thumbnails,events:this.player.events}),this.player.on("loadedmetadata",(function(){n.thumbnails.resize(160,n.player.video.videoHeight/n.player.video.videoWidth*160,n.player.template.barWrap.offsetWidth)})))}},{key:"initPlayedBar",value:function(){var n=this,e=function(e){var t=((e.clientX||e.changedTouches[0].clientX)-T.getBoundingClientRectViewLeft(n.player.template.playedBarWrap))/n.player.template.playedBarWrap.clientWidth;t=Math.max(t,0),t=Math.min(t,1),n.player.bar.set("played",t,"width"),n.player.template.ptime.innerHTML=T.secondToTime(t*n.player.video.duration)},t=function t(a){document.removeEventListener(T.nameMap.dragEnd,t),document.removeEventListener(T.nameMap.dragMove,e);var o=((a.clientX||a.changedTouches[0].clientX)-T.getBoundingClientRectViewLeft(n.player.template.playedBarWrap))/n.player.template.playedBarWrap.clientWidth;o=Math.max(o,0),o=Math.min(o,1),n.player.bar.set("played",o,"width"),n.player.seek(n.player.bar.get("played")*n.player.video.duration),n.player.timer.enable("progress")};this.player.template.playedBarWrap.addEventListener(T.nameMap.dragStart,(function(){n.player.timer.disable("progress"),document.addEventListener(T.nameMap.dragMove,e),document.addEventListener(T.nameMap.dragEnd,t)})),this.player.template.playedBarWrap.addEventListener(T.nameMap.dragMove,(function(e){if(n.player.video.duration){var t=n.player.template.playedBarWrap.getBoundingClientRect().left,a=(e.clientX||e.changedTouches[0].clientX)-t;if(a<0||a>n.player.template.playedBarWrap.offsetWidth)return;var o=n.player.video.duration*(a/n.player.template.playedBarWrap.offsetWidth);T.isMobile&&n.thumbnails&&n.thumbnails.show(),n.thumbnails&&n.thumbnails.move(a),n.player.template.playedBarTime.style.left="".concat(a-(o>=3600?25:20),"px"),n.player.template.playedBarTime.innerText=T.secondToTime(o),n.player.template.playedBarTime.classList.remove("hidden")}})),this.player.template.playedBarWrap.addEventListener(T.nameMap.dragEnd,(function(){T.isMobile&&n.thumbnails&&n.thumbnails.hide()})),T.isMobile||(this.player.template.playedBarWrap.addEventListener("mouseenter",(function(){n.player.video.duration&&(n.thumbnails&&n.thumbnails.show(),n.player.template.playedBarTime.classList.remove("hidden"))})),this.player.template.playedBarWrap.addEventListener("mouseleave",(function(){n.player.video.duration&&(n.thumbnails&&n.thumbnails.hide(),n.player.template.playedBarTime.classList.add("hidden"))})))}},{key:"initFullButton",value:function(){var n=this;this.player.template.browserFullButton.addEventListener("click",(function(){n.player.fullScreen.toggle("browser")})),this.player.template.webFullButton.addEventListener("click",(function(){n.player.fullScreen.toggle("web")}))}},{key:"initVolumeButton",value:function(){var n=this,e=function(e){var t=e||window.event,a=((t.clientX||t.changedTouches[0].clientX)-T.getBoundingClientRectViewLeft(n.player.template.volumeBarWrap)-5.5)/35;n.player.volume(a)},t=function t(){document.removeEventListener(T.nameMap.dragEnd,t),document.removeEventListener(T.nameMap.dragMove,e),n.player.template.volumeButton.classList.remove("dplayer-volume-active")};this.player.template.volumeBarWrapWrap.addEventListener("click",(function(e){var t=e||window.event,a=((t.clientX||t.changedTouches[0].clientX)-T.getBoundingClientRectViewLeft(n.player.template.volumeBarWrap)-5.5)/35;n.player.volume(a)})),this.player.template.volumeBarWrapWrap.addEventListener(T.nameMap.dragStart,(function(){document.addEventListener(T.nameMap.dragMove,e),document.addEventListener(T.nameMap.dragEnd,t),n.player.template.volumeButton.classList.add("dplayer-volume-active")})),this.player.template.volumeButtonIcon.addEventListener("click",(function(){n.player.video.muted?(n.player.video.muted=!1,n.player.switchVolumeIcon(),n.player.bar.set("volume",n.player.volume(),"width")):(n.player.video.muted=!0,n.player.template.volumeIcon.innerHTML=gt.volumeOff,n.player.bar.set("volume",0,"width"))}))}},{key:"initQualityButton",value:function(){var n=this;this.player.options.video.quality&&this.player.template.qualityList.addEventListener("click",(function(e){e.target.classList.contains("dplayer-quality-item")&&n.player.switchQuality(e.target.dataset.index)}))}},{key:"initScreenshotButton",value:function(){var n=this;this.player.options.screenshot&&this.player.template.camareButton.addEventListener("click",(function(){var e,t=document.createElement("canvas");t.width=n.player.video.videoWidth,t.height=n.player.video.videoHeight,t.getContext("2d").drawImage(n.player.video,0,0,t.width,t.height),t.toBlob((function(t){e=URL.createObjectURL(t);var a=document.createElement("a");a.href=e,a.download="DPlayer.png",a.style.display="none",document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(e),n.player.events.trigger("screenshot",e)}))}))}},{key:"initAirplayButton",value:function(){this.player.options.airplay&&(window.WebKitPlaybackTargetAvailabilityEvent?this.player.video.addEventListener("webkitplaybacktargetavailabilitychanged",function(n){"available"===n.availability?this.template.airplayButton.disable=!1:this.template.airplayButton.disable=!0,this.template.airplayButton.addEventListener("click",function(){this.video.webkitShowPlaybackTargetPicker()}.bind(this))}.bind(this.player)):this.player.template.airplayButton.style.display="none")}},{key:"initChromecast",value:function(){var n=window.document.createElement("script");n.setAttribute("type","text/javascript"),n.setAttribute("src","https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1"),window.document.body.appendChild(n),window.__onGCastApiAvailable=function(n){if(n){var e=new(Aa=window.chrome.cast).SessionRequest(Aa.media.DEFAULT_MEDIA_RECEIVER_APP_ID),t=new Aa.ApiConfig(e,(function(){}),(function(n){n===Aa.ReceiverAvailability.AVAILABLE&&console.log("chromecast: ",n)}));Aa.initialize(t,(function(){}))}}}},{key:"initChromecastButton",value:function(){var n=this;if(this.player.options.chromecast){ua&&(ua=!1,this.initChromecast());var e=function(e,t){n.currentMedia=t},t=function(n){console.error("Error launching media",n)};this.player.template.chromecastButton.addEventListener("click",(function(){ya?(ya=!1,n.currentMedia.stop(),n.session.stop(),n.initChromecast()):(ya=!0,Aa.requestSession((function(a){var o,r,i;n.session=a,o=n.player.options.video.url,r=new Aa.media.MediaInfo(o),i=new Aa.media.LoadRequest(r),n.session?n.session.loadMedia(i,e.bind(n,"loadMedia"),t).play():window.open(o)}),(function(e){"cancel"===e.code?n.session=void 0:console.error("Error selecting a cast device",e)})))}))}}},{key:"initSubtitleButton",value:function(){var n=this;this.player.events.on("subtitle_show",(function(){n.player.template.subtitleButton.dataset.balloon=n.player.tran("hide-subs"),n.player.template.subtitleButtonInner.style.opacity="",n.player.user.set("subtitle",1)})),this.player.events.on("subtitle_hide",(function(){n.player.template.subtitleButton.dataset.balloon=n.player.tran("show-subs"),n.player.template.subtitleButtonInner.style.opacity="0.4",n.player.user.set("subtitle",0)})),this.player.template.subtitleButton.addEventListener("click",(function(){n.player.subtitle.toggle()}))}},{key:"setAutoHide",value:function(){var n=this;this.show(),clearTimeout(this.autoHideTimer),this.autoHideTimer=setTimeout((function(){!n.player.video.played.length||n.player.paused||n.disableAutoHide||n.hide()}),3e3)}},{key:"show",value:function(){this.player.container.classList.remove("dplayer-hide-controller")}},{key:"hide",value:function(){this.player.container.classList.add("dplayer-hide-controller"),this.player.setting.hide(),this.player.comment&&this.player.comment.hide()}},{key:"isShow",value:function(){return!this.player.container.classList.contains("dplayer-hide-controller")}},{key:"toggle",value:function(){this.isShow()?this.hide():this.show()}},{key:"destroy",value:function(){T.isMobile||(this.player.container.removeEventListener("mousemove",this.setAutoHideHandler),this.player.container.removeEventListener("click",this.setAutoHideHandler)),clearTimeout(this.autoHideTimer)}}])&&ca(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),n}();const ha=ma;function fa(n){return fa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},fa(n)}function ba(n,e){for(var t=0;t=t.width?(this.player.template.menu.style.right=t.width-n+"px",this.player.template.menu.style.left="initial"):(this.player.template.menu.style.left=n+"px",this.player.template.menu.style.right="initial"),e+this.player.template.menu.offsetHeight>=t.height?(this.player.template.menu.style.bottom=t.height-e+"px",this.player.template.menu.style.top="initial"):(this.player.template.menu.style.top=e+"px",this.player.template.menu.style.bottom="initial"),this.player.template.mask.classList.add("dplayer-mask-show"),this.shown=!0,this.player.events.trigger("contextmenu_show")}},{key:"hide",value:function(){this.player.template.mask.classList.remove("dplayer-mask-show"),this.player.template.menu.classList.remove("dplayer-menu-show"),this.shown=!1,this.player.events.trigger("contextmenu_hide")}},{key:"destroy",value:function(){this.player.container.removeEventListener("contextmenu",this.contextmenuHandler)}}])&&za(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),n}();const qa=Ta;function Oa(n){return Oa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Oa(n)}function ja(n,e){for(var t=0;tthis.options.subtitle.url.length-1)&&(this.options.subtitle.index=this.options.subtitle.url.findIndex((function(n){return n.lang===t.options.lang}))),-1===this.options.subtitle.index&&(this.options.subtitle.index=this.options.subtitle.url.length-1)),this.template=new kt({container:this.container,options:this.options,index:Qa,tran:this.tran}),this.video=this.template.video,this.bar=new Gt(this.template),this.bezel=new ra(this.template.bezel),this.fullScreen=new Pt(this),this.controller=new ha(this),this.options.danmaku&&(this.danmaku=new Lt({player:this,container:this.template.danmaku,opacity:this.user.get("opacity"),callback:function(){setTimeout((function(){t.template.danmakuLoading.style.display="none",t.options.autoplay&&t.play()}),0)},error:function(n){t.notice(n)},apiBackend:this.options.apiBackend,borderColor:this.options.theme,height:this.arrow?24:30,time:function(){return t.video.currentTime},unlimited:this.user.get("unlimited"),api:{id:this.options.danmaku.id,address:this.options.danmaku.api,token:this.options.danmaku.token,maximum:this.options.danmaku.maximum,addition:this.options.danmaku.addition,user:this.options.danmaku.user,speedRate:this.options.danmaku.speedRate},events:this.events,tran:function(n){return t.tran(n)}}),this.comment=new Ca(this)),this.setting=new va(this),this.plugins={},this.docClickFun=function(){t.focus=!1},this.containerClickFun=function(){t.focus=!0},document.addEventListener("click",this.docClickFun,!0),this.container.addEventListener("click",this.containerClickFun,!0),this.paused=!0,this.timer=new ta(this),this.hotkey=new Ia(this),this.contextmenu=new qa(this),this.initVideo(this.video,this.quality&&this.quality.type||this.options.video.type),this.infoPanel=new Pa(this),!this.danmaku&&this.options.autoplay&&this.play(),Qa++,Ha.push(this)}var e,t,a;return e=n,t=[{key:"seek",value:function(n){n=Math.max(n,0),this.video.duration&&(n=Math.min(n,this.video.duration)),this.video.currentTimen&&this.notice("".concat(this.tran("rew").replace("%s",(this.video.currentTime-n).toFixed(0)))),this.video.currentTime=n,this.danmaku&&this.danmaku.seek(),this.bar.set("played",n/this.video.duration,"width"),this.template.ptime.innerHTML=T.secondToTime(n)}},{key:"play",value:function(n){var e=this;if(this.paused=!1,this.video.paused&&!T.isMobile&&this.bezel.switch(gt.play),this.template.playButton.innerHTML=gt.pause,this.template.mobilePlayButton.innerHTML=gt.pause,n||L.resolve(this.video.play()).catch((function(){e.pause()})).then((function(){})),this.timer.enable("loading"),this.container.classList.remove("dplayer-paused"),this.container.classList.add("dplayer-playing"),this.danmaku&&this.danmaku.play(),this.options.mutex)for(var t=0;t=.95?this.template.volumeIcon.innerHTML=gt.volumeUp:this.volume()>0?this.template.volumeIcon.innerHTML=gt.volumeDown:this.template.volumeIcon.innerHTML=gt.volumeOff}},{key:"volume",value:function(n,e,t){if(n=parseFloat(n),!isNaN(n)){n=Math.max(n,0),n=Math.min(n,1),this.bar.set("volume",n,"width");var a="".concat((100*n).toFixed(0),"%");this.template.volumeBarWrapWrap.dataset.balloon=a,e||this.user.set("volume",n),t||this.notice("".concat(this.tran("volume")," ").concat((100*n).toFixed(0),"%"),void 0,void 0,"volume"),this.video.volume=n,this.video.muted&&(this.video.muted=!1),this.switchVolumeIcon()}return this.video.volume}},{key:"toggle",value:function(){this.video.paused?this.play():this.pause()}},{key:"on",value:function(n,e){this.events.on(n,e)}},{key:"switchVideo",value:function(n,e){this.pause(),this.video.poster=n.pic?n.pic:"",this.video.src=n.url,this.initMSE(this.video,n.type||"auto"),e&&(this.template.danmakuLoading.style.display="block",this.bar.set("played",0,"width"),this.bar.set("loaded",0,"width"),this.template.ptime.innerHTML="00:00",this.template.danmaku.innerHTML="",this.danmaku&&this.danmaku.reload({id:e.id,address:e.api,token:e.token,maximum:e.maximum,addition:e.addition,user:e.user}))}},{key:"initMSE",value:function(n,e){var t=this;if(this.type=e,this.options.video.customType&&this.options.video.customType[e])"[object Function]"===Object.prototype.toString.call(this.options.video.customType[e])?this.options.video.customType[e](this.video,this):console.error("Illegal customType: ".concat(e));else switch("auto"===this.type&&(/m3u8(#|\?|$)/i.exec(n.src)?this.type="hls":/.flv(#|\?|$)/i.exec(n.src)?this.type="flv":/.mpd(#|\?|$)/i.exec(n.src)?this.type="dash":this.type="normal"),"hls"===this.type&&(n.canPlayType("application/x-mpegURL")||n.canPlayType("application/vnd.apple.mpegURL"))&&(this.type="normal"),this.type){case"hls":if(window.Hls)if(window.Hls.isSupported()){var a=this.options.pluginOptions.hls,o=new window.Hls(a);this.plugins.hls=o,o.loadSource(n.src),o.attachMedia(n),this.events.on("destroy",(function(){o.destroy(),delete t.plugins.hls}))}else this.notice("Error: Hls is not supported.");else this.notice("Error: Can't find Hls.");break;case"flv":if(window.flvjs)if(window.flvjs.isSupported()){var r=window.flvjs.createPlayer(Object.assign(this.options.pluginOptions.flv.mediaDataSource||{},{type:"flv",url:n.src}),this.options.pluginOptions.flv.config);this.plugins.flvjs=r,r.attachMediaElement(n),r.load(),this.events.on("destroy",(function(){r.unload(),r.detachMediaElement(),r.destroy(),delete t.plugins.flvjs}))}else this.notice("Error: flvjs is not supported.");else this.notice("Error: Can't find flvjs.");break;case"dash":if(window.dashjs){var i=window.dashjs.MediaPlayer().create().initialize(n,n.src,!1),l=this.options.pluginOptions.dash;i.updateSettings(l),this.plugins.dash=i,this.events.on("destroy",(function(){window.dashjs.MediaPlayer().reset(),delete t.plugins.dash}))}else this.notice("Error: Can't find dashjs.");break;case"webtorrent":if(window.WebTorrent)if(window.WebTorrent.WEBRTC_SUPPORT){this.container.classList.add("dplayer-loading");var s=this.options.pluginOptions.webtorrent,p=new window.WebTorrent(s);this.plugins.webtorrent=p;var d=n.src;n.src="",n.preload="metadata",n.addEventListener("durationchange",(function(){return t.container.classList.remove("dplayer-loading")}),{once:!0}),p.add(d,(function(n){n.files.find((function(n){return n.name.endsWith(".mp4")})).renderTo(t.video,{autoplay:t.options.autoplay,controls:!1})})),this.events.on("destroy",(function(){p.remove(d),p.destroy(),delete t.plugins.webtorrent}))}else this.notice("Error: Webtorrent is not supported.");else this.notice("Error: Can't find Webtorrent.")}}},{key:"initVideo",value:function(n,e){var t=this;this.initMSE(n,e),this.on("durationchange",(function(){1!==n.duration&&n.duration!==1/0&&(t.template.dtime.innerHTML=T.secondToTime(n.duration))})),this.on("progress",(function(){var e=n.buffered.length?n.buffered.end(n.buffered.length-1)/n.duration:0;t.bar.set("loaded",e,"width")})),this.on("error",(function(){t.video.error&&t.tran&&t.notice&&"webtorrent"!==t.type&&t.notice(t.tran("video-failed"))})),this.on("ended",(function(){t.bar.set("played",1,"width"),t.setting.loop?(t.seek(0),t.play()):t.pause(),t.danmaku&&(t.danmaku.danIndex=0)})),this.on("play",(function(){t.paused&&t.play(!0)})),this.on("pause",(function(){t.paused||t.pause(!0)})),this.on("timeupdate",(function(){t.bar.set("played",t.video.currentTime/t.video.duration,"width");var n=T.secondToTime(t.video.currentTime);t.template.ptime.innerHTML!==n&&(t.template.ptime.innerHTML=n)}));for(var a=function(e){n.addEventListener(t.events.videoEvents[e],(function(n){t.events.trigger(t.events.videoEvents[e],n)}))},o=0;o1&&void 0!==arguments[1]?arguments[1]:2e3,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.8,i=arguments.length>3?arguments[3]:void 0;if(i&&((e=document.getElementById("dplayer-notice-".concat(i)))&&(e.innerHTML=n),this.noticeList[i]&&(clearTimeout(this.noticeList[i]),this.noticeList[i]=null)),!e){var l=kt.NewNotice(n,r,i);this.template.noticeList.appendChild(l),e=l}this.events.trigger("notice_show",e),o>0&&(this.noticeList[i]=setTimeout((t=e,a=this,function(){t.addEventListener("animationend",(function(){a.template.noticeList.removeChild(t)})),t.classList.add("remove-notice"),a.events.trigger("notice_hide"),a.noticeList[i]=null}),o))}},{key:"resize",value:function(){this.danmaku&&this.danmaku.resize(),this.controller.thumbnails&&this.controller.thumbnails.resize(160,this.video.videoHeight/this.video.videoWidth*160,this.template.barWrap.offsetWidth),this.events.trigger("resize")}},{key:"speed",value:function(n){this.video.playbackRate=n}},{key:"destroy",value:function(){Ha.splice(Ha.indexOf(this),1),this.pause(),document.removeEventListener("click",this.docClickFun,!0),this.container.removeEventListener("click",this.containerClickFun,!0),this.fullScreen.destroy(),this.hotkey.destroy(),this.contextmenu.destroy(),this.controller.destroy(),this.timer.destroy(),this.video.src="",this.container.innerHTML="",this.events.trigger("destroy")}}],a=[{key:"version",get:function(){return"1.27.1"}}],t&&Ua(e.prototype,t),a&&Ua(e,a),Object.defineProperty(e,"prototype",{writable:!1}),n}();const Ka=_a;console.log("\n".concat(" %c DPlayer v","1.27.1"," ").concat("v1.27.0-12-g4f61091"," %c https://dplayer.diygod.dev ","\n","\n"),"color: #fadfa3; background: #030307; padding:5px 0;","background: #fadfa3; padding:5px 0;");const Za=Ka})(),a.default})())); +//# sourceMappingURL=DPlayer.min.js.map \ No newline at end of file diff --git a/assets/jsmap/demo1.html b/assets/jsmap/demo1.html new file mode 100644 index 0000000..5ecb328 --- /dev/null +++ b/assets/jsmap/demo1.html @@ -0,0 +1,39 @@ + + + + + + JsMap Demo1 + + + + + + +
+
+
+ + + + + \ No newline at end of file diff --git a/assets/jsmap/demo2.html b/assets/jsmap/demo2.html new file mode 100644 index 0000000..506f26d --- /dev/null +++ b/assets/jsmap/demo2.html @@ -0,0 +1,120 @@ + + + + + + + JsMap Demo2 + + + + + + + + +
+
+
+
+ + + \ No newline at end of file diff --git a/assets/live2d/autoload.js b/assets/live2d/autoload.js new file mode 100644 index 0000000..64f22ca --- /dev/null +++ b/assets/live2d/autoload.js @@ -0,0 +1,44 @@ +// live2d_path 参数建议使用绝对路径 +// const live2d_path = "https://fastly.jsdelivr.net/gh/stevenjoezhang/live2d-widget@latest/"; +const live2d_path = "/assets/live2d/"; + +// 封装异步加载资源的方法 +function loadExternalResource(url, type) { + return new Promise((resolve, reject) => { + let tag; + + if (type === "css") { + tag = document.createElement("link"); + tag.rel = "stylesheet"; + tag.href = url; + } + else if (type === "js") { + tag = document.createElement("script"); + tag.src = url; + } + if (tag) { + tag.onload = () => resolve(url); + tag.onerror = () => reject(url); + document.head.appendChild(tag); + } + }); +} + +// 加载 waifu.css live2d.min.js waifu-tips.js +if (screen.width >= 768) { + Promise.all([ + loadExternalResource(live2d_path + "waifu.css", "css"), + loadExternalResource(live2d_path + "live2d.min.js", "js"), + loadExternalResource(live2d_path + "waifu-tips.js", "js") + ]).then(() => { + // 配置选项的具体用法见 README.md + initWidget({ + waifuPath: live2d_path + "waifu-tips.json", + //apiPath: "https://live2d.fghrsh.net/api/", + cdnPath: "https://cdn.awaw.cc/raw/fghrsh/live2d_api/master/", + tools: ["hitokoto", "asteroids", "switch-model", "switch-texture", "photo", "info", "quit"] + }); + }); +} + +console.log(`live2d loading completed.`); \ No newline at end of file diff --git a/assets/live2d/live2d.min.js b/assets/live2d/live2d.min.js new file mode 100644 index 0000000..8915e1d --- /dev/null +++ b/assets/live2d/live2d.min.js @@ -0,0 +1 @@ +!function(t){function i(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,i),o.l=!0,o.exports}var e={};i.m=t,i.c=e,i.d=function(t,e,r){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,i){return Object.prototype.hasOwnProperty.call(t,i)},i.p="",i(i.s=4)}([function(t,i,e){"use strict";function r(){this.live2DModel=null,this.modelMatrix=null,this.eyeBlink=null,this.physics=null,this.pose=null,this.debugMode=!1,this.initialized=!1,this.updating=!1,this.alpha=1,this.accAlpha=0,this.lipSync=!1,this.lipSyncValue=0,this.accelX=0,this.accelY=0,this.accelZ=0,this.dragX=0,this.dragY=0,this.startTimeMSec=null,this.mainMotionManager=new h,this.expressionManager=new h,this.motions={},this.expressions={},this.isTexLoaded=!1}function o(){AMotion.prototype.constructor.call(this),this.paramList=new Array}function n(){this.id="",this.type=-1,this.value=null}function s(){this.nextBlinkTime=null,this.stateStartTime=null,this.blinkIntervalMsec=null,this.eyeState=g.STATE_FIRST,this.blinkIntervalMsec=4e3,this.closingMotionMsec=100,this.closedMotionMsec=50,this.openingMotionMsec=150,this.closeIfZero=!0,this.eyeID_L="PARAM_EYE_L_OPEN",this.eyeID_R="PARAM_EYE_R_OPEN"}function _(){this.tr=new Float32Array(16),this.identity()}function a(t,i){_.prototype.constructor.call(this),this.width=t,this.height=i}function h(){MotionQueueManager.prototype.constructor.call(this),this.currentPriority=null,this.reservePriority=null,this.super=MotionQueueManager.prototype}function l(){this.physicsList=new Array,this.startTimeMSec=UtSystem.getUserTimeMSec()}function $(){this.lastTime=0,this.lastModel=null,this.partsGroups=new Array}function u(t){this.paramIndex=-1,this.partsIndex=-1,this.link=null,this.id=t}function p(){this.EPSILON=.01,this.faceTargetX=0,this.faceTargetY=0,this.faceX=0,this.faceY=0,this.faceVX=0,this.faceVY=0,this.lastTimeSec=0}function f(){_.prototype.constructor.call(this),this.screenLeft=null,this.screenRight=null,this.screenTop=null,this.screenBottom=null,this.maxLeft=null,this.maxRight=null,this.maxTop=null,this.maxBottom=null,this.max=Number.MAX_VALUE,this.min=0}function c(){}var d=0;r.prototype.getModelMatrix=function(){return this.modelMatrix},r.prototype.setAlpha=function(t){t>.999&&(t=1),t<.001&&(t=0),this.alpha=t},r.prototype.getAlpha=function(){return this.alpha},r.prototype.isInitialized=function(){return this.initialized},r.prototype.setInitialized=function(t){this.initialized=t},r.prototype.isUpdating=function(){return this.updating},r.prototype.setUpdating=function(t){this.updating=t},r.prototype.getLive2DModel=function(){return this.live2DModel},r.prototype.setLipSync=function(t){this.lipSync=t},r.prototype.setLipSyncValue=function(t){this.lipSyncValue=t},r.prototype.setAccel=function(t,i,e){this.accelX=t,this.accelY=i,this.accelZ=e},r.prototype.setDrag=function(t,i){this.dragX=t,this.dragY=i},r.prototype.getMainMotionManager=function(){return this.mainMotionManager},r.prototype.getExpressionManager=function(){return this.expressionManager},r.prototype.loadModelData=function(t,i){var e=c.getPlatformManager();this.debugMode&&e.log("Load model : "+t);var r=this;e.loadLive2DModel(t,function(t){if(r.live2DModel=t,r.live2DModel.saveParam(),0!=Live2D.getError())return void console.error("Error : Failed to loadModelData().");r.modelMatrix=new a(r.live2DModel.getCanvasWidth(),r.live2DModel.getCanvasHeight()),r.modelMatrix.setWidth(2),r.modelMatrix.setCenterPosition(0,0),i(r.live2DModel)})},r.prototype.loadTexture=function(t,i,e){d++;var r=c.getPlatformManager();this.debugMode&&r.log("Load Texture : "+i);var o=this;r.loadTexture(this.live2DModel,t,i,function(){d--,0==d&&(o.isTexLoaded=!0),"function"==typeof e&&e()})},r.prototype.loadMotion=function(t,i,e){var r=c.getPlatformManager();this.debugMode&&r.log("Load Motion : "+i);var o=null,n=this;r.loadBytes(i,function(i){o=Live2DMotion.loadMotion(i),null!=t&&(n.motions[t]=o),e(o)})},r.prototype.loadExpression=function(t,i,e){var r=c.getPlatformManager();this.debugMode&&r.log("Load Expression : "+i);var n=this;r.loadBytes(i,function(i){null!=t&&(n.expressions[t]=o.loadJson(i)),"function"==typeof e&&e()})},r.prototype.loadPose=function(t,i){var e=c.getPlatformManager();this.debugMode&&e.log("Load Pose : "+t);var r=this;try{e.loadBytes(t,function(t){r.pose=$.load(t),"function"==typeof i&&i()})}catch(t){console.warn(t)}},r.prototype.loadPhysics=function(t){var i=c.getPlatformManager();this.debugMode&&i.log("Load Physics : "+t);var e=this;try{i.loadBytes(t,function(t){e.physics=l.load(t)})}catch(t){console.warn(t)}},r.prototype.hitTestSimple=function(t,i,e){if(null===this.live2DModel)return!1;var r=this.live2DModel.getDrawDataIndex(t);if(r<0)return!1;for(var o=this.live2DModel.getTransformedPoints(r),n=this.live2DModel.getCanvasWidth(),s=0,_=this.live2DModel.getCanvasHeight(),a=0,h=0;hs&&(s=l),$<_&&(_=$),$>a&&(a=$)}var u=this.modelMatrix.invertTransformX(i),p=this.modelMatrix.invertTransformY(e);return n<=u&&u<=s&&_<=p&&p<=a},r.prototype.hitTestSimpleCustom=function(t,i,e,r){return null!==this.live2DModel&&(e>=t[0]&&e<=i[0]&&r<=t[1]&&r>=i[1])},o.prototype=new AMotion,o.EXPRESSION_DEFAULT="DEFAULT",o.TYPE_SET=0,o.TYPE_ADD=1,o.TYPE_MULT=2,o.loadJson=function(t){var i=new o,e=c.getPlatformManager(),r=e.jsonParseFromBytes(t);if(i.setFadeIn(parseInt(r.fade_in)>0?parseInt(r.fade_in):1e3),i.setFadeOut(parseInt(r.fade_out)>0?parseInt(r.fade_out):1e3),null==r.params)return i;var s=r.params,_=s.length;i.paramList=[];for(var a=0;a<_;a++){var h=s[a],l=h.id.toString(),$=parseFloat(h.val),u=o.TYPE_ADD,p=null!=h.calc?h.calc.toString():"add";if((u="add"===p?o.TYPE_ADD:"mult"===p?o.TYPE_MULT:"set"===p?o.TYPE_SET:o.TYPE_ADD)==o.TYPE_ADD){var f=null==h.def?0:parseFloat(h.def);$-=f}else if(u==o.TYPE_MULT){var f=null==h.def?1:parseFloat(h.def);0==f&&(f=1),$/=f}var d=new n;d.id=l,d.type=u,d.value=$,i.paramList.push(d)}return i},o.prototype.updateParamExe=function(t,i,e,r){for(var n=this.paramList.length-1;n>=0;--n){var s=this.paramList[n];s.type==o.TYPE_ADD?t.addToParamFloat(s.id,s.value,e):s.type==o.TYPE_MULT?t.multParamFloat(s.id,s.value,e):s.type==o.TYPE_SET&&t.setParamFloat(s.id,s.value,e)}},s.prototype.calcNextBlink=function(){return UtSystem.getUserTimeMSec()+Math.random()*(2*this.blinkIntervalMsec-1)},s.prototype.setInterval=function(t){this.blinkIntervalMsec=t},s.prototype.setEyeMotion=function(t,i,e){this.closingMotionMsec=t,this.closedMotionMsec=i,this.openingMotionMsec=e},s.prototype.updateParam=function(t){var i,e=UtSystem.getUserTimeMSec(),r=0;switch(this.eyeState){case g.STATE_CLOSING:r=(e-this.stateStartTime)/this.closingMotionMsec,r>=1&&(r=1,this.eyeState=g.STATE_CLOSED,this.stateStartTime=e),i=1-r;break;case g.STATE_CLOSED:r=(e-this.stateStartTime)/this.closedMotionMsec,r>=1&&(this.eyeState=g.STATE_OPENING,this.stateStartTime=e),i=0;break;case g.STATE_OPENING:r=(e-this.stateStartTime)/this.openingMotionMsec,r>=1&&(r=1,this.eyeState=g.STATE_INTERVAL,this.nextBlinkTime=this.calcNextBlink()),i=r;break;case g.STATE_INTERVAL:this.nextBlinkTime=t)&&(!(this.currentPriority>=t)&&(this.reservePriority=t,!0))},h.prototype.setReservePriority=function(t){this.reservePriority=t},h.prototype.updateParam=function(t){var i=MotionQueueManager.prototype.updateParam.call(this,t);return this.isFinished()&&(this.currentPriority=0),i},h.prototype.startMotionPrio=function(t,i){return i==this.reservePriority&&(this.reservePriority=0),this.currentPriority=i,this.startMotion(t,!1)},l.load=function(t){for(var i=new l,e=c.getPlatformManager(),r=e.jsonParseFromBytes(t),o=r.physics_hair,n=o.length,s=0;s=0)break;r=n,o=t.getPartsOpacity(s),o+=e/.5,o>1&&(o=1)}}r<0&&(r=0,o=1);for(var n=0;n.15&&(a=1-.15/(1-o)),h>a&&(h=a),t.setPartsOpacity(s,h)}}},$.prototype.copyOpacityOtherParts=function(t,i){for(var e=0;eo)&&(l*=o/u,$*=o/u,u=o),this.faceVX+=l,this.faceVY+=$;var f=.5*(Math.sqrt(o*o+16*o*_-8*o*_)-o),c=Math.sqrt(this.faceVX*this.faceVX+this.faceVY*this.faceVY);c>f&&(this.faceVX*=f/c,this.faceVY*=f/c),this.faceX+=this.faceVX,this.faceY+=this.faceVY}},f.prototype=new _,f.prototype.getMaxScale=function(){return this.max},f.prototype.getMinScale=function(){return this.min},f.prototype.setMaxScale=function(t){this.max=t},f.prototype.setMinScale=function(t){this.min=t},f.prototype.isMaxScale=function(){return this.getScaleX()==this.max},f.prototype.isMinScale=function(){return this.getScaleX()==this.min},f.prototype.adjustTranslate=function(t,i){this.tr[0]*this.maxLeft+(this.tr[12]+t)>this.screenLeft&&(t=this.screenLeft-this.tr[0]*this.maxLeft-this.tr[12]),this.tr[0]*this.maxRight+(this.tr[12]+t)this.screenBottom&&(i=this.screenBottom-this.tr[5]*this.maxBottom-this.tr[13]);var e=[1,0,0,0,0,1,0,0,0,0,1,0,t,i,0,1];_.mul(e,this.tr,this.tr)},f.prototype.adjustScale=function(t,i,e){var r=e*this.tr[0];r0&&(e=this.min/this.tr[0]):r>this.max&&this.tr[0]>0&&(e=this.max/this.tr[0]);var o=[1,0,0,0,0,1,0,0,0,0,1,0,t,i,0,1],n=[e,0,0,0,0,e,0,0,0,0,1,0,0,0,0,1],s=[1,0,0,0,0,1,0,0,0,0,1,0,-t,-i,0,1];_.mul(s,this.tr,this.tr),_.mul(n,this.tr,this.tr),_.mul(o,this.tr,this.tr)},f.prototype.setScreenRect=function(t,i,e,r){this.screenLeft=t,this.screenRight=i,this.screenTop=r,this.screenBottom=e},f.prototype.setMaxScreenRect=function(t,i,e,r){this.maxLeft=t,this.maxRight=i,this.maxTop=r,this.maxBottom=e},f.prototype.getScreenLeft=function(){return this.screenLeft},f.prototype.getScreenRight=function(){return this.screenRight},f.prototype.getScreenBottom=function(){return this.screenBottom},f.prototype.getScreenTop=function(){return this.screenTop},f.prototype.getMaxLeft=function(){return this.maxLeft},f.prototype.getMaxRight=function(){return this.maxRight},f.prototype.getMaxBottom=function(){return this.maxBottom},f.prototype.getMaxTop=function(){return this.maxTop},c.platformManager=null,c.getPlatformManager=function(){return c.platformManager},c.setPlatformManager=function(t){c.platformManager=t},t.exports={L2DTargetPoint:p,Live2DFramework:c,L2DViewMatrix:f,L2DPose:$,L2DPartsParam:u,L2DPhysics:l,L2DMotionManager:h,L2DModelMatrix:a,L2DMatrix44:_,EYE_STATE:g,L2DEyeBlink:s,L2DExpressionParam:n,L2DExpressionMotion:o,L2DBaseModel:r}},function(t,i,e){"use strict";var r={DEBUG_LOG:!1,DEBUG_MOUSE_LOG:!1,DEBUG_DRAW_HIT_AREA:!1,DEBUG_DRAW_ALPHA_MODEL:!1,VIEW_MAX_SCALE:2,VIEW_MIN_SCALE:.8,VIEW_LOGICAL_LEFT:-1,VIEW_LOGICAL_RIGHT:1,VIEW_LOGICAL_MAX_LEFT:-2,VIEW_LOGICAL_MAX_RIGHT:2,VIEW_LOGICAL_MAX_BOTTOM:-2,VIEW_LOGICAL_MAX_TOP:2,PRIORITY_NONE:0,PRIORITY_IDLE:1,PRIORITY_SLEEPY:2,PRIORITY_NORMAL:3,PRIORITY_FORCE:4,MOTION_GROUP_IDLE:"idle",MOTION_GROUP_SLEEPY:"sleepy",MOTION_GROUP_TAP_BODY:"tap_body",MOTION_GROUP_FLICK_HEAD:"flick_head",MOTION_GROUP_PINCH_IN:"pinch_in",MOTION_GROUP_PINCH_OUT:"pinch_out",MOTION_GROUP_SHAKE:"shake",HIT_AREA_HEAD:"head",HIT_AREA_BODY:"body"};t.exports=r},function(t,i,e){"use strict";function r(t){n=t}function o(){return n}Object.defineProperty(i,"__esModule",{value:!0}),i.setContext=r,i.getContext=o;var n=void 0},function(t,i,e){"use strict";function r(){}r.matrixStack=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],r.depth=0,r.currentMatrix=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],r.tmp=new Array(16),r.reset=function(){this.depth=0},r.loadIdentity=function(){for(var t=0;t<16;t++)this.currentMatrix[t]=t%5==0?1:0},r.push=function(){var t=(this.depth,16*(this.depth+1));this.matrixStack.lengthe.left&&i.y>e.top)return i;var o=t.x-i.x,n=t.y-i.y,s=r(o,n);i.xat.frameBuffers.length&&(this.curFrameNo=this.getMaskRenderTexture()),this.tmpModelToViewMatrix=new R,this.tmpMatrix2=new R,this.tmpMatrixForMask=new R,this.tmpMatrixForDraw=new R,this.CHANNEL_COLORS=new Array;var i=new A;i=new A,i.r=0,i.g=0,i.b=0,i.a=1,this.CHANNEL_COLORS.push(i),i=new A,i.r=1,i.g=0,i.b=0,i.a=0,this.CHANNEL_COLORS.push(i),i=new A,i.r=0,i.g=1,i.b=0,i.a=0,this.CHANNEL_COLORS.push(i),i=new A,i.r=0,i.g=0,i.b=1,i.a=0,this.CHANNEL_COLORS.push(i);for(var e=0;eG._$T7){t._$NP|=i._$4s;throw new lt("_$gi _$C _$li , _$n0 _$_ version _$li ( SDK : "+G._$T7+" < _$f0 : "+r+" )@_$SS#loadModel()\n")}var h=o._$nP();if(r>=G._$s7){var l=o._$9T(),$=o._$9T();if(-30584!=l||-30584!=$)throw t._$NP|=i._$0s,new lt("_$gi _$C _$li , _$0 _$6 _$Ui.")}t._$KS(h);var u=t.getModelContext();u.setDrawParam(t.getDrawParam()),u.init()}catch(t){_._$Rb(t)}},i.prototype._$KS=function(t){this._$MT=t},i.prototype.getModelImpl=function(){return null==this._$MT&&(this._$MT=new p,this._$MT._$zP()),this._$MT},i.prototype.getCanvasWidth=function(){return null==this._$MT?0:this._$MT.getCanvasWidth()},i.prototype.getCanvasHeight=function(){return null==this._$MT?0:this._$MT.getCanvasHeight()},i.prototype.getParamFloat=function(t){return"number"!=typeof t&&(t=this._$5S.getParamIndex(u.getID(t))),this._$5S.getParamFloat(t)},i.prototype.setParamFloat=function(t,i,e){"number"!=typeof t&&(t=this._$5S.getParamIndex(u.getID(t))),arguments.length<3&&(e=1),this._$5S.setParamFloat(t,this._$5S.getParamFloat(t)*(1-e)+i*e)},i.prototype.addToParamFloat=function(t,i,e){"number"!=typeof t&&(t=this._$5S.getParamIndex(u.getID(t))),arguments.length<3&&(e=1),this._$5S.setParamFloat(t,this._$5S.getParamFloat(t)+i*e)},i.prototype.multParamFloat=function(t,i,e){"number"!=typeof t&&(t=this._$5S.getParamIndex(u.getID(t))),arguments.length<3&&(e=1),this._$5S.setParamFloat(t,this._$5S.getParamFloat(t)*(1+(i-1)*e))},i.prototype.getParamIndex=function(t){return this._$5S.getParamIndex(u.getID(t))},i.prototype.loadParam=function(){this._$5S.loadParam()},i.prototype.saveParam=function(){this._$5S.saveParam()},i.prototype.init=function(){this._$5S.init()},i.prototype.update=function(){this._$5S.update()},i.prototype._$Rs=function(){return _._$li("_$60 _$PT _$Rs()"),-1},i.prototype._$Ds=function(t){_._$li("_$60 _$PT _$SS#_$Ds() \n")},i.prototype._$K2=function(){},i.prototype.draw=function(){},i.prototype.getModelContext=function(){return this._$5S},i.prototype._$s2=function(){return this._$NP},i.prototype._$P7=function(t,i,e,r){var o=-1,n=0,s=this;if(0!=e)if(1==t.length){var _=t[0],a=0!=s.getParamFloat(_),h=i[0],l=s.getPartsOpacity(h),$=e/r;a?(l+=$)>1&&(l=1):(l-=$)<0&&(l=0),s.setPartsOpacity(h,l)}else{for(var u=0;u=0)break;o=u;var h=i[u];n=s.getPartsOpacity(h),n+=e/r,n>1&&(n=1)}}o<0&&(console.log("No _$wi _$q0/ _$U default[%s]",t[0]),o=0,n=1,s.loadParam(),s.setParamFloat(t[o],n),s.saveParam());for(var u=0;u.15&&(f=1-.15/(1-n)),c>f&&(c=f),s.setPartsOpacity(h,c)}}}else for(var u=0;u=this._$5S._$aS.length)return null;var i=this._$5S._$aS[t];return null!=i&&i.getType()==W._$wb&&i instanceof $t?i.getIndexArray():null},e.CHANNEL_COUNT=4,e.RENDER_TEXTURE_USE_MIPMAP=!1,e.NOT_USED_FRAME=-100,e.prototype._$L7=function(){if(this.tmpModelToViewMatrix&&(this.tmpModelToViewMatrix=null),this.tmpMatrix2&&(this.tmpMatrix2=null),this.tmpMatrixForMask&&(this.tmpMatrixForMask=null),this.tmpMatrixForDraw&&(this.tmpMatrixForDraw=null),this.tmpBoundsOnModel&&(this.tmpBoundsOnModel=null),this.CHANNEL_COLORS){for(var t=this.CHANNEL_COLORS.length-1;t>=0;--t)this.CHANNEL_COLORS.splice(t,1);this.CHANNEL_COLORS=[]}this.releaseShader()},e.prototype.releaseShader=function(){for(var t=at.frameBuffers.length,i=0;i0){var n=i.gl.getParameter(i.gl.FRAMEBUFFER_BINDING),s=new Array(4);s[0]=0,s[1]=0,s[2]=i.gl.canvas.width,s[3]=i.gl.canvas.height,i.gl.viewport(0,0,at.clippingMaskBufferSize,at.clippingMaskBufferSize),this.setupLayoutBounds(e),i.gl.bindFramebuffer(i.gl.FRAMEBUFFER,at.frameBuffers[this.curFrameNo].framebuffer),i.gl.clearColor(0,0,0,0),i.gl.clear(i.gl.COLOR_BUFFER_BIT);for(var r=0;rr?e:r,n=o,s=o,_=0,a=0,h=i.clippedDrawContextList.length,l=0;l_&&(_=S),v>a&&(a=v)}}if(n==o)i.allClippedDrawRect.x=0,i.allClippedDrawRect.y=0,i.allClippedDrawRect.width=0,i.allClippedDrawRect.height=0,i.isUsing=!1;else{var L=_-n,M=a-s;i.allClippedDrawRect.x=n,i.allClippedDrawRect.y=s,i.allClippedDrawRect.width=L,i.allClippedDrawRect.height=M,i.isUsing=!0}},e.prototype.setupLayoutBounds=function(t){var i=t/e.CHANNEL_COUNT,r=t%e.CHANNEL_COUNT;i=~~i,r=~~r;for(var o=0,n=0;n=1)return 1;var p=r,f=p*p;return l*(p*f)+$*f+u*p+0},s.prototype._$a0=function(){},s.prototype.setFadeIn=function(t){this._$dP=t},s.prototype.setFadeOut=function(t){this._$eo=t},s.prototype._$pT=function(t){this._$V0=t},s.prototype.getFadeOut=function(){return this._$eo},s.prototype._$4T=function(){return this._$eo},s.prototype._$mT=function(){return this._$V0},s.prototype.getDurationMSec=function(){return-1},s.prototype.getLoopDurationMSec=function(){return-1},s.prototype.updateParam=function(t,i){if(i._$AT&&!i._$9L){var e=w.getUserTimeMSec();if(i._$z2<0){i._$z2=e,i._$bs=e;var r=this.getDurationMSec();i._$Do<0&&(i._$Do=r<=0?-1:i._$z2+r)}var o=this._$V0;o=o*(0==this._$dP?1:ht._$r2((e-i._$bs)/this._$dP))*(0==this._$eo||i._$Do<0?1:ht._$r2((i._$Do-e)/this._$eo)),0<=o&&o<=1||console.log("### assert!! ### "),this.updateParamExe(t,e,o,i),i._$Do>0&&i._$Do0?console.log("\n"):e%8==0&&e>0&&console.log(" "),console.log("%02X ",255&t[e]);console.log("\n")},_._$nr=function(t,i,e){console.log("%s\n",t);for(var r=i.length,o=0;o=0;--r){this._$lL[r]._$oP(t,this)}this._$oo(t,e),this._$M2=this._$Yb(),this._$9b=(this._$M2-this._$ks)/e,this._$ks=this._$M2}for(var r=this._$qP.length-1;r>=0;--r){this._$qP[r]._$YS(t,this)}this._$iT=i},f.prototype._$oo=function(t,i){i<.033&&(i=.033);var e=1/i;this.p1.vx=(this.p1.x-this.p1._$s0)*e,this.p1.vy=(this.p1.y-this.p1._$70)*e,this.p1.ax=(this.p1.vx-this.p1._$7L)*e,this.p1.ay=(this.p1.vy-this.p1._$HL)*e,this.p1.fx=this.p1.ax*this.p1._$p,this.p1.fy=this.p1.ay*this.p1._$p,this.p1._$xT();var r,o,n=-Math.atan2(this.p1.y-this.p2.y,this.p1.x-this.p2.x),s=Math.cos(n),_=Math.sin(n),a=9.8*this.p2._$p,h=this._$Db*Lt._$bS,l=a*Math.cos(n-h);r=l*_,o=l*s;var $=-this.p1.fx*_*_,u=-this.p1.fy*_*s,p=-this.p2.vx*this._$L2,f=-this.p2.vy*this._$L2;this.p2.fx=r+$+p,this.p2.fy=o+u+f,this.p2.ax=this.p2.fx/this.p2._$p,this.p2.ay=this.p2.fy/this.p2._$p,this.p2.vx+=this.p2.ax*i,this.p2.vy+=this.p2.ay*i,this.p2.x+=this.p2.vx*i,this.p2.y+=this.p2.vy*i;var c=Math.sqrt((this.p1.x-this.p2.x)*(this.p1.x-this.p2.x)+(this.p1.y-this.p2.y)*(this.p1.y-this.p2.y));this.p2.x=this.p1.x+this._$Fo*(this.p2.x-this.p1.x)/c,this.p2.y=this.p1.y+this._$Fo*(this.p2.y-this.p1.y)/c,this.p2.vx=(this.p2.x-this.p2._$s0)*e,this.p2.vy=(this.p2.y-this.p2._$70)*e,this.p2._$xT()},c.prototype._$xT=function(){this._$s0=this.x,this._$70=this.y,this._$7L=this.vx,this._$HL=this.vy},d.prototype._$oP=function(t,i){},g.prototype=new d,g.prototype._$oP=function(t,i){var e=this.scale*t.getParamFloat(this._$wL),r=i.getPhysicsPoint1();switch(this._$tL){default:case f.Src.SRC_TO_X:r.x=r.x+(e-r.x)*this._$V0;break;case f.Src.SRC_TO_Y:r.y=r.y+(e-r.y)*this._$V0;break;case f.Src.SRC_TO_G_ANGLE:var o=i._$qr();o+=(e-o)*this._$V0,i._$pr(o)}},y.prototype._$YS=function(t,i){},T.prototype=new y,T.prototype._$YS=function(t,i){switch(this._$YP){default:case f.Target.TARGET_FROM_ANGLE:t.setParamFloat(this._$wL,this.scale*i._$5r(),this._$V0);break;case f.Target.TARGET_FROM_ANGLE_V:t.setParamFloat(this._$wL,this.scale*i._$Cs(),this._$V0)}},f.Src=function(){},f.Src.SRC_TO_X="SRC_TO_X",f.Src.SRC_TO_Y="SRC_TO_Y",f.Src.SRC_TO_G_ANGLE="SRC_TO_G_ANGLE",f.Target=function(){},f.Target.TARGET_FROM_ANGLE="TARGET_FROM_ANGLE",f.Target.TARGET_FROM_ANGLE_V="TARGET_FROM_ANGLE_V",P.prototype.init=function(t){this._$fL=t._$fL,this._$gL=t._$gL,this._$B0=t._$B0,this._$z0=t._$z0,this._$qT=t._$qT,this.reflectX=t.reflectX,this.reflectY=t.reflectY},P.prototype._$F0=function(t){this._$fL=t._$_T(),this._$gL=t._$_T(),this._$B0=t._$_T(),this._$z0=t._$_T(),this._$qT=t._$_T(),t.getFormatVersion()>=G.LIVE2D_FORMAT_VERSION_V2_10_SDK2&&(this.reflectX=t._$po(),this.reflectY=t._$po())},P.prototype._$e=function(){};var It=function(){};It._$ni=function(t,i,e,r,o,n,s,_,a){var h=s*n-_*o;if(0==h)return null;var l,$=((t-e)*n-(i-r)*o)/h;return l=0!=o?(t-e-$*s)/o:(i-r-$*_)/n,isNaN(l)&&(l=(t-e-$*s)/o,isNaN(l)&&(l=(i-r-$*_)/n),isNaN(l)&&(console.log("a is NaN @UtVector#_$ni() "),console.log("v1x : "+o),console.log("v1x != 0 ? "+(0!=o)))),null==a?new Array(l,$):(a[0]=l,a[1]=$,a)},S.prototype._$8P=function(){return this.x+.5*this.width},S.prototype._$6P=function(){return this.y+.5*this.height},S.prototype._$EL=function(){return this.x+this.width},S.prototype._$5T=function(){return this.y+this.height},S.prototype._$jL=function(t,i,e,r){this.x=t,this.y=i,this.width=e,this.height=r},S.prototype._$jL=function(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height},S.prototype.contains=function(t,i){return this.x<=this.x&&this.y<=this.y&&this.x<=this.x+this.width&&this.y<=this.y+this.height},S.prototype.expand=function(t,i){this.x-=t,this.y-=i,this.width+=2*t,this.height+=2*i},v._$Z2=function(t,i,e,r){var o=i._$Q2(t,e),n=t._$vs(),s=t._$Tr();if(i._$zr(n,s,o),o<=0)return r[n[0]];if(1==o){var _=r[n[0]],a=r[n[1]],h=s[0];return _+(a-_)*h|0}if(2==o){var _=r[n[0]],a=r[n[1]],l=r[n[2]],$=r[n[3]],h=s[0],u=s[1],p=_+(a-_)*h|0,f=l+($-l)*h|0;return p+(f-p)*u|0}if(3==o){var c=r[n[0]],d=r[n[1]],g=r[n[2]],y=r[n[3]],m=r[n[4]],T=r[n[5]],P=r[n[6]],S=r[n[7]],h=s[0],u=s[1],v=s[2],_=c+(d-c)*h|0,a=g+(y-g)*h|0,l=m+(T-m)*h|0,$=P+(S-P)*h|0,p=_+(a-_)*u|0,f=l+($-l)*u|0;return p+(f-p)*v|0}if(4==o){var L=r[n[0]],M=r[n[1]],E=r[n[2]],A=r[n[3]],I=r[n[4]],w=r[n[5]],x=r[n[6]],O=r[n[7]],D=r[n[8]],R=r[n[9]],b=r[n[10]],F=r[n[11]],C=r[n[12]],N=r[n[13]],B=r[n[14]],U=r[n[15]],h=s[0],u=s[1],v=s[2],G=s[3],c=L+(M-L)*h|0,d=E+(A-E)*h|0,g=I+(w-I)*h|0,y=x+(O-x)*h|0,m=D+(R-D)*h|0,T=b+(F-b)*h|0,P=C+(N-C)*h|0,S=B+(U-B)*h|0,_=c+(d-c)*u|0,a=g+(y-g)*u|0,l=m+(T-m)*u|0,$=P+(S-P)*u|0,p=_+(a-_)*v|0,f=l+($-l)*v|0;return p+(f-p)*G|0}for(var Y=1<=G._$T7?(this.clipID=t._$nP(),this.clipIDList=this.convertClipIDForV2_11(this.clipID)):this.clipIDList=[],this._$MS(this._$Lb)},M.prototype.getClipIDList=function(){return this.clipIDList},M.prototype.init=function(t){},M.prototype._$Nr=function(t,i){if(i._$IS[0]=!1,i._$Us=v._$Z2(t,this._$GS,i._$IS,this._$Lb),at._$Zs);else if(i._$IS[0])return;i._$7s=v._$br(t,this._$GS,i._$IS,this._$mS)},M.prototype._$2b=function(t,i){},M.prototype.getDrawDataID=function(){return this._$gP},M.prototype._$j2=function(t){this._$gP=t},M.prototype.getOpacity=function(t,i){return i._$7s},M.prototype._$zS=function(t,i){return i._$Us},M.prototype._$MS=function(t){for(var i=t.length-1;i>=0;--i){var e=t[i];eM._$R2&&(M._$R2=e)}},M.prototype.getTargetBaseDataID=function(){return this._$dr},M.prototype._$gs=function(t){this._$dr=t},M.prototype._$32=function(){return null!=this._$dr&&this._$dr!=yt._$2o()},M.prototype.preDraw=function(t,i,e){},M.prototype.draw=function(t,i,e){},M.prototype.getType=function(){},M.prototype._$B2=function(t,i,e){},E._$ps=32,E.CLIPPING_PROCESS_NONE=0,E.CLIPPING_PROCESS_OVERWRITE_ALPHA=1,E.CLIPPING_PROCESS_MULTIPLY_ALPHA=2,E.CLIPPING_PROCESS_DRAW=3,E.CLIPPING_PROCESS_CLEAR_ALPHA=4,E.prototype.setChannelFlagAsColor=function(t,i){this.CHANNEL_COLORS[t]=i},E.prototype.getChannelFlagAsColor=function(t){return this.CHANNEL_COLORS[t]},E.prototype._$ZT=function(){},E.prototype._$Uo=function(t,i,e,r,o,n,s){},E.prototype._$Rs=function(){return-1},E.prototype._$Ds=function(t){},E.prototype.setBaseColor=function(t,i,e,r){t<0?t=0:t>1&&(t=1),i<0?i=0:i>1&&(i=1),e<0?e=0:e>1&&(e=1),r<0?r=0:r>1&&(r=1),this._$lT=t,this._$C0=i,this._$tT=e,this._$WL=r},E.prototype._$WP=function(t){this.culling=t},E.prototype.setMatrix=function(t){for(var i=0;i<16;i++)this.matrix4x4[i]=t[i]},E.prototype._$IT=function(){return this.matrix4x4},E.prototype.setPremultipliedAlpha=function(t){this.premultipliedAlpha=t},E.prototype.isPremultipliedAlpha=function(){return this.premultipliedAlpha},E.prototype.setAnisotropy=function(t){this.anisotropy=t},E.prototype.getAnisotropy=function(){return this.anisotropy},E.prototype.getClippingProcess=function(){return this.clippingProcess},E.prototype.setClippingProcess=function(t){this.clippingProcess=t},E.prototype.setClipBufPre_clipContextForMask=function(t){this.clipBufPre_clipContextMask=t},E.prototype.getClipBufPre_clipContextMask=function(){return this.clipBufPre_clipContextMask},E.prototype.setClipBufPre_clipContextForDraw=function(t){this.clipBufPre_clipContextDraw=t},E.prototype.getClipBufPre_clipContextDraw=function(){return this.clipBufPre_clipContextDraw},I._$ur=-2,I._$c2=1,I._$_b=2,I.prototype._$F0=function(t){this._$kP=t._$nP(),this._$dr=t._$nP()},I.prototype.readV2_opacity=function(t){t.getFormatVersion()>=G.LIVE2D_FORMAT_VERSION_V2_10_SDK2&&(this._$mS=t._$Tb())},I.prototype.init=function(t){},I.prototype._$Nr=function(t,i){},I.prototype.interpolateOpacity=function(t,i,e,r){null==this._$mS?e.setInterpolatedOpacity(1):e.setInterpolatedOpacity(v._$br(t,i,r,this._$mS))},I.prototype._$2b=function(t,i){},I.prototype._$nb=function(t,i,e,r,o,n,s){},I.prototype.getType=function(){},I.prototype._$gs=function(t){this._$dr=t},I.prototype._$a2=function(t){this._$kP=t},I.prototype.getTargetBaseDataID=function(){return this._$dr},I.prototype.getBaseDataID=function(){return this._$kP},I.prototype._$32=function(){return null!=this._$dr&&this._$dr!=yt._$2o()},w._$W2=0,w._$CS=w._$W2,w._$Mo=function(){return!0},w._$XP=function(t){try{for(var i=getTimeMSec();getTimeMSec()-i=t.length)return!1;for(var o=i;o=0;--e){var r=this._$Ob[e].getParamIndex(i);if(r==x._$ds&&(r=t.getParamIndex(this._$Ob[e].getParamID())),t._$Xb(r))return!0}return!1},D.prototype._$Q2=function(t,i){for(var e,r,o=this._$Ob.length,n=t._$v2(),s=0,_=0;_U._$Qb&&console.log("err 23245\n");for(var o=this._$Ob.length,n=1,s=1,_=0,a=0;a=0;--n)e[n]=o[n]}else this.mult_fast(t,i,e,r)},R.prototype.mult_fast=function(t,i,e,r){r?(e[0]=t[0]*i[0]+t[4]*i[1]+t[8]*i[2],e[4]=t[0]*i[4]+t[4]*i[5]+t[8]*i[6],e[8]=t[0]*i[8]+t[4]*i[9]+t[8]*i[10],e[12]=t[0]*i[12]+t[4]*i[13]+t[8]*i[14]+t[12],e[1]=t[1]*i[0]+t[5]*i[1]+t[9]*i[2],e[5]=t[1]*i[4]+t[5]*i[5]+t[9]*i[6],e[9]=t[1]*i[8]+t[5]*i[9]+t[9]*i[10],e[13]=t[1]*i[12]+t[5]*i[13]+t[9]*i[14]+t[13],e[2]=t[2]*i[0]+t[6]*i[1]+t[10]*i[2],e[6]=t[2]*i[4]+t[6]*i[5]+t[10]*i[6],e[10]=t[2]*i[8]+t[6]*i[9]+t[10]*i[10],e[14]=t[2]*i[12]+t[6]*i[13]+t[10]*i[14]+t[14],e[3]=e[7]=e[11]=0,e[15]=1):(e[0]=t[0]*i[0]+t[4]*i[1]+t[8]*i[2]+t[12]*i[3],e[4]=t[0]*i[4]+t[4]*i[5]+t[8]*i[6]+t[12]*i[7],e[8]=t[0]*i[8]+t[4]*i[9]+t[8]*i[10]+t[12]*i[11],e[12]=t[0]*i[12]+t[4]*i[13]+t[8]*i[14]+t[12]*i[15],e[1]=t[1]*i[0]+t[5]*i[1]+t[9]*i[2]+t[13]*i[3],e[5]=t[1]*i[4]+t[5]*i[5]+t[9]*i[6]+t[13]*i[7],e[9]=t[1]*i[8]+t[5]*i[9]+t[9]*i[10]+t[13]*i[11],e[13]=t[1]*i[12]+t[5]*i[13]+t[9]*i[14]+t[13]*i[15],e[2]=t[2]*i[0]+t[6]*i[1]+t[10]*i[2]+t[14]*i[3],e[6]=t[2]*i[4]+t[6]*i[5]+t[10]*i[6]+t[14]*i[7],e[10]=t[2]*i[8]+t[6]*i[9]+t[10]*i[10]+t[14]*i[11],e[14]=t[2]*i[12]+t[6]*i[13]+t[10]*i[14]+t[14]*i[15],e[3]=t[3]*i[0]+t[7]*i[1]+t[11]*i[2]+t[15]*i[3],e[7]=t[3]*i[4]+t[7]*i[5]+t[11]*i[6]+t[15]*i[7],e[11]=t[3]*i[8]+t[7]*i[9]+t[11]*i[10]+t[15]*i[11],e[15]=t[3]*i[12]+t[7]*i[13]+t[11]*i[14]+t[15]*i[15])},R.prototype.translate=function(t,i,e){this.m[12]=this.m[0]*t+this.m[4]*i+this.m[8]*e+this.m[12],this.m[13]=this.m[1]*t+this.m[5]*i+this.m[9]*e+this.m[13],this.m[14]=this.m[2]*t+this.m[6]*i+this.m[10]*e+this.m[14],this.m[15]=this.m[3]*t+this.m[7]*i+this.m[11]*e+this.m[15]},R.prototype.scale=function(t,i,e){this.m[0]*=t,this.m[4]*=i,this.m[8]*=e,this.m[1]*=t,this.m[5]*=i,this.m[9]*=e,this.m[2]*=t,this.m[6]*=i,this.m[10]*=e,this.m[3]*=t,this.m[7]*=i,this.m[11]*=e},R.prototype.rotateX=function(t){var i=Lt.fcos(t),e=Lt._$9(t),r=this.m[4];this.m[4]=r*i+this.m[8]*e,this.m[8]=r*-e+this.m[8]*i,r=this.m[5],this.m[5]=r*i+this.m[9]*e,this.m[9]=r*-e+this.m[9]*i,r=this.m[6],this.m[6]=r*i+this.m[10]*e,this.m[10]=r*-e+this.m[10]*i,r=this.m[7],this.m[7]=r*i+this.m[11]*e,this.m[11]=r*-e+this.m[11]*i},R.prototype.rotateY=function(t){var i=Lt.fcos(t),e=Lt._$9(t),r=this.m[0];this.m[0]=r*i+this.m[8]*-e,this.m[8]=r*e+this.m[8]*i,r=this.m[1],this.m[1]=r*i+this.m[9]*-e,this.m[9]=r*e+this.m[9]*i,r=m[2],this.m[2]=r*i+this.m[10]*-e,this.m[10]=r*e+this.m[10]*i,r=m[3],this.m[3]=r*i+this.m[11]*-e,this.m[11]=r*e+this.m[11]*i},R.prototype.rotateZ=function(t){var i=Lt.fcos(t),e=Lt._$9(t),r=this.m[0];this.m[0]=r*i+this.m[4]*e,this.m[4]=r*-e+this.m[4]*i,r=this.m[1],this.m[1]=r*i+this.m[5]*e,this.m[5]=r*-e+this.m[5]*i,r=this.m[2],this.m[2]=r*i+this.m[6]*e,this.m[6]=r*-e+this.m[6]*i,r=this.m[3],this.m[3]=r*i+this.m[7]*e,this.m[7]=r*-e+this.m[7]*i},b.prototype=new et,b._$tP=new Object,b._$27=function(){b._$tP.clear()},b.getID=function(t){var i=b._$tP[t];return null==i&&(i=new b(t),b._$tP[t]=i),i},b.prototype._$3s=function(){return new b},F._$kS=-1,F._$pS=0,F._$hb=1,F.STATE_IDENTITY=0,F._$gb=1,F._$fo=2,F._$go=4,F.prototype.transform=function(t,i,e){var r,o,n,s,_,a,h=0,l=0;switch(this._$hi){default:return;case F._$go|F._$fo|F._$gb:for(r=this._$7,o=this._$H,n=this._$k,s=this._$f,_=this._$g,a=this._$w;--e>=0;){var $=t[h++],u=t[h++];i[l++]=r*$+o*u+n,i[l++]=s*$+_*u+a}return;case F._$go|F._$fo:for(r=this._$7,o=this._$H,s=this._$f,_=this._$g;--e>=0;){var $=t[h++],u=t[h++];i[l++]=r*$+o*u,i[l++]=s*$+_*u}return;case F._$go|F._$gb:for(o=this._$H,n=this._$k,s=this._$f,a=this._$w;--e>=0;){var $=t[h++];i[l++]=o*t[h++]+n,i[l++]=s*$+a}return;case F._$go:for(o=this._$H,s=this._$f;--e>=0;){var $=t[h++];i[l++]=o*t[h++],i[l++]=s*$}return;case F._$fo|F._$gb:for(r=this._$7,n=this._$k,_=this._$g,a=this._$w;--e>=0;)i[l++]=r*t[h++]+n,i[l++]=_*t[h++]+a;return;case F._$fo:for(r=this._$7,_=this._$g;--e>=0;)i[l++]=r*t[h++],i[l++]=_*t[h++];return;case F._$gb:for(n=this._$k,a=this._$w;--e>=0;)i[l++]=t[h++]+n,i[l++]=t[h++]+a;return;case F.STATE_IDENTITY:return void(t==i&&h==l||w._$jT(t,h,i,l,2*e))}},F.prototype.update=function(){0==this._$H&&0==this._$f?1==this._$7&&1==this._$g?0==this._$k&&0==this._$w?(this._$hi=F.STATE_IDENTITY,this._$Z=F._$pS):(this._$hi=F._$gb,this._$Z=F._$hb):0==this._$k&&0==this._$w?(this._$hi=F._$fo,this._$Z=F._$kS):(this._$hi=F._$fo|F._$gb,this._$Z=F._$kS):0==this._$7&&0==this._$g?0==this._$k&&0==this._$w?(this._$hi=F._$go,this._$Z=F._$kS):(this._$hi=F._$go|F._$gb,this._$Z=F._$kS):0==this._$k&&0==this._$w?(this._$hi=F._$go|F._$fo,this._$Z=F._$kS):(this._$hi=F._$go|F._$fo|F._$gb,this._$Z=F._$kS)},F.prototype._$RT=function(t){this._$IT(t);var i=t[0],e=t[2],r=t[1],o=t[3],n=Math.sqrt(i*i+r*r),s=i*o-e*r;0==n?at._$so&&console.log("affine._$RT() / rt==0"):(t[0]=n,t[1]=s/n,t[2]=(r*o+i*e)/s,t[3]=Math.atan2(r,i))},F.prototype._$ho=function(t,i,e,r){var o=new Float32Array(6),n=new Float32Array(6);t._$RT(o),i._$RT(n);var s=new Float32Array(6);s[0]=o[0]+(n[0]-o[0])*e,s[1]=o[1]+(n[1]-o[1])*e,s[2]=o[2]+(n[2]-o[2])*e,s[3]=o[3]+(n[3]-o[3])*e,s[4]=o[4]+(n[4]-o[4])*e,s[5]=o[5]+(n[5]-o[5])*e,r._$CT(s)},F.prototype._$CT=function(t){var i=Math.cos(t[3]),e=Math.sin(t[3]);this._$7=t[0]*i,this._$f=t[0]*e,this._$H=t[1]*(t[2]*i-e),this._$g=t[1]*(t[2]*e+i),this._$k=t[4],this._$w=t[5],this.update()},F.prototype._$IT=function(t){t[0]=this._$7,t[1]=this._$f,t[2]=this._$H,t[3]=this._$g,t[4]=this._$k,t[5]=this._$w},C.prototype=new s,C._$cs="VISIBLE:",C._$ar="LAYOUT:",C._$Co=0,C._$D2=[],C._$1T=1,C.loadMotion=function(t){var i=new C,e=[0],r=t.length;i._$yT=0;for(var o=0;o=0){var a=new B;O.startsWith(t,s,C._$cs)?(a._$RP=B._$hs,a._$4P=new String(t,s,_-s)):O.startsWith(t,s,C._$ar)?(a._$4P=new String(t,s+7,_-s-7),O.startsWith(t,s+7,"ANCHOR_X")?a._$RP=B._$xs:O.startsWith(t,s+7,"ANCHOR_Y")?a._$RP=B._$us:O.startsWith(t,s+7,"SCALE_X")?a._$RP=B._$qs:O.startsWith(t,s+7,"SCALE_Y")?a._$RP=B._$Ys:O.startsWith(t,s+7,"X")?a._$RP=B._$ws:O.startsWith(t,s+7,"Y")&&(a._$RP=B._$Ns)):(a._$RP=B._$Fr,a._$4P=new String(t,s,_-s)),i.motions.push(a);var h=0;for(C._$D2.clear(),o=_+1;o0){C._$D2.push(l),h++;var $=e[0];if($i._$yT&&(i._$yT=h)}}}else{for(var s=o,_=-1;o=0)for(_==s+4&&"f"==t[s+1]&&"p"==t[s+2]&&"s"==t[s+3]&&(u=!0),o=_+1;o0&&u&&5=l?l-1:s];t.setParamFloat($,u)}else if(B._$ws<=h._$RP&&h._$RP<=B._$Ys);else{var p=t.getParamFloat($),f=h._$I0[s>=l?l-1:s],c=h._$I0[s+1>=l?l-1:s+1],d=f+(c-f)*_,g=p+(d-p)*e;t.setParamFloat($,g)}}s>=this._$yT&&(this._$E?(r._$z2=i,this.loopFadeIn&&(r._$bs=i)):r._$9L=!0)},C.prototype._$r0=function(){return this._$E},C.prototype._$aL=function(t){this._$E=t},C.prototype.isLoopFadeIn=function(){return this.loopFadeIn},C.prototype.setLoopFadeIn=function(t){this.loopFadeIn=t},N.prototype.clear=function(){this.size=0},N.prototype.add=function(t){if(this._$P.length<=this.size){var i=new Float32Array(2*this.size);w._$jT(this._$P,0,i,0,this.size),this._$P=i}this._$P[this.size++]=t},N.prototype._$BL=function(){var t=new Float32Array(this.size);return w._$jT(this._$P,0,t,0,this.size),t},B._$Fr=0,B._$hs=1,B._$ws=100,B._$Ns=101,B._$xs=102,B._$us=103,B._$qs=104,B._$Ys=105,U._$Ms=1,U._$Qs=2,U._$i2=0,U._$No=2,U._$do=U._$Ms,U._$Ls=!0,U._$1r=5,U._$Qb=65,U._$J=1e-4,U._$FT=.001,U._$Ss=3,G._$o7=6,G._$S7=7,G._$s7=8,G._$77=9,G.LIVE2D_FORMAT_VERSION_V2_10_SDK2=10,G.LIVE2D_FORMAT_VERSION_V2_11_SDK2_1=11,G._$T7=G.LIVE2D_FORMAT_VERSION_V2_11_SDK2_1,G._$Is=-2004318072,G._$h0=0,G._$4L=23,G._$7P=33,G._$uT=function(t){console.log("_$bo :: _$6 _$mo _$E0 : %d\n",t)},G._$9o=function(t){if(t<40)return G._$uT(t),null;if(t<50)return G._$uT(t),null;if(t<60)return G._$uT(t),null;if(t<100)switch(t){case 65:return new Z;case 66:return new D;case 67:return new x;case 68:return new z;case 69:return new P;case 70:return new $t;default:return G._$uT(t),null}else if(t<150)switch(t){case 131:return new st;case 133:return new tt;case 136:return new p;case 137:return new ot;case 142:return new j}return G._$uT(t),null},Y._$HP=0,Y._$_0=!0;Y._$V2=-1,Y._$W0=-1,Y._$jr=!1,Y._$ZS=!0,Y._$tr=-1e6,Y._$lr=1e6,Y._$is=32,Y._$e=!1,Y.prototype.getDrawDataIndex=function(t){for(var i=this._$aS.length-1;i>=0;--i)if(null!=this._$aS[i]&&this._$aS[i].getDrawDataID()==t)return i;return-1},Y.prototype.getDrawData=function(t){if(t instanceof b){if(null==this._$Bo){this._$Bo=new Object;for(var i=this._$aS.length,e=0;e0&&this.release();for(var t=this._$Ri.getModelImpl(),i=t._$Xr(),r=i.length,o=new Array,n=new Array,s=0;s=0)&&(this._$3S.push(m),this._$db.push(n[s]),o[s]=null,y=!0)}}if(!y)break}var P=t._$E2();if(null!=P){var S=P._$1s();if(null!=S)for(var v=S.length,s=0;s=0;i--)this._$Js[i]=Y._$jr;return this._$QT=!1,Y._$e&&_.dump("_$eL"),!1},Y.prototype.preDraw=function(t){null!=this.clipManager&&(t._$ZT(),this.clipManager.setupClip(this,t))},Y.prototype.draw=function(t){if(null==this._$Ws)return void _._$li("call _$Ri.update() before _$Ri.draw() ");var i=this._$Ws.length;t._$ZT();for(var e=0;e=0;--i)if(this._$pb[i]==t)return i;return this._$02(t,0,Y._$tr,Y._$lr)},Y.prototype._$BS=function(t){return this.getBaseDataIndex(t)},Y.prototype.getBaseDataIndex=function(t){for(var i=this._$3S.length-1;i>=0;--i)if(null!=this._$3S[i]&&this._$3S[i].getBaseDataID()==t)return i;return-1},Y.prototype._$UT=function(t,i){var e=new Float32Array(i);return w._$jT(t,0,e,0,t.length),e},Y.prototype._$02=function(t,i,e,r){if(this._$qo>=this._$pb.length){var o=this._$pb.length,n=new Array(2*o);w._$jT(this._$pb,0,n,0,o),this._$pb=n,this._$_2=this._$UT(this._$_2,2*o),this._$vr=this._$UT(this._$vr,2*o),this._$Rr=this._$UT(this._$Rr,2*o),this._$Or=this._$UT(this._$Or,2*o);var s=new Array;w._$jT(this._$Js,0,s,0,o),this._$Js=s}return this._$pb[this._$qo]=t,this._$_2[this._$qo]=i,this._$vr[this._$qo]=i,this._$Rr[this._$qo]=e,this._$Or[this._$qo]=r,this._$Js[this._$qo]=Y._$ZS,this._$qo++},Y.prototype._$Zo=function(t,i){this._$3S[t]=i},Y.prototype.setParamFloat=function(t,i){ithis._$Or[t]&&(i=this._$Or[t]),this._$_2[t]=i},Y.prototype.loadParam=function(){var t=this._$_2.length;t>this._$fs.length&&(t=this._$fs.length),w._$jT(this._$fs,0,this._$_2,0,t)},Y.prototype.saveParam=function(){var t=this._$_2.length;t>this._$fs.length&&(this._$fs=new Float32Array(t)),w._$jT(this._$_2,0,this._$fs,0,t)},Y.prototype._$v2=function(){return this._$co},Y.prototype._$WS=function(){return this._$QT},Y.prototype._$Xb=function(t){return this._$Js[t]==Y._$ZS},Y.prototype._$vs=function(){return this._$Es},Y.prototype._$Tr=function(){return this._$ZP},Y.prototype.getBaseData=function(t){return this._$3S[t]},Y.prototype.getParamFloat=function(t){return this._$_2[t]},Y.prototype.getParamMax=function(t){return this._$Or[t]},Y.prototype.getParamMin=function(t){return this._$Rr[t]},Y.prototype.setPartsOpacity=function(t,i){this._$Hr[t].setPartsOpacity(i)},Y.prototype.getPartsOpacity=function(t){return this._$Hr[t].getPartsOpacity()},Y.prototype.getPartsDataIndex=function(t){for(var i=this._$F2.length-1;i>=0;--i)if(null!=this._$F2[i]&&this._$F2[i]._$p2()==t)return i;return-1},Y.prototype._$q2=function(t){return this._$db[t]},Y.prototype._$C2=function(t){return this._$8b[t]},Y.prototype._$Bb=function(t){return this._$Hr[t]},Y.prototype._$5s=function(t,i){for(var e=this._$Ws.length,r=t,o=0;o0;)n+=i;return r},k._$C=function(t){var i=null,e=null;try{i=t instanceof Array?t:new _$Xs(t,8192),e=new _$js;for(var r,o=new Int8Array(1e3);(r=i.read(o))>0;)e.write(o,0,r);return e._$TS()}finally{null!=t&&t.close(),null!=e&&(e.flush(),e.close())}},V.prototype._$T2=function(){return w.getUserTimeMSec()+Math._$10()*(2*this._$Br-1)},V.prototype._$uo=function(t){this._$Br=t},V.prototype._$QS=function(t,i,e){this._$Dr=t,this._$Cb=i,this._$mr=e},V.prototype._$7T=function(t){var i,e=w.getUserTimeMSec(),r=0;switch(this._$_L){case STATE_CLOSING:r=(e-this._$bb)/this._$Dr,r>=1&&(r=1,this._$_L=wt.STATE_CLOSED,this._$bb=e),i=1-r;break;case STATE_CLOSED:r=(e-this._$bb)/this._$Cb,r>=1&&(this._$_L=wt.STATE_OPENING,this._$bb=e),i=0;break;case STATE_OPENING:r=(e-this._$bb)/this._$mr,r>=1&&(r=1,this._$_L=wt.STATE_INTERVAL,this._$12=this._$T2()),i=r;break;case STATE_INTERVAL:this._$12.9?at.EXPAND_W:0;this.gl.drawElements(a,e,r,o,n,h,this.transform,_)}},X.prototype._$Rs=function(){throw new Error("_$Rs")},X.prototype._$Ds=function(t){throw new Error("_$Ds")},X.prototype._$K2=function(){for(var t=0;t=0;--i){var e=t[i];eW._$R2&&(W._$R2=e)}},W._$or=function(){return W._$52},W._$Pr=function(){return W._$R2},W.prototype._$F0=function(t){this._$gP=t._$nP(),this._$dr=t._$nP(),this._$GS=t._$nP(),this._$qb=t._$6L(),this._$Lb=t._$cS(),this._$mS=t._$Tb(),t.getFormatVersion()>=G._$T7?(this.clipID=t._$nP(),this.clipIDList=this.convertClipIDForV2_11(this.clipID)):this.clipIDList=null,W._$Sb(this._$Lb)},W.prototype.getClipIDList=function(){return this.clipIDList},W.prototype._$Nr=function(t,i){if(i._$IS[0]=!1,i._$Us=v._$Z2(t,this._$GS,i._$IS,this._$Lb),at._$Zs);else if(i._$IS[0])return;i._$7s=v._$br(t,this._$GS,i._$IS,this._$mS)},W.prototype._$2b=function(t){},W.prototype.getDrawDataID=function(){return this._$gP},W.prototype._$j2=function(t){this._$gP=t},W.prototype.getOpacity=function(t,i){return i._$7s},W.prototype._$zS=function(t,i){return i._$Us},W.prototype.getTargetBaseDataID=function(){return this._$dr},W.prototype._$gs=function(t){this._$dr=t},W.prototype._$32=function(){return null!=this._$dr&&this._$dr!=yt._$2o()},W.prototype.getType=function(){},j._$42=0,j.prototype._$1b=function(){return this._$3S},j.prototype.getDrawDataList=function(){return this._$aS},j.prototype._$F0=function(t){this._$NL=t._$nP(),this._$aS=t._$nP(),this._$3S=t._$nP()},j.prototype._$kr=function(t){t._$Zo(this._$3S),t._$xo(this._$aS),this._$3S=null,this._$aS=null},q.prototype=new i,q.loadModel=function(t){var e=new q;return i._$62(e,t),e},q.loadModel=function(t){var e=new q;return i._$62(e,t),e},q._$to=function(){return new q},q._$er=function(t){var i=new _$5("../_$_r/_$t0/_$Ri/_$_P._$d");if(0==i.exists())throw new _$ls("_$t0 _$_ _$6 _$Ui :: "+i._$PL());for(var e=["../_$_r/_$t0/_$Ri/_$_P.512/_$CP._$1","../_$_r/_$t0/_$Ri/_$_P.512/_$vP._$1","../_$_r/_$t0/_$Ri/_$_P.512/_$EP._$1","../_$_r/_$t0/_$Ri/_$_P.512/_$pP._$1"],r=q.loadModel(i._$3b()),o=0;o=0){var h=new B;O.startsWith(t,_,J._$cs)?(h._$RP=B._$hs,h._$4P=O.createString(t,_,a-_)):O.startsWith(t,_,J._$ar)?(h._$4P=O.createString(t,_+7,a-_-7),O.startsWith(t,_+7,"ANCHOR_X")?h._$RP=B._$xs:O.startsWith(t,_+7,"ANCHOR_Y")?h._$RP=B._$us:O.startsWith(t,_+7,"SCALE_X")?h._$RP=B._$qs:O.startsWith(t,_+7,"SCALE_Y")?h._$RP=B._$Ys:O.startsWith(t,_+7,"X")?h._$RP=B._$ws:O.startsWith(t,_+7,"Y")&&(h._$RP=B._$Ns)):(h._$RP=B._$Fr,h._$4P=O.createString(t,_,a-_)),i.motions.push(h);var l=0,$=[];for(o=a+1;o0){$.push(u),l++;var p=e[0];if(pi._$yT&&(i._$yT=l)}}}else{for(var _=o,a=-1;o=0)for(a==_+4&&"f"==Q(t,_+1)&&"p"==Q(t,_+2)&&"s"==Q(t,_+3)&&(f=!0),o=a+1;o0&&f&&5=l?l-1:s];t.setParamFloat($,u)}else if(B._$ws<=h._$RP&&h._$RP<=B._$Ys);else{var p,f=t.getParamIndex($),c=t.getModelContext(),d=c.getParamMax(f),g=c.getParamMin(f),y=.4*(d-g),m=c.getParamFloat(f),T=h._$I0[s>=l?l-1:s],P=h._$I0[s+1>=l?l-1:s+1];p=Ty||T>P&&T-P>y?T:T+(P-T)*_;var S=m+(p-m)*e;t.setParamFloat($,S)}}s>=this._$yT&&(this._$E?(r._$z2=i,this.loopFadeIn&&(r._$bs=i)):r._$9L=!0),this._$eP=e},J.prototype._$r0=function(){return this._$E},J.prototype._$aL=function(t){this._$E=t},J.prototype._$S0=function(){return this._$D0},J.prototype._$U0=function(t){this._$D0=t},J.prototype.isLoopFadeIn=function(){return this.loopFadeIn},J.prototype.setLoopFadeIn=function(t){this.loopFadeIn=t},N.prototype.clear=function(){this.size=0},N.prototype.add=function(t){if(this._$P.length<=this.size){var i=new Float32Array(2*this.size);w._$jT(this._$P,0,i,0,this.size),this._$P=i}this._$P[this.size++]=t},N.prototype._$BL=function(){var t=new Float32Array(this.size);return w._$jT(this._$P,0,t,0,this.size),t},B._$Fr=0,B._$hs=1,B._$ws=100,B._$Ns=101,B._$xs=102,B._$us=103,B._$qs=104,B._$Ys=105,Z.prototype=new I,Z._$gT=new Array,Z.prototype._$zP=function(){this._$GS=new D,this._$GS._$zP()},Z.prototype._$F0=function(t){I.prototype._$F0.call(this,t),this._$A=t._$6L(),this._$o=t._$6L(),this._$GS=t._$nP(),this._$Eo=t._$nP(),I.prototype.readV2_opacity.call(this,t)},Z.prototype.init=function(t){var i=new K(this),e=(this._$o+1)*(this._$A+1);return null!=i._$Cr&&(i._$Cr=null),i._$Cr=new Float32Array(2*e),null!=i._$hr&&(i._$hr=null),this._$32()?i._$hr=new Float32Array(2*e):i._$hr=null,i},Z.prototype._$Nr=function(t,i){var e=i;if(this._$GS._$Ur(t)){var r=this._$VT(),o=Z._$gT;o[0]=!1,v._$Vr(t,this._$GS,o,r,this._$Eo,e._$Cr,0,2),i._$Ib(o[0]),this.interpolateOpacity(t,this._$GS,i,o)}},Z.prototype._$2b=function(t,i){var e=i;if(e._$hS(!0),this._$32()){var r=this.getTargetBaseDataID();if(e._$8r==I._$ur&&(e._$8r=t.getBaseDataIndex(r)),e._$8r<0)at._$so&&_._$li("_$L _$0P _$G :: %s",r),e._$hS(!1);else{var o=t.getBaseData(e._$8r),n=t._$q2(e._$8r);if(null!=o&&n._$yo()){var s=n.getTotalScale();e.setTotalScale_notForClient(s);var a=n.getTotalOpacity();e.setTotalOpacity(a*e.getInterpolatedOpacity()),o._$nb(t,n,e._$Cr,e._$hr,this._$VT(),0,2),e._$hS(!0)}else e._$hS(!1)}}else e.setTotalOpacity(e.getInterpolatedOpacity())},Z.prototype._$nb=function(t,i,e,r,o,n,s){var _=i,a=null!=_._$hr?_._$hr:_._$Cr;Z.transformPoints_sdk2(e,r,o,n,s,a,this._$o,this._$A)},Z.transformPoints_sdk2=function(i,e,r,o,n,s,_,a){for(var h,l,$,u=r*n,p=0,f=0,c=0,d=0,g=0,y=0,m=!1,T=o;T=1){var b=s[2*(0+a*M)],F=s[2*(0+a*M)+1],C=p-2*c+1*g,N=f-2*d+1*y,x=p+3*g,O=f+3*y,D=p-2*c+3*g,R=f-2*d+3*y,B=.5*(v- -2),U=.5*(L-1);B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else{var G=0|S;G==a&&(G=a-1);var B=.5*(v- -2),U=S-G,Y=G/a,k=(G+1)/a,b=s[2*(0+G*M)],F=s[2*(0+G*M)+1],x=s[2*(0+(G+1)*M)],O=s[2*(0+(G+1)*M)+1],C=p-2*c+Y*g,N=f-2*d+Y*y,D=p-2*c+k*g,R=f-2*d+k*y;B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else if(1<=v)if(L<=0){var D=s[2*(_+0*M)],R=s[2*(_+0*M)+1],x=p+3*c,O=f+3*d,C=p+1*c-2*g,N=f+1*d-2*y,b=p+3*c-2*g,F=f+3*d-2*y,B=.5*(v-1),U=.5*(L- -2);B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else if(L>=1){var C=s[2*(_+a*M)],N=s[2*(_+a*M)+1],b=p+3*c+1*g,F=f+3*d+1*y,D=p+1*c+3*g,R=f+1*d+3*y,x=p+3*c+3*g,O=f+3*d+3*y,B=.5*(v-1),U=.5*(L-1);B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else{var G=0|S;G==a&&(G=a-1);var B=.5*(v-1),U=S-G,Y=G/a,k=(G+1)/a,C=s[2*(_+G*M)],N=s[2*(_+G*M)+1],D=s[2*(_+(G+1)*M)],R=s[2*(_+(G+1)*M)+1],b=p+3*c+Y*g,F=f+3*d+Y*y,x=p+3*c+k*g,O=f+3*d+k*y;B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else if(L<=0){var V=0|P;V==_&&(V=_-1);var B=P-V,U=.5*(L- -2),X=V/_,z=(V+1)/_,D=s[2*(V+0*M)],R=s[2*(V+0*M)+1],x=s[2*(V+1+0*M)],O=s[2*(V+1+0*M)+1],C=p+X*c-2*g,N=f+X*d-2*y,b=p+z*c-2*g,F=f+z*d-2*y;B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else if(L>=1){var V=0|P;V==_&&(V=_-1);var B=P-V,U=.5*(L-1),X=V/_,z=(V+1)/_,C=s[2*(V+a*M)],N=s[2*(V+a*M)+1],b=s[2*(V+1+a*M)],F=s[2*(V+1+a*M)+1],D=p+X*c+3*g,R=f+X*d+3*y,x=p+z*c+3*g,O=f+z*d+3*y;B+U<=1?(e[T]=C+(b-C)*B+(D-C)*U,e[T+1]=N+(F-N)*B+(R-N)*U):(e[T]=x+(D-x)*(1-B)+(b-x)*(1-U),e[T+1]=O+(R-O)*(1-B)+(F-O)*(1-U))}else t.err.printf("_$li calc : %.4f , %.4f\t\t\t\t\t@@BDBoxGrid\n",v,L);else e[T]=p+v*c+L*g,e[T+1]=f+v*d+L*y}else l=P-(0|P),$=S-(0|S),h=2*((0|P)+(0|S)*(_+1)),l+$<1?(e[T]=s[h]*(1-l-$)+s[h+2]*l+s[h+2*(_+1)]*$,e[T+1]=s[h+1]*(1-l-$)+s[h+3]*l+s[h+2*(_+1)+1]*$):(e[T]=s[h+2*(_+1)+2]*(l-1+$)+s[h+2*(_+1)]*(1-l)+s[h+2]*(1-$),e[T+1]=s[h+2*(_+1)+3]*(l-1+$)+s[h+2*(_+1)+1]*(1-l)+s[h+3]*(1-$))}},Z.prototype.transformPoints_sdk1=function(t,i,e,r,o,n,s){for(var _,a,h,l,$,u,p,f=i,c=this._$o,d=this._$A,g=o*s,y=null!=f._$hr?f._$hr:f._$Cr,m=n;m1&&(_=1),a<0?a=0:a>1&&(a=1),_*=c,a*=d,h=0|_,l=0|a,h>c-1&&(h=c-1),l>d-1&&(l=d-1),u=_-h,p=a-l,$=2*(h+l*(c+1))):(_=e[m]*c,a=e[m+1]*d,u=_-(0|_),p=a-(0|a),$=2*((0|_)+(0|a)*(c+1))),u+p<1?(r[m]=y[$]*(1-u-p)+y[$+2]*u+y[$+2*(c+1)]*p,r[m+1]=y[$+1]*(1-u-p)+y[$+3]*u+y[$+2*(c+1)+1]*p):(r[m]=y[$+2*(c+1)+2]*(u-1+p)+y[$+2*(c+1)]*(1-u)+y[$+2]*(1-p),r[m+1]=y[$+2*(c+1)+3]*(u-1+p)+y[$+2*(c+1)+1]*(1-u)+y[$+3]*(1-p))},Z.prototype._$VT=function(){return(this._$o+1)*(this._$A+1)},Z.prototype.getType=function(){return I._$_b},K.prototype=new _t,tt._$42=0,tt.prototype._$zP=function(){this._$3S=new Array,this._$aS=new Array},tt.prototype._$F0=function(t){this._$g0=t._$8L(),this.visible=t._$8L(),this._$NL=t._$nP(),this._$3S=t._$nP(),this._$aS=t._$nP()},tt.prototype.init=function(t){var i=new it(this);return i.setPartsOpacity(this.isVisible()?1:0),i},tt.prototype._$6o=function(t){if(null==this._$3S)throw new Error("_$3S _$6 _$Wo@_$6o");this._$3S.push(t)},tt.prototype._$3o=function(t){if(null==this._$aS)throw new Error("_$aS _$6 _$Wo@_$3o");this._$aS.push(t)},tt.prototype._$Zo=function(t){this._$3S=t},tt.prototype._$xo=function(t){this._$aS=t},tt.prototype.isVisible=function(){return this.visible},tt.prototype._$uL=function(){return this._$g0},tt.prototype._$KP=function(t){this.visible=t},tt.prototype._$ET=function(t){this._$g0=t},tt.prototype.getBaseData=function(){return this._$3S},tt.prototype.getDrawData=function(){return this._$aS},tt.prototype._$p2=function(){return this._$NL},tt.prototype._$ob=function(t){this._$NL=t},tt.prototype.getPartsID=function(){return this._$NL},tt.prototype._$MP=function(t){this._$NL=t},it.prototype=new $,it.prototype.getPartsOpacity=function(){return this._$VS},it.prototype.setPartsOpacity=function(t){this._$VS=t},et._$L7=function(){u._$27(),yt._$27(),b._$27(),l._$27()},et.prototype.toString=function(){return this.id},rt.prototype._$F0=function(t){},ot.prototype._$1s=function(){return this._$4S},ot.prototype._$zP=function(){this._$4S=new Array},ot.prototype._$F0=function(t){this._$4S=t._$nP()},ot.prototype._$Ks=function(t){this._$4S.push(t)},nt.tr=new gt,nt._$50=new gt,nt._$Ti=new Array(0,0),nt._$Pi=new Array(0,0),nt._$B=new Array(0,0),nt.prototype._$lP=function(t,i,e,r){this.viewport=new Array(t,i,e,r)},nt.prototype._$bL=function(){this.context.save();var t=this.viewport;null!=t&&(this.context.beginPath(),this.context._$Li(t[0],t[1],t[2],t[3]),this.context.clip())},nt.prototype._$ei=function(){this.context.restore()},nt.prototype.drawElements=function(t,i,e,r,o,n,s,a){try{o!=this._$Qo&&(this._$Qo=o,this.context.globalAlpha=o);for(var h=i.length,l=t.width,$=t.height,u=this.context,p=this._$xP,f=this._$uP,c=this._$6r,d=this._$3r,g=nt.tr,y=nt._$Ti,m=nt._$Pi,T=nt._$B,P=0;P.02?nt.expandClip(t,i,e,r,l,$,u,p,f,c):nt.clipWithTransform(t,null,o,n,s,_,a,h)},nt.expandClip=function(t,i,e,r,o,n,s,_,a,h){var l=s-o,$=_-n,u=a-o,p=h-n,f=l*p-$*u>0?e:-e,c=-$,d=l,g=a-s,y=h-_,m=-y,T=g,P=Math.sqrt(g*g+y*y),S=-p,v=u,L=Math.sqrt(u*u+p*p),M=o-f*c/r,E=n-f*d/r,A=s-f*c/r,I=_-f*d/r,w=s-f*m/P,x=_-f*T/P,O=a-f*m/P,D=h-f*T/P,R=o+f*S/L,b=n+f*v/L,F=a+f*S/L,C=h+f*v/L,N=nt._$50;return null!=i._$P2(N)&&(nt.clipWithTransform(t,N,M,E,A,I,w,x,O,D,F,C,R,b),!0)},nt.clipWithTransform=function(t,i,e,r,o,n,s,a){if(arguments.length<7)return void _._$li("err : @LDGL.clip()");if(!(arguments[1]instanceof gt))return void _._$li("err : a[0] is _$6 LDTransform @LDGL.clip()");var h=nt._$B,l=i,$=arguments;if(t.beginPath(),l){l._$PS($[2],$[3],h),t.moveTo(h[0],h[1]);for(var u=4;u<$.length;u+=2)l._$PS($[u],$[u+1],h),t.lineTo(h[0],h[1])}else{t.moveTo($[2],$[3]);for(var u=4;u<$.length;u+=2)t.lineTo($[u],$[u+1])}t.clip()},nt.createCanvas=function(t,i){var e=document.createElement("canvas");return e.setAttribute("width",t),e.setAttribute("height",i),e||_._$li("err : "+e),e},nt.dumpValues=function(){for(var t="",i=0;i1?1:.5-.5*Math.cos(t*Lt.PI_F)},lt._$fr=-1,lt.prototype.toString=function(){return this._$ib},$t.prototype=new W,$t._$42=0,$t._$Os=30,$t._$ms=0,$t._$ns=1,$t._$_s=2,$t._$gT=new Array,$t.prototype._$_S=function(t){this._$LP=t},$t.prototype.getTextureNo=function(){return this._$LP},$t.prototype._$ZL=function(){return this._$Qi},$t.prototype._$H2=function(){return this._$JP},$t.prototype.getNumPoints=function(){return this._$d0},$t.prototype.getType=function(){return W._$wb},$t.prototype._$B2=function(t,i,e){var r=i,o=null!=r._$hr?r._$hr:r._$Cr;switch(U._$do){default:case U._$Ms:throw new Error("_$L _$ro ");case U._$Qs:for(var n=this._$d0-1;n>=0;--n)o[n*U._$No+4]=e}},$t.prototype._$zP=function(){this._$GS=new D,this._$GS._$zP()},$t.prototype._$F0=function(t){W.prototype._$F0.call(this,t),this._$LP=t._$6L(),this._$d0=t._$6L(),this._$Yo=t._$6L();var i=t._$nP();this._$BP=new Int16Array(3*this._$Yo);for(var e=3*this._$Yo-1;e>=0;--e)this._$BP[e]=i[e];if(this._$Eo=t._$nP(),this._$Qi=t._$nP(),t.getFormatVersion()>=G._$s7){if(this._$JP=t._$6L(),0!=this._$JP){if(0!=(1&this._$JP)){var r=t._$6L();null==this._$5P&&(this._$5P=new Object),this._$5P._$Hb=parseInt(r)}0!=(this._$JP&$t._$Os)?this._$6s=(this._$JP&$t._$Os)>>1:this._$6s=$t._$ms,0!=(32&this._$JP)&&(this.culling=!1)}}else this._$JP=0},$t.prototype.init=function(t){var i=new ut(this),e=this._$d0*U._$No,r=this._$32();switch(null!=i._$Cr&&(i._$Cr=null),i._$Cr=new Float32Array(e),null!=i._$hr&&(i._$hr=null),i._$hr=r?new Float32Array(e):null,U._$do){default:case U._$Ms:if(U._$Ls)for(var o=this._$d0-1;o>=0;--o){var n=o<<1;this._$Qi[n+1]=1-this._$Qi[n+1]}break;case U._$Qs:for(var o=this._$d0-1;o>=0;--o){var n=o<<1,s=o*U._$No,_=this._$Qi[n],a=this._$Qi[n+1];i._$Cr[s]=_,i._$Cr[s+1]=a,i._$Cr[s+4]=0,r&&(i._$hr[s]=_,i._$hr[s+1]=a,i._$hr[s+4]=0)}}return i},$t.prototype._$Nr=function(t,i){var e=i;if(this!=e._$GT()&&console.log("### assert!! ### "),this._$GS._$Ur(t)&&(W.prototype._$Nr.call(this,t,e),!e._$IS[0])){var r=$t._$gT;r[0]=!1,v._$Vr(t,this._$GS,r,this._$d0,this._$Eo,e._$Cr,U._$i2,U._$No)}},$t.prototype._$2b=function(t,i){try{this!=i._$GT()&&console.log("### assert!! ### ");var e=!1;i._$IS[0]&&(e=!0);var r=i;if(!e&&(W.prototype._$2b.call(this,t),this._$32())){var o=this.getTargetBaseDataID();if(r._$8r==W._$ur&&(r._$8r=t.getBaseDataIndex(o)),r._$8r<0)at._$so&&_._$li("_$L _$0P _$G :: %s",o);else{var n=t.getBaseData(r._$8r),s=t._$q2(r._$8r);null==n||s._$x2()?r._$AT=!1:(n._$nb(t,s,r._$Cr,r._$hr,this._$d0,U._$i2,U._$No),r._$AT=!0),r.baseOpacity=s.getTotalOpacity()}}}catch(t){throw t}},$t.prototype.draw=function(t,i,e){if(this!=e._$GT()&&console.log("### assert!! ### "),!e._$IS[0]){var r=e,o=this._$LP;o<0&&(o=1);var n=this.getOpacity(i,r)*e._$VS*e.baseOpacity,s=null!=r._$hr?r._$hr:r._$Cr;t.setClipBufPre_clipContextForDraw(e.clipBufPre_clipContext),t._$WP(this.culling),t._$Uo(o,3*this._$Yo,this._$BP,s,this._$Qi,n,this._$6s,r)}},$t.prototype.dump=function(){console.log(" _$yi( %d ) , _$d0( %d ) , _$Yo( %d ) \n",this._$LP,this._$d0,this._$Yo),console.log(" _$Oi _$di = { ");for(var t=0;tstartMotion() / start _$K _$3 (m%d)\n",r,e._$sr));if(null==t)return-1;e=new dt,e._$w0=t,this.motions.push(e);var n=e._$sr;return this._$eb&&_._$Ji("MotionQueueManager[size:%2d]->startMotion() / new _$w0 (m%d)\n",r,n),n},ct.prototype.updateParam=function(t){try{for(var i=!1,e=0;eupdateParam() / _$T0 _$w0 (m%d)\n",this.motions.length-1,r._$sr),this.motions.splice(e,1),e--)):(this.motions=this.motions.splice(e,1),e--)}else this.motions.splice(e,1),e--}return i}catch(t){return _._$li(t),!0}},ct.prototype.isFinished=function(t){if(arguments.length>=1){for(var i=0;i.9&&at.EXPAND_W,this.gl);if(null==this.gl)throw new Error("gl is null");var h=1*this._$C0*n,l=1*this._$tT*n,$=1*this._$WL*n,u=this._$lT*n;if(null!=this.clipBufPre_clipContextMask){a.frontFace(a.CCW),a.useProgram(this.shaderProgram),this._$vS=Tt(a,this._$vS,r),this._$no=Pt(a,this._$no,e),a.enableVertexAttribArray(this.a_position_Loc),a.vertexAttribPointer(this.a_position_Loc,2,a.FLOAT,!1,0,0),this._$NT=Tt(a,this._$NT,o),a.activeTexture(a.TEXTURE1),a.bindTexture(a.TEXTURE_2D,this.textures[t]),a.uniform1i(this.s_texture0_Loc,1),a.enableVertexAttribArray(this.a_texCoord_Loc),a.vertexAttribPointer(this.a_texCoord_Loc,2,a.FLOAT,!1,0,0),a.uniformMatrix4fv(this.u_matrix_Loc,!1,this.getClipBufPre_clipContextMask().matrixForMask);var p=this.getClipBufPre_clipContextMask().layoutChannelNo,f=this.getChannelFlagAsColor(p);a.uniform4f(this.u_channelFlag,f.r,f.g,f.b,f.a);var c=this.getClipBufPre_clipContextMask().layoutBounds;a.uniform4f(this.u_baseColor_Loc,2*c.x-1,2*c.y-1,2*c._$EL()-1,2*c._$5T()-1),a.uniform1i(this.u_maskFlag_Loc,!0)}else if(null!=this.getClipBufPre_clipContextDraw()){a.useProgram(this.shaderProgramOff),this._$vS=Tt(a,this._$vS,r),this._$no=Pt(a,this._$no,e),a.enableVertexAttribArray(this.a_position_Loc_Off),a.vertexAttribPointer(this.a_position_Loc_Off,2,a.FLOAT,!1,0,0),this._$NT=Tt(a,this._$NT,o),a.activeTexture(a.TEXTURE1),a.bindTexture(a.TEXTURE_2D,this.textures[t]),a.uniform1i(this.s_texture0_Loc_Off,1),a.enableVertexAttribArray(this.a_texCoord_Loc_Off),a.vertexAttribPointer(this.a_texCoord_Loc_Off,2,a.FLOAT,!1,0,0),a.uniformMatrix4fv(this.u_clipMatrix_Loc_Off,!1,this.getClipBufPre_clipContextDraw().matrixForDraw),a.uniformMatrix4fv(this.u_matrix_Loc_Off,!1,this.matrix4x4),a.activeTexture(a.TEXTURE2),a.bindTexture(a.TEXTURE_2D,at.fTexture[this.glno]),a.uniform1i(this.s_texture1_Loc_Off,2);var p=this.getClipBufPre_clipContextDraw().layoutChannelNo,f=this.getChannelFlagAsColor(p);a.uniform4f(this.u_channelFlag_Loc_Off,f.r,f.g,f.b,f.a),a.uniform4f(this.u_baseColor_Loc_Off,h,l,$,u)}else a.useProgram(this.shaderProgram),this._$vS=Tt(a,this._$vS,r),this._$no=Pt(a,this._$no,e),a.enableVertexAttribArray(this.a_position_Loc),a.vertexAttribPointer(this.a_position_Loc,2,a.FLOAT,!1,0,0),this._$NT=Tt(a,this._$NT,o),a.activeTexture(a.TEXTURE1),a.bindTexture(a.TEXTURE_2D,this.textures[t]),a.uniform1i(this.s_texture0_Loc,1),a.enableVertexAttribArray(this.a_texCoord_Loc),a.vertexAttribPointer(this.a_texCoord_Loc,2,a.FLOAT,!1,0,0),a.uniformMatrix4fv(this.u_matrix_Loc,!1,this.matrix4x4),a.uniform4f(this.u_baseColor_Loc,h,l,$,u),a.uniform1i(this.u_maskFlag_Loc,!1);this.culling?this.gl.enable(a.CULL_FACE):this.gl.disable(a.CULL_FACE),this.gl.enable(a.BLEND);var d,g,y,m;if(null!=this.clipBufPre_clipContextMask)d=a.ONE,g=a.ONE_MINUS_SRC_ALPHA,y=a.ONE,m=a.ONE_MINUS_SRC_ALPHA;else switch(s){case $t._$ms:d=a.ONE,g=a.ONE_MINUS_SRC_ALPHA,y=a.ONE,m=a.ONE_MINUS_SRC_ALPHA;break;case $t._$ns:d=a.ONE,g=a.ONE,y=a.ZERO,m=a.ONE;break;case $t._$_s:d=a.DST_COLOR,g=a.ONE_MINUS_SRC_ALPHA,y=a.ZERO,m=a.ONE}a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(d,g,y,m),this.anisotropyExt&&a.texParameteri(a.TEXTURE_2D,this.anisotropyExt.TEXTURE_MAX_ANISOTROPY_EXT,this.maxAnisotropy);var T=e.length;a.drawElements(a.TRIANGLES,T,a.UNSIGNED_SHORT,0),a.bindTexture(a.TEXTURE_2D,null)}},mt.prototype._$Rs=function(){throw new Error("_$Rs")},mt.prototype._$Ds=function(t){throw new Error("_$Ds")},mt.prototype._$K2=function(){for(var t=0;t=48){var r=G._$9o(t);return null!=r?(r._$F0(this),r):null}switch(t){case 1:return this._$bT();case 10:return new n(this._$6L(),!0);case 11:return new S(this._$mP(),this._$mP(),this._$mP(),this._$mP());case 12:return new S(this._$_T(),this._$_T(),this._$_T(),this._$_T());case 13:return new L(this._$mP(),this._$mP());case 14:return new L(this._$_T(),this._$_T());case 15:for(var o=this._$3L(),e=new Array(o),s=0;s>7-this._$hL++&1)},St.prototype._$zT=function(){0!=this._$hL&&(this._$hL=0)},vt.prototype._$wP=function(t,i,e){for(var r=0;rMath.PI;)e-=2*Math.PI;return e},Lt._$9=function(t){return Math.sin(t)},Lt.fcos=function(t){return Math.cos(t)},Mt.prototype._$u2=function(){return this._$IS[0]},Mt.prototype._$yo=function(){return this._$AT&&!this._$IS[0]},Mt.prototype._$GT=function(){return this._$e0},Et._$W2=0,Et.SYSTEM_INFO=null,Et.USER_AGENT=navigator.userAgent,Et.isIPhone=function(){return Et.SYSTEM_INFO||Et.setup(),Et.SYSTEM_INFO._isIPhone},Et.isIOS=function(){return Et.SYSTEM_INFO||Et.setup(),Et.SYSTEM_INFO._isIPhone||Et.SYSTEM_INFO._isIPad},Et.isAndroid=function(){return Et.SYSTEM_INFO||Et.setup(),Et.SYSTEM_INFO._isAndroid},Et.getOSVersion=function(){return Et.SYSTEM_INFO||Et.setup(),Et.SYSTEM_INFO.version},Et.getOS=function(){return Et.SYSTEM_INFO||Et.setup(),Et.SYSTEM_INFO._isIPhone||Et.SYSTEM_INFO._isIPad?"iOS":Et.SYSTEM_INFO._isAndroid?"Android":"_$Q0 OS"},Et.setup=function(){function t(t,i){for(var e=t.substring(i).split(/[ _,;\.]/),r=0,o=0;o<=2&&!isNaN(e[o]);o++){var n=parseInt(e[o]);if(n<0||n>999){_._$li("err : "+n+" @UtHtml5.setup()"),r=0;break}r+=n*Math.pow(1e3,2-o)}return r}var i,e=Et.USER_AGENT,r=Et.SYSTEM_INFO={userAgent:e};if((i=e.indexOf("iPhone OS "))>=0)r.os="iPhone",r._isIPhone=!0,r.version=t(e,i+"iPhone OS ".length);else if((i=e.indexOf("iPad"))>=0){if((i=e.indexOf("CPU OS"))<0)return void _._$li(" err : "+e+" @UtHtml5.setup()");r.os="iPad",r._isIPad=!0,r.version=t(e,i+"CPU OS ".length)}else(i=e.indexOf("Android"))>=0?(r.os="Android",r._isAndroid=!0,r.version=t(e,i+"Android ".length)):(r.os="-",r.version=-1)},window.UtSystem=w,window.UtDebug=_,window.LDTransform=gt,window.LDGL=nt,window.Live2D=at,window.Live2DModelWebGL=ft,window.Live2DModelJS=q,window.Live2DMotion=J,window.MotionQueueManager=ct,window.PhysicsHair=f,window.AMotion=s,window.PartsDataID=l,window.DrawDataID=b,window.BaseDataID=yt,window.ParamID=u,at.init();var At=!1}()}).call(i,e(7))},function(t,i){t.exports={import:function(){throw new Error("System.import cannot be used indirectly")}}},function(t,i,e){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(){this.models=[],this.count=-1,this.reloadFlg=!1,Live2D.init(),n.Live2DFramework.setPlatformManager(new _.default)}Object.defineProperty(i,"__esModule",{value:!0}),i.default=o;var n=e(0),s=e(9),_=r(s),a=e(10),h=r(a),l=e(1),$=r(l);o.prototype.createModel=function(){var t=new h.default;return this.models.push(t),t},o.prototype.changeModel=function(t,i){if(this.reloadFlg){this.reloadFlg=!1;this.releaseModel(0,t),this.createModel(),this.models[0].load(t,i)}},o.prototype.getModel=function(t){return t>=this.models.length?null:this.models[t]},o.prototype.releaseModel=function(t,i){this.models.length<=t||(this.models[t].release(i),delete this.models[t],this.models.splice(t,1))},o.prototype.numModels=function(){return this.models.length},o.prototype.setDrag=function(t,i){for(var e=0;e0){r.expressions={};for(var t=0;tn)return;t&&(clearTimeout(t),t=null),o=e(o),sessionStorage.setItem("waifu-text",n);const i=document.getElementById("waifu-tips");i.innerHTML=o,i.classList.add("waifu-tips-active"),t=setTimeout((()=>{sessionStorage.removeItem("waifu-text"),i.classList.remove("waifu-tips-active")}),s)}class s{constructor(e){let{apiPath:t,cdnPath:o}=e,s=!1;if("string"==typeof o)s=!0,o.endsWith("/")||(o+="/");else{if("string"!=typeof t)throw"Invalid initWidget argument!";t.endsWith("/")||(t+="/")}this.useCDN=s,this.apiPath=t,this.cdnPath=o}async loadModelList(){const e=await fetch(`${this.cdnPath}model_list.json`);this.modelList=await e.json()}async loadModel(t,s,n){if(localStorage.setItem("modelId",t),localStorage.setItem("modelTexturesId",s),o(n,4e3,10),this.useCDN){this.modelList||await this.loadModelList();const o=e(this.modelList.models[t]);loadlive2d("live2d",`${this.cdnPath}model/${o}/index.json`)}else loadlive2d("live2d",`${this.apiPath}get/?id=${t}-${s}`),console.log(`Live2D 模型 ${t}-${s} 加载完成`)}async loadRandModel(){const t=localStorage.getItem("modelId"),s=localStorage.getItem("modelTexturesId");if(this.useCDN){this.modelList||await this.loadModelList();const s=e(this.modelList.models[t]);loadlive2d("live2d",`${this.cdnPath}model/${s}/index.json`),o("我的新衣服好看嘛?",4e3,10)}else fetch(`${this.apiPath}rand_textures/?id=${t}-${s}`).then((e=>e.json())).then((e=>{1!==e.textures.id||1!==s&&0!==s?this.loadModel(t,e.textures.id,"我的新衣服好看嘛?"):o("我还没有其他衣服呢!",4e3,10)}))}async loadOtherModel(){let e=localStorage.getItem("modelId");if(this.useCDN){this.modelList||await this.loadModelList();const t=++e>=this.modelList.models.length?0:e;this.loadModel(t,0,this.modelList.messages[t])}else fetch(`${this.apiPath}switch/?id=${e}`).then((e=>e.json())).then((e=>{this.loadModel(e.model.id,0,e.model.message)}))}}const n={hitokoto:{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e',callback:function(){fetch("https://v1.hitokoto.cn").then((e=>e.json())).then((e=>{const t=`这句一言来自 「${e.from}」,是 ${e.creator} 在 hitokoto.cn 投稿的。`;o(e.hitokoto,6e3,9),setTimeout((()=>{o(t,4e3,9)}),6e3)}))}},asteroids:{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e',callback:()=>{if(window.Asteroids)window.ASTEROIDSPLAYERS||(window.ASTEROIDSPLAYERS=[]),window.ASTEROIDSPLAYERS.push(new Asteroids);else{const e=document.createElement("script");e.src="https://fastly.jsdelivr.net/gh/stevenjoezhang/asteroids/asteroids.js",document.head.appendChild(e)}}},"switch-model":{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e',callback:()=>{}},"switch-texture":{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e',callback:()=>{}},photo:{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e',callback:()=>{o("照好了嘛,是不是很可爱呢?",6e3,9),Live2D.captureName="photo.png",Live2D.captureFrame=!0}},info:{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e',callback:()=>{open("https://github.com/stevenjoezhang/live2d-widget")}},quit:{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e',callback:()=>{localStorage.setItem("waifu-display",Date.now()),o("愿你有一天能与重要的人重逢。",2e3,11),document.getElementById("waifu").style.bottom="-500px",setTimeout((()=>{document.getElementById("waifu").style.display="none",document.getElementById("waifu-toggle").classList.add("waifu-toggle-active")}),3e3)}}};function i(t){const i=new s(t);function c(t){let s,n=!1,i=t.message.default;window.addEventListener("mousemove",(()=>n=!0)),window.addEventListener("keydown",(()=>n=!0)),setInterval((()=>{n?(n=!1,clearInterval(s),s=null):s||(s=setInterval((()=>{o(i,6e3,9)}),2e4))}),1e3),o(function(e){if("/"===location.pathname)for(let{hour:t,text:o}of e){const e=new Date,s=t.split("-")[0],n=t.split("-")[1]||s;if(s<=e.getHours()&&e.getHours()<=n)return o}const t=`欢迎阅读「${document.title.split(" - ")[0]}」`;let o;if(""!==document.referrer){const e=new URL(document.referrer),s=e.hostname.split(".")[1],n={baidu:"百度",so:"360搜索",google:"谷歌搜索"};return location.hostname===e.hostname?t:(o=s in n?n[s]:e.hostname,`Hello!来自 ${o} 的朋友
${t}`)}return t}(t.time),7e3,11),window.addEventListener("mouseover",(s=>{for(let{selector:n,text:i}of t.mouseover)if(s.target.matches(n))return i=e(i),i=i.replace("{text}",s.target.innerText),void o(i,4e3,8)})),window.addEventListener("click",(s=>{for(let{selector:n,text:i}of t.click)if(s.target.matches(n))return i=e(i),i=i.replace("{text}",s.target.innerText),void o(i,4e3,8)})),t.seasons.forEach((({date:t,text:o})=>{const s=new Date,n=t.split("-")[0],c=t.split("-")[1]||n;n.split("/")[0]<=s.getMonth()+1&&s.getMonth()+1<=c.split("/")[0]&&n.split("/")[1]<=s.getDate()&&s.getDate()<=c.split("/")[1]&&(o=(o=e(o)).replace("{year}",s.getFullYear()),i.push(o))}));const c=()=>{};console.log("%c",c),c.toString=()=>{o(t.message.console,6e3,9)},window.addEventListener("copy",(()=>{o(t.message.copy,6e3,9)})),window.addEventListener("visibilitychange",(()=>{document.hidden||o(t.message.visibilitychange,6e3,9)}))}localStorage.removeItem("waifu-display"),sessionStorage.removeItem("waifu-text"),document.body.insertAdjacentHTML("beforeend",'
\n
\n \n
\n
'),setTimeout((()=>{document.getElementById("waifu").style.bottom=0}),0),function(){n["switch-model"].callback=()=>i.loadOtherModel(),n["switch-texture"].callback=()=>i.loadRandModel(),Array.isArray(t.tools)||(t.tools=Object.keys(n));for(let e of t.tools)if(n[e]){const{icon:t,callback:o}=n[e];document.getElementById("waifu-tool").insertAdjacentHTML("beforeend",`${t}`),document.getElementById(`waifu-tool-${e}`).addEventListener("click",o)}}(),function(){let e=localStorage.getItem("modelId"),o=localStorage.getItem("modelTexturesId");null===e&&(e=1,o=53),i.loadModel(e,o),fetch(t.waifuPath).then((e=>e.json())).then(c)}()}window.initWidget=function(e,t){"string"==typeof e&&(e={waifuPath:e,apiPath:t}),document.body.insertAdjacentHTML("beforeend",'
\n 看板娘\n
');const o=document.getElementById("waifu-toggle");o.addEventListener("click",(()=>{o.classList.remove("waifu-toggle-active"),o.getAttribute("first-time")?(i(e),o.removeAttribute("first-time")):(localStorage.removeItem("waifu-display"),document.getElementById("waifu").style.display="",setTimeout((()=>{document.getElementById("waifu").style.bottom=0}),0))})),localStorage.getItem("waifu-display")&&Date.now()-localStorage.getItem("waifu-display")<=864e5?(o.setAttribute("first-time",!0),setTimeout((()=>{o.classList.add("waifu-toggle-active")}),0)):i(e)}}(); diff --git a/assets/live2d/waifu-tips.json b/assets/live2d/waifu-tips.json new file mode 100644 index 0000000..2f14a30 --- /dev/null +++ b/assets/live2d/waifu-tips.json @@ -0,0 +1,255 @@ +{ + "mouseover": [{ + "selector": "#live2d", + "text": ["干嘛呢你,快把手拿开~~", "鼠…鼠标放错地方了!", "你要干嘛呀?", "喵喵喵?", "怕怕(ノ≧∇≦)ノ", "非礼呀!救命!", "这样的话,只能使用武力了!", "我要生气了哦", "不要动手动脚的!", "真…真的是不知羞耻!", "Hentai!"] + }, { + "selector": "#waifu-tool-hitokoto", + "text": ["猜猜我要说些什么?", "我从青蛙王子那里听到了不少人生经验。"] + }, { + "selector": "#waifu-tool-asteroids", + "text": ["要不要来玩飞机大战?", "这个按钮上写着「不要点击」。", "怎么,你想来和我玩个游戏?", "听说这样可以蹦迪!"] + }, { + "selector": "#waifu-tool-switch-model", + "text": ["你是不是不爱人家了呀,呜呜呜~", "要见见我的姐姐嘛?", "想要看我妹妹嘛?", "要切换看板娘吗?"] + }, { + "selector": "#waifu-tool-switch-texture", + "text": ["喜欢换装 PLAY 吗?", "这次要扮演什么呢?", "变装!", "让我们看看接下来会发生什么!"] + }, { + "selector": "#waifu-tool-photo", + "text": ["你要给我拍照呀?一二三~茄子~", "要不,我们来合影吧!", "保持微笑就好了~"] + }, { + "selector": "#waifu-tool-info", + "text": ["想要知道更多关于我的事么?", "这里记录着我搬家的历史呢。", "你想深入了解我什么呢?"] + }, { + "selector": "#waifu-tool-quit", + "text": ["到了要说再见的时候了吗?", "呜呜 QAQ 后会有期……", "不要抛弃我呀……", "我们,还能再见面吗……", "哼,你会后悔的!"] + }, { + "selector": ".menu-item-home a", + "text": ["点击前往首页,想回到上一页可以使用浏览器的后退功能哦。", "点它就可以回到首页啦!", "回首页看看吧。"] + }, { + "selector": ".menu-item-about a", + "text": ["你想知道我家主人是谁吗?", "这里有一些关于我家主人的秘密哦,要不要看看呢?", "发现主人出没地点!"] + }, { + "selector": ".menu-item-tags a", + "text": ["点击就可以看文章的标签啦!", "点击来查看所有标签哦。"] + }, { + "selector": ".menu-item-categories a", + "text": ["文章都分类好啦~", "点击来查看文章分类哦。"] + }, { + "selector": ".menu-item-archives a", + "text": ["翻页比较麻烦吗,那就来看看文章归档吧。", "文章目录都整理在这里啦!"] + }, { + "selector": ".menu-item-friends a", + "text": ["这是我的朋友们哦ヾ(◍°∇°◍)ノ゙", "要去大佬们的家看看吗?", "要去拜访一下我的朋友们吗?"] + }, { + "selector": ".menu-item-search a", + "text": ["找不到想看的内容?搜索看看吧!", "在找什么东西呢,需要帮忙吗?"] + }, { + "selector": ".menu-item a", + "text": ["快看看这里都有什么呢?"] + }, { + "selector": ".site-author", + "text": ["我家主人好看吗?", "这是我家主人(*´∇`*)"] + }, { + "selector": ".site-state", + "text": ["这是文章的统计信息~", "要不要点进去看看?"] + }, { + "selector": ".feed-link a", + "text": ["这里可以使用 RSS 订阅呢!", "利用 feed 订阅器,就能快速知道博客有没有更新了呢。"] + }, { + "selector": ".cc-opacity, .post-copyright-author", + "text": ["要记得规范转载哦。", "所有文章均采用 CC BY-NC-SA 4.0 许可协议~", "转载前要先注意下文章的版权协议呢。"] + }, { + "selector": ".links-of-author", + "text": ["这里是主人的常驻地址哦。", "这里有主人的联系方式!"] + }, { + "selector": ".followme", + "text": ["手机扫一下就能继续看,很方便呢~", "扫一扫,打开新世界的大门!"] + }, { + "selector": ".fancybox img, img.medium-zoom-image", + "text": ["点击图片可以放大呢!"] + }, { + "selector": ".copy-btn", + "text": ["代码可以直接点击复制哟。"] + }, { + "selector": ".highlight .table-container, .gist", + "text": ["GitHub!我是新手!", "PHP 是最好的语言!"] + }, { + "selector": "a[href^='mailto']", + "text": ["邮件我会及时回复的!", "点击就可以发送邮件啦~"] + }, { + "selector": "a[href^='/tags/']", + "text": ["要去看看 {text} 标签么?", "点它可以查看此标签下的所有文章哟!"] + }, { + "selector": "a[href^='/categories/']", + "text": ["要去看看 {text} 分类么?", "点它可以查看此分类下的所有文章哟!"] + }, { + "selector": ".post-title-link", + "text": ["要看看 {text} 这篇文章吗?"] + }, { + "selector": "a[rel='contents']", + "text": ["点击来阅读全文哦。"] + }, { + "selector": "a[itemprop='discussionUrl']", + "text": ["要去看看评论吗?"] + }, { + "selector": ".beian a", + "text": ["我也是有户口的人哦。", "我的主人可是遵纪守法的好主人。"] + }, { + "selector": ".container a[href^='http'], .nav-link .nav-text", + "text": ["要去看看 {text} 么?", "去 {text} 逛逛吧。", "到 {text} 看看吧。"] + }, { + "selector": ".back-to-top", + "text": ["点它就可以回到顶部啦!", "又回到最初的起点~", "要回到开始的地方么?"] + }, { + "selector": ".reward-container", + "text": ["我是不是棒棒哒~快给我点赞吧!", "要打赏我嘛?好期待啊~", "主人最近在吃土呢,很辛苦的样子,给他一些钱钱吧~"] + }, { + "selector": "#wechat", + "text": ["这是我的微信二维码~"] + }, { + "selector": "#alipay", + "text": ["这是我的支付宝哦!"] + }, { + "selector": "#bitcoin", + "text": ["这是我的比特币账号!"] + }, { + "selector": "#needsharebutton-postbottom .btn", + "text": ["好东西要让更多人知道才行哦。", "觉得文章有帮助的话,可以分享给更多需要的朋友呢。"] + }, { + "selector": ".need-share-button_weibo", + "text": ["微博?来分享一波喵!"] + }, { + "selector": ".need-share-button_wechat", + "text": ["分享到微信吧!"] + }, { + "selector": ".need-share-button_douban", + "text": ["分享到豆瓣好像也不错!"] + }, { + "selector": ".need-share-button_qqzone", + "text": ["QQ 空间,一键转发,耶~"] + }, { + "selector": ".need-share-button_twitter", + "text": ["Twitter?好像是不存在的东西?"] + }, { + "selector": ".need-share-button_facebook", + "text": ["emmm…FB 好像也是不存在的东西?"] + }, { + "selector": ".post-nav-item a[rel='next']", + "text": ["来看看下一篇文章吧。", "点它可以看下一篇文章哦!", "要翻到下一篇文章吗?"] + }, { + "selector": ".post-nav-item a[rel='prev']", + "text": ["来看看上一篇文章吧。", "点它可以看上一篇文章哦!", "要翻到上一篇文章吗?"] + }, { + "selector": ".extend.next", + "text": ["去下一页看看吧。", "点它可以前进哦!", "要翻到下一页吗?"] + }, { + "selector": ".extend.prev", + "text": ["去上一页看看吧。", "点它可以后退哦!", "要翻到上一页吗?"] + }, { + "selector": "input.vnick", + "text": ["该怎么称呼你呢?", "留下你的尊姓大名!"] + }, { + "selector": ".vmail", + "text": ["留下你的邮箱,不然就是无头像人士了!", "记得设置好 Gravatar 头像哦!", "为了方便通知你最新消息,一定要留下邮箱!"] + }, { + "selector": ".vlink", + "text": ["快快告诉我你的家在哪里,好让我去参观参观!"] + }, { + "selector": ".veditor", + "text": ["想要去评论些什么吗?", "要说点什么吗?", "觉得博客不错?快来留言和主人交流吧!"] + }, { + "selector": ".vcontrol a", + "text": ["你会不会熟练使用 Markdown 呀?", "使用 Markdown 让评论更美观吧~"] + }, { + "selector": ".vemoji-btn", + "text": ["要插入一个萌萌哒的表情吗?", "要来一发表情吗?"] + }, { + "selector": ".vpreview-btn", + "text": ["要预览一下你的发言吗?", "快看看你的评论有多少负熵!"] + }, { + "selector": ".vsubmit", + "text": ["评论没有审核,要对自己的发言负责哦~", "要提交了吗,请耐心等待回复哦~"] + }, { + "selector": ".vcontent", + "text": ["哇,快看看这个精彩评论!", "如果有疑问,请尽快留言哦~"] + }], + "click": [{ + "selector": "#live2d", + "text": ["是…是不小心碰到了吧…", "萝莉控是什么呀?", "你看到我的小熊了吗?", "再摸的话我可要报警了!⌇●﹏●⌇", "110 吗,这里有个变态一直在摸我(ó﹏ò。)", "不要摸我了,我会告诉老婆来打你的!", "干嘛动我呀!小心我咬你!", "别摸我,有什么好摸的!"] + }, { + "selector": ".veditor", + "text": ["要吐槽些什么呢?", "一定要认真填写喵~", "有什么想说的吗?"] + }, { + "selector": ".vsubmit", + "text": ["输入验证码就可以提交评论啦~"] + }], + "seasons": [{ + "date": "01/01", + "text": "元旦了呢,新的一年又开始了,今年是{year}年~" + }, { + "date": "02/14", + "text": "又是一年情人节,{year}年找到对象了嘛~" + }, { + "date": "03/08", + "text": "今天是国际妇女节!" + }, { + "date": "03/12", + "text": "今天是植树节,要保护环境呀!" + }, { + "date": "04/01", + "text": "悄悄告诉你一个秘密~今天是愚人节,不要被骗了哦~" + }, { + "date": "05/01", + "text": "今天是五一劳动节,计划好假期去哪里了吗~" + }, { + "date": "06/01", + "text": "儿童节了呢,快活的时光总是短暂,要是永远长不大该多好啊…" + }, { + "date": "09/03", + "text": "中国人民抗日战争胜利纪念日,铭记历史、缅怀先烈、珍爱和平、开创未来。" + }, { + "date": "09/10", + "text": "教师节,在学校要给老师问声好呀~" + }, { + "date": "10/01", + "text": "国庆节到了,为祖国母亲庆生!" + }, { + "date": "11/05-11/12", + "text": "今年的双十一是和谁一起过的呢~" + }, { + "date": "12/20-12/31", + "text": "这几天是圣诞节,主人肯定又去剁手买买买了~" + }], + "time": [{ + "hour": "6-7", + "text": "早上好!一日之计在于晨,美好的一天就要开始了~" + }, { + "hour": "8-11", + "text": "上午好!工作顺利嘛,不要久坐,多起来走动走动哦!" + }, { + "hour": "12-13", + "text": "中午了,工作了一个上午,现在是午餐时间!" + }, { + "hour": "14-17", + "text": "午后很容易犯困呢,今天的运动目标完成了吗?" + }, { + "hour": "18-19", + "text": "傍晚了!窗外夕阳的景色很美丽呢,最美不过夕阳红~" + }, { + "hour": "20-21", + "text": "晚上好,今天过得怎么样?" + }, { + "hour": "22-23", + "text": ["已经这么晚了呀,早点休息吧,晚安~", "深夜时要爱护眼睛呀!"] + }, { + "hour": "0-5", + "text": "你是夜猫子呀?这么晚还不睡觉,明天起的来嘛?" + }], + "message": { + "default": ["好久不见,日子过得好快呢……", "大坏蛋!你都多久没理人家了呀,嘤嘤嘤~", "嗨~快来逗我玩吧!", "拿小拳拳锤你胸口!", "记得把小家加入收藏夹哦!"], + "console": "哈哈,你打开了控制台,是想要看看我的小秘密吗?", + "copy": "你都复制了些什么呀,转载要记得加上出处哦!", + "visibilitychange": "哇,你终于回来了~" + } +} diff --git a/assets/live2d/waifu.css b/assets/live2d/waifu.css new file mode 100644 index 0000000..5991f77 --- /dev/null +++ b/assets/live2d/waifu.css @@ -0,0 +1,310 @@ +#waifu-toggle { + background-color: #fa0; + border-radius: 5px; + bottom: 66px; + color: #fff; + cursor: pointer; + font-size: 12px; + left: 0; + margin-left: -100px; + padding: 5px 2px 5px 5px; + position: fixed; + transition: margin-left 1s; + width: 60px; + writing-mode: vertical-rl; +} + +#waifu-toggle.waifu-toggle-active { + margin-left: -50px; +} + +#waifu-toggle.waifu-toggle-active:hover { + margin-left: -30px; +} + +#waifu { + bottom: -1000px; + left: 0; + line-height: 0; + margin-bottom: -10px; + position: fixed; + transform: translateY(3px); + transition: transform .3s ease-in-out, bottom 3s ease-in-out; + z-index: 1; +} + +#waifu:hover { + transform: translateY(0); +} + +#waifu-tips { + animation: shake 50s ease-in-out 5s infinite; + background-color: rgba(236, 217, 188, .5); + border: 1px solid rgba(224, 186, 140, .62); + border-radius: 12px; + box-shadow: 0 3px 15px 2px rgba(191, 158, 118, .2); + font-size: 14px; + line-height: 24px; + margin: -30px 20px; + min-height: 70px; + opacity: 0; + overflow: hidden; + padding: 5px 10px; + position: absolute; + text-overflow: ellipsis; + transition: opacity 1s; + width: 250px; + word-break: break-all; +} + +#waifu-tips.waifu-tips-active { + opacity: 1; + transition: opacity .2s; +} + +#waifu-tips span { + color: #0099cc; +} + +#live2d { + cursor: grab; + height: 300px; + position: relative; + width: 300px; +} + +#live2d:active { + cursor: grabbing; +} + +#waifu-tool { + color: #aaa; + opacity: 0; + position: absolute; + right: -10px; + top: 70px; + transition: opacity 1s; +} + +#waifu:hover #waifu-tool { + opacity: 1; +} + +#waifu-tool span { + display: block; + height: 30px; + text-align: center; +} + +#waifu-tool svg { + fill: #7b8c9d; + cursor: pointer; + height: 25px; + transition: fill .3s; +} + +#waifu-tool svg:hover { + fill: #0684bd; /* #34495e */ +} + +@keyframes shake { + 2% { + transform: translate(.5px, -1.5px) rotate(-.5deg); + } + + 4% { + transform: translate(.5px, 1.5px) rotate(1.5deg); + } + + 6% { + transform: translate(1.5px, 1.5px) rotate(1.5deg); + } + + 8% { + transform: translate(2.5px, 1.5px) rotate(.5deg); + } + + 10% { + transform: translate(.5px, 2.5px) rotate(.5deg); + } + + 12% { + transform: translate(1.5px, 1.5px) rotate(.5deg); + } + + 14% { + transform: translate(.5px, .5px) rotate(.5deg); + } + + 16% { + transform: translate(-1.5px, -.5px) rotate(1.5deg); + } + + 18% { + transform: translate(.5px, .5px) rotate(1.5deg); + } + + 20% { + transform: translate(2.5px, 2.5px) rotate(1.5deg); + } + + 22% { + transform: translate(.5px, -1.5px) rotate(1.5deg); + } + + 24% { + transform: translate(-1.5px, 1.5px) rotate(-.5deg); + } + + 26% { + transform: translate(1.5px, .5px) rotate(1.5deg); + } + + 28% { + transform: translate(-.5px, -.5px) rotate(-.5deg); + } + + 30% { + transform: translate(1.5px, -.5px) rotate(-.5deg); + } + + 32% { + transform: translate(2.5px, -1.5px) rotate(1.5deg); + } + + 34% { + transform: translate(2.5px, 2.5px) rotate(-.5deg); + } + + 36% { + transform: translate(.5px, -1.5px) rotate(.5deg); + } + + 38% { + transform: translate(2.5px, -.5px) rotate(-.5deg); + } + + 40% { + transform: translate(-.5px, 2.5px) rotate(.5deg); + } + + 42% { + transform: translate(-1.5px, 2.5px) rotate(.5deg); + } + + 44% { + transform: translate(-1.5px, 1.5px) rotate(.5deg); + } + + 46% { + transform: translate(1.5px, -.5px) rotate(-.5deg); + } + + 48% { + transform: translate(2.5px, -.5px) rotate(.5deg); + } + + 50% { + transform: translate(-1.5px, 1.5px) rotate(.5deg); + } + + 52% { + transform: translate(-.5px, 1.5px) rotate(.5deg); + } + + 54% { + transform: translate(-1.5px, 1.5px) rotate(.5deg); + } + + 56% { + transform: translate(.5px, 2.5px) rotate(1.5deg); + } + + 58% { + transform: translate(2.5px, 2.5px) rotate(.5deg); + } + + 60% { + transform: translate(2.5px, -1.5px) rotate(1.5deg); + } + + 62% { + transform: translate(-1.5px, .5px) rotate(1.5deg); + } + + 64% { + transform: translate(-1.5px, 1.5px) rotate(1.5deg); + } + + 66% { + transform: translate(.5px, 2.5px) rotate(1.5deg); + } + + 68% { + transform: translate(2.5px, -1.5px) rotate(1.5deg); + } + + 70% { + transform: translate(2.5px, 2.5px) rotate(.5deg); + } + + 72% { + transform: translate(-.5px, -1.5px) rotate(1.5deg); + } + + 74% { + transform: translate(-1.5px, 2.5px) rotate(1.5deg); + } + + 76% { + transform: translate(-1.5px, 2.5px) rotate(1.5deg); + } + + 78% { + transform: translate(-1.5px, 2.5px) rotate(.5deg); + } + + 80% { + transform: translate(-1.5px, .5px) rotate(-.5deg); + } + + 82% { + transform: translate(-1.5px, .5px) rotate(-.5deg); + } + + 84% { + transform: translate(-.5px, .5px) rotate(1.5deg); + } + + 86% { + transform: translate(2.5px, 1.5px) rotate(.5deg); + } + + 88% { + transform: translate(-1.5px, .5px) rotate(1.5deg); + } + + 90% { + transform: translate(-1.5px, -.5px) rotate(-.5deg); + } + + 92% { + transform: translate(-1.5px, -1.5px) rotate(1.5deg); + } + + 94% { + transform: translate(.5px, .5px) rotate(-.5deg); + } + + 96% { + transform: translate(2.5px, -.5px) rotate(-.5deg); + } + + 98% { + transform: translate(-1.5px, -1.5px) rotate(-.5deg); + } + + 0%, 100% { + transform: translate(0, 0) rotate(0); + } +} diff --git a/assets/theme.custom.css b/assets/theme.custom.css new file mode 100644 index 0000000..c7b3162 --- /dev/null +++ b/assets/theme.custom.css @@ -0,0 +1,115 @@ +/* .aplayer-list-title, +.aplayer-title { + color: #666 +} + +.aplayer-body, +.aplayer-miniswitcher { + border-radius: 0 5px 5px 0 !important +} + +ul.list-v>li.header { + width: 130px !important; + height: 130px !important +} + +ul.list-v>li.header>img { + width: 100%; + height: 100% +} + +.l_main .article .prev-next>a p.content { + font-size: .875rem; + margin: 0 .5rem; + text-align: justify; + word-break: break-all; + display: none +} + +video { + max-height: 580px !important +} + +body { + background: #181c27 url(https://cdn.jsdelivr.net/gh/pdone/static@latest/img/bg_dark.jpg); + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: -1 +}*/ + +/* @font-face { + font-family: 'Luckiest Guy'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: local('Luckiest Guy Regular'), local('LuckiestGuy-Regular'), url(https://fonts.gstatic.com/s/luckiestguy/v11/_gP_1RrxsjcxVyin9l9n_j2hTd52.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD +} */ + +:root { + --stroke: #ccc; + --text: #666; + --bg: #dadada; + --duration: 550ms; + --easing: cubic-bezier(0.68, -0.55, 0.265, 1.55) +} + +.pd_content { + position: absolute; + width: 46%; + top: 35%; + cursor: pointer; + user-select: none +} + +.pd_content>h1, +.pd_content>h2 { + position: absolute; + color: var(--text); + margin: 0; + width: 100%; + text-align: center; + font-family: 'Luckiest Guy', cursive; + line-height: 1; + -webkit-text-stroke-color: var(--stroke) +} + +.pd_content>h1 { + top: 50px; + font-size: 3.75rem; + -webkit-text-stroke-width: 3px; + letter-spacing: 4px +} + +.pd_content>h2 { + top: 170px; + font-size: 2.187rem; + -webkit-text-stroke-width: 2px; + letter-spacing: 2px +} + +.pd_content>h1 span.capital { + font-size: 5.312rem +} + +.pd_content>h2 span.capital { + font-size: 3.125rem +} + +.pd_content>h1 span, +.pd_content>h2 span { + display: inline-block; + opacity: 0; + transition: all var(--duration) ease 750ms; + -webkit-transform: translateX(5px); + transform: translateX(5px) +} + +.pd_content>h1 span.animate-in, +.pd_content>h2 span.animate-in { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0) +} \ No newline at end of file diff --git a/assets/theme.custom.js b/assets/theme.custom.js new file mode 100644 index 0000000..b4a9e89 --- /dev/null +++ b/assets/theme.custom.js @@ -0,0 +1,19 @@ +var touchMeTimes = 0; +function dontTouchMe() { + var e = ""; + switch (touchMeTimes) { + case 0: e = "憋点我,再点我就吃了你~"; + break; + case 1: e = "你还点。。。造反了不成?"; + break; + case 2: e = "。。。。。。"; + break; + case 3: e = "你还点。。。"; + break; + case 4: e = "算啦。。。给你点。。。。。。"; + break; + default: e = "小伙汁,你已经点我" + touchMeTimes + "次了。。。" + } + touchMeTimes++, console.log("%c " + e, "color: #fadfa3; background: #030307; padding:5px 0;font-family: 微软雅黑;") +} +$((function () { var e = $("span[name='pd_title']"); e.each((a => { setTimeout((function () { $(e[a]).addClass("animate-in") }), 120 * a) })), document.body.style.height = "auto" })); diff --git a/assets/timeline/common.css b/assets/timeline/common.css new file mode 100644 index 0000000..d6b74e1 --- /dev/null +++ b/assets/timeline/common.css @@ -0,0 +1,171 @@ +.timeline { + margin-top: 20px; + position: relative; + color: #ccc !important; +} + +.timeline:before { + position: absolute; + content: ''; + width: 4px; + height: calc(100% + 50px); + background: rgb(138, 145, 150); + background: -moz-linear-gradient(left, rgba(138, 145, 150, 1) 0%, rgba(122, 130, 136, 1) 60%, rgba(98, 105, 109, 1) 100%); + background: -webkit-linear-gradient(left, rgba(138, 145, 150, 1) 0%, rgba(122, 130, 136, 1) 60%, rgba(98, 105, 109, 1) 100%); + background: linear-gradient(to right, rgba(138, 145, 150, 1) 0%, rgba(122, 130, 136, 1) 60%, rgba(98, 105, 109, 1) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8a9196', endColorstr='#62696d', GradientType=1); + left: 14px; + top: 5px; + border-radius: 4px; +} + +.timeline-month { + position: relative; + padding: 4px 15px 4px 35px; + background-color: #444950; + display: inline-block; + width: auto; + border-radius: 40px; + border: 1px solid #17191B; + border-right-color: black; + margin-bottom: 30px; +} + +.timeline-month span { + position: absolute; + top: -1px; + left: calc(100% - 10px); + z-index: -1; + white-space: nowrap; + display: inline-block; + background-color: #111; + padding: 4px 10px 4px 20px; + border-top-right-radius: 40px; + border-bottom-right-radius: 40px; + border: 1px solid black; + box-sizing: border-box; +} + +.timeline-month:before { + position: absolute; + content: ''; + width: 20px; + height: 20px; + background: rgb(138, 145, 150); + background: -moz-linear-gradient(top, rgba(138, 145, 150, 1) 0%, rgba(122, 130, 136, 1) 60%, rgba(112, 120, 125, 1) 100%); + background: -webkit-linear-gradient(top, rgba(138, 145, 150, 1) 0%, rgba(122, 130, 136, 1) 60%, rgba(112, 120, 125, 1) 100%); + background: linear-gradient(to bottom, rgba(138, 145, 150, 1) 0%, rgba(122, 130, 136, 1) 60%, rgba(112, 120, 125, 1) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8a9196', endColorstr='#70787d', GradientType=0); + border-radius: 100%; + border: 1px solid #17191B; + left: 5px; +} + +/*当前版本*/ +.timeline-month.cur:before { + position: absolute; + content: ''; + width: 20px; + height: 20px; + background: rgb(138, 145, 150); + background: linear-gradient(to bottom, #6c39fa 0%, rgb(248, 113, 3) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8a9196', endColorstr='#70787d', GradientType=0); + border-radius: 100%; + border: 1px solid #17191B; + left: 5px; +} + +.timeline-section { + padding-left: 35px; + display: block; + position: relative; + margin-bottom: 30px; +} + +.timeline-date { + margin-bottom: 15px; + padding: 2px 15px; + background: linear-gradient(#74cae3, #5bc0de 60%, #4ab9db); + position: relative; + display: inline-block; + border-radius: 20px; + border: 1px solid #17191B; + color: #fff; + text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3); +} + +.timeline-section:before { + content: ''; + position: absolute; + width: 30px; + height: 1px; + background-color: #444950; + top: 12px; + left: 20px; +} + +.timeline-section:after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + background: linear-gradient(to bottom, rgba(138, 145, 150, 1) 0%, rgba(122, 130, 136, 1) 60%, rgba(112, 120, 125, 1) 100%); + top: 7px; + left: 11px; + border: 1px solid #17191B; + border-radius: 100%; +} + +.timeline-section .col-sm-4 { + margin-bottom: 15px; +} + +.timeline-box { + position: relative; + + background-color: #444950; + border-radius: 15px; + border-top-left-radius: 0px; + border-bottom-right-radius: 0px; + border: 1px solid #17191B; + transition: all 0.3s ease; + overflow: hidden; +} + +.box-icon { + position: absolute; + right: 5px; + top: 0px; +} + +.box-title { + padding: 5px 15px; + border-bottom: 1px solid #17191B; +} + +.box-title i { + margin-right: 5px; +} + +.box-content { + padding: 5px 15px; + background-color: #17191B; +} + +.box-content strong { + color: #666; + font-style: italic; + margin-right: 5px; +} + +.box-item { + margin-bottom: 5px; +} + +.box-footer { + padding: 5px 15px; + border-top: 1px solid #17191B; + background-color: #444950; + text-align: right; + font-style: italic; +} \ No newline at end of file diff --git a/assets/timeline/freecontrol.html b/assets/timeline/freecontrol.html new file mode 100644 index 0000000..dd0e35f --- /dev/null +++ b/assets/timeline/freecontrol.html @@ -0,0 +1,222 @@ + + + + + + + Document + + + + + +
+
+
+ 2023 + 5 次发布 +
+
+
+
+
+
+ Version 1.6.3 +
+
+
- 增加控制器吸附scrcpy窗口
+
- 增加scrcpy窗口位置记忆
+
+
+
+
+
+
+
+
+ Version 1.6.2 +
+
+
- 修复了一些bug
+
+
+
+
+
+
+
+
+ Version 1.6.1 +
+
+
- 修复了一些bug
+
- 增加音频转发开关(默认启用)
+
+
+
+
+ +
+
+
+
+ Version 1.6.0 +
+
+ +
- 基于scrcpy v2.1.1(x64)
+
+ +
+
+
+
+
+
+
+ Version 1.5.1 +
+
+
- 基于scrcpy v1.25(x64)
+
+
+
+
+
+
+ 2022 + 1 次发布 +
+
+
+
+
+
+ Version 1.5.0 +
+
+
- 基于scrcpy v1.21(x64)
+
- 优化了代码
+
+
+
+
+
+
+ 2021 + 5 次发布 +
+
+
+
+
+
+ Version 1.4.1 +
+
+
- 修复了一些bug
+
- 增加了程序入口处的异常捕获 便于定位问题
+
+
+
+
+
+
+
+
+ Version 1.4.0 +
+
+
- 基于scrcpy v1.19
+
- 增加虚拟按键(常用功能,记忆启动时位置和大小)
+
- 优化了代码
+
+
+
+
+
+
+
+
+ Version 1.3.1 +
+
+
- 修复了一些bug
+
+
+
+
+
+
+
+
+ Version 1.3.0 +
+
+
- 基于scrcpy v1.18
+
- 增加了一些设置项
+
- 修复了一些bug
+
+
+
+
+
+
+
+
+ Version 1.2.0 +
+
+
- 基于scrcpy v1.17
+
- 修复了一些bug
+
+
+
+
+
+
+ 2020 + 2 次发布 +
+
+
+
+
+
+ Version 1.1.0 +
+
+
- 基于scrcpy v1.16
+
- 增加了设置端口号功能
+
+
+
+
+
+
+
+
+ Version 1.0.0 +
+
+
- 基于scrcpy v1.14
+
- 初始版本
+
+
+
+
+
+
+
+ + + + + + + diff --git a/atom.xml b/atom.xml new file mode 100644 index 0000000..52078b0 --- /dev/null +++ b/atom.xml @@ -0,0 +1,488 @@ + + + Pdone's Blog + + 皮蛋的博客 + + + + 2023-09-19T06:13:25.323Z + https://awaw.cc/ + + + pdone + + + + Hexo + + + 奇思妙想💭 + + https://awaw.cc/post/whimsy/ + 2023-08-03T16:00:00.000Z + 2023-09-19T06:13:25.323Z + +

想象

想象中的黑洞

在造物主的奇妙创造中,智慧生命被孕育而生,被赋予了独特的使命。一部分智慧生命被委派为造物主的助手,肩负着神圣的使命,辅助他完成众多事务。然而,其他的智慧生命则被放置在宇宙沙盒之中,这个神秘的沙盒划分成了无数个对照组,每个对照组即如同一个平行宇宙。

尽管这些平行宇宙共享着相同的宇宙环境,但造物主巧妙地设置了一种绝妙的隔离机制,使得不同对照组之间相互孤立,有如我们所熟知的虚拟机。每个对照组的智慧生命都在自己独特的条件下发展和进化,彼此并不感知对方的存在,仿佛分居于各自的宇宙之中。

造物主寄望于观察自己创造的智慧生命在多样条件下的发展轨迹。然而,为了避免智慧生命的过快发展而导致自我毁灭,他睿智地赋予了它们有限的寿命。这样一来,生命将在有限的时间内经历成长、繁荣与变化,却不至于过早迎来终结。

基于这个精妙的构思,人类注定永远无法自行发现存在于其他平行宇宙中的外星生命——即使是与我们自身相似的存在。除非造物主以某种形式干预,揭示了这些神秘生命的存在。这样的干预可能是一个宏大的奇迹,或者是一连串微妙的迹象,引导我们开始怀疑我们不是宇宙中唯一的智慧生命。

在这美妙而神秘的创世之旅中,我们不妨保持谦卑和好奇,探索宇宙和生命的奥秘,也许在某一刻,我们会获得关于我们自身存在意义的更深刻认知。

扩展

让我们继续扩展这个设想,将其构建成一个虚构的宇宙场景。

星云

在这个造物主创造的宇宙沙盒中,有许多平行宇宙(对照组),每个宇宙都是一个独特的实验场景。每个实验场景都有不同的初始条件和规则,从微观层面到宏观层面都存在微妙的差异,以产生各种可能性。

在月球表面看地球

  • 宇宙的初始条件:每个宇宙都有自己独特的初始条件。有些可能具有更多的自然资源和生态平衡,而另一些可能在资源稀缺和环境恶劣的情况下开始。

  • 生命的诞生:在每个宇宙中,生命以各种形式诞生。从单细胞生物到复杂的多细胞生物,从植物到动物,各种形态的生命在不同的宇宙中演化。

  • 有限的寿命:造物主赋予智慧生命有限的寿命,以避免其发展过快而自我毁灭。这使得智慧生命需要理性和谨慎对待资源和科技的发展,以延续自己的文明。

  • 智慧生命的出现:在某些宇宙中,智慧生命可能会逐渐出现。他们会经历进化、文明的崛起和科技的发展。不同宇宙中智慧生命的特点和文明水平可能千差万别。

  • 宇宙沙盒中的对照组:这些对照组可能不仅包括类似地球的情景,也包括完全不同的星球和宇宙结构。有些对照组中可能存在比地球上更高级的生物形式,也有可能有完全不同类型的智慧生命。

  • 交互与隔离:虽然这些宇宙共享相似的宇宙环境,但造物主将它们隔离开来,避免相互干扰,以保持实验的独立性。智慧生命之间并不知道其他宇宙的存在,让他们自主发展。

  • 观察和干预:造物主时不时地观察不同对照组中智慧生命的进展,他们也许通过超自然手段对这些对照组进行干预,但也可能仅是静观其变。

  • 生命的进化与文明:不同对照组中的智慧生命会经历不同的进化历程和文明发展。有些对照组的文明可能迅速崛起,创造出强大的科技和社会结构,而另一些对照组可能在原始阶段停滞不前。

  • 实验的结果:每个宇宙的结果都是独一无二的。有些宇宙的智慧生命可能因为资源利用不当或自相残杀而灭亡。而另一些宇宙的智慧生命可能会团结合作,探索宇宙的奥秘,并达到一个高度先进的文明。

  • 自行发现外星人的难题:基于设定中的隔离和宇宙沙盒的概念,人类在自然条件下可能难以自行发现其他对照组中的外星文明。这是因为这些对照组是相互隔离的,彼此无法直接联系。除非造物主进行干预或解除隔离,否则人类可能永远不会直接接触其他宇宙中的外星文明。

这样的设想,将宇宙看作一个巨大的实验室,造物主作为超自然的存在,掌控着这个宏伟的观察与实验计划。在这个设定下,人类和其他智慧生命都是宇宙中的一部分,我们的存在和发展也可能是造物主实验的一部分。

同时也为我们提供了一种有趣的哲学思考,让我们思考宇宙的无限可能性以及我们作为智慧生命的存在和发展。虽然这只是一个设想,但它为我们提供了一种探索未知和宇宙奥秘的视角。

类比

当我们将老鼠乌托邦(25号宇宙)实验的结果与上文观点相结合,可以得到一些有趣的启示和类比。

老鼠乌托邦实验

  • 在上文设想中,造物主创造了智慧生命并观察他们在宇宙中的发展。类似地,老鼠乌托邦实验也是一个观察社会动物(老鼠)在特定条件下的发展。这两者都是通过在特定环境中设定条件和规则来探索生命的进化和行为。

  • 有限的资源:在老鼠乌托邦实验中,随着人口密度的增加,资源的竞争变得更为激烈。类似地,在上文观点中,造物主给予生命有限的资源,可能是为了观察智慧生命如何在资源有限的情况下适应和发展。

  • 社会结构与动力:实验中老鼠群体的社会结构出现了退化和混乱,而在上文设想中,智慧生命也可能面临类似的挑战。人类社会中也存在着资源竞争、社会不平等和文明冲突等问题,而这些因素可能影响文明的发展和社会动力。

  • 行为沮丧:老鼠乌托邦实验中,高度拥挤和资源过剩的环境导致了老鼠社会的异常行为,这类似于上文观点中对于发展太快可能导致自行灭亡的担忧。这个类比可能引发我们对于人类社会中过度竞争、资源过剩和社会动态的反思。

  • 自我调整和适应:在实验和上文设想中,动物和智慧生命都面临着适应环境和资源限制的挑战。在类似于乌托邦实验中,老鼠群体可能最终自我调整或消亡,而在上文设想中的智慧生命可能会逐渐适应和发展,寻找合适的平衡。

通过将老鼠乌托邦实验与上文观点相结合,我们可以从一个不同的角度思考社会动物和智慧生命在特定环境下的行为和进化。这样的类比提醒我们在探讨人类社会和文明发展的同时,也要关注资源的合理分配、社会结构的稳定和适应环境的能力。同时,也让我们思考造物主设立这样的实验是否旨在观察智慧生命如何面对类似挑战,以及从中获取对于宇宙和生命的更深刻理解。

注:以上内容源于想象和假设。

]]>
+ + + + + <span id="more"></span> + +<h2 id="想象"><a href="#想象" class="headerlink" title="想象"></a>想象</h2><p><img src="https://cdn.awaw.cc/raw/pdone/stati + + + + + + + + + +
+ + + 短链接服务Octopus的实现与源码开放 + + https://awaw.cc/post/whats-short-link/ + 2023-07-19T16:00:00.000Z + 2023-07-20T09:26:03.361Z + + 一直想实现一个私有化的短链接服务,后来发现了这个项目,避免了重复造轮子。

前提

半年前(2020-06)左右,疫情触底反弹,公司的业务量不断提升,运营部门为了方便短信、模板消息推送等渠道的投放,提出了一个把长链接压缩为短链接的功能需求。当时为了快速推广,使用了一些比较知名的第三方短链压缩平台,存在一些问题:

  • 收费贵
  • 一些情况下,短链域名在部分第三方平台例如微信会被封杀
  • 回源数据没有办法定制处理方案,无法打通整个业务链路进行数据分析和跟踪

基于此类问题,决定自研一个(长链接压缩为)短链接服务,当时刚好同步进行微服务拆分,内部很多微服务需要重新命名,组内的一个妹子说不如就用Github的吉祥物去命名octopus cat(章鱼猫)去命名,但是考虑到版权问题,去掉了她最喜欢的猫,剩下章鱼,以octopus命名:

(项目的描述还打错字了,应该是”短链接”)因为实现的功能并不复杂,初版于2020-06月底就发布。octopus的实现参考了互联网中几篇关于”短链服务实现”浏览量比较高的文章,下面从实现原理、服务实现和部署架构等方面展开谈谈。

基本原理

短链服务的核心就是构建短链接和长链接的唯一映射关系,依赖到一个高性能、排列组合数量大而且破解难度大的映射标识生成算法。

构建唯一映射关系

上图是笔者收到的京东白条分期还款结果提醒短信,短信内容也包含了一个短链https://3.cn/j/xxxxxxx,把它拷贝到浏览器中打开,发现客户端会重定向到长链https://jrmkt.jd.com/ptp/wl/vouchers.html?activityId=${activityId}&uep_p=${uep_p}&uep_template_id=${uep_template_id}&uep_timestamp=${uep_timestamp},然后跳入一个H5的登录页,登录后再跳进一个白条攻略页面。这里其实一个长链其实可以压成多个短链,短链可以相同域名,也可以使用不同的域名:

访问https://3.cn/j/xxxxxxx短链接具体的交互流程猜测如下:

jrmkt.jd.com和3.cn查证都是doge东的域名

构建唯一映射关系其实就是基于一个固定的长链接,映射到一个或者多个可以动态生成的短链接,这个唯一映射关系,要求生成的短链接满足:

  • 不容易被破解(使用数字例如数据库的自增主键作为唯一映射标识容易被人遍历出来进行恶意调用)
  • 不能重复(一个短链接只能对应一个长链接,当然一个长链接可以对应多个短链接)
  • 长度尽可能短,这是因为第三方推送的报文内容一般有长度限制,如果短链过长,会导致不容易传输,还会令到推送内容字数受限(试想运营商短信投放内容最大长度为30个字符长度,短链已经占了20个字符长度,剩下只有10个字符长度让运营同事去发挥,显然不合理)
  • 如果链接过长,生成的二维码里面的”码点”会十分密集,不利于客户端识别和传输,刚好笔者公司运营有使用二维码的场景,所以必须尽可能缩短链接的长度

总的来说,这个唯一映射关系中的映射标识需要像Hash算法生成的Hash码那样具备高唯一性和低碰撞频率,同时具备短小易传输的特点,具体如何去生成映射唯一标识见下一节”压缩码生成算法”。

压缩码生成算法

这里的”压缩码”(compression_code)是笔者杜撰出来的名词,在本文中它的含义是短链接URL的路径部分(为了节省长度,除了协议和域名部分,短链的URL只有第一段路径):

其中,协议部分基本是固定为https://(从安全性来看不建议使用http://),短链域名可以购买尽可能长度短的域名如t.cn,不过有先见之明的资本家一般会把所有优质的短域名买下并且把价格提到很高,所以域名的长度基本也是很难控制的因素,剩下可控的就是压缩码部分。压缩码部分是可控的,但因为它是URL的一部分,只要确保所使用的字符不会被URL编码转义,那么长度是人为可控的。假设我们使用的是26个字母的大小写,加上10个数字,那么对于N位压缩码可以表示的最大组合数量为:

  • N = 4,组合数为62 ^ 4 = 14_776_336147万接近148
  • N = 5,组合数为62 ^ 5 = 916_132_8329.16亿左右
  • N = 6,组合数为62 ^ 6 = 56_800_235_584568亿左右

一般来说,组合数越小破解的难度就越小,组合数越大,要求压缩码长度越大,所以常用的长度就是456,而且后期可以对失效的长链进行压缩码回收或者禁用,这三个长度对于绝大对数生产短链的应用场景都能满足。octopus在实现的时候选用的是6位长度的压缩码,无他,因为有现成的成熟的参考方案:62进制数刚好由字符0-9 a-z A-Z组成,生成压缩码的时候,只需要生成一个唯一的10进制数,然后再基于此10进制数转换为62进制数数即可。说到这里,看起来的方案如下:

虚线部分一般依赖一种高效而且低冲突的摘要算法,如MurmurHash,而第(1)步的实线部分就是生成一个全局唯一的10进制序列,常用的手法有:

  • 数据库自增序列(如自增主键)
  • Snowflake算法
  • 自研的类似UUID算法生成全局唯一的序列值

考虑到之前笔者钻研过Snowflake算法的原理,这里简单使用Snowflake算法生成自增序列,使用了下面的流程进行压缩码生成和分配:

因为运用部门对短链生成的批量不大,而且短链域名只有一个,所以简单起见,一次压缩操作直接消耗掉一个压缩码,不考虑不同短链域名对同一个压缩码进行共享,也不考虑压缩码的回收问题

服务实现

短链服务的主访问入口一般QPS极高,因此需要想尽一切办法降低该入口的耗时,考虑可以用Redis做缓存承载入口的流量,基础架构选型如下:

  • JDK1.8+:生产部署使用JDK11
  • MVC框架与容器:spring-boot-starter-webflux或者spring-cloud-gateway,主要是必须使用Netty作为底层通讯容器
  • 内部RPC框架:Dubbo
  • 服务注册与发现:Nacos
  • 可选APM工具:Pinpoint

中间件依赖(因为之前整个服务集群都上云了,低负载的服务共用了部分中间件):

  • MySQL8.x
  • Redis5.x普通主从或者哨兵集群
  • RabbitMQ3.8.x集群,使用镜像队列

服务的设计图如下:

最新的版本考虑把黑白名单的拦截器去掉,替换成一个基于布隆过滤器现实的拦截器。服务使用了两个拦截器(虽然Filter翻译是过滤器,但是出于习惯,下文称为拦截器)链,容器提供的拦截器组成的拦截器链主要是负责服务安全、调用链跟踪的功能,而服务内部自定义的拦截器链主要是实现请求参数解析、URL转换、重定向和异步事件记录等功能。

模块划分:

1
2
3
- (ROOT) octopus
- octopus-contract
- octopus-server

octopus-contract模块必须脱离父POM的管理,方便单独迭代更新。

数据库设计

一共使用了5个表:

具体的初始化DDL如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
CREATE DATABASE `db_octopus` CHARSET 'utf8mb4' COLLATE 'utf8mb4_unicode_520_ci';

USE `db_octopus`;

CREATE TABLE `url_map`
(
`id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`short_url` VARCHAR(32) NOT NULL COMMENT '短链URL',
`long_url` VARCHAR(768) NOT NULL COMMENT '长链URL',
`short_url_digest` VARCHAR(128) NOT NULL COMMENT '短链摘要',
`long_url_digest` VARCHAR(128) NOT NULL COMMENT '长链摘要',
`compression_code` VARCHAR(16) NOT NULL COMMENT '压缩码',
`description` VARCHAR(256) COMMENT '描述',
`url_status` TINYINT NOT NULL DEFAULT 1 COMMENT 'URL状态,1:正常,2:已失效',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`edit_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '创建者',
`editor` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '更新者',
`deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标识',
`version` BIGINT NOT NULL DEFAULT 1 COMMENT '版本号',
UNIQUE uniq_compression_code (`compression_code`),
INDEX idx_short_url (`short_url`),
INDEX idx_short_url_digest (`short_url_digest`),
INDEX idx_long_url_digest (`long_url_digest`)
) COMMENT 'URL映射表';

CREATE TABLE `domain_conf`
(
`id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`domain_value` VARCHAR(16) NOT NULL COMMENT '域名',
`protocol` VARCHAR(8) NOT NULL DEFAULT 'https' COMMENT '协议,https或者http',
`domain_status` TINYINT NOT NULL DEFAULT 1 COMMENT '域名状态,1:正常,2:已失效',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`edit_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '创建者',
`editor` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '更新者',
`deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标识',
`version` BIGINT NOT NULL DEFAULT 1 COMMENT '版本号',
UNIQUE uniq_domain (`domain_value`)
) COMMENT '域名配置';

CREATE TABLE `compression_code`
(
`id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`compression_code` VARCHAR(16) NOT NULL COMMENT '压缩码',
`code_status` TINYINT NOT NULL DEFAULT 1 COMMENT '压缩码状态,1:未使用,2:已使用,3:已失效',
`sequence_value` VARCHAR(64) NOT NULL COMMENT '序列(盐)',
`strategy` VARCHAR(8) NOT NULL DEFAULT 'sequence' COMMENT '策略,sequence或者hash',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`edit_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '创建者',
`editor` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '更新者',
`deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标识',
`version` BIGINT NOT NULL DEFAULT 1 COMMENT '版本号',
UNIQUE uniq_compression_code (`compression_code`)
) COMMENT '压缩码';

CREATE TABLE `visit_statistics`
(
`id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`edit_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '创建者',
`editor` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '更新者',
`deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标识',
`version` BIGINT NOT NULL DEFAULT 1 COMMENT '版本号',
`statistics_date` DATE NOT NULL DEFAULT '1970-01-01' COMMENT '统计日期',
`pv_count` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '页面流量数',
`uv_count` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '独立访客数',
`ip_count` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '独立IP数',
`effective_redirection_count` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '有效跳转数',
`ineffective_redirection_count` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '无效跳转数',
`compression_code` VARCHAR(16) NOT NULL COMMENT '压缩码',
`short_url_digest` VARCHAR(128) NOT NULL COMMENT '短链摘要',
`long_url_digest` VARCHAR(128) NOT NULL COMMENT '长链摘要',
UNIQUE uniq_date_code_digest (`statistics_date`, `compression_code`)
) COMMENT '访问数据统计';

CREATE TABLE `transform_event_record`
(
`id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`edit_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '创建者',
`editor` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '更新者',
`deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标识',
`version` BIGINT NOT NULL DEFAULT 1 COMMENT '版本号',
`unique_identity` VARCHAR(128) NOT NULL COMMENT '唯一身份标识,SHA-1(客户端IP-UA)',
`client_ip` VARCHAR(64) NOT NULL COMMENT '客户端IP',
`short_url` VARCHAR(32) NOT NULL COMMENT '短链URL',
`long_url` VARCHAR(768) NOT NULL COMMENT '长链URL',
`short_url_digest` VARCHAR(128) NOT NULL COMMENT '短链摘要',
`long_url_digest` VARCHAR(128) NOT NULL COMMENT '长链摘要',
`compression_code` VARCHAR(16) NOT NULL COMMENT '压缩码',
`record_time` DATETIME NOT NULL COMMENT '记录时间戳',
`user_agent` VARCHAR(2048) COMMENT 'UA',
`cookie_value` VARCHAR(2048) COMMENT 'cookie',
`query_param` VARCHAR(2048) COMMENT 'URL参数',
`province` VARCHAR(32) COMMENT '省份',
`city` VARCHAR(32) COMMENT '城市',
`phone_type` VARCHAR(64) COMMENT '手机型号',
`browser_type` VARCHAR(64) COMMENT '浏览器类型',
`browser_version` VARCHAR(128) COMMENT '浏览器版本号',
`os_type` VARCHAR(32) COMMENT '操作系统型号',
`device_type` VARCHAR(32) COMMENT '设备型号',
`os_version` VARCHAR(32) COMMENT '操作系统版本号',
`transform_status` TINYINT NOT NULL DEFAULT 0 COMMENT '转换状态,1:转换成功,2:转换失败,3:重定向成功,4:重定向失败',
INDEX idx_record_time (`record_time`),
INDEX idx_compression_code (`compression_code`),
INDEX idx_short_url_digest (`short_url_digest`),
INDEX idx_long_url_digest (`long_url_digest`),
INDEX idx_unique_identity (`unique_identity`)
) COMMENT '转换事件记录';

压缩码生成模块实现

压缩码生成的方法比较简单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private final SequenceGenerator sequenceGenerator;    # <------------- 雪花算法序列生成器
@Value("${compress.code.batch:100}")
private Integer compressCodeBatch;
......


private void generateBatchCompressionCodes() {
for (int i = 0; i < compressCodeBatch; i++) {
long sequence = sequenceGenerator.generate();
CompressionCode compressionCode = new CompressionCode();
compressionCode.setSequenceValue(String.valueOf(sequence));
String code = ConversionUtils.X.encode62(sequence); # <-------------- 10进制转62进制
code = code.substring(code.length() - 6);
compressionCode.setCompressionCode(code);
compressionCodeDao.insertSelective(compressionCode);
}
}

总是批量生成可用的压缩码,查询的时候只需要查出当前未被使用的第一个压缩码即可。

容器拦截器链实现

容器的拦截器需要实现org.springframework.web.server.WebFilterWebFluxFilter接口),主要有四个实现(顺序如下):

  • MappedDiagnosticContextFilter:引入transmittable-thread-local通过MDCTraceId的请求上下文绑定,WebFlux的线程模型和常见的Servlet容器的线程模型不一样,这里不能直接使用ThreadLocal或者Slf4j中原有的MDC实现
  • BlockIpFilter:判断客户端请求IP是否命中黑名单
  • AccessDomainFilter:判断域名是否命中短链域名白名单(可选的,因为外部已经通过NGINX做了一次拦截,这个实现是可有可无的)
  • ExcludeUriFilter:判断当前请求的URI是否命中了URI黑名单

这里简单展示一下MappedDiagnosticContextFilter的实现:

1
2
3
4
5
6
7
8
9
10
11
@Order(value = Integer.MIN_VALUE)
@Component
public class MappedDiagnosticContextFilter implements WebFilter {

@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
String uuid = UUID.randomUUID().toString();
MDC.put("TRACE_ID", uuid);
return chain.filter(exchange).then(Mono.fromRunnable(() -> MDC.remove("TRACE_ID")));
}
}

上面的TRACE_ID是配合项目的logback.xml中的pattern使用。另外需要参考https://github.com/alibaba/transmittable-thread-local/blob/master/docs/requirement-scenario.mdlogbacktransmittable-thread-local做集成的场景:

这里为了方便管理和升级版本,笔者直接把logback-mdc-ttl的源码实现改造好后放到项目中。

服务内部拦截器链实现

服务内部的拦截器链主要负责请求参数解析、URL映射转换、重定向和访问转换结果记录,顶层接口设计如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
public interface TransformFilter {

default int order() {
return 1;
}

default void init(TransformContext context) {

}

void doFilter(TransformFilterChain chain,
TransformContext context);
}

TransformContext是一个属性承载类,本质是一个普通的JavaBean,设计如下:

目前内置了4个拦截器实现,包括:

  • ExtractRequestHeaderTransformFilter:请求头解析
  • UrlTransformFilterURL转换
  • RedirectionTransformFilter:重定向处理
  • TransformEventProcessTransformFilter:转换事件记录

UrlTransformFilter为例子,源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@Slf4j
@Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Component
public class UrlTransformFilter implements TransformFilter {

@Autowired
private UrlMapCacheManager urlMapCacheManager;

@Override
public int order() {
return 2;
}

@Override
public void init(TransformContext context) {

}

@Override
public void doFilter(TransformFilterChain chain,
TransformContext context) {
String compressionCode = context.getCompressionCode();
UrlMap urlMap = urlMapCacheManager.loadUrlMapCacheByCompressCode(compressionCode);
context.setTransformStatus(TransformStatus.TRANSFORM_FAIL);
if (Objects.nonNull(urlMap)) {
context.setTransformStatus(TransformStatus.TRANSFORM_SUCCESS);
context.setParam(TransformContext.PARAM_LONG_URL_KEY, urlMap.getLongUrl());
context.setParam(TransformContext.PARAM_SHORT_URL_KEY, urlMap.getShortUrl());
chain.doFilter(context);
} else {
log.warn("压缩码[{}]不存在或异常,终止TransformFilterChain执行,并且重定向到404页面......", compressionCode);
throw new RedirectToErrorPageException(String.format("[c:%s]", compressionCode));
}
}
}

所有的服务内拦截器的scope都是prototype,意味着每次初始化拦截器链都会重新创建对应的Bean

主控制器实现

因为octopus只做短链访问的入口,后台管理的功能交给另外的服务实现,此服务只有一个控制器,控制器里面只有一个方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@RequiredArgsConstructor
@RestController
public class OctopusController {

private final UrlMapService urlMapService;

@GetMapping(path = "/{compressionCode}")
@ResponseStatus(HttpStatus.FOUND)
public Mono<Void> dispatch(@PathVariable(name = "compressionCode") String compressionCode, ServerWebExchange exchange) {
ServerHttpRequest request = exchange.getRequest();
TransformContext context = new TransformContext();
context.setCompressionCode(compressionCode);
context.setParam(TransformContext.PARAM_SERVER_WEB_EXCHANGE_KEY, exchange);
if (Objects.nonNull(request.getRemoteAddress())) {
context.setParam(TransformContext.PARAM_REMOTE_HOST_NAME_KEY, request.getRemoteAddress().getHostName());
}
HttpHeaders httpHeaders = request.getHeaders();
Set<String> headerNames = httpHeaders.keySet();
if (!CollectionUtils.isEmpty(headerNames)) {
headerNames.forEach(headerName -> {
String headerValue = httpHeaders.getFirst(headerName);
context.setHeader(headerName, headerValue);
});
}
// 处理转换
urlMapService.processTransform(context);
// 这里有一个技巧,flush用到的线程和内部逻辑处理的线程不是同一个线程,所有要用到TTL -- 和Servlet容器不一样,所以目前写的比较别扭
return Mono.fromRunnable(context.getRedirectAction());
}
}

这个主控制的分发压缩码方法只负责封装参数调用服务内部拦截器链进行后续的处理。然后添加一个全局的异常处理器,把所有的异常或者非法操作引导到一个自定义的404页面(甚至可以在上面挂一点广告):

Dubbo契约实现

octopus-contract是一个完全独立的模块,甚至可以说它是一个完全独立的项目,主要作用是提供契约API,让其他服务引入,让octopus-server模块进行实现。契约接口定义如下:

1
2
3
4
public interface OctopusApi {

Response<CreateUrlMapResponse> createUrlMap(CreateUrlMapRequest request);
}

基于Dubbo的实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@DubboService(retries = -1)
public class DefaultOctopusApi implements OctopusApi {

@Autowired
private UrlMapService urlMapService;

@Value("${default.octopus.domain}")
private String domain;

@Override
public Response<CreateUrlMapResponse> createUrlMap(CreateUrlMapRequest request) {
UrlMap urlMap = new UrlMap();
urlMap.setUrlStatus(UrlMapStatus.AVAILABLE.getValue());
urlMap.setLongUrl(request.getLongUrl());
urlMap.setDescription(request.getDescription());
String shortUrl = urlMapService.createUrlMap(domain, urlMap);
return Response.succeed(new CreateUrlMapResponse(request.getRequestId(), shortUrl));
}
}

生产中契约模块做了比较多的特性定制,这里只举一个简单实现的例子。

部署架构

octopus服务集群单独部署,支持无限添加节点,部署架构的关键在于网络架构,内层的负载均衡使用了Nginx,最外层的负载均衡使用了云负载均衡,如阿里云的SLB或者UCloudULB。添加或者移除短链域名,关键在于修改Nginx的配置。基本的架构如下:

只要保证负载均衡池指向octopus集群即可,短链的域名可能动态增删,操作完之后只需要nginx -s -reload刷新一下Nginx的配置即可。

使用短链服务

先在domain_conf表写入一条本地域名和端口的数据:

编写一个集成测试类,创建一个短链映射:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Slf4j
@SpringBootTest(classes = OctopusServerApplication.class, properties = "spring.profiles.active=local")
@RunWith(SpringRunner.class)
public class UrlMapServiceTest {

@Autowired
private UrlMapService urlMapService;

@Test
public void createUrlMap() {
String domain = "localhost:9099";
UrlMap urlMap = new UrlMap();
urlMap.setUrlStatus(UrlMapStatus.AVAILABLE.getValue());
urlMap.setLongUrl("https://throwx.cn/2020/08/24/canal-ha-cluster-guide");
urlMap.setDescription("测试短链");
String url = urlMapService.createUrlMap(domain, urlMap);
log.info("生成的短链:{}", url);
}
}
// 某次执行的结果如下:生成的短链:http://localhost:9099/Myt8qW

基于本地配置启动项目,然后访问http://localhost:9099/Myt8qW,效果如下:

日志如下:

1
2
[2020-12-27 19:29:22,285] [INFO] cn.throwx.octopus.server.application.consumer.TransformEventConsumer [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1] [1c603903-e8d8-4072-aa97-6abf614b9411] - 接收到URL转换事件,内容:{"clientIp":"192.168.211.113","compressionCode":"Myt8qW","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36","cookieValue":"Webstorm-734c3b68=9b8b3560-41f5-478a-93d0-b02128b1022f; __gads=ID=28121bd829638f67-2286c86e7fc400d3:T=1604132165:RT=1604132165:S=ALNI_MbsMQROv6swaC8kf4ux2suZm_GZXA; Hm_lvt_4df6907aebab752244c3ca1432b4ff57=1605930058,1607228133","timestamp":1609068562262,"shortUrlString":"http://localhost:9099/Myt8qW","longUrlString":"https://throwx.cn/2020/08/24/canal-ha-cluster-guide","transformStatusValue":3}......
[2020-12-27 19:29:22,353] [INFO] cn.throwx.octopus.server.application.consumer.TransformEventConsumer [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1] [1c603903-e8d8-4072-aa97-6abf614b9411] - 记录URL转换事件完成......

查看转换事件记录表的数据:

后续功能迭代

前期方案有一个安全隐患:没有做压缩码的白名单,容易被基于短链域名,伪造压缩码拼接短链接的方法进行攻击。解决方案是在容器的拦截器链添加或者替换一个基于布隆过滤器实现的压缩码(短链接)白名单拦截器,这样就能在前期拦截了绝大部分恶意伪造的压缩码,让极少量命中了错误率部分的恶意压缩码流到后面的处理逻辑中进行判断。另外,可以引入Caffeine配合Redis做两级缓存,毕竟本地缓存的速度更快。

小结

octopus初版是一个4小时紧急迭代出来的一个微型项目,到现在为止更新了很多次,生产上已经基本稳定。文中描述的版本是公司生产版本的移植版,精简了大量代码同时移除了一些业务耦合的设计,这里把源码开放出来,让一些有可能用到短链服务的场景提供一个可参考但尽可能不要复制的解决思路。源码仓库:

  • Giteehttps://gitee.com/throwableDoge/octopus
  • Githubhttps://github.com/zjcscut/octopus

代码都在main分支。

彩蛋

最近鸽了很长一段时间,原因是年底比较多业务功能迭代,内部的一个标签服务重构花了大量时间。笔者一直在摸索着通过”分片”、”异步”等等思想,在时间可控的前提下,对小数据量(百万和千万级别)前提下,通过常用的关系型数据库、缓存、消息队列等非大数据平台架构替代实现《用户画像方法论与工程化解决方案》里面提到的解决方案。

标签服务内部的代号是”千寻”,取自于辛弃疾《青玉案元夕》中的”众里寻他千百度”,项目名来自于宫崎骏的动漫《千与千寻》的女主千寻(千寻罗马音是chihiro):

待后面项目上线一段时间稳定后,应该会抽时间写一个系列谈谈怎么不用大数据那套体系,提供用户画像的工程化解决方案。

(本文完 c-10-d e-a-20201227)

]]>
+ + + <p>一直想实现一个私有化的短链接服务,后来发现了这个项目,避免了重复造轮子。</p> + + + + + + + + + + + + +
+ + + 🌈Awesome Software / Service + + https://awaw.cc/post/awesome/ + 2023-07-06T16:00:00.000Z + 2024-03-26T09:33:47.693Z + + 分享一些好用的软件、服务和开源项目等,传递开源与分享精神。纯粹的分享与推荐,放心食用。

开源项目仅提供代码仓库地址,若有官方网站亦会标明。内容排序方式为项目名称英文字母顺序。

目前收录总数:35

  • 桌面应用:19
  • 服务应用:12
  • 开源字体:4

桌面应用

桌面应用是一种在桌面操作系统上运行的应用程序,例如 Windows、macOS 和 Linux。与 Web 应用程序和移动应用程序不同,桌面应用程序通常是使用本地编程语言和工具(例如 C++、C#、Java 或 Swift)开发的,并且可以直接在计算机上运行,而无需通过浏览器或移动设备。桌面应用程序可以具有许多不同的功能,例如文本编辑器、图形设计工具、游戏、办公套件、音频/视频编辑器等。与 Web 应用程序相比,桌面应用程序通常具有更高的性能和更好的用户体验,因为它们可以直接访问计算机的资源,例如文件系统、网络和硬件设备。同时,桌面应用程序也需要更多的开发和维护工作,因为它们需要考虑不同操作系统和硬件设备的兼容性问题。

7z - 压缩工具

7-Zip是一个具有高压缩比的文件归档器。

7-Zip is a file archiver with a high compression ratio.

官方网站 GitHub

CUE Splitter - 音频分轨

CUE Splitter是一个免费的工具,它可以将一个大的音频文件,主要是一张专辑或一个汇编,分割成相对独立的曲目,使用相关的“CUE表”文件中包含的信息。有时你可以找到一个大的压缩音乐文件(例如MP3,APE,FLAC,OGG,WAV,WMA等)。配备了一个小的.cue文本文件,其中包含有关内部轨道的所有细节:标题,艺术家,持续时间等。通常这对夫妇的文件是由像EAC(精确音频复制),foobar2000,BPM Studio,GoldWave或类似的程序生成的。使用CUE Splitter,您可以分割音乐曲目,而无需解码/重新编码任何音频数据!此外,输出文件自动命名使用用户定义的“文件掩码”字符串和他们的标签填充信息提取的“提示表”。

CUE Splitter is a freeware tool that splits a single big audio file, mostly an album or a compilation, into the relative individual tracks, using the informations contained in the associated “CUE Sheet” file. Sometimes you can find a big compressed music file (for example MP3, APE, FLAC, OGG, WAV, WMA, etc.) equipped with a small .cue text file that contains all the details about internal tracks: title, artist, duration, and so on. Usually these couple of files are generated by programs like EAC (Exact Audio Copy), foobar2000, BPM Studio, GoldWave or similar. With CUE Splitter you can split music tracks without decode/re-encode any audio data! Moreover output files are automatically named using a user-defined “file mask” string and their tags are filled with informations extracted from “CUE Sheet”.

官方网站

DBeaver - 数据库工具

DBeaver Community是一个免费的跨平台数据库工具,面向开发人员、数据库管理员、分析师和所有使用数据的人。它支持所有流行的SQL数据库,如MySQL,MariaDB,PostgreSQL,SQLite,Apache Family等。

DBeaver Community is a free cross-platform database tool for developers, database administrators, analysts, and everyone working with data. It supports all popular SQL databases like MySQL, MariaDB, PostgreSQL, SQLite, Apache Family, and more.

官方网站

Everything - 本地搜索引擎

Everything 是 Windows 上一款搜索引擎,它能够基于文件名快速定文件和文件夹位置。

Everything is search engine that locates files and folders by filename instantly for Windows.

可以快速搜索本地任何角落,以便找到自己想要的内容,装机必备。Everything也衍生了一些工具,比如uTools中的本地搜索依赖Everything才能更高效的工作,又如EverythingToolbar可以把Everything集成到任务栏中。

官方网站

FreeControl - 用电脑控制手机

在PC上控制Android设备。

Control Android devices on PC.

官方网站 GitHub

HiBit Uninstaller - 卸载工具

HiBit Uninstaller是卸载Windows软件的完美解决方案,使您可以使用其简单且用户友好的界面快速,完全地卸载程序。

HiBit Uninstaller is the perfect solution for uninstalling Windows software, allowing you to uninstall programs quickly and completely using its simple and user friendly interface.

官方网站

LocalSend - 局域网文件传输

AirDrop的开源跨平台替代品。

An open-source cross-platform alternative to AirDrop.

官方网站 GitHub

Motrix - 下载工具

一款全能的下载工具。支持下载 HTTP、FTP、BT、磁力链接等资源。

A full-featured download manager. Support downloading HTTP, FTP, BitTorrent, Magnet, etc.

这个软件内置了Aria2 - 下载工具,如果懒得折腾aria2,用这个软件就够用了。如果有NAS设备,推荐使用Docker部署aria2服务,让下载这件事与PC解耦。

官方网站 GitHub

MusicPlayer2 - 音乐播放器

MusicPlayer2是一款集音乐播放、歌词显示、格式转换等众多功能于一身的音频播放软件。支持歌词显示、歌词卡拉OK样式显示、歌词在线下载、歌词编辑、歌曲标签识别、专辑封面显示、专辑封面在线下载、频谱分析、音效设置、任务栏缩略图按钮、主题颜色、格式转换等功能。播放内核为BASS音频库(V2.4)。播放器支持几乎所有常见的音频格式。

MusicPlayer2 is an audio player whitch supports music collection playback, lyrics display, format conversion and many other functions. It supports lyrics display, lyrics karaoke style display, lyrics online download, lyrics editing, song tag recognition, album cover display, album cover online download, spectrum analysis, sound effect settings, taskbar thumbnail button, theme color, format conversion and other functions. The playback kernel is the Bass Audio Library (V2.4). The player supports almost all common audio formats.

GitHub

MusicTag - 音乐标签编辑器

『音乐标签』是一款可以编辑歌曲的标题、专辑、艺术家等信息的应用程序,支持FLAC, APE, WAV, AIFF, WV, TTA, MP3, MP4, M4A, OGG, MPC, OPUS, WMA, DSF, DFF等音频格式,绿色无广告,无任何功能限制。

MusicTag is an application that can edit the title, album, artist information of the song, supporting FLAC, APE, WAV, AIFF, WV, TTA, MP3, MP4, M4A, OGG, MPC, OPUS, WMA, DSF, DFF, etc. audio formats, green and without ads, no function restrictions.

官方网站

ruffle - Flash播放器

用Rust编写的Flash Player模拟器。

A Flash Player emulator written in Rust.

官方网站 GitHub

ScreenToGif - 录制GIF

ScreenToGif允许您录制屏幕的选定区域,编辑并保存为gif或视频。

🎬 ScreenToGif allows you to record a selected area of your screen, edit and save it as a gif or video.

官方网站 GitHub

Snipaste - 截图贴图工具

Snipaste 是一个简单但强大的贴图工具,同时也可以执行截屏、标注等功能。

Snipaste is a simple but powerful snipping tool, and also allows you to pin the screenshot back onto the screen.

官方网站

TrafficMonitor - 硬件资源监控

一款用于Windows平台的网速监控悬浮窗软件,可以显示当前网速、CPU及内存利用率,支持嵌入到任务栏显示,支持更换皮肤、历史流量统计等功能。

TrafficMonitor is a network monitoring software with floating window feature for Windows. It displays the current internet speed and CPU and RAM usage. There are also other capabilities like an embedded display in the taksbar, changeable display skins, and historical traffic statistics.

GitHub

TranslucentTB - 任务栏透明

一个轻量级的实用程序,使Windows任务栏半透明/透明。

A lightweight utility that makes the Windows taskbar translucent/transparent.

GitHub

uTools - 效率工具平台

uTools 是一个极简、插件化的现代桌面软件,通过自由选配丰富的插件,打造得心应手的工具集合。

非常好用的一款跨平台工具集合,虽然有会员订阅服务(主要是提供了数据备份、多端同步等功能),但无需订阅即可使用大部分功能,满足大部分用户的需要。

官方网站

插件推荐

易翻翻译、ctool、颜色助手、OCR、文件批量重命名、hosts、二维码、本地搜索、文本代码对比、json编辑器、变量命名方式、正则编辑器、编码小助手、计算稿纸。

Visual Studio Code - 编辑器

Visual Studio Code是一个轻量级但功能强大的源代码编辑器,可在桌面上运行,适用于Windows、macOS和Linux。它内置了对JavaScript,TypeScript和Node.js的支持,并拥有丰富的其他语言和运行时扩展生态系统(如C++,C#,Java,Python,PHP,Go,.NET)。

Visual Studio Code is a lightweight but powerful source code editor which runs on your desktop and is available for Windows, macOS and Linux. It comes with built-in support for JavaScript, TypeScript and Node.js and has a rich ecosystem of extensions for other languages and runtimes (such as C++, C#, Java, Python, PHP, Go, .NET).

官方网站 GitHub

VLC - 媒体播放器

VLC 是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议。

VLC is a free and open source cross-platform multimedia player and framework that plays most multimedia files as well as DVDs, Audio CDs, VCDs, and various streaming protocols.

官方网站 GitHub

WindTerm - 跨平台终端

一款专业的跨平台SSH/Sftp/Shell/Telnet/Serial终端。

A professional cross-platform SSH/Sftp/Shell/Telnet/Serial terminal.

官方网站 GitHub

服务应用

服务应用是一种在后台运行的应用程序,通常在服务器或云平台上运行。与桌面应用程序和移动应用程序不同,服务应用程序通常不直接与用户交互,而是在后台执行某些任务。服务应用程序可以具有许多不同的功能,例如数据处理、文件传输、消息传递、安全认证等。服务应用程序通常使用 Web 技术(例如 RESTful API、SOAP、JSON 等)作为与其他应用程序和服务进行交互的接口。服务应用程序可以在云平台上扩展和自动扩展,以满足不断变化的需求。同时,服务应用程序也需要更多的开发和维护工作,因为它们需要考虑安全性、可伸缩性、可靠性等问题。

推荐部署在云服务器上或有公网IP的NAS设备上,推荐使用常见的Linux发行版,如CentOS、Ubuntu、Debian。

推荐使用 docker-compose 方式部署便于维护和迁移,但部署方式不限于此,文中推荐的大部分服务都提供了跨平台、跨架构支持,更多部署方式请参考官方网站或GitHub。

acme.sh - 自动化证书

一个实现ACME客户端协议的纯Unix shell脚本。

A pure Unix shell script implementing ACME client protocol.

本站的证书由Let’s Encrypt签发,因为托管在Vercel和Netlify中,服务商会定期进行续签,个人无需维护。

但个人服务器的证书就需要自己维护了,这时就要用到acme.sh。具体用法参考以下内容以及项目官网文档。

官方网站 GitHub

AdGuard Home - 私人DNS

AdGuard Home 是一款全网广告拦截与反跟踪软件。在您将其安装完毕后,它将保护您所有家用设备,同时您不再需要安装任何客户端软件。随着物联网与连接设备的兴起,掌控您自己的整个网络环境变得越来越重要。

AdGuard Home is a network-wide software for blocking ads & tracking. After you set it up, it’ll cover ALL your home devices, and you don’t need any client-side software for that. With the rise of Internet-Of-Things and connected devices, it becomes more and more important to be able to control your whole network.

官方网站 GitHub

Alist - 多存储整合

一个支持多存储的文件列表程序,由 Gin 和 Solidjs 驱动。

A file list program that supports multiple storage, powered by Gin and Solidjs.

非常好用的一款存储整合服务,可以把各种存储整合在一个服务中,提供了友好的操作界面,支持超多网盘和其他存储方式、在线预览、离线下载、推送到Aira下载等。

官方网站 GitHub

aria2 - 下载工具

aria 2是一个轻量级的多协议和多源,跨平台下载工具,在命令行操作。它支持HTTP/HTTPS,FTP,SFTP,BitTorrent和Metalink。

aria2 is a lightweight multi-protocol & multi-source, cross platform download utility operated in command-line. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink.

如果没有自己的服务器,建议使用Motrix - 下载工具简单易用。

GitHub

AriaNg - aria2 WebUI

AriaNg,一个让aria2更容易使用的现代化Web前端。

AriaNg, a modern web frontend making aria2 easier to use.

只是一个静态的网站,可以直接双击index.html运行,也可以托管到免费的平台中使用,如GitHub Pages、Vercel等。或者使用我托管在Netlify中的AriaNg

GitHub

ddns-go - 动态域名解析

自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。

一般家用宽带没有固定的公网IP,但目前大部分地区运行商都提供了动态公网IPv6,此时就需要动态域名解析了。实现原理很简单,定时获取本机公网IP,调用域名服务商API将值更新上去,但是这个项目已经很完善,没必要重复造轮子,完全满足需求。

GitHub

Heimdall - 导航页

应用程序仪表板和启动器。

An Application dashboard and launcher.

简约大气的导航页,且可以对一些支持的应用提供扩展功能,如监控Portainer容器状态、aria2下载任务状态等。

GitHub

Home Assistant - 家庭自动化平台

将本地控制和隐私放在首位的开源家庭自动化。由世界各地的社区成员和DIY爱好者组成的团体提供强力支持。

Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts.

目前智能家居品牌很多,大部分品牌都在搞自家生态,想使用一个APP控制家里所有设备,就需要用到Home Assistant将不同品牌智能设备接入统一管理。

官方网站 GitHub

Qwerty Learner - 记单词

为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件。

Words learning and English muscle memory training software designed for keyboard workers.

官方网站 GitHub

RustDesk - 远程桌面

RustDesk 是一个功能齐全的开源远程控制替代方案,可通过最少的配置实现自托管和安全性。

RustDesk is a full-featured open source remote control alternative for self-hosting and security with minimal configuration.

建议使用拥有公网IP的设备自建服务器(无公网IP可以通过Tailscale - 异地组网后使用),我的NAS只有公网IPv6,上行带宽30Mbps,使用体验比ToDesk免费版好很多,已经逐渐放弃使用ToDesk。

官方网站 GitHub

Tailscale - 异地组网

Tailscale是一种VPN服务,可以让您在世界任何地方安全、轻松地访问您拥有的设备和应用程序。它使用开源WireGuard协议实现加密的点对点连接,这意味着只有您的专用网络上的设备才能相互通信。

Tailscale is a VPN service that makes the devices and applications you own accessible anywhere in the world, securely and effortlessly. It enables encrypted point-to-point connections using the open source WireGuard protocol, which means only devices on your private network can communicate with each other.

当用手机或电脑处于无IPv6环境时,可以通过Tailscale来访问家中的NAS服务器。需要注意的是,组网的双方其中有一方的NAT是Symmetric(对称型),就会打洞失败,流量会经转公共DERP服务器,速度很慢。同类型的产品还有Zerotier,个人感觉没有Tailscale好用。

官方网站 GitHub

Uptime Kuma - 服务状态监控

一个精美的自托管监控工具。

A fancy self-hosted monitoring tool.

可以用于监控并记录一些可访问服务的运行状态,如docker容器、网站等,也可以用作导航页(Heimdall平替)。除了管理页面,还可以创建允许匿名访问的状态页面(示例 - IPv6 Only)。

GitHub

开源字体

开源字体是指那些可以在版权允许的情况下免费或低成本向公众提供使用和修改的字体。这些字体的设计文件(源代码)通常是公开的,任何人在遵循相关许可协议的前提下都可以下载、使用,并在需要时进行修改和再分发。

阿里巴巴普惠体

阿里巴巴普惠体是一套全球永久免费正版商用的字体家族。

阿里巴巴普惠体3.0为一套符合新国家标准GB18030-2022的简体中文字符集,包含GB18030-2022强制规范三个实现级别:实现级别1+实现级别2标准规格的7字重、实现级别3标准规格的Regular 单一字重。7字重共194,460个全形汉字。包含拉丁字母、希腊字母、西里尔字母、标点符号。

官方网站

Cascadia Code

这是一种有趣的新型等宽字体,包含编程连字,旨在增强 Windows 终端的现代外观和感觉。

This is a fun, new monospaced font that includes programming ligatures and is designed to enhance the modern look and feel of the Windows Terminal.

GitHub

Monaspace

一个创新的代码字体超家族。

An innovative superfamily of fonts for code

官方网站 GitHub

霞鹜文楷

一款开源中文字体,基于 FONTWORKS 出品字体 Klee One 衍生。

An open-source Chinese font derived from Fontworks’ Klee One.

GitHub

]]>
+ + + <p>分享一些好用的软件、服务和开源项目等,传递开源与分享精神。纯粹的分享与推荐,放心食用。</p> + + + + + + + + + + + + +
+ + + 道路勘测设计学习笔记 + + https://awaw.cc/post/learn-road-design/ + 2023-03-31T16:00:00.000Z + 2023-07-04T04:07:05.632Z + + 道路平面设计

公路

一种带状的空间结构物,它的中线是一条空间曲线。

公路平面图

公路在水平面上的投影图。

公路纵断面图

通过公路中线的竖向剖面图。

公路横断面图

公路上任一点垂直于路中线的竖向剖面图。

缓和曲线

从曲率半径为无穷大逐渐向某一定值变化的曲线。

缓和曲线的作用

  • 缓和曲率——使曲率连续变化
  • 缓和超高——使横向坡度连续变化
  • 缓和加宽——使车道加宽连续变化

缓和曲线产生的效果

  • 曲率连续变化,便于车辆驾驶
  • 离心加速度连续变化,没有突变,乘客感觉舒适
  • 超高横坡度及加宽逐渐变化,行车更加稳定
  • 与圆曲线配合,增加线形美观

缓和曲线的线型

回旋线、三次抛物线、七次四项式型、半波正弦型、一波正弦型、双纽线、多心复曲线。

回旋线

半径从无穷大一直变化到一定设计值的一段弧线。回旋线是曲率随着曲线长度成比例变化的曲线。公路、匝道常用的缓和曲线是回旋线,也叫放射螺旋线。回旋线不仅线形美观,而且与驾驶员匀速转动方向盘由圆曲线驶入直线或者由直线驶入圆曲线的轨迹线相符合。

弯道的超高

为了减小横向力,一般圆曲线段上路面做成外侧高、内侧低的单向内倾横坡。

圆曲线最小半径

最大横向力系数μ和超高横坡度值i为主要影响因素。

横向力系数μ的确定

  • 按汽车行驶稳定性
  • 按行车舒适性
  • 按燃料和轮胎消耗

极限最小半径

各级公路对按计算行车速度行驶的车辆,能保证其安全行车的最小允许半径。

一般最小半径

对按计算行车速度行驶的车辆能保证其安全性和舒适性,它是通常情况下推荐采用的最小半径值。

不设超高的最小半径

当平曲线半径较大时,离心力的影响就较小,路面摩阻力就可以保证汽车有足够的稳定性,这是就可以不设置超高,而允许设置与直线段上相同的双向横坡的路拱形式。

平曲线的极限最小长度

根据经验,为使驾驶员在曲线行驶时不感到方向盘操作的困难,按6s的通过时间设置曲线长度是适宜的。

平曲线的一般最小长度

各级公路的平曲线,一般情况下应能够设置两段缓和曲线(或超高、加宽缓和段)及一段圆曲线。在平面设计中,为便于驾驶操作和行车安全与舒适,汽车在任何一种曲线形式上行驶的时间都不应短于3s。

公路转角小于7°时的平曲线长度

为避免造成视觉错误、保证行车安全,在进行平面设计时应避免设置小于7°的转角。当条件限制不得已时,在偏角小于7°的转角处应设置较长的平曲线,其长度应大于标准中规定值。

加宽

汽车在曲线上行驶所占路面宽度就比在直线上的大,为保证行车的安全,曲线段的路面应做适当的加宽。

加宽缓和段

为避免路面宽度从直线段上的正常宽度到圆曲线段的加宽断面的突变,在直线和圆曲线之间应设置一段路面宽度的渐变段,这一渐变段称为加宽缓和段。

超高

《标准》规定,当圆曲线半径小于不设超高的最小半径时,应设置超高(即将曲线部分的路面做成向内侧倾斜的单向横坡)。

超高缓和段

直线段上的双向横坡逐渐过渡到圆曲线段上的超高横坡的过渡段。

视距

驾驶员在行驶过程中的通视距离。

行车视距

为了保证行车安全,驾驶员应能看到前方一定距离的公路以及公路上的障碍物或迎面的来车,以便及时刹车或绕过。汽车在这段时间里沿公路路面行驶的必要安全距离,称为行车视距。

停车视距

指驾驶员看到障碍物后立即采取制动措施,至汽车在障碍物前停下来的最小安全距离。由三部分距离组成:

  • 驾驶员反应时间内行驶的距离
  • 制动距离,指制动生效到汽车完全停止时行驶的距离
  • 安全距离

会车视距

对于不设分隔带的双车道公路,车辆在行驶中,驾驶员趋向于沿路面中心行驶,一旦发现前方来车,双方驾驶员各自把车辆驶回到自己的车道上,使两车安全交会。为保证双向行驶的双车道公路的行车安全,公路平面应能保证会车视距要求,即满足双向行驶的汽车能在同一车道上及时刹车所需的最短距离。由三部分距离组成:

  • 双方驾驶员反应时间内汽车所行驶的距离
  • 双方汽车的制动距离
  • 安全距离

超车视距

《标准》规定,对于双向行驶的双车道公路,根据需要,应结合地形设置保证具有超车视距的路段,以使汽车行驶时安全超越前车。

超车视距全程可分为四个阶段

  • 加速行驶距离
  • 超车汽车在对向车道上行驶的距离
  • 超车汽车从开始加速到超车完成的时间内,对向车道汽车的行驶距离
  • 超车完成时,超车汽车与对向汽车之间的安全距离

平面线形

直线、圆曲线、回旋线

平面线形要素组合

  • 基本型——圆曲线两端用回旋线与直线相连接的组合型式称为基本型
  • S型——用两个反向回旋线连接两个反向圆曲线的组合型式称为S型
  • 卵型——用一个回旋线连接两个同向圆曲线的组合型式称为卵型
  • 凸型——在两个同向可旋线间不插入圆曲线而径相衔接的组合型式称为凸型
  • 复合型——两个以上同向回旋线在曲率相等处直接连接的组合型式称为复合型
  • C型——两同向回旋线在曲率为零处径相衔接的组合型式称为C型

道路纵断面设计

坡线和竖曲线

公路在纵断面上由不同的上坡段、下坡段(统称坡段)和平顺连接相邻两坡段的竖向曲线段组成,即公路路线在纵断面上是一条有起伏的空间线,其基本线形由坡线和竖曲线组成。

地面标高

公路中线各桩点的地面高程称地面标高。

地面线

各点地面标高的连线称地面线,它是一条不规则的空间折线。

设计标高

路基边缘点的高程称设计标高(公路改建时可用原路中线标高为设计标高)。

设计线

各桩点设计标高的连线称纵断面设计线,简称设计线,它是经过技术上、经济上和美学上比较后确定的,由坡线和竖曲线组成的空间线。地面线和设计线是纵断面图的两条主要线。

填挖高

同一桩点的设计标高与地面标高的差值称施工标高,又称填挖高。

填方路段、挖方路段

  • 若该桩点的施工标高为“+”,即设计标高大于地面标高,这样的路基通常为填筑而成的路堤,这样的路段即填方路段
  • 若施工标高为“-”则为路堑,这样的路段即挖方路段。

纵坡

坡线的坡度即路线纵向坡度,简称纵坡。

转坡点

相邻两坡线的交点称转坡点,在转坡点处应设竖曲线。转坡点前后两坡线坡度之差称转坡角。

高原折减

在海拔3000m以上的高原地区,因空气稀薄,不但会使发动机的功率减少,还使水箱的水容易沸腾而降低冷却系统的功能,因此应将《标准》规定的最大纵坡予以折减。

平均纵坡

由若干坡段组成的路段,其两端点的高差与路段长度之比称平均纵坡。

合成坡度

路线纵向坡度与横向坡度的矢量和称合成坡度。

道路横断面设计

横断面

公路中线法线方向的剖面图称公路横断面图,简称横断面,亦即由公路横断面设计的主要组成部分与横断地面线所围成的面,它反映了公路在横剖面上的组成情况、形状和几何尺寸,是公路路线设计的重要内容之一。公路横断面设计的主要组成部分是路面和路基,路面包括行车道、变速车道、紧急停车带、爬坡道等,路基包括路肩、边坡、边沟、护坡道、截水沟等。

路基横断面

为设计计算方便,通常用两侧路肩边缘点的联线,来代替路面、路肩等的横坡折线,即横断面的顶面可绘成一条直线。这样将顶面用一直线绘成的横断面即路基横断面。

路拱

为了排除路面的雨水,将路面做成中间高两边低的拱起形状称路拱。

路拱横坡

路面中线点与路面边缘点的高差,与其水平距离的比值称路拱横坡,以%表示。

分隔带

沿道路纵向设置分隔行车道用的带状设施称分隔带,位于中线位置上的称中间带,位于中线两侧的称外侧分隔带。

路肩

位于行车道外缘至路基边缘具有一定宽度的带状设施称路肩,它是路面的侧向支撑,可供临时停车和人行通行,还可使驾驶员有安全感。

路基宽度

在一个横断面上,两侧路肩边缘点间的宽度称路基宽度。

路基边坡

为保证路基的稳定,把路基两侧做成具有一定坡度的坡面称路基边坡。

边沟

为汇集并排除路面、路肩和边玻的水流,在路基两侧设置的水沟称边沟。一般情况下,挖方路基和填土高度小于0.5m的矮路堤,均应设置边沟。

边沟的型式

通常有梯形、矩形和三角形三种,视上质情况和施工方法而定,一般土质路基采用梯形,岩石路基可采用三角形或矩形,机械化施工时多采用三角形。

截水沟

为拦截并排除流向路基的地面水流,以避免对路基边坡冲刷等而设置的排水沟称截水沟。

免费运距

土方作业包括挖、装、运卸等工序,在某一一特定距离内,只按挖方数计价而不计算运费,这一特定距离称免费运距。

平均运距

土石方调配时,从挖方体积重心到填方体积重心的距离称平均运距,为简化设计计算,通常平均运距按挖方路段中心至填方路段中心的距离计。

道路交叉设计

冲突点

当行车方向互相交叉时,可能发生碰撞的地点称为冲突点。

交织点

当车辆从不同方向驶向同一方向或成锐角相交时,可能产生挤撞的地点称为交织点。

加铺转角

以圆曲线构成宽来连接交叉公路的路基和路面,称为加铺转角式交叉。

立体交叉

公路与公路或铁路在不同高度上互相交义的型式称立体交叉。

立体交叉形式

  • 分离式
  • 互通式

互通式立体交叉的类型

  • 苜蓿叶形
  • 部分苜蓿叶形
  • Y形
  • 喇叭形
  • 菱形
  • 环形
  • 定向式立体交叉

匝道的作用

匝道是连接立体交叉上、下路线的交换道,一般在匝道上既有弯道又有坡度。

匝道的类型

  • 右转弯匝道——直接从主干线右转弯驶出的匝道
  • 环形匝道——这是一种左转弯行驶的匝道形式。车辆由干线的右侧出口,并以约270°角向右转弯,而完成左转弯的行驶
  • 定向式匝道——由干线左侧出口,以较短捷的路线直接驶入连接的干线,从而完成左转弯的匝道
  • 迁回式匝道——由干线右侧出口,暂时偏离所去方向,以迂回绕行的方式完成左转弯的匝道

变速车道

车辆由高速公路驶入匝道(或车速低的道路)须减速,反之,车辆由匝道(或车速低的道路)驶进高速公路须加速。为了调整车速而设置在高速公路与匝道间的减速或加速车道,称为变速车道。

]]>
+ + + <h2 id="道路平面设计"><a href="#道路平面设计" class="headerlink" title="道路平面设计"></a>道路平面设计</h2><h3 id="公路"><a href="#公路" class="headerlink" title="公路"></a>公路</h3><p>一种带状的空间结构物,它的中线是一条空间曲线。</p> + + + + + + + + + + +
+ + + 桥梁设计学习笔记 + + https://awaw.cc/post/learn-bridge-design/ + 2023-03-31T16:00:00.000Z + 2023-07-04T04:07:09.846Z + + 桥梁定义

桥梁是道路路线遇到江河湖泊、山谷深沟以及其他线路(铁路或公路)等障碍时,为了保持道路的连续性而专门建造的人工构造物。桥梁既要保证桥上的交通运行,也要保证桥下水流的宣泄、船只的通航或车辆的通行。

桥梁基本组成

上部结构

桥跨结构

线路跨越障碍(如江河、山谷或其他线路等)的结构物。

下部结构

桥墩

是在河中或岸上支承桥跨结构的结构物。

  • 轻型桥墩——盖梁、系梁、立柱
  • 重力式桥墩——墩帽、墩身

桥台

设在桥的两端;一边与路堤相接,以防止路堤滑塌;另一边则支承桥跨结构的端部。为保护桥台和路堤填土,桥台两侧常做锥形护坡、挡土墙等防护工程。

墩台基础

是保证桥梁墩台安全并将荷载传至地基的结构。

  • 扩大基础
  • 桩基础承台
  • 桩柱式

支座系统

在桥跨结构与桥墩或桥台的支承处所设置的传力装置。它不仅要传递很大的荷载,并且还要保证桥跨结构能产生一定的变位。

  • 橡胶支座
  • 支座垫石

附属设施

桥面铺装

或称行车道铺装,铺装的平整性、耐磨性、不翘曲、不渗水是保证行车舒适的关键。

排水防水

应能迅速排除桥面积水,并使渗水的可能性降至最小限度。

栏杆

既是保证安全的构造措施,又是有利于观赏的最佳装饰件。

伸缩缝

桥跨上部结构之间或桥跨上部结构与桥台端墙之间所设的缝隙,以保证结构在各种因素作用下的变位。为使行车顺适、不顺簸,桥面上要设置伸缩缝构造。

灯光照明

桥梁分类

按使用性质分类

公路桥、铁路桥、公铁两用桥、城市道路桥(含立交桥)、人行桥、机耕桥、管线桥、渡槽桥。

按桥身结构材料分类

木桥、圬工桥(砖、石、砼砌块桥)、钢筋砼桥、预应力砼桥、钢桥。

按单孔跨径、多孔跨径总长分类

分类多孔跨径总长L(m)单孔跨径Lk(m)
特大桥L > 1000Lk > 150
大桥100 ≤ L ≤ 100040 ≤ Lk < 150
中桥30 < L < 10020 ≤ Lk < 40
小桥8 ≤ L ≤ 305 ≤ Lk < 20
涵洞L < 8Lk < 5

按桥跨结构分类

梁式桥(简支梁、连续梁、伸臂梁)、桁架桥、拱桥、刚构桥、悬索桥、斜拉桥等。此外,还有浮桥、漫水桥、活动桥等。

桥梁类型和受力特点

类型受力特点建造材料
梁式桥竖向荷载作用下无水平反力,梁内产生的弯矩最大抗弯能力强(钢、木、钢筋砼、预应力钢筋砼)
拱式桥主要承重结构是拱圈或拱助,在竖向荷载作用下,墩台承受水平推力,承重结构以受压为主抗压能力强的圬工材料(砖、石、砼)和钢筋砼
刚架桥梁和柱的连接处具有很大的刚性,在竖向荷载作用下,梁部主要受弯,在柱脚处也具有水平反力,受力状态介于梁桥和拱桥之间施工比较困难,用普通钢筋砼修建,梁柱刚结处易产生裂缝
悬索桥以悬索为主要承重结构,结构自重较轻,构造简单、受力明确,能以较小的建筑高度经济合理地修建大跨度桥结构自重轻,刚度差,在车辆荷载和风荷载作用下有较大的变形和振动
组合体系桥由几个不同体系的结构组合而成,常见的有:连续刚构,梁、拱组合等;斜拉桥也是组合体系桥的一种——

梁式桥

梁式桥分类

  • 简支梁桥
  • 悬臂梁桥
  • 等截面连续梁桥
  • 变截面连续梁桥
  • 连续刚构

梁截面

  • 实心板梁
  • 空心板梁
  • T梁——底板、梁肋、翼缘板
  • 箱梁——底板、腹板、顶板、翼缘板

拱式桥

与梁式桥主要承受弯曲力不同,拱桥要承受的是沿圈传递的轴向压力。该压力即是桥墩桥台在竖向移动荷作用下所产生的水平推力。

拱式桥分类

  • 三铰拱
  • 两铰拱
  • 无铰拱
  • 系杆拱

承载方式

  • 上承式拱
  • 中承式拱
  • 下承式拱

刚架桥

刚架桥是梁和柱(或竖墙)整体结合的桥梁结构。竖向荷载作用下,梁部主要受弯,柱脚处有水平推力,力状态介于梁式桥和拱桥之间。

刚架桥分类

  • T型刚架桥
  • 连续刚架桥
  • 斜腿刚架桥

斜拉桥

斜拉桥由主梁、塔柱和斜拉索3种基本构件组成,用高强钢材制成的斜拉索将主梁多点吊起,将主梁承受的荷载传至塔柱,再由塔柱基础传给地基。斜拉桥是主梁(桥面体系)受压、受弯,斜拉索(支承体系)受拉的结构。

索型

  • 辐射性
  • 竖琴型
  • 扇形

桥梁常用术语

横隔板

横隔板是为保持截面形状、增强横向刚度而在梁之间设置的构件。位于桥梁端部的横隔板称为端隔板,位于中部的横隔板称为中隔板。

湿接缝、湿接头

净跨径

相邻两个桥墩(或桥台)之间的净距。对于拱式桥是每孔拱跨两个拱脚截面最低点之间的水平距离。

计算跨径

对于具有支座的桥梁,是指桥跨结构相邻两个支座中心之间的距离;对于拱式桥,是指两相邻拱脚截面形心点之间的水平距离,即拱轴线两端点之间的水平距离。

标准跨径

相邻两个桥墩中心线的距离。

拱轴线

拱圈各截面形心点的连线。

桥梁高度

指桥面与低水位之间的高差,或指桥面与桥下线路路面之间的距离,简称桥高。

桥下净空高度

设计洪水位、计算通航水位或桥下线路路面至桥跨结构最下缘之间的距离。

建筑高度

桥上行车路面(或轨顶)标高至桥跨结构最下缘之间的距离。

容许建筑高度

公路或铁路定线中所确定的桥面或轨顶标高,对通航净空顶部标高之差。

净矢高

从拱顶截面下缘至相邻两拱脚截面下缘最低点之连线的垂直距离。

计算矢高

从拱顶截面形心至相两拱脚截面形心之连线的垂直距离。

矢跨比

计算矢高与计算跨径之比,也称拱矢度,它是反映拱桥受力特性的一个重要指标。

涵洞

用来宣泄路堤下水流的构造物。通常在建造涵洞处路堤不中断。凡是多孔跨径全长不到8m和单孔跨径不到5m的泄水结构物,均称为涵洞。

]]>
+ + + <h2 id="桥梁定义"><a href="#桥梁定义" class="headerlink" title="桥梁定义"></a>桥梁定义</h2><p>桥梁是道路路线遇到江河湖泊、山谷深沟以及其他线路(铁路或公路)等障碍时,为了保持道路的连续性而专门建造的人工构造物。桥梁既要保证桥上的交通运行,也要保证桥下水流的宣泄、船只的通航或车辆的通行。</p> + + + + + + + + + + +
+ + + NAS诞生记 + + https://awaw.cc/post/my-first-nas/ + 2022-06-09T16:00:00.000Z + 2023-07-04T05:17:59.285Z + + NAS(Network Attached Storage:网络附属存储)按字面简单说就是连接在网络上,具备资料存储功能的装置,因此也称为“网络存储器”。

它是一种专用数据存储服务器。它以数据为中心,将存储设备与服务器彻底分离,集中管理数据,从而释放带宽、提高性能、降低总拥有成本、保护投资。其成本远远低于使用服务器存储,而效率却远远高于后者。

配置清单

品类型号渠道价格备注
主板映泰J4125NHU淘宝580SATA*2、M.2*1、PCIEx16*1
处理器Intel J4125--板载CPU、被动散热
机箱蜗牛星际C款闲鱼128PCIE开口、4盘位、硬盘背板
内存玖合 忆界马甲条京东1498G、DDR4、3000MHz
扩展卡乐扩m.2转5口SATA京东149SATA3.0*5
电源益衡7025B淘宝24580PLUS铜牌、双路12V 36A
插座小米智能插座2京东49电量统计、远程开机
1300

系统方案

方案系统备注
虚拟机PVE/EXSi硬盘直通、核显直通
虚拟机Windows & VMwareCPU性能羸弱
物理机群晖1U盘/SATA引导、UI人性化、套件易用(采纳✔)
物理机Unraid按盘位收费
物理机FreeNAS/TrueNAS使用ECC内存
物理机万由只支持到U-NAS5、U-NAS6仅万由硬件可用

1 固件版本 918+ 7.0.1 42218 up3

总结

目前这套配置搭配群晖系统已稳定运行两周,单块1T硬盘(老笔记本淘汰),功耗15W。

2023.07.04

更新了以下内容

  1. 改用 arpl v1.1-beta2a 自编译引导
  2. 系统升级为 7.1.1 42962 up5
  3. 添加了一块 512GB SATA固态硬盘(用于提升docker、套件、虚拟机等服务的运行效率,实际感受docker和套件提升不明显,跑虚拟机提升明显)
  4. 添加了一块 4TB 西部数据垂直盘
  5. 添加了一块 4*SATA PCIe扩展卡,目前板载2SATA,扩展4SATA,共6个SATA口
  6. 目前待机功率为21W,每天消耗0.5度电
]]>
+ + + <p>NAS(Network Attached Storage:网络附属存储)按字面简单说就是<strong>连接在网络上,具备资料存储功能的装置</strong>,因此也称为“网络存储器”。</p> + + + + + + + + + + +
+ + + 挪车码生成器 - 开源 + + https://awaw.cc/post/car-code-generator/ + 2021-06-17T16:00:00.000Z + 2023-07-14T06:11:37.772Z + + 临时停车时,直接把手机号放在车上,容易被广告推销人员盯上,用二维码的方式间接给别人提供联系方式,可以有效降低此类情况发生。

优势

  • 使用挪车码展示联系方式,可以避免直接展示出手机号码,广告推销人员可能懒得扫码获取你的手机号
  • 可以使用微信、浏览器、系统相机扫一扫等进行扫码,无需手动输入长达11位的无序数字组成的手机号,直接一键拨号,减少焦虑感

劣势

  • 由于本服务是完全免费的,故无法提供虚拟手机号进行拨号

使用方法

  1. 输入手机号码
  2. 保存到挪车码
  3. 用作图工具添加“扫码挪车”等字样后用A4纸打印出来
  4. 临时停车的时候放在车窗下显眼位置

截图

主界面

微信扫一扫
点击拨打号码按钮
跳转系统拨号界面

下载地址

https://www.lanzoux.com/iej9Tqkzj7c
提取码:pdone

代码仓库

https://github.com/pdone/car-code-generator

]]>
+ + + <p>临时停车时,直接把手机号放在车上,容易被广告推销人员盯上,用二维码的方式间接给别人提供联系方式,可以有效降低此类情况发生。</p> + + + + + + + + + + + + +
+ + + 最常用的 35 个 Git 命令 + + https://awaw.cc/post/git-command/ + 2021-05-20T16:00:00.000Z + 2023-07-04T03:58:52.572Z + + 不管你是新手还是经验丰富的开发人员,都需要使用源代码管理。因此很大几率上你会选择使用Git来管理源代码。

要发挥Git的全部潜力,我们需要了解Git命令。在本文中,你将学到最有用的一些Git命令,掌握这些Git命令将帮助你提升编码水平。

本Git命令指南共分为三个部分:基础命令,进阶命令和高阶Git命令。

基础Git命令

在这个部分中,我们要学习的是一些非常基础的Git命令。这些基础的Git命令是学习其他进阶命令的基础。

下面请看这9个基础的Git命令。

1. git config

git config命令非常有用。尤其是在你第一次使用Git或刚安装新的Git时。此命令可设置身份——Name和Email地址。并且每次提交时会使用此信息。

1
2
3
$ git config --global user.name "Your name"  

$ git config --global user.email "Your email"

2. git version

顾名思义,它会检查你使用的是哪个版本的Git。目前,截至编写本指南时,Git for Windows的最新版本是2.31.1。它发布于2021年3月27日。

1
$ git version

3. git init

这可能是你在Git中启动新项目所使用的第一个命令。此命令将创建一个空白的新存储库,然后你可以将源代码存储在此存储库中。

1
$ git init

或者,你也可以在git init命令中使用存储库名称。

1
$ git init <your repository name>

4. git clone

git clone命令将使用现有的存储库进行复制。git initgit clone之间有一个主要区别。

在你需要在现有的存储库上进行复制时,使用git clonegit clone命令首先在内部使用git init命令,然后检出所有内容。

1
git clone <your project URL>

5. git add

git add命令会把所有新的代码文件或修改后的文件添加到存储库中。此命令提供了添加文件和文件夹的不同选项。

将单个文件添加到暂存区

1
$ git add your_file_name

此选项会将所有修改过的文件和新文件添加到暂存区

1
$ git add *

6. git commit

这个Git命令是必不可少的。如果不能合理利用此命令,则可能会降低项目质量。

简而言之,git commit会将更改添加到本地存储库。

1
$ git commit -m "your useful commit message"

7. git status

使用此Git命令可以方便地查看有多少文件需要得到关注。你可以随时运行此命令。

此命令可以用来在git addgit commit之间查看状态。

1
$ git status

8. git branch

大多数时候,你的Git存储库中总会有多个分支。我们可以使用git branch命令有效地管理分支。Git分支有许多不同的选项和开关。

为简单起见,在这里我将重点介绍如何创建和删除Git分支。

列出所有分支

1
$ git branch

创建新的分支

1
$ git branch <branch_name>

删除分支

1
$ git branch -d <branch_name>

9. git checkout

此Git命令用于在分支之间进行切换。这是功能强大的git命令之一,堪称万能的瑞士军刀。

以下是切换到另一个分支的语法。

1
$ git checkout <branch_name>

此外,你也可以创建和检出到分支。

1
$ git checkout -b <your_new_branch_name>

进阶Git命令

掌握了基础的Git命令之后,我们就该学习进阶Git命令了。

如果你需要与团队合作,与他人共享代码,那么这些Git命令会非常有用。另外,还有一些类似git log命令,这些命令可帮助查看以前的提交历史。

10. git remote

git remote命令就像边界,如果你需要与外界连接,则必须使用git remote命令。此命令会将你的本地存储库连接到远程。

1
$ git remote add <shortname> <url>

举例

1
$ git remote add origin https://dev.azure.com/aCompiler/_git/DemoProject

11. git push

(借助git remote命令)与远程存储库连接之后,就需要将更改推送到存储库。

1
$ git push -u <short_name> <your_branch_name>

举例

1
$ git push -u origin feature_branch

12. git push –set-upstream

在使用git push之前,我们应该先设置好originupstream。下面是设置upstream的命令。

1
$ git push --set-upstream <short_name> <branch_name>

举例

1
$ git push --set-upstream origin feature_branch

13. git fetch

当需要下载其他团队成员的更改时,就得使用git fetch

此命令会下载有关提交、引用等的所有信息,因此你可以在将这些更改应用于本地存储库之前对其进行检查。

1
$ git fetch

14. git pull

git pull命令下载内容(而不是元数据),并立即用最新的内容更新本地存储库。

1
$ git pull <remote_url>

15. git stash

此git命令会临时存储已修改的文件。你可以使用以下Git命令处理stash工作。

1
$ git stash

可以使用以下命令查看所有stash

1
$ git stash list

如果你需要应用stash到分支,那就使用apply

1
$ git stash apply

16. git log

git log的帮助下,你可以看到所有之前的提交,并且最近的提交出现在最前面。

1
$ git log

默认情况下,它将显示当前已检出分支的所有提交,但是你可以强制通过所有选项来查看所有分支的所有提交。

1
$ git log --all

17. git shortlog

git shortlog命令会显示来自git log命令的摘要。如果你只对简短的摘要感兴趣,那么此命令就非常有用了。

这个命令有助于查看谁处理了什么,因为它对作者及其提交进行了分组。

1
$ git shortlog

18. git show

git log相比,此命令将显示有关特定提交的详细信息。

1
$ git show <your_commit_hash>

19. git rm

有时你需要从代码库中删除文件,在这种情况下,可以使用git rm命令。

它可以从索引和工作目录中删除跟踪的文件。

1
$ git rm <your_file_name>

20. git merge

git merge可帮助将来自两个分支的更改集成到单个分支中。

1
$ git merge <branch_name>

此命令会将<branch_name>合并到当前你选择的分支中。

高阶Git命令

现在是时候再上一个层次了。在这个部分中,我们要学习的是高阶的Git命令。这些命令就需要花时间去练习了。

但是一旦掌握了这些命令的基础知识,使用起来不要太轻松哦。

21. git rebase

git rebase类似于git merge命令。它把两个分支集成到一个分支中,但有一个不一样的地方:git rebase命令将会重写提交记录。

当你有多个私有分支合并到单个分支时,应使用git rebase命令。它将使得提交历史成为线性的。

1
$ git rebase <base>

22. git bisect

git bisect命令可帮助查找糟糕的提交。

启动git bisect

1
$ git bisect start

让git bisect知道什么是好的提交

1
$ git bisect good a123

让git bisect知道什么是糟糕的提交

1
$ git bisect bad z123

通过git bisect,只要几分钟你就可以缩小问题代码的范围。

23. git cherry-pick

git cherry-pick是一个蛮有用的命令,允许你从任意分支中选择任意提交并将其应用于其他任意分支。

1
$ git cherry-pick <commit-hash>

git cherry-pick不会修改存储库的历史记录;相反,它会添加到历史记录。

24. git archive

git archive命令会把多个文件合并为单个文件。就好像zip实用程序一样,所以你可以提取存档文件以获取单个文件。

1
$ git archive --format zip HEAD > archive-HEAD.zip

它将创建当前修订的zip存档。

25. git pull –rebase

在大多数情况下,当你使用git pull时,你需要重新设置基准(并且不进行合并)。

此时,你就可以使用此选项。

1
$ git pull --rebase

这将帮助保持干净的历史记录。另外,还可以避免多次合并。

26. git blame

如果你需要逐行检查任意文件的内容,则需要使用git blame命令。它可以帮助确定是谁对文件进行了更改。

1
$ git blame <your_file_name>

27. git tag

在Git中,标签很有用,你可以使用它们来管理发布。你可以将git tag视为不会改变的分支。尤其是要公开发布的时候,则更为重要了。

1
$ git tag -a v1.0.0

28. git verify-commit

git verify-commit命令将检查gpg签名。GPG,GNU Privacy Guard,是sign文件中使用的工具,包含签名。

1
$ git verify-commit <commit>

29. git verify-tag

可以以同样的方式确认标签。

1
$ git verify-tag <tag>

30. git diff

大多数情况下,在提交或推送之前,你需要比较两个git文件或分支。用这个命令就方便多了。

将工作目录与本地存储库进行比较

1
$ git diff HEAD <filename>

比较两个分支

1
$ git diff <source branch> <target branch>

31. git citool

git citool是Git提交的图形化替代。

1
$ git citool

32. git mv

重命名git文件。接受两个参数,源文件名和目标文件名。

1
$ git mv <old-file-name> <new-file-name>

33. git clean

你可以使用git clean命令处理未跟踪的文件。可以使用此命令从工作目录中删除所有未跟踪的文件。如果要处理跟踪的文件,则需要使用git reset命令。

1
$ git clean

34. git help

Git中有许多命令,如果你需要其他命令的帮助,则可以随时在终端上使用git help

1
$ git help <git_command>

35. git whatchanged

此命令的作用与git log相同,但为原始格式。并且由于历史原因,它也是git的一份子。

1
$ git whatchanged
]]>
+ + + <p>不管你是新手还是经验丰富的开发人员,都需要使用源代码管理。因此很大几率上你会选择使用Git来管理源代码。</p> +<p>要发挥Git的全部潜力,我们需要了解Git命令。在本文中,你将学到最有用的一些Git命令,掌握这些Git命令将帮助你提升编码水平。</p> + + + + + + + + +
+ + + 批处理获取时间小于10点时补零 + + https://awaw.cc/post/bat-date/ + 2021-04-07T16:00:00.000Z + 2023-07-13T04:14:05.896Z + + 使用 %time:~0,2% 获取时间时,当前时间若小于10点,获取到的时间不会自动补零,但是分钟和秒钟会补零,所以小时部分需要自己处理一下。

Code

1
2
3
4
5
6
7
@echo off
set hour=%time:~0,2%
if %hour% LSS 10 (
set "hour=0%time:~1,1%")
set date=%date:~0,4%-%date:~5,2%-%date:~8,2%T%hour%:%time:~3,2%:%time:~6,5%
echo %date%
pause

Output

1
2021-04-08T09:45:01.11
]]>
+ + + <p>使用 <code>%time:~0,2%</code> 获取时间时,当前时间若小于10点,获取到的时间不会自动补零,但是分钟和秒钟会补零,所以小时部分需要自己处理一下。</p> + + + + + + + + +
+ + + 洛阳地铁一号线开通啦!(内附线路图) + + https://awaw.cc/post/luoyang-subway/ + 2021-03-27T16:00:00.000Z + 2023-07-14T06:12:34.377Z + + 洛阳轨道交通(Luoyang Subway)是服务于中国河南省洛阳市的城市轨道交通系统,其首条线路于2020年12月1日开始试运行。

2021年3月28日正式运营,当日客流量为10.7382万人次。

截至2021年3月,洛阳轨道交通已开通运营线路1条,为洛阳轨道交通1号线;在建线路1条,为洛阳轨道交通2号线;规划线路2条,为洛阳轨道交通3号线、洛阳轨道交通4号线;线网共设车站34座。

洛阳地铁线路简图

洛阳地铁线路图

]]>
+ + + <p>洛阳轨道交通(Luoyang Subway)是服务于中国河南省洛阳市的城市轨道交通系统,其首条线路于2020年12月1日开始试运行。</p> + + + + + + + + +
+ + + 数据库调优 + + https://awaw.cc/post/sql-tuning/ + 2021-01-31T16:00:00.000Z + 2023-07-04T05:10:14.518Z + + 先思考这几个问题:

  • 什么时候才需要分库分表呢?我们的评判标准是什么?
  • 一张表存储了多少数据的时候,才需要考虑分库分表?
  • 数据增长速度很快,每天产生多少数据,才需要考虑做分库分表?

为什么要分库分表?

首先回答一下为什么要分库分表,答案很简单:数据库出现性能瓶颈。用大白话来说就是数据库快扛不住了。
数据库出现性能瓶颈,对外表现有几个方面:

  • 大量请求阻塞
    在高并发场景下,大量请求都需要操作数据库,导致连接数不够了,请求处于阻塞状态。

  • SQL 操作变慢
    如果数据库中存在一张上亿数据量的表,一条 SQL 没有命中索引会全表扫描,这个查询耗时会非常久。

  • 存储出现问题
    业务量剧增,单库数据量越来越大,给存储造成巨大压力。

从机器的角度看,性能瓶颈无非就是CPU、内存、磁盘、网络这些,要解决性能瓶颈最简单粗暴的办法就是提升机器性能,但是通过这种方法成本和收益投入比往往又太高了,不划算,所以重点还是要从软件角度入手。

数据库相关优化方案

数据库优化方案很多,主要分为两大类:软件层面硬件层面
软件层面包括:SQL 调优、表结构优化、读写分离、数据库集群、分库分表等;
硬件层面主要是增加机器性能。

SQL 调优

SQL 调优往往是解决数据库问题的第一步,往往投入少部分精力就能获得较大的收益。
SQL 调优主要目的是尽可能的让那些慢 SQL 变快,手段其实也很简单就是让 SQL 执行尽量命中索引。

开启慢 SQL 记录

如果你使用的是 Mysql,需要在 Mysql 配置文件中配置几个参数即可。

1
2
3
slow_query_log = on
long_query_time = 1
slow_query_log_file = /path/to/log

调优工具

常常会用到 explain 这个命令来查看 SQL 语句的执行计划,通过观察执行结果很容易就知道该 SQL 语句是不是全表扫描、有没有命中索引。

1
select id, age, gender from  user where name = 'pdone';

返回有一列叫“type”,常见取值有:

ALL、index、range、 ref、eq_ref、const、system、NULL(从左到右,性能从差到好)
ALL 代表这条 SQL 语句全表扫描了,需要优化。一般来说需要达到range 级别及以上。

表结构优化

以一个场景举例说明:

“user”表中有 user_id、nickname 等字段,“order”表中有order_id、user_id等字段,如果想拿到用户昵称怎么办?一般情况是通过 join 关联表操作,在查询订单表时关联查询用户表,从而获取导用户昵称。

但是随着业务量增加,订单表和用户表肯定也是暴增,这时候通过两个表关联数据就比较费力了,为了取一个昵称字段而不得不关联查询几十上百万的用户表,其速度可想而知。

这个时候可以尝试将 nickname 这个字段加到 order 表中(order_id、user_id、nickname),这种做法通常叫做数据库表冗余字段。这样做的好处展示订单列表时不需要再关联查询用户表了。

冗余字段的做法也有一个弊端,如果这个字段更新会同时涉及到多个表的更新,因此在选择冗余字段时要尽量选择不经常更新的字段。

架构优化

当单台数据库实例扛不住,我们可以增加实例组成集群对外服务。

当发现读请求明显多于写请求时,我们可以让主实例负责写,从实例对外提供读的能力;如果读实例压力依然很大,可以在数据库前面加入缓存如 redis,让请求优先从缓存取数据减少数据库访问。

缓存分担了部分压力后,数据库依然是瓶颈,这个时候就可以考虑分库分表的方案了,后面会详细介绍。

硬件优化

硬件成本非常高,一般来说不可能遇到数据库性能瓶颈就去升级硬件。

在前期业务量比较小的时候,升级硬件数据库性能可以得到较大提升;但是在后期,升级硬件得到的收益就不那么明显了。

分库分表详解

下面我们以一个商城系统为例逐步讲解数据库是如何一步步演进。

未完待续

]]>
+ + + <p>先思考这几个问题:</p> +<ul> +<li>什么时候才需要分库分表呢?我们的评判标准是什么?</li> +<li>一张表存储了多少数据的时候,才需要考虑分库分表?</li> +<li>数据增长速度很快,每天产生多少数据,才需要考虑做分库分表?</li> +</ul> + + + + + + + + + + +
+ + + Markdown代码块支持的语言 + + https://awaw.cc/post/md-codeblock-lang/ + 2021-01-29T16:00:00.000Z + 2023-07-04T04:07:40.271Z + + Markdown代码块支持的语言,使用时在```后加上对应关键字即可。

名称关键字调用的js
AppleScriptapplescriptshBrushAppleScript.js
ActionScript 3.0actionscript3, as3shBrushAS3.js
Shellbash, shellshBrushBash.js
ColdFusioncoldfusion, cfshBrushColdFusion.js
Ccpp, cshBrushCpp.js
C#c#, c-sharp, csharpshBrushCSharp.js
CSScssshBrushCss.js
Delphidelphi, pascal, passhBrushDelphi.js
diff&patchdiff patchshBrushDiff.js
Erlangerl, erlangshBrushErlang.js
GroovygroovyshBrushGroovy.js
JavajavashBrushJava.js
JavaFXjfx, javafxshBrushJavaFX.js
JavaScriptjs, jscript, javascriptshBrushJScript.js
Perlperl, pl, PerlshBrushPerl.js
PHPphpshBrushPhp.js
texttext, plainshBrushPlain.js
Pythonpy, pythonshBrushPython.js
Rubyruby, rails, ror, rbshBrushRuby.js
SASS&SCSSsass, scssshBrushSass.js
ScalascalashBrushScala.js
SQLsqlshBrushSql.js
Visual Basicvb, vbnetshBrushVb.js
XMLxml, xhtml, xslt, htmlshBrushXml.js
Objective Cobjc, obj-cshBrushObjectiveC.js
F#f# f-sharp, fsharpshBrushFSharp.js
xpp, dynamics-xppshBrushDynamics.js
Rr, s, splusshBrushR.js
matlabmatlabshBrushMatlab.js
swiftswiftshBrushSwift.js
GOgo, golangshBrushGo.js
]]>
+ + + <p>Markdown代码块支持的语言,使用时在<code>```</code>后加上对应关键字即可。</p> + + + + + + + + + + +
+ + + BuildInCategory枚举 + + https://awaw.cc/post/revit-category/ + 2020-12-01T10:30:00.000Z + 2023-07-04T05:04:04.499Z + + Revit二次开发中经常用到BuildInCategory过滤元素,以下是通过遍历该枚举获取的数据,其中部分类别的名称未能获取到,本文未显示Unknown部分,完整版本见 BuildInCategory枚举 - 完整

中文名称名称
分析链接OST_LinksAnalytical-2009657
分析楼板基础标记OST_FoundationSlabAnalyticalTags-2009656
分析条形基础标记OST_WallFoundationAnalyticalTags-2009655
分析独立基础标记OST_IsolatedFoundationAnalyticalTags-2009654
分析墙标记OST_WallAnalyticalTags-2009653
分析楼层标记OST_FloorAnalyticalTags-2009652
分析柱标记OST_ColumnAnalyticalTags-2009651
分析支撑标记OST_BraceAnalyticalTags-2009650
分析梁标记OST_BeamAnalyticalTags-2009649
分析节点OST_AnalyticalNodes-2009645
分析基础底板OST_FoundationSlabAnalytical-2009643
分析条形基础OST_WallFoundationAnalytical-2009642
分析独立基础OST_IsolatedFoundationAnalytical-2009641
分析墙OST_WallAnalytical-2009640
分析楼层OST_FloorAnalytical-2009639
顶部线段OST_ColumnEndSegment-2009638
基准线段OST_ColumnStartSegment-2009637
分析柱OST_ColumnAnalytical-2009636
末端线段OST_BraceEndSegment-2009635
起点线段OST_BraceStartSegment-2009634
分析支撑OST_BraceAnalytical-2009633
末端线段OST_BeamEndSegment-2009632
起点线段OST_BeamStartSegment-2009631
分析梁OST_BeamAnalytical-2009630
棍状符号OST_StructuralTrussStickSymbols-2009608
隐藏线OST_MassHiddenLines-2009532
隐藏线OST_CurtaSystemHiddenLines-2009531
隐藏线OST_EntourageHiddenLines-2009529
隐藏线OST_PlantingHiddenLines-2009528
隐藏线OST_SpecialityEquipmentHiddenLines-2009527
隐藏线OST_TopographyHiddenLines-2009526
隐藏线OST_SiteHiddenLines-2009524
隐藏线OST_RoadsHiddenLines-2009523
隐藏线OST_ParkingHiddenLines-2009522
隐藏线OST_PlumbingFixturesHiddenLines-2009521
隐藏线OST_MechanicalEquipmentHiddenLines-2009520
隐藏线OST_LightingFixturesHiddenLines-2009519
隐藏线OST_FurnitureSystemsHiddenLines-2009518
隐藏线OST_ElectricalFixturesHiddenLines-2009517
隐藏线OST_ElectricalEquipmentHiddenLines-2009516
隐藏线OST_CaseworkHiddenLines-2009515
隐藏线OST_DetailComponentsHiddenLines-2009514
隐藏线OST_ShaftOpeningHiddenLines-2009513
隐藏线OST_GenericModelHiddenLines-2009512
隐藏线OST_CurtainWallMullionsHiddenLines-2009511
隐藏线OST_CurtainWallPanelsHiddenLines-2009510
隐藏线OST_RampsHiddenLines-2009509
隐藏线OST_StairsRailingHiddenLines-2009508
隐藏线OST_StairsHiddenLines-2009507
隐藏线OST_ColumnsHiddenLines-2009506
隐藏线OST_FurnitureHiddenLines-2009505
隐藏线OST_LinesHiddenLines-2009504
隐藏线OST_CeilingsHiddenLines-2009503
隐藏线OST_RoofsHiddenLines-2009502
隐藏线OST_DoorsHiddenLines-2009501
隐藏线OST_WindowsHiddenLines-2009500
轮廓标记OST_StructConnectionProfilesTags-2009064
孔标记OST_StructConnectionHoleTags-2009063
隐藏线OST_CouplerHiddenLines-2009062
结构钢筋接头标记OST_CouplerTags-2009061
结构钢筋接头OST_Coupler-2009060
焊接标记OST_StructConnectionWeldTags-2009059
剪力钉标记OST_StructConnectionShearStudTags-2009058
锚固件标记OST_StructConnectionAnchorTags-2009057
螺栓标记OST_StructConnectionBoltTags-2009056
板标记OST_StructConnectionPlateTags-2009055
隐藏线OST_RebarHiddenLines-2009050
修改器OST_StructConnectionModifiers-2009047
焊缝OST_StructConnectionWelds-2009046
OST_StructConnectionHoles-2009045
剪力钉OST_StructConnectionShearStuds-2009044
其他OST_StructConnectionOthers-2009042
螺栓OST_StructConnectionBolts-2009041
结构连接标记OST_StructConnectionTags-2009040
锚固件OST_StructConnectionAnchors-2009039
平板OST_StructConnectionPlates-2009038
轮廓OST_StructConnectionProfiles-2009037
参照OST_StructConnectionReference-2009036
符号OST_StructConnectionSymbol-2009033
隐藏线OST_StructConnectionHiddenLines-2009032
结构连接OST_StructConnections-2009030
边界OST_FabricAreaBoundary-2009029
结构钢筋网符号OST_FabricReinSpanSymbol-2009028
钢筋网OST_FabricReinforcementWire-2009027
边界OST_FabricReinforcementBoundary-2009026
钢筋集切换OST_RebarSetToggle-2009025
结构钢筋网标记OST_FabricReinforcementTags-2009022
结构区域钢筋标记OST_AreaReinTags-2009021
结构钢筋标记OST_RebarTags-2009020
<钢筋网片>OST_FabricAreaSketchSheetsLines-2009019
<钢筋网外围>OST_FabricAreaSketchEnvelopeLines-2009018
结构钢筋网区域OST_FabricAreas-2009017
结构钢筋网OST_FabricReinforcement-2009016
钢筋保护层参照OST_RebarCover-2009015
钢筋形状OST_RebarShape-2009013
边界OST_PathReinBoundary-2009012
结构路径钢筋标记OST_PathReinTags-2009011
结构路径钢筋符号OST_PathReinSpanSymbol-2009010
结构路径钢筋OST_PathRein-2009009
边界OST_AreaReinBoundary-2009006
结构区域钢筋符号OST_AreaReinSpanSymbol-2009005
结构区域钢筋OST_AreaRein-2009003
结构钢筋OST_Rebar-2009000
隔热层OST_FabricationPipeworkInsulation-2008221
内衬OST_FabricationDuctworkLining-2008220
OST_FabricationContainmentDrop-2008219
OST_FabricationContainmentRise-2008218
OST_FabricationPipeworkDrop-2008217
OST_FabricationPipeworkRise-2008216
符号OST_FabricationContainmentSymbology-2008215
中心线OST_FabricationContainmentCenterLine-2008214
MEP 预制保护层标记OST_FabricationContainmentTags-2008213
MEP 预制保护层OST_FabricationContainment-2008212
符号OST_FabricationPipeworkSymbology-2008211
中心线OST_FabricationPipeworkCenterLine-2008210
MEP 预制管道标记OST_FabricationPipeworkTags-2008209
MEP 预制管道OST_FabricationPipework-2008208
符号OST_FabricationDuctworkSymbology-2008207
OST_FabricationDuctworkDrop-2008206
OST_FabricationDuctworkRise-2008205
MEP 预制支架标记OST_FabricationHangerTags-2008204
MEP 预制支架OST_FabricationHangers-2008203
隔热层OST_FabricationDuctworkInsulation-2008198
中心线OST_FabricationDuctworkCenterLine-2008196
MEP 预制管网标记OST_FabricationDuctworkTags-2008194
MEP 预制管网OST_FabricationDuctwork-2008193
着色OST_gbXML_Shade-2008187
分析表面OST_AnalyticSurfaces-2008186
分析空间OST_AnalyticSpaces-2008185
空气洞口OST_gbXML_OpeningAir-2008184
非推拉门OST_gbXML_NonSlidingDoor-2008183
推拉门OST_gbXML_SlidingDoor-2008182
可操作天窗OST_gbXML_OperableSkylight-2008181
固定天窗OST_gbXML_FixedSkylight-2008180
可操作窗口OST_gbXML_OperableWindow-2008179
固定窗OST_gbXML_FixedWindow-2008178
地下天花板OST_gbXML_UndergroundCeiling-2008177
地下板OST_gbXML_UndergroundSlab-2008176
地下墙OST_gbXML_UndergroundWall-2008175
空气曲面OST_gbXML_SurfaceAir-2008174
天花板OST_gbXML_Ceiling-2008173
内部楼板OST_gbXML_InteriorFloor-2008172
内墙OST_gbXML_InteriorWall-2008171
平整表面上的板OST_gbXML_SlabOnGrade-2008170
活动楼板OST_gbXML_RaisedFloor-2008169
屋顶OST_gbXML_Roof-2008168
外墙OST_gbXML_ExteriorWall-2008167
管段OST_PipeSegments-2008163
管道占位符OST_PlaceHolderPipes-2008161
风管占位符OST_PlaceHolderDucts-2008160
参照线OST_PipingSystem_Reference_Visibility-2008159
参照线OST_DuctSystem_Reference_Visibility-2008157
管道隔热层标记OST_PipeInsulationsTags-2008155
风管内衬标记OST_DuctLiningsTags-2008154
风管隔热层标记OST_DuctInsulationsTags-2008153
电气备件/空间电路OST_ElectricalInternalCircuits-2008152
配电盘明细表图形OST_PanelScheduleGraphics-2008151
电缆桥架管路OST_CableTrayRun-2008150
线管管路OST_ConduitRun-2008149
中心线OST_ConduitFittingCenterLine-2008141
中心线OST_CableTrayFittingCenterLine-2008140
中心线OST_ConduitCenterLine-2008139
OST_ConduitDrop-2008138
OST_ConduitRiseDrop-2008137
中心线OST_CableTrayCenterLine-2008136
OST_CableTrayDrop-2008135
OST_CableTrayRiseDrop-2008134
线管标记OST_ConduitTags-2008133
线管OST_Conduit-2008132
电缆桥架标记OST_CableTrayTags-2008131
电缆桥架OST_CableTray-2008130
线管配件标记OST_ConduitFittingTags-2008129
线管配件OST_ConduitFitting-2008128
电缆桥架配件标记OST_CableTrayFittingTags-2008127
电缆桥架配件OST_CableTrayFitting-2008126
布管系统配置OST_RoutingPreferences-2008125
风管内衬OST_DuctLinings-2008124
风管隔热层OST_DuctInsulations-2008123
管道隔热层OST_PipeInsulations-2008122
参照线OST_HVAC_Zones_Reference_Visibility-2008118
内部填充OST_HVAC_Zones_InteriorFill_Visibility-2008117
颜色填充OST_HVAC_Zones_ColorFill-2008116
分区标记OST_ZoneTags-2008115
边界OST_HVAC_Zones_Boundary-2008108
HVAC 区OST_HVAC_Zones-2008107
开关系统OST_SwitchSystem-2008101
喷头标记OST_SprinklerTags-2008100
喷头OST_Sprinklers-2008099
洞口OST_GbXML_Opening-2008095
地下OST_GbXML_SType_Underground-2008094
着色OST_GbXML_SType_Shade-2008093
外部OST_GbXML_SType_Exterior-2008092
内部OST_GbXML_SType_Interior-2008091
分析表面OST_GbXMLFaces-2008090
回路方向OST_WireHomeRunArrows-2008089
灯具标记OST_LightingDeviceTags-2008088
灯具OST_LightingDevices-2008087
火警设备标记OST_FireAlarmDeviceTags-2008086
火警设备OST_FireAlarmDevices-2008085
数据设备标记OST_DataDeviceTags-2008084
数据设备OST_DataDevices-2008083
通讯设备标记OST_CommunicationDeviceTags-2008082
通讯设备OST_CommunicationDevices-2008081
安全设备标记OST_SecurityDeviceTags-2008080
安全设备OST_SecurityDevices-2008079
护理呼叫设备标记OST_NurseCallDeviceTags-2008078
护理呼叫设备OST_NurseCallDevices-2008077
电话设备标记OST_TelephoneDeviceTags-2008076
电话设备OST_TelephoneDevices-2008075
导线记号OST_WireTickMarks-2008074
中心线OST_PipeFittingCenterLine-2008072
OST_PipeCurvesDrop-2008069
中心线OST_DuctFittingCenterLine-2008066
OST_DuctCurvesDrop-2008062
风管管件标记OST_DuctFittingTags-2008061
管件标记OST_PipeFittingTags-2008060
管道颜色填充OST_PipeColorFills-2008059
管道颜色填充图例OST_PipeColorFillLegends-2008058
导线标记OST_WireTags-2008057
管道附件标记OST_PipeAccessoryTags-2008056
管道附件OST_PipeAccessory-2008055
OST_PipeCurvesRiseDrop-2008054
填充图案OST_FlexPipeCurvesPattern-2008053
中心线OST_FlexPipeCurvesCenterLine-2008051
软管OST_FlexPipeCurves-2008050
管件OST_PipeFitting-2008049
软管标记OST_FlexPipeTags-2008048
管道标记OST_PipeTags-2008047
中心线OST_PipeCurvesCenterLine-2008045
管道OST_PipeCurves-2008044
管道系统OST_PipingSystem-2008043
导线OST_Wire-2008039
电路OST_ElectricalCircuit-2008037
OST_DuctCurvesRiseDrop-2008036
填充图案OST_FlexDuctCurvesPattern-2008023
中心线OST_FlexDuctCurvesCenterLine-2008021
软风管OST_FlexDuctCurves-2008020
风管附件标记OST_DuctAccessoryTags-2008017
风管附件OST_DuctAccessory-2008016
风管系统OST_DuctSystem-2008015
风道末端标记OST_DuctTerminalTags-2008014
风道末端OST_DuctTerminal-2008013
风管管件OST_DuctFitting-2008010
风管颜色填充OST_DuctColorFills-2008005
软风管标记OST_FlexDuctTags-2008004
风管标记OST_DuctTags-2008003
中心线OST_DuctCurvesCenterLine-2008001
风管OST_DuctCurves-2008000
风管颜色填充图例OST_DuctColorFillLegends-2007004
桥梁支座OST_BridgeBearings-2006138
桥梁大梁OST_BridgeGirders-2006137
桥梁基础OST_BridgeFoundations-2006136
桥面OST_BridgeDecks-2006135
桥拱OST_BridgeArches-2006134
桥梁缆索OST_BridgeCables-2006133
桥塔OST_BridgeTowers-2006132
桥墩OST_BridgePiers-2006131
桥台OST_BridgeAbutments-2006130
平面视图中的支撑符号OST_StructuralBracePlanReps-2006110
连接符号OST_StructConnectionSymbols-2006100
结构注释OST_StructuralAnnotations-2006090
云线批注标记OST_RevisionCloudTags-2006080
云线批注OST_RevisionClouds-2006060
立面标记OST_ElevationMarks-2006045
轴网标头OST_GridHeads-2006040
标高标头OST_LevelHeads-2006020
范围框OST_VolumeOfInterest-2006000
边界条件OST_BoundaryConditions-2005301
内部面荷载标记OST_InternalAreaLoadTags-2005255
内部线荷载标记OST_InternalLineLoadTags-2005254
内部点荷载标记OST_InternalPointLoadTags-2005253
面荷载标记OST_AreaLoadTags-2005252
线荷载标记OST_LineLoadTags-2005251
点荷载标记OST_PointLoadTags-2005250
地震荷载OST_LoadCasesSeismic-2005218
温度荷载OST_LoadCasesTemperature-2005217
偶然荷载OST_LoadCasesAccidental-2005216
屋顶活荷载OST_LoadCasesRoofLive-2005215
雪荷载OST_LoadCasesSnow-2005214
风荷载OST_LoadCasesWind-2005213
活荷载OST_LoadCasesLive-2005212
恒荷载OST_LoadCasesDead-2005211
结构荷载工况OST_LoadCases-2005210
内部面荷载OST_InternalAreaLoads-2005207
内部线荷载OST_InternalLineLoads-2005206
内部点荷载OST_InternalPointLoads-2005205
结构内部荷载OST_InternalLoads-2005204
面荷载OST_AreaLoads-2005203
线荷载OST_LineLoads-2005202
点荷载OST_PointLoads-2005201
结构荷载OST_Loads-2005200
结构梁系统标记OST_BeamSystemTags-2005130
基础跨方向符号OST_FootingSpanDirectionSymbol-2005111
跨方向符号OST_SpanDirectionSymbol-2005110
高程点符号OST_SpotElevSymbols-2005100
结构桁架标记OST_TrussTags-2005030
注释记号标记OST_KeynoteTags-2005029
详图项目标记OST_DetailComponentTags-2005028
材质标记OST_MaterialTags-2005027
楼板标记OST_FloorTags-2005026
幕墙系统标记OST_CurtaSystemTags-2005025
楼梯标记OST_StairsTags-2005023
多类别标记OST_MultiCategoryTags-2005022
植物标记OST_PlantingTags-2005021
面积标记OST_AreaTags-2005020
结构基础标记OST_StructuralFoundationTags-2005019
结构柱标记OST_StructuralColumnTags-2005018
停车场标记OST_ParkingTags-2005017
场地标记OST_SiteTags-2005016
结构框架标记OST_StructuralFramingTags-2005015
专用设备标记OST_SpecialityEquipmentTags-2005014
常规模型标记OST_GenericModelTags-2005013
幕墙嵌板标记OST_CurtainWallPanelTags-2005012
墙标记OST_WallTags-2005011
卫浴装置标记OST_PlumbingFixtureTags-2005010
机电设备标记OST_MechanicalEquipmentTags-2005009
照明设备标记OST_LightingFixtureTags-2005008
家具系统标记OST_FurnitureSystemTags-2005007
家具标记OST_FurnitureTags-2005006
电气装置标记OST_ElectricalFixtureTags-2005004
电气设备标记OST_ElectricalEquipmentTags-2005003
天花板标记OST_CeilingTags-2005002
橱柜标记OST_CaseworkTags-2005001
颜色填充OST_MEPSpaceColorFill-2003605
参照OST_MEPSpaceReferenceVisibility-2003602
内墙OST_MEPSpaceInteriorFillVisibility-2003601
空间OST_MEPSpaces-2003600
体量着色OST_MassShade-2003418
体量洞口OST_MassOpening-2003417
体量天窗OST_MassSkylights-2003416
体量玻璃OST_MassGlazing-2003415
体量屋顶OST_MassRoof-2003414
体量外墙OST_MassExteriorWall-2003413
体量内墙OST_MassInteriorWall-2003412
体量分区OST_MassZone-2003411
体量楼层标记OST_MassAreaFaceTags-2003410
体量标记OST_MassTags-2003405
形式OST_MassForm-2003404
体量楼层OST_MassFloor-2003403
体量OST_Mass-2003400
图案填充OST_DividedSurface_PatternFill-2003327
填充图案线OST_DividedSurface_PatternLines-2003326
网格线OST_DividedSurface_Gridlines-2003325
节点OST_DividedSurface_Nodes-2003324
向下箭头OST_RampsDownArrow-2003308
向上箭头OST_RampsUpArrow-2003307
文字(向下)OST_RampsDownText-2003306
文字(向上)OST_RampsUpText-2003305
超出截面线的梯边梁OST_RampsStringerAboveCut-2003304
梯边梁OST_RampsStringer-2003303
坡道超出截面线OST_RampsAboveCut-2003302
面积OST_Areas-2003200
项目信息OST_ProjectInformation-2003101
图纸OST_Sheets-2003100
详图项目OST_DetailComponents-2002000
屋檐底板OST_RoofSoffit-2001393
楼板边缘OST_EdgeSlab-2001392
檐沟OST_Gutter-2001391
封檐板OST_Fascia-2001390
环境OST_Entourage-2001370
植物OST_Planting-2001360
隐藏线OST_StructuralStiffenerHiddenLines-2001358
定位线OST_StructuralColumnLocationLine-2001357
定位线OST_StructuralFramingLocationLine-2001356
结构加强板标记OST_StructuralStiffenerTags-2001355
结构加强板OST_StructuralStiffener-2001354
RVT 链接OST_RvtLinks-2001352
专用设备OST_SpecialityEquipment-2001350
刚性链接OST_ColumnAnalyticalRigidLinks-2001344
次等高线OST_SecondaryTopographyContours-2001343
主等高线OST_TopographyContours-2001342
三角形边缘OST_TopographySurface-2001341
地形OST_Topography-2001340
地形链接OST_TopographyLink-2001339
结构桁架OST_StructuralTruss-2001336
棍状符号OST_StructuralColumnStickSymbols-2001335
隐藏线OST_HiddenStructuralColumnLines-2001334
刚性链接OST_AnalyticalRigidLinks-2001333
结构柱OST_StructuralColumns-2001330
隐藏线OST_HiddenStructuralFramingLines-2001329
结构梁系统OST_StructuralFramingSystem-2001327
结构框架OST_StructuralFraming-2001320
隐藏线OST_HiddenStructuralFoundationLines-2001302
结构基础OST_StructuralFoundation-2001300
测量点OST_SharedBasePoint-2001272
项目基点OST_ProjectBasePoint-2001271
建筑红线线段标记OST_SitePropertyLineSegmentTags-2001269
建筑红线线段OST_SitePropertyLineSegment-2001268
属性标记OST_SitePropertyTags-2001267
边界点OST_SitePointBoundary-2001266
建筑红线OST_SiteProperty-2001265
建筑地坪OST_BuildingPad-2001263
内部点OST_SitePoint-2001262
场地OST_Site-2001260
道路OST_Roads-2001220
停车场OST_Parking-2001180
卫浴装置OST_PlumbingFixtures-2001160
机械设备OST_MechanicalEquipment-2001140
光源OST_LightingFixtureSource-2001121
照明设备OST_LightingFixtures-2001120
家具系统OST_FurnitureSystems-2001100
电气装置OST_ElectricalFixtures-2001060
电气设备OST_ElectricalEquipment-2001040
橱柜OST_Casework-2001000
竖井洞口OST_ShaftOpening-2000996
水力分离符号OST_PipeHydronicSeparationSymbols-2000988
机械设备集边界线OST_MechanicalEquipmentSetBoundaryLines-2000987
机械设备集标记OST_MechanicalEquipmentSetTags-2000986
机械设备集OST_MechanicalEquipmentSet-2000985
连接线符号OST_AnalyticalPipeConnectionLineSymbol-2000984
分析管道连接OST_AnalyticalPipeConnections-2000983
局部坐标系OST_FndSlabLocalCoordSys-2000976
局部坐标系OST_FloorLocalCoordSys-2000975
局部坐标系OST_WallLocalCoordSys-2000974
局部坐标系OST_BraceLocalCoordSys-2000973
局部坐标系OST_ColumnLocalCoordSys-2000972
局部坐标系OST_BeamLocalCoordSys-2000971
多钢筋注释OST_MultiReferenceAnnotations-2000970
分析节点标记OST_NodeAnalyticalTags-2000956
分析链接标记OST_LinkAnalyticalTags-2000955
支撑OST_StairsSupports-2000952
<高于> 扶手OST_RailingHandRailAboveCut-2000951
<高于> 顶部扶栏OST_RailingTopRailAboveCut-2000950
终端OST_RailingTermination-2000949
支座OST_RailingSupport-2000948
扶手OST_RailingHandRail-2000947
顶部扶栏OST_RailingTopRail-2000946
楼梯踏板/踢面数OST_StairsTriserNumbers-2000944
楼梯支撑标记OST_StairsSupportTags-2000942
楼梯平台标记OST_StairsLandingTags-2000941
楼梯梯段标记OST_StairsRunTags-2000940
<高于> 向上箭头OST_StairsPathsAboveCut-2000939
楼梯路径OST_StairsPaths-2000938
<高于> 踢面线OST_StairsRiserLinesAboveCut-2000937
踢面线OST_StairsRiserLines-2000936
<高于> 轮廓OST_StairsOutlinesAboveCut-2000935
轮廓OST_StairsOutlines-2000934
<高于> 楼梯前缘线OST_StairsNosingLinesAboveCut-2000933
楼梯前缘线OST_StairsNosingLines-2000932
<高于> 剪切标记OST_StairsCutMarksAboveCut-2000931
剪切标记OST_StairsCutMarks-2000930
踢面/踏板OST_StairsTrisers-2000921
平台OST_StairsLandings-2000920
梯段OST_StairsRuns-2000919
线OST_AdaptivePoints_Lines-2000903
平面OST_AdaptivePoints_Planes-2000902
OST_AdaptivePoints_Points-2000901
自适应点OST_AdaptivePoints-2000900
<空间分隔>OST_MEPSpaceSeparationLines-2000831
线OST_ReferencePoints_Lines-2000713
平面OST_ReferencePoints_Planes-2000712
OST_ReferencePoints_Points-2000711
参照点OST_ReferencePoints-2000710
材质OST_Materials-2000700
截面填充图案OST_CeilingsCutPattern-2000617
公共边OST_CeilingsDefault-2000616
面层 2 [5]OST_CeilingsFinish2-2000615
面层 1 [4]OST_CeilingsFinish1-2000614
衬底 [2]OST_CeilingsSubstrate-2000613
保温层/空气层 [3]OST_CeilingsInsulation-2000612
结构 [1]OST_CeilingsStructure-2000611
涂膜层OST_CeilingsMembrane-2000610
内部边缘OST_FloorsInteriorEdges-2000609
截面填充图案OST_FloorsCutPattern-2000608
隐藏线OST_HiddenFloorLines-2000607
公共边OST_FloorsDefault-2000606
面层 2 [5]OST_FloorsFinish2-2000605
面层 1 [4]OST_FloorsFinish1-2000604
衬底 [2]OST_FloorsSubstrate-2000603
保温层/空气层 [3]OST_FloorsInsulation-2000602
结构 [1]OST_FloorsStructure-2000601
涂膜层OST_FloorsMembrane-2000600
内部边缘OST_RoofsInteriorEdges-2000598
截面填充图案OST_RoofsCutPattern-2000597
公共边OST_RoofsDefault-2000596
面层 2 [5]OST_RoofsFinish2-2000595
面层 1 [4]OST_RoofsFinish1-2000594
衬底 [2]OST_RoofsSubstrate-2000593
保温层/空气层 [3]OST_RoofsInsulation-2000592
结构 [1]OST_RoofsStructure-2000591
涂膜层OST_RoofsMembrane-2000590
截面填充图案OST_WallsCutPattern-2000588
隐藏线OST_HiddenWallLines-2000587
公共边OST_WallsDefault-2000586
面层 2 [5]OST_WallsFinish2-2000585
面层 1 [4]OST_WallsFinish1-2000584
衬底 [2]OST_WallsSubstrate-2000583
保温层/空气层 [3]OST_WallsInsulation-2000582
结构 [1]OST_WallsStructure-2000581
涂膜层OST_WallsMembrane-2000580
明细表OST_Schedules-2000573
明细表图形OST_ScheduleGraphics-2000570
光栅图像OST_RasterImages-2000560
颜色填充OST_RoomColorFill-2000551
颜色填充图例OST_ColorFillLegends-2000550
注释裁剪边界OST_AnnotationCropSpecial-2000549
裁剪边界OST_CropBoundarySpecial-2000548
注释裁剪边界OST_AnnotationCrop-2000547
详图索引引线OST_CalloutLeaderLine-2000544
表面填充图案OST_CeilingsSurfacePattern-2000543
表面填充图案OST_RoofsSurfacePattern-2000542
表面填充图案OST_FloorsSurfacePattern-2000541
表面填充图案OST_WallsSurfacePattern-2000540
详图索引边界OST_CalloutBoundary-2000539
详图索引标头OST_CalloutHeads-2000538
详图索引OST_Callouts-2000537
裁剪边界OST_CropBoundary-2000536
立面OST_Elev-2000535
参照平面OST_CLines-2000530
视图标题OST_ViewportLabel-2000515
视口OST_Viewports-2000510
相机OST_Camera_Lines-2000501
空间标记OST_MEPSpaceTags-2000485
房间标记OST_RoomTags-2000480
门标记OST_DoorTags-2000460
窗标记OST_WindowTags-2000450
宽线OST_SectionHeadWideLines-2000404
中粗线OST_SectionHeadMediumLines-2000403
细线OST_SectionHeadThinLines-2000401
剖面标头OST_SectionHeads-2000400
等高线标签OST_ContourLabels-2000350
幕墙系统OST_CurtaSystem-2000340
幕墙系统网格OST_CurtainGridsCurtaSystem-2000323
幕墙网格OST_CurtainGridsWall-2000321
幕墙屋顶网格OST_CurtainGridsRoof-2000320
分析显示样式OST_AnalysisDisplayStyle-2000304
分析结果OST_AnalysisResults-2000303
渲染区域OST_RenderRegions-2000302
剖面框OST_SectionBox-2000301
文字注释OST_TextNotes-2000300
<中心线>OST_CenterLines-2000288
<超出>OST_LinesBeyond-2000287
<隐藏>OST_HiddenLines-2000286
<已拆除>OST_DemolishedLines-2000285
<架空线>OST_OverheadLines-2000284
宽线OST_TitleBlockWideLines-2000283
中粗线OST_TitleBlockMediumLines-2000282
细线OST_TitleBlockThinLines-2000281
图框OST_TitleBlocks-2000280
视图OST_Views-2000279
隐藏线OST_PartHiddenLines-2000271
零件标记OST_PartTags-2000270
组成部分OST_Parts-2000269
部件标记OST_AssemblyTags-2000268
部件OST_Assemblies-2000267
屋顶标记OST_RoofTags-2000266
高程点坡度OST_SpotSlopes-2000265
高程点坐标OST_SpotCoordinates-2000264
高程点OST_SpotElevations-2000263
自动绘制尺寸标注OST_WeakDims-2000261
尺寸标注OST_Dimensions-2000260
标高OST_Levels-2000240
位移路径OST_DisplacementPath-2000223
多段轴网OST_GridChains-2000221
轴网OST_Grids-2000220
断开剖面线OST_BrokenSectionLine-2000202
剖面线OST_SectionLine-2000201
剖面OST_Sections-2000200
视图参照OST_ReferenceViewer-2000198
视图参照OST_ReferenceViewerSymbol-2000197
在族中导入OST_ImportObjectStyles-2000196
遮罩区域OST_MaskingRegion-2000194
拼接线OST_Matchline-2000193
平面区域OST_PlanRegion-2000191
填充区域OST_FilledRegion-2000190
墙饰条OST_Cornices-2000181
坡道OST_Ramps-2000180
幕墙网格OST_CurtainGrids-2000173
幕墙竖梃OST_CurtainWallMullions-2000171
幕墙嵌板OST_CurtainWallPanels-2000170
颜色填充OST_AreaColorFill-2000165
参照OST_AreaReferenceVisibility-2000164
内部填充OST_AreaInteriorFillVisibility-2000163
参照OST_RoomReferenceVisibility-2000162
内部填充OST_RoomInteriorFillVisibility-2000161
房间OST_Rooms-2000160
常规模型OST_GenericModel-2000151
常规注释OST_GenericAnnotation-2000150
栏杆扶手标记OST_StairsRailingTags-2000133
<高于> 栏杆扶手截面线OST_StairsRailingAboveCut-2000132
向下箭头OST_StairsDownArrows-2000131
向上箭头OST_StairsUpArrows-2000130
文字(向下)OST_StairsDownText-2000129
扶栏OST_StairsRailingRail-2000128
栏杆OST_StairsRailingBaluster-2000127
栏杆扶手OST_StairsRailing-2000126
文字(向上)OST_StairsUpText-2000125
<高于> 支撑OST_StairsSupportsAboveCut-2000124
支撑OST_StairsStringerCarriage-2000123
楼梯OST_Stairs-2000120
导向轴网OST_GuideGrid-2000107
OST_Columns-2000100
模型组OST_IOSModelGroups-2000095
参照线OST_ReferenceLines-2000083
家具OST_Furniture-2000080
<面积边界>OST_AreaSchemeLines-2000079
线OST_GenericLines-2000078
隔热层线OST_InsulationLines-2000077
<房间分隔>OST_RoomSeparationLines-2000066
旋转轴OST_AxisOfRotation-2000065
线OST_Lines-2000051
<草图>OST_SketchLines-2000045
宽线OST_CurvesWideLines-2000044
中粗线OST_CurvesMediumLines-2000043
细线OST_CurvesThinLines-2000042
天花板OST_Ceilings-2000038
屋顶OST_Roofs-2000035
楼板OST_Floors-2000032
玻璃OST_DoorsGlassProjection-2000031
框架/竖梃OST_DoorsFrameMullionProjection-2000029
洞口OST_DoorsOpeningProjection-2000027
嵌板OST_DoorsPanelProjection-2000025
OST_Doors-2000023
洞口OST_WindowsOpeningProjection-2000022
窗台/盖板OST_WindowsSillHeadProjection-2000020
框架/竖梃OST_WindowsFrameMullionProjection-2000018
玻璃OST_WindowsGlassProjection-2000016
OST_Windows-2000014
OST_Walls-2000011
]]>
+ + + <p>Revit二次开发中经常用到<strong>BuildInCategory</strong>过滤元素,以下是通过遍历该枚举获取的数据,其中部分类别的名称未能获取到,本文未显示<strong>Unknown</strong>部分,完整版本见 <a href="/post/revit-category-all/">BuildInCategory枚举 - 完整</a>。</p> + + + + + + + + + + +
+ + + BuildInCategory枚举 - 完整 + + https://awaw.cc/post/revit-category-all/ + 2020-12-01T10:20:00.000Z + 2023-07-04T05:03:52.663Z + + Revit二次开发中经常用到BuildInCategory过滤元素,以下是通过遍历该枚举获取的数据,其中部分类别的名称未能获取到,显示为Unknown,请悉知。

中文名称名称
UnknownOST_StackedWalls_Obsolete_IdInWrongRange-20034100
UnknownOST_MassTags_Obsolete_IdInWrongRange-20034005
UnknownOST_MassSurface_Obsolete_IdInWrongRange-20034004
UnknownOST_MassFloor_Obsolete_IdInWrongRange-20034003
UnknownOST_Mass_Obsolete_IdInWrongRange-20034000
UnknownOST_WallRefPlanes_Obsolete_IdInWrongRange-20000896
UnknownOST_StickSymbols_Obsolete_IdInWrongRange-20000828
UnknownOST_RemovedGridSeg_Obsolete_IdInWrongRange-20000827
UnknownOST_PointClouds-2010001
UnknownOST_AssemblyOrigin_Lines-2009661
UnknownOST_AssemblyOrigin_Planes-2009660
UnknownOST_AssemblyOrigin_Points-2009659
UnknownOST_AssemblyOrigin-2009658
分析链接OST_LinksAnalytical-2009657
分析楼板基础标记OST_FoundationSlabAnalyticalTags-2009656
分析条形基础标记OST_WallFoundationAnalyticalTags-2009655
分析独立基础标记OST_IsolatedFoundationAnalyticalTags-2009654
分析墙标记OST_WallAnalyticalTags-2009653
分析楼层标记OST_FloorAnalyticalTags-2009652
分析柱标记OST_ColumnAnalyticalTags-2009651
分析支撑标记OST_BraceAnalyticalTags-2009650
分析梁标记OST_BeamAnalyticalTags-2009649
UnknownOST_AnalyticalNodes_Lines-2009648
UnknownOST_AnalyticalNodes_Planes-2009647
UnknownOST_AnalyticalNodes_Points-2009646
分析节点OST_AnalyticalNodes-2009645
UnknownOST_RigidLinksAnalytical-2009644
分析基础底板OST_FoundationSlabAnalytical-2009643
分析条形基础OST_WallFoundationAnalytical-2009642
分析独立基础OST_IsolatedFoundationAnalytical-2009641
分析墙OST_WallAnalytical-2009640
分析楼层OST_FloorAnalytical-2009639
顶部线段OST_ColumnEndSegment-2009638
基准线段OST_ColumnStartSegment-2009637
分析柱OST_ColumnAnalytical-2009636
末端线段OST_BraceEndSegment-2009635
起点线段OST_BraceStartSegment-2009634
分析支撑OST_BraceAnalytical-2009633
末端线段OST_BeamEndSegment-2009632
起点线段OST_BeamStartSegment-2009631
分析梁OST_BeamAnalytical-2009630
UnknownOST_CompassSecondaryMonth-2009624
UnknownOST_CompassPrimaryMonth-2009623
UnknownOST_CompassSectionFilled-2009622
UnknownOST_LightLine-2009621
UnknownOST_MultiSurface-2009620
UnknownOST_SunSurface-2009619
UnknownOST_Analemma-2009618
UnknownOST_SunsetText-2009617
UnknownOST_CompassSection-2009616
UnknownOST_CompassOuter-2009615
UnknownOST_SunriseText-2009614
UnknownOST_CompassInner-2009613
UnknownOST_SunPath2-2009612
UnknownOST_SunPath1-2009611
UnknownOST_Sun-2009610
UnknownOST_SunStudy-2009609
棍状符号OST_StructuralTrussStickSymbols-2009608
UnknownOST_StructuralTrussHiddenLines-2009607
UnknownOST_TrussChord-2009606
UnknownOST_TrussWeb-2009605
UnknownOST_TrussBottomChordCurve-2009604
UnknownOST_TrussTopChordCurve-2009603
UnknownOST_TrussVertWebCurve-2009602
UnknownOST_TrussDiagWebCurve-2009601
UnknownOST_Truss-2009600
UnknownOST_RailingSystemTransitionHiddenLines_Deprecated-2009549
UnknownOST_RailingSystemTerminationHiddenLines_Deprecated-20095
UnknownOST_RailingSystemRailHiddenLines_Deprecated-2009547
UnknownOST_RailingSystemTopRailHiddenLines_Deprecated-2009546
UnknownOST_RailingSystemHandRailBracketHiddenLines_Deprecated-2
UnknownOST_RailingSystemHandRailHiddenLines_Deprecated-2009544
UnknownOST_RailingSystemPanelBracketHiddenLines_Deprecated-2009
UnknownOST_RailingSystemPanelHiddenLines_Deprecated-2009542
UnknownOST_RailingSystemBalusterHiddenLines_Deprecated-2009541
UnknownOST_RailingSystemPostHiddenLines_Deprecated-2009540
UnknownOST_RailingSystemSegmentHiddenLines_Deprecated-2009539
UnknownOST_RailingSystemHiddenLines_Deprecated-2009538
UnknownOST_StairStringer2012HiddenLines_Deprecated-2009537
UnknownOST_StairTread2012HiddenLines_Deprecated-2009536
UnknownOST_StairLanding2012HiddenLines_Deprecated-2009535
UnknownOST_StairRun2012HiddenLines_Deprecated-2009534
UnknownOST_Stairs2012HiddenLines_Deprecated-2009533
隐藏线OST_MassHiddenLines-2009532
隐藏线OST_CurtaSystemHiddenLines-2009531
UnknownOST_OBSOLETE_ElemArrayHiddenLines-2009530
隐藏线OST_EntourageHiddenLines-2009529
隐藏线OST_PlantingHiddenLines-2009528
隐藏线OST_SpecialityEquipmentHiddenLines-2009527
隐藏线OST_TopographyHiddenLines-2009526
UnknownOST_StructuralFramingSystemHiddenLines_Obsolete-2009525
隐藏线OST_SiteHiddenLines-2009524
隐藏线OST_RoadsHiddenLines-2009523
隐藏线OST_ParkingHiddenLines-2009522
隐藏线OST_PlumbingFixturesHiddenLines-2009521
隐藏线OST_MechanicalEquipmentHiddenLines-2009520
隐藏线OST_LightingFixturesHiddenLines-2009519
隐藏线OST_FurnitureSystemsHiddenLines-2009518
隐藏线OST_ElectricalFixturesHiddenLines-2009517
隐藏线OST_ElectricalEquipmentHiddenLines-2009516
隐藏线OST_CaseworkHiddenLines-2009515
隐藏线OST_DetailComponentsHiddenLines-2009514
隐藏线OST_ShaftOpeningHiddenLines-2009513
隐藏线OST_GenericModelHiddenLines-2009512
隐藏线OST_CurtainWallMullionsHiddenLines-2009511
隐藏线OST_CurtainWallPanelsHiddenLines-2009510
隐藏线OST_RampsHiddenLines-2009509
隐藏线OST_StairsRailingHiddenLines-2009508
隐藏线OST_StairsHiddenLines-2009507
隐藏线OST_ColumnsHiddenLines-2009506
隐藏线OST_FurnitureHiddenLines-2009505
隐藏线OST_LinesHiddenLines-2009504
隐藏线OST_CeilingsHiddenLines-2009503
隐藏线OST_RoofsHiddenLines-2009502
隐藏线OST_DoorsHiddenLines-2009501
隐藏线OST_WindowsHiddenLines-2009500
轮廓标记OST_StructConnectionProfilesTags-2009064
孔标记OST_StructConnectionHoleTags-2009063
隐藏线OST_CouplerHiddenLines-2009062
结构钢筋接头标记OST_CouplerTags-2009061
结构钢筋接头OST_Coupler-2009060
焊接标记OST_StructConnectionWeldTags-2009059
剪力钉标记OST_StructConnectionShearStudTags-2009058
锚固件标记OST_StructConnectionAnchorTags-2009057
螺栓标记OST_StructConnectionBoltTags-2009056
板标记OST_StructConnectionPlateTags-2009055
隐藏线OST_RebarHiddenLines-2009050
UnknownOST_StructSubConnections-2009049
修改器OST_StructConnectionModifiers-2009047
焊缝OST_StructConnectionWelds-2009046
OST_StructConnectionHoles-2009045
剪力钉OST_StructConnectionShearStuds-2009044
UnknownOST_StructConnectionNobleWarning-2009043
其他OST_StructConnectionOthers-2009042
螺栓OST_StructConnectionBolts-2009041
结构连接标记OST_StructConnectionTags-2009040
锚固件OST_StructConnectionAnchors-2009039
平板OST_StructConnectionPlates-2009038
轮廓OST_StructConnectionProfiles-2009037
参照OST_StructConnectionReference-2009036
UnknownOST_StructConnectionFailed-2009035
UnknownOST_StructConnectionStale-2009034
符号OST_StructConnectionSymbol-2009033
隐藏线OST_StructConnectionHiddenLines-2009032
UnknownOST_StructWeldLines-2009031
结构连接OST_StructConnections-2009030
边界OST_FabricAreaBoundary-2009029
结构钢筋网符号OST_FabricReinSpanSymbol-2009028
钢筋网OST_FabricReinforcementWire-2009027
边界OST_FabricReinforcementBoundary-2009026
钢筋集切换OST_RebarSetToggle-2009025
UnknownOST_FabricAreaTags-2009023
结构钢筋网标记OST_FabricReinforcementTags-2009022
结构区域钢筋标记OST_AreaReinTags-2009021
结构钢筋标记OST_RebarTags-2009020
<钢筋网片>OST_FabricAreaSketchSheetsLines-2009019
<钢筋网外围>OST_FabricAreaSketchEnvelopeLines-2009018
结构钢筋网区域OST_FabricAreas-2009017
结构钢筋网OST_FabricReinforcement-2009016
钢筋保护层参照OST_RebarCover-2009015
UnknownOST_CoverType-2009014
钢筋形状OST_RebarShape-2009013
边界OST_PathReinBoundary-2009012
结构路径钢筋标记OST_PathReinTags-2009011
结构路径钢筋符号OST_PathReinSpanSymbol-2009010
结构路径钢筋OST_PathRein-2009009
UnknownOST_Cage-2009008
UnknownOST_AreaReinXVisibility-2009007
边界OST_AreaReinBoundary-2009006
结构区域钢筋符号OST_AreaReinSpanSymbol-2009005
UnknownOST_AreaReinSketchOverride-2009004
结构区域钢筋OST_AreaRein-2009003
UnknownOST_RebarLines-2009002
UnknownOST_RebarSketchLines-2009001
结构钢筋OST_Rebar-2009000
隔热层OST_FabricationPipeworkInsulation-2008221
内衬OST_FabricationDuctworkLining-2008220
OST_FabricationContainmentDrop-2008219
OST_FabricationContainmentRise-2008218
OST_FabricationPipeworkDrop-2008217
OST_FabricationPipeworkRise-2008216
符号OST_FabricationContainmentSymbology-2008215
中心线OST_FabricationContainmentCenterLine-2008214
MEP 预制保护层标记OST_FabricationContainmentTags-2008213
MEP 预制保护层OST_FabricationContainment-2008212
符号OST_FabricationPipeworkSymbology-2008211
中心线OST_FabricationPipeworkCenterLine-2008210
MEP 预制管道标记OST_FabricationPipeworkTags-2008209
MEP 预制管道OST_FabricationPipework-2008208
符号OST_FabricationDuctworkSymbology-2008207
OST_FabricationDuctworkDrop-2008206
OST_FabricationDuctworkRise-2008205
MEP 预制支架标记OST_FabricationHangerTags-2008204
MEP 预制支架OST_FabricationHangers-2008203
UnknownOST_OBSOLETE_FabricationPartsTmpGraphicDropDrag-200820
UnknownOST_FabricationPartsTmpGraphicDrag-2008201
UnknownOST_OBSOLETE_FabricationPartsTmpGraphicDrop-2008200
UnknownOST_FabricationPartsTmpGraphicEnd-2008199
隔热层OST_FabricationDuctworkInsulation-2008198
UnknownOST_LayoutNodes-2008197
中心线OST_FabricationDuctworkCenterLine-2008196
UnknownOST_FabricationServiceElements-2008195
MEP 预制管网标记OST_FabricationDuctworkTags-2008194
MEP 预制管网OST_FabricationDuctwork-2008193
UnknownOST_LayoutPathBase_Pipings-2008192
UnknownOST_NumberingSchemas-2008191
UnknownOST_DivisionRules-2008190
着色OST_gbXML_Shade-2008187
分析表面OST_AnalyticSurfaces-2008186
分析空间OST_AnalyticSpaces-2008185
空气洞口OST_gbXML_OpeningAir-2008184
非推拉门OST_gbXML_NonSlidingDoor-2008183
推拉门OST_gbXML_SlidingDoor-2008182
可操作天窗OST_gbXML_OperableSkylight-2008181
固定天窗OST_gbXML_FixedSkylight-2008180
可操作窗口OST_gbXML_OperableWindow-2008179
固定窗OST_gbXML_FixedWindow-2008178
地下天花板OST_gbXML_UndergroundCeiling-2008177
地下板OST_gbXML_UndergroundSlab-2008176
地下墙OST_gbXML_UndergroundWall-2008175
空气曲面OST_gbXML_SurfaceAir-2008174
天花板OST_gbXML_Ceiling-2008173
内部楼板OST_gbXML_InteriorFloor-2008172
内墙OST_gbXML_InteriorWall-2008171
平整表面上的板OST_gbXML_SlabOnGrade-2008170
活动楼板OST_gbXML_RaisedFloor-2008169
屋顶OST_gbXML_Roof-2008168
外墙OST_gbXML_ExteriorWall-2008167
UnknownOST_DivisionProfile-2008165
UnknownOST_SplitterProfile-2008164
管段OST_PipeSegments-2008163
UnknownOST_GraphicalWarning_OpenConnector-2008162
管道占位符OST_PlaceHolderPipes-2008161
风管占位符OST_PlaceHolderDucts-2008160
参照线OST_PipingSystem_Reference_Visibility-2008159
UnknownOST_PipingSystem_Reference-2008158
参照线OST_DuctSystem_Reference_Visibility-2008157
UnknownOST_DuctSystem_Reference-2008156
管道隔热层标记OST_PipeInsulationsTags-2008155
风管内衬标记OST_DuctLiningsTags-2008154
风管隔热层标记OST_DuctInsulationsTags-2008153
电气备件/空间电路OST_ElectricalInternalCircuits-2008152
配电盘明细表图形OST_PanelScheduleGraphics-2008151
电缆桥架管路OST_CableTrayRun-2008150
线管管路OST_ConduitRun-2008149
UnknownOST_ParamElemElectricalLoadClassification-2008148
UnknownOST_DataPanelScheduleTemplates-2008147
UnknownOST_SwitchboardScheduleTemplates-2008146
UnknownOST_BranchPanelScheduleTemplates-2008145
UnknownOST_ConduitStandards-2008144
UnknownOST_ElectricalLoadClassifications-2008143
UnknownOST_ElectricalDemandFactorDefinitions-2008142
中心线OST_ConduitFittingCenterLine-2008141
中心线OST_CableTrayFittingCenterLine-2008140
中心线OST_ConduitCenterLine-2008139
OST_ConduitDrop-2008138
OST_ConduitRiseDrop-2008137
中心线OST_CableTrayCenterLine-2008136
OST_CableTrayDrop-2008135
OST_CableTrayRiseDrop-2008134
线管标记OST_ConduitTags-2008133
线管OST_Conduit-2008132
电缆桥架标记OST_CableTrayTags-2008131
电缆桥架OST_CableTray-2008130
线管配件标记OST_ConduitFittingTags-2008129
线管配件OST_ConduitFitting-2008128
电缆桥架配件标记OST_CableTrayFittingTags-2008127
电缆桥架配件OST_CableTrayFitting-2008126
布管系统配置OST_RoutingPreferences-2008125
风管内衬OST_DuctLinings-2008124
风管隔热层OST_DuctInsulations-2008123
管道隔热层OST_PipeInsulations-2008122
UnknownOST_HVAC_Load_Schedules-2008121
UnknownOST_HVAC_Load_Building_Types-2008120
UnknownOST_HVAC_Load_Space_Types-2008119
参照线OST_HVAC_Zones_Reference_Visibility-2008118
内部填充OST_HVAC_Zones_InteriorFill_Visibility-2008117
颜色填充OST_HVAC_Zones_ColorFill-2008116
分区标记OST_ZoneTags-2008115
UnknownOST_LayoutPath_Bases-2008114
UnknownOST_WireTemperatureRatings-2008113
UnknownOST_WireInsulations-2008112
UnknownOST_WireMaterials-2008111
UnknownOST_HVAC_Zones_Reference-2008110
UnknownOST_HVAC_Zones_InteriorFill-2008109
边界OST_HVAC_Zones_Boundary-2008108
HVAC 区OST_HVAC_Zones-2008107
UnknownOST_Fluids-2008106
UnknownOST_PipeSchedules-2008105
UnknownOST_PipeMaterials-2008104
UnknownOST_PipeConnections-2008103
UnknownOST_EAConstructions-2008102
开关系统OST_SwitchSystem-2008101
喷头标记OST_SprinklerTags-2008100
喷头OST_Sprinklers-2008099
UnknownOST_RouteCurveBranch-2008098
UnknownOST_RouteCurveMain-2008097
UnknownOST_RouteCurve-2008096
洞口OST_GbXML_Opening-2008095
地下OST_GbXML_SType_Underground-2008094
着色OST_GbXML_SType_Shade-2008093
外部OST_GbXML_SType_Exterior-2008092
内部OST_GbXML_SType_Interior-2008091
分析表面OST_GbXMLFaces-2008090
回路方向OST_WireHomeRunArrows-2008089
灯具标记OST_LightingDeviceTags-2008088
灯具OST_LightingDevices-2008087
火警设备标记OST_FireAlarmDeviceTags-2008086
火警设备OST_FireAlarmDevices-2008085
数据设备标记OST_DataDeviceTags-2008084
数据设备OST_DataDevices-2008083
通讯设备标记OST_CommunicationDeviceTags-2008082
通讯设备OST_CommunicationDevices-2008081
安全设备标记OST_SecurityDeviceTags-2008080
安全设备OST_SecurityDevices-2008079
护理呼叫设备标记OST_NurseCallDeviceTags-2008078
护理呼叫设备OST_NurseCallDevices-2008077
电话设备标记OST_TelephoneDeviceTags-2008076
电话设备OST_TelephoneDevices-2008075
导线记号OST_WireTickMarks-2008074
UnknownOST_PipeFittingInsulation-2008073
中心线OST_PipeFittingCenterLine-2008072
UnknownOST_FlexPipeCurvesInsulation-2008071
UnknownOST_PipeCurvesInsulation-2008070
OST_PipeCurvesDrop-2008069
UnknownOST_DuctFittingLining-2008068
UnknownOST_DuctFittingInsulation-2008067
中心线OST_DuctFittingCenterLine-2008066
UnknownOST_FlexDuctCurvesInsulation-2008065
UnknownOST_DuctCurvesLining-2008064
UnknownOST_DuctCurvesInsulation-2008063
OST_DuctCurvesDrop-2008062
风管管件标记OST_DuctFittingTags-2008061
管件标记OST_PipeFittingTags-2008060
管道颜色填充OST_PipeColorFills-2008059
管道颜色填充图例OST_PipeColorFillLegends-2008058
导线标记OST_WireTags-2008057
管道附件标记OST_PipeAccessoryTags-2008056
管道附件OST_PipeAccessory-2008055
OST_PipeCurvesRiseDrop-2008054
填充图案OST_FlexPipeCurvesPattern-2008053
UnknownOST_FlexPipeCurvesContour-2008052
中心线OST_FlexPipeCurvesCenterLine-2008051
软管OST_FlexPipeCurves-2008050
管件OST_PipeFitting-2008049
软管标记OST_FlexPipeTags-2008048
管道标记OST_PipeTags-2008047
UnknownOST_PipeCurvesContour-2008046
中心线OST_PipeCurvesCenterLine-2008045
管道OST_PipeCurves-2008044
管道系统OST_PipingSystem-2008043
UnknownOST_ElectricalDemandFactor-2008042
UnknownOST_ElecDistributionSys-2008041
UnknownOST_ElectricalVoltage-2008040
导线OST_Wire-2008039
UnknownOST_ElectricalCircuitTags-2008038
电路OST_ElectricalCircuit-2008037
OST_DuctCurvesRiseDrop-2008036
填充图案OST_FlexDuctCurvesPattern-2008023
UnknownOST_FlexDuctCurvesContour-2008022
中心线OST_FlexDuctCurvesCenterLine-2008021
软风管OST_FlexDuctCurves-2008020
风管附件标记OST_DuctAccessoryTags-2008017
风管附件OST_DuctAccessory-2008016
风管系统OST_DuctSystem-2008015
风道末端标记OST_DuctTerminalTags-2008014
风道末端OST_DuctTerminal-2008013
风管管件OST_DuctFitting-2008010
风管颜色填充OST_DuctColorFills-2008005
软风管标记OST_FlexDuctTags-2008004
风管标记OST_DuctTags-2008003
UnknownOST_DuctCurvesContour-2008002
中心线OST_DuctCurvesCenterLine-2008001
风管OST_DuctCurves-2008000
风管颜色填充图例OST_DuctColorFillLegends-2007004
UnknownOST_ConnectorElemZAxis-2007003
UnknownOST_ConnectorElemYAxis-2007002
UnknownOST_ConnectorElemXAxis-2007001
UnknownOST_ConnectorElem-2007000
UnknownOST_BridgeBearingTags-2006178
UnknownOST_BridgeGirderTags-2006177
UnknownOST_BridgeFoundationTags-2006176
UnknownOST_BridgeDeckTags-2006175
UnknownOST_BridgeArchTags-2006174
UnknownOST_BridgeCableTags-2006173
UnknownOST_BridgeTowerTags-2006172
UnknownOST_BridgePierTags-2006171
UnknownOST_BridgeAbutmentTags-2006170
UnknownOST_BridgeBearingHiddenLines-2006158
UnknownOST_BridgeGirderHiddenLines-2006157
UnknownOST_BridgeFoundationHiddenLines-2006156
UnknownOST_BridgeDeckHiddenLines-2006155
UnknownOST_BridgeArchHiddenLines-2006154
UnknownOST_BridgeCableHiddenLines-2006153
UnknownOST_BridgeTowerHiddenLines-2006152
UnknownOST_BridgePierHiddenLines-2006151
UnknownOST_BridgeAbutmentHiddenLines-2006150
桥梁支座OST_BridgeBearings-2006138
桥梁大梁OST_BridgeGirders-2006137
桥梁基础OST_BridgeFoundations-2006136
桥面OST_BridgeDecks-2006135
桥拱OST_BridgeArches-2006134
桥梁缆索OST_BridgeCables-2006133
桥塔OST_BridgeTowers-2006132
桥墩OST_BridgePiers-2006131
桥台OST_BridgeAbutments-2006130
UnknownOST_DesignOptions-2006114
UnknownOST_DesignOptionSets-2006112
平面视图中的支撑符号OST_StructuralBracePlanReps-2006110
连接符号OST_StructConnectionSymbols-2006100
结构注释OST_StructuralAnnotations-2006090
云线批注标记OST_RevisionCloudTags-2006080
UnknownOST_Revisions-2006070
云线批注OST_RevisionClouds-2006060
UnknownOST_EditCutProfile-2006050
立面标记OST_ElevationMarks-2006045
轴网标头OST_GridHeads-2006040
标高标头OST_LevelHeads-2006020
UnknownOST_DecalType-2006002
UnknownOST_DecalElement-2006001
范围框OST_VolumeOfInterest-2006000
边界条件OST_BoundaryConditions-2005301
内部面荷载标记OST_InternalAreaLoadTags-2005255
内部线荷载标记OST_InternalLineLoadTags-2005254
内部点荷载标记OST_InternalPointLoadTags-2005253
面荷载标记OST_AreaLoadTags-2005252
线荷载标记OST_LineLoadTags-2005251
点荷载标记OST_PointLoadTags-2005250
地震荷载OST_LoadCasesSeismic-2005218
温度荷载OST_LoadCasesTemperature-2005217
偶然荷载OST_LoadCasesAccidental-2005216
屋顶活荷载OST_LoadCasesRoofLive-2005215
雪荷载OST_LoadCasesSnow-2005214
风荷载OST_LoadCasesWind-2005213
活荷载OST_LoadCasesLive-2005212
恒荷载OST_LoadCasesDead-2005211
结构荷载工况OST_LoadCases-2005210
内部面荷载OST_InternalAreaLoads-2005207
内部线荷载OST_InternalLineLoads-2005206
内部点荷载OST_InternalPointLoads-2005205
结构内部荷载OST_InternalLoads-2005204
面荷载OST_AreaLoads-2005203
线荷载OST_LineLoads-2005202
点荷载OST_PointLoads-2005201
结构荷载OST_Loads-2005200
结构梁系统标记OST_BeamSystemTags-2005130
基础跨方向符号OST_FootingSpanDirectionSymbol-2005111
跨方向符号OST_SpanDirectionSymbol-2005110
UnknownOST_SpotSlopesSymbols-2005102
UnknownOST_SpotCoordinateSymbols-2005101
高程点符号OST_SpotElevSymbols-2005100
UnknownOST_StructuralConnectionHandlerTags_Deprecated-2005031
结构桁架标记OST_TrussTags-2005030
注释记号标记OST_KeynoteTags-2005029
详图项目标记OST_DetailComponentTags-2005028
材质标记OST_MaterialTags-2005027
楼板标记OST_FloorTags-2005026
幕墙系统标记OST_CurtaSystemTags-2005025
UnknownOST_HostFinTags-2005024
楼梯标记OST_StairsTags-2005023
多类别标记OST_MultiCategoryTags-2005022
植物标记OST_PlantingTags-2005021
面积标记OST_AreaTags-2005020
结构基础标记OST_StructuralFoundationTags-2005019
结构柱标记OST_StructuralColumnTags-2005018
停车场标记OST_ParkingTags-2005017
场地标记OST_SiteTags-2005016
结构框架标记OST_StructuralFramingTags-2005015
专用设备标记OST_SpecialityEquipmentTags-2005014
常规模型标记OST_GenericModelTags-2005013
幕墙嵌板标记OST_CurtainWallPanelTags-2005012
墙标记OST_WallTags-2005011
卫浴装置标记OST_PlumbingFixtureTags-2005010
机电设备标记OST_MechanicalEquipmentTags-2005009
照明设备标记OST_LightingFixtureTags-2005008
家具系统标记OST_FurnitureSystemTags-2005007
家具标记OST_FurnitureTags-2005006
电气装置标记OST_ElectricalFixtureTags-2005004
电气设备标记OST_ElectricalEquipmentTags-2005003
天花板标记OST_CeilingTags-2005002
橱柜标记OST_CaseworkTags-2005001
UnknownOST_Tags-2005000
颜色填充OST_MEPSpaceColorFill-2003605
UnknownOST_MEPSpaceReference-2003604
UnknownOST_MEPSpaceInteriorFill-2003603
参照OST_MEPSpaceReferenceVisibility-2003602
内墙OST_MEPSpaceInteriorFillVisibility-2003601
空间OST_MEPSpaces-2003600
UnknownOST_StackedWalls-2003500
UnknownOST_MassGlazingAll-2003423
UnknownOST_MassFloorsAll-2003422
UnknownOST_MassWallsAll-2003421
UnknownOST_MassExteriorWallUnderground-2003420
UnknownOST_MassSlab-2003419
体量着色OST_MassShade-2003418
体量洞口OST_MassOpening-2003417
体量天窗OST_MassSkylights-2003416
体量玻璃OST_MassGlazing-2003415
体量屋顶OST_MassRoof-2003414
体量外墙OST_MassExteriorWall-2003413
体量内墙OST_MassInteriorWall-2003412
体量分区OST_MassZone-2003411
体量楼层标记OST_MassAreaFaceTags-2003410
UnknownOST_HostTemplate-2003409
UnknownOST_MassFaceSplitter-2003408
UnknownOST_MassCutter-2003407
UnknownOST_ZoningEnvelope-2003406
体量标记OST_MassTags-2003405
形式OST_MassForm-2003404
体量楼层OST_MassFloor-2003403
体量OST_Mass-2003400
UnknownOST_DividedSurface_DiscardedDivisionLines-2003333
UnknownOST_DividedSurfaceBelt-2003332
UnknownOST_TilePatterns-2003331
UnknownOST_AlwaysExcludedInAllViews-2003330
UnknownOST_DividedSurface_TransparentFace-2003329
UnknownOST_DividedSurface_PreDividedSurface-2003328
图案填充OST_DividedSurface_PatternFill-2003327
填充图案线OST_DividedSurface_PatternLines-2003326
网格线OST_DividedSurface_Gridlines-2003325
节点OST_DividedSurface_Nodes-2003324
UnknownOST_DividedSurface-2003323
UnknownOST_RepeatingDetailLines-2003321
向下箭头OST_RampsDownArrow-2003308
向上箭头OST_RampsUpArrow-2003307
文字(向下)OST_RampsDownText-2003306
文字(向上)OST_RampsUpText-2003305
超出截面线的梯边梁OST_RampsStringerAboveCut-2003304
梯边梁OST_RampsStringer-2003303
坡道超出截面线OST_RampsAboveCut-2003302
UnknownOST_RampsIncomplete-2003301
UnknownOST_TrussDummy-2003300
UnknownOST_ZoneSchemes-2003225
UnknownOST_AreaSchemes-2003201
面积OST_Areas-2003200
项目信息OST_ProjectInformation-2003101
图纸OST_Sheets-2003100
UnknownOST_ProfileFamilies-2003000
详图项目OST_DetailComponents-2002000
屋檐底板OST_RoofSoffit-2001393
楼板边缘OST_EdgeSlab-2001392
檐沟OST_Gutter-2001391
封檐板OST_Fascia-2001390
环境OST_Entourage-2001370
植物OST_Planting-2001360
UnknownOST_Blocks-2001359
隐藏线OST_StructuralStiffenerHiddenLines-2001358
定位线OST_StructuralColumnLocationLine-2001357
定位线OST_StructuralFramingLocationLine-2001356
结构加强板标记OST_StructuralStiffenerTags-2001355
结构加强板OST_StructuralStiffener-2001354
UnknownOST_FootingAnalyticalGeometry-2001353
RVT 链接OST_RvtLinks-2001352
UnknownOST_Automatic-2001351
专用设备OST_SpecialityEquipment-2001350
刚性链接OST_ColumnAnalyticalRigidLinks-2001344
次等高线OST_SecondaryTopographyContours-2001343
主等高线OST_TopographyContours-2001342
三角形边缘OST_TopographySurface-2001341
地形OST_Topography-2001340
地形链接OST_TopographyLink-2001339
结构桁架OST_StructuralTruss-2001336
棍状符号OST_StructuralColumnStickSymbols-2001335
隐藏线OST_HiddenStructuralColumnLines-2001334
刚性链接OST_AnalyticalRigidLinks-2001333
UnknownOST_ColumnAnalyticalGeometry-2001332
UnknownOST_FramingAnalyticalGeometry-2001331
结构柱OST_StructuralColumns-2001330
隐藏线OST_HiddenStructuralFramingLines-2001329
UnknownOST_KickerBracing-2001328
结构梁系统OST_StructuralFramingSystem-2001327
UnknownOST_VerticalBracing-2001326
UnknownOST_HorizontalBracing-2001325
UnknownOST_Purlin-2001324
UnknownOST_Joist-2001323
UnknownOST_Girder-2001322
UnknownOST_StructuralFramingOther-2001321
结构框架OST_StructuralFraming-2001320
隐藏线OST_HiddenStructuralFoundationLines-2001302
结构基础OST_StructuralFoundation-2001300
UnknownOST_BasePointAxisZ-2001275
UnknownOST_BasePointAxisY-2001274
UnknownOST_BasePointAxisX-2001273
测量点OST_SharedBasePoint-2001272
项目基点OST_ProjectBasePoint-2001271
UnknownOST_SiteRegion-2001270
建筑红线线段标记OST_SitePropertyLineSegmentTags-2001269
建筑红线线段OST_SitePropertyLineSegment-2001268
属性标记OST_SitePropertyTags-2001267
边界点OST_SitePointBoundary-2001266
建筑红线OST_SiteProperty-2001265
建筑地坪OST_BuildingPad-2001263
内部点OST_SitePoint-2001262
UnknownOST_SiteSurface-2001261
场地OST_Site-2001260
UnknownOST_Sewer-2001240
道路OST_Roads-2001220
UnknownOST_Property-2001200
停车场OST_Parking-2001180
卫浴装置OST_PlumbingFixtures-2001160
机械设备OST_MechanicalEquipment-2001140
光源OST_LightingFixtureSource-2001121
照明设备OST_LightingFixtures-2001120
家具系统OST_FurnitureSystems-2001100
电气装置OST_ElectricalFixtures-2001060
电气设备OST_ElectricalEquipment-2001040
橱柜OST_Casework-2001000
UnknownOST_ArcWallRectOpening-2000999
UnknownOST_DormerOpeningIncomplete-2000998
UnknownOST_SWallRectOpening-2000997
竖井洞口OST_ShaftOpening-2000996
UnknownOST_StructuralFramingOpening-2000995
UnknownOST_ColumnOpening-2000994
UnknownOST_RiseDropSymbols-2000989
水力分离符号OST_PipeHydronicSeparationSymbols-2000988
机械设备集边界线OST_MechanicalEquipmentSetBoundaryLines-2000987
机械设备集标记OST_MechanicalEquipmentSetTags-2000986
机械设备集OST_MechanicalEquipmentSet-2000985
连接线符号OST_AnalyticalPipeConnectionLineSymbol-2000984
分析管道连接OST_AnalyticalPipeConnections-2000983
UnknownOST_Coordination_Model-2000982
UnknownOST_MultistoryStairs-2000980
UnknownOST_HiddenStructuralConnectionLines_Deprecated-2000979
UnknownOST_StructuralConnectionHandler_Deprecated-2000978
UnknownOST_CoordinateSystem-2000977
局部坐标系OST_FndSlabLocalCoordSys-2000976
局部坐标系OST_FloorLocalCoordSys-2000975
局部坐标系OST_WallLocalCoordSys-2000974
局部坐标系OST_BraceLocalCoordSys-2000973
局部坐标系OST_ColumnLocalCoordSys-2000972
局部坐标系OST_BeamLocalCoordSys-2000971
多钢筋注释OST_MultiReferenceAnnotations-2000970
UnknownOST_DSR_LeaderTickMarkStyleId-2000969
UnknownOST_DSR_InteriorTickMarkStyleId-2000968
UnknownOST_DSR_ArrowHeadStyleId-2000967
UnknownOST_DSR_CenterlineTickMarkStyleId-2000966
UnknownOST_DSR_CenterlinePatternCatId-2000965
UnknownOST_DSR_DimStyleHeavyEndCategoryId-2000964
UnknownOST_DSR_DimStyleHeavyEndCatId-2000963
UnknownOST_DSR_DimStyleTickCategoryId-2000962
UnknownOST_DSR_LineAndTextAttrFontId-2000961
UnknownOST_DSR_LineAndTextAttrCategoryId-2000960
分析节点标记OST_NodeAnalyticalTags-2000956
分析链接标记OST_LinkAnalyticalTags-2000955
UnknownOST_RailingRailPathExtensionLines-2000954
UnknownOST_RailingRailPathLines-2000953
支撑OST_StairsSupports-2000952
<高于> 扶手OST_RailingHandRailAboveCut-2000951
<高于> 顶部扶栏OST_RailingTopRailAboveCut-2000950
终端OST_RailingTermination-2000949
支座OST_RailingSupport-2000948
扶手OST_RailingHandRail-2000947
顶部扶栏OST_RailingTopRail-2000946
UnknownOST_StairsSketchPathLines-2000945
楼梯踏板/踢面数OST_StairsTriserNumbers-2000944
UnknownOST_StairsTriserTags-2000943
楼梯支撑标记OST_StairsSupportTags-2000942
楼梯平台标记OST_StairsLandingTags-2000941
楼梯梯段标记OST_StairsRunTags-2000940
<高于> 向上箭头OST_StairsPathsAboveCut-2000939
楼梯路径OST_StairsPaths-2000938
<高于> 踢面线OST_StairsRiserLinesAboveCut-2000937
踢面线OST_StairsRiserLines-2000936
<高于> 轮廓OST_StairsOutlinesAboveCut-2000935
轮廓OST_StairsOutlines-2000934
<高于> 楼梯前缘线OST_StairsNosingLinesAboveCut-2000933
楼梯前缘线OST_StairsNosingLines-2000932
<高于> 剪切标记OST_StairsCutMarksAboveCut-2000931
剪切标记OST_StairsCutMarks-2000930
UnknownOST_ComponentRepeaterSlot-2000928
UnknownOST_ComponentRepeater-2000927
UnknownOST_DividedPath-2000926
UnknownOST_IOSRoomCalculationPoint-2000925
UnknownOST_PropertySet-2000924
UnknownOST_AppearanceAsset-2000923
UnknownOST_StairStringer2012_Deprecated-2000922
踢面/踏板OST_StairsTrisers-2000921
平台OST_StairsLandings-2000920
梯段OST_StairsRuns-2000919
UnknownOST_Stair2012_Deprecated-2000918
UnknownOST_RailingSystemTags-2000917
UnknownOST_RailingSystemTransition-2000916
UnknownOST_RailingSystemTermination-2000915
UnknownOST_RailingSystemRail-2000914
UnknownOST_RailingSystemTopRail-2000913
UnknownOST_RailingSystemHandRailBracket-2000912
UnknownOST_RailingSystemHandRail-2000911
UnknownOST_RailingSystemHardware-2000910
UnknownOST_RailingSystemPanel-2000909
UnknownOST_RailingSystemBaluster-2000908
UnknownOST_RailingSystemPost-2000907
UnknownOST_RailingSystemSegment-2000906
UnknownOST_RailingSystem-2000905
UnknownOST_AdaptivePoints_HiddenLines-2000904
线OST_AdaptivePoints_Lines-2000903
平面OST_AdaptivePoints_Planes-2000902
OST_AdaptivePoints_Points-2000901
自适应点OST_AdaptivePoints-2000900
UnknownOST_CeilingOpening-2000899
UnknownOST_FloorOpening-2000898
UnknownOST_RoofOpening-2000897
UnknownOST_WallRefPlanes-2000896
UnknownOST_StructLocationLineControl-2000880
UnknownOST_DimLockControlLeader-2000832
<空间分隔>OST_MEPSpaceSeparationLines-2000831
UnknownOST_AreaPolylines-2000830
UnknownOST_RoomPolylines-2000829
UnknownOST_InstanceDrivenLineStyle-2000828
UnknownOST_RemovedGridSeg-2000827
UnknownOST_IOSOpening-2000810
UnknownOST_IOSTilePatternGrid-2000800
UnknownOST_ControlLocal-2000774
UnknownOST_ControlAxisZ-2000773
UnknownOST_ControlAxisY-2000772
UnknownOST_ControlAxisX-2000721
UnknownOST_XRayConstrainedProfileEdge-2000720
UnknownOST_XRayImplicitPathCurve-2000719
UnknownOST_XRayPathPoint-2000718
UnknownOST_XRayPathCurve-2000717
UnknownOST_XRaySideEdge-2000716
UnknownOST_XRayProfileEdge-2000715
UnknownOST_ReferencePoints_HiddenLines-2000714
线OST_ReferencePoints_Lines-2000713
平面OST_ReferencePoints_Planes-2000712
OST_ReferencePoints_Points-2000711
参照点OST_ReferencePoints-2000710
材质OST_Materials-2000700
截面填充图案OST_CeilingsCutPattern-2000617
公共边OST_CeilingsDefault-2000616
面层 2 [5]OST_CeilingsFinish2-2000615
面层 1 [4]OST_CeilingsFinish1-2000614
衬底 [2]OST_CeilingsSubstrate-2000613
保温层/空气层 [3]OST_CeilingsInsulation-2000612
结构 [1]OST_CeilingsStructure-2000611
涂膜层OST_CeilingsMembrane-2000610
内部边缘OST_FloorsInteriorEdges-2000609
截面填充图案OST_FloorsCutPattern-2000608
隐藏线OST_HiddenFloorLines-2000607
公共边OST_FloorsDefault-2000606
面层 2 [5]OST_FloorsFinish2-2000605
面层 1 [4]OST_FloorsFinish1-2000604
衬底 [2]OST_FloorsSubstrate-2000603
保温层/空气层 [3]OST_FloorsInsulation-2000602
结构 [1]OST_FloorsStructure-2000601
涂膜层OST_FloorsMembrane-2000600
内部边缘OST_RoofsInteriorEdges-2000598
截面填充图案OST_RoofsCutPattern-2000597
公共边OST_RoofsDefault-2000596
面层 2 [5]OST_RoofsFinish2-2000595
面层 1 [4]OST_RoofsFinish1-2000594
衬底 [2]OST_RoofsSubstrate-2000593
保温层/空气层 [3]OST_RoofsInsulation-2000592
结构 [1]OST_RoofsStructure-2000591
涂膜层OST_RoofsMembrane-2000590
截面填充图案OST_WallsCutPattern-2000588
隐藏线OST_HiddenWallLines-2000587
公共边OST_WallsDefault-2000586
面层 2 [5]OST_WallsFinish2-2000585
面层 1 [4]OST_WallsFinish1-2000584
衬底 [2]OST_WallsSubstrate-2000583
保温层/空气层 [3]OST_WallsInsulation-2000582
结构 [1]OST_WallsStructure-2000581
涂膜层OST_WallsMembrane-2000580
UnknownOST_PreviewLegendComponents-2000576
UnknownOST_LegendComponents-2000575
明细表OST_Schedules-2000573
明细表图形OST_ScheduleGraphics-2000570
光栅图像OST_RasterImages-2000560
UnknownOST_ColorFillSchema-2000552
颜色填充OST_RoomColorFill-2000551
颜色填充图例OST_ColorFillLegends-2000550
注释裁剪边界OST_AnnotationCropSpecial-2000549
裁剪边界OST_CropBoundarySpecial-2000548
注释裁剪边界OST_AnnotationCrop-2000547
UnknownOST_FloorsAnalyticalGeometry-2000546
UnknownOST_WallsAnalyticalGeometry-2000545
详图索引引线OST_CalloutLeaderLine-2000544
表面填充图案OST_CeilingsSurfacePattern-2000543
表面填充图案OST_RoofsSurfacePattern-2000542
表面填充图案OST_FloorsSurfacePattern-2000541
表面填充图案OST_WallsSurfacePattern-2000540
详图索引边界OST_CalloutBoundary-2000539
详图索引标头OST_CalloutHeads-2000538
详图索引OST_Callouts-2000537
裁剪边界OST_CropBoundary-2000536
立面OST_Elev-2000535
UnknownOST_AxisZ-2000533
UnknownOST_AxisY-2000532
UnknownOST_AxisX-2000531
参照平面OST_CLines-2000530
UnknownOST_Lights-2000520
视图标题OST_ViewportLabel-2000515
视口OST_Viewports-2000510
相机OST_Camera_Lines-2000501
UnknownOST_Cameras-2000500
空间标记OST_MEPSpaceTags-2000485
房间标记OST_RoomTags-2000480
门标记OST_DoorTags-2000460
窗标记OST_WindowTags-2000450
宽线OST_SectionHeadWideLines-2000404
中粗线OST_SectionHeadMediumLines-2000403
细线OST_SectionHeadThinLines-2000401
剖面标头OST_SectionHeads-2000400
等高线标签OST_ContourLabels-2000350
UnknownOST_CurtaSystemFaceManager-2000341
幕墙系统OST_CurtaSystem-2000340
UnknownOST_AreaReport_Arc_Minus-2000328
UnknownOST_AreaReport_Arc_Plus-2000327
UnknownOST_AreaReport_Boundary-2000326
UnknownOST_AreaReport_Triangle-2000325
幕墙系统网格OST_CurtainGridsCurtaSystem-2000323
UnknownOST_CurtainGridsSystem-2000322
幕墙网格OST_CurtainGridsWall-2000321
幕墙屋顶网格OST_CurtainGridsRoof-2000320
UnknownOST_HostFinHF-2000315
UnknownOST_HostFinWall-2000314
UnknownOST_HostFinCeiling-2000313
UnknownOST_HostFinRoof-2000312
UnknownOST_HostFinFloor-2000311
UnknownOST_HostFin-2000310
分析显示样式OST_AnalysisDisplayStyle-2000304
分析结果OST_AnalysisResults-2000303
渲染区域OST_RenderRegions-2000302
剖面框OST_SectionBox-2000301
文字注释OST_TextNotes-2000300
UnknownOST_Divisions-2000291
UnknownOST_Catalogs-2000290
UnknownOST_DirectionEdgeLines-2000289
<中心线>OST_CenterLines-2000288
<超出>OST_LinesBeyond-2000287
<隐藏>OST_HiddenLines-2000286
<已拆除>OST_DemolishedLines-2000285
<架空线>OST_OverheadLines-2000284
宽线OST_TitleBlockWideLines-2000283
中粗线OST_TitleBlockMediumLines-2000282
细线OST_TitleBlockThinLines-2000281
图框OST_TitleBlocks-2000280
视图OST_Views-2000279
UnknownOST_Viewers-2000278
隐藏线OST_PartHiddenLines-2000271
零件标记OST_PartTags-2000270
组成部分OST_Parts-2000269
部件标记OST_AssemblyTags-2000268
部件OST_Assemblies-2000267
屋顶标记OST_RoofTags-2000266
高程点坡度OST_SpotSlopes-2000265
高程点坐标OST_SpotCoordinates-2000264
高程点OST_SpotElevations-2000263
UnknownOST_Constraints-2000262
自动绘制尺寸标注OST_WeakDims-2000261
尺寸标注OST_Dimensions-2000260
标高OST_Levels-2000240
位移路径OST_DisplacementPath-2000223
UnknownOST_DisplacementElements-2000222
多段轴网OST_GridChains-2000221
轴网OST_Grids-2000220
断开剖面线OST_BrokenSectionLine-2000202
剖面线OST_SectionLine-2000201
剖面OST_Sections-2000200
视图参照OST_ReferenceViewer-2000198
视图参照OST_ReferenceViewerSymbol-2000197
在族中导入OST_ImportObjectStyles-2000196
UnknownOST_ModelText-2000195
遮罩区域OST_MaskingRegion-2000194
拼接线OST_Matchline-2000193
UnknownOST_FaceSplitter-2000192
平面区域OST_PlanRegion-2000191
填充区域OST_FilledRegion-2000190
UnknownOST_MassingProjectionOutlines-2000187
UnknownOST_MassingCutOutlines-2000186
UnknownOST_Massing-2000185
UnknownOST_Reveals-2000182
墙饰条OST_Cornices-2000181
坡道OST_Ramps-2000180
UnknownOST_RailingBalusterRailCut-2000177
UnknownOST_RailingBalusterRail-2000176
UnknownOST_Railings-2000175
幕墙网格OST_CurtainGrids-2000173
UnknownOST_CurtainWallMullionsCut-2000172
幕墙竖梃OST_CurtainWallMullions-2000171
幕墙嵌板OST_CurtainWallPanels-2000170
UnknownOST_AreaReference-2000169
UnknownOST_AreaInteriorFill-2000168
UnknownOST_RoomReference-2000167
UnknownOST_RoomInteriorFill-2000166
颜色填充OST_AreaColorFill-2000165
参照OST_AreaReferenceVisibility-2000164
内部填充OST_AreaInteriorFillVisibility-2000163
参照OST_RoomReferenceVisibility-2000162
内部填充OST_RoomInteriorFillVisibility-2000161
房间OST_Rooms-2000160
常规模型OST_GenericModel-2000151
常规注释OST_GenericAnnotation-2000150
UnknownOST_Fixtures-2000140
栏杆扶手标记OST_StairsRailingTags-2000133
<高于> 栏杆扶手截面线OST_StairsRailingAboveCut-2000132
向下箭头OST_StairsDownArrows-2000131
向上箭头OST_StairsUpArrows-2000130
文字(向下)OST_StairsDownText-2000129
扶栏OST_StairsRailingRail-2000128
栏杆OST_StairsRailingBaluster-2000127
栏杆扶手OST_StairsRailing-2000126
文字(向上)OST_StairsUpText-2000125
<高于> 支撑OST_StairsSupportsAboveCut-2000124
支撑OST_StairsStringerCarriage-2000123
UnknownOST_StairsAboveCut_ToBeDeprecated-2000122
UnknownOST_StairsIncomplete_Deprecated-2000121
楼梯OST_Stairs-2000120
UnknownOST_IOSNavWheelPivotBall-2000117
UnknownOST_IOSRoomComputationHeight-2000116
UnknownOST_IOSRoomUpperLowerLines-2000115
UnknownOST_IOSDragBoxInverted-2000114
UnknownOST_IOSDragBox-2000113
UnknownOST_Phases-2000112
UnknownOST_IOS_GeoSite-2000111
UnknownOST_IOS_GeoLocations-2000110
UnknownOST_IOSFabricReinSpanSymbolCtrl-2000109
导向轴网OST_GuideGrid-2000107
UnknownOST_EPS_Future-2000106
UnknownOST_EPS_Temporary-2000105
UnknownOST_EPS_New-2000104
UnknownOST_EPS_Demolished-2000103
UnknownOST_EPS_Existing-2000102
UnknownOST_IOSMeasureLineScreenSize-2000101
OST_Columns-2000100
UnknownOST_IOSRebarSystemSpanSymbolCtrl-2000099
UnknownOST_IOSRoomTagToRoomLines-2000098
UnknownOST_IOSAttachedDetailGroups-2000097
UnknownOST_IOSDetailGroups-2000096
模型组OST_IOSModelGroups-2000095
UnknownOST_IOSSuspendedSketch-2000094
UnknownOST_IOSWallCoreBoundary-2000093
UnknownOST_IOSMeasureLine-2000092
UnknownOST_IOSArrays-2000091
UnknownOST_Curtain_Systems-2000090
UnknownOST_IOSBBoxScreenSize-2000089
UnknownOST_IOSSlabShapeEditorPointInterior-2000088
UnknownOST_IOSSlabShapeEditorPointBoundary-2000087
UnknownOST_IOSSlabShapeEditorBoundary-2000086
UnknownOST_IOSSlabShapeEditorAutoCrease-2000085
UnknownOST_IOSSlabShapeEditorExplitCrease-2000084
参照线OST_ReferenceLines-2000083
UnknownOST_IOSNotSilhouette-2000082
UnknownOST_FillPatterns-2000081
家具OST_Furniture-2000080
<面积边界>OST_AreaSchemeLines-2000079
线OST_GenericLines-2000078
隔热层线OST_InsulationLines-2000077
UnknownOST_CloudLines-2000076
UnknownOST_IOSRoomPerimeterLines-2000075
UnknownOST_IOSCuttingGeometry-2000074
UnknownOST_IOSCrashGraphics-2000073
UnknownOST_IOSGroups-2000072
UnknownOST_IOSGhost-2000071
UnknownOST_StairsSketchLandingCenterLines-2000070
UnknownOST_StairsSketchRunLines-2000069
UnknownOST_StairsSketchRiserLines-2000068
UnknownOST_StairsSketchBoundaryLines-2000067
<房间分隔>OST_RoomSeparationLines-2000066
旋转轴OST_AxisOfRotation-2000065
UnknownOST_InvisibleLines-2000064
UnknownOST_IOSThinPixel_DashDot-2000063
UnknownOST_IOSThinPixel_Dash-2000062
UnknownOST_IOSThinPixel_Dot-2000061
UnknownOST_Extrusions-2000060
UnknownOST_IOS-2000059
UnknownOST_CutOutlines-2000058
UnknownOST_IOSThinPixel-2000057
UnknownOST_IOSFlipControl-2000056
UnknownOST_IOSSketchGrid-2000055
UnknownOST_IOSSuspendedSketch_obsolete-2000054
UnknownOST_IOSFreeSnapLine-2000053
UnknownOST_IOSDatumPlane-2000052
线OST_Lines-2000051
UnknownOST_IOSConstructionLine-2000050
UnknownOST_IOSAlignmentGraphics-2000049
UnknownOST_IOSAligningLine-2000048
UnknownOST_IOSBackedUpElements-2000047
UnknownOST_IOSRegeneratedElements-2000046
<草图>OST_SketchLines-2000045
宽线OST_CurvesWideLines-2000044
中粗线OST_CurvesMediumLines-2000043
细线OST_CurvesThinLines-2000042
UnknownOST_Curves-2000041
UnknownOST_CeilingsProjection-2000040
UnknownOST_CeilingsCut-2000039
天花板OST_Ceilings-2000038
UnknownOST_RoofsProjection-2000037
UnknownOST_RoofsCut-2000036
屋顶OST_Roofs-2000035
UnknownOST_FloorsProjection-2000034
UnknownOST_FloorsCut-2000033
楼板OST_Floors-2000032
玻璃OST_DoorsGlassProjection-2000031
UnknownOST_DoorsGlassCut-2000030
框架/竖梃OST_DoorsFrameMullionProjection-2000029
UnknownOST_DoorsFrameMullionCut-2000028
洞口OST_DoorsOpeningProjection-2000027
UnknownOST_DoorsOpeningCut-2000026
嵌板OST_DoorsPanelProjection-2000025
UnknownOST_DoorsPanelCut-2000024
OST_Doors-2000023
洞口OST_WindowsOpeningProjection-2000022
UnknownOST_WindowsOpeningCut-2000021
窗台/盖板OST_WindowsSillHeadProjection-2000020
UnknownOST_WindowsSillHeadCut-2000019
框架/竖梃OST_WindowsFrameMullionProjection-2000018
UnknownOST_WindowsFrameMullionCut-2000017
玻璃OST_WindowsGlassProjection-2000016
UnknownOST_WindowsGlassCut-2000015
OST_Windows-2000014
UnknownOST_WallsProjectionOutlines-2000013
UnknownOST_WallsCutOutlines-2000012
OST_Walls-2000011
UnknownOST_IOSRegenerationFailure-2000010
UnknownOST_ScheduleViewParamGroup-2000008
UnknownOST_MatchSiteComponent-2000007
UnknownOST_MatchProfile-2000006
UnknownOST_MatchDetail-2000005
UnknownOST_MatchAnnotation-2000004
UnknownOST_MatchModel-2000003
UnknownOST_MatchAll-2000002
UnknownINVALID-1
]]>
+ + + <p>Revit二次开发中经常用到<strong>BuildInCategory</strong>过滤元素,以下是通过遍历该枚举获取的数据,其中部分类别的名称未能获取到,显示为<strong>Unknown</strong>,请悉知。</p> + + + + + + + + + + +
+ + + 深度操作系统 20——崭新视界,创无止境 + + https://awaw.cc/post/deepin-20/ + 2020-09-15T16:00:00.000Z + 2022-06-10T02:49:35.498Z + + 深度操作系统是一个致力于为全球用户提供美观易用、安全可靠的Linux发行版。

深度操作系统 20正式版(1002)采取统一的设计风格,从桌面环境和应用进行重新设计,带来焕然一新的视觉感受。底层仓库升级到Debian 10.5,系统安装采用双内核机制(Kernel 5.4、Kernel 5.7),全面提升系统稳定性和兼容性。全新设计的启动器菜单、指纹识别、系统安全增强等,系统部分预装应用升级到最新版本,只为给你更好体验。

统一风格的桌面环境

别出心裁的图标设计,焕然一新的图形界面,自然、平滑的动画过渡效果,更有独树一帜的圆角窗口设计,精美绝伦的多任务视图,处处精心,只为给你细腻自然的品质体验。

支持黑白主题、透明度调节、色温调节自定义、电源电池设置等贴心功能。

个性贴心的通知管理

增强通知中心功能,支持设置通知时提示声音、锁屏时显示消息、仅在通知中心显示、显示消息预览,必要应用强提醒、特定应用弱提醒或不提醒,个性化你的消息通知,在不错过任何重要提醒的同时,避免不必要的打扰。

系统支持双内核安装

系统安装界面提供双内核选项,Kernel 5.4(LTS)和Kernel 5.7(Stable)以及Safe Graphics模式,保证系统安装更多选择,提升系统整体的稳定性、兼容性,最新的内核支持更多的硬件设备。

更易用的新版安装器

化繁为简的设计和交互,保证更一致的操作习惯。新版的安装器界面,只需按照操作向导提示安装即可,在硬盘分区操作中,提供手动和全盘安装两种模式,并且支持全盘加密功能。

注:对于N卡用户,安装器自动检测并提供安装闭源驱动选项。

管理方便的应用商店

应用商店的不同类别应用,覆盖了生活、工作的主要使用场景,本次新增一键更新、应用筛选等功能,带来更便捷的应用管理体验,同时也兼容部分Wine应用,并达到原生应用的体验。

好用安全的指纹识别

全新的指纹功能框架,提供了更细腻的引导交互和更准确的场景提示。可使用指纹进行解锁登录、验证身份和管理员权限。现已支持多款国产指纹硬件。

下载

https://www.deepin.org/zh/download/

]]>
+ + + <p>深度操作系统是一个致力于为全球用户提供美观易用、安全可靠的Linux发行版。</p> + + + + + + + + + + +
+ + + Free Control 用电脑控制手机 - 开源 + + https://awaw.cc/post/free-control/ + 2020-09-14T16:00:00.000Z + 2024-03-21T07:40:28.060Z + + FreeControl

介绍

[ English | 中文 ]

基于开源项目scrcpy,提供简洁的交互界面。

  • 编码语言 C#
  • 开发工具 Visual Studio 2022
  • 运行环境 .NET Framework 4.7.2

界面

启动界面

设置界面

功能演示

下载

GitHub Release

https://github.com/pdone/FreeControl/releases/latest/download/FreeControl.exe

My Proxy

https://cdn.awaw.cc/gh/pdone/FreeControl/releases/latest/download/FreeControl.exe

代码仓库

更新记录

常见问题

输入法问题

v1.7.0 及以后的版本中,默认启用scrcpy的 UHID keyboard 特性,以优化中文输入体验。

如果在此过程中遇到了什么问题,可尝试打开配置文件 %AppData%\FreeControl\config.json,将 CustomArgs 的值由 --keyboard=uhid 改为 --keyboard=sdk

更多信息可参考 scrcpy-doc-keyboard

已过时

个人测试发现,目前支持跨屏进行拼音输入的 手机输入法APP 如下:

  • 搜狗输入法
  • QQ输入法
  • 谷歌拼音输入法
  • Gboard
  • 微信输入法

此功能需要输入法APP适配,有更好用的输入法欢迎留言推荐。

自动切换输入法功能默认禁用。如需启用,先关闭程序,然后打开配置文件 %AppData%\FreeControl\config.json,将 EnableSwitchIME 字段值改为 true,保存后启动程序即可。

设备连接问题

USB 连接

通过 USB 连接来正常使用 adb 需要保证几点:

  1. 硬件状态正常。

    包括 Android 设备处于正常开机状态,USB 连接线和各种接口完好。

  2. Android 设备的开发者选项和 USB 调试模式已开启。

    可以到「设置」-「开发者选项」-「Android 调试」查看。

    如果在设置里找不到开发者选项,那需要通过一个彩蛋来让它显示出来:在「设置」-「关于手机」连续点击「版本号」7 次。

  3. 设备驱动状态正常。

    这一点貌似在 Linux 和 Mac OS X 下不用操心,在 Windows 下有可能遇到需要安装驱动的情况,确认这一点可以右键「计算机」-「属性」,到「设备管理器」里查看相关设备上是否有黄色感叹号或问号,如果没有就说明驱动状态已经好了。否则可以下载一个手机助手类程序来安装驱动先。

  4. 通过 USB 线连接好电脑和设备后确认状态。

    1
    adb devices

    如果能看到

    1
    xxxxxx device

    说明连接成功。

无线连接(Android11 及以上)

Android 11 及更高版本支持使用 Android 调试桥 (adb) 从工作站以无线方式部署和调试应用。例如,您可以将可调试应用部署到多台远程设备,而无需通过 USB 实际连接设备。这样就可以避免常见的 USB 连接问题,例如驱动程序安装方面的问题。

官方文档

操作步骤:

  1. 更新到最新版本的 SDK 平台工具(至少30.0.0)。

  2. 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。

  3. 在开发者选项中启用无线调试

  4. 在询问要允许在此网络上进行无线调试吗?的对话框中,点击允许。

  5. 选择使用配对码配对设备,使用弹窗中的 IP 地址和端口号。

    1
    adb pair ipaddr:port
  6. 提示 Enter pairing code: 时输入弹窗中的配对码,成功后会显示 Successfully paired to ...

  7. 使用无线调试下的 IP 地址和端口

    1
    adb connect ipaddr:port
  8. 确认连接状态。

    1
    adb devices

    如果能看到

    1
    ipaddr:port device

    说明连接成功。

无线连接(需要借助 USB 线)

除了可以通过 USB 连接设备与电脑来使用 adb,也可以通过无线连接——虽然连接过程中也有需要使用 USB 的步骤,但是连接成功之后你的设备就可以在一定范围内摆脱 USB 连接线的限制啦!

操作步骤:

  1. 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。

  2. 将设备与电脑通过 USB 线连接。

    应确保连接成功(可运行 adb devices 看是否能列出该设备)。

  3. 让设备在 5555 端口监听 TCP/IP 连接:

    1
    adb tcpip 5555
  4. 断开 USB 连接。

  5. 找到设备的 IP 地址。

    一般能在「设置」-「关于手机」-「状态信息」-「IP地址」找到。

  6. 通过 IP 地址连接设备。

    1
    adb connect <device-ip-address>

    这里的 <device-ip-address> 就是上一步中找到的设备 IP 地址。

  7. 确认连接状态。

    1
    adb devices

    如果能看到

    1
    <device-ip-address>:5555 device

    说明连接成功。

如果连接不了,请确认 Android 设备与电脑是连接到了同一个 WiFi,然后再次执行 adb connect <device-ip-address> 那一步;

如果还是不行的话,通过 adb kill-server 重新启动 adb 然后从头再来一次试试。

无线连接(无需借助 USB 线)

需要 root 权限,此处不做详细说明,有需要的朋友可参考此处

保持唤醒功能

仅在手机充电时有效。

音频转发功能

使用 Android 11 或更高版本的设备支持音频转发,并且默认情况下启用:

  • 对于 Android 12 或更高版本,它开箱即用。
  • 对于 Android 11 ,您需要确保在启动scrcpy时设备屏幕已解锁。假的弹出窗口将短暂出现,使系统认为shell应用程序处于前台。没有这个,音频捕获将失败。
  • 对于 Android 10 或更早版本,无法捕获音频并自动禁用。

捐赠

如果您觉得这个项目对您有帮助,欢迎请作者喝杯咖啡。☕

爱发电❤ https://afdian.net/a/pdone

Stargazers Over Time

Stargazers over time

]]>
+ + + 基于开源项目scrcpy,提供简洁的交互界面。 + + + + + + + + + + +
+ + + WinForm加载中窗体 + + https://awaw.cc/post/net-loading/ + 2020-04-14T16:00:00.000Z + 2023-07-14T06:13:37.810Z + + 最近项目中用有用到,就简单整了个,只有几行代码。

预览图

调用示例

public partial class Main : Form{    public Main()    {        InitializeComponent();    }    private void button1_Click(object sender, EventArgs e)    {        //构造函数参数说明:        //work: 需要在新线程中执行的任务        //msg: 执行完成提示信息(为空时不提示)        //openDir: 执行完成后自动打开指定目录(为空时不打开)                        Loading loading = new Loading(DoSomething, 执行完成);        //不show的话 可以当作后台线程执行任务来用        loading.ShowDialog();    }    public void DoSomething()    {        Thread.Sleep(3000);    }}

源代下载

百度云

https://pan.baidu.com/s/1NzrZeNKqjlZxK__iXaGvwQ

提取码:npkt

]]>
+ + + <p>最近项目中用有用到,就简单整了个,只有几行代码。</p> + + + + + + + + + + +
+ + + DapperHelper + + https://awaw.cc/post/dapper-helper/ + 2020-03-16T16:00:00.000Z + 2023-07-04T03:55:28.185Z + + Dapper is a simple object mapper for .NET and owns the title of King of Micro ORM in terms of speed and is virtually as fast as using a raw ADO.NET data reader. An ORM is an Object Relational Mapper, which is responsible for mapping between database and programming language.

Dapper extends the IDbConnection by providing useful extension methods to query your database.

How Dapper Works?

It is a three-step process.

  • Create an IDbConnection object.
  • Write a query to perform CRUD operations.
  • Pass query as a parameter in the Execute method.

Installation

Dapper is installed through NuGet: https://www.nuget.org/packages/Dapper

1
PM> Install-Package Dapper

Requirement

Dapper works with any database provider since there is no DB specific implementation.

Methods

Dapper will extend your IDbConnection interface with multiple methods:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string sqlOrderDetails = "SELECT TOP 5 * FROM OrderDetails;";
string sqlOrderDetail = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;";
string sqlCustomerInsert = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";

using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{
var orderDetails = connection.Query<OrderDetail>(sqlOrderDetails).ToList();
var orderDetail = connection.QueryFirstOrDefault<OrderDetail>(sqlOrderDetail, new {OrderDetailID = 1});
var affectedRows = connection.Execute(sqlCustomerInsert, new {CustomerName = "Mark"});

Console.WriteLine(orderDetails.Count);
Console.WriteLine(affectedRows);

FiddleHelper.WriteTable(orderDetails);
FiddleHelper.WriteTable(new List<OrderDetail>() { orderDetail });
}

Try it: .NET Core | .NET Framework

Parameter

Execute and queries method can use parameters from multiple different ways:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Anonymous
var affectedRows = connection.Execute(sql,
new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
commandType: CommandType.StoredProcedure);

// Dynamic
DynamicParameters parameter = new DynamicParameters();

parameter.Add("@Kind", InvoiceKind.WebInvoice, DbType.Int32, ParameterDirection.Input);
parameter.Add("@Code", "Many_Insert_0", DbType.String, ParameterDirection.Input);
parameter.Add("@RowCount", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);

connection.Execute(sql,
parameter,
commandType: CommandType.StoredProcedure);

int rowCount = parameter.Get<int>("@RowCount");

// List
connection.Query<Invoice>(sql, new {Kind = new[] {InvoiceKind.StoreInvoice, InvoiceKind.WebInvoice}}).ToList();
// String
connection.Query<Invoice>(sql, new {Code = new DbString {Value = "Invoice_1", IsFixedLength = false, Length = 9, IsAnsi = true}}).ToList();

Result

The result returned by queries method can be mapped to multiple types:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
string sqlOrderDetails = "SELECT TOP 10 * FROM OrderDetails;";

using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{
var anonymousList = connection.Query(sqlOrderDetails).ToList();
var orderDetails = connection.Query<OrderDetail>(sqlOrderDetails).ToList();

Console.WriteLine(anonymousList.Count);
Console.WriteLine(orderDetails.Count);

FiddleHelper.WriteTable(orderDetails);

FiddleHelper.WriteTable(connection.Query(sqlOrderDetails).FirstOrDefault());
}

Try it: .NET Core | .NET Framework

Utilities

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Async
connection.QueryAsync<Invoice>(sql)

// Buffered
connection.Query<Invoice>(sql, buffered: false)

// Transaction
using (var transaction = connection.BeginTransaction())
{
var affectedRows = connection.Execute(sql,
new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
commandType: CommandType.StoredProcedure,
transaction: transaction);

transaction.Commit();
}

// Stored Procedure
var affectedRows = connection.Execute(sql,
new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
commandType: CommandType.StoredProcedure);

DapperHelper.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Data.SQLite;
using System.Linq;
using System.Threading.Tasks;
using Dapper;
using MySql.Data.MySqlClient;

namespace ORMSuit.DAO {
public class DapperHelper<T> {
enum DBType {
MSSQL,
MySQL,
SQLite
}
/// <summary>
/// 数据库连接字符串
/// </summary>
private static string connectionString = "";

/// <summary>
/// MSSQL=0, MySQL=1, SQLite=2
/// </summary>
/// <param name="dbType"></param>
public static int dbType = 0;

/// <summary>
/// 获取数据库连接
/// </summary>
/// <returns></returns>
public static IDbConnection GetConnection () {
switch ((DBType) dbType) {
case DBType.MSSQL:
return new SqlConnection (connectionString);
case DBType.MySQL:
connectionString = ConfigurationManager.ConnectionStrings["mysqlconn"].ConnectionString;
return new MySqlConnection (connectionString);
case DBType.SQLite:
connectionString = ConfigurationManager.ConnectionStrings["sqliteconn"].ConnectionString;
return new SQLiteConnection (connectionString);
default:
return new SqlConnection (connectionString);
}
}

/// <summary>
/// 查询列表
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static List<T> Query (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.Query<T> (sql, param).ToList ();
}
}

/// <summary>
/// 查询第一个数据
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static T QueryFirst (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
List<T> tempList = con.Query<T> (sql, param).ToList ();
if (tempList != null && tempList.Count > 0) {
return tempList[0];
} else {
return default;
}
//return con.QueryFirst<T>(sql, param);
}
}

/// <summary>
/// 查询第一个数据没有返回默认值
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static T QueryFirstOrDefault (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.QueryFirstOrDefault<T> (sql, param);
}
}

/// <summary>
/// 查询单条数据
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static T QuerySingle (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.QuerySingle<T> (sql, param);
}
}

/// <summary>
/// 数据是否存在
/// </summary>
/// <param name="sql">select count(*) from table where id=@id</param>
/// <param name="param">new { id = 1 }</param>
/// <returns></returns>
public static bool Exists (string sql, object param = null) {
object obj = ExecuteScalar (sql, param);
int count = 0;
if (obj == null) {
count = 0;
} else {
count = Convert.ToInt32 (obj);
}
if (count > 0) {
return true;
} else {
return false;
}
}

/// <summary>
/// 数据行数
/// </summary>
/// <param name="sql">select count(*) from table where id=@id</param>
/// <param name="param">new { id = 1 }</param>
/// <returns></returns>
public static int RecordCount (string sql, object param = null) {
object obj = ExecuteScalar (sql, param);
int count = 0;
if (obj == null) {
count = 0;
} else {
count = Convert.ToInt32 (obj);
}
return count;
}

/// <summary>
/// 查询单条数据没有返回默认值
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static T QuerySingleOrDefault (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.QuerySingleOrDefault<T> (sql, param);
}
}

/// <summary>
/// 增删改
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static int Execute (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.Execute (sql, param);
}
}

/// <summary>
/// Reader获取数据
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static IDataReader ExecuteReader (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.ExecuteReader (sql, param);
}
}

#region
/// <summary>
/// 获取DataTabel
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static DataTable ExecuteDataTabel (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return DataReaderToDataTable (con.ExecuteReader (sql, param));
}
}

/// <summary>
/// 获取DataSet
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static DataSet ExecuteDataSet (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return DataReaderToDataSet (con.ExecuteReader (sql, param));
}
}

/// <summary>
/// DataReader转DataTable
/// </summary>
/// <param name="dataReader"></param>
/// <returns></returns>
private static DataTable DataReaderToDataTable (IDataReader dataReader) {
DataTable datatable = new DataTable ();
for (int i = 0; i < dataReader.FieldCount; i++) {
DataColumn myDataColumn = new DataColumn ();
myDataColumn.DataType = dataReader.GetFieldType (i);
myDataColumn.ColumnName = dataReader.GetName (i);
datatable.Columns.Add (myDataColumn);
}
while (dataReader.Read ()) {
DataRow myDataRow = datatable.NewRow ();
for (int i = 0; i < dataReader.FieldCount; i++) {
myDataRow[i] = dataReader[i].ToString ();
}
datatable.Rows.Add (myDataRow);
myDataRow = null;
}
dataReader.Close ();
return datatable;
}

/// <summary>
/// DataReader转DataSet
/// </summary>
/// <param name="reader"></param>
/// <returns></returns>
public static DataSet DataReaderToDataSet (IDataReader dataReader) {
DataSet dataSet = new DataSet ();
do {
DataTable schemaTable = dataReader.GetSchemaTable ();
DataTable dataTable = new DataTable ();
if (schemaTable != null) {
for (int i = 0; i < schemaTable.Rows.Count; i++) {
DataRow dataRow = schemaTable.Rows[i];
string columnName = (string) dataRow["ColumnName"];
DataColumn column = new DataColumn (columnName, (Type) dataRow["DataType"]);
dataTable.Columns.Add (column);
}
dataSet.Tables.Add (dataTable);
while (dataReader.Read ()) {
DataRow dataRow = dataTable.NewRow ();
for (int i = 0; i < dataReader.FieldCount; i++) {
dataRow[i] = dataReader.GetValue (i);
}
dataTable.Rows.Add (dataRow);
}
} else {
DataColumn column = new DataColumn ("RowsAffected");
dataTable.Columns.Add (column);
dataSet.Tables.Add (dataTable);
DataRow dataRow = dataTable.NewRow ();
dataRow[0] = dataReader.RecordsAffected;
dataTable.Rows.Add (dataRow);
}
}
while (dataReader.NextResult ());
return dataSet;
}

#endregion

/// <summary>
/// Scalar获取数据
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static object ExecuteScalar (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.ExecuteScalar (sql, param);
}
}

/// <summary>
/// Scalar获取数据
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static T ExecuteScalarForT (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.ExecuteScalar<T> (sql, param);
}
}

/// <summary>
/// 带参数的存储过程
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static List<T> ExecutePro (string proc, object param = null) {
using (IDbConnection con = GetConnection ()) {
List<T> list = con.Query<T> (proc,
param,
null,
true,
null,
CommandType.StoredProcedure).ToList ();
return list;
}
}

/// <summary>
/// 多条SQL批量执行
/// </summary>
/// <param name="Key">多条SQL</param>
/// <param name="Value">SQL对应实体</param>
/// <returns></returns>
public static int ExecuteTransaction (Dictionary<string, object> dic) {
using (IDbConnection con = GetConnection ()) {
using (var transaction = con.BeginTransaction ()) {
try {
int result = 0;
foreach (var sql in dic) {
result += con.Execute (sql.Key, sql.Value, transaction);
}

transaction.Commit ();
return result;
} catch (Exception ex) {
transaction.Rollback ();
return 0;
}
}
}
}

/// <summary>
/// 批量增删改 带事务
/// </summary>
/// <param name="sql">单SQL</param>
/// <param name="object">实体列表</param>
/// <returns></returns>
public static int ExecuteTransaction (string sql, object obj) {
using (IDbConnection con = GetConnection ()) {
con.Open ();
using (IDbTransaction transaction = con.BeginTransaction ()) {
try {
int result = 0;
result = con.Execute (sql, obj, transaction);
transaction.Commit ();
con.Close ();
return result;
} catch (Exception ex) {
transaction.Rollback ();
con.Close ();
return 0;
}
}
}
}

/// <summary>
/// 异步批量增删改 带事务
/// </summary>
/// <param name="sql">单SQL</param>
/// <param name="object">实体列表</param>
/// <returns></returns>
public static Task<int> ExecuteTransactionAsync (string sql, object obj) {
using (IDbConnection con = GetConnection ()) {
con.Open ();
using (IDbTransaction transaction = con.BeginTransaction ()) {
try {
Task<int> result;
result = con.ExecuteAsync (sql, obj, transaction);
transaction.Commit ();
con.Close ();
return result;
} catch (Exception ex) {
transaction.Rollback ();
con.Close ();
return null;
}
}
}
}
}
}
]]>
+ + + <p>Dapper is a simple object mapper for .NET and owns the title of <strong>King of Micro ORM</strong> in terms of speed and is virtually as fast as using a raw ADO.NET data reader. An ORM is an Object Relational Mapper, which is responsible for mapping between database and programming language.</p> + + + + + + + + + + + + +
+ + + Steam免费游戏一键领取 + + https://awaw.cc/post/steam-free-game/ + 2019-07-21T16:00:00.000Z + 2023-07-04T05:13:33.385Z + + 这些都是Steam上免费的游戏,如果手动领取的话需要一个一个领取,这里提供一种简便的方法,一键批量把免费游戏添加到自己的库里。

第一步

打开该链接: https://store.steampowered.com/account/licenses/ ,然后登录自己的账号(或者自己进入Steam主页,登录网页版Steam,然后进入到 主页 > 帐户 > 许可和产品序列号激活 页面)。

第二步

按键盘F12,进入Console,粘贴下方代码后按Enter键执行代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
(function () {
if (location.href.match(/^https:\/\/store\.steampowered\.com\/account\/licenses\/?$/) === null) {
alert('请在Steam帐号明细页面运行这些代码: https://store.steampowered.com/account/licenses/');

window.location = 'https://store.steampowered.com/account/licenses/';

return;
}

var freePackages =
[
//本体
39166,//Heroine's Quest: The Herald of Ragnarok
13261,//RACE 07: Andy Priaulx Crowne Plaza Raceway
32032,//Portal 2 Sixense Perceptual Pack
59373,//Penumbra: Necrologue
33694,//Grimm&Episode 1 - A Boy Learns What Fear Is
88162,//Romance of the Three Kingdoms Maker
36561,//Serena
58514,//Voxelized
117526,//Amnesia: Final Revelations

//dlc
85604,//RTK Maker - Face CG “RTK13” Set / 三国志ツクール顔登録素材 『三國志13』セット+シナリオ
21478,//Free to Play免费本体
50861,//Free to Play Soundtrack
21473,//Prime World免费本体
31538,//Prime World - Prime Machine
32287,//Z3TA+ 2 - Polybius 8-bit Game Pack
38085,//Saints Row IV - Reverse Cosplay Pack
72261,//The Secret of Tremendous Corporation免费本体
81026,//The Sources of Tremendous Corporation
47333,//Aura Kingdom免费本体
38820,//Aura Kingdom - Winter Gift
69802,//Fuse免费本体
60341,//Fuse - Free Brute Character Pack
21416,//Elsword免费本体
63207,//Time Tracer's DLC Package
59253,//Vindictus - New User Package

//软件&工具
35063,//Star Swarm Stress Test
74465,//Arma 3 Samples

21101, // DiRT Showdown Demo
21102, // Rayman Origins Demo
21103, // iBomber Defense Pacific Demo
21104, // Men Of War: Assault Squad GOTY Demo
21105, // Bang Bang Racing Demo
21106, // Sine Mora Demo
21107, // Noitu Love 2 Devolution Demo
21108, // Waveform Demo
21109, // Ridge Racer™ Unbounded Demo
21110, // Hegemony Gold: Wars of Ancient Greece
21111, // Rocksmith Demo
21113, // Binary Domain Demo
21114, // Sniper Elite V2 Demo
21115, // Blades of Time Demo
21117, // A Valley Without Wind Demo
21118, // F1 2012 Demo
21119, // Magical Diary Demo
21120, // The Dream Machine Demo
21121, // Hell Yeah! Demo
21122, // A Virus Named Tom Demo
21123, // Splice Demo
21124, // Atooms to Moolecules
21125, // BeatBuddy Demo
21126, // DIVO
21127, // Imagine Earth Demo
21128, // MilitAnt
21129, // Plutonic Repulse
21130, // The White Laboratory Demo
21131, // Blackwell's Asylum
21132, // Magic 2014 Demo
21133, // Sid Meier's Civilization V: Gods & Kings Demo
21134, // Gratuitous Tank Battles Demo
21135, // Tiny and Big: Grandpa's Leftovers Demo
21136, // KungFu Strike Demo
21137, // Adventures of Shuggy Demo
21138, // E.Y.E: Divine Cybermancy Demo
21139, // Orcs Must Die! 2 Demo
21140, // The Book of Unwritten Tales Demo
21141, // Sleeping Dogs™ Demo
21142, // Damage Inc Demo
21143, // Gateways Demo
21144, // Football Manager 2013 Demo
21145, // XCOM: Enemy Unknown Demo
21146, // Transcripted Demo
21147, // Intrusion 2 Demo
21148, // Din's Curse Demo
21149, // Democracy 2 Demo
21150, // Ys Origin Demo
21151, // Ether Vapor Remaster Demo
];

var ownedPackages = {};

jQuery('.account_table a').each(function (i, el) {
var match = el.href.match(/javascript:RemoveFreeLicense\( ([0-9]+), '/);

if (match !== null) {
ownedPackages[+match[1]] = true;
}
});

var i = 0,
loaded = 0,
package = 0,
total = freePackages.length,
modal = ShowBlockingWaitDialog('努力执行中...',
'请耐心等待,如果有错误请无视,请耐心等待脚本加载完毕');

for (; i < total; i++) {
package = freePackages[i];

if (ownedPackages[package]) {
loaded++;
continue;
}

jQuery.post(
'//store.steampowered.com/checkout/addfreelicense',
{
action: 'add_to_cart',
sessionid: g_sessionID,
subid: package
}
).always(function () {
loaded++;

modal.Dismiss();

if (loaded >= total) {
location.reload();
}
else {
modal = ShowBlockingWaitDialog('执行中...',
'加载至 <b>' + loaded + '</b>/' + total + '.');
}
}
);
}
}());

第三步

Enjoy your free game!

]]>
+ + + <p>这些都是Steam上免费的游戏,如果手动领取的话需要一个一个领取,这里提供一种简便的方法,一键批量把免费游戏添加到自己的库里。</p> + + + + + + + + + + +
+ + + SSMS18闪退解决方法 + + https://awaw.cc/post/ssms18-not-run/ + 2019-06-19T16:00:00.000Z + 2023-07-04T05:11:16.691Z + + 这是已知问题,SSMS开发团队发布了新的官方解决方法。

第一个方法

复制文件

1
Microsoft.VisualStudio.Shell.Interop.8.0.dll

将该DLL文件从目录

1
C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\PrivateAssemblies\Interop

复制到目录

1
C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\PublicAssemblies

第二个方法

删除文件

1
C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\CommonExtensions\Platform\Microsoft.VisualStudio.MinShell.Interop.pkgdef

SSMS产品经理提供的方法

建议的解决方法是:

1)关闭所有SSMS实例

2)编辑ssms.exe.config

3)删除具有以下文本的行(应该是第38行):NgenBind_OptimizeNonGac enabled =“1”

这与SSMS 18.x的下一版本中的改变相同

注意!ssms.exe.config文件的位置在文件夹中:

1
C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE

相关链接

]]>
+ + + <p>这是已知问题,SSMS开发团队发布了新的官方解决方法。</p> + + + + + + + + +
+ +
diff --git a/avatar.jpg b/avatar.jpg new file mode 100644 index 0000000..4aa6223 Binary files /dev/null and b/avatar.jpg differ diff --git a/categories/Developer/index.html b/categories/Developer/index.html new file mode 100644 index 0000000..2e1cd99 --- /dev/null +++ b/categories/Developer/index.html @@ -0,0 +1,559 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 分类 - Developer - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/categories/Developer/page/2/index.html b/categories/Developer/page/2/index.html new file mode 100644 index 0000000..6a8710b --- /dev/null +++ b/categories/Developer/page/2/index.html @@ -0,0 +1,532 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 分类 - Developer - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/categories/Share/index.html b/categories/Share/index.html new file mode 100644 index 0000000..373abf4 --- /dev/null +++ b/categories/Share/index.html @@ -0,0 +1,562 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 分类 - Share - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/categories/Share/page/2/index.html b/categories/Share/page/2/index.html new file mode 100644 index 0000000..30e0fcd --- /dev/null +++ b/categories/Share/page/2/index.html @@ -0,0 +1,505 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 分类 - Share - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + + + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/categories/Tools/index.html b/categories/Tools/index.html new file mode 100644 index 0000000..082954d --- /dev/null +++ b/categories/Tools/index.html @@ -0,0 +1,508 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 分类 - Tools - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+ +
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/categories/index.html b/categories/index.html new file mode 100644 index 0000000..b24db28 --- /dev/null +++ b/categories/index.html @@ -0,0 +1,798 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 分类 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/css/gitalk.css b/css/gitalk.css new file mode 100644 index 0000000..a268f1d --- /dev/null +++ b/css/gitalk.css @@ -0,0 +1,546 @@ +@font-face { + font-family: octicons-link; + src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format('woff'); +} +/* variables */ +/* functions & mixins */ +/* variables - calculated */ +/* styles */ +.gt-container { + -webkit-box-sizing: border-box; + box-sizing: border-box; + font-size: 16px; + /* loader */ + /* error */ + /* initing */ + /* no int */ + /* link */ + /* meta */ + /* popup */ + /* header */ + /* comments */ + /* comment */ +} +.gt-container * { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.gt-container a { + color: #6190e8; +} +.gt-container a:hover { + color: #81a6ed; + border-color: #81a6ed; +} +.gt-container a.is--active { + color: #333; + cursor: default !important; +} +.gt-container a.is--active:hover { + color: #333; +} +.gt-container .hide { + display: none !important; +} +.gt-container .gt-svg { + display: inline-block; + width: 1em; + height: 1em; + vertical-align: sub; +} +.gt-container .gt-svg svg { + width: 100%; + height: 100%; + fill: #6190e8; +} +.gt-container .gt-ico { + display: inline-block; +} +.gt-container .gt-ico-text { + margin-left: 0.3125em; +} +.gt-container .gt-ico-github { + width: 100%; + height: 100%; +} +.gt-container .gt-ico-github .gt-svg { + width: 100%; + height: 100%; +} +.gt-container .gt-ico-github svg { + fill: inherit; +} +.gt-container .gt-spinner { + position: relative; +} +.gt-container .gt-spinner::before { + content: ''; + -webkit-box-sizing: border-box; + box-sizing: border-box; + position: absolute; + top: 3px; + width: 0.75em; + height: 0.75em; + margin-top: -0.1875em; + margin-left: -0.375em; + border-radius: 50%; + border: 1px solid #fff; + border-top-color: #6190e8; + -webkit-animation: gt-kf-rotate 0.6s linear infinite; + animation: gt-kf-rotate 0.6s linear infinite; +} +.gt-container .gt-loader { + position: relative; + border: 1px solid #999; + -webkit-animation: ease gt-kf-rotate 1.5s infinite; + animation: ease gt-kf-rotate 1.5s infinite; + display: inline-block; + font-style: normal; + width: 1.75em; + height: 1.75em; + line-height: 1.75em; + border-radius: 50%; +} +.gt-container .gt-loader:before { + content: ''; + position: absolute; + display: block; + top: 0; + left: 50%; + margin-top: -0.1875em; + margin-left: -0.1875em; + width: 0.375em; + height: 0.375em; + background-color: #999; + border-radius: 50%; +} +.gt-container .gt-avatar { + display: inline-block; + width: 3.125em; + height: 3.125em; +} +@media (max-width: 479px) { + .gt-container .gt-avatar { + width: 2em; + height: 2em; + } +} +.gt-container .gt-avatar img { + width: 100%; + height: auto; + border-radius: 3px; +} +.gt-container .gt-avatar-github { + width: 3em; + height: 3em; +} +@media (max-width: 479px) { + .gt-container .gt-avatar-github { + width: 1.875em; + height: 1.875em; + } +} +.gt-container .gt-btn { + padding: 0.75em 1.25em; + display: inline-block; + line-height: 1; + text-decoration: none; + white-space: nowrap; + cursor: pointer; + border: 1px solid #6190e8; + border-radius: 5px; + background-color: #6190e8; + color: #fff; + outline: none; + font-size: 0.75em; +} +.gt-container .gt-btn-text { + font-weight: 400; +} +.gt-container .gt-btn-loading { + position: relative; + margin-left: 0.5em; + display: inline-block; + width: 0.75em; + height: 1em; + vertical-align: top; +} +.gt-container .gt-btn.is--disable { + cursor: not-allowed; + opacity: 0.5; +} +.gt-container .gt-btn-login { + margin-right: 0; +} +.gt-container .gt-btn-preview { + background-color: #fff; + color: #6190e8; +} +.gt-container .gt-btn-preview:hover { + background-color: #f2f2f2; + border-color: #81a6ed; +} +.gt-container .gt-btn-public:hover { + background-color: #81a6ed; + border-color: #81a6ed; +} +.gt-container .gt-error { + text-align: center; + margin: 0.625em; + color: #ff3860; +} +.gt-container .gt-initing { + padding: 1.25em 0; + text-align: center; +} +.gt-container .gt-initing-text { + margin: 0.625em auto; + font-size: 92%; +} +.gt-container .gt-no-init { + padding: 1.25em 0; + text-align: center; +} +.gt-container .gt-link { + border-bottom: 1px dotted #6190e8; +} +.gt-container .gt-link-counts, +.gt-container .gt-link-project { + text-decoration: none; +} +.gt-container .gt-meta { + margin: 1.25em 0; + padding: 1em 0; + position: relative; + border-bottom: 1px solid #e9e9e9; + font-size: 1em; + position: relative; + z-index: 10; +} +.gt-container .gt-meta:before, +.gt-container .gt-meta:after { + content: " "; + display: table; +} +.gt-container .gt-meta:after { + clear: both; +} +.gt-container .gt-counts { + margin: 0 0.625em 0 0; +} +.gt-container .gt-user { + float: right; + margin: 0; + font-size: 92%; +} +.gt-container .gt-user-pic { + width: 16px; + height: 16px; + vertical-align: top; + margin-right: 0.5em; +} +.gt-container .gt-user-inner { + display: inline-block; + cursor: pointer; +} +.gt-container .gt-user .gt-ico { + margin: 0 0 0 0.3125em; +} +.gt-container .gt-user .gt-ico svg { + fill: inherit; +} +.gt-container .gt-user .is--poping .gt-ico svg { + fill: #6190e8; +} +.gt-container .gt-version { + color: #a1a1a1; + margin-left: 0.375em; +} +.gt-container .gt-copyright { + margin: 0 0.9375em 0.5em; + border-top: 1px solid #e9e9e9; + padding-top: 0.5em; +} +.gt-container .gt-popup { + position: absolute; + right: 0; + top: 2.375em; + background: #fff; + display: inline-block; + border: 1px solid #e9e9e9; + padding: 0.625em 0; + font-size: 0.875em; + letter-spacing: 0.5px; +} +.gt-container .gt-popup .gt-action { + cursor: pointer; + display: block; + margin: 0.5em 0; + padding: 0 1.125em; + position: relative; + text-decoration: none; +} +.gt-container .gt-popup .gt-action.is--active:before { + content: ''; + width: 0.25em; + height: 0.25em; + background: #6190e8; + position: absolute; + left: 0.5em; + top: 0.4375em; +} +.gt-container .gt-header { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +.gt-container .gt-header-comment { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + margin-left: 1.25em; +} +@media (max-width: 479px) { + .gt-container .gt-header-comment { + margin-left: 0.875em; + } +} +.gt-container .gt-header-textarea { + padding: 0.75em; + display: block; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + min-height: 5.125em; + max-height: 15em; + border-radius: 5px; + border: 1px solid rgba(0,0,0,0.1); + font-size: 0.875em; + word-wrap: break-word; + resize: vertical; + background-color: #f6f6f6; + outline: none; + -webkit-transition: all 0.25s ease; + transition: all 0.25s ease; +} +.gt-container .gt-header-textarea:hover { + background-color: #fbfbfb; +} +.gt-container .gt-header-preview { + padding: 0.75em; + border-radius: 5px; + border: 1px solid rgba(0,0,0,0.1); + background-color: #f6f6f6; +} +.gt-container .gt-header-controls { + position: relative; + margin: 0.75em 0 0; +} +.gt-container .gt-header-controls:before, +.gt-container .gt-header-controls:after { + content: " "; + display: table; +} +.gt-container .gt-header-controls:after { + clear: both; +} +@media (max-width: 479px) { + .gt-container .gt-header-controls { + margin: 0; + } +} +.gt-container .gt-header-controls-tip { + font-size: 0.875em; + color: #6190e8; + text-decoration: none; + vertical-align: sub; +} +@media (max-width: 479px) { + .gt-container .gt-header-controls-tip { + display: none; + } +} +.gt-container .gt-header-controls .gt-btn { + float: right; + margin-left: 1.25em; +} +@media (max-width: 479px) { + .gt-container .gt-header-controls .gt-btn { + float: none; + width: 100%; + margin: 0.75em 0 0; + } +} +.gt-container:after { + content: ''; + position: fixed; + bottom: 100%; + left: 0; + right: 0; + top: 0; + opacity: 0; +} +.gt-container.gt-input-focused { + position: relative; +} +.gt-container.gt-input-focused:after { + content: ''; + position: fixed; + bottom: 0%; + left: 0; + right: 0; + top: 0; + background: #000; + opacity: 0.6; + -webkit-transition: opacity 0.3s, bottom 0s; + transition: opacity 0.3s, bottom 0s; + z-index: 9999; +} +.gt-container.gt-input-focused .gt-header-comment { + z-index: 10000; +} +.gt-container .gt-comments { + padding-top: 1.25em; +} +.gt-container .gt-comments-null { + text-align: center; +} +.gt-container .gt-comments-controls { + margin: 1.25em 0; + text-align: center; +} +.gt-container .gt-comment { + position: relative; + padding: 0.625em 0; + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +.gt-container .gt-comment-content { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + margin-left: 1.25em; + padding: 0.75em 1em; + background-color: #f9f9f9; + overflow: auto; + -webkit-transition: all ease 0.25s; + transition: all ease 0.25s; +} +.gt-container .gt-comment-content:hover { + -webkit-box-shadow: 0 0.625em 3.75em 0 #f4f4f4; + box-shadow: 0 0.625em 3.75em 0 #f4f4f4; +} +@media (max-width: 479px) { + .gt-container .gt-comment-content { + margin-left: 0.875em; + padding: 0.625em 0.75em; + } +} +.gt-container .gt-comment-header { + margin-bottom: 0.5em; + font-size: 0.875em; + position: relative; +} +.gt-container .gt-comment-block-1 { + float: right; + height: 1.375em; + width: 2em; +} +.gt-container .gt-comment-block-2 { + float: right; + height: 1.375em; + width: 4em; +} +.gt-container .gt-comment-username { + font-weight: 500; + color: #6190e8; + text-decoration: none; +} +.gt-container .gt-comment-username:hover { + text-decoration: underline; +} +.gt-container .gt-comment-text { + margin-left: 0.5em; + color: #a1a1a1; +} +.gt-container .gt-comment-date { + margin-left: 0.5em; + color: #a1a1a1; +} +.gt-container .gt-comment-like, +.gt-container .gt-comment-edit, +.gt-container .gt-comment-reply { + position: absolute; + height: 1.375em; +} +.gt-container .gt-comment-like:hover, +.gt-container .gt-comment-edit:hover, +.gt-container .gt-comment-reply:hover { + cursor: pointer; +} +.gt-container .gt-comment-like { + top: 0; + right: 2em; +} +.gt-container .gt-comment-edit, +.gt-container .gt-comment-reply { + top: 0; + right: 0; +} +.gt-container .gt-comment-body { + color: #333 !important; +} +.gt-container .gt-comment-body .email-hidden-toggle a { + display: inline-block; + height: 12px; + padding: 0 9px; + font-size: 12px; + font-weight: 600; + line-height: 6px; + color: #444d56; + text-decoration: none; + vertical-align: middle; + background: #dfe2e5; + border-radius: 1px; +} +.gt-container .gt-comment-body .email-hidden-toggle a:hover { + background-color: #c6cbd1; +} +.gt-container .gt-comment-body .email-hidden-reply { + display: none; + white-space: pre-wrap; +} +.gt-container .gt-comment-body .email-hidden-reply .email-signature-reply { + padding: 0 15px; + margin: 15px 0; + color: #586069; + border-left: 4px solid #dfe2e5; +} +.gt-container .gt-comment-body .email-hidden-reply.expanded { + display: block; +} +.gt-container .gt-comment-admin .gt-comment-content { + background-color: #f6f9fe; +} +@-webkit-keyframes gt-kf-rotate { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes gt-kf-rotate { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} diff --git a/css/highlight-dark.css b/css/highlight-dark.css new file mode 100644 index 0000000..495769c --- /dev/null +++ b/css/highlight-dark.css @@ -0,0 +1,10 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: GitHub Dark + Description: Dark theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-dark + Current colors taken from GitHub's CSS +*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#79c0ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-code,.hljs-comment,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c} diff --git a/css/highlight.css b/css/highlight.css new file mode 100644 index 0000000..96af284 --- /dev/null +++ b/css/highlight.css @@ -0,0 +1,10 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: GitHub + Description: Light theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-light + Current colors taken from GitHub's CSS +*/.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#005cc5}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-code,.hljs-comment,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0} diff --git a/css/main.css b/css/main.css new file mode 100644 index 0000000..b6e8628 --- /dev/null +++ b/css/main.css @@ -0,0 +1,2238 @@ +.anchorjs-link { + text-decoration: none !important; + transition: opacity 0.2s ease-in-out; +} +.markdown-body h1:hover > .anchorjs-link, +h2:hover > .anchorjs-link, +h3:hover > .anchorjs-link, +h4:hover > .anchorjs-link, +h5:hover > .anchorjs-link, +h6:hover > .anchorjs-link { + opacity: 1; +} +.banner { + height: 100%; + position: relative; + overflow: hidden; + cursor: default; +} +.banner .mask { + position: absolute; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0.3); +} +.banner[parallax="true"] { + will-change: transform; + -webkit-transform-style: preserve-3d; + -webkit-backface-visibility: hidden; + transition: transform 0.05s ease-out; +} +@media (max-width: 100vh) { + .header-inner { + max-height: 100vw; + } + #board { + margin-top: -1rem !important; + } +} +@media (max-width: 79.99vh) { + .scroll-down-bar { + display: none; + } +} +#board { + position: relative; + margin-top: -2rem; + padding: 3rem 0; + background-color: var(--board-bg-color); + transition: background-color 0.2s ease-in-out; + border-radius: 0.5rem; + z-index: 3; + -webkit-box-shadow: 0 12px 15px 0 rgba(0,0,0,0.24), 0 17px 50px 0 rgba(0,0,0,0.19); + box-shadow: 0 12px 15px 0 rgba(0,0,0,0.24), 0 17px 50px 0 rgba(0,0,0,0.19); +} +.code-widget { + display: inline-block; + background-color: transparent; + font-size: 0.75rem; + line-height: 1; + font-weight: bold; + padding: 0.3rem 0.1rem 0.1rem 0.1rem; + position: absolute; + right: 0.45rem; + top: 0.15rem; + z-index: 1; +} +.code-widget-light { + color: #999; +} +.code-widget-dark { + color: #bababa; +} +.copy-btn { + cursor: pointer; + user-select: none; + -webkit-appearance: none; + outline: none; +} +.copy-btn > i { + font-size: 0.75rem !important; + font-weight: 400; + margin-right: 0.15rem; + opacity: 0; + transition: opacity 0.2s ease-in-out; +} +.markdown-body pre:hover > .copy-btn > i { + opacity: 0.9; +} +.markdown-body pre:hover > .copy-btn, +.markdown-body pre:not(:hover) > .copy-btn { + outline: none; +} +.license-box { + background-color: rgba(27,31,35,0.05); + transition: background-color 0.2s ease-in-out; + border-radius: 4px; + font-size: 0.9rem; + overflow: hidden; + padding: 1.25rem; + position: relative; + z-index: 1; +} +.license-box .license-icon { + position: absolute; + top: 50%; + left: 100%; +} +.license-box .license-icon::after { + content: "\e8e4"; + font-size: 12.5rem; + line-height: 1; + opacity: 0.1; + position: relative; + left: -0.85em; + bottom: 0.5em; + z-index: -1; +} +.license-box .license-title { + margin-bottom: 1rem; +} +.license-box .license-title div:nth-child(1) { + line-height: 1.2; + margin-bottom: 0.25rem; +} +.license-box .license-title div:nth-child(2) { + color: var(--sec-text-color); + font-size: 0.8rem; +} +.license-box .license-meta { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} +.license-box .license-meta .license-meta-item { + align-items: center; + justify-content: center; + margin-right: 1.5rem; +} +.license-box .license-meta .license-meta-item div:nth-child(1) { + color: var(--sec-text-color); + font-size: 0.8rem; + font-weight: normal; +} +.license-box .license-meta .license-meta-item i.iconfont { + font-size: 1rem; +} +@media (max-width: 575px) and (min-width: 425px) { + .license-box .license-meta .license-meta-item { + display: flex; + justify-content: flex-start; + flex-wrap: wrap; + font-size: 0.8rem; + flex: 0 0 50%; + max-width: 50%; + margin-right: 0; + } + .license-box .license-meta .license-meta-item div:nth-child(1) { + margin-right: 0.5rem; + } + .license-box .license-meta .license-meta-date { + order: -1; + } +} +@media (max-width: 424px) { + .license-box::after { + top: -65px; + } + .license-box .license-meta { + flex-direction: column; + align-items: flex-start; + } + .license-box .license-meta .license-meta-item { + display: flex; + flex-wrap: wrap; + font-size: 0.8rem; + } + .license-box .license-meta .license-meta-item div:nth-child(1) { + margin-right: 0.5rem; + } +} +.footer-inner { + padding: 3rem 0 1rem 0; + text-align: center; +} +.footer-inner > div:not(:first-child) { + margin: 0.25rem 0; + font-size: 0.85rem; +} +.footer-inner .statistics { + display: flex; + flex-direction: row; + justify-content: center; +} +.footer-inner .statistics > span { + flex: 1; + margin: 0 0.25rem; +} +.footer-inner .statistics > *:nth-last-child(2):first-child { + text-align: right; +} +.footer-inner .statistics > *:nth-last-child(2):first-child ~ * { + text-align: left; +} +.footer-inner .beian { + display: flex; + flex-direction: row; + justify-content: center; +} +.footer-inner .beian > * { + margin: 0 0.25rem; +} +.footer-inner .beian-police { + position: relative; + overflow: hidden; + display: inline-flex; + align-items: center; + justify-content: left; +} +.footer-inner .beian-police img { + margin-right: 3px; + width: 1rem; + height: 1rem; + margin-bottom: 0.1rem; +} +@media (max-width: 424px) { + .footer-inner .statistics { + flex-direction: column; + } + .footer-inner .statistics > *:nth-last-child(2):first-child { + text-align: center; + } + .footer-inner .statistics > *:nth-last-child(2):first-child ~ * { + text-align: center; + } + .footer-inner .beian { + flex-direction: column; + } + .footer-inner .beian .beian-police { + justify-content: center; + } + .footer-inner .beian > *:nth-last-child(2):first-child { + text-align: center; + } + .footer-inner .beian > *:nth-last-child(2):first-child ~ * { + text-align: center; + } +} +sup > a::before, +.footnote-text::before { + display: block; + content: ""; + margin-top: -5rem; + height: 5rem; + width: 1px; + visibility: hidden; +} +sup > a::before, +.footnote-text::before { + display: inline-block; +} +.footnote-item::before { + display: block; + content: ""; + margin-top: -5rem; + height: 5rem; + width: 1px; + visibility: hidden; +} +.footnote-list ol { + list-style-type: none; + counter-reset: sectioncounter; + padding-left: 0.5rem; + font-size: 0.95rem; +} +.footnote-list ol li:before { + font-family: "Helvetica Neue", monospace, "Monaco"; + content: "[" counter(sectioncounter) "]"; + counter-increment: sectioncounter; +} +.footnote-list ol li+li { + margin-top: 0.5rem; +} +.footnote-text { + padding-left: 0.5em; +} +.navbar { + background-color: transparent; + font-size: 0.875rem; + box-shadow: 0 2px 5px 0 rgba(0,0,0,0.16), 0 2px 10px 0 rgba(0,0,0,0.12); + -webkit-box-shadow: 0 2px 5px 0 rgba(0,0,0,0.16), 0 2px 10px 0 rgba(0,0,0,0.12); +} +.navbar .navbar-brand { + color: var(--navbar-text-color); +} +.navbar .navbar-toggler .animated-icon span { + background-color: var(--navbar-text-color); +} +.navbar .nav-item .nav-link { + display: block; + color: var(--navbar-text-color); + transition: color 0.2s ease-in-out, background-color 0.2s ease-in-out; +} +.navbar .nav-item .nav-link:hover { + color: var(--link-hover-color); +} +.navbar .nav-item .nav-link:focus { + color: var(--navbar-text-color); +} +.navbar .nav-item .nav-link i { + font-size: 0.875rem; +} +.navbar .nav-item .nav-link i:only-child { + margin: 0 0.2rem; +} +.navbar .navbar-toggler { + border-width: 0; + outline: 0; +} +.navbar.scrolling-navbar { + will-change: background, padding; + -webkit-transition: background 0.5s ease-in-out, padding 0.5s ease-in-out; + transition: background 0.5s ease-in-out, padding 0.5s ease-in-out; +} +@media (min-width: 600px) { + .navbar.scrolling-navbar { + padding-top: 12px; + padding-bottom: 12px; + } + .navbar.scrolling-navbar .navbar-nav > li { + -webkit-transition-duration: 1s; + transition-duration: 1s; + } +} +.navbar.scrolling-navbar.top-nav-collapse { + padding-top: 5px; + padding-bottom: 5px; +} +.navbar .dropdown-menu { + font-size: 0.875rem; + color: var(--navbar-text-color); + background-color: rgba(0,0,0,0.3); + border: none; + min-width: 8rem; + -webkit-transition: background 0.5s ease-in-out, padding 0.5s ease-in-out; + transition: background 0.5s ease-in-out, padding 0.5s ease-in-out; +} +@media (max-width: 991.98px) { + .navbar .dropdown-menu { + text-align: center; + } +} +.navbar .dropdown-item { + color: var(--navbar-text-color); +} +.navbar .dropdown-item:hover, +.navbar .dropdown-item:focus { + color: var(--link-hover-color); + background-color: rgba(0,0,0,0.1); +} +@media (min-width: 992px) { + .navbar .dropdown:hover > .dropdown-menu { + display: block; + } + .navbar .dropdown > .dropdown-toggle:active { + pointer-events: none; + } + .navbar .dropdown-menu { + top: 95%; + } +} +.navbar .animated-icon { + width: 30px; + height: 20px; + position: relative; + margin: 0; + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + -webkit-transition: 0.5s ease-in-out; + -moz-transition: 0.5s ease-in-out; + -o-transition: 0.5s ease-in-out; + transition: 0.5s ease-in-out; + cursor: pointer; +} +.navbar .animated-icon span { + display: block; + position: absolute; + height: 3px; + width: 100%; + border-radius: 9px; + opacity: 1; + left: 0; + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + -webkit-transition: 0.25s ease-in-out; + -moz-transition: 0.25s ease-in-out; + -o-transition: 0.25s ease-in-out; + transition: 0.25s ease-in-out; + background: #fff; +} +.navbar .animated-icon span:nth-child(1) { + top: 0; +} +.navbar .animated-icon span:nth-child(2) { + top: 10px; +} +.navbar .animated-icon span:nth-child(3) { + top: 20px; +} +.navbar .animated-icon.open span:nth-child(1) { + top: 11px; + -webkit-transform: rotate(135deg); + -moz-transform: rotate(135deg); + -o-transform: rotate(135deg); + transform: rotate(135deg); +} +.navbar .animated-icon.open span:nth-child(2) { + opacity: 0; + left: -60px; +} +.navbar .animated-icon.open span:nth-child(3) { + top: 11px; + -webkit-transform: rotate(-135deg); + -moz-transform: rotate(-135deg); + -o-transform: rotate(-135deg); + transform: rotate(-135deg); +} +.navbar .dropdown-collapse, +.top-nav-collapse, +.navbar-col-show { + background-color: var(--navbar-bg-color); +} +@media (max-width: 767px) { + .navbar { + font-size: 1rem; + line-height: 2.5rem; + } +} +.banner-text { + color: var(--subtitle-color); + max-width: calc(960px - 6rem); + width: 80%; + overflow-wrap: break-word; +} +.banner-text .typed-cursor { + margin: 0 0.2rem; +} +@media (max-width: 767px) { + #subtitle, + .typed-cursor { + font-size: 1.5rem; + } +} +@media (max-width: 575px) { + .banner-text { + font-size: 0.9rem; + } + #subtitle, + .typed-cursor { + font-size: 1.35rem; + } +} +.modal-dialog .modal-content { + background-color: var(--board-bg-color); + border: 0; + border-radius: 0.125rem; + -webkit-box-shadow: 0 5px 11px 0 rgba(0,0,0,0.18), 0 4px 15px 0 rgba(0,0,0,0.15); + box-shadow: 0 5px 11px 0 rgba(0,0,0,0.18), 0 4px 15px 0 rgba(0,0,0,0.15); +} +.modal-dialog .modal-content .modal-header { + border-bottom-color: var(--line-color); + transition: border-bottom-color 0.2s ease-in-out; +} +.close { + color: var(--text-color); +} +.close:hover { + color: var(--link-hover-color); +} +.close:focus { + outline: 0; +} +.modal-dialog .modal-content .modal-header { + border-top-left-radius: 0.125rem; + border-top-right-radius: 0.125rem; + border-bottom: 1px solid #dee2e6; +} +.md-form { + position: relative; + margin-top: 1.5rem; + margin-bottom: 1.5rem; +} +.md-form input[type] { + -webkit-box-sizing: content-box; + box-sizing: content-box; + background-color: transparent; + border: none; + border-bottom: 1px solid #ced4da; + border-radius: 0; + outline: none; + -webkit-box-shadow: none; + box-shadow: none; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; +} +.md-form input[type]:focus:not([readonly]) { + border-bottom: 1px solid #4285f4; + -webkit-box-shadow: 0 1px 0 0 #4285f4; + box-shadow: 0 1px 0 0 #4285f4; +} +.md-form input[type]:focus:not([readonly]) + label { + color: #4285f4; +} +.md-form input[type].valid, +.md-form input[type]:focus.valid { + border-bottom: 1px solid #00c851; + -webkit-box-shadow: 0 1px 0 0 #00c851; + box-shadow: 0 1px 0 0 #00c851; +} +.md-form input[type].valid + label, +.md-form input[type]:focus.valid + label { + color: #00c851; +} +.md-form input[type].invalid, +.md-form input[type]:focus.invalid { + border-bottom: 1px solid #f44336; + -webkit-box-shadow: 0 1px 0 0 #f44336; + box-shadow: 0 1px 0 0 #f44336; +} +.md-form input[type].invalid + label, +.md-form input[type]:focus.invalid + label { + color: #f44336; +} +.md-form input[type].validate { + margin-bottom: 2.5rem; +} +.md-form input[type].form-control { + height: auto; + padding: 0.6rem 0 0.4rem 0; + margin: 0 0 0.5rem 0; + color: var(--text-color); + background-color: transparent; + border-radius: 0; +} +.md-form label { + font-size: 0.8rem; + position: absolute; + top: -1rem; + left: 0; + color: #757575; + cursor: text; + transition: color 0.2s ease-out; +} +.modal-open[style] { + padding-right: 0 !important; + overflow: auto; +} +.modal-open[style] #navbar[style] { + padding-right: 1rem !important; +} +#nprogress .bar { + height: 3px !important; + background-color: #29d !important; +} +#nprogress .peg { + box-shadow: 0 0 14px #29d, 0 0 8px #29d !important; +} +@media (max-width: 575px) { + #nprogress .bar { + display: none; + } +} +.noscript-warning { + background-color: #f55; + color: #fff; + font-family: sans-serif; + font-size: 1rem; + font-weight: bold; + position: fixed; + left: 0; + bottom: 0; + text-align: center; + width: 100%; + z-index: 99; +} +.pagination { + margin-top: 3rem; + justify-content: center; +} +.pagination .space { + align-self: flex-end; +} +.pagination .page-number, +.pagination .current, +.pagination .extend { + outline: 0; + border: 0; + background-color: transparent; + font-size: 0.9rem; + padding: 0.5rem 0.75rem; + line-height: 1.25; + border-radius: 0.125rem; +} +.pagination .page-number { + margin: 0 0.05rem; +} +.pagination .page-number:hover, +.pagination .current { + transition: background-color 0.2s ease-in-out; + background-color: var(--link-hover-bg-color); +} +.qr-trigger { + cursor: pointer; + position: relative; +} +.qr-trigger:hover .qr-img { + display: block; + transition: all 0.3s; +} +.qr-img { + max-width: 12rem; + position: absolute; + right: -5.25rem; + z-index: 99; + display: none; + border-radius: 0.2rem; + background-color: transparent; + box-shadow: 0 0 20px -5px rgba(158,158,158,0.2); +} +.scroll-down-bar { + position: absolute; + width: 100%; + height: 6rem; + text-align: center; + cursor: pointer; + bottom: 0; +} +.scroll-down-bar i.iconfont { + font-size: 2rem; + font-weight: bold; + display: inline-block; + position: relative; + padding-top: 2rem; + color: var(--subtitle-color); + transform: translateZ(0); + animation: scroll-down 1.5s infinite; +} +#scroll-top-button { + position: fixed; + z-index: 99; + background: var(--board-bg-color); + transition: background-color 0.2s ease-in-out, bottom 0.3s ease; + border-radius: 4px; + min-width: 40px; + min-height: 40px; + bottom: -60px; + outline: none; + display: flex; + display: -webkit-flex; + align-items: center; + box-shadow: 0 2px 5px 0 rgba(0,0,0,0.16), 0 2px 10px 0 rgba(0,0,0,0.12); +} +#scroll-top-button i { + font-size: 32px; + margin: auto; + color: var(--sec-text-color); +} +#scroll-top-button:hover i, +#scroll-top-button:active i { + animation-name: scroll-top; + animation-duration: 1s; + animation-delay: 0.1s; + animation-timing-function: ease-in-out; + animation-iteration-count: infinite; + animation-fill-mode: forwards; + animation-direction: alternate; +} +#local-search-result .search-list-title { + border-left: 3px solid #0d47a1; +} +#local-search-result .search-list-content { + padding: 0 1.25rem; +} +#local-search-result .search-word { + color: #ff4500; +} +#toc { + visibility: hidden; +} +.toc-header { + margin-bottom: 0.5rem; + font-weight: bold; + line-height: 1.2; +} +.toc-header, +.toc-header > i { + font-size: 1.25rem; +} +.toc-body { + max-height: 75vh; + overflow-y: auto; + overflow: -moz-scrollbars-none; + -ms-overflow-style: none; +} +.toc-body ol { + list-style: none; + padding-inline-start: 1rem; +} +.toc-body::-webkit-scrollbar { + display: none; +} +.tocbot-list { + position: relative; +} +.tocbot-list ol { + list-style: none; + padding-left: 1rem; +} +.tocbot-list a { + font-size: 0.95rem; +} +.tocbot-link { + color: var(--text-color); +} +.tocbot-active-link { + font-weight: bold; + color: var(--link-hover-color); +} +.tocbot-is-collapsed { + max-height: 0; +} +.tocbot-is-collapsible { + overflow: hidden; + transition: all 0.3s ease-in-out; +} +.toc-list-item { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.toc-list-item.is-active-li::before { + height: 1rem; + margin: 0.25rem 0; + visibility: visible; +} +.toc-list-item::before { + width: 0.15rem; + height: 0.2rem; + position: absolute; + left: 0.25rem; + content: ""; + border-radius: 2px; + margin: 0.65rem 0; + background: var(--link-hover-color); + visibility: hidden; + transition: height 0.1s ease-in-out, margin 0.1s ease-in-out, visibility 0.1s ease-in-out; +} +.sidebar { + position: -webkit-sticky; + position: sticky; + top: 2rem; + padding: 3rem 0; +} +html { + font-size: 16px; + letter-spacing: 0.02em; +} +html, +body { + height: 100%; + font-family: AlibabaPuHuiTi-3-55-Regular,sans-serif,Microsoft YaHei,-apple-system,Apple Color Emoji,monospace,Segoe UI,Segoe UI Emoji; + overflow-wrap: break-word; +} +body { + transition: color 0.2s ease-in-out, background-color 0.2s ease-in-out; + background-color: var(--body-bg-color); + color: var(--text-color); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +body a { + color: var(--text-color); + text-decoration: none; + cursor: pointer; + transition: color 0.2s ease-in-out, background-color 0.2s ease-in-out; +} +body a:hover { + color: var(--link-hover-color); + text-decoration: none; + transition: color 0.2s ease-in-out, background-color 0.2s ease-in-out; +} +code { + color: inherit; +} +table { + font-size: inherit; + color: var(--post-text-color); +} +img[lazyload] { + object-fit: cover; +} +*[align="left"] { + text-align: left; +} +*[align="center"] { + text-align: center; +} +*[align="right"] { + text-align: right; +} +::-webkit-scrollbar { + width: 6px; + height: 6px; +} +::-webkit-scrollbar-thumb { + background-color: var(--scrollbar-color); + border-radius: 6px; +} +::-webkit-scrollbar-thumb:hover { + background-color: var(--scrollbar-hover-color); +} +::-webkit-scrollbar-corner { + background-color: transparent; +} +label { + margin-bottom: 0; +} +i.iconfont { + font-size: 1em; + line-height: 1; +} +:root { + --color-mode: "light"; + --body-bg-color: #eee; + --board-bg-color: #fff; + --text-color: #3c4858; + --sec-text-color: #718096; + --post-text-color: #2c3e50; + --post-heading-color: #1a202c; + --post-link-color: #0366d6; + --link-hover-color: #30a9de; + --link-hover-bg-color: #f8f9fa; + --line-color: #eaecef; + --navbar-bg-color: #2f4154; + --navbar-text-color: #fff; + --subtitle-color: #fff; + --scrollbar-color: #c4c6c9; + --scrollbar-hover-color: #a6a6a6; + --button-bg-color: transparent; + --button-hover-bg-color: #f2f3f5; + --highlight-bg-color: #f6f8fa; + --inlinecode-bg-color: rgba(175,184,193,0.2); + --fold-title-color: #3c4858; + --fold-border-color: #eaecef; +} +@media (prefers-color-scheme: dark) { + :root { + --color-mode: "dark"; + } + :root:not([data-user-color-scheme]) { + --body-bg-color: #181c27; + --board-bg-color: #252d38; + --text-color: #c4c6c9; + --sec-text-color: #a7a9ad; + --post-text-color: #c4c6c9; + --post-heading-color: #c4c6c9; + --post-link-color: #1589e9; + --link-hover-color: #30a9de; + --link-hover-bg-color: #364151; + --line-color: #435266; + --navbar-bg-color: #1f3144; + --navbar-text-color: #d0d0d0; + --subtitle-color: #d0d0d0; + --scrollbar-color: #687582; + --scrollbar-hover-color: #9da8b3; + --button-bg-color: transparent; + --button-hover-bg-color: #46647e; + --highlight-bg-color: #0d1117; + --inlinecode-bg-color: rgba(99,110,123,0.4); + --fold-title-color: #c4c6c9; + --fold-border-color: #435266; + } + :root:not([data-user-color-scheme]) img { + -webkit-filter: brightness(0.9); + filter: brightness(0.9); + transition: filter 0.2s ease-in-out; + } + :root:not([data-user-color-scheme]) .license-box { + background-color: rgba(62,75,94,0.35); + transition: background-color 0.2s ease-in-out; + } + :root:not([data-user-color-scheme]) .gt-comment-admin .gt-comment-content { + background-color: transparent; + transition: background-color 0.2s ease-in-out; + } +} +@media not print { + [data-user-color-scheme="dark"] { + --body-bg-color: #181c27; + --board-bg-color: #252d38; + --text-color: #c4c6c9; + --sec-text-color: #a7a9ad; + --post-text-color: #c4c6c9; + --post-heading-color: #c4c6c9; + --post-link-color: #1589e9; + --link-hover-color: #30a9de; + --link-hover-bg-color: #364151; + --line-color: #435266; + --navbar-bg-color: #1f3144; + --navbar-text-color: #d0d0d0; + --subtitle-color: #d0d0d0; + --scrollbar-color: #687582; + --scrollbar-hover-color: #9da8b3; + --button-bg-color: transparent; + --button-hover-bg-color: #46647e; + --highlight-bg-color: #0d1117; + --inlinecode-bg-color: rgba(99,110,123,0.4); + --fold-title-color: #c4c6c9; + --fold-border-color: #435266; + } + [data-user-color-scheme="dark"] img { + -webkit-filter: brightness(0.9); + filter: brightness(0.9); + transition: filter 0.2s ease-in-out; + } + [data-user-color-scheme="dark"] .license-box { + background-color: rgba(62,75,94,0.35); + transition: background-color 0.2s ease-in-out; + } + [data-user-color-scheme="dark"] .gt-comment-admin .gt-comment-content { + background-color: transparent; + transition: background-color 0.2s ease-in-out; + } +} +@media print { + :root { + --color-mode: "light"; + } +} +.fade-in-up { + -webkit-animation-name: fade-in-up; + animation-name: fade-in-up; +} +.hidden-mobile { + display: block; +} +.visible-mobile { + display: none; +} +@media (max-width: 575px) { + .hidden-mobile { + display: none; + } + .visible-mobile { + display: block; + } +} +.nomargin-x { + margin-left: 0 !important; + margin-right: 0 !important; +} +.nopadding-x { + padding-left: 0 !important; + padding-right: 0 !important; +} +@media (max-width: 767px) { + .nopadding-x-md { + padding-left: 0 !important; + padding-right: 0 !important; + } +} +.flex-center { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + height: 100%; +} +.hover-with-bg { + display: inline-block; + line-height: 1; +} +.hover-with-bg:hover { + background-color: var(--link-hover-bg-color); + transition-duration: 0.2s; + transition-timing-function: ease-in-out; + border-radius: 0.2rem; +} +@-moz-keyframes fade-in-up { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-webkit-keyframes fade-in-up { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-o-keyframes fade-in-up { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@keyframes fade-in-up { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +@-moz-keyframes scroll-down { + 0% { + opacity: 0.8; + top: 0; + } + 50% { + opacity: 0.4; + top: -1em; + } + 100% { + opacity: 0.8; + top: 0; + } +} +@-webkit-keyframes scroll-down { + 0% { + opacity: 0.8; + top: 0; + } + 50% { + opacity: 0.4; + top: -1em; + } + 100% { + opacity: 0.8; + top: 0; + } +} +@-o-keyframes scroll-down { + 0% { + opacity: 0.8; + top: 0; + } + 50% { + opacity: 0.4; + top: -1em; + } + 100% { + opacity: 0.8; + top: 0; + } +} +@keyframes scroll-down { + 0% { + opacity: 0.8; + top: 0; + } + 50% { + opacity: 0.4; + top: -1em; + } + 100% { + opacity: 0.8; + top: 0; + } +} +@-moz-keyframes scroll-top { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + } + 50% { + -webkit-transform: translateY(-0.35rem); + transform: translateY(-0.35rem); + } + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes scroll-top { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + } + 50% { + -webkit-transform: translateY(-0.35rem); + transform: translateY(-0.35rem); + } + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes scroll-top { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + } + 50% { + -webkit-transform: translateY(-0.35rem); + transform: translateY(-0.35rem); + } + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes scroll-top { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + } + 50% { + -webkit-transform: translateY(-0.35rem); + transform: translateY(-0.35rem); + } + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + } +} +@media print { + header, + footer, + .side-col, + #scroll-top-button, + .post-prevnext, + #comments { + display: none !important; + } + .markdown-body a:not([href^='#']):not([href^='javascript:']):not(.print-no-link)::after { + content: ' (' attr(href) ')'; + font-size: 0.8rem; + color: var(--post-text-color); + opacity: 0.8; + } + .markdown-body > h1, + .markdown-body h2 { + border-bottom-color: transparent !important; + } + .markdown-body > h1, + .markdown-body h2, + .markdown-body h3, + .markdown-body h4, + .markdown-body h5, + .markdown-body h6 { + margin-top: 1.25em !important; + margin-bottom: 0.25em !important; + } + .markdown-body [data-anchorjs-icon]::after { + display: none; + } + .markdown-body figure.highlight table, + .markdown-body figure.highlight tbody, + .markdown-body figure.highlight tr, + .markdown-body figure.highlight td.code, + .markdown-body figure.highlight td.code pre { + width: 100% !important; + display: block !important; + } + .markdown-body figure.highlight pre > code { + white-space: pre-wrap; + } + .markdown-body figure.highlight .gutter, + .markdown-body figure.highlight .code-widget { + display: none !important; + } + .post-metas a { + text-decoration: none; + } +} +@media not print { + #seo-header { + display: none; + } +} +.index-card { + margin-bottom: 2.5rem; +} +.index-img img { + display: block; + width: 100%; + height: 10rem; + object-fit: cover; + box-shadow: 0 5px 11px 0 rgba(0,0,0,0.18), 0 4px 15px 0 rgba(0,0,0,0.15); + border-radius: 0.25rem; + background-color: transparent; +} +.index-info { + display: flex; + flex-direction: column; + justify-content: space-between; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} +.index-header { + color: var(--text-color); + font-size: 1.5rem; + font-weight: bold; + line-height: 1.4; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-bottom: 0.25rem; +} +.index-header .index-pin { + color: var(--text-color); + font-size: 1.5rem; + margin-right: 0.15rem; +} +.index-btm { + color: var(--sec-text-color); +} +.index-btm a { + color: var(--sec-text-color); +} +.index-excerpt { + color: var(--sec-text-color); + margin: 0.5rem 0; + height: calc(1.4rem * 3); + overflow: hidden; + display: flex; +} +.index-excerpt > div { + width: 100%; + line-height: 1.4rem; + word-break: break-word; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 3; +} +.index-excerpt__noimg { + height: auto; + max-height: calc(1.4rem * 3); +} +@media (max-width: 767px) { + .index-info { + padding-top: 1.25rem; + } + .index-header { + font-size: 1.25rem; + white-space: normal; + overflow: hidden; + word-break: break-word; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + } + .index-header .index-pin { + font-size: 1.25rem; + } + .index-excerpt { + height: auto; + max-height: calc(1.4rem * 3); + margin: 0.25rem 0; + } +} +#valine.v[data-class=v] .status-bar, +#valine.v[data-class=v] .veditor, +#valine.v[data-class=v] .vinput, +#valine.v[data-class=v] .vbtn, +#valine.v[data-class=v] p, +#valine.v[data-class=v] pre code { + color: var(--text-color); +} +#valine.v[data-class=v] .vinput::placeholder { + color: var(--sec-text-color); +} +#valine.v[data-class=v] .vicon { + fill: var(--text-color); +} +.gt-container .gt-comment-content:hover { + -webkit-box-shadow: none; + box-shadow: none; +} +.gt-container .gt-comment-body { + color: var(--text-color) !important; + transition: color 0.2s ease-in-out; +} +#remark-km423lmfdslkm34-back { + z-index: 1030; +} +#remark-km423lmfdslkm34-node { + z-index: 1031; +} +.markdown-body .highlight pre, +.markdown-body pre { + padding: 1.45rem 1rem; +} +.markdown-body pre code.hljs { + padding: 0; +} +.markdown-body pre[class*="language-"] { + padding-top: 1.45rem; + padding-bottom: 1.45rem; + padding-right: 1rem; + line-height: 1.5; + margin-bottom: 1rem; +} +.markdown-body .code-wrapper { + position: relative; + border-radius: 4px; + margin-bottom: 1rem; +} +.markdown-body .hljs, +.markdown-body .highlight pre, +.markdown-body .code-wrapper pre, +.markdown-body figure.highlight td.gutter { + transition: color 0.2s ease-in-out, background-color 0.2s ease-in-out; + background-color: var(--highlight-bg-color); +} +pre[class*=language-].line-numbers { + position: initial; +} +figure { + margin: 1rem 0; +} +figure.highlight { + position: relative; +} +figure.highlight table { + border: 0; + margin: 0; + width: auto; + border-radius: 4px; +} +figure.highlight td { + border: 0; + padding: 0; +} +figure.highlight tr { + border: 0; +} +figure.highlight td.code { + width: 100%; +} +figure.highlight td.gutter { + display: table-cell; + position: -webkit-sticky; + position: sticky; + left: 0; + z-index: 1; +} +figure.highlight td.gutter pre { + text-align: right; + padding: 0 0.75rem; + border-radius: initial; + border-right: 1px solid #999; +} +figure.highlight td.gutter pre span.line { + color: #999; +} +figure.highlight td.code > pre { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.markdown-body { + font-size: 1rem; + line-height: 1.6; + font-family: AlibabaPuHuiTi-3-55-Regular,sans-serif,Microsoft YaHei,-apple-system,Apple Color Emoji,monospace,Segoe UI,Segoe UI Emoji; + margin-bottom: 2rem; + color: var(--post-text-color); +} +.markdown-body > h1, +.markdown-body h2 { + border-bottom-color: var(--line-color); +} +.markdown-body > h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + color: var(--post-heading-color); + transition: color 0.2s ease-in-out, border-bottom-color 0.2s ease-in-out; + font-weight: bold; + margin-bottom: 0.75em; + margin-top: 2em; +} +.markdown-body > h1::before, +.markdown-body h2::before, +.markdown-body h3::before, +.markdown-body h4::before, +.markdown-body h5::before, +.markdown-body h6::before { + display: block; + content: ""; + margin-top: -5rem; + height: 5rem; + width: 1px; + visibility: hidden; +} +.markdown-body > h1:focus, +.markdown-body h2:focus, +.markdown-body h3:focus, +.markdown-body h4:focus, +.markdown-body h5:focus, +.markdown-body h6:focus { + outline: none; +} +.markdown-body a { + color: var(--post-link-color); +} +.markdown-body strong { + font-weight: bold; +} +.markdown-body code { + tab-size: 4; + background-color: var(--inlinecode-bg-color); + transition: background-color 0.2s ease-in-out; +} +.markdown-body table tr { + background-color: var(--board-bg-color); + transition: background-color 0.2s ease-in-out; +} +.markdown-body table tr:nth-child(2n) { + background-color: var(--board-bg-color); + transition: background-color 0.2s ease-in-out; +} +.markdown-body table th, +.markdown-body table td { + border-color: var(--line-color); + transition: border-color 0.2s ease-in-out; +} +.markdown-body pre { + font-size: 85% !important; +} +.markdown-body pre .mermaid { + text-align: center; +} +.markdown-body pre .mermaid > svg { + min-width: 100%; +} +.markdown-body p > img, +.markdown-body p > a > img, +.markdown-body figure > img, +.markdown-body figure > a > img { + max-width: 90%; + margin: 1.5rem auto; + display: block; + box-shadow: 0 5px 11px 0 rgba(0,0,0,0.18), 0 4px 15px 0 rgba(0,0,0,0.15); + border-radius: 4px; + background-color: transparent; +} +.markdown-body blockquote { + color: var(--sec-text-color); +} +.markdown-body details { + cursor: pointer; +} +.markdown-body details summary { + outline: none; +} +hr, +.markdown-body hr { + background-color: initial; + border-top: 1px solid var(--line-color); + transition: border-top-color 0.2s ease-in-out; +} +.markdown-body hr { + height: 0; + margin: 2rem 0; +} +.markdown-body figcaption.image-caption { + font-size: 0.8rem; + color: var(--post-text-color); + opacity: 0.65; + line-height: 1; + margin: -0.75rem auto 2rem; + text-align: center; +} +.markdown-body figcaption:not(.image-caption) { + display: none; +} +.post-content, +post-custom { + box-sizing: border-box; + padding-left: 10%; + padding-right: 10%; +} +@media (max-width: 767px) { + .post-content, + post-custom { + padding-left: 2rem; + padding-right: 2rem; + } +} +@media (max-width: 424px) { + .post-content, + post-custom { + padding-left: 1rem; + padding-right: 1rem; + } + .anchorjs-link-left { + opacity: 0 !important; + } +} +.page-content strong, +.post-content strong { + font-weight: bold; +} +.page-content > *:nth-child(2), +.post-content > *:nth-child(2) { + margin-top: 0; +} +.page-content img, +.post-content img { + object-fit: cover; + max-width: 100%; +} +@media (max-width: 767px) { + .page-content, + .post-content { + overflow-x: hidden; + } +} +.post-metas { + display: flex; + flex-wrap: wrap; + font-size: 0.9rem; +} +.post-meta > *:not(.hover-with-bg) { + margin-right: 0.2rem; +} +.post-prevnext { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + font-size: 0.9rem; + margin-left: -0.35rem; + margin-right: -0.35rem; +} +.post-prevnext .post-prev, +.post-prevnext .post-next { + display: flex; + padding-left: 0; + padding-right: 0; +} +.post-prevnext .post-prev i, +.post-prevnext .post-next i { + font-size: 1.5rem; +} +.post-prevnext .post-prev a, +.post-prevnext .post-next a { + display: flex; + align-items: center; +} +.post-prevnext .post-prev .hidden-mobile, +.post-prevnext .post-next .hidden-mobile { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + text-overflow: ellipsis; + overflow: hidden; +} +@media (max-width: 575px) { + .post-prevnext .post-prev .hidden-mobile, + .post-prevnext .post-next .hidden-mobile { + display: none; + } +} +.post-prevnext .post-prev:hover i, +.post-prevnext .post-prev:active i, +.post-prevnext .post-next:hover i, +.post-prevnext .post-next:active i { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-delay: 0.1s; + animation-delay: 0.1s; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-animation-fill-mode: forwards; + animation-fill-mode: forwards; + -webkit-animation-direction: alternate; + animation-direction: alternate; +} +.post-prevnext .post-prev:hover i, +.post-prevnext .post-prev:active i { + -webkit-animation-name: post-prev-anim; + animation-name: post-prev-anim; +} +.post-prevnext .post-next:hover i, +.post-prevnext .post-next:active i { + -webkit-animation-name: post-next-anim; + animation-name: post-next-anim; +} +.post-prevnext .post-next { + justify-content: flex-end; +} +.post-prevnext .fa-chevron-left { + margin-right: 0.5rem; +} +.post-prevnext .fa-chevron-right { + margin-left: 0.5rem; +} +#seo-header { + color: var(--post-heading-color); + font-weight: bold; + margin-top: 0.5em; + margin-bottom: 0.75em; + border-bottom-color: var(--line-color); + border-bottom-style: solid; + border-bottom-width: 2px; + line-height: 1.5; +} +.custom, +#comments { + margin-top: 2rem; +} +#comments noscript { + display: block; + text-align: center; + padding: 2rem 0; +} +.visitors { + font-size: 0.8em; + padding: 0.45rem; + float: right; +} +a.fancybox:hover { + text-decoration: none; +} +mjx-container, +.mjx-container { + overflow-x: auto; + overflow-y: hidden !important; + padding: 0.5em 0; +} +mjx-container:focus, +.mjx-container:focus, +mjx-container svg:focus, +.mjx-container svg:focus { + outline: none; +} +.mjx-char { + line-height: 1; +} +.katex-block { + overflow-x: auto; +} +.katex, +.mjx-mrow { + white-space: pre-wrap !important; +} +.footnote-ref [class*=hint--][aria-label]:after { + max-width: 12rem; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +@-moz-keyframes post-prev-anim { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(-0.35rem); + transform: translateX(-0.35rem); + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} +@-webkit-keyframes post-prev-anim { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(-0.35rem); + transform: translateX(-0.35rem); + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} +@-o-keyframes post-prev-anim { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(-0.35rem); + transform: translateX(-0.35rem); + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} +@keyframes post-prev-anim { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(-0.35rem); + transform: translateX(-0.35rem); + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} +@-moz-keyframes post-next-anim { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(0.35rem); + transform: translateX(0.35rem); + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} +@-webkit-keyframes post-next-anim { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(0.35rem); + transform: translateX(0.35rem); + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} +@-o-keyframes post-next-anim { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(0.35rem); + transform: translateX(0.35rem); + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} +@keyframes post-next-anim { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(0.35rem); + transform: translateX(0.35rem); + } + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} +.fold { + margin: 1rem 0; + border: 0.5px solid var(--fold-border-color); + position: relative; + clear: both; + border-radius: 0.125rem; +} +.fold .fold-title { + color: var(--fold-title-color); + padding: 0.5rem 0.75rem; + font-size: 0.9rem; + font-weight: bold; + border-radius: 0.125rem; +} +.fold .fold-title:not(.collapsed) > .fold-arrow { + transform: rotate(90deg); + transform-origin: center center; +} +.fold .fold-title .fold-arrow { + display: inline-block; + margin-right: 0.35rem; + transition: transform 0.3s ease-out; +} +.fold .fold-content { + padding: 1rem 1rem; +} +.fold .fold-content > *:last-child { + margin-bottom: 0; +} +.fold-default, +.fold-secondary { + background-color: rgba(187,187,187,0.25); +} +.fold-primary { + background-color: rgba(183,160,224,0.25); +} +.fold-info { + background-color: rgba(160,197,228,0.25); +} +.fold-success { + background-color: rgba(174,220,174,0.25); +} +.fold-warning { + background-color: rgba(248,214,166,0.25); +} +.fold-danger { + background-color: rgba(236,169,167,0.25); +} +.fold-light { + background-color: rgba(254,254,254,0.25); +} +.note { + padding: 0.75rem; + border-left: 0.35rem solid; + border-radius: 0.25rem; + margin: 1.5rem 0; + color: var(--text-color); + transition: color 0.2s ease-in-out; + font-size: 0.9rem; +} +.note a { + color: var(--text-color); + transition: color 0.2s ease-in-out; +} +.note *:last-child { + margin-bottom: 0; +} +.note-default, +.note-secondary { + background-color: rgba(187,187,187,0.25); + border-color: #777; +} +.note-primary { + background-color: rgba(183,160,224,0.25); + border-color: #6f42c1; +} +.note-success { + background-color: rgba(174,220,174,0.25); + border-color: #5cb85c; +} +.note-danger { + background-color: rgba(236,169,167,0.25); + border-color: #d9534f; +} +.note-warning { + background-color: rgba(248,214,166,0.25); + border-color: #f0ad4e; +} +.note-info { + background-color: rgba(160,197,228,0.25); + border-color: #428bca; +} +.note-light { + background-color: rgba(254,254,254,0.25); + border-color: #0f0f0f; +} +.label { + display: inline; + border-radius: 3px; + font-size: 85%; + margin: 0; + padding: 0.2em 0.4em; + color: var(--text-color); + transition: color 0.2s ease-in-out; +} +.label-default, +.label-secondary { + background-color: rgba(187,187,187,0.25); +} +.label-primary { + background-color: rgba(183,160,224,0.25); +} +.label-info { + background-color: rgba(160,197,228,0.25); +} +.label-success { + background-color: rgba(174,220,174,0.25); +} +.label-warning { + background-color: rgba(248,214,166,0.25); +} +.label-danger { + background-color: rgba(236,169,167,0.25); +} +.markdown-body .btn { + border: 1px solid var(--line-color); + background-color: var(--button-bg-color); + color: var(--text-color); + transition: color 0.2s ease-in-out, background 0.2s ease-in-out, border-color 0.2s ease-in-out; + border-radius: 0.25rem; + display: inline-block; + font-size: 0.875em; + line-height: 2; + padding: 0 0.75rem; + margin-bottom: 1rem; +} +.markdown-body .btn:hover { + background-color: var(--button-hover-bg-color); + text-decoration: none; +} +.group-image-container { + margin: 1.5rem auto; +} +.group-image-container img { + margin: 0 auto; + border-radius: 3px; + background-color: transparent; + box-shadow: 0 3px 9px 0 rgba(0,0,0,0.15), 0 3px 9px 0 rgba(0,0,0,0.15); +} +.group-image-row { + margin-bottom: 0.5rem; + display: flex; + justify-content: center; +} +.group-image-wrap { + flex: 1; + display: flex; + justify-content: center; +} +.group-image-wrap:not(:last-child) { + margin-right: 0.25rem; +} +input[type=checkbox] { + margin: 0 0.2em 0.2em 0; + vertical-align: middle; +} +.list-group a ~ p.h5 { + margin-top: 1rem; +} +.list-group-item { + display: flex; + background-color: transparent; + border: 0; +} +.list-group-item time { + flex: 0 0 5rem; +} +.list-group-item .list-group-item-title { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +@media (max-width: 575px) { + .list-group-item { + font-size: 0.95rem; + padding: 0.5rem 0.75rem; + } + .list-group-item time { + flex: 0 0 4rem; + } +} +.list-group-item-action { + color: var(--text-color); +} +.list-group-item-action:focus, +.list-group-item-action:hover { + color: var(--link-hover-color); + background-color: var(--link-hover-bg-color); +} +.about-avatar { + position: relative; + margin: -8rem auto 1rem; + width: 10rem; + height: 10rem; + z-index: 3; +} +.about-avatar img { + width: 100%; + height: 100%; + border-radius: 50%; + background-color: transparent; + object-fit: cover; + box-shadow: 0 2px 5px 0 rgba(0,0,0,0.16), 0 2px 10px 0 rgba(0,0,0,0.12); +} +.about-info > div { + margin-bottom: 0.5rem; +} +.about-name { + font-size: 1.75rem; + font-weight: bold; +} +.about-intro { + font-size: 1rem; +} +.about-icons > a:not(:last-child) { + margin-right: 0.5rem; +} +.about-icons > a > i { + font-size: 1.5rem; +} +.category-bar .category-list { + max-height: 85vh; + overflow-y: auto; + overflow-x: hidden; +} +.category-bar .category-list::-webkit-scrollbar { + display: none; +} +.category-bar .category-list > .category-sub > a { + font-weight: bold; + font-size: 1.2rem; +} +.category-bar .category-list .category-item-action i { + margin: 0; +} +.category-bar .category-list .category-subitem.list-group-item { + padding-left: 0.5rem; + padding-right: 0; +} +.category-bar .category-list .category-collapse .category-post-list { + margin-top: 0.25rem; + margin-bottom: 0.5rem; +} +.category-bar .category-list .category-collapse .category-post { + font-size: 0.9rem; + line-height: 1.75; +} +.category-bar .category-list .category-item-action:hover { + background-color: initial; +} +.category-bar .list-group-item { + padding: 0; +} +.category-bar .list-group-item.active { + color: var(--link-hover-color); + background-color: initial; + font-weight: bold; + font-family: "iconfont"; + font-style: normal; + -webkit-font-smoothing: antialiased; +} +.category-bar .list-group-item.active::before { + content: "\e61f"; + font-weight: initial; + margin-right: 0.25rem; +} +.category-bar .list-group-count { + margin-left: 0.2rem; + margin-right: 0.2rem; + font-size: 0.9em; +} +.category-bar .list-group-item-action:focus, +.category-bar .list-group-item-action:hover { + background-color: initial; +} +.category-chains { + display: flex; + flex-wrap: wrap; +} +.category-chains > *:not(:last-child) { + margin-right: 1em; +} +.category:not(:last-child) { + margin-bottom: 1rem; +} +.category .category-item, +.category .category-subitem { + font-weight: bold; + display: flex; + align-items: center; +} +.category .category-item { + font-size: 1.25rem; +} +.category .category-subitem { + font-size: 1.1rem; +} +.category .category-collapse { + padding-left: 1.25rem; + width: 100%; +} +.category .category-count { + font-size: 0.9rem; + font-weight: initial; + min-width: 1.3em; + line-height: 1.3em; + display: flex; + align-items: center; +} +.category .category-count i { + padding-right: 0.25rem; +} +.category .category-count span { + width: 2rem; +} +.category .category-post { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.category .category-item-action:not(.collapsed) > i { + transform: rotate(90deg); + transform-origin: center center; +} +.category .category-item-action i { + transition: transform 0.3s ease-out; + display: inline-block; + margin-left: 0.25rem; +} +.category .category-item-action .category:hover { + z-index: 1; + color: var(--link-hover-color); + text-decoration: none; + background-color: var(--link-hover-bg-color); +} +.category .row { + margin-left: 0; + margin-right: 0; +} +.tagcloud { + padding: 1rem 5%; +} +.tagcloud a { + display: inline-block; + padding: 0.5rem; +} +.tagcloud a:hover { + color: var(--link-hover-color) !important; +} +.links .card { + box-shadow: none; + min-width: 33%; + background-color: transparent; + border: 0; +} +.links .card-body { + margin: 1rem 0; + padding: 1rem; + border-radius: 0.3rem; + display: block; + width: 100%; + height: 100%; +} +.links .card-body:hover .link-avatar { + transform: scale(1.1); +} +.links .card-content { + display: flex; + flex-wrap: nowrap; + width: 100%; + height: 3.5rem; +} +.link-avatar { + flex: none; + width: 3rem; + height: 3rem; + margin-right: 0.75rem; + object-fit: cover; + transition-duration: 0.2s; + transition-timing-function: ease-in-out; +} +.link-avatar img { + width: 100%; + height: 100%; + border-radius: 50%; + background-color: transparent; + object-fit: cover; +} +.link-text { + flex: 1; + display: grid; + flex-direction: column; + line-height: 1.5; +} +.link-title { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + color: var(--text-color); + font-weight: bold; +} +.link-intro { + max-height: 2rem; + font-size: 0.85rem; + line-height: 1.2; + color: var(--sec-text-color); + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + text-overflow: ellipsis; + overflow: hidden; +} +@media (max-width: 767px) { + .links { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + .links .card { + padding-left: 2rem; + padding-right: 2rem; + } +} +@media (min-width: 768px) { + .link-text:only-child { + margin-left: 1rem; + } +} diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..05f4f75 Binary files /dev/null and b/favicon.ico differ diff --git a/fonts/FontAwesome.otf b/fonts/FontAwesome.otf new file mode 100644 index 0000000..401ec0f Binary files /dev/null and b/fonts/FontAwesome.otf differ diff --git a/fonts/fontawesome-webfont.eot b/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..e9f60ca Binary files /dev/null and b/fonts/fontawesome-webfont.eot differ diff --git a/fonts/fontawesome-webfont.svg b/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..855c845 --- /dev/null +++ b/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fonts/fontawesome-webfont.ttf b/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/fonts/fontawesome-webfont.ttf differ diff --git a/fonts/fontawesome-webfont.woff b/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..400014a Binary files /dev/null and b/fonts/fontawesome-webfont.woff differ diff --git a/fonts/fontawesome-webfont.woff2 b/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..4d13fc6 Binary files /dev/null and b/fonts/fontawesome-webfont.woff2 differ diff --git a/img/avatar.png b/img/avatar.png new file mode 100644 index 0000000..ffd1c77 Binary files /dev/null and b/img/avatar.png differ diff --git a/img/default.png b/img/default.png new file mode 100644 index 0000000..2bc2cd7 Binary files /dev/null and b/img/default.png differ diff --git a/img/fluid.png b/img/fluid.png new file mode 100644 index 0000000..368a58a Binary files /dev/null and b/img/fluid.png differ diff --git a/img/loading.gif b/img/loading.gif new file mode 100644 index 0000000..c5126ed Binary files /dev/null and b/img/loading.gif differ diff --git a/img/police_beian.png b/img/police_beian.png new file mode 100644 index 0000000..60190da Binary files /dev/null and b/img/police_beian.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..5fa111f --- /dev/null +++ b/index.html @@ -0,0 +1,1164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + + + + +
+ + + +
+ +
+ + + +
+ + + +
+ + + +
+ + + + + + + + + + + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/js/boot.js b/js/boot.js new file mode 100644 index 0000000..26c3a1a --- /dev/null +++ b/js/boot.js @@ -0,0 +1,22 @@ +/* global Fluid */ + +Fluid.boot = {}; + +Fluid.boot.registerEvents = function() { + Fluid.events.billboard(); + Fluid.events.registerNavbarEvent(); + Fluid.events.registerParallaxEvent(); + Fluid.events.registerScrollDownArrowEvent(); + Fluid.events.registerScrollTopArrowEvent(); + Fluid.events.registerImageLoadedEvent(); +}; + +Fluid.boot.refresh = function() { + Fluid.plugins.fancyBox(); + Fluid.plugins.codeWidget(); + Fluid.events.refresh(); +}; + +document.addEventListener('DOMContentLoaded', function() { + Fluid.boot.registerEvents(); +}); diff --git a/js/color-schema.js b/js/color-schema.js new file mode 100644 index 0000000..5b1b75c --- /dev/null +++ b/js/color-schema.js @@ -0,0 +1,286 @@ +/* global Fluid */ + +/** + * Modified from https://blog.skk.moe/post/hello-darkmode-my-old-friend/ + */ +(function(window, document) { + var rootElement = document.documentElement; + var colorSchemaStorageKey = 'Fluid_Color_Scheme'; + var colorSchemaMediaQueryKey = '--color-mode'; + var userColorSchemaAttributeName = 'data-user-color-scheme'; + var defaultColorSchemaAttributeName = 'data-default-color-scheme'; + var colorToggleButtonSelector = '#color-toggle-btn'; + var colorToggleIconSelector = '#color-toggle-icon'; + var iframeSelector = 'iframe'; + + function setLS(k, v) { + try { + localStorage.setItem(k, v); + } catch (e) {} + } + + function removeLS(k) { + try { + localStorage.removeItem(k); + } catch (e) {} + } + + function getLS(k) { + try { + return localStorage.getItem(k); + } catch (e) { + return null; + } + } + + function getSchemaFromHTML() { + var res = rootElement.getAttribute(defaultColorSchemaAttributeName); + if (typeof res === 'string') { + return res.replace(/["'\s]/g, ''); + } + return null; + } + + function getSchemaFromCSSMediaQuery() { + var res = getComputedStyle(rootElement).getPropertyValue( + colorSchemaMediaQueryKey + ); + if (typeof res === 'string') { + return res.replace(/["'\s]/g, ''); + } + return null; + } + + function resetSchemaAttributeAndLS() { + rootElement.setAttribute(userColorSchemaAttributeName, getDefaultColorSchema()); + removeLS(colorSchemaStorageKey); + } + + var validColorSchemaKeys = { + dark : true, + light: true + }; + + function getDefaultColorSchema() { + // 取默认字段的值 + var schema = getSchemaFromHTML(); + // 如果明确指定了 schema 则返回 + if (validColorSchemaKeys[schema]) { + return schema; + } + // 默认优先按 prefers-color-scheme + schema = getSchemaFromCSSMediaQuery(); + if (validColorSchemaKeys[schema]) { + return schema; + } + // 否则按本地时间是否大于 18 点或凌晨 0 ~ 6 点 + var hours = new Date().getHours(); + if (hours >= 18 || (hours >= 0 && hours <= 6)) { + return 'dark'; + } + return 'light'; + } + + function applyCustomColorSchemaSettings(schema) { + // 接受从「开关」处传来的模式,或者从 localStorage 读取,否则按默认设置值 + var current = schema || getLS(colorSchemaStorageKey) || getDefaultColorSchema(); + + if (current === getDefaultColorSchema()) { + // 当用户切换的显示模式和默认模式相同时,则恢复为自动模式 + resetSchemaAttributeAndLS(); + } else if (validColorSchemaKeys[current]) { + rootElement.setAttribute( + userColorSchemaAttributeName, + current + ); + } else { + // 特殊情况重置 + resetSchemaAttributeAndLS(); + return; + } + + // 根据当前模式设置图标 + setButtonIcon(current); + + // 设置代码高亮 + setHighlightCSS(current); + + // 设置其他应用 + setApplications(current); + } + + var invertColorSchemaObj = { + dark : 'light', + light: 'dark' + }; + + function getIconClass(scheme) { + return 'icon-' + scheme; + } + + function toggleCustomColorSchema() { + var currentSetting = getLS(colorSchemaStorageKey); + + if (validColorSchemaKeys[currentSetting]) { + // 从 localStorage 中读取模式,并取相反的模式 + currentSetting = invertColorSchemaObj[currentSetting]; + } else if (currentSetting === null) { + // 当 localStorage 中没有相关值,或者 localStorage 抛了 Error + // 先按照按钮的状态进行切换 + var iconElement = document.querySelector(colorToggleIconSelector); + if (iconElement) { + currentSetting = iconElement.getAttribute('data'); + } + if (!iconElement || !validColorSchemaKeys[currentSetting]) { + // 当 localStorage 中没有相关值,或者 localStorage 抛了 Error,则读取默认值并切换到相反的模式 + currentSetting = invertColorSchemaObj[getSchemaFromCSSMediaQuery()]; + } + } else { + return; + } + // 将相反的模式写入 localStorage + setLS(colorSchemaStorageKey, currentSetting); + + return currentSetting; + } + + function setButtonIcon(schema) { + if (validColorSchemaKeys[schema]) { + // 切换图标 + var icon = getIconClass('dark'); + if (schema) { + icon = getIconClass(schema); + } + var iconElement = document.querySelector(colorToggleIconSelector); + if (iconElement) { + iconElement.setAttribute( + 'class', + 'iconfont ' + icon + ); + iconElement.setAttribute( + 'data', + invertColorSchemaObj[schema] + ); + } else { + // 如果图标不存在则说明图标还没加载出来,等到页面全部加载再尝试切换 + Fluid.utils.waitElementLoaded(colorToggleIconSelector, function() { + var iconElement = document.querySelector(colorToggleIconSelector); + if (iconElement) { + iconElement.setAttribute( + 'class', + 'iconfont ' + icon + ); + iconElement.setAttribute( + 'data', + invertColorSchemaObj[schema] + ); + } + }); + } + if (document.documentElement.getAttribute('data-user-color-scheme')) { + var color = getComputedStyle(document.documentElement).getPropertyValue('--navbar-bg-color').trim() + document.querySelector('meta[name="theme-color"]').setAttribute('content', color) + } + } + } + + function setHighlightCSS(schema) { + // 启用对应的代码高亮的样式 + var lightCss = document.getElementById('highlight-css'); + var darkCss = document.getElementById('highlight-css-dark'); + if (schema === 'dark') { + if (darkCss) { + darkCss.removeAttribute('disabled'); + } + if (lightCss) { + lightCss.setAttribute('disabled', ''); + } + } else { + if (lightCss) { + lightCss.removeAttribute('disabled'); + } + if (darkCss) { + darkCss.setAttribute('disabled', ''); + } + } + + setTimeout(function() { + // 设置代码块组件样式 + document.querySelectorAll('.markdown-body pre').forEach((pre) => { + var cls = Fluid.utils.getBackgroundLightness(pre) >= 0 ? 'code-widget-light' : 'code-widget-dark'; + var widget = pre.querySelector('.code-widget-light, .code-widget-dark'); + if (widget) { + widget.classList.remove('code-widget-light', 'code-widget-dark'); + widget.classList.add(cls); + } + }); + }, 200); + } + + function setApplications(schema) { + // 设置 remark42 评论主题 + if (window.REMARK42) { + window.REMARK42.changeTheme(schema); + } + + // 设置 cusdis 评论主题 + if (window.CUSDIS) { + window.CUSDIS.setTheme(schema); + } + + // 设置 utterances 评论主题 + var utterances = document.querySelector('.utterances-frame'); + if (utterances) { + var utterancesTheme = schema === 'dark' ? window.UtterancesThemeDark : window.UtterancesThemeLight; + const message = { + type : 'set-theme', + theme: utterancesTheme + }; + utterances.contentWindow.postMessage(message, 'https://utteranc.es'); + } + + // 设置 giscus 评论主题 + var giscus = document.querySelector('iframe.giscus-frame'); + if (giscus) { + var giscusTheme = schema === 'dark' ? window.GiscusThemeDark : window.GiscusThemeLight; + const message = { + setConfig: { + theme: giscusTheme, + } + }; + giscus.style.cssText += 'color-scheme: normal;'; + giscus.contentWindow.postMessage({ 'giscus': message }, 'https://giscus.app'); + } + } + + // 当页面加载时,将显示模式设置为 localStorage 中自定义的值(如果有的话) + applyCustomColorSchemaSettings(); + + Fluid.utils.waitElementLoaded(colorToggleIconSelector, function() { + applyCustomColorSchemaSettings(); + var button = document.querySelector(colorToggleButtonSelector); + if (button) { + // 当用户点击切换按钮时,获得新的显示模式、写入 localStorage、并在页面上生效 + button.addEventListener('click', function() { + applyCustomColorSchemaSettings(toggleCustomColorSchema()); + }); + var icon = document.querySelector(colorToggleIconSelector); + if (icon) { + // 光标悬停在按钮上时,切换图标 + button.addEventListener('mouseenter', function() { + var current = icon.getAttribute('data'); + icon.classList.replace(getIconClass(invertColorSchemaObj[current]), getIconClass(current)); + }); + button.addEventListener('mouseleave', function() { + var current = icon.getAttribute('data'); + icon.classList.replace(getIconClass(current), getIconClass(invertColorSchemaObj[current])); + }); + } + } + }); + + Fluid.utils.waitElementLoaded(iframeSelector, function() { + applyCustomColorSchemaSettings(); + }); + +})(window, document); diff --git a/js/events.js b/js/events.js new file mode 100644 index 0000000..bc6b773 --- /dev/null +++ b/js/events.js @@ -0,0 +1,184 @@ +/* global Fluid */ + +HTMLElement.prototype.wrap = function(wrapper) { + this.parentNode.insertBefore(wrapper, this); + this.parentNode.removeChild(this); + wrapper.appendChild(this); +}; + +Fluid.events = { + + registerNavbarEvent: function() { + var navbar = jQuery('#navbar'); + if (navbar.length === 0) { + return; + } + var submenu = jQuery('#navbar .dropdown-menu'); + if (navbar.offset().top > 0) { + navbar.removeClass('navbar-dark'); + submenu.removeClass('navbar-dark'); + } + Fluid.utils.listenScroll(function() { + navbar[navbar.offset().top > 50 ? 'addClass' : 'removeClass']('top-nav-collapse'); + submenu[navbar.offset().top > 50 ? 'addClass' : 'removeClass']('dropdown-collapse'); + if (navbar.offset().top > 0) { + navbar.removeClass('navbar-dark'); + submenu.removeClass('navbar-dark'); + } else { + navbar.addClass('navbar-dark'); + submenu.removeClass('navbar-dark'); + } + }); + jQuery('#navbar-toggler-btn').on('click', function() { + jQuery('.animated-icon').toggleClass('open'); + jQuery('#navbar').toggleClass('navbar-col-show'); + }); + }, + + registerParallaxEvent: function() { + var ph = jQuery('#banner[parallax="true"]'); + if (ph.length === 0) { + return; + } + var board = jQuery('#board'); + if (board.length === 0) { + return; + } + var parallax = function() { + var pxv = jQuery(window).scrollTop() / 5; + var offset = parseInt(board.css('margin-top'), 10); + var max = 96 + offset; + if (pxv > max) { + pxv = max; + } + ph.css({ + transform: 'translate3d(0,' + pxv + 'px,0)' + }); + var sideCol = jQuery('.side-col'); + if (sideCol) { + sideCol.css({ + 'padding-top': pxv + 'px' + }); + } + }; + Fluid.utils.listenScroll(parallax); + }, + + registerScrollDownArrowEvent: function() { + var scrollbar = jQuery('.scroll-down-bar'); + if (scrollbar.length === 0) { + return; + } + scrollbar.on('click', function() { + Fluid.utils.scrollToElement('#board', -jQuery('#navbar').height()); + }); + }, + + registerScrollTopArrowEvent: function() { + var topArrow = jQuery('#scroll-top-button'); + if (topArrow.length === 0) { + return; + } + var board = jQuery('#board'); + if (board.length === 0) { + return; + } + var posDisplay = false; + var scrollDisplay = false; + // Position + var setTopArrowPos = function() { + var boardRight = board[0].getClientRects()[0].right; + var bodyWidth = document.body.offsetWidth; + var right = bodyWidth - boardRight; + posDisplay = right >= 50; + topArrow.css({ + 'bottom': posDisplay && scrollDisplay ? '20px' : '-60px', + 'right' : right - 64 + 'px' + }); + }; + setTopArrowPos(); + jQuery(window).resize(setTopArrowPos); + // Display + var headerHeight = board.offset().top; + Fluid.utils.listenScroll(function() { + var scrollHeight = document.body.scrollTop + document.documentElement.scrollTop; + scrollDisplay = scrollHeight >= headerHeight; + topArrow.css({ + 'bottom': posDisplay && scrollDisplay ? '20px' : '-60px' + }); + }); + // Click + topArrow.on('click', function() { + jQuery('body,html').animate({ + scrollTop: 0, + easing : 'swing' + }); + }); + }, + + registerImageLoadedEvent: function() { + if (!('NProgress' in window)) { return; } + + var bg = document.getElementById('banner'); + if (bg) { + var src = bg.style.backgroundImage; + var url = src.match(/\((.*?)\)/)[1].replace(/(['"])/g, ''); + var img = new Image(); + img.onload = function() { + window.NProgress && window.NProgress.inc(0.2); + }; + img.src = url; + if (img.complete) { img.onload(); } + } + + var notLazyImages = jQuery('main img:not([lazyload])'); + var total = notLazyImages.length; + for (const img of notLazyImages) { + const old = img.onload; + img.onload = function() { + old && old(); + window.NProgress && window.NProgress.inc(0.5 / total); + }; + if (img.complete) { img.onload(); } + } + }, + + registerRefreshCallback: function(callback) { + if (!Array.isArray(Fluid.events._refreshCallbacks)) { + Fluid.events._refreshCallbacks = []; + } + Fluid.events._refreshCallbacks.push(callback); + }, + + refresh: function() { + if (Array.isArray(Fluid.events._refreshCallbacks)) { + for (var callback of Fluid.events._refreshCallbacks) { + if (callback instanceof Function) { + callback(); + } + } + } + }, + + billboard: function() { + if (!('console' in window)) { + return; + } + // eslint-disable-next-line no-console + console.log(` +------------------------------------------------- +| | +| ________ __ _ __ | +| |_ __ |[ | (_) | ] | +| | |_ \\_| | | __ _ __ .--.| | | +| | _| | |[ | | | [ |/ /'\`\\' | | +| _| |_ | | | \\_/ |, | || \\__/ | | +| |_____| [___]'.__.'_/[___]'.__.;__] | +| | +| Powered by Hexo x Fluid | +| https://github.com/fluid-dev/hexo-theme-fluid | +| | +------------------------------------------------- + `); + } +}; diff --git a/js/img-lazyload.js b/js/img-lazyload.js new file mode 100644 index 0000000..c0c8e4e --- /dev/null +++ b/js/img-lazyload.js @@ -0,0 +1,10 @@ +/* global Fluid, CONFIG */ + +(function(window, document) { + for (const each of document.querySelectorAll('img[lazyload]')) { + Fluid.utils.waitElementVisible(each, function() { + each.removeAttribute('srcset'); + each.removeAttribute('lazyload'); + }, CONFIG.lazyload.offset_factor); + } +})(window, document); diff --git a/js/leancloud.js b/js/leancloud.js new file mode 100644 index 0000000..ab901ce --- /dev/null +++ b/js/leancloud.js @@ -0,0 +1,192 @@ +/* global CONFIG */ +// eslint-disable-next-line no-console + +(function(window, document) { + // 查询存储的记录 + function getRecord(Counter, target) { + return new Promise(function(resolve, reject) { + Counter('get', '/classes/Counter?where=' + encodeURIComponent(JSON.stringify({ target }))) + .then(resp => resp.json()) + .then(({ results, code, error }) => { + if (code === 401) { + throw error; + } + if (results && results.length > 0) { + var record = results[0]; + resolve(record); + } else { + Counter('post', '/classes/Counter', { target, time: 0 }) + .then(resp => resp.json()) + .then((record, error) => { + if (error) { + throw error; + } + resolve(record); + }).catch(error => { + console.error('Failed to create: ', error); + reject(error); + }); + } + }).catch((error) => { + console.error('LeanCloud Counter Error: ', error); + reject(error); + }); + }); + } + + // 发起自增请求 + function increment(Counter, incrArr) { + return new Promise(function(resolve, reject) { + Counter('post', '/batch', { + 'requests': incrArr + }).then((res) => { + res = res.json(); + if (res.error) { + throw res.error; + } + resolve(res); + }).catch((error) => { + console.error('Failed to save visitor count: ', error); + reject(error); + }); + }); + } + + // 构建自增请求体 + function buildIncrement(objectId) { + return { + 'method': 'PUT', + 'path' : `/1.1/classes/Counter/${objectId}`, + 'body' : { + 'time': { + '__op' : 'Increment', + 'amount': 1 + } + } + }; + } + + // 校验是否为有效的 Host + function validHost() { + if (CONFIG.web_analytics.leancloud.ignore_local) { + var hostname = window.location.hostname; + if (hostname === 'localhost' || hostname === '127.0.0.1') { + return false; + } + } + return true; + } + + // 校验是否为有效的 UV + function validUV() { + var key = 'LeanCloud_UV_Flag'; + var flag = localStorage.getItem(key); + if (flag) { + // 距离标记小于 24 小时则不计为 UV + if (new Date().getTime() - parseInt(flag, 10) <= 86400000) { + return false; + } + } + localStorage.setItem(key, new Date().getTime().toString()); + return true; + } + + function addCount(Counter) { + var enableIncr = CONFIG.web_analytics.enable && !Fluid.ctx.dnt && validHost(); + var getterArr = []; + var incrArr = []; + + // 请求 PV 并自增 + var pvCtn = document.querySelector('#leancloud-site-pv-container'); + if (pvCtn) { + var pvGetter = getRecord(Counter, 'site-pv').then((record) => { + enableIncr && incrArr.push(buildIncrement(record.objectId)); + var ele = document.querySelector('#leancloud-site-pv'); + if (ele) { + ele.innerText = (record.time || 0) + (enableIncr ? 1 : 0); + pvCtn.style.display = 'inline'; + } + }); + getterArr.push(pvGetter); + } + + // 请求 UV 并自增 + var uvCtn = document.querySelector('#leancloud-site-uv-container'); + if (uvCtn) { + var uvGetter = getRecord(Counter, 'site-uv').then((record) => { + var incrUV = validUV() && enableIncr; + incrUV && incrArr.push(buildIncrement(record.objectId)); + var ele = document.querySelector('#leancloud-site-uv'); + if (ele) { + ele.innerText = (record.time || 0) + (incrUV ? 1 : 0); + uvCtn.style.display = 'inline'; + } + }); + getterArr.push(uvGetter); + } + + // 如果有页面浏览数节点,则请求浏览数并自增 + var viewCtn = document.querySelector('#leancloud-page-views-container'); + if (viewCtn) { + var path = eval(CONFIG.web_analytics.leancloud.path || 'window.location.pathname'); + var target = decodeURI(path.replace(/\/*(index.html)?$/, '/')); + var viewGetter = getRecord(Counter, target).then((record) => { + enableIncr && incrArr.push(buildIncrement(record.objectId)); + var ele = document.querySelector('#leancloud-page-views'); + if (ele) { + ele.innerText = (record.time || 0) + (enableIncr ? 1 : 0); + viewCtn.style.display = 'inline'; + } + }); + getterArr.push(viewGetter); + } + + // 如果启动计数自增,批量发起自增请求 + if (enableIncr) { + Promise.all(getterArr).then(() => { + incrArr.length > 0 && increment(Counter, incrArr); + }); + } + } + + var appId = CONFIG.web_analytics.leancloud.app_id; + var appKey = CONFIG.web_analytics.leancloud.app_key; + var serverUrl = CONFIG.web_analytics.leancloud.server_url; + + if (!appId) { + throw new Error('LeanCloud appId is empty'); + } + if (!appKey) { + throw new Error('LeanCloud appKey is empty'); + } + + function fetchData(api_server) { + var Counter = (method, url, data) => { + return fetch(`${api_server}/1.1${url}`, { + method, + headers: { + 'X-LC-Id' : appId, + 'X-LC-Key' : appKey, + 'Content-Type': 'application/json' + }, + body: JSON.stringify(data) + }); + }; + + addCount(Counter); + } + + var apiServer = serverUrl || `https://${appId.slice(0, 8).toLowerCase()}.api.lncldglobal.com`; + + if (apiServer) { + fetchData(apiServer); + } else { + fetch('https://app-router.leancloud.cn/2/route?appId=' + appId) + .then(resp => resp.json()) + .then((data) => { + if (data.api_server) { + fetchData('https://' + data.api_server); + } + }); + } +})(window, document); diff --git a/js/local-search.js b/js/local-search.js new file mode 100644 index 0000000..0784a80 --- /dev/null +++ b/js/local-search.js @@ -0,0 +1,159 @@ +/* global CONFIG */ + +(function() { + // Modified from [hexo-generator-search](https://github.com/wzpan/hexo-generator-search) + function localSearchFunc(path, searchSelector, resultSelector) { + 'use strict'; + // 0x00. environment initialization + var $input = jQuery(searchSelector); + var $result = jQuery(resultSelector); + + if ($input.length === 0) { + // eslint-disable-next-line no-console + throw Error('No element selected by the searchSelector'); + } + if ($result.length === 0) { + // eslint-disable-next-line no-console + throw Error('No element selected by the resultSelector'); + } + + if ($result.attr('class').indexOf('list-group-item') === -1) { + $result.html('
Loading...

Loading...
'); + } + + jQuery.ajax({ + // 0x01. load xml file + url : path, + dataType: 'xml', + success : function(xmlResponse) { + // 0x02. parse xml file + var dataList = jQuery('entry', xmlResponse).map(function() { + return { + title : jQuery('title', this).text(), + content: jQuery('content', this).text(), + url : jQuery('url', this).text() + }; + }).get(); + + if ($result.html().indexOf('list-group-item') === -1) { + $result.html(''); + } + + $input.on('input', function() { + // 0x03. parse query to keywords list + var content = $input.val(); + var resultHTML = ''; + var keywords = content.trim().toLowerCase().split(/[\s-]+/); + $result.html(''); + if (content.trim().length <= 0) { + return $input.removeClass('invalid').removeClass('valid'); + } + // 0x04. perform local searching + dataList.forEach(function(data) { + var isMatch = true; + if (!data.title || data.title.trim() === '') { + data.title = 'Untitled'; + } + var orig_data_title = data.title.trim(); + var data_title = orig_data_title.toLowerCase(); + var orig_data_content = data.content.trim().replace(/<[^>]+>/g, ''); + var data_content = orig_data_content.toLowerCase(); + var data_url = data.url; + var index_title = -1; + var index_content = -1; + var first_occur = -1; + // Skip matching when content is included in search and content is empty + if (CONFIG.include_content_in_search && data_content === '') { + isMatch = false; + } else { + keywords.forEach(function (keyword, i) { + index_title = data_title.indexOf(keyword); + index_content = data_content.indexOf(keyword); + + if (index_title < 0 && index_content < 0) { + isMatch = false; + } else { + if (index_content < 0) { + index_content = 0; + } + if (i === 0) { + first_occur = index_content; + } + } + }); + } + // 0x05. show search results + if (isMatch) { + resultHTML += '' + orig_data_title + ''; + var content = orig_data_content; + if (first_occur >= 0) { + // cut out 100 characters + var start = first_occur - 20; + var end = first_occur + 80; + + if (start < 0) { + start = 0; + } + + if (start === 0) { + end = 100; + } + + if (end > content.length) { + end = content.length; + } + + var match_content = content.substring(start, end); + + // highlight all keywords + keywords.forEach(function(keyword) { + var regS = new RegExp(keyword, 'gi'); + match_content = match_content.replace(regS, '' + keyword + ''); + }); + + resultHTML += '

' + match_content + '...

'; + } + } + }); + if (resultHTML.indexOf('list-group-item') === -1) { + return $input.addClass('invalid').removeClass('valid'); + } + $input.addClass('valid').removeClass('invalid'); + $result.html(resultHTML); + }); + } + }); + } + + function localSearchReset(searchSelector, resultSelector) { + 'use strict'; + var $input = jQuery(searchSelector); + var $result = jQuery(resultSelector); + + if ($input.length === 0) { + // eslint-disable-next-line no-console + throw Error('No element selected by the searchSelector'); + } + if ($result.length === 0) { + // eslint-disable-next-line no-console + throw Error('No element selected by the resultSelector'); + } + + $input.val('').removeClass('invalid').removeClass('valid'); + $result.html(''); + } + + var modal = jQuery('#modalSearch'); + var searchSelector = '#local-search-input'; + var resultSelector = '#local-search-result'; + modal.on('show.bs.modal', function() { + var path = CONFIG.search_path || '/local-search.xml'; + localSearchFunc(path, searchSelector, resultSelector); + }); + modal.on('shown.bs.modal', function() { + jQuery('#local-search-input').focus(); + }); + modal.on('hidden.bs.modal', function() { + localSearchReset(searchSelector, resultSelector); + }); +})(); diff --git a/js/plugins.js b/js/plugins.js new file mode 100644 index 0000000..2a364b0 --- /dev/null +++ b/js/plugins.js @@ -0,0 +1,164 @@ +/* global Fluid, CONFIG */ + +HTMLElement.prototype.wrap = function(wrapper) { + this.parentNode.insertBefore(wrapper, this); + this.parentNode.removeChild(this); + wrapper.appendChild(this); +}; + +Fluid.plugins = { + + typing: function(text) { + if (!('Typed' in window)) { return; } + + var typed = new window.Typed('#subtitle', { + strings: [ + ' ', + text + ], + cursorChar: CONFIG.typing.cursorChar, + typeSpeed : CONFIG.typing.typeSpeed, + loop : CONFIG.typing.loop + }); + typed.stop(); + var subtitle = document.getElementById('subtitle'); + if (subtitle) { + subtitle.innerText = ''; + } + jQuery(document).ready(function() { + typed.start(); + }); + }, + + fancyBox: function(selector) { + if (!CONFIG.image_zoom.enable || !('fancybox' in jQuery)) { return; } + + jQuery(selector || '.markdown-body :not(a) > img, .markdown-body > img').each(function() { + var $image = jQuery(this); + var imageUrl = $image.attr('data-src') || $image.attr('src') || ''; + if (CONFIG.image_zoom.img_url_replace) { + var rep = CONFIG.image_zoom.img_url_replace; + var r1 = rep[0] || ''; + var r2 = rep[1] || ''; + if (r1) { + if (/^re:/.test(r1)) { + r1 = r1.replace(/^re:/, ''); + var reg = new RegExp(r1, 'gi'); + imageUrl = imageUrl.replace(reg, r2); + } else { + imageUrl = imageUrl.replace(r1, r2); + } + } + } + var $imageWrap = $image.wrap(` + ` + ).parent('a'); + if ($imageWrap.length !== 0) { + if ($image.is('.group-image-container img')) { + $imageWrap.attr('data-fancybox', 'group').attr('rel', 'group'); + } else { + $imageWrap.attr('data-fancybox', 'default').attr('rel', 'default'); + } + + var imageTitle = $image.attr('title') || $image.attr('alt'); + if (imageTitle) { + $imageWrap.attr('title', imageTitle).attr('data-caption', imageTitle); + } + } + }); + + jQuery.fancybox.defaults.hash = false; + jQuery('.fancybox').fancybox({ + loop : true, + helpers: { + overlay: { + locked: false + } + } + }); + }, + + imageCaption: function(selector) { + if (!CONFIG.image_caption.enable) { return; } + + jQuery(selector || `.markdown-body > p > img, .markdown-body > figure > img, + .markdown-body > p > a.fancybox, .markdown-body > figure > a.fancybox`).each(function() { + var $target = jQuery(this); + var $figcaption = $target.next('figcaption'); + if ($figcaption.length !== 0) { + $figcaption.addClass('image-caption'); + } else { + var imageTitle = $target.attr('title') || $target.attr('alt'); + if (imageTitle) { + $target.after(``); + } + } + }); + }, + + codeWidget() { + var enableLang = CONFIG.code_language.enable && CONFIG.code_language.default; + var enableCopy = CONFIG.copy_btn && 'ClipboardJS' in window; + if (!enableLang && !enableCopy) { + return; + } + + function getBgClass(ele) { + return Fluid.utils.getBackgroundLightness(ele) >= 0 ? 'code-widget-light' : 'code-widget-dark'; + } + + var copyTmpl = ''; + copyTmpl += '
'; + copyTmpl += 'LANG'; + copyTmpl += '
'; + jQuery('.markdown-body pre').each(function() { + var $pre = jQuery(this); + if ($pre.find('code.mermaid').length > 0) { + return; + } + if ($pre.find('span.line').length > 0) { + return; + } + + var lang = ''; + + if (enableLang) { + lang = CONFIG.code_language.default; + if ($pre[0].children.length > 0 && $pre[0].children[0].classList.length >= 2 && $pre.children().hasClass('hljs')) { + lang = $pre[0].children[0].classList[1]; + } else if ($pre[0].getAttribute('data-language')) { + lang = $pre[0].getAttribute('data-language'); + } else if ($pre.parent().hasClass('sourceCode') && $pre[0].children.length > 0 && $pre[0].children[0].classList.length >= 2) { + lang = $pre[0].children[0].classList[1]; + $pre.parent().addClass('code-wrapper'); + } else if ($pre.parent().hasClass('markdown-body') && $pre[0].classList.length === 0) { + $pre.wrap('
'); + } + lang = lang.toUpperCase().replace('NONE', CONFIG.code_language.default); + } + $pre.append(copyTmpl.replace('LANG', lang).replace('code-widget">', + getBgClass($pre[0]) + (enableCopy ? ' code-widget copy-btn" data-clipboard-snippet>' : ' code-widget">'))); + + if (enableCopy) { + var clipboard = new ClipboardJS('.copy-btn', { + target: function(trigger) { + var nodes = trigger.parentNode.childNodes; + for (var i = 0; i < nodes.length; i++) { + if (nodes[i].tagName === 'CODE') { + return nodes[i]; + } + } + } + }); + clipboard.on('success', function(e) { + e.clearSelection(); + e.trigger.innerHTML = e.trigger.innerHTML.replace('icon-copy', 'icon-success'); + setTimeout(function() { + e.trigger.innerHTML = e.trigger.innerHTML.replace('icon-success', 'icon-copy'); + }, 2000); + }); + } + }); + } +}; diff --git a/js/utils.js b/js/utils.js new file mode 100644 index 0000000..d61bc26 --- /dev/null +++ b/js/utils.js @@ -0,0 +1,245 @@ +/* global Fluid, CONFIG */ + +window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame; + +Fluid.utils = { + + listenScroll: function(callback) { + var dbc = new Debouncer(callback); + window.addEventListener('scroll', dbc, false); + dbc.handleEvent(); + return dbc; + }, + + unlistenScroll: function(callback) { + window.removeEventListener('scroll', callback); + }, + + listenDOMLoaded(callback) { + if (document.readyState !== 'loading') { + callback(); + } else { + document.addEventListener('DOMContentLoaded', function () { + callback(); + }); + } + }, + + scrollToElement: function(target, offset) { + var of = jQuery(target).offset(); + if (of) { + jQuery('html,body').animate({ + scrollTop: of.top + (offset || 0), + easing : 'swing' + }); + } + }, + + elementVisible: function(element, offsetFactor) { + offsetFactor = offsetFactor && offsetFactor >= 0 ? offsetFactor : 0; + var rect = element.getBoundingClientRect(); + const viewportHeight = window.innerHeight || document.documentElement.clientHeight; + return ( + (rect.top >= 0 && rect.top <= viewportHeight * (1 + offsetFactor) + rect.height / 2) || + (rect.bottom >= 0 && rect.bottom <= viewportHeight * (1 + offsetFactor) + rect.height / 2) + ); + }, + + waitElementVisible: function(selectorOrElement, callback, offsetFactor) { + var runningOnBrowser = typeof window !== 'undefined'; + var isBot = (runningOnBrowser && !('onscroll' in window)) + || (typeof navigator !== 'undefined' && /(gle|ing|ro|msn)bot|crawl|spider|yand|duckgo/i.test(navigator.userAgent)); + if (!runningOnBrowser || isBot) { + return; + } + + offsetFactor = offsetFactor && offsetFactor >= 0 ? offsetFactor : 0; + + function waitInViewport(element) { + Fluid.utils.listenDOMLoaded(function() { + if (Fluid.utils.elementVisible(element, offsetFactor)) { + callback(); + return; + } + if ('IntersectionObserver' in window) { + var io = new IntersectionObserver(function(entries, ob) { + if (entries[0].isIntersecting) { + callback(); + ob.disconnect(); + } + }, { + threshold : [0], + rootMargin: (window.innerHeight || document.documentElement.clientHeight) * offsetFactor + 'px' + }); + io.observe(element); + } else { + var wrapper = Fluid.utils.listenScroll(function() { + if (Fluid.utils.elementVisible(element, offsetFactor)) { + Fluid.utils.unlistenScroll(wrapper); + callback(); + } + }); + } + }); + } + + if (typeof selectorOrElement === 'string') { + this.waitElementLoaded(selectorOrElement, function(element) { + waitInViewport(element); + }); + } else { + waitInViewport(selectorOrElement); + } + }, + + waitElementLoaded: function(selector, callback) { + var runningOnBrowser = typeof window !== 'undefined'; + var isBot = (runningOnBrowser && !('onscroll' in window)) + || (typeof navigator !== 'undefined' && /(gle|ing|ro|msn)bot|crawl|spider|yand|duckgo/i.test(navigator.userAgent)); + if (!runningOnBrowser || isBot) { + return; + } + + if ('MutationObserver' in window) { + var mo = new MutationObserver(function(records, ob) { + var ele = document.querySelector(selector); + if (ele) { + callback(ele); + ob.disconnect(); + } + }); + mo.observe(document, { childList: true, subtree: true }); + } else { + Fluid.utils.listenDOMLoaded(function() { + var waitLoop = function() { + var ele = document.querySelector(selector); + if (ele) { + callback(ele); + } else { + setTimeout(waitLoop, 100); + } + }; + waitLoop(); + }); + } + }, + + createScript: function(url, onload) { + var s = document.createElement('script'); + s.setAttribute('src', url); + s.setAttribute('type', 'text/javascript'); + s.setAttribute('charset', 'UTF-8'); + s.async = false; + if (typeof onload === 'function') { + if (window.attachEvent) { + s.onreadystatechange = function() { + var e = s.readyState; + if (e === 'loaded' || e === 'complete') { + s.onreadystatechange = null; + onload(); + } + }; + } else { + s.onload = onload; + } + } + var ss = document.getElementsByTagName('script'); + var e = ss.length > 0 ? ss[ss.length - 1] : document.head || document.documentElement; + e.parentNode.insertBefore(s, e.nextSibling); + }, + + createCssLink: function(url) { + var l = document.createElement('link'); + l.setAttribute('rel', 'stylesheet'); + l.setAttribute('type', 'text/css'); + l.setAttribute('href', url); + var e = document.getElementsByTagName('link')[0] + || document.getElementsByTagName('head')[0] + || document.head || document.documentElement; + e.parentNode.insertBefore(l, e); + }, + + loadComments: function(selector, loadFunc) { + var ele = document.querySelector('#comments[lazyload]'); + if (ele) { + var callback = function() { + loadFunc(); + ele.removeAttribute('lazyload'); + }; + Fluid.utils.waitElementVisible(selector, callback, CONFIG.lazyload.offset_factor); + } else { + loadFunc(); + } + }, + + getBackgroundLightness(selectorOrElement) { + var ele = selectorOrElement; + if (typeof selectorOrElement === 'string') { + ele = document.querySelector(selectorOrElement); + } + var view = ele.ownerDocument.defaultView; + if (!view) { + view = window; + } + var rgbArr = view.getComputedStyle(ele).backgroundColor.replace(/rgba*\(/, '').replace(')', '').split(/,\s*/); + if (rgbArr.length < 3) { + return 0; + } + var colorCast = (0.213 * rgbArr[0]) + (0.715 * rgbArr[1]) + (0.072 * rgbArr[2]); + return colorCast === 0 || colorCast > 255 / 2 ? 1 : -1; + }, + + retry(handler, interval, times) { + if (times <= 0) { + return; + } + var next = function() { + if (--times >= 0 && !handler()) { + setTimeout(next, interval); + } + }; + setTimeout(next, interval); + } + +}; + +/** + * Handles debouncing of events via requestAnimationFrame + * @see http://www.html5rocks.com/en/tutorials/speed/animations/ + * @param {Function} callback The callback to handle whichever event + */ +function Debouncer(callback) { + this.callback = callback; + this.ticking = false; +} + +Debouncer.prototype = { + constructor: Debouncer, + + /** + * dispatches the event to the supplied callback + * @private + */ + update: function() { + this.callback && this.callback(); + this.ticking = false; + }, + + /** + * ensures events don't get stacked + * @private + */ + requestTick: function() { + if (!this.ticking) { + requestAnimationFrame(this.rafCallback || (this.rafCallback = this.update.bind(this))); + this.ticking = true; + } + }, + + /** + * Attach this as the event listeners + */ + handleEvent: function() { + this.requestTick(); + } +}; diff --git a/links/index.html b/links/index.html new file mode 100644 index 0000000..d48c85a --- /dev/null +++ b/links/index.html @@ -0,0 +1,605 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 友链 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + + + + + +
+

在下方留言申请加入我的友链,按如下格式提供信息:

  • 名称:Pdone's Blog
  • 简介:Only Peace & Love Here
  • 地址:https://awaw.cc
  • 头像:https://awaw.cc/avatar.jpg
+
+ + + + + +
+ +
+ + + + +
+ + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/loading.svg b/loading.svg new file mode 100644 index 0000000..6439b34 --- /dev/null +++ b/loading.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/local-search.xml b/local-search.xml new file mode 100644 index 0000000..5da9e00 --- /dev/null +++ b/local-search.xml @@ -0,0 +1,871 @@ + + + + + + + 奇思妙想💭 + + /post/whimsy/ + +

想象

想象中的黑洞

在造物主的奇妙创造中,智慧生命被孕育而生,被赋予了独特的使命。一部分智慧生命被委派为造物主的助手,肩负着神圣的使命,辅助他完成众多事务。然而,其他的智慧生命则被放置在宇宙沙盒之中,这个神秘的沙盒划分成了无数个对照组,每个对照组即如同一个平行宇宙。

尽管这些平行宇宙共享着相同的宇宙环境,但造物主巧妙地设置了一种绝妙的隔离机制,使得不同对照组之间相互孤立,有如我们所熟知的虚拟机。每个对照组的智慧生命都在自己独特的条件下发展和进化,彼此并不感知对方的存在,仿佛分居于各自的宇宙之中。

造物主寄望于观察自己创造的智慧生命在多样条件下的发展轨迹。然而,为了避免智慧生命的过快发展而导致自我毁灭,他睿智地赋予了它们有限的寿命。这样一来,生命将在有限的时间内经历成长、繁荣与变化,却不至于过早迎来终结。

基于这个精妙的构思,人类注定永远无法自行发现存在于其他平行宇宙中的外星生命——即使是与我们自身相似的存在。除非造物主以某种形式干预,揭示了这些神秘生命的存在。这样的干预可能是一个宏大的奇迹,或者是一连串微妙的迹象,引导我们开始怀疑我们不是宇宙中唯一的智慧生命。

在这美妙而神秘的创世之旅中,我们不妨保持谦卑和好奇,探索宇宙和生命的奥秘,也许在某一刻,我们会获得关于我们自身存在意义的更深刻认知。

扩展

让我们继续扩展这个设想,将其构建成一个虚构的宇宙场景。

星云

在这个造物主创造的宇宙沙盒中,有许多平行宇宙(对照组),每个宇宙都是一个独特的实验场景。每个实验场景都有不同的初始条件和规则,从微观层面到宏观层面都存在微妙的差异,以产生各种可能性。

在月球表面看地球

  • 宇宙的初始条件:每个宇宙都有自己独特的初始条件。有些可能具有更多的自然资源和生态平衡,而另一些可能在资源稀缺和环境恶劣的情况下开始。

  • 生命的诞生:在每个宇宙中,生命以各种形式诞生。从单细胞生物到复杂的多细胞生物,从植物到动物,各种形态的生命在不同的宇宙中演化。

  • 有限的寿命:造物主赋予智慧生命有限的寿命,以避免其发展过快而自我毁灭。这使得智慧生命需要理性和谨慎对待资源和科技的发展,以延续自己的文明。

  • 智慧生命的出现:在某些宇宙中,智慧生命可能会逐渐出现。他们会经历进化、文明的崛起和科技的发展。不同宇宙中智慧生命的特点和文明水平可能千差万别。

  • 宇宙沙盒中的对照组:这些对照组可能不仅包括类似地球的情景,也包括完全不同的星球和宇宙结构。有些对照组中可能存在比地球上更高级的生物形式,也有可能有完全不同类型的智慧生命。

  • 交互与隔离:虽然这些宇宙共享相似的宇宙环境,但造物主将它们隔离开来,避免相互干扰,以保持实验的独立性。智慧生命之间并不知道其他宇宙的存在,让他们自主发展。

  • 观察和干预:造物主时不时地观察不同对照组中智慧生命的进展,他们也许通过超自然手段对这些对照组进行干预,但也可能仅是静观其变。

  • 生命的进化与文明:不同对照组中的智慧生命会经历不同的进化历程和文明发展。有些对照组的文明可能迅速崛起,创造出强大的科技和社会结构,而另一些对照组可能在原始阶段停滞不前。

  • 实验的结果:每个宇宙的结果都是独一无二的。有些宇宙的智慧生命可能因为资源利用不当或自相残杀而灭亡。而另一些宇宙的智慧生命可能会团结合作,探索宇宙的奥秘,并达到一个高度先进的文明。

  • 自行发现外星人的难题:基于设定中的隔离和宇宙沙盒的概念,人类在自然条件下可能难以自行发现其他对照组中的外星文明。这是因为这些对照组是相互隔离的,彼此无法直接联系。除非造物主进行干预或解除隔离,否则人类可能永远不会直接接触其他宇宙中的外星文明。

这样的设想,将宇宙看作一个巨大的实验室,造物主作为超自然的存在,掌控着这个宏伟的观察与实验计划。在这个设定下,人类和其他智慧生命都是宇宙中的一部分,我们的存在和发展也可能是造物主实验的一部分。

同时也为我们提供了一种有趣的哲学思考,让我们思考宇宙的无限可能性以及我们作为智慧生命的存在和发展。虽然这只是一个设想,但它为我们提供了一种探索未知和宇宙奥秘的视角。

类比

当我们将老鼠乌托邦(25号宇宙)实验的结果与上文观点相结合,可以得到一些有趣的启示和类比。

老鼠乌托邦实验

  • 在上文设想中,造物主创造了智慧生命并观察他们在宇宙中的发展。类似地,老鼠乌托邦实验也是一个观察社会动物(老鼠)在特定条件下的发展。这两者都是通过在特定环境中设定条件和规则来探索生命的进化和行为。

  • 有限的资源:在老鼠乌托邦实验中,随着人口密度的增加,资源的竞争变得更为激烈。类似地,在上文观点中,造物主给予生命有限的资源,可能是为了观察智慧生命如何在资源有限的情况下适应和发展。

  • 社会结构与动力:实验中老鼠群体的社会结构出现了退化和混乱,而在上文设想中,智慧生命也可能面临类似的挑战。人类社会中也存在着资源竞争、社会不平等和文明冲突等问题,而这些因素可能影响文明的发展和社会动力。

  • 行为沮丧:老鼠乌托邦实验中,高度拥挤和资源过剩的环境导致了老鼠社会的异常行为,这类似于上文观点中对于发展太快可能导致自行灭亡的担忧。这个类比可能引发我们对于人类社会中过度竞争、资源过剩和社会动态的反思。

  • 自我调整和适应:在实验和上文设想中,动物和智慧生命都面临着适应环境和资源限制的挑战。在类似于乌托邦实验中,老鼠群体可能最终自我调整或消亡,而在上文设想中的智慧生命可能会逐渐适应和发展,寻找合适的平衡。

通过将老鼠乌托邦实验与上文观点相结合,我们可以从一个不同的角度思考社会动物和智慧生命在特定环境下的行为和进化。这样的类比提醒我们在探讨人类社会和文明发展的同时,也要关注资源的合理分配、社会结构的稳定和适应环境的能力。同时,也让我们思考造物主设立这样的实验是否旨在观察智慧生命如何面对类似挑战,以及从中获取对于宇宙和生命的更深刻理解。

注:以上内容源于想象和假设。

]]>
+ + + + + Share + + + + + + + Whimsy + + + +
+ + + + + 短链接服务Octopus的实现与源码开放 + + /post/whats-short-link/ + + 一直想实现一个私有化的短链接服务,后来发现了这个项目,避免了重复造轮子。

前提

半年前(2020-06)左右,疫情触底反弹,公司的业务量不断提升,运营部门为了方便短信、模板消息推送等渠道的投放,提出了一个把长链接压缩为短链接的功能需求。当时为了快速推广,使用了一些比较知名的第三方短链压缩平台,存在一些问题:

  • 收费贵
  • 一些情况下,短链域名在部分第三方平台例如微信会被封杀
  • 回源数据没有办法定制处理方案,无法打通整个业务链路进行数据分析和跟踪

基于此类问题,决定自研一个(长链接压缩为)短链接服务,当时刚好同步进行微服务拆分,内部很多微服务需要重新命名,组内的一个妹子说不如就用Github的吉祥物去命名octopus cat(章鱼猫)去命名,但是考虑到版权问题,去掉了她最喜欢的猫,剩下章鱼,以octopus命名:

(项目的描述还打错字了,应该是”短链接”)因为实现的功能并不复杂,初版于2020-06月底就发布。octopus的实现参考了互联网中几篇关于”短链服务实现”浏览量比较高的文章,下面从实现原理、服务实现和部署架构等方面展开谈谈。

基本原理

短链服务的核心就是构建短链接和长链接的唯一映射关系,依赖到一个高性能、排列组合数量大而且破解难度大的映射标识生成算法。

构建唯一映射关系

上图是笔者收到的京东白条分期还款结果提醒短信,短信内容也包含了一个短链https://3.cn/j/xxxxxxx,把它拷贝到浏览器中打开,发现客户端会重定向到长链https://jrmkt.jd.com/ptp/wl/vouchers.html?activityId=${activityId}&uep_p=${uep_p}&uep_template_id=${uep_template_id}&uep_timestamp=${uep_timestamp},然后跳入一个H5的登录页,登录后再跳进一个白条攻略页面。这里其实一个长链其实可以压成多个短链,短链可以相同域名,也可以使用不同的域名:

访问https://3.cn/j/xxxxxxx短链接具体的交互流程猜测如下:

jrmkt.jd.com和3.cn查证都是doge东的域名

构建唯一映射关系其实就是基于一个固定的长链接,映射到一个或者多个可以动态生成的短链接,这个唯一映射关系,要求生成的短链接满足:

  • 不容易被破解(使用数字例如数据库的自增主键作为唯一映射标识容易被人遍历出来进行恶意调用)
  • 不能重复(一个短链接只能对应一个长链接,当然一个长链接可以对应多个短链接)
  • 长度尽可能短,这是因为第三方推送的报文内容一般有长度限制,如果短链过长,会导致不容易传输,还会令到推送内容字数受限(试想运营商短信投放内容最大长度为30个字符长度,短链已经占了20个字符长度,剩下只有10个字符长度让运营同事去发挥,显然不合理)
  • 如果链接过长,生成的二维码里面的”码点”会十分密集,不利于客户端识别和传输,刚好笔者公司运营有使用二维码的场景,所以必须尽可能缩短链接的长度

总的来说,这个唯一映射关系中的映射标识需要像Hash算法生成的Hash码那样具备高唯一性和低碰撞频率,同时具备短小易传输的特点,具体如何去生成映射唯一标识见下一节”压缩码生成算法”。

压缩码生成算法

这里的”压缩码”(compression_code)是笔者杜撰出来的名词,在本文中它的含义是短链接URL的路径部分(为了节省长度,除了协议和域名部分,短链的URL只有第一段路径):

其中,协议部分基本是固定为https://(从安全性来看不建议使用http://),短链域名可以购买尽可能长度短的域名如t.cn,不过有先见之明的资本家一般会把所有优质的短域名买下并且把价格提到很高,所以域名的长度基本也是很难控制的因素,剩下可控的就是压缩码部分。压缩码部分是可控的,但因为它是URL的一部分,只要确保所使用的字符不会被URL编码转义,那么长度是人为可控的。假设我们使用的是26个字母的大小写,加上10个数字,那么对于N位压缩码可以表示的最大组合数量为:

  • N = 4,组合数为62 ^ 4 = 14_776_336147万接近148
  • N = 5,组合数为62 ^ 5 = 916_132_8329.16亿左右
  • N = 6,组合数为62 ^ 6 = 56_800_235_584568亿左右

一般来说,组合数越小破解的难度就越小,组合数越大,要求压缩码长度越大,所以常用的长度就是456,而且后期可以对失效的长链进行压缩码回收或者禁用,这三个长度对于绝大对数生产短链的应用场景都能满足。octopus在实现的时候选用的是6位长度的压缩码,无他,因为有现成的成熟的参考方案:62进制数刚好由字符0-9 a-z A-Z组成,生成压缩码的时候,只需要生成一个唯一的10进制数,然后再基于此10进制数转换为62进制数数即可。说到这里,看起来的方案如下:

虚线部分一般依赖一种高效而且低冲突的摘要算法,如MurmurHash,而第(1)步的实线部分就是生成一个全局唯一的10进制序列,常用的手法有:

  • 数据库自增序列(如自增主键)
  • Snowflake算法
  • 自研的类似UUID算法生成全局唯一的序列值

考虑到之前笔者钻研过Snowflake算法的原理,这里简单使用Snowflake算法生成自增序列,使用了下面的流程进行压缩码生成和分配:

因为运用部门对短链生成的批量不大,而且短链域名只有一个,所以简单起见,一次压缩操作直接消耗掉一个压缩码,不考虑不同短链域名对同一个压缩码进行共享,也不考虑压缩码的回收问题

服务实现

短链服务的主访问入口一般QPS极高,因此需要想尽一切办法降低该入口的耗时,考虑可以用Redis做缓存承载入口的流量,基础架构选型如下:

  • JDK1.8+:生产部署使用JDK11
  • MVC框架与容器:spring-boot-starter-webflux或者spring-cloud-gateway,主要是必须使用Netty作为底层通讯容器
  • 内部RPC框架:Dubbo
  • 服务注册与发现:Nacos
  • 可选APM工具:Pinpoint

中间件依赖(因为之前整个服务集群都上云了,低负载的服务共用了部分中间件):

  • MySQL8.x
  • Redis5.x普通主从或者哨兵集群
  • RabbitMQ3.8.x集群,使用镜像队列

服务的设计图如下:

最新的版本考虑把黑白名单的拦截器去掉,替换成一个基于布隆过滤器现实的拦截器。服务使用了两个拦截器(虽然Filter翻译是过滤器,但是出于习惯,下文称为拦截器)链,容器提供的拦截器组成的拦截器链主要是负责服务安全、调用链跟踪的功能,而服务内部自定义的拦截器链主要是实现请求参数解析、URL转换、重定向和异步事件记录等功能。

模块划分:

1
2
3
- (ROOT) octopus
- octopus-contract
- octopus-server

octopus-contract模块必须脱离父POM的管理,方便单独迭代更新。

数据库设计

一共使用了5个表:

具体的初始化DDL如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
CREATE DATABASE `db_octopus` CHARSET 'utf8mb4' COLLATE 'utf8mb4_unicode_520_ci';

USE `db_octopus`;

CREATE TABLE `url_map`
(
`id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`short_url` VARCHAR(32) NOT NULL COMMENT '短链URL',
`long_url` VARCHAR(768) NOT NULL COMMENT '长链URL',
`short_url_digest` VARCHAR(128) NOT NULL COMMENT '短链摘要',
`long_url_digest` VARCHAR(128) NOT NULL COMMENT '长链摘要',
`compression_code` VARCHAR(16) NOT NULL COMMENT '压缩码',
`description` VARCHAR(256) COMMENT '描述',
`url_status` TINYINT NOT NULL DEFAULT 1 COMMENT 'URL状态,1:正常,2:已失效',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`edit_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '创建者',
`editor` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '更新者',
`deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标识',
`version` BIGINT NOT NULL DEFAULT 1 COMMENT '版本号',
UNIQUE uniq_compression_code (`compression_code`),
INDEX idx_short_url (`short_url`),
INDEX idx_short_url_digest (`short_url_digest`),
INDEX idx_long_url_digest (`long_url_digest`)
) COMMENT 'URL映射表';

CREATE TABLE `domain_conf`
(
`id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`domain_value` VARCHAR(16) NOT NULL COMMENT '域名',
`protocol` VARCHAR(8) NOT NULL DEFAULT 'https' COMMENT '协议,https或者http',
`domain_status` TINYINT NOT NULL DEFAULT 1 COMMENT '域名状态,1:正常,2:已失效',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`edit_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '创建者',
`editor` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '更新者',
`deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标识',
`version` BIGINT NOT NULL DEFAULT 1 COMMENT '版本号',
UNIQUE uniq_domain (`domain_value`)
) COMMENT '域名配置';

CREATE TABLE `compression_code`
(
`id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`compression_code` VARCHAR(16) NOT NULL COMMENT '压缩码',
`code_status` TINYINT NOT NULL DEFAULT 1 COMMENT '压缩码状态,1:未使用,2:已使用,3:已失效',
`sequence_value` VARCHAR(64) NOT NULL COMMENT '序列(盐)',
`strategy` VARCHAR(8) NOT NULL DEFAULT 'sequence' COMMENT '策略,sequence或者hash',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`edit_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '创建者',
`editor` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '更新者',
`deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标识',
`version` BIGINT NOT NULL DEFAULT 1 COMMENT '版本号',
UNIQUE uniq_compression_code (`compression_code`)
) COMMENT '压缩码';

CREATE TABLE `visit_statistics`
(
`id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`edit_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '创建者',
`editor` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '更新者',
`deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标识',
`version` BIGINT NOT NULL DEFAULT 1 COMMENT '版本号',
`statistics_date` DATE NOT NULL DEFAULT '1970-01-01' COMMENT '统计日期',
`pv_count` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '页面流量数',
`uv_count` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '独立访客数',
`ip_count` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '独立IP数',
`effective_redirection_count` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '有效跳转数',
`ineffective_redirection_count` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '无效跳转数',
`compression_code` VARCHAR(16) NOT NULL COMMENT '压缩码',
`short_url_digest` VARCHAR(128) NOT NULL COMMENT '短链摘要',
`long_url_digest` VARCHAR(128) NOT NULL COMMENT '长链摘要',
UNIQUE uniq_date_code_digest (`statistics_date`, `compression_code`)
) COMMENT '访问数据统计';

CREATE TABLE `transform_event_record`
(
`id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`edit_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '创建者',
`editor` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '更新者',
`deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标识',
`version` BIGINT NOT NULL DEFAULT 1 COMMENT '版本号',
`unique_identity` VARCHAR(128) NOT NULL COMMENT '唯一身份标识,SHA-1(客户端IP-UA)',
`client_ip` VARCHAR(64) NOT NULL COMMENT '客户端IP',
`short_url` VARCHAR(32) NOT NULL COMMENT '短链URL',
`long_url` VARCHAR(768) NOT NULL COMMENT '长链URL',
`short_url_digest` VARCHAR(128) NOT NULL COMMENT '短链摘要',
`long_url_digest` VARCHAR(128) NOT NULL COMMENT '长链摘要',
`compression_code` VARCHAR(16) NOT NULL COMMENT '压缩码',
`record_time` DATETIME NOT NULL COMMENT '记录时间戳',
`user_agent` VARCHAR(2048) COMMENT 'UA',
`cookie_value` VARCHAR(2048) COMMENT 'cookie',
`query_param` VARCHAR(2048) COMMENT 'URL参数',
`province` VARCHAR(32) COMMENT '省份',
`city` VARCHAR(32) COMMENT '城市',
`phone_type` VARCHAR(64) COMMENT '手机型号',
`browser_type` VARCHAR(64) COMMENT '浏览器类型',
`browser_version` VARCHAR(128) COMMENT '浏览器版本号',
`os_type` VARCHAR(32) COMMENT '操作系统型号',
`device_type` VARCHAR(32) COMMENT '设备型号',
`os_version` VARCHAR(32) COMMENT '操作系统版本号',
`transform_status` TINYINT NOT NULL DEFAULT 0 COMMENT '转换状态,1:转换成功,2:转换失败,3:重定向成功,4:重定向失败',
INDEX idx_record_time (`record_time`),
INDEX idx_compression_code (`compression_code`),
INDEX idx_short_url_digest (`short_url_digest`),
INDEX idx_long_url_digest (`long_url_digest`),
INDEX idx_unique_identity (`unique_identity`)
) COMMENT '转换事件记录';

压缩码生成模块实现

压缩码生成的方法比较简单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private final SequenceGenerator sequenceGenerator;    # <------------- 雪花算法序列生成器
@Value("${compress.code.batch:100}")
private Integer compressCodeBatch;
......


private void generateBatchCompressionCodes() {
for (int i = 0; i < compressCodeBatch; i++) {
long sequence = sequenceGenerator.generate();
CompressionCode compressionCode = new CompressionCode();
compressionCode.setSequenceValue(String.valueOf(sequence));
String code = ConversionUtils.X.encode62(sequence); # <-------------- 10进制转62进制
code = code.substring(code.length() - 6);
compressionCode.setCompressionCode(code);
compressionCodeDao.insertSelective(compressionCode);
}
}

总是批量生成可用的压缩码,查询的时候只需要查出当前未被使用的第一个压缩码即可。

容器拦截器链实现

容器的拦截器需要实现org.springframework.web.server.WebFilterWebFluxFilter接口),主要有四个实现(顺序如下):

  • MappedDiagnosticContextFilter:引入transmittable-thread-local通过MDCTraceId的请求上下文绑定,WebFlux的线程模型和常见的Servlet容器的线程模型不一样,这里不能直接使用ThreadLocal或者Slf4j中原有的MDC实现
  • BlockIpFilter:判断客户端请求IP是否命中黑名单
  • AccessDomainFilter:判断域名是否命中短链域名白名单(可选的,因为外部已经通过NGINX做了一次拦截,这个实现是可有可无的)
  • ExcludeUriFilter:判断当前请求的URI是否命中了URI黑名单

这里简单展示一下MappedDiagnosticContextFilter的实现:

1
2
3
4
5
6
7
8
9
10
11
@Order(value = Integer.MIN_VALUE)
@Component
public class MappedDiagnosticContextFilter implements WebFilter {

@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
String uuid = UUID.randomUUID().toString();
MDC.put("TRACE_ID", uuid);
return chain.filter(exchange).then(Mono.fromRunnable(() -> MDC.remove("TRACE_ID")));
}
}

上面的TRACE_ID是配合项目的logback.xml中的pattern使用。另外需要参考https://github.com/alibaba/transmittable-thread-local/blob/master/docs/requirement-scenario.mdlogbacktransmittable-thread-local做集成的场景:

这里为了方便管理和升级版本,笔者直接把logback-mdc-ttl的源码实现改造好后放到项目中。

服务内部拦截器链实现

服务内部的拦截器链主要负责请求参数解析、URL映射转换、重定向和访问转换结果记录,顶层接口设计如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
public interface TransformFilter {

default int order() {
return 1;
}

default void init(TransformContext context) {

}

void doFilter(TransformFilterChain chain,
TransformContext context);
}

TransformContext是一个属性承载类,本质是一个普通的JavaBean,设计如下:

目前内置了4个拦截器实现,包括:

  • ExtractRequestHeaderTransformFilter:请求头解析
  • UrlTransformFilterURL转换
  • RedirectionTransformFilter:重定向处理
  • TransformEventProcessTransformFilter:转换事件记录

UrlTransformFilter为例子,源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@Slf4j
@Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Component
public class UrlTransformFilter implements TransformFilter {

@Autowired
private UrlMapCacheManager urlMapCacheManager;

@Override
public int order() {
return 2;
}

@Override
public void init(TransformContext context) {

}

@Override
public void doFilter(TransformFilterChain chain,
TransformContext context) {
String compressionCode = context.getCompressionCode();
UrlMap urlMap = urlMapCacheManager.loadUrlMapCacheByCompressCode(compressionCode);
context.setTransformStatus(TransformStatus.TRANSFORM_FAIL);
if (Objects.nonNull(urlMap)) {
context.setTransformStatus(TransformStatus.TRANSFORM_SUCCESS);
context.setParam(TransformContext.PARAM_LONG_URL_KEY, urlMap.getLongUrl());
context.setParam(TransformContext.PARAM_SHORT_URL_KEY, urlMap.getShortUrl());
chain.doFilter(context);
} else {
log.warn("压缩码[{}]不存在或异常,终止TransformFilterChain执行,并且重定向到404页面......", compressionCode);
throw new RedirectToErrorPageException(String.format("[c:%s]", compressionCode));
}
}
}

所有的服务内拦截器的scope都是prototype,意味着每次初始化拦截器链都会重新创建对应的Bean

主控制器实现

因为octopus只做短链访问的入口,后台管理的功能交给另外的服务实现,此服务只有一个控制器,控制器里面只有一个方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@RequiredArgsConstructor
@RestController
public class OctopusController {

private final UrlMapService urlMapService;

@GetMapping(path = "/{compressionCode}")
@ResponseStatus(HttpStatus.FOUND)
public Mono<Void> dispatch(@PathVariable(name = "compressionCode") String compressionCode, ServerWebExchange exchange) {
ServerHttpRequest request = exchange.getRequest();
TransformContext context = new TransformContext();
context.setCompressionCode(compressionCode);
context.setParam(TransformContext.PARAM_SERVER_WEB_EXCHANGE_KEY, exchange);
if (Objects.nonNull(request.getRemoteAddress())) {
context.setParam(TransformContext.PARAM_REMOTE_HOST_NAME_KEY, request.getRemoteAddress().getHostName());
}
HttpHeaders httpHeaders = request.getHeaders();
Set<String> headerNames = httpHeaders.keySet();
if (!CollectionUtils.isEmpty(headerNames)) {
headerNames.forEach(headerName -> {
String headerValue = httpHeaders.getFirst(headerName);
context.setHeader(headerName, headerValue);
});
}
// 处理转换
urlMapService.processTransform(context);
// 这里有一个技巧,flush用到的线程和内部逻辑处理的线程不是同一个线程,所有要用到TTL -- 和Servlet容器不一样,所以目前写的比较别扭
return Mono.fromRunnable(context.getRedirectAction());
}
}

这个主控制的分发压缩码方法只负责封装参数调用服务内部拦截器链进行后续的处理。然后添加一个全局的异常处理器,把所有的异常或者非法操作引导到一个自定义的404页面(甚至可以在上面挂一点广告):

Dubbo契约实现

octopus-contract是一个完全独立的模块,甚至可以说它是一个完全独立的项目,主要作用是提供契约API,让其他服务引入,让octopus-server模块进行实现。契约接口定义如下:

1
2
3
4
public interface OctopusApi {

Response<CreateUrlMapResponse> createUrlMap(CreateUrlMapRequest request);
}

基于Dubbo的实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@DubboService(retries = -1)
public class DefaultOctopusApi implements OctopusApi {

@Autowired
private UrlMapService urlMapService;

@Value("${default.octopus.domain}")
private String domain;

@Override
public Response<CreateUrlMapResponse> createUrlMap(CreateUrlMapRequest request) {
UrlMap urlMap = new UrlMap();
urlMap.setUrlStatus(UrlMapStatus.AVAILABLE.getValue());
urlMap.setLongUrl(request.getLongUrl());
urlMap.setDescription(request.getDescription());
String shortUrl = urlMapService.createUrlMap(domain, urlMap);
return Response.succeed(new CreateUrlMapResponse(request.getRequestId(), shortUrl));
}
}

生产中契约模块做了比较多的特性定制,这里只举一个简单实现的例子。

部署架构

octopus服务集群单独部署,支持无限添加节点,部署架构的关键在于网络架构,内层的负载均衡使用了Nginx,最外层的负载均衡使用了云负载均衡,如阿里云的SLB或者UCloudULB。添加或者移除短链域名,关键在于修改Nginx的配置。基本的架构如下:

只要保证负载均衡池指向octopus集群即可,短链的域名可能动态增删,操作完之后只需要nginx -s -reload刷新一下Nginx的配置即可。

使用短链服务

先在domain_conf表写入一条本地域名和端口的数据:

编写一个集成测试类,创建一个短链映射:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Slf4j
@SpringBootTest(classes = OctopusServerApplication.class, properties = "spring.profiles.active=local")
@RunWith(SpringRunner.class)
public class UrlMapServiceTest {

@Autowired
private UrlMapService urlMapService;

@Test
public void createUrlMap() {
String domain = "localhost:9099";
UrlMap urlMap = new UrlMap();
urlMap.setUrlStatus(UrlMapStatus.AVAILABLE.getValue());
urlMap.setLongUrl("https://throwx.cn/2020/08/24/canal-ha-cluster-guide");
urlMap.setDescription("测试短链");
String url = urlMapService.createUrlMap(domain, urlMap);
log.info("生成的短链:{}", url);
}
}
// 某次执行的结果如下:生成的短链:http://localhost:9099/Myt8qW

基于本地配置启动项目,然后访问http://localhost:9099/Myt8qW,效果如下:

日志如下:

1
2
[2020-12-27 19:29:22,285] [INFO] cn.throwx.octopus.server.application.consumer.TransformEventConsumer [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1] [1c603903-e8d8-4072-aa97-6abf614b9411] - 接收到URL转换事件,内容:{"clientIp":"192.168.211.113","compressionCode":"Myt8qW","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36","cookieValue":"Webstorm-734c3b68=9b8b3560-41f5-478a-93d0-b02128b1022f; __gads=ID=28121bd829638f67-2286c86e7fc400d3:T=1604132165:RT=1604132165:S=ALNI_MbsMQROv6swaC8kf4ux2suZm_GZXA; Hm_lvt_4df6907aebab752244c3ca1432b4ff57=1605930058,1607228133","timestamp":1609068562262,"shortUrlString":"http://localhost:9099/Myt8qW","longUrlString":"https://throwx.cn/2020/08/24/canal-ha-cluster-guide","transformStatusValue":3}......
[2020-12-27 19:29:22,353] [INFO] cn.throwx.octopus.server.application.consumer.TransformEventConsumer [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1] [1c603903-e8d8-4072-aa97-6abf614b9411] - 记录URL转换事件完成......

查看转换事件记录表的数据:

后续功能迭代

前期方案有一个安全隐患:没有做压缩码的白名单,容易被基于短链域名,伪造压缩码拼接短链接的方法进行攻击。解决方案是在容器的拦截器链添加或者替换一个基于布隆过滤器实现的压缩码(短链接)白名单拦截器,这样就能在前期拦截了绝大部分恶意伪造的压缩码,让极少量命中了错误率部分的恶意压缩码流到后面的处理逻辑中进行判断。另外,可以引入Caffeine配合Redis做两级缓存,毕竟本地缓存的速度更快。

小结

octopus初版是一个4小时紧急迭代出来的一个微型项目,到现在为止更新了很多次,生产上已经基本稳定。文中描述的版本是公司生产版本的移植版,精简了大量代码同时移除了一些业务耦合的设计,这里把源码开放出来,让一些有可能用到短链服务的场景提供一个可参考但尽可能不要复制的解决思路。源码仓库:

  • Giteehttps://gitee.com/throwableDoge/octopus
  • Githubhttps://github.com/zjcscut/octopus

代码都在main分支。

彩蛋

最近鸽了很长一段时间,原因是年底比较多业务功能迭代,内部的一个标签服务重构花了大量时间。笔者一直在摸索着通过”分片”、”异步”等等思想,在时间可控的前提下,对小数据量(百万和千万级别)前提下,通过常用的关系型数据库、缓存、消息队列等非大数据平台架构替代实现《用户画像方法论与工程化解决方案》里面提到的解决方案。

标签服务内部的代号是”千寻”,取自于辛弃疾《青玉案元夕》中的”众里寻他千百度”,项目名来自于宫崎骏的动漫《千与千寻》的女主千寻(千寻罗马音是chihiro):

待后面项目上线一段时间稳定后,应该会抽时间写一个系列谈谈怎么不用大数据那套体系,提供用户画像的工程化解决方案。

(本文完 c-10-d e-a-20201227)

]]>
+ + + + + Developer + + + + + + + OpenSource + + Java + + ShortLink + + + +
+ + + + + 🌈Awesome Software / Service + + /post/awesome/ + + 分享一些好用的软件、服务和开源项目等,传递开源与分享精神。纯粹的分享与推荐,放心食用。

开源项目仅提供代码仓库地址,若有官方网站亦会标明。内容排序方式为项目名称英文字母顺序。

目前收录总数:35

  • 桌面应用:19
  • 服务应用:12
  • 开源字体:4

桌面应用

桌面应用是一种在桌面操作系统上运行的应用程序,例如 Windows、macOS 和 Linux。与 Web 应用程序和移动应用程序不同,桌面应用程序通常是使用本地编程语言和工具(例如 C++、C#、Java 或 Swift)开发的,并且可以直接在计算机上运行,而无需通过浏览器或移动设备。桌面应用程序可以具有许多不同的功能,例如文本编辑器、图形设计工具、游戏、办公套件、音频/视频编辑器等。与 Web 应用程序相比,桌面应用程序通常具有更高的性能和更好的用户体验,因为它们可以直接访问计算机的资源,例如文件系统、网络和硬件设备。同时,桌面应用程序也需要更多的开发和维护工作,因为它们需要考虑不同操作系统和硬件设备的兼容性问题。

7z - 压缩工具

7-Zip是一个具有高压缩比的文件归档器。

7-Zip is a file archiver with a high compression ratio.

官方网站 GitHub

CUE Splitter - 音频分轨

CUE Splitter是一个免费的工具,它可以将一个大的音频文件,主要是一张专辑或一个汇编,分割成相对独立的曲目,使用相关的“CUE表”文件中包含的信息。有时你可以找到一个大的压缩音乐文件(例如MP3,APE,FLAC,OGG,WAV,WMA等)。配备了一个小的.cue文本文件,其中包含有关内部轨道的所有细节:标题,艺术家,持续时间等。通常这对夫妇的文件是由像EAC(精确音频复制),foobar2000,BPM Studio,GoldWave或类似的程序生成的。使用CUE Splitter,您可以分割音乐曲目,而无需解码/重新编码任何音频数据!此外,输出文件自动命名使用用户定义的“文件掩码”字符串和他们的标签填充信息提取的“提示表”。

CUE Splitter is a freeware tool that splits a single big audio file, mostly an album or a compilation, into the relative individual tracks, using the informations contained in the associated “CUE Sheet” file. Sometimes you can find a big compressed music file (for example MP3, APE, FLAC, OGG, WAV, WMA, etc.) equipped with a small .cue text file that contains all the details about internal tracks: title, artist, duration, and so on. Usually these couple of files are generated by programs like EAC (Exact Audio Copy), foobar2000, BPM Studio, GoldWave or similar. With CUE Splitter you can split music tracks without decode/re-encode any audio data! Moreover output files are automatically named using a user-defined “file mask” string and their tags are filled with informations extracted from “CUE Sheet”.

官方网站

DBeaver - 数据库工具

DBeaver Community是一个免费的跨平台数据库工具,面向开发人员、数据库管理员、分析师和所有使用数据的人。它支持所有流行的SQL数据库,如MySQL,MariaDB,PostgreSQL,SQLite,Apache Family等。

DBeaver Community is a free cross-platform database tool for developers, database administrators, analysts, and everyone working with data. It supports all popular SQL databases like MySQL, MariaDB, PostgreSQL, SQLite, Apache Family, and more.

官方网站

Everything - 本地搜索引擎

Everything 是 Windows 上一款搜索引擎,它能够基于文件名快速定文件和文件夹位置。

Everything is search engine that locates files and folders by filename instantly for Windows.

可以快速搜索本地任何角落,以便找到自己想要的内容,装机必备。Everything也衍生了一些工具,比如uTools中的本地搜索依赖Everything才能更高效的工作,又如EverythingToolbar可以把Everything集成到任务栏中。

官方网站

FreeControl - 用电脑控制手机

在PC上控制Android设备。

Control Android devices on PC.

官方网站 GitHub

HiBit Uninstaller - 卸载工具

HiBit Uninstaller是卸载Windows软件的完美解决方案,使您可以使用其简单且用户友好的界面快速,完全地卸载程序。

HiBit Uninstaller is the perfect solution for uninstalling Windows software, allowing you to uninstall programs quickly and completely using its simple and user friendly interface.

官方网站

LocalSend - 局域网文件传输

AirDrop的开源跨平台替代品。

An open-source cross-platform alternative to AirDrop.

官方网站 GitHub

Motrix - 下载工具

一款全能的下载工具。支持下载 HTTP、FTP、BT、磁力链接等资源。

A full-featured download manager. Support downloading HTTP, FTP, BitTorrent, Magnet, etc.

这个软件内置了Aria2 - 下载工具,如果懒得折腾aria2,用这个软件就够用了。如果有NAS设备,推荐使用Docker部署aria2服务,让下载这件事与PC解耦。

官方网站 GitHub

MusicPlayer2 - 音乐播放器

MusicPlayer2是一款集音乐播放、歌词显示、格式转换等众多功能于一身的音频播放软件。支持歌词显示、歌词卡拉OK样式显示、歌词在线下载、歌词编辑、歌曲标签识别、专辑封面显示、专辑封面在线下载、频谱分析、音效设置、任务栏缩略图按钮、主题颜色、格式转换等功能。播放内核为BASS音频库(V2.4)。播放器支持几乎所有常见的音频格式。

MusicPlayer2 is an audio player whitch supports music collection playback, lyrics display, format conversion and many other functions. It supports lyrics display, lyrics karaoke style display, lyrics online download, lyrics editing, song tag recognition, album cover display, album cover online download, spectrum analysis, sound effect settings, taskbar thumbnail button, theme color, format conversion and other functions. The playback kernel is the Bass Audio Library (V2.4). The player supports almost all common audio formats.

GitHub

MusicTag - 音乐标签编辑器

『音乐标签』是一款可以编辑歌曲的标题、专辑、艺术家等信息的应用程序,支持FLAC, APE, WAV, AIFF, WV, TTA, MP3, MP4, M4A, OGG, MPC, OPUS, WMA, DSF, DFF等音频格式,绿色无广告,无任何功能限制。

MusicTag is an application that can edit the title, album, artist information of the song, supporting FLAC, APE, WAV, AIFF, WV, TTA, MP3, MP4, M4A, OGG, MPC, OPUS, WMA, DSF, DFF, etc. audio formats, green and without ads, no function restrictions.

官方网站

ruffle - Flash播放器

用Rust编写的Flash Player模拟器。

A Flash Player emulator written in Rust.

官方网站 GitHub

ScreenToGif - 录制GIF

ScreenToGif允许您录制屏幕的选定区域,编辑并保存为gif或视频。

🎬 ScreenToGif allows you to record a selected area of your screen, edit and save it as a gif or video.

官方网站 GitHub

Snipaste - 截图贴图工具

Snipaste 是一个简单但强大的贴图工具,同时也可以执行截屏、标注等功能。

Snipaste is a simple but powerful snipping tool, and also allows you to pin the screenshot back onto the screen.

官方网站

TrafficMonitor - 硬件资源监控

一款用于Windows平台的网速监控悬浮窗软件,可以显示当前网速、CPU及内存利用率,支持嵌入到任务栏显示,支持更换皮肤、历史流量统计等功能。

TrafficMonitor is a network monitoring software with floating window feature for Windows. It displays the current internet speed and CPU and RAM usage. There are also other capabilities like an embedded display in the taksbar, changeable display skins, and historical traffic statistics.

GitHub

TranslucentTB - 任务栏透明

一个轻量级的实用程序,使Windows任务栏半透明/透明。

A lightweight utility that makes the Windows taskbar translucent/transparent.

GitHub

uTools - 效率工具平台

uTools 是一个极简、插件化的现代桌面软件,通过自由选配丰富的插件,打造得心应手的工具集合。

非常好用的一款跨平台工具集合,虽然有会员订阅服务(主要是提供了数据备份、多端同步等功能),但无需订阅即可使用大部分功能,满足大部分用户的需要。

官方网站

插件推荐

易翻翻译、ctool、颜色助手、OCR、文件批量重命名、hosts、二维码、本地搜索、文本代码对比、json编辑器、变量命名方式、正则编辑器、编码小助手、计算稿纸。

Visual Studio Code - 编辑器

Visual Studio Code是一个轻量级但功能强大的源代码编辑器,可在桌面上运行,适用于Windows、macOS和Linux。它内置了对JavaScript,TypeScript和Node.js的支持,并拥有丰富的其他语言和运行时扩展生态系统(如C++,C#,Java,Python,PHP,Go,.NET)。

Visual Studio Code is a lightweight but powerful source code editor which runs on your desktop and is available for Windows, macOS and Linux. It comes with built-in support for JavaScript, TypeScript and Node.js and has a rich ecosystem of extensions for other languages and runtimes (such as C++, C#, Java, Python, PHP, Go, .NET).

官方网站 GitHub

VLC - 媒体播放器

VLC 是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议。

VLC is a free and open source cross-platform multimedia player and framework that plays most multimedia files as well as DVDs, Audio CDs, VCDs, and various streaming protocols.

官方网站 GitHub

WindTerm - 跨平台终端

一款专业的跨平台SSH/Sftp/Shell/Telnet/Serial终端。

A professional cross-platform SSH/Sftp/Shell/Telnet/Serial terminal.

官方网站 GitHub

服务应用

服务应用是一种在后台运行的应用程序,通常在服务器或云平台上运行。与桌面应用程序和移动应用程序不同,服务应用程序通常不直接与用户交互,而是在后台执行某些任务。服务应用程序可以具有许多不同的功能,例如数据处理、文件传输、消息传递、安全认证等。服务应用程序通常使用 Web 技术(例如 RESTful API、SOAP、JSON 等)作为与其他应用程序和服务进行交互的接口。服务应用程序可以在云平台上扩展和自动扩展,以满足不断变化的需求。同时,服务应用程序也需要更多的开发和维护工作,因为它们需要考虑安全性、可伸缩性、可靠性等问题。

推荐部署在云服务器上或有公网IP的NAS设备上,推荐使用常见的Linux发行版,如CentOS、Ubuntu、Debian。

推荐使用 docker-compose 方式部署便于维护和迁移,但部署方式不限于此,文中推荐的大部分服务都提供了跨平台、跨架构支持,更多部署方式请参考官方网站或GitHub。

acme.sh - 自动化证书

一个实现ACME客户端协议的纯Unix shell脚本。

A pure Unix shell script implementing ACME client protocol.

本站的证书由Let’s Encrypt签发,因为托管在Vercel和Netlify中,服务商会定期进行续签,个人无需维护。

但个人服务器的证书就需要自己维护了,这时就要用到acme.sh。具体用法参考以下内容以及项目官网文档。

官方网站 GitHub

AdGuard Home - 私人DNS

AdGuard Home 是一款全网广告拦截与反跟踪软件。在您将其安装完毕后,它将保护您所有家用设备,同时您不再需要安装任何客户端软件。随着物联网与连接设备的兴起,掌控您自己的整个网络环境变得越来越重要。

AdGuard Home is a network-wide software for blocking ads & tracking. After you set it up, it’ll cover ALL your home devices, and you don’t need any client-side software for that. With the rise of Internet-Of-Things and connected devices, it becomes more and more important to be able to control your whole network.

官方网站 GitHub

Alist - 多存储整合

一个支持多存储的文件列表程序,由 Gin 和 Solidjs 驱动。

A file list program that supports multiple storage, powered by Gin and Solidjs.

非常好用的一款存储整合服务,可以把各种存储整合在一个服务中,提供了友好的操作界面,支持超多网盘和其他存储方式、在线预览、离线下载、推送到Aira下载等。

官方网站 GitHub

aria2 - 下载工具

aria 2是一个轻量级的多协议和多源,跨平台下载工具,在命令行操作。它支持HTTP/HTTPS,FTP,SFTP,BitTorrent和Metalink。

aria2 is a lightweight multi-protocol & multi-source, cross platform download utility operated in command-line. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink.

如果没有自己的服务器,建议使用Motrix - 下载工具简单易用。

GitHub

AriaNg - aria2 WebUI

AriaNg,一个让aria2更容易使用的现代化Web前端。

AriaNg, a modern web frontend making aria2 easier to use.

只是一个静态的网站,可以直接双击index.html运行,也可以托管到免费的平台中使用,如GitHub Pages、Vercel等。或者使用我托管在Netlify中的AriaNg

GitHub

ddns-go - 动态域名解析

自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。

一般家用宽带没有固定的公网IP,但目前大部分地区运行商都提供了动态公网IPv6,此时就需要动态域名解析了。实现原理很简单,定时获取本机公网IP,调用域名服务商API将值更新上去,但是这个项目已经很完善,没必要重复造轮子,完全满足需求。

GitHub

Heimdall - 导航页

应用程序仪表板和启动器。

An Application dashboard and launcher.

简约大气的导航页,且可以对一些支持的应用提供扩展功能,如监控Portainer容器状态、aria2下载任务状态等。

GitHub

Home Assistant - 家庭自动化平台

将本地控制和隐私放在首位的开源家庭自动化。由世界各地的社区成员和DIY爱好者组成的团体提供强力支持。

Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts.

目前智能家居品牌很多,大部分品牌都在搞自家生态,想使用一个APP控制家里所有设备,就需要用到Home Assistant将不同品牌智能设备接入统一管理。

官方网站 GitHub

Qwerty Learner - 记单词

为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件。

Words learning and English muscle memory training software designed for keyboard workers.

官方网站 GitHub

RustDesk - 远程桌面

RustDesk 是一个功能齐全的开源远程控制替代方案,可通过最少的配置实现自托管和安全性。

RustDesk is a full-featured open source remote control alternative for self-hosting and security with minimal configuration.

建议使用拥有公网IP的设备自建服务器(无公网IP可以通过Tailscale - 异地组网后使用),我的NAS只有公网IPv6,上行带宽30Mbps,使用体验比ToDesk免费版好很多,已经逐渐放弃使用ToDesk。

官方网站 GitHub

Tailscale - 异地组网

Tailscale是一种VPN服务,可以让您在世界任何地方安全、轻松地访问您拥有的设备和应用程序。它使用开源WireGuard协议实现加密的点对点连接,这意味着只有您的专用网络上的设备才能相互通信。

Tailscale is a VPN service that makes the devices and applications you own accessible anywhere in the world, securely and effortlessly. It enables encrypted point-to-point connections using the open source WireGuard protocol, which means only devices on your private network can communicate with each other.

当用手机或电脑处于无IPv6环境时,可以通过Tailscale来访问家中的NAS服务器。需要注意的是,组网的双方其中有一方的NAT是Symmetric(对称型),就会打洞失败,流量会经转公共DERP服务器,速度很慢。同类型的产品还有Zerotier,个人感觉没有Tailscale好用。

官方网站 GitHub

Uptime Kuma - 服务状态监控

一个精美的自托管监控工具。

A fancy self-hosted monitoring tool.

可以用于监控并记录一些可访问服务的运行状态,如docker容器、网站等,也可以用作导航页(Heimdall平替)。除了管理页面,还可以创建允许匿名访问的状态页面(示例 - IPv6 Only)。

GitHub

开源字体

开源字体是指那些可以在版权允许的情况下免费或低成本向公众提供使用和修改的字体。这些字体的设计文件(源代码)通常是公开的,任何人在遵循相关许可协议的前提下都可以下载、使用,并在需要时进行修改和再分发。

阿里巴巴普惠体

阿里巴巴普惠体是一套全球永久免费正版商用的字体家族。

阿里巴巴普惠体3.0为一套符合新国家标准GB18030-2022的简体中文字符集,包含GB18030-2022强制规范三个实现级别:实现级别1+实现级别2标准规格的7字重、实现级别3标准规格的Regular 单一字重。7字重共194,460个全形汉字。包含拉丁字母、希腊字母、西里尔字母、标点符号。

官方网站

Cascadia Code

这是一种有趣的新型等宽字体,包含编程连字,旨在增强 Windows 终端的现代外观和感觉。

This is a fun, new monospaced font that includes programming ligatures and is designed to enhance the modern look and feel of the Windows Terminal.

GitHub

Monaspace

一个创新的代码字体超家族。

An innovative superfamily of fonts for code

官方网站 GitHub

霞鹜文楷

一款开源中文字体,基于 FONTWORKS 出品字体 Klee One 衍生。

An open-source Chinese font derived from Fontworks’ Klee One.

GitHub

]]>
+ + + + + Share + + + + + + + Software + + Service + + Awesome + + + +
+ + + + + 道路勘测设计学习笔记 + + /post/learn-road-design/ + + 道路平面设计

公路

一种带状的空间结构物,它的中线是一条空间曲线。

公路平面图

公路在水平面上的投影图。

公路纵断面图

通过公路中线的竖向剖面图。

公路横断面图

公路上任一点垂直于路中线的竖向剖面图。

缓和曲线

从曲率半径为无穷大逐渐向某一定值变化的曲线。

缓和曲线的作用

  • 缓和曲率——使曲率连续变化
  • 缓和超高——使横向坡度连续变化
  • 缓和加宽——使车道加宽连续变化

缓和曲线产生的效果

  • 曲率连续变化,便于车辆驾驶
  • 离心加速度连续变化,没有突变,乘客感觉舒适
  • 超高横坡度及加宽逐渐变化,行车更加稳定
  • 与圆曲线配合,增加线形美观

缓和曲线的线型

回旋线、三次抛物线、七次四项式型、半波正弦型、一波正弦型、双纽线、多心复曲线。

回旋线

半径从无穷大一直变化到一定设计值的一段弧线。回旋线是曲率随着曲线长度成比例变化的曲线。公路、匝道常用的缓和曲线是回旋线,也叫放射螺旋线。回旋线不仅线形美观,而且与驾驶员匀速转动方向盘由圆曲线驶入直线或者由直线驶入圆曲线的轨迹线相符合。

弯道的超高

为了减小横向力,一般圆曲线段上路面做成外侧高、内侧低的单向内倾横坡。

圆曲线最小半径

最大横向力系数μ和超高横坡度值i为主要影响因素。

横向力系数μ的确定

  • 按汽车行驶稳定性
  • 按行车舒适性
  • 按燃料和轮胎消耗

极限最小半径

各级公路对按计算行车速度行驶的车辆,能保证其安全行车的最小允许半径。

一般最小半径

对按计算行车速度行驶的车辆能保证其安全性和舒适性,它是通常情况下推荐采用的最小半径值。

不设超高的最小半径

当平曲线半径较大时,离心力的影响就较小,路面摩阻力就可以保证汽车有足够的稳定性,这是就可以不设置超高,而允许设置与直线段上相同的双向横坡的路拱形式。

平曲线的极限最小长度

根据经验,为使驾驶员在曲线行驶时不感到方向盘操作的困难,按6s的通过时间设置曲线长度是适宜的。

平曲线的一般最小长度

各级公路的平曲线,一般情况下应能够设置两段缓和曲线(或超高、加宽缓和段)及一段圆曲线。在平面设计中,为便于驾驶操作和行车安全与舒适,汽车在任何一种曲线形式上行驶的时间都不应短于3s。

公路转角小于7°时的平曲线长度

为避免造成视觉错误、保证行车安全,在进行平面设计时应避免设置小于7°的转角。当条件限制不得已时,在偏角小于7°的转角处应设置较长的平曲线,其长度应大于标准中规定值。

加宽

汽车在曲线上行驶所占路面宽度就比在直线上的大,为保证行车的安全,曲线段的路面应做适当的加宽。

加宽缓和段

为避免路面宽度从直线段上的正常宽度到圆曲线段的加宽断面的突变,在直线和圆曲线之间应设置一段路面宽度的渐变段,这一渐变段称为加宽缓和段。

超高

《标准》规定,当圆曲线半径小于不设超高的最小半径时,应设置超高(即将曲线部分的路面做成向内侧倾斜的单向横坡)。

超高缓和段

直线段上的双向横坡逐渐过渡到圆曲线段上的超高横坡的过渡段。

视距

驾驶员在行驶过程中的通视距离。

行车视距

为了保证行车安全,驾驶员应能看到前方一定距离的公路以及公路上的障碍物或迎面的来车,以便及时刹车或绕过。汽车在这段时间里沿公路路面行驶的必要安全距离,称为行车视距。

停车视距

指驾驶员看到障碍物后立即采取制动措施,至汽车在障碍物前停下来的最小安全距离。由三部分距离组成:

  • 驾驶员反应时间内行驶的距离
  • 制动距离,指制动生效到汽车完全停止时行驶的距离
  • 安全距离

会车视距

对于不设分隔带的双车道公路,车辆在行驶中,驾驶员趋向于沿路面中心行驶,一旦发现前方来车,双方驾驶员各自把车辆驶回到自己的车道上,使两车安全交会。为保证双向行驶的双车道公路的行车安全,公路平面应能保证会车视距要求,即满足双向行驶的汽车能在同一车道上及时刹车所需的最短距离。由三部分距离组成:

  • 双方驾驶员反应时间内汽车所行驶的距离
  • 双方汽车的制动距离
  • 安全距离

超车视距

《标准》规定,对于双向行驶的双车道公路,根据需要,应结合地形设置保证具有超车视距的路段,以使汽车行驶时安全超越前车。

超车视距全程可分为四个阶段

  • 加速行驶距离
  • 超车汽车在对向车道上行驶的距离
  • 超车汽车从开始加速到超车完成的时间内,对向车道汽车的行驶距离
  • 超车完成时,超车汽车与对向汽车之间的安全距离

平面线形

直线、圆曲线、回旋线

平面线形要素组合

  • 基本型——圆曲线两端用回旋线与直线相连接的组合型式称为基本型
  • S型——用两个反向回旋线连接两个反向圆曲线的组合型式称为S型
  • 卵型——用一个回旋线连接两个同向圆曲线的组合型式称为卵型
  • 凸型——在两个同向可旋线间不插入圆曲线而径相衔接的组合型式称为凸型
  • 复合型——两个以上同向回旋线在曲率相等处直接连接的组合型式称为复合型
  • C型——两同向回旋线在曲率为零处径相衔接的组合型式称为C型

道路纵断面设计

坡线和竖曲线

公路在纵断面上由不同的上坡段、下坡段(统称坡段)和平顺连接相邻两坡段的竖向曲线段组成,即公路路线在纵断面上是一条有起伏的空间线,其基本线形由坡线和竖曲线组成。

地面标高

公路中线各桩点的地面高程称地面标高。

地面线

各点地面标高的连线称地面线,它是一条不规则的空间折线。

设计标高

路基边缘点的高程称设计标高(公路改建时可用原路中线标高为设计标高)。

设计线

各桩点设计标高的连线称纵断面设计线,简称设计线,它是经过技术上、经济上和美学上比较后确定的,由坡线和竖曲线组成的空间线。地面线和设计线是纵断面图的两条主要线。

填挖高

同一桩点的设计标高与地面标高的差值称施工标高,又称填挖高。

填方路段、挖方路段

  • 若该桩点的施工标高为“+”,即设计标高大于地面标高,这样的路基通常为填筑而成的路堤,这样的路段即填方路段
  • 若施工标高为“-”则为路堑,这样的路段即挖方路段。

纵坡

坡线的坡度即路线纵向坡度,简称纵坡。

转坡点

相邻两坡线的交点称转坡点,在转坡点处应设竖曲线。转坡点前后两坡线坡度之差称转坡角。

高原折减

在海拔3000m以上的高原地区,因空气稀薄,不但会使发动机的功率减少,还使水箱的水容易沸腾而降低冷却系统的功能,因此应将《标准》规定的最大纵坡予以折减。

平均纵坡

由若干坡段组成的路段,其两端点的高差与路段长度之比称平均纵坡。

合成坡度

路线纵向坡度与横向坡度的矢量和称合成坡度。

道路横断面设计

横断面

公路中线法线方向的剖面图称公路横断面图,简称横断面,亦即由公路横断面设计的主要组成部分与横断地面线所围成的面,它反映了公路在横剖面上的组成情况、形状和几何尺寸,是公路路线设计的重要内容之一。公路横断面设计的主要组成部分是路面和路基,路面包括行车道、变速车道、紧急停车带、爬坡道等,路基包括路肩、边坡、边沟、护坡道、截水沟等。

路基横断面

为设计计算方便,通常用两侧路肩边缘点的联线,来代替路面、路肩等的横坡折线,即横断面的顶面可绘成一条直线。这样将顶面用一直线绘成的横断面即路基横断面。

路拱

为了排除路面的雨水,将路面做成中间高两边低的拱起形状称路拱。

路拱横坡

路面中线点与路面边缘点的高差,与其水平距离的比值称路拱横坡,以%表示。

分隔带

沿道路纵向设置分隔行车道用的带状设施称分隔带,位于中线位置上的称中间带,位于中线两侧的称外侧分隔带。

路肩

位于行车道外缘至路基边缘具有一定宽度的带状设施称路肩,它是路面的侧向支撑,可供临时停车和人行通行,还可使驾驶员有安全感。

路基宽度

在一个横断面上,两侧路肩边缘点间的宽度称路基宽度。

路基边坡

为保证路基的稳定,把路基两侧做成具有一定坡度的坡面称路基边坡。

边沟

为汇集并排除路面、路肩和边玻的水流,在路基两侧设置的水沟称边沟。一般情况下,挖方路基和填土高度小于0.5m的矮路堤,均应设置边沟。

边沟的型式

通常有梯形、矩形和三角形三种,视上质情况和施工方法而定,一般土质路基采用梯形,岩石路基可采用三角形或矩形,机械化施工时多采用三角形。

截水沟

为拦截并排除流向路基的地面水流,以避免对路基边坡冲刷等而设置的排水沟称截水沟。

免费运距

土方作业包括挖、装、运卸等工序,在某一一特定距离内,只按挖方数计价而不计算运费,这一特定距离称免费运距。

平均运距

土石方调配时,从挖方体积重心到填方体积重心的距离称平均运距,为简化设计计算,通常平均运距按挖方路段中心至填方路段中心的距离计。

道路交叉设计

冲突点

当行车方向互相交叉时,可能发生碰撞的地点称为冲突点。

交织点

当车辆从不同方向驶向同一方向或成锐角相交时,可能产生挤撞的地点称为交织点。

加铺转角

以圆曲线构成宽来连接交叉公路的路基和路面,称为加铺转角式交叉。

立体交叉

公路与公路或铁路在不同高度上互相交义的型式称立体交叉。

立体交叉形式

  • 分离式
  • 互通式

互通式立体交叉的类型

  • 苜蓿叶形
  • 部分苜蓿叶形
  • Y形
  • 喇叭形
  • 菱形
  • 环形
  • 定向式立体交叉

匝道的作用

匝道是连接立体交叉上、下路线的交换道,一般在匝道上既有弯道又有坡度。

匝道的类型

  • 右转弯匝道——直接从主干线右转弯驶出的匝道
  • 环形匝道——这是一种左转弯行驶的匝道形式。车辆由干线的右侧出口,并以约270°角向右转弯,而完成左转弯的行驶
  • 定向式匝道——由干线左侧出口,以较短捷的路线直接驶入连接的干线,从而完成左转弯的匝道
  • 迁回式匝道——由干线右侧出口,暂时偏离所去方向,以迂回绕行的方式完成左转弯的匝道

变速车道

车辆由高速公路驶入匝道(或车速低的道路)须减速,反之,车辆由匝道(或车速低的道路)驶进高速公路须加速。为了调整车速而设置在高速公路与匝道间的减速或加速车道,称为变速车道。

]]>
+ + + + + Share + + + + + + + Note + + RoadDesign + + + +
+ + + + + 桥梁设计学习笔记 + + /post/learn-bridge-design/ + + 桥梁定义

桥梁是道路路线遇到江河湖泊、山谷深沟以及其他线路(铁路或公路)等障碍时,为了保持道路的连续性而专门建造的人工构造物。桥梁既要保证桥上的交通运行,也要保证桥下水流的宣泄、船只的通航或车辆的通行。

桥梁基本组成

上部结构

桥跨结构

线路跨越障碍(如江河、山谷或其他线路等)的结构物。

下部结构

桥墩

是在河中或岸上支承桥跨结构的结构物。

  • 轻型桥墩——盖梁、系梁、立柱
  • 重力式桥墩——墩帽、墩身

桥台

设在桥的两端;一边与路堤相接,以防止路堤滑塌;另一边则支承桥跨结构的端部。为保护桥台和路堤填土,桥台两侧常做锥形护坡、挡土墙等防护工程。

墩台基础

是保证桥梁墩台安全并将荷载传至地基的结构。

  • 扩大基础
  • 桩基础承台
  • 桩柱式

支座系统

在桥跨结构与桥墩或桥台的支承处所设置的传力装置。它不仅要传递很大的荷载,并且还要保证桥跨结构能产生一定的变位。

  • 橡胶支座
  • 支座垫石

附属设施

桥面铺装

或称行车道铺装,铺装的平整性、耐磨性、不翘曲、不渗水是保证行车舒适的关键。

排水防水

应能迅速排除桥面积水,并使渗水的可能性降至最小限度。

栏杆

既是保证安全的构造措施,又是有利于观赏的最佳装饰件。

伸缩缝

桥跨上部结构之间或桥跨上部结构与桥台端墙之间所设的缝隙,以保证结构在各种因素作用下的变位。为使行车顺适、不顺簸,桥面上要设置伸缩缝构造。

灯光照明

桥梁分类

按使用性质分类

公路桥、铁路桥、公铁两用桥、城市道路桥(含立交桥)、人行桥、机耕桥、管线桥、渡槽桥。

按桥身结构材料分类

木桥、圬工桥(砖、石、砼砌块桥)、钢筋砼桥、预应力砼桥、钢桥。

按单孔跨径、多孔跨径总长分类

分类多孔跨径总长L(m)单孔跨径Lk(m)
特大桥L > 1000Lk > 150
大桥100 ≤ L ≤ 100040 ≤ Lk < 150
中桥30 < L < 10020 ≤ Lk < 40
小桥8 ≤ L ≤ 305 ≤ Lk < 20
涵洞L < 8Lk < 5

按桥跨结构分类

梁式桥(简支梁、连续梁、伸臂梁)、桁架桥、拱桥、刚构桥、悬索桥、斜拉桥等。此外,还有浮桥、漫水桥、活动桥等。

桥梁类型和受力特点

类型受力特点建造材料
梁式桥竖向荷载作用下无水平反力,梁内产生的弯矩最大抗弯能力强(钢、木、钢筋砼、预应力钢筋砼)
拱式桥主要承重结构是拱圈或拱助,在竖向荷载作用下,墩台承受水平推力,承重结构以受压为主抗压能力强的圬工材料(砖、石、砼)和钢筋砼
刚架桥梁和柱的连接处具有很大的刚性,在竖向荷载作用下,梁部主要受弯,在柱脚处也具有水平反力,受力状态介于梁桥和拱桥之间施工比较困难,用普通钢筋砼修建,梁柱刚结处易产生裂缝
悬索桥以悬索为主要承重结构,结构自重较轻,构造简单、受力明确,能以较小的建筑高度经济合理地修建大跨度桥结构自重轻,刚度差,在车辆荷载和风荷载作用下有较大的变形和振动
组合体系桥由几个不同体系的结构组合而成,常见的有:连续刚构,梁、拱组合等;斜拉桥也是组合体系桥的一种——

梁式桥

梁式桥分类

  • 简支梁桥
  • 悬臂梁桥
  • 等截面连续梁桥
  • 变截面连续梁桥
  • 连续刚构

梁截面

  • 实心板梁
  • 空心板梁
  • T梁——底板、梁肋、翼缘板
  • 箱梁——底板、腹板、顶板、翼缘板

拱式桥

与梁式桥主要承受弯曲力不同,拱桥要承受的是沿圈传递的轴向压力。该压力即是桥墩桥台在竖向移动荷作用下所产生的水平推力。

拱式桥分类

  • 三铰拱
  • 两铰拱
  • 无铰拱
  • 系杆拱

承载方式

  • 上承式拱
  • 中承式拱
  • 下承式拱

刚架桥

刚架桥是梁和柱(或竖墙)整体结合的桥梁结构。竖向荷载作用下,梁部主要受弯,柱脚处有水平推力,力状态介于梁式桥和拱桥之间。

刚架桥分类

  • T型刚架桥
  • 连续刚架桥
  • 斜腿刚架桥

斜拉桥

斜拉桥由主梁、塔柱和斜拉索3种基本构件组成,用高强钢材制成的斜拉索将主梁多点吊起,将主梁承受的荷载传至塔柱,再由塔柱基础传给地基。斜拉桥是主梁(桥面体系)受压、受弯,斜拉索(支承体系)受拉的结构。

索型

  • 辐射性
  • 竖琴型
  • 扇形

桥梁常用术语

横隔板

横隔板是为保持截面形状、增强横向刚度而在梁之间设置的构件。位于桥梁端部的横隔板称为端隔板,位于中部的横隔板称为中隔板。

湿接缝、湿接头

净跨径

相邻两个桥墩(或桥台)之间的净距。对于拱式桥是每孔拱跨两个拱脚截面最低点之间的水平距离。

计算跨径

对于具有支座的桥梁,是指桥跨结构相邻两个支座中心之间的距离;对于拱式桥,是指两相邻拱脚截面形心点之间的水平距离,即拱轴线两端点之间的水平距离。

标准跨径

相邻两个桥墩中心线的距离。

拱轴线

拱圈各截面形心点的连线。

桥梁高度

指桥面与低水位之间的高差,或指桥面与桥下线路路面之间的距离,简称桥高。

桥下净空高度

设计洪水位、计算通航水位或桥下线路路面至桥跨结构最下缘之间的距离。

建筑高度

桥上行车路面(或轨顶)标高至桥跨结构最下缘之间的距离。

容许建筑高度

公路或铁路定线中所确定的桥面或轨顶标高,对通航净空顶部标高之差。

净矢高

从拱顶截面下缘至相邻两拱脚截面下缘最低点之连线的垂直距离。

计算矢高

从拱顶截面形心至相两拱脚截面形心之连线的垂直距离。

矢跨比

计算矢高与计算跨径之比,也称拱矢度,它是反映拱桥受力特性的一个重要指标。

涵洞

用来宣泄路堤下水流的构造物。通常在建造涵洞处路堤不中断。凡是多孔跨径全长不到8m和单孔跨径不到5m的泄水结构物,均称为涵洞。

]]>
+ + + + + Share + + + + + + + Note + + BridgeDesign + + + +
+ + + + + NAS诞生记 + + /post/my-first-nas/ + + NAS(Network Attached Storage:网络附属存储)按字面简单说就是连接在网络上,具备资料存储功能的装置,因此也称为“网络存储器”。

它是一种专用数据存储服务器。它以数据为中心,将存储设备与服务器彻底分离,集中管理数据,从而释放带宽、提高性能、降低总拥有成本、保护投资。其成本远远低于使用服务器存储,而效率却远远高于后者。

配置清单

品类型号渠道价格备注
主板映泰J4125NHU淘宝580SATA*2、M.2*1、PCIEx16*1
处理器Intel J4125--板载CPU、被动散热
机箱蜗牛星际C款闲鱼128PCIE开口、4盘位、硬盘背板
内存玖合 忆界马甲条京东1498G、DDR4、3000MHz
扩展卡乐扩m.2转5口SATA京东149SATA3.0*5
电源益衡7025B淘宝24580PLUS铜牌、双路12V 36A
插座小米智能插座2京东49电量统计、远程开机
1300

系统方案

方案系统备注
虚拟机PVE/EXSi硬盘直通、核显直通
虚拟机Windows & VMwareCPU性能羸弱
物理机群晖1U盘/SATA引导、UI人性化、套件易用(采纳✔)
物理机Unraid按盘位收费
物理机FreeNAS/TrueNAS使用ECC内存
物理机万由只支持到U-NAS5、U-NAS6仅万由硬件可用

1 固件版本 918+ 7.0.1 42218 up3

总结

目前这套配置搭配群晖系统已稳定运行两周,单块1T硬盘(老笔记本淘汰),功耗15W。

2023.07.04

更新了以下内容

  1. 改用 arpl v1.1-beta2a 自编译引导
  2. 系统升级为 7.1.1 42962 up5
  3. 添加了一块 512GB SATA固态硬盘(用于提升docker、套件、虚拟机等服务的运行效率,实际感受docker和套件提升不明显,跑虚拟机提升明显)
  4. 添加了一块 4TB 西部数据垂直盘
  5. 添加了一块 4*SATA PCIe扩展卡,目前板载2SATA,扩展4SATA,共6个SATA口
  6. 目前待机功率为21W,每天消耗0.5度电
]]>
+ + + + + Share + + + + + + + NAS + + Synology + + + +
+ + + + + 挪车码生成器 - 开源 + + /post/car-code-generator/ + + 临时停车时,直接把手机号放在车上,容易被广告推销人员盯上,用二维码的方式间接给别人提供联系方式,可以有效降低此类情况发生。

优势

  • 使用挪车码展示联系方式,可以避免直接展示出手机号码,广告推销人员可能懒得扫码获取你的手机号
  • 可以使用微信、浏览器、系统相机扫一扫等进行扫码,无需手动输入长达11位的无序数字组成的手机号,直接一键拨号,减少焦虑感

劣势

  • 由于本服务是完全免费的,故无法提供虚拟手机号进行拨号

使用方法

  1. 输入手机号码
  2. 保存到挪车码
  3. 用作图工具添加“扫码挪车”等字样后用A4纸打印出来
  4. 临时停车的时候放在车窗下显眼位置

截图

主界面

微信扫一扫
点击拨打号码按钮
跳转系统拨号界面

下载地址

https://www.lanzoux.com/iej9Tqkzj7c
提取码:pdone

代码仓库

https://github.com/pdone/car-code-generator

]]>
+ + + + + Tools + + + + + + + .NET + + QRCode + + OpenSource + + + +
+ + + + + 最常用的 35 个 Git 命令 + + /post/git-command/ + + 不管你是新手还是经验丰富的开发人员,都需要使用源代码管理。因此很大几率上你会选择使用Git来管理源代码。

要发挥Git的全部潜力,我们需要了解Git命令。在本文中,你将学到最有用的一些Git命令,掌握这些Git命令将帮助你提升编码水平。

本Git命令指南共分为三个部分:基础命令,进阶命令和高阶Git命令。

基础Git命令

在这个部分中,我们要学习的是一些非常基础的Git命令。这些基础的Git命令是学习其他进阶命令的基础。

下面请看这9个基础的Git命令。

1. git config

git config命令非常有用。尤其是在你第一次使用Git或刚安装新的Git时。此命令可设置身份——Name和Email地址。并且每次提交时会使用此信息。

1
2
3
$ git config --global user.name "Your name"  

$ git config --global user.email "Your email"

2. git version

顾名思义,它会检查你使用的是哪个版本的Git。目前,截至编写本指南时,Git for Windows的最新版本是2.31.1。它发布于2021年3月27日。

1
$ git version

3. git init

这可能是你在Git中启动新项目所使用的第一个命令。此命令将创建一个空白的新存储库,然后你可以将源代码存储在此存储库中。

1
$ git init

或者,你也可以在git init命令中使用存储库名称。

1
$ git init <your repository name>

4. git clone

git clone命令将使用现有的存储库进行复制。git initgit clone之间有一个主要区别。

在你需要在现有的存储库上进行复制时,使用git clonegit clone命令首先在内部使用git init命令,然后检出所有内容。

1
git clone <your project URL>

5. git add

git add命令会把所有新的代码文件或修改后的文件添加到存储库中。此命令提供了添加文件和文件夹的不同选项。

将单个文件添加到暂存区

1
$ git add your_file_name

此选项会将所有修改过的文件和新文件添加到暂存区

1
$ git add *

6. git commit

这个Git命令是必不可少的。如果不能合理利用此命令,则可能会降低项目质量。

简而言之,git commit会将更改添加到本地存储库。

1
$ git commit -m "your useful commit message"

7. git status

使用此Git命令可以方便地查看有多少文件需要得到关注。你可以随时运行此命令。

此命令可以用来在git addgit commit之间查看状态。

1
$ git status

8. git branch

大多数时候,你的Git存储库中总会有多个分支。我们可以使用git branch命令有效地管理分支。Git分支有许多不同的选项和开关。

为简单起见,在这里我将重点介绍如何创建和删除Git分支。

列出所有分支

1
$ git branch

创建新的分支

1
$ git branch <branch_name>

删除分支

1
$ git branch -d <branch_name>

9. git checkout

此Git命令用于在分支之间进行切换。这是功能强大的git命令之一,堪称万能的瑞士军刀。

以下是切换到另一个分支的语法。

1
$ git checkout <branch_name>

此外,你也可以创建和检出到分支。

1
$ git checkout -b <your_new_branch_name>

进阶Git命令

掌握了基础的Git命令之后,我们就该学习进阶Git命令了。

如果你需要与团队合作,与他人共享代码,那么这些Git命令会非常有用。另外,还有一些类似git log命令,这些命令可帮助查看以前的提交历史。

10. git remote

git remote命令就像边界,如果你需要与外界连接,则必须使用git remote命令。此命令会将你的本地存储库连接到远程。

1
$ git remote add <shortname> <url>

举例

1
$ git remote add origin https://dev.azure.com/aCompiler/_git/DemoProject

11. git push

(借助git remote命令)与远程存储库连接之后,就需要将更改推送到存储库。

1
$ git push -u <short_name> <your_branch_name>

举例

1
$ git push -u origin feature_branch

12. git push –set-upstream

在使用git push之前,我们应该先设置好originupstream。下面是设置upstream的命令。

1
$ git push --set-upstream <short_name> <branch_name>

举例

1
$ git push --set-upstream origin feature_branch

13. git fetch

当需要下载其他团队成员的更改时,就得使用git fetch

此命令会下载有关提交、引用等的所有信息,因此你可以在将这些更改应用于本地存储库之前对其进行检查。

1
$ git fetch

14. git pull

git pull命令下载内容(而不是元数据),并立即用最新的内容更新本地存储库。

1
$ git pull <remote_url>

15. git stash

此git命令会临时存储已修改的文件。你可以使用以下Git命令处理stash工作。

1
$ git stash

可以使用以下命令查看所有stash

1
$ git stash list

如果你需要应用stash到分支,那就使用apply

1
$ git stash apply

16. git log

git log的帮助下,你可以看到所有之前的提交,并且最近的提交出现在最前面。

1
$ git log

默认情况下,它将显示当前已检出分支的所有提交,但是你可以强制通过所有选项来查看所有分支的所有提交。

1
$ git log --all

17. git shortlog

git shortlog命令会显示来自git log命令的摘要。如果你只对简短的摘要感兴趣,那么此命令就非常有用了。

这个命令有助于查看谁处理了什么,因为它对作者及其提交进行了分组。

1
$ git shortlog

18. git show

git log相比,此命令将显示有关特定提交的详细信息。

1
$ git show <your_commit_hash>

19. git rm

有时你需要从代码库中删除文件,在这种情况下,可以使用git rm命令。

它可以从索引和工作目录中删除跟踪的文件。

1
$ git rm <your_file_name>

20. git merge

git merge可帮助将来自两个分支的更改集成到单个分支中。

1
$ git merge <branch_name>

此命令会将<branch_name>合并到当前你选择的分支中。

高阶Git命令

现在是时候再上一个层次了。在这个部分中,我们要学习的是高阶的Git命令。这些命令就需要花时间去练习了。

但是一旦掌握了这些命令的基础知识,使用起来不要太轻松哦。

21. git rebase

git rebase类似于git merge命令。它把两个分支集成到一个分支中,但有一个不一样的地方:git rebase命令将会重写提交记录。

当你有多个私有分支合并到单个分支时,应使用git rebase命令。它将使得提交历史成为线性的。

1
$ git rebase <base>

22. git bisect

git bisect命令可帮助查找糟糕的提交。

启动git bisect

1
$ git bisect start

让git bisect知道什么是好的提交

1
$ git bisect good a123

让git bisect知道什么是糟糕的提交

1
$ git bisect bad z123

通过git bisect,只要几分钟你就可以缩小问题代码的范围。

23. git cherry-pick

git cherry-pick是一个蛮有用的命令,允许你从任意分支中选择任意提交并将其应用于其他任意分支。

1
$ git cherry-pick <commit-hash>

git cherry-pick不会修改存储库的历史记录;相反,它会添加到历史记录。

24. git archive

git archive命令会把多个文件合并为单个文件。就好像zip实用程序一样,所以你可以提取存档文件以获取单个文件。

1
$ git archive --format zip HEAD > archive-HEAD.zip

它将创建当前修订的zip存档。

25. git pull –rebase

在大多数情况下,当你使用git pull时,你需要重新设置基准(并且不进行合并)。

此时,你就可以使用此选项。

1
$ git pull --rebase

这将帮助保持干净的历史记录。另外,还可以避免多次合并。

26. git blame

如果你需要逐行检查任意文件的内容,则需要使用git blame命令。它可以帮助确定是谁对文件进行了更改。

1
$ git blame <your_file_name>

27. git tag

在Git中,标签很有用,你可以使用它们来管理发布。你可以将git tag视为不会改变的分支。尤其是要公开发布的时候,则更为重要了。

1
$ git tag -a v1.0.0

28. git verify-commit

git verify-commit命令将检查gpg签名。GPG,GNU Privacy Guard,是sign文件中使用的工具,包含签名。

1
$ git verify-commit <commit>

29. git verify-tag

可以以同样的方式确认标签。

1
$ git verify-tag <tag>

30. git diff

大多数情况下,在提交或推送之前,你需要比较两个git文件或分支。用这个命令就方便多了。

将工作目录与本地存储库进行比较

1
$ git diff HEAD <filename>

比较两个分支

1
$ git diff <source branch> <target branch>

31. git citool

git citool是Git提交的图形化替代。

1
$ git citool

32. git mv

重命名git文件。接受两个参数,源文件名和目标文件名。

1
$ git mv <old-file-name> <new-file-name>

33. git clean

你可以使用git clean命令处理未跟踪的文件。可以使用此命令从工作目录中删除所有未跟踪的文件。如果要处理跟踪的文件,则需要使用git reset命令。

1
$ git clean

34. git help

Git中有许多命令,如果你需要其他命令的帮助,则可以随时在终端上使用git help

1
$ git help <git_command>

35. git whatchanged

此命令的作用与git log相同,但为原始格式。并且由于历史原因,它也是git的一份子。

1
$ git whatchanged
]]>
+ + + + + Developer + + + + + + + Git + + + +
+ + + + + 批处理获取时间小于10点时补零 + + /post/bat-date/ + + 使用 %time:~0,2% 获取时间时,当前时间若小于10点,获取到的时间不会自动补零,但是分钟和秒钟会补零,所以小时部分需要自己处理一下。

Code

1
2
3
4
5
6
7
@echo off
set hour=%time:~0,2%
if %hour% LSS 10 (
set "hour=0%time:~1,1%")
set date=%date:~0,4%-%date:~5,2%-%date:~8,2%T%hour%:%time:~3,2%:%time:~6,5%
echo %date%
pause

Output

1
2021-04-08T09:45:01.11
]]>
+ + + + + Developer + + + + + + + 批处理 + + + +
+ + + + + 洛阳地铁一号线开通啦!(内附线路图) + + /post/luoyang-subway/ + + 洛阳轨道交通(Luoyang Subway)是服务于中国河南省洛阳市的城市轨道交通系统,其首条线路于2020年12月1日开始试运行。

2021年3月28日正式运营,当日客流量为10.7382万人次。

截至2021年3月,洛阳轨道交通已开通运营线路1条,为洛阳轨道交通1号线;在建线路1条,为洛阳轨道交通2号线;规划线路2条,为洛阳轨道交通3号线、洛阳轨道交通4号线;线网共设车站34座。

洛阳地铁线路简图

洛阳地铁线路图

]]>
+ + + + + Share + + + + + + + News + + + +
+ + + + + 数据库调优 + + /post/sql-tuning/ + + 先思考这几个问题:

  • 什么时候才需要分库分表呢?我们的评判标准是什么?
  • 一张表存储了多少数据的时候,才需要考虑分库分表?
  • 数据增长速度很快,每天产生多少数据,才需要考虑做分库分表?

为什么要分库分表?

首先回答一下为什么要分库分表,答案很简单:数据库出现性能瓶颈。用大白话来说就是数据库快扛不住了。
数据库出现性能瓶颈,对外表现有几个方面:

  • 大量请求阻塞
    在高并发场景下,大量请求都需要操作数据库,导致连接数不够了,请求处于阻塞状态。

  • SQL 操作变慢
    如果数据库中存在一张上亿数据量的表,一条 SQL 没有命中索引会全表扫描,这个查询耗时会非常久。

  • 存储出现问题
    业务量剧增,单库数据量越来越大,给存储造成巨大压力。

从机器的角度看,性能瓶颈无非就是CPU、内存、磁盘、网络这些,要解决性能瓶颈最简单粗暴的办法就是提升机器性能,但是通过这种方法成本和收益投入比往往又太高了,不划算,所以重点还是要从软件角度入手。

数据库相关优化方案

数据库优化方案很多,主要分为两大类:软件层面硬件层面
软件层面包括:SQL 调优、表结构优化、读写分离、数据库集群、分库分表等;
硬件层面主要是增加机器性能。

SQL 调优

SQL 调优往往是解决数据库问题的第一步,往往投入少部分精力就能获得较大的收益。
SQL 调优主要目的是尽可能的让那些慢 SQL 变快,手段其实也很简单就是让 SQL 执行尽量命中索引。

开启慢 SQL 记录

如果你使用的是 Mysql,需要在 Mysql 配置文件中配置几个参数即可。

1
2
3
slow_query_log = on
long_query_time = 1
slow_query_log_file = /path/to/log

调优工具

常常会用到 explain 这个命令来查看 SQL 语句的执行计划,通过观察执行结果很容易就知道该 SQL 语句是不是全表扫描、有没有命中索引。

1
select id, age, gender from  user where name = 'pdone';

返回有一列叫“type”,常见取值有:

ALL、index、range、 ref、eq_ref、const、system、NULL(从左到右,性能从差到好)
ALL 代表这条 SQL 语句全表扫描了,需要优化。一般来说需要达到range 级别及以上。

表结构优化

以一个场景举例说明:

“user”表中有 user_id、nickname 等字段,“order”表中有order_id、user_id等字段,如果想拿到用户昵称怎么办?一般情况是通过 join 关联表操作,在查询订单表时关联查询用户表,从而获取导用户昵称。

但是随着业务量增加,订单表和用户表肯定也是暴增,这时候通过两个表关联数据就比较费力了,为了取一个昵称字段而不得不关联查询几十上百万的用户表,其速度可想而知。

这个时候可以尝试将 nickname 这个字段加到 order 表中(order_id、user_id、nickname),这种做法通常叫做数据库表冗余字段。这样做的好处展示订单列表时不需要再关联查询用户表了。

冗余字段的做法也有一个弊端,如果这个字段更新会同时涉及到多个表的更新,因此在选择冗余字段时要尽量选择不经常更新的字段。

架构优化

当单台数据库实例扛不住,我们可以增加实例组成集群对外服务。

当发现读请求明显多于写请求时,我们可以让主实例负责写,从实例对外提供读的能力;如果读实例压力依然很大,可以在数据库前面加入缓存如 redis,让请求优先从缓存取数据减少数据库访问。

缓存分担了部分压力后,数据库依然是瓶颈,这个时候就可以考虑分库分表的方案了,后面会详细介绍。

硬件优化

硬件成本非常高,一般来说不可能遇到数据库性能瓶颈就去升级硬件。

在前期业务量比较小的时候,升级硬件数据库性能可以得到较大提升;但是在后期,升级硬件得到的收益就不那么明显了。

分库分表详解

下面我们以一个商城系统为例逐步讲解数据库是如何一步步演进。

未完待续

]]>
+ + + + + Developer + + + + + + + Database + + SQL + + + +
+ + + + + Markdown代码块支持的语言 + + /post/md-codeblock-lang/ + + Markdown代码块支持的语言,使用时在```后加上对应关键字即可。

名称关键字调用的js
AppleScriptapplescriptshBrushAppleScript.js
ActionScript 3.0actionscript3, as3shBrushAS3.js
Shellbash, shellshBrushBash.js
ColdFusioncoldfusion, cfshBrushColdFusion.js
Ccpp, cshBrushCpp.js
C#c#, c-sharp, csharpshBrushCSharp.js
CSScssshBrushCss.js
Delphidelphi, pascal, passhBrushDelphi.js
diff&patchdiff patchshBrushDiff.js
Erlangerl, erlangshBrushErlang.js
GroovygroovyshBrushGroovy.js
JavajavashBrushJava.js
JavaFXjfx, javafxshBrushJavaFX.js
JavaScriptjs, jscript, javascriptshBrushJScript.js
Perlperl, pl, PerlshBrushPerl.js
PHPphpshBrushPhp.js
texttext, plainshBrushPlain.js
Pythonpy, pythonshBrushPython.js
Rubyruby, rails, ror, rbshBrushRuby.js
SASS&SCSSsass, scssshBrushSass.js
ScalascalashBrushScala.js
SQLsqlshBrushSql.js
Visual Basicvb, vbnetshBrushVb.js
XMLxml, xhtml, xslt, htmlshBrushXml.js
Objective Cobjc, obj-cshBrushObjectiveC.js
F#f# f-sharp, fsharpshBrushFSharp.js
xpp, dynamics-xppshBrushDynamics.js
Rr, s, splusshBrushR.js
matlabmatlabshBrushMatlab.js
swiftswiftshBrushSwift.js
GOgo, golangshBrushGo.js
]]>
+ + + + + Developer + + + + + + + MD + + Markdown + + + +
+ + + + + BuildInCategory枚举 + + /post/revit-category/ + + Revit二次开发中经常用到BuildInCategory过滤元素,以下是通过遍历该枚举获取的数据,其中部分类别的名称未能获取到,本文未显示Unknown部分,完整版本见 BuildInCategory枚举 - 完整

中文名称名称
分析链接OST_LinksAnalytical-2009657
分析楼板基础标记OST_FoundationSlabAnalyticalTags-2009656
分析条形基础标记OST_WallFoundationAnalyticalTags-2009655
分析独立基础标记OST_IsolatedFoundationAnalyticalTags-2009654
分析墙标记OST_WallAnalyticalTags-2009653
分析楼层标记OST_FloorAnalyticalTags-2009652
分析柱标记OST_ColumnAnalyticalTags-2009651
分析支撑标记OST_BraceAnalyticalTags-2009650
分析梁标记OST_BeamAnalyticalTags-2009649
分析节点OST_AnalyticalNodes-2009645
分析基础底板OST_FoundationSlabAnalytical-2009643
分析条形基础OST_WallFoundationAnalytical-2009642
分析独立基础OST_IsolatedFoundationAnalytical-2009641
分析墙OST_WallAnalytical-2009640
分析楼层OST_FloorAnalytical-2009639
顶部线段OST_ColumnEndSegment-2009638
基准线段OST_ColumnStartSegment-2009637
分析柱OST_ColumnAnalytical-2009636
末端线段OST_BraceEndSegment-2009635
起点线段OST_BraceStartSegment-2009634
分析支撑OST_BraceAnalytical-2009633
末端线段OST_BeamEndSegment-2009632
起点线段OST_BeamStartSegment-2009631
分析梁OST_BeamAnalytical-2009630
棍状符号OST_StructuralTrussStickSymbols-2009608
隐藏线OST_MassHiddenLines-2009532
隐藏线OST_CurtaSystemHiddenLines-2009531
隐藏线OST_EntourageHiddenLines-2009529
隐藏线OST_PlantingHiddenLines-2009528
隐藏线OST_SpecialityEquipmentHiddenLines-2009527
隐藏线OST_TopographyHiddenLines-2009526
隐藏线OST_SiteHiddenLines-2009524
隐藏线OST_RoadsHiddenLines-2009523
隐藏线OST_ParkingHiddenLines-2009522
隐藏线OST_PlumbingFixturesHiddenLines-2009521
隐藏线OST_MechanicalEquipmentHiddenLines-2009520
隐藏线OST_LightingFixturesHiddenLines-2009519
隐藏线OST_FurnitureSystemsHiddenLines-2009518
隐藏线OST_ElectricalFixturesHiddenLines-2009517
隐藏线OST_ElectricalEquipmentHiddenLines-2009516
隐藏线OST_CaseworkHiddenLines-2009515
隐藏线OST_DetailComponentsHiddenLines-2009514
隐藏线OST_ShaftOpeningHiddenLines-2009513
隐藏线OST_GenericModelHiddenLines-2009512
隐藏线OST_CurtainWallMullionsHiddenLines-2009511
隐藏线OST_CurtainWallPanelsHiddenLines-2009510
隐藏线OST_RampsHiddenLines-2009509
隐藏线OST_StairsRailingHiddenLines-2009508
隐藏线OST_StairsHiddenLines-2009507
隐藏线OST_ColumnsHiddenLines-2009506
隐藏线OST_FurnitureHiddenLines-2009505
隐藏线OST_LinesHiddenLines-2009504
隐藏线OST_CeilingsHiddenLines-2009503
隐藏线OST_RoofsHiddenLines-2009502
隐藏线OST_DoorsHiddenLines-2009501
隐藏线OST_WindowsHiddenLines-2009500
轮廓标记OST_StructConnectionProfilesTags-2009064
孔标记OST_StructConnectionHoleTags-2009063
隐藏线OST_CouplerHiddenLines-2009062
结构钢筋接头标记OST_CouplerTags-2009061
结构钢筋接头OST_Coupler-2009060
焊接标记OST_StructConnectionWeldTags-2009059
剪力钉标记OST_StructConnectionShearStudTags-2009058
锚固件标记OST_StructConnectionAnchorTags-2009057
螺栓标记OST_StructConnectionBoltTags-2009056
板标记OST_StructConnectionPlateTags-2009055
隐藏线OST_RebarHiddenLines-2009050
修改器OST_StructConnectionModifiers-2009047
焊缝OST_StructConnectionWelds-2009046
OST_StructConnectionHoles-2009045
剪力钉OST_StructConnectionShearStuds-2009044
其他OST_StructConnectionOthers-2009042
螺栓OST_StructConnectionBolts-2009041
结构连接标记OST_StructConnectionTags-2009040
锚固件OST_StructConnectionAnchors-2009039
平板OST_StructConnectionPlates-2009038
轮廓OST_StructConnectionProfiles-2009037
参照OST_StructConnectionReference-2009036
符号OST_StructConnectionSymbol-2009033
隐藏线OST_StructConnectionHiddenLines-2009032
结构连接OST_StructConnections-2009030
边界OST_FabricAreaBoundary-2009029
结构钢筋网符号OST_FabricReinSpanSymbol-2009028
钢筋网OST_FabricReinforcementWire-2009027
边界OST_FabricReinforcementBoundary-2009026
钢筋集切换OST_RebarSetToggle-2009025
结构钢筋网标记OST_FabricReinforcementTags-2009022
结构区域钢筋标记OST_AreaReinTags-2009021
结构钢筋标记OST_RebarTags-2009020
<钢筋网片>OST_FabricAreaSketchSheetsLines-2009019
<钢筋网外围>OST_FabricAreaSketchEnvelopeLines-2009018
结构钢筋网区域OST_FabricAreas-2009017
结构钢筋网OST_FabricReinforcement-2009016
钢筋保护层参照OST_RebarCover-2009015
钢筋形状OST_RebarShape-2009013
边界OST_PathReinBoundary-2009012
结构路径钢筋标记OST_PathReinTags-2009011
结构路径钢筋符号OST_PathReinSpanSymbol-2009010
结构路径钢筋OST_PathRein-2009009
边界OST_AreaReinBoundary-2009006
结构区域钢筋符号OST_AreaReinSpanSymbol-2009005
结构区域钢筋OST_AreaRein-2009003
结构钢筋OST_Rebar-2009000
隔热层OST_FabricationPipeworkInsulation-2008221
内衬OST_FabricationDuctworkLining-2008220
OST_FabricationContainmentDrop-2008219
OST_FabricationContainmentRise-2008218
OST_FabricationPipeworkDrop-2008217
OST_FabricationPipeworkRise-2008216
符号OST_FabricationContainmentSymbology-2008215
中心线OST_FabricationContainmentCenterLine-2008214
MEP 预制保护层标记OST_FabricationContainmentTags-2008213
MEP 预制保护层OST_FabricationContainment-2008212
符号OST_FabricationPipeworkSymbology-2008211
中心线OST_FabricationPipeworkCenterLine-2008210
MEP 预制管道标记OST_FabricationPipeworkTags-2008209
MEP 预制管道OST_FabricationPipework-2008208
符号OST_FabricationDuctworkSymbology-2008207
OST_FabricationDuctworkDrop-2008206
OST_FabricationDuctworkRise-2008205
MEP 预制支架标记OST_FabricationHangerTags-2008204
MEP 预制支架OST_FabricationHangers-2008203
隔热层OST_FabricationDuctworkInsulation-2008198
中心线OST_FabricationDuctworkCenterLine-2008196
MEP 预制管网标记OST_FabricationDuctworkTags-2008194
MEP 预制管网OST_FabricationDuctwork-2008193
着色OST_gbXML_Shade-2008187
分析表面OST_AnalyticSurfaces-2008186
分析空间OST_AnalyticSpaces-2008185
空气洞口OST_gbXML_OpeningAir-2008184
非推拉门OST_gbXML_NonSlidingDoor-2008183
推拉门OST_gbXML_SlidingDoor-2008182
可操作天窗OST_gbXML_OperableSkylight-2008181
固定天窗OST_gbXML_FixedSkylight-2008180
可操作窗口OST_gbXML_OperableWindow-2008179
固定窗OST_gbXML_FixedWindow-2008178
地下天花板OST_gbXML_UndergroundCeiling-2008177
地下板OST_gbXML_UndergroundSlab-2008176
地下墙OST_gbXML_UndergroundWall-2008175
空气曲面OST_gbXML_SurfaceAir-2008174
天花板OST_gbXML_Ceiling-2008173
内部楼板OST_gbXML_InteriorFloor-2008172
内墙OST_gbXML_InteriorWall-2008171
平整表面上的板OST_gbXML_SlabOnGrade-2008170
活动楼板OST_gbXML_RaisedFloor-2008169
屋顶OST_gbXML_Roof-2008168
外墙OST_gbXML_ExteriorWall-2008167
管段OST_PipeSegments-2008163
管道占位符OST_PlaceHolderPipes-2008161
风管占位符OST_PlaceHolderDucts-2008160
参照线OST_PipingSystem_Reference_Visibility-2008159
参照线OST_DuctSystem_Reference_Visibility-2008157
管道隔热层标记OST_PipeInsulationsTags-2008155
风管内衬标记OST_DuctLiningsTags-2008154
风管隔热层标记OST_DuctInsulationsTags-2008153
电气备件/空间电路OST_ElectricalInternalCircuits-2008152
配电盘明细表图形OST_PanelScheduleGraphics-2008151
电缆桥架管路OST_CableTrayRun-2008150
线管管路OST_ConduitRun-2008149
中心线OST_ConduitFittingCenterLine-2008141
中心线OST_CableTrayFittingCenterLine-2008140
中心线OST_ConduitCenterLine-2008139
OST_ConduitDrop-2008138
OST_ConduitRiseDrop-2008137
中心线OST_CableTrayCenterLine-2008136
OST_CableTrayDrop-2008135
OST_CableTrayRiseDrop-2008134
线管标记OST_ConduitTags-2008133
线管OST_Conduit-2008132
电缆桥架标记OST_CableTrayTags-2008131
电缆桥架OST_CableTray-2008130
线管配件标记OST_ConduitFittingTags-2008129
线管配件OST_ConduitFitting-2008128
电缆桥架配件标记OST_CableTrayFittingTags-2008127
电缆桥架配件OST_CableTrayFitting-2008126
布管系统配置OST_RoutingPreferences-2008125
风管内衬OST_DuctLinings-2008124
风管隔热层OST_DuctInsulations-2008123
管道隔热层OST_PipeInsulations-2008122
参照线OST_HVAC_Zones_Reference_Visibility-2008118
内部填充OST_HVAC_Zones_InteriorFill_Visibility-2008117
颜色填充OST_HVAC_Zones_ColorFill-2008116
分区标记OST_ZoneTags-2008115
边界OST_HVAC_Zones_Boundary-2008108
HVAC 区OST_HVAC_Zones-2008107
开关系统OST_SwitchSystem-2008101
喷头标记OST_SprinklerTags-2008100
喷头OST_Sprinklers-2008099
洞口OST_GbXML_Opening-2008095
地下OST_GbXML_SType_Underground-2008094
着色OST_GbXML_SType_Shade-2008093
外部OST_GbXML_SType_Exterior-2008092
内部OST_GbXML_SType_Interior-2008091
分析表面OST_GbXMLFaces-2008090
回路方向OST_WireHomeRunArrows-2008089
灯具标记OST_LightingDeviceTags-2008088
灯具OST_LightingDevices-2008087
火警设备标记OST_FireAlarmDeviceTags-2008086
火警设备OST_FireAlarmDevices-2008085
数据设备标记OST_DataDeviceTags-2008084
数据设备OST_DataDevices-2008083
通讯设备标记OST_CommunicationDeviceTags-2008082
通讯设备OST_CommunicationDevices-2008081
安全设备标记OST_SecurityDeviceTags-2008080
安全设备OST_SecurityDevices-2008079
护理呼叫设备标记OST_NurseCallDeviceTags-2008078
护理呼叫设备OST_NurseCallDevices-2008077
电话设备标记OST_TelephoneDeviceTags-2008076
电话设备OST_TelephoneDevices-2008075
导线记号OST_WireTickMarks-2008074
中心线OST_PipeFittingCenterLine-2008072
OST_PipeCurvesDrop-2008069
中心线OST_DuctFittingCenterLine-2008066
OST_DuctCurvesDrop-2008062
风管管件标记OST_DuctFittingTags-2008061
管件标记OST_PipeFittingTags-2008060
管道颜色填充OST_PipeColorFills-2008059
管道颜色填充图例OST_PipeColorFillLegends-2008058
导线标记OST_WireTags-2008057
管道附件标记OST_PipeAccessoryTags-2008056
管道附件OST_PipeAccessory-2008055
OST_PipeCurvesRiseDrop-2008054
填充图案OST_FlexPipeCurvesPattern-2008053
中心线OST_FlexPipeCurvesCenterLine-2008051
软管OST_FlexPipeCurves-2008050
管件OST_PipeFitting-2008049
软管标记OST_FlexPipeTags-2008048
管道标记OST_PipeTags-2008047
中心线OST_PipeCurvesCenterLine-2008045
管道OST_PipeCurves-2008044
管道系统OST_PipingSystem-2008043
导线OST_Wire-2008039
电路OST_ElectricalCircuit-2008037
OST_DuctCurvesRiseDrop-2008036
填充图案OST_FlexDuctCurvesPattern-2008023
中心线OST_FlexDuctCurvesCenterLine-2008021
软风管OST_FlexDuctCurves-2008020
风管附件标记OST_DuctAccessoryTags-2008017
风管附件OST_DuctAccessory-2008016
风管系统OST_DuctSystem-2008015
风道末端标记OST_DuctTerminalTags-2008014
风道末端OST_DuctTerminal-2008013
风管管件OST_DuctFitting-2008010
风管颜色填充OST_DuctColorFills-2008005
软风管标记OST_FlexDuctTags-2008004
风管标记OST_DuctTags-2008003
中心线OST_DuctCurvesCenterLine-2008001
风管OST_DuctCurves-2008000
风管颜色填充图例OST_DuctColorFillLegends-2007004
桥梁支座OST_BridgeBearings-2006138
桥梁大梁OST_BridgeGirders-2006137
桥梁基础OST_BridgeFoundations-2006136
桥面OST_BridgeDecks-2006135
桥拱OST_BridgeArches-2006134
桥梁缆索OST_BridgeCables-2006133
桥塔OST_BridgeTowers-2006132
桥墩OST_BridgePiers-2006131
桥台OST_BridgeAbutments-2006130
平面视图中的支撑符号OST_StructuralBracePlanReps-2006110
连接符号OST_StructConnectionSymbols-2006100
结构注释OST_StructuralAnnotations-2006090
云线批注标记OST_RevisionCloudTags-2006080
云线批注OST_RevisionClouds-2006060
立面标记OST_ElevationMarks-2006045
轴网标头OST_GridHeads-2006040
标高标头OST_LevelHeads-2006020
范围框OST_VolumeOfInterest-2006000
边界条件OST_BoundaryConditions-2005301
内部面荷载标记OST_InternalAreaLoadTags-2005255
内部线荷载标记OST_InternalLineLoadTags-2005254
内部点荷载标记OST_InternalPointLoadTags-2005253
面荷载标记OST_AreaLoadTags-2005252
线荷载标记OST_LineLoadTags-2005251
点荷载标记OST_PointLoadTags-2005250
地震荷载OST_LoadCasesSeismic-2005218
温度荷载OST_LoadCasesTemperature-2005217
偶然荷载OST_LoadCasesAccidental-2005216
屋顶活荷载OST_LoadCasesRoofLive-2005215
雪荷载OST_LoadCasesSnow-2005214
风荷载OST_LoadCasesWind-2005213
活荷载OST_LoadCasesLive-2005212
恒荷载OST_LoadCasesDead-2005211
结构荷载工况OST_LoadCases-2005210
内部面荷载OST_InternalAreaLoads-2005207
内部线荷载OST_InternalLineLoads-2005206
内部点荷载OST_InternalPointLoads-2005205
结构内部荷载OST_InternalLoads-2005204
面荷载OST_AreaLoads-2005203
线荷载OST_LineLoads-2005202
点荷载OST_PointLoads-2005201
结构荷载OST_Loads-2005200
结构梁系统标记OST_BeamSystemTags-2005130
基础跨方向符号OST_FootingSpanDirectionSymbol-2005111
跨方向符号OST_SpanDirectionSymbol-2005110
高程点符号OST_SpotElevSymbols-2005100
结构桁架标记OST_TrussTags-2005030
注释记号标记OST_KeynoteTags-2005029
详图项目标记OST_DetailComponentTags-2005028
材质标记OST_MaterialTags-2005027
楼板标记OST_FloorTags-2005026
幕墙系统标记OST_CurtaSystemTags-2005025
楼梯标记OST_StairsTags-2005023
多类别标记OST_MultiCategoryTags-2005022
植物标记OST_PlantingTags-2005021
面积标记OST_AreaTags-2005020
结构基础标记OST_StructuralFoundationTags-2005019
结构柱标记OST_StructuralColumnTags-2005018
停车场标记OST_ParkingTags-2005017
场地标记OST_SiteTags-2005016
结构框架标记OST_StructuralFramingTags-2005015
专用设备标记OST_SpecialityEquipmentTags-2005014
常规模型标记OST_GenericModelTags-2005013
幕墙嵌板标记OST_CurtainWallPanelTags-2005012
墙标记OST_WallTags-2005011
卫浴装置标记OST_PlumbingFixtureTags-2005010
机电设备标记OST_MechanicalEquipmentTags-2005009
照明设备标记OST_LightingFixtureTags-2005008
家具系统标记OST_FurnitureSystemTags-2005007
家具标记OST_FurnitureTags-2005006
电气装置标记OST_ElectricalFixtureTags-2005004
电气设备标记OST_ElectricalEquipmentTags-2005003
天花板标记OST_CeilingTags-2005002
橱柜标记OST_CaseworkTags-2005001
颜色填充OST_MEPSpaceColorFill-2003605
参照OST_MEPSpaceReferenceVisibility-2003602
内墙OST_MEPSpaceInteriorFillVisibility-2003601
空间OST_MEPSpaces-2003600
体量着色OST_MassShade-2003418
体量洞口OST_MassOpening-2003417
体量天窗OST_MassSkylights-2003416
体量玻璃OST_MassGlazing-2003415
体量屋顶OST_MassRoof-2003414
体量外墙OST_MassExteriorWall-2003413
体量内墙OST_MassInteriorWall-2003412
体量分区OST_MassZone-2003411
体量楼层标记OST_MassAreaFaceTags-2003410
体量标记OST_MassTags-2003405
形式OST_MassForm-2003404
体量楼层OST_MassFloor-2003403
体量OST_Mass-2003400
图案填充OST_DividedSurface_PatternFill-2003327
填充图案线OST_DividedSurface_PatternLines-2003326
网格线OST_DividedSurface_Gridlines-2003325
节点OST_DividedSurface_Nodes-2003324
向下箭头OST_RampsDownArrow-2003308
向上箭头OST_RampsUpArrow-2003307
文字(向下)OST_RampsDownText-2003306
文字(向上)OST_RampsUpText-2003305
超出截面线的梯边梁OST_RampsStringerAboveCut-2003304
梯边梁OST_RampsStringer-2003303
坡道超出截面线OST_RampsAboveCut-2003302
面积OST_Areas-2003200
项目信息OST_ProjectInformation-2003101
图纸OST_Sheets-2003100
详图项目OST_DetailComponents-2002000
屋檐底板OST_RoofSoffit-2001393
楼板边缘OST_EdgeSlab-2001392
檐沟OST_Gutter-2001391
封檐板OST_Fascia-2001390
环境OST_Entourage-2001370
植物OST_Planting-2001360
隐藏线OST_StructuralStiffenerHiddenLines-2001358
定位线OST_StructuralColumnLocationLine-2001357
定位线OST_StructuralFramingLocationLine-2001356
结构加强板标记OST_StructuralStiffenerTags-2001355
结构加强板OST_StructuralStiffener-2001354
RVT 链接OST_RvtLinks-2001352
专用设备OST_SpecialityEquipment-2001350
刚性链接OST_ColumnAnalyticalRigidLinks-2001344
次等高线OST_SecondaryTopographyContours-2001343
主等高线OST_TopographyContours-2001342
三角形边缘OST_TopographySurface-2001341
地形OST_Topography-2001340
地形链接OST_TopographyLink-2001339
结构桁架OST_StructuralTruss-2001336
棍状符号OST_StructuralColumnStickSymbols-2001335
隐藏线OST_HiddenStructuralColumnLines-2001334
刚性链接OST_AnalyticalRigidLinks-2001333
结构柱OST_StructuralColumns-2001330
隐藏线OST_HiddenStructuralFramingLines-2001329
结构梁系统OST_StructuralFramingSystem-2001327
结构框架OST_StructuralFraming-2001320
隐藏线OST_HiddenStructuralFoundationLines-2001302
结构基础OST_StructuralFoundation-2001300
测量点OST_SharedBasePoint-2001272
项目基点OST_ProjectBasePoint-2001271
建筑红线线段标记OST_SitePropertyLineSegmentTags-2001269
建筑红线线段OST_SitePropertyLineSegment-2001268
属性标记OST_SitePropertyTags-2001267
边界点OST_SitePointBoundary-2001266
建筑红线OST_SiteProperty-2001265
建筑地坪OST_BuildingPad-2001263
内部点OST_SitePoint-2001262
场地OST_Site-2001260
道路OST_Roads-2001220
停车场OST_Parking-2001180
卫浴装置OST_PlumbingFixtures-2001160
机械设备OST_MechanicalEquipment-2001140
光源OST_LightingFixtureSource-2001121
照明设备OST_LightingFixtures-2001120
家具系统OST_FurnitureSystems-2001100
电气装置OST_ElectricalFixtures-2001060
电气设备OST_ElectricalEquipment-2001040
橱柜OST_Casework-2001000
竖井洞口OST_ShaftOpening-2000996
水力分离符号OST_PipeHydronicSeparationSymbols-2000988
机械设备集边界线OST_MechanicalEquipmentSetBoundaryLines-2000987
机械设备集标记OST_MechanicalEquipmentSetTags-2000986
机械设备集OST_MechanicalEquipmentSet-2000985
连接线符号OST_AnalyticalPipeConnectionLineSymbol-2000984
分析管道连接OST_AnalyticalPipeConnections-2000983
局部坐标系OST_FndSlabLocalCoordSys-2000976
局部坐标系OST_FloorLocalCoordSys-2000975
局部坐标系OST_WallLocalCoordSys-2000974
局部坐标系OST_BraceLocalCoordSys-2000973
局部坐标系OST_ColumnLocalCoordSys-2000972
局部坐标系OST_BeamLocalCoordSys-2000971
多钢筋注释OST_MultiReferenceAnnotations-2000970
分析节点标记OST_NodeAnalyticalTags-2000956
分析链接标记OST_LinkAnalyticalTags-2000955
支撑OST_StairsSupports-2000952
<高于> 扶手OST_RailingHandRailAboveCut-2000951
<高于> 顶部扶栏OST_RailingTopRailAboveCut-2000950
终端OST_RailingTermination-2000949
支座OST_RailingSupport-2000948
扶手OST_RailingHandRail-2000947
顶部扶栏OST_RailingTopRail-2000946
楼梯踏板/踢面数OST_StairsTriserNumbers-2000944
楼梯支撑标记OST_StairsSupportTags-2000942
楼梯平台标记OST_StairsLandingTags-2000941
楼梯梯段标记OST_StairsRunTags-2000940
<高于> 向上箭头OST_StairsPathsAboveCut-2000939
楼梯路径OST_StairsPaths-2000938
<高于> 踢面线OST_StairsRiserLinesAboveCut-2000937
踢面线OST_StairsRiserLines-2000936
<高于> 轮廓OST_StairsOutlinesAboveCut-2000935
轮廓OST_StairsOutlines-2000934
<高于> 楼梯前缘线OST_StairsNosingLinesAboveCut-2000933
楼梯前缘线OST_StairsNosingLines-2000932
<高于> 剪切标记OST_StairsCutMarksAboveCut-2000931
剪切标记OST_StairsCutMarks-2000930
踢面/踏板OST_StairsTrisers-2000921
平台OST_StairsLandings-2000920
梯段OST_StairsRuns-2000919
线OST_AdaptivePoints_Lines-2000903
平面OST_AdaptivePoints_Planes-2000902
OST_AdaptivePoints_Points-2000901
自适应点OST_AdaptivePoints-2000900
<空间分隔>OST_MEPSpaceSeparationLines-2000831
线OST_ReferencePoints_Lines-2000713
平面OST_ReferencePoints_Planes-2000712
OST_ReferencePoints_Points-2000711
参照点OST_ReferencePoints-2000710
材质OST_Materials-2000700
截面填充图案OST_CeilingsCutPattern-2000617
公共边OST_CeilingsDefault-2000616
面层 2 [5]OST_CeilingsFinish2-2000615
面层 1 [4]OST_CeilingsFinish1-2000614
衬底 [2]OST_CeilingsSubstrate-2000613
保温层/空气层 [3]OST_CeilingsInsulation-2000612
结构 [1]OST_CeilingsStructure-2000611
涂膜层OST_CeilingsMembrane-2000610
内部边缘OST_FloorsInteriorEdges-2000609
截面填充图案OST_FloorsCutPattern-2000608
隐藏线OST_HiddenFloorLines-2000607
公共边OST_FloorsDefault-2000606
面层 2 [5]OST_FloorsFinish2-2000605
面层 1 [4]OST_FloorsFinish1-2000604
衬底 [2]OST_FloorsSubstrate-2000603
保温层/空气层 [3]OST_FloorsInsulation-2000602
结构 [1]OST_FloorsStructure-2000601
涂膜层OST_FloorsMembrane-2000600
内部边缘OST_RoofsInteriorEdges-2000598
截面填充图案OST_RoofsCutPattern-2000597
公共边OST_RoofsDefault-2000596
面层 2 [5]OST_RoofsFinish2-2000595
面层 1 [4]OST_RoofsFinish1-2000594
衬底 [2]OST_RoofsSubstrate-2000593
保温层/空气层 [3]OST_RoofsInsulation-2000592
结构 [1]OST_RoofsStructure-2000591
涂膜层OST_RoofsMembrane-2000590
截面填充图案OST_WallsCutPattern-2000588
隐藏线OST_HiddenWallLines-2000587
公共边OST_WallsDefault-2000586
面层 2 [5]OST_WallsFinish2-2000585
面层 1 [4]OST_WallsFinish1-2000584
衬底 [2]OST_WallsSubstrate-2000583
保温层/空气层 [3]OST_WallsInsulation-2000582
结构 [1]OST_WallsStructure-2000581
涂膜层OST_WallsMembrane-2000580
明细表OST_Schedules-2000573
明细表图形OST_ScheduleGraphics-2000570
光栅图像OST_RasterImages-2000560
颜色填充OST_RoomColorFill-2000551
颜色填充图例OST_ColorFillLegends-2000550
注释裁剪边界OST_AnnotationCropSpecial-2000549
裁剪边界OST_CropBoundarySpecial-2000548
注释裁剪边界OST_AnnotationCrop-2000547
详图索引引线OST_CalloutLeaderLine-2000544
表面填充图案OST_CeilingsSurfacePattern-2000543
表面填充图案OST_RoofsSurfacePattern-2000542
表面填充图案OST_FloorsSurfacePattern-2000541
表面填充图案OST_WallsSurfacePattern-2000540
详图索引边界OST_CalloutBoundary-2000539
详图索引标头OST_CalloutHeads-2000538
详图索引OST_Callouts-2000537
裁剪边界OST_CropBoundary-2000536
立面OST_Elev-2000535
参照平面OST_CLines-2000530
视图标题OST_ViewportLabel-2000515
视口OST_Viewports-2000510
相机OST_Camera_Lines-2000501
空间标记OST_MEPSpaceTags-2000485
房间标记OST_RoomTags-2000480
门标记OST_DoorTags-2000460
窗标记OST_WindowTags-2000450
宽线OST_SectionHeadWideLines-2000404
中粗线OST_SectionHeadMediumLines-2000403
细线OST_SectionHeadThinLines-2000401
剖面标头OST_SectionHeads-2000400
等高线标签OST_ContourLabels-2000350
幕墙系统OST_CurtaSystem-2000340
幕墙系统网格OST_CurtainGridsCurtaSystem-2000323
幕墙网格OST_CurtainGridsWall-2000321
幕墙屋顶网格OST_CurtainGridsRoof-2000320
分析显示样式OST_AnalysisDisplayStyle-2000304
分析结果OST_AnalysisResults-2000303
渲染区域OST_RenderRegions-2000302
剖面框OST_SectionBox-2000301
文字注释OST_TextNotes-2000300
<中心线>OST_CenterLines-2000288
<超出>OST_LinesBeyond-2000287
<隐藏>OST_HiddenLines-2000286
<已拆除>OST_DemolishedLines-2000285
<架空线>OST_OverheadLines-2000284
宽线OST_TitleBlockWideLines-2000283
中粗线OST_TitleBlockMediumLines-2000282
细线OST_TitleBlockThinLines-2000281
图框OST_TitleBlocks-2000280
视图OST_Views-2000279
隐藏线OST_PartHiddenLines-2000271
零件标记OST_PartTags-2000270
组成部分OST_Parts-2000269
部件标记OST_AssemblyTags-2000268
部件OST_Assemblies-2000267
屋顶标记OST_RoofTags-2000266
高程点坡度OST_SpotSlopes-2000265
高程点坐标OST_SpotCoordinates-2000264
高程点OST_SpotElevations-2000263
自动绘制尺寸标注OST_WeakDims-2000261
尺寸标注OST_Dimensions-2000260
标高OST_Levels-2000240
位移路径OST_DisplacementPath-2000223
多段轴网OST_GridChains-2000221
轴网OST_Grids-2000220
断开剖面线OST_BrokenSectionLine-2000202
剖面线OST_SectionLine-2000201
剖面OST_Sections-2000200
视图参照OST_ReferenceViewer-2000198
视图参照OST_ReferenceViewerSymbol-2000197
在族中导入OST_ImportObjectStyles-2000196
遮罩区域OST_MaskingRegion-2000194
拼接线OST_Matchline-2000193
平面区域OST_PlanRegion-2000191
填充区域OST_FilledRegion-2000190
墙饰条OST_Cornices-2000181
坡道OST_Ramps-2000180
幕墙网格OST_CurtainGrids-2000173
幕墙竖梃OST_CurtainWallMullions-2000171
幕墙嵌板OST_CurtainWallPanels-2000170
颜色填充OST_AreaColorFill-2000165
参照OST_AreaReferenceVisibility-2000164
内部填充OST_AreaInteriorFillVisibility-2000163
参照OST_RoomReferenceVisibility-2000162
内部填充OST_RoomInteriorFillVisibility-2000161
房间OST_Rooms-2000160
常规模型OST_GenericModel-2000151
常规注释OST_GenericAnnotation-2000150
栏杆扶手标记OST_StairsRailingTags-2000133
<高于> 栏杆扶手截面线OST_StairsRailingAboveCut-2000132
向下箭头OST_StairsDownArrows-2000131
向上箭头OST_StairsUpArrows-2000130
文字(向下)OST_StairsDownText-2000129
扶栏OST_StairsRailingRail-2000128
栏杆OST_StairsRailingBaluster-2000127
栏杆扶手OST_StairsRailing-2000126
文字(向上)OST_StairsUpText-2000125
<高于> 支撑OST_StairsSupportsAboveCut-2000124
支撑OST_StairsStringerCarriage-2000123
楼梯OST_Stairs-2000120
导向轴网OST_GuideGrid-2000107
OST_Columns-2000100
模型组OST_IOSModelGroups-2000095
参照线OST_ReferenceLines-2000083
家具OST_Furniture-2000080
<面积边界>OST_AreaSchemeLines-2000079
线OST_GenericLines-2000078
隔热层线OST_InsulationLines-2000077
<房间分隔>OST_RoomSeparationLines-2000066
旋转轴OST_AxisOfRotation-2000065
线OST_Lines-2000051
<草图>OST_SketchLines-2000045
宽线OST_CurvesWideLines-2000044
中粗线OST_CurvesMediumLines-2000043
细线OST_CurvesThinLines-2000042
天花板OST_Ceilings-2000038
屋顶OST_Roofs-2000035
楼板OST_Floors-2000032
玻璃OST_DoorsGlassProjection-2000031
框架/竖梃OST_DoorsFrameMullionProjection-2000029
洞口OST_DoorsOpeningProjection-2000027
嵌板OST_DoorsPanelProjection-2000025
OST_Doors-2000023
洞口OST_WindowsOpeningProjection-2000022
窗台/盖板OST_WindowsSillHeadProjection-2000020
框架/竖梃OST_WindowsFrameMullionProjection-2000018
玻璃OST_WindowsGlassProjection-2000016
OST_Windows-2000014
OST_Walls-2000011
]]>
+ + + + + Developer + + + + + + + .NET + + Revit + + + +
+ + + + + BuildInCategory枚举 - 完整 + + /post/revit-category-all/ + + Revit二次开发中经常用到BuildInCategory过滤元素,以下是通过遍历该枚举获取的数据,其中部分类别的名称未能获取到,显示为Unknown,请悉知。

中文名称名称
UnknownOST_StackedWalls_Obsolete_IdInWrongRange-20034100
UnknownOST_MassTags_Obsolete_IdInWrongRange-20034005
UnknownOST_MassSurface_Obsolete_IdInWrongRange-20034004
UnknownOST_MassFloor_Obsolete_IdInWrongRange-20034003
UnknownOST_Mass_Obsolete_IdInWrongRange-20034000
UnknownOST_WallRefPlanes_Obsolete_IdInWrongRange-20000896
UnknownOST_StickSymbols_Obsolete_IdInWrongRange-20000828
UnknownOST_RemovedGridSeg_Obsolete_IdInWrongRange-20000827
UnknownOST_PointClouds-2010001
UnknownOST_AssemblyOrigin_Lines-2009661
UnknownOST_AssemblyOrigin_Planes-2009660
UnknownOST_AssemblyOrigin_Points-2009659
UnknownOST_AssemblyOrigin-2009658
分析链接OST_LinksAnalytical-2009657
分析楼板基础标记OST_FoundationSlabAnalyticalTags-2009656
分析条形基础标记OST_WallFoundationAnalyticalTags-2009655
分析独立基础标记OST_IsolatedFoundationAnalyticalTags-2009654
分析墙标记OST_WallAnalyticalTags-2009653
分析楼层标记OST_FloorAnalyticalTags-2009652
分析柱标记OST_ColumnAnalyticalTags-2009651
分析支撑标记OST_BraceAnalyticalTags-2009650
分析梁标记OST_BeamAnalyticalTags-2009649
UnknownOST_AnalyticalNodes_Lines-2009648
UnknownOST_AnalyticalNodes_Planes-2009647
UnknownOST_AnalyticalNodes_Points-2009646
分析节点OST_AnalyticalNodes-2009645
UnknownOST_RigidLinksAnalytical-2009644
分析基础底板OST_FoundationSlabAnalytical-2009643
分析条形基础OST_WallFoundationAnalytical-2009642
分析独立基础OST_IsolatedFoundationAnalytical-2009641
分析墙OST_WallAnalytical-2009640
分析楼层OST_FloorAnalytical-2009639
顶部线段OST_ColumnEndSegment-2009638
基准线段OST_ColumnStartSegment-2009637
分析柱OST_ColumnAnalytical-2009636
末端线段OST_BraceEndSegment-2009635
起点线段OST_BraceStartSegment-2009634
分析支撑OST_BraceAnalytical-2009633
末端线段OST_BeamEndSegment-2009632
起点线段OST_BeamStartSegment-2009631
分析梁OST_BeamAnalytical-2009630
UnknownOST_CompassSecondaryMonth-2009624
UnknownOST_CompassPrimaryMonth-2009623
UnknownOST_CompassSectionFilled-2009622
UnknownOST_LightLine-2009621
UnknownOST_MultiSurface-2009620
UnknownOST_SunSurface-2009619
UnknownOST_Analemma-2009618
UnknownOST_SunsetText-2009617
UnknownOST_CompassSection-2009616
UnknownOST_CompassOuter-2009615
UnknownOST_SunriseText-2009614
UnknownOST_CompassInner-2009613
UnknownOST_SunPath2-2009612
UnknownOST_SunPath1-2009611
UnknownOST_Sun-2009610
UnknownOST_SunStudy-2009609
棍状符号OST_StructuralTrussStickSymbols-2009608
UnknownOST_StructuralTrussHiddenLines-2009607
UnknownOST_TrussChord-2009606
UnknownOST_TrussWeb-2009605
UnknownOST_TrussBottomChordCurve-2009604
UnknownOST_TrussTopChordCurve-2009603
UnknownOST_TrussVertWebCurve-2009602
UnknownOST_TrussDiagWebCurve-2009601
UnknownOST_Truss-2009600
UnknownOST_RailingSystemTransitionHiddenLines_Deprecated-2009549
UnknownOST_RailingSystemTerminationHiddenLines_Deprecated-20095
UnknownOST_RailingSystemRailHiddenLines_Deprecated-2009547
UnknownOST_RailingSystemTopRailHiddenLines_Deprecated-2009546
UnknownOST_RailingSystemHandRailBracketHiddenLines_Deprecated-2
UnknownOST_RailingSystemHandRailHiddenLines_Deprecated-2009544
UnknownOST_RailingSystemPanelBracketHiddenLines_Deprecated-2009
UnknownOST_RailingSystemPanelHiddenLines_Deprecated-2009542
UnknownOST_RailingSystemBalusterHiddenLines_Deprecated-2009541
UnknownOST_RailingSystemPostHiddenLines_Deprecated-2009540
UnknownOST_RailingSystemSegmentHiddenLines_Deprecated-2009539
UnknownOST_RailingSystemHiddenLines_Deprecated-2009538
UnknownOST_StairStringer2012HiddenLines_Deprecated-2009537
UnknownOST_StairTread2012HiddenLines_Deprecated-2009536
UnknownOST_StairLanding2012HiddenLines_Deprecated-2009535
UnknownOST_StairRun2012HiddenLines_Deprecated-2009534
UnknownOST_Stairs2012HiddenLines_Deprecated-2009533
隐藏线OST_MassHiddenLines-2009532
隐藏线OST_CurtaSystemHiddenLines-2009531
UnknownOST_OBSOLETE_ElemArrayHiddenLines-2009530
隐藏线OST_EntourageHiddenLines-2009529
隐藏线OST_PlantingHiddenLines-2009528
隐藏线OST_SpecialityEquipmentHiddenLines-2009527
隐藏线OST_TopographyHiddenLines-2009526
UnknownOST_StructuralFramingSystemHiddenLines_Obsolete-2009525
隐藏线OST_SiteHiddenLines-2009524
隐藏线OST_RoadsHiddenLines-2009523
隐藏线OST_ParkingHiddenLines-2009522
隐藏线OST_PlumbingFixturesHiddenLines-2009521
隐藏线OST_MechanicalEquipmentHiddenLines-2009520
隐藏线OST_LightingFixturesHiddenLines-2009519
隐藏线OST_FurnitureSystemsHiddenLines-2009518
隐藏线OST_ElectricalFixturesHiddenLines-2009517
隐藏线OST_ElectricalEquipmentHiddenLines-2009516
隐藏线OST_CaseworkHiddenLines-2009515
隐藏线OST_DetailComponentsHiddenLines-2009514
隐藏线OST_ShaftOpeningHiddenLines-2009513
隐藏线OST_GenericModelHiddenLines-2009512
隐藏线OST_CurtainWallMullionsHiddenLines-2009511
隐藏线OST_CurtainWallPanelsHiddenLines-2009510
隐藏线OST_RampsHiddenLines-2009509
隐藏线OST_StairsRailingHiddenLines-2009508
隐藏线OST_StairsHiddenLines-2009507
隐藏线OST_ColumnsHiddenLines-2009506
隐藏线OST_FurnitureHiddenLines-2009505
隐藏线OST_LinesHiddenLines-2009504
隐藏线OST_CeilingsHiddenLines-2009503
隐藏线OST_RoofsHiddenLines-2009502
隐藏线OST_DoorsHiddenLines-2009501
隐藏线OST_WindowsHiddenLines-2009500
轮廓标记OST_StructConnectionProfilesTags-2009064
孔标记OST_StructConnectionHoleTags-2009063
隐藏线OST_CouplerHiddenLines-2009062
结构钢筋接头标记OST_CouplerTags-2009061
结构钢筋接头OST_Coupler-2009060
焊接标记OST_StructConnectionWeldTags-2009059
剪力钉标记OST_StructConnectionShearStudTags-2009058
锚固件标记OST_StructConnectionAnchorTags-2009057
螺栓标记OST_StructConnectionBoltTags-2009056
板标记OST_StructConnectionPlateTags-2009055
隐藏线OST_RebarHiddenLines-2009050
UnknownOST_StructSubConnections-2009049
修改器OST_StructConnectionModifiers-2009047
焊缝OST_StructConnectionWelds-2009046
OST_StructConnectionHoles-2009045
剪力钉OST_StructConnectionShearStuds-2009044
UnknownOST_StructConnectionNobleWarning-2009043
其他OST_StructConnectionOthers-2009042
螺栓OST_StructConnectionBolts-2009041
结构连接标记OST_StructConnectionTags-2009040
锚固件OST_StructConnectionAnchors-2009039
平板OST_StructConnectionPlates-2009038
轮廓OST_StructConnectionProfiles-2009037
参照OST_StructConnectionReference-2009036
UnknownOST_StructConnectionFailed-2009035
UnknownOST_StructConnectionStale-2009034
符号OST_StructConnectionSymbol-2009033
隐藏线OST_StructConnectionHiddenLines-2009032
UnknownOST_StructWeldLines-2009031
结构连接OST_StructConnections-2009030
边界OST_FabricAreaBoundary-2009029
结构钢筋网符号OST_FabricReinSpanSymbol-2009028
钢筋网OST_FabricReinforcementWire-2009027
边界OST_FabricReinforcementBoundary-2009026
钢筋集切换OST_RebarSetToggle-2009025
UnknownOST_FabricAreaTags-2009023
结构钢筋网标记OST_FabricReinforcementTags-2009022
结构区域钢筋标记OST_AreaReinTags-2009021
结构钢筋标记OST_RebarTags-2009020
<钢筋网片>OST_FabricAreaSketchSheetsLines-2009019
<钢筋网外围>OST_FabricAreaSketchEnvelopeLines-2009018
结构钢筋网区域OST_FabricAreas-2009017
结构钢筋网OST_FabricReinforcement-2009016
钢筋保护层参照OST_RebarCover-2009015
UnknownOST_CoverType-2009014
钢筋形状OST_RebarShape-2009013
边界OST_PathReinBoundary-2009012
结构路径钢筋标记OST_PathReinTags-2009011
结构路径钢筋符号OST_PathReinSpanSymbol-2009010
结构路径钢筋OST_PathRein-2009009
UnknownOST_Cage-2009008
UnknownOST_AreaReinXVisibility-2009007
边界OST_AreaReinBoundary-2009006
结构区域钢筋符号OST_AreaReinSpanSymbol-2009005
UnknownOST_AreaReinSketchOverride-2009004
结构区域钢筋OST_AreaRein-2009003
UnknownOST_RebarLines-2009002
UnknownOST_RebarSketchLines-2009001
结构钢筋OST_Rebar-2009000
隔热层OST_FabricationPipeworkInsulation-2008221
内衬OST_FabricationDuctworkLining-2008220
OST_FabricationContainmentDrop-2008219
OST_FabricationContainmentRise-2008218
OST_FabricationPipeworkDrop-2008217
OST_FabricationPipeworkRise-2008216
符号OST_FabricationContainmentSymbology-2008215
中心线OST_FabricationContainmentCenterLine-2008214
MEP 预制保护层标记OST_FabricationContainmentTags-2008213
MEP 预制保护层OST_FabricationContainment-2008212
符号OST_FabricationPipeworkSymbology-2008211
中心线OST_FabricationPipeworkCenterLine-2008210
MEP 预制管道标记OST_FabricationPipeworkTags-2008209
MEP 预制管道OST_FabricationPipework-2008208
符号OST_FabricationDuctworkSymbology-2008207
OST_FabricationDuctworkDrop-2008206
OST_FabricationDuctworkRise-2008205
MEP 预制支架标记OST_FabricationHangerTags-2008204
MEP 预制支架OST_FabricationHangers-2008203
UnknownOST_OBSOLETE_FabricationPartsTmpGraphicDropDrag-200820
UnknownOST_FabricationPartsTmpGraphicDrag-2008201
UnknownOST_OBSOLETE_FabricationPartsTmpGraphicDrop-2008200
UnknownOST_FabricationPartsTmpGraphicEnd-2008199
隔热层OST_FabricationDuctworkInsulation-2008198
UnknownOST_LayoutNodes-2008197
中心线OST_FabricationDuctworkCenterLine-2008196
UnknownOST_FabricationServiceElements-2008195
MEP 预制管网标记OST_FabricationDuctworkTags-2008194
MEP 预制管网OST_FabricationDuctwork-2008193
UnknownOST_LayoutPathBase_Pipings-2008192
UnknownOST_NumberingSchemas-2008191
UnknownOST_DivisionRules-2008190
着色OST_gbXML_Shade-2008187
分析表面OST_AnalyticSurfaces-2008186
分析空间OST_AnalyticSpaces-2008185
空气洞口OST_gbXML_OpeningAir-2008184
非推拉门OST_gbXML_NonSlidingDoor-2008183
推拉门OST_gbXML_SlidingDoor-2008182
可操作天窗OST_gbXML_OperableSkylight-2008181
固定天窗OST_gbXML_FixedSkylight-2008180
可操作窗口OST_gbXML_OperableWindow-2008179
固定窗OST_gbXML_FixedWindow-2008178
地下天花板OST_gbXML_UndergroundCeiling-2008177
地下板OST_gbXML_UndergroundSlab-2008176
地下墙OST_gbXML_UndergroundWall-2008175
空气曲面OST_gbXML_SurfaceAir-2008174
天花板OST_gbXML_Ceiling-2008173
内部楼板OST_gbXML_InteriorFloor-2008172
内墙OST_gbXML_InteriorWall-2008171
平整表面上的板OST_gbXML_SlabOnGrade-2008170
活动楼板OST_gbXML_RaisedFloor-2008169
屋顶OST_gbXML_Roof-2008168
外墙OST_gbXML_ExteriorWall-2008167
UnknownOST_DivisionProfile-2008165
UnknownOST_SplitterProfile-2008164
管段OST_PipeSegments-2008163
UnknownOST_GraphicalWarning_OpenConnector-2008162
管道占位符OST_PlaceHolderPipes-2008161
风管占位符OST_PlaceHolderDucts-2008160
参照线OST_PipingSystem_Reference_Visibility-2008159
UnknownOST_PipingSystem_Reference-2008158
参照线OST_DuctSystem_Reference_Visibility-2008157
UnknownOST_DuctSystem_Reference-2008156
管道隔热层标记OST_PipeInsulationsTags-2008155
风管内衬标记OST_DuctLiningsTags-2008154
风管隔热层标记OST_DuctInsulationsTags-2008153
电气备件/空间电路OST_ElectricalInternalCircuits-2008152
配电盘明细表图形OST_PanelScheduleGraphics-2008151
电缆桥架管路OST_CableTrayRun-2008150
线管管路OST_ConduitRun-2008149
UnknownOST_ParamElemElectricalLoadClassification-2008148
UnknownOST_DataPanelScheduleTemplates-2008147
UnknownOST_SwitchboardScheduleTemplates-2008146
UnknownOST_BranchPanelScheduleTemplates-2008145
UnknownOST_ConduitStandards-2008144
UnknownOST_ElectricalLoadClassifications-2008143
UnknownOST_ElectricalDemandFactorDefinitions-2008142
中心线OST_ConduitFittingCenterLine-2008141
中心线OST_CableTrayFittingCenterLine-2008140
中心线OST_ConduitCenterLine-2008139
OST_ConduitDrop-2008138
OST_ConduitRiseDrop-2008137
中心线OST_CableTrayCenterLine-2008136
OST_CableTrayDrop-2008135
OST_CableTrayRiseDrop-2008134
线管标记OST_ConduitTags-2008133
线管OST_Conduit-2008132
电缆桥架标记OST_CableTrayTags-2008131
电缆桥架OST_CableTray-2008130
线管配件标记OST_ConduitFittingTags-2008129
线管配件OST_ConduitFitting-2008128
电缆桥架配件标记OST_CableTrayFittingTags-2008127
电缆桥架配件OST_CableTrayFitting-2008126
布管系统配置OST_RoutingPreferences-2008125
风管内衬OST_DuctLinings-2008124
风管隔热层OST_DuctInsulations-2008123
管道隔热层OST_PipeInsulations-2008122
UnknownOST_HVAC_Load_Schedules-2008121
UnknownOST_HVAC_Load_Building_Types-2008120
UnknownOST_HVAC_Load_Space_Types-2008119
参照线OST_HVAC_Zones_Reference_Visibility-2008118
内部填充OST_HVAC_Zones_InteriorFill_Visibility-2008117
颜色填充OST_HVAC_Zones_ColorFill-2008116
分区标记OST_ZoneTags-2008115
UnknownOST_LayoutPath_Bases-2008114
UnknownOST_WireTemperatureRatings-2008113
UnknownOST_WireInsulations-2008112
UnknownOST_WireMaterials-2008111
UnknownOST_HVAC_Zones_Reference-2008110
UnknownOST_HVAC_Zones_InteriorFill-2008109
边界OST_HVAC_Zones_Boundary-2008108
HVAC 区OST_HVAC_Zones-2008107
UnknownOST_Fluids-2008106
UnknownOST_PipeSchedules-2008105
UnknownOST_PipeMaterials-2008104
UnknownOST_PipeConnections-2008103
UnknownOST_EAConstructions-2008102
开关系统OST_SwitchSystem-2008101
喷头标记OST_SprinklerTags-2008100
喷头OST_Sprinklers-2008099
UnknownOST_RouteCurveBranch-2008098
UnknownOST_RouteCurveMain-2008097
UnknownOST_RouteCurve-2008096
洞口OST_GbXML_Opening-2008095
地下OST_GbXML_SType_Underground-2008094
着色OST_GbXML_SType_Shade-2008093
外部OST_GbXML_SType_Exterior-2008092
内部OST_GbXML_SType_Interior-2008091
分析表面OST_GbXMLFaces-2008090
回路方向OST_WireHomeRunArrows-2008089
灯具标记OST_LightingDeviceTags-2008088
灯具OST_LightingDevices-2008087
火警设备标记OST_FireAlarmDeviceTags-2008086
火警设备OST_FireAlarmDevices-2008085
数据设备标记OST_DataDeviceTags-2008084
数据设备OST_DataDevices-2008083
通讯设备标记OST_CommunicationDeviceTags-2008082
通讯设备OST_CommunicationDevices-2008081
安全设备标记OST_SecurityDeviceTags-2008080
安全设备OST_SecurityDevices-2008079
护理呼叫设备标记OST_NurseCallDeviceTags-2008078
护理呼叫设备OST_NurseCallDevices-2008077
电话设备标记OST_TelephoneDeviceTags-2008076
电话设备OST_TelephoneDevices-2008075
导线记号OST_WireTickMarks-2008074
UnknownOST_PipeFittingInsulation-2008073
中心线OST_PipeFittingCenterLine-2008072
UnknownOST_FlexPipeCurvesInsulation-2008071
UnknownOST_PipeCurvesInsulation-2008070
OST_PipeCurvesDrop-2008069
UnknownOST_DuctFittingLining-2008068
UnknownOST_DuctFittingInsulation-2008067
中心线OST_DuctFittingCenterLine-2008066
UnknownOST_FlexDuctCurvesInsulation-2008065
UnknownOST_DuctCurvesLining-2008064
UnknownOST_DuctCurvesInsulation-2008063
OST_DuctCurvesDrop-2008062
风管管件标记OST_DuctFittingTags-2008061
管件标记OST_PipeFittingTags-2008060
管道颜色填充OST_PipeColorFills-2008059
管道颜色填充图例OST_PipeColorFillLegends-2008058
导线标记OST_WireTags-2008057
管道附件标记OST_PipeAccessoryTags-2008056
管道附件OST_PipeAccessory-2008055
OST_PipeCurvesRiseDrop-2008054
填充图案OST_FlexPipeCurvesPattern-2008053
UnknownOST_FlexPipeCurvesContour-2008052
中心线OST_FlexPipeCurvesCenterLine-2008051
软管OST_FlexPipeCurves-2008050
管件OST_PipeFitting-2008049
软管标记OST_FlexPipeTags-2008048
管道标记OST_PipeTags-2008047
UnknownOST_PipeCurvesContour-2008046
中心线OST_PipeCurvesCenterLine-2008045
管道OST_PipeCurves-2008044
管道系统OST_PipingSystem-2008043
UnknownOST_ElectricalDemandFactor-2008042
UnknownOST_ElecDistributionSys-2008041
UnknownOST_ElectricalVoltage-2008040
导线OST_Wire-2008039
UnknownOST_ElectricalCircuitTags-2008038
电路OST_ElectricalCircuit-2008037
OST_DuctCurvesRiseDrop-2008036
填充图案OST_FlexDuctCurvesPattern-2008023
UnknownOST_FlexDuctCurvesContour-2008022
中心线OST_FlexDuctCurvesCenterLine-2008021
软风管OST_FlexDuctCurves-2008020
风管附件标记OST_DuctAccessoryTags-2008017
风管附件OST_DuctAccessory-2008016
风管系统OST_DuctSystem-2008015
风道末端标记OST_DuctTerminalTags-2008014
风道末端OST_DuctTerminal-2008013
风管管件OST_DuctFitting-2008010
风管颜色填充OST_DuctColorFills-2008005
软风管标记OST_FlexDuctTags-2008004
风管标记OST_DuctTags-2008003
UnknownOST_DuctCurvesContour-2008002
中心线OST_DuctCurvesCenterLine-2008001
风管OST_DuctCurves-2008000
风管颜色填充图例OST_DuctColorFillLegends-2007004
UnknownOST_ConnectorElemZAxis-2007003
UnknownOST_ConnectorElemYAxis-2007002
UnknownOST_ConnectorElemXAxis-2007001
UnknownOST_ConnectorElem-2007000
UnknownOST_BridgeBearingTags-2006178
UnknownOST_BridgeGirderTags-2006177
UnknownOST_BridgeFoundationTags-2006176
UnknownOST_BridgeDeckTags-2006175
UnknownOST_BridgeArchTags-2006174
UnknownOST_BridgeCableTags-2006173
UnknownOST_BridgeTowerTags-2006172
UnknownOST_BridgePierTags-2006171
UnknownOST_BridgeAbutmentTags-2006170
UnknownOST_BridgeBearingHiddenLines-2006158
UnknownOST_BridgeGirderHiddenLines-2006157
UnknownOST_BridgeFoundationHiddenLines-2006156
UnknownOST_BridgeDeckHiddenLines-2006155
UnknownOST_BridgeArchHiddenLines-2006154
UnknownOST_BridgeCableHiddenLines-2006153
UnknownOST_BridgeTowerHiddenLines-2006152
UnknownOST_BridgePierHiddenLines-2006151
UnknownOST_BridgeAbutmentHiddenLines-2006150
桥梁支座OST_BridgeBearings-2006138
桥梁大梁OST_BridgeGirders-2006137
桥梁基础OST_BridgeFoundations-2006136
桥面OST_BridgeDecks-2006135
桥拱OST_BridgeArches-2006134
桥梁缆索OST_BridgeCables-2006133
桥塔OST_BridgeTowers-2006132
桥墩OST_BridgePiers-2006131
桥台OST_BridgeAbutments-2006130
UnknownOST_DesignOptions-2006114
UnknownOST_DesignOptionSets-2006112
平面视图中的支撑符号OST_StructuralBracePlanReps-2006110
连接符号OST_StructConnectionSymbols-2006100
结构注释OST_StructuralAnnotations-2006090
云线批注标记OST_RevisionCloudTags-2006080
UnknownOST_Revisions-2006070
云线批注OST_RevisionClouds-2006060
UnknownOST_EditCutProfile-2006050
立面标记OST_ElevationMarks-2006045
轴网标头OST_GridHeads-2006040
标高标头OST_LevelHeads-2006020
UnknownOST_DecalType-2006002
UnknownOST_DecalElement-2006001
范围框OST_VolumeOfInterest-2006000
边界条件OST_BoundaryConditions-2005301
内部面荷载标记OST_InternalAreaLoadTags-2005255
内部线荷载标记OST_InternalLineLoadTags-2005254
内部点荷载标记OST_InternalPointLoadTags-2005253
面荷载标记OST_AreaLoadTags-2005252
线荷载标记OST_LineLoadTags-2005251
点荷载标记OST_PointLoadTags-2005250
地震荷载OST_LoadCasesSeismic-2005218
温度荷载OST_LoadCasesTemperature-2005217
偶然荷载OST_LoadCasesAccidental-2005216
屋顶活荷载OST_LoadCasesRoofLive-2005215
雪荷载OST_LoadCasesSnow-2005214
风荷载OST_LoadCasesWind-2005213
活荷载OST_LoadCasesLive-2005212
恒荷载OST_LoadCasesDead-2005211
结构荷载工况OST_LoadCases-2005210
内部面荷载OST_InternalAreaLoads-2005207
内部线荷载OST_InternalLineLoads-2005206
内部点荷载OST_InternalPointLoads-2005205
结构内部荷载OST_InternalLoads-2005204
面荷载OST_AreaLoads-2005203
线荷载OST_LineLoads-2005202
点荷载OST_PointLoads-2005201
结构荷载OST_Loads-2005200
结构梁系统标记OST_BeamSystemTags-2005130
基础跨方向符号OST_FootingSpanDirectionSymbol-2005111
跨方向符号OST_SpanDirectionSymbol-2005110
UnknownOST_SpotSlopesSymbols-2005102
UnknownOST_SpotCoordinateSymbols-2005101
高程点符号OST_SpotElevSymbols-2005100
UnknownOST_StructuralConnectionHandlerTags_Deprecated-2005031
结构桁架标记OST_TrussTags-2005030
注释记号标记OST_KeynoteTags-2005029
详图项目标记OST_DetailComponentTags-2005028
材质标记OST_MaterialTags-2005027
楼板标记OST_FloorTags-2005026
幕墙系统标记OST_CurtaSystemTags-2005025
UnknownOST_HostFinTags-2005024
楼梯标记OST_StairsTags-2005023
多类别标记OST_MultiCategoryTags-2005022
植物标记OST_PlantingTags-2005021
面积标记OST_AreaTags-2005020
结构基础标记OST_StructuralFoundationTags-2005019
结构柱标记OST_StructuralColumnTags-2005018
停车场标记OST_ParkingTags-2005017
场地标记OST_SiteTags-2005016
结构框架标记OST_StructuralFramingTags-2005015
专用设备标记OST_SpecialityEquipmentTags-2005014
常规模型标记OST_GenericModelTags-2005013
幕墙嵌板标记OST_CurtainWallPanelTags-2005012
墙标记OST_WallTags-2005011
卫浴装置标记OST_PlumbingFixtureTags-2005010
机电设备标记OST_MechanicalEquipmentTags-2005009
照明设备标记OST_LightingFixtureTags-2005008
家具系统标记OST_FurnitureSystemTags-2005007
家具标记OST_FurnitureTags-2005006
电气装置标记OST_ElectricalFixtureTags-2005004
电气设备标记OST_ElectricalEquipmentTags-2005003
天花板标记OST_CeilingTags-2005002
橱柜标记OST_CaseworkTags-2005001
UnknownOST_Tags-2005000
颜色填充OST_MEPSpaceColorFill-2003605
UnknownOST_MEPSpaceReference-2003604
UnknownOST_MEPSpaceInteriorFill-2003603
参照OST_MEPSpaceReferenceVisibility-2003602
内墙OST_MEPSpaceInteriorFillVisibility-2003601
空间OST_MEPSpaces-2003600
UnknownOST_StackedWalls-2003500
UnknownOST_MassGlazingAll-2003423
UnknownOST_MassFloorsAll-2003422
UnknownOST_MassWallsAll-2003421
UnknownOST_MassExteriorWallUnderground-2003420
UnknownOST_MassSlab-2003419
体量着色OST_MassShade-2003418
体量洞口OST_MassOpening-2003417
体量天窗OST_MassSkylights-2003416
体量玻璃OST_MassGlazing-2003415
体量屋顶OST_MassRoof-2003414
体量外墙OST_MassExteriorWall-2003413
体量内墙OST_MassInteriorWall-2003412
体量分区OST_MassZone-2003411
体量楼层标记OST_MassAreaFaceTags-2003410
UnknownOST_HostTemplate-2003409
UnknownOST_MassFaceSplitter-2003408
UnknownOST_MassCutter-2003407
UnknownOST_ZoningEnvelope-2003406
体量标记OST_MassTags-2003405
形式OST_MassForm-2003404
体量楼层OST_MassFloor-2003403
体量OST_Mass-2003400
UnknownOST_DividedSurface_DiscardedDivisionLines-2003333
UnknownOST_DividedSurfaceBelt-2003332
UnknownOST_TilePatterns-2003331
UnknownOST_AlwaysExcludedInAllViews-2003330
UnknownOST_DividedSurface_TransparentFace-2003329
UnknownOST_DividedSurface_PreDividedSurface-2003328
图案填充OST_DividedSurface_PatternFill-2003327
填充图案线OST_DividedSurface_PatternLines-2003326
网格线OST_DividedSurface_Gridlines-2003325
节点OST_DividedSurface_Nodes-2003324
UnknownOST_DividedSurface-2003323
UnknownOST_RepeatingDetailLines-2003321
向下箭头OST_RampsDownArrow-2003308
向上箭头OST_RampsUpArrow-2003307
文字(向下)OST_RampsDownText-2003306
文字(向上)OST_RampsUpText-2003305
超出截面线的梯边梁OST_RampsStringerAboveCut-2003304
梯边梁OST_RampsStringer-2003303
坡道超出截面线OST_RampsAboveCut-2003302
UnknownOST_RampsIncomplete-2003301
UnknownOST_TrussDummy-2003300
UnknownOST_ZoneSchemes-2003225
UnknownOST_AreaSchemes-2003201
面积OST_Areas-2003200
项目信息OST_ProjectInformation-2003101
图纸OST_Sheets-2003100
UnknownOST_ProfileFamilies-2003000
详图项目OST_DetailComponents-2002000
屋檐底板OST_RoofSoffit-2001393
楼板边缘OST_EdgeSlab-2001392
檐沟OST_Gutter-2001391
封檐板OST_Fascia-2001390
环境OST_Entourage-2001370
植物OST_Planting-2001360
UnknownOST_Blocks-2001359
隐藏线OST_StructuralStiffenerHiddenLines-2001358
定位线OST_StructuralColumnLocationLine-2001357
定位线OST_StructuralFramingLocationLine-2001356
结构加强板标记OST_StructuralStiffenerTags-2001355
结构加强板OST_StructuralStiffener-2001354
UnknownOST_FootingAnalyticalGeometry-2001353
RVT 链接OST_RvtLinks-2001352
UnknownOST_Automatic-2001351
专用设备OST_SpecialityEquipment-2001350
刚性链接OST_ColumnAnalyticalRigidLinks-2001344
次等高线OST_SecondaryTopographyContours-2001343
主等高线OST_TopographyContours-2001342
三角形边缘OST_TopographySurface-2001341
地形OST_Topography-2001340
地形链接OST_TopographyLink-2001339
结构桁架OST_StructuralTruss-2001336
棍状符号OST_StructuralColumnStickSymbols-2001335
隐藏线OST_HiddenStructuralColumnLines-2001334
刚性链接OST_AnalyticalRigidLinks-2001333
UnknownOST_ColumnAnalyticalGeometry-2001332
UnknownOST_FramingAnalyticalGeometry-2001331
结构柱OST_StructuralColumns-2001330
隐藏线OST_HiddenStructuralFramingLines-2001329
UnknownOST_KickerBracing-2001328
结构梁系统OST_StructuralFramingSystem-2001327
UnknownOST_VerticalBracing-2001326
UnknownOST_HorizontalBracing-2001325
UnknownOST_Purlin-2001324
UnknownOST_Joist-2001323
UnknownOST_Girder-2001322
UnknownOST_StructuralFramingOther-2001321
结构框架OST_StructuralFraming-2001320
隐藏线OST_HiddenStructuralFoundationLines-2001302
结构基础OST_StructuralFoundation-2001300
UnknownOST_BasePointAxisZ-2001275
UnknownOST_BasePointAxisY-2001274
UnknownOST_BasePointAxisX-2001273
测量点OST_SharedBasePoint-2001272
项目基点OST_ProjectBasePoint-2001271
UnknownOST_SiteRegion-2001270
建筑红线线段标记OST_SitePropertyLineSegmentTags-2001269
建筑红线线段OST_SitePropertyLineSegment-2001268
属性标记OST_SitePropertyTags-2001267
边界点OST_SitePointBoundary-2001266
建筑红线OST_SiteProperty-2001265
建筑地坪OST_BuildingPad-2001263
内部点OST_SitePoint-2001262
UnknownOST_SiteSurface-2001261
场地OST_Site-2001260
UnknownOST_Sewer-2001240
道路OST_Roads-2001220
UnknownOST_Property-2001200
停车场OST_Parking-2001180
卫浴装置OST_PlumbingFixtures-2001160
机械设备OST_MechanicalEquipment-2001140
光源OST_LightingFixtureSource-2001121
照明设备OST_LightingFixtures-2001120
家具系统OST_FurnitureSystems-2001100
电气装置OST_ElectricalFixtures-2001060
电气设备OST_ElectricalEquipment-2001040
橱柜OST_Casework-2001000
UnknownOST_ArcWallRectOpening-2000999
UnknownOST_DormerOpeningIncomplete-2000998
UnknownOST_SWallRectOpening-2000997
竖井洞口OST_ShaftOpening-2000996
UnknownOST_StructuralFramingOpening-2000995
UnknownOST_ColumnOpening-2000994
UnknownOST_RiseDropSymbols-2000989
水力分离符号OST_PipeHydronicSeparationSymbols-2000988
机械设备集边界线OST_MechanicalEquipmentSetBoundaryLines-2000987
机械设备集标记OST_MechanicalEquipmentSetTags-2000986
机械设备集OST_MechanicalEquipmentSet-2000985
连接线符号OST_AnalyticalPipeConnectionLineSymbol-2000984
分析管道连接OST_AnalyticalPipeConnections-2000983
UnknownOST_Coordination_Model-2000982
UnknownOST_MultistoryStairs-2000980
UnknownOST_HiddenStructuralConnectionLines_Deprecated-2000979
UnknownOST_StructuralConnectionHandler_Deprecated-2000978
UnknownOST_CoordinateSystem-2000977
局部坐标系OST_FndSlabLocalCoordSys-2000976
局部坐标系OST_FloorLocalCoordSys-2000975
局部坐标系OST_WallLocalCoordSys-2000974
局部坐标系OST_BraceLocalCoordSys-2000973
局部坐标系OST_ColumnLocalCoordSys-2000972
局部坐标系OST_BeamLocalCoordSys-2000971
多钢筋注释OST_MultiReferenceAnnotations-2000970
UnknownOST_DSR_LeaderTickMarkStyleId-2000969
UnknownOST_DSR_InteriorTickMarkStyleId-2000968
UnknownOST_DSR_ArrowHeadStyleId-2000967
UnknownOST_DSR_CenterlineTickMarkStyleId-2000966
UnknownOST_DSR_CenterlinePatternCatId-2000965
UnknownOST_DSR_DimStyleHeavyEndCategoryId-2000964
UnknownOST_DSR_DimStyleHeavyEndCatId-2000963
UnknownOST_DSR_DimStyleTickCategoryId-2000962
UnknownOST_DSR_LineAndTextAttrFontId-2000961
UnknownOST_DSR_LineAndTextAttrCategoryId-2000960
分析节点标记OST_NodeAnalyticalTags-2000956
分析链接标记OST_LinkAnalyticalTags-2000955
UnknownOST_RailingRailPathExtensionLines-2000954
UnknownOST_RailingRailPathLines-2000953
支撑OST_StairsSupports-2000952
<高于> 扶手OST_RailingHandRailAboveCut-2000951
<高于> 顶部扶栏OST_RailingTopRailAboveCut-2000950
终端OST_RailingTermination-2000949
支座OST_RailingSupport-2000948
扶手OST_RailingHandRail-2000947
顶部扶栏OST_RailingTopRail-2000946
UnknownOST_StairsSketchPathLines-2000945
楼梯踏板/踢面数OST_StairsTriserNumbers-2000944
UnknownOST_StairsTriserTags-2000943
楼梯支撑标记OST_StairsSupportTags-2000942
楼梯平台标记OST_StairsLandingTags-2000941
楼梯梯段标记OST_StairsRunTags-2000940
<高于> 向上箭头OST_StairsPathsAboveCut-2000939
楼梯路径OST_StairsPaths-2000938
<高于> 踢面线OST_StairsRiserLinesAboveCut-2000937
踢面线OST_StairsRiserLines-2000936
<高于> 轮廓OST_StairsOutlinesAboveCut-2000935
轮廓OST_StairsOutlines-2000934
<高于> 楼梯前缘线OST_StairsNosingLinesAboveCut-2000933
楼梯前缘线OST_StairsNosingLines-2000932
<高于> 剪切标记OST_StairsCutMarksAboveCut-2000931
剪切标记OST_StairsCutMarks-2000930
UnknownOST_ComponentRepeaterSlot-2000928
UnknownOST_ComponentRepeater-2000927
UnknownOST_DividedPath-2000926
UnknownOST_IOSRoomCalculationPoint-2000925
UnknownOST_PropertySet-2000924
UnknownOST_AppearanceAsset-2000923
UnknownOST_StairStringer2012_Deprecated-2000922
踢面/踏板OST_StairsTrisers-2000921
平台OST_StairsLandings-2000920
梯段OST_StairsRuns-2000919
UnknownOST_Stair2012_Deprecated-2000918
UnknownOST_RailingSystemTags-2000917
UnknownOST_RailingSystemTransition-2000916
UnknownOST_RailingSystemTermination-2000915
UnknownOST_RailingSystemRail-2000914
UnknownOST_RailingSystemTopRail-2000913
UnknownOST_RailingSystemHandRailBracket-2000912
UnknownOST_RailingSystemHandRail-2000911
UnknownOST_RailingSystemHardware-2000910
UnknownOST_RailingSystemPanel-2000909
UnknownOST_RailingSystemBaluster-2000908
UnknownOST_RailingSystemPost-2000907
UnknownOST_RailingSystemSegment-2000906
UnknownOST_RailingSystem-2000905
UnknownOST_AdaptivePoints_HiddenLines-2000904
线OST_AdaptivePoints_Lines-2000903
平面OST_AdaptivePoints_Planes-2000902
OST_AdaptivePoints_Points-2000901
自适应点OST_AdaptivePoints-2000900
UnknownOST_CeilingOpening-2000899
UnknownOST_FloorOpening-2000898
UnknownOST_RoofOpening-2000897
UnknownOST_WallRefPlanes-2000896
UnknownOST_StructLocationLineControl-2000880
UnknownOST_DimLockControlLeader-2000832
<空间分隔>OST_MEPSpaceSeparationLines-2000831
UnknownOST_AreaPolylines-2000830
UnknownOST_RoomPolylines-2000829
UnknownOST_InstanceDrivenLineStyle-2000828
UnknownOST_RemovedGridSeg-2000827
UnknownOST_IOSOpening-2000810
UnknownOST_IOSTilePatternGrid-2000800
UnknownOST_ControlLocal-2000774
UnknownOST_ControlAxisZ-2000773
UnknownOST_ControlAxisY-2000772
UnknownOST_ControlAxisX-2000721
UnknownOST_XRayConstrainedProfileEdge-2000720
UnknownOST_XRayImplicitPathCurve-2000719
UnknownOST_XRayPathPoint-2000718
UnknownOST_XRayPathCurve-2000717
UnknownOST_XRaySideEdge-2000716
UnknownOST_XRayProfileEdge-2000715
UnknownOST_ReferencePoints_HiddenLines-2000714
线OST_ReferencePoints_Lines-2000713
平面OST_ReferencePoints_Planes-2000712
OST_ReferencePoints_Points-2000711
参照点OST_ReferencePoints-2000710
材质OST_Materials-2000700
截面填充图案OST_CeilingsCutPattern-2000617
公共边OST_CeilingsDefault-2000616
面层 2 [5]OST_CeilingsFinish2-2000615
面层 1 [4]OST_CeilingsFinish1-2000614
衬底 [2]OST_CeilingsSubstrate-2000613
保温层/空气层 [3]OST_CeilingsInsulation-2000612
结构 [1]OST_CeilingsStructure-2000611
涂膜层OST_CeilingsMembrane-2000610
内部边缘OST_FloorsInteriorEdges-2000609
截面填充图案OST_FloorsCutPattern-2000608
隐藏线OST_HiddenFloorLines-2000607
公共边OST_FloorsDefault-2000606
面层 2 [5]OST_FloorsFinish2-2000605
面层 1 [4]OST_FloorsFinish1-2000604
衬底 [2]OST_FloorsSubstrate-2000603
保温层/空气层 [3]OST_FloorsInsulation-2000602
结构 [1]OST_FloorsStructure-2000601
涂膜层OST_FloorsMembrane-2000600
内部边缘OST_RoofsInteriorEdges-2000598
截面填充图案OST_RoofsCutPattern-2000597
公共边OST_RoofsDefault-2000596
面层 2 [5]OST_RoofsFinish2-2000595
面层 1 [4]OST_RoofsFinish1-2000594
衬底 [2]OST_RoofsSubstrate-2000593
保温层/空气层 [3]OST_RoofsInsulation-2000592
结构 [1]OST_RoofsStructure-2000591
涂膜层OST_RoofsMembrane-2000590
截面填充图案OST_WallsCutPattern-2000588
隐藏线OST_HiddenWallLines-2000587
公共边OST_WallsDefault-2000586
面层 2 [5]OST_WallsFinish2-2000585
面层 1 [4]OST_WallsFinish1-2000584
衬底 [2]OST_WallsSubstrate-2000583
保温层/空气层 [3]OST_WallsInsulation-2000582
结构 [1]OST_WallsStructure-2000581
涂膜层OST_WallsMembrane-2000580
UnknownOST_PreviewLegendComponents-2000576
UnknownOST_LegendComponents-2000575
明细表OST_Schedules-2000573
明细表图形OST_ScheduleGraphics-2000570
光栅图像OST_RasterImages-2000560
UnknownOST_ColorFillSchema-2000552
颜色填充OST_RoomColorFill-2000551
颜色填充图例OST_ColorFillLegends-2000550
注释裁剪边界OST_AnnotationCropSpecial-2000549
裁剪边界OST_CropBoundarySpecial-2000548
注释裁剪边界OST_AnnotationCrop-2000547
UnknownOST_FloorsAnalyticalGeometry-2000546
UnknownOST_WallsAnalyticalGeometry-2000545
详图索引引线OST_CalloutLeaderLine-2000544
表面填充图案OST_CeilingsSurfacePattern-2000543
表面填充图案OST_RoofsSurfacePattern-2000542
表面填充图案OST_FloorsSurfacePattern-2000541
表面填充图案OST_WallsSurfacePattern-2000540
详图索引边界OST_CalloutBoundary-2000539
详图索引标头OST_CalloutHeads-2000538
详图索引OST_Callouts-2000537
裁剪边界OST_CropBoundary-2000536
立面OST_Elev-2000535
UnknownOST_AxisZ-2000533
UnknownOST_AxisY-2000532
UnknownOST_AxisX-2000531
参照平面OST_CLines-2000530
UnknownOST_Lights-2000520
视图标题OST_ViewportLabel-2000515
视口OST_Viewports-2000510
相机OST_Camera_Lines-2000501
UnknownOST_Cameras-2000500
空间标记OST_MEPSpaceTags-2000485
房间标记OST_RoomTags-2000480
门标记OST_DoorTags-2000460
窗标记OST_WindowTags-2000450
宽线OST_SectionHeadWideLines-2000404
中粗线OST_SectionHeadMediumLines-2000403
细线OST_SectionHeadThinLines-2000401
剖面标头OST_SectionHeads-2000400
等高线标签OST_ContourLabels-2000350
UnknownOST_CurtaSystemFaceManager-2000341
幕墙系统OST_CurtaSystem-2000340
UnknownOST_AreaReport_Arc_Minus-2000328
UnknownOST_AreaReport_Arc_Plus-2000327
UnknownOST_AreaReport_Boundary-2000326
UnknownOST_AreaReport_Triangle-2000325
幕墙系统网格OST_CurtainGridsCurtaSystem-2000323
UnknownOST_CurtainGridsSystem-2000322
幕墙网格OST_CurtainGridsWall-2000321
幕墙屋顶网格OST_CurtainGridsRoof-2000320
UnknownOST_HostFinHF-2000315
UnknownOST_HostFinWall-2000314
UnknownOST_HostFinCeiling-2000313
UnknownOST_HostFinRoof-2000312
UnknownOST_HostFinFloor-2000311
UnknownOST_HostFin-2000310
分析显示样式OST_AnalysisDisplayStyle-2000304
分析结果OST_AnalysisResults-2000303
渲染区域OST_RenderRegions-2000302
剖面框OST_SectionBox-2000301
文字注释OST_TextNotes-2000300
UnknownOST_Divisions-2000291
UnknownOST_Catalogs-2000290
UnknownOST_DirectionEdgeLines-2000289
<中心线>OST_CenterLines-2000288
<超出>OST_LinesBeyond-2000287
<隐藏>OST_HiddenLines-2000286
<已拆除>OST_DemolishedLines-2000285
<架空线>OST_OverheadLines-2000284
宽线OST_TitleBlockWideLines-2000283
中粗线OST_TitleBlockMediumLines-2000282
细线OST_TitleBlockThinLines-2000281
图框OST_TitleBlocks-2000280
视图OST_Views-2000279
UnknownOST_Viewers-2000278
隐藏线OST_PartHiddenLines-2000271
零件标记OST_PartTags-2000270
组成部分OST_Parts-2000269
部件标记OST_AssemblyTags-2000268
部件OST_Assemblies-2000267
屋顶标记OST_RoofTags-2000266
高程点坡度OST_SpotSlopes-2000265
高程点坐标OST_SpotCoordinates-2000264
高程点OST_SpotElevations-2000263
UnknownOST_Constraints-2000262
自动绘制尺寸标注OST_WeakDims-2000261
尺寸标注OST_Dimensions-2000260
标高OST_Levels-2000240
位移路径OST_DisplacementPath-2000223
UnknownOST_DisplacementElements-2000222
多段轴网OST_GridChains-2000221
轴网OST_Grids-2000220
断开剖面线OST_BrokenSectionLine-2000202
剖面线OST_SectionLine-2000201
剖面OST_Sections-2000200
视图参照OST_ReferenceViewer-2000198
视图参照OST_ReferenceViewerSymbol-2000197
在族中导入OST_ImportObjectStyles-2000196
UnknownOST_ModelText-2000195
遮罩区域OST_MaskingRegion-2000194
拼接线OST_Matchline-2000193
UnknownOST_FaceSplitter-2000192
平面区域OST_PlanRegion-2000191
填充区域OST_FilledRegion-2000190
UnknownOST_MassingProjectionOutlines-2000187
UnknownOST_MassingCutOutlines-2000186
UnknownOST_Massing-2000185
UnknownOST_Reveals-2000182
墙饰条OST_Cornices-2000181
坡道OST_Ramps-2000180
UnknownOST_RailingBalusterRailCut-2000177
UnknownOST_RailingBalusterRail-2000176
UnknownOST_Railings-2000175
幕墙网格OST_CurtainGrids-2000173
UnknownOST_CurtainWallMullionsCut-2000172
幕墙竖梃OST_CurtainWallMullions-2000171
幕墙嵌板OST_CurtainWallPanels-2000170
UnknownOST_AreaReference-2000169
UnknownOST_AreaInteriorFill-2000168
UnknownOST_RoomReference-2000167
UnknownOST_RoomInteriorFill-2000166
颜色填充OST_AreaColorFill-2000165
参照OST_AreaReferenceVisibility-2000164
内部填充OST_AreaInteriorFillVisibility-2000163
参照OST_RoomReferenceVisibility-2000162
内部填充OST_RoomInteriorFillVisibility-2000161
房间OST_Rooms-2000160
常规模型OST_GenericModel-2000151
常规注释OST_GenericAnnotation-2000150
UnknownOST_Fixtures-2000140
栏杆扶手标记OST_StairsRailingTags-2000133
<高于> 栏杆扶手截面线OST_StairsRailingAboveCut-2000132
向下箭头OST_StairsDownArrows-2000131
向上箭头OST_StairsUpArrows-2000130
文字(向下)OST_StairsDownText-2000129
扶栏OST_StairsRailingRail-2000128
栏杆OST_StairsRailingBaluster-2000127
栏杆扶手OST_StairsRailing-2000126
文字(向上)OST_StairsUpText-2000125
<高于> 支撑OST_StairsSupportsAboveCut-2000124
支撑OST_StairsStringerCarriage-2000123
UnknownOST_StairsAboveCut_ToBeDeprecated-2000122
UnknownOST_StairsIncomplete_Deprecated-2000121
楼梯OST_Stairs-2000120
UnknownOST_IOSNavWheelPivotBall-2000117
UnknownOST_IOSRoomComputationHeight-2000116
UnknownOST_IOSRoomUpperLowerLines-2000115
UnknownOST_IOSDragBoxInverted-2000114
UnknownOST_IOSDragBox-2000113
UnknownOST_Phases-2000112
UnknownOST_IOS_GeoSite-2000111
UnknownOST_IOS_GeoLocations-2000110
UnknownOST_IOSFabricReinSpanSymbolCtrl-2000109
导向轴网OST_GuideGrid-2000107
UnknownOST_EPS_Future-2000106
UnknownOST_EPS_Temporary-2000105
UnknownOST_EPS_New-2000104
UnknownOST_EPS_Demolished-2000103
UnknownOST_EPS_Existing-2000102
UnknownOST_IOSMeasureLineScreenSize-2000101
OST_Columns-2000100
UnknownOST_IOSRebarSystemSpanSymbolCtrl-2000099
UnknownOST_IOSRoomTagToRoomLines-2000098
UnknownOST_IOSAttachedDetailGroups-2000097
UnknownOST_IOSDetailGroups-2000096
模型组OST_IOSModelGroups-2000095
UnknownOST_IOSSuspendedSketch-2000094
UnknownOST_IOSWallCoreBoundary-2000093
UnknownOST_IOSMeasureLine-2000092
UnknownOST_IOSArrays-2000091
UnknownOST_Curtain_Systems-2000090
UnknownOST_IOSBBoxScreenSize-2000089
UnknownOST_IOSSlabShapeEditorPointInterior-2000088
UnknownOST_IOSSlabShapeEditorPointBoundary-2000087
UnknownOST_IOSSlabShapeEditorBoundary-2000086
UnknownOST_IOSSlabShapeEditorAutoCrease-2000085
UnknownOST_IOSSlabShapeEditorExplitCrease-2000084
参照线OST_ReferenceLines-2000083
UnknownOST_IOSNotSilhouette-2000082
UnknownOST_FillPatterns-2000081
家具OST_Furniture-2000080
<面积边界>OST_AreaSchemeLines-2000079
线OST_GenericLines-2000078
隔热层线OST_InsulationLines-2000077
UnknownOST_CloudLines-2000076
UnknownOST_IOSRoomPerimeterLines-2000075
UnknownOST_IOSCuttingGeometry-2000074
UnknownOST_IOSCrashGraphics-2000073
UnknownOST_IOSGroups-2000072
UnknownOST_IOSGhost-2000071
UnknownOST_StairsSketchLandingCenterLines-2000070
UnknownOST_StairsSketchRunLines-2000069
UnknownOST_StairsSketchRiserLines-2000068
UnknownOST_StairsSketchBoundaryLines-2000067
<房间分隔>OST_RoomSeparationLines-2000066
旋转轴OST_AxisOfRotation-2000065
UnknownOST_InvisibleLines-2000064
UnknownOST_IOSThinPixel_DashDot-2000063
UnknownOST_IOSThinPixel_Dash-2000062
UnknownOST_IOSThinPixel_Dot-2000061
UnknownOST_Extrusions-2000060
UnknownOST_IOS-2000059
UnknownOST_CutOutlines-2000058
UnknownOST_IOSThinPixel-2000057
UnknownOST_IOSFlipControl-2000056
UnknownOST_IOSSketchGrid-2000055
UnknownOST_IOSSuspendedSketch_obsolete-2000054
UnknownOST_IOSFreeSnapLine-2000053
UnknownOST_IOSDatumPlane-2000052
线OST_Lines-2000051
UnknownOST_IOSConstructionLine-2000050
UnknownOST_IOSAlignmentGraphics-2000049
UnknownOST_IOSAligningLine-2000048
UnknownOST_IOSBackedUpElements-2000047
UnknownOST_IOSRegeneratedElements-2000046
<草图>OST_SketchLines-2000045
宽线OST_CurvesWideLines-2000044
中粗线OST_CurvesMediumLines-2000043
细线OST_CurvesThinLines-2000042
UnknownOST_Curves-2000041
UnknownOST_CeilingsProjection-2000040
UnknownOST_CeilingsCut-2000039
天花板OST_Ceilings-2000038
UnknownOST_RoofsProjection-2000037
UnknownOST_RoofsCut-2000036
屋顶OST_Roofs-2000035
UnknownOST_FloorsProjection-2000034
UnknownOST_FloorsCut-2000033
楼板OST_Floors-2000032
玻璃OST_DoorsGlassProjection-2000031
UnknownOST_DoorsGlassCut-2000030
框架/竖梃OST_DoorsFrameMullionProjection-2000029
UnknownOST_DoorsFrameMullionCut-2000028
洞口OST_DoorsOpeningProjection-2000027
UnknownOST_DoorsOpeningCut-2000026
嵌板OST_DoorsPanelProjection-2000025
UnknownOST_DoorsPanelCut-2000024
OST_Doors-2000023
洞口OST_WindowsOpeningProjection-2000022
UnknownOST_WindowsOpeningCut-2000021
窗台/盖板OST_WindowsSillHeadProjection-2000020
UnknownOST_WindowsSillHeadCut-2000019
框架/竖梃OST_WindowsFrameMullionProjection-2000018
UnknownOST_WindowsFrameMullionCut-2000017
玻璃OST_WindowsGlassProjection-2000016
UnknownOST_WindowsGlassCut-2000015
OST_Windows-2000014
UnknownOST_WallsProjectionOutlines-2000013
UnknownOST_WallsCutOutlines-2000012
OST_Walls-2000011
UnknownOST_IOSRegenerationFailure-2000010
UnknownOST_ScheduleViewParamGroup-2000008
UnknownOST_MatchSiteComponent-2000007
UnknownOST_MatchProfile-2000006
UnknownOST_MatchDetail-2000005
UnknownOST_MatchAnnotation-2000004
UnknownOST_MatchModel-2000003
UnknownOST_MatchAll-2000002
UnknownINVALID-1
]]>
+ + + + + Developer + + + + + + + .NET + + Revit + + + +
+ + + + + 深度操作系统 20——崭新视界,创无止境 + + /post/deepin-20/ + + 深度操作系统是一个致力于为全球用户提供美观易用、安全可靠的Linux发行版。

深度操作系统 20正式版(1002)采取统一的设计风格,从桌面环境和应用进行重新设计,带来焕然一新的视觉感受。底层仓库升级到Debian 10.5,系统安装采用双内核机制(Kernel 5.4、Kernel 5.7),全面提升系统稳定性和兼容性。全新设计的启动器菜单、指纹识别、系统安全增强等,系统部分预装应用升级到最新版本,只为给你更好体验。

统一风格的桌面环境

别出心裁的图标设计,焕然一新的图形界面,自然、平滑的动画过渡效果,更有独树一帜的圆角窗口设计,精美绝伦的多任务视图,处处精心,只为给你细腻自然的品质体验。

支持黑白主题、透明度调节、色温调节自定义、电源电池设置等贴心功能。

个性贴心的通知管理

增强通知中心功能,支持设置通知时提示声音、锁屏时显示消息、仅在通知中心显示、显示消息预览,必要应用强提醒、特定应用弱提醒或不提醒,个性化你的消息通知,在不错过任何重要提醒的同时,避免不必要的打扰。

系统支持双内核安装

系统安装界面提供双内核选项,Kernel 5.4(LTS)和Kernel 5.7(Stable)以及Safe Graphics模式,保证系统安装更多选择,提升系统整体的稳定性、兼容性,最新的内核支持更多的硬件设备。

更易用的新版安装器

化繁为简的设计和交互,保证更一致的操作习惯。新版的安装器界面,只需按照操作向导提示安装即可,在硬盘分区操作中,提供手动和全盘安装两种模式,并且支持全盘加密功能。

注:对于N卡用户,安装器自动检测并提供安装闭源驱动选项。

管理方便的应用商店

应用商店的不同类别应用,覆盖了生活、工作的主要使用场景,本次新增一键更新、应用筛选等功能,带来更便捷的应用管理体验,同时也兼容部分Wine应用,并达到原生应用的体验。

好用安全的指纹识别

全新的指纹功能框架,提供了更细腻的引导交互和更准确的场景提示。可使用指纹进行解锁登录、验证身份和管理员权限。现已支持多款国产指纹硬件。

下载

https://www.deepin.org/zh/download/

]]>
+ + + + + Share + + + + + + + Linux + + OS + + + +
+ + + + + Free Control 用电脑控制手机 - 开源 + + /post/free-control/ + + FreeControl

介绍

[ English | 中文 ]

基于开源项目scrcpy,提供简洁的交互界面。

  • 编码语言 C#
  • 开发工具 Visual Studio 2022
  • 运行环境 .NET Framework 4.7.2

界面

启动界面

设置界面

功能演示

下载

GitHub Release

https://github.com/pdone/FreeControl/releases/latest/download/FreeControl.exe

My Proxy

https://cdn.awaw.cc/gh/pdone/FreeControl/releases/latest/download/FreeControl.exe

代码仓库

更新记录

常见问题

输入法问题

v1.7.0 及以后的版本中,默认启用scrcpy的 UHID keyboard 特性,以优化中文输入体验。

如果在此过程中遇到了什么问题,可尝试打开配置文件 %AppData%\FreeControl\config.json,将 CustomArgs 的值由 --keyboard=uhid 改为 --keyboard=sdk

更多信息可参考 scrcpy-doc-keyboard

已过时

个人测试发现,目前支持跨屏进行拼音输入的 手机输入法APP 如下:

  • 搜狗输入法
  • QQ输入法
  • 谷歌拼音输入法
  • Gboard
  • 微信输入法

此功能需要输入法APP适配,有更好用的输入法欢迎留言推荐。

自动切换输入法功能默认禁用。如需启用,先关闭程序,然后打开配置文件 %AppData%\FreeControl\config.json,将 EnableSwitchIME 字段值改为 true,保存后启动程序即可。

设备连接问题

USB 连接

通过 USB 连接来正常使用 adb 需要保证几点:

  1. 硬件状态正常。

    包括 Android 设备处于正常开机状态,USB 连接线和各种接口完好。

  2. Android 设备的开发者选项和 USB 调试模式已开启。

    可以到「设置」-「开发者选项」-「Android 调试」查看。

    如果在设置里找不到开发者选项,那需要通过一个彩蛋来让它显示出来:在「设置」-「关于手机」连续点击「版本号」7 次。

  3. 设备驱动状态正常。

    这一点貌似在 Linux 和 Mac OS X 下不用操心,在 Windows 下有可能遇到需要安装驱动的情况,确认这一点可以右键「计算机」-「属性」,到「设备管理器」里查看相关设备上是否有黄色感叹号或问号,如果没有就说明驱动状态已经好了。否则可以下载一个手机助手类程序来安装驱动先。

  4. 通过 USB 线连接好电脑和设备后确认状态。

    1
    adb devices

    如果能看到

    1
    xxxxxx device

    说明连接成功。

无线连接(Android11 及以上)

Android 11 及更高版本支持使用 Android 调试桥 (adb) 从工作站以无线方式部署和调试应用。例如,您可以将可调试应用部署到多台远程设备,而无需通过 USB 实际连接设备。这样就可以避免常见的 USB 连接问题,例如驱动程序安装方面的问题。

官方文档

操作步骤:

  1. 更新到最新版本的 SDK 平台工具(至少30.0.0)。

  2. 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。

  3. 在开发者选项中启用无线调试

  4. 在询问要允许在此网络上进行无线调试吗?的对话框中,点击允许。

  5. 选择使用配对码配对设备,使用弹窗中的 IP 地址和端口号。

    1
    adb pair ipaddr:port
  6. 提示 Enter pairing code: 时输入弹窗中的配对码,成功后会显示 Successfully paired to ...

  7. 使用无线调试下的 IP 地址和端口

    1
    adb connect ipaddr:port
  8. 确认连接状态。

    1
    adb devices

    如果能看到

    1
    ipaddr:port device

    说明连接成功。

无线连接(需要借助 USB 线)

除了可以通过 USB 连接设备与电脑来使用 adb,也可以通过无线连接——虽然连接过程中也有需要使用 USB 的步骤,但是连接成功之后你的设备就可以在一定范围内摆脱 USB 连接线的限制啦!

操作步骤:

  1. 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。

  2. 将设备与电脑通过 USB 线连接。

    应确保连接成功(可运行 adb devices 看是否能列出该设备)。

  3. 让设备在 5555 端口监听 TCP/IP 连接:

    1
    adb tcpip 5555
  4. 断开 USB 连接。

  5. 找到设备的 IP 地址。

    一般能在「设置」-「关于手机」-「状态信息」-「IP地址」找到。

  6. 通过 IP 地址连接设备。

    1
    adb connect <device-ip-address>

    这里的 <device-ip-address> 就是上一步中找到的设备 IP 地址。

  7. 确认连接状态。

    1
    adb devices

    如果能看到

    1
    <device-ip-address>:5555 device

    说明连接成功。

如果连接不了,请确认 Android 设备与电脑是连接到了同一个 WiFi,然后再次执行 adb connect <device-ip-address> 那一步;

如果还是不行的话,通过 adb kill-server 重新启动 adb 然后从头再来一次试试。

无线连接(无需借助 USB 线)

需要 root 权限,此处不做详细说明,有需要的朋友可参考此处

保持唤醒功能

仅在手机充电时有效。

音频转发功能

使用 Android 11 或更高版本的设备支持音频转发,并且默认情况下启用:

  • 对于 Android 12 或更高版本,它开箱即用。
  • 对于 Android 11 ,您需要确保在启动scrcpy时设备屏幕已解锁。假的弹出窗口将短暂出现,使系统认为shell应用程序处于前台。没有这个,音频捕获将失败。
  • 对于 Android 10 或更早版本,无法捕获音频并自动禁用。

捐赠

如果您觉得这个项目对您有帮助,欢迎请作者喝杯咖啡。☕

爱发电❤ https://afdian.net/a/pdone

Stargazers Over Time

Stargazers over time

]]>
+ + + + + Tools + + + + + + + .NET + + OpenSource + + + +
+ + + + + WinForm加载中窗体 + + /post/net-loading/ + + 最近项目中用有用到,就简单整了个,只有几行代码。

预览图

调用示例

public partial class Main : Form{    public Main()    {        InitializeComponent();    }    private void button1_Click(object sender, EventArgs e)    {        //构造函数参数说明:        //work: 需要在新线程中执行的任务        //msg: 执行完成提示信息(为空时不提示)        //openDir: 执行完成后自动打开指定目录(为空时不打开)                        Loading loading = new Loading(DoSomething, 执行完成);        //不show的话 可以当作后台线程执行任务来用        loading.ShowDialog();    }    public void DoSomething()    {        Thread.Sleep(3000);    }}

源代下载

百度云

https://pan.baidu.com/s/1NzrZeNKqjlZxK__iXaGvwQ

提取码:npkt

]]>
+ + + + + Developer + + + + + + + .NET + + async + + + +
+ + + + + DapperHelper + + /post/dapper-helper/ + + Dapper is a simple object mapper for .NET and owns the title of King of Micro ORM in terms of speed and is virtually as fast as using a raw ADO.NET data reader. An ORM is an Object Relational Mapper, which is responsible for mapping between database and programming language.

Dapper extends the IDbConnection by providing useful extension methods to query your database.

How Dapper Works?

It is a three-step process.

  • Create an IDbConnection object.
  • Write a query to perform CRUD operations.
  • Pass query as a parameter in the Execute method.

Installation

Dapper is installed through NuGet: https://www.nuget.org/packages/Dapper

1
PM> Install-Package Dapper

Requirement

Dapper works with any database provider since there is no DB specific implementation.

Methods

Dapper will extend your IDbConnection interface with multiple methods:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string sqlOrderDetails = "SELECT TOP 5 * FROM OrderDetails;";
string sqlOrderDetail = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;";
string sqlCustomerInsert = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";

using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{
var orderDetails = connection.Query<OrderDetail>(sqlOrderDetails).ToList();
var orderDetail = connection.QueryFirstOrDefault<OrderDetail>(sqlOrderDetail, new {OrderDetailID = 1});
var affectedRows = connection.Execute(sqlCustomerInsert, new {CustomerName = "Mark"});

Console.WriteLine(orderDetails.Count);
Console.WriteLine(affectedRows);

FiddleHelper.WriteTable(orderDetails);
FiddleHelper.WriteTable(new List<OrderDetail>() { orderDetail });
}

Try it: .NET Core | .NET Framework

Parameter

Execute and queries method can use parameters from multiple different ways:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Anonymous
var affectedRows = connection.Execute(sql,
new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
commandType: CommandType.StoredProcedure);

// Dynamic
DynamicParameters parameter = new DynamicParameters();

parameter.Add("@Kind", InvoiceKind.WebInvoice, DbType.Int32, ParameterDirection.Input);
parameter.Add("@Code", "Many_Insert_0", DbType.String, ParameterDirection.Input);
parameter.Add("@RowCount", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);

connection.Execute(sql,
parameter,
commandType: CommandType.StoredProcedure);

int rowCount = parameter.Get<int>("@RowCount");

// List
connection.Query<Invoice>(sql, new {Kind = new[] {InvoiceKind.StoreInvoice, InvoiceKind.WebInvoice}}).ToList();
// String
connection.Query<Invoice>(sql, new {Code = new DbString {Value = "Invoice_1", IsFixedLength = false, Length = 9, IsAnsi = true}}).ToList();

Result

The result returned by queries method can be mapped to multiple types:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
string sqlOrderDetails = "SELECT TOP 10 * FROM OrderDetails;";

using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{
var anonymousList = connection.Query(sqlOrderDetails).ToList();
var orderDetails = connection.Query<OrderDetail>(sqlOrderDetails).ToList();

Console.WriteLine(anonymousList.Count);
Console.WriteLine(orderDetails.Count);

FiddleHelper.WriteTable(orderDetails);

FiddleHelper.WriteTable(connection.Query(sqlOrderDetails).FirstOrDefault());
}

Try it: .NET Core | .NET Framework

Utilities

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Async
connection.QueryAsync<Invoice>(sql)

// Buffered
connection.Query<Invoice>(sql, buffered: false)

// Transaction
using (var transaction = connection.BeginTransaction())
{
var affectedRows = connection.Execute(sql,
new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
commandType: CommandType.StoredProcedure,
transaction: transaction);

transaction.Commit();
}

// Stored Procedure
var affectedRows = connection.Execute(sql,
new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
commandType: CommandType.StoredProcedure);

DapperHelper.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Data.SQLite;
using System.Linq;
using System.Threading.Tasks;
using Dapper;
using MySql.Data.MySqlClient;

namespace ORMSuit.DAO {
public class DapperHelper<T> {
enum DBType {
MSSQL,
MySQL,
SQLite
}
/// <summary>
/// 数据库连接字符串
/// </summary>
private static string connectionString = "";

/// <summary>
/// MSSQL=0, MySQL=1, SQLite=2
/// </summary>
/// <param name="dbType"></param>
public static int dbType = 0;

/// <summary>
/// 获取数据库连接
/// </summary>
/// <returns></returns>
public static IDbConnection GetConnection () {
switch ((DBType) dbType) {
case DBType.MSSQL:
return new SqlConnection (connectionString);
case DBType.MySQL:
connectionString = ConfigurationManager.ConnectionStrings["mysqlconn"].ConnectionString;
return new MySqlConnection (connectionString);
case DBType.SQLite:
connectionString = ConfigurationManager.ConnectionStrings["sqliteconn"].ConnectionString;
return new SQLiteConnection (connectionString);
default:
return new SqlConnection (connectionString);
}
}

/// <summary>
/// 查询列表
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static List<T> Query (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.Query<T> (sql, param).ToList ();
}
}

/// <summary>
/// 查询第一个数据
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static T QueryFirst (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
List<T> tempList = con.Query<T> (sql, param).ToList ();
if (tempList != null && tempList.Count > 0) {
return tempList[0];
} else {
return default;
}
//return con.QueryFirst<T>(sql, param);
}
}

/// <summary>
/// 查询第一个数据没有返回默认值
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static T QueryFirstOrDefault (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.QueryFirstOrDefault<T> (sql, param);
}
}

/// <summary>
/// 查询单条数据
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static T QuerySingle (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.QuerySingle<T> (sql, param);
}
}

/// <summary>
/// 数据是否存在
/// </summary>
/// <param name="sql">select count(*) from table where id=@id</param>
/// <param name="param">new { id = 1 }</param>
/// <returns></returns>
public static bool Exists (string sql, object param = null) {
object obj = ExecuteScalar (sql, param);
int count = 0;
if (obj == null) {
count = 0;
} else {
count = Convert.ToInt32 (obj);
}
if (count > 0) {
return true;
} else {
return false;
}
}

/// <summary>
/// 数据行数
/// </summary>
/// <param name="sql">select count(*) from table where id=@id</param>
/// <param name="param">new { id = 1 }</param>
/// <returns></returns>
public static int RecordCount (string sql, object param = null) {
object obj = ExecuteScalar (sql, param);
int count = 0;
if (obj == null) {
count = 0;
} else {
count = Convert.ToInt32 (obj);
}
return count;
}

/// <summary>
/// 查询单条数据没有返回默认值
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static T QuerySingleOrDefault (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.QuerySingleOrDefault<T> (sql, param);
}
}

/// <summary>
/// 增删改
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static int Execute (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.Execute (sql, param);
}
}

/// <summary>
/// Reader获取数据
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static IDataReader ExecuteReader (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.ExecuteReader (sql, param);
}
}

#region
/// <summary>
/// 获取DataTabel
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static DataTable ExecuteDataTabel (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return DataReaderToDataTable (con.ExecuteReader (sql, param));
}
}

/// <summary>
/// 获取DataSet
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static DataSet ExecuteDataSet (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return DataReaderToDataSet (con.ExecuteReader (sql, param));
}
}

/// <summary>
/// DataReader转DataTable
/// </summary>
/// <param name="dataReader"></param>
/// <returns></returns>
private static DataTable DataReaderToDataTable (IDataReader dataReader) {
DataTable datatable = new DataTable ();
for (int i = 0; i < dataReader.FieldCount; i++) {
DataColumn myDataColumn = new DataColumn ();
myDataColumn.DataType = dataReader.GetFieldType (i);
myDataColumn.ColumnName = dataReader.GetName (i);
datatable.Columns.Add (myDataColumn);
}
while (dataReader.Read ()) {
DataRow myDataRow = datatable.NewRow ();
for (int i = 0; i < dataReader.FieldCount; i++) {
myDataRow[i] = dataReader[i].ToString ();
}
datatable.Rows.Add (myDataRow);
myDataRow = null;
}
dataReader.Close ();
return datatable;
}

/// <summary>
/// DataReader转DataSet
/// </summary>
/// <param name="reader"></param>
/// <returns></returns>
public static DataSet DataReaderToDataSet (IDataReader dataReader) {
DataSet dataSet = new DataSet ();
do {
DataTable schemaTable = dataReader.GetSchemaTable ();
DataTable dataTable = new DataTable ();
if (schemaTable != null) {
for (int i = 0; i < schemaTable.Rows.Count; i++) {
DataRow dataRow = schemaTable.Rows[i];
string columnName = (string) dataRow["ColumnName"];
DataColumn column = new DataColumn (columnName, (Type) dataRow["DataType"]);
dataTable.Columns.Add (column);
}
dataSet.Tables.Add (dataTable);
while (dataReader.Read ()) {
DataRow dataRow = dataTable.NewRow ();
for (int i = 0; i < dataReader.FieldCount; i++) {
dataRow[i] = dataReader.GetValue (i);
}
dataTable.Rows.Add (dataRow);
}
} else {
DataColumn column = new DataColumn ("RowsAffected");
dataTable.Columns.Add (column);
dataSet.Tables.Add (dataTable);
DataRow dataRow = dataTable.NewRow ();
dataRow[0] = dataReader.RecordsAffected;
dataTable.Rows.Add (dataRow);
}
}
while (dataReader.NextResult ());
return dataSet;
}

#endregion

/// <summary>
/// Scalar获取数据
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static object ExecuteScalar (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.ExecuteScalar (sql, param);
}
}

/// <summary>
/// Scalar获取数据
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static T ExecuteScalarForT (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.ExecuteScalar<T> (sql, param);
}
}

/// <summary>
/// 带参数的存储过程
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static List<T> ExecutePro (string proc, object param = null) {
using (IDbConnection con = GetConnection ()) {
List<T> list = con.Query<T> (proc,
param,
null,
true,
null,
CommandType.StoredProcedure).ToList ();
return list;
}
}

/// <summary>
/// 多条SQL批量执行
/// </summary>
/// <param name="Key">多条SQL</param>
/// <param name="Value">SQL对应实体</param>
/// <returns></returns>
public static int ExecuteTransaction (Dictionary<string, object> dic) {
using (IDbConnection con = GetConnection ()) {
using (var transaction = con.BeginTransaction ()) {
try {
int result = 0;
foreach (var sql in dic) {
result += con.Execute (sql.Key, sql.Value, transaction);
}

transaction.Commit ();
return result;
} catch (Exception ex) {
transaction.Rollback ();
return 0;
}
}
}
}

/// <summary>
/// 批量增删改 带事务
/// </summary>
/// <param name="sql">单SQL</param>
/// <param name="object">实体列表</param>
/// <returns></returns>
public static int ExecuteTransaction (string sql, object obj) {
using (IDbConnection con = GetConnection ()) {
con.Open ();
using (IDbTransaction transaction = con.BeginTransaction ()) {
try {
int result = 0;
result = con.Execute (sql, obj, transaction);
transaction.Commit ();
con.Close ();
return result;
} catch (Exception ex) {
transaction.Rollback ();
con.Close ();
return 0;
}
}
}
}

/// <summary>
/// 异步批量增删改 带事务
/// </summary>
/// <param name="sql">单SQL</param>
/// <param name="object">实体列表</param>
/// <returns></returns>
public static Task<int> ExecuteTransactionAsync (string sql, object obj) {
using (IDbConnection con = GetConnection ()) {
con.Open ();
using (IDbTransaction transaction = con.BeginTransaction ()) {
try {
Task<int> result;
result = con.ExecuteAsync (sql, obj, transaction);
transaction.Commit ();
con.Close ();
return result;
} catch (Exception ex) {
transaction.Rollback ();
con.Close ();
return null;
}
}
}
}
}
}
]]>
+ + + + + Developer + + + + + + + .NET + + Database + + ORM + + + +
+ + + + + Steam免费游戏一键领取 + + /post/steam-free-game/ + + 这些都是Steam上免费的游戏,如果手动领取的话需要一个一个领取,这里提供一种简便的方法,一键批量把免费游戏添加到自己的库里。

第一步

打开该链接: https://store.steampowered.com/account/licenses/ ,然后登录自己的账号(或者自己进入Steam主页,登录网页版Steam,然后进入到 主页 > 帐户 > 许可和产品序列号激活 页面)。

第二步

按键盘F12,进入Console,粘贴下方代码后按Enter键执行代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
(function () {
if (location.href.match(/^https:\/\/store\.steampowered\.com\/account\/licenses\/?$/) === null) {
alert('请在Steam帐号明细页面运行这些代码: https://store.steampowered.com/account/licenses/');

window.location = 'https://store.steampowered.com/account/licenses/';

return;
}

var freePackages =
[
//本体
39166,//Heroine's Quest: The Herald of Ragnarok
13261,//RACE 07: Andy Priaulx Crowne Plaza Raceway
32032,//Portal 2 Sixense Perceptual Pack
59373,//Penumbra: Necrologue
33694,//Grimm&Episode 1 - A Boy Learns What Fear Is
88162,//Romance of the Three Kingdoms Maker
36561,//Serena
58514,//Voxelized
117526,//Amnesia: Final Revelations

//dlc
85604,//RTK Maker - Face CG “RTK13” Set / 三国志ツクール顔登録素材 『三國志13』セット+シナリオ
21478,//Free to Play免费本体
50861,//Free to Play Soundtrack
21473,//Prime World免费本体
31538,//Prime World - Prime Machine
32287,//Z3TA+ 2 - Polybius 8-bit Game Pack
38085,//Saints Row IV - Reverse Cosplay Pack
72261,//The Secret of Tremendous Corporation免费本体
81026,//The Sources of Tremendous Corporation
47333,//Aura Kingdom免费本体
38820,//Aura Kingdom - Winter Gift
69802,//Fuse免费本体
60341,//Fuse - Free Brute Character Pack
21416,//Elsword免费本体
63207,//Time Tracer's DLC Package
59253,//Vindictus - New User Package

//软件&工具
35063,//Star Swarm Stress Test
74465,//Arma 3 Samples

21101, // DiRT Showdown Demo
21102, // Rayman Origins Demo
21103, // iBomber Defense Pacific Demo
21104, // Men Of War: Assault Squad GOTY Demo
21105, // Bang Bang Racing Demo
21106, // Sine Mora Demo
21107, // Noitu Love 2 Devolution Demo
21108, // Waveform Demo
21109, // Ridge Racer™ Unbounded Demo
21110, // Hegemony Gold: Wars of Ancient Greece
21111, // Rocksmith Demo
21113, // Binary Domain Demo
21114, // Sniper Elite V2 Demo
21115, // Blades of Time Demo
21117, // A Valley Without Wind Demo
21118, // F1 2012 Demo
21119, // Magical Diary Demo
21120, // The Dream Machine Demo
21121, // Hell Yeah! Demo
21122, // A Virus Named Tom Demo
21123, // Splice Demo
21124, // Atooms to Moolecules
21125, // BeatBuddy Demo
21126, // DIVO
21127, // Imagine Earth Demo
21128, // MilitAnt
21129, // Plutonic Repulse
21130, // The White Laboratory Demo
21131, // Blackwell's Asylum
21132, // Magic 2014 Demo
21133, // Sid Meier's Civilization V: Gods & Kings Demo
21134, // Gratuitous Tank Battles Demo
21135, // Tiny and Big: Grandpa's Leftovers Demo
21136, // KungFu Strike Demo
21137, // Adventures of Shuggy Demo
21138, // E.Y.E: Divine Cybermancy Demo
21139, // Orcs Must Die! 2 Demo
21140, // The Book of Unwritten Tales Demo
21141, // Sleeping Dogs™ Demo
21142, // Damage Inc Demo
21143, // Gateways Demo
21144, // Football Manager 2013 Demo
21145, // XCOM: Enemy Unknown Demo
21146, // Transcripted Demo
21147, // Intrusion 2 Demo
21148, // Din's Curse Demo
21149, // Democracy 2 Demo
21150, // Ys Origin Demo
21151, // Ether Vapor Remaster Demo
];

var ownedPackages = {};

jQuery('.account_table a').each(function (i, el) {
var match = el.href.match(/javascript:RemoveFreeLicense\( ([0-9]+), '/);

if (match !== null) {
ownedPackages[+match[1]] = true;
}
});

var i = 0,
loaded = 0,
package = 0,
total = freePackages.length,
modal = ShowBlockingWaitDialog('努力执行中...',
'请耐心等待,如果有错误请无视,请耐心等待脚本加载完毕');

for (; i < total; i++) {
package = freePackages[i];

if (ownedPackages[package]) {
loaded++;
continue;
}

jQuery.post(
'//store.steampowered.com/checkout/addfreelicense',
{
action: 'add_to_cart',
sessionid: g_sessionID,
subid: package
}
).always(function () {
loaded++;

modal.Dismiss();

if (loaded >= total) {
location.reload();
}
else {
modal = ShowBlockingWaitDialog('执行中...',
'加载至 <b>' + loaded + '</b>/' + total + '.');
}
}
);
}
}());

第三步

Enjoy your free game!

]]>
+ + + + + Share + + + + + + + Steam + + Game + + + +
+ + + + + SSMS18闪退解决方法 + + /post/ssms18-not-run/ + + 这是已知问题,SSMS开发团队发布了新的官方解决方法。

第一个方法

复制文件

1
Microsoft.VisualStudio.Shell.Interop.8.0.dll

将该DLL文件从目录

1
C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\PrivateAssemblies\Interop

复制到目录

1
C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\PublicAssemblies

第二个方法

删除文件

1
C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\CommonExtensions\Platform\Microsoft.VisualStudio.MinShell.Interop.pkgdef

SSMS产品经理提供的方法

建议的解决方法是:

1)关闭所有SSMS实例

2)编辑ssms.exe.config

3)删除具有以下文本的行(应该是第38行):NgenBind_OptimizeNonGac enabled =“1”

这与SSMS 18.x的下一版本中的改变相同

注意!ssms.exe.config文件的位置在文件夹中:

1
C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE

相关链接

]]>
+ + + + + Developer + + + + + + + 数据库 + + + +
+ + + + + 心中尚未崩坏的地方 + + /post/world-peace/ + + World peace

2017年,叙利亚阿勒颇,70岁的阿布·奥马尔(Abu Omar)在被毁的卧室里抽着烟斗听音乐

1940年,在德军轰炸考文垂后, 一位优雅的女士踩着废墟, 前往邮桶寄一封不知何时能被收到的信

1945年8月14日,纽约时代广场的“胜利之吻”,日本宣布投降,纽约民众在街头庆祝胜利。一位水兵在时代广场的欢庆活动,亲吻了身旁的一位女护士

]]>
+ + + + + Share + + + + + + + Peace + + + +
+ + + + + 微星B450M MORTAR主板PCI_E3接口无法识别硬件解决方法 + + /post/msi-b450m-mortar/ + + 博主购买的微星B450M MORTAR主板,由于安装显卡后会挡住PCI_E2接口,所以无线网卡(Intel 9260AC)只能插PCI_E3接口上,但是一直无法识别出来,在微星社区咨询后发现已经有人反馈过这个问题,帖子中官方人员回复:

  1. 主板的PCIE 插槽必须有共享LANES的状况
  2. PCIE CARD 本身没有依照规范将Prsnt 1(A1)#和Prsnt 2#(B17)短接。

随后官方发布了B450M MORTAR新BIOS固件,版本号7B89v14,更新到最新BIOS后,进BIOS - setting - advanced - PCI SUBsystem setting, 找到PCIe x1 slot switch 改成PCIE_3 (默认为PCIE_2 ),然后插在PCI-E_E3上的无线网卡就可以正常被识别出来啦。B450M MORTAR Titanium版本的主板也同样适用该方法。

微星社区:http://forum-sc.msi.com/index.php?topic=5308.14

]]>
+ + + + + Share + + + + + + + PC + + 主板 + + PCI_E + + + +
+ + + + + 年轻人的第二台PC诞生 + + /post/my-second-pc/ + + 博主的第一台主机是17年6月份大学毕业时组的一套,当时资金有限,主机花了2600元,服役了一年半,由于性能不能满足 游戏 工作的需要,所以就在19年春节前又配了一套。

旧的主机虽然已经用了一年半,但毕竟是挤牙膏挤多了的性价比神U G4560和10系显卡1050ti,家用办公中画质玩玩3A大作还是够用的,于是就春节搬回家,把家里N年前的主机给替换了。其实在春节前都已经配齐开始使用了,但一直没时间更新博客,趁着这周末有空就来补上笔记。

配置清单

  • 固态硬盘 英特尔 760P 256G 359
  • 显卡 铭瑄 GTX1060 6G 1489
  • 内存 金士顿 骇客神条2666 8G *2 679
  • 处理器 AMD Ryzen5 2600X
  • 主板 微星 B450M MORTAR 1999
  • 机箱 先马 平头哥 149
  • 电源 先马 全模组500W 349

配置清单合计5024元,显示器、键盘、鼠标、PCIE无线网卡、音箱以及两块1TB机械硬盘都使用上台主机的,故不算入总价中。

安装过程

先放桌子上点亮
点亮成功
装系统
放入机箱
粗糙的背线
安装完成

娱乐大师跑分

跑分
配置

灯效

]]>
+ + + + + Share + + + + + + + PC + + DIY + + + +
+ + + + + JS地图使用笔记 + + /post/js-map/ + + 最近一个项目中要用JS实现一个简单的地图,由于是前端小白,开发过程中遇到了不少问题,然后整理了两个Demo,便于以后需要使用时有个参考。

对功能性要求不高使用Demo1,要求高的话用Demo2,Demo2是用的Highmaps,官方提供了很多方法,可以参考官方文档。

两个Demo的完整代码下载地址在文末。

Demo1

Demo2

相关文档

Highmaps API 文档

源码下载

百度云

https://pan.baidu.com/s/1YDYu9Sz4LqIun2VQNB52tw

提取码:3vjq

]]>
+ + + + + Developer + + + + + + + JS + + Map + + 地图 + + + +
+ + + + + 微软开源WPF, Windows Forms 和 WinUI + + /post/ms-opensource/ + + 美国当地时间12月4日,微软正式举行 Microsoft Connect(); 2018 开发者大会。

Content

  • Visual Studio 2019 Preview
  • .NET Core 3 Preview 1
  • .NET Framework 4.8
  • ASP.NET Core 2.2
  • ML.NET 0.8
  • WPF, Windows Forms 和 WinUI 框架宣布开源
  • 宣布 .NET 基金会开放接受会员加入
  • 微软和 Docker 宣布了一个新的联合开源项目,即 Cloud Native Application Bundle,它可以更轻松地打包和运行云原生应用程序

会不会有朝一日WindowsOS也开源了?

]]>
+ + + + + Share + + + + + + + OpenSource + + News + + + +
+ + + + + 用Python爬 历史的今天 数据 + + /post/python-historytoday/ + + 刚开始学习Python,试着写了一些东西,发现Python确实是非常容易上手,代码十分简短,并且有很多第三方库可以使用,同样的一种操作用别的语言可能需要10行代码,Python可能只要1行就能实现。

我这里爬的是这个网站 www.lssdjt.com,类似的网站还有很多。由于我也是初学者,所以注释写的比代码多。

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from urllib import request
from bs4 import BeautifulSoup

# 初始化第一条要查的url
startUrl = "http://www.lssdjt.com/11/29"

# 打开一个txt用来保存爬到的数据
pageFile = open('historyTodayData.txt', 'w', encoding='utf-8')

# 获取数据 并返回下一天的url
def getdata(url):
# 请求url
page = request.urlopen(url)
# 获取数据流
pageStream = page.read()
# utf8解码
pageHtml = pageStream.decode('utf-8')
# 把页面转换成BeautifulSoup对象 具体使用方法 参考文末链接里的文档
soup = BeautifulSoup(pageHtml, "html.parser")
nextUrlClass = soup.find('ul', {'class': 'bot'}).find('li', {'class': 'r'})
next_url = nextUrlClass.a['href']
# print(next_url)
links = soup.find_all("a", class_="screenshot")
for link in links:
# 微信小程序云开发提供的数据库是JSON数据库 可以直接导入JSON文件或者CSV文件 这里把内容整理成CSV格式的方便导入云数据库
# title,date,month,day 导入云数据库时微信会自动给每条数据生成_id
print(link.i.string, link.em.string, link.em.string.split('年')[1].replace('月', ' ').replace('日', ''))
# 这里把数据行整理成我需要的格式
tempStrLine = link.i.string+' '+link.em.string+' ' + link.em.string.split('年')[1].replace('月', ' ').replace('日', '') + '\n'
# 这里开始把每行数据写到文件里
pageFile.writelines(tempStrLine)
return next_url

# 循环365次
for _ in range(365):
# 递归调用获取数据方法
startUrl = getdata(startUrl)

# 关闭文件
pageFile.close()

爬完的数据长下面这个样子,大概有一万多行,把列头title,date,month,day添加到第一行,文件扩展名改为csv就可以直接导入微信小程序云开发提供的数据库中了。

参考内容

BeautifulSoup中文文档

]]>
+ + + + + Developer + + + + + + + Python + + reptile + + + +
+ + + + + SQL日期时间格式转换 + + /post/sql-date-format/ + + 不经常用,所以没有刻意记过,但每次用到了都要百度,保存此处方便下次使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Select CONVERT(varchar(100), GETDATE(), 0)/*05 16 2006 10:57AM*/
Select CONVERT(varchar(100), GETDATE(), 1)/*05/16/06*/
Select CONVERT(varchar(100), GETDATE(), 2)/*06.05.16*/
Select CONVERT(varchar(100), GETDATE(), 3)/*16/05/06*/
Select CONVERT(varchar(100), GETDATE(), 4)/*16.05.06*/
Select CONVERT(varchar(100), GETDATE(), 5)/*16-05-06*/
Select CONVERT(varchar(100), GETDATE(), 6)/*16 05 06*/
Select CONVERT(varchar(100), GETDATE(), 7)/*05 16, 06*/
Select CONVERT(varchar(100), GETDATE(), 8)/*10:57:46*/
Select CONVERT(varchar(100), GETDATE(), 9)/*05 16 2006 10:57:46:827AM*/
Select CONVERT(varchar(100), GETDATE(), 10)/*05-16-06*/
Select CONVERT(varchar(100), GETDATE(), 11)/*06/05/16*/
Select CONVERT(varchar(100), GETDATE(), 12)/*060516*/
Select CONVERT(varchar(100), GETDATE(), 13)/*16 05 2006 10:57:46:937*/
Select CONVERT(varchar(100), GETDATE(), 14)/*10:57:46:967*/
Select CONVERT(varchar(100), GETDATE(), 20)/*2006-05-16 10:57:47*/
Select CONVERT(varchar(100), GETDATE(), 21)/*2006-05-16 10:57:47.157*/
Select CONVERT(varchar(100), GETDATE(), 22)/*05/16/06 10:57:47 AM*/
Select CONVERT(varchar(100), GETDATE(), 23)/*2006-05-16*/
Select CONVERT(varchar(100), GETDATE(), 24)/*10:57:47*/
Select CONVERT(varchar(100), GETDATE(), 25)/*2006-05-16 10:57:47.250*/
Select CONVERT(varchar(100), GETDATE(), 100)/*05 16 2006 10:57AM*/
Select CONVERT(varchar(100), GETDATE(), 101)/*05/16/2006*/
Select CONVERT(varchar(100), GETDATE(), 102)/*2006.05.16*/
Select CONVERT(varchar(100), GETDATE(), 103)/*16/05/2006*/
Select CONVERT(varchar(100), GETDATE(), 104)/*16.05.2006*/
Select CONVERT(varchar(100), GETDATE(), 105)/*16-05-2006*/
Select CONVERT(varchar(100), GETDATE(), 106)/*16 05 2006*/
Select CONVERT(varchar(100), GETDATE(), 107)/*05 16, 2006*/
Select CONVERT(varchar(100), GETDATE(), 108)/*10:57:49*/
Select CONVERT(varchar(100), GETDATE(), 109)/*05 16 2006 10:57:49:437AM*/
Select CONVERT(varchar(100), GETDATE(), 110)/*05-16-2006*/
Select CONVERT(varchar(100), GETDATE(), 111)/*2006/05/16*/
Select CONVERT(varchar(100), GETDATE(), 112)/*20060516*/
Select CONVERT(varchar(100), GETDATE(), 113)/*16 05 2006 10:57:49:513*/
Select CONVERT(varchar(100), GETDATE(), 114)/*10:57:49:547*/
Select CONVERT(varchar(100), GETDATE(), 120)/*2006-05-16 10:57:49*/
Select CONVERT(varchar(100), GETDATE(), 121)/*2006-05-16 10:57:49.700*/
Select CONVERT(varchar(100), GETDATE(), 126)/*2006-05-16T10:57:49.827*/
]]>
+ + + + + Developer + + + + + + + Database + + SQL + + + +
+ + + + + JavaScript获取时间并格式化 + + /post/js-dateformat/ + + 最近在学习微信小程序,用到不少前端的知识,比如时间格式化。

Example

1
2
3
4
function getDateNow() {
var date = new Date();
return date.format("yyyy-MM-dd HH:mm:ss.t w");
}

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*
*对Date的扩展,将 Date 转化为指定格式的String
*月(M)、日(d)、小时(H)、分(m)、秒(s)、季度(q) 可以用 1-2个占位符,
*年(y)可以用 1-4个占位符,毫秒(t) 1个占位符(3位的数字)
*星期(w) 1个占位符
*example
*(new Date()).Format("yyyy-MM-dd HH:mm:ss.t w") ==> 2018-10-19 14:19:17.649 星期五
*/
Date.prototype.format = function(fmt) {
var weekArr = {
cn: new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"),
en: new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
};
var o = {
"M+": this.getMonth() + 1,
"d+": this.getDate(),
"H+": this.getHours(),
"m+": this.getMinutes(),
"s+": this.getSeconds(),
"q+": Math.floor((this.getMonth() + 3) / 3),
"t": ("00" + this.getMilliseconds()).slice( - 3),
"w": weekArr.en[this.getDay()]
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o) if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
};
]]>
+ + + + + Developer + + + + + + + JS + + DateFormat + + + +
+ + + + + 5个小技巧让你写出更好的JavaScript条件语句 + + /post/js-5tip/ + +

原文地址:5 Tips to Write Better Conditionals in JavaScript
原文作者:Jecelyn Yeen
翻译&校对:pdone

1.在条件较多时使用 Array.includes

举个栗子:

1
2
3
4
5
6
// condition
function test(fruit) {
if (fruit == 'apple' || fruit == 'strawberry') {
console.log('red');
}
}

乍一看,上面的例子看起来不错。 但是,如果我们有更多的红色水果,比如樱桃和蔓越莓呢? 我们是否要用更多的||来扩展语句?

我们可以使用Array.includes重写上面的条件。

1
2
3
4
5
6
7
8
function test(fruit) {
// extract conditions to array
const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];

if (redFruits.includes(fruit)) {
console.log('red');
}
}

我们将红色水果(条件)整合到一个数组中。这样做可以让代码看起来更整洁。

2.减少嵌套,尽早返回

让我们扩展前面的示例,增加另外两个条件:
——如果没有提供水果,抛出错误;
——如果超过10种水果,打印出水果数量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function test(fruit, quantity) {
const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];

// condition 1: fruit must has value
if (fruit) {
// condition 2: must be red
if (redFruits.includes(fruit)) {
console.log('red');

// condition 3: must be big quantity
if (quantity > 10) {
console.log('big quantity');
}
}
} else {
throw new Error('No fruit!');
}
}

// test results
test(null); // error: No fruits
test('apple'); // print: red
test('apple', 20); // print: red, big quantity

看看上面的代码,我们有:
­——1个if / else语句过滤掉无效条件;
——3层嵌套if语句(条件1,2和3)。
对我而言,我遵循的规则是在发现无效条件时提前返回。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* return early when invalid conditions found */

function test(fruit, quantity) {
const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];

// condition 1: throw error early
if (!fruit) throw new Error('No fruit!');

// condition 2: must be red
if (redFruits.includes(fruit)) {
console.log('red');

// condition 3: must be big quantity
if (quantity > 10) {
console.log('big quantity');
}
}
}

这样做的话,我们会得到一个较少层级的嵌套语句。 这种编码风格很好,特别是当你有很长的if语句时(想象你需要滚动到最底层才知道这里有一个else语句,一点都不酷)。

通过反转条件并提前返回,我们可以进一步减少嵌套。 请查看下面的条件2,看看我们是如何做到的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* return early when invalid conditions found */

function test(fruit, quantity) {
const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];

if (!fruit) throw new Error('No fruit!'); // condition 1: throw error early
if (!redFruits.includes(fruit)) return; // condition 2: stop when fruit is not red

console.log('red');

// condition 3: must be big quantity
if (quantity > 10) {
console.log('big quantity');
}
}

通过反转条件2,我们的代码现在没有嵌套语句。 当我们有很长的逻辑时,这种技巧非常有用,我们希望在不满足条件时停止下一步的处理。

但是这并不是硬性规定。问问自己,这个版本(没有嵌套)是否比前一个版本(条件2嵌套)更好、更可读?

对我而言,我会保留(条件2嵌套)这个版本,因为:
——代码简短直接,一个if语句是代码结构更清晰;
——反转条件可能会引发更多的思考过程(增加认知负荷)。

因此,始终追求更少的嵌套和尽早的返回,但不要过度。如果你感兴趣的话,这里有篇关于这个问题的文章以及 StackOverflow 上的讨论:

Avoid Else, Return Early by Tim Oxley

StackOverflow discussion on if/else coding style

3.使用函数默认参数和解构

我想下面的代码可能看起来很熟悉,我们总是需要检查null / undefined值并给参数赋予默认值:

1
2
3
4
5
6
7
8
9
10
function test(fruit, quantity) {
if (!fruit) return;
const q = quantity || 1; // if quantity not provided, default to one

console.log(`We have ${q} ${fruit}!`);
}

//test results
test('banana'); // We have 1 banana!
test('apple', 2); // We have 2 apple!

实际上,我们可以通过设置函数的默认参数来省去参数q

1
2
3
4
5
6
7
8
function test(fruit, quantity = 1) { // if quantity not provided, default to one
if (!fruit) return;
console.log(`We have ${quantity} ${fruit}!`);
}

//test results
test('banana'); // We have 1 banana!
test('apple', 2); // We have 2 apple!

更简单直观不是吗? 请注意,函数的每个参数都可以有自己的默认值。 例如,我们也可以为水果分配默认值:

1
function test (fruit ='unknown', quantity = 1)

如果我们的水果是一个对象(Object)怎么办? 我们可以指定默认参数吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
function test(fruit) { 
// printing fruit name if value provided
if (fruit && fruit.name) {
console.log (fruit.name);
} else {
console.log('unknown');
}
}

//test results
test(undefined); // unknown
test({ }); // unknown
test({ name: 'apple', color: 'red' }); // apple

观察上边的例子,水果的name属性存在时,我们会将它打印出来,否则打印'unknown'。我们可以通过默认参数和解构赋值的方法来避免写出 fruit && fruit.name 这种条件。

1
2
3
4
5
6
7
8
9
10
// destructing - get name property only
// assign default empty object {}
function test({name} = {}) {
console.log (name || 'unknown');
}

//test results
test(undefined); // unknown
test({ }); // unknown
test({ name: 'apple', color: 'red' }); // apple

由于我们只需要来自fruit的name属性,我们可以使用{name}将其解构出来,然后我们可以在代码中使用name作为变量而不是fruit.name

我们还使用空对象{}作为默认值。 如果我们不这样做,你将在执行遇到错误test(undefined) - Cannot destructure property name of 'undefined' or 'null'。 因为undefined中没有name属性。

如果你不介意使用第三方库,有几种方法可以减少空值检查:
——使用 Lodash get 函数;
——使用 Facebook 开源的 idx 库(需搭配 Babeljs)。
这里有一个使用 Lodash 的例子:

1
2
3
4
5
6
7
8
9
// Include lodash library, you will get _
function test(fruit) {
console.log(__.get(fruit, 'name', 'unknown'); // get property name, if not available, assign default value 'unknown'
}

//test results
test(undefined); // unknown
test({ }); // unknown
test({ name: 'apple', color: 'red' }); // apple

您可以点击这里运行演示代码。 此外,如果您是功能编程(FP)的粉丝,您可以选择使用Lodash fp,Lodash的功能版本(方法更改为get或getOr)。

4.相较Switch更偏向于使用Map / Object

让我们看看下面的例子,我们想根据颜色打印水果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function test(color) {
// use switch case to find fruits in color
switch (color) {
case 'red':
return ['apple', 'strawberry'];
case 'yellow':
return ['banana', 'pineapple'];
case 'purple':
return ['grape', 'plum'];
default:
return [];
}
}

//test results
test(null); // []
test('yellow'); // ['banana', 'pineapple']

上面的代码似乎没有错,但我觉得它很冗长。 使用具有更清晰语法的object literal可以实现相同的结果:

1
2
3
4
5
6
7
8
9
10
// use object literal to find fruits in color
const fruitColor = {
red: ['apple', 'strawberry'],
yellow: ['banana', 'pineapple'],
purple: ['grape', 'plum']
};

function test(color) {
return fruitColor[color] || [];
}

或者,你可以使用Map来实现相同的结果:

1
2
3
4
5
6
7
8
9
// use Map to find fruits in color
const fruitColor = new Map()
.set('red', ['apple', 'strawberry'])
.set('yellow', ['banana', 'pineapple'])
.set('purple', ['grape', 'plum']);

function test(color) {
return fruitColor.get(color) || [];
}

Map是ES2015引入的对象类型,允许你存储键值对。

我们应该禁止使用switch语句吗? 不要局限于此。 就个人而言,我尽可能使用object literal,但我不会设置硬性规则来阻止使用Switch,视使用场景而定。

Todd Motto有一篇文章深入研究switch语句与对象文字,你可以点击这里阅读。

TL;DR;重构方法

对于上面的示例,我们实际上可以重构我们的代码以使用Array.filter实现相同的结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 const fruits = [
{ name: 'apple', color: 'red' },
{ name: 'strawberry', color: 'red' },
{ name: 'banana', color: 'yellow' },
{ name: 'pineapple', color: 'yellow' },
{ name: 'grape', color: 'purple' },
{ name: 'plum', color: 'purple' }
];

function test(color) {
// use Array filter to find fruits in color

return fruits.filter(f => f.color == color);
}

解决问题的方法永远不只一种。对于这个例子我们展示了四种实现方法。编程真有趣!

5.使用 Array.every 和 Array.some 来处理全部/部分满足条件

最后一个小技巧更多地是关于使用新的(也不是很新了)JavaScript 数组函数来减少代码行数。观察以下的代码,我们想要检查是否所有的水果都是红色的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const fruits = [
{ name: 'apple', color: 'red' },
{ name: 'banana', color: 'yellow' },
{ name: 'grape', color: 'purple' }
];

function test() {
let isAllRed = true;

// condition: all fruits must be red
for (let f of fruits) {
if (!isAllRed) break;
isAllRed = (f.color == 'red');
}

console.log(isAllRed); // false
}

代码太长了! 我们可以使用Array.every减少行数:

1
2
3
4
5
6
7
8
9
10
11
12
const fruits = [
{ name: 'apple', color: 'red' },
{ name: 'banana', color: 'yellow' },
{ name: 'grape', color: 'purple' }
];

function test() {
// condition: short way, all fruits must be red
const isAllRed = fruits.every(f => f.color == 'red');

console.log(isAllRed); // false
}

现在是不是整洁了许多? 以类似的方式,如果我们想测试是否至少有一个水果为红色,我们可以使用Array.some用一行代码实现它。

1
2
3
4
5
6
7
8
9
10
11
12
const fruits = [
{ name: 'apple', color: 'red' },
{ name: 'banana', color: 'yellow' },
{ name: 'grape', color: 'purple' }
];

function test() {
// condition: if any fruit is red
const isAnyRed = fruits.some(f => f.color == 'red');

console.log(isAnyRed); // true
}

让我们一起编写可读性更高的代码。 我希望你能在本文中学到一些新东西。

就这样。 快乐的编码!

]]>
+ + + + + Developer + + + + + + + JS + + + +
+ + + + + OpenSSL生成多域名CSR + + /post/openssl-csr/ + + 首先要选择证书颁发机构(CA),各大著名的证书颁发机构的多域名[1]、泛域名证书大多是需要收费的。目前发现亚洲诚信(TrustAsia)的免费证书支持双域名,而Let’s Encrypt的免费证书既支持多域名,同时也支持泛域名。

申请证书需要用到CSR[2],直接在搜索引擎搜索CSR在线生成就可以很方便的生成,然后会得到一个CSR和一个KEY,前者是提交给证书颁发机构申请证书用的,后者是给服务器安装证书的时候用到的。

在实践过程中发现,网上大多数 CSR 生成工具都不支持填多个域名,熟悉OpenSSL的同学应该很容易就搞定了,但是对于像博主一样的小白来说,能有个工具再好不过了,这里分享一个支持多域名CSR的在线生成网站:https://certificatetools.com/newui/

CSR也可以使用OpenSSL生成,动手能力强的同学可以自己用工具离线生成。

配置文件

[ req ]default_md = sha256  prompt = no  req_extensions = req_ext  distinguished_name = req_distinguished_name[ req_distinguished_name ]0.commonName = pdoner.cn1.commonName = *.pdoner.cncountryName = CNstateOrProvinceName = HenanlocalityName = ZhengzhouorganizationName = Pdone Technology[ req_ext ]keyUsage=critical,digitalSignature,keyEnciphermentextendedKeyUsage=critical,serverAuth,clientAuthsubjectAltName = @alt_names[ alt_names ]DNS.0 = pdoner.cn

**[1]**多域名证书,一说为SAN certificater(SubjectAltName Certificater),一说为Unified Communications Certificater(这个是微软的说法),已经迅速成为一种深受大家欢迎的证书,通过这种证书,可以方便部署Exchange, OCS 等经常有多个服务名的应用系统,此外也便于企业的网络管理人员对证书管理。

**[2]**CSR是Certificate Signing Request的英文缩写,即证书请求文件,也就是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,证书申请者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书。

相关资料

]]>
+ + + + + Developer + + + + + + + SSL + + CA + + cert + + + +
+ + + + + Cryptojs – JavaScript加密库 + + /post/js-cryptojs/ + + Import
1
npm install crypto-js

Usage

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//MD5加密
var md5Encrypt = CryptoJS.MD5("Message");
//SHA1加密
var sha1Encrypt = CryptoJS.SHA1("Message");
//SHA256加密
var sha256Encrypt = CryptoJS.SHA256("Message");
//AES加解密
var aesEncrypt = CryptoJS.AES.encrypt("Message", "Secret Passphrase");
var aesDecrypt = CryptoJS.AES.decrypt(aesEncrypt, "Secret Passphrase");
//3DES加解密(不建议使用DES,这里展示3DES)
var 3desEncrypt = CryptoJS.TripleDES.encrypt("Message", "Secret Passphrase");
var 3desDecrypt = CryptoJS.TripleDES.decrypt(3desEncrypt, "Secret Passphrase");

//偏移量、加密模式、填充模式的应用
var message = "Message";
var key = CryptoJS.enc.Utf8.parse("123456"); //密钥
var iv = CryptoJS.enc.Utf8.parse("123456"); //偏移量
var aesEncrypt2 = CryptoJS.AES.encrypt(message ,key, {
iv: iv,
mode: CryptoJS.mode.CBC, //加密模式
padding: CryptoJS.pad.Pkcs7 //填充模式
});
aesEncrypt2 = encodeURIComponent(CryptoJS.enc.Base64.stringify(encryptResult.ciphertext)); //可转为Base64后再进行Url编码,也可直接使用十六进制

Extend

  1. 密钥和偏移量:一般情况下密钥为加密方与解密方双方约定好的,但如果长期使用同一密钥,对相同内容加密后的结果一致,容易被找出规律。所以,可以在双方交互时添加一个参数——偏移量,偏移量明文传递,并且每次请求都不同,但在一次交互过程中,双方使用同一偏移量,这样就可以使加密相同内容时结果每次都不同,间接提高安全性。
  2. 加密模式:电码本模式(Electronic Codebook Book (ECB));密码分组链接模式(Cipher Block Chaining (CBC));计算器模式(Counter (CTR));密码反馈模式(Cipher FeedBack (CFB));输出反馈模式(Output FeedBack (OFB))。ECB模式下偏移量不生效。具体各种模式的原理这里不再描述(参考资料1)。
  3. 填充模式:.NET和Java中并不完全通用,经过与安卓开发的同事踩坑与测试后,发现None和ISO10126两种填充模式,在两个平台是通用的。理论上PKCS7/PKCS5应该也是通用的(参考资料2/参考资料3)。
  4. 编码格式:之前做项目时因为编码的问题耽误了不少时间。
  5. 没有绝对的安全。

相关项目

]]>
+ + + + + Developer + + + + + + + JS + + Security + + + +
+ + + + + Listen 1 – One for all free music in China + + /post/listen1/ + + Listen 1可以搜索和播放来自网易云音乐、虾米、QQ音乐、酷狗音乐、酷我音乐网站的歌曲,让你的曲库更全面。

截图

音乐平台歌单推荐界面
从网易云音乐、QQ音乐等平台导入自己的歌单到Listen1
搜索界面
歌词界面

安装

Chrome插件版

  1. 下载Chrome插件版压缩包,并解压缩
  2. 打开 Chrome 扩展页面,勾选右上角「开发者模式」
  3. 选择「加载已解压的扩展程序…」,选择刚刚解压缩的文件夹
  4. 开始使用

Firefox插件版

  1. 下载Firefox插件版,并解压缩
  2. 打开 about:config 页面,xpinstall.signatures.required 设置为 false
  3. 选择「附加组件」,齿轮图标,选择从文件安装附加组件,选择下载的xpi文件
  4. 开始使用

Windows桌面版

  1. 下载Windows压缩包,根据系统选择32位或64位版本
  2. 解压缩,运行 Listen1.exe

Mac桌面版

  1. 下载并运行dmg,在打开的安装窗口把Listen 1图标拖动到右侧
  2. 点击Listen 1图标运行

Linux桌面版

  1. 下载deb安装包,根据系统选择32位或64位版本
  2. 点击deb,在安装界面点击Install

下载

Listen 1背后的开源项目

listen1/listen1
最初的网页版播放器,使用Python开发Web服务器。可以直接在服务器运行,也可使用打包的Windows版和Mac版在本地运行Web服务器

listen1/listen1_chrome_extension
Chrome和Firefox插件版

listen1/listen1_desktop
Windows,Mac,Linux桌面版。使用Electron框架,基于Listen 1 Chrome插件版JS库开发

Listen 1联系方式

致谢

感谢该项目的所有代码贡献者。

如果觉得不错,不妨推荐给你身边喜欢音乐的朋友。

]]>
+ + + + + Tools + + + + + + + Music + + PlugIn + + + +
+ + + + +
diff --git a/movecar/index.html b/movecar/index.html new file mode 100644 index 0000000..b7da196 --- /dev/null +++ b/movecar/index.html @@ -0,0 +1,530 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 联系车主挪车 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+ + + + + + +
+ + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/page/2/index.html b/page/2/index.html new file mode 100644 index 0000000..705287d --- /dev/null +++ b/page/2/index.html @@ -0,0 +1,1158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + + + + + + +
+ + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/page/3/index.html b/page/3/index.html new file mode 100644 index 0000000..a6bdd17 --- /dev/null +++ b/page/3/index.html @@ -0,0 +1,1162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + + +
+ + + +
+ + + + + + + +
+ + + +
+ + + +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/page/4/index.html b/page/4/index.html new file mode 100644 index 0000000..d9dbf6e --- /dev/null +++ b/page/4/index.html @@ -0,0 +1,656 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + + +
+ + + +
+ + + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/placeholder b/placeholder deleted file mode 100644 index e69de29..0000000 diff --git a/post/awesome/index.html b/post/awesome/index.html new file mode 100644 index 0000000..247b78c --- /dev/null +++ b/post/awesome/index.html @@ -0,0 +1,1202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 🌈Awesome Software / Service - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

🌈Awesome Software / Service

+ + +
+ +

分享一些好用的软件、服务和开源项目等,传递开源与分享精神。纯粹的分享与推荐,放心食用。

+ + +
+

开源项目仅提供代码仓库地址,若有官方网站亦会标明。内容排序方式为项目名称英文字母顺序。

目前收录总数:35

  • 桌面应用:19
  • 服务应用:12
  • 开源字体:4
+
+ + + +

桌面应用

桌面应用是一种在桌面操作系统上运行的应用程序,例如 Windows、macOS 和 Linux。与 Web 应用程序和移动应用程序不同,桌面应用程序通常是使用本地编程语言和工具(例如 C++、C#、Java 或 Swift)开发的,并且可以直接在计算机上运行,而无需通过浏览器或移动设备。桌面应用程序可以具有许多不同的功能,例如文本编辑器、图形设计工具、游戏、办公套件、音频/视频编辑器等。与 Web 应用程序相比,桌面应用程序通常具有更高的性能和更好的用户体验,因为它们可以直接访问计算机的资源,例如文件系统、网络和硬件设备。同时,桌面应用程序也需要更多的开发和维护工作,因为它们需要考虑不同操作系统和硬件设备的兼容性问题。

+

7z - 压缩工具

7-Zip是一个具有高压缩比的文件归档器。

+
+

7-Zip is a file archiver with a high compression ratio.

+
+

+ + 官方网站 + GitHub + + +

CUE Splitter - 音频分轨

CUE Splitter是一个免费的工具,它可以将一个大的音频文件,主要是一张专辑或一个汇编,分割成相对独立的曲目,使用相关的“CUE表”文件中包含的信息。有时你可以找到一个大的压缩音乐文件(例如MP3,APE,FLAC,OGG,WAV,WMA等)。配备了一个小的.cue文本文件,其中包含有关内部轨道的所有细节:标题,艺术家,持续时间等。通常这对夫妇的文件是由像EAC(精确音频复制),foobar2000,BPM Studio,GoldWave或类似的程序生成的。使用CUE Splitter,您可以分割音乐曲目,而无需解码/重新编码任何音频数据!此外,输出文件自动命名使用用户定义的“文件掩码”字符串和他们的标签填充信息提取的“提示表”。

+
+

CUE Splitter is a freeware tool that splits a single big audio file, mostly an album or a compilation, into the relative individual tracks, using the informations contained in the associated “CUE Sheet” file. Sometimes you can find a big compressed music file (for example MP3, APE, FLAC, OGG, WAV, WMA, etc.) equipped with a small .cue text file that contains all the details about internal tracks: title, artist, duration, and so on. Usually these couple of files are generated by programs like EAC (Exact Audio Copy), foobar2000, BPM Studio, GoldWave or similar. With CUE Splitter you can split music tracks without decode/re-encode any audio data! Moreover output files are automatically named using a user-defined “file mask” string and their tags are filled with informations extracted from “CUE Sheet”.

+
+

+ + 官方网站 + + +

DBeaver - 数据库工具

DBeaver Community是一个免费的跨平台数据库工具,面向开发人员、数据库管理员、分析师和所有使用数据的人。它支持所有流行的SQL数据库,如MySQL,MariaDB,PostgreSQL,SQLite,Apache Family等。

+
+

DBeaver Community is a free cross-platform database tool for developers, database administrators, analysts, and everyone working with data. It supports all popular SQL databases like MySQL, MariaDB, PostgreSQL, SQLite, Apache Family, and more.

+
+

+

官方网站

+

Everything - 本地搜索引擎

Everything 是 Windows 上一款搜索引擎,它能够基于文件名快速定文件和文件夹位置。

+
+

Everything is search engine that locates files and folders by filename instantly for Windows.

+
+

+

可以快速搜索本地任何角落,以便找到自己想要的内容,装机必备。Everything也衍生了一些工具,比如uTools中的本地搜索依赖Everything才能更高效的工作,又如EverythingToolbar可以把Everything集成到任务栏中。

+

官方网站

+

FreeControl - 用电脑控制手机

在PC上控制Android设备。

+
+

Control Android devices on PC.

+
+

+ + 官方网站 + GitHub + + +

HiBit Uninstaller - 卸载工具

HiBit Uninstaller是卸载Windows软件的完美解决方案,使您可以使用其简单且用户友好的界面快速,完全地卸载程序。

+
+

HiBit Uninstaller is the perfect solution for uninstalling Windows software, allowing you to uninstall programs quickly and completely using its simple and user friendly interface.

+
+

+

官方网站

+

LocalSend - 局域网文件传输

AirDrop的开源跨平台替代品。

+
+

An open-source cross-platform alternative to AirDrop.

+
+

+ + 官方网站 + GitHub + + +

Motrix - 下载工具

一款全能的下载工具。支持下载 HTTP、FTP、BT、磁力链接等资源。

+
+

A full-featured download manager. Support downloading HTTP, FTP, BitTorrent, Magnet, etc.

+
+

+

这个软件内置了Aria2 - 下载工具,如果懒得折腾aria2,用这个软件就够用了。如果有NAS设备,推荐使用Docker部署aria2服务,让下载这件事与PC解耦。

+ + 官方网站 + GitHub + + +

MusicPlayer2 - 音乐播放器

MusicPlayer2是一款集音乐播放、歌词显示、格式转换等众多功能于一身的音频播放软件。支持歌词显示、歌词卡拉OK样式显示、歌词在线下载、歌词编辑、歌曲标签识别、专辑封面显示、专辑封面在线下载、频谱分析、音效设置、任务栏缩略图按钮、主题颜色、格式转换等功能。播放内核为BASS音频库(V2.4)。播放器支持几乎所有常见的音频格式。

+
+

MusicPlayer2 is an audio player whitch supports music collection playback, lyrics display, format conversion and many other functions. It supports lyrics display, lyrics karaoke style display, lyrics online download, lyrics editing, song tag recognition, album cover display, album cover online download, spectrum analysis, sound effect settings, taskbar thumbnail button, theme color, format conversion and other functions. The playback kernel is the Bass Audio Library (V2.4). The player supports almost all common audio formats.

+
+

+

GitHub

+

MusicTag - 音乐标签编辑器

『音乐标签』是一款可以编辑歌曲的标题、专辑、艺术家等信息的应用程序,支持FLAC, APE, WAV, AIFF, WV, TTA, MP3, MP4, M4A, OGG, MPC, OPUS, WMA, DSF, DFF等音频格式,绿色无广告,无任何功能限制。

+
+

MusicTag is an application that can edit the title, album, artist information of the song, supporting FLAC, APE, WAV, AIFF, WV, TTA, MP3, MP4, M4A, OGG, MPC, OPUS, WMA, DSF, DFF, etc. audio formats, green and without ads, no function restrictions.

+
+

+

官方网站

+

ruffle - Flash播放器

用Rust编写的Flash Player模拟器。

+
+

A Flash Player emulator written in Rust.

+
+

+ + 官方网站 + GitHub + + +

ScreenToGif - 录制GIF

ScreenToGif允许您录制屏幕的选定区域,编辑并保存为gif或视频。

+
+

🎬 ScreenToGif allows you to record a selected area of your screen, edit and save it as a gif or video.

+
+

+ + 官方网站 + GitHub + + +

Snipaste - 截图贴图工具

Snipaste 是一个简单但强大的贴图工具,同时也可以执行截屏、标注等功能。

+
+

Snipaste is a simple but powerful snipping tool, and also allows you to pin the screenshot back onto the screen.

+
+

+

官方网站

+

TrafficMonitor - 硬件资源监控

一款用于Windows平台的网速监控悬浮窗软件,可以显示当前网速、CPU及内存利用率,支持嵌入到任务栏显示,支持更换皮肤、历史流量统计等功能。

+
+

TrafficMonitor is a network monitoring software with floating window feature for Windows. It displays the current internet speed and CPU and RAM usage. There are also other capabilities like an embedded display in the taksbar, changeable display skins, and historical traffic statistics.

+
+

+

GitHub

+

TranslucentTB - 任务栏透明

一个轻量级的实用程序,使Windows任务栏半透明/透明。

+
+

A lightweight utility that makes the Windows taskbar translucent/transparent.

+
+
+ +

GitHub

+

uTools - 效率工具平台

uTools 是一个极简、插件化的现代桌面软件,通过自由选配丰富的插件,打造得心应手的工具集合。

+
+ +

非常好用的一款跨平台工具集合,虽然有会员订阅服务(主要是提供了数据备份、多端同步等功能),但无需订阅即可使用大部分功能,满足大部分用户的需要。

+

官方网站

+

插件推荐

+

易翻翻译、ctool、颜色助手、OCR、文件批量重命名、hosts、二维码、本地搜索、文本代码对比、json编辑器、变量命名方式、正则编辑器、编码小助手、计算稿纸。

+

Visual Studio Code - 编辑器

Visual Studio Code是一个轻量级但功能强大的源代码编辑器,可在桌面上运行,适用于Windows、macOS和Linux。它内置了对JavaScript,TypeScript和Node.js的支持,并拥有丰富的其他语言和运行时扩展生态系统(如C++,C#,Java,Python,PHP,Go,.NET)。

+
+

Visual Studio Code is a lightweight but powerful source code editor which runs on your desktop and is available for Windows, macOS and Linux. It comes with built-in support for JavaScript, TypeScript and Node.js and has a rich ecosystem of extensions for other languages and runtimes (such as C++, C#, Java, Python, PHP, Go, .NET).

+
+

+ + 官方网站 + GitHub + + +

VLC - 媒体播放器

VLC 是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议。

+
+

VLC is a free and open source cross-platform multimedia player and framework that plays most multimedia files as well as DVDs, Audio CDs, VCDs, and various streaming protocols.

+
+

+ + 官方网站 + GitHub + + +

WindTerm - 跨平台终端

一款专业的跨平台SSH/Sftp/Shell/Telnet/Serial终端。

+
+

A professional cross-platform SSH/Sftp/Shell/Telnet/Serial terminal.

+
+

+ + 官方网站 + GitHub + + + + +

服务应用

服务应用是一种在后台运行的应用程序,通常在服务器或云平台上运行。与桌面应用程序和移动应用程序不同,服务应用程序通常不直接与用户交互,而是在后台执行某些任务。服务应用程序可以具有许多不同的功能,例如数据处理、文件传输、消息传递、安全认证等。服务应用程序通常使用 Web 技术(例如 RESTful API、SOAP、JSON 等)作为与其他应用程序和服务进行交互的接口。服务应用程序可以在云平台上扩展和自动扩展,以满足不断变化的需求。同时,服务应用程序也需要更多的开发和维护工作,因为它们需要考虑安全性、可伸缩性、可靠性等问题。

+

推荐部署在云服务器上或有公网IP的NAS设备上,推荐使用常见的Linux发行版,如CentOS、Ubuntu、Debian。

+

推荐使用 docker-compose 方式部署便于维护和迁移,但部署方式不限于此,文中推荐的大部分服务都提供了跨平台、跨架构支持,更多部署方式请参考官方网站或GitHub。

+

acme.sh - 自动化证书

一个实现ACME客户端协议的纯Unix shell脚本。

+
+

A pure Unix shell script implementing ACME client protocol.

+
+

本站的证书由Let’s Encrypt签发,因为托管在Vercel和Netlify中,服务商会定期进行续签,个人无需维护。

+

但个人服务器的证书就需要自己维护了,这时就要用到acme.sh。具体用法参考以下内容以及项目官网文档。

+ + + 官方网站 + GitHub + + +

AdGuard Home - 私人DNS

AdGuard Home 是一款全网广告拦截与反跟踪软件。在您将其安装完毕后,它将保护您所有家用设备,同时您不再需要安装任何客户端软件。随着物联网与连接设备的兴起,掌控您自己的整个网络环境变得越来越重要。

+
+

AdGuard Home is a network-wide software for blocking ads & tracking. After you set it up, it’ll cover ALL your home devices, and you don’t need any client-side software for that. With the rise of Internet-Of-Things and connected devices, it becomes more and more important to be able to control your whole network.

+
+

+ + 官方网站 + GitHub + + +

Alist - 多存储整合

一个支持多存储的文件列表程序,由 Gin 和 Solidjs 驱动。

+
+

A file list program that supports multiple storage, powered by Gin and Solidjs.

+
+

+

非常好用的一款存储整合服务,可以把各种存储整合在一个服务中,提供了友好的操作界面,支持超多网盘和其他存储方式、在线预览、离线下载、推送到Aira下载等。

+ + 官方网站 + GitHub + + +

aria2 - 下载工具

aria 2是一个轻量级的多协议和多源,跨平台下载工具,在命令行操作。它支持HTTP/HTTPS,FTP,SFTP,BitTorrent和Metalink。

+
+

aria2 is a lightweight multi-protocol & multi-source, cross platform download utility operated in command-line. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink.

+
+

如果没有自己的服务器,建议使用Motrix - 下载工具简单易用。

+

GitHub

+

AriaNg - aria2 WebUI

AriaNg,一个让aria2更容易使用的现代化Web前端。

+
+

AriaNg, a modern web frontend making aria2 easier to use.

+
+

+

只是一个静态的网站,可以直接双击index.html运行,也可以托管到免费的平台中使用,如GitHub Pages、Vercel等。或者使用我托管在Netlify中的AriaNg

+

GitHub

+

ddns-go - 动态域名解析

自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。

+

+

一般家用宽带没有固定的公网IP,但目前大部分地区运行商都提供了动态公网IPv6,此时就需要动态域名解析了。实现原理很简单,定时获取本机公网IP,调用域名服务商API将值更新上去,但是这个项目已经很完善,没必要重复造轮子,完全满足需求。

+

GitHub

+

Heimdall - 导航页

应用程序仪表板和启动器。

+
+

An Application dashboard and launcher.

+
+

+

简约大气的导航页,且可以对一些支持的应用提供扩展功能,如监控Portainer容器状态、aria2下载任务状态等。

+

GitHub

+

Home Assistant - 家庭自动化平台

将本地控制和隐私放在首位的开源家庭自动化。由世界各地的社区成员和DIY爱好者组成的团体提供强力支持。

+
+

Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts.

+
+

+

目前智能家居品牌很多,大部分品牌都在搞自家生态,想使用一个APP控制家里所有设备,就需要用到Home Assistant将不同品牌智能设备接入统一管理。

+ + 官方网站 + GitHub + + +

Qwerty Learner - 记单词

为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件。

+
+

Words learning and English muscle memory training software designed for keyboard workers.

+
+

+ + 官方网站 + GitHub + + +

RustDesk - 远程桌面

RustDesk 是一个功能齐全的开源远程控制替代方案,可通过最少的配置实现自托管和安全性。

+
+

RustDesk is a full-featured open source remote control alternative for self-hosting and security with minimal configuration.

+
+

+

建议使用拥有公网IP的设备自建服务器(无公网IP可以通过Tailscale - 异地组网后使用),我的NAS只有公网IPv6,上行带宽30Mbps,使用体验比ToDesk免费版好很多,已经逐渐放弃使用ToDesk。

+ + 官方网站 + GitHub + + +

Tailscale - 异地组网

Tailscale是一种VPN服务,可以让您在世界任何地方安全、轻松地访问您拥有的设备和应用程序。它使用开源WireGuard协议实现加密的点对点连接,这意味着只有您的专用网络上的设备才能相互通信。

+
+

Tailscale is a VPN service that makes the devices and applications you own accessible anywhere in the world, securely and effortlessly. It enables encrypted point-to-point connections using the open source WireGuard protocol, which means only devices on your private network can communicate with each other.

+
+

+

当用手机或电脑处于无IPv6环境时,可以通过Tailscale来访问家中的NAS服务器。需要注意的是,组网的双方其中有一方的NAT是Symmetric(对称型),就会打洞失败,流量会经转公共DERP服务器,速度很慢。同类型的产品还有Zerotier,个人感觉没有Tailscale好用。

+ + 官方网站 + GitHub + + +

Uptime Kuma - 服务状态监控

一个精美的自托管监控工具。

+
+

A fancy self-hosted monitoring tool.

+
+

+

可以用于监控并记录一些可访问服务的运行状态,如docker容器、网站等,也可以用作导航页(Heimdall平替)。除了管理页面,还可以创建允许匿名访问的状态页面(示例 - IPv6 Only)。

+

GitHub

+

开源字体

开源字体是指那些可以在版权允许的情况下免费或低成本向公众提供使用和修改的字体。这些字体的设计文件(源代码)通常是公开的,任何人在遵循相关许可协议的前提下都可以下载、使用,并在需要时进行修改和再分发。

+

阿里巴巴普惠体

阿里巴巴普惠体是一套全球永久免费正版商用的字体家族。

+

+

阿里巴巴普惠体3.0为一套符合新国家标准GB18030-2022的简体中文字符集,包含GB18030-2022强制规范三个实现级别:实现级别1+实现级别2标准规格的7字重、实现级别3标准规格的Regular 单一字重。7字重共194,460个全形汉字。包含拉丁字母、希腊字母、西里尔字母、标点符号。

+

官方网站

+

Cascadia Code

这是一种有趣的新型等宽字体,包含编程连字,旨在增强 Windows 终端的现代外观和感觉。

+
+

This is a fun, new monospaced font that includes programming ligatures and is designed to enhance the modern look and feel of the Windows Terminal.

+
+

+

+

GitHub

+

Monaspace

一个创新的代码字体超家族。

+
+

An innovative superfamily of fonts for code

+
+

+ + 官方网站 + GitHub + + +

霞鹜文楷

一款开源中文字体,基于 FONTWORKS 出品字体 Klee One 衍生。

+
+

An open-source Chinese font derived from Fontworks’ Klee One.

+
+

+

+

GitHub

+ + +
+ +
+
+ + + + + + +
+
+
🌈Awesome Software / Service
+
https://awaw.cc/post/awesome/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2023年7月7日
+
+ + +
+
更新于
+
2024年3月26日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/bat-date/index.html b/post/bat-date/index.html new file mode 100644 index 0000000..ac83a0c --- /dev/null +++ b/post/bat-date/index.html @@ -0,0 +1,851 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 批处理获取时间小于10点时补零 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

批处理获取时间小于10点时补零

+ + +
+ +

使用 %time:~0,2% 获取时间时,当前时间若小于10点,获取到的时间不会自动补零,但是分钟和秒钟会补零,所以小时部分需要自己处理一下。

+ +

Code

1
2
3
4
5
6
7
@echo off
set hour=%time:~0,2%
if %hour% LSS 10 (
set "hour=0%time:~1,1%")
set date=%date:~0,4%-%date:~5,2%-%date:~8,2%T%hour%:%time:~3,2%:%time:~6,5%
echo %date%
pause
+

Output

1
2021-04-08T09:45:01.11
+ + +
+ +
+
+ + + + + + +
+
+
批处理获取时间小于10点时补零
+
https://awaw.cc/post/bat-date/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2021年4月8日
+
+ + +
+
更新于
+
2023年7月13日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/car-code-generator/index.html b/post/car-code-generator/index.html new file mode 100644 index 0000000..0d52dfb --- /dev/null +++ b/post/car-code-generator/index.html @@ -0,0 +1,877 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 挪车码生成器 - 开源 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

挪车码生成器 - 开源

+ + +
+ +

临时停车时,直接把手机号放在车上,容易被广告推销人员盯上,用二维码的方式间接给别人提供联系方式,可以有效降低此类情况发生。

+ +

优势

    +
  • 使用挪车码展示联系方式,可以避免直接展示出手机号码,广告推销人员可能懒得扫码获取你的手机号
  • +
  • 可以使用微信、浏览器、系统相机扫一扫等进行扫码,无需手动输入长达11位的无序数字组成的手机号,直接一键拨号,减少焦虑感
  • +
+

劣势

    +
  • 由于本服务是完全免费的,故无法提供虚拟手机号进行拨号
  • +
+

使用方法

    +
  1. 输入手机号码
  2. +
  3. 保存到挪车码
  4. +
  5. 用作图工具添加“扫码挪车”等字样后用A4纸打印出来
  6. +
  7. 临时停车的时候放在车窗下显眼位置
  8. +
+

截图

主界面

+
微信扫一扫
点击拨打号码按钮
跳转系统拨号界面
+

下载地址

https://www.lanzoux.com/iej9Tqkzj7c
提取码:pdone

+

代码仓库

https://github.com/pdone/car-code-generator

+ + +
+ +
+
+ + + + + + +
+
+
挪车码生成器 - 开源
+
https://awaw.cc/post/car-code-generator/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2021年6月18日
+
+ + +
+
更新于
+
2023年7月14日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/dapper-helper/index.html b/post/dapper-helper/index.html new file mode 100644 index 0000000..29553d1 --- /dev/null +++ b/post/dapper-helper/index.html @@ -0,0 +1,907 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DapperHelper - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

DapperHelper

+ + +
+ +

Dapper is a simple object mapper for .NET and owns the title of King of Micro ORM in terms of speed and is virtually as fast as using a raw ADO.NET data reader. An ORM is an Object Relational Mapper, which is responsible for mapping between database and programming language.

+ +

Dapper extends the IDbConnection by providing useful extension methods to query your database.

+

How Dapper Works?

It is a three-step process.

+
    +
  • Create an IDbConnection object.
  • +
  • Write a query to perform CRUD operations.
  • +
  • Pass query as a parameter in the Execute method.
  • +
+

Installation

Dapper is installed through NuGet: https://www.nuget.org/packages/Dapper

+
1
PM> Install-Package Dapper
+ +

Requirement

Dapper works with any database provider since there is no DB specific implementation.

+

Methods

Dapper will extend your IDbConnection interface with multiple methods:

+ +
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string sqlOrderDetails = "SELECT TOP 5 * FROM OrderDetails;";
string sqlOrderDetail = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;";
string sqlCustomerInsert = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";

using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{
var orderDetails = connection.Query<OrderDetail>(sqlOrderDetails).ToList();
var orderDetail = connection.QueryFirstOrDefault<OrderDetail>(sqlOrderDetail, new {OrderDetailID = 1});
var affectedRows = connection.Execute(sqlCustomerInsert, new {CustomerName = "Mark"});

Console.WriteLine(orderDetails.Count);
Console.WriteLine(affectedRows);

FiddleHelper.WriteTable(orderDetails);
FiddleHelper.WriteTable(new List<OrderDetail>() { orderDetail });
}
+ +

Try it: .NET Core | .NET Framework

+

Parameter

Execute and queries method can use parameters from multiple different ways:

+ +
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Anonymous
var affectedRows = connection.Execute(sql,
new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
commandType: CommandType.StoredProcedure);

// Dynamic
DynamicParameters parameter = new DynamicParameters();

parameter.Add("@Kind", InvoiceKind.WebInvoice, DbType.Int32, ParameterDirection.Input);
parameter.Add("@Code", "Many_Insert_0", DbType.String, ParameterDirection.Input);
parameter.Add("@RowCount", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);

connection.Execute(sql,
parameter,
commandType: CommandType.StoredProcedure);

int rowCount = parameter.Get<int>("@RowCount");

// List
connection.Query<Invoice>(sql, new {Kind = new[] {InvoiceKind.StoreInvoice, InvoiceKind.WebInvoice}}).ToList();
// String
connection.Query<Invoice>(sql, new {Code = new DbString {Value = "Invoice_1", IsFixedLength = false, Length = 9, IsAnsi = true}}).ToList();
+ +

Result

The result returned by queries method can be mapped to multiple types:

+ +
1
2
3
4
5
6
7
8
9
10
11
12
13
14
string sqlOrderDetails = "SELECT TOP 10 * FROM OrderDetails;";

using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{
var anonymousList = connection.Query(sqlOrderDetails).ToList();
var orderDetails = connection.Query<OrderDetail>(sqlOrderDetails).ToList();

Console.WriteLine(anonymousList.Count);
Console.WriteLine(orderDetails.Count);

FiddleHelper.WriteTable(orderDetails);

FiddleHelper.WriteTable(connection.Query(sqlOrderDetails).FirstOrDefault());
}
+

Try it: .NET Core | .NET Framework

+

Utilities

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Async
connection.QueryAsync<Invoice>(sql)

// Buffered
connection.Query<Invoice>(sql, buffered: false)

// Transaction
using (var transaction = connection.BeginTransaction())
{
var affectedRows = connection.Execute(sql,
new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
commandType: CommandType.StoredProcedure,
transaction: transaction);

transaction.Commit();
}

// Stored Procedure
var affectedRows = connection.Execute(sql,
new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
commandType: CommandType.StoredProcedure);
+ +

DapperHelper.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Data.SQLite;
using System.Linq;
using System.Threading.Tasks;
using Dapper;
using MySql.Data.MySqlClient;

namespace ORMSuit.DAO {
public class DapperHelper<T> {
enum DBType {
MSSQL,
MySQL,
SQLite
}
/// <summary>
/// 数据库连接字符串
/// </summary>
private static string connectionString = "";

/// <summary>
/// MSSQL=0, MySQL=1, SQLite=2
/// </summary>
/// <param name="dbType"></param>
public static int dbType = 0;

/// <summary>
/// 获取数据库连接
/// </summary>
/// <returns></returns>
public static IDbConnection GetConnection () {
switch ((DBType) dbType) {
case DBType.MSSQL:
return new SqlConnection (connectionString);
case DBType.MySQL:
connectionString = ConfigurationManager.ConnectionStrings["mysqlconn"].ConnectionString;
return new MySqlConnection (connectionString);
case DBType.SQLite:
connectionString = ConfigurationManager.ConnectionStrings["sqliteconn"].ConnectionString;
return new SQLiteConnection (connectionString);
default:
return new SqlConnection (connectionString);
}
}

/// <summary>
/// 查询列表
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static List<T> Query (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.Query<T> (sql, param).ToList ();
}
}

/// <summary>
/// 查询第一个数据
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static T QueryFirst (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
List<T> tempList = con.Query<T> (sql, param).ToList ();
if (tempList != null && tempList.Count > 0) {
return tempList[0];
} else {
return default;
}
//return con.QueryFirst<T>(sql, param);
}
}

/// <summary>
/// 查询第一个数据没有返回默认值
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static T QueryFirstOrDefault (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.QueryFirstOrDefault<T> (sql, param);
}
}

/// <summary>
/// 查询单条数据
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static T QuerySingle (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.QuerySingle<T> (sql, param);
}
}

/// <summary>
/// 数据是否存在
/// </summary>
/// <param name="sql">select count(*) from table where id=@id</param>
/// <param name="param">new { id = 1 }</param>
/// <returns></returns>
public static bool Exists (string sql, object param = null) {
object obj = ExecuteScalar (sql, param);
int count = 0;
if (obj == null) {
count = 0;
} else {
count = Convert.ToInt32 (obj);
}
if (count > 0) {
return true;
} else {
return false;
}
}

/// <summary>
/// 数据行数
/// </summary>
/// <param name="sql">select count(*) from table where id=@id</param>
/// <param name="param">new { id = 1 }</param>
/// <returns></returns>
public static int RecordCount (string sql, object param = null) {
object obj = ExecuteScalar (sql, param);
int count = 0;
if (obj == null) {
count = 0;
} else {
count = Convert.ToInt32 (obj);
}
return count;
}

/// <summary>
/// 查询单条数据没有返回默认值
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static T QuerySingleOrDefault (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.QuerySingleOrDefault<T> (sql, param);
}
}

/// <summary>
/// 增删改
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static int Execute (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.Execute (sql, param);
}
}

/// <summary>
/// Reader获取数据
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static IDataReader ExecuteReader (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.ExecuteReader (sql, param);
}
}

#region
/// <summary>
/// 获取DataTabel
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static DataTable ExecuteDataTabel (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return DataReaderToDataTable (con.ExecuteReader (sql, param));
}
}

/// <summary>
/// 获取DataSet
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static DataSet ExecuteDataSet (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return DataReaderToDataSet (con.ExecuteReader (sql, param));
}
}

/// <summary>
/// DataReader转DataTable
/// </summary>
/// <param name="dataReader"></param>
/// <returns></returns>
private static DataTable DataReaderToDataTable (IDataReader dataReader) {
DataTable datatable = new DataTable ();
for (int i = 0; i < dataReader.FieldCount; i++) {
DataColumn myDataColumn = new DataColumn ();
myDataColumn.DataType = dataReader.GetFieldType (i);
myDataColumn.ColumnName = dataReader.GetName (i);
datatable.Columns.Add (myDataColumn);
}
while (dataReader.Read ()) {
DataRow myDataRow = datatable.NewRow ();
for (int i = 0; i < dataReader.FieldCount; i++) {
myDataRow[i] = dataReader[i].ToString ();
}
datatable.Rows.Add (myDataRow);
myDataRow = null;
}
dataReader.Close ();
return datatable;
}

/// <summary>
/// DataReader转DataSet
/// </summary>
/// <param name="reader"></param>
/// <returns></returns>
public static DataSet DataReaderToDataSet (IDataReader dataReader) {
DataSet dataSet = new DataSet ();
do {
DataTable schemaTable = dataReader.GetSchemaTable ();
DataTable dataTable = new DataTable ();
if (schemaTable != null) {
for (int i = 0; i < schemaTable.Rows.Count; i++) {
DataRow dataRow = schemaTable.Rows[i];
string columnName = (string) dataRow["ColumnName"];
DataColumn column = new DataColumn (columnName, (Type) dataRow["DataType"]);
dataTable.Columns.Add (column);
}
dataSet.Tables.Add (dataTable);
while (dataReader.Read ()) {
DataRow dataRow = dataTable.NewRow ();
for (int i = 0; i < dataReader.FieldCount; i++) {
dataRow[i] = dataReader.GetValue (i);
}
dataTable.Rows.Add (dataRow);
}
} else {
DataColumn column = new DataColumn ("RowsAffected");
dataTable.Columns.Add (column);
dataSet.Tables.Add (dataTable);
DataRow dataRow = dataTable.NewRow ();
dataRow[0] = dataReader.RecordsAffected;
dataTable.Rows.Add (dataRow);
}
}
while (dataReader.NextResult ());
return dataSet;
}

#endregion

/// <summary>
/// Scalar获取数据
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static object ExecuteScalar (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.ExecuteScalar (sql, param);
}
}

/// <summary>
/// Scalar获取数据
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static T ExecuteScalarForT (string sql, object param = null) {
using (IDbConnection con = GetConnection ()) {
return con.ExecuteScalar<T> (sql, param);
}
}

/// <summary>
/// 带参数的存储过程
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static List<T> ExecutePro (string proc, object param = null) {
using (IDbConnection con = GetConnection ()) {
List<T> list = con.Query<T> (proc,
param,
null,
true,
null,
CommandType.StoredProcedure).ToList ();
return list;
}
}

/// <summary>
/// 多条SQL批量执行
/// </summary>
/// <param name="Key">多条SQL</param>
/// <param name="Value">SQL对应实体</param>
/// <returns></returns>
public static int ExecuteTransaction (Dictionary<string, object> dic) {
using (IDbConnection con = GetConnection ()) {
using (var transaction = con.BeginTransaction ()) {
try {
int result = 0;
foreach (var sql in dic) {
result += con.Execute (sql.Key, sql.Value, transaction);
}

transaction.Commit ();
return result;
} catch (Exception ex) {
transaction.Rollback ();
return 0;
}
}
}
}

/// <summary>
/// 批量增删改 带事务
/// </summary>
/// <param name="sql">单SQL</param>
/// <param name="object">实体列表</param>
/// <returns></returns>
public static int ExecuteTransaction (string sql, object obj) {
using (IDbConnection con = GetConnection ()) {
con.Open ();
using (IDbTransaction transaction = con.BeginTransaction ()) {
try {
int result = 0;
result = con.Execute (sql, obj, transaction);
transaction.Commit ();
con.Close ();
return result;
} catch (Exception ex) {
transaction.Rollback ();
con.Close ();
return 0;
}
}
}
}

/// <summary>
/// 异步批量增删改 带事务
/// </summary>
/// <param name="sql">单SQL</param>
/// <param name="object">实体列表</param>
/// <returns></returns>
public static Task<int> ExecuteTransactionAsync (string sql, object obj) {
using (IDbConnection con = GetConnection ()) {
con.Open ();
using (IDbTransaction transaction = con.BeginTransaction ()) {
try {
Task<int> result;
result = con.ExecuteAsync (sql, obj, transaction);
transaction.Commit ();
con.Close ();
return result;
} catch (Exception ex) {
transaction.Rollback ();
con.Close ();
return null;
}
}
}
}
}
}
+ + +
+ +
+
+ + + + + + +
+
+
DapperHelper
+
https://awaw.cc/post/dapper-helper/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2020年3月17日
+
+ + +
+
更新于
+
2023年7月4日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/deepin-20/index.html b/post/deepin-20/index.html new file mode 100644 index 0000000..4f6f748 --- /dev/null +++ b/post/deepin-20/index.html @@ -0,0 +1,876 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 深度操作系统 20——崭新视界,创无止境 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

深度操作系统 20——崭新视界,创无止境

+ + +
+ +

深度操作系统是一个致力于为全球用户提供美观易用、安全可靠的Linux发行版。

+ + +

深度操作系统 20正式版(1002)采取统一的设计风格,从桌面环境和应用进行重新设计,带来焕然一新的视觉感受。底层仓库升级到Debian 10.5,系统安装采用双内核机制(Kernel 5.4、Kernel 5.7),全面提升系统稳定性和兼容性。全新设计的启动器菜单、指纹识别、系统安全增强等,系统部分预装应用升级到最新版本,只为给你更好体验。

+

统一风格的桌面环境

别出心裁的图标设计,焕然一新的图形界面,自然、平滑的动画过渡效果,更有独树一帜的圆角窗口设计,精美绝伦的多任务视图,处处精心,只为给你细腻自然的品质体验。

+

支持黑白主题、透明度调节、色温调节自定义、电源电池设置等贴心功能。

+

个性贴心的通知管理

增强通知中心功能,支持设置通知时提示声音、锁屏时显示消息、仅在通知中心显示、显示消息预览,必要应用强提醒、特定应用弱提醒或不提醒,个性化你的消息通知,在不错过任何重要提醒的同时,避免不必要的打扰。

+

+

系统支持双内核安装

系统安装界面提供双内核选项,Kernel 5.4(LTS)和Kernel 5.7(Stable)以及Safe Graphics模式,保证系统安装更多选择,提升系统整体的稳定性、兼容性,最新的内核支持更多的硬件设备。

+

+

更易用的新版安装器

化繁为简的设计和交互,保证更一致的操作习惯。新版的安装器界面,只需按照操作向导提示安装即可,在硬盘分区操作中,提供手动和全盘安装两种模式,并且支持全盘加密功能。

+

注:对于N卡用户,安装器自动检测并提供安装闭源驱动选项。

+

管理方便的应用商店

应用商店的不同类别应用,覆盖了生活、工作的主要使用场景,本次新增一键更新、应用筛选等功能,带来更便捷的应用管理体验,同时也兼容部分Wine应用,并达到原生应用的体验。

+

+

好用安全的指纹识别

全新的指纹功能框架,提供了更细腻的引导交互和更准确的场景提示。可使用指纹进行解锁登录、验证身份和管理员权限。现已支持多款国产指纹硬件。

+

+

下载

+

https://www.deepin.org/zh/download/

+
+ + +
+ +
+
+ + + + + + +
+
+
深度操作系统 20——崭新视界,创无止境
+
https://awaw.cc/post/deepin-20/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2020年9月16日
+
+ + +
+
更新于
+
2022年6月10日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/free-control/index.html b/post/free-control/index.html new file mode 100644 index 0000000..33884a4 --- /dev/null +++ b/post/free-control/index.html @@ -0,0 +1,1016 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Free Control 用电脑控制手机 - 开源 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

Free Control 用电脑控制手机 - 开源

+ + +
+ +

FreeControl

+ + + + + + + + + + + + + + +

+ +

介绍

[ English | 中文 ]

+

基于开源项目scrcpy,提供简洁的交互界面。

+
    +
  • 编码语言 C#
  • +
  • 开发工具 Visual Studio 2022
  • +
  • 运行环境 .NET Framework 4.7.2
  • +
+

界面

启动界面

+

设置界面

+

功能演示

+

下载

GitHub Release

https://github.com/pdone/FreeControl/releases/latest/download/FreeControl.exe

+

My Proxy

https://cdn.awaw.cc/gh/pdone/FreeControl/releases/latest/download/FreeControl.exe

+

代码仓库

+ + +

+ +

更新记录

+ + +

+ +

常见问题

输入法问题

v1.7.0 及以后的版本中,默认启用scrcpy的 UHID keyboard 特性,以优化中文输入体验。

+

如果在此过程中遇到了什么问题,可尝试打开配置文件 %AppData%\FreeControl\config.json,将 CustomArgs 的值由 --keyboard=uhid 改为 --keyboard=sdk

+

更多信息可参考 scrcpy-doc-keyboard

+
+已过时 + +

个人测试发现,目前支持跨屏进行拼音输入的 手机输入法APP 如下:

+
    +
  • 搜狗输入法
  • +
  • QQ输入法
  • +
  • 谷歌拼音输入法
  • +
  • Gboard
  • +
  • 微信输入法
  • +
+

此功能需要输入法APP适配,有更好用的输入法欢迎留言推荐。

+
+

自动切换输入法功能默认禁用。如需启用,先关闭程序,然后打开配置文件 %AppData%\FreeControl\config.json,将 EnableSwitchIME 字段值改为 true,保存后启动程序即可。

+
+
+ +

设备连接问题

USB 连接

通过 USB 连接来正常使用 adb 需要保证几点:

+
    +
  1. 硬件状态正常。

    +

    包括 Android 设备处于正常开机状态,USB 连接线和各种接口完好。

    +
  2. +
  3. Android 设备的开发者选项和 USB 调试模式已开启。

    +

    可以到「设置」-「开发者选项」-「Android 调试」查看。

    +

    如果在设置里找不到开发者选项,那需要通过一个彩蛋来让它显示出来:在「设置」-「关于手机」连续点击「版本号」7 次。

    +
  4. +
  5. 设备驱动状态正常。

    +

    这一点貌似在 Linux 和 Mac OS X 下不用操心,在 Windows 下有可能遇到需要安装驱动的情况,确认这一点可以右键「计算机」-「属性」,到「设备管理器」里查看相关设备上是否有黄色感叹号或问号,如果没有就说明驱动状态已经好了。否则可以下载一个手机助手类程序来安装驱动先。

    +
  6. +
  7. 通过 USB 线连接好电脑和设备后确认状态。

    +
    1
    adb devices
    + +

    如果能看到

    +
    1
    xxxxxx device
    + +

    说明连接成功。

    +
  8. +
+

无线连接(Android11 及以上)

Android 11 及更高版本支持使用 Android 调试桥 (adb) 从工作站以无线方式部署和调试应用。例如,您可以将可调试应用部署到多台远程设备,而无需通过 USB 实际连接设备。这样就可以避免常见的 USB 连接问题,例如驱动程序安装方面的问题。

+

官方文档

+

操作步骤:

+
    +
  1. 更新到最新版本的 SDK 平台工具(至少30.0.0)。

    +
  2. +
  3. 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。

    +
  4. +
  5. 在开发者选项中启用无线调试

    +
  6. +
  7. 在询问要允许在此网络上进行无线调试吗?的对话框中,点击允许。

    +
  8. +
  9. 选择使用配对码配对设备,使用弹窗中的 IP 地址和端口号。

    +
    1
    adb pair ipaddr:port
    +
  10. +
  11. 提示 Enter pairing code: 时输入弹窗中的配对码,成功后会显示 Successfully paired to ...

    +
  12. +
  13. 使用无线调试下的 IP 地址和端口

    +
    1
    adb connect ipaddr:port
    +
  14. +
  15. 确认连接状态。

    +
    1
    adb devices
    + +

    如果能看到

    +
    1
    ipaddr:port device
    + +

    说明连接成功。

    +
  16. +
+

无线连接(需要借助 USB 线)

除了可以通过 USB 连接设备与电脑来使用 adb,也可以通过无线连接——虽然连接过程中也有需要使用 USB 的步骤,但是连接成功之后你的设备就可以在一定范围内摆脱 USB 连接线的限制啦!

+

操作步骤:

+
    +
  1. 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。

    +
  2. +
  3. 将设备与电脑通过 USB 线连接。

    +

    应确保连接成功(可运行 adb devices 看是否能列出该设备)。

    +
  4. +
  5. 让设备在 5555 端口监听 TCP/IP 连接:

    +
    1
    adb tcpip 5555
    +
  6. +
  7. 断开 USB 连接。

    +
  8. +
  9. 找到设备的 IP 地址。

    +

    一般能在「设置」-「关于手机」-「状态信息」-「IP地址」找到。

    +
  10. +
  11. 通过 IP 地址连接设备。

    +
    1
    adb connect <device-ip-address>
    + +

    这里的 <device-ip-address> 就是上一步中找到的设备 IP 地址。

    +
  12. +
  13. 确认连接状态。

    +
    1
    adb devices
    + +

    如果能看到

    +
    1
    <device-ip-address>:5555 device
    + +

    说明连接成功。

    +
  14. +
+

如果连接不了,请确认 Android 设备与电脑是连接到了同一个 WiFi,然后再次执行 adb connect <device-ip-address> 那一步;

+

如果还是不行的话,通过 adb kill-server 重新启动 adb 然后从头再来一次试试。

+

无线连接(无需借助 USB 线)

需要 root 权限,此处不做详细说明,有需要的朋友可参考此处

+

保持唤醒功能

仅在手机充电时有效。

+

音频转发功能

使用 Android 11 或更高版本的设备支持音频转发,并且默认情况下启用:

+
    +
  • 对于 Android 12 或更高版本,它开箱即用。
  • +
  • 对于 Android 11 ,您需要确保在启动scrcpy时设备屏幕已解锁。假的弹出窗口将短暂出现,使系统认为shell应用程序处于前台。没有这个,音频捕获将失败。
  • +
  • 对于 Android 10 或更早版本,无法捕获音频并自动禁用。
  • +
+

捐赠

如果您觉得这个项目对您有帮助,欢迎请作者喝杯咖啡。☕

+

+

爱发电❤ https://afdian.net/a/pdone

+

Stargazers Over Time

Stargazers over time

+ + +
+ +
+
+ + + + + + +
+
+
Free Control 用电脑控制手机 - 开源
+
https://awaw.cc/post/free-control/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2020年9月15日
+
+ + +
+
更新于
+
2024年3月21日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/git-command/index.html b/post/git-command/index.html new file mode 100644 index 0000000..96b8d08 --- /dev/null +++ b/post/git-command/index.html @@ -0,0 +1,1013 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 最常用的 35 个 Git 命令 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

最常用的 35 个 Git 命令

+ + +
+ +

不管你是新手还是经验丰富的开发人员,都需要使用源代码管理。因此很大几率上你会选择使用Git来管理源代码。

+

要发挥Git的全部潜力,我们需要了解Git命令。在本文中,你将学到最有用的一些Git命令,掌握这些Git命令将帮助你提升编码水平。

+ + +

本Git命令指南共分为三个部分:基础命令,进阶命令和高阶Git命令。

+

基础Git命令

在这个部分中,我们要学习的是一些非常基础的Git命令。这些基础的Git命令是学习其他进阶命令的基础。

+

下面请看这9个基础的Git命令。

+

1. git config

git config命令非常有用。尤其是在你第一次使用Git或刚安装新的Git时。此命令可设置身份——Name和Email地址。并且每次提交时会使用此信息。

+
1
2
3
$ git config --global user.name "Your name"  

$ git config --global user.email "Your email"
+ +

2. git version

顾名思义,它会检查你使用的是哪个版本的Git。目前,截至编写本指南时,Git for Windows的最新版本是2.31.1。它发布于2021年3月27日。

+
1
$ git version
+ +

3. git init

这可能是你在Git中启动新项目所使用的第一个命令。此命令将创建一个空白的新存储库,然后你可以将源代码存储在此存储库中。

+
1
$ git init
+ +

或者,你也可以在git init命令中使用存储库名称。

+
1
$ git init <your repository name>
+ +

4. git clone

git clone命令将使用现有的存储库进行复制。git initgit clone之间有一个主要区别。

+

在你需要在现有的存储库上进行复制时,使用git clonegit clone命令首先在内部使用git init命令,然后检出所有内容。

+
1
git clone <your project URL>
+ +

5. git add

git add命令会把所有新的代码文件或修改后的文件添加到存储库中。此命令提供了添加文件和文件夹的不同选项。

+

将单个文件添加到暂存区

+
1
$ git add your_file_name
+ +

此选项会将所有修改过的文件和新文件添加到暂存区

+
1
$ git add *
+ +

6. git commit

这个Git命令是必不可少的。如果不能合理利用此命令,则可能会降低项目质量。

+

简而言之,git commit会将更改添加到本地存储库。

+
1
$ git commit -m "your useful commit message"
+ +

7. git status

使用此Git命令可以方便地查看有多少文件需要得到关注。你可以随时运行此命令。

+

此命令可以用来在git addgit commit之间查看状态。

+
1
$ git status
+ +

8. git branch

大多数时候,你的Git存储库中总会有多个分支。我们可以使用git branch命令有效地管理分支。Git分支有许多不同的选项和开关。

+

为简单起见,在这里我将重点介绍如何创建和删除Git分支。

+

列出所有分支

+
1
$ git branch
+

创建新的分支

+
1
$ git branch <branch_name>
+

删除分支

+
1
$ git branch -d <branch_name>
+ +

9. git checkout

此Git命令用于在分支之间进行切换。这是功能强大的git命令之一,堪称万能的瑞士军刀。

+

以下是切换到另一个分支的语法。

+
1
$ git checkout <branch_name>
+

此外,你也可以创建和检出到分支。

+
1
$ git checkout -b <your_new_branch_name>
+ +

进阶Git命令

掌握了基础的Git命令之后,我们就该学习进阶Git命令了。

+

如果你需要与团队合作,与他人共享代码,那么这些Git命令会非常有用。另外,还有一些类似git log命令,这些命令可帮助查看以前的提交历史。

+

10. git remote

git remote命令就像边界,如果你需要与外界连接,则必须使用git remote命令。此命令会将你的本地存储库连接到远程。

+
1
$ git remote add <shortname> <url>
+ +

举例

+
1
$ git remote add origin https://dev.azure.com/aCompiler/_git/DemoProject
+ +

11. git push

(借助git remote命令)与远程存储库连接之后,就需要将更改推送到存储库。

+
1
$ git push -u <short_name> <your_branch_name>
+ +

举例

+
1
$ git push -u origin feature_branch
+ +

12. git push –set-upstream

在使用git push之前,我们应该先设置好originupstream。下面是设置upstream的命令。

+
1
$ git push --set-upstream <short_name> <branch_name>
+ +

举例

+
1
$ git push --set-upstream origin feature_branch
+ +

13. git fetch

当需要下载其他团队成员的更改时,就得使用git fetch

+

此命令会下载有关提交、引用等的所有信息,因此你可以在将这些更改应用于本地存储库之前对其进行检查。

+
1
$ git fetch
+ +

14. git pull

git pull命令下载内容(而不是元数据),并立即用最新的内容更新本地存储库。

+
1
$ git pull <remote_url>
+ +

15. git stash

此git命令会临时存储已修改的文件。你可以使用以下Git命令处理stash工作。

+
1
$ git stash
+ +

可以使用以下命令查看所有stash

+
1
$ git stash list
+ +

如果你需要应用stash到分支,那就使用apply

+
1
$ git stash apply
+ +

16. git log

git log的帮助下,你可以看到所有之前的提交,并且最近的提交出现在最前面。

+
1
$ git log
+ +

默认情况下,它将显示当前已检出分支的所有提交,但是你可以强制通过所有选项来查看所有分支的所有提交。

+
1
$ git log --all
+ +

17. git shortlog

git shortlog命令会显示来自git log命令的摘要。如果你只对简短的摘要感兴趣,那么此命令就非常有用了。

+

这个命令有助于查看谁处理了什么,因为它对作者及其提交进行了分组。

+
1
$ git shortlog
+ +

18. git show

git log相比,此命令将显示有关特定提交的详细信息。

+
1
$ git show <your_commit_hash>
+ +

19. git rm

有时你需要从代码库中删除文件,在这种情况下,可以使用git rm命令。

+

它可以从索引和工作目录中删除跟踪的文件。

+
1
$ git rm <your_file_name>
+ +

20. git merge

git merge可帮助将来自两个分支的更改集成到单个分支中。

+
1
$ git merge <branch_name>
+

此命令会将<branch_name>合并到当前你选择的分支中。

+

高阶Git命令

现在是时候再上一个层次了。在这个部分中,我们要学习的是高阶的Git命令。这些命令就需要花时间去练习了。

+

但是一旦掌握了这些命令的基础知识,使用起来不要太轻松哦。

+

21. git rebase

git rebase类似于git merge命令。它把两个分支集成到一个分支中,但有一个不一样的地方:git rebase命令将会重写提交记录。

+

当你有多个私有分支合并到单个分支时,应使用git rebase命令。它将使得提交历史成为线性的。

+
1
$ git rebase <base>
+ +

22. git bisect

git bisect命令可帮助查找糟糕的提交。

+

启动git bisect

+
1
$ git bisect start
+

让git bisect知道什么是好的提交

+
1
$ git bisect good a123
+

让git bisect知道什么是糟糕的提交

+
1
$ git bisect bad z123
+

通过git bisect,只要几分钟你就可以缩小问题代码的范围。

+

23. git cherry-pick

git cherry-pick是一个蛮有用的命令,允许你从任意分支中选择任意提交并将其应用于其他任意分支。

+
1
$ git cherry-pick <commit-hash>
+ +

git cherry-pick不会修改存储库的历史记录;相反,它会添加到历史记录。

+

24. git archive

git archive命令会把多个文件合并为单个文件。就好像zip实用程序一样,所以你可以提取存档文件以获取单个文件。

+
1
$ git archive --format zip HEAD > archive-HEAD.zip
+

它将创建当前修订的zip存档。

+

25. git pull –rebase

在大多数情况下,当你使用git pull时,你需要重新设置基准(并且不进行合并)。

+

此时,你就可以使用此选项。

+
1
$ git pull --rebase
+

这将帮助保持干净的历史记录。另外,还可以避免多次合并。

+

26. git blame

如果你需要逐行检查任意文件的内容,则需要使用git blame命令。它可以帮助确定是谁对文件进行了更改。

+
1
$ git blame <your_file_name>
+ +

27. git tag

在Git中,标签很有用,你可以使用它们来管理发布。你可以将git tag视为不会改变的分支。尤其是要公开发布的时候,则更为重要了。

+
1
$ git tag -a v1.0.0
+ +

28. git verify-commit

git verify-commit命令将检查gpg签名。GPG,GNU Privacy Guard,是sign文件中使用的工具,包含签名。

+
1
$ git verify-commit <commit>
+ +

29. git verify-tag

可以以同样的方式确认标签。

+
1
$ git verify-tag <tag>
+ +

30. git diff

大多数情况下,在提交或推送之前,你需要比较两个git文件或分支。用这个命令就方便多了。

+

将工作目录与本地存储库进行比较

+
1
$ git diff HEAD <filename>
+ +

比较两个分支

+
1
$ git diff <source branch> <target branch>
+ +

31. git citool

git citool是Git提交的图形化替代。

+
1
$ git citool
+ +

32. git mv

重命名git文件。接受两个参数,源文件名和目标文件名。

+
1
$ git mv <old-file-name> <new-file-name>
+ +

33. git clean

你可以使用git clean命令处理未跟踪的文件。可以使用此命令从工作目录中删除所有未跟踪的文件。如果要处理跟踪的文件,则需要使用git reset命令。

+
1
$ git clean
+ +

34. git help

Git中有许多命令,如果你需要其他命令的帮助,则可以随时在终端上使用git help

+
1
$ git help <git_command>
+ +

35. git whatchanged

此命令的作用与git log相同,但为原始格式。并且由于历史原因,它也是git的一份子。

+
1
$ git whatchanged
+ +
+ +
+
+ + + + + + +
+
+
最常用的 35 个 Git 命令
+
https://awaw.cc/post/git-command/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2021年5月21日
+
+ + +
+
更新于
+
2023年7月4日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/js-5tip/index.html b/post/js-5tip/index.html new file mode 100644 index 0000000..101bf2b --- /dev/null +++ b/post/js-5tip/index.html @@ -0,0 +1,922 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5个小技巧让你写出更好的JavaScript条件语句 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

5个小技巧让你写出更好的JavaScript条件语句

+ + +
+ +
+

原文地址:5 Tips to Write Better Conditionals in JavaScript
原文作者:Jecelyn Yeen
翻译&校对:pdone

+
+ + +

1.在条件较多时使用 Array.includes

举个栗子:

+
1
2
3
4
5
6
// condition
function test(fruit) {
if (fruit == 'apple' || fruit == 'strawberry') {
console.log('red');
}
}
+ +

乍一看,上面的例子看起来不错。 但是,如果我们有更多的红色水果,比如樱桃和蔓越莓呢? 我们是否要用更多的||来扩展语句?

+

我们可以使用Array.includes重写上面的条件。

+
1
2
3
4
5
6
7
8
function test(fruit) {
// extract conditions to array
const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];

if (redFruits.includes(fruit)) {
console.log('red');
}
}
+ +

我们将红色水果(条件)整合到一个数组中。这样做可以让代码看起来更整洁。

+

2.减少嵌套,尽早返回

让我们扩展前面的示例,增加另外两个条件:
——如果没有提供水果,抛出错误;
——如果超过10种水果,打印出水果数量。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function test(fruit, quantity) {
const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];

// condition 1: fruit must has value
if (fruit) {
// condition 2: must be red
if (redFruits.includes(fruit)) {
console.log('red');

// condition 3: must be big quantity
if (quantity > 10) {
console.log('big quantity');
}
}
} else {
throw new Error('No fruit!');
}
}

// test results
test(null); // error: No fruits
test('apple'); // print: red
test('apple', 20); // print: red, big quantity
+ +

看看上面的代码,我们有:
­——1个if / else语句过滤掉无效条件;
——3层嵌套if语句(条件1,2和3)。
对我而言,我遵循的规则是在发现无效条件时提前返回。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* return early when invalid conditions found */

function test(fruit, quantity) {
const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];

// condition 1: throw error early
if (!fruit) throw new Error('No fruit!');

// condition 2: must be red
if (redFruits.includes(fruit)) {
console.log('red');

// condition 3: must be big quantity
if (quantity > 10) {
console.log('big quantity');
}
}
}
+

这样做的话,我们会得到一个较少层级的嵌套语句。 这种编码风格很好,特别是当你有很长的if语句时(想象你需要滚动到最底层才知道这里有一个else语句,一点都不酷)。

+

通过反转条件并提前返回,我们可以进一步减少嵌套。 请查看下面的条件2,看看我们是如何做到的:

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* return early when invalid conditions found */

function test(fruit, quantity) {
const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];

if (!fruit) throw new Error('No fruit!'); // condition 1: throw error early
if (!redFruits.includes(fruit)) return; // condition 2: stop when fruit is not red

console.log('red');

// condition 3: must be big quantity
if (quantity > 10) {
console.log('big quantity');
}
}
+

通过反转条件2,我们的代码现在没有嵌套语句。 当我们有很长的逻辑时,这种技巧非常有用,我们希望在不满足条件时停止下一步的处理。

+

但是这并不是硬性规定。问问自己,这个版本(没有嵌套)是否比前一个版本(条件2嵌套)更好、更可读?

+

对我而言,我会保留(条件2嵌套)这个版本,因为:
——代码简短直接,一个if语句是代码结构更清晰;
——反转条件可能会引发更多的思考过程(增加认知负荷)。

+

因此,始终追求更少的嵌套和尽早的返回,但不要过度。如果你感兴趣的话,这里有篇关于这个问题的文章以及 StackOverflow 上的讨论:

+

Avoid Else, Return Early by Tim Oxley

+

StackOverflow discussion on if/else coding style

+

3.使用函数默认参数和解构

我想下面的代码可能看起来很熟悉,我们总是需要检查null / undefined值并给参数赋予默认值:

+
1
2
3
4
5
6
7
8
9
10
function test(fruit, quantity) {
if (!fruit) return;
const q = quantity || 1; // if quantity not provided, default to one

console.log(`We have ${q} ${fruit}!`);
}

//test results
test('banana'); // We have 1 banana!
test('apple', 2); // We have 2 apple!
+ +

实际上,我们可以通过设置函数的默认参数来省去参数q

+
1
2
3
4
5
6
7
8
function test(fruit, quantity = 1) { // if quantity not provided, default to one
if (!fruit) return;
console.log(`We have ${quantity} ${fruit}!`);
}

//test results
test('banana'); // We have 1 banana!
test('apple', 2); // We have 2 apple!
+ +

更简单直观不是吗? 请注意,函数的每个参数都可以有自己的默认值。 例如,我们也可以为水果分配默认值:

+
1
function test (fruit ='unknown', quantity = 1)
+ +

如果我们的水果是一个对象(Object)怎么办? 我们可以指定默认参数吗?

+
1
2
3
4
5
6
7
8
9
10
11
12
13
function test(fruit) { 
// printing fruit name if value provided
if (fruit && fruit.name) {
console.log (fruit.name);
} else {
console.log('unknown');
}
}

//test results
test(undefined); // unknown
test({ }); // unknown
test({ name: 'apple', color: 'red' }); // apple
+ +

观察上边的例子,水果的name属性存在时,我们会将它打印出来,否则打印'unknown'。我们可以通过默认参数和解构赋值的方法来避免写出 fruit && fruit.name 这种条件。

+
1
2
3
4
5
6
7
8
9
10
// destructing - get name property only
// assign default empty object {}
function test({name} = {}) {
console.log (name || 'unknown');
}

//test results
test(undefined); // unknown
test({ }); // unknown
test({ name: 'apple', color: 'red' }); // apple
+ +

由于我们只需要来自fruit的name属性,我们可以使用{name}将其解构出来,然后我们可以在代码中使用name作为变量而不是fruit.name

+

我们还使用空对象{}作为默认值。 如果我们不这样做,你将在执行遇到错误test(undefined) - Cannot destructure property name of 'undefined' or 'null'。 因为undefined中没有name属性。

+

如果你不介意使用第三方库,有几种方法可以减少空值检查:
——使用 Lodash get 函数;
——使用 Facebook 开源的 idx 库(需搭配 Babeljs)。
这里有一个使用 Lodash 的例子:

+
1
2
3
4
5
6
7
8
9
// Include lodash library, you will get _
function test(fruit) {
console.log(__.get(fruit, 'name', 'unknown'); // get property name, if not available, assign default value 'unknown'
}

//test results
test(undefined); // unknown
test({ }); // unknown
test({ name: 'apple', color: 'red' }); // apple
+ +

您可以点击这里运行演示代码。 此外,如果您是功能编程(FP)的粉丝,您可以选择使用Lodash fp,Lodash的功能版本(方法更改为get或getOr)。

+

4.相较Switch更偏向于使用Map / Object

让我们看看下面的例子,我们想根据颜色打印水果:

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function test(color) {
// use switch case to find fruits in color
switch (color) {
case 'red':
return ['apple', 'strawberry'];
case 'yellow':
return ['banana', 'pineapple'];
case 'purple':
return ['grape', 'plum'];
default:
return [];
}
}

//test results
test(null); // []
test('yellow'); // ['banana', 'pineapple']
+ +

上面的代码似乎没有错,但我觉得它很冗长。 使用具有更清晰语法的object literal可以实现相同的结果:

+
1
2
3
4
5
6
7
8
9
10
// use object literal to find fruits in color
const fruitColor = {
red: ['apple', 'strawberry'],
yellow: ['banana', 'pineapple'],
purple: ['grape', 'plum']
};

function test(color) {
return fruitColor[color] || [];
}
+ +

或者,你可以使用Map来实现相同的结果:

+
1
2
3
4
5
6
7
8
9
// use Map to find fruits in color
const fruitColor = new Map()
.set('red', ['apple', 'strawberry'])
.set('yellow', ['banana', 'pineapple'])
.set('purple', ['grape', 'plum']);

function test(color) {
return fruitColor.get(color) || [];
}
+ +

Map是ES2015引入的对象类型,允许你存储键值对。

+

我们应该禁止使用switch语句吗? 不要局限于此。 就个人而言,我尽可能使用object literal,但我不会设置硬性规则来阻止使用Switch,视使用场景而定。

+

Todd Motto有一篇文章深入研究switch语句与对象文字,你可以点击这里阅读。

+

TL;DR;重构方法

对于上面的示例,我们实际上可以重构我们的代码以使用Array.filter实现相同的结果。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 const fruits = [
{ name: 'apple', color: 'red' },
{ name: 'strawberry', color: 'red' },
{ name: 'banana', color: 'yellow' },
{ name: 'pineapple', color: 'yellow' },
{ name: 'grape', color: 'purple' },
{ name: 'plum', color: 'purple' }
];

function test(color) {
// use Array filter to find fruits in color

return fruits.filter(f => f.color == color);
}
+ +

解决问题的方法永远不只一种。对于这个例子我们展示了四种实现方法。编程真有趣!

+

5.使用 Array.every 和 Array.some 来处理全部/部分满足条件

最后一个小技巧更多地是关于使用新的(也不是很新了)JavaScript 数组函数来减少代码行数。观察以下的代码,我们想要检查是否所有的水果都是红色的:

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const fruits = [
{ name: 'apple', color: 'red' },
{ name: 'banana', color: 'yellow' },
{ name: 'grape', color: 'purple' }
];

function test() {
let isAllRed = true;

// condition: all fruits must be red
for (let f of fruits) {
if (!isAllRed) break;
isAllRed = (f.color == 'red');
}

console.log(isAllRed); // false
}
+ +

代码太长了! 我们可以使用Array.every减少行数:

+
1
2
3
4
5
6
7
8
9
10
11
12
const fruits = [
{ name: 'apple', color: 'red' },
{ name: 'banana', color: 'yellow' },
{ name: 'grape', color: 'purple' }
];

function test() {
// condition: short way, all fruits must be red
const isAllRed = fruits.every(f => f.color == 'red');

console.log(isAllRed); // false
}
+ +

现在是不是整洁了许多? 以类似的方式,如果我们想测试是否至少有一个水果为红色,我们可以使用Array.some用一行代码实现它。

+
1
2
3
4
5
6
7
8
9
10
11
12
const fruits = [
{ name: 'apple', color: 'red' },
{ name: 'banana', color: 'yellow' },
{ name: 'grape', color: 'purple' }
];

function test() {
// condition: if any fruit is red
const isAnyRed = fruits.some(f => f.color == 'red');

console.log(isAnyRed); // true
}
+ +

让我们一起编写可读性更高的代码。 我希望你能在本文中学到一些新东西。

+

就这样。 快乐的编码!

+ + +
+ +
+
+ + + + + + +
+
+
5个小技巧让你写出更好的JavaScript条件语句
+
https://awaw.cc/post/js-5tip/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2018年10月18日
+
+ + +
+
更新于
+
2023年7月4日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/js-cryptojs/index.html b/post/js-cryptojs/index.html new file mode 100644 index 0000000..1002b90 --- /dev/null +++ b/post/js-cryptojs/index.html @@ -0,0 +1,866 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cryptojs – JavaScript加密库 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

Cryptojs – JavaScript加密库

+ + +
+ +

Import

1
npm install crypto-js
+ +

Usage

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//MD5加密
var md5Encrypt = CryptoJS.MD5("Message");
//SHA1加密
var sha1Encrypt = CryptoJS.SHA1("Message");
//SHA256加密
var sha256Encrypt = CryptoJS.SHA256("Message");
//AES加解密
var aesEncrypt = CryptoJS.AES.encrypt("Message", "Secret Passphrase");
var aesDecrypt = CryptoJS.AES.decrypt(aesEncrypt, "Secret Passphrase");
//3DES加解密(不建议使用DES,这里展示3DES)
var 3desEncrypt = CryptoJS.TripleDES.encrypt("Message", "Secret Passphrase");
var 3desDecrypt = CryptoJS.TripleDES.decrypt(3desEncrypt, "Secret Passphrase");

//偏移量、加密模式、填充模式的应用
var message = "Message";
var key = CryptoJS.enc.Utf8.parse("123456"); //密钥
var iv = CryptoJS.enc.Utf8.parse("123456"); //偏移量
var aesEncrypt2 = CryptoJS.AES.encrypt(message ,key, {
iv: iv,
mode: CryptoJS.mode.CBC, //加密模式
padding: CryptoJS.pad.Pkcs7 //填充模式
});
aesEncrypt2 = encodeURIComponent(CryptoJS.enc.Base64.stringify(encryptResult.ciphertext)); //可转为Base64后再进行Url编码,也可直接使用十六进制
+ +

Extend

    +
  1. 密钥和偏移量:一般情况下密钥为加密方与解密方双方约定好的,但如果长期使用同一密钥,对相同内容加密后的结果一致,容易被找出规律。所以,可以在双方交互时添加一个参数——偏移量,偏移量明文传递,并且每次请求都不同,但在一次交互过程中,双方使用同一偏移量,这样就可以使加密相同内容时结果每次都不同,间接提高安全性。
  2. +
  3. 加密模式:电码本模式(Electronic Codebook Book (ECB));密码分组链接模式(Cipher Block Chaining (CBC));计算器模式(Counter (CTR));密码反馈模式(Cipher FeedBack (CFB));输出反馈模式(Output FeedBack (OFB))。ECB模式下偏移量不生效。具体各种模式的原理这里不再描述(参考资料1)。
  4. +
  5. 填充模式:.NET和Java中并不完全通用,经过与安卓开发的同事踩坑与测试后,发现None和ISO10126两种填充模式,在两个平台是通用的。理论上PKCS7/PKCS5应该也是通用的(参考资料2/参考资料3)。
  6. +
  7. 编码格式:之前做项目时因为编码的问题耽误了不少时间。
  8. +
  9. 没有绝对的安全。
  10. +
+

相关项目

+ + +
+ +
+
+ + + + + + +
+
+
Cryptojs – JavaScript加密库
+
https://awaw.cc/post/js-cryptojs/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2018年9月11日
+
+ + +
+
更新于
+
2023年7月4日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/js-dateformat/index.html b/post/js-dateformat/index.html new file mode 100644 index 0000000..2883fe4 --- /dev/null +++ b/post/js-dateformat/index.html @@ -0,0 +1,855 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JavaScript获取时间并格式化 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

JavaScript获取时间并格式化

+ + +
+ +

最近在学习微信小程序,用到不少前端的知识,比如时间格式化。

+ + +

Example

1
2
3
4
function getDateNow() {
var date = new Date();
return date.format("yyyy-MM-dd HH:mm:ss.t w");
}
+ +

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*
*对Date的扩展,将 Date 转化为指定格式的String
*月(M)、日(d)、小时(H)、分(m)、秒(s)、季度(q) 可以用 1-2个占位符,
*年(y)可以用 1-4个占位符,毫秒(t) 1个占位符(3位的数字)
*星期(w) 1个占位符
*example
*(new Date()).Format("yyyy-MM-dd HH:mm:ss.t w") ==> 2018-10-19 14:19:17.649 星期五
*/
Date.prototype.format = function(fmt) {
var weekArr = {
cn: new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"),
en: new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
};
var o = {
"M+": this.getMonth() + 1,
"d+": this.getDate(),
"H+": this.getHours(),
"m+": this.getMinutes(),
"s+": this.getSeconds(),
"q+": Math.floor((this.getMonth() + 3) / 3),
"t": ("00" + this.getMilliseconds()).slice( - 3),
"w": weekArr.en[this.getDay()]
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o) if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
};
+ +
+ +
+
+ + + + + + +
+
+
JavaScript获取时间并格式化
+
https://awaw.cc/post/js-dateformat/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2018年10月20日
+
+ + +
+
更新于
+
2023年7月4日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/js-map/index.html b/post/js-map/index.html new file mode 100644 index 0000000..b4cc94e --- /dev/null +++ b/post/js-map/index.html @@ -0,0 +1,867 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JS地图使用笔记 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

JS地图使用笔记

+ + +
+ +

最近一个项目中要用JS实现一个简单的地图,由于是前端小白,开发过程中遇到了不少问题,然后整理了两个Demo,便于以后需要使用时有个参考。

+ + +

对功能性要求不高使用Demo1,要求高的话用Demo2,Demo2是用的Highmaps,官方提供了很多方法,可以参考官方文档。

+

两个Demo的完整代码下载地址在文末。

+

Demo1

+ +

Demo2

+ +

相关文档

Highmaps API 文档

+

源码下载

百度云

https://pan.baidu.com/s/1YDYu9Sz4LqIun2VQNB52tw

+
+

提取码:3vjq

+
+ + +
+ +
+
+ + + + + + +
+
+
JS地图使用笔记
+
https://awaw.cc/post/js-map/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2018年12月25日
+
+ + +
+
更新于
+
2023年7月31日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/learn-bridge-design/index.html b/post/learn-bridge-design/index.html new file mode 100644 index 0000000..d273005 --- /dev/null +++ b/post/learn-bridge-design/index.html @@ -0,0 +1,995 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 桥梁设计学习笔记 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

桥梁设计学习笔记

+ + +
+ +

桥梁定义

桥梁是道路路线遇到江河湖泊、山谷深沟以及其他线路(铁路或公路)等障碍时,为了保持道路的连续性而专门建造的人工构造物。桥梁既要保证桥上的交通运行,也要保证桥下水流的宣泄、船只的通航或车辆的通行。

+ +

桥梁基本组成

上部结构

桥跨结构

线路跨越障碍(如江河、山谷或其他线路等)的结构物。

+

下部结构

桥墩

是在河中或岸上支承桥跨结构的结构物。

+
    +
  • 轻型桥墩——盖梁、系梁、立柱
  • +
  • 重力式桥墩——墩帽、墩身
  • +
+

桥台

设在桥的两端;一边与路堤相接,以防止路堤滑塌;另一边则支承桥跨结构的端部。为保护桥台和路堤填土,桥台两侧常做锥形护坡、挡土墙等防护工程。

+

墩台基础

是保证桥梁墩台安全并将荷载传至地基的结构。

+
    +
  • 扩大基础
  • +
  • 桩基础承台
  • +
  • 桩柱式
  • +
+

支座系统

在桥跨结构与桥墩或桥台的支承处所设置的传力装置。它不仅要传递很大的荷载,并且还要保证桥跨结构能产生一定的变位。

+
    +
  • 橡胶支座
  • +
  • 支座垫石
  • +
+

附属设施

桥面铺装

或称行车道铺装,铺装的平整性、耐磨性、不翘曲、不渗水是保证行车舒适的关键。

+

排水防水

应能迅速排除桥面积水,并使渗水的可能性降至最小限度。

+

栏杆

既是保证安全的构造措施,又是有利于观赏的最佳装饰件。

+

伸缩缝

桥跨上部结构之间或桥跨上部结构与桥台端墙之间所设的缝隙,以保证结构在各种因素作用下的变位。为使行车顺适、不顺簸,桥面上要设置伸缩缝构造。

+

灯光照明

桥梁分类

按使用性质分类

公路桥、铁路桥、公铁两用桥、城市道路桥(含立交桥)、人行桥、机耕桥、管线桥、渡槽桥。

+

按桥身结构材料分类

木桥、圬工桥(砖、石、砼砌块桥)、钢筋砼桥、预应力砼桥、钢桥。

+

按单孔跨径、多孔跨径总长分类

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
分类多孔跨径总长L(m)单孔跨径Lk(m)
特大桥L > 1000Lk > 150
大桥100 ≤ L ≤ 100040 ≤ Lk < 150
中桥30 < L < 10020 ≤ Lk < 40
小桥8 ≤ L ≤ 305 ≤ Lk < 20
涵洞L < 8Lk < 5
+

按桥跨结构分类

梁式桥(简支梁、连续梁、伸臂梁)、桁架桥、拱桥、刚构桥、悬索桥、斜拉桥等。此外,还有浮桥、漫水桥、活动桥等。

+

桥梁类型和受力特点

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
类型受力特点建造材料
梁式桥竖向荷载作用下无水平反力,梁内产生的弯矩最大抗弯能力强(钢、木、钢筋砼、预应力钢筋砼)
拱式桥主要承重结构是拱圈或拱助,在竖向荷载作用下,墩台承受水平推力,承重结构以受压为主抗压能力强的圬工材料(砖、石、砼)和钢筋砼
刚架桥梁和柱的连接处具有很大的刚性,在竖向荷载作用下,梁部主要受弯,在柱脚处也具有水平反力,受力状态介于梁桥和拱桥之间施工比较困难,用普通钢筋砼修建,梁柱刚结处易产生裂缝
悬索桥以悬索为主要承重结构,结构自重较轻,构造简单、受力明确,能以较小的建筑高度经济合理地修建大跨度桥结构自重轻,刚度差,在车辆荷载和风荷载作用下有较大的变形和振动
组合体系桥由几个不同体系的结构组合而成,常见的有:连续刚构,梁、拱组合等;斜拉桥也是组合体系桥的一种——
+

梁式桥

梁式桥分类

    +
  • 简支梁桥
  • +
  • 悬臂梁桥
  • +
  • 等截面连续梁桥
  • +
  • 变截面连续梁桥
  • +
  • 连续刚构
  • +
+

梁截面

    +
  • 实心板梁
  • +
  • 空心板梁
  • +
  • T梁——底板、梁肋、翼缘板
  • +
  • 箱梁——底板、腹板、顶板、翼缘板
  • +
+

拱式桥

与梁式桥主要承受弯曲力不同,拱桥要承受的是沿圈传递的轴向压力。该压力即是桥墩桥台在竖向移动荷作用下所产生的水平推力。

+

拱式桥分类

    +
  • 三铰拱
  • +
  • 两铰拱
  • +
  • 无铰拱
  • +
  • 系杆拱
  • +
+

承载方式

    +
  • 上承式拱
  • +
  • 中承式拱
  • +
  • 下承式拱
  • +
+

刚架桥

刚架桥是梁和柱(或竖墙)整体结合的桥梁结构。竖向荷载作用下,梁部主要受弯,柱脚处有水平推力,力状态介于梁式桥和拱桥之间。

+

刚架桥分类

    +
  • T型刚架桥
  • +
  • 连续刚架桥
  • +
  • 斜腿刚架桥
  • +
+

斜拉桥

斜拉桥由主梁、塔柱和斜拉索3种基本构件组成,用高强钢材制成的斜拉索将主梁多点吊起,将主梁承受的荷载传至塔柱,再由塔柱基础传给地基。斜拉桥是主梁(桥面体系)受压、受弯,斜拉索(支承体系)受拉的结构。

+

索型

    +
  • 辐射性
  • +
  • 竖琴型
  • +
  • 扇形
  • +
+

桥梁常用术语

横隔板

横隔板是为保持截面形状、增强横向刚度而在梁之间设置的构件。位于桥梁端部的横隔板称为端隔板,位于中部的横隔板称为中隔板。

+

湿接缝、湿接头

净跨径

相邻两个桥墩(或桥台)之间的净距。对于拱式桥是每孔拱跨两个拱脚截面最低点之间的水平距离。

+

计算跨径

对于具有支座的桥梁,是指桥跨结构相邻两个支座中心之间的距离;对于拱式桥,是指两相邻拱脚截面形心点之间的水平距离,即拱轴线两端点之间的水平距离。

+

标准跨径

相邻两个桥墩中心线的距离。

+

拱轴线

拱圈各截面形心点的连线。

+

桥梁高度

指桥面与低水位之间的高差,或指桥面与桥下线路路面之间的距离,简称桥高。

+

桥下净空高度

设计洪水位、计算通航水位或桥下线路路面至桥跨结构最下缘之间的距离。

+

建筑高度

桥上行车路面(或轨顶)标高至桥跨结构最下缘之间的距离。

+

容许建筑高度

公路或铁路定线中所确定的桥面或轨顶标高,对通航净空顶部标高之差。

+

净矢高

从拱顶截面下缘至相邻两拱脚截面下缘最低点之连线的垂直距离。

+

计算矢高

从拱顶截面形心至相两拱脚截面形心之连线的垂直距离。

+

矢跨比

计算矢高与计算跨径之比,也称拱矢度,它是反映拱桥受力特性的一个重要指标。

+

涵洞

用来宣泄路堤下水流的构造物。通常在建造涵洞处路堤不中断。凡是多孔跨径全长不到8m和单孔跨径不到5m的泄水结构物,均称为涵洞。

+ + +
+ +
+
+ + + + + + +
+
+
桥梁设计学习笔记
+
https://awaw.cc/post/learn-bridge-design/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2023年4月1日
+
+ + +
+
更新于
+
2023年7月4日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/learn-road-design/index.html b/post/learn-road-design/index.html new file mode 100644 index 0000000..036b6a3 --- /dev/null +++ b/post/learn-road-design/index.html @@ -0,0 +1,969 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 道路勘测设计学习笔记 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

道路勘测设计学习笔记

+ + +
+ +

道路平面设计

公路

一种带状的空间结构物,它的中线是一条空间曲线。

+ +

公路平面图

公路在水平面上的投影图。

+

公路纵断面图

通过公路中线的竖向剖面图。

+

公路横断面图

公路上任一点垂直于路中线的竖向剖面图。

+

缓和曲线

从曲率半径为无穷大逐渐向某一定值变化的曲线。

+

缓和曲线的作用

    +
  • 缓和曲率——使曲率连续变化
  • +
  • 缓和超高——使横向坡度连续变化
  • +
  • 缓和加宽——使车道加宽连续变化
  • +
+

缓和曲线产生的效果

    +
  • 曲率连续变化,便于车辆驾驶
  • +
  • 离心加速度连续变化,没有突变,乘客感觉舒适
  • +
  • 超高横坡度及加宽逐渐变化,行车更加稳定
  • +
  • 与圆曲线配合,增加线形美观
  • +
+

缓和曲线的线型

回旋线、三次抛物线、七次四项式型、半波正弦型、一波正弦型、双纽线、多心复曲线。

+

回旋线

半径从无穷大一直变化到一定设计值的一段弧线。回旋线是曲率随着曲线长度成比例变化的曲线。公路、匝道常用的缓和曲线是回旋线,也叫放射螺旋线。回旋线不仅线形美观,而且与驾驶员匀速转动方向盘由圆曲线驶入直线或者由直线驶入圆曲线的轨迹线相符合。

+

弯道的超高

为了减小横向力,一般圆曲线段上路面做成外侧高、内侧低的单向内倾横坡。

+

圆曲线最小半径

最大横向力系数μ和超高横坡度值i为主要影响因素。

+

横向力系数μ的确定

    +
  • 按汽车行驶稳定性
  • +
  • 按行车舒适性
  • +
  • 按燃料和轮胎消耗
  • +
+

极限最小半径

各级公路对按计算行车速度行驶的车辆,能保证其安全行车的最小允许半径。

+

一般最小半径

对按计算行车速度行驶的车辆能保证其安全性和舒适性,它是通常情况下推荐采用的最小半径值。

+

不设超高的最小半径

当平曲线半径较大时,离心力的影响就较小,路面摩阻力就可以保证汽车有足够的稳定性,这是就可以不设置超高,而允许设置与直线段上相同的双向横坡的路拱形式。

+

平曲线的极限最小长度

根据经验,为使驾驶员在曲线行驶时不感到方向盘操作的困难,按6s的通过时间设置曲线长度是适宜的。

+

平曲线的一般最小长度

各级公路的平曲线,一般情况下应能够设置两段缓和曲线(或超高、加宽缓和段)及一段圆曲线。在平面设计中,为便于驾驶操作和行车安全与舒适,汽车在任何一种曲线形式上行驶的时间都不应短于3s。

+

公路转角小于7°时的平曲线长度

为避免造成视觉错误、保证行车安全,在进行平面设计时应避免设置小于7°的转角。当条件限制不得已时,在偏角小于7°的转角处应设置较长的平曲线,其长度应大于标准中规定值。

+

加宽

汽车在曲线上行驶所占路面宽度就比在直线上的大,为保证行车的安全,曲线段的路面应做适当的加宽。

+

加宽缓和段

为避免路面宽度从直线段上的正常宽度到圆曲线段的加宽断面的突变,在直线和圆曲线之间应设置一段路面宽度的渐变段,这一渐变段称为加宽缓和段。

+

超高

《标准》规定,当圆曲线半径小于不设超高的最小半径时,应设置超高(即将曲线部分的路面做成向内侧倾斜的单向横坡)。

+

超高缓和段

直线段上的双向横坡逐渐过渡到圆曲线段上的超高横坡的过渡段。

+

视距

驾驶员在行驶过程中的通视距离。

+

行车视距

为了保证行车安全,驾驶员应能看到前方一定距离的公路以及公路上的障碍物或迎面的来车,以便及时刹车或绕过。汽车在这段时间里沿公路路面行驶的必要安全距离,称为行车视距。

+

停车视距

指驾驶员看到障碍物后立即采取制动措施,至汽车在障碍物前停下来的最小安全距离。由三部分距离组成:

+
    +
  • 驾驶员反应时间内行驶的距离
  • +
  • 制动距离,指制动生效到汽车完全停止时行驶的距离
  • +
  • 安全距离
  • +
+

会车视距

对于不设分隔带的双车道公路,车辆在行驶中,驾驶员趋向于沿路面中心行驶,一旦发现前方来车,双方驾驶员各自把车辆驶回到自己的车道上,使两车安全交会。为保证双向行驶的双车道公路的行车安全,公路平面应能保证会车视距要求,即满足双向行驶的汽车能在同一车道上及时刹车所需的最短距离。由三部分距离组成:

+
    +
  • 双方驾驶员反应时间内汽车所行驶的距离
  • +
  • 双方汽车的制动距离
  • +
  • 安全距离
  • +
+

超车视距

《标准》规定,对于双向行驶的双车道公路,根据需要,应结合地形设置保证具有超车视距的路段,以使汽车行驶时安全超越前车。

+

超车视距全程可分为四个阶段

    +
  • 加速行驶距离
  • +
  • 超车汽车在对向车道上行驶的距离
  • +
  • 超车汽车从开始加速到超车完成的时间内,对向车道汽车的行驶距离
  • +
  • 超车完成时,超车汽车与对向汽车之间的安全距离
  • +
+

平面线形

直线、圆曲线、回旋线

+

平面线形要素组合

    +
  • 基本型——圆曲线两端用回旋线与直线相连接的组合型式称为基本型
  • +
  • S型——用两个反向回旋线连接两个反向圆曲线的组合型式称为S型
  • +
  • 卵型——用一个回旋线连接两个同向圆曲线的组合型式称为卵型
  • +
  • 凸型——在两个同向可旋线间不插入圆曲线而径相衔接的组合型式称为凸型
  • +
  • 复合型——两个以上同向回旋线在曲率相等处直接连接的组合型式称为复合型
  • +
  • C型——两同向回旋线在曲率为零处径相衔接的组合型式称为C型
  • +
+

道路纵断面设计

坡线和竖曲线

公路在纵断面上由不同的上坡段、下坡段(统称坡段)和平顺连接相邻两坡段的竖向曲线段组成,即公路路线在纵断面上是一条有起伏的空间线,其基本线形由坡线和竖曲线组成。

+

地面标高

公路中线各桩点的地面高程称地面标高。

+

地面线

各点地面标高的连线称地面线,它是一条不规则的空间折线。

+

设计标高

路基边缘点的高程称设计标高(公路改建时可用原路中线标高为设计标高)。

+

设计线

各桩点设计标高的连线称纵断面设计线,简称设计线,它是经过技术上、经济上和美学上比较后确定的,由坡线和竖曲线组成的空间线。地面线和设计线是纵断面图的两条主要线。

+

填挖高

同一桩点的设计标高与地面标高的差值称施工标高,又称填挖高。

+

填方路段、挖方路段

    +
  • 若该桩点的施工标高为“+”,即设计标高大于地面标高,这样的路基通常为填筑而成的路堤,这样的路段即填方路段
  • +
  • 若施工标高为“-”则为路堑,这样的路段即挖方路段。
  • +
+

纵坡

坡线的坡度即路线纵向坡度,简称纵坡。

+

转坡点

相邻两坡线的交点称转坡点,在转坡点处应设竖曲线。转坡点前后两坡线坡度之差称转坡角。

+

高原折减

在海拔3000m以上的高原地区,因空气稀薄,不但会使发动机的功率减少,还使水箱的水容易沸腾而降低冷却系统的功能,因此应将《标准》规定的最大纵坡予以折减。

+

平均纵坡

由若干坡段组成的路段,其两端点的高差与路段长度之比称平均纵坡。

+

合成坡度

路线纵向坡度与横向坡度的矢量和称合成坡度。

+

道路横断面设计

横断面

公路中线法线方向的剖面图称公路横断面图,简称横断面,亦即由公路横断面设计的主要组成部分与横断地面线所围成的面,它反映了公路在横剖面上的组成情况、形状和几何尺寸,是公路路线设计的重要内容之一。公路横断面设计的主要组成部分是路面和路基,路面包括行车道、变速车道、紧急停车带、爬坡道等,路基包括路肩、边坡、边沟、护坡道、截水沟等。

+

路基横断面

为设计计算方便,通常用两侧路肩边缘点的联线,来代替路面、路肩等的横坡折线,即横断面的顶面可绘成一条直线。这样将顶面用一直线绘成的横断面即路基横断面。

+

路拱

为了排除路面的雨水,将路面做成中间高两边低的拱起形状称路拱。

+

路拱横坡

路面中线点与路面边缘点的高差,与其水平距离的比值称路拱横坡,以%表示。

+

分隔带

沿道路纵向设置分隔行车道用的带状设施称分隔带,位于中线位置上的称中间带,位于中线两侧的称外侧分隔带。

+

路肩

位于行车道外缘至路基边缘具有一定宽度的带状设施称路肩,它是路面的侧向支撑,可供临时停车和人行通行,还可使驾驶员有安全感。

+

路基宽度

在一个横断面上,两侧路肩边缘点间的宽度称路基宽度。

+

路基边坡

为保证路基的稳定,把路基两侧做成具有一定坡度的坡面称路基边坡。

+

边沟

为汇集并排除路面、路肩和边玻的水流,在路基两侧设置的水沟称边沟。一般情况下,挖方路基和填土高度小于0.5m的矮路堤,均应设置边沟。

+

边沟的型式

通常有梯形、矩形和三角形三种,视上质情况和施工方法而定,一般土质路基采用梯形,岩石路基可采用三角形或矩形,机械化施工时多采用三角形。

+

截水沟

为拦截并排除流向路基的地面水流,以避免对路基边坡冲刷等而设置的排水沟称截水沟。

+

免费运距

土方作业包括挖、装、运卸等工序,在某一一特定距离内,只按挖方数计价而不计算运费,这一特定距离称免费运距。

+

平均运距

土石方调配时,从挖方体积重心到填方体积重心的距离称平均运距,为简化设计计算,通常平均运距按挖方路段中心至填方路段中心的距离计。

+

道路交叉设计

冲突点

当行车方向互相交叉时,可能发生碰撞的地点称为冲突点。

+

交织点

当车辆从不同方向驶向同一方向或成锐角相交时,可能产生挤撞的地点称为交织点。

+

加铺转角

以圆曲线构成宽来连接交叉公路的路基和路面,称为加铺转角式交叉。

+

立体交叉

公路与公路或铁路在不同高度上互相交义的型式称立体交叉。

+

立体交叉形式

    +
  • 分离式
  • +
  • 互通式
  • +
+

互通式立体交叉的类型

    +
  • 苜蓿叶形
  • +
  • 部分苜蓿叶形
  • +
  • Y形
  • +
  • 喇叭形
  • +
  • 菱形
  • +
  • 环形
  • +
  • 定向式立体交叉
  • +
+

匝道的作用

匝道是连接立体交叉上、下路线的交换道,一般在匝道上既有弯道又有坡度。

+

匝道的类型

    +
  • 右转弯匝道——直接从主干线右转弯驶出的匝道
  • +
  • 环形匝道——这是一种左转弯行驶的匝道形式。车辆由干线的右侧出口,并以约270°角向右转弯,而完成左转弯的行驶
  • +
  • 定向式匝道——由干线左侧出口,以较短捷的路线直接驶入连接的干线,从而完成左转弯的匝道
  • +
  • 迁回式匝道——由干线右侧出口,暂时偏离所去方向,以迂回绕行的方式完成左转弯的匝道
  • +
+

变速车道

车辆由高速公路驶入匝道(或车速低的道路)须减速,反之,车辆由匝道(或车速低的道路)驶进高速公路须加速。为了调整车速而设置在高速公路与匝道间的减速或加速车道,称为变速车道。

+ + +
+ +
+
+ + + + + + +
+
+
道路勘测设计学习笔记
+
https://awaw.cc/post/learn-road-design/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2023年4月1日
+
+ + +
+
更新于
+
2023年7月4日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/listen1/index.html b/post/listen1/index.html new file mode 100644 index 0000000..1f76588 --- /dev/null +++ b/post/listen1/index.html @@ -0,0 +1,897 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Listen 1 – One for all free music in China - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

Listen 1 – One for all free music in China

+ + +
+ +

Listen 1可以搜索和播放来自网易云音乐、虾米、QQ音乐、酷狗音乐、酷我音乐网站的歌曲,让你的曲库更全面。

+ +

截图

音乐平台歌单推荐界面
从网易云音乐、QQ音乐等平台导入自己的歌单到Listen1
搜索界面
歌词界面

+

安装

Chrome插件版

    +
  1. 下载Chrome插件版压缩包,并解压缩
  2. +
  3. 打开 Chrome 扩展页面,勾选右上角「开发者模式」
  4. +
  5. 选择「加载已解压的扩展程序…」,选择刚刚解压缩的文件夹
  6. +
  7. 开始使用
  8. +
+

Firefox插件版

    +
  1. 下载Firefox插件版,并解压缩
  2. +
  3. 打开 about:config 页面,xpinstall.signatures.required 设置为 false
  4. +
  5. 选择「附加组件」,齿轮图标,选择从文件安装附加组件,选择下载的xpi文件
  6. +
  7. 开始使用
  8. +
+

Windows桌面版

    +
  1. 下载Windows压缩包,根据系统选择32位或64位版本
  2. +
  3. 解压缩,运行 Listen1.exe
  4. +
+

Mac桌面版

    +
  1. 下载并运行dmg,在打开的安装窗口把Listen 1图标拖动到右侧
  2. +
  3. 点击Listen 1图标运行
  4. +
+

Linux桌面版

    +
  1. 下载deb安装包,根据系统选择32位或64位版本
  2. +
  3. 点击deb,在安装界面点击Install
  4. +
+

下载

+

Listen 1背后的开源项目

listen1/listen1
最初的网页版播放器,使用Python开发Web服务器。可以直接在服务器运行,也可使用打包的Windows版和Mac版在本地运行Web服务器

+

listen1/listen1_chrome_extension
Chrome和Firefox插件版

+

listen1/listen1_desktop
Windows,Mac,Linux桌面版。使用Electron框架,基于Listen 1 Chrome插件版JS库开发

+

Listen 1联系方式

+

致谢

感谢该项目的所有代码贡献者。

+

如果觉得不错,不妨推荐给你身边喜欢音乐的朋友。

+ + +
+ +
+
+ + + + + + +
+
+
Listen 1 – One for all free music in China
+
https://awaw.cc/post/listen1/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2018年9月9日
+
+ + +
+
更新于
+
2023年7月14日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ +
+ + +
+
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/luoyang-subway/index.html b/post/luoyang-subway/index.html new file mode 100644 index 0000000..c75df34 --- /dev/null +++ b/post/luoyang-subway/index.html @@ -0,0 +1,856 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 洛阳地铁一号线开通啦!(内附线路图) - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

洛阳地铁一号线开通啦!(内附线路图)

+ + +
+ +

洛阳轨道交通(Luoyang Subway)是服务于中国河南省洛阳市的城市轨道交通系统,其首条线路于2020年12月1日开始试运行。

+ +

2021年3月28日正式运营,当日客流量为10.7382万人次。

+

截至2021年3月,洛阳轨道交通已开通运营线路1条,为洛阳轨道交通1号线;在建线路1条,为洛阳轨道交通2号线;规划线路2条,为洛阳轨道交通3号线、洛阳轨道交通4号线;线网共设车站34座。

+

洛阳地铁线路简图

+

洛阳地铁线路图

+ + +
+ +
+
+ + + + + + +
+
+
洛阳地铁一号线开通啦!(内附线路图)
+
https://awaw.cc/post/luoyang-subway/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2021年3月28日
+
+ + +
+
更新于
+
2023年7月14日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/md-codeblock-lang/index.html b/post/md-codeblock-lang/index.html new file mode 100644 index 0000000..4261094 --- /dev/null +++ b/post/md-codeblock-lang/index.html @@ -0,0 +1,1021 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Markdown代码块支持的语言 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

Markdown代码块支持的语言

+ + +
+ +

Markdown代码块支持的语言,使用时在```后加上对应关键字即可。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
名称关键字调用的js
AppleScriptapplescriptshBrushAppleScript.js
ActionScript 3.0actionscript3, as3shBrushAS3.js
Shellbash, shellshBrushBash.js
ColdFusioncoldfusion, cfshBrushColdFusion.js
Ccpp, cshBrushCpp.js
C#c#, c-sharp, csharpshBrushCSharp.js
CSScssshBrushCss.js
Delphidelphi, pascal, passhBrushDelphi.js
diff&patchdiff patchshBrushDiff.js
Erlangerl, erlangshBrushErlang.js
GroovygroovyshBrushGroovy.js
JavajavashBrushJava.js
JavaFXjfx, javafxshBrushJavaFX.js
JavaScriptjs, jscript, javascriptshBrushJScript.js
Perlperl, pl, PerlshBrushPerl.js
PHPphpshBrushPhp.js
texttext, plainshBrushPlain.js
Pythonpy, pythonshBrushPython.js
Rubyruby, rails, ror, rbshBrushRuby.js
SASS&SCSSsass, scssshBrushSass.js
ScalascalashBrushScala.js
SQLsqlshBrushSql.js
Visual Basicvb, vbnetshBrushVb.js
XMLxml, xhtml, xslt, htmlshBrushXml.js
Objective Cobjc, obj-cshBrushObjectiveC.js
F#f# f-sharp, fsharpshBrushFSharp.js
xpp, dynamics-xppshBrushDynamics.js
Rr, s, splusshBrushR.js
matlabmatlabshBrushMatlab.js
swiftswiftshBrushSwift.js
GOgo, golangshBrushGo.js
+ + +
+ +
+
+ + + + + + +
+
+
Markdown代码块支持的语言
+
https://awaw.cc/post/md-codeblock-lang/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2021年1月30日
+
+ + +
+
更新于
+
2023年7月4日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/ms-opensource/index.html b/post/ms-opensource/index.html new file mode 100644 index 0000000..add7dfb --- /dev/null +++ b/post/ms-opensource/index.html @@ -0,0 +1,872 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 微软开源WPF, Windows Forms 和 WinUI - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

微软开源WPF, Windows Forms 和 WinUI

+ + +
+ +

美国当地时间12月4日,微软正式举行 Microsoft Connect(); 2018 开发者大会。

+ + +

Content

    +
  • Visual Studio 2019 Preview
  • +
  • .NET Core 3 Preview 1
  • +
  • .NET Framework 4.8
  • +
  • ASP.NET Core 2.2
  • +
  • ML.NET 0.8
  • +
  • WPF, Windows Forms 和 WinUI 框架宣布开源
  • +
  • 宣布 .NET 基金会开放接受会员加入
  • +
  • 微软和 Docker 宣布了一个新的联合开源项目,即 Cloud Native Application Bundle,它可以更轻松地打包和运行云原生应用程序
  • +
+

会不会有朝一日WindowsOS也开源了?

+ + + +
+ +
+
+ + + + + + +
+
+
微软开源WPF, Windows Forms 和 WinUI
+
https://awaw.cc/post/ms-opensource/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2018年12月5日
+
+ + +
+
更新于
+
2023年7月5日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/msi-b450m-mortar/index.html b/post/msi-b450m-mortar/index.html new file mode 100644 index 0000000..32ac2d9 --- /dev/null +++ b/post/msi-b450m-mortar/index.html @@ -0,0 +1,866 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 微星B450M MORTAR主板PCI_E3接口无法识别硬件解决方法 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

微星B450M MORTAR主板PCI_E3接口无法识别硬件解决方法

+ + +
+ +

博主购买的微星B450M MORTAR主板,由于安装显卡后会挡住PCI_E2接口,所以无线网卡(Intel 9260AC)只能插PCI_E3接口上,但是一直无法识别出来,在微星社区咨询后发现已经有人反馈过这个问题,帖子中官方人员回复:

+ + +
+
    +
  1. 主板的PCIE 插槽必须有共享LANES的状况
  2. +
  3. PCIE CARD 本身没有依照规范将Prsnt 1(A1)#和Prsnt 2#(B17)短接。
  4. +
+
+

随后官方发布了B450M MORTAR新BIOS固件,版本号7B89v14,更新到最新BIOS后,进BIOS - setting - advanced - PCI SUBsystem setting, 找到PCIe x1 slot switch 改成PCIE_3 (默认为PCIE_2 ),然后插在PCI-E_E3上的无线网卡就可以正常被识别出来啦。B450M MORTAR Titanium版本的主板也同样适用该方法。

+
+

微星社区:http://forum-sc.msi.com/index.php?topic=5308.14

+
+ + +
+ +
+
+ + + + + + +
+
+
微星B450M MORTAR主板PCI_E3接口无法识别硬件解决方法
+
https://awaw.cc/post/msi-b450m-mortar/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2019年2月17日
+
+ + +
+
更新于
+
2023年7月4日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/my-first-nas/index.html b/post/my-first-nas/index.html new file mode 100644 index 0000000..38875ad --- /dev/null +++ b/post/my-first-nas/index.html @@ -0,0 +1,972 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NAS诞生记 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

NAS诞生记

+ + +
+ +

NAS(Network Attached Storage:网络附属存储)按字面简单说就是连接在网络上,具备资料存储功能的装置,因此也称为“网络存储器”。

+ +

它是一种专用数据存储服务器。它以数据为中心,将存储设备与服务器彻底分离,集中管理数据,从而释放带宽、提高性能、降低总拥有成本、保护投资。其成本远远低于使用服务器存储,而效率却远远高于后者。

+

配置清单

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
品类型号渠道价格备注
主板映泰J4125NHU淘宝580SATA*2、M.2*1、PCIEx16*1
处理器Intel J4125--板载CPU、被动散热
机箱蜗牛星际C款闲鱼128PCIE开口、4盘位、硬盘背板
内存玖合 忆界马甲条京东1498G、DDR4、3000MHz
扩展卡乐扩m.2转5口SATA京东149SATA3.0*5
电源益衡7025B淘宝24580PLUS铜牌、双路12V 36A
插座小米智能插座2京东49电量统计、远程开机
1300
+

系统方案

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
方案系统备注
虚拟机PVE/EXSi硬盘直通、核显直通
虚拟机Windows & VMwareCPU性能羸弱
物理机群晖1U盘/SATA引导、UI人性化、套件易用(采纳✔)
物理机Unraid按盘位收费
物理机FreeNAS/TrueNAS使用ECC内存
物理机万由只支持到U-NAS5、U-NAS6仅万由硬件可用
+
+

1 固件版本 918+ 7.0.1 42218 up3

+
+

总结

目前这套配置搭配群晖系统已稳定运行两周,单块1T硬盘(老笔记本淘汰),功耗15W。

+

2023.07.04

更新了以下内容

+
    +
  1. 改用 arpl v1.1-beta2a 自编译引导
  2. +
  3. 系统升级为 7.1.1 42962 up5
  4. +
  5. 添加了一块 512GB SATA固态硬盘(用于提升docker、套件、虚拟机等服务的运行效率,实际感受docker和套件提升不明显,跑虚拟机提升明显)
  6. +
  7. 添加了一块 4TB 西部数据垂直盘
  8. +
  9. 添加了一块 4*SATA PCIe扩展卡,目前板载2SATA,扩展4SATA,共6个SATA口
  10. +
  11. 目前待机功率为21W,每天消耗0.5度电
  12. +
+ + +
+ +
+
+ + + + + + +
+
+
NAS诞生记
+
https://awaw.cc/post/my-first-nas/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2022年6月10日
+
+ + +
+
更新于
+
2023年7月4日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/my-second-pc/index.html b/post/my-second-pc/index.html new file mode 100644 index 0000000..e6139af --- /dev/null +++ b/post/my-second-pc/index.html @@ -0,0 +1,879 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 年轻人的第二台PC诞生 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

年轻人的第二台PC诞生

+ + +
+ +

博主的第一台主机是17年6月份大学毕业时组的一套,当时资金有限,主机花了2600元,服役了一年半,由于性能不能满足 游戏 工作的需要,所以就在19年春节前又配了一套。

+ + +

旧的主机虽然已经用了一年半,但毕竟是挤牙膏挤多了的性价比神U G4560和10系显卡1050ti,家用办公中画质玩玩3A大作还是够用的,于是就春节搬回家,把家里N年前的主机给替换了。其实在春节前都已经配齐开始使用了,但一直没时间更新博客,趁着这周末有空就来补上笔记。

+

配置清单

    +
  • 固态硬盘 英特尔 760P 256G 359
  • +
  • 显卡 铭瑄 GTX1060 6G 1489
  • +
  • 内存 金士顿 骇客神条2666 8G *2 679
  • +
  • 处理器 AMD Ryzen5 2600X
  • +
  • 主板 微星 B450M MORTAR 1999
  • +
  • 机箱 先马 平头哥 149
  • +
  • 电源 先马 全模组500W 349
  • +
+
+

配置清单合计5024元,显示器、键盘、鼠标、PCIE无线网卡、音箱以及两块1TB机械硬盘都使用上台主机的,故不算入总价中。

+
+

安装过程

先放桌子上点亮
点亮成功
装系统
放入机箱
粗糙的背线
安装完成
+

娱乐大师跑分

跑分
配置
+ +

灯效

+ + +
+ +
+
+ + + + + + +
+
+
年轻人的第二台PC诞生
+
https://awaw.cc/post/my-second-pc/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2019年2月17日
+
+ + +
+
更新于
+
2023年12月28日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/net-loading/index.html b/post/net-loading/index.html new file mode 100644 index 0000000..2392c35 --- /dev/null +++ b/post/net-loading/index.html @@ -0,0 +1,885 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WinForm加载中窗体 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

WinForm加载中窗体

+ + +
+ +

最近项目中用有用到,就简单整了个,只有几行代码。

+ + +

预览图

+

调用示例

public partial class Main : Form
+{
+    public Main()
+    {
+        InitializeComponent();
+    }
+
+    private void button1_Click(object sender, EventArgs e)
+    {
+        //构造函数参数说明:
+        //work: 需要在新线程中执行的任务
+        //msg: 执行完成提示信息(为空时不提示)
+        //openDir: 执行完成后自动打开指定目录(为空时不打开)                
+        Loading loading = new Loading(DoSomething, 执行完成);
+
+        //不show的话 可以当作后台线程执行任务来用
+        loading.ShowDialog();
+    }
+
+    public void DoSomething()
+    {
+        Thread.Sleep(3000);
+    }
+}
+
+

源代下载

百度云

https://pan.baidu.com/s/1NzrZeNKqjlZxK__iXaGvwQ

+
+

提取码:npkt

+
+ + +
+ +
+
+ + + + + + +
+
+
WinForm加载中窗体
+
https://awaw.cc/post/net-loading/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2020年4月15日
+
+ + +
+
更新于
+
2023年7月14日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/openssl-csr/index.html b/post/openssl-csr/index.html new file mode 100644 index 0000000..daf6e33 --- /dev/null +++ b/post/openssl-csr/index.html @@ -0,0 +1,885 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OpenSSL生成多域名CSR - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

OpenSSL生成多域名CSR

+ + +
+ +

首先要选择证书颁发机构(CA),各大著名的证书颁发机构的多域名[1]、泛域名证书大多是需要收费的。目前发现亚洲诚信(TrustAsia)的免费证书支持双域名,而Let’s Encrypt的免费证书既支持多域名,同时也支持泛域名。

+ + +

申请证书需要用到CSR[2],直接在搜索引擎搜索CSR在线生成就可以很方便的生成,然后会得到一个CSR和一个KEY,前者是提交给证书颁发机构申请证书用的,后者是给服务器安装证书的时候用到的。

+

在实践过程中发现,网上大多数 CSR 生成工具都不支持填多个域名,熟悉OpenSSL的同学应该很容易就搞定了,但是对于像博主一样的小白来说,能有个工具再好不过了,这里分享一个支持多域名CSR的在线生成网站:https://certificatetools.com/newui/

+

CSR也可以使用OpenSSL生成,动手能力强的同学可以自己用工具离线生成。

+

配置文件

[ req ]
+default_md = sha256  
+prompt = no  
+req_extensions = req_ext  
+distinguished_name = req_distinguished_name
+[ req_distinguished_name ]
+0.commonName = pdoner.cn
+1.commonName = *.pdoner.cn
+countryName = CN
+stateOrProvinceName = Henan
+localityName = Zhengzhou
+organizationName = Pdone Technology
+[ req_ext ]
+keyUsage=critical,digitalSignature,keyEncipherment
+extendedKeyUsage=critical,serverAuth,clientAuth
+subjectAltName = @alt_names
+[ alt_names ]
+DNS.0 = pdoner.cn
+
+

**[1]**多域名证书,一说为SAN certificater(SubjectAltName Certificater),一说为Unified Communications Certificater(这个是微软的说法),已经迅速成为一种深受大家欢迎的证书,通过这种证书,可以方便部署Exchange, OCS 等经常有多个服务名的应用系统,此外也便于企业的网络管理人员对证书管理。

+

**[2]**CSR是Certificate Signing Request的英文缩写,即证书请求文件,也就是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,证书申请者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书。

+

相关资料

+ + +
+ +
+
+ + + + + + +
+
+
OpenSSL生成多域名CSR
+
https://awaw.cc/post/openssl-csr/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2018年9月15日
+
+ + +
+
更新于
+
2023年7月4日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/python-historytoday/index.html b/post/python-historytoday/index.html new file mode 100644 index 0000000..d7084b8 --- /dev/null +++ b/post/python-historytoday/index.html @@ -0,0 +1,861 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 用Python爬 历史的今天 数据 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

用Python爬 历史的今天 数据

+ + +
+ +

刚开始学习Python,试着写了一些东西,发现Python确实是非常容易上手,代码十分简短,并且有很多第三方库可以使用,同样的一种操作用别的语言可能需要10行代码,Python可能只要1行就能实现。

+ + +

我这里爬的是这个网站 www.lssdjt.com,类似的网站还有很多。由于我也是初学者,所以注释写的比代码多。

+

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from urllib import request
from bs4 import BeautifulSoup

# 初始化第一条要查的url
startUrl = "http://www.lssdjt.com/11/29"

# 打开一个txt用来保存爬到的数据
pageFile = open('historyTodayData.txt', 'w', encoding='utf-8')

# 获取数据 并返回下一天的url
def getdata(url):
# 请求url
page = request.urlopen(url)
# 获取数据流
pageStream = page.read()
# utf8解码
pageHtml = pageStream.decode('utf-8')
# 把页面转换成BeautifulSoup对象 具体使用方法 参考文末链接里的文档
soup = BeautifulSoup(pageHtml, "html.parser")
nextUrlClass = soup.find('ul', {'class': 'bot'}).find('li', {'class': 'r'})
next_url = nextUrlClass.a['href']
# print(next_url)
links = soup.find_all("a", class_="screenshot")
for link in links:
# 微信小程序云开发提供的数据库是JSON数据库 可以直接导入JSON文件或者CSV文件 这里把内容整理成CSV格式的方便导入云数据库
# title,date,month,day 导入云数据库时微信会自动给每条数据生成_id
print(link.i.string, link.em.string, link.em.string.split('年')[1].replace('月', ' ').replace('日', ''))
# 这里把数据行整理成我需要的格式
tempStrLine = link.i.string+' '+link.em.string+' ' + link.em.string.split('年')[1].replace('月', ' ').replace('日', '') + '\n'
# 这里开始把每行数据写到文件里
pageFile.writelines(tempStrLine)
return next_url

# 循环365次
for _ in range(365):
# 递归调用获取数据方法
startUrl = getdata(startUrl)

# 关闭文件
pageFile.close()
+ +

爬完的数据长下面这个样子,大概有一万多行,把列头title,date,month,day添加到第一行,文件扩展名改为csv就可以直接导入微信小程序云开发提供的数据库中了。

+

+

参考内容

BeautifulSoup中文文档

+ + +
+ +
+
+ + + + + + +
+
+
用Python爬 历史的今天 数据
+
https://awaw.cc/post/python-historytoday/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2018年11月29日
+
+ + +
+
更新于
+
2023年7月14日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/revit-category-all/index.html b/post/revit-category-all/index.html new file mode 100644 index 0000000..ac691d9 --- /dev/null +++ b/post/revit-category-all/index.html @@ -0,0 +1,5976 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BuildInCategory枚举 - 完整 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

BuildInCategory枚举 - 完整

+ + +
+ +

Revit二次开发中经常用到BuildInCategory过滤元素,以下是通过遍历该枚举获取的数据,其中部分类别的名称未能获取到,显示为Unknown,请悉知。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
中文名称名称
UnknownOST_StackedWalls_Obsolete_IdInWrongRange-20034100
UnknownOST_MassTags_Obsolete_IdInWrongRange-20034005
UnknownOST_MassSurface_Obsolete_IdInWrongRange-20034004
UnknownOST_MassFloor_Obsolete_IdInWrongRange-20034003
UnknownOST_Mass_Obsolete_IdInWrongRange-20034000
UnknownOST_WallRefPlanes_Obsolete_IdInWrongRange-20000896
UnknownOST_StickSymbols_Obsolete_IdInWrongRange-20000828
UnknownOST_RemovedGridSeg_Obsolete_IdInWrongRange-20000827
UnknownOST_PointClouds-2010001
UnknownOST_AssemblyOrigin_Lines-2009661
UnknownOST_AssemblyOrigin_Planes-2009660
UnknownOST_AssemblyOrigin_Points-2009659
UnknownOST_AssemblyOrigin-2009658
分析链接OST_LinksAnalytical-2009657
分析楼板基础标记OST_FoundationSlabAnalyticalTags-2009656
分析条形基础标记OST_WallFoundationAnalyticalTags-2009655
分析独立基础标记OST_IsolatedFoundationAnalyticalTags-2009654
分析墙标记OST_WallAnalyticalTags-2009653
分析楼层标记OST_FloorAnalyticalTags-2009652
分析柱标记OST_ColumnAnalyticalTags-2009651
分析支撑标记OST_BraceAnalyticalTags-2009650
分析梁标记OST_BeamAnalyticalTags-2009649
UnknownOST_AnalyticalNodes_Lines-2009648
UnknownOST_AnalyticalNodes_Planes-2009647
UnknownOST_AnalyticalNodes_Points-2009646
分析节点OST_AnalyticalNodes-2009645
UnknownOST_RigidLinksAnalytical-2009644
分析基础底板OST_FoundationSlabAnalytical-2009643
分析条形基础OST_WallFoundationAnalytical-2009642
分析独立基础OST_IsolatedFoundationAnalytical-2009641
分析墙OST_WallAnalytical-2009640
分析楼层OST_FloorAnalytical-2009639
顶部线段OST_ColumnEndSegment-2009638
基准线段OST_ColumnStartSegment-2009637
分析柱OST_ColumnAnalytical-2009636
末端线段OST_BraceEndSegment-2009635
起点线段OST_BraceStartSegment-2009634
分析支撑OST_BraceAnalytical-2009633
末端线段OST_BeamEndSegment-2009632
起点线段OST_BeamStartSegment-2009631
分析梁OST_BeamAnalytical-2009630
UnknownOST_CompassSecondaryMonth-2009624
UnknownOST_CompassPrimaryMonth-2009623
UnknownOST_CompassSectionFilled-2009622
UnknownOST_LightLine-2009621
UnknownOST_MultiSurface-2009620
UnknownOST_SunSurface-2009619
UnknownOST_Analemma-2009618
UnknownOST_SunsetText-2009617
UnknownOST_CompassSection-2009616
UnknownOST_CompassOuter-2009615
UnknownOST_SunriseText-2009614
UnknownOST_CompassInner-2009613
UnknownOST_SunPath2-2009612
UnknownOST_SunPath1-2009611
UnknownOST_Sun-2009610
UnknownOST_SunStudy-2009609
棍状符号OST_StructuralTrussStickSymbols-2009608
UnknownOST_StructuralTrussHiddenLines-2009607
UnknownOST_TrussChord-2009606
UnknownOST_TrussWeb-2009605
UnknownOST_TrussBottomChordCurve-2009604
UnknownOST_TrussTopChordCurve-2009603
UnknownOST_TrussVertWebCurve-2009602
UnknownOST_TrussDiagWebCurve-2009601
UnknownOST_Truss-2009600
UnknownOST_RailingSystemTransitionHiddenLines_Deprecated-2009549
UnknownOST_RailingSystemTerminationHiddenLines_Deprecated-20095
UnknownOST_RailingSystemRailHiddenLines_Deprecated-2009547
UnknownOST_RailingSystemTopRailHiddenLines_Deprecated-2009546
UnknownOST_RailingSystemHandRailBracketHiddenLines_Deprecated-2
UnknownOST_RailingSystemHandRailHiddenLines_Deprecated-2009544
UnknownOST_RailingSystemPanelBracketHiddenLines_Deprecated-2009
UnknownOST_RailingSystemPanelHiddenLines_Deprecated-2009542
UnknownOST_RailingSystemBalusterHiddenLines_Deprecated-2009541
UnknownOST_RailingSystemPostHiddenLines_Deprecated-2009540
UnknownOST_RailingSystemSegmentHiddenLines_Deprecated-2009539
UnknownOST_RailingSystemHiddenLines_Deprecated-2009538
UnknownOST_StairStringer2012HiddenLines_Deprecated-2009537
UnknownOST_StairTread2012HiddenLines_Deprecated-2009536
UnknownOST_StairLanding2012HiddenLines_Deprecated-2009535
UnknownOST_StairRun2012HiddenLines_Deprecated-2009534
UnknownOST_Stairs2012HiddenLines_Deprecated-2009533
隐藏线OST_MassHiddenLines-2009532
隐藏线OST_CurtaSystemHiddenLines-2009531
UnknownOST_OBSOLETE_ElemArrayHiddenLines-2009530
隐藏线OST_EntourageHiddenLines-2009529
隐藏线OST_PlantingHiddenLines-2009528
隐藏线OST_SpecialityEquipmentHiddenLines-2009527
隐藏线OST_TopographyHiddenLines-2009526
UnknownOST_StructuralFramingSystemHiddenLines_Obsolete-2009525
隐藏线OST_SiteHiddenLines-2009524
隐藏线OST_RoadsHiddenLines-2009523
隐藏线OST_ParkingHiddenLines-2009522
隐藏线OST_PlumbingFixturesHiddenLines-2009521
隐藏线OST_MechanicalEquipmentHiddenLines-2009520
隐藏线OST_LightingFixturesHiddenLines-2009519
隐藏线OST_FurnitureSystemsHiddenLines-2009518
隐藏线OST_ElectricalFixturesHiddenLines-2009517
隐藏线OST_ElectricalEquipmentHiddenLines-2009516
隐藏线OST_CaseworkHiddenLines-2009515
隐藏线OST_DetailComponentsHiddenLines-2009514
隐藏线OST_ShaftOpeningHiddenLines-2009513
隐藏线OST_GenericModelHiddenLines-2009512
隐藏线OST_CurtainWallMullionsHiddenLines-2009511
隐藏线OST_CurtainWallPanelsHiddenLines-2009510
隐藏线OST_RampsHiddenLines-2009509
隐藏线OST_StairsRailingHiddenLines-2009508
隐藏线OST_StairsHiddenLines-2009507
隐藏线OST_ColumnsHiddenLines-2009506
隐藏线OST_FurnitureHiddenLines-2009505
隐藏线OST_LinesHiddenLines-2009504
隐藏线OST_CeilingsHiddenLines-2009503
隐藏线OST_RoofsHiddenLines-2009502
隐藏线OST_DoorsHiddenLines-2009501
隐藏线OST_WindowsHiddenLines-2009500
轮廓标记OST_StructConnectionProfilesTags-2009064
孔标记OST_StructConnectionHoleTags-2009063
隐藏线OST_CouplerHiddenLines-2009062
结构钢筋接头标记OST_CouplerTags-2009061
结构钢筋接头OST_Coupler-2009060
焊接标记OST_StructConnectionWeldTags-2009059
剪力钉标记OST_StructConnectionShearStudTags-2009058
锚固件标记OST_StructConnectionAnchorTags-2009057
螺栓标记OST_StructConnectionBoltTags-2009056
板标记OST_StructConnectionPlateTags-2009055
隐藏线OST_RebarHiddenLines-2009050
UnknownOST_StructSubConnections-2009049
修改器OST_StructConnectionModifiers-2009047
焊缝OST_StructConnectionWelds-2009046
OST_StructConnectionHoles-2009045
剪力钉OST_StructConnectionShearStuds-2009044
UnknownOST_StructConnectionNobleWarning-2009043
其他OST_StructConnectionOthers-2009042
螺栓OST_StructConnectionBolts-2009041
结构连接标记OST_StructConnectionTags-2009040
锚固件OST_StructConnectionAnchors-2009039
平板OST_StructConnectionPlates-2009038
轮廓OST_StructConnectionProfiles-2009037
参照OST_StructConnectionReference-2009036
UnknownOST_StructConnectionFailed-2009035
UnknownOST_StructConnectionStale-2009034
符号OST_StructConnectionSymbol-2009033
隐藏线OST_StructConnectionHiddenLines-2009032
UnknownOST_StructWeldLines-2009031
结构连接OST_StructConnections-2009030
边界OST_FabricAreaBoundary-2009029
结构钢筋网符号OST_FabricReinSpanSymbol-2009028
钢筋网OST_FabricReinforcementWire-2009027
边界OST_FabricReinforcementBoundary-2009026
钢筋集切换OST_RebarSetToggle-2009025
UnknownOST_FabricAreaTags-2009023
结构钢筋网标记OST_FabricReinforcementTags-2009022
结构区域钢筋标记OST_AreaReinTags-2009021
结构钢筋标记OST_RebarTags-2009020
<钢筋网片>OST_FabricAreaSketchSheetsLines-2009019
<钢筋网外围>OST_FabricAreaSketchEnvelopeLines-2009018
结构钢筋网区域OST_FabricAreas-2009017
结构钢筋网OST_FabricReinforcement-2009016
钢筋保护层参照OST_RebarCover-2009015
UnknownOST_CoverType-2009014
钢筋形状OST_RebarShape-2009013
边界OST_PathReinBoundary-2009012
结构路径钢筋标记OST_PathReinTags-2009011
结构路径钢筋符号OST_PathReinSpanSymbol-2009010
结构路径钢筋OST_PathRein-2009009
UnknownOST_Cage-2009008
UnknownOST_AreaReinXVisibility-2009007
边界OST_AreaReinBoundary-2009006
结构区域钢筋符号OST_AreaReinSpanSymbol-2009005
UnknownOST_AreaReinSketchOverride-2009004
结构区域钢筋OST_AreaRein-2009003
UnknownOST_RebarLines-2009002
UnknownOST_RebarSketchLines-2009001
结构钢筋OST_Rebar-2009000
隔热层OST_FabricationPipeworkInsulation-2008221
内衬OST_FabricationDuctworkLining-2008220
OST_FabricationContainmentDrop-2008219
OST_FabricationContainmentRise-2008218
OST_FabricationPipeworkDrop-2008217
OST_FabricationPipeworkRise-2008216
符号OST_FabricationContainmentSymbology-2008215
中心线OST_FabricationContainmentCenterLine-2008214
MEP 预制保护层标记OST_FabricationContainmentTags-2008213
MEP 预制保护层OST_FabricationContainment-2008212
符号OST_FabricationPipeworkSymbology-2008211
中心线OST_FabricationPipeworkCenterLine-2008210
MEP 预制管道标记OST_FabricationPipeworkTags-2008209
MEP 预制管道OST_FabricationPipework-2008208
符号OST_FabricationDuctworkSymbology-2008207
OST_FabricationDuctworkDrop-2008206
OST_FabricationDuctworkRise-2008205
MEP 预制支架标记OST_FabricationHangerTags-2008204
MEP 预制支架OST_FabricationHangers-2008203
UnknownOST_OBSOLETE_FabricationPartsTmpGraphicDropDrag-200820
UnknownOST_FabricationPartsTmpGraphicDrag-2008201
UnknownOST_OBSOLETE_FabricationPartsTmpGraphicDrop-2008200
UnknownOST_FabricationPartsTmpGraphicEnd-2008199
隔热层OST_FabricationDuctworkInsulation-2008198
UnknownOST_LayoutNodes-2008197
中心线OST_FabricationDuctworkCenterLine-2008196
UnknownOST_FabricationServiceElements-2008195
MEP 预制管网标记OST_FabricationDuctworkTags-2008194
MEP 预制管网OST_FabricationDuctwork-2008193
UnknownOST_LayoutPathBase_Pipings-2008192
UnknownOST_NumberingSchemas-2008191
UnknownOST_DivisionRules-2008190
着色OST_gbXML_Shade-2008187
分析表面OST_AnalyticSurfaces-2008186
分析空间OST_AnalyticSpaces-2008185
空气洞口OST_gbXML_OpeningAir-2008184
非推拉门OST_gbXML_NonSlidingDoor-2008183
推拉门OST_gbXML_SlidingDoor-2008182
可操作天窗OST_gbXML_OperableSkylight-2008181
固定天窗OST_gbXML_FixedSkylight-2008180
可操作窗口OST_gbXML_OperableWindow-2008179
固定窗OST_gbXML_FixedWindow-2008178
地下天花板OST_gbXML_UndergroundCeiling-2008177
地下板OST_gbXML_UndergroundSlab-2008176
地下墙OST_gbXML_UndergroundWall-2008175
空气曲面OST_gbXML_SurfaceAir-2008174
天花板OST_gbXML_Ceiling-2008173
内部楼板OST_gbXML_InteriorFloor-2008172
内墙OST_gbXML_InteriorWall-2008171
平整表面上的板OST_gbXML_SlabOnGrade-2008170
活动楼板OST_gbXML_RaisedFloor-2008169
屋顶OST_gbXML_Roof-2008168
外墙OST_gbXML_ExteriorWall-2008167
UnknownOST_DivisionProfile-2008165
UnknownOST_SplitterProfile-2008164
管段OST_PipeSegments-2008163
UnknownOST_GraphicalWarning_OpenConnector-2008162
管道占位符OST_PlaceHolderPipes-2008161
风管占位符OST_PlaceHolderDucts-2008160
参照线OST_PipingSystem_Reference_Visibility-2008159
UnknownOST_PipingSystem_Reference-2008158
参照线OST_DuctSystem_Reference_Visibility-2008157
UnknownOST_DuctSystem_Reference-2008156
管道隔热层标记OST_PipeInsulationsTags-2008155
风管内衬标记OST_DuctLiningsTags-2008154
风管隔热层标记OST_DuctInsulationsTags-2008153
电气备件/空间电路OST_ElectricalInternalCircuits-2008152
配电盘明细表图形OST_PanelScheduleGraphics-2008151
电缆桥架管路OST_CableTrayRun-2008150
线管管路OST_ConduitRun-2008149
UnknownOST_ParamElemElectricalLoadClassification-2008148
UnknownOST_DataPanelScheduleTemplates-2008147
UnknownOST_SwitchboardScheduleTemplates-2008146
UnknownOST_BranchPanelScheduleTemplates-2008145
UnknownOST_ConduitStandards-2008144
UnknownOST_ElectricalLoadClassifications-2008143
UnknownOST_ElectricalDemandFactorDefinitions-2008142
中心线OST_ConduitFittingCenterLine-2008141
中心线OST_CableTrayFittingCenterLine-2008140
中心线OST_ConduitCenterLine-2008139
OST_ConduitDrop-2008138
OST_ConduitRiseDrop-2008137
中心线OST_CableTrayCenterLine-2008136
OST_CableTrayDrop-2008135
OST_CableTrayRiseDrop-2008134
线管标记OST_ConduitTags-2008133
线管OST_Conduit-2008132
电缆桥架标记OST_CableTrayTags-2008131
电缆桥架OST_CableTray-2008130
线管配件标记OST_ConduitFittingTags-2008129
线管配件OST_ConduitFitting-2008128
电缆桥架配件标记OST_CableTrayFittingTags-2008127
电缆桥架配件OST_CableTrayFitting-2008126
布管系统配置OST_RoutingPreferences-2008125
风管内衬OST_DuctLinings-2008124
风管隔热层OST_DuctInsulations-2008123
管道隔热层OST_PipeInsulations-2008122
UnknownOST_HVAC_Load_Schedules-2008121
UnknownOST_HVAC_Load_Building_Types-2008120
UnknownOST_HVAC_Load_Space_Types-2008119
参照线OST_HVAC_Zones_Reference_Visibility-2008118
内部填充OST_HVAC_Zones_InteriorFill_Visibility-2008117
颜色填充OST_HVAC_Zones_ColorFill-2008116
分区标记OST_ZoneTags-2008115
UnknownOST_LayoutPath_Bases-2008114
UnknownOST_WireTemperatureRatings-2008113
UnknownOST_WireInsulations-2008112
UnknownOST_WireMaterials-2008111
UnknownOST_HVAC_Zones_Reference-2008110
UnknownOST_HVAC_Zones_InteriorFill-2008109
边界OST_HVAC_Zones_Boundary-2008108
HVAC 区OST_HVAC_Zones-2008107
UnknownOST_Fluids-2008106
UnknownOST_PipeSchedules-2008105
UnknownOST_PipeMaterials-2008104
UnknownOST_PipeConnections-2008103
UnknownOST_EAConstructions-2008102
开关系统OST_SwitchSystem-2008101
喷头标记OST_SprinklerTags-2008100
喷头OST_Sprinklers-2008099
UnknownOST_RouteCurveBranch-2008098
UnknownOST_RouteCurveMain-2008097
UnknownOST_RouteCurve-2008096
洞口OST_GbXML_Opening-2008095
地下OST_GbXML_SType_Underground-2008094
着色OST_GbXML_SType_Shade-2008093
外部OST_GbXML_SType_Exterior-2008092
内部OST_GbXML_SType_Interior-2008091
分析表面OST_GbXMLFaces-2008090
回路方向OST_WireHomeRunArrows-2008089
灯具标记OST_LightingDeviceTags-2008088
灯具OST_LightingDevices-2008087
火警设备标记OST_FireAlarmDeviceTags-2008086
火警设备OST_FireAlarmDevices-2008085
数据设备标记OST_DataDeviceTags-2008084
数据设备OST_DataDevices-2008083
通讯设备标记OST_CommunicationDeviceTags-2008082
通讯设备OST_CommunicationDevices-2008081
安全设备标记OST_SecurityDeviceTags-2008080
安全设备OST_SecurityDevices-2008079
护理呼叫设备标记OST_NurseCallDeviceTags-2008078
护理呼叫设备OST_NurseCallDevices-2008077
电话设备标记OST_TelephoneDeviceTags-2008076
电话设备OST_TelephoneDevices-2008075
导线记号OST_WireTickMarks-2008074
UnknownOST_PipeFittingInsulation-2008073
中心线OST_PipeFittingCenterLine-2008072
UnknownOST_FlexPipeCurvesInsulation-2008071
UnknownOST_PipeCurvesInsulation-2008070
OST_PipeCurvesDrop-2008069
UnknownOST_DuctFittingLining-2008068
UnknownOST_DuctFittingInsulation-2008067
中心线OST_DuctFittingCenterLine-2008066
UnknownOST_FlexDuctCurvesInsulation-2008065
UnknownOST_DuctCurvesLining-2008064
UnknownOST_DuctCurvesInsulation-2008063
OST_DuctCurvesDrop-2008062
风管管件标记OST_DuctFittingTags-2008061
管件标记OST_PipeFittingTags-2008060
管道颜色填充OST_PipeColorFills-2008059
管道颜色填充图例OST_PipeColorFillLegends-2008058
导线标记OST_WireTags-2008057
管道附件标记OST_PipeAccessoryTags-2008056
管道附件OST_PipeAccessory-2008055
OST_PipeCurvesRiseDrop-2008054
填充图案OST_FlexPipeCurvesPattern-2008053
UnknownOST_FlexPipeCurvesContour-2008052
中心线OST_FlexPipeCurvesCenterLine-2008051
软管OST_FlexPipeCurves-2008050
管件OST_PipeFitting-2008049
软管标记OST_FlexPipeTags-2008048
管道标记OST_PipeTags-2008047
UnknownOST_PipeCurvesContour-2008046
中心线OST_PipeCurvesCenterLine-2008045
管道OST_PipeCurves-2008044
管道系统OST_PipingSystem-2008043
UnknownOST_ElectricalDemandFactor-2008042
UnknownOST_ElecDistributionSys-2008041
UnknownOST_ElectricalVoltage-2008040
导线OST_Wire-2008039
UnknownOST_ElectricalCircuitTags-2008038
电路OST_ElectricalCircuit-2008037
OST_DuctCurvesRiseDrop-2008036
填充图案OST_FlexDuctCurvesPattern-2008023
UnknownOST_FlexDuctCurvesContour-2008022
中心线OST_FlexDuctCurvesCenterLine-2008021
软风管OST_FlexDuctCurves-2008020
风管附件标记OST_DuctAccessoryTags-2008017
风管附件OST_DuctAccessory-2008016
风管系统OST_DuctSystem-2008015
风道末端标记OST_DuctTerminalTags-2008014
风道末端OST_DuctTerminal-2008013
风管管件OST_DuctFitting-2008010
风管颜色填充OST_DuctColorFills-2008005
软风管标记OST_FlexDuctTags-2008004
风管标记OST_DuctTags-2008003
UnknownOST_DuctCurvesContour-2008002
中心线OST_DuctCurvesCenterLine-2008001
风管OST_DuctCurves-2008000
风管颜色填充图例OST_DuctColorFillLegends-2007004
UnknownOST_ConnectorElemZAxis-2007003
UnknownOST_ConnectorElemYAxis-2007002
UnknownOST_ConnectorElemXAxis-2007001
UnknownOST_ConnectorElem-2007000
UnknownOST_BridgeBearingTags-2006178
UnknownOST_BridgeGirderTags-2006177
UnknownOST_BridgeFoundationTags-2006176
UnknownOST_BridgeDeckTags-2006175
UnknownOST_BridgeArchTags-2006174
UnknownOST_BridgeCableTags-2006173
UnknownOST_BridgeTowerTags-2006172
UnknownOST_BridgePierTags-2006171
UnknownOST_BridgeAbutmentTags-2006170
UnknownOST_BridgeBearingHiddenLines-2006158
UnknownOST_BridgeGirderHiddenLines-2006157
UnknownOST_BridgeFoundationHiddenLines-2006156
UnknownOST_BridgeDeckHiddenLines-2006155
UnknownOST_BridgeArchHiddenLines-2006154
UnknownOST_BridgeCableHiddenLines-2006153
UnknownOST_BridgeTowerHiddenLines-2006152
UnknownOST_BridgePierHiddenLines-2006151
UnknownOST_BridgeAbutmentHiddenLines-2006150
桥梁支座OST_BridgeBearings-2006138
桥梁大梁OST_BridgeGirders-2006137
桥梁基础OST_BridgeFoundations-2006136
桥面OST_BridgeDecks-2006135
桥拱OST_BridgeArches-2006134
桥梁缆索OST_BridgeCables-2006133
桥塔OST_BridgeTowers-2006132
桥墩OST_BridgePiers-2006131
桥台OST_BridgeAbutments-2006130
UnknownOST_DesignOptions-2006114
UnknownOST_DesignOptionSets-2006112
平面视图中的支撑符号OST_StructuralBracePlanReps-2006110
连接符号OST_StructConnectionSymbols-2006100
结构注释OST_StructuralAnnotations-2006090
云线批注标记OST_RevisionCloudTags-2006080
UnknownOST_Revisions-2006070
云线批注OST_RevisionClouds-2006060
UnknownOST_EditCutProfile-2006050
立面标记OST_ElevationMarks-2006045
轴网标头OST_GridHeads-2006040
标高标头OST_LevelHeads-2006020
UnknownOST_DecalType-2006002
UnknownOST_DecalElement-2006001
范围框OST_VolumeOfInterest-2006000
边界条件OST_BoundaryConditions-2005301
内部面荷载标记OST_InternalAreaLoadTags-2005255
内部线荷载标记OST_InternalLineLoadTags-2005254
内部点荷载标记OST_InternalPointLoadTags-2005253
面荷载标记OST_AreaLoadTags-2005252
线荷载标记OST_LineLoadTags-2005251
点荷载标记OST_PointLoadTags-2005250
地震荷载OST_LoadCasesSeismic-2005218
温度荷载OST_LoadCasesTemperature-2005217
偶然荷载OST_LoadCasesAccidental-2005216
屋顶活荷载OST_LoadCasesRoofLive-2005215
雪荷载OST_LoadCasesSnow-2005214
风荷载OST_LoadCasesWind-2005213
活荷载OST_LoadCasesLive-2005212
恒荷载OST_LoadCasesDead-2005211
结构荷载工况OST_LoadCases-2005210
内部面荷载OST_InternalAreaLoads-2005207
内部线荷载OST_InternalLineLoads-2005206
内部点荷载OST_InternalPointLoads-2005205
结构内部荷载OST_InternalLoads-2005204
面荷载OST_AreaLoads-2005203
线荷载OST_LineLoads-2005202
点荷载OST_PointLoads-2005201
结构荷载OST_Loads-2005200
结构梁系统标记OST_BeamSystemTags-2005130
基础跨方向符号OST_FootingSpanDirectionSymbol-2005111
跨方向符号OST_SpanDirectionSymbol-2005110
UnknownOST_SpotSlopesSymbols-2005102
UnknownOST_SpotCoordinateSymbols-2005101
高程点符号OST_SpotElevSymbols-2005100
UnknownOST_StructuralConnectionHandlerTags_Deprecated-2005031
结构桁架标记OST_TrussTags-2005030
注释记号标记OST_KeynoteTags-2005029
详图项目标记OST_DetailComponentTags-2005028
材质标记OST_MaterialTags-2005027
楼板标记OST_FloorTags-2005026
幕墙系统标记OST_CurtaSystemTags-2005025
UnknownOST_HostFinTags-2005024
楼梯标记OST_StairsTags-2005023
多类别标记OST_MultiCategoryTags-2005022
植物标记OST_PlantingTags-2005021
面积标记OST_AreaTags-2005020
结构基础标记OST_StructuralFoundationTags-2005019
结构柱标记OST_StructuralColumnTags-2005018
停车场标记OST_ParkingTags-2005017
场地标记OST_SiteTags-2005016
结构框架标记OST_StructuralFramingTags-2005015
专用设备标记OST_SpecialityEquipmentTags-2005014
常规模型标记OST_GenericModelTags-2005013
幕墙嵌板标记OST_CurtainWallPanelTags-2005012
墙标记OST_WallTags-2005011
卫浴装置标记OST_PlumbingFixtureTags-2005010
机电设备标记OST_MechanicalEquipmentTags-2005009
照明设备标记OST_LightingFixtureTags-2005008
家具系统标记OST_FurnitureSystemTags-2005007
家具标记OST_FurnitureTags-2005006
电气装置标记OST_ElectricalFixtureTags-2005004
电气设备标记OST_ElectricalEquipmentTags-2005003
天花板标记OST_CeilingTags-2005002
橱柜标记OST_CaseworkTags-2005001
UnknownOST_Tags-2005000
颜色填充OST_MEPSpaceColorFill-2003605
UnknownOST_MEPSpaceReference-2003604
UnknownOST_MEPSpaceInteriorFill-2003603
参照OST_MEPSpaceReferenceVisibility-2003602
内墙OST_MEPSpaceInteriorFillVisibility-2003601
空间OST_MEPSpaces-2003600
UnknownOST_StackedWalls-2003500
UnknownOST_MassGlazingAll-2003423
UnknownOST_MassFloorsAll-2003422
UnknownOST_MassWallsAll-2003421
UnknownOST_MassExteriorWallUnderground-2003420
UnknownOST_MassSlab-2003419
体量着色OST_MassShade-2003418
体量洞口OST_MassOpening-2003417
体量天窗OST_MassSkylights-2003416
体量玻璃OST_MassGlazing-2003415
体量屋顶OST_MassRoof-2003414
体量外墙OST_MassExteriorWall-2003413
体量内墙OST_MassInteriorWall-2003412
体量分区OST_MassZone-2003411
体量楼层标记OST_MassAreaFaceTags-2003410
UnknownOST_HostTemplate-2003409
UnknownOST_MassFaceSplitter-2003408
UnknownOST_MassCutter-2003407
UnknownOST_ZoningEnvelope-2003406
体量标记OST_MassTags-2003405
形式OST_MassForm-2003404
体量楼层OST_MassFloor-2003403
体量OST_Mass-2003400
UnknownOST_DividedSurface_DiscardedDivisionLines-2003333
UnknownOST_DividedSurfaceBelt-2003332
UnknownOST_TilePatterns-2003331
UnknownOST_AlwaysExcludedInAllViews-2003330
UnknownOST_DividedSurface_TransparentFace-2003329
UnknownOST_DividedSurface_PreDividedSurface-2003328
图案填充OST_DividedSurface_PatternFill-2003327
填充图案线OST_DividedSurface_PatternLines-2003326
网格线OST_DividedSurface_Gridlines-2003325
节点OST_DividedSurface_Nodes-2003324
UnknownOST_DividedSurface-2003323
UnknownOST_RepeatingDetailLines-2003321
向下箭头OST_RampsDownArrow-2003308
向上箭头OST_RampsUpArrow-2003307
文字(向下)OST_RampsDownText-2003306
文字(向上)OST_RampsUpText-2003305
超出截面线的梯边梁OST_RampsStringerAboveCut-2003304
梯边梁OST_RampsStringer-2003303
坡道超出截面线OST_RampsAboveCut-2003302
UnknownOST_RampsIncomplete-2003301
UnknownOST_TrussDummy-2003300
UnknownOST_ZoneSchemes-2003225
UnknownOST_AreaSchemes-2003201
面积OST_Areas-2003200
项目信息OST_ProjectInformation-2003101
图纸OST_Sheets-2003100
UnknownOST_ProfileFamilies-2003000
详图项目OST_DetailComponents-2002000
屋檐底板OST_RoofSoffit-2001393
楼板边缘OST_EdgeSlab-2001392
檐沟OST_Gutter-2001391
封檐板OST_Fascia-2001390
环境OST_Entourage-2001370
植物OST_Planting-2001360
UnknownOST_Blocks-2001359
隐藏线OST_StructuralStiffenerHiddenLines-2001358
定位线OST_StructuralColumnLocationLine-2001357
定位线OST_StructuralFramingLocationLine-2001356
结构加强板标记OST_StructuralStiffenerTags-2001355
结构加强板OST_StructuralStiffener-2001354
UnknownOST_FootingAnalyticalGeometry-2001353
RVT 链接OST_RvtLinks-2001352
UnknownOST_Automatic-2001351
专用设备OST_SpecialityEquipment-2001350
刚性链接OST_ColumnAnalyticalRigidLinks-2001344
次等高线OST_SecondaryTopographyContours-2001343
主等高线OST_TopographyContours-2001342
三角形边缘OST_TopographySurface-2001341
地形OST_Topography-2001340
地形链接OST_TopographyLink-2001339
结构桁架OST_StructuralTruss-2001336
棍状符号OST_StructuralColumnStickSymbols-2001335
隐藏线OST_HiddenStructuralColumnLines-2001334
刚性链接OST_AnalyticalRigidLinks-2001333
UnknownOST_ColumnAnalyticalGeometry-2001332
UnknownOST_FramingAnalyticalGeometry-2001331
结构柱OST_StructuralColumns-2001330
隐藏线OST_HiddenStructuralFramingLines-2001329
UnknownOST_KickerBracing-2001328
结构梁系统OST_StructuralFramingSystem-2001327
UnknownOST_VerticalBracing-2001326
UnknownOST_HorizontalBracing-2001325
UnknownOST_Purlin-2001324
UnknownOST_Joist-2001323
UnknownOST_Girder-2001322
UnknownOST_StructuralFramingOther-2001321
结构框架OST_StructuralFraming-2001320
隐藏线OST_HiddenStructuralFoundationLines-2001302
结构基础OST_StructuralFoundation-2001300
UnknownOST_BasePointAxisZ-2001275
UnknownOST_BasePointAxisY-2001274
UnknownOST_BasePointAxisX-2001273
测量点OST_SharedBasePoint-2001272
项目基点OST_ProjectBasePoint-2001271
UnknownOST_SiteRegion-2001270
建筑红线线段标记OST_SitePropertyLineSegmentTags-2001269
建筑红线线段OST_SitePropertyLineSegment-2001268
属性标记OST_SitePropertyTags-2001267
边界点OST_SitePointBoundary-2001266
建筑红线OST_SiteProperty-2001265
建筑地坪OST_BuildingPad-2001263
内部点OST_SitePoint-2001262
UnknownOST_SiteSurface-2001261
场地OST_Site-2001260
UnknownOST_Sewer-2001240
道路OST_Roads-2001220
UnknownOST_Property-2001200
停车场OST_Parking-2001180
卫浴装置OST_PlumbingFixtures-2001160
机械设备OST_MechanicalEquipment-2001140
光源OST_LightingFixtureSource-2001121
照明设备OST_LightingFixtures-2001120
家具系统OST_FurnitureSystems-2001100
电气装置OST_ElectricalFixtures-2001060
电气设备OST_ElectricalEquipment-2001040
橱柜OST_Casework-2001000
UnknownOST_ArcWallRectOpening-2000999
UnknownOST_DormerOpeningIncomplete-2000998
UnknownOST_SWallRectOpening-2000997
竖井洞口OST_ShaftOpening-2000996
UnknownOST_StructuralFramingOpening-2000995
UnknownOST_ColumnOpening-2000994
UnknownOST_RiseDropSymbols-2000989
水力分离符号OST_PipeHydronicSeparationSymbols-2000988
机械设备集边界线OST_MechanicalEquipmentSetBoundaryLines-2000987
机械设备集标记OST_MechanicalEquipmentSetTags-2000986
机械设备集OST_MechanicalEquipmentSet-2000985
连接线符号OST_AnalyticalPipeConnectionLineSymbol-2000984
分析管道连接OST_AnalyticalPipeConnections-2000983
UnknownOST_Coordination_Model-2000982
UnknownOST_MultistoryStairs-2000980
UnknownOST_HiddenStructuralConnectionLines_Deprecated-2000979
UnknownOST_StructuralConnectionHandler_Deprecated-2000978
UnknownOST_CoordinateSystem-2000977
局部坐标系OST_FndSlabLocalCoordSys-2000976
局部坐标系OST_FloorLocalCoordSys-2000975
局部坐标系OST_WallLocalCoordSys-2000974
局部坐标系OST_BraceLocalCoordSys-2000973
局部坐标系OST_ColumnLocalCoordSys-2000972
局部坐标系OST_BeamLocalCoordSys-2000971
多钢筋注释OST_MultiReferenceAnnotations-2000970
UnknownOST_DSR_LeaderTickMarkStyleId-2000969
UnknownOST_DSR_InteriorTickMarkStyleId-2000968
UnknownOST_DSR_ArrowHeadStyleId-2000967
UnknownOST_DSR_CenterlineTickMarkStyleId-2000966
UnknownOST_DSR_CenterlinePatternCatId-2000965
UnknownOST_DSR_DimStyleHeavyEndCategoryId-2000964
UnknownOST_DSR_DimStyleHeavyEndCatId-2000963
UnknownOST_DSR_DimStyleTickCategoryId-2000962
UnknownOST_DSR_LineAndTextAttrFontId-2000961
UnknownOST_DSR_LineAndTextAttrCategoryId-2000960
分析节点标记OST_NodeAnalyticalTags-2000956
分析链接标记OST_LinkAnalyticalTags-2000955
UnknownOST_RailingRailPathExtensionLines-2000954
UnknownOST_RailingRailPathLines-2000953
支撑OST_StairsSupports-2000952
<高于> 扶手OST_RailingHandRailAboveCut-2000951
<高于> 顶部扶栏OST_RailingTopRailAboveCut-2000950
终端OST_RailingTermination-2000949
支座OST_RailingSupport-2000948
扶手OST_RailingHandRail-2000947
顶部扶栏OST_RailingTopRail-2000946
UnknownOST_StairsSketchPathLines-2000945
楼梯踏板/踢面数OST_StairsTriserNumbers-2000944
UnknownOST_StairsTriserTags-2000943
楼梯支撑标记OST_StairsSupportTags-2000942
楼梯平台标记OST_StairsLandingTags-2000941
楼梯梯段标记OST_StairsRunTags-2000940
<高于> 向上箭头OST_StairsPathsAboveCut-2000939
楼梯路径OST_StairsPaths-2000938
<高于> 踢面线OST_StairsRiserLinesAboveCut-2000937
踢面线OST_StairsRiserLines-2000936
<高于> 轮廓OST_StairsOutlinesAboveCut-2000935
轮廓OST_StairsOutlines-2000934
<高于> 楼梯前缘线OST_StairsNosingLinesAboveCut-2000933
楼梯前缘线OST_StairsNosingLines-2000932
<高于> 剪切标记OST_StairsCutMarksAboveCut-2000931
剪切标记OST_StairsCutMarks-2000930
UnknownOST_ComponentRepeaterSlot-2000928
UnknownOST_ComponentRepeater-2000927
UnknownOST_DividedPath-2000926
UnknownOST_IOSRoomCalculationPoint-2000925
UnknownOST_PropertySet-2000924
UnknownOST_AppearanceAsset-2000923
UnknownOST_StairStringer2012_Deprecated-2000922
踢面/踏板OST_StairsTrisers-2000921
平台OST_StairsLandings-2000920
梯段OST_StairsRuns-2000919
UnknownOST_Stair2012_Deprecated-2000918
UnknownOST_RailingSystemTags-2000917
UnknownOST_RailingSystemTransition-2000916
UnknownOST_RailingSystemTermination-2000915
UnknownOST_RailingSystemRail-2000914
UnknownOST_RailingSystemTopRail-2000913
UnknownOST_RailingSystemHandRailBracket-2000912
UnknownOST_RailingSystemHandRail-2000911
UnknownOST_RailingSystemHardware-2000910
UnknownOST_RailingSystemPanel-2000909
UnknownOST_RailingSystemBaluster-2000908
UnknownOST_RailingSystemPost-2000907
UnknownOST_RailingSystemSegment-2000906
UnknownOST_RailingSystem-2000905
UnknownOST_AdaptivePoints_HiddenLines-2000904
线OST_AdaptivePoints_Lines-2000903
平面OST_AdaptivePoints_Planes-2000902
OST_AdaptivePoints_Points-2000901
自适应点OST_AdaptivePoints-2000900
UnknownOST_CeilingOpening-2000899
UnknownOST_FloorOpening-2000898
UnknownOST_RoofOpening-2000897
UnknownOST_WallRefPlanes-2000896
UnknownOST_StructLocationLineControl-2000880
UnknownOST_DimLockControlLeader-2000832
<空间分隔>OST_MEPSpaceSeparationLines-2000831
UnknownOST_AreaPolylines-2000830
UnknownOST_RoomPolylines-2000829
UnknownOST_InstanceDrivenLineStyle-2000828
UnknownOST_RemovedGridSeg-2000827
UnknownOST_IOSOpening-2000810
UnknownOST_IOSTilePatternGrid-2000800
UnknownOST_ControlLocal-2000774
UnknownOST_ControlAxisZ-2000773
UnknownOST_ControlAxisY-2000772
UnknownOST_ControlAxisX-2000721
UnknownOST_XRayConstrainedProfileEdge-2000720
UnknownOST_XRayImplicitPathCurve-2000719
UnknownOST_XRayPathPoint-2000718
UnknownOST_XRayPathCurve-2000717
UnknownOST_XRaySideEdge-2000716
UnknownOST_XRayProfileEdge-2000715
UnknownOST_ReferencePoints_HiddenLines-2000714
线OST_ReferencePoints_Lines-2000713
平面OST_ReferencePoints_Planes-2000712
OST_ReferencePoints_Points-2000711
参照点OST_ReferencePoints-2000710
材质OST_Materials-2000700
截面填充图案OST_CeilingsCutPattern-2000617
公共边OST_CeilingsDefault-2000616
面层 2 [5]OST_CeilingsFinish2-2000615
面层 1 [4]OST_CeilingsFinish1-2000614
衬底 [2]OST_CeilingsSubstrate-2000613
保温层/空气层 [3]OST_CeilingsInsulation-2000612
结构 [1]OST_CeilingsStructure-2000611
涂膜层OST_CeilingsMembrane-2000610
内部边缘OST_FloorsInteriorEdges-2000609
截面填充图案OST_FloorsCutPattern-2000608
隐藏线OST_HiddenFloorLines-2000607
公共边OST_FloorsDefault-2000606
面层 2 [5]OST_FloorsFinish2-2000605
面层 1 [4]OST_FloorsFinish1-2000604
衬底 [2]OST_FloorsSubstrate-2000603
保温层/空气层 [3]OST_FloorsInsulation-2000602
结构 [1]OST_FloorsStructure-2000601
涂膜层OST_FloorsMembrane-2000600
内部边缘OST_RoofsInteriorEdges-2000598
截面填充图案OST_RoofsCutPattern-2000597
公共边OST_RoofsDefault-2000596
面层 2 [5]OST_RoofsFinish2-2000595
面层 1 [4]OST_RoofsFinish1-2000594
衬底 [2]OST_RoofsSubstrate-2000593
保温层/空气层 [3]OST_RoofsInsulation-2000592
结构 [1]OST_RoofsStructure-2000591
涂膜层OST_RoofsMembrane-2000590
截面填充图案OST_WallsCutPattern-2000588
隐藏线OST_HiddenWallLines-2000587
公共边OST_WallsDefault-2000586
面层 2 [5]OST_WallsFinish2-2000585
面层 1 [4]OST_WallsFinish1-2000584
衬底 [2]OST_WallsSubstrate-2000583
保温层/空气层 [3]OST_WallsInsulation-2000582
结构 [1]OST_WallsStructure-2000581
涂膜层OST_WallsMembrane-2000580
UnknownOST_PreviewLegendComponents-2000576
UnknownOST_LegendComponents-2000575
明细表OST_Schedules-2000573
明细表图形OST_ScheduleGraphics-2000570
光栅图像OST_RasterImages-2000560
UnknownOST_ColorFillSchema-2000552
颜色填充OST_RoomColorFill-2000551
颜色填充图例OST_ColorFillLegends-2000550
注释裁剪边界OST_AnnotationCropSpecial-2000549
裁剪边界OST_CropBoundarySpecial-2000548
注释裁剪边界OST_AnnotationCrop-2000547
UnknownOST_FloorsAnalyticalGeometry-2000546
UnknownOST_WallsAnalyticalGeometry-2000545
详图索引引线OST_CalloutLeaderLine-2000544
表面填充图案OST_CeilingsSurfacePattern-2000543
表面填充图案OST_RoofsSurfacePattern-2000542
表面填充图案OST_FloorsSurfacePattern-2000541
表面填充图案OST_WallsSurfacePattern-2000540
详图索引边界OST_CalloutBoundary-2000539
详图索引标头OST_CalloutHeads-2000538
详图索引OST_Callouts-2000537
裁剪边界OST_CropBoundary-2000536
立面OST_Elev-2000535
UnknownOST_AxisZ-2000533
UnknownOST_AxisY-2000532
UnknownOST_AxisX-2000531
参照平面OST_CLines-2000530
UnknownOST_Lights-2000520
视图标题OST_ViewportLabel-2000515
视口OST_Viewports-2000510
相机OST_Camera_Lines-2000501
UnknownOST_Cameras-2000500
空间标记OST_MEPSpaceTags-2000485
房间标记OST_RoomTags-2000480
门标记OST_DoorTags-2000460
窗标记OST_WindowTags-2000450
宽线OST_SectionHeadWideLines-2000404
中粗线OST_SectionHeadMediumLines-2000403
细线OST_SectionHeadThinLines-2000401
剖面标头OST_SectionHeads-2000400
等高线标签OST_ContourLabels-2000350
UnknownOST_CurtaSystemFaceManager-2000341
幕墙系统OST_CurtaSystem-2000340
UnknownOST_AreaReport_Arc_Minus-2000328
UnknownOST_AreaReport_Arc_Plus-2000327
UnknownOST_AreaReport_Boundary-2000326
UnknownOST_AreaReport_Triangle-2000325
幕墙系统网格OST_CurtainGridsCurtaSystem-2000323
UnknownOST_CurtainGridsSystem-2000322
幕墙网格OST_CurtainGridsWall-2000321
幕墙屋顶网格OST_CurtainGridsRoof-2000320
UnknownOST_HostFinHF-2000315
UnknownOST_HostFinWall-2000314
UnknownOST_HostFinCeiling-2000313
UnknownOST_HostFinRoof-2000312
UnknownOST_HostFinFloor-2000311
UnknownOST_HostFin-2000310
分析显示样式OST_AnalysisDisplayStyle-2000304
分析结果OST_AnalysisResults-2000303
渲染区域OST_RenderRegions-2000302
剖面框OST_SectionBox-2000301
文字注释OST_TextNotes-2000300
UnknownOST_Divisions-2000291
UnknownOST_Catalogs-2000290
UnknownOST_DirectionEdgeLines-2000289
<中心线>OST_CenterLines-2000288
<超出>OST_LinesBeyond-2000287
<隐藏>OST_HiddenLines-2000286
<已拆除>OST_DemolishedLines-2000285
<架空线>OST_OverheadLines-2000284
宽线OST_TitleBlockWideLines-2000283
中粗线OST_TitleBlockMediumLines-2000282
细线OST_TitleBlockThinLines-2000281
图框OST_TitleBlocks-2000280
视图OST_Views-2000279
UnknownOST_Viewers-2000278
隐藏线OST_PartHiddenLines-2000271
零件标记OST_PartTags-2000270
组成部分OST_Parts-2000269
部件标记OST_AssemblyTags-2000268
部件OST_Assemblies-2000267
屋顶标记OST_RoofTags-2000266
高程点坡度OST_SpotSlopes-2000265
高程点坐标OST_SpotCoordinates-2000264
高程点OST_SpotElevations-2000263
UnknownOST_Constraints-2000262
自动绘制尺寸标注OST_WeakDims-2000261
尺寸标注OST_Dimensions-2000260
标高OST_Levels-2000240
位移路径OST_DisplacementPath-2000223
UnknownOST_DisplacementElements-2000222
多段轴网OST_GridChains-2000221
轴网OST_Grids-2000220
断开剖面线OST_BrokenSectionLine-2000202
剖面线OST_SectionLine-2000201
剖面OST_Sections-2000200
视图参照OST_ReferenceViewer-2000198
视图参照OST_ReferenceViewerSymbol-2000197
在族中导入OST_ImportObjectStyles-2000196
UnknownOST_ModelText-2000195
遮罩区域OST_MaskingRegion-2000194
拼接线OST_Matchline-2000193
UnknownOST_FaceSplitter-2000192
平面区域OST_PlanRegion-2000191
填充区域OST_FilledRegion-2000190
UnknownOST_MassingProjectionOutlines-2000187
UnknownOST_MassingCutOutlines-2000186
UnknownOST_Massing-2000185
UnknownOST_Reveals-2000182
墙饰条OST_Cornices-2000181
坡道OST_Ramps-2000180
UnknownOST_RailingBalusterRailCut-2000177
UnknownOST_RailingBalusterRail-2000176
UnknownOST_Railings-2000175
幕墙网格OST_CurtainGrids-2000173
UnknownOST_CurtainWallMullionsCut-2000172
幕墙竖梃OST_CurtainWallMullions-2000171
幕墙嵌板OST_CurtainWallPanels-2000170
UnknownOST_AreaReference-2000169
UnknownOST_AreaInteriorFill-2000168
UnknownOST_RoomReference-2000167
UnknownOST_RoomInteriorFill-2000166
颜色填充OST_AreaColorFill-2000165
参照OST_AreaReferenceVisibility-2000164
内部填充OST_AreaInteriorFillVisibility-2000163
参照OST_RoomReferenceVisibility-2000162
内部填充OST_RoomInteriorFillVisibility-2000161
房间OST_Rooms-2000160
常规模型OST_GenericModel-2000151
常规注释OST_GenericAnnotation-2000150
UnknownOST_Fixtures-2000140
栏杆扶手标记OST_StairsRailingTags-2000133
<高于> 栏杆扶手截面线OST_StairsRailingAboveCut-2000132
向下箭头OST_StairsDownArrows-2000131
向上箭头OST_StairsUpArrows-2000130
文字(向下)OST_StairsDownText-2000129
扶栏OST_StairsRailingRail-2000128
栏杆OST_StairsRailingBaluster-2000127
栏杆扶手OST_StairsRailing-2000126
文字(向上)OST_StairsUpText-2000125
<高于> 支撑OST_StairsSupportsAboveCut-2000124
支撑OST_StairsStringerCarriage-2000123
UnknownOST_StairsAboveCut_ToBeDeprecated-2000122
UnknownOST_StairsIncomplete_Deprecated-2000121
楼梯OST_Stairs-2000120
UnknownOST_IOSNavWheelPivotBall-2000117
UnknownOST_IOSRoomComputationHeight-2000116
UnknownOST_IOSRoomUpperLowerLines-2000115
UnknownOST_IOSDragBoxInverted-2000114
UnknownOST_IOSDragBox-2000113
UnknownOST_Phases-2000112
UnknownOST_IOS_GeoSite-2000111
UnknownOST_IOS_GeoLocations-2000110
UnknownOST_IOSFabricReinSpanSymbolCtrl-2000109
导向轴网OST_GuideGrid-2000107
UnknownOST_EPS_Future-2000106
UnknownOST_EPS_Temporary-2000105
UnknownOST_EPS_New-2000104
UnknownOST_EPS_Demolished-2000103
UnknownOST_EPS_Existing-2000102
UnknownOST_IOSMeasureLineScreenSize-2000101
OST_Columns-2000100
UnknownOST_IOSRebarSystemSpanSymbolCtrl-2000099
UnknownOST_IOSRoomTagToRoomLines-2000098
UnknownOST_IOSAttachedDetailGroups-2000097
UnknownOST_IOSDetailGroups-2000096
模型组OST_IOSModelGroups-2000095
UnknownOST_IOSSuspendedSketch-2000094
UnknownOST_IOSWallCoreBoundary-2000093
UnknownOST_IOSMeasureLine-2000092
UnknownOST_IOSArrays-2000091
UnknownOST_Curtain_Systems-2000090
UnknownOST_IOSBBoxScreenSize-2000089
UnknownOST_IOSSlabShapeEditorPointInterior-2000088
UnknownOST_IOSSlabShapeEditorPointBoundary-2000087
UnknownOST_IOSSlabShapeEditorBoundary-2000086
UnknownOST_IOSSlabShapeEditorAutoCrease-2000085
UnknownOST_IOSSlabShapeEditorExplitCrease-2000084
参照线OST_ReferenceLines-2000083
UnknownOST_IOSNotSilhouette-2000082
UnknownOST_FillPatterns-2000081
家具OST_Furniture-2000080
<面积边界>OST_AreaSchemeLines-2000079
线OST_GenericLines-2000078
隔热层线OST_InsulationLines-2000077
UnknownOST_CloudLines-2000076
UnknownOST_IOSRoomPerimeterLines-2000075
UnknownOST_IOSCuttingGeometry-2000074
UnknownOST_IOSCrashGraphics-2000073
UnknownOST_IOSGroups-2000072
UnknownOST_IOSGhost-2000071
UnknownOST_StairsSketchLandingCenterLines-2000070
UnknownOST_StairsSketchRunLines-2000069
UnknownOST_StairsSketchRiserLines-2000068
UnknownOST_StairsSketchBoundaryLines-2000067
<房间分隔>OST_RoomSeparationLines-2000066
旋转轴OST_AxisOfRotation-2000065
UnknownOST_InvisibleLines-2000064
UnknownOST_IOSThinPixel_DashDot-2000063
UnknownOST_IOSThinPixel_Dash-2000062
UnknownOST_IOSThinPixel_Dot-2000061
UnknownOST_Extrusions-2000060
UnknownOST_IOS-2000059
UnknownOST_CutOutlines-2000058
UnknownOST_IOSThinPixel-2000057
UnknownOST_IOSFlipControl-2000056
UnknownOST_IOSSketchGrid-2000055
UnknownOST_IOSSuspendedSketch_obsolete-2000054
UnknownOST_IOSFreeSnapLine-2000053
UnknownOST_IOSDatumPlane-2000052
线OST_Lines-2000051
UnknownOST_IOSConstructionLine-2000050
UnknownOST_IOSAlignmentGraphics-2000049
UnknownOST_IOSAligningLine-2000048
UnknownOST_IOSBackedUpElements-2000047
UnknownOST_IOSRegeneratedElements-2000046
<草图>OST_SketchLines-2000045
宽线OST_CurvesWideLines-2000044
中粗线OST_CurvesMediumLines-2000043
细线OST_CurvesThinLines-2000042
UnknownOST_Curves-2000041
UnknownOST_CeilingsProjection-2000040
UnknownOST_CeilingsCut-2000039
天花板OST_Ceilings-2000038
UnknownOST_RoofsProjection-2000037
UnknownOST_RoofsCut-2000036
屋顶OST_Roofs-2000035
UnknownOST_FloorsProjection-2000034
UnknownOST_FloorsCut-2000033
楼板OST_Floors-2000032
玻璃OST_DoorsGlassProjection-2000031
UnknownOST_DoorsGlassCut-2000030
框架/竖梃OST_DoorsFrameMullionProjection-2000029
UnknownOST_DoorsFrameMullionCut-2000028
洞口OST_DoorsOpeningProjection-2000027
UnknownOST_DoorsOpeningCut-2000026
嵌板OST_DoorsPanelProjection-2000025
UnknownOST_DoorsPanelCut-2000024
OST_Doors-2000023
洞口OST_WindowsOpeningProjection-2000022
UnknownOST_WindowsOpeningCut-2000021
窗台/盖板OST_WindowsSillHeadProjection-2000020
UnknownOST_WindowsSillHeadCut-2000019
框架/竖梃OST_WindowsFrameMullionProjection-2000018
UnknownOST_WindowsFrameMullionCut-2000017
玻璃OST_WindowsGlassProjection-2000016
UnknownOST_WindowsGlassCut-2000015
OST_Windows-2000014
UnknownOST_WallsProjectionOutlines-2000013
UnknownOST_WallsCutOutlines-2000012
OST_Walls-2000011
UnknownOST_IOSRegenerationFailure-2000010
UnknownOST_ScheduleViewParamGroup-2000008
UnknownOST_MatchSiteComponent-2000007
UnknownOST_MatchProfile-2000006
UnknownOST_MatchDetail-2000005
UnknownOST_MatchAnnotation-2000004
UnknownOST_MatchModel-2000003
UnknownOST_MatchAll-2000002
UnknownINVALID-1
+ + +
+ +
+
+ + + + + + +
+
+
BuildInCategory枚举 - 完整
+
https://awaw.cc/post/revit-category-all/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2020年12月1日
+
+ + +
+
更新于
+
2023年7月4日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/revit-category/index.html b/post/revit-category/index.html new file mode 100644 index 0000000..06d23c9 --- /dev/null +++ b/post/revit-category/index.html @@ -0,0 +1,3956 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BuildInCategory枚举 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

BuildInCategory枚举

+ + +
+ +

Revit二次开发中经常用到BuildInCategory过滤元素,以下是通过遍历该枚举获取的数据,其中部分类别的名称未能获取到,本文未显示Unknown部分,完整版本见 BuildInCategory枚举 - 完整

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
中文名称名称
分析链接OST_LinksAnalytical-2009657
分析楼板基础标记OST_FoundationSlabAnalyticalTags-2009656
分析条形基础标记OST_WallFoundationAnalyticalTags-2009655
分析独立基础标记OST_IsolatedFoundationAnalyticalTags-2009654
分析墙标记OST_WallAnalyticalTags-2009653
分析楼层标记OST_FloorAnalyticalTags-2009652
分析柱标记OST_ColumnAnalyticalTags-2009651
分析支撑标记OST_BraceAnalyticalTags-2009650
分析梁标记OST_BeamAnalyticalTags-2009649
分析节点OST_AnalyticalNodes-2009645
分析基础底板OST_FoundationSlabAnalytical-2009643
分析条形基础OST_WallFoundationAnalytical-2009642
分析独立基础OST_IsolatedFoundationAnalytical-2009641
分析墙OST_WallAnalytical-2009640
分析楼层OST_FloorAnalytical-2009639
顶部线段OST_ColumnEndSegment-2009638
基准线段OST_ColumnStartSegment-2009637
分析柱OST_ColumnAnalytical-2009636
末端线段OST_BraceEndSegment-2009635
起点线段OST_BraceStartSegment-2009634
分析支撑OST_BraceAnalytical-2009633
末端线段OST_BeamEndSegment-2009632
起点线段OST_BeamStartSegment-2009631
分析梁OST_BeamAnalytical-2009630
棍状符号OST_StructuralTrussStickSymbols-2009608
隐藏线OST_MassHiddenLines-2009532
隐藏线OST_CurtaSystemHiddenLines-2009531
隐藏线OST_EntourageHiddenLines-2009529
隐藏线OST_PlantingHiddenLines-2009528
隐藏线OST_SpecialityEquipmentHiddenLines-2009527
隐藏线OST_TopographyHiddenLines-2009526
隐藏线OST_SiteHiddenLines-2009524
隐藏线OST_RoadsHiddenLines-2009523
隐藏线OST_ParkingHiddenLines-2009522
隐藏线OST_PlumbingFixturesHiddenLines-2009521
隐藏线OST_MechanicalEquipmentHiddenLines-2009520
隐藏线OST_LightingFixturesHiddenLines-2009519
隐藏线OST_FurnitureSystemsHiddenLines-2009518
隐藏线OST_ElectricalFixturesHiddenLines-2009517
隐藏线OST_ElectricalEquipmentHiddenLines-2009516
隐藏线OST_CaseworkHiddenLines-2009515
隐藏线OST_DetailComponentsHiddenLines-2009514
隐藏线OST_ShaftOpeningHiddenLines-2009513
隐藏线OST_GenericModelHiddenLines-2009512
隐藏线OST_CurtainWallMullionsHiddenLines-2009511
隐藏线OST_CurtainWallPanelsHiddenLines-2009510
隐藏线OST_RampsHiddenLines-2009509
隐藏线OST_StairsRailingHiddenLines-2009508
隐藏线OST_StairsHiddenLines-2009507
隐藏线OST_ColumnsHiddenLines-2009506
隐藏线OST_FurnitureHiddenLines-2009505
隐藏线OST_LinesHiddenLines-2009504
隐藏线OST_CeilingsHiddenLines-2009503
隐藏线OST_RoofsHiddenLines-2009502
隐藏线OST_DoorsHiddenLines-2009501
隐藏线OST_WindowsHiddenLines-2009500
轮廓标记OST_StructConnectionProfilesTags-2009064
孔标记OST_StructConnectionHoleTags-2009063
隐藏线OST_CouplerHiddenLines-2009062
结构钢筋接头标记OST_CouplerTags-2009061
结构钢筋接头OST_Coupler-2009060
焊接标记OST_StructConnectionWeldTags-2009059
剪力钉标记OST_StructConnectionShearStudTags-2009058
锚固件标记OST_StructConnectionAnchorTags-2009057
螺栓标记OST_StructConnectionBoltTags-2009056
板标记OST_StructConnectionPlateTags-2009055
隐藏线OST_RebarHiddenLines-2009050
修改器OST_StructConnectionModifiers-2009047
焊缝OST_StructConnectionWelds-2009046
OST_StructConnectionHoles-2009045
剪力钉OST_StructConnectionShearStuds-2009044
其他OST_StructConnectionOthers-2009042
螺栓OST_StructConnectionBolts-2009041
结构连接标记OST_StructConnectionTags-2009040
锚固件OST_StructConnectionAnchors-2009039
平板OST_StructConnectionPlates-2009038
轮廓OST_StructConnectionProfiles-2009037
参照OST_StructConnectionReference-2009036
符号OST_StructConnectionSymbol-2009033
隐藏线OST_StructConnectionHiddenLines-2009032
结构连接OST_StructConnections-2009030
边界OST_FabricAreaBoundary-2009029
结构钢筋网符号OST_FabricReinSpanSymbol-2009028
钢筋网OST_FabricReinforcementWire-2009027
边界OST_FabricReinforcementBoundary-2009026
钢筋集切换OST_RebarSetToggle-2009025
结构钢筋网标记OST_FabricReinforcementTags-2009022
结构区域钢筋标记OST_AreaReinTags-2009021
结构钢筋标记OST_RebarTags-2009020
<钢筋网片>OST_FabricAreaSketchSheetsLines-2009019
<钢筋网外围>OST_FabricAreaSketchEnvelopeLines-2009018
结构钢筋网区域OST_FabricAreas-2009017
结构钢筋网OST_FabricReinforcement-2009016
钢筋保护层参照OST_RebarCover-2009015
钢筋形状OST_RebarShape-2009013
边界OST_PathReinBoundary-2009012
结构路径钢筋标记OST_PathReinTags-2009011
结构路径钢筋符号OST_PathReinSpanSymbol-2009010
结构路径钢筋OST_PathRein-2009009
边界OST_AreaReinBoundary-2009006
结构区域钢筋符号OST_AreaReinSpanSymbol-2009005
结构区域钢筋OST_AreaRein-2009003
结构钢筋OST_Rebar-2009000
隔热层OST_FabricationPipeworkInsulation-2008221
内衬OST_FabricationDuctworkLining-2008220
OST_FabricationContainmentDrop-2008219
OST_FabricationContainmentRise-2008218
OST_FabricationPipeworkDrop-2008217
OST_FabricationPipeworkRise-2008216
符号OST_FabricationContainmentSymbology-2008215
中心线OST_FabricationContainmentCenterLine-2008214
MEP 预制保护层标记OST_FabricationContainmentTags-2008213
MEP 预制保护层OST_FabricationContainment-2008212
符号OST_FabricationPipeworkSymbology-2008211
中心线OST_FabricationPipeworkCenterLine-2008210
MEP 预制管道标记OST_FabricationPipeworkTags-2008209
MEP 预制管道OST_FabricationPipework-2008208
符号OST_FabricationDuctworkSymbology-2008207
OST_FabricationDuctworkDrop-2008206
OST_FabricationDuctworkRise-2008205
MEP 预制支架标记OST_FabricationHangerTags-2008204
MEP 预制支架OST_FabricationHangers-2008203
隔热层OST_FabricationDuctworkInsulation-2008198
中心线OST_FabricationDuctworkCenterLine-2008196
MEP 预制管网标记OST_FabricationDuctworkTags-2008194
MEP 预制管网OST_FabricationDuctwork-2008193
着色OST_gbXML_Shade-2008187
分析表面OST_AnalyticSurfaces-2008186
分析空间OST_AnalyticSpaces-2008185
空气洞口OST_gbXML_OpeningAir-2008184
非推拉门OST_gbXML_NonSlidingDoor-2008183
推拉门OST_gbXML_SlidingDoor-2008182
可操作天窗OST_gbXML_OperableSkylight-2008181
固定天窗OST_gbXML_FixedSkylight-2008180
可操作窗口OST_gbXML_OperableWindow-2008179
固定窗OST_gbXML_FixedWindow-2008178
地下天花板OST_gbXML_UndergroundCeiling-2008177
地下板OST_gbXML_UndergroundSlab-2008176
地下墙OST_gbXML_UndergroundWall-2008175
空气曲面OST_gbXML_SurfaceAir-2008174
天花板OST_gbXML_Ceiling-2008173
内部楼板OST_gbXML_InteriorFloor-2008172
内墙OST_gbXML_InteriorWall-2008171
平整表面上的板OST_gbXML_SlabOnGrade-2008170
活动楼板OST_gbXML_RaisedFloor-2008169
屋顶OST_gbXML_Roof-2008168
外墙OST_gbXML_ExteriorWall-2008167
管段OST_PipeSegments-2008163
管道占位符OST_PlaceHolderPipes-2008161
风管占位符OST_PlaceHolderDucts-2008160
参照线OST_PipingSystem_Reference_Visibility-2008159
参照线OST_DuctSystem_Reference_Visibility-2008157
管道隔热层标记OST_PipeInsulationsTags-2008155
风管内衬标记OST_DuctLiningsTags-2008154
风管隔热层标记OST_DuctInsulationsTags-2008153
电气备件/空间电路OST_ElectricalInternalCircuits-2008152
配电盘明细表图形OST_PanelScheduleGraphics-2008151
电缆桥架管路OST_CableTrayRun-2008150
线管管路OST_ConduitRun-2008149
中心线OST_ConduitFittingCenterLine-2008141
中心线OST_CableTrayFittingCenterLine-2008140
中心线OST_ConduitCenterLine-2008139
OST_ConduitDrop-2008138
OST_ConduitRiseDrop-2008137
中心线OST_CableTrayCenterLine-2008136
OST_CableTrayDrop-2008135
OST_CableTrayRiseDrop-2008134
线管标记OST_ConduitTags-2008133
线管OST_Conduit-2008132
电缆桥架标记OST_CableTrayTags-2008131
电缆桥架OST_CableTray-2008130
线管配件标记OST_ConduitFittingTags-2008129
线管配件OST_ConduitFitting-2008128
电缆桥架配件标记OST_CableTrayFittingTags-2008127
电缆桥架配件OST_CableTrayFitting-2008126
布管系统配置OST_RoutingPreferences-2008125
风管内衬OST_DuctLinings-2008124
风管隔热层OST_DuctInsulations-2008123
管道隔热层OST_PipeInsulations-2008122
参照线OST_HVAC_Zones_Reference_Visibility-2008118
内部填充OST_HVAC_Zones_InteriorFill_Visibility-2008117
颜色填充OST_HVAC_Zones_ColorFill-2008116
分区标记OST_ZoneTags-2008115
边界OST_HVAC_Zones_Boundary-2008108
HVAC 区OST_HVAC_Zones-2008107
开关系统OST_SwitchSystem-2008101
喷头标记OST_SprinklerTags-2008100
喷头OST_Sprinklers-2008099
洞口OST_GbXML_Opening-2008095
地下OST_GbXML_SType_Underground-2008094
着色OST_GbXML_SType_Shade-2008093
外部OST_GbXML_SType_Exterior-2008092
内部OST_GbXML_SType_Interior-2008091
分析表面OST_GbXMLFaces-2008090
回路方向OST_WireHomeRunArrows-2008089
灯具标记OST_LightingDeviceTags-2008088
灯具OST_LightingDevices-2008087
火警设备标记OST_FireAlarmDeviceTags-2008086
火警设备OST_FireAlarmDevices-2008085
数据设备标记OST_DataDeviceTags-2008084
数据设备OST_DataDevices-2008083
通讯设备标记OST_CommunicationDeviceTags-2008082
通讯设备OST_CommunicationDevices-2008081
安全设备标记OST_SecurityDeviceTags-2008080
安全设备OST_SecurityDevices-2008079
护理呼叫设备标记OST_NurseCallDeviceTags-2008078
护理呼叫设备OST_NurseCallDevices-2008077
电话设备标记OST_TelephoneDeviceTags-2008076
电话设备OST_TelephoneDevices-2008075
导线记号OST_WireTickMarks-2008074
中心线OST_PipeFittingCenterLine-2008072
OST_PipeCurvesDrop-2008069
中心线OST_DuctFittingCenterLine-2008066
OST_DuctCurvesDrop-2008062
风管管件标记OST_DuctFittingTags-2008061
管件标记OST_PipeFittingTags-2008060
管道颜色填充OST_PipeColorFills-2008059
管道颜色填充图例OST_PipeColorFillLegends-2008058
导线标记OST_WireTags-2008057
管道附件标记OST_PipeAccessoryTags-2008056
管道附件OST_PipeAccessory-2008055
OST_PipeCurvesRiseDrop-2008054
填充图案OST_FlexPipeCurvesPattern-2008053
中心线OST_FlexPipeCurvesCenterLine-2008051
软管OST_FlexPipeCurves-2008050
管件OST_PipeFitting-2008049
软管标记OST_FlexPipeTags-2008048
管道标记OST_PipeTags-2008047
中心线OST_PipeCurvesCenterLine-2008045
管道OST_PipeCurves-2008044
管道系统OST_PipingSystem-2008043
导线OST_Wire-2008039
电路OST_ElectricalCircuit-2008037
OST_DuctCurvesRiseDrop-2008036
填充图案OST_FlexDuctCurvesPattern-2008023
中心线OST_FlexDuctCurvesCenterLine-2008021
软风管OST_FlexDuctCurves-2008020
风管附件标记OST_DuctAccessoryTags-2008017
风管附件OST_DuctAccessory-2008016
风管系统OST_DuctSystem-2008015
风道末端标记OST_DuctTerminalTags-2008014
风道末端OST_DuctTerminal-2008013
风管管件OST_DuctFitting-2008010
风管颜色填充OST_DuctColorFills-2008005
软风管标记OST_FlexDuctTags-2008004
风管标记OST_DuctTags-2008003
中心线OST_DuctCurvesCenterLine-2008001
风管OST_DuctCurves-2008000
风管颜色填充图例OST_DuctColorFillLegends-2007004
桥梁支座OST_BridgeBearings-2006138
桥梁大梁OST_BridgeGirders-2006137
桥梁基础OST_BridgeFoundations-2006136
桥面OST_BridgeDecks-2006135
桥拱OST_BridgeArches-2006134
桥梁缆索OST_BridgeCables-2006133
桥塔OST_BridgeTowers-2006132
桥墩OST_BridgePiers-2006131
桥台OST_BridgeAbutments-2006130
平面视图中的支撑符号OST_StructuralBracePlanReps-2006110
连接符号OST_StructConnectionSymbols-2006100
结构注释OST_StructuralAnnotations-2006090
云线批注标记OST_RevisionCloudTags-2006080
云线批注OST_RevisionClouds-2006060
立面标记OST_ElevationMarks-2006045
轴网标头OST_GridHeads-2006040
标高标头OST_LevelHeads-2006020
范围框OST_VolumeOfInterest-2006000
边界条件OST_BoundaryConditions-2005301
内部面荷载标记OST_InternalAreaLoadTags-2005255
内部线荷载标记OST_InternalLineLoadTags-2005254
内部点荷载标记OST_InternalPointLoadTags-2005253
面荷载标记OST_AreaLoadTags-2005252
线荷载标记OST_LineLoadTags-2005251
点荷载标记OST_PointLoadTags-2005250
地震荷载OST_LoadCasesSeismic-2005218
温度荷载OST_LoadCasesTemperature-2005217
偶然荷载OST_LoadCasesAccidental-2005216
屋顶活荷载OST_LoadCasesRoofLive-2005215
雪荷载OST_LoadCasesSnow-2005214
风荷载OST_LoadCasesWind-2005213
活荷载OST_LoadCasesLive-2005212
恒荷载OST_LoadCasesDead-2005211
结构荷载工况OST_LoadCases-2005210
内部面荷载OST_InternalAreaLoads-2005207
内部线荷载OST_InternalLineLoads-2005206
内部点荷载OST_InternalPointLoads-2005205
结构内部荷载OST_InternalLoads-2005204
面荷载OST_AreaLoads-2005203
线荷载OST_LineLoads-2005202
点荷载OST_PointLoads-2005201
结构荷载OST_Loads-2005200
结构梁系统标记OST_BeamSystemTags-2005130
基础跨方向符号OST_FootingSpanDirectionSymbol-2005111
跨方向符号OST_SpanDirectionSymbol-2005110
高程点符号OST_SpotElevSymbols-2005100
结构桁架标记OST_TrussTags-2005030
注释记号标记OST_KeynoteTags-2005029
详图项目标记OST_DetailComponentTags-2005028
材质标记OST_MaterialTags-2005027
楼板标记OST_FloorTags-2005026
幕墙系统标记OST_CurtaSystemTags-2005025
楼梯标记OST_StairsTags-2005023
多类别标记OST_MultiCategoryTags-2005022
植物标记OST_PlantingTags-2005021
面积标记OST_AreaTags-2005020
结构基础标记OST_StructuralFoundationTags-2005019
结构柱标记OST_StructuralColumnTags-2005018
停车场标记OST_ParkingTags-2005017
场地标记OST_SiteTags-2005016
结构框架标记OST_StructuralFramingTags-2005015
专用设备标记OST_SpecialityEquipmentTags-2005014
常规模型标记OST_GenericModelTags-2005013
幕墙嵌板标记OST_CurtainWallPanelTags-2005012
墙标记OST_WallTags-2005011
卫浴装置标记OST_PlumbingFixtureTags-2005010
机电设备标记OST_MechanicalEquipmentTags-2005009
照明设备标记OST_LightingFixtureTags-2005008
家具系统标记OST_FurnitureSystemTags-2005007
家具标记OST_FurnitureTags-2005006
电气装置标记OST_ElectricalFixtureTags-2005004
电气设备标记OST_ElectricalEquipmentTags-2005003
天花板标记OST_CeilingTags-2005002
橱柜标记OST_CaseworkTags-2005001
颜色填充OST_MEPSpaceColorFill-2003605
参照OST_MEPSpaceReferenceVisibility-2003602
内墙OST_MEPSpaceInteriorFillVisibility-2003601
空间OST_MEPSpaces-2003600
体量着色OST_MassShade-2003418
体量洞口OST_MassOpening-2003417
体量天窗OST_MassSkylights-2003416
体量玻璃OST_MassGlazing-2003415
体量屋顶OST_MassRoof-2003414
体量外墙OST_MassExteriorWall-2003413
体量内墙OST_MassInteriorWall-2003412
体量分区OST_MassZone-2003411
体量楼层标记OST_MassAreaFaceTags-2003410
体量标记OST_MassTags-2003405
形式OST_MassForm-2003404
体量楼层OST_MassFloor-2003403
体量OST_Mass-2003400
图案填充OST_DividedSurface_PatternFill-2003327
填充图案线OST_DividedSurface_PatternLines-2003326
网格线OST_DividedSurface_Gridlines-2003325
节点OST_DividedSurface_Nodes-2003324
向下箭头OST_RampsDownArrow-2003308
向上箭头OST_RampsUpArrow-2003307
文字(向下)OST_RampsDownText-2003306
文字(向上)OST_RampsUpText-2003305
超出截面线的梯边梁OST_RampsStringerAboveCut-2003304
梯边梁OST_RampsStringer-2003303
坡道超出截面线OST_RampsAboveCut-2003302
面积OST_Areas-2003200
项目信息OST_ProjectInformation-2003101
图纸OST_Sheets-2003100
详图项目OST_DetailComponents-2002000
屋檐底板OST_RoofSoffit-2001393
楼板边缘OST_EdgeSlab-2001392
檐沟OST_Gutter-2001391
封檐板OST_Fascia-2001390
环境OST_Entourage-2001370
植物OST_Planting-2001360
隐藏线OST_StructuralStiffenerHiddenLines-2001358
定位线OST_StructuralColumnLocationLine-2001357
定位线OST_StructuralFramingLocationLine-2001356
结构加强板标记OST_StructuralStiffenerTags-2001355
结构加强板OST_StructuralStiffener-2001354
RVT 链接OST_RvtLinks-2001352
专用设备OST_SpecialityEquipment-2001350
刚性链接OST_ColumnAnalyticalRigidLinks-2001344
次等高线OST_SecondaryTopographyContours-2001343
主等高线OST_TopographyContours-2001342
三角形边缘OST_TopographySurface-2001341
地形OST_Topography-2001340
地形链接OST_TopographyLink-2001339
结构桁架OST_StructuralTruss-2001336
棍状符号OST_StructuralColumnStickSymbols-2001335
隐藏线OST_HiddenStructuralColumnLines-2001334
刚性链接OST_AnalyticalRigidLinks-2001333
结构柱OST_StructuralColumns-2001330
隐藏线OST_HiddenStructuralFramingLines-2001329
结构梁系统OST_StructuralFramingSystem-2001327
结构框架OST_StructuralFraming-2001320
隐藏线OST_HiddenStructuralFoundationLines-2001302
结构基础OST_StructuralFoundation-2001300
测量点OST_SharedBasePoint-2001272
项目基点OST_ProjectBasePoint-2001271
建筑红线线段标记OST_SitePropertyLineSegmentTags-2001269
建筑红线线段OST_SitePropertyLineSegment-2001268
属性标记OST_SitePropertyTags-2001267
边界点OST_SitePointBoundary-2001266
建筑红线OST_SiteProperty-2001265
建筑地坪OST_BuildingPad-2001263
内部点OST_SitePoint-2001262
场地OST_Site-2001260
道路OST_Roads-2001220
停车场OST_Parking-2001180
卫浴装置OST_PlumbingFixtures-2001160
机械设备OST_MechanicalEquipment-2001140
光源OST_LightingFixtureSource-2001121
照明设备OST_LightingFixtures-2001120
家具系统OST_FurnitureSystems-2001100
电气装置OST_ElectricalFixtures-2001060
电气设备OST_ElectricalEquipment-2001040
橱柜OST_Casework-2001000
竖井洞口OST_ShaftOpening-2000996
水力分离符号OST_PipeHydronicSeparationSymbols-2000988
机械设备集边界线OST_MechanicalEquipmentSetBoundaryLines-2000987
机械设备集标记OST_MechanicalEquipmentSetTags-2000986
机械设备集OST_MechanicalEquipmentSet-2000985
连接线符号OST_AnalyticalPipeConnectionLineSymbol-2000984
分析管道连接OST_AnalyticalPipeConnections-2000983
局部坐标系OST_FndSlabLocalCoordSys-2000976
局部坐标系OST_FloorLocalCoordSys-2000975
局部坐标系OST_WallLocalCoordSys-2000974
局部坐标系OST_BraceLocalCoordSys-2000973
局部坐标系OST_ColumnLocalCoordSys-2000972
局部坐标系OST_BeamLocalCoordSys-2000971
多钢筋注释OST_MultiReferenceAnnotations-2000970
分析节点标记OST_NodeAnalyticalTags-2000956
分析链接标记OST_LinkAnalyticalTags-2000955
支撑OST_StairsSupports-2000952
<高于> 扶手OST_RailingHandRailAboveCut-2000951
<高于> 顶部扶栏OST_RailingTopRailAboveCut-2000950
终端OST_RailingTermination-2000949
支座OST_RailingSupport-2000948
扶手OST_RailingHandRail-2000947
顶部扶栏OST_RailingTopRail-2000946
楼梯踏板/踢面数OST_StairsTriserNumbers-2000944
楼梯支撑标记OST_StairsSupportTags-2000942
楼梯平台标记OST_StairsLandingTags-2000941
楼梯梯段标记OST_StairsRunTags-2000940
<高于> 向上箭头OST_StairsPathsAboveCut-2000939
楼梯路径OST_StairsPaths-2000938
<高于> 踢面线OST_StairsRiserLinesAboveCut-2000937
踢面线OST_StairsRiserLines-2000936
<高于> 轮廓OST_StairsOutlinesAboveCut-2000935
轮廓OST_StairsOutlines-2000934
<高于> 楼梯前缘线OST_StairsNosingLinesAboveCut-2000933
楼梯前缘线OST_StairsNosingLines-2000932
<高于> 剪切标记OST_StairsCutMarksAboveCut-2000931
剪切标记OST_StairsCutMarks-2000930
踢面/踏板OST_StairsTrisers-2000921
平台OST_StairsLandings-2000920
梯段OST_StairsRuns-2000919
线OST_AdaptivePoints_Lines-2000903
平面OST_AdaptivePoints_Planes-2000902
OST_AdaptivePoints_Points-2000901
自适应点OST_AdaptivePoints-2000900
<空间分隔>OST_MEPSpaceSeparationLines-2000831
线OST_ReferencePoints_Lines-2000713
平面OST_ReferencePoints_Planes-2000712
OST_ReferencePoints_Points-2000711
参照点OST_ReferencePoints-2000710
材质OST_Materials-2000700
截面填充图案OST_CeilingsCutPattern-2000617
公共边OST_CeilingsDefault-2000616
面层 2 [5]OST_CeilingsFinish2-2000615
面层 1 [4]OST_CeilingsFinish1-2000614
衬底 [2]OST_CeilingsSubstrate-2000613
保温层/空气层 [3]OST_CeilingsInsulation-2000612
结构 [1]OST_CeilingsStructure-2000611
涂膜层OST_CeilingsMembrane-2000610
内部边缘OST_FloorsInteriorEdges-2000609
截面填充图案OST_FloorsCutPattern-2000608
隐藏线OST_HiddenFloorLines-2000607
公共边OST_FloorsDefault-2000606
面层 2 [5]OST_FloorsFinish2-2000605
面层 1 [4]OST_FloorsFinish1-2000604
衬底 [2]OST_FloorsSubstrate-2000603
保温层/空气层 [3]OST_FloorsInsulation-2000602
结构 [1]OST_FloorsStructure-2000601
涂膜层OST_FloorsMembrane-2000600
内部边缘OST_RoofsInteriorEdges-2000598
截面填充图案OST_RoofsCutPattern-2000597
公共边OST_RoofsDefault-2000596
面层 2 [5]OST_RoofsFinish2-2000595
面层 1 [4]OST_RoofsFinish1-2000594
衬底 [2]OST_RoofsSubstrate-2000593
保温层/空气层 [3]OST_RoofsInsulation-2000592
结构 [1]OST_RoofsStructure-2000591
涂膜层OST_RoofsMembrane-2000590
截面填充图案OST_WallsCutPattern-2000588
隐藏线OST_HiddenWallLines-2000587
公共边OST_WallsDefault-2000586
面层 2 [5]OST_WallsFinish2-2000585
面层 1 [4]OST_WallsFinish1-2000584
衬底 [2]OST_WallsSubstrate-2000583
保温层/空气层 [3]OST_WallsInsulation-2000582
结构 [1]OST_WallsStructure-2000581
涂膜层OST_WallsMembrane-2000580
明细表OST_Schedules-2000573
明细表图形OST_ScheduleGraphics-2000570
光栅图像OST_RasterImages-2000560
颜色填充OST_RoomColorFill-2000551
颜色填充图例OST_ColorFillLegends-2000550
注释裁剪边界OST_AnnotationCropSpecial-2000549
裁剪边界OST_CropBoundarySpecial-2000548
注释裁剪边界OST_AnnotationCrop-2000547
详图索引引线OST_CalloutLeaderLine-2000544
表面填充图案OST_CeilingsSurfacePattern-2000543
表面填充图案OST_RoofsSurfacePattern-2000542
表面填充图案OST_FloorsSurfacePattern-2000541
表面填充图案OST_WallsSurfacePattern-2000540
详图索引边界OST_CalloutBoundary-2000539
详图索引标头OST_CalloutHeads-2000538
详图索引OST_Callouts-2000537
裁剪边界OST_CropBoundary-2000536
立面OST_Elev-2000535
参照平面OST_CLines-2000530
视图标题OST_ViewportLabel-2000515
视口OST_Viewports-2000510
相机OST_Camera_Lines-2000501
空间标记OST_MEPSpaceTags-2000485
房间标记OST_RoomTags-2000480
门标记OST_DoorTags-2000460
窗标记OST_WindowTags-2000450
宽线OST_SectionHeadWideLines-2000404
中粗线OST_SectionHeadMediumLines-2000403
细线OST_SectionHeadThinLines-2000401
剖面标头OST_SectionHeads-2000400
等高线标签OST_ContourLabels-2000350
幕墙系统OST_CurtaSystem-2000340
幕墙系统网格OST_CurtainGridsCurtaSystem-2000323
幕墙网格OST_CurtainGridsWall-2000321
幕墙屋顶网格OST_CurtainGridsRoof-2000320
分析显示样式OST_AnalysisDisplayStyle-2000304
分析结果OST_AnalysisResults-2000303
渲染区域OST_RenderRegions-2000302
剖面框OST_SectionBox-2000301
文字注释OST_TextNotes-2000300
<中心线>OST_CenterLines-2000288
<超出>OST_LinesBeyond-2000287
<隐藏>OST_HiddenLines-2000286
<已拆除>OST_DemolishedLines-2000285
<架空线>OST_OverheadLines-2000284
宽线OST_TitleBlockWideLines-2000283
中粗线OST_TitleBlockMediumLines-2000282
细线OST_TitleBlockThinLines-2000281
图框OST_TitleBlocks-2000280
视图OST_Views-2000279
隐藏线OST_PartHiddenLines-2000271
零件标记OST_PartTags-2000270
组成部分OST_Parts-2000269
部件标记OST_AssemblyTags-2000268
部件OST_Assemblies-2000267
屋顶标记OST_RoofTags-2000266
高程点坡度OST_SpotSlopes-2000265
高程点坐标OST_SpotCoordinates-2000264
高程点OST_SpotElevations-2000263
自动绘制尺寸标注OST_WeakDims-2000261
尺寸标注OST_Dimensions-2000260
标高OST_Levels-2000240
位移路径OST_DisplacementPath-2000223
多段轴网OST_GridChains-2000221
轴网OST_Grids-2000220
断开剖面线OST_BrokenSectionLine-2000202
剖面线OST_SectionLine-2000201
剖面OST_Sections-2000200
视图参照OST_ReferenceViewer-2000198
视图参照OST_ReferenceViewerSymbol-2000197
在族中导入OST_ImportObjectStyles-2000196
遮罩区域OST_MaskingRegion-2000194
拼接线OST_Matchline-2000193
平面区域OST_PlanRegion-2000191
填充区域OST_FilledRegion-2000190
墙饰条OST_Cornices-2000181
坡道OST_Ramps-2000180
幕墙网格OST_CurtainGrids-2000173
幕墙竖梃OST_CurtainWallMullions-2000171
幕墙嵌板OST_CurtainWallPanels-2000170
颜色填充OST_AreaColorFill-2000165
参照OST_AreaReferenceVisibility-2000164
内部填充OST_AreaInteriorFillVisibility-2000163
参照OST_RoomReferenceVisibility-2000162
内部填充OST_RoomInteriorFillVisibility-2000161
房间OST_Rooms-2000160
常规模型OST_GenericModel-2000151
常规注释OST_GenericAnnotation-2000150
栏杆扶手标记OST_StairsRailingTags-2000133
<高于> 栏杆扶手截面线OST_StairsRailingAboveCut-2000132
向下箭头OST_StairsDownArrows-2000131
向上箭头OST_StairsUpArrows-2000130
文字(向下)OST_StairsDownText-2000129
扶栏OST_StairsRailingRail-2000128
栏杆OST_StairsRailingBaluster-2000127
栏杆扶手OST_StairsRailing-2000126
文字(向上)OST_StairsUpText-2000125
<高于> 支撑OST_StairsSupportsAboveCut-2000124
支撑OST_StairsStringerCarriage-2000123
楼梯OST_Stairs-2000120
导向轴网OST_GuideGrid-2000107
OST_Columns-2000100
模型组OST_IOSModelGroups-2000095
参照线OST_ReferenceLines-2000083
家具OST_Furniture-2000080
<面积边界>OST_AreaSchemeLines-2000079
线OST_GenericLines-2000078
隔热层线OST_InsulationLines-2000077
<房间分隔>OST_RoomSeparationLines-2000066
旋转轴OST_AxisOfRotation-2000065
线OST_Lines-2000051
<草图>OST_SketchLines-2000045
宽线OST_CurvesWideLines-2000044
中粗线OST_CurvesMediumLines-2000043
细线OST_CurvesThinLines-2000042
天花板OST_Ceilings-2000038
屋顶OST_Roofs-2000035
楼板OST_Floors-2000032
玻璃OST_DoorsGlassProjection-2000031
框架/竖梃OST_DoorsFrameMullionProjection-2000029
洞口OST_DoorsOpeningProjection-2000027
嵌板OST_DoorsPanelProjection-2000025
OST_Doors-2000023
洞口OST_WindowsOpeningProjection-2000022
窗台/盖板OST_WindowsSillHeadProjection-2000020
框架/竖梃OST_WindowsFrameMullionProjection-2000018
玻璃OST_WindowsGlassProjection-2000016
OST_Windows-2000014
OST_Walls-2000011
+ + +
+ +
+
+ + + + + + +
+
+
BuildInCategory枚举
+
https://awaw.cc/post/revit-category/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2020年12月1日
+
+ + +
+
更新于
+
2023年7月4日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/sql-date-format/index.html b/post/sql-date-format/index.html new file mode 100644 index 0000000..42aa6dd --- /dev/null +++ b/post/sql-date-format/index.html @@ -0,0 +1,853 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SQL日期时间格式转换 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

SQL日期时间格式转换

+ + +
+ +

不经常用,所以没有刻意记过,但每次用到了都要百度,保存此处方便下次使用。

+ + +
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Select CONVERT(varchar(100), GETDATE(), 0)/*05 16 2006 10:57AM*/
Select CONVERT(varchar(100), GETDATE(), 1)/*05/16/06*/
Select CONVERT(varchar(100), GETDATE(), 2)/*06.05.16*/
Select CONVERT(varchar(100), GETDATE(), 3)/*16/05/06*/
Select CONVERT(varchar(100), GETDATE(), 4)/*16.05.06*/
Select CONVERT(varchar(100), GETDATE(), 5)/*16-05-06*/
Select CONVERT(varchar(100), GETDATE(), 6)/*16 05 06*/
Select CONVERT(varchar(100), GETDATE(), 7)/*05 16, 06*/
Select CONVERT(varchar(100), GETDATE(), 8)/*10:57:46*/
Select CONVERT(varchar(100), GETDATE(), 9)/*05 16 2006 10:57:46:827AM*/
Select CONVERT(varchar(100), GETDATE(), 10)/*05-16-06*/
Select CONVERT(varchar(100), GETDATE(), 11)/*06/05/16*/
Select CONVERT(varchar(100), GETDATE(), 12)/*060516*/
Select CONVERT(varchar(100), GETDATE(), 13)/*16 05 2006 10:57:46:937*/
Select CONVERT(varchar(100), GETDATE(), 14)/*10:57:46:967*/
Select CONVERT(varchar(100), GETDATE(), 20)/*2006-05-16 10:57:47*/
Select CONVERT(varchar(100), GETDATE(), 21)/*2006-05-16 10:57:47.157*/
Select CONVERT(varchar(100), GETDATE(), 22)/*05/16/06 10:57:47 AM*/
Select CONVERT(varchar(100), GETDATE(), 23)/*2006-05-16*/
Select CONVERT(varchar(100), GETDATE(), 24)/*10:57:47*/
Select CONVERT(varchar(100), GETDATE(), 25)/*2006-05-16 10:57:47.250*/
Select CONVERT(varchar(100), GETDATE(), 100)/*05 16 2006 10:57AM*/
Select CONVERT(varchar(100), GETDATE(), 101)/*05/16/2006*/
Select CONVERT(varchar(100), GETDATE(), 102)/*2006.05.16*/
Select CONVERT(varchar(100), GETDATE(), 103)/*16/05/2006*/
Select CONVERT(varchar(100), GETDATE(), 104)/*16.05.2006*/
Select CONVERT(varchar(100), GETDATE(), 105)/*16-05-2006*/
Select CONVERT(varchar(100), GETDATE(), 106)/*16 05 2006*/
Select CONVERT(varchar(100), GETDATE(), 107)/*05 16, 2006*/
Select CONVERT(varchar(100), GETDATE(), 108)/*10:57:49*/
Select CONVERT(varchar(100), GETDATE(), 109)/*05 16 2006 10:57:49:437AM*/
Select CONVERT(varchar(100), GETDATE(), 110)/*05-16-2006*/
Select CONVERT(varchar(100), GETDATE(), 111)/*2006/05/16*/
Select CONVERT(varchar(100), GETDATE(), 112)/*20060516*/
Select CONVERT(varchar(100), GETDATE(), 113)/*16 05 2006 10:57:49:513*/
Select CONVERT(varchar(100), GETDATE(), 114)/*10:57:49:547*/
Select CONVERT(varchar(100), GETDATE(), 120)/*2006-05-16 10:57:49*/
Select CONVERT(varchar(100), GETDATE(), 121)/*2006-05-16 10:57:49.700*/
Select CONVERT(varchar(100), GETDATE(), 126)/*2006-05-16T10:57:49.827*/
+ +
+ +
+
+ + + + + + +
+
+
SQL日期时间格式转换
+
https://awaw.cc/post/sql-date-format/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2018年10月25日
+
+ + +
+
更新于
+
2023年7月4日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/sql-tuning/index.html b/post/sql-tuning/index.html new file mode 100644 index 0000000..0562617 --- /dev/null +++ b/post/sql-tuning/index.html @@ -0,0 +1,890 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 数据库调优 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

数据库调优

+ + +
+ +

先思考这几个问题:

+
    +
  • 什么时候才需要分库分表呢?我们的评判标准是什么?
  • +
  • 一张表存储了多少数据的时候,才需要考虑分库分表?
  • +
  • 数据增长速度很快,每天产生多少数据,才需要考虑做分库分表?
  • +
+ + +

为什么要分库分表?

首先回答一下为什么要分库分表,答案很简单:数据库出现性能瓶颈。用大白话来说就是数据库快扛不住了。
数据库出现性能瓶颈,对外表现有几个方面:

+
    +
  • 大量请求阻塞
    在高并发场景下,大量请求都需要操作数据库,导致连接数不够了,请求处于阻塞状态。

    +
  • +
  • SQL 操作变慢
    如果数据库中存在一张上亿数据量的表,一条 SQL 没有命中索引会全表扫描,这个查询耗时会非常久。

    +
  • +
  • 存储出现问题
    业务量剧增,单库数据量越来越大,给存储造成巨大压力。

    +
  • +
+

从机器的角度看,性能瓶颈无非就是CPU、内存、磁盘、网络这些,要解决性能瓶颈最简单粗暴的办法就是提升机器性能,但是通过这种方法成本和收益投入比往往又太高了,不划算,所以重点还是要从软件角度入手。

+

数据库相关优化方案

数据库优化方案很多,主要分为两大类:软件层面硬件层面
软件层面包括:SQL 调优、表结构优化、读写分离、数据库集群、分库分表等;
硬件层面主要是增加机器性能。

+

SQL 调优

SQL 调优往往是解决数据库问题的第一步,往往投入少部分精力就能获得较大的收益。
SQL 调优主要目的是尽可能的让那些慢 SQL 变快,手段其实也很简单就是让 SQL 执行尽量命中索引。

+

开启慢 SQL 记录

如果你使用的是 Mysql,需要在 Mysql 配置文件中配置几个参数即可。

+
1
2
3
slow_query_log = on
long_query_time = 1
slow_query_log_file = /path/to/log
+ +

调优工具

常常会用到 explain 这个命令来查看 SQL 语句的执行计划,通过观察执行结果很容易就知道该 SQL 语句是不是全表扫描、有没有命中索引。

+
1
select id, age, gender from  user where name = 'pdone';
+

返回有一列叫“type”,常见取值有:

+

ALL、index、range、 ref、eq_ref、const、system、NULL(从左到右,性能从差到好)
ALL 代表这条 SQL 语句全表扫描了,需要优化。一般来说需要达到range 级别及以上。

+

表结构优化

以一个场景举例说明:

+

“user”表中有 user_id、nickname 等字段,“order”表中有order_id、user_id等字段,如果想拿到用户昵称怎么办?一般情况是通过 join 关联表操作,在查询订单表时关联查询用户表,从而获取导用户昵称。

+

但是随着业务量增加,订单表和用户表肯定也是暴增,这时候通过两个表关联数据就比较费力了,为了取一个昵称字段而不得不关联查询几十上百万的用户表,其速度可想而知。

+

这个时候可以尝试将 nickname 这个字段加到 order 表中(order_id、user_id、nickname),这种做法通常叫做数据库表冗余字段。这样做的好处展示订单列表时不需要再关联查询用户表了。

+

冗余字段的做法也有一个弊端,如果这个字段更新会同时涉及到多个表的更新,因此在选择冗余字段时要尽量选择不经常更新的字段。

+

架构优化

当单台数据库实例扛不住,我们可以增加实例组成集群对外服务。

+

当发现读请求明显多于写请求时,我们可以让主实例负责写,从实例对外提供读的能力;如果读实例压力依然很大,可以在数据库前面加入缓存如 redis,让请求优先从缓存取数据减少数据库访问。

+

缓存分担了部分压力后,数据库依然是瓶颈,这个时候就可以考虑分库分表的方案了,后面会详细介绍。

+

硬件优化

硬件成本非常高,一般来说不可能遇到数据库性能瓶颈就去升级硬件。

+

在前期业务量比较小的时候,升级硬件数据库性能可以得到较大提升;但是在后期,升级硬件得到的收益就不那么明显了。

+

分库分表详解

下面我们以一个商城系统为例逐步讲解数据库是如何一步步演进。

+
+

未完待续

+
+ +
+ +
+
+ + + + + + +
+
+
数据库调优
+
https://awaw.cc/post/sql-tuning/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2021年2月1日
+
+ + +
+
更新于
+
2023年7月4日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/ssms18-not-run/index.html b/post/ssms18-not-run/index.html new file mode 100644 index 0000000..a409d7a --- /dev/null +++ b/post/ssms18-not-run/index.html @@ -0,0 +1,878 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SSMS18闪退解决方法 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

SSMS18闪退解决方法

+ + +
+ +

这是已知问题,SSMS开发团队发布了新的官方解决方法。

+ + +

第一个方法

复制文件

+
1
Microsoft.VisualStudio.Shell.Interop.8.0.dll
+ +

将该DLL文件从目录

+
1
C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\PrivateAssemblies\Interop
+ +

复制到目录

+
1
C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\PublicAssemblies
+ +

第二个方法

删除文件

+
1
C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\CommonExtensions\Platform\Microsoft.VisualStudio.MinShell.Interop.pkgdef
+ +

SSMS产品经理提供的方法

+

建议的解决方法是:

+

1)关闭所有SSMS实例

+

2)编辑ssms.exe.config

+

3)删除具有以下文本的行(应该是第38行):NgenBind_OptimizeNonGac enabled =“1”

+

这与SSMS 18.x的下一版本中的改变相同

+
+

注意!ssms.exe.config文件的位置在文件夹中:

+
1
C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE
+ +

相关链接

+ + +
+ +
+
+ + + + + + +
+
+
SSMS18闪退解决方法
+
https://awaw.cc/post/ssms18-not-run/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2019年6月20日
+
+ + +
+
更新于
+
2023年7月4日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/steam-free-game/index.html b/post/steam-free-game/index.html new file mode 100644 index 0000000..f58dd8f --- /dev/null +++ b/post/steam-free-game/index.html @@ -0,0 +1,857 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Steam免费游戏一键领取 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

Steam免费游戏一键领取

+ + +
+ +

这些都是Steam上免费的游戏,如果手动领取的话需要一个一个领取,这里提供一种简便的方法,一键批量把免费游戏添加到自己的库里。

+ +

第一步

打开该链接: https://store.steampowered.com/account/licenses/ ,然后登录自己的账号(或者自己进入Steam主页,登录网页版Steam,然后进入到 主页 > 帐户 > 许可和产品序列号激活 页面)。

+

第二步

按键盘F12,进入Console,粘贴下方代码后按Enter键执行代码。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
(function () {
if (location.href.match(/^https:\/\/store\.steampowered\.com\/account\/licenses\/?$/) === null) {
alert('请在Steam帐号明细页面运行这些代码: https://store.steampowered.com/account/licenses/');

window.location = 'https://store.steampowered.com/account/licenses/';

return;
}

var freePackages =
[
//本体
39166,//Heroine's Quest: The Herald of Ragnarok
13261,//RACE 07: Andy Priaulx Crowne Plaza Raceway
32032,//Portal 2 Sixense Perceptual Pack
59373,//Penumbra: Necrologue
33694,//Grimm&Episode 1 - A Boy Learns What Fear Is
88162,//Romance of the Three Kingdoms Maker
36561,//Serena
58514,//Voxelized
117526,//Amnesia: Final Revelations

//dlc
85604,//RTK Maker - Face CG “RTK13” Set / 三国志ツクール顔登録素材 『三國志13』セット+シナリオ
21478,//Free to Play免费本体
50861,//Free to Play Soundtrack
21473,//Prime World免费本体
31538,//Prime World - Prime Machine
32287,//Z3TA+ 2 - Polybius 8-bit Game Pack
38085,//Saints Row IV - Reverse Cosplay Pack
72261,//The Secret of Tremendous Corporation免费本体
81026,//The Sources of Tremendous Corporation
47333,//Aura Kingdom免费本体
38820,//Aura Kingdom - Winter Gift
69802,//Fuse免费本体
60341,//Fuse - Free Brute Character Pack
21416,//Elsword免费本体
63207,//Time Tracer's DLC Package
59253,//Vindictus - New User Package

//软件&工具
35063,//Star Swarm Stress Test
74465,//Arma 3 Samples

21101, // DiRT Showdown Demo
21102, // Rayman Origins Demo
21103, // iBomber Defense Pacific Demo
21104, // Men Of War: Assault Squad GOTY Demo
21105, // Bang Bang Racing Demo
21106, // Sine Mora Demo
21107, // Noitu Love 2 Devolution Demo
21108, // Waveform Demo
21109, // Ridge Racer™ Unbounded Demo
21110, // Hegemony Gold: Wars of Ancient Greece
21111, // Rocksmith Demo
21113, // Binary Domain Demo
21114, // Sniper Elite V2 Demo
21115, // Blades of Time Demo
21117, // A Valley Without Wind Demo
21118, // F1 2012 Demo
21119, // Magical Diary Demo
21120, // The Dream Machine Demo
21121, // Hell Yeah! Demo
21122, // A Virus Named Tom Demo
21123, // Splice Demo
21124, // Atooms to Moolecules
21125, // BeatBuddy Demo
21126, // DIVO
21127, // Imagine Earth Demo
21128, // MilitAnt
21129, // Plutonic Repulse
21130, // The White Laboratory Demo
21131, // Blackwell's Asylum
21132, // Magic 2014 Demo
21133, // Sid Meier's Civilization V: Gods & Kings Demo
21134, // Gratuitous Tank Battles Demo
21135, // Tiny and Big: Grandpa's Leftovers Demo
21136, // KungFu Strike Demo
21137, // Adventures of Shuggy Demo
21138, // E.Y.E: Divine Cybermancy Demo
21139, // Orcs Must Die! 2 Demo
21140, // The Book of Unwritten Tales Demo
21141, // Sleeping Dogs™ Demo
21142, // Damage Inc Demo
21143, // Gateways Demo
21144, // Football Manager 2013 Demo
21145, // XCOM: Enemy Unknown Demo
21146, // Transcripted Demo
21147, // Intrusion 2 Demo
21148, // Din's Curse Demo
21149, // Democracy 2 Demo
21150, // Ys Origin Demo
21151, // Ether Vapor Remaster Demo
];

var ownedPackages = {};

jQuery('.account_table a').each(function (i, el) {
var match = el.href.match(/javascript:RemoveFreeLicense\( ([0-9]+), '/);

if (match !== null) {
ownedPackages[+match[1]] = true;
}
});

var i = 0,
loaded = 0,
package = 0,
total = freePackages.length,
modal = ShowBlockingWaitDialog('努力执行中...',
'请耐心等待,如果有错误请无视,请耐心等待脚本加载完毕');

for (; i < total; i++) {
package = freePackages[i];

if (ownedPackages[package]) {
loaded++;
continue;
}

jQuery.post(
'//store.steampowered.com/checkout/addfreelicense',
{
action: 'add_to_cart',
sessionid: g_sessionID,
subid: package
}
).always(function () {
loaded++;

modal.Dismiss();

if (loaded >= total) {
location.reload();
}
else {
modal = ShowBlockingWaitDialog('执行中...',
'加载至 <b>' + loaded + '</b>/' + total + '.');
}
}
);
}
}());
+ +

第三步

Enjoy your free game!

+ + +
+ +
+
+ + + + + + +
+
+
Steam免费游戏一键领取
+
https://awaw.cc/post/steam-free-game/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2019年7月22日
+
+ + +
+
更新于
+
2023年7月4日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/whats-short-link/index.html b/post/whats-short-link/index.html new file mode 100644 index 0000000..b84af9e --- /dev/null +++ b/post/whats-short-link/index.html @@ -0,0 +1,1023 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 短链接服务Octopus的实现与源码开放 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

短链接服务Octopus的实现与源码开放

+ + +
+ +

一直想实现一个私有化的短链接服务,后来发现了这个项目,避免了重复造轮子。

+ + + + +

前提

半年前(2020-06)左右,疫情触底反弹,公司的业务量不断提升,运营部门为了方便短信、模板消息推送等渠道的投放,提出了一个把长链接压缩为短链接的功能需求。当时为了快速推广,使用了一些比较知名的第三方短链压缩平台,存在一些问题:

+
    +
  • 收费贵
  • +
  • 一些情况下,短链域名在部分第三方平台例如微信会被封杀
  • +
  • 回源数据没有办法定制处理方案,无法打通整个业务链路进行数据分析和跟踪
  • +
+

基于此类问题,决定自研一个(长链接压缩为)短链接服务,当时刚好同步进行微服务拆分,内部很多微服务需要重新命名,组内的一个妹子说不如就用Github的吉祥物去命名octopus cat(章鱼猫)去命名,但是考虑到版权问题,去掉了她最喜欢的猫,剩下章鱼,以octopus命名:

+

+

(项目的描述还打错字了,应该是”短链接”)因为实现的功能并不复杂,初版于2020-06月底就发布。octopus的实现参考了互联网中几篇关于”短链服务实现”浏览量比较高的文章,下面从实现原理、服务实现和部署架构等方面展开谈谈。

+

基本原理

短链服务的核心就是构建短链接和长链接的唯一映射关系,依赖到一个高性能、排列组合数量大而且破解难度大的映射标识生成算法。

+

构建唯一映射关系

+

上图是笔者收到的京东白条分期还款结果提醒短信,短信内容也包含了一个短链https://3.cn/j/xxxxxxx,把它拷贝到浏览器中打开,发现客户端会重定向到长链https://jrmkt.jd.com/ptp/wl/vouchers.html?activityId=${activityId}&uep_p=${uep_p}&uep_template_id=${uep_template_id}&uep_timestamp=${uep_timestamp},然后跳入一个H5的登录页,登录后再跳进一个白条攻略页面。这里其实一个长链其实可以压成多个短链,短链可以相同域名,也可以使用不同的域名:

+

+

访问https://3.cn/j/xxxxxxx短链接具体的交互流程猜测如下:

+

+
+

jrmkt.jd.com和3.cn查证都是doge东的域名

+
+

构建唯一映射关系其实就是基于一个固定的长链接,映射到一个或者多个可以动态生成的短链接,这个唯一映射关系,要求生成的短链接满足:

+
    +
  • 不容易被破解(使用数字例如数据库的自增主键作为唯一映射标识容易被人遍历出来进行恶意调用)
  • +
  • 不能重复(一个短链接只能对应一个长链接,当然一个长链接可以对应多个短链接)
  • +
  • 长度尽可能短,这是因为第三方推送的报文内容一般有长度限制,如果短链过长,会导致不容易传输,还会令到推送内容字数受限(试想运营商短信投放内容最大长度为30个字符长度,短链已经占了20个字符长度,剩下只有10个字符长度让运营同事去发挥,显然不合理)
  • +
  • 如果链接过长,生成的二维码里面的”码点”会十分密集,不利于客户端识别和传输,刚好笔者公司运营有使用二维码的场景,所以必须尽可能缩短链接的长度
  • +
+

总的来说,这个唯一映射关系中的映射标识需要像Hash算法生成的Hash码那样具备高唯一性和低碰撞频率,同时具备短小易传输的特点,具体如何去生成映射唯一标识见下一节”压缩码生成算法”。

+

压缩码生成算法

这里的”压缩码”(compression_code)是笔者杜撰出来的名词,在本文中它的含义是短链接URL的路径部分(为了节省长度,除了协议和域名部分,短链的URL只有第一段路径):

+

+

其中,协议部分基本是固定为https://(从安全性来看不建议使用http://),短链域名可以购买尽可能长度短的域名如t.cn,不过有先见之明的资本家一般会把所有优质的短域名买下并且把价格提到很高,所以域名的长度基本也是很难控制的因素,剩下可控的就是压缩码部分。压缩码部分是可控的,但因为它是URL的一部分,只要确保所使用的字符不会被URL编码转义,那么长度是人为可控的。假设我们使用的是26个字母的大小写,加上10个数字,那么对于N位压缩码可以表示的最大组合数量为:

+
    +
  • N = 4,组合数为62 ^ 4 = 14_776_336147万接近148
  • +
  • N = 5,组合数为62 ^ 5 = 916_132_8329.16亿左右
  • +
  • N = 6,组合数为62 ^ 6 = 56_800_235_584568亿左右
  • +
+

一般来说,组合数越小破解的难度就越小,组合数越大,要求压缩码长度越大,所以常用的长度就是456,而且后期可以对失效的长链进行压缩码回收或者禁用,这三个长度对于绝大对数生产短链的应用场景都能满足。octopus在实现的时候选用的是6位长度的压缩码,无他,因为有现成的成熟的参考方案:62进制数刚好由字符0-9 a-z A-Z组成,生成压缩码的时候,只需要生成一个唯一的10进制数,然后再基于此10进制数转换为62进制数数即可。说到这里,看起来的方案如下:

+

+

虚线部分一般依赖一种高效而且低冲突的摘要算法,如MurmurHash,而第(1)步的实线部分就是生成一个全局唯一的10进制序列,常用的手法有:

+
    +
  • 数据库自增序列(如自增主键)
  • +
  • Snowflake算法
  • +
  • 自研的类似UUID算法生成全局唯一的序列值
  • +
+

考虑到之前笔者钻研过Snowflake算法的原理,这里简单使用Snowflake算法生成自增序列,使用了下面的流程进行压缩码生成和分配:

+

+

因为运用部门对短链生成的批量不大,而且短链域名只有一个,所以简单起见,一次压缩操作直接消耗掉一个压缩码,不考虑不同短链域名对同一个压缩码进行共享,也不考虑压缩码的回收问题

+

服务实现

短链服务的主访问入口一般QPS极高,因此需要想尽一切办法降低该入口的耗时,考虑可以用Redis做缓存承载入口的流量,基础架构选型如下:

+
    +
  • JDK1.8+:生产部署使用JDK11
  • +
  • MVC框架与容器:spring-boot-starter-webflux或者spring-cloud-gateway,主要是必须使用Netty作为底层通讯容器
  • +
  • 内部RPC框架:Dubbo
  • +
  • 服务注册与发现:Nacos
  • +
  • 可选APM工具:Pinpoint
  • +
+

中间件依赖(因为之前整个服务集群都上云了,低负载的服务共用了部分中间件):

+
    +
  • MySQL8.x
  • +
  • Redis5.x普通主从或者哨兵集群
  • +
  • RabbitMQ3.8.x集群,使用镜像队列
  • +
+

服务的设计图如下:

+

+

最新的版本考虑把黑白名单的拦截器去掉,替换成一个基于布隆过滤器现实的拦截器。服务使用了两个拦截器(虽然Filter翻译是过滤器,但是出于习惯,下文称为拦截器)链,容器提供的拦截器组成的拦截器链主要是负责服务安全、调用链跟踪的功能,而服务内部自定义的拦截器链主要是实现请求参数解析、URL转换、重定向和异步事件记录等功能。

+

模块划分:

+
1
2
3
- (ROOT) octopus
- octopus-contract
- octopus-server
+ +

octopus-contract模块必须脱离父POM的管理,方便单独迭代更新。

+

数据库设计

一共使用了5个表:

+

+

具体的初始化DDL如下:

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
CREATE DATABASE `db_octopus` CHARSET 'utf8mb4' COLLATE 'utf8mb4_unicode_520_ci';

USE `db_octopus`;

CREATE TABLE `url_map`
(
`id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`short_url` VARCHAR(32) NOT NULL COMMENT '短链URL',
`long_url` VARCHAR(768) NOT NULL COMMENT '长链URL',
`short_url_digest` VARCHAR(128) NOT NULL COMMENT '短链摘要',
`long_url_digest` VARCHAR(128) NOT NULL COMMENT '长链摘要',
`compression_code` VARCHAR(16) NOT NULL COMMENT '压缩码',
`description` VARCHAR(256) COMMENT '描述',
`url_status` TINYINT NOT NULL DEFAULT 1 COMMENT 'URL状态,1:正常,2:已失效',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`edit_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '创建者',
`editor` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '更新者',
`deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标识',
`version` BIGINT NOT NULL DEFAULT 1 COMMENT '版本号',
UNIQUE uniq_compression_code (`compression_code`),
INDEX idx_short_url (`short_url`),
INDEX idx_short_url_digest (`short_url_digest`),
INDEX idx_long_url_digest (`long_url_digest`)
) COMMENT 'URL映射表';

CREATE TABLE `domain_conf`
(
`id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`domain_value` VARCHAR(16) NOT NULL COMMENT '域名',
`protocol` VARCHAR(8) NOT NULL DEFAULT 'https' COMMENT '协议,https或者http',
`domain_status` TINYINT NOT NULL DEFAULT 1 COMMENT '域名状态,1:正常,2:已失效',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`edit_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '创建者',
`editor` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '更新者',
`deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标识',
`version` BIGINT NOT NULL DEFAULT 1 COMMENT '版本号',
UNIQUE uniq_domain (`domain_value`)
) COMMENT '域名配置';

CREATE TABLE `compression_code`
(
`id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`compression_code` VARCHAR(16) NOT NULL COMMENT '压缩码',
`code_status` TINYINT NOT NULL DEFAULT 1 COMMENT '压缩码状态,1:未使用,2:已使用,3:已失效',
`sequence_value` VARCHAR(64) NOT NULL COMMENT '序列(盐)',
`strategy` VARCHAR(8) NOT NULL DEFAULT 'sequence' COMMENT '策略,sequence或者hash',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`edit_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '创建者',
`editor` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '更新者',
`deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标识',
`version` BIGINT NOT NULL DEFAULT 1 COMMENT '版本号',
UNIQUE uniq_compression_code (`compression_code`)
) COMMENT '压缩码';

CREATE TABLE `visit_statistics`
(
`id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`edit_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '创建者',
`editor` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '更新者',
`deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标识',
`version` BIGINT NOT NULL DEFAULT 1 COMMENT '版本号',
`statistics_date` DATE NOT NULL DEFAULT '1970-01-01' COMMENT '统计日期',
`pv_count` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '页面流量数',
`uv_count` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '独立访客数',
`ip_count` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '独立IP数',
`effective_redirection_count` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '有效跳转数',
`ineffective_redirection_count` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '无效跳转数',
`compression_code` VARCHAR(16) NOT NULL COMMENT '压缩码',
`short_url_digest` VARCHAR(128) NOT NULL COMMENT '短链摘要',
`long_url_digest` VARCHAR(128) NOT NULL COMMENT '长链摘要',
UNIQUE uniq_date_code_digest (`statistics_date`, `compression_code`)
) COMMENT '访问数据统计';

CREATE TABLE `transform_event_record`
(
`id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`edit_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '创建者',
`editor` VARCHAR(32) NOT NULL DEFAULT 'admin' COMMENT '更新者',
`deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标识',
`version` BIGINT NOT NULL DEFAULT 1 COMMENT '版本号',
`unique_identity` VARCHAR(128) NOT NULL COMMENT '唯一身份标识,SHA-1(客户端IP-UA)',
`client_ip` VARCHAR(64) NOT NULL COMMENT '客户端IP',
`short_url` VARCHAR(32) NOT NULL COMMENT '短链URL',
`long_url` VARCHAR(768) NOT NULL COMMENT '长链URL',
`short_url_digest` VARCHAR(128) NOT NULL COMMENT '短链摘要',
`long_url_digest` VARCHAR(128) NOT NULL COMMENT '长链摘要',
`compression_code` VARCHAR(16) NOT NULL COMMENT '压缩码',
`record_time` DATETIME NOT NULL COMMENT '记录时间戳',
`user_agent` VARCHAR(2048) COMMENT 'UA',
`cookie_value` VARCHAR(2048) COMMENT 'cookie',
`query_param` VARCHAR(2048) COMMENT 'URL参数',
`province` VARCHAR(32) COMMENT '省份',
`city` VARCHAR(32) COMMENT '城市',
`phone_type` VARCHAR(64) COMMENT '手机型号',
`browser_type` VARCHAR(64) COMMENT '浏览器类型',
`browser_version` VARCHAR(128) COMMENT '浏览器版本号',
`os_type` VARCHAR(32) COMMENT '操作系统型号',
`device_type` VARCHAR(32) COMMENT '设备型号',
`os_version` VARCHAR(32) COMMENT '操作系统版本号',
`transform_status` TINYINT NOT NULL DEFAULT 0 COMMENT '转换状态,1:转换成功,2:转换失败,3:重定向成功,4:重定向失败',
INDEX idx_record_time (`record_time`),
INDEX idx_compression_code (`compression_code`),
INDEX idx_short_url_digest (`short_url_digest`),
INDEX idx_long_url_digest (`long_url_digest`),
INDEX idx_unique_identity (`unique_identity`)
) COMMENT '转换事件记录';
+ +

压缩码生成模块实现

压缩码生成的方法比较简单:

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private final SequenceGenerator sequenceGenerator;    # <------------- 雪花算法序列生成器
@Value("${compress.code.batch:100}")
private Integer compressCodeBatch;
......


private void generateBatchCompressionCodes() {
for (int i = 0; i < compressCodeBatch; i++) {
long sequence = sequenceGenerator.generate();
CompressionCode compressionCode = new CompressionCode();
compressionCode.setSequenceValue(String.valueOf(sequence));
String code = ConversionUtils.X.encode62(sequence); # <-------------- 10进制转62进制
code = code.substring(code.length() - 6);
compressionCode.setCompressionCode(code);
compressionCodeDao.insertSelective(compressionCode);
}
}
+ +

总是批量生成可用的压缩码,查询的时候只需要查出当前未被使用的第一个压缩码即可。

+

容器拦截器链实现

容器的拦截器需要实现org.springframework.web.server.WebFilterWebFluxFilter接口),主要有四个实现(顺序如下):

+
    +
  • MappedDiagnosticContextFilter:引入transmittable-thread-local通过MDCTraceId的请求上下文绑定,WebFlux的线程模型和常见的Servlet容器的线程模型不一样,这里不能直接使用ThreadLocal或者Slf4j中原有的MDC实现
  • +
  • BlockIpFilter:判断客户端请求IP是否命中黑名单
  • +
  • AccessDomainFilter:判断域名是否命中短链域名白名单(可选的,因为外部已经通过NGINX做了一次拦截,这个实现是可有可无的)
  • +
  • ExcludeUriFilter:判断当前请求的URI是否命中了URI黑名单
  • +
+

这里简单展示一下MappedDiagnosticContextFilter的实现:

+
1
2
3
4
5
6
7
8
9
10
11
@Order(value = Integer.MIN_VALUE)
@Component
public class MappedDiagnosticContextFilter implements WebFilter {

@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
String uuid = UUID.randomUUID().toString();
MDC.put("TRACE_ID", uuid);
return chain.filter(exchange).then(Mono.fromRunnable(() -> MDC.remove("TRACE_ID")));
}
}
+ +

上面的TRACE_ID是配合项目的logback.xml中的pattern使用。另外需要参考https://github.com/alibaba/transmittable-thread-local/blob/master/docs/requirement-scenario.mdlogbacktransmittable-thread-local做集成的场景:

+

+

这里为了方便管理和升级版本,笔者直接把logback-mdc-ttl的源码实现改造好后放到项目中。

+

服务内部拦截器链实现

服务内部的拦截器链主要负责请求参数解析、URL映射转换、重定向和访问转换结果记录,顶层接口设计如下:

+
1
2
3
4
5
6
7
8
9
10
11
12
13
public interface TransformFilter {

default int order() {
return 1;
}

default void init(TransformContext context) {

}

void doFilter(TransformFilterChain chain,
TransformContext context);
}
+ +

TransformContext是一个属性承载类,本质是一个普通的JavaBean,设计如下:

+

+

目前内置了4个拦截器实现,包括:

+
    +
  • ExtractRequestHeaderTransformFilter:请求头解析
  • +
  • UrlTransformFilterURL转换
  • +
  • RedirectionTransformFilter:重定向处理
  • +
  • TransformEventProcessTransformFilter:转换事件记录
  • +
+

UrlTransformFilter为例子,源码如下:

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@Slf4j
@Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Component
public class UrlTransformFilter implements TransformFilter {

@Autowired
private UrlMapCacheManager urlMapCacheManager;

@Override
public int order() {
return 2;
}

@Override
public void init(TransformContext context) {

}

@Override
public void doFilter(TransformFilterChain chain,
TransformContext context) {
String compressionCode = context.getCompressionCode();
UrlMap urlMap = urlMapCacheManager.loadUrlMapCacheByCompressCode(compressionCode);
context.setTransformStatus(TransformStatus.TRANSFORM_FAIL);
if (Objects.nonNull(urlMap)) {
context.setTransformStatus(TransformStatus.TRANSFORM_SUCCESS);
context.setParam(TransformContext.PARAM_LONG_URL_KEY, urlMap.getLongUrl());
context.setParam(TransformContext.PARAM_SHORT_URL_KEY, urlMap.getShortUrl());
chain.doFilter(context);
} else {
log.warn("压缩码[{}]不存在或异常,终止TransformFilterChain执行,并且重定向到404页面......", compressionCode);
throw new RedirectToErrorPageException(String.format("[c:%s]", compressionCode));
}
}
}
+ +

所有的服务内拦截器的scope都是prototype,意味着每次初始化拦截器链都会重新创建对应的Bean

+

主控制器实现

因为octopus只做短链访问的入口,后台管理的功能交给另外的服务实现,此服务只有一个控制器,控制器里面只有一个方法:

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@RequiredArgsConstructor
@RestController
public class OctopusController {

private final UrlMapService urlMapService;

@GetMapping(path = "/{compressionCode}")
@ResponseStatus(HttpStatus.FOUND)
public Mono<Void> dispatch(@PathVariable(name = "compressionCode") String compressionCode, ServerWebExchange exchange) {
ServerHttpRequest request = exchange.getRequest();
TransformContext context = new TransformContext();
context.setCompressionCode(compressionCode);
context.setParam(TransformContext.PARAM_SERVER_WEB_EXCHANGE_KEY, exchange);
if (Objects.nonNull(request.getRemoteAddress())) {
context.setParam(TransformContext.PARAM_REMOTE_HOST_NAME_KEY, request.getRemoteAddress().getHostName());
}
HttpHeaders httpHeaders = request.getHeaders();
Set<String> headerNames = httpHeaders.keySet();
if (!CollectionUtils.isEmpty(headerNames)) {
headerNames.forEach(headerName -> {
String headerValue = httpHeaders.getFirst(headerName);
context.setHeader(headerName, headerValue);
});
}
// 处理转换
urlMapService.processTransform(context);
// 这里有一个技巧,flush用到的线程和内部逻辑处理的线程不是同一个线程,所有要用到TTL -- 和Servlet容器不一样,所以目前写的比较别扭
return Mono.fromRunnable(context.getRedirectAction());
}
}
+ +

这个主控制的分发压缩码方法只负责封装参数调用服务内部拦截器链进行后续的处理。然后添加一个全局的异常处理器,把所有的异常或者非法操作引导到一个自定义的404页面(甚至可以在上面挂一点广告):

+

+

Dubbo契约实现

octopus-contract是一个完全独立的模块,甚至可以说它是一个完全独立的项目,主要作用是提供契约API,让其他服务引入,让octopus-server模块进行实现。契约接口定义如下:

+
1
2
3
4
public interface OctopusApi {

Response<CreateUrlMapResponse> createUrlMap(CreateUrlMapRequest request);
}
+ +

基于Dubbo的实现如下:

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@DubboService(retries = -1)
public class DefaultOctopusApi implements OctopusApi {

@Autowired
private UrlMapService urlMapService;

@Value("${default.octopus.domain}")
private String domain;

@Override
public Response<CreateUrlMapResponse> createUrlMap(CreateUrlMapRequest request) {
UrlMap urlMap = new UrlMap();
urlMap.setUrlStatus(UrlMapStatus.AVAILABLE.getValue());
urlMap.setLongUrl(request.getLongUrl());
urlMap.setDescription(request.getDescription());
String shortUrl = urlMapService.createUrlMap(domain, urlMap);
return Response.succeed(new CreateUrlMapResponse(request.getRequestId(), shortUrl));
}
}
+ +

生产中契约模块做了比较多的特性定制,这里只举一个简单实现的例子。

+

部署架构

octopus服务集群单独部署,支持无限添加节点,部署架构的关键在于网络架构,内层的负载均衡使用了Nginx,最外层的负载均衡使用了云负载均衡,如阿里云的SLB或者UCloudULB。添加或者移除短链域名,关键在于修改Nginx的配置。基本的架构如下:

+

+

只要保证负载均衡池指向octopus集群即可,短链的域名可能动态增删,操作完之后只需要nginx -s -reload刷新一下Nginx的配置即可。

+

使用短链服务

先在domain_conf表写入一条本地域名和端口的数据:

+

+

编写一个集成测试类,创建一个短链映射:

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Slf4j
@SpringBootTest(classes = OctopusServerApplication.class, properties = "spring.profiles.active=local")
@RunWith(SpringRunner.class)
public class UrlMapServiceTest {

@Autowired
private UrlMapService urlMapService;

@Test
public void createUrlMap() {
String domain = "localhost:9099";
UrlMap urlMap = new UrlMap();
urlMap.setUrlStatus(UrlMapStatus.AVAILABLE.getValue());
urlMap.setLongUrl("https://throwx.cn/2020/08/24/canal-ha-cluster-guide");
urlMap.setDescription("测试短链");
String url = urlMapService.createUrlMap(domain, urlMap);
log.info("生成的短链:{}", url);
}
}
// 某次执行的结果如下:生成的短链:http://localhost:9099/Myt8qW
+ +

基于本地配置启动项目,然后访问http://localhost:9099/Myt8qW,效果如下:

+

+

日志如下:

+
1
2
[2020-12-27 19:29:22,285] [INFO] cn.throwx.octopus.server.application.consumer.TransformEventConsumer [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1] [1c603903-e8d8-4072-aa97-6abf614b9411] - 接收到URL转换事件,内容:{"clientIp":"192.168.211.113","compressionCode":"Myt8qW","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36","cookieValue":"Webstorm-734c3b68=9b8b3560-41f5-478a-93d0-b02128b1022f; __gads=ID=28121bd829638f67-2286c86e7fc400d3:T=1604132165:RT=1604132165:S=ALNI_MbsMQROv6swaC8kf4ux2suZm_GZXA; Hm_lvt_4df6907aebab752244c3ca1432b4ff57=1605930058,1607228133","timestamp":1609068562262,"shortUrlString":"http://localhost:9099/Myt8qW","longUrlString":"https://throwx.cn/2020/08/24/canal-ha-cluster-guide","transformStatusValue":3}......
[2020-12-27 19:29:22,353] [INFO] cn.throwx.octopus.server.application.consumer.TransformEventConsumer [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1] [1c603903-e8d8-4072-aa97-6abf614b9411] - 记录URL转换事件完成......
+ +

查看转换事件记录表的数据:

+

+

后续功能迭代

前期方案有一个安全隐患:没有做压缩码的白名单,容易被基于短链域名,伪造压缩码拼接短链接的方法进行攻击。解决方案是在容器的拦截器链添加或者替换一个基于布隆过滤器实现的压缩码(短链接)白名单拦截器,这样就能在前期拦截了绝大部分恶意伪造的压缩码,让极少量命中了错误率部分的恶意压缩码流到后面的处理逻辑中进行判断。另外,可以引入Caffeine配合Redis做两级缓存,毕竟本地缓存的速度更快。

+

小结

octopus初版是一个4小时紧急迭代出来的一个微型项目,到现在为止更新了很多次,生产上已经基本稳定。文中描述的版本是公司生产版本的移植版,精简了大量代码同时移除了一些业务耦合的设计,这里把源码开放出来,让一些有可能用到短链服务的场景提供一个可参考但尽可能不要复制的解决思路。源码仓库:

+
    +
  • Giteehttps://gitee.com/throwableDoge/octopus
  • +
  • Githubhttps://github.com/zjcscut/octopus
  • +
+

代码都在main分支。

+

彩蛋

最近鸽了很长一段时间,原因是年底比较多业务功能迭代,内部的一个标签服务重构花了大量时间。笔者一直在摸索着通过”分片”、”异步”等等思想,在时间可控的前提下,对小数据量(百万和千万级别)前提下,通过常用的关系型数据库、缓存、消息队列等非大数据平台架构替代实现《用户画像方法论与工程化解决方案》里面提到的解决方案。

+

+

标签服务内部的代号是”千寻”,取自于辛弃疾《青玉案元夕》中的”众里寻他千百度”,项目名来自于宫崎骏的动漫《千与千寻》的女主千寻(千寻罗马音是chihiro):

+

+

待后面项目上线一段时间稳定后,应该会抽时间写一个系列谈谈怎么不用大数据那套体系,提供用户画像的工程化解决方案。

+

(本文完 c-10-d e-a-20201227)

+ + +
+ +
+
+ + + + + + +
+
+
短链接服务Octopus的实现与源码开放
+
https://awaw.cc/post/whats-short-link/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2023年7月20日
+
+ + +
+
更新于
+
2023年7月20日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/whimsy/index.html b/post/whimsy/index.html new file mode 100644 index 0000000..1b08de3 --- /dev/null +++ b/post/whimsy/index.html @@ -0,0 +1,900 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 奇思妙想💭 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

奇思妙想💭

+ + +
+ + + +

想象

想象中的黑洞

+

在造物主的奇妙创造中,智慧生命被孕育而生,被赋予了独特的使命。一部分智慧生命被委派为造物主的助手,肩负着神圣的使命,辅助他完成众多事务。然而,其他的智慧生命则被放置在宇宙沙盒之中,这个神秘的沙盒划分成了无数个对照组,每个对照组即如同一个平行宇宙。

+

尽管这些平行宇宙共享着相同的宇宙环境,但造物主巧妙地设置了一种绝妙的隔离机制,使得不同对照组之间相互孤立,有如我们所熟知的虚拟机。每个对照组的智慧生命都在自己独特的条件下发展和进化,彼此并不感知对方的存在,仿佛分居于各自的宇宙之中。

+

造物主寄望于观察自己创造的智慧生命在多样条件下的发展轨迹。然而,为了避免智慧生命的过快发展而导致自我毁灭,他睿智地赋予了它们有限的寿命。这样一来,生命将在有限的时间内经历成长、繁荣与变化,却不至于过早迎来终结。

+

基于这个精妙的构思,人类注定永远无法自行发现存在于其他平行宇宙中的外星生命——即使是与我们自身相似的存在。除非造物主以某种形式干预,揭示了这些神秘生命的存在。这样的干预可能是一个宏大的奇迹,或者是一连串微妙的迹象,引导我们开始怀疑我们不是宇宙中唯一的智慧生命。

+

在这美妙而神秘的创世之旅中,我们不妨保持谦卑和好奇,探索宇宙和生命的奥秘,也许在某一刻,我们会获得关于我们自身存在意义的更深刻认知。

+

扩展

让我们继续扩展这个设想,将其构建成一个虚构的宇宙场景。

+

星云

+

在这个造物主创造的宇宙沙盒中,有许多平行宇宙(对照组),每个宇宙都是一个独特的实验场景。每个实验场景都有不同的初始条件和规则,从微观层面到宏观层面都存在微妙的差异,以产生各种可能性。

+

在月球表面看地球

+
    +
  • 宇宙的初始条件:每个宇宙都有自己独特的初始条件。有些可能具有更多的自然资源和生态平衡,而另一些可能在资源稀缺和环境恶劣的情况下开始。

    +
  • +
  • 生命的诞生:在每个宇宙中,生命以各种形式诞生。从单细胞生物到复杂的多细胞生物,从植物到动物,各种形态的生命在不同的宇宙中演化。

    +
  • +
  • 有限的寿命:造物主赋予智慧生命有限的寿命,以避免其发展过快而自我毁灭。这使得智慧生命需要理性和谨慎对待资源和科技的发展,以延续自己的文明。

    +
  • +
  • 智慧生命的出现:在某些宇宙中,智慧生命可能会逐渐出现。他们会经历进化、文明的崛起和科技的发展。不同宇宙中智慧生命的特点和文明水平可能千差万别。

    +
  • +
  • 宇宙沙盒中的对照组:这些对照组可能不仅包括类似地球的情景,也包括完全不同的星球和宇宙结构。有些对照组中可能存在比地球上更高级的生物形式,也有可能有完全不同类型的智慧生命。

    +
  • +
  • 交互与隔离:虽然这些宇宙共享相似的宇宙环境,但造物主将它们隔离开来,避免相互干扰,以保持实验的独立性。智慧生命之间并不知道其他宇宙的存在,让他们自主发展。

    +
  • +
  • 观察和干预:造物主时不时地观察不同对照组中智慧生命的进展,他们也许通过超自然手段对这些对照组进行干预,但也可能仅是静观其变。

    +
  • +
  • 生命的进化与文明:不同对照组中的智慧生命会经历不同的进化历程和文明发展。有些对照组的文明可能迅速崛起,创造出强大的科技和社会结构,而另一些对照组可能在原始阶段停滞不前。

    +
  • +
  • 实验的结果:每个宇宙的结果都是独一无二的。有些宇宙的智慧生命可能因为资源利用不当或自相残杀而灭亡。而另一些宇宙的智慧生命可能会团结合作,探索宇宙的奥秘,并达到一个高度先进的文明。

    +
  • +
  • 自行发现外星人的难题:基于设定中的隔离和宇宙沙盒的概念,人类在自然条件下可能难以自行发现其他对照组中的外星文明。这是因为这些对照组是相互隔离的,彼此无法直接联系。除非造物主进行干预或解除隔离,否则人类可能永远不会直接接触其他宇宙中的外星文明。

    +
  • +
+

这样的设想,将宇宙看作一个巨大的实验室,造物主作为超自然的存在,掌控着这个宏伟的观察与实验计划。在这个设定下,人类和其他智慧生命都是宇宙中的一部分,我们的存在和发展也可能是造物主实验的一部分。

+

同时也为我们提供了一种有趣的哲学思考,让我们思考宇宙的无限可能性以及我们作为智慧生命的存在和发展。虽然这只是一个设想,但它为我们提供了一种探索未知和宇宙奥秘的视角。

+

类比

当我们将老鼠乌托邦(25号宇宙)实验的结果与上文观点相结合,可以得到一些有趣的启示和类比。

+

老鼠乌托邦实验

+
    +
  • 在上文设想中,造物主创造了智慧生命并观察他们在宇宙中的发展。类似地,老鼠乌托邦实验也是一个观察社会动物(老鼠)在特定条件下的发展。这两者都是通过在特定环境中设定条件和规则来探索生命的进化和行为。

    +
  • +
  • 有限的资源:在老鼠乌托邦实验中,随着人口密度的增加,资源的竞争变得更为激烈。类似地,在上文观点中,造物主给予生命有限的资源,可能是为了观察智慧生命如何在资源有限的情况下适应和发展。

    +
  • +
  • 社会结构与动力:实验中老鼠群体的社会结构出现了退化和混乱,而在上文设想中,智慧生命也可能面临类似的挑战。人类社会中也存在着资源竞争、社会不平等和文明冲突等问题,而这些因素可能影响文明的发展和社会动力。

    +
  • +
  • 行为沮丧:老鼠乌托邦实验中,高度拥挤和资源过剩的环境导致了老鼠社会的异常行为,这类似于上文观点中对于发展太快可能导致自行灭亡的担忧。这个类比可能引发我们对于人类社会中过度竞争、资源过剩和社会动态的反思。

    +
  • +
  • 自我调整和适应:在实验和上文设想中,动物和智慧生命都面临着适应环境和资源限制的挑战。在类似于乌托邦实验中,老鼠群体可能最终自我调整或消亡,而在上文设想中的智慧生命可能会逐渐适应和发展,寻找合适的平衡。

    +
  • +
+

通过将老鼠乌托邦实验与上文观点相结合,我们可以从一个不同的角度思考社会动物和智慧生命在特定环境下的行为和进化。这样的类比提醒我们在探讨人类社会和文明发展的同时,也要关注资源的合理分配、社会结构的稳定和适应环境的能力。同时,也让我们思考造物主设立这样的实验是否旨在观察智慧生命如何面对类似挑战,以及从中获取对于宇宙和生命的更深刻理解。

+
+

注:以上内容源于想象和假设。

+
+ + +
+ +
+
+ + + + + + +
+
+
奇思妙想💭
+
https://awaw.cc/post/whimsy/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2023年8月4日
+
+ + +
+
更新于
+
2023年9月19日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+
+ + +
+ +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/world-peace/index.html b/post/world-peace/index.html new file mode 100644 index 0000000..31347c1 --- /dev/null +++ b/post/world-peace/index.html @@ -0,0 +1,858 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 心中尚未崩坏的地方 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + +
+
+
+ + +
+ +
+
+
+
+

心中尚未崩坏的地方

+ + +
+ +

World peace

+ +
+ +

2017年,叙利亚阿勒颇,70岁的阿布·奥马尔(Abu Omar)在被毁的卧室里抽着烟斗听音乐

+

1940年,在德军轰炸考文垂后, 一位优雅的女士踩着废墟, 前往邮桶寄一封不知何时能被收到的信

+

1945年8月14日,纽约时代广场的“胜利之吻”,日本宣布投降,纽约民众在街头庆祝胜利。一位水兵在时代广场的欢庆活动,亲吻了身旁的一位女护士

+
+ +
+ +
+
+ + + + + + +
+
+
心中尚未崩坏的地方
+
https://awaw.cc/post/world-peace/
+
+
+ +
+
作者
+
pdone
+
+ + +
+
发布于
+
2019年4月9日
+
+ + +
+
更新于
+
2023年7月14日
+
+ + +
+
许可协议
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + + + +
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ + + +
+
+
+
+ +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sitemap.txt b/sitemap.txt new file mode 100644 index 0000000..32e4b84 --- /dev/null +++ b/sitemap.txt @@ -0,0 +1,84 @@ +https://awaw.cc/post/awesome/ +https://awaw.cc/post/free-control/ +https://awaw.cc/post/my-second-pc/ +https://awaw.cc/post/whimsy/ +https://awaw.cc/post/js-map/ +https://awaw.cc/post/whats-short-link/ +https://awaw.cc/post/net-loading/ +https://awaw.cc/post/python-historytoday/ +https://awaw.cc/post/world-peace/ +https://awaw.cc/post/luoyang-subway/ +https://awaw.cc/post/listen1/ +https://awaw.cc/post/car-code-generator/ +https://awaw.cc/post/bat-date/ +https://awaw.cc/post/ms-opensource/ +https://awaw.cc/post/msi-b450m-mortar/ +https://awaw.cc/post/my-first-nas/ +https://awaw.cc/post/steam-free-game/ +https://awaw.cc/post/ssms18-not-run/ +https://awaw.cc/post/sql-tuning/ +https://awaw.cc/post/sql-date-format/ +https://awaw.cc/post/revit-category/ +https://awaw.cc/post/revit-category-all/ +https://awaw.cc/post/openssl-csr/ +https://awaw.cc/post/js-dateformat/ +https://awaw.cc/post/md-codeblock-lang/ +https://awaw.cc/post/learn-bridge-design/ +https://awaw.cc/post/learn-road-design/ +https://awaw.cc/post/js-cryptojs/ +https://awaw.cc/post/js-5tip/ +https://awaw.cc/post/git-command/ +https://awaw.cc/post/dapper-helper/ +https://awaw.cc/movecar/ +https://awaw.cc/about/ +https://awaw.cc/post/deepin-20/ +https://awaw.cc/ +https://awaw.cc/tags/Software/ +https://awaw.cc/tags/Service/ +https://awaw.cc/tags/Awesome/ +https://awaw.cc/tags/NET/ +https://awaw.cc/tags/QRCode/ +https://awaw.cc/tags/OpenSource/ +https://awaw.cc/tags/Whimsy/ +https://awaw.cc/tags/Music/ +https://awaw.cc/tags/PlugIn/ +https://awaw.cc/tags/%E6%89%B9%E5%A4%84%E7%90%86/ +https://awaw.cc/tags/Database/ +https://awaw.cc/tags/ORM/ +https://awaw.cc/tags/SQL/ +https://awaw.cc/tags/%E6%95%B0%E6%8D%AE%E5%BA%93/ +https://awaw.cc/tags/SSL/ +https://awaw.cc/tags/CA/ +https://awaw.cc/tags/cert/ +https://awaw.cc/tags/async/ +https://awaw.cc/tags/Note/ +https://awaw.cc/tags/RoadDesign/ +https://awaw.cc/tags/Git/ +https://awaw.cc/tags/BridgeDesign/ +https://awaw.cc/tags/Java/ +https://awaw.cc/tags/ShortLink/ +https://awaw.cc/tags/JS/ +https://awaw.cc/tags/DateFormat/ +https://awaw.cc/tags/Security/ +https://awaw.cc/tags/Map/ +https://awaw.cc/tags/%E5%9C%B0%E5%9B%BE/ +https://awaw.cc/tags/MD/ +https://awaw.cc/tags/Markdown/ +https://awaw.cc/tags/Revit/ +https://awaw.cc/tags/News/ +https://awaw.cc/tags/Python/ +https://awaw.cc/tags/reptile/ +https://awaw.cc/tags/PC/ +https://awaw.cc/tags/%E4%B8%BB%E6%9D%BF/ +https://awaw.cc/tags/PCI-E/ +https://awaw.cc/tags/NAS/ +https://awaw.cc/tags/Synology/ +https://awaw.cc/tags/DIY/ +https://awaw.cc/tags/Linux/ +https://awaw.cc/tags/OS/ +https://awaw.cc/tags/Steam/ +https://awaw.cc/tags/Game/ +https://awaw.cc/tags/Peace/ +https://awaw.cc/categories/Share/ +https://awaw.cc/categories/Tools/ +https://awaw.cc/categories/Developer/ diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..e392d81 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,664 @@ + + + + + https://awaw.cc/post/awesome/ + + 2024-03-26 + + monthly + 0.6 + + + + https://awaw.cc/post/free-control/ + + 2024-03-21 + + monthly + 0.6 + + + + https://awaw.cc/post/my-second-pc/ + + 2023-12-28 + + monthly + 0.6 + + + + https://awaw.cc/post/whimsy/ + + 2023-09-19 + + monthly + 0.6 + + + + https://awaw.cc/post/js-map/ + + 2023-07-31 + + monthly + 0.6 + + + + https://awaw.cc/post/whats-short-link/ + + 2023-07-20 + + monthly + 0.6 + + + + https://awaw.cc/post/net-loading/ + + 2023-07-14 + + monthly + 0.6 + + + + https://awaw.cc/post/python-historytoday/ + + 2023-07-14 + + monthly + 0.6 + + + + https://awaw.cc/post/world-peace/ + + 2023-07-14 + + monthly + 0.6 + + + + https://awaw.cc/post/luoyang-subway/ + + 2023-07-14 + + monthly + 0.6 + + + + https://awaw.cc/post/listen1/ + + 2023-07-14 + + monthly + 0.6 + + + + https://awaw.cc/post/car-code-generator/ + + 2023-07-14 + + monthly + 0.6 + + + + https://awaw.cc/post/bat-date/ + + 2023-07-13 + + monthly + 0.6 + + + + https://awaw.cc/post/ms-opensource/ + + 2023-07-05 + + monthly + 0.6 + + + + https://awaw.cc/post/msi-b450m-mortar/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/post/my-first-nas/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/post/steam-free-game/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/post/ssms18-not-run/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/post/sql-tuning/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/post/sql-date-format/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/post/revit-category/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/post/revit-category-all/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/post/openssl-csr/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/post/js-dateformat/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/post/md-codeblock-lang/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/post/learn-bridge-design/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/post/learn-road-design/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/post/js-cryptojs/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/post/js-5tip/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/post/git-command/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/post/dapper-helper/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/movecar/ + + 2023-07-04 + + monthly + 0.6 + + + + https://awaw.cc/about/ + + 2023-07-03 + + monthly + 0.6 + + + + https://awaw.cc/post/deepin-20/ + + 2022-06-10 + + monthly + 0.6 + + + + + https://awaw.cc/ + 2024-03-26 + daily + 1.0 + + + + + https://awaw.cc/tags/Software/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Service/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Awesome/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/NET/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/QRCode/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/OpenSource/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Whimsy/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Music/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/PlugIn/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/%E6%89%B9%E5%A4%84%E7%90%86/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Database/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/ORM/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/SQL/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/%E6%95%B0%E6%8D%AE%E5%BA%93/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/SSL/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/CA/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/cert/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/async/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Note/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/RoadDesign/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Git/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/BridgeDesign/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Java/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/ShortLink/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/JS/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/DateFormat/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Security/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Map/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/%E5%9C%B0%E5%9B%BE/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/MD/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Markdown/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Revit/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/News/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Python/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/reptile/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/PC/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/%E4%B8%BB%E6%9D%BF/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/PCI-E/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/NAS/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Synology/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/DIY/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Linux/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/OS/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Steam/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Game/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/tags/Peace/ + 2024-03-26 + weekly + 0.2 + + + + + + https://awaw.cc/categories/Share/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/categories/Tools/ + 2024-03-26 + weekly + 0.2 + + + + https://awaw.cc/categories/Developer/ + 2024-03-26 + weekly + 0.2 + + + diff --git a/tags/Awesome/index.html b/tags/Awesome/index.html new file mode 100644 index 0000000..f3d0000 --- /dev/null +++ b/tags/Awesome/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Awesome - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2023

+ + + +
🌈Awesome Software / Service
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/BridgeDesign/index.html b/tags/BridgeDesign/index.html new file mode 100644 index 0000000..fccd537 --- /dev/null +++ b/tags/BridgeDesign/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - BridgeDesign - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2023

+ + + +
桥梁设计学习笔记
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/CA/index.html b/tags/CA/index.html new file mode 100644 index 0000000..9c645a2 --- /dev/null +++ b/tags/CA/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - CA - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2018

+ + + +
OpenSSL生成多域名CSR
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/DIY/index.html b/tags/DIY/index.html new file mode 100644 index 0000000..4213795 --- /dev/null +++ b/tags/DIY/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - DIY - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2019

+ + + +
年轻人的第二台PC诞生
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Database/index.html b/tags/Database/index.html new file mode 100644 index 0000000..f706efd --- /dev/null +++ b/tags/Database/index.html @@ -0,0 +1,508 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Database - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 3 篇文章

+
+ + + + +

2021

+ + + +
数据库调优
+
+ + + +

2020

+ + + +
DapperHelper
+
+ + + +

2018

+ + + +
SQL日期时间格式转换
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/DateFormat/index.html b/tags/DateFormat/index.html new file mode 100644 index 0000000..63eb2e8 --- /dev/null +++ b/tags/DateFormat/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - DateFormat - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2018

+ + + +
JavaScript获取时间并格式化
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Game/index.html b/tags/Game/index.html new file mode 100644 index 0000000..9924780 --- /dev/null +++ b/tags/Game/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Game - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2019

+ + + +
Steam免费游戏一键领取
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Git/index.html b/tags/Git/index.html new file mode 100644 index 0000000..bfb1616 --- /dev/null +++ b/tags/Git/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Git - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2021

+ + + +
最常用的 35 个 Git 命令
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/JS/index.html b/tags/JS/index.html new file mode 100644 index 0000000..ebc0ac7 --- /dev/null +++ b/tags/JS/index.html @@ -0,0 +1,508 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - JS - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Java/index.html b/tags/Java/index.html new file mode 100644 index 0000000..220b7bb --- /dev/null +++ b/tags/Java/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Java - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2023

+ + + +
短链接服务Octopus的实现与源码开放
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Linux/index.html b/tags/Linux/index.html new file mode 100644 index 0000000..73cd19f --- /dev/null +++ b/tags/Linux/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Linux - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/MD/index.html b/tags/MD/index.html new file mode 100644 index 0000000..f6486e2 --- /dev/null +++ b/tags/MD/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - MD - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2021

+ + + +
Markdown代码块支持的语言
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Map/index.html b/tags/Map/index.html new file mode 100644 index 0000000..4f4ced1 --- /dev/null +++ b/tags/Map/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Map - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2018

+ + + +
JS地图使用笔记
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Markdown/index.html b/tags/Markdown/index.html new file mode 100644 index 0000000..4b0eb4f --- /dev/null +++ b/tags/Markdown/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Markdown - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2021

+ + + +
Markdown代码块支持的语言
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Music/index.html b/tags/Music/index.html new file mode 100644 index 0000000..6310ce6 --- /dev/null +++ b/tags/Music/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Music - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2018

+ + + +
Listen 1 – One for all free music in China
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/NAS/index.html b/tags/NAS/index.html new file mode 100644 index 0000000..7f380b1 --- /dev/null +++ b/tags/NAS/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - NAS - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2022

+ + + +
NAS诞生记
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/NET/index.html b/tags/NET/index.html new file mode 100644 index 0000000..342bb25 --- /dev/null +++ b/tags/NET/index.html @@ -0,0 +1,523 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - .NET - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/News/index.html b/tags/News/index.html new file mode 100644 index 0000000..cf6a1e2 --- /dev/null +++ b/tags/News/index.html @@ -0,0 +1,499 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - News - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+ +
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Note/index.html b/tags/Note/index.html new file mode 100644 index 0000000..7d52a97 --- /dev/null +++ b/tags/Note/index.html @@ -0,0 +1,496 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Note - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/ORM/index.html b/tags/ORM/index.html new file mode 100644 index 0000000..72ca5e0 --- /dev/null +++ b/tags/ORM/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - ORM - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2020

+ + + +
DapperHelper
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/OS/index.html b/tags/OS/index.html new file mode 100644 index 0000000..fa95886 --- /dev/null +++ b/tags/OS/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - OS - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/OpenSource/index.html b/tags/OpenSource/index.html new file mode 100644 index 0000000..e30cb12 --- /dev/null +++ b/tags/OpenSource/index.html @@ -0,0 +1,517 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - OpenSource - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/PC/index.html b/tags/PC/index.html new file mode 100644 index 0000000..58eaf43 --- /dev/null +++ b/tags/PC/index.html @@ -0,0 +1,496 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - PC - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ + +
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/PCI-E/index.html b/tags/PCI-E/index.html new file mode 100644 index 0000000..073e255 --- /dev/null +++ b/tags/PCI-E/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - PCI_E - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Peace/index.html b/tags/Peace/index.html new file mode 100644 index 0000000..966db4e --- /dev/null +++ b/tags/Peace/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Peace - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2019

+ + + +
心中尚未崩坏的地方
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/PlugIn/index.html b/tags/PlugIn/index.html new file mode 100644 index 0000000..034dfd6 --- /dev/null +++ b/tags/PlugIn/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - PlugIn - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2018

+ + + +
Listen 1 – One for all free music in China
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Python/index.html b/tags/Python/index.html new file mode 100644 index 0000000..a9fd46f --- /dev/null +++ b/tags/Python/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Python - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2018

+ + + +
用Python爬 历史的今天 数据
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/QRCode/index.html b/tags/QRCode/index.html new file mode 100644 index 0000000..eb37dec --- /dev/null +++ b/tags/QRCode/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - QRCode - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2021

+ + + +
挪车码生成器 - 开源
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Revit/index.html b/tags/Revit/index.html new file mode 100644 index 0000000..3d21183 --- /dev/null +++ b/tags/Revit/index.html @@ -0,0 +1,496 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Revit - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/RoadDesign/index.html b/tags/RoadDesign/index.html new file mode 100644 index 0000000..9b6c9bc --- /dev/null +++ b/tags/RoadDesign/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - RoadDesign - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2023

+ + + +
道路勘测设计学习笔记
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/SQL/index.html b/tags/SQL/index.html new file mode 100644 index 0000000..f73b9f0 --- /dev/null +++ b/tags/SQL/index.html @@ -0,0 +1,499 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - SQL - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 2 篇文章

+
+ + + + +

2021

+ + + +
数据库调优
+
+ + + +

2018

+ + + +
SQL日期时间格式转换
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/SSL/index.html b/tags/SSL/index.html new file mode 100644 index 0000000..92f645d --- /dev/null +++ b/tags/SSL/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - SSL - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2018

+ + + +
OpenSSL生成多域名CSR
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Security/index.html b/tags/Security/index.html new file mode 100644 index 0000000..37a375c --- /dev/null +++ b/tags/Security/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Security - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2018

+ + + +
Cryptojs – JavaScript加密库
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Service/index.html b/tags/Service/index.html new file mode 100644 index 0000000..0ff6d1e --- /dev/null +++ b/tags/Service/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Service - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2023

+ + + +
🌈Awesome Software / Service
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/ShortLink/index.html b/tags/ShortLink/index.html new file mode 100644 index 0000000..3b11be1 --- /dev/null +++ b/tags/ShortLink/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - ShortLink - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2023

+ + + +
短链接服务Octopus的实现与源码开放
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Software/index.html b/tags/Software/index.html new file mode 100644 index 0000000..235c8ac --- /dev/null +++ b/tags/Software/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Software - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2023

+ + + +
🌈Awesome Software / Service
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Steam/index.html b/tags/Steam/index.html new file mode 100644 index 0000000..a734cf7 --- /dev/null +++ b/tags/Steam/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Steam - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2019

+ + + +
Steam免费游戏一键领取
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Synology/index.html b/tags/Synology/index.html new file mode 100644 index 0000000..5a0f576 --- /dev/null +++ b/tags/Synology/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Synology - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2022

+ + + +
NAS诞生记
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Whimsy/index.html b/tags/Whimsy/index.html new file mode 100644 index 0000000..fdac23a --- /dev/null +++ b/tags/Whimsy/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Whimsy - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2023

+ + + +
奇思妙想💭
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/async/index.html b/tags/async/index.html new file mode 100644 index 0000000..724b09a --- /dev/null +++ b/tags/async/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - async - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2020

+ + + +
WinForm加载中窗体
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/cert/index.html b/tags/cert/index.html new file mode 100644 index 0000000..73d37c8 --- /dev/null +++ b/tags/cert/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - cert - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2018

+ + + +
OpenSSL生成多域名CSR
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 0000000..0b9879a --- /dev/null +++ b/tags/index.html @@ -0,0 +1,474 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/reptile/index.html b/tags/reptile/index.html new file mode 100644 index 0000000..8a77af3 --- /dev/null +++ b/tags/reptile/index.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - reptile - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2018

+ + + +
用Python爬 历史的今天 数据
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/tags/\344\270\273\346\235\277/index.html" "b/tags/\344\270\273\346\235\277/index.html" new file mode 100644 index 0000000..300aefd --- /dev/null +++ "b/tags/\344\270\273\346\235\277/index.html" @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - 主板 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/tags/\345\234\260\345\233\276/index.html" "b/tags/\345\234\260\345\233\276/index.html" new file mode 100644 index 0000000..784ab1f --- /dev/null +++ "b/tags/\345\234\260\345\233\276/index.html" @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - 地图 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2018

+ + + +
JS地图使用笔记
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/tags/\346\211\271\345\244\204\347\220\206/index.html" "b/tags/\346\211\271\345\244\204\347\220\206/index.html" new file mode 100644 index 0000000..03dfa95 --- /dev/null +++ "b/tags/\346\211\271\345\244\204\347\220\206/index.html" @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - 批处理 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2021

+ + + +
批处理获取时间小于10点时补零
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/tags/\346\225\260\346\215\256\345\272\223/index.html" "b/tags/\346\225\260\346\215\256\345\272\223/index.html" new file mode 100644 index 0000000..5c71887 --- /dev/null +++ "b/tags/\346\225\260\346\215\256\345\272\223/index.html" @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签 - 数据库 - Pdone's Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + + + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+

共计 1 篇文章

+
+ + + + +

2019

+ + + +
SSMS18闪退解决方法
+
+ +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/catch-the-cat/catch-the-cat.js b/tools/catch-the-cat/catch-the-cat.js new file mode 100644 index 0000000..883869b --- /dev/null +++ b/tools/catch-the-cat/catch-the-cat.js @@ -0,0 +1,19 @@ +!function(t){var e={};function n(o){if(e[o])return e[o].exports;var r=e[o]={i:o,l:!1,exports:{}};return t[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=t,n.c=e,n.d=function(t,e,o){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)n.d(o,r,function(e){return t[e]}.bind(null,r));return o},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=3)}([function(t,e,n){"use strict";var o,r=this&&this.__extends||(o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var i,s=n(1),a=n(20),l=n(22),d=n(23),h=n(24),u=n(25),f=n(2),p=n(26),c=n(27);!function(t){t.PLAYING="playing",t.WIN="win",t.LOSE="lose"}(i||(i={}));var k=function(t){function e(e,n,o){var r=t.call(this,{key:"MainScene"})||this;return r.w=e,r.h=n,r.r=o,r.dx=2*r.r,r.dy=r.r*Math.sqrt(3),r}return r(e,t),Object.defineProperty(e.prototype,"blocks",{get:function(){return this.data.get("blocks")},set:function(t){this.data.set("blocks",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"blocksData",{get:function(){var t=[];return this.blocks.forEach(function(e,n){t[n]=[],e.forEach(function(e,o){t[n][o]=e.isWall})}),t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"cat",{get:function(){return this.data.get("cat")},set:function(t){this.data.set("cat",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"statusBar",{get:function(){return this.data.get("status_bar")},set:function(t){this.data.set("status_bar",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"creditText",{get:function(){return this.data.get("credit_text")},set:function(t){this.data.set("credit_text",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"state",{get:function(){return this.data.get("state")},set:function(t){switch(t){case i.PLAYING:break;case i.LOSE:this.setStatusText(f.default("猫已经跑到地图边缘了,你输了"));break;case i.WIN:this.setStatusText(f.default("猫已经无路可走,你赢了"));break;default:return}this.data.set("state",t)},enumerable:!0,configurable:!0}),e.getNeighbours=function(t,e){var n,o,r,i,s={i:t-1,j:e},a={i:t+1,j:e};0==(1&e)?(n={i:t-1,j:e-1},o={i:t,j:e-1},r={i:t-1,j:e+1},i={i:t,j:e+1}):(n={i:t,j:e-1},o={i:t+1,j:e-1},r={i:t,j:e+1},i={i:t+1,j:e+1});var l=[];return l[0]=s,l[1]=n,l[2]=o,l[3]=a,l[4]=i,l[5]=r,l},e.prototype.preload=function(){var t=this.r/s.default.catStepLength;for(var e in s.default.textures)this.load.addFile(new c.default(this.load,e,s.default.textures[e],{scale:t}))},e.prototype.create=function(){this.createAnimations(),this.createBlocks(),this.createCat(),this.createStatusText(),this.createResetButton(),this.createCreditText(),this.reset(),this.game.solver&&(this.cat.solver=this.game.solver)},e.prototype.getPosition=function(t,e){return{x:3*this.r+(0==(1&e)?this.r:this.dx)+t*this.dx,y:3*this.r+this.r+e*this.dy}},e.prototype.getBlock=function(t,e){return t>=0&&t=0&&e\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n'},function(t,e){t.exports='\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n'},function(t,e){t.exports='\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n'},function(t,e){t.exports='\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n'},function(t,e){t.exports='\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n'},function(t,e){t.exports='\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n'},function(t,e){t.exports='\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n'},function(t,e){t.exports='\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n'},function(t,e){t.exports='\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n'},function(t,e){t.exports='\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n'},function(t,e){t.exports='\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n'},function(t,e){t.exports='\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n'},function(t,e){t.exports='\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n'},function(t,e){t.exports='\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n'},function(t,e){t.exports='\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n'},function(t,e,n){"use strict";var o,r=this&&this.__extends||(o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),s=n(1),a=n(21),l=function(t){function e(e){var n=t.call(this,e,0,0,"__DEFAULT")||this;return n.on("animationrepeat",function(){n.moveForward()}),n.solver=a.default,n.direction=s.default.catDefaultDirection,n.reset(),n}return r(e,t),Object.defineProperty(e.prototype,"i",{get:function(){return this.getData("i")},set:function(t){this.setData("i",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"j",{get:function(){return this.getData("j")},set:function(t){this.setData("j",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"direction",{get:function(){return this.getData("direction")},set:function(t){this.setData("direction",t),this.resetTextureToStop(),this.resetOriginAndScale()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"solver",{get:function(){return this.getData("solver")},set:function(t){this.setData("solver",t)},enumerable:!0,configurable:!0}),e.prototype.reset=function(){this.anims.stop(),this.direction=s.default.catDefaultDirection,this.resetIJ()},e.prototype.step=function(){var t=this.solver.call(this,this.scene.blocksData,this.i,this.j);return t<0||t>6?(this.caught(),!1):!!this.stepDirection(t)||(this.caught(),!1)},e.prototype.isCaught=function(){var t=this;return!this.getCurrentNeighbours().some(function(e,n){var o=t.scene.getBlock(e.i,e.j);return null!==o&&!o.isWall})},e.prototype.caught=function(){this.setTexture(s.default.cannotEscapeTextures[s.default.directions[this.direction].name])},e.prototype.escape=function(){0===this.j||this.j===this.scene.h-1?this.runForward():0===this.i?this.runDirection(0):this.i===this.scene.w-1&&this.runDirection(3)},e.prototype.setIJ=function(t,e){this.i=t,this.j=e;var n=this.scene.getPosition(t,e);return this.setPosition(n.x,n.y)},e.prototype.resetIJ=function(){this.setIJ(Math.floor(this.scene.w/2),Math.floor(this.scene.h/2))},e.prototype.isEscaped=function(){return this.i<=0||this.i>=this.scene.w-1||this.j<=0||this.j>=this.scene.h-1},e.prototype.checkState=function(){this.isEscaped()?(this.escape(),this.emit("escaped")):this.isCaught()&&(this.caught(),this.emit("win"))},e.prototype.getCurrentNeighbours=function(){return i.default.getNeighbours(this.i,this.j)},e.prototype.resetTextureToStop=function(){this.setTexture(s.default.stopTextures[s.default.directions[this.direction].name])},e.prototype.resetOriginAndScale=function(){var t=s.default.directions[this.direction],e=s.default.origins[t.name];this.setOrigin(e.x,e.y),this.scaleX=t.scaleX},e.prototype.moveForward=function(){var t=this.getCurrentNeighbours()[this.direction];this.setIJ(t.i,t.j),this.checkState()},e.prototype.stepForward=function(){var t=this,e=this.getCurrentNeighbours()[this.direction],n=this.scene.getBlock(e.i,e.j);return null!==n&&(!n.isWall&&(this.play(s.default.directions[this.direction].name+"_step"),this.once("animationcomplete",function(){t.moveForward(),t.resetTextureToStop()}),!0))},e.prototype.stepDirection=function(t){return this.direction=t,this.stepForward()},e.prototype.runForward=function(){this.play(s.default.directions[this.direction].name+"_run")},e.prototype.runDirection=function(t){this.direction=t,this.runForward()},e}(Phaser.GameObjects.Sprite);e.default=l},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var o=n(0);e.default=function(t,e,n){var r=-1;return o.default.getNeighbours(e,n).forEach(function(e,n){-1===r&&(void 0===t[e.i]||void 0===t[e.i][e.j]||t[e.i][e.j]||(r=n))}),r}},function(t,e,n){"use strict";var o,r=this&&this.__extends||(o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var i=function(t){function e(e,n,o,r){var i=this,s=e.getPosition(n,o);(i=t.call(this,e,s.x,s.y,r,0,360,!1,0,1)||this).i=n,i.j=o,i.r=r,i.isWall=!1;var a=new Phaser.Geom.Circle(i.r/2,i.r/2,i.r);return i.setInteractive(a,Phaser.Geom.Circle.Contains),i.on("pointerdown",function(){i.emit("player_click",i.i,i.j)}),i}return r(e,t),Object.defineProperty(e.prototype,"isWall",{get:function(){return this._isWall},set:function(t){this._isWall=t,this.fillColor=t?13158:11786751},enumerable:!0,configurable:!0}),e}(Phaser.GameObjects.Arc);e.default=i},function(t,e,n){"use strict";var o,r=this&&this.__extends||(o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),s=function(t){function e(e){var n=t.call(this,e,0,0,i.default("重置"),{})||this;n.setColor("#000000");var o=e.r;n.setFontSize(o),n.setPadding(o,o,o,o),n.setPosition(0,e.game.canvas.height),n.setOrigin(0,1);var r=new Phaser.Geom.Rectangle(0,0,n.width,n.height);return n.setInteractive(r,Phaser.Geom.Rectangle.Contains),n}return r(e,t),e}(Phaser.GameObjects.Text);e.default=s},function(t,e,n){"use strict";var o,r=this&&this.__extends||(o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var i=function(t){function e(e){var n=t.call(this,e,0,0,"",{})||this;n.setColor("#000000");var o=e.r;return n.setFontSize(o),"center"===e.game.myConfig.statusBarAlign&&(n.setX(e.game.canvas.width/2),n.setOrigin(.5,0)),n.setPadding(o,o,o,o),n}return r(e,t),e}(Phaser.GameObjects.Text);e.default=i},function(t,e,n){"use strict";var o,r=this&&this.__extends||(o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var i=function(t){function e(e){var n=t.call(this,e,0,0,"",{})||this;n.setColor("#000000"),n.setPosition(e.game.canvas.width,e.game.canvas.height),n.setOrigin(1,1);var o=e.r;return n.setFontSize(.8*o),n.setPadding(o,o,o,o),n.setText(e.game.myConfig.credit),n}return r(e,t),e}(Phaser.GameObjects.Text);e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var o=n(0),r=function(){function t(t,e,n,o){this.i=e,this.j=n,this.isWall=o,this.distance=1/0,this.parent=t,this.isEdge=this.i<=0||this.i>=this.parent.w-1||this.j<=0||this.j>=this.parent.h-1}return Object.defineProperty(t.prototype,"routesCount",{get:function(){var t=this;if(void 0===this._routesCount)if(this.isEdge)this._routesCount=1;else{var e=0;this.neighbours.forEach(function(n){null===n||n.isWall||n.distancee&&(e=r.routesCount,n=o)}),n},enumerable:!0,configurable:!0}),t}(),i=function(){function t(t){var e=this;if(this.w=t.length,this.w<=0)throw new Error("empty blocks");this.h=t[0].length,this.blocks=t.map(function(n,o){return n.map(function(n,i){return new r(e,o,i,t[o][i])})})}return t.prototype.getBlock=function(t,e){return t>=0&&t=0&&ee.distance+1&&(n.distance=e.distance+1,t.indexOf(n)<0&&t.push(n))})};t.length>0;)e()},t.prototype.toString=function(){for(var t=[],e=0;e0?r[0]:-1},e.default=function(t,e,n){var o=new i(t);return o.calcAllDistances(),o.getBlock(e,n).direction}},function(t,e,n){"use strict";var o,r=this&&this.__extends||(o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var i=n(28),s=function(t){function e(e,n,o,r){var i=t.call(this,e,n,void 0,r)||this;return i.rawData=o,i}return r(e,t),e.prototype.load=function(){this.state===Phaser.Loader.FILE_POPULATED?this.loader.nextFile(this,!0):this.xhrLoader=i.default(this,this.loader.xhr)},e}(Phaser.Loader.FileTypes.SVGFile);e.default=s},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var o=n(29);e.default=function(t,e){var n=new o.default;return n.open("GET",t.src,e.async,e.user,e.password),n.responseType=t.xhrSettings.responseType,n.timeout=e.timeout,e.header&&e.headerValue&&n.setRequestHeader(e.header,e.headerValue),e.requestedWith&&n.setRequestHeader("X-Requested-With",e.requestedWith),e.overrideMimeType&&n.overrideMimeType(e.overrideMimeType),n.onload=t.onLoad.bind(t,n),n.onerror=t.onError.bind(t),n.onprogress=t.onProgress.bind(t),n.send(),setTimeout(function(){n.respond(200,{"Content-Type":"application/octet-stream"},t.rawData)},1),n}},function(t,e,n){"use strict";n.r(e); +/** + * Minimal Event interface implementation + * + * Original implementation by Sven Fuchs: https://gist.github.com/995028 + * Modifications and tests by Christian Johansen. + * + * @author Sven Fuchs (svenfuchs@artweb-design.de) + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2011 Sven Fuchs, Christian Johansen + */ +var o=function(t,e,n,o){this.type=t,this.bubbles=e,this.cancelable=n,this.target=o};o.prototype={stopPropagation:function(){},preventDefault:function(){this.defaultPrevented=!0}};var r={100:"Continue",101:"Switching Protocols",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",300:"Multiple Choice",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported"};var i={"Accept-Charset":!0,"Accept-Encoding":!0,Connection:!0,"Content-Length":!0,Cookie:!0,Cookie2:!0,"Content-Transfer-Encoding":!0,Date:!0,Expect:!0,Host:!0,"Keep-Alive":!0,Referer:!0,TE:!0,Trailer:!0,"Transfer-Encoding":!0,Upgrade:!0,"User-Agent":!0,Via:!0};function s(t,e){e.addEventListener(t,function(n){var o=e["on"+t];o&&"function"==typeof o&&o.call(n.target,n)})}function a(){this._eventListeners={};for(var t=["loadstart","progress","load","abort","loadend"],e=t.length-1;e>=0;e--)s(t[e],this)}function l(){a.call(this),this.readyState=l.UNSENT,this.requestHeaders={},this.requestBody=null,this.status=0,this.statusText="",this.upload=new a}a.prototype={addEventListener:function(t,e){this._eventListeners[t]=this._eventListeners[t]||[],this._eventListeners[t].push(e)},removeEventListener:function(t,e){for(var n=this._eventListeners[t]||[],o=0,r=n.length;ol.UNSENT&&this.sendFlag&&(this._readyStateChange(l.UNSENT),this.sendFlag=!1),"function"==typeof this.onerror&&this.onerror()},getResponseHeader:function(t){if(this.readyState + + + + Catch The Cat + + + + + +
+ + + + diff --git a/tools/catch-the-cat/phaser.min.js b/tools/catch-the-cat/phaser.min.js new file mode 100644 index 0000000..c2d2d19 --- /dev/null +++ b/tools/catch-the-cat/phaser.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("Phaser",[],e):"object"==typeof exports?exports.Phaser=e():t.Phaser=e()}(window,function(){return function(t){var e={};function i(n){if(e[n])return e[n].exports;var s=e[n]={i:n,l:!1,exports:{}};return t[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},i.r=function(t){Object.defineProperty(t,"__esModule",{value:!0})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=1360)}([function(t,e){function i(t,e,i){var n=i?t[e]:Object.getOwnPropertyDescriptor(t,e);return!i&&n.value&&"object"==typeof n.value&&(n=n.value),!(!n||!function(t){return!!t.get&&"function"==typeof t.get||!!t.set&&"function"==typeof t.set}(n))&&(void 0===n.enumerable&&(n.enumerable=!0),void 0===n.configurable&&(n.configurable=!0),n)}function n(t,e){var i=Object.getOwnPropertyDescriptor(t,e);return!!i&&(i.value&&"object"==typeof i.value&&(i=i.value),!1===i.configurable)}function s(t,e,s,r){for(var a in e)if(e.hasOwnProperty(a)){var h=i(e,a,s);if(!1!==h){if(n((r||t).prototype,a)){if(o.ignoreFinals)continue;throw new Error("cannot override final property '"+a+"', set Class.ignoreFinals = true to skip")}Object.defineProperty(t.prototype,a,h)}else t.prototype[a]=e[a]}}function r(t,e){if(e){Array.isArray(e)||(e=[e]);for(var i=0;i0&&(i=1/Math.sqrt(i),this.x=t*i,this.y=e*i),this},normalizeRightHand:function(){var t=this.x;return this.x=-1*this.y,this.y=t,this},dot:function(t){return this.x*t.x+this.y*t.y},cross:function(t){return this.x*t.y-this.y*t.x},lerp:function(t,e){void 0===e&&(e=0);var i=this.x,n=this.y;return this.x=i+e*(t.x-i),this.y=n+e*(t.y-n),this},transformMat3:function(t){var e=this.x,i=this.y,n=t.val;return this.x=n[0]*e+n[3]*i+n[6],this.y=n[1]*e+n[4]*i+n[7],this},transformMat4:function(t){var e=this.x,i=this.y,n=t.val;return this.x=n[0]*e+n[4]*i+n[12],this.y=n[1]*e+n[5]*i+n[13],this},reset:function(){return this.x=0,this.y=0,this}});n.ZERO=new n,n.RIGHT=new n(1,0),n.LEFT=new n(-1,0),n.UP=new n(0,-1),n.DOWN=new n(0,1),n.ONE=new n(1,1),t.exports=n},function(t,e){t.exports=function(t,e,i){if(t&&"number"!=typeof t){if(t.hasOwnProperty(e))return t[e];if(-1!==e.indexOf(".")){for(var n=e.split("."),s=t,r=i,o=0;o>>0},getTintAppendFloatAlpha:function(t,e){return((255&(255*e|0))<<24|t)>>>0},getTintAppendFloatAlphaAndSwap:function(t,e){return((255&(255*e|0))<<24|(255&(0|t))<<16|(255&(t>>8|0))<<8|255&(t>>16|0))>>>0},getFloatsFromUintRGB:function(t){return[(255&(t>>16|0))/255,(255&(t>>8|0))/255,(255&(0|t))/255]},getComponentCount:function(t,e){for(var i=0,n=0;n=this.right?this.width=0:this.width=this.right-t,this.x=t}},right:{get:function(){return this.x+this.width},set:function(t){t<=this.x?this.width=0:this.width=t-this.x}},top:{get:function(){return this.y},set:function(t){t>=this.bottom?this.height=0:this.height=this.bottom-t,this.y=t}},bottom:{get:function(){return this.y+this.height},set:function(t){t<=this.y?this.height=0:this.height=t-this.y}},centerX:{get:function(){return this.x+this.width/2},set:function(t){this.x=t-this.width/2}},centerY:{get:function(){return this.y+this.height/2},set:function(t){this.y=t-this.height/2}}});t.exports=l},function(t,e,i){"use strict";var n=Object.prototype.hasOwnProperty,s="~";function r(){}function o(t,e,i,n,r){if("function"!=typeof i)throw new TypeError("The listener must be a function");var o=new function(t,e,i){this.fn=t,this.context=e,this.once=i||!1}(i,n||t,r),a=s?s+e:e;return t._events[a]?t._events[a].fn?t._events[a]=[t._events[a],o]:t._events[a].push(o):(t._events[a]=o,t._eventsCount++),t}function a(t,e){0==--t._eventsCount?t._events=new r:delete t._events[e]}function h(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=Object.create(null),(new r).__proto__||(s=!1)),h.prototype.eventNames=function(){var t,e,i=[];if(0===this._eventsCount)return i;for(e in t=this._events)n.call(t,e)&&i.push(s?e.slice(1):e);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(t)):i},h.prototype.listeners=function(t){var e=s?s+t:t,i=this._events[e];if(!i)return[];if(i.fn)return[i.fn];for(var n=0,r=i.length,o=new Array(r);no.width&&(i=Math.max(o.width-t,0)),e+s>o.height&&(s=Math.max(o.height-e,0));for(var u=[],c=e;c=400&&t.status<=599&&(n=!1),this.resetXHR(),this.loader.nextFile(this,n)},onError:function(){this.resetXHR(),this.loader.nextFile(this,!1)},onProgress:function(t){t.lengthComputable&&(this.bytesLoaded=t.loaded,this.bytesTotal=t.total,this.percentComplete=Math.min(this.bytesLoaded/this.bytesTotal,1),this.loader.emit(r.FILE_PROGRESS,this,this.percentComplete))},onProcess:function(){this.state=s.FILE_PROCESSING,this.onProcessComplete()},onProcessComplete:function(){this.state=s.FILE_COMPLETE,this.multiFile&&this.multiFile.onFileComplete(this),this.loader.fileProcessComplete(this)},onProcessError:function(){this.state=s.FILE_ERRORED,this.multiFile&&this.multiFile.onFileFailed(this),this.loader.fileProcessComplete(this)},hasCacheConflict:function(){return this.cache&&this.cache.exists(this.key)},addToCache:function(){this.cache&&this.cache.add(this.key,this.data),this.pendingDestroy()},pendingDestroy:function(t){void 0===t&&(t=this.data);var e=this.key,i=this.type;this.loader.emit(r.FILE_COMPLETE,e,i,t),this.loader.emit(r.FILE_KEY_COMPLETE+i+"-"+e,e,i,t),this.loader.flagForRemoval(this)},destroy:function(){this.loader=null,this.cache=null,this.xhrSettings=null,this.multiFile=null,this.linkFile=null,this.data=null}});c.createObjectURL=function(t,e,i){if("function"==typeof URL)t.src=URL.createObjectURL(e);else{var n=new FileReader;n.onload=function(){t.removeAttribute("crossOrigin"),t.src="data:"+(e.type||i)+";base64,"+n.result.split(",")[1]},n.onerror=t.onerror,n.readAsDataURL(e)}},c.revokeObjectURL=function(t){"function"==typeof URL&&URL.revokeObjectURL(t.src)},t.exports=c},function(t,e){t.exports=function(t,e,i){return Math.max(e,Math.min(i,t))}},function(t,e,i){var n,s,r,o=i(28),a=i(130),h=[],l=!1;t.exports={create2D:function(t,e,i){return n(t,e,i,o.CANVAS)},create:n=function(t,e,i,n,r){var u;void 0===e&&(e=1),void 0===i&&(i=1),void 0===n&&(n=o.CANVAS),void 0===r&&(r=!1);var c=s(n);return null===c?(c={parent:t,canvas:document.createElement("canvas"),type:n},n===o.CANVAS&&h.push(c),u=c.canvas):(c.parent=t,u=c.canvas),r&&(c.parent=u),u.width=e,u.height=i,l&&n===o.CANVAS&&a.disable(u.getContext("2d")),u},createWebGL:function(t,e,i){return n(t,e,i,o.WEBGL)},disableSmoothing:function(){l=!0},enableSmoothing:function(){l=!1},first:s=function(t){if(void 0===t&&(t=o.CANVAS),t===o.WEBGL)return null;for(var e=0;e=0;o--)t[o][e]=i+a*n,a++;return t}},function(t,e,i){var n={VERSION:"3.16.1",BlendModes:i(60),ScaleModes:i(101),AUTO:0,CANVAS:1,WEBGL:2,HEADLESS:3,FOREVER:-1,NONE:4,UP:5,DOWN:6,LEFT:7,RIGHT:8};t.exports=n},function(t,e,i){var n=i(0),s=i(13),r=i(18),o=i(59),a=new n({Extends:r,Mixins:[s.Alpha,s.BlendMode,s.ComputedSize,s.Depth,s.GetBounds,s.Mask,s.Origin,s.Pipeline,s.ScaleMode,s.ScrollFactor,s.Transform,s.Visible],initialize:function(t,e,i){void 0===e&&(e="Shape"),r.call(this,t,e),this.geom=i,this.pathData=[],this.pathIndexes=[],this.fillColor=16777215,this.fillAlpha=1,this.strokeColor=16777215,this.strokeAlpha=1,this.lineWidth=1,this.isFilled=!1,this.isStroked=!1,this.closePath=!0,this._tempLine=new o,this.initPipeline()},setFillStyle:function(t,e){return void 0===e&&(e=1),void 0===t?this.isFilled=!1:(this.fillColor=t,this.fillAlpha=e,this.isFilled=!0),this},setStrokeStyle:function(t,e,i){return void 0===i&&(i=1),void 0===t?this.isStroked=!1:(this.lineWidth=t,this.strokeColor=e,this.strokeAlpha=i,this.isStroked=!0),this},setClosePath:function(t){return this.closePath=t,this},preDestroy:function(){this.geom=null,this._tempLine=null,this.pathData=[],this.pathIndexes=[]}});t.exports=a},function(t,e,i){var n=i(60),s=i(12),r=i(101);t.exports=function(t,e,i){e.x=s(i,"x",0),e.y=s(i,"y",0),e.depth=s(i,"depth",0),e.flipX=s(i,"flipX",!1),e.flipY=s(i,"flipY",!1);var o=s(i,"scale",null);"number"==typeof o?e.setScale(o):null!==o&&(e.scaleX=s(o,"x",1),e.scaleY=s(o,"y",1));var a=s(i,"scrollFactor",null);"number"==typeof a?e.setScrollFactor(a):null!==a&&(e.scrollFactorX=s(a,"x",1),e.scrollFactorY=s(a,"y",1)),e.rotation=s(i,"rotation",0);var h=s(i,"angle",null);null!==h&&(e.angle=h),e.alpha=s(i,"alpha",1);var l=s(i,"origin",null);if("number"==typeof l)e.setOrigin(l);else if(null!==l){var u=s(l,"x",.5),c=s(l,"y",.5);e.setOrigin(u,c)}return e.scaleMode=s(i,"scaleMode",r.DEFAULT),e.blendMode=s(i,"blendMode",n.NORMAL),e.visible=s(i,"visible",!0),s(i,"add",!0)&&t.sys.displayList.add(e),e.preUpdate&&t.sys.updateList.add(e),e}},function(t,e){t.exports={CSV:0,TILED_JSON:1,ARRAY_2D:2,WELTMEISTER:3}},function(t,e,i){var n=i(0),s=i(191),r=i(409),o=i(190),a=i(408),h=new n({initialize:function(t,e,i,n){void 0===t&&(t=0),void 0===e&&(e=0),void 0===i&&(i=0),void 0===n&&(n=255),this.r=0,this.g=0,this.b=0,this.a=255,this._h=0,this._s=0,this._v=0,this._locked=!1,this.gl=[0,0,0,1],this._color=0,this._color32=0,this._rgba="",this.setTo(t,e,i,n)},transparent:function(){return this._locked=!0,this.red=0,this.green=0,this.blue=0,this.alpha=0,this._locked=!1,this.update(!0)},setTo:function(t,e,i,n,s){return void 0===n&&(n=255),void 0===s&&(s=!0),this._locked=!0,this.red=t,this.green=e,this.blue=i,this.alpha=n,this._locked=!1,this.update(s)},setGLTo:function(t,e,i,n){return void 0===n&&(n=1),this._locked=!0,this.redGL=t,this.greenGL=e,this.blueGL=i,this.alphaGL=n,this._locked=!1,this.update(!0)},setFromRGB:function(t){return this._locked=!0,this.red=t.r,this.green=t.g,this.blue=t.b,t.hasOwnProperty("a")&&(this.alpha=t.a),this._locked=!1,this.update(!0)},setFromHSV:function(t,e,i){return o(t,e,i,this)},update:function(t){if(void 0===t&&(t=!1),this._locked)return this;var e=this.r,i=this.g,n=this.b,o=this.a;return this._color=s(e,i,n),this._color32=r(e,i,n,o),this._rgba="rgba("+e+","+i+","+n+","+o/255+")",t&&a(e,i,n,this),this},updateHSV:function(){var t=this.r,e=this.g,i=this.b;return a(t,e,i,this),this},clone:function(){return new h(this.r,this.g,this.b,this.a)},gray:function(t){return this.setTo(t,t,t)},random:function(t,e){void 0===t&&(t=0),void 0===e&&(e=255);var i=Math.floor(t+Math.random()*(e-t)),n=Math.floor(t+Math.random()*(e-t)),s=Math.floor(t+Math.random()*(e-t));return this.setTo(i,n,s)},randomGray:function(t,e){void 0===t&&(t=0),void 0===e&&(e=255);var i=Math.floor(t+Math.random()*(e-t));return this.setTo(i,i,i)},saturate:function(t){return this.s+=t/100,this},desaturate:function(t){return this.s-=t/100,this},lighten:function(t){return this.v+=t/100,this},darken:function(t){return this.v-=t/100,this},brighten:function(t){var e=this.r,i=this.g,n=this.b;return e=Math.max(0,Math.min(255,e-Math.round(-t/100*255))),i=Math.max(0,Math.min(255,i-Math.round(-t/100*255))),n=Math.max(0,Math.min(255,n-Math.round(-t/100*255))),this.setTo(e,i,n)},color:{get:function(){return this._color}},color32:{get:function(){return this._color32}},rgba:{get:function(){return this._rgba}},redGL:{get:function(){return this.gl[0]},set:function(t){this.gl[0]=Math.min(Math.abs(t),1),this.r=Math.floor(255*this.gl[0]),this.update(!0)}},greenGL:{get:function(){return this.gl[1]},set:function(t){this.gl[1]=Math.min(Math.abs(t),1),this.g=Math.floor(255*this.gl[1]),this.update(!0)}},blueGL:{get:function(){return this.gl[2]},set:function(t){this.gl[2]=Math.min(Math.abs(t),1),this.b=Math.floor(255*this.gl[2]),this.update(!0)}},alphaGL:{get:function(){return this.gl[3]},set:function(t){this.gl[3]=Math.min(Math.abs(t),1),this.a=Math.floor(255*this.gl[3]),this.update()}},red:{get:function(){return this.r},set:function(t){t=Math.floor(Math.abs(t)),this.r=Math.min(t,255),this.gl[0]=t/255,this.update(!0)}},green:{get:function(){return this.g},set:function(t){t=Math.floor(Math.abs(t)),this.g=Math.min(t,255),this.gl[1]=t/255,this.update(!0)}},blue:{get:function(){return this.b},set:function(t){t=Math.floor(Math.abs(t)),this.b=Math.min(t,255),this.gl[2]=t/255,this.update(!0)}},alpha:{get:function(){return this.a},set:function(t){t=Math.floor(Math.abs(t)),this.a=Math.min(t,255),this.gl[3]=t/255,this.update()}},h:{get:function(){return this._h},set:function(t){this._h=t,o(t,this._s,this._v,this)}},s:{get:function(){return this._s},set:function(t){this._s=t,o(this._h,t,this._v,this)}},v:{get:function(){return this._v},set:function(t){this._v=t,o(this._h,this._s,t,this)}}});t.exports=h},function(t,e){t.exports=function(t,e,i){var n=i||e.fillColor,s=e.fillAlpha,r=(16711680&n)>>>16,o=(65280&n)>>>8,a=255&n;t.fillStyle="rgba("+r+","+o+","+a+","+s+")"}},function(t,e,i){var n=i(20);t.exports=function(t){return t*n.DEG_TO_RAD}},function(t,e){t.exports=function(t,e,i,n,s,r){var o;void 0===n&&(n=0),void 0===s&&(s=0),void 0===r&&(r=1);var a=0,h=t.length;if(1===r)for(o=s;o=0;o--)t[o][e]+=i+a*n,a++;return t}},function(t,e,i){(function(e){var i={};t.exports=i,function(){i._nextId=0,i._seed=0,i._nowStartTime=+new Date,i.extend=function(t,e){var n,s;"boolean"==typeof e?(n=2,s=e):(n=1,s=!0);for(var r=n;r0;e--){var n=Math.floor(i.random()*(e+1)),s=t[e];t[e]=t[n],t[n]=s}return t},i.choose=function(t){return t[Math.floor(i.random()*t.length)]},i.isElement=function(t){return"undefined"!=typeof HTMLElement?t instanceof HTMLElement:!!(t&&t.nodeType&&t.nodeName)},i.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)},i.isFunction=function(t){return"function"==typeof t},i.isPlainObject=function(t){return"object"==typeof t&&t.constructor===Object},i.isString=function(t){return"[object String]"===toString.call(t)},i.clamp=function(t,e,i){return ti?i:t},i.sign=function(t){return t<0?-1:1},i.now=function(){if(window.performance){if(window.performance.now)return window.performance.now();if(window.performance.webkitNow)return window.performance.webkitNow()}return new Date-i._nowStartTime},i.random=function(e,i){return e=void 0!==e?e:0,i=void 0!==i?i:1,e+t()*(i-e)};var t=function(){return i._seed=(9301*i._seed+49297)%233280,i._seed/233280};i.colorToNumber=function(t){return 3==(t=t.replace("#","")).length&&(t=t.charAt(0)+t.charAt(0)+t.charAt(1)+t.charAt(1)+t.charAt(2)+t.charAt(2)),parseInt(t,16)},i.logLevel=1,i.log=function(){console&&i.logLevel>0&&i.logLevel<=3&&console.log.apply(console,["matter-js:"].concat(Array.prototype.slice.call(arguments)))},i.info=function(){console&&i.logLevel>0&&i.logLevel<=2&&console.info.apply(console,["matter-js:"].concat(Array.prototype.slice.call(arguments)))},i.warn=function(){console&&i.logLevel>0&&i.logLevel<=3&&console.warn.apply(console,["matter-js:"].concat(Array.prototype.slice.call(arguments)))},i.nextId=function(){return i._nextId++},i.indexOf=function(t,e){if(t.indexOf)return t.indexOf(e);for(var i=0;i>>16,r=(65280&i)>>>8,o=255&i;t.strokeStyle="rgba("+s+","+r+","+o+","+n+")",t.lineWidth=e.lineWidth}},function(t,e,i){t.exports={DESTROY:i(1168),FADE_IN_COMPLETE:i(1167),FADE_IN_START:i(1166),FADE_OUT_COMPLETE:i(1165),FADE_OUT_START:i(1164),FLASH_COMPLETE:i(1163),FLASH_START:i(1162),PAN_COMPLETE:i(1161),PAN_START:i(1160),POST_RENDER:i(1159),PRE_RENDER:i(1158),SHAKE_COMPLETE:i(1157),SHAKE_START:i(1156),ZOOM_COMPLETE:i(1155),ZOOM_START:i(1154)}},function(t,e,i){var n=i(0),s=i(3),r=new n({initialize:function(t,e,i,n,s,r){void 0===t&&(t=1),void 0===e&&(e=0),void 0===i&&(i=0),void 0===n&&(n=1),void 0===s&&(s=0),void 0===r&&(r=0),this.matrix=new Float32Array([t,e,i,n,s,r,0,0,1]),this.decomposedMatrix={translateX:0,translateY:0,scaleX:1,scaleY:1,rotation:0}},a:{get:function(){return this.matrix[0]},set:function(t){this.matrix[0]=t}},b:{get:function(){return this.matrix[1]},set:function(t){this.matrix[1]=t}},c:{get:function(){return this.matrix[2]},set:function(t){this.matrix[2]=t}},d:{get:function(){return this.matrix[3]},set:function(t){this.matrix[3]=t}},e:{get:function(){return this.matrix[4]},set:function(t){this.matrix[4]=t}},f:{get:function(){return this.matrix[5]},set:function(t){this.matrix[5]=t}},tx:{get:function(){return this.matrix[4]},set:function(t){this.matrix[4]=t}},ty:{get:function(){return this.matrix[5]},set:function(t){this.matrix[5]=t}},rotation:{get:function(){return Math.acos(this.a/this.scaleX)*(Math.atan(-this.c/this.a)<0?-1:1)}},scaleX:{get:function(){return Math.sqrt(this.a*this.a+this.c*this.c)}},scaleY:{get:function(){return Math.sqrt(this.b*this.b+this.d*this.d)}},loadIdentity:function(){var t=this.matrix;return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,this},translate:function(t,e){var i=this.matrix;return i[4]=i[0]*t+i[2]*e+i[4],i[5]=i[1]*t+i[3]*e+i[5],this},scale:function(t,e){var i=this.matrix;return i[0]*=t,i[1]*=t,i[2]*=e,i[3]*=e,this},rotate:function(t){var e=Math.sin(t),i=Math.cos(t),n=this.matrix,s=n[0],r=n[1],o=n[2],a=n[3];return n[0]=s*i+o*e,n[1]=r*i+a*e,n[2]=s*-e+o*i,n[3]=r*-e+a*i,this},multiply:function(t,e){var i=this.matrix,n=t.matrix,s=i[0],r=i[1],o=i[2],a=i[3],h=i[4],l=i[5],u=n[0],c=n[1],d=n[2],f=n[3],p=n[4],g=n[5],v=void 0===e?this:e;return v.a=u*s+c*o,v.b=u*r+c*a,v.c=d*s+f*o,v.d=d*r+f*a,v.e=p*s+g*o+h,v.f=p*r+g*a+l,v},multiplyWithOffset:function(t,e,i){var n=this.matrix,s=t.matrix,r=n[0],o=n[1],a=n[2],h=n[3],l=e*r+i*a+n[4],u=e*o+i*h+n[5],c=s[0],d=s[1],f=s[2],p=s[3],g=s[4],v=s[5];return n[0]=c*r+d*a,n[1]=c*o+d*h,n[2]=f*r+p*a,n[3]=f*o+p*h,n[4]=g*r+v*a+l,n[5]=g*o+v*h+u,this},transform:function(t,e,i,n,s,r){var o=this.matrix,a=o[0],h=o[1],l=o[2],u=o[3],c=o[4],d=o[5];return o[0]=t*a+e*l,o[1]=t*h+e*u,o[2]=i*a+n*l,o[3]=i*h+n*u,o[4]=s*a+r*l+c,o[5]=s*h+r*u+d,this},transformPoint:function(t,e,i){void 0===i&&(i={x:0,y:0});var n=this.matrix,s=n[0],r=n[1],o=n[2],a=n[3],h=n[4],l=n[5];return i.x=t*s+e*o+h,i.y=t*r+e*a+l,i},invert:function(){var t=this.matrix,e=t[0],i=t[1],n=t[2],s=t[3],r=t[4],o=t[5],a=e*s-i*n;return t[0]=s/a,t[1]=-i/a,t[2]=-n/a,t[3]=e/a,t[4]=(n*o-s*r)/a,t[5]=-(e*o-i*r)/a,this},copyFrom:function(t){var e=this.matrix;return e[0]=t.a,e[1]=t.b,e[2]=t.c,e[3]=t.d,e[4]=t.e,e[5]=t.f,this},copyFromArray:function(t){var e=this.matrix;return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],this},copyToContext:function(t){var e=this.matrix;return t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t},setToContext:function(t){var e=this.matrix;return t.setTransform(e[0],e[1],e[2],e[3],e[4],e[5]),t},copyToArray:function(t){var e=this.matrix;return void 0===t?t=[e[0],e[1],e[2],e[3],e[4],e[5]]:(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5]),t},setTransform:function(t,e,i,n,s,r){var o=this.matrix;return o[0]=t,o[1]=e,o[2]=i,o[3]=n,o[4]=s,o[5]=r,this},decomposeMatrix:function(){var t=this.decomposedMatrix,e=this.matrix,i=e[0],n=e[1],s=e[2],r=e[3],o=i*r-n*s;if(t.translateX=e[4],t.translateY=e[5],i||n){var a=Math.sqrt(i*i+n*n);t.rotation=n>0?Math.acos(i/a):-Math.acos(i/a),t.scaleX=a,t.scaleY=o/a}else if(s||r){var h=Math.sqrt(s*s+r*r);t.rotation=.5*Math.PI-(r>0?Math.acos(-s/h):-Math.acos(s/h)),t.scaleX=o/h,t.scaleY=h}else t.rotation=0,t.scaleX=0,t.scaleY=0;return t},applyITRS:function(t,e,i,n,s){var r=this.matrix,o=Math.sin(i),a=Math.cos(i);return r[4]=t,r[5]=e,r[0]=a*n,r[1]=o*n,r[2]=-o*s,r[3]=a*s,this},applyInverse:function(t,e,i){void 0===i&&(i=new s);var n=this.matrix,r=n[0],o=n[1],a=n[2],h=n[3],l=n[4],u=n[5],c=1/(r*h+a*-o);return i.x=h*c*t+-a*c*e+(u*a-l*h)*c,i.y=r*c*e+-o*c*t+(-u*r+l*o)*c,i},getX:function(t,e){return t*this.a+e*this.c+this.e},getY:function(t,e){return t*this.b+e*this.d+this.f},getCSSMatrix:function(){var t=this.matrix;return"matrix("+t[0]+","+t[1]+","+t[2]+","+t[3]+","+t[4]+","+t[5]+")"},destroy:function(){this.matrix=null,this.decomposedMatrix=null}});t.exports=r},function(t,e){t.exports=function(t,e,i){return!(t.width<=0||t.height<=0)&&t.x<=e&&t.x+t.width>=e&&t.y<=i&&t.y+t.height>=i}},function(t,e){t.exports=function(t,e,i){return t.radius>0&&e>=t.left&&e<=t.right&&i>=t.top&&i<=t.bottom&&(t.x-e)*(t.x-e)+(t.y-i)*(t.y-i)<=t.radius*t.radius}},function(t,e){t.exports=function(t,e){return t.y=e+t.height*t.originY,t}},function(t,e){t.exports=function(t){return t.y-t.height*t.originY}},function(t,e){t.exports=function(t,e){return t.x=e-t.width+t.width*t.originX,t}},function(t,e){t.exports=function(t){return t.x+t.width-t.width*t.originX}},function(t,e){t.exports=function(t,e){return t.x=e+t.width*t.originX,t}},function(t,e){t.exports=function(t){return t.x-t.width*t.originX}},function(t,e){t.exports=function(t,e){return t.y=e-t.height+t.height*t.originY,t}},function(t,e){t.exports=function(t){return t.y+t.height-t.height*t.originY}},function(t,e,i){t.exports={BOOT:i(994),DESTROY:i(993),DRAG_END:i(992),DRAG_ENTER:i(991),DRAG:i(990),DRAG_LEAVE:i(989),DRAG_OVER:i(988),DRAG_START:i(987),DROP:i(986),GAME_OUT:i(985),GAME_OVER:i(984),GAMEOBJECT_DOWN:i(983),GAMEOBJECT_DRAG_END:i(982),GAMEOBJECT_DRAG_ENTER:i(981),GAMEOBJECT_DRAG:i(980),GAMEOBJECT_DRAG_LEAVE:i(979),GAMEOBJECT_DRAG_OVER:i(978),GAMEOBJECT_DRAG_START:i(977),GAMEOBJECT_DROP:i(976),GAMEOBJECT_MOVE:i(975),GAMEOBJECT_OUT:i(974),GAMEOBJECT_OVER:i(973),GAMEOBJECT_POINTER_DOWN:i(972),GAMEOBJECT_POINTER_MOVE:i(971),GAMEOBJECT_POINTER_OUT:i(970),GAMEOBJECT_POINTER_OVER:i(969),GAMEOBJECT_POINTER_UP:i(968),GAMEOBJECT_UP:i(967),MANAGER_BOOT:i(966),MANAGER_PROCESS:i(965),MANAGER_UPDATE:i(964),POINTER_DOWN:i(963),POINTER_DOWN_OUTSIDE:i(962),POINTER_MOVE:i(961),POINTER_OUT:i(960),POINTER_OVER:i(959),POINTER_UP:i(958),POINTER_UP_OUTSIDE:i(957),POINTERLOCK_CHANGE:i(956),PRE_UPDATE:i(955),SHUTDOWN:i(954),START:i(953),UPDATE:i(952)}},function(t,e){t.exports=function(t,e,i,n){void 0===e&&(e=!0);var s=n.baseTileHeight,r=n.tilemapLayer;return r&&(void 0===i&&(i=r.scene.cameras.main),t-=r.y+i.scrollY*(1-r.scrollFactorY),s*=r.scaleY),e?Math.floor(t/s):t/s}},function(t,e){t.exports=function(t,e,i,n){void 0===e&&(e=!0);var s=n.baseTileWidth,r=n.tilemapLayer;return r&&(void 0===i&&(i=r.scene.cameras.main),t-=r.x+i.scrollX*(1-r.scrollFactorX),s*=r.scaleX),e?Math.floor(t/s):t/s}},function(t,e,i){var n=i(0),s=i(15),r=i(22),o=i(7),a=i(2),h=i(4),l=i(8),u=new n({Extends:r,initialize:function(t,e,i,n,o){var u="json";if(l(e)){var c=e;e=a(c,"key"),i=a(c,"url"),n=a(c,"xhrSettings"),u=a(c,"extension",u),o=a(c,"dataKey",o)}var d={type:"json",cache:t.cacheManager.json,extension:u,responseType:"text",key:e,url:i,xhrSettings:n,config:o};r.call(this,t,d),l(i)&&(this.data=o?h(i,o):i,this.state=s.FILE_POPULATED)},onProcess:function(){if(this.state!==s.FILE_POPULATED){this.state=s.FILE_PROCESSING;var t=JSON.parse(this.xhrLoader.responseText),e=this.config;this.data="string"==typeof e?h(t,e,t):t}this.onProcessComplete()}});o.register("json",function(t,e,i,n){if(Array.isArray(t))for(var s=0;sthis.x2?this.x1=t:this.x2=t}},top:{get:function(){return Math.min(this.y1,this.y2)},set:function(t){this.y1<=this.y2?this.y1=t:this.y2=t}},bottom:{get:function(){return Math.max(this.y1,this.y2)},set:function(t){this.y1>this.y2?this.y1=t:this.y2=t}}});t.exports=h},function(t,e){t.exports={SKIP_CHECK:-1,NORMAL:0,ADD:1,MULTIPLY:2,SCREEN:3,OVERLAY:4,DARKEN:5,LIGHTEN:6,COLOR_DODGE:7,COLOR_BURN:8,HARD_LIGHT:9,SOFT_LIGHT:10,DIFFERENCE:11,EXCLUSION:12,HUE:13,SATURATION:14,COLOR:15,LUMINOSITY:16,ERASE:17,SOURCE_IN:18,SOURCE_OUT:19,SOURCE_ATOP:20,DESTINATION_OVER:21,DESTINATION_IN:22,DESTINATION_OUT:23,DESTINATION_ATOP:24,LIGHTER:25,COPY:26,XOR:27}},function(t,e,i){var n=i(0),s=i(13),r=i(270),o=new n({Mixins:[s.Alpha,s.Flip,s.Visible],initialize:function(t,e,i,n,s,r,o,a){this.layer=t,this.index=e,this.x=i,this.y=n,this.width=s,this.height=r,this.baseWidth=void 0!==o?o:s,this.baseHeight=void 0!==a?a:r,this.pixelX=0,this.pixelY=0,this.updatePixelXY(),this.properties={},this.rotation=0,this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1,this.faceLeft=!1,this.faceRight=!1,this.faceTop=!1,this.faceBottom=!1,this.collisionCallback=null,this.collisionCallbackContext=this,this.tint=16777215,this.physics={}},containsPoint:function(t,e){return!(tthis.right||e>this.bottom)},copy:function(t){return this.index=t.index,this.alpha=t.alpha,this.properties=t.properties,this.visible=t.visible,this.setFlip(t.flipX,t.flipY),this.tint=t.tint,this.rotation=t.rotation,this.collideUp=t.collideUp,this.collideDown=t.collideDown,this.collideLeft=t.collideLeft,this.collideRight=t.collideRight,this.collisionCallback=t.collisionCallback,this.collisionCallbackContext=t.collisionCallbackContext,this},getCollisionGroup:function(){return this.tileset?this.tileset.getTileCollisionGroup(this.index):null},getTileData:function(){return this.tileset?this.tileset.getTileData(this.index):null},getLeft:function(t){var e=this.tilemapLayer;return e?e.tileToWorldX(this.x,t):this.x*this.baseWidth},getRight:function(t){var e=this.tilemapLayer;return e?this.getLeft(t)+this.width*e.scaleX:this.getLeft(t)+this.width},getTop:function(t){var e=this.tilemapLayer;return e?e.tileToWorldY(this.y,t)-(this.height-this.baseHeight)*e.scaleY:this.y*this.baseHeight-(this.height-this.baseHeight)},getBottom:function(t){var e=this.tilemapLayer;return e?this.getTop(t)+this.height*e.scaleY:this.getTop(t)+this.height},getBounds:function(t,e){return void 0===e&&(e=new r),e.x=this.getLeft(),e.y=this.getTop(),e.width=this.getRight()-e.x,e.height=this.getBottom()-e.y,e},getCenterX:function(t){return this.getLeft(t)+this.width/2},getCenterY:function(t){return this.getTop(t)+this.height/2},destroy:function(){this.collisionCallback=void 0,this.collisionCallbackContext=void 0,this.properties=void 0},intersects:function(t,e,i,n){return!(i<=this.pixelX||n<=this.pixelY||t>=this.right||e>=this.bottom)},isInteresting:function(t,e){return t&&e?this.canCollide||this.hasInterestingFace:t?this.collides:!!e&&this.hasInterestingFace},resetCollision:function(t){(void 0===t&&(t=!0),this.collideLeft=!1,this.collideRight=!1,this.collideUp=!1,this.collideDown=!1,this.faceTop=!1,this.faceBottom=!1,this.faceLeft=!1,this.faceRight=!1,t)&&(this.tilemapLayer&&this.tilemapLayer.calculateFacesAt(this.x,this.y));return this},resetFaces:function(){return this.faceTop=!1,this.faceBottom=!1,this.faceLeft=!1,this.faceRight=!1,this},setCollision:function(t,e,i,n,s){(void 0===e&&(e=t),void 0===i&&(i=t),void 0===n&&(n=t),void 0===s&&(s=!0),this.collideLeft=t,this.collideRight=e,this.collideUp=i,this.collideDown=n,this.faceLeft=t,this.faceRight=e,this.faceTop=i,this.faceBottom=n,s)&&(this.tilemapLayer&&this.tilemapLayer.calculateFacesAt(this.x,this.y));return this},setCollisionCallback:function(t,e){return null===t?(this.collisionCallback=void 0,this.collisionCallbackContext=void 0):(this.collisionCallback=t,this.collisionCallbackContext=e),this},setSize:function(t,e,i,n){return void 0!==t&&(this.width=t),void 0!==e&&(this.height=e),void 0!==i&&(this.baseWidth=i),void 0!==n&&(this.baseHeight=n),this.updatePixelXY(),this},updatePixelXY:function(){return this.pixelX=this.x*this.baseWidth,this.pixelY=this.y*this.baseHeight,this},canCollide:{get:function(){return this.collideLeft||this.collideRight||this.collideUp||this.collideDown||this.collisionCallback}},collides:{get:function(){return this.collideLeft||this.collideRight||this.collideUp||this.collideDown}},hasInterestingFace:{get:function(){return this.faceTop||this.faceBottom||this.faceLeft||this.faceRight}},tileset:{get:function(){var t=this.layer.tilemapLayer;if(t){var e=t.gidMap[this.index];if(e)return e}return null}},tilemapLayer:{get:function(){return this.layer.tilemapLayer}},tilemap:{get:function(){var t=this.tilemapLayer;return t?t.tilemap:null}}});t.exports=o},function(t,e){t.exports=function(t,e){e?t.setCollision(!0,!0,!0,!0,!1):t.resetCollision(!1)}},function(t,e,i){var n=new(i(0))({initialize:function(t,e,i,n){this.loader=t,this.type=e,this.key=i,this.files=n,this.complete=!1,this.pending=n.length,this.failed=0,this.config={};for(var s=0;s=this.x2&&this.x1>=this.x3?this.x1-t:this.x2>=this.x1&&this.x2>=this.x3?this.x2-t:this.x3-t,this.x1-=e,this.x2-=e,this.x3-=e}},top:{get:function(){return Math.min(this.y1,this.y2,this.y3)},set:function(t){var e=0;e=this.y1<=this.y2&&this.y1<=this.y3?this.y1-t:this.y2<=this.y1&&this.y2<=this.y3?this.y2-t:this.y3-t,this.y1-=e,this.y2-=e,this.y3-=e}},bottom:{get:function(){return Math.max(this.y1,this.y2,this.y3)},set:function(t){var e=0;e=this.y1>=this.y2&&this.y1>=this.y3?this.y1-t:this.y2>=this.y1&&this.y2>=this.y3?this.y2-t:this.y3-t,this.y1-=e,this.y2-=e,this.y3-=e}}});t.exports=l},function(t,e,i){var n=i(9);t.exports=function(t,e,i,s,r){var o=t.strokeTint,a=n.getTintAppendFloatAlphaAndSwap(e.strokeColor,e.strokeAlpha*i);o.TL=a,o.TR=a,o.BL=a,o.BR=a;var h=e.pathData,l=h.length-1,u=e.lineWidth,c=u/2,d=h[0]-s,f=h[1]-r;e.closePath||(l-=2);for(var p=2;ps||e>=i||i>s||e+i>s){if(n)throw new Error("Range Error: Values outside acceptable range");return!1}return!0}},function(t,e,i){t.exports={COMPLETE:i(932),DESTROY:i(931),DETUNE:i(930),GLOBAL_DETUNE:i(929),GLOBAL_MUTE:i(928),GLOBAL_RATE:i(927),GLOBAL_VOLUME:i(926),LOOP:i(925),LOOPED:i(924),MUTE:i(923),PAUSE_ALL:i(922),PAUSE:i(921),PLAY:i(920),RATE:i(919),RESUME_ALL:i(918),RESUME:i(917),SEEK:i(916),STOP_ALL:i(915),STOP:i(914),UNLOCKED:i(913),VOLUME:i(912)}},function(t,e){t.exports=function(t){var e={};for(var i in t)Array.isArray(t[i])?e[i]=t[i].slice(0):e[i]=t[i];return e}},function(t,e,i){"use strict";function n(t,e,i){i=i||2;var n,a,h,l,u,f,g,v=e&&e.length,y=v?e[0]*i:t.length,m=s(t,0,y,i,!0),x=[];if(!m||m.next===m.prev)return x;if(v&&(m=function(t,e,i,n){var o,a,h,l,u,f=[];for(o=0,a=e.length;o80*i){n=h=t[0],a=l=t[1];for(var T=i;Th&&(h=u),f>l&&(l=f);g=0!==(g=Math.max(h-n,l-a))?1/g:0}return o(m,x,i,n,a,g),x}function s(t,e,i,n,s){var r,o;if(s===A(t,e,i,n)>0)for(r=e;r=e;r-=n)o=b(r,t[r],t[r+1],o);return o&&m(o,o.next)&&(S(o),o=o.next),o}function r(t,e){if(!t)return t;e||(e=t);var i,n=t;do{if(i=!1,n.steiner||!m(n,n.next)&&0!==y(n.prev,n,n.next))n=n.next;else{if(S(n),(n=e=n.prev)===n.next)break;i=!0}}while(i||n!==e);return e}function o(t,e,i,n,s,c,d){if(t){!d&&c&&function(t,e,i,n){var s=t;do{null===s.z&&(s.z=f(s.x,s.y,e,i,n)),s.prevZ=s.prev,s.nextZ=s.next,s=s.next}while(s!==t);s.prevZ.nextZ=null,s.prevZ=null,function(t){var e,i,n,s,r,o,a,h,l=1;do{for(i=t,t=null,r=null,o=0;i;){for(o++,n=i,a=0,e=0;e0||h>0&&n;)0!==a&&(0===h||!n||i.z<=n.z)?(s=i,i=i.nextZ,a--):(s=n,n=n.nextZ,h--),r?r.nextZ=s:t=s,s.prevZ=r,r=s;i=n}r.nextZ=null,l*=2}while(o>1)}(s)}(t,n,s,c);for(var p,g,v=t;t.prev!==t.next;)if(p=t.prev,g=t.next,c?h(t,n,s,c):a(t))e.push(p.i/i),e.push(t.i/i),e.push(g.i/i),S(t),t=g.next,v=g.next;else if((t=g)===v){d?1===d?o(t=l(t,e,i),e,i,n,s,c,2):2===d&&u(t,e,i,n,s,c):o(r(t),e,i,n,s,c,1);break}}}function a(t){var e=t.prev,i=t,n=t.next;if(y(e,i,n)>=0)return!1;for(var s=t.next.next;s!==t.prev;){if(g(e.x,e.y,i.x,i.y,n.x,n.y,s.x,s.y)&&y(s.prev,s,s.next)>=0)return!1;s=s.next}return!0}function h(t,e,i,n){var s=t.prev,r=t,o=t.next;if(y(s,r,o)>=0)return!1;for(var a=s.xr.x?s.x>o.x?s.x:o.x:r.x>o.x?r.x:o.x,u=s.y>r.y?s.y>o.y?s.y:o.y:r.y>o.y?r.y:o.y,c=f(a,h,e,i,n),d=f(l,u,e,i,n),p=t.prevZ,v=t.nextZ;p&&p.z>=c&&v&&v.z<=d;){if(p!==t.prev&&p!==t.next&&g(s.x,s.y,r.x,r.y,o.x,o.y,p.x,p.y)&&y(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,v!==t.prev&&v!==t.next&&g(s.x,s.y,r.x,r.y,o.x,o.y,v.x,v.y)&&y(v.prev,v,v.next)>=0)return!1;v=v.nextZ}for(;p&&p.z>=c;){if(p!==t.prev&&p!==t.next&&g(s.x,s.y,r.x,r.y,o.x,o.y,p.x,p.y)&&y(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;v&&v.z<=d;){if(v!==t.prev&&v!==t.next&&g(s.x,s.y,r.x,r.y,o.x,o.y,v.x,v.y)&&y(v.prev,v,v.next)>=0)return!1;v=v.nextZ}return!0}function l(t,e,i){var n=t;do{var s=n.prev,r=n.next.next;!m(s,r)&&x(s,n,n.next,r)&&T(s,r)&&T(r,s)&&(e.push(s.i/i),e.push(n.i/i),e.push(r.i/i),S(n),S(n.next),n=t=r),n=n.next}while(n!==t);return n}function u(t,e,i,n,s,a){var h=t;do{for(var l=h.next.next;l!==h.prev;){if(h.i!==l.i&&v(h,l)){var u=w(h,l);return h=r(h,h.next),u=r(u,u.next),o(h,e,i,n,s,a),void o(u,e,i,n,s,a)}l=l.next}h=h.next}while(h!==t)}function c(t,e){return t.x-e.x}function d(t,e){if(e=function(t,e){var i,n=e,s=t.x,r=t.y,o=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){var a=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(a<=s&&a>o){if(o=a,a===s){if(r===n.y)return n;if(r===n.next.y)return n.next}i=n.x=n.x&&n.x>=u&&s!==n.x&&g(ri.x)&&T(n,t)&&(i=n,d=h),n=n.next;return i}(t,e)){var i=w(e,t);r(i,i.next)}}function f(t,e,i,n,s){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-i)*s)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*s)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function p(t){var e=t,i=t;do{e.x=0&&(t-o)*(n-a)-(i-o)*(e-a)>=0&&(i-o)*(r-a)-(s-o)*(n-a)>=0}function v(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var i=t;do{if(i.i!==t.i&&i.next.i!==t.i&&i.i!==e.i&&i.next.i!==e.i&&x(i,i.next,t,e))return!0;i=i.next}while(i!==t);return!1}(t,e)&&T(t,e)&&T(e,t)&&function(t,e){var i=t,n=!1,s=(t.x+e.x)/2,r=(t.y+e.y)/2;do{i.y>r!=i.next.y>r&&i.next.y!==i.y&&s<(i.next.x-i.x)*(r-i.y)/(i.next.y-i.y)+i.x&&(n=!n),i=i.next}while(i!==t);return n}(t,e)}function y(t,e,i){return(e.y-t.y)*(i.x-e.x)-(e.x-t.x)*(i.y-e.y)}function m(t,e){return t.x===e.x&&t.y===e.y}function x(t,e,i,n){return!!(m(t,e)&&m(i,n)||m(t,n)&&m(i,e))||y(t,e,i)>0!=y(t,e,n)>0&&y(i,n,t)>0!=y(i,n,e)>0}function T(t,e){return y(t.prev,t,t.next)<0?y(t,e,t.next)>=0&&y(t,t.prev,e)>=0:y(t,e,t.prev)<0||y(t,t.next,e)<0}function w(t,e){var i=new _(t.i,t.x,t.y),n=new _(e.i,e.x,e.y),s=t.next,r=e.prev;return t.next=e,e.prev=t,i.next=s,s.prev=i,n.next=i,i.prev=n,r.next=n,n.prev=r,n}function b(t,e,i,n){var s=new _(t,e,i);return n?(s.next=n.next,s.prev=n,n.next.prev=s,n.next=s):(s.prev=s,s.next=s),s}function S(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function _(t,e,i){this.i=t,this.x=e,this.y=i,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function A(t,e,i,n){for(var s=0,r=e,o=i-n;r0&&(n+=t[s-1].length,i.holes.push(n))}return i}},function(t,e,i){var n={};t.exports=n;var s=i(82),r=i(87),o=i(238),a=i(36),h=i(86),l=i(546);!function(){n._inertiaScale=4,n._nextCollidingGroupId=1,n._nextNonCollidingGroupId=-1,n._nextCategory=1,n.create=function(e){var i={id:a.nextId(),type:"body",label:"Body",gameObject:null,parts:[],plugin:{},angle:0,vertices:s.fromPath("L 0 0 L 40 0 L 40 40 L 0 40"),position:{x:0,y:0},force:{x:0,y:0},torque:0,positionImpulse:{x:0,y:0},previousPositionImpulse:{x:0,y:0},constraintImpulse:{x:0,y:0,angle:0},totalContacts:0,speed:0,angularSpeed:0,velocity:{x:0,y:0},angularVelocity:0,isSensor:!1,isStatic:!1,isSleeping:!1,ignoreGravity:!1,ignorePointer:!1,motion:0,sleepThreshold:60,density:.001,restitution:0,friction:.1,frictionStatic:.5,frictionAir:.01,collisionFilter:{category:1,mask:4294967295,group:0},slop:.05,timeScale:1,render:{visible:!0,opacity:1,sprite:{xScale:1,yScale:1,xOffset:0,yOffset:0},lineWidth:0},events:null,bounds:null,chamfer:null,circleRadius:0,positionPrev:null,anglePrev:0,parent:null,axes:null,area:0,mass:0,inertia:0,_original:null},n=a.extend(i,e);return t(n,e),n},n.nextGroup=function(t){return t?n._nextNonCollidingGroupId--:n._nextCollidingGroupId++},n.nextCategory=function(){return n._nextCategory=n._nextCategory<<1,n._nextCategory};var t=function(t,e){e=e||{},n.set(t,{bounds:t.bounds||h.create(t.vertices),positionPrev:t.positionPrev||r.clone(t.position),anglePrev:t.anglePrev||t.angle,vertices:t.vertices,parts:t.parts||[t],isStatic:t.isStatic,isSleeping:t.isSleeping,parent:t.parent||t}),s.rotate(t.vertices,t.angle,t.position),l.rotate(t.axes,t.angle),h.update(t.bounds,t.vertices,t.velocity),n.set(t,{axes:e.axes||t.axes,area:e.area||t.area,mass:e.mass||t.mass,inertia:e.inertia||t.inertia});var i=t.isStatic?"#2e2b44":a.choose(["#006BA6","#0496FF","#FFBC42","#D81159","#8F2D56"]);t.render.fillStyle=t.render.fillStyle||i,t.render.strokeStyle=t.render.strokeStyle||"#000",t.render.sprite.xOffset+=-(t.bounds.min.x-t.position.x)/(t.bounds.max.x-t.bounds.min.x),t.render.sprite.yOffset+=-(t.bounds.min.y-t.position.y)/(t.bounds.max.y-t.bounds.min.y)};n.set=function(t,e,i){var s;for(s in"string"==typeof e&&(s=e,(e={})[s]=i),e)if(e.hasOwnProperty(s))switch(i=e[s],s){case"isStatic":n.setStatic(t,i);break;case"isSleeping":o.set(t,i);break;case"mass":n.setMass(t,i);break;case"density":n.setDensity(t,i);break;case"inertia":n.setInertia(t,i);break;case"vertices":n.setVertices(t,i);break;case"position":n.setPosition(t,i);break;case"angle":n.setAngle(t,i);break;case"velocity":n.setVelocity(t,i);break;case"angularVelocity":n.setAngularVelocity(t,i);break;case"parts":n.setParts(t,i);break;default:t[s]=i}},n.setStatic=function(t,e){for(var i=0;i0&&r.rotateAbout(o.position,i,t.position,o.position)}},n.setVelocity=function(t,e){t.positionPrev.x=t.position.x-e.x,t.positionPrev.y=t.position.y-e.y,t.velocity.x=e.x,t.velocity.y=e.y,t.speed=r.magnitude(t.velocity)},n.setAngularVelocity=function(t,e){t.anglePrev=t.angle-e,t.angularVelocity=e,t.angularSpeed=Math.abs(t.angularVelocity)},n.translate=function(t,e){n.setPosition(t,r.add(t.position,e))},n.rotate=function(t,e,i){if(i){var s=Math.cos(e),r=Math.sin(e),o=t.position.x-i.x,a=t.position.y-i.y;n.setPosition(t,{x:i.x+(o*s-a*r),y:i.y+(o*r+a*s)}),n.setAngle(t,t.angle+e)}else n.setAngle(t,t.angle+e)},n.scale=function(t,e,i,r){var o=0,a=0;r=r||t.position;for(var u=0;u0&&(o+=c.area,a+=c.inertia),c.position.x=r.x+(c.position.x-r.x)*e,c.position.y=r.y+(c.position.y-r.y)*i,h.update(c.bounds,c.vertices,t.velocity)}t.parts.length>1&&(t.area=o,t.isStatic||(n.setMass(t,t.density*o),n.setInertia(t,a))),t.circleRadius&&(e===i?t.circleRadius*=e:t.circleRadius=null)},n.update=function(t,e,i,n){var o=Math.pow(e*i*t.timeScale,2),a=1-t.frictionAir*i*t.timeScale,u=t.position.x-t.positionPrev.x,c=t.position.y-t.positionPrev.y;t.velocity.x=u*a*n+t.force.x/t.mass*o,t.velocity.y=c*a*n+t.force.y/t.mass*o,t.positionPrev.x=t.position.x,t.positionPrev.y=t.position.y,t.position.x+=t.velocity.x,t.position.y+=t.velocity.y,t.angularVelocity=(t.angle-t.anglePrev)*a*n+t.torque/t.inertia*o,t.anglePrev=t.angle,t.angle+=t.angularVelocity,t.speed=r.magnitude(t.velocity),t.angularSpeed=Math.abs(t.angularVelocity);for(var d=0;d0&&(f.position.x+=t.velocity.x,f.position.y+=t.velocity.y),0!==t.angularVelocity&&(s.rotate(f.vertices,t.angularVelocity,t.position),l.rotate(f.axes,t.angularVelocity),d>0&&r.rotateAbout(f.position,t.angularVelocity,t.position,f.position)),h.update(f.bounds,f.vertices,t.velocity)}},n.applyForce=function(t,e,i){t.force.x+=i.x,t.force.y+=i.y;var n=e.x-t.position.x,s=e.y-t.position.y;t.torque+=n*i.y-s*i.x},n._totalProperties=function(t){for(var e={mass:0,area:0,inertia:0,centre:{x:0,y:0}},i=1===t.parts.length?0:1;i=0&&y>=0&&v+y<1}},function(t,e,i){t.exports={ADD:i(945),COMPLETE:i(944),FILE_COMPLETE:i(943),FILE_KEY_COMPLETE:i(942),FILE_LOAD_ERROR:i(941),FILE_LOAD:i(940),FILE_PROGRESS:i(939),POST_PROCESS:i(938),PROGRESS:i(937),START:i(936)}},function(t,e,i){var n=i(0),s=i(180),r=i(10),o=i(3),a=new n({initialize:function(t){this.type=t,this.defaultDivisions=5,this.arcLengthDivisions=100,this.cacheArcLengths=[],this.needsUpdate=!0,this.active=!0,this._tmpVec2A=new o,this._tmpVec2B=new o},draw:function(t,e){return void 0===e&&(e=32),t.strokePoints(this.getPoints(e))},getBounds:function(t,e){t||(t=new r),void 0===e&&(e=16);var i=this.getLength();e>i&&(e=i/2);var n=Math.max(1,Math.round(i/e));return s(this.getSpacedPoints(n),t)},getDistancePoints:function(t){var e=this.getLength(),i=Math.max(1,e/t);return this.getSpacedPoints(i)},getEndPoint:function(t){return void 0===t&&(t=new o),this.getPointAt(1,t)},getLength:function(){var t=this.getLengths();return t[t.length-1]},getLengths:function(t){if(void 0===t&&(t=this.arcLengthDivisions),this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var e,i=[],n=this.getPoint(0,this._tmpVec2A),s=0;i.push(0);for(var r=1;r<=t;r++)s+=(e=this.getPoint(r/t,this._tmpVec2B)).distance(n),i.push(s),n.copy(e);return this.cacheArcLengths=i,i},getPointAt:function(t,e){var i=this.getUtoTmapping(t);return this.getPoint(i,e)},getPoints:function(t){void 0===t&&(t=this.defaultDivisions);for(var e=[],i=0;i<=t;i++)e.push(this.getPoint(i/t));return e},getRandomPoint:function(t){return void 0===t&&(t=new o),this.getPoint(Math.random(),t)},getSpacedPoints:function(t){void 0===t&&(t=this.defaultDivisions);for(var e=[],i=0;i<=t;i++){var n=this.getUtoTmapping(i/t,null,t);e.push(this.getPoint(n))}return e},getStartPoint:function(t){return void 0===t&&(t=new o),this.getPointAt(0,t)},getTangent:function(t,e){void 0===e&&(e=new o);var i=t-1e-4,n=t+1e-4;return i<0&&(i=0),n>1&&(n=1),this.getPoint(i,this._tmpVec2A),this.getPoint(n,e),e.subtract(this._tmpVec2A).normalize()},getTangentAt:function(t,e){var i=this.getUtoTmapping(t);return this.getTangent(i,e)},getTFromDistance:function(t,e){return t<=0?0:this.getUtoTmapping(0,t,e)},getUtoTmapping:function(t,e,i){var n,s=this.getLengths(i),r=0,o=s.length;n=e?Math.min(e,s[o-1]):t*s[o-1];for(var a,h=0,l=o-1;h<=l;)if((a=s[r=Math.floor(h+(l-h)/2)]-n)<0)h=r+1;else{if(!(a>0)){l=r;break}l=r-1}if(s[r=l]===n)return r/(o-1);var u=s[r];return(r+(n-u)/(s[r+1]-u))/(o-1)},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()}});t.exports=a},function(t,e,i){var n=i(0),s=i(43),r=i(438),o=i(437),a=i(206),h=new n({initialize:function(t,e,i){void 0===t&&(t=0),void 0===e&&(e=0),void 0===i&&(i=0),this.x=t,this.y=e,this._radius=i,this._diameter=2*i},contains:function(t,e){return s(this,t,e)},getPoint:function(t,e){return r(this,t,e)},getPoints:function(t,e,i){return o(this,t,e,i)},getRandomPoint:function(t){return a(this,t)},setTo:function(t,e,i){return this.x=t,this.y=e,this._radius=i,this._diameter=2*i,this},setEmpty:function(){return this._radius=0,this._diameter=0,this},setPosition:function(t,e){return void 0===e&&(e=t),this.x=t,this.y=e,this},isEmpty:function(){return this._radius<=0},radius:{get:function(){return this._radius},set:function(t){this._radius=t,this._diameter=2*t}},diameter:{get:function(){return this._diameter},set:function(t){this._diameter=t,this._radius=.5*t}},left:{get:function(){return this.x-this._radius},set:function(t){this.x=t+this._radius}},right:{get:function(){return this.x+this._radius},set:function(t){this.x=t-this._radius}},top:{get:function(){return this.y-this._radius},set:function(t){this.y=t+this._radius}},bottom:{get:function(){return this.y+this._radius},set:function(t){this.y=t-this._radius}}});t.exports=h},function(t,e){t.exports=function(t){return t.y-t.height*t.originY+.5*t.height}},function(t,e){t.exports=function(t,e){var i=t.height*t.originY;return t.y=e+i-.5*t.height,t}},function(t,e){t.exports=function(t,e){var i=t.width*t.originX;return t.x=e+i-.5*t.width,t}},function(t,e){t.exports=function(t){return t.x-t.width*t.originX+.5*t.width}},function(t,e,i){var n={};t.exports=n;var s=i(87),r=i(36);n.create=function(t,e){for(var i=[],n=0;n0)return!1}return!0},n.scale=function(t,e,i,r){if(1===e&&1===i)return t;var o,a;r=r||n.centre(t);for(var h=0;h=0?h-1:t.length-1],u=t[h],c=t[(h+1)%t.length],d=e[h0&&(r|=2),3===r)return!1;return 0!==r||null},n.hull=function(t){var e,i,n=[],r=[];for((t=t.slice(0)).sort(function(t,e){var i=t.x-e.x;return 0!==i?i:t.y-e.y}),i=0;i=2&&s.cross3(r[r.length-2],r[r.length-1],e)<=0;)r.pop();r.push(e)}for(i=t.length-1;i>=0;i-=1){for(e=t[i];n.length>=2&&s.cross3(n[n.length-2],n[n.length-1],e)<=0;)n.pop();n.push(e)}return n.pop(),r.pop(),n.concat(r)}},function(t,e,i){var n=i(0),s=i(2),r=new n({initialize:function(t){void 0===t&&(t={}),this.name=s(t,"name","map"),this.width=s(t,"width",0),this.height=s(t,"height",0),this.tileWidth=s(t,"tileWidth",0),this.tileHeight=s(t,"tileHeight",0),this.widthInPixels=s(t,"widthInPixels",this.width*this.tileWidth),this.heightInPixels=s(t,"heightInPixels",this.height*this.tileHeight),this.format=s(t,"format",null),this.orientation=s(t,"orientation","orthogonal"),this.renderOrder=s(t,"renderOrder","right-down"),this.version=s(t,"version","1"),this.properties=s(t,"properties",{}),this.layers=s(t,"layers",[]),this.images=s(t,"images",[]),this.objects=s(t,"objects",{}),this.collision=s(t,"collision",{}),this.tilesets=s(t,"tilesets",[]),this.imageCollections=s(t,"imageCollections",[]),this.tiles=s(t,"tiles",[])}});t.exports=r},function(t,e,i){var n=i(0),s=i(2),r=new n({initialize:function(t){void 0===t&&(t={}),this.name=s(t,"name","layer"),this.x=s(t,"x",0),this.y=s(t,"y",0),this.width=s(t,"width",0),this.height=s(t,"height",0),this.tileWidth=s(t,"tileWidth",0),this.tileHeight=s(t,"tileHeight",0),this.baseTileWidth=s(t,"baseTileWidth",this.tileWidth),this.baseTileHeight=s(t,"baseTileHeight",this.tileHeight),this.widthInPixels=s(t,"widthInPixels",this.width*this.baseTileWidth),this.heightInPixels=s(t,"heightInPixels",this.height*this.baseTileHeight),this.alpha=s(t,"alpha",1),this.visible=s(t,"visible",!0),this.properties=s(t,"properties",{}),this.indexes=s(t,"indexes",[]),this.collideIndexes=s(t,"collideIndexes",[]),this.callbacks=s(t,"callbacks",[]),this.bodies=s(t,"bodies",[]),this.data=s(t,"data",[]),this.tilemapLayer=s(t,"tilemapLayer",null)}});t.exports=r},function(t,e){t.exports=function(t,e,i){return t>=0&&t=0&&et.max.x&&(t.max.x=s.x),s.xt.max.y&&(t.max.y=s.y),s.y0?t.max.x+=i.x:t.min.x+=i.x,i.y>0?t.max.y+=i.y:t.min.y+=i.y)},i.contains=function(t,e){return e.x>=t.min.x&&e.x<=t.max.x&&e.y>=t.min.y&&e.y<=t.max.y},i.overlaps=function(t,e){return t.min.x<=e.max.x&&t.max.x>=e.min.x&&t.max.y>=e.min.y&&t.min.y<=e.max.y},i.translate=function(t,e){t.min.x+=e.x,t.max.x+=e.x,t.min.y+=e.y,t.max.y+=e.y},i.shift=function(t,e){var i=t.max.x-t.min.x,n=t.max.y-t.min.y;t.min.x=e.x,t.max.x=e.x+i,t.min.y=e.y,t.max.y=e.y+n}},function(t,e){var i={};t.exports=i,i.create=function(t,e){return{x:t||0,y:e||0}},i.clone=function(t){return{x:t.x,y:t.y}},i.magnitude=function(t){return Math.sqrt(t.x*t.x+t.y*t.y)},i.magnitudeSquared=function(t){return t.x*t.x+t.y*t.y},i.rotate=function(t,e,i){var n=Math.cos(e),s=Math.sin(e);i||(i={});var r=t.x*n-t.y*s;return i.y=t.x*s+t.y*n,i.x=r,i},i.rotateAbout=function(t,e,i,n){var s=Math.cos(e),r=Math.sin(e);n||(n={});var o=i.x+((t.x-i.x)*s-(t.y-i.y)*r);return n.y=i.y+((t.x-i.x)*r+(t.y-i.y)*s),n.x=o,n},i.normalise=function(t){var e=i.magnitude(t);return 0===e?{x:0,y:0}:{x:t.x/e,y:t.y/e}},i.dot=function(t,e){return t.x*e.x+t.y*e.y},i.cross=function(t,e){return t.x*e.y-t.y*e.x},i.cross3=function(t,e,i){return(e.x-t.x)*(i.y-t.y)-(e.y-t.y)*(i.x-t.x)},i.add=function(t,e,i){return i||(i={}),i.x=t.x+e.x,i.y=t.y+e.y,i},i.sub=function(t,e,i){return i||(i={}),i.x=t.x-e.x,i.y=t.y-e.y,i},i.mult=function(t,e){return{x:t.x*e,y:t.y*e}},i.div=function(t,e){return{x:t.x/e,y:t.y/e}},i.perp=function(t,e){return{x:(e=!0===e?-1:1)*-t.y,y:e*t.x}},i.neg=function(t){return{x:-t.x,y:-t.y}},i.angle=function(t,e){return Math.atan2(e.y-t.y,e.x-t.x)},i._temp=[i.create(),i.create(),i.create(),i.create(),i.create(),i.create()]},function(t,e,i){var n=i(9);t.exports=function(t,e,i,s,r,o){for(var a=n.getTintAppendFloatAlphaAndSwap(i.fillColor,i.fillAlpha*s),h=i.pathData,l=i.pathIndexes,u=0;u=0;u--)if((l=d[u]).active===i){if(++c===e)break}else l=null;return l?("number"==typeof s&&(l.x=s),"number"==typeof r&&(l.y=r),l):n?this.create(s,r,o,a,h):null},get:function(t,e,i,n,s){return this.getFirst(!1,!0,t,e,i,n,s)},getFirstAlive:function(t,e,i,n,s,r){return this.getFirst(!0,t,e,i,n,s,r)},getFirstDead:function(t,e,i,n,s,r){return this.getFirst(!1,t,e,i,n,s,r)},playAnimation:function(t,e){return n.PlayAnimation(this.children.entries,t,e),this},isFull:function(){return-1!==this.maxSize&&this.children.size>=this.maxSize},countActive:function(t){void 0===t&&(t=!0);for(var e=0,i=0;i=t.length)){for(var i=t.length-1,n=t[e],s=e;s-1&&this.entries.splice(e,1),this},dump:function(){console.group("Set");for(var t=0;t-1},union:function(t){var e=new n;return t.entries.forEach(function(t){e.set(t)}),this.entries.forEach(function(t){e.set(t)}),e},intersect:function(t){var e=new n;return this.entries.forEach(function(i){t.contains(i)&&e.set(i)}),e},difference:function(t){var e=new n;return this.entries.forEach(function(i){t.contains(i)||e.set(i)}),e},size:{get:function(){return this.entries.length},set:function(t){return t=this.firstgid&&t=0&&g<=1&&v>=0&&v<=1&&(i.x=s+g*(o-s),i.y=r+g*(a-r),!0)}},function(t,e,i){var n=i(0),s=i(13),r=i(18),o=i(753),a=new n({Extends:r,Mixins:[s.BlendMode,s.Depth,s.GetBounds,s.Mask,s.Pipeline,s.ScaleMode,s.Size,s.Texture,s.Transform,s.Visible,s.ScrollFactor,o],initialize:function(t,e,i,n,s,o,a,h,l){if(r.call(this,t,"Mesh"),n.length!==s.length)throw new Error("Mesh Vertex count must match UV count");var u,c=n.length/2|0;if(o.length>0&&o.length0&&a.lengthl&&(r=l),o>l&&(o=l),a=s,h=r;;)if(a-1},setAll:function(t,e,i,s){return n.SetAll(this.list,t,e,i,s),this},each:function(t,e){for(var i=[null],n=2;n0?this.list[0]:null}},last:{get:function(){return this.list.length>0?(this.position=this.list.length-1,this.list[this.position]):null}},next:{get:function(){return this.position0?(this.position--,this.list[this.position]):null}}});t.exports=a},function(t,e,i){var n=i(0),s=i(23),r=i(19),o=new n({initialize:function(t,e,i,n,s,r,o){this.texture=t,this.name=e,this.source=t.source[i],this.sourceIndex=i,this.glTexture=this.source.glTexture,this.cutX,this.cutY,this.cutWidth,this.cutHeight,this.x=0,this.y=0,this.width,this.height,this.halfWidth,this.halfHeight,this.centerX,this.centerY,this.pivotX=0,this.pivotY=0,this.customPivot=!1,this.rotated=!1,this.autoRound=-1,this.customData={},this.u0=0,this.v0=0,this.u1=0,this.v1=0,this.data={cut:{x:0,y:0,w:0,h:0,r:0,b:0},trim:!1,sourceSize:{w:0,h:0},spriteSourceSize:{x:0,y:0,w:0,h:0,r:0,b:0},radius:0,drawImage:{x:0,y:0,width:0,height:0}},this.setSize(r,o,n,s)},setSize:function(t,e,i,n){void 0===i&&(i=0),void 0===n&&(n=0),this.cutX=i,this.cutY=n,this.cutWidth=t,this.cutHeight=e,this.width=t,this.height=e,this.halfWidth=Math.floor(.5*t),this.halfHeight=Math.floor(.5*e),this.centerX=Math.floor(t/2),this.centerY=Math.floor(e/2);var s=this.data,r=s.cut;r.x=i,r.y=n,r.w=t,r.h=e,r.r=i+t,r.b=n+e,s.sourceSize.w=t,s.sourceSize.h=e,s.spriteSourceSize.w=t,s.spriteSourceSize.h=e,s.radius=.5*Math.sqrt(t*t+e*e);var o=s.drawImage;return o.x=i,o.y=n,o.width=t,o.height=e,this.updateUVs()},setTrim:function(t,e,i,n,s,r){var o=this.data,a=o.spriteSourceSize;return o.trim=!0,o.sourceSize.w=t,o.sourceSize.h=e,a.x=i,a.y=n,a.w=s,a.h=r,a.r=i+s,a.b=n+r,this.x=i,this.y=n,this.width=s,this.height=r,this.halfWidth=.5*s,this.halfHeight=.5*r,this.centerX=Math.floor(s/2),this.centerY=Math.floor(r/2),this.updateUVs()},setCropUVs:function(t,e,i,n,r,o,a){var h=this.cutX,l=this.cutY,u=this.cutWidth,c=this.cutHeight,d=this.realWidth,f=this.realHeight,p=h+(e=s(e,0,d)),g=l+(i=s(i,0,f)),v=n=s(n,0,d-e),y=r=s(r,0,f-i),m=this.data;if(m.trim){var x=m.spriteSourceSize,T=e+(n=s(n,0,u-e)),w=i+(r=s(r,0,c-i));if(!(x.rT||x.y>w)){var b=Math.max(x.x,e),S=Math.max(x.y,i),_=Math.min(x.r,T)-b,A=Math.min(x.b,w)-S;v=_,y=A,p=o?h+(u-(b-x.x)-_):h+(b-x.x),g=a?l+(c-(S-x.y)-A):l+(S-x.y),e=b,i=S,n=_,r=A}else p=0,g=0,v=0,y=0}else o&&(p=h+(u-e-n)),a&&(g=l+(c-i-r));var E=this.source.width,C=this.source.height;return t.u0=Math.max(0,p/E),t.v0=Math.max(0,g/C),t.u1=Math.min(1,(p+v)/E),t.v1=Math.min(1,(g+y)/C),t.x=e,t.y=i,t.cx=p,t.cy=g,t.cw=v,t.ch=y,t.width=n,t.height=r,t.flipX=o,t.flipY=a,t},updateCropUVs:function(t,e,i){return this.setCropUVs(t,t.x,t.y,t.width,t.height,e,i)},updateUVs:function(){var t=this.cutX,e=this.cutY,i=this.cutWidth,n=this.cutHeight,s=this.data.drawImage;s.width=i,s.height=n;var r=this.source.width,o=this.source.height;return this.u0=t/r,this.v0=e/o,this.u1=(t+i)/r,this.v1=(e+n)/o,this},updateUVsInverted:function(){var t=this.source.width,e=this.source.height;return this.u0=(this.cutX+this.cutHeight)/t,this.v0=this.cutY/e,this.u1=this.cutX/t,this.v1=(this.cutY+this.cutWidth)/e,this},clone:function(){var t=new o(this.texture,this.name,this.sourceIndex);return t.cutX=this.cutX,t.cutY=this.cutY,t.cutWidth=this.cutWidth,t.cutHeight=this.cutHeight,t.x=this.x,t.y=this.y,t.width=this.width,t.height=this.height,t.halfWidth=this.halfWidth,t.halfHeight=this.halfHeight,t.centerX=this.centerX,t.centerY=this.centerY,t.rotated=this.rotated,t.data=r(!0,t.data,this.data),t.updateUVs(),t},destroy:function(){this.texture=null,this.source=null},realWidth:{get:function(){return this.data.sourceSize.w}},realHeight:{get:function(){return this.data.sourceSize.h}},radius:{get:function(){return this.data.radius}},trimmed:{get:function(){return this.data.trim}},canvasData:{get:function(){return this.data.drawImage}}});t.exports=o},function(t,e,i){var n=i(0),s=i(11),r=i(69),o=i(19),a=i(1),h=new n({Extends:s,initialize:function(t,e,i){s.call(this),this.manager=t,this.key=e,this.isPlaying=!1,this.isPaused=!1,this.totalRate=1,this.duration=this.duration||0,this.totalDuration=this.totalDuration||0,this.config={mute:!1,volume:1,rate:1,detune:0,seek:0,loop:!1,delay:0},this.currentConfig=this.config,this.config=o(this.config,i),this.markers={},this.currentMarker=null,this.pendingRemove=!1},addMarker:function(t){return!(!t||!t.name||"string"!=typeof t.name)&&(this.markers[t.name]?(console.error("addMarker "+t.name+" already exists in Sound"),!1):(t=o(!0,{name:"",start:0,duration:this.totalDuration-(t.start||0),config:{mute:!1,volume:1,rate:1,detune:0,seek:0,loop:!1,delay:0}},t),this.markers[t.name]=t,!0))},updateMarker:function(t){return!(!t||!t.name||"string"!=typeof t.name)&&(this.markers[t.name]?(this.markers[t.name]=o(!0,this.markers[t.name],t),!0):(console.warn("Audio Marker: "+t.name+" missing in Sound: "+this.key),!1))},removeMarker:function(t){var e=this.markers[t];return e?(this.markers[t]=null,e):null},play:function(t,e){if(void 0===t&&(t=""),"object"==typeof t&&(e=t,t=""),"string"!=typeof t)return!1;if(t){if(!this.markers[t])return console.warn("Marker: "+t+" missing in Sound: "+this.key),!1;this.currentMarker=this.markers[t],this.currentConfig=this.currentMarker.config,this.duration=this.currentMarker.duration}else this.currentMarker=null,this.currentConfig=this.config,this.duration=this.totalDuration;return this.resetConfig(),this.currentConfig=o(this.currentConfig,e),this.isPlaying=!0,this.isPaused=!1,!0},pause:function(){return!(this.isPaused||!this.isPlaying)&&(this.isPlaying=!1,this.isPaused=!0,!0)},resume:function(){return!(!this.isPaused||this.isPlaying)&&(this.isPlaying=!0,this.isPaused=!1,!0)},stop:function(){return!(!this.isPaused&&!this.isPlaying)&&(this.isPlaying=!1,this.isPaused=!1,this.resetConfig(),!0)},applyConfig:function(){this.mute=this.currentConfig.mute,this.volume=this.currentConfig.volume,this.rate=this.currentConfig.rate,this.detune=this.currentConfig.detune,this.loop=this.currentConfig.loop},resetConfig:function(){this.currentConfig.seek=0,this.currentConfig.delay=0},update:a,calculateRate:function(){var t=this.currentConfig.detune+this.manager.detune,e=Math.pow(1.0005777895065548,t);this.totalRate=this.currentConfig.rate*this.manager.rate*e},destroy:function(){this.pendingRemove||(this.emit(r.DESTROY,this),this.pendingRemove=!0,this.manager=null,this.key="",this.removeAllListeners(),this.isPlaying=!1,this.isPaused=!1,this.config=null,this.currentConfig=null,this.markers=null,this.currentMarker=null)}});t.exports=h},function(t,e,i){var n=i(0),s=i(70),r=i(11),o=i(69),a=i(26),h=i(1),l=new n({Extends:r,initialize:function(t){r.call(this),this.game=t,this.jsonCache=t.cache.json,this.sounds=[],this.mute=!1,this.volume=1,this.pauseOnBlur=!0,this._rate=1,this._detune=0,this.locked=this.locked||!1,this.unlocked=!1,t.events.on(a.BLUR,function(){this.pauseOnBlur&&this.onBlur()},this),t.events.on(a.FOCUS,function(){this.pauseOnBlur&&this.onFocus()},this),t.events.on(a.PRE_STEP,this.update,this),t.events.once(a.DESTROY,this.destroy,this)},add:h,addAudioSprite:function(t,e){void 0===e&&(e={});var i=this.add(t,e);for(var n in i.spritemap=this.jsonCache.get(t).spritemap,i.spritemap)if(i.spritemap.hasOwnProperty(n)){var r=s(e),o=i.spritemap[n];r.loop=!!o.hasOwnProperty("loop")&&o.loop,i.addMarker({name:n,start:o.start,duration:o.end-o.start,config:r})}return i},play:function(t,e){var i=this.add(t);return i.once(o.COMPLETE,i.destroy,i),e?e.name?(i.addMarker(e),i.play(e.name)):i.play(e):i.play()},playAudioSprite:function(t,e,i){var n=this.addAudioSprite(t);return n.once(o.COMPLETE,n.destroy,n),n.play(e,i)},remove:function(t){var e=this.sounds.indexOf(t);return-1!==e&&(t.destroy(),this.sounds.splice(e,1),!0)},removeByKey:function(t){for(var e=0,i=this.sounds.length-1;i>=0;i--){var n=this.sounds[i];n.key===t&&(n.destroy(),this.sounds.splice(i,1),e++)}return e},pauseAll:function(){this.forEachActiveSound(function(t){t.pause()}),this.emit(o.PAUSE_ALL,this)},resumeAll:function(){this.forEachActiveSound(function(t){t.resume()}),this.emit(o.RESUME_ALL,this)},stopAll:function(){this.forEachActiveSound(function(t){t.stop()}),this.emit(o.STOP_ALL,this)},unlock:h,onBlur:h,onFocus:h,update:function(t,e){this.unlocked&&(this.unlocked=!1,this.locked=!1,this.emit(o.UNLOCKED,this));for(var i=this.sounds.length-1;i>=0;i--)this.sounds[i].pendingRemove&&this.sounds.splice(i,1);this.sounds.forEach(function(i){i.update(t,e)})},destroy:function(){this.removeAllListeners(),this.forEachActiveSound(function(t){t.destroy()}),this.sounds.length=0,this.sounds=null,this.game=null},forEachActiveSound:function(t,e){var i=this;this.sounds.forEach(function(n,s){n.pendingRemove||t.call(e||i,n,s,i.sounds)})},setRate:function(t){return this.rate=t,this},rate:{get:function(){return this._rate},set:function(t){this._rate=t,this.forEachActiveSound(function(t){t.calculateRate()}),this.emit(o.GLOBAL_RATE,this,t)}},setDetune:function(t){return this.detune=t,this},detune:{get:function(){return this._detune},set:function(t){this._detune=t,this.forEachActiveSound(function(t){t.calculateRate()}),this.emit(o.GLOBAL_DETUNE,this,t)}}});t.exports=l},function(t,e){t.exports={PENDING:0,INIT:1,START:2,LOADING:3,CREATING:4,RUNNING:5,PAUSED:6,SLEEPING:7,SHUTDOWN:8,DESTROYED:9}},function(t,e){t.exports={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:42,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,NUMPAD_ZERO:96,NUMPAD_ONE:97,NUMPAD_TWO:98,NUMPAD_THREE:99,NUMPAD_FOUR:100,NUMPAD_FIVE:101,NUMPAD_SIX:102,NUMPAD_SEVEN:103,NUMPAD_EIGHT:104,NUMPAD_NINE:105,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,SEMICOLON:186,PLUS:187,COMMA:188,MINUS:189,PERIOD:190,FORWARD_SLASH:191,BACK_SLASH:220,QUOTES:222,BACKTICK:192,OPEN_BRACKET:219,CLOSED_BRACKET:221,SEMICOLON_FIREFOX:59,COLON:58,COMMA_FIREFOX_WINDOWS:60,COMMA_FIREFOX:62,BRACKET_RIGHT_FIREFOX:174,BRACKET_LEFT_FIREFOX:175}},function(t,e,i){t.exports={ADD:i(1049),ERROR:i(1048),LOAD:i(1047),READY:i(1046),REMOVE:i(1045)}},function(t,e){t.exports=function(t,e){return t>0&&0==(t&t-1)&&e>0&&0==(e&e-1)}},function(t,e,i){var n,s=i(99),r={chrome:!1,chromeVersion:0,edge:!1,firefox:!1,firefoxVersion:0,ie:!1,ieVersion:0,mobileSafari:!1,opera:!1,safari:!1,safariVersion:0,silk:!1,trident:!1,tridentVersion:0};t.exports=(n=navigator.userAgent,/Edge\/\d+/.test(n)?r.edge=!0:/Chrome\/(\d+)/.test(n)&&!s.windowsPhone?(r.chrome=!0,r.chromeVersion=parseInt(RegExp.$1,10)):/Firefox\D+(\d+)/.test(n)?(r.firefox=!0,r.firefoxVersion=parseInt(RegExp.$1,10)):/AppleWebKit/.test(n)&&s.iOS?r.mobileSafari=!0:/MSIE (\d+\.\d+);/.test(n)?(r.ie=!0,r.ieVersion=parseInt(RegExp.$1,10)):/Opera/.test(n)?r.opera=!0:/Safari/.test(n)&&!s.windowsPhone?r.safari=!0:/Trident\/(\d+\.\d+)(.*)rv:(\d+\.\d+)/.test(n)&&(r.ie=!0,r.trident=!0,r.tridentVersion=parseInt(RegExp.$1,10),r.ieVersion=parseInt(RegExp.$3,10)),/Silk/.test(n)&&(r.silk=!0),r)},function(t,e){t.exports=function(t,e,i){return(e-t)*i+t}},function(t,e){var i,n="";t.exports={disable:function(t){return""===n&&(n=i(t)),n&&(t[n]=!1),t},enable:function(t){return""===n&&(n=i(t)),n&&(t[n]=!0),t},getPrefix:i=function(t){for(var e=["i","webkitI","msI","mozI","oI"],i=0;iC&&wA&&bs&&(t=s),t},clampY:function(t){var e=this._bounds,i=this.displayHeight,n=e.y+(i-this.height)/2,s=Math.max(n,n+e.height-i);return ts&&(t=s),t},removeBounds:function(){return this.useBounds=!1,this.dirty=!0,this._bounds.setEmpty(),this},setAngle:function(t){return void 0===t&&(t=0),this.rotation=r(t),this},setBackgroundColor:function(t){return void 0===t&&(t="rgba(0,0,0,0)"),this.backgroundColor=u(t),this.transparent=0===this.backgroundColor.alpha,this},setBounds:function(t,e,i,n,s){return void 0===s&&(s=!1),this._bounds.setTo(t,e,i,n),this.dirty=!0,this.useBounds=!0,s?this.centerToBounds():(this.scrollX=this.clampX(this.scrollX),this.scrollY=this.clampY(this.scrollY)),this},getBounds:function(t){void 0===t&&(t=new h);var e=this._bounds;return t.setTo(e.x,e.y,e.width,e.height),t},setName:function(t){return void 0===t&&(t=""),this.name=t,this},setPosition:function(t,e){return void 0===e&&(e=t),this.x=t,this.y=e,this},setRotation:function(t){return void 0===t&&(t=0),this.rotation=t,this},setRoundPixels:function(t){return this.roundPixels=t,this},setScene:function(t){this.scene&&this._customViewport&&this.sceneManager.customViewports--,this.scene=t,this.sceneManager=t.sys.game.scene,this.scaleManager=t.sys.scale;var e=this.scaleManager.resolution;return this.resolution=e,this._cx=this._x*e,this._cy=this._y*e,this._cw=this._width*e,this._ch=this._height*e,this.updateSystem(),this},setScroll:function(t,e){return void 0===e&&(e=t),this.scrollX=t,this.scrollY=e,this},setSize:function(t,e){return void 0===e&&(e=t),this.width=t,this.height=e,this},setViewport:function(t,e,i,n){return this.x=t,this.y=e,this.width=i,this.height=n,this},setZoom:function(t){return void 0===t&&(t=1),0===t&&(t=.001),this.zoom=t,this},toJSON:function(){var t={name:this.name,x:this.x,y:this.y,width:this.width,height:this.height,zoom:this.zoom,rotation:this.rotation,roundPixels:this.roundPixels,scrollX:this.scrollX,scrollY:this.scrollY,backgroundColor:this.backgroundColor.rgba};return this.useBounds&&(t.bounds={x:this._bounds.x,y:this._bounds.y,width:this._bounds.width,height:this._bounds.height}),t},update:function(){},updateSystem:function(){if(this.scaleManager){var t=0!==this._x||0!==this._y||this.scaleManager.width!==this._width||this.scaleManager.height!==this._height,e=this.sceneManager;t&&!this._customViewport?e.customViewports++:!t&&this._customViewport&&e.customViewports--,this.dirty=!0,this._customViewport=t}},destroy:function(){this.emit(a.DESTROY,this),this.removeAllListeners(),this.matrix.destroy(),this.culledObjects=[],this._customViewport&&this.sceneManager.customViewports--,this._bounds=null,this.scene=null,this.scaleManager=null,this.sceneManager=null},x:{get:function(){return this._x},set:function(t){this._x=t,this._cx=t*this.resolution,this.updateSystem()}},y:{get:function(){return this._y},set:function(t){this._y=t,this._cy=t*this.resolution,this.updateSystem()}},width:{get:function(){return this._width},set:function(t){this._width=t,this._cw=t*this.resolution,this.updateSystem()}},height:{get:function(){return this._height},set:function(t){this._height=t,this._ch=t*this.resolution,this.updateSystem()}},scrollX:{get:function(){return this._scrollX},set:function(t){this._scrollX=t,this.dirty=!0}},scrollY:{get:function(){return this._scrollY},set:function(t){this._scrollY=t,this.dirty=!0}},zoom:{get:function(){return this._zoom},set:function(t){this._zoom=t,this.dirty=!0}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=t,this.dirty=!0}},centerX:{get:function(){return this.x+.5*this.width}},centerY:{get:function(){return this.y+.5*this.height}},displayWidth:{get:function(){return this.width/this.zoom}},displayHeight:{get:function(){return this.height/this.zoom}}});t.exports=d},function(t,e){t.exports=function(t){for(var e=t.length-1;e>0;e--){var i=Math.floor(Math.random()*(e+1)),n=t[e];t[e]=t[i],t[i]=n}return t}},function(t,e,i){t.exports={DESTROY:i(1234)}},function(t,e,i){var n=i(0),s=i(420),r=new n({initialize:function(t,e){this.parent=t,this.events=e,e||(this.events=t.events?t.events:t),this.list={},this.values={},this._frozen=!1,!t.hasOwnProperty("sys")&&this.events&&this.events.once("destroy",this.destroy,this)},get:function(t){var e=this.list;if(Array.isArray(t)){for(var i=[],n=0;n0&&s.area(_)1?(f=o.create(r.extend({parts:p.slice(0)},n)),o.setPosition(f,{x:t,y:e}),f):p[0]}},function(t,e){t.exports=function(t,e,i,n,s,r,o,a,h,l,u,c,d){return{target:t,key:e,getEndValue:i,getStartValue:n,ease:s,duration:0,totalDuration:0,delay:0,yoyo:a,hold:0,repeat:0,repeatDelay:0,flipX:c,flipY:d,progress:0,elapsed:0,repeatCounter:0,start:0,current:0,end:0,t1:0,t2:0,gen:{delay:r,duration:o,hold:h,repeat:l,repeatDelay:u},state:0}}},function(t,e,i){var n=i(0),s=i(14),r=i(5),o=i(89),a=new n({initialize:function(t,e,i){this.parent=t,this.parentIsTimeline=t.hasOwnProperty("isTimeline"),this.data=e,this.totalData=e.length,this.targets=i,this.totalTargets=i.length,this.useFrames=!1,this.timeScale=1,this.loop=0,this.loopDelay=0,this.loopCounter=0,this.completeDelay=0,this.countdown=0,this.offset=0,this.calculatedOffset=0,this.state=o.PENDING_ADD,this._pausedState=o.PENDING_ADD,this.paused=!1,this.elapsed=0,this.totalElapsed=0,this.duration=0,this.progress=0,this.totalDuration=0,this.totalProgress=0,this.callbacks={onComplete:null,onLoop:null,onRepeat:null,onStart:null,onUpdate:null,onYoyo:null},this.callbackScope},getValue:function(){return this.data[0].current},setTimeScale:function(t){return this.timeScale=t,this},getTimeScale:function(){return this.timeScale},isPlaying:function(){return this.state===o.ACTIVE},isPaused:function(){return this.state===o.PAUSED},hasTarget:function(t){return-1!==this.targets.indexOf(t)},updateTo:function(t,e,i){void 0===i&&(i=!1);for(var n=0;n0&&(n.totalDuration+=n.t2*n.repeat),n.totalDuration>t&&(t=n.totalDuration)}this.duration=t,this.loopCounter=-1===this.loop?999999999999:this.loop,this.loopCounter>0?this.totalDuration=this.duration+this.completeDelay+(this.duration+this.loopDelay)*this.loopCounter:this.totalDuration=this.duration+this.completeDelay},init:function(){for(var t=this.data,e=this.totalTargets,i=0;i0){this.elapsed=0,this.progress=0,this.loopCounter--;var t=this.callbacks.onLoop;t&&(t.params[1]=this.targets,t.func.apply(t.scope,t.params)),this.resetTweenData(!0),this.loopDelay>0?(this.countdown=this.loopDelay,this.state=o.LOOP_DELAY):this.state=o.ACTIVE}else if(this.completeDelay>0)this.countdown=this.completeDelay,this.state=o.COMPLETE_DELAY;else{var e=this.callbacks.onComplete;e&&(e.params[1]=this.targets,e.func.apply(e.scope,e.params)),this.state=o.PENDING_REMOVE}},pause:function(){if(this.state!==o.PAUSED)return this.paused=!0,this._pausedState=this.state,this.state=o.PAUSED,this},play:function(t){if(this.state===o.ACTIVE)return this;this.state!==o.PENDING_REMOVE&&this.state!==o.REMOVED||(this.init(),this.parent.makeActive(this),t=!0);var e=this.callbacks.onStart;return this.parentIsTimeline?(this.resetTweenData(t),0===this.calculatedOffset?(e&&(e.params[1]=this.targets,e.func.apply(e.scope,e.params)),this.state=o.ACTIVE):(this.countdown=this.calculatedOffset,this.state=o.OFFSET_DELAY)):this.paused?(this.paused=!1,this.parent.makeActive(this)):(this.resetTweenData(t),this.state=o.ACTIVE,e&&(e.params[1]=this.targets,e.func.apply(e.scope,e.params)),this.parent.makeActive(this)),this},resetTweenData:function(t){for(var e=this.data,i=0;i0?(n.elapsed=n.delay,n.state=o.DELAY):n.state=o.PENDING_RENDER}},resume:function(){return this.state===o.PAUSED?(this.paused=!1,this.state=this._pausedState):this.play(),this},seek:function(t){for(var e=this.data,i=0;i=s.totalDuration?(r=1,o=s.duration):n>s.delay&&n<=s.t1?(r=(n=Math.max(0,n-s.delay))/s.t1,o=s.duration*r):n>s.t1&&ns.repeatDelay&&(r=n/s.t1,o=s.duration*r)),s.progress=r,s.elapsed=o;var a=s.ease(s.progress);s.current=s.start+(s.end-s.start)*a,s.target[s.key]=s.current}return this},setCallback:function(t,e,i,n){return this.callbacks[t]={func:e,scope:n,params:i},this},complete:function(t){if(void 0===t&&(t=0),t)this.countdown=t,this.state=o.COMPLETE_DELAY;else{var e=this.callbacks.onComplete;e&&(e.params[1]=this.targets,e.func.apply(e.scope,e.params)),this.state=o.PENDING_REMOVE}return this},stop:function(t){return this.state===o.ACTIVE&&void 0!==t&&this.seek(t),this.state!==o.REMOVED&&(this.state!==o.PAUSED&&this.state!==o.PENDING_ADD||(this.parent._destroy.push(this),this.parent._toProcess++),this.state=o.PENDING_REMOVE),this},update:function(t,e){if(this.state===o.PAUSED)return!1;switch(this.useFrames&&(e=1*this.parent.timeScale),e*=this.timeScale,this.elapsed+=e,this.progress=Math.min(this.elapsed/this.duration,1),this.totalElapsed+=e,this.totalProgress=Math.min(this.totalElapsed/this.totalDuration,1),this.state){case o.ACTIVE:for(var i=!1,n=0;n0){e.repeatCounter--,e.elapsed=i,e.progress=i/e.duration,e.flipX&&e.target.toggleFlipX(),e.flipY&&e.target.toggleFlipY();var s=t.callbacks.onRepeat;return s&&(s.params[1]=e.target,s.func.apply(s.scope,s.params)),e.start=e.getStartValue(e.target,e.key,e.start),e.end=e.getEndValue(e.target,e.key,e.start),e.repeatDelay>0?(e.elapsed=e.repeatDelay-i,e.current=e.start,e.target[e.key]=e.current,o.REPEAT_DELAY):o.PLAYING_FORWARD}return o.COMPLETE},setStateFromStart:function(t,e,i){if(e.repeatCounter>0){e.repeatCounter--,e.elapsed=i,e.progress=i/e.duration,e.flipX&&e.target.toggleFlipX(),e.flipY&&e.target.toggleFlipY();var n=t.callbacks.onRepeat;return n&&(n.params[1]=e.target,n.func.apply(n.scope,n.params)),e.end=e.getEndValue(e.target,e.key,e.start),e.repeatDelay>0?(e.elapsed=e.repeatDelay-i,e.current=e.start,e.target[e.key]=e.current,o.REPEAT_DELAY):o.PLAYING_FORWARD}return o.COMPLETE},updateTweenData:function(t,e,i){switch(e.state){case o.PLAYING_FORWARD:case o.PLAYING_BACKWARD:if(!e.target){e.state=o.COMPLETE;break}var n=e.elapsed,s=e.duration,r=0;(n+=i)>s&&(r=n-s,n=s);var a,h=e.state===o.PLAYING_FORWARD,l=n/s;a=h?e.ease(l):e.ease(1-l),e.current=e.start+(e.end-e.start)*a,e.target[e.key]=e.current,e.elapsed=n,e.progress=l;var u=t.callbacks.onUpdate;u&&(u.params[1]=e.target,u.func.apply(u.scope,u.params)),1===l&&(h?e.hold>0?(e.elapsed=e.hold-r,e.state=o.HOLD_DELAY):e.state=this.setStateFromEnd(t,e,r):e.state=this.setStateFromStart(t,e,r));break;case o.DELAY:e.elapsed-=i,e.elapsed<=0&&(e.elapsed=Math.abs(e.elapsed),e.state=o.PENDING_RENDER);break;case o.REPEAT_DELAY:e.elapsed-=i,e.elapsed<=0&&(e.elapsed=Math.abs(e.elapsed),e.state=o.PLAYING_FORWARD);break;case o.HOLD_DELAY:e.elapsed-=i,e.elapsed<=0&&(e.state=this.setStateFromEnd(t,e,Math.abs(e.elapsed)));break;case o.PENDING_RENDER:e.target?(e.start=e.getStartValue(e.target,e.key,e.target[e.key]),e.end=e.getEndValue(e.target,e.key,e.start),e.current=e.start,e.target[e.key]=e.start,e.state=o.PLAYING_FORWARD):e.state=o.COMPLETE}return e.state!==o.COMPLETE}});a.TYPES=["onComplete","onLoop","onRepeat","onStart","onUpdate","onYoyo"],r.register("tween",function(t){return this.scene.sys.tweens.add(t)}),s.register("tween",function(t){return this.scene.sys.tweens.create(t)}),t.exports=a},function(t,e){t.exports={targets:null,delay:0,duration:1e3,ease:"Power0",easeParams:null,hold:0,repeat:0,repeatDelay:0,yoyo:!1,flipX:!1,flipY:!1}},function(t,e){function i(t){return!!t.getStart&&"function"==typeof t.getStart}function n(t){return!!t.getEnd&&"function"==typeof t.getEnd}var s=function(t,e){var r,o,a=function(t,e,i){return i},h=function(t,e,i){return i},l=typeof e;if("number"===l)a=function(){return e};else if("string"===l){var u=e[0],c=parseFloat(e.substr(2));switch(u){case"+":a=function(t,e,i){return i+c};break;case"-":a=function(t,e,i){return i-c};break;case"*":a=function(t,e,i){return i*c};break;case"/":a=function(t,e,i){return i/c};break;default:a=function(){return parseFloat(e)}}}else"function"===l?a=e:"object"===l&&(i(o=e)||n(o))?(n(e)&&(a=e.getEnd),i(e)&&(h=e.getStart)):e.hasOwnProperty("value")&&(r=s(t,e.value));return r||(r={getEnd:a,getStart:h}),r};t.exports=s},function(t,e,i){var n=i(4);t.exports=function(t){var e=n(t,"targets",null);return null===e?e:("function"==typeof e&&(e=e.call()),Array.isArray(e)||(e=[e]),e)}},function(t,e,i){var n=i(31),s=i(83),r=i(233),o=i(225);t.exports=function(t,e,i,a,h,l,u,c){void 0===i&&(i=32),void 0===a&&(a=32),void 0===h&&(h=10),void 0===l&&(l=10),void 0===c&&(c=!1);var d=null;if(Array.isArray(u))d=r(void 0!==e?e:"map",n.ARRAY_2D,u,i,a,c);else if(void 0!==e){var f=t.cache.tilemap.get(e);f?d=r(e,f.format,f.data,i,a,c):console.warn("No map data found for key "+e)}return null===d&&(d=new s({tileWidth:i,tileHeight:a,width:h,height:l})),new o(t,d)}},function(t,e,i){var n=i(31),s=i(84),r=i(83),o=i(61);t.exports=function(t,e,i,a,h){for(var l=new s({tileWidth:i,tileHeight:a}),u=new r({name:t,tileWidth:i,tileHeight:a,format:n.ARRAY_2D,layers:[l]}),c=[],d=e.length,f=0,p=0;p=0&&r>=0&&s+r<1&&(n.push({x:e[w].x,y:e[w].y}),i)));w++);return n}},function(t,e){t.exports=function(t,e){return!(t.width<=0||t.height<=0||e.width<=0||e.height<=0||t.righte.right||t.y>e.bottom)}},function(t,e,i){var n=i(0),s=i(116),r=new n({Extends:s,initialize:function(t,e,i,n,r){s.call(this,t,e,i,[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,1,1,1,0,0,1,1,1,0],[16777215,16777215,16777215,16777215,16777215,16777215],[1,1,1,1,1,1],n,r),this.resetPosition()},setFrame:function(t){return this.frame=this.texture.get(t),this.frame.cutWidth&&this.frame.cutHeight?this.renderFlags|=8:this.renderFlags&=-9,t=this.frame,this.uv[0]=t.u0,this.uv[1]=t.v0,this.uv[2]=t.u0,this.uv[3]=t.v1,this.uv[4]=t.u1,this.uv[5]=t.v1,this.uv[6]=t.u0,this.uv[7]=t.v0,this.uv[8]=t.u1,this.uv[9]=t.v1,this.uv[10]=t.u1,this.uv[11]=t.v0,this},topLeftX:{get:function(){return this.x+this.vertices[0]},set:function(t){this.vertices[0]=t-this.x,this.vertices[6]=t-this.x}},topLeftY:{get:function(){return this.y+this.vertices[1]},set:function(t){this.vertices[1]=t-this.y,this.vertices[7]=t-this.y}},topRightX:{get:function(){return this.x+this.vertices[10]},set:function(t){this.vertices[10]=t-this.x}},topRightY:{get:function(){return this.y+this.vertices[11]},set:function(t){this.vertices[11]=t-this.y}},bottomLeftX:{get:function(){return this.x+this.vertices[2]},set:function(t){this.vertices[2]=t-this.x}},bottomLeftY:{get:function(){return this.y+this.vertices[3]},set:function(t){this.vertices[3]=t-this.y}},bottomRightX:{get:function(){return this.x+this.vertices[4]},set:function(t){this.vertices[4]=t-this.x,this.vertices[8]=t-this.x}},bottomRightY:{get:function(){return this.y+this.vertices[5]},set:function(t){this.vertices[5]=t-this.y,this.vertices[9]=t-this.y}},topLeftAlpha:{get:function(){return this.alphas[0]},set:function(t){this.alphas[0]=t,this.alphas[3]=t}},topRightAlpha:{get:function(){return this.alphas[5]},set:function(t){this.alphas[5]=t}},bottomLeftAlpha:{get:function(){return this.alphas[1]},set:function(t){this.alphas[1]=t}},bottomRightAlpha:{get:function(){return this.alphas[2]},set:function(t){this.alphas[2]=t,this.alphas[4]=t}},topLeftColor:{get:function(){return this.colors[0]},set:function(t){this.colors[0]=t,this.colors[3]=t}},topRightColor:{get:function(){return this.colors[5]},set:function(t){this.colors[5]=t}},bottomLeftColor:{get:function(){return this.colors[1]},set:function(t){this.colors[1]=t}},bottomRightColor:{get:function(){return this.colors[2]},set:function(t){this.colors[2]=t,this.colors[4]=t}},setTopLeft:function(t,e){return this.topLeftX=t,this.topLeftY=e,this},setTopRight:function(t,e){return this.topRightX=t,this.topRightY=e,this},setBottomLeft:function(t,e){return this.bottomLeftX=t,this.bottomLeftY=e,this},setBottomRight:function(t,e){return this.bottomRightX=t,this.bottomRightY=e,this},resetPosition:function(){var t=this.x,e=this.y,i=Math.floor(this.width/2),n=Math.floor(this.height/2);return this.setTopLeft(t-i,e-n),this.setTopRight(t+i,e-n),this.setBottomLeft(t-i,e+n),this.setBottomRight(t+i,e+n),this},resetAlpha:function(){var t=this.alphas;return t[0]=1,t[1]=1,t[2]=1,t[3]=1,t[4]=1,t[5]=1,this},resetColors:function(){var t=this.colors;return t[0]=16777215,t[1]=16777215,t[2]=16777215,t[3]=16777215,t[4]=16777215,t[5]=16777215,this},reset:function(){return this.resetPosition(),this.resetAlpha(),this.resetColors()}});t.exports=r},function(t,e){t.exports=function(t,e,i){for(var n=!1,s=-1,r=t.points.length-1;++sl){if(0===c){for(var g=f;g.length&&(g=g.slice(0,-1),!((p=e.measureText(g).width)<=l)););if(!g.length)throw new Error("This text's wordWrapWidth setting is less than a single character!");var v=d.substr(g.length);u[c]=v,h+=g}var y=u[c].length?c:c+1,m=u.slice(y).join(" ").replace(/[ \n]*$/gi,"");s[o+1]=m+" "+(s[o+1]||""),r=s.length;break}h+=f,l-=p}n+=h.replace(/[ \n]*$/gi,"")+"\n"}}return n=n.replace(/[\s|\n]*$/gi,"")},basicWordWrap:function(t,e,i){for(var n="",s=t.split(this.splitRegExp),r=0;ro?(h>0&&(n+="\n"),n+=a[h]+" ",o=i-l):(o-=u,n+=a[h],h0&&(a+=u.lineSpacing*p),i.rtl?o=d-o:"right"===i.align?o+=u.width-u.lineWidths[p]:"center"===i.align&&(o+=(u.width-u.lineWidths[p])/2),this.autoRound&&(o=Math.round(o),a=Math.round(a)),i.strokeThickness&&(this.style.syncShadow(e,i.shadowStroke),e.strokeText(h[p],o,a)),i.color&&(this.style.syncShadow(e,i.shadowFill),e.fillText(h[p],o,a));return e.restore(),this.renderer.gl&&(this.frame.source.glTexture=this.renderer.canvasToTexture(t,this.frame.source.glTexture,!0),this.frame.glTexture=this.frame.source.glTexture),this.dirty=!0,this},getTextMetrics:function(){return this.style.getTextMetrics()},text:{get:function(){return this._text},set:function(t){this.setText(t)}},toJSON:function(){var t=o.ToJSON(this),e={autoRound:this.autoRound,text:this._text,style:this.style.toJSON(),padding:{left:this.padding.left,right:this.padding.right,top:this.padding.top,bottom:this.padding.bottom}};return t.data=e,t},preDestroy:function(){this.style.rtl&&c(this.canvas),s.remove(this.canvas),this.texture.destroy()}});t.exports=p},function(t,e,i){var n=i(60),s=i(131),r=i(24),o=i(0),a=i(13),h=i(28),l=i(121),u=i(18),c=i(840),d=i(9),f=i(299),p=new o({Extends:u,Mixins:[a.Alpha,a.BlendMode,a.ComputedSize,a.Crop,a.Depth,a.Flip,a.GetBounds,a.Mask,a.Origin,a.Pipeline,a.ScaleMode,a.ScrollFactor,a.Tint,a.Transform,a.Visible,c],initialize:function(t,e,i,n,o){void 0===e&&(e=0),void 0===i&&(i=0),void 0===n&&(n=32),void 0===o&&(o=32),u.call(this,t,"RenderTexture"),this.renderer=t.sys.game.renderer,this.textureManager=t.sys.textures,this.globalTint=16777215,this.globalAlpha=1,this.canvas=r.create2D(this,n,o),this.context=this.canvas.getContext("2d"),this.framebuffer=null,this._crop=this.resetCropObject(),this.texture=t.sys.textures.addCanvas(f(),this.canvas),this.frame=this.texture.get(),this._saved=!1,this._eraseMode=!1,this.camera=new s(0,0,n,o),this.dirty=!1,this.gl=null;var a=this.renderer;if(a.type===h.WEBGL){var l=a.gl;this.gl=l,this.drawGameObject=this.batchGameObjectWebGL,this.framebuffer=a.createFramebuffer(n,o,this.frame.source.glTexture,!1)}else a.type===h.CANVAS&&(this.drawGameObject=this.batchGameObjectCanvas);this.camera.setScene(t),this.setPosition(e,i),this.setSize(n,o),this.setOrigin(0,0),this.initPipeline()},setSize:function(t,e){return this.resize(t,e)},resize:function(t,e){if(void 0===e&&(e=t),t!==this.width||e!==this.height){if(this.canvas.width=t,this.canvas.height=e,this.gl){var i=this.gl;this.renderer.deleteTexture(this.frame.source.glTexture),this.renderer.deleteFramebuffer(this.framebuffer),this.frame.source.glTexture=this.renderer.createTexture2D(0,i.NEAREST,i.NEAREST,i.CLAMP_TO_EDGE,i.CLAMP_TO_EDGE,i.RGBA,null,t,e,!1),this.framebuffer=this.renderer.createFramebuffer(t,e,this.frame.source.glTexture,!1),this.frame.glTexture=this.frame.source.glTexture}this.frame.source.width=t,this.frame.source.height=e,this.camera.setSize(t,e),this.frame.setSize(t,e),this.width=t,this.height=e}return this},setGlobalTint:function(t){return this.globalTint=t,this},setGlobalAlpha:function(t){return this.globalAlpha=t,this},saveTexture:function(t){return this.textureManager.renameTexture(this.texture.key,t),this._saved=!0,this.texture},fill:function(t,e){void 0===e&&(e=1);var i=255&(t>>16|0),n=255&(t>>8|0),s=255&(0|t);if(this.gl){var r=this.renderer,o=this.getBounds();r.setFramebuffer(this.framebuffer,!0),this.pipeline.drawFillRect(o.x,o.y,o.right,o.bottom,d.getTintFromFloats(i/255,n/255,s/255,1),e),r.setFramebuffer(null,!0)}else this.context.fillStyle="rgba("+i+","+n+","+s+","+e+")",this.context.fillRect(0,0,this.canvas.width,this.canvas.height);return this},clear:function(){if(this.dirty){var t=this.gl;if(t){var e=this.renderer;e.setFramebuffer(this.framebuffer,!0),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),e.setFramebuffer(null,!0)}else{var i=this.context;i.save(),i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,this.canvas.width,this.canvas.height),i.restore()}this.dirty=!1}return this},erase:function(t,e,i){this._eraseMode=!0;var s=this.renderer.currentBlendMode;return this.renderer.setBlendMode(n.ERASE),this.draw(t,e,i,1,16777215),this.renderer.setBlendMode(s),this._eraseMode=!1,this},draw:function(t,e,i,n,s){void 0===n&&(n=this.globalAlpha),s=void 0===s?(this.globalTint>>16)+(65280&this.globalTint)+((255&this.globalTint)<<16):(s>>16)+(65280&s)+((255&s)<<16),Array.isArray(t)||(t=[t]);var r=this.gl;if(this.camera.preRender(1,1),r){var o=this.camera._cx,a=this.camera._cy,h=this.camera._cw,l=this.camera._ch;this.renderer.setFramebuffer(this.framebuffer,!1),this.renderer.pushScissor(o,a,h,l,l);var u=this.pipeline;u.projOrtho(0,this.width,0,this.height,-1e3,1e3),this.batchList(t,e,i,n,s),u.flush(),this.renderer.setFramebuffer(null,!1),this.renderer.popScissor(),u.projOrtho(0,u.width,u.height,0,-1e3,1e3)}else this.renderer.setContext(this.context),this.batchList(t,e,i,n,s),this.renderer.setContext();return this.dirty=!0,this},drawFrame:function(t,e,i,n,s,r){void 0===i&&(i=0),void 0===n&&(n=0),void 0===s&&(s=this.globalAlpha),r=void 0===r?(this.globalTint>>16)+(65280&this.globalTint)+((255&this.globalTint)<<16):(r>>16)+(65280&r)+((255&r)<<16);var o=this.gl,a=this.textureManager.getFrame(t,e);if(a){if(this.camera.preRender(1,1),o){var h=this.camera._cx,l=this.camera._cy,u=this.camera._cw,c=this.camera._ch;this.renderer.setFramebuffer(this.framebuffer,!1),this.renderer.pushScissor(h,l,u,c,c);var d=this.pipeline;d.projOrtho(0,this.width,0,this.height,-1e3,1e3),d.batchTextureFrame(a,i,n,r,s,this.camera.matrix,null),d.flush(),this.renderer.setFramebuffer(null,!1),this.renderer.popScissor(),d.projOrtho(0,d.width,d.height,0,-1e3,1e3)}else this.batchTextureFrame(a,i,n,s,r);this.dirty=!0}return this},batchList:function(t,e,i,n,s){for(var r=0;r0?e.defaultFrame=i[0]:e.defaultFrame=this.defaultFrame,this},addEmitter:function(t){return this.emitters.add(t)},createEmitter:function(t){return this.addEmitter(new h(this,t))},addGravityWell:function(t){return this.wells.add(t)},createGravityWell:function(t){return this.addGravityWell(new o(t))},emitParticle:function(t,e,i){for(var n=this.emitters.list,s=0;s-1&&this.fillStyle(this.defaultFillColor,this.defaultFillAlpha),this.defaultStrokeColor>-1&&this.lineStyle(this.defaultStrokeWidth,this.defaultStrokeColor,this.defaultStrokeAlpha),this},generateTexture:function(t,e,i){var n,s,r=this.scene.sys,o=r.game.renderer;if(void 0===e&&(e=r.scale.width),void 0===i&&(i=r.scale.height),T.TargetCamera.setScene(this.scene),T.TargetCamera.setViewport(0,0,e,i),T.TargetCamera.scrollX=this.x,T.TargetCamera.scrollY=this.y,"string"==typeof t)if(r.textures.exists(t)){var a=(n=r.textures.get(t)).getSourceImage();a instanceof HTMLCanvasElement&&(s=a.getContext("2d"))}else s=(n=r.textures.createCanvas(t,e,i)).getSourceImage().getContext("2d");else t instanceof HTMLCanvasElement&&(s=t.getContext("2d"));return s&&(this.renderCanvas(o,this,0,T.TargetCamera,null,s,!1),n&&n.refresh()),this},preDestroy:function(){this.commandBuffer=[]}});T.TargetCamera=new n,t.exports=T},function(t,e,i){var n=i(117),s=i(0),r=i(860),o=new s({Extends:n,Mixins:[r],initialize:function(t,e,i,s,r,o,a){n.call(this,t,e,i,s,r,o,a),this.type="DynamicBitmapText",this.scrollX=0,this.scrollY=0,this.cropWidth=0,this.cropHeight=0,this.displayCallback,this.callbackData={parent:this,color:0,tint:{topLeft:0,topRight:0,bottomLeft:0,bottomRight:0},index:0,charCode:0,x:0,y:0,scale:0,rotation:0,data:0}},setSize:function(t,e){return this.cropWidth=t,this.cropHeight=e,this},setDisplayCallback:function(t){return this.displayCallback=t,this},setScrollX:function(t){return this.scrollX=t,this},setScrollY:function(t){return this.scrollY=t,this}});t.exports=o},function(t,e,i){var n=i(174),s=i(60),r=i(0),o=i(13),a=i(133),h=i(18),l=i(10),u=i(863),c=i(313),d=i(3),f=new r({Extends:h,Mixins:[o.Alpha,o.BlendMode,o.ComputedSize,o.Depth,o.Mask,o.ScrollFactor,o.Transform,o.Visible,u],initialize:function(t,e,i,n){h.call(this,t,"Container"),this.list=[],this.exclusive=!0,this.maxSize=-1,this.position=0,this.localTransform=new o.TransformMatrix,this.tempTransformMatrix=new o.TransformMatrix,this._displayList=t.sys.displayList,this._sortKey="",this._sysEvents=t.sys.events,this.setPosition(e,i),this.clearAlpha(),this.setBlendMode(s.SKIP_CHECK),n&&this.add(n)},originX:{get:function(){return.5}},originY:{get:function(){return.5}},displayOriginX:{get:function(){return.5*this.width}},displayOriginY:{get:function(){return.5*this.height}},setExclusive:function(t){return void 0===t&&(t=!0),this.exclusive=t,this},getBounds:function(t){if(void 0===t&&(t=new l),t.setTo(this.x,this.y,0,0),this.list.length>0)for(var e=this.list,i=new l,n=0;n-1},setAll:function(t,e,i,s){return n.SetAll(this.list,t,e,i,s),this},each:function(t,e){var i,n=[null],s=this.list.slice(),r=s.length;for(i=2;i0?this.list[0]:null}},last:{get:function(){return this.list.length>0?(this.position=this.list.length-1,this.list[this.position]):null}},next:{get:function(){return this.position0?(this.position--,this.list[this.position]):null}},preDestroy:function(){this.removeAll(!!this.exclusive),this.localTransform.destroy(),this.tempTransformMatrix.destroy(),this.list=[],this._displayList=null}});t.exports=f},function(t,e,i){var n=i(867),s=i(864),r=i(0),o=i(13),a=i(121),h=i(18),l=i(120),u=new r({Extends:h,Mixins:[o.Alpha,o.BlendMode,o.Depth,o.Mask,o.Pipeline,o.ScaleMode,o.ScrollFactor,o.Size,o.Texture,o.Transform,o.Visible,n],initialize:function(t,e,i,n,s){h.call(this,t,"Blitter"),this.setTexture(n,s),this.setPosition(e,i),this.initPipeline(),this.children=new l,this.renderList=[],this.dirty=!1},create:function(t,e,i,n,r){void 0===n&&(n=!0),void 0===r&&(r=this.children.length),void 0===i?i=this.frame:i instanceof a||(i=this.texture.get(i));var o=new s(this,t,e,i,n);return this.children.addAt(o,r,!1),this.dirty=!0,o},createFromCallback:function(t,e,i,n){for(var s=this.createMultiple(e,i,n),r=0;r0},getRenderList:function(){return this.dirty&&(this.renderList=this.children.list.filter(this.childCanRender,this),this.dirty=!1),this.renderList},clear:function(){this.children.removeAll(),this.dirty=!0},preDestroy:function(){this.children.destroy(),this.renderList=[]}});t.exports=u},function(t,e){t.exports=function(t,e,i){void 0===e&&(e=0),void 0===i&&(i=t.length);var n=e+Math.floor(Math.random()*i);return void 0===t[n]?null:t[n]}},function(t,e){t.exports=function(t){if(!Array.isArray(t)||t.length<2||!Array.isArray(t[0]))return!1;for(var e=t[0].length,i=1;i0},isTransitionIn:function(){return this.settings.isTransition},isVisible:function(){return this.settings.visible},setVisible:function(t){return this.settings.visible=t,this},setActive:function(t,e){return t?this.resume(e):this.pause(e)},start:function(t){t&&(this.settings.data=t),this.settings.status=s.START,this.settings.active=!0,this.settings.visible=!0,this.events.emit(o.START,this),this.events.emit(o.READY,this,t)},shutdown:function(t){this.events.off(o.TRANSITION_INIT),this.events.off(o.TRANSITION_START),this.events.off(o.TRANSITION_COMPLETE),this.events.off(o.TRANSITION_OUT),this.settings.status=s.SHUTDOWN,this.settings.active=!1,this.settings.visible=!1,this.events.emit(o.SHUTDOWN,this,t)},destroy:function(){this.settings.status=s.DESTROYED,this.settings.active=!1,this.settings.visible=!1,this.events.emit(o.DESTROY,this),this.events.removeAllListeners();for(var t=["scene","game","anims","cache","plugins","registry","sound","textures","add","camera","displayList","events","make","scenePlugin","updateList"],e=0;e=0;){var a=e[o];-1!==(r=t.indexOf(a))?(n(t,r),i&&i.call(s,a)):e.pop(),o--}return e}},function(t,e,i){var n={CENTER:i(349),ORIENTATION:i(348),SCALE_MODE:i(347),ZOOM:i(346)};t.exports=n},function(t,e){t.exports=function(t,e){var i;if(e)"string"==typeof e?i=document.getElementById(e):"object"==typeof e&&1===e.nodeType&&(i=e);else if(t.parentElement)return t;return i||(i=document.body),i.appendChild(t),t}},function(t,e,i){var n=i(10);t.exports=function(t,e){if(void 0===e&&(e=new n),0===t.length)return e;for(var i,s,r,o=Number.MAX_VALUE,a=Number.MAX_VALUE,h=Number.MIN_SAFE_INTEGER,l=Number.MIN_SAFE_INTEGER,u=0;u0&&(n=1/Math.sqrt(n),this.x=t*n,this.y=e*n,this.z=i*n),this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z},cross:function(t){var e=this.x,i=this.y,n=this.z,s=t.x,r=t.y,o=t.z;return this.x=i*o-n*r,this.y=n*s-e*o,this.z=e*r-i*s,this},lerp:function(t,e){void 0===e&&(e=0);var i=this.x,n=this.y,s=this.z;return this.x=i+e*(t.x-i),this.y=n+e*(t.y-n),this.z=s+e*(t.z-s),this},transformMat3:function(t){var e=this.x,i=this.y,n=this.z,s=t.val;return this.x=e*s[0]+i*s[3]+n*s[6],this.y=e*s[1]+i*s[4]+n*s[7],this.z=e*s[2]+i*s[5]+n*s[8],this},transformMat4:function(t){var e=this.x,i=this.y,n=this.z,s=t.val;return this.x=s[0]*e+s[4]*i+s[8]*n+s[12],this.y=s[1]*e+s[5]*i+s[9]*n+s[13],this.z=s[2]*e+s[6]*i+s[10]*n+s[14],this},transformCoordinates:function(t){var e=this.x,i=this.y,n=this.z,s=t.val,r=e*s[0]+i*s[4]+n*s[8]+s[12],o=e*s[1]+i*s[5]+n*s[9]+s[13],a=e*s[2]+i*s[6]+n*s[10]+s[14],h=e*s[3]+i*s[7]+n*s[11]+s[15];return this.x=r/h,this.y=o/h,this.z=a/h,this},transformQuat:function(t){var e=this.x,i=this.y,n=this.z,s=t.x,r=t.y,o=t.z,a=t.w,h=a*e+r*n-o*i,l=a*i+o*e-s*n,u=a*n+s*i-r*e,c=-s*e-r*i-o*n;return this.x=h*a+c*-s+l*-o-u*-r,this.y=l*a+c*-r+u*-s-h*-o,this.z=u*a+c*-o+h*-r-l*-s,this},project:function(t){var e=this.x,i=this.y,n=this.z,s=t.val,r=s[0],o=s[1],a=s[2],h=s[3],l=s[4],u=s[5],c=s[6],d=s[7],f=s[8],p=s[9],g=s[10],v=s[11],y=s[12],m=s[13],x=s[14],T=1/(e*h+i*d+n*v+s[15]);return this.x=(e*r+i*l+n*f+y)*T,this.y=(e*o+i*u+n*p+m)*T,this.z=(e*a+i*c+n*g+x)*T,this},unproject:function(t,e){var i=t.x,n=t.y,s=t.z,r=t.w,o=this.x-i,a=r-this.y-1-n,h=this.z;return this.x=2*o/s-1,this.y=2*a/r-1,this.z=2*h-1,this.project(e)},reset:function(){return this.x=0,this.y=0,this.z=0,this}});n.ZERO=new n,n.RIGHT=new n(1,0,0),n.LEFT=new n(-1,0,0),n.UP=new n(0,-1,0),n.DOWN=new n(0,1,0),n.FORWARD=new n(0,0,1),n.BACK=new n(0,0,-1),n.ONE=new n(1,1,1),t.exports=n},function(t,e,i){var n=i(20);t.exports=function(t){return t*n.RAD_TO_DEG}},function(t,e){t.exports=function(t,e){return Math.floor(Math.random()*(e-t+1)+t)}},function(t,e){t.exports=function(t,e,i,n,s){var r=.5*(n-e),o=.5*(s-i),a=t*t;return(2*i-2*n+r+o)*(t*a)+(-3*i+3*n-2*r-o)*a+r*t+i}},function(t,e){t.exports=function(t,e,i){return void 0===i&&(i=1e-4),Math.abs(t-e)=(t=t.toString()).length)switch(n){case 1:t=new Array(e+1-t.length).join(i)+t;break;case 3:var r=Math.ceil((s=e-t.length)/2);t=new Array(s-r+1).join(i)+t+new Array(r+1).join(i);break;default:t+=new Array(e+1-t.length).join(i)}return t}},function(t,e,i){var n=new(i(0))({initialize:function(t){if(this.entries={},this.size=0,Array.isArray(t))for(var e=0;e=i?1:(t=(t-e)/(i-e))*t*(3-2*t)}},function(t,e){t.exports=function(t,e,i){return(t=Math.max(0,Math.min(1,(t-e)/(i-e))))*t*t*(t*(6*t-15)+10)}},function(t,e){t.exports=function(t,e,i,n,s){var r=n+Math.atan2(t.y-i,t.x-e);return t.x=e+s*Math.cos(r),t.y=i+s*Math.sin(r),t}},function(t,e,i){var n=i(6);t.exports=function(t,e){void 0===e&&(e=new n);var i=t.x2-t.x1,s=t.y2-t.y1,r=t.x3-t.x1,o=t.y3-t.y1,a=Math.random(),h=Math.random();return a+h>=1&&(a=1-a,h=1-h),e.x=t.x1+(i*a+r*h),e.y=t.y1+(s*a+o*h),e}},function(t,e,i){var n=i(6);t.exports=function(t,e){void 0===e&&(e=new n);var i=Math.random()*Math.PI*2,s=Math.sqrt(Math.random());return e.x=t.x+s*Math.cos(i)*t.width/2,e.y=t.y+s*Math.sin(i)*t.height/2,e}},function(t,e){var i={defaultPipeline:null,pipeline:null,initPipeline:function(t){void 0===t&&(t="TextureTintPipeline");var e=this.scene.sys.game.renderer;return!!(e&&e.gl&&e.hasPipeline(t))&&(this.defaultPipeline=e.getPipeline(t),this.pipeline=this.defaultPipeline,!0)},setPipeline:function(t){var e=this.scene.sys.game.renderer;return e&&e.gl&&e.hasPipeline(t)&&(this.pipeline=e.getPipeline(t)),this},resetPipeline:function(){return this.pipeline=this.defaultPipeline,null!==this.pipeline},getPipelineName:function(){return this.pipeline.name}};t.exports=i},function(t,e,i){var n=i(6);t.exports=function(t,e){return void 0===e&&(e=new n),e.x=t.x+Math.random()*t.width,e.y=t.y+Math.random()*t.height,e}},function(t,e,i){var n=i(6);t.exports=function(t,e){void 0===e&&(e=new n);var i=Math.random();return e.x=t.x1+i*(t.x2-t.x1),e.y=t.y1+i*(t.y2-t.y1),e}},function(t,e,i){var n=i(58),s=i(6);t.exports=function(t,e,i,r){void 0===r&&(r=[]),e||(e=n(t)/i);for(var o=t.x1,a=t.y1,h=t.x2,l=t.y2,u=0;u=1)return i.x=t.x,i.y=t.y,i;var r=n(t)*e;return e>.5?(r-=t.width+t.height)<=t.width?(i.x=t.right-r,i.y=t.bottom):(i.x=t.x,i.y=t.bottom-(r-t.width)):r<=t.width?(i.x=t.x+r,i.y=t.y):(i.x=t.right,i.y=t.y+(r-t.width)),i}},function(t,e,i){var n=i(23),s=i(0),r=i(11),o=i(136),a=i(434),h=i(433),l=i(4),u=new s({Extends:r,initialize:function(t,e,i){r.call(this),this.manager=t,this.key=e,this.type="frame",this.frames=this.getFrames(t.textureManager,l(i,"frames",[]),l(i,"defaultTextureKey",null)),this.frameRate=l(i,"frameRate",null),this.duration=l(i,"duration",null),null===this.duration&&null===this.frameRate?(this.frameRate=24,this.duration=this.frameRate/this.frames.length*1e3):this.duration&&null===this.frameRate?this.frameRate=this.frames.length/(this.duration/1e3):this.duration=this.frames.length/this.frameRate*1e3,this.msPerFrame=1e3/this.frameRate,this.skipMissedFrames=l(i,"skipMissedFrames",!0),this.delay=l(i,"delay",0),this.repeat=l(i,"repeat",0),this.repeatDelay=l(i,"repeatDelay",0),this.yoyo=l(i,"yoyo",!1),this.showOnStart=l(i,"showOnStart",!1),this.hideOnComplete=l(i,"hideOnComplete",!1),this.paused=!1,this.manager.on(o.PAUSE_ALL,this.pause,this),this.manager.on(o.RESUME_ALL,this.resume,this)},addFrame:function(t){return this.addFrameAt(this.frames.length,t)},addFrameAt:function(t,e){var i=this.getFrames(this.manager.textureManager,e);if(i.length>0){if(0===t)this.frames=i.concat(this.frames);else if(t===this.frames.length)this.frames=this.frames.concat(i);else{var n=this.frames.slice(0,t),s=this.frames.slice(t);this.frames=n.concat(i,s)}this.updateFrameSequence()}return this},checkFrame:function(t){return t>=0&&t0){s.isLast=!0,s.nextFrame=a[0],a[0].prevFrame=s;var v=1/(a.length-1);for(r=0;r=this.frames.length&&(e=0),t.currentAnim!==this&&(t.currentAnim=this,t.frameRate=this.frameRate,t.duration=this.duration,t.msPerFrame=this.msPerFrame,t.skipMissedFrames=this.skipMissedFrames,t._delay=this.delay,t._repeat=this.repeat,t._repeatDelay=this.repeatDelay,t._yoyo=this.yoyo);var i=this.frames[e];0!==e||t.forward||(i=this.getLastFrame()),t.updateFrame(i)},getFrameByProgress:function(t){return t=n(t,0,1),a(t,this.frames,"progress")},nextFrame:function(t){var e=t.currentFrame;e.isLast?t._yoyo?this.handleYoyoFrame(t,!1):t.repeatCounter>0?t._reverse&&t.forward?t.forward=!1:this.repeatAnimation(t):this.completeAnimation(t):this.updateAndGetNextTick(t,e.nextFrame)},handleYoyoFrame:function(t,e){if(e||(e=!1),t._reverse===!e&&t.repeatCounter>0)return t.forward=e,void this.repeatAnimation(t);if(t._reverse===e||0!==t.repeatCounter){t.forward=e;var i=e?t.currentFrame.nextFrame:t.currentFrame.prevFrame;this.updateAndGetNextTick(t,i)}else this.completeAnimation(t)},getLastFrame:function(){return this.frames[this.frames.length-1]},previousFrame:function(t){var e=t.currentFrame;e.isFirst?t._yoyo?this.handleYoyoFrame(t,!0):t.repeatCounter>0?t._reverse&&!t.forward?(t.currentFrame=this.getLastFrame(),this.repeatAnimation(t)):(t.forward=!0,this.repeatAnimation(t)):this.completeAnimation(t):this.updateAndGetNextTick(t,e.prevFrame)},updateAndGetNextTick:function(t,e){t.updateFrame(e),this.getNextTick(t)},removeFrame:function(t){var e=this.frames.indexOf(t);return-1!==e&&this.removeFrameAt(e),this},removeFrameAt:function(t){return this.frames.splice(t,1),this.updateFrameSequence(),this},repeatAnimation:function(t){if(2===t._pendingStop)return this.completeAnimation(t);if(t._repeatDelay>0&&!1===t.pendingRepeat)t.pendingRepeat=!0,t.accumulator-=t.nextTick,t.nextTick+=t._repeatDelay;else if(t.repeatCounter--,t.updateFrame(t.currentFrame[t.forward?"nextFrame":"prevFrame"]),t.isPlaying){this.getNextTick(t),t.pendingRepeat=!1;var e=t.currentFrame,i=t.parent;this.emit(o.ANIMATION_REPEAT,this,e),i.emit(o.SPRITE_ANIMATION_KEY_REPEAT+this.key,this,e,t.repeatCounter,i),i.emit(o.SPRITE_ANIMATION_REPEAT,this,e,t.repeatCounter,i)}},setFrame:function(t){t.forward?this.nextFrame(t):this.previousFrame(t)},toJSON:function(){var t={key:this.key,type:this.type,frames:[],frameRate:this.frameRate,duration:this.duration,skipMissedFrames:this.skipMissedFrames,delay:this.delay,repeat:this.repeat,repeatDelay:this.repeatDelay,yoyo:this.yoyo,showOnStart:this.showOnStart,hideOnComplete:this.hideOnComplete};return this.frames.forEach(function(e){t.frames.push(e.toJSON())}),t},updateFrameSequence:function(){for(var t=this.frames.length,e=1/(t-1),i=0;i1&&(n.prevFrame=this.frames[i-1],n.nextFrame=this.frames[i+1])}return this},pause:function(){return this.paused=!0,this},resume:function(){return this.paused=!1,this},destroy:function(){this.removeAllListeners(),this.manager.off(o.PAUSE_ALL,this.pause,this),this.manager.off(o.RESUME_ALL,this.resume,this),this.manager.remove(this.key);for(var t=0;t1?2-s:s,o=r*Math.cos(i),a=r*Math.sin(i);return e.x=t.x+o*t.radius,e.y=t.y+a*t.radius,e}},function(t,e,i){var n=i(6);t.exports=function(t,e,i){return void 0===i&&(i=new n),i.x=t.x+t.radius*Math.cos(e),i.y=t.y+t.radius*Math.sin(e),i}},function(t,e){t.exports={TOP_LEFT:0,TOP_CENTER:1,TOP_RIGHT:2,LEFT_TOP:3,LEFT_CENTER:4,LEFT_BOTTOM:5,CENTER:6,RIGHT_TOP:7,RIGHT_CENTER:8,RIGHT_BOTTOM:9,BOTTOM_LEFT:10,BOTTOM_CENTER:11,BOTTOM_RIGHT:12}},function(t,e,i){var n={};t.exports=n;var s=i(82),r=i(87),o=i(238),a=i(86),h=i(546),l=i(36);n._warming=.4,n._torqueDampen=1,n._minLength=1e-6,n.create=function(t){var e=t;e.bodyA&&!e.pointA&&(e.pointA={x:0,y:0}),e.bodyB&&!e.pointB&&(e.pointB={x:0,y:0});var i=e.bodyA?r.add(e.bodyA.position,e.pointA):e.pointA,n=e.bodyB?r.add(e.bodyB.position,e.pointB):e.pointB,s=r.magnitude(r.sub(i,n));e.length=void 0!==e.length?e.length:s,e.id=e.id||l.nextId(),e.label=e.label||"Constraint",e.type="constraint",e.stiffness=e.stiffness||(e.length>0?1:.7),e.damping=e.damping||0,e.angularStiffness=e.angularStiffness||0,e.angleA=e.bodyA?e.bodyA.angle:e.angleA,e.angleB=e.bodyB?e.bodyB.angle:e.angleB,e.plugin={};var o={visible:!0,lineWidth:2,strokeStyle:"#ffffff",type:"line",anchors:!0};return 0===e.length&&e.stiffness>.1?(o.type="pin",o.anchors=!1):e.stiffness<.9&&(o.type="spring"),e.render=l.extend(o,e.render),e},n.preSolveAll=function(t){for(var e=0;e0&&(c.position.x+=l.x,c.position.y+=l.y),0!==l.angle&&(s.rotate(c.vertices,l.angle,i.position),h.rotate(c.axes,l.angle),u>0&&r.rotateAbout(c.position,l.angle,i.position,c.position)),a.update(c.bounds,c.vertices,i.velocity)}l.angle*=n._warming,l.x*=n._warming,l.y*=n._warming}}}},function(t,e,i){var n={};t.exports=n;var s=i(36);n.on=function(t,e,i){for(var n,s=e.split(" "),r=0;r0){i||(i={}),n=e.split(" ");for(var l=0;l0)||!((e>0?i[n-1].textures[e-1]:i[n-1].texture)===t)},pushBatch:function(t,e){if(0===e)this.batches.push({first:this.vertexCount,texture:t,textures:[]});else{var i=[];i[e-1]=t,this.batches.push({first:this.vertexCount,texture:null,textures:i})}},flush:function(){if(this.flushLocked)return this;this.flushLocked=!0;var t,e,i,n=this.gl,s=this.vertexCount,r=this.topology,o=this.vertexSize,a=this.renderer,h=this.batches,l=h.length,u=0,c=null;if(0===l||0===s)return this.flushLocked=!1,this;n.bufferSubData(n.ARRAY_BUFFER,0,this.bytes.subarray(0,s*o));for(var d=0;d0){for(e=0;e0){for(e=0;e0&&(a.setTexture2D(c.texture,0,!1),n.drawArrays(r,c.first,u)),this.vertexCount=0,h.length=0,this.flushLocked=!1,this},batchSprite:function(t,e,i){this.renderer.setPipeline(this);var n=this._tempMatrix1,s=this._tempMatrix2,r=this._tempMatrix3,o=t.frame,a=o.glTexture,h=o.u0,l=o.v0,c=o.u1,d=o.v1,f=o.x,p=o.y,g=o.cutWidth,v=o.cutHeight,y=-t.displayOriginX+f,m=-t.displayOriginY+p;if(t.isCropped){var x=t._crop;x.flipX===t.flipX&&x.flipY===t.flipY||o.updateCropUVs(x,t.flipX,t.flipY),h=x.u0,l=x.v0,c=x.u1,d=x.v1,g=x.width,v=x.height,f=x.x,p=x.y,y=-t.displayOriginX+f,m=-t.displayOriginY+p}t.flipX&&(y+=g,g*=-1),t.flipY&&(m+=v,v*=-1);var T=y+g,w=m+v;s.applyITRS(t.x,t.y,t.rotation,t.scaleX,t.scaleY),n.copyFrom(e.matrix),i?(n.multiplyWithOffset(i,-e.scrollX*t.scrollFactorX,-e.scrollY*t.scrollFactorY),s.e=t.x,s.f=t.y,n.multiply(s,r)):(s.e-=e.scrollX*t.scrollFactorX,s.f-=e.scrollY*t.scrollFactorY,n.multiply(s,r));var b=r.getX(y,m),S=r.getY(y,m),_=r.getX(y,w),A=r.getY(y,w),E=r.getX(T,w),C=r.getY(T,w),M=r.getX(T,m),P=r.getY(T,m),O=u.getTintAppendFloatAlpha(t._tintTL,e.alpha*t._alphaTL),R=u.getTintAppendFloatAlpha(t._tintTR,e.alpha*t._alphaTR),L=u.getTintAppendFloatAlpha(t._tintBL,e.alpha*t._alphaBL),D=u.getTintAppendFloatAlpha(t._tintBR,e.alpha*t._alphaBR);e.roundPixels&&(b=Math.round(b),S=Math.round(S),_=Math.round(_),A=Math.round(A),E=Math.round(E),C=Math.round(C),M=Math.round(M),P=Math.round(P)),this.setTexture2D(a,0);var F=t._isTinted&&t.tintFill;this.batchQuad(b,S,_,A,E,C,M,P,h,l,c,d,O,R,L,D,F,a,0)},batchQuad:function(t,e,i,n,s,r,o,a,h,l,u,c,d,f,p,g,v,y,m){var x=!1;this.vertexCount+6>this.vertexCapacity&&(this.flush(),x=!0,this.setTexture2D(y,m));var T=this.vertexViewF32,w=this.vertexViewU32,b=this.vertexCount*this.vertexComponentCount-1;return T[++b]=t,T[++b]=e,T[++b]=h,T[++b]=l,T[++b]=v,w[++b]=d,T[++b]=i,T[++b]=n,T[++b]=h,T[++b]=c,T[++b]=v,w[++b]=p,T[++b]=s,T[++b]=r,T[++b]=u,T[++b]=c,T[++b]=v,w[++b]=g,T[++b]=t,T[++b]=e,T[++b]=h,T[++b]=l,T[++b]=v,w[++b]=d,T[++b]=s,T[++b]=r,T[++b]=u,T[++b]=c,T[++b]=v,w[++b]=g,T[++b]=o,T[++b]=a,T[++b]=u,T[++b]=l,T[++b]=v,w[++b]=f,this.vertexCount+=6,x},batchTri:function(t,e,i,n,s,r,o,a,h,l,u,c,d,f,p,g){var v=!1;this.vertexCount+3>this.vertexCapacity&&(this.flush(),this.setTexture2D(p,g),v=!0);var y=this.vertexViewF32,m=this.vertexViewU32,x=this.vertexCount*this.vertexComponentCount-1;return y[++x]=t,y[++x]=e,y[++x]=o,y[++x]=a,y[++x]=f,m[++x]=u,y[++x]=i,y[++x]=n,y[++x]=o,y[++x]=l,y[++x]=f,m[++x]=c,y[++x]=s,y[++x]=r,y[++x]=h,y[++x]=l,y[++x]=f,m[++x]=d,this.vertexCount+=3,v},batchTexture:function(t,e,i,n,s,r,o,a,h,l,u,c,d,f,p,g,v,y,m,x,T,w,b,S,_,A,E,C,M,P,O){this.renderer.setPipeline(this,t);var R=this._tempMatrix1,L=this._tempMatrix2,D=this._tempMatrix3,F=y/i+E,k=m/n+C,I=(y+x)/i+E,B=(m+T)/n+C,Y=o,N=a,X=-g,z=-v;if(t.isCropped){var U=t._crop;Y=U.width,N=U.height,o=U.width,a=U.height;var G=y=U.x,W=m=U.y;c&&(G=x-U.x-U.width),d&&!e.isRenderTexture&&(W=T-U.y-U.height),F=G/i+E,k=W/n+C,I=(G+U.width)/i+E,B=(W+U.height)/n+C,X=-g+y,z=-v+m}d^=!O&&e.isRenderTexture?1:0,c&&(Y*=-1,X+=o),d&&(N*=-1,z+=a);var V=X+Y,H=z+N;L.applyITRS(s,r,u,h,l),R.copyFrom(M.matrix),P?(R.multiplyWithOffset(P,-M.scrollX*f,-M.scrollY*p),L.e=s,L.f=r,R.multiply(L,D)):(L.e-=M.scrollX*f,L.f-=M.scrollY*p,R.multiply(L,D));var j=D.getX(X,z),q=D.getY(X,z),K=D.getX(X,H),J=D.getY(X,H),Z=D.getX(V,H),Q=D.getY(V,H),$=D.getX(V,z),tt=D.getY(V,z);M.roundPixels&&(j=Math.round(j),q=Math.round(q),K=Math.round(K),J=Math.round(J),Z=Math.round(Z),Q=Math.round(Q),$=Math.round($),tt=Math.round(tt)),this.setTexture2D(e,0),this.batchQuad(j,q,K,J,Z,Q,$,tt,F,k,I,B,w,b,S,_,A,e,0)},batchTextureFrame:function(t,e,i,n,s,r,o){this.renderer.setPipeline(this);var a=this._tempMatrix1.copyFrom(r),h=this._tempMatrix2,l=e+t.width,c=i+t.height;o?a.multiply(o,h):h=a;var d=h.getX(e,i),f=h.getY(e,i),p=h.getX(e,c),g=h.getY(e,c),v=h.getX(l,c),y=h.getY(l,c),m=h.getX(l,i),x=h.getY(l,i);this.setTexture2D(t.glTexture,0),n=u.getTintAppendFloatAlpha(n,s),this.batchQuad(d,f,p,g,v,y,m,x,t.u0,t.v0,t.u1,t.v1,n,n,n,n,0,t.glTexture,0)},drawFillRect:function(t,e,i,n,s,r){var o=t+i,a=e+n;this.setTexture2D();var h=u.getTintAppendFloatAlphaAndSwap(s,r);this.batchQuad(t,e,t,a,o,a,o,e,0,0,1,1,h,h,h,h,2)},batchFillRect:function(t,e,i,n,s,r){this.renderer.setPipeline(this);var o=this._tempMatrix3;r&&r.multiply(s,o);var a=t+i,h=e+n,l=o.getX(t,e),u=o.getY(t,e),c=o.getX(t,h),d=o.getY(t,h),f=o.getX(a,h),p=o.getY(a,h),g=o.getX(a,e),v=o.getY(a,e),y=this.currentFrame,m=y.u0,x=y.v0,T=y.u1,w=y.v1;this.batchQuad(l,u,c,d,f,p,g,v,m,x,T,w,this.fillTint.TL,this.fillTint.TR,this.fillTint.BL,this.fillTint.BR,this.tintEffect)},batchFillTriangle:function(t,e,i,n,s,r,o,a){this.renderer.setPipeline(this);var h=this._tempMatrix3;a&&a.multiply(o,h);var l=h.getX(t,e),u=h.getY(t,e),c=h.getX(i,n),d=h.getY(i,n),f=h.getX(s,r),p=h.getY(s,r),g=this.currentFrame,v=g.u0,y=g.v0,m=g.u1,x=g.v1;this.batchTri(l,u,c,d,f,p,v,y,m,x,this.fillTint.TL,this.fillTint.TR,this.fillTint.BL,this.tintEffect)},batchStrokeTriangle:function(t,e,i,n,s,r,o,a,h){var l=this.tempTriangle;l[0].x=t,l[0].y=e,l[0].width=o,l[1].x=i,l[1].y=n,l[1].width=o,l[2].x=s,l[2].y=r,l[2].width=o,l[3].x=t,l[3].y=e,l[3].width=o,this.batchStrokePath(l,o,!1,a,h)},batchFillPath:function(t,e,i){this.renderer.setPipeline(this);var n=this._tempMatrix3;i&&i.multiply(e,n);for(var r,o,a=t.length,h=this.polygonCache,l=this.fillTint.TL,u=this.fillTint.TR,c=this.fillTint.BL,d=this.tintEffect,f=0;f0&&H[4]?this.batchQuad(D,F,P,O,H[0],H[1],H[2],H[3],U,G,W,V,B,Y,N,X,I):(j[0]=D,j[1]=F,j[2]=P,j[3]=O,j[4]=1),h&&j[4]?this.batchQuad(C,M,R,L,j[0],j[1],j[2],j[3],U,G,W,V,B,Y,N,X,I):(H[0]=C,H[1]=M,H[2]=R,H[3]=L,H[4]=1)}}});t.exports=d},function(t,e,i){var n=i(0),s=i(9),r=new n({initialize:function(t){this.name="WebGLPipeline",this.game=t.game,this.view=t.game.canvas,this.resolution=1,this.width=0,this.height=0,this.gl=t.gl,this.vertexCount=0,this.vertexCapacity=t.vertexCapacity,this.renderer=t.renderer,this.vertexData=t.vertices?t.vertices:new ArrayBuffer(t.vertexCapacity*t.vertexSize),this.vertexBuffer=this.renderer.createVertexBuffer(t.vertices?t.vertices:this.vertexData.byteLength,this.gl.STREAM_DRAW),this.program=this.renderer.createProgram(t.vertShader,t.fragShader),this.attributes=t.attributes,this.vertexSize=t.vertexSize,this.topology=t.topology,this.bytes=new Uint8Array(this.vertexData),this.vertexComponentCount=s.getComponentCount(t.attributes,this.gl),this.flushLocked=!1,this.active=!1},boot:function(){},addAttribute:function(t,e,i,n,s){return this.attributes.push({name:t,size:e,type:this.renderer.glFormats[i],normalized:n,offset:s}),this},shouldFlush:function(){return this.vertexCount>=this.vertexCapacity},resize:function(t,e,i){return this.width=t*i,this.height=e*i,this.resolution=i,this},bind:function(){var t=this.gl,e=this.vertexBuffer,i=this.attributes,n=this.program,s=this.renderer,r=this.vertexSize;s.setProgram(n),s.setVertexBuffer(e);for(var o=0;o=0?(t.enableVertexAttribArray(h),t.vertexAttribPointer(h,a.size,a.type,a.normalized,r,a.offset)):t.disableVertexAttribArray(h)}return this},onBind:function(){return this},onPreRender:function(){return this},onRender:function(){return this},onPostRender:function(){return this},flush:function(){if(this.flushLocked)return this;this.flushLocked=!0;var t=this.gl,e=this.vertexCount,i=this.topology,n=this.vertexSize;if(0!==e)return t.bufferSubData(t.ARRAY_BUFFER,0,this.bytes.subarray(0,e*n)),t.drawArrays(i,0,e),this.vertexCount=0,this.flushLocked=!1,this;this.flushLocked=!1},destroy:function(){var t=this.gl;return t.deleteProgram(this.program),t.deleteBuffer(this.vertexBuffer),delete this.program,delete this.vertexBuffer,delete this.gl,this},setFloat1:function(t,e){return this.renderer.setFloat1(this.program,t,e),this},setFloat2:function(t,e,i){return this.renderer.setFloat2(this.program,t,e,i),this},setFloat3:function(t,e,i,n){return this.renderer.setFloat3(this.program,t,e,i,n),this},setFloat4:function(t,e,i,n,s){return this.renderer.setFloat4(this.program,t,e,i,n,s),this},setFloat1v:function(t,e){return this.renderer.setFloat1v(this.program,t,e),this},setFloat2v:function(t,e){return this.renderer.setFloat2v(this.program,t,e),this},setFloat3v:function(t,e){return this.renderer.setFloat3v(this.program,t,e),this},setFloat4v:function(t,e){return this.renderer.setFloat4v(this.program,t,e),this},setInt1:function(t,e){return this.renderer.setInt1(this.program,t,e),this},setInt2:function(t,e,i){return this.renderer.setInt2(this.program,t,e,i),this},setInt3:function(t,e,i,n){return this.renderer.setInt3(this.program,t,e,i,n),this},setInt4:function(t,e,i,n,s){return this.renderer.setInt4(this.program,t,e,i,n,s),this},setMatrix2:function(t,e,i){return this.renderer.setMatrix2(this.program,t,e,i),this},setMatrix3:function(t,e,i){return this.renderer.setMatrix3(this.program,t,e,i),this},setMatrix4:function(t,e,i){return this.renderer.setMatrix4(this.program,t,e,i),this}});t.exports=r},function(t,e,i){var n=i(57);t.exports=function(t){return n(t,-180,180)}},function(t,e,i){var n=i(57);t.exports=function(t){return n(t,-Math.PI,Math.PI)}},function(t,e){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(i=window)}t.exports=i},function(t,e,i){t.exports={TIMELINE_COMPLETE:i(475),TIMELINE_LOOP:i(474),TIMELINE_PAUSE:i(473),TIMELINE_RESUME:i(472),TIMELINE_START:i(471),TIMELINE_UPDATE:i(470)}},function(t,e,i){var n=i(0),s=i(11),r=i(216),o=i(104),a=i(89),h=new n({Extends:s,initialize:function(t){s.call(this),this.manager=t,this.isTimeline=!0,this.data=[],this.totalData=0,this.useFrames=!1,this.timeScale=1,this.loop=0,this.loopDelay=0,this.loopCounter=0,this.completeDelay=0,this.countdown=0,this.state=a.PENDING_ADD,this._pausedState=a.PENDING_ADD,this.paused=!1,this.elapsed=0,this.totalElapsed=0,this.duration=0,this.progress=0,this.totalDuration=0,this.totalProgress=0,this.callbacks={onComplete:null,onLoop:null,onStart:null,onUpdate:null,onYoyo:null},this.callbackScope},setTimeScale:function(t){return this.timeScale=t,this},getTimeScale:function(){return this.timeScale},isPlaying:function(){return this.state===a.ACTIVE},add:function(t){return this.queue(o(this,t))},queue:function(t){return this.isPlaying()||(t.parent=this,t.parentIsTimeline=!0,this.data.push(t),this.totalData=this.data.length),this},hasOffset:function(t){return null!==t.offset},isOffsetAbsolute:function(t){return"number"==typeof t},isOffsetRelative:function(t){if("string"===typeof t){var e=t[0];if("-"===e||"+"===e)return!0}return!1},getRelativeOffset:function(t,e){var i=t[0],n=parseFloat(t.substr(2)),s=e;switch(i){case"+":s+=n;break;case"-":s-=n}return Math.max(0,s)},calcDuration:function(){for(var t=0,e=0,i=0,n=0;n0?this.totalDuration=this.duration+this.completeDelay+(this.duration+this.loopDelay)*this.loopCounter:this.totalDuration=this.duration+this.completeDelay},init:function(){return this.calcDuration(),this.progress=0,this.totalProgress=0,!this.paused||(this.state=a.PAUSED,!1)},resetTweens:function(t){for(var e=0;e0){this.elapsed=0,this.progress=0,this.loopCounter--;var t=this.callbacks.onLoop;t&&t.func.apply(t.scope,t.params),this.emit(r.TIMELINE_LOOP,this,this.loopCounter),this.resetTweens(!0),this.loopDelay>0?(this.countdown=this.loopDelay,this.state=a.LOOP_DELAY):this.state=a.ACTIVE}else if(this.completeDelay>0)this.countdown=this.completeDelay,this.state=a.COMPLETE_DELAY;else{this.state=a.PENDING_REMOVE;var e=this.callbacks.onComplete;e&&e.func.apply(e.scope,e.params),this.emit(r.TIMELINE_COMPLETE,this)}},update:function(t,e){if(this.state!==a.PAUSED){var i=e;switch(this.useFrames&&(e=1*this.manager.timeScale),e*=this.timeScale,this.elapsed+=e,this.progress=Math.min(this.elapsed/this.duration,1),this.totalElapsed+=e,this.totalProgress=Math.min(this.totalElapsed/this.totalDuration,1),this.state){case a.ACTIVE:for(var n=this.totalData,s=0;s0?Math.floor(v/p.length):h(e,"duration",g.duration),g.delay=h(e,"delay",g.delay),g.easeParams=c(e,"easeParams",g.easeParams),g.ease=a(c(e,"ease",g.ease),g.easeParams),g.hold=h(e,"hold",g.hold),g.repeat=h(e,"repeat",g.repeat),g.repeatDelay=h(e,"repeatDelay",g.repeatDelay),g.yoyo=o(e,"yoyo",g.yoyo),g.flipX=o(e,"flipX",g.flipX),g.flipY=o(e,"flipY",g.flipY);for(var y=0;y0){var t=this.delay+this.delay*this.repeat;return(this.elapsed+this.delay*(this.repeat-this.repeatCount))/t}return this.getProgress()},getRepeatCount:function(){return this.repeatCount},getElapsed:function(){return this.elapsed},getElapsedSeconds:function(){return.001*this.elapsed},remove:function(t){void 0===t&&(t=!1),this.elapsed=this.delay,this.hasDispatched=!t,this.repeatCount=0},destroy:function(){this.callback=void 0,this.callbackScope=void 0,this.args=[]}});t.exports=r},function(t,e,i){var n=i(0),s=i(13),r=i(28),o=i(18),a=i(485),h=i(110),l=i(41),u=i(9),c=new n({Extends:o,Mixins:[s.Alpha,s.BlendMode,s.ComputedSize,s.Depth,s.Flip,s.GetBounds,s.Origin,s.Pipeline,s.ScaleMode,s.Transform,s.Visible,s.ScrollFactor,a],initialize:function(t,e,i,n,s,a){o.call(this,t,"StaticTilemapLayer"),this.isTilemap=!0,this.tilemap=e,this.layerIndex=i,this.layer=e.layers[i],this.layer.tilemapLayer=this,this.tileset=[],this.culledTiles=[],this.skipCull=!1,this.tilesDrawn=0,this.tilesTotal=this.layer.width*this.layer.height,this.cullPaddingX=1,this.cullPaddingY=1,this.cullCallback=h.CullTiles,this.renderer=t.sys.game.renderer,this.vertexBuffer=[],this.bufferData=[],this.vertexViewF32=[],this.vertexViewU32=[],this.dirty=[],this.vertexCount=[],this._renderOrder=0,this._tempMatrix=new l,this.gidMap=[],this.setTilesets(n),this.setAlpha(this.layer.alpha),this.setPosition(s,a),this.setOrigin(),this.setSize(e.tileWidth*this.layer.width,e.tileHeight*this.layer.height),this.updateVBOData(),this.initPipeline("TextureTintPipeline"),t.sys.game.config.renderType===r.WEBGL&&t.sys.game.renderer.onContextRestored(function(){this.updateVBOData()},this)},setTilesets:function(t){var e=[],i=[],n=this.tilemap;Array.isArray(t)||(t=[t]);for(var s=0;sv||!r.visible||(x=this.batchTile(x,r,h,c,d,t,e));else if(1===p)for(o=0;o=0;a--)!(r=f[o][a])||r.indexv||!r.visible||(x=this.batchTile(x,r,h,c,d,t,e));else if(2===p)for(o=u-1;o>=0;o--)for(a=0;av||!r.visible||(x=this.batchTile(x,r,h,c,d,t,e));else if(3===p)for(o=u-1;o>=0;o--)for(a=l-1;a>=0;a--)!(r=f[o][a])||r.indexv||!r.visible||(x=this.batchTile(x,r,h,c,d,t,e));this.dirty[e]=!1,null===y?(y=i.createVertexBuffer(m,n.STATIC_DRAW),this.vertexBuffer[e]=y):(i.setVertexBuffer(y),n.bufferSubData(n.ARRAY_BUFFER,0,m))}return this},batchTile:function(t,e,i,n,s,r,o){var a=i.getTileTextureCoordinates(e.index);if(!a)return t;var h=i.tileWidth,l=i.tileHeight,c=h/2,d=l/2,f=a.x/n,p=a.y/s,g=(a.x+h)/n,v=(a.y+l)/s,y=this._tempMatrix,m=-c,x=-d;e.flipX&&(h*=-1,m+=i.tileWidth),e.flipY&&(l*=-1,x+=i.tileHeight);var T=m+h,w=x+l;y.applyITRS(c+e.pixelX,d+e.pixelY,e.rotation,1,1);var b=u.getTintAppendFloatAlpha(16777215,r.alpha*this.alpha*e.alpha),S=y.getX(m,x),_=y.getY(m,x),A=y.getX(m,w),E=y.getY(m,w),C=y.getX(T,w),M=y.getY(T,w),P=y.getX(T,x),O=y.getY(T,x);r.roundPixels&&(S=Math.round(S),_=Math.round(_),A=Math.round(A),E=Math.round(E),C=Math.round(C),M=Math.round(M),P=Math.round(P),O=Math.round(O));var R=this.vertexViewF32[o],L=this.vertexViewU32[o];return R[++t]=S,R[++t]=_,R[++t]=f,R[++t]=p,R[++t]=0,L[++t]=b,R[++t]=A,R[++t]=E,R[++t]=f,R[++t]=v,R[++t]=0,L[++t]=b,R[++t]=C,R[++t]=M,R[++t]=g,R[++t]=v,R[++t]=0,L[++t]=b,R[++t]=S,R[++t]=_,R[++t]=f,R[++t]=p,R[++t]=0,L[++t]=b,R[++t]=C,R[++t]=M,R[++t]=g,R[++t]=v,R[++t]=0,L[++t]=b,R[++t]=P,R[++t]=O,R[++t]=g,R[++t]=p,R[++t]=0,L[++t]=b,this.vertexCount[o]+=6,t},setRenderOrder:function(t){if("string"==typeof t&&(t=["right-down","left-down","right-up","left-up"].indexOf(t)),t>=0&&t<4){this._renderOrder=t;for(var e=0;e=0&&t<4&&(this._renderOrder=t),this},calculateFacesAt:function(t,e){return a.CalculateFacesAt(t,e,this.layer),this},calculateFacesWithin:function(t,e,i,n){return a.CalculateFacesWithin(t,e,i,n,this.layer),this},createFromTiles:function(t,e,i,n,s){return a.CreateFromTiles(t,e,i,n,s,this.layer)},cull:function(t){return this.cullCallback(this.layer,t,this.culledTiles,this._renderOrder)},copy:function(t,e,i,n,s,r,o){return a.Copy(t,e,i,n,s,r,o,this.layer),this},destroy:function(){this.layer.tilemapLayer===this&&(this.layer.tilemapLayer=void 0),this.tilemap=void 0,this.layer=void 0,this.culledTiles.length=0,this.cullCallback=null,this.gidMap=[],this.tileset=[],o.prototype.destroy.call(this)},fill:function(t,e,i,n,s,r){return a.Fill(t,e,i,n,s,r,this.layer),this},filterTiles:function(t,e,i,n,s,r,o){return a.FilterTiles(t,e,i,n,s,r,o,this.layer)},findByIndex:function(t,e,i){return a.FindByIndex(t,e,i,this.layer)},findTile:function(t,e,i,n,s,r,o){return a.FindTile(t,e,i,n,s,r,o,this.layer)},forEachTile:function(t,e,i,n,s,r,o){return a.ForEachTile(t,e,i,n,s,r,o,this.layer),this},getTileAt:function(t,e,i){return a.GetTileAt(t,e,i,this.layer)},getTileAtWorldXY:function(t,e,i,n){return a.GetTileAtWorldXY(t,e,i,n,this.layer)},getTilesWithin:function(t,e,i,n,s){return a.GetTilesWithin(t,e,i,n,s,this.layer)},getTilesWithinShape:function(t,e,i){return a.GetTilesWithinShape(t,e,i,this.layer)},getTilesWithinWorldXY:function(t,e,i,n,s,r){return a.GetTilesWithinWorldXY(t,e,i,n,s,r,this.layer)},hasTileAt:function(t,e){return a.HasTileAt(t,e,this.layer)},hasTileAtWorldXY:function(t,e,i){return a.HasTileAtWorldXY(t,e,i,this.layer)},putTileAt:function(t,e,i,n){return a.PutTileAt(t,e,i,n,this.layer)},putTileAtWorldXY:function(t,e,i,n,s){return a.PutTileAtWorldXY(t,e,i,n,s,this.layer)},putTilesAt:function(t,e,i,n){return a.PutTilesAt(t,e,i,n,this.layer),this},randomize:function(t,e,i,n,s){return a.Randomize(t,e,i,n,s,this.layer),this},removeTileAt:function(t,e,i,n){return a.RemoveTileAt(t,e,i,n,this.layer)},removeTileAtWorldXY:function(t,e,i,n,s){return a.RemoveTileAtWorldXY(t,e,i,n,s,this.layer)},renderDebug:function(t,e){return a.RenderDebug(t,e,this.layer),this},replaceByIndex:function(t,e,i,n,s,r){return a.ReplaceByIndex(t,e,i,n,s,r,this.layer),this},setSkipCull:function(t){return void 0===t&&(t=!0),this.skipCull=t,this},setCullPadding:function(t,e){return void 0===t&&(t=1),void 0===e&&(e=1),this.cullPaddingX=t,this.cullPaddingY=e,this},setCollision:function(t,e,i){return a.SetCollision(t,e,i,this.layer),this},setCollisionBetween:function(t,e,i,n){return a.SetCollisionBetween(t,e,i,n,this.layer),this},setCollisionByProperty:function(t,e,i){return a.SetCollisionByProperty(t,e,i,this.layer),this},setCollisionByExclusion:function(t,e,i){return a.SetCollisionByExclusion(t,e,i,this.layer),this},setCollisionFromCollisionGroup:function(t,e){return a.SetCollisionFromCollisionGroup(t,e,this.layer),this},setTileIndexCallback:function(t,e,i){return a.SetTileIndexCallback(t,e,i,this.layer),this},setTileLocationCallback:function(t,e,i,n,s,r){return a.SetTileLocationCallback(t,e,i,n,s,r,this.layer),this},shuffle:function(t,e,i,n){return a.Shuffle(t,e,i,n,this.layer),this},swapByIndex:function(t,e,i,n,s,r){return a.SwapByIndex(t,e,i,n,s,r,this.layer),this},tileToWorldX:function(t,e){return a.TileToWorldX(t,e,this.layer)},tileToWorldY:function(t,e){return a.TileToWorldY(t,e,this.layer)},tileToWorldXY:function(t,e,i,n){return a.TileToWorldXY(t,e,i,n,this.layer)},weightedRandomize:function(t,e,i,n,s){return a.WeightedRandomize(t,e,i,n,s,this.layer),this},worldToTileX:function(t,e,i){return a.WorldToTileX(t,e,i,this.layer)},worldToTileY:function(t,e,i){return a.WorldToTileY(t,e,i,this.layer)},worldToTileXY:function(t,e,i,n,s){return a.WorldToTileXY(t,e,i,n,s,this.layer)}});t.exports=h},function(t,e,i){var n=i(0),s=i(34),r=i(224),o=i(19),a=i(31),h=i(84),l=i(373),u=i(223),c=i(61),d=i(110),f=i(106),p=new n({initialize:function(t,e){this.scene=t,this.tileWidth=e.tileWidth,this.tileHeight=e.tileHeight,this.width=e.width,this.height=e.height,this.orientation=e.orientation,this.renderOrder=e.renderOrder,this.format=e.format,this.version=e.version,this.properties=e.properties,this.widthInPixels=e.widthInPixels,this.heightInPixels=e.heightInPixels,this.imageCollections=e.imageCollections,this.images=e.images,this.layers=e.layers,this.tilesets=e.tilesets,this.objects=e.objects,this.currentLayerIndex=0},setRenderOrder:function(t){var e=["right-down","left-down","right-up","left-up"];return"number"==typeof t&&(t=e[t]),e.indexOf(t)>-1&&(this.renderOrder=t),this},addTilesetImage:function(t,e,i,n,s,r,o){if(void 0===t)return null;if(void 0!==e&&null!==e||(e=t),!this.scene.sys.textures.exists(e))return console.warn("Invalid Tileset Image: "+e),null;var h=this.scene.sys.textures.get(e),l=this.getTilesetIndex(t);if(null===l&&this.format===a.TILED_JSON)return console.warn("No data found for Tileset: "+t),null;var u=this.tilesets[l];return u?(u.setTileSize(i,n),u.setSpacing(s,r),u.setImage(h),u):(void 0===i&&(i=this.tileWidth),void 0===n&&(n=this.tileHeight),void 0===s&&(s=0),void 0===r&&(r=0),void 0===o&&(o=0),(u=new f(t,o,i,n,s,r)).setImage(h),this.tilesets.push(u),u)},convertLayerToStatic:function(t){if(null===(t=this.getLayer(t)))return null;var e=t.tilemapLayer;if(!(e&&e instanceof r))return null;var i=new u(e.scene,e.tilemap,e.layerIndex,e.tileset,e.x,e.y);return this.scene.sys.displayList.add(i),e.destroy(),i},copy:function(t,e,i,n,s,r,o,a){return a=this.getLayer(a),this._isStaticCall(a,"copy")?this:(null!==a&&d.Copy(t,e,i,n,s,r,o,a),this)},createBlankDynamicLayer:function(t,e,i,n,s,o,a,l){if(void 0===a&&(a=e.tileWidth),void 0===l&&(l=e.tileHeight),void 0===s&&(s=this.width),void 0===o&&(o=this.height),void 0===i&&(i=0),void 0===n&&(n=0),null!==this.getLayerIndex(t))return console.warn("Invalid Tilemap Layer ID: "+t),null;for(var u,d=new h({name:t,tileWidth:a,tileHeight:l,width:s,height:o}),f=0;fa&&(a=e.layer[l].width),e.layer[l].height>h&&(h=e.layer[l].height);var u=new s({width:a,height:h,name:t,tileWidth:e.layer[0].tilesize,tileHeight:e.layer[0].tilesize,format:n.WELTMEISTER});return u.layers=r(e,i),u.tilesets=o(e),u}},function(t,e,i){var n=i(0),s=i(2),r=new n({initialize:function(t){void 0===t&&(t={}),this.name=s(t,"name","object layer"),this.opacity=s(t,"opacity",1),this.properties=s(t,"properties",{}),this.propertyTypes=s(t,"propertytypes",{}),this.type=s(t,"type","objectgroup"),this.visible=s(t,"visible",!0),this.objects=s(t,"objects",[])}});t.exports=r},function(t,e,i){var n=i(494),s=i(230),r=function(t){return{x:t.x,y:t.y}},o=["id","name","type","rotation","properties","visible","x","y","width","height"];t.exports=function(t,e,i){void 0===e&&(e=0),void 0===i&&(i=0);var a=n(t,o);if(a.x+=e,a.y+=i,t.gid){var h=s(t.gid);a.gid=h.gid,a.flippedHorizontal=h.flippedHorizontal,a.flippedVertical=h.flippedVertical,a.flippedAntiDiagonal=h.flippedAntiDiagonal}else t.polyline?a.polyline=t.polyline.map(r):t.polygon?a.polygon=t.polygon.map(r):t.ellipse?(a.ellipse=t.ellipse,a.width=t.width,a.height=t.height):t.text?(a.width=t.width,a.height=t.height,a.text=t.text):(a.rectangle=!0,a.width=t.width,a.height=t.height);return a}},function(t,e,i){var n=new(i(0))({initialize:function(t,e,i,n,s,r,o){(void 0===i||i<=0)&&(i=32),(void 0===n||n<=0)&&(n=32),void 0===s&&(s=0),void 0===r&&(r=0),this.name=t,this.firstgid=0|e,this.imageWidth=0|i,this.imageHeight=0|n,this.imageMargin=0|s,this.imageSpacing=0|r,this.properties=o||{},this.images=[],this.total=0},containsImageIndex:function(t){return t>=this.firstgid&&t-1}return!1}},function(t,e,i){var n=i(21);t.exports=function(t,e,i,s,r,o,a){for(var h=n(i,s,r,o,null,a),l=0;l0&&r.motion=r.sleepThreshold&&n.set(r,!0)):r.sleepCounter>0&&(r.sleepCounter-=1)}else n.set(r,!1)}},n.afterCollisions=function(t,e){for(var i=e*e*e,s=0;sn._motionWakeThreshold*i&&n.set(l,!1)}}}},n.set=function(t,e){var i=t.isSleeping;e?(t.isSleeping=!0,t.sleepCounter=t.sleepThreshold,t.positionImpulse.x=0,t.positionImpulse.y=0,t.positionPrev.x=t.position.x,t.positionPrev.y=t.position.y,t.anglePrev=t.angle,t.speed=0,t.angularSpeed=0,t.motion=0,i||s.trigger(t,"sleepStart")):(t.isSleeping=!1,t.sleepCounter=0,i&&s.trigger(t,"sleepEnd"))}},function(t,e){t.exports={NONE:0,A:1,B:2,BOTH:3}},function(t,e){t.exports={NEVER:0,LITE:1,PASSIVE:2,ACTIVE:4,FIXED:8}},function(t,e,i){var n=i(43),s=i(0),r=i(38),o=i(42),a=i(3),h=new s({initialize:function(t,e){var i=e.width?e.width:64,n=e.height?e.height:64;this.world=t,this.gameObject=e,this.debugShowBody=t.defaults.debugShowStaticBody,this.debugBodyColor=t.defaults.staticBodyDebugColor,this.enable=!0,this.isCircle=!1,this.radius=0,this.offset=new a,this.position=new a(e.x-e.displayOriginX,e.y-e.displayOriginY),this.width=i,this.height=n,this.halfWidth=Math.abs(this.width/2),this.halfHeight=Math.abs(this.height/2),this.center=new a(e.x+this.halfWidth,e.y+this.halfHeight),this.velocity=a.ZERO,this.allowGravity=!1,this.gravity=a.ZERO,this.bounce=a.ZERO,this.onWorldBounds=!1,this.onCollide=!1,this.onOverlap=!1,this.mass=1,this.immovable=!0,this.customSeparateX=!1,this.customSeparateY=!1,this.overlapX=0,this.overlapY=0,this.overlapR=0,this.embedded=!1,this.collideWorldBounds=!1,this.checkCollision={none:!1,up:!0,down:!0,left:!0,right:!0},this.touching={none:!0,up:!1,down:!1,left:!1,right:!1},this.wasTouching={none:!0,up:!1,down:!1,left:!1,right:!1},this.blocked={none:!0,up:!1,down:!1,left:!1,right:!1},this.physicsType=r.STATIC_BODY,this._dx=0,this._dy=0},setGameObject:function(t,e){return t&&t!==this.gameObject&&(this.gameObject.body=null,t.body=this,this.gameObject=t),e&&this.updateFromGameObject(),this},updateFromGameObject:function(){this.world.staticTree.remove(this);var t=this.gameObject;return t.getTopLeft(this.position),this.width=t.displayWidth,this.height=t.displayHeight,this.halfWidth=Math.abs(this.width/2),this.halfHeight=Math.abs(this.height/2),this.center.set(this.position.x+this.halfWidth,this.position.y+this.halfHeight),this.world.staticTree.insert(this),this},setOffset:function(t,e){return void 0===e&&(e=t),this.world.staticTree.remove(this),this.position.x-=this.offset.x,this.position.y-=this.offset.y,this.offset.set(t,e),this.position.x+=this.offset.x,this.position.y+=this.offset.y,this.updateCenter(),this.world.staticTree.insert(this),this},setSize:function(t,e,i,n){void 0===i&&(i=this.offset.x),void 0===n&&(n=this.offset.y);var s=this.gameObject;return!t&&s.frame&&(t=s.frame.realWidth),!e&&s.frame&&(e=s.frame.realHeight),this.world.staticTree.remove(this),this.width=t,this.height=e,this.halfWidth=Math.floor(t/2),this.halfHeight=Math.floor(e/2),this.offset.set(i,n),this.updateCenter(),this.isCircle=!1,this.radius=0,this.world.staticTree.insert(this),this},setCircle:function(t,e,i){return void 0===e&&(e=this.offset.x),void 0===i&&(i=this.offset.y),t>0?(this.world.staticTree.remove(this),this.isCircle=!0,this.radius=t,this.width=2*t,this.height=2*t,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this.offset.set(e,i),this.updateCenter(),this.world.staticTree.insert(this)):this.isCircle=!1,this},updateCenter:function(){this.center.set(this.position.x+this.halfWidth,this.position.y+this.halfHeight)},reset:function(t,e){var i=this.gameObject;void 0===t&&(t=i.x),void 0===e&&(e=i.y),this.world.staticTree.remove(this),i.setPosition(t,e),i.getTopLeft(this.position),this.updateCenter(),this.world.staticTree.insert(this)},stop:function(){return this},getBounds:function(t){return t.x=this.x,t.y=this.y,t.right=this.right,t.bottom=this.bottom,t},hitTest:function(t,e){return this.isCircle?n(this,t,e):o(this,t,e)},postUpdate:function(){},deltaAbsX:function(){return 0},deltaAbsY:function(){return 0},deltaX:function(){return 0},deltaY:function(){return 0},deltaZ:function(){return 0},destroy:function(){this.enable=!1,this.world.pendingDestroy.set(this)},drawDebug:function(t){var e=this.position,i=e.x+this.halfWidth,n=e.y+this.halfHeight;this.debugShowBody&&(t.lineStyle(1,this.debugBodyColor,1),this.isCircle?t.strokeCircle(i,n,this.width/2):t.strokeRect(e.x,e.y,this.width,this.height))},willDrawDebug:function(){return this.debugShowBody},setMass:function(t){return t<=0&&(t=.1),this.mass=t,this},x:{get:function(){return this.position.x},set:function(t){this.world.staticTree.remove(this),this.position.x=t,this.world.staticTree.insert(this)}},y:{get:function(){return this.position.y},set:function(t){this.world.staticTree.remove(this),this.position.y=t,this.world.staticTree.insert(this)}},left:{get:function(){return this.position.x}},right:{get:function(){return this.position.x+this.width}},top:{get:function(){return this.position.y}},bottom:{get:function(){return this.position.y+this.height}}});t.exports=h},function(t,e){t.exports=function(t,e){return!(e.right<=t.left||e.bottom<=t.top||e.position.x>=t.right||e.position.y>=t.bottom)}},function(t,e,i){var n=i(317);function s(t){if(!(this instanceof s))return new s(t,[".left",".top",".right",".bottom"]);this._maxEntries=Math.max(4,t||9),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}function r(t,e,i){if(!i)return e.indexOf(t);for(var n=0;n=t.minX&&e.maxY>=t.minY}function g(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function v(t,e,i,s,r){for(var o,a=[e,i];a.length;)(i=a.pop())-(e=a.pop())<=s||(o=e+Math.ceil((i-e)/s/2)*s,n(t,o,e,i,r),a.push(e,o,o,i))}s.prototype={all:function(){return this._all(this.data,[])},search:function(t){var e=this.data,i=[],n=this.toBBox;if(!p(t,e))return i;for(var s,r,o,a,h=[];e;){for(s=0,r=e.children.length;s=0&&r[e].children.length>this._maxEntries;)this._split(r,e),e--;this._adjustParentBBoxes(s,r,e)},_split:function(t,e){var i=t[e],n=i.children.length,s=this._minEntries;this._chooseSplitAxis(i,s,n);var r=this._chooseSplitIndex(i,s,n),a=g(i.children.splice(r,i.children.length-r));a.height=i.height,a.leaf=i.leaf,o(i,this.toBBox),o(a,this.toBBox),e?t[e-1].children.push(a):this._splitRoot(i,a)},_splitRoot:function(t,e){this.data=g([t,e]),this.data.height=t.height+1,this.data.leaf=!1,o(this.data,this.toBBox)},_chooseSplitIndex:function(t,e,i){var n,s,r,o,h,l,u,d,f,p,g,v,y,m;for(l=u=1/0,n=e;n<=i-e;n++)s=a(t,0,n,this.toBBox),r=a(t,n,i,this.toBBox),f=s,p=r,void 0,void 0,void 0,void 0,g=Math.max(f.minX,p.minX),v=Math.max(f.minY,p.minY),y=Math.min(f.maxX,p.maxX),m=Math.min(f.maxY,p.maxY),o=Math.max(0,y-g)*Math.max(0,m-v),h=c(s)+c(r),o=e;s--)r=t.children[s],h(u,t.leaf?o(r):r),c+=d(u);return c},_adjustParentBBoxes:function(t,e,i){for(var n=i;n>=0;n--)h(e[n],t)},_condense:function(t){for(var e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children).splice(e.indexOf(t[i]),1):this.clear():o(t[i],this.toBBox)},compareMinX:function(t,e){return t.left-e.left},compareMinY:function(t,e){return t.top-e.top},toBBox:function(t){return{minX:t.left,minY:t.top,maxX:t.right,maxY:t.bottom}}},t.exports=s},function(t,e,i){var n=new(i(0))({initialize:function(){this._pending=[],this._active=[],this._destroy=[],this._toProcess=0},add:function(t){return this._pending.push(t),this._toProcess++,this},remove:function(t){return this._destroy.push(t),this._toProcess++,this},update:function(){if(0===this._toProcess)return this._active;var t,e,i=this._destroy,n=this._active;for(t=0;te._dy?(r=t.bottom-e.y)>o&&!i||!1===t.checkCollision.down||!1===e.checkCollision.up?r=0:(t.touching.none=!1,t.touching.down=!0,e.touching.none=!1,e.touching.up=!0,e.physicsType===n.STATIC_BODY&&(t.blocked.none=!1,t.blocked.down=!0),t.physicsType===n.STATIC_BODY&&(e.blocked.none=!1,e.blocked.up=!0)):t._dyo&&!i||!1===t.checkCollision.up||!1===e.checkCollision.down?r=0:(t.touching.none=!1,t.touching.up=!0,e.touching.none=!1,e.touching.down=!0,e.physicsType===n.STATIC_BODY&&(t.blocked.none=!1,t.blocked.up=!0),t.physicsType===n.STATIC_BODY&&(e.blocked.none=!1,e.blocked.down=!0))),t.overlapY=r,e.overlapY=r,r}},function(t,e,i){var n=i(38);t.exports=function(t,e,i,s){var r=0,o=t.deltaAbsX()+e.deltaAbsX()+s;return 0===t._dx&&0===e._dx?(t.embedded=!0,e.embedded=!0):t._dx>e._dx?(r=t.right-e.x)>o&&!i||!1===t.checkCollision.right||!1===e.checkCollision.left?r=0:(t.touching.none=!1,t.touching.right=!0,e.touching.none=!1,e.touching.left=!0,e.physicsType===n.STATIC_BODY&&(t.blocked.none=!1,t.blocked.right=!0),t.physicsType===n.STATIC_BODY&&(e.blocked.none=!1,e.blocked.left=!0)):t._dxo&&!i||!1===t.checkCollision.left||!1===e.checkCollision.right?r=0:(t.touching.none=!1,t.touching.left=!0,e.touching.none=!1,e.touching.right=!0,e.physicsType===n.STATIC_BODY&&(t.blocked.none=!1,t.blocked.left=!0),t.physicsType===n.STATIC_BODY&&(e.blocked.none=!1,e.blocked.right=!0))),t.overlapX=r,e.overlapX=r,r}},function(t,e,i){var n=new(i(0))({initialize:function(t,e,i,n,s,r,o){this.world=t,this.name="",this.active=!0,this.overlapOnly=e,this.object1=i,this.object2=n,this.collideCallback=s,this.processCallback=r,this.callbackContext=o},setName:function(t){return this.name=t,this},update:function(){this.world.collideObjects(this.object1,this.object2,this.collideCallback,this.processCallback,this.callbackContext,this.overlapOnly)},destroy:function(){this.world.removeCollider(this),this.active=!1,this.world=null,this.object1=null,this.object2=null,this.collideCallback=null,this.processCallback=null,this.callbackContext=null}});t.exports=n},function(t,e,i){t.exports={COLLIDE:i(563),OVERLAP:i(562),PAUSE:i(561),RESUME:i(560),TILE_COLLIDE:i(559),TILE_OVERLAP:i(558),WORLD_BOUNDS:i(557)}},function(t,e,i){var n=i(43),s=i(0),r=i(38),o=i(248),a=i(183),h=i(10),l=i(42),u=i(3),c=new s({initialize:function(t,e){var i=e.width?e.width:64,n=e.height?e.height:64;this.world=t,this.gameObject=e,this.transform={x:e.x,y:e.y,rotation:e.angle,scaleX:e.scaleX,scaleY:e.scaleY,displayOriginX:e.displayOriginX,displayOriginY:e.displayOriginY},this.debugShowBody=t.defaults.debugShowBody,this.debugShowVelocity=t.defaults.debugShowVelocity,this.debugBodyColor=t.defaults.bodyDebugColor,this.enable=!0,this.isCircle=!1,this.radius=0,this.offset=new u,this.position=new u(e.x,e.y),this.prev=new u(e.x,e.y),this.allowRotation=!0,this.rotation=e.angle,this.preRotation=e.angle,this.width=i,this.height=n,this.sourceWidth=i,this.sourceHeight=n,e.frame&&(this.sourceWidth=e.frame.realWidth,this.sourceHeight=e.frame.realHeight),this.halfWidth=Math.abs(i/2),this.halfHeight=Math.abs(n/2),this.center=new u(e.x+this.halfWidth,e.y+this.halfHeight),this.velocity=new u,this.newVelocity=new u,this.deltaMax=new u,this.acceleration=new u,this.allowDrag=!0,this.drag=new u,this.allowGravity=!0,this.gravity=new u,this.bounce=new u,this.worldBounce=null,this.onWorldBounds=!1,this.onCollide=!1,this.onOverlap=!1,this.maxVelocity=new u(1e4,1e4),this.maxSpeed=-1,this.friction=new u(1,0),this.useDamping=!1,this.angularVelocity=0,this.angularAcceleration=0,this.angularDrag=0,this.maxAngular=1e3,this.mass=1,this.angle=0,this.speed=0,this.facing=r.FACING_NONE,this.immovable=!1,this.moves=!0,this.customSeparateX=!1,this.customSeparateY=!1,this.overlapX=0,this.overlapY=0,this.overlapR=0,this.embedded=!1,this.collideWorldBounds=!1,this.checkCollision={none:!1,up:!0,down:!0,left:!0,right:!0},this.touching={none:!0,up:!1,down:!1,left:!1,right:!1},this.wasTouching={none:!0,up:!1,down:!1,left:!1,right:!1},this.blocked={none:!0,up:!1,down:!1,left:!1,right:!1},this.syncBounds=!1,this.isMoving=!1,this.stopVelocityOnCollide=!0,this.physicsType=r.DYNAMIC_BODY,this._reset=!0,this._sx=e.scaleX,this._sy=e.scaleY,this._dx=0,this._dy=0,this._bounds=new h},updateBounds:function(){var t=this.gameObject,e=this.transform;if(t.parentContainer){var i=t.getWorldTransformMatrix(this.world._tempMatrix,this.world._tempMatrix2);e.x=i.tx,e.y=i.ty,e.rotation=a(i.rotation),e.scaleX=i.scaleX,e.scaleY=i.scaleY,e.displayOriginX=t.displayOriginX,e.displayOriginY=t.displayOriginY}else e.x=t.x,e.y=t.y,e.rotation=t.angle,e.scaleX=t.scaleX,e.scaleY=t.scaleY,e.displayOriginX=t.displayOriginX,e.displayOriginY=t.displayOriginY;var n=!1;if(this.syncBounds){var s=t.getBounds(this._bounds);this.width=s.width,this.height=s.height,n=!0}else{var r=Math.abs(e.scaleX),o=Math.abs(e.scaleY);this._sx===r&&this._sy===o||(this.width=this.sourceWidth*r,this.height=this.sourceHeight*o,this._sx=r,this._sy=o,n=!0)}n&&(this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this.updateCenter())},updateCenter:function(){this.center.set(this.position.x+this.halfWidth,this.position.y+this.halfHeight)},update:function(t){this.wasTouching.none=this.touching.none,this.wasTouching.up=this.touching.up,this.wasTouching.down=this.touching.down,this.wasTouching.left=this.touching.left,this.wasTouching.right=this.touching.right,this.touching.none=!0,this.touching.up=!1,this.touching.down=!1,this.touching.left=!1,this.touching.right=!1,this.blocked.none=!0,this.blocked.up=!1,this.blocked.down=!1,this.blocked.left=!1,this.blocked.right=!1,this.overlapR=0,this.overlapX=0,this.overlapY=0,this.embedded=!1,this.updateBounds();var e=this.transform;if(this.position.x=e.x+e.scaleX*(this.offset.x-e.displayOriginX),this.position.y=e.y+e.scaleY*(this.offset.y-e.displayOriginY),this.updateCenter(),this.rotation=e.rotation,this.preRotation=this.rotation,this._reset&&(this.prev.x=this.position.x,this.prev.y=this.position.y),this.moves){this.world.updateMotion(this,t);var i=this.velocity.x,n=this.velocity.y;this.newVelocity.set(i*t,n*t),this.position.add(this.newVelocity),this.updateCenter(),this.angle=Math.atan2(n,i),this.speed=Math.sqrt(i*i+n*n),this.collideWorldBounds&&this.checkWorldBounds()&&this.onWorldBounds&&this.world.emit(o.WORLD_BOUNDS,this,this.blocked.up,this.blocked.down,this.blocked.left,this.blocked.right)}this._dx=this.position.x-this.prev.x,this._dy=this.position.y-this.prev.y},postUpdate:function(){this._dx=this.position.x-this.prev.x,this._dy=this.position.y-this.prev.y,this.moves&&(0!==this.deltaMax.x&&0!==this._dx&&(this._dx<0&&this._dx<-this.deltaMax.x?this._dx=-this.deltaMax.x:this._dx>0&&this._dx>this.deltaMax.x&&(this._dx=this.deltaMax.x)),0!==this.deltaMax.y&&0!==this._dy&&(this._dy<0&&this._dy<-this.deltaMax.y?this._dy=-this.deltaMax.y:this._dy>0&&this._dy>this.deltaMax.y&&(this._dy=this.deltaMax.y)),this.gameObject.x+=this._dx,this.gameObject.y+=this._dy,this._reset=!0),this._dx<0?this.facing=r.FACING_LEFT:this._dx>0&&(this.facing=r.FACING_RIGHT),this._dy<0?this.facing=r.FACING_UP:this._dy>0&&(this.facing=r.FACING_DOWN),this.allowRotation&&(this.gameObject.angle+=this.deltaZ()),this.prev.x=this.position.x,this.prev.y=this.position.y},checkWorldBounds:function(){var t=this.position,e=this.world.bounds,i=this.world.checkCollision,n=this.worldBounce?-this.worldBounce.x:-this.bounce.x,s=this.worldBounce?-this.worldBounce.y:-this.bounce.y;return t.xe.right&&i.right&&(t.x=e.right-this.width,this.velocity.x*=n,this.blocked.right=!0,this.blocked.none=!1),t.ye.bottom&&i.down&&(t.y=e.bottom-this.height,this.velocity.y*=s,this.blocked.down=!0,this.blocked.none=!1),!this.blocked.none},setOffset:function(t,e){return void 0===e&&(e=t),this.offset.set(t,e),this},setSize:function(t,e,i){void 0===i&&(i=!0);var n=this.gameObject;if(!t&&n.frame&&(t=n.frame.realWidth),!e&&n.frame&&(e=n.frame.realHeight),this.sourceWidth=t,this.sourceHeight=e,this.width=this.sourceWidth*this._sx,this.height=this.sourceHeight*this._sy,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this.updateCenter(),i&&n.getCenter){var s=n.displayWidth/2,r=n.displayHeight/2;this.offset.set(s-this.halfWidth,r-this.halfHeight)}return this.isCircle=!1,this.radius=0,this},setCircle:function(t,e,i){return void 0===e&&(e=this.offset.x),void 0===i&&(i=this.offset.y),t>0?(this.isCircle=!0,this.radius=t,this.sourceWidth=2*t,this.sourceHeight=2*t,this.width=this.sourceWidth*this._sx,this.height=this.sourceHeight*this._sy,this.halfWidth=Math.floor(this.width/2),this.halfHeight=Math.floor(this.height/2),this.offset.set(e,i),this.updateCenter()):this.isCircle=!1,this},reset:function(t,e){this.stop();var i=this.gameObject;i.setPosition(t,e),i.getTopLeft(this.position),this.prev.copy(this.position),this.rotation=i.angle,this.preRotation=i.angle,this.updateBounds(),this.updateCenter()},stop:function(){return this.velocity.set(0),this.acceleration.set(0),this.speed=0,this.angularVelocity=0,this.angularAcceleration=0,this},getBounds:function(t){return t.x=this.x,t.y=this.y,t.right=this.right,t.bottom=this.bottom,t},hitTest:function(t,e){return this.isCircle?n(this,t,e):l(this,t,e)},onFloor:function(){return this.blocked.down},onCeiling:function(){return this.blocked.up},onWall:function(){return this.blocked.left||this.blocked.right},deltaAbsX:function(){return this._dx>0?this._dx:-this._dx},deltaAbsY:function(){return this._dy>0?this._dy:-this._dy},deltaX:function(){return this._dx},deltaY:function(){return this._dy},deltaZ:function(){return this.rotation-this.preRotation},destroy:function(){this.enable=!1,this.world&&this.world.pendingDestroy.set(this)},drawDebug:function(t){var e=this.position,i=e.x+this.halfWidth,n=e.y+this.halfHeight;this.debugShowBody&&(t.lineStyle(t.defaultStrokeWidth,this.debugBodyColor),this.isCircle?t.strokeCircle(i,n,this.width/2):t.strokeRect(e.x,e.y,this.width,this.height)),this.debugShowVelocity&&(t.lineStyle(t.defaultStrokeWidth,this.world.defaults.velocityDebugColor,1),t.lineBetween(i,n,i+this.velocity.x/2,n+this.velocity.y/2))},willDrawDebug:function(){return this.debugShowBody||this.debugShowVelocity},setCollideWorldBounds:function(t){return void 0===t&&(t=!0),this.collideWorldBounds=t,this},setVelocity:function(t,e){return this.velocity.set(t,e),this.speed=Math.sqrt(t*t+e*e),this},setVelocityX:function(t){this.velocity.x=t;var e=t,i=this.velocity.y;return this.speed=Math.sqrt(e*e+i*i),this},setVelocityY:function(t){this.velocity.y=t;var e=this.velocity.x,i=t;return this.speed=Math.sqrt(e*e+i*i),this},setMaxVelocity:function(t,e){return this.maxVelocity.set(t,e),this},setMaxSpeed:function(t){return this.maxSpeed=t,this},setBounce:function(t,e){return this.bounce.set(t,e),this},setBounceX:function(t){return this.bounce.x=t,this},setBounceY:function(t){return this.bounce.y=t,this},setAcceleration:function(t,e){return this.acceleration.set(t,e),this},setAccelerationX:function(t){return this.acceleration.x=t,this},setAccelerationY:function(t){return this.acceleration.y=t,this},setAllowDrag:function(t){return void 0===t&&(t=!0),this.allowDrag=t,this},setAllowGravity:function(t){return void 0===t&&(t=!0),this.allowGravity=t,this},setAllowRotation:function(t){return void 0===t&&(t=!0),this.allowRotation=t,this},setDrag:function(t,e){return this.drag.set(t,e),this},setDragX:function(t){return this.drag.x=t,this},setDragY:function(t){return this.drag.y=t,this},setGravity:function(t,e){return this.gravity.set(t,e),this},setGravityX:function(t){return this.gravity.x=t,this},setGravityY:function(t){return this.gravity.y=t,this},setFriction:function(t,e){return this.friction.set(t,e),this},setFrictionX:function(t){return this.friction.x=t,this},setFrictionY:function(t){return this.friction.y=t,this},setAngularVelocity:function(t){return this.angularVelocity=t,this},setAngularAcceleration:function(t){return this.angularAcceleration=t,this},setAngularDrag:function(t){return this.angularDrag=t,this},setMass:function(t){return this.mass=t,this},setImmovable:function(t){return void 0===t&&(t=!0),this.immovable=t,this},setEnable:function(t){return void 0===t&&(t=!0),this.enable=t,this},x:{get:function(){return this.position.x},set:function(t){this.position.x=t}},y:{get:function(){return this.position.y},set:function(t){this.position.y=t}},left:{get:function(){return this.position.x}},right:{get:function(){return this.position.x+this.width}},top:{get:function(){return this.position.y}},bottom:{get:function(){return this.position.y+this.height}}});t.exports=c},function(t,e,i){var n=i(249),s=i(23),r=i(0),o=i(247),a=i(38),h=i(56),l=i(11),u=i(248),c=i(186),d=i(383),f=i(382),p=i(246),g=i(245),v=i(4),y=i(244),m=i(556),x=i(10),T=i(243),w=i(555),b=i(550),S=i(549),_=i(102),A=i(241),E=i(242),C=i(41),M=i(3),P=i(57),O=new r({Extends:l,initialize:function(t,e){l.call(this),this.scene=t,this.bodies=new _,this.staticBodies=new _,this.pendingDestroy=new _,this.late=new _,this._late=!1,this.colliders=new y,this.gravity=new M(v(e,"gravity.x",0),v(e,"gravity.y",0)),this.bounds=new x(v(e,"x",0),v(e,"y",0),v(e,"width",t.sys.scale.width),v(e,"height",t.sys.scale.height)),this.checkCollision={up:v(e,"checkCollision.up",!0),down:v(e,"checkCollision.down",!0),left:v(e,"checkCollision.left",!0),right:v(e,"checkCollision.right",!0)},this.fps=v(e,"fps",60),this._elapsed=0,this._frameTime=1/this.fps,this._frameTimeMS=1e3*this._frameTime,this.stepsLastFrame=0,this.timeScale=v(e,"timeScale",1),this.OVERLAP_BIAS=v(e,"overlapBias",4),this.TILE_BIAS=v(e,"tileBias",16),this.forceX=v(e,"forceX",!1),this.isPaused=v(e,"isPaused",!1),this._total=0,this.drawDebug=v(e,"debug",!1),this.debugGraphic,this.defaults={debugShowBody:v(e,"debugShowBody",!0),debugShowStaticBody:v(e,"debugShowStaticBody",!0),debugShowVelocity:v(e,"debugShowVelocity",!0),bodyDebugColor:v(e,"debugBodyColor",16711935),staticBodyDebugColor:v(e,"debugStaticBodyColor",255),velocityDebugColor:v(e,"debugVelocityColor",65280)},this.maxEntries=v(e,"maxEntries",16),this.useTree=v(e,"useTree",!0),this.tree=new T(this.maxEntries),this.staticTree=new T(this.maxEntries),this.treeMinMax={minX:0,minY:0,maxX:0,maxY:0},this._tempMatrix=new C,this._tempMatrix2=new C,this.drawDebug&&this.createDebugGraphic()},enable:function(t,e){void 0===e&&(e=a.DYNAMIC_BODY),Array.isArray(t)||(t=[t]);for(var i=0;i=s;)this._elapsed-=s,i++,this.step(n);this.stepsLastFrame=i,this._late=!0}},step:function(t){var e,i,n=this.bodies.entries,s=n.length;for(e=0;e0){for(n=(e=h.entries).length,t=0;t0){var u=this.tree,c=this.staticTree;for(n=(e=o.entries).length,t=0;t-1&&t.velocity.length()>g&&t.velocity.normalize().scale(g)},separate:function(t,e,i,n,s){if(!t.enable||!e.enable||t.checkCollision.none||e.checkCollision.none||!this.intersects(t,e))return!1;if(i&&!1===i.call(n,t.gameObject,e.gameObject))return!1;if(t.isCircle&&e.isCircle)return this.separateCircle(t,e,s);if(t.isCircle!==e.isCircle){var r=t.isCircle?e:t,o=t.isCircle?t:e,a={x:r.x,y:r.y,right:r.right,bottom:r.bottom},h=o.center;if((h.ya.bottom)&&(h.xa.right))return this.separateCircle(t,e,s)}var l=!1,c=!1;this.forceX||Math.abs(this.gravity.y+t.gravity.y)l.right&&(a=h(c.x,c.y,l.right,l.y)-c.radius):c.y>l.bottom&&(c.xl.right&&(a=h(c.x,c.y,l.right,l.bottom)-c.radius)),a*=-1}else a=t.halfWidth+e.halfWidth-h(t.center.x,t.center.y,e.center.x,e.center.y);if(i||0===a||t.immovable&&e.immovable||t.customSeparateX||e.customSeparateX)return 0!==a&&(t.onOverlap||e.onOverlap)&&this.emit(u.OVERLAP,t.gameObject,e.gameObject,t,e),0!==a;var d=t.velocity.x,f=t.velocity.y,v=t.mass,y=e.velocity.x,m=e.velocity.y,x=e.mass,T=d*Math.cos(o)+f*Math.sin(o),w=d*Math.sin(o)-f*Math.cos(o),b=y*Math.cos(o)+m*Math.sin(o),S=y*Math.sin(o)-m*Math.cos(o),_=((v-x)*T+2*x*b)/(v+x),A=(2*v*T+(x-v)*b)/(v+x);t.immovable||(t.velocity.x=(_*Math.cos(o)-w*Math.sin(o))*t.bounce.x,t.velocity.y=(w*Math.cos(o)+_*Math.sin(o))*t.bounce.y,d=t.velocity.x,f=t.velocity.y),e.immovable||(e.velocity.x=(A*Math.cos(o)-S*Math.sin(o))*e.bounce.x,e.velocity.y=(S*Math.cos(o)+A*Math.sin(o))*e.bounce.y,y=e.velocity.x,m=e.velocity.y),Math.abs(o)0&&!t.immovable&&y>d?t.velocity.x*=-1:y<0&&!e.immovable&&d0&&!t.immovable&&m>f?t.velocity.y*=-1:m<0&&!e.immovable&&fMath.PI/2&&(d<0&&!t.immovable&&y0&&!e.immovable&&d>y?e.velocity.x*=-1:f<0&&!t.immovable&&m0&&!e.immovable&&d>m&&(e.velocity.y*=-1));var E=this._frameTime;return t.immovable||(t.x+=t.velocity.x*E-a*Math.cos(o),t.y+=t.velocity.y*E-a*Math.sin(o)),e.immovable||(e.x+=e.velocity.x*E+a*Math.cos(o),e.y+=e.velocity.y*E+a*Math.sin(o)),(t.onCollide||e.onCollide)&&this.emit(u.COLLIDE,t.gameObject,e.gameObject,t,e),t.postUpdate(),e.postUpdate(),!0},intersects:function(t,e){return t!==e&&(t.isCircle||e.isCircle?t.isCircle?e.isCircle?h(t.center.x,t.center.y,e.center.x,e.center.y)<=t.halfWidth+e.halfWidth:this.circleBodyIntersects(t,e):this.circleBodyIntersects(e,t):!(t.right<=e.position.x||t.bottom<=e.position.y||t.position.x>=e.right||t.position.y>=e.bottom))},circleBodyIntersects:function(t,e){var i=s(t.center.x,e.left,e.right),n=s(t.center.y,e.top,e.bottom);return(t.center.x-i)*(t.center.x-i)+(t.center.y-n)*(t.center.y-n)<=t.halfWidth*t.halfWidth},overlap:function(t,e,i,n,s){return void 0===i&&(i=null),void 0===n&&(n=null),void 0===s&&(s=i),this.collideObjects(t,e,i,n,s,!0)},collide:function(t,e,i,n,s){return void 0===i&&(i=null),void 0===n&&(n=null),void 0===s&&(s=i),this.collideObjects(t,e,i,n,s,!1)},collideObjects:function(t,e,i,n,s,r){var o;t.isParent&&void 0===t.physicsType&&(t=t.children.entries),e&&e.isParent&&void 0===e.physicsType&&(e=e.children.entries);var a=Array.isArray(t),h=Array.isArray(e);if(this._total=0,a||h)if(!a&&h)for(o=0;o0},collideHandler:function(t,e,i,n,s,r){if(void 0===e&&t.isParent)return this.collideGroupVsGroup(t,t,i,n,s,r);if(!t||!e)return!1;if(t.body){if(e.body)return this.collideSpriteVsSprite(t,e,i,n,s,r);if(e.isParent)return this.collideSpriteVsGroup(t,e,i,n,s,r);if(e.isTilemap)return this.collideSpriteVsTilemapLayer(t,e,i,n,s,r)}else if(t.isParent){if(e.body)return this.collideSpriteVsGroup(e,t,i,n,s,r);if(e.isParent)return this.collideGroupVsGroup(t,e,i,n,s,r);if(e.isTilemap)return this.collideGroupVsTilemapLayer(t,e,i,n,s,r)}else if(t.isTilemap){if(e.body)return this.collideSpriteVsTilemapLayer(e,t,i,n,s,r);if(e.isParent)return this.collideGroupVsTilemapLayer(e,t,i,n,s,r)}},collideSpriteVsSprite:function(t,e,i,n,s,r){return!(!t.body||!e.body)&&(this.separate(t.body,e.body,n,s,r)&&(i&&i.call(s,t,e),this._total++),!0)},collideSpriteVsGroup:function(t,e,i,n,s,r){var o,h,l,u=t.body;if(0!==e.length&&u&&u.enable)if(this.useTree){var c=this.treeMinMax;c.minX=u.left,c.minY=u.top,c.maxX=u.right,c.maxY=u.bottom;var d=e.physicsType===a.DYNAMIC_BODY?this.tree.search(c):this.staticTree.search(c);for(h=d.length,o=0;od.baseTileWidth){var f=(d.tileWidth-d.baseTileWidth)*e.scaleX;a-=f,l+=f}d.tileHeight>d.baseTileHeight&&(c+=(d.tileHeight-d.baseTileHeight)*e.scaleY);var p,g=e.getTilesWithinWorldXY(a,h,l,c);if(0===g.length)return!1;for(var v={left:0,right:0,top:0,bottom:0},y=0;y=2&&(this.leftStick.set(r[0].getValue(),r[1].getValue()),s>=4&&this.rightStick.set(r[2].getValue(),r[3].getValue()))},destroy:function(){var t;for(this.removeAllListeners(),this.manager=null,this.pad=null,t=0;t=this.threshold?this.pressed||(this.pressed=!0,this.events.emit(s.BUTTON_DOWN,e,this,t),this.pad.emit(s.GAMEPAD_BUTTON_DOWN,i,t,this)):this.pressed&&(this.pressed=!1,this.events.emit(s.BUTTON_UP,e,this,t),this.pad.emit(s.GAMEPAD_BUTTON_UP,i,t,this))},destroy:function(){this.pad=null,this.events=null}});t.exports=r},function(t,e,i){var n=new(i(0))({initialize:function(t,e){this.pad=t,this.events=t.events,this.index=e,this.value=0,this.threshold=.1},update:function(t){this.value=t},getValue:function(){return Math.abs(this.value)t.width*t.height)&&e.x>t.x&&e.xt.x&&e.rightt.y&&e.yt.y&&e.bottom=0&&u<=1){var c=((s-h)*(r-n)-(n-a)*(o-s))/l;return Math.abs(c)*Math.sqrt(l)<=i}return Math.sqrt((r-a)*(r-a)+(o-h)*(o-h))<=i}},function(t,e,i){var n=i(43),s=new(i(6));t.exports=function(t,e,i){if(void 0===i&&(i=s),n(e,t.x1,t.y1))return i.x=t.x1,i.y=t.y1,!0;if(n(e,t.x2,t.y2))return i.x=t.x2,i.y=t.y2,!0;var r=t.x2-t.x1,o=t.y2-t.y1,a=e.x-t.x1,h=e.y-t.y1,l=r*r+o*o,u=r,c=o;if(l>0){var d=(a*r+h*o)/l;u*=d,c*=d}return i.x=t.x1+u,i.y=t.y1+c,u*u+c*c<=l&&u*r+c*o>=0&&n(e,i.x,i.y)}},function(t,e,i){t.exports={CircleToCircle:i(725),CircleToRectangle:i(724),GetRectangleIntersection:i(723),LineToCircle:i(277),LineToLine:i(115),LineToRectangle:i(722),PointToLine:i(276),PointToLineSegment:i(721),RectangleToRectangle:i(158),RectangleToTriangle:i(720),RectangleToValues:i(719),TriangleToCircle:i(718),TriangleToLine:i(717),TriangleToTriangle:i(716)}},function(t,e,i){t.exports={Circle:i(745),Ellipse:i(735),Intersects:i(278),Line:i(715),Point:i(694),Polygon:i(680),Rectangle:i(270),Triangle:i(650)}},function(t,e,i){var n=i(0),s=i(281),r=i(9),o=new n({initialize:function(){this.lightPool=[],this.lights=[],this.culledLights=[],this.ambientColor={r:.1,g:.1,b:.1},this.active=!1,this.maxLights=-1},enable:function(){return-1===this.maxLights&&(this.maxLights=this.scene.sys.game.renderer.config.maxLights),this.active=!0,this},disable:function(){return this.active=!1,this},cull:function(t){var e=this.lights,i=this.culledLights,n=e.length,s=t.x+t.width/2,r=t.y+t.height/2,o=(t.width+t.height)/2,a={x:0,y:0},h=t.matrix,l=this.systems.game.config.height;i.length=0;for(var u=0;u0?(h=this.lightPool.pop()).set(t,e,i,a[0],a[1],a[2],o):h=new s(t,e,i,a[0],a[1],a[2],o),this.lights.push(h),h},removeLight:function(t){var e=this.lights.indexOf(t);return e>=0&&(this.lightPool.push(t),this.lights.splice(e,1)),this},shutdown:function(){for(;this.lights.length>0;)this.lightPool.push(this.lights.pop());this.ambientColor={r:.1,g:.1,b:.1},this.culledLights.length=0,this.lights.length=0},destroy:function(){this.shutdown()}});t.exports=o},function(t,e,i){var n=i(0),s=i(9),r=new n({initialize:function(t,e,i,n,s,r,o){this.x=t,this.y=e,this.radius=i,this.r=n,this.g=s,this.b=r,this.intensity=o,this.scrollFactorX=1,this.scrollFactorY=1},set:function(t,e,i,n,s,r,o){return this.x=t,this.y=e,this.radius=i,this.r=n,this.g=s,this.b=r,this.intensity=o,this.scrollFactorX=1,this.scrollFactorY=1,this},setScrollFactor:function(t,e){return void 0===t&&(t=1),void 0===e&&(e=t),this.scrollFactorX=t,this.scrollFactorY=e,this},setColor:function(t){var e=s.getFloatsFromUintRGB(t);return this.r=e[0],this.g=e[1],this.b=e[2],this},setIntensity:function(t){return this.intensity=t,this},setPosition:function(t,e){return this.x=t,this.y=e,this},setRadius:function(t){return this.radius=t,this}});t.exports=r},function(t,e,i){var n=i(58),s=i(6);t.exports=function(t,e,i,r){void 0===r&&(r=[]);var o=t.getLineA(),a=t.getLineB(),h=t.getLineC(),l=n(o),u=n(a),c=n(h),d=l+u+c;e||(e=d/i);for(var f=0;fl+u?(g=(p-=l+u)/c,v.x=h.x1+(h.x2-h.x1)*g,v.y=h.y1+(h.y2-h.y1)*g):(g=(p-=l)/u,v.x=a.x1+(a.x2-a.x1)*g,v.y=a.y1+(a.y2-a.y1)*g),r.push(v)}return r}},function(t,e,i){var n=i(6),s=i(58);t.exports=function(t,e,i){void 0===i&&(i=new n);var r=t.getLineA(),o=t.getLineB(),a=t.getLineC();if(e<=0||e>=1)return i.x=r.x1,i.y=r.y1,i;var h=s(r),l=s(o),u=s(a),c=(h+l+u)*e,d=0;return ch+l?(d=(c-=h+l)/u,i.x=a.x1+(a.x2-a.x1)*d,i.y=a.y1+(a.y2-a.y1)*d):(d=(c-=h)/l,i.x=o.x1+(o.x2-o.x1)*d,i.y=o.y1+(o.y2-o.y1)*d),i}},function(t,e,i){var n=i(0),s=i(29),r=i(65),o=i(795),a=new n({Extends:s,Mixins:[o],initialize:function(t,e,i,n,o,a,h,l,u,c,d){void 0===e&&(e=0),void 0===i&&(i=0),void 0===n&&(n=0),void 0===o&&(o=128),void 0===a&&(a=64),void 0===h&&(h=0),void 0===l&&(l=128),void 0===u&&(u=128),s.call(this,t,"Triangle",new r(n,o,a,h,l,u));var f=this.geom.right-this.geom.left,p=this.geom.bottom-this.geom.top;this.setPosition(e,i),this.setSize(f,p),void 0!==c&&this.setFillStyle(c,d),this.updateDisplayOrigin(),this.updateData()},setTo:function(t,e,i,n,s,r){return this.geom.setTo(t,e,i,n,s,r),this.updateData()},updateData:function(){var t=[],e=this.geom,i=this._tempLine;return e.getLineA(i),t.push(i.x1,i.y1,i.x2,i.y2),e.getLineB(i),t.push(i.x2,i.y2),e.getLineC(i),t.push(i.x2,i.y2),this.pathData=t,this}});t.exports=a},function(t,e,i){var n=i(798),s=i(0),r=i(71),o=i(29),a=new s({Extends:o,Mixins:[n],initialize:function(t,e,i,n,s,r,a,h){void 0===e&&(e=0),void 0===i&&(i=0),void 0===n&&(n=5),void 0===s&&(s=32),void 0===r&&(r=64),o.call(this,t,"Star",null),this._points=n,this._innerRadius=s,this._outerRadius=r,this.setPosition(e,i),this.setSize(2*r,2*r),void 0!==a&&this.setFillStyle(a,h),this.updateDisplayOrigin(),this.updateData()},setPoints:function(t){return this._points=t,this.updateData()},setInnerRadius:function(t){return this._innerRadius=t,this.updateData()},setOuterRadius:function(t){return this._outerRadius=t,this.updateData()},points:{get:function(){return this._points},set:function(t){this._points=t,this.updateData()}},innerRadius:{get:function(){return this._innerRadius},set:function(t){this._innerRadius=t,this.updateData()}},outerRadius:{get:function(){return this._outerRadius},set:function(t){this._outerRadius=t,this.updateData()}},updateData:function(){var t=[],e=this._points,i=this._innerRadius,n=this._outerRadius,s=Math.PI/2*3,o=Math.PI/e,a=n,h=n;t.push(a,h+-n);for(var l=0;l0&&r.push(i([0,0],n[0])),e=0;e1&&r.push(i([0,0],n[n.length-1])),t.setTo(r)}},function(t,e,i){var n=i(58),s=i(59);t.exports=function(t){for(var e=t.points,i=0,r=0;rc+v)){var y=g.getPoint((u-c)/v);o.push(y);break}c+=v}return o}},function(t,e,i){var n=i(10);t.exports=function(t,e){void 0===e&&(e=new n);for(var i,s=1/0,r=1/0,o=-s,a=-r,h=0;h0&&(s=-h.PI2+s%h.PI2):s>h.PI2?s=h.PI2:s<0&&(s=h.PI2+s%h.PI2);for(var u,c=[a+Math.cos(n)*i,l+Math.sin(n)*i];e<1;)u=s*e+n,c.push(a+Math.cos(u)*i,l+Math.sin(u)*i),e+=t;return u=s+n,c.push(a+Math.cos(u)*i,l+Math.sin(u)*i),c.push(a+Math.cos(n)*i,l+Math.sin(n)*i),this.pathIndexes=o(c),this.pathData=c,this}});t.exports=u},function(t,e){t.exports=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var e=16*Math.random()|0;return("x"===t?e:3&e|8).toString(16)})}},function(t,e,i){var n=i(0),s=i(34),r=i(90),o=i(4),a=i(67),h=i(89),l=i(3),u=new n({Extends:a,initialize:function(t,e,i,n,s,r){a.call(this,t,i,n,s,r),this.path=e,this.rotateToPath=!1,this.pathRotationOffset=0,this.pathOffset=new l(i,n),this.pathVector=new l,this.pathTween,this.pathConfig=null,this._prevDirection=h.PLAYING_FORWARD},setPath:function(t,e){void 0===e&&(e=this.pathConfig);var i=this.pathTween;return i&&i.isPlaying()&&i.stop(),this.path=t,e&&this.startFollow(e),this},setRotateToPath:function(t,e){return void 0===e&&(e=0),this.rotateToPath=t,this.pathRotationOffset=e,this},isFollowing:function(){var t=this.pathTween;return t&&t.isPlaying()},startFollow:function(t,e){void 0===t&&(t={}),void 0===e&&(e=0);var i=this.pathTween;i&&i.isPlaying()&&i.stop(),"number"==typeof t&&(t={duration:t}),t.from=0,t.to=1;var n=r(t,"positionOnPath",!1);this.rotateToPath=r(t,"rotateToPath",!1),this.pathRotationOffset=o(t,"rotationOffset",0);var a=o(t,"startAt",e);if(a&&(t.onStart=function(t){var e=t.data[0];e.progress=a,e.elapsed=e.duration*a;var i=e.ease(e.progress);e.current=e.start+(e.end-e.start)*i,e.target[e.key]=e.current}),this.pathTween=this.scene.sys.tweens.addCounter(t),this.path.getStartPoint(this.pathOffset),n&&(this.x=this.pathOffset.x,this.y=this.pathOffset.y),this.pathOffset.x=this.x-this.pathOffset.x,this.pathOffset.y=this.y-this.pathOffset.y,this._prevDirection=h.PLAYING_FORWARD,this.rotateToPath){var l=this.path.getPoint(.1);this.rotation=Math.atan2(l.y-this.y,l.x-this.x)+s(this.pathRotationOffset)}return this.pathConfig=t,this},pauseFollow:function(){var t=this.pathTween;return t&&t.isPlaying()&&t.pause(),this},resumeFollow:function(){var t=this.pathTween;return t&&t.isPaused()&&t.resume(),this},stopFollow:function(){var t=this.pathTween;return t&&t.isPlaying()&&t.stop(),this},preUpdate:function(t,e){this.anims.update(t,e);var i=this.pathTween;if(i){var n=i.data[0];if(n.state!==h.PLAYING_FORWARD&&n.state!==h.PLAYING_BACKWARD)return;var r=this.pathVector;this.path.getPoint(i.getValue(),r),r.add(this.pathOffset);var o=this.x,a=this.y;this.setPosition(r.x,r.y);var l=this.x-o,u=this.y-a;if(0===l&&0===u)return;if(n.state!==this._prevDirection)return void(this._prevDirection=n.state);this.rotateToPath&&(this.rotation=Math.atan2(u,l)+s(this.pathRotationOffset))}}});t.exports=u},function(t,e,i){var n=i(0),s=i(3),r=new n({initialize:function(t){this.source=t,this._tempVec=new s},getPoint:function(t){var e=this._tempVec;this.source.getRandomPoint(e),t.x=e.x,t.y=e.y}});t.exports=r},function(t,e){t.exports=function(t,e){for(var i=0;ithis._length&&(this.counter=this._length-1),this},changeSource:function(t){return this.source=t,this.updateSource()},getPoint:function(t){0===this._direction?(this.counter++,this.counter>=this._length&&(this.yoyo?(this._direction=1,this.counter=this._length-1):this.counter=0)):(this.counter--,-1===this.counter&&(this.yoyo?(this._direction=0,this.counter=0):this.counter=this._length-1));var e=this.points[this.counter];e&&(t.x=e.x,t.y=e.y)}});t.exports=n},function(t,e,i){var n=new(i(0))({initialize:function(t,e){this.source=t,this.killOnEnter=e},willKill:function(t){var e=this.source.contains(t.x,t.y);return e&&this.killOnEnter||!e&&!this.killOnEnter}});t.exports=n},function(t,e,i){var n=i(60),s=i(0),r=i(13),o=i(304),a=i(303),h=i(845),l=i(2),u=i(172),c=i(302),d=i(91),f=i(306),p=i(301),g=i(10),v=i(118),y=i(3),m=i(57),x=new s({Mixins:[r.BlendMode,r.Mask,r.ScrollFactor,r.Visible],initialize:function(t,e){this.manager=t,this.texture=t.texture,this.frames=[t.defaultFrame],this.defaultFrame=t.defaultFrame,this.configFastMap=["active","blendMode","collideBottom","collideLeft","collideRight","collideTop","deathCallback","deathCallbackScope","emitCallback","emitCallbackScope","follow","frequency","gravityX","gravityY","maxParticles","name","on","particleBringToTop","particleClass","radial","timeScale","trackVisible","visible"],this.configOpMap=["accelerationX","accelerationY","angle","alpha","bounce","delay","lifespan","maxVelocityX","maxVelocityY","moveToX","moveToY","quantity","rotate","scaleX","scaleY","speedX","speedY","tint","x","y"],this.name="",this.particleClass=f,this.x=new h(e,"x",0),this.y=new h(e,"y",0),this.radial=!0,this.gravityX=0,this.gravityY=0,this.acceleration=!1,this.accelerationX=new h(e,"accelerationX",0,!0),this.accelerationY=new h(e,"accelerationY",0,!0),this.maxVelocityX=new h(e,"maxVelocityX",1e4,!0),this.maxVelocityY=new h(e,"maxVelocityY",1e4,!0),this.speedX=new h(e,"speedX",0,!0),this.speedY=new h(e,"speedY",0,!0),this.moveTo=!1,this.moveToX=new h(e,"moveToX",0,!0),this.moveToY=new h(e,"moveToY",0,!0),this.bounce=new h(e,"bounce",0,!0),this.scaleX=new h(e,"scaleX",1),this.scaleY=new h(e,"scaleY",1),this.tint=new h(e,"tint",4294967295),this.alpha=new h(e,"alpha",1),this.lifespan=new h(e,"lifespan",1e3),this.angle=new h(e,"angle",{min:0,max:360}),this.rotate=new h(e,"rotate",0),this.emitCallback=null,this.emitCallbackScope=null,this.deathCallback=null,this.deathCallbackScope=null,this.maxParticles=0,this.quantity=new h(e,"quantity",1,!0),this.delay=new h(e,"delay",0,!0),this.frequency=0,this.on=!0,this.particleBringToTop=!0,this.timeScale=1,this.emitZone=null,this.deathZone=null,this.bounds=null,this.collideLeft=!0,this.collideRight=!0,this.collideTop=!0,this.collideBottom=!0,this.active=!0,this.visible=!0,this.blendMode=n.NORMAL,this.follow=null,this.followOffset=new y,this.trackVisible=!1,this.currentFrame=0,this.randomFrame=!0,this.frameQuantity=1,this.dead=[],this.alive=[],this._counter=0,this._frameCounter=0,e&&this.fromJSON(e)},fromJSON:function(t){if(!t)return this;var e=0,i="";for(e=0;e0&&this.getParticleCount()===this.maxParticles},onParticleEmit:function(t,e){return void 0===t?(this.emitCallback=null,this.emitCallbackScope=null):"function"==typeof t&&(this.emitCallback=t,e&&(this.emitCallbackScope=e)),this},onParticleDeath:function(t,e){return void 0===t?(this.deathCallback=null,this.deathCallbackScope=null):"function"==typeof t&&(this.deathCallback=t,e&&(this.deathCallbackScope=e)),this},killAll:function(){for(var t=this.dead,e=this.alive;e.length>0;)t.push(e.pop());return this},forEachAlive:function(t,e){for(var i=this.alive,n=i.length,s=0;s0){var u=this.deathCallback,c=this.deathCallbackScope;for(o=h-1;o>=0;o--){var d=a[o];s.splice(d.index,1),r.push(d.particle),u&&u.call(c,d.particle),d.particle.resetPosition()}}this.on&&(0===this.frequency?this.emitParticle():this.frequency>0&&(this._counter-=e,this._counter<=0&&(this.emitParticle(),this._counter=this.frequency-Math.abs(this._counter))))},depthSortCallback:function(t,e){return t.y-e.y}});t.exports=x},function(t,e,i){var n=i(0),s=i(34),r=i(56),o=new n({initialize:function(t){this.emitter=t,this.frame=null,this.x=0,this.y=0,this.velocityX=0,this.velocityY=0,this.accelerationX=0,this.accelerationY=0,this.maxVelocityX=1e4,this.maxVelocityY=1e4,this.bounce=0,this.scaleX=1,this.scaleY=1,this.alpha=1,this.angle=0,this.rotation=0,this.tint=16777215,this.life=1e3,this.lifeCurrent=1e3,this.delayCurrent=0,this.lifeT=0,this.data={tint:{min:16777215,max:16777215,current:16777215},alpha:{min:1,max:1},rotate:{min:0,max:0},scaleX:{min:1,max:1},scaleY:{min:1,max:1}}},isAlive:function(){return this.lifeCurrent>0},resetPosition:function(){this.x=0,this.y=0},fire:function(t,e){var i=this.emitter;this.frame=i.getFrame(),i.emitZone&&i.emitZone.getPoint(this),void 0===t?(i.follow&&(this.x+=i.follow.x+i.followOffset.x),this.x+=i.x.onEmit(this,"x")):this.x+=t,void 0===e?(i.follow&&(this.y+=i.follow.y+i.followOffset.y),this.y+=i.y.onEmit(this,"y")):this.y+=e,this.life=i.lifespan.onEmit(this,"lifespan"),this.lifeCurrent=this.life,this.lifeT=0;var n=i.speedX.onEmit(this,"speedX"),o=i.speedY?i.speedY.onEmit(this,"speedY"):n;if(i.radial){var a=s(i.angle.onEmit(this,"angle"));this.velocityX=Math.cos(a)*Math.abs(n),this.velocityY=Math.sin(a)*Math.abs(o)}else if(i.moveTo){var h=i.moveToX.onEmit(this,"moveToX"),l=i.moveToY?i.moveToY.onEmit(this,"moveToY"):h,u=Math.atan2(l-this.y,h-this.x),c=r(this.x,this.y,h,l)/(this.life/1e3);this.velocityX=Math.cos(u)*c,this.velocityY=Math.sin(u)*c}else this.velocityX=n,this.velocityY=o;i.acceleration&&(this.accelerationX=i.accelerationX.onEmit(this,"accelerationX"),this.accelerationY=i.accelerationY.onEmit(this,"accelerationY")),this.maxVelocityX=i.maxVelocityX.onEmit(this,"maxVelocityX"),this.maxVelocityY=i.maxVelocityY.onEmit(this,"maxVelocityY"),this.delayCurrent=i.delay.onEmit(this,"delay"),this.scaleX=i.scaleX.onEmit(this,"scaleX"),this.scaleY=i.scaleY?i.scaleY.onEmit(this,"scaleY"):this.scaleX,this.angle=i.rotate.onEmit(this,"rotate"),this.rotation=s(this.angle),this.bounce=i.bounce.onEmit(this,"bounce"),this.alpha=i.alpha.onEmit(this,"alpha"),this.tint=i.tint.onEmit(this,"tint")},computeVelocity:function(t,e,i,n){var s=this.velocityX,r=this.velocityY,o=this.accelerationX,a=this.accelerationY,h=this.maxVelocityX,l=this.maxVelocityY;s+=t.gravityX*i,r+=t.gravityY*i,o&&(s+=o*i),a&&(r+=a*i),s>h?s=h:s<-h&&(s=-h),r>l?r=l:r<-l&&(r=-l),this.velocityX=s,this.velocityY=r;for(var u=0;ue.right&&t.collideRight&&(this.x=e.right,this.velocityX*=i),this.ye.bottom&&t.collideBottom&&(this.y=e.bottom,this.velocityY*=i)},update:function(t,e,i){if(this.delayCurrent>0)return this.delayCurrent-=t,!1;var n=this.emitter,r=1-this.lifeCurrent/this.life;return this.lifeT=r,this.computeVelocity(n,t,e,i),this.x+=this.velocityX*e,this.y+=this.velocityY*e,n.bounds&&this.checkBounds(n),n.deathZone&&n.deathZone.willKill(this)?(this.lifeCurrent=0,!0):(this.scaleX=n.scaleX.onUpdate(this,"scaleX",r,this.scaleX),n.scaleY?this.scaleY=n.scaleY.onUpdate(this,"scaleY",r,this.scaleY):this.scaleY=this.scaleX,this.angle=n.rotate.onUpdate(this,"rotate",r,this.angle),this.rotation=s(this.angle),this.alpha=n.alpha.onUpdate(this,"alpha",r,this.alpha),this.tint=n.tint.onUpdate(this,"tint",r,this.tint),this.lifeCurrent-=t,this.lifeCurrent<=0)}});t.exports=o},function(t,e,i){var n=i(0),s=i(2),r=new n({initialize:function(t,e,i,n,r){if("object"==typeof t){var o=t;t=s(o,"x",0),e=s(o,"y",0),i=s(o,"power",0),n=s(o,"epsilon",100),r=s(o,"gravity",50)}else void 0===t&&(t=0),void 0===e&&(e=0),void 0===i&&(i=0),void 0===n&&(n=100),void 0===r&&(r=50);this.x=t,this.y=e,this.active=!0,this._gravity=r,this._power=0,this._epsilon=0,this.power=i,this.epsilon=n},update:function(t,e){var i=this.x-t.x,n=this.y-t.y,s=i*i+n*n;if(0!==s){var r=Math.sqrt(s);s>>16,m=(65280&p)>>>8,x=255&p,c.strokeStyle="rgba("+y+","+m+","+x+","+d+")",c.lineWidth=v,T+=3;break;case n.FILL_STYLE:g=l[T+1],f=l[T+2],y=(16711680&g)>>>16,m=(65280&g)>>>8,x=255&g,c.fillStyle="rgba("+y+","+m+","+x+","+f+")",T+=2;break;case n.BEGIN_PATH:c.beginPath();break;case n.CLOSE_PATH:c.closePath();break;case n.FILL_PATH:h||c.fill();break;case n.STROKE_PATH:h||c.stroke();break;case n.FILL_RECT:h?c.rect(l[T+1],l[T+2],l[T+3],l[T+4]):c.fillRect(l[T+1],l[T+2],l[T+3],l[T+4]),T+=4;break;case n.FILL_TRIANGLE:c.beginPath(),c.moveTo(l[T+1],l[T+2]),c.lineTo(l[T+3],l[T+4]),c.lineTo(l[T+5],l[T+6]),c.closePath(),h||c.fill(),T+=6;break;case n.STROKE_TRIANGLE:c.beginPath(),c.moveTo(l[T+1],l[T+2]),c.lineTo(l[T+3],l[T+4]),c.lineTo(l[T+5],l[T+6]),c.closePath(),h||c.stroke(),T+=6;break;case n.LINE_TO:c.lineTo(l[T+1],l[T+2]),T+=2;break;case n.MOVE_TO:c.moveTo(l[T+1],l[T+2]),T+=2;break;case n.LINE_FX_TO:c.lineTo(l[T+1],l[T+2]),T+=5;break;case n.MOVE_FX_TO:c.moveTo(l[T+1],l[T+2]),T+=5;break;case n.SAVE:c.save();break;case n.RESTORE:c.restore();break;case n.TRANSLATE:c.translate(l[T+1],l[T+2]),T+=2;break;case n.SCALE:c.scale(l[T+1],l[T+2]),T+=2;break;case n.ROTATE:c.rotate(l[T+1]),T+=1;break;case n.GRADIENT_FILL_STYLE:T+=5;break;case n.GRADIENT_LINE_STYLE:T+=6;break;case n.SET_TEXTURE:T+=2}c.restore()}}},function(t,e){t.exports=function(t){var e=t.width/2,i=t.height/2,n=Math.pow(e-i,2)/Math.pow(e+i,2);return Math.PI*(e+i)*(1+3*n/(10+Math.sqrt(4-3*n)))}},function(t,e,i){var n=i(309),s=i(166),r=i(100),o=i(20);t.exports=function(t,e,i,a){void 0===a&&(a=[]),e||(e=n(t)/i);for(var h=0;h0?s.delayedPlay(d,r,o):s.load(r)}return t}},function(t,e,i){var n=i(4),s=i(132),r=function(t,e,i){for(var n=[],s=0;se?1:0}var s=function(t,e,r,o,a){for(void 0===r&&(r=0),void 0===o&&(o=t.length-1),void 0===a&&(a=n);o>r;){if(o-r>600){var h=o-r+1,l=e-r+1,u=Math.log(h),c=.5*Math.exp(2*u/3),d=.5*Math.sqrt(u*c*(h-c)/h)*(l-h/2<0?-1:1),f=Math.max(r,Math.floor(e-l*c/h+d)),p=Math.min(o,Math.floor(e+(h-l)*c/h+d));s(t,e,f,p,a)}var g=t[e],v=r,y=o;for(i(t,r,e),a(t[o],g)>0&&i(t,r,o);v0;)y--}0===a(t[r],g)?i(t,r,y):i(t,++y,o),y<=e&&(r=y+1),e<=y&&(o=y-1)}};t.exports=s},function(t,e){t.exports=function(t){for(var e=t.length,i=t[0].length,n=new Array(i),s=0;s-1;r--)n[s][r]=t[r][s]}return n}},function(t,e,i){t.exports={AtlasXML:i(910),Canvas:i(909),Image:i(908),JSONArray:i(907),JSONHash:i(906),SpriteSheet:i(905),SpriteSheetFromAtlas:i(904),UnityYAML:i(903)}},function(t,e,i){var n=i(24),s=i(0),r=i(127),o=i(101),a=new s({initialize:function(t,e,i,n){var s=t.manager.game;this.renderer=s.renderer,this.texture=t,this.source=e,this.image=e,this.compressionAlgorithm=null,this.resolution=1,this.width=i||e.naturalWidth||e.width||0,this.height=n||e.naturalHeight||e.height||0,this.scaleMode=o.DEFAULT,this.isCanvas=e instanceof HTMLCanvasElement,this.isRenderTexture="RenderTexture"===e.type,this.isPowerOf2=r(this.width,this.height),this.glTexture=null,this.init(s)},init:function(t){this.renderer&&(this.renderer.gl?this.isCanvas?this.glTexture=this.renderer.canvasToTexture(this.image):this.isRenderTexture?(this.image=this.source.canvas,this.glTexture=this.renderer.createTextureFromSource(null,this.width,this.height,this.scaleMode)):this.glTexture=this.renderer.createTextureFromSource(this.image,this.width,this.height,this.scaleMode):this.isRenderTexture&&(this.image=this.source.canvas)),t.config.antialias||this.setFilter(1)},setFilter:function(t){this.renderer.gl&&this.renderer.setTextureFilter(this.glTexture,t)},update:function(){this.renderer.gl&&this.isCanvas&&(this.glTexture=this.renderer.canvasToTexture(this.image,this.glTexture))},destroy:function(){this.glTexture&&this.renderer.deleteTexture(this.glTexture),this.isCanvas&&n.remove(this.image),this.renderer=null,this.texture=null,this.source=null,this.image=null,this.glTexture=null}});t.exports=a},function(t,e,i){var n=i(24),s=i(911),r=i(0),o=i(32),a=i(28),h=i(11),l=i(126),u=i(26),c=i(361),d=i(4),f=i(319),p=i(175),g=new r({Extends:h,initialize:function(t){h.call(this),this.game=t,this.name="TextureManager",this.list={},this._tempCanvas=n.create2D(this,1,1),this._tempContext=this._tempCanvas.getContext("2d"),this._pending=0,t.events.once(u.BOOT,this.boot,this)},boot:function(){this._pending=2,this.on(l.LOAD,this.updatePending,this),this.on(l.ERROR,this.updatePending,this),this.addBase64("__DEFAULT",this.game.config.defaultImage),this.addBase64("__MISSING",this.game.config.missingImage),this.game.events.once(u.DESTROY,this.destroy,this)},updatePending:function(){this._pending--,0===this._pending&&(this.off(l.LOAD),this.off(l.ERROR),this.emit(l.READY))},checkKey:function(t){return!this.exists(t)||(console.error("Texture key already in use: "+t),!1)},remove:function(t){if("string"==typeof t){if(!this.exists(t))return console.warn("No texture found matching key: "+t),this;t=this.get(t)}return this.list.hasOwnProperty(t.key)&&(delete this.list[t.key],t.destroy(),this.emit(l.REMOVE,t.key)),this},addBase64:function(t,e){if(this.checkKey(t)){var i=this,n=new Image;n.onerror=function(){i.emit(l.ERROR,t)},n.onload=function(){var e=i.create(t,n);f.Image(e,0),i.emit(l.ADD,t,e),i.emit(l.LOAD,t,e)},n.src=e}return this},getBase64:function(t,e,i,s){void 0===i&&(i="image/png"),void 0===s&&(s=.92);var r="",o=this.getFrame(t,e);if(o){var a=o.canvasData,h=n.create2D(this,a.width,a.height);h.getContext("2d").drawImage(o.source.image,a.x,a.y,a.width,a.height,0,0,a.width,a.height),r=h.toDataURL(i,s),n.remove(h)}return r},addImage:function(t,e,i){var n=null;return this.checkKey(t)&&(n=this.create(t,e),f.Image(n,0),i&&n.setDataSource(i),this.emit(l.ADD,t,n)),n},addRenderTexture:function(t,e){var i=null;return this.checkKey(t)&&((i=this.create(t,e)).add("__BASE",0,0,0,e.width,e.height),this.emit(l.ADD,t,i)),i},generate:function(t,e){if(this.checkKey(t)){var i=n.create(this,1,1);return e.canvas=i,c(e),this.addCanvas(t,i)}return null},createCanvas:function(t,e,i){if(void 0===e&&(e=256),void 0===i&&(i=256),this.checkKey(t)){var s=n.create(this,e,i,a.CANVAS,!0);return this.addCanvas(t,s)}return null},addCanvas:function(t,e,i){void 0===i&&(i=!1);var n=null;return i?n=new s(this,t,e,e.width,e.height):this.checkKey(t)&&(n=new s(this,t,e,e.width,e.height),this.list[t]=n,this.emit(l.ADD,t,n)),n},addAtlas:function(t,e,i,n){return Array.isArray(i.textures)||Array.isArray(i.frames)?this.addAtlasJSONArray(t,e,i,n):this.addAtlasJSONHash(t,e,i,n)},addAtlasJSONArray:function(t,e,i,n){var s=null;if(this.checkKey(t)){if(s=this.create(t,e),Array.isArray(i))for(var r=1===i.length,o=0;o=r.x&&t=r.y&&e=r.x&&t=r.y&&e0)&&(!!n.prototype.pause.call(this)&&(this.currentConfig.seek=this.audio.currentTime-(this.currentMarker?this.currentMarker.start:0),this.stopAndReleaseAudioTag(),this.emit(r.PAUSE,this),!0)))},resume:function(){return!this.manager.isLocked(this,"resume")&&(!(this.startTime>0)&&(!!n.prototype.resume.call(this)&&(!!this.pickAndPlayAudioTag()&&(this.emit(r.RESUME,this),!0))))},stop:function(){return!this.manager.isLocked(this,"stop")&&(!!n.prototype.stop.call(this)&&(this.stopAndReleaseAudioTag(),this.emit(r.STOP,this),!0))},pickAndPlayAudioTag:function(){if(!this.pickAudioTag())return this.reset(),!1;var t=this.currentConfig.seek,e=this.currentConfig.delay,i=(this.currentMarker?this.currentMarker.start:0)+t;return this.previousTime=i,this.audio.currentTime=i,this.applyConfig(),0===e?(this.startTime=0,this.audio.paused&&this.playCatchPromise()):(this.startTime=window.performance.now()+1e3*e,this.audio.paused||this.audio.pause()),this.resetConfig(),!0},pickAudioTag:function(){if(this.audio)return!0;for(var t=0;t0)this.startTime=n-this.manager.loopEndOffset?(this.audio.currentTime=i+Math.max(0,s-n),s=this.audio.currentTime):s=n)return this.reset(),this.stopAndReleaseAudioTag(),void this.emit(r.COMPLETE,this);this.previousTime=s}},destroy:function(){n.prototype.destroy.call(this),this.tags=null,this.audio&&this.stopAndReleaseAudioTag()},updateMute:function(){this.audio&&(this.audio.muted=this.currentConfig.mute||this.manager.mute)},updateVolume:function(){this.audio&&(this.audio.volume=this.currentConfig.volume*this.manager.volume)},calculateRate:function(){n.prototype.calculateRate.call(this),this.audio&&(this.audio.playbackRate=this.totalRate)},mute:{get:function(){return this.currentConfig.mute},set:function(t){this.currentConfig.mute=t,this.manager.isLocked(this,"mute",t)||(this.updateMute(),this.emit(r.MUTE,this,t))}},setMute:function(t){return this.mute=t,this},volume:{get:function(){return this.currentConfig.volume},set:function(t){this.currentConfig.volume=t,this.manager.isLocked(this,"volume",t)||(this.updateVolume(),this.emit(r.VOLUME,this,t))}},setVolume:function(t){return this.volume=t,this},rate:{get:function(){return this.currentConfig.rate},set:function(t){this.currentConfig.rate=t,this.manager.isLocked(this,r.RATE,t)||(this.calculateRate(),this.emit(r.RATE,this,t))}},setRate:function(t){return this.rate=t,this},detune:{get:function(){return this.currentConfig.detune},set:function(t){this.currentConfig.detune=t,this.manager.isLocked(this,r.DETUNE,t)||(this.calculateRate(),this.emit(r.DETUNE,this,t))}},setDetune:function(t){return this.detune=t,this},seek:{get:function(){return this.isPlaying?this.audio.currentTime-(this.currentMarker?this.currentMarker.start:0):this.isPaused?this.currentConfig.seek:0},set:function(t){this.manager.isLocked(this,"seek",t)||this.startTime>0||(this.isPlaying||this.isPaused)&&(t=Math.min(Math.max(0,t),this.duration),this.isPlaying?(this.previousTime=t,this.audio.currentTime=t):this.isPaused&&(this.currentConfig.seek=t),this.emit(r.SEEK,this,t))}},setSeek:function(t){return this.seek=t,this},loop:{get:function(){return this.currentConfig.loop},set:function(t){this.currentConfig.loop=t,this.manager.isLocked(this,"loop",t)||(this.audio&&(this.audio.loop=t),this.emit(r.LOOP,this,t))}},setLoop:function(t){return this.loop=t,this}});t.exports=o},function(t,e,i){var n=i(123),s=i(0),r=i(69),o=i(326),a=new s({Extends:n,initialize:function(t){this.override=!0,this.audioPlayDelay=.1,this.loopEndOffset=.05,this.onBlurPausedSounds=[],this.locked="ontouchstart"in window,this.lockedActionsQueue=this.locked?[]:null,this._mute=!1,this._volume=1,n.call(this,t)},add:function(t,e){var i=new o(this,t,e);return this.sounds.push(i),i},unlock:function(){this.locked=!1;var t=this;if(this.game.cache.audio.entries.each(function(e,i){for(var n=0;n-1&&(delete this.keys[n],this.scenes.splice(i,1),this._start.indexOf(n)>-1&&(i=this._start.indexOf(n),this._start.splice(i,1)),e.sys.destroy())}return this},bootScene:function(t){var e,i=t.sys,n=i.settings;t.init&&(t.init.call(t,n.data),n.status=s.INIT,n.isTransition&&i.events.emit(r.TRANSITION_INIT,n.transitionFrom,n.transitionDuration)),i.load&&(e=i.load).reset(),e&&t.preload?(t.preload.call(t),0===e.list.size?this.create(t):(n.status=s.LOADING,e.once(h.COMPLETE,this.loadComplete,this),e.start())):this.create(t)},loadComplete:function(t){var e=t.scene;this.game.sound.onBlurPausedSounds&&this.game.sound.unlock(),this.create(e)},payloadComplete:function(t){this.bootScene(t.scene)},update:function(t,e){this.processQueue(),this.isProcessing=!0;for(var i=this.scenes.length-1;i>=0;i--){var n=this.scenes[i].sys;n.settings.status>s.START&&n.settings.status<=s.RUNNING&&n.step(t,e)}},render:function(t){for(var e=0;e=s.LOADING&&i.settings.status0){var i=this.getScene(t);this.scenes.splice(e,1),this.scenes.unshift(i)}}return this},moveDown:function(t){if(this.isProcessing)this._queue.push({op:"moveDown",keyA:t,keyB:null});else{var e=this.getIndex(t);if(e>0){var i=e-1,n=this.getScene(t),s=this.getAt(i);this.scenes[e]=s,this.scenes[i]=n}}return this},moveUp:function(t){if(this.isProcessing)this._queue.push({op:"moveUp",keyA:t,keyB:null});else{var e=this.getIndex(t);if(ethis._parent.width&&(t=Math.max(this.minWidth,this._parent.width)),t},getNewHeight:function(t,e){return void 0===e&&(e=!0),t=n(t,this.minHeight,this.maxHeight),e&&this._parent&&t>this._parent.height&&(t=Math.max(this.minHeight,this._parent.height)),t},constrain:function(t,e,i){void 0===t&&(t=0),void 0===e&&(e=t),void 0===i&&(i=!0),t=this.getNewWidth(t),e=this.getNewHeight(e);var n=this.snapTo,s=0===e?1:t/e;return i&&this.aspectRatio>s||!i&&this.aspectRatio0&&(t=(e=r(e,n.y))*this.aspectRatio)):(i&&this.aspectRatios)&&(t=(e=r(e,n.y))*this.aspectRatio,n.x>0&&(e=(t=r(t,n.x))*(1/this.aspectRatio))),this._width=t,this._height=e,this},fitTo:function(t,e){return this.constrain(t,e,!0)},envelop:function(t,e){return this.constrain(t,e,!1)},setWidth:function(t){return this.setSize(t,this._height)},setHeight:function(t){return this.setSize(this._width,t)},toString:function(){return"[{ Size (width="+this._width+" height="+this._height+" aspectRatio="+this.aspectRatio+" aspectMode="+this.aspectMode+") }]"},copy:function(t){return t.setAspectMode(this.aspectMode),t.aspectRatio=this.aspectRatio,t.setSize(this.width,this.height)},destroy:function(){this._parent=null,this.snapTo=null},width:{get:function(){return this._width},set:function(t){this.setSize(t,this._height)}},height:{get:function(){return this._height},set:function(t){this.setSize(this._width,t)}}});a.NONE=0,a.WIDTH_CONTROLS_HEIGHT=1,a.HEIGHT_CONTROLS_WIDTH=2,a.FIT=3,a.ENVELOP=4,t.exports=a},function(t,e,i){t.exports={ENTER_FULLSCREEN:i(951),FULLSCREEN_UNSUPPORTED:i(950),LEAVE_FULLSCREEN:i(949),ORIENTATION_CHANGE:i(948),RESIZE:i(947)}},function(t,e,i){var n=i(178),s=i(0),r=i(11),o=i(334),a=i(26),h=i(946),l=i(345),u=i(350),c=i(1),d=i(10),f=i(333),p=i(98),g=i(3),v=new s({Extends:r,initialize:function(t){r.call(this),this.game=t,this.canvas,this.canvasBounds=new d,this.parent=null,this.parentIsWindow=!1,this.parentSize=new f,this.gameSize=new f,this.baseSize=new f,this.displaySize=new f,this.scaleMode=n.SCALE_MODE.NONE,this.resolution=1,this.zoom=1,this.displayScale=new g(1,1),this.autoRound=!1,this.autoCenter=n.CENTER.NO_CENTER,this.orientation=n.ORIENTATION.LANDSCAPE,this.fullscreen,this.fullscreenTarget=null,this._createdFullscreenTarget=!1,this.dirty=!1,this.resizeInterval=500,this._lastCheck=0,this._checkOrientation=!1,this.listeners={orientationChange:c,windowResize:c,fullScreenChange:c,fullScreenError:c}},preBoot:function(){this.parseConfig(this.game.config),this.game.events.once("boot",this.boot,this)},boot:function(){var t=this.game;this.canvas=t.canvas,this.fullscreen=t.device.fullscreen,this.scaleMode!==n.SCALE_MODE.RESIZE&&this.displaySize.setAspectMode(this.scaleMode),this.scaleMode===n.SCALE_MODE.NONE?this.resize(this.width,this.height):(this.getParentBounds(),this.parentSize.width>0&&this.parentSize.height>0&&this.displaySize.setParent(this.parentSize),this.refresh()),t.events.on(a.PRE_STEP,this.step,this),this.startListeners()},parseConfig:function(t){this.getParent(t),this.getParentBounds();var e=t.width,i=t.height,s=t.scaleMode,r=t.resolution,o=t.zoom,a=t.autoRound;if("string"==typeof e){var h=this.parentSize.width;0===h&&(h=window.innerWidth);var l=parseInt(e,10)/100;e=Math.floor(h*l)}if("string"==typeof i){var c=this.parentSize.height;0===c&&(c=window.innerHeight);var d=parseInt(i,10)/100;i=Math.floor(c*d)}this.resolution=1,this.scaleMode=s,this.autoRound=a,this.autoCenter=t.autoCenter,this.resizeInterval=t.resizeInterval,a&&(e=Math.floor(e),i=Math.floor(i)),this.gameSize.setSize(e,i),o===n.ZOOM.MAX_ZOOM&&(o=this.getMaxZoom()),this.zoom=o,this.baseSize.setSize(e*r,i*r),a&&(this.baseSize.width=Math.floor(this.baseSize.width),this.baseSize.height=Math.floor(this.baseSize.height)),t.minWidth>0&&this.displaySize.setMin(t.minWidth*o,t.minHeight*o),t.maxWidth>0&&this.displaySize.setMax(t.maxWidth*o,t.maxHeight*o),this.displaySize.setSize(e,i),this.orientation=u(e,i)},getParent:function(t){var e=t.parent;if(null!==e){if(this.parent=l(e),this.parentIsWindow=this.parent===document.body,t.expandParent&&t.scaleMode!==n.SCALE_MODE.NONE){var i=this.parent.getBoundingClientRect();(this.parentIsWindow||0===i.height)&&(document.documentElement.style.height="100%",document.body.style.height="100%",i=this.parent.getBoundingClientRect(),this.parentIsWindow||0!==i.height||(this.parent.style.overflow="hidden",this.parent.style.width="100%",this.parent.style.height="100%"))}t.fullscreenTarget&&!this.fullscreenTarget&&(this.fullscreenTarget=l(t.fullscreenTarget))}},getParentBounds:function(){if(!this.parent)return!1;var t=this.parentSize,e=this.parent.getBoundingClientRect();this.parentIsWindow&&this.game.device.os.iOS&&(e.height=h(!0));var i=this.resolution,n=e.width*i,s=e.height*i;return(t.width!==n||t.height!==s)&&(t.setSize(n,s),!0)},lockOrientation:function(t){var e=screen.lockOrientation||screen.mozLockOrientation||screen.msLockOrientation;return!!e&&e(t)},setParentSize:function(t,e){return this.parentSize.setSize(t,e),this.refresh()},setGameSize:function(t,e){var i=this.autoRound,n=this.resolution;return i&&(t=Math.floor(t),e=Math.floor(e)),this.gameSize.resize(t,e),this.baseSize.resize(t*n,e*n),this.updateBounds(),this.displayScale.set(t/this.canvasBounds.width,e/this.canvasBounds.height),this.emit(o.RESIZE,this.gameSize,this.baseSize,this.displaySize,this.resolution),this.updateOrientation(),this.refresh()},resize:function(t,e){var i=this.zoom,n=this.resolution,s=this.autoRound;s&&(t=Math.floor(t),e=Math.floor(e)),this.gameSize.resize(t,e),this.baseSize.resize(t*n,e*n),this.displaySize.setSize(t*i*n,e*i*n),this.canvas.width=this.baseSize.width,this.canvas.height=this.baseSize.height;var r=this.canvas.style,a=t*i,h=e*i;return s&&(a=Math.floor(a),h=Math.floor(h)),a===t&&h===e||(r.width=a+"px",r.height=h+"px"),this.getParentBounds(),this.updateCenter(),this.updateBounds(),this.displayScale.set(t/this.canvasBounds.width,e/this.canvasBounds.height),this.emit(o.RESIZE,this.gameSize,this.baseSize,this.displaySize,this.resolution),this.updateOrientation(),this},setZoom:function(t){return this.zoom=t,this.refresh()},setMaxZoom:function(){return this.zoom=this.getMaxZoom(),this.refresh()},refresh:function(){return this.updateScale(),this.updateBounds(),this.updateOrientation(),this.displayScale.set(this.baseSize.width/this.canvasBounds.width,this.baseSize.height/this.canvasBounds.height),this.emit(o.RESIZE,this.gameSize,this.baseSize,this.displaySize,this.resolution),this},updateOrientation:function(){if(this._checkOrientation){this._checkOrientation=!1;var t=u(this.width,this.height);t!==this.orientation&&(this.orientation=t,this.emit(o.ORIENTATION_CHANGE,t))}},updateScale:function(){var t,e,i=this.canvas.style,s=this.gameSize.width,r=this.gameSize.height,o=this.zoom,a=this.autoRound;this.scaleMode===n.SCALE_MODE.NONE?(this.displaySize.setSize(s*o*1,r*o*1),t=this.displaySize.width/1,e=this.displaySize.height/1,a&&(t=Math.floor(t),e=Math.floor(e)),o>1&&(i.width=t+"px",i.height=e+"px")):this.scaleMode===n.SCALE_MODE.RESIZE?(this.displaySize.setSize(this.parentSize.width,this.parentSize.height),this.gameSize.setSize(this.displaySize.width,this.displaySize.height),this.baseSize.setSize(1*this.displaySize.width,1*this.displaySize.height),t=this.displaySize.width/1,e=this.displaySize.height/1,a&&(t=Math.floor(t),e=Math.floor(e)),this.canvas.width=t,this.canvas.height=e):(this.displaySize.setSize(this.parentSize.width,this.parentSize.height),t=this.displaySize.width/1,e=this.displaySize.height/1,a&&(t=Math.floor(t),e=Math.floor(e)),i.width=t+"px",i.height=e+"px"),this.getParentBounds(),this.updateCenter()},getMaxZoom:function(){var t=p(this.parentSize.width,this.gameSize.width,0,!0),e=p(this.parentSize.height,this.gameSize.height,0,!0);return Math.max(Math.min(t,e),1)},updateCenter:function(){var t=this.autoCenter;if(t!==n.CENTER.NO_CENTER){var e=this.canvas,i=e.style,s=e.getBoundingClientRect(),r=s.width,o=s.height,a=Math.floor((this.parentSize.width-r)/2),h=Math.floor((this.parentSize.height-o)/2);t===n.CENTER.CENTER_HORIZONTALLY?h=0:t===n.CENTER.CENTER_VERTICALLY&&(a=0),i.marginLeft=a+"px",i.marginTop=h+"px"}},updateBounds:function(){var t=this.canvasBounds,e=this.canvas.getBoundingClientRect();t.x=e.left+(window.pageXOffset||0)-(document.documentElement.clientLeft||0),t.y=e.top+(window.pageYOffset||0)-(document.documentElement.clientTop||0),t.width=e.width,t.height=e.height},transformX:function(t){return(t-this.canvasBounds.left)*this.displayScale.x},transformY:function(t){return(t-this.canvasBounds.top)*this.displayScale.y},startFullscreen:function(t){void 0===t&&(t={navigationUI:"hide"});var e=this.fullscreen;if(e.available){if(!e.active){var i=this.getFullscreenTarget();e.keyboard?i[e.request](Element.ALLOW_KEYBOARD_INPUT):i[e.request](t),this.getParentBounds(),this.refresh(),this.emit(o.ENTER_FULLSCREEN)}}else this.emit(o.FULLSCREEN_UNSUPPORTED)},getFullscreenTarget:function(){if(!this.fullscreenTarget){var t=document.createElement("div");t.style.margin="0",t.style.padding="0",t.style.width="100%",t.style.height="100%",this.fullscreenTarget=t,this._createdFullscreenTarget=!0}this._createdFullscreenTarget&&(this.canvas.parentNode.insertBefore(this.fullscreenTarget,this.canvas),this.fullscreenTarget.appendChild(this.canvas));return this.fullscreenTarget},stopFullscreen:function(){var t=this.fullscreen;if(!t.available)return this.emit(o.FULLSCREEN_UNSUPPORTED),!1;if(t.active){if(document[t.cancel](),this._createdFullscreenTarget){var e=this.fullscreenTarget;if(e&&e.parentNode){var i=e.parentNode;i.insertBefore(this.canvas,e),i.removeChild(e)}}this.emit(o.LEAVE_FULLSCREEN),this.refresh()}},toggleFullscreen:function(t){this.fullscreen.active?this.stopFullscreen():this.startFullscreen(t)},startListeners:function(){var t=this,e=this.listeners;if(e.orientationChange=function(){t._checkOrientation=!0,t.dirty=!0},e.windowResize=function(){t.dirty=!0},window.addEventListener("orientationchange",e.orientationChange,!1),window.addEventListener("resize",e.windowResize,!1),this.allowFullScreen){e.fullScreenChange=function(e){return t.onFullScreenChange(e)},e.fullScreenError=function(e){return t.onFullScreenError(e)};["webkit","moz",""].forEach(function(t){document.addEventListener(t+"fullscreenchange",e.fullScreenChange,!1),document.addEventListener(t+"fullscreenerror",e.fullScreenError,!1)}),document.addEventListener("MSFullscreenChange",e.fullScreenChange,!1),document.addEventListener("MSFullscreenError",e.fullScreenError,!1)}},onFullScreenChange:function(){},onFullScreenError:function(){},step:function(t,e){this.parent&&(this._lastCheck+=e,(this.dirty||this._lastCheck>this.resizeInterval)&&(this.getParentBounds()&&this.refresh(),this.dirty=!1,this._lastCheck=0))},stopListeners:function(){var t=this.listeners;window.removeEventListener("orientationchange",t.orientationChange,!1),window.removeEventListener("resize",t.windowResize,!1);["webkit","moz",""].forEach(function(e){document.removeEventListener(e+"fullscreenchange",t.fullScreenChange,!1),document.removeEventListener(e+"fullscreenerror",t.fullScreenError,!1)}),document.removeEventListener("MSFullscreenChange",t.fullScreenChange,!1),document.removeEventListener("MSFullscreenError",t.fullScreenError,!1)},destroy:function(){this.removeAllListeners(),this.stopListeners(),this.game=null,this.canvas=null,this.canvasBounds=null,this.parent=null,this.parentSize.destroy(),this.gameSize.destroy(),this.baseSize.destroy(),this.displaySize.destroy(),this.fullscreenTarget=null},isFullscreen:{get:function(){return this.fullscreen.active}},width:{get:function(){return this.gameSize.width}},height:{get:function(){return this.gameSize.height}},isPortrait:{get:function(){return this.orientation===n.ORIENTATION.PORTRAIT}},isLandscape:{get:function(){return this.orientation===n.ORIENTATION.LANDSCAPE}},isGamePortrait:{get:function(){return this.height>this.width}},isGameLandscape:{get:function(){return this.width>this.height}}});t.exports=v},function(t,e,i){var n=i(0),s=i(26),r=i(11),o=i(7),a=i(14),h=i(5),l=i(2),u=i(17),c=i(177),d=new n({Extends:r,initialize:function(t){r.call(this),this.game=t,this.plugins=[],this.scenePlugins=[],this._pendingGlobal=[],this._pendingScene=[],t.isBooted?this.boot():t.events.once(s.BOOT,this.boot,this)},boot:function(){var t,e,i,n,r,o,a,h=this.game.config,u=h.installGlobalPlugins;for(u=u.concat(this._pendingGlobal),t=0;t-1&&e.preventDefault()}},this.onKeyUp=function(e){if(!e.defaultPrevented&&t.enabled&&t.manager){t.queue.push(e),t.manager.useQueue||t.manager.events.emit(o.MANAGER_PROCESS);var i=e.altKey||e.ctrlKey||e.shiftKey||e.metaKey;t.preventDefault&&!i&&t.captures.indexOf(e.keyCode)>-1&&e.preventDefault()}};var e=this.target;e&&(e.addEventListener("keydown",this.onKeyDown,!1),e.addEventListener("keyup",this.onKeyUp,!1),this.enabled=!0)},stopListeners:function(){var t=this.target;t.removeEventListener("keydown",this.onKeyDown,!1),t.removeEventListener("keyup",this.onKeyUp,!1),this.enabled=!1},postUpdate:function(){this.queue=[]},addCapture:function(t){"string"==typeof t&&(t=t.split(",")),Array.isArray(t)||(t=[t]);for(var e=this.captures,i=0;i0},removeCapture:function(t){"string"==typeof t&&(t=t.split(",")),Array.isArray(t)||(t=[t]);for(var e=this.captures,i=0;i0},clearCaptures:function(){this.captures=[],this.preventDefault=!1},destroy:function(){this.stopListeners(),this.clearCaptures(),this.queue=[],this.manager.game.events.off(r.POST_RENDER,this.postUpdate,this),this.target=null,this.enabled=!1,this.manager=null}});t.exports=l},function(t,e){t.exports={MOUSE_DOWN:0,MOUSE_MOVE:1,MOUSE_UP:2,TOUCH_START:3,TOUCH_MOVE:4,TOUCH_END:5,TOUCH_CANCEL:7,POINTER_LOCK_CHANGE:6}},function(t,e,i){var n=i(0),s=i(341),r=i(11),o=i(52),a=i(26),h=i(340),l=i(339),u=i(338),c=i(337),d=i(41),f=i(371),p=new n({initialize:function(t,e){this.game=t,this.scaleManager,this.canvas,this.config=e,this.enabled=!0,this.events=new r,this.queue=[],this.domCallbacks={up:[],down:[],move:[],upOnce:[],downOnce:[],moveOnce:[]},this.isOver=!0,this._emitIsOverEvent=!1,this._hasUpCallback=!1,this._hasDownCallback=!1,this._hasMoveCallback=!1,this._customCursor="",this._setCursor=0,this.defaultCursor="",this.keyboard=e.inputKeyboard?new h(this):null,this.mouse=e.inputMouse?new l(this):null,this.touch=e.inputTouch?new c(this):null,this.pointers=[],this.pointersTotal=e.inputActivePointers,e.inputTouch&&1===this.pointersTotal&&(this.pointersTotal=2);for(var i=0;i<=this.pointersTotal;i++){var n=new u(this,i);n.smoothFactor=e.inputSmoothFactor,this.pointers.push(n)}this.mousePointer=e.inputMouse?this.pointers[0]:null,this.activePointer=this.pointers[0],this.dirty=!1,this.globalTopOnly=!0,this.ignoreEvents=!1,this.useQueue=e.inputQueue,this._updatedThisFrame=!1,this._tempPoint={x:0,y:0},this._tempHitTest=[],this._tempMatrix=new d,this._tempMatrix2=new d,t.events.once(a.BOOT,this.boot,this)},boot:function(){this.canvas=this.game.canvas,this.scaleManager=this.game.scale,this.events.emit(o.MANAGER_BOOT),this.useQueue&&this.game.events.on(a.PRE_STEP,this.legacyUpdate,this),this.game.events.on(a.POST_STEP,this.postUpdate,this),this.game.events.once(a.DESTROY,this.destroy,this)},setCanvasOver:function(t){this.isOver=!0,this._emitIsOverEvent=t},setCanvasOut:function(t){this.isOver=!1,this._emitIsOverEvent=t},update:function(t){this._updatedThisFrame||(this._setCursor=0,this._updatedThisFrame=!0),this.events.emit(o.MANAGER_UPDATE),this.ignoreEvents=!1,this.dirty=!0;for(var e=this.pointers,i=0;i10&&(t=10-this.pointersTotal);for(var i=0;i0},updateInputPlugins:function(t,e){for(var i=this.game.scene.getScenes(!0,!0),n=0;ni.width?n.PORTRAIT:n.LANDSCAPE;if("number"==typeof window.orientation)return 0===window.orientation||180===window.orientation?n.PORTRAIT:n.LANDSCAPE;if(window.matchMedia){if(window.matchMedia("(orientation: portrait)").matches)return n.PORTRAIT;if(window.matchMedia("(orientation: landscape)").matches)return n.LANDSCAPE}return e>t?n.PORTRAIT:n.LANDSCAPE}},function(t,e,i){var n=i(99);t.exports=function(t){if("complete"!==document.readyState&&"interactive"!==document.readyState){var e=function(){document.removeEventListener("deviceready",e,!0),document.removeEventListener("DOMContentLoaded",e,!0),window.removeEventListener("load",e,!0),t()};document.body?n.cordova&&!n.cocoonJS?document.addEventListener("deviceready",e,!1):(document.addEventListener("DOMContentLoaded",e,!0),window.addEventListener("load",e,!0)):window.setTimeout(e,20)}else t()}},function(t,e){t.exports=function(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}},function(t,e){t.exports=function(t){var e=t.toString(16);return 1===e.length?"0"+e:e}},function(t,e,i){var n=i(32);n.ColorToRGBA=i(1005),n.ComponentToHex=i(353),n.GetColor=i(191),n.GetColor32=i(409),n.HexStringToColor=i(410),n.HSLToColor=i(1004),n.HSVColorWheel=i(1003),n.HSVToRGB=i(190),n.HueToComponent=i(352),n.IntegerToColor=i(407),n.IntegerToRGB=i(406),n.Interpolate=i(1002),n.ObjectToColor=i(405),n.RandomRGB=i(1001),n.RGBStringToColor=i(404),n.RGBToHSV=i(408),n.RGBToString=i(1e3),n.ValueToColor=i(192),t.exports=n},function(t,e,i){var n=i(185),s=i(0),r=i(76),o=i(3),a=new s({Extends:r,initialize:function(t){void 0===t&&(t=[]),r.call(this,"SplineCurve"),this.points=[],this.addPoints(t)},addPoints:function(t){for(var e=0;ei.length-2?i.length-1:r+1],c=i[r>i.length-3?i.length-1:r+2];return e.set(n(a,h.x,l.x,u.x,c.x),n(a,h.y,l.y,u.y,c.y))},toJSON:function(){for(var t=[],e=0;ei;)n-=i;n0||!this.inFocus)&&(this._coolDown--,r=Math.min(r,this._target)),r>this._min&&(r=n[i],r=Math.min(r,this._min)),n[i]=r,this.deltaIndex++,this.deltaIndex>s&&(this.deltaIndex=0);for(var o=0,a=0;athis.nextFpsUpdate&&(this.actualFps=.25*this.framesThisSecond+.75*this.actualFps,this.nextFpsUpdate=t+1e3,this.framesThisSecond=0),this.framesThisSecond++;var h=o/this._target;this.callback(t,o,h),this.lastTime=t,this.frame++},tick:function(){this.step(window.performance.now())},sleep:function(){this.running&&(this.raf.stop(),this.running=!1)},wake:function(t){this.running?this.sleep():t&&(this.startTime+=-this.lastTime+(this.lastTime+window.performance.now())),this.raf.start(this.step.bind(this),this.useRAF),this.running=!0,this.step(window.performance.now())},stop:function(){return this.running=!1,this.started=!1,this.raf.stop(),this},destroy:function(){this.stop(),this.callback=r,this.raf=null,this.game=null}});t.exports=a},function(t,e,i){var n=i(28);t.exports=function(t){var e=t.config;if(!e.hideBanner){var i="WebGL";e.renderType===n.CANVAS?i="Canvas":e.renderType===n.HEADLESS&&(i="Headless");var s,r=e.audio,o=t.device.audio;if(s=!o.webAudio||r&&r.disableWebAudio?r&&r.noAudio||!o.webAudio&&!o.audioData?"No Audio":"HTML5 Audio":"Web Audio",t.device.browser.ie)window.console&&console.log("Phaser v"+n.VERSION+" / https://phaser.io");else{var a,h="",l=[h];Array.isArray(e.bannerBackgroundColor)?(e.bannerBackgroundColor.forEach(function(t){h=h.concat("%c "),l.push("background: "+t),a=t}),l[l.length-1]="color: "+e.bannerTextColor+"; background: "+a):(h=h.concat("%c "),l.push("color: "+e.bannerTextColor+"; background: "+e.bannerBackgroundColor)),l.push("background: #fff"),e.gameTitle&&(h=h.concat(e.gameTitle),e.gameVersion&&(h=h.concat(" v"+e.gameVersion)),e.hidePhaser||(h=h.concat(" / "))),e.hidePhaser||(h=h.concat("Phaser v"+n.VERSION+" ("+i+" | "+s+")")),h=h.concat(" %c "+e.gameURL),l[0]=h,console.log.apply(console,l)}}}},function(t,e){t.exports={setCrisp:function(t){return["optimizeSpeed","crisp-edges","-moz-crisp-edges","-webkit-optimize-contrast","optimize-contrast","pixelated"].forEach(function(e){t.style["image-rendering"]=e}),t.style.msInterpolationMode="nearest-neighbor",t},setBicubic:function(t){return t.style["image-rendering"]="auto",t.style.msInterpolationMode="bicubic",t}}},function(t,e,i){var n=i(366),s=i(24),r=i(28),o=i(187);t.exports=function(t){var e=t.config;if((e.customEnvironment||e.canvas)&&e.renderType===r.AUTO)throw new Error("Must set explicit renderType in custom environment");if(!e.customEnvironment&&!e.canvas&&e.renderType!==r.HEADLESS)if(e.renderType===r.CANVAS||e.renderType!==r.CANVAS&&!o.webGL){if(!o.canvas)throw new Error("Cannot create Canvas or WebGL context, aborting.");e.renderType=r.CANVAS}else e.renderType=r.WEBGL;e.antialias||s.disableSmoothing();var a,h,l=t.scale.baseSize,u=l.width,c=l.height;e.canvas?(t.canvas=e.canvas,t.canvas.width=u,t.canvas.height=c):t.canvas=s.create(t,u,c,e.renderType),e.canvasStyle&&(t.canvas.style=e.canvasStyle),e.antialias||n.setCrisp(t.canvas),e.renderType!==r.HEADLESS&&(a=i(459),h=i(456),e.renderType===r.WEBGL?t.renderer=new h(t):(t.renderer=new a(t),t.context=t.renderer.gameContext))}},function(t,e,i){var n=i(0),s=i(182),r=i(370),o=new Int8Array([1,2,0]),a=new Float32Array([0,0,0]),h=new s(1,0,0),l=new s(0,1,0),u=new s,c=new r,d=new n({initialize:function(t,e,i,n){"object"==typeof t?(this.x=t.x||0,this.y=t.y||0,this.z=t.z||0,this.w=t.w||0):(this.x=t||0,this.y=e||0,this.z=i||0,this.w=n||0)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w,this},set:function(t,e,i,n){return"object"==typeof t?(this.x=t.x||0,this.y=t.y||0,this.z=t.z||0,this.w=t.w||0):(this.x=t||0,this.y=e||0,this.z=i||0,this.w=n||0),this},add:function(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this},subtract:function(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this},scale:function(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this},length:function(){var t=this.x,e=this.y,i=this.z,n=this.w;return Math.sqrt(t*t+e*e+i*i+n*n)},lengthSq:function(){var t=this.x,e=this.y,i=this.z,n=this.w;return t*t+e*e+i*i+n*n},normalize:function(){var t=this.x,e=this.y,i=this.z,n=this.w,s=t*t+e*e+i*i+n*n;return s>0&&(s=1/Math.sqrt(s),this.x=t*s,this.y=e*s,this.z=i*s,this.w=n*s),this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w},lerp:function(t,e){void 0===e&&(e=0);var i=this.x,n=this.y,s=this.z,r=this.w;return this.x=i+e*(t.x-i),this.y=n+e*(t.y-n),this.z=s+e*(t.z-s),this.w=r+e*(t.w-r),this},rotationTo:function(t,e){var i=t.x*e.x+t.y*e.y+t.z*e.z;return i<-.999999?(u.copy(h).cross(t).length()<1e-6&&u.copy(l).cross(t),u.normalize(),this.setAxisAngle(u,Math.PI)):i>.999999?(this.x=0,this.y=0,this.z=0,this.w=1,this):(u.copy(t).cross(e),this.x=u.x,this.y=u.y,this.z=u.z,this.w=1+i,this.normalize())},setAxes:function(t,e,i){var n=c.val;return n[0]=e.x,n[3]=e.y,n[6]=e.z,n[1]=i.x,n[4]=i.y,n[7]=i.z,n[2]=-t.x,n[5]=-t.y,n[8]=-t.z,this.fromMat3(c).normalize()},identity:function(){return this.x=0,this.y=0,this.z=0,this.w=1,this},setAxisAngle:function(t,e){e*=.5;var i=Math.sin(e);return this.x=i*t.x,this.y=i*t.y,this.z=i*t.z,this.w=Math.cos(e),this},multiply:function(t){var e=this.x,i=this.y,n=this.z,s=this.w,r=t.x,o=t.y,a=t.z,h=t.w;return this.x=e*h+s*r+i*a-n*o,this.y=i*h+s*o+n*r-e*a,this.z=n*h+s*a+e*o-i*r,this.w=s*h-e*r-i*o-n*a,this},slerp:function(t,e){var i=this.x,n=this.y,s=this.z,r=this.w,o=t.x,a=t.y,h=t.z,l=t.w,u=i*o+n*a+s*h+r*l;u<0&&(u=-u,o=-o,a=-a,h=-h,l=-l);var c=1-e,d=e;if(1-u>1e-6){var f=Math.acos(u),p=Math.sin(f);c=Math.sin((1-e)*f)/p,d=Math.sin(e*f)/p}return this.x=c*i+d*o,this.y=c*n+d*a,this.z=c*s+d*h,this.w=c*r+d*l,this},invert:function(){var t=this.x,e=this.y,i=this.z,n=this.w,s=t*t+e*e+i*i+n*n,r=s?1/s:0;return this.x=-t*r,this.y=-e*r,this.z=-i*r,this.w=n*r,this},conjugate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},rotateX:function(t){t*=.5;var e=this.x,i=this.y,n=this.z,s=this.w,r=Math.sin(t),o=Math.cos(t);return this.x=e*o+s*r,this.y=i*o+n*r,this.z=n*o-i*r,this.w=s*o-e*r,this},rotateY:function(t){t*=.5;var e=this.x,i=this.y,n=this.z,s=this.w,r=Math.sin(t),o=Math.cos(t);return this.x=e*o-n*r,this.y=i*o+s*r,this.z=n*o+e*r,this.w=s*o-i*r,this},rotateZ:function(t){t*=.5;var e=this.x,i=this.y,n=this.z,s=this.w,r=Math.sin(t),o=Math.cos(t);return this.x=e*o+i*r,this.y=i*o-e*r,this.z=n*o+s*r,this.w=s*o-n*r,this},calculateW:function(){var t=this.x,e=this.y,i=this.z;return this.w=-Math.sqrt(1-t*t-e*e-i*i),this},fromMat3:function(t){var e,i=t.val,n=i[0]+i[4]+i[8];if(n>0)e=Math.sqrt(n+1),this.w=.5*e,e=.5/e,this.x=(i[7]-i[5])*e,this.y=(i[2]-i[6])*e,this.z=(i[3]-i[1])*e;else{var s=0;i[4]>i[0]&&(s=1),i[8]>i[3*s+s]&&(s=2);var r=o[s],h=o[r];e=Math.sqrt(i[3*s+s]-i[3*r+r]-i[3*h+h]+1),a[s]=.5*e,e=.5/e,a[r]=(i[3*r+s]+i[3*s+r])*e,a[h]=(i[3*h+s]+i[3*s+h])*e,this.x=a[0],this.y=a[1],this.z=a[2],this.w=(i[3*h+r]-i[3*r+h])*e}return this}});t.exports=d},function(t,e,i){var n=new(i(0))({initialize:function(t){this.val=new Float32Array(16),t?this.copy(t):this.identity()},clone:function(){return new n(this)},set:function(t){return this.copy(t)},copy:function(t){var e=this.val,i=t.val;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],e[9]=i[9],e[10]=i[10],e[11]=i[11],e[12]=i[12],e[13]=i[13],e[14]=i[14],e[15]=i[15],this},fromArray:function(t){var e=this.val;return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],this},zero:function(){var t=this.val;return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=0,this},xyz:function(t,e,i){this.identity();var n=this.val;return n[12]=t,n[13]=e,n[14]=i,this},scaling:function(t,e,i){this.zero();var n=this.val;return n[0]=t,n[5]=e,n[10]=i,n[15]=1,this},identity:function(){var t=this.val;return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this},transpose:function(){var t=this.val,e=t[1],i=t[2],n=t[3],s=t[6],r=t[7],o=t[11];return t[1]=t[4],t[2]=t[8],t[3]=t[12],t[4]=e,t[6]=t[9],t[7]=t[13],t[8]=i,t[9]=s,t[11]=t[14],t[12]=n,t[13]=r,t[14]=o,this},invert:function(){var t=this.val,e=t[0],i=t[1],n=t[2],s=t[3],r=t[4],o=t[5],a=t[6],h=t[7],l=t[8],u=t[9],c=t[10],d=t[11],f=t[12],p=t[13],g=t[14],v=t[15],y=e*o-i*r,m=e*a-n*r,x=e*h-s*r,T=i*a-n*o,w=i*h-s*o,b=n*h-s*a,S=l*p-u*f,_=l*g-c*f,A=l*v-d*f,E=u*g-c*p,C=u*v-d*p,M=c*v-d*g,P=y*M-m*C+x*E+T*A-w*_+b*S;return P?(P=1/P,t[0]=(o*M-a*C+h*E)*P,t[1]=(n*C-i*M-s*E)*P,t[2]=(p*b-g*w+v*T)*P,t[3]=(c*w-u*b-d*T)*P,t[4]=(a*A-r*M-h*_)*P,t[5]=(e*M-n*A+s*_)*P,t[6]=(g*x-f*b-v*m)*P,t[7]=(l*b-c*x+d*m)*P,t[8]=(r*C-o*A+h*S)*P,t[9]=(i*A-e*C-s*S)*P,t[10]=(f*w-p*x+v*y)*P,t[11]=(u*x-l*w-d*y)*P,t[12]=(o*_-r*E-a*S)*P,t[13]=(e*E-i*_+n*S)*P,t[14]=(p*m-f*T-g*y)*P,t[15]=(l*T-u*m+c*y)*P,this):null},adjoint:function(){var t=this.val,e=t[0],i=t[1],n=t[2],s=t[3],r=t[4],o=t[5],a=t[6],h=t[7],l=t[8],u=t[9],c=t[10],d=t[11],f=t[12],p=t[13],g=t[14],v=t[15];return t[0]=o*(c*v-d*g)-u*(a*v-h*g)+p*(a*d-h*c),t[1]=-(i*(c*v-d*g)-u*(n*v-s*g)+p*(n*d-s*c)),t[2]=i*(a*v-h*g)-o*(n*v-s*g)+p*(n*h-s*a),t[3]=-(i*(a*d-h*c)-o*(n*d-s*c)+u*(n*h-s*a)),t[4]=-(r*(c*v-d*g)-l*(a*v-h*g)+f*(a*d-h*c)),t[5]=e*(c*v-d*g)-l*(n*v-s*g)+f*(n*d-s*c),t[6]=-(e*(a*v-h*g)-r*(n*v-s*g)+f*(n*h-s*a)),t[7]=e*(a*d-h*c)-r*(n*d-s*c)+l*(n*h-s*a),t[8]=r*(u*v-d*p)-l*(o*v-h*p)+f*(o*d-h*u),t[9]=-(e*(u*v-d*p)-l*(i*v-s*p)+f*(i*d-s*u)),t[10]=e*(o*v-h*p)-r*(i*v-s*p)+f*(i*h-s*o),t[11]=-(e*(o*d-h*u)-r*(i*d-s*u)+l*(i*h-s*o)),t[12]=-(r*(u*g-c*p)-l*(o*g-a*p)+f*(o*c-a*u)),t[13]=e*(u*g-c*p)-l*(i*g-n*p)+f*(i*c-n*u),t[14]=-(e*(o*g-a*p)-r*(i*g-n*p)+f*(i*a-n*o)),t[15]=e*(o*c-a*u)-r*(i*c-n*u)+l*(i*a-n*o),this},determinant:function(){var t=this.val,e=t[0],i=t[1],n=t[2],s=t[3],r=t[4],o=t[5],a=t[6],h=t[7],l=t[8],u=t[9],c=t[10],d=t[11],f=t[12],p=t[13],g=t[14],v=t[15];return(e*o-i*r)*(c*v-d*g)-(e*a-n*r)*(u*v-d*p)+(e*h-s*r)*(u*g-c*p)+(i*a-n*o)*(l*v-d*f)-(i*h-s*o)*(l*g-c*f)+(n*h-s*a)*(l*p-u*f)},multiply:function(t){var e=this.val,i=e[0],n=e[1],s=e[2],r=e[3],o=e[4],a=e[5],h=e[6],l=e[7],u=e[8],c=e[9],d=e[10],f=e[11],p=e[12],g=e[13],v=e[14],y=e[15],m=t.val,x=m[0],T=m[1],w=m[2],b=m[3];return e[0]=x*i+T*o+w*u+b*p,e[1]=x*n+T*a+w*c+b*g,e[2]=x*s+T*h+w*d+b*v,e[3]=x*r+T*l+w*f+b*y,x=m[4],T=m[5],w=m[6],b=m[7],e[4]=x*i+T*o+w*u+b*p,e[5]=x*n+T*a+w*c+b*g,e[6]=x*s+T*h+w*d+b*v,e[7]=x*r+T*l+w*f+b*y,x=m[8],T=m[9],w=m[10],b=m[11],e[8]=x*i+T*o+w*u+b*p,e[9]=x*n+T*a+w*c+b*g,e[10]=x*s+T*h+w*d+b*v,e[11]=x*r+T*l+w*f+b*y,x=m[12],T=m[13],w=m[14],b=m[15],e[12]=x*i+T*o+w*u+b*p,e[13]=x*n+T*a+w*c+b*g,e[14]=x*s+T*h+w*d+b*v,e[15]=x*r+T*l+w*f+b*y,this},multiplyLocal:function(t){var e=[],i=this.val,n=t.val;return e[0]=i[0]*n[0]+i[1]*n[4]+i[2]*n[8]+i[3]*n[12],e[1]=i[0]*n[1]+i[1]*n[5]+i[2]*n[9]+i[3]*n[13],e[2]=i[0]*n[2]+i[1]*n[6]+i[2]*n[10]+i[3]*n[14],e[3]=i[0]*n[3]+i[1]*n[7]+i[2]*n[11]+i[3]*n[15],e[4]=i[4]*n[0]+i[5]*n[4]+i[6]*n[8]+i[7]*n[12],e[5]=i[4]*n[1]+i[5]*n[5]+i[6]*n[9]+i[7]*n[13],e[6]=i[4]*n[2]+i[5]*n[6]+i[6]*n[10]+i[7]*n[14],e[7]=i[4]*n[3]+i[5]*n[7]+i[6]*n[11]+i[7]*n[15],e[8]=i[8]*n[0]+i[9]*n[4]+i[10]*n[8]+i[11]*n[12],e[9]=i[8]*n[1]+i[9]*n[5]+i[10]*n[9]+i[11]*n[13],e[10]=i[8]*n[2]+i[9]*n[6]+i[10]*n[10]+i[11]*n[14],e[11]=i[8]*n[3]+i[9]*n[7]+i[10]*n[11]+i[11]*n[15],e[12]=i[12]*n[0]+i[13]*n[4]+i[14]*n[8]+i[15]*n[12],e[13]=i[12]*n[1]+i[13]*n[5]+i[14]*n[9]+i[15]*n[13],e[14]=i[12]*n[2]+i[13]*n[6]+i[14]*n[10]+i[15]*n[14],e[15]=i[12]*n[3]+i[13]*n[7]+i[14]*n[11]+i[15]*n[15],this.fromArray(e)},translate:function(t){var e=t.x,i=t.y,n=t.z,s=this.val;return s[12]=s[0]*e+s[4]*i+s[8]*n+s[12],s[13]=s[1]*e+s[5]*i+s[9]*n+s[13],s[14]=s[2]*e+s[6]*i+s[10]*n+s[14],s[15]=s[3]*e+s[7]*i+s[11]*n+s[15],this},translateXYZ:function(t,e,i){var n=this.val;return n[12]=n[0]*t+n[4]*e+n[8]*i+n[12],n[13]=n[1]*t+n[5]*e+n[9]*i+n[13],n[14]=n[2]*t+n[6]*e+n[10]*i+n[14],n[15]=n[3]*t+n[7]*e+n[11]*i+n[15],this},scale:function(t){var e=t.x,i=t.y,n=t.z,s=this.val;return s[0]=s[0]*e,s[1]=s[1]*e,s[2]=s[2]*e,s[3]=s[3]*e,s[4]=s[4]*i,s[5]=s[5]*i,s[6]=s[6]*i,s[7]=s[7]*i,s[8]=s[8]*n,s[9]=s[9]*n,s[10]=s[10]*n,s[11]=s[11]*n,this},scaleXYZ:function(t,e,i){var n=this.val;return n[0]=n[0]*t,n[1]=n[1]*t,n[2]=n[2]*t,n[3]=n[3]*t,n[4]=n[4]*e,n[5]=n[5]*e,n[6]=n[6]*e,n[7]=n[7]*e,n[8]=n[8]*i,n[9]=n[9]*i,n[10]=n[10]*i,n[11]=n[11]*i,this},makeRotationAxis:function(t,e){var i=Math.cos(e),n=Math.sin(e),s=1-i,r=t.x,o=t.y,a=t.z,h=s*r,l=s*o;return this.fromArray([h*r+i,h*o-n*a,h*a+n*o,0,h*o+n*a,l*o+i,l*a-n*r,0,h*a-n*o,l*a+n*r,s*a*a+i,0,0,0,0,1]),this},rotate:function(t,e){var i=this.val,n=e.x,s=e.y,r=e.z,o=Math.sqrt(n*n+s*s+r*r);if(Math.abs(o)<1e-6)return null;n*=o=1/o,s*=o,r*=o;var a=Math.sin(t),h=Math.cos(t),l=1-h,u=i[0],c=i[1],d=i[2],f=i[3],p=i[4],g=i[5],v=i[6],y=i[7],m=i[8],x=i[9],T=i[10],w=i[11],b=n*n*l+h,S=s*n*l+r*a,_=r*n*l-s*a,A=n*s*l-r*a,E=s*s*l+h,C=r*s*l+n*a,M=n*r*l+s*a,P=s*r*l-n*a,O=r*r*l+h;return i[0]=u*b+p*S+m*_,i[1]=c*b+g*S+x*_,i[2]=d*b+v*S+T*_,i[3]=f*b+y*S+w*_,i[4]=u*A+p*E+m*C,i[5]=c*A+g*E+x*C,i[6]=d*A+v*E+T*C,i[7]=f*A+y*E+w*C,i[8]=u*M+p*P+m*O,i[9]=c*M+g*P+x*O,i[10]=d*M+v*P+T*O,i[11]=f*M+y*P+w*O,this},rotateX:function(t){var e=this.val,i=Math.sin(t),n=Math.cos(t),s=e[4],r=e[5],o=e[6],a=e[7],h=e[8],l=e[9],u=e[10],c=e[11];return e[4]=s*n+h*i,e[5]=r*n+l*i,e[6]=o*n+u*i,e[7]=a*n+c*i,e[8]=h*n-s*i,e[9]=l*n-r*i,e[10]=u*n-o*i,e[11]=c*n-a*i,this},rotateY:function(t){var e=this.val,i=Math.sin(t),n=Math.cos(t),s=e[0],r=e[1],o=e[2],a=e[3],h=e[8],l=e[9],u=e[10],c=e[11];return e[0]=s*n-h*i,e[1]=r*n-l*i,e[2]=o*n-u*i,e[3]=a*n-c*i,e[8]=s*i+h*n,e[9]=r*i+l*n,e[10]=o*i+u*n,e[11]=a*i+c*n,this},rotateZ:function(t){var e=this.val,i=Math.sin(t),n=Math.cos(t),s=e[0],r=e[1],o=e[2],a=e[3],h=e[4],l=e[5],u=e[6],c=e[7];return e[0]=s*n+h*i,e[1]=r*n+l*i,e[2]=o*n+u*i,e[3]=a*n+c*i,e[4]=h*n-s*i,e[5]=l*n-r*i,e[6]=u*n-o*i,e[7]=c*n-a*i,this},fromRotationTranslation:function(t,e){var i=this.val,n=t.x,s=t.y,r=t.z,o=t.w,a=n+n,h=s+s,l=r+r,u=n*a,c=n*h,d=n*l,f=s*h,p=s*l,g=r*l,v=o*a,y=o*h,m=o*l;return i[0]=1-(f+g),i[1]=c+m,i[2]=d-y,i[3]=0,i[4]=c-m,i[5]=1-(u+g),i[6]=p+v,i[7]=0,i[8]=d+y,i[9]=p-v,i[10]=1-(u+f),i[11]=0,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=1,this},fromQuat:function(t){var e=this.val,i=t.x,n=t.y,s=t.z,r=t.w,o=i+i,a=n+n,h=s+s,l=i*o,u=i*a,c=i*h,d=n*a,f=n*h,p=s*h,g=r*o,v=r*a,y=r*h;return e[0]=1-(d+p),e[1]=u+y,e[2]=c-v,e[3]=0,e[4]=u-y,e[5]=1-(l+p),e[6]=f+g,e[7]=0,e[8]=c+v,e[9]=f-g,e[10]=1-(l+d),e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},frustum:function(t,e,i,n,s,r){var o=this.val,a=1/(e-t),h=1/(n-i),l=1/(s-r);return o[0]=2*s*a,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=2*s*h,o[6]=0,o[7]=0,o[8]=(e+t)*a,o[9]=(n+i)*h,o[10]=(r+s)*l,o[11]=-1,o[12]=0,o[13]=0,o[14]=r*s*2*l,o[15]=0,this},perspective:function(t,e,i,n){var s=this.val,r=1/Math.tan(t/2),o=1/(i-n);return s[0]=r/e,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=r,s[6]=0,s[7]=0,s[8]=0,s[9]=0,s[10]=(n+i)*o,s[11]=-1,s[12]=0,s[13]=0,s[14]=2*n*i*o,s[15]=0,this},perspectiveLH:function(t,e,i,n){var s=this.val;return s[0]=2*i/t,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=2*i/e,s[6]=0,s[7]=0,s[8]=0,s[9]=0,s[10]=-n/(i-n),s[11]=1,s[12]=0,s[13]=0,s[14]=i*n/(i-n),s[15]=0,this},ortho:function(t,e,i,n,s,r){var o=this.val,a=t-e,h=i-n,l=s-r;return a=0===a?a:1/a,h=0===h?h:1/h,l=0===l?l:1/l,o[0]=-2*a,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=-2*h,o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=2*l,o[11]=0,o[12]=(t+e)*a,o[13]=(n+i)*h,o[14]=(r+s)*l,o[15]=1,this},lookAt:function(t,e,i){var n=this.val,s=t.x,r=t.y,o=t.z,a=i.x,h=i.y,l=i.z,u=e.x,c=e.y,d=e.z;if(Math.abs(s-u)<1e-6&&Math.abs(r-c)<1e-6&&Math.abs(o-d)<1e-6)return this.identity();var f=s-u,p=r-c,g=o-d,v=1/Math.sqrt(f*f+p*p+g*g),y=h*(g*=v)-l*(p*=v),m=l*(f*=v)-a*g,x=a*p-h*f;(v=Math.sqrt(y*y+m*m+x*x))?(y*=v=1/v,m*=v,x*=v):(y=0,m=0,x=0);var T=p*x-g*m,w=g*y-f*x,b=f*m-p*y;return(v=Math.sqrt(T*T+w*w+b*b))?(T*=v=1/v,w*=v,b*=v):(T=0,w=0,b=0),n[0]=y,n[1]=T,n[2]=f,n[3]=0,n[4]=m,n[5]=w,n[6]=p,n[7]=0,n[8]=x,n[9]=b,n[10]=g,n[11]=0,n[12]=-(y*s+m*r+x*o),n[13]=-(T*s+w*r+b*o),n[14]=-(f*s+p*r+g*o),n[15]=1,this},yawPitchRoll:function(t,e,i){this.zero(),s.zero(),r.zero();var n=this.val,o=s.val,a=r.val,h=Math.sin(i),l=Math.cos(i);return n[10]=1,n[15]=1,n[0]=l,n[1]=h,n[4]=-h,n[5]=l,h=Math.sin(e),l=Math.cos(e),o[0]=1,o[15]=1,o[5]=l,o[10]=l,o[9]=-h,o[6]=h,h=Math.sin(t),l=Math.cos(t),a[5]=1,a[15]=1,a[0]=l,a[2]=-h,a[8]=h,a[10]=l,this.multiplyLocal(s),this.multiplyLocal(r),this},setWorldMatrix:function(t,e,i,n,o){return this.yawPitchRoll(t.y,t.x,t.z),s.scaling(i.x,i.y,i.z),r.xyz(e.x,e.y,e.z),this.multiplyLocal(s),this.multiplyLocal(r),void 0!==n&&this.multiplyLocal(n),void 0!==o&&this.multiplyLocal(o),this}}),s=new n,r=new n;t.exports=n},function(t,e,i){var n=new(i(0))({initialize:function(t){this.val=new Float32Array(9),t?this.copy(t):this.identity()},clone:function(){return new n(this)},set:function(t){return this.copy(t)},copy:function(t){var e=this.val,i=t.val;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],this},fromMat4:function(t){var e=t.val,i=this.val;return i[0]=e[0],i[1]=e[1],i[2]=e[2],i[3]=e[4],i[4]=e[5],i[5]=e[6],i[6]=e[8],i[7]=e[9],i[8]=e[10],this},fromArray:function(t){var e=this.val;return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],this},identity:function(){var t=this.val;return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,this},transpose:function(){var t=this.val,e=t[1],i=t[2],n=t[5];return t[1]=t[3],t[2]=t[6],t[3]=e,t[5]=t[7],t[6]=i,t[7]=n,this},invert:function(){var t=this.val,e=t[0],i=t[1],n=t[2],s=t[3],r=t[4],o=t[5],a=t[6],h=t[7],l=t[8],u=l*r-o*h,c=-l*s+o*a,d=h*s-r*a,f=e*u+i*c+n*d;return f?(f=1/f,t[0]=u*f,t[1]=(-l*i+n*h)*f,t[2]=(o*i-n*r)*f,t[3]=c*f,t[4]=(l*e-n*a)*f,t[5]=(-o*e+n*s)*f,t[6]=d*f,t[7]=(-h*e+i*a)*f,t[8]=(r*e-i*s)*f,this):null},adjoint:function(){var t=this.val,e=t[0],i=t[1],n=t[2],s=t[3],r=t[4],o=t[5],a=t[6],h=t[7],l=t[8];return t[0]=r*l-o*h,t[1]=n*h-i*l,t[2]=i*o-n*r,t[3]=o*a-s*l,t[4]=e*l-n*a,t[5]=n*s-e*o,t[6]=s*h-r*a,t[7]=i*a-e*h,t[8]=e*r-i*s,this},determinant:function(){var t=this.val,e=t[0],i=t[1],n=t[2],s=t[3],r=t[4],o=t[5],a=t[6],h=t[7],l=t[8];return e*(l*r-o*h)+i*(-l*s+o*a)+n*(h*s-r*a)},multiply:function(t){var e=this.val,i=e[0],n=e[1],s=e[2],r=e[3],o=e[4],a=e[5],h=e[6],l=e[7],u=e[8],c=t.val,d=c[0],f=c[1],p=c[2],g=c[3],v=c[4],y=c[5],m=c[6],x=c[7],T=c[8];return e[0]=d*i+f*r+p*h,e[1]=d*n+f*o+p*l,e[2]=d*s+f*a+p*u,e[3]=g*i+v*r+y*h,e[4]=g*n+v*o+y*l,e[5]=g*s+v*a+y*u,e[6]=m*i+x*r+T*h,e[7]=m*n+x*o+T*l,e[8]=m*s+x*a+T*u,this},translate:function(t){var e=this.val,i=t.x,n=t.y;return e[6]=i*e[0]+n*e[3]+e[6],e[7]=i*e[1]+n*e[4]+e[7],e[8]=i*e[2]+n*e[5]+e[8],this},rotate:function(t){var e=this.val,i=e[0],n=e[1],s=e[2],r=e[3],o=e[4],a=e[5],h=Math.sin(t),l=Math.cos(t);return e[0]=l*i+h*r,e[1]=l*n+h*o,e[2]=l*s+h*a,e[3]=l*r-h*i,e[4]=l*o-h*n,e[5]=l*a-h*s,this},scale:function(t){var e=this.val,i=t.x,n=t.y;return e[0]=i*e[0],e[1]=i*e[1],e[2]=i*e[2],e[3]=n*e[3],e[4]=n*e[4],e[5]=n*e[5],this},fromQuat:function(t){var e=t.x,i=t.y,n=t.z,s=t.w,r=e+e,o=i+i,a=n+n,h=e*r,l=e*o,u=e*a,c=i*o,d=i*a,f=n*a,p=s*r,g=s*o,v=s*a,y=this.val;return y[0]=1-(c+f),y[3]=l+v,y[6]=u-g,y[1]=l-v,y[4]=1-(h+f),y[7]=d+p,y[2]=u+g,y[5]=d-p,y[8]=1-(h+c),this},normalFromMat4:function(t){var e=t.val,i=this.val,n=e[0],s=e[1],r=e[2],o=e[3],a=e[4],h=e[5],l=e[6],u=e[7],c=e[8],d=e[9],f=e[10],p=e[11],g=e[12],v=e[13],y=e[14],m=e[15],x=n*h-s*a,T=n*l-r*a,w=n*u-o*a,b=s*l-r*h,S=s*u-o*h,_=r*u-o*l,A=c*v-d*g,E=c*y-f*g,C=c*m-p*g,M=d*y-f*v,P=d*m-p*v,O=f*m-p*y,R=x*O-T*P+w*M+b*C-S*E+_*A;return R?(R=1/R,i[0]=(h*O-l*P+u*M)*R,i[1]=(l*C-a*O-u*E)*R,i[2]=(a*P-h*C+u*A)*R,i[3]=(r*P-s*O-o*M)*R,i[4]=(n*O-r*C+o*E)*R,i[5]=(s*C-n*P-o*A)*R,i[6]=(v*_-y*S+m*b)*R,i[7]=(y*w-g*_-m*T)*R,i[8]=(g*S-v*w+m*x)*R,this):null}});t.exports=n},function(t,e,i){var n=i(3);t.exports=function(t,e,i,s,r,o,a,h){void 0===h&&(h=new n);var l=Math.sin(r),u=Math.cos(r),c=u*o,d=l*o,f=-l*a,p=u*a,g=1/(c*p+f*-d);return h.x=p*g*t+-f*g*e+(s*f-i*p)*g,h.y=c*g*e+-d*g*t+(-s*c+i*d)*g,h}},function(t,e){t.exports=function(t){return t>0?Math.ceil(t):Math.floor(t)}},function(t,e){t.exports=function(t,e){var i=t.x,n=t.y;return t.x=i*Math.cos(e)-n*Math.sin(e),t.y=i*Math.sin(e)+n*Math.cos(e),t}},function(t,e){t.exports=function(t,e){return Math.random()*(e-t)+t}},function(t,e){t.exports=function(t,e,i,n){return void 0===i&&(i=0),0===e?t:(t-=i,t=e*Math.ceil(t/e),n?(i+t)/e:i+t)}},function(t,e){t.exports=function(t){var e=Math.log(t)/.6931471805599453;return 1<e-i}},function(t,e){t.exports=function(t,e,i,n){var s=t-i,r=e-n;return s*s+r*r}},function(t,e){t.exports=function(t){return(t%=2*Math.PI)>=0?t:t+2*Math.PI}},function(t,e){t.exports=function(t,e,i,n){return Math.atan2(n-e,i-t)}},function(t,e,i){var n=i(20),s=i(19),r={Angle:i(1091),Distance:i(1083),Easing:i(1081),Fuzzy:i(1080),Interpolation:i(1077),Pow2:i(1072),Snap:i(1070),RandomDataGenerator:i(1068),Average:i(1067),Bernstein:i(381),Between:i(184),CatmullRom:i(185),CeilTo:i(1066),Clamp:i(23),DegToRad:i(34),Difference:i(1065),Factorial:i(380),FloatBetween:i(374),FloorTo:i(1064),FromPercent:i(100),GetSpeed:i(1063),IsEven:i(1062),IsEvenStrict:i(1061),Linear:i(129),MaxAdd:i(1060),MinSub:i(1059),Percent:i(1058),RadToDeg:i(183),RandomXY:i(1057),RandomXYZ:i(1056),RandomXYZW:i(1055),Rotate:i(373),RotateAround:i(428),RotateAroundDistance:i(197),RoundAwayFromZero:i(372),RoundTo:i(1054),SinCosTableGenerator:i(1053),SmootherStep:i(196),SmoothStep:i(195),TransformXY:i(371),Within:i(1052),Wrap:i(57),Vector2:i(3),Vector3:i(182),Vector4:i(1051),Matrix3:i(370),Matrix4:i(369),Quaternion:i(368),RotateVec3:i(1050)};r=s(!1,r,n),t.exports=r},function(t,e,i){var n,s,r,o=i(24),a={supportInverseAlpha:!1,supportNewBlendModes:!1};t.exports=(void 0!==document&&(a.supportNewBlendModes=(n="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/",s="AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",(r=new Image).onload=function(){var t=new Image;t.onload=function(){var e=o.create(t,6,1).getContext("2d");if(e.globalCompositeOperation="multiply",e.drawImage(r,0,0),e.drawImage(t,2,0),!e.getImageData(2,0,1,1))return!1;var i=e.getImageData(2,0,1,1).data;o.remove(t),a.supportNewBlendModes=255===i[0]&&0===i[1]&&0===i[2]},t.src=n+"/wCKxvRF"+s},r.src=n+"AP804Oa6"+s,!1),a.supportInverseAlpha=function(){var t=o.create(this,2,1).getContext("2d");t.fillStyle="rgba(10, 20, 30, 0.5)",t.fillRect(0,0,1,1);var e=t.getImageData(0,0,1,1);if(null===e)return!1;t.putImageData(e,1,0);var i=t.getImageData(1,0,1,1);return i.data[0]===e.data[0]&&i.data[1]===e.data[1]&&i.data[2]===e.data[2]&&i.data[3]===e.data[3]}()),a)},function(t,e,i){t.exports={os:i(99),browser:i(128),features:i(187),input:i(1095),audio:i(1094),video:i(1093),fullscreen:i(1092),canvasFeatures:i(388)}},function(t,e,i){var n=i(0),s=i(28),r=i(389),o=i(2),a=i(4),h=i(8),l=i(387),u=i(1),c=i(181),d=i(192),f=new n({initialize:function(t){void 0===t&&(t={});this.width=a(t,"width",1024),this.height=a(t,"height",768),this.zoom=a(t,"zoom",1),this.resolution=a(t,"resolution",1),this.parent=a(t,"parent",void 0),this.scaleMode=a(t,"scaleMode",0),this.expandParent=a(t,"expandParent",!0),this.autoRound=a(t,"autoRound",!1),this.autoCenter=a(t,"autoCenter",0),this.resizeInterval=a(t,"resizeInterval",500),this.fullscreenTarget=a(t,"fullscreenTarget",null),this.minWidth=a(t,"minWidth",0),this.maxWidth=a(t,"maxWidth",0),this.minHeight=a(t,"minHeight",0),this.maxHeight=a(t,"maxHeight",0);var e=a(t,"scale",null);e&&(this.width=a(e,"width",this.width),this.height=a(e,"height",this.height),this.zoom=a(e,"zoom",this.zoom),this.resolution=a(e,"resolution",this.resolution),this.parent=a(e,"parent",this.parent),this.scaleMode=a(e,"mode",this.scaleMode),this.expandParent=a(e,"expandParent",this.expandParent),this.autoRound=a(e,"autoRound",this.autoRound),this.autoCenter=a(e,"autoCenter",this.autoCenter),this.resizeInterval=a(e,"resizeInterval",this.resizeInterval),this.fullscreenTarget=a(e,"fullscreenTarget",this.fullscreenTarget),this.minWidth=a(e,"min.width",this.minWidth),this.maxWidth=a(e,"max.width",this.maxWidth),this.minHeight=a(e,"min.height",this.minHeight),this.maxHeight=a(e,"max.height",this.maxHeight)),this.renderType=a(t,"type",s.AUTO),this.canvas=a(t,"canvas",null),this.context=a(t,"context",null),this.canvasStyle=a(t,"canvasStyle",null),this.customEnvironment=a(t,"customEnvironment",!1),this.sceneConfig=a(t,"scene",null),this.seed=a(t,"seed",[(Date.now()*Math.random()).toString()]),l.RND=new l.RandomDataGenerator(this.seed),this.gameTitle=a(t,"title",""),this.gameURL=a(t,"url","https://phaser.io"),this.gameVersion=a(t,"version",""),this.autoFocus=a(t,"autoFocus",!0),this.domCreateContainer=a(t,"dom.createContainer",!1),this.domBehindCanvas=a(t,"dom.behindCanvas",!1),this.inputKeyboard=a(t,"input.keyboard",!0),this.inputKeyboardEventTarget=a(t,"input.keyboard.target",window),this.inputKeyboardCapture=a(t,"input.keyboard.capture",[]),this.inputMouse=a(t,"input.mouse",!0),this.inputMouseEventTarget=a(t,"input.mouse.target",null),this.inputMouseCapture=a(t,"input.mouse.capture",!0),this.inputTouch=a(t,"input.touch",r.input.touch),this.inputTouchEventTarget=a(t,"input.touch.target",null),this.inputTouchCapture=a(t,"input.touch.capture",!0),this.inputActivePointers=a(t,"input.activePointers",1),this.inputSmoothFactor=a(t,"input.smoothFactor",0),this.inputQueue=a(t,"input.queue",!1),this.inputGamepad=a(t,"input.gamepad",!1),this.inputGamepadEventTarget=a(t,"input.gamepad.target",window),this.disableContextMenu=a(t,"disableContextMenu",!1),this.audio=a(t,"audio"),this.hideBanner=!1===a(t,"banner",null),this.hidePhaser=a(t,"banner.hidePhaser",!1),this.bannerTextColor=a(t,"banner.text","#ffffff"),this.bannerBackgroundColor=a(t,"banner.background",["#ff0000","#ffff00","#00ff00","#00ffff","#000000"]),""===this.gameTitle&&this.hidePhaser&&(this.hideBanner=!0),this.fps=a(t,"fps",null);var i=a(t,"render",t);this.antialias=a(i,"antialias",!0),this.roundPixels=a(i,"roundPixels",!1),this.pixelArt=a(i,"pixelArt",1!==this.zoom),this.pixelArt&&(this.antialias=!1,this.roundPixels=!0),this.transparent=a(i,"transparent",!1),this.clearBeforeRender=a(i,"clearBeforeRender",!0),this.premultipliedAlpha=a(i,"premultipliedAlpha",!0),this.failIfMajorPerformanceCaveat=a(i,"failIfMajorPerformanceCaveat",!1),this.powerPreference=a(i,"powerPreference","default"),this.batchSize=a(i,"batchSize",2e3),this.maxLights=a(i,"maxLights",10);var n=a(t,"backgroundColor",0);this.backgroundColor=d(n),0===n&&this.transparent&&(this.backgroundColor.alpha=0),this.preBoot=a(t,"callbacks.preBoot",u),this.postBoot=a(t,"callbacks.postBoot",u),this.physics=a(t,"physics",{}),this.defaultPhysicsSystem=a(this.physics,"default",!1),this.loaderBaseURL=a(t,"loader.baseURL",""),this.loaderPath=a(t,"loader.path",""),this.loaderMaxParallelDownloads=a(t,"loader.maxParallelDownloads",32),this.loaderCrossOrigin=a(t,"loader.crossOrigin",void 0),this.loaderResponseType=a(t,"loader.responseType",""),this.loaderAsync=a(t,"loader.async",!0),this.loaderUser=a(t,"loader.user",""),this.loaderPassword=a(t,"loader.password",""),this.loaderTimeout=a(t,"loader.timeout",0),this.installGlobalPlugins=[],this.installScenePlugins=[];var f=a(t,"plugins",null),p=c.DefaultScene;f&&(Array.isArray(f)?this.defaultPlugins=f:h(f)&&(this.installGlobalPlugins=o(f,"global",[]),this.installScenePlugins=o(f,"scene",[]),Array.isArray(f.default)?p=f.default:Array.isArray(f.defaultMerge)&&(p=p.concat(f.defaultMerge)))),this.defaultPlugins=p;var g="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAg";this.defaultImage=a(t,"images.default",g+"AQMAAABJtOi3AAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAABVJREFUeF7NwIEAAAAAgKD9qdeocAMAoAABm3DkcAAAAABJRU5ErkJggg=="),this.missingImage=a(t,"images.missing",g+"CAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUeNq01ssOwyAMRFG46v//Mt1ESmgh+DFmE2GPOBARKb2NVjo+17PXLD8a1+pl5+A+wSgFygymWYHBb0FtsKhJDdZlncG2IzJ4ayoMDv20wTmSMzClEgbWYNTAkQ0Z+OJ+A/eWnAaR9+oxCF4Os0H8htsMUp+pwcgBBiMNnAwF8GqIgL2hAzaGFFgZauDPKABmowZ4GL369/0rwACp2yA/ttmvsQAAAABJRU5ErkJggg=="),window&&(window.FORCE_WEBGL?this.renderType=s.WEBGL:window.FORCE_CANVAS&&(this.renderType=s.CANVAS))}});t.exports=f},function(t,e,i){t.exports=i(1119)},function(t,e,i){t.exports={In:i(1122),Out:i(1121),InOut:i(1120)}},function(t,e,i){t.exports={In:i(1125),Out:i(1124),InOut:i(1123)}},function(t,e,i){t.exports={In:i(1128),Out:i(1127),InOut:i(1126)}},function(t,e,i){t.exports={In:i(1131),Out:i(1130),InOut:i(1129)}},function(t,e,i){t.exports=i(1132)},function(t,e,i){t.exports={In:i(1135),Out:i(1134),InOut:i(1133)}},function(t,e,i){t.exports={In:i(1138),Out:i(1137),InOut:i(1136)}},function(t,e,i){t.exports={In:i(1141),Out:i(1140),InOut:i(1139)}},function(t,e,i){t.exports={In:i(1144),Out:i(1143),InOut:i(1142)}},function(t,e,i){t.exports={In:i(1147),Out:i(1146),InOut:i(1145)}},function(t,e,i){t.exports={In:i(1150),Out:i(1149),InOut:i(1148)}},function(t,e,i){t.exports={Fade:i(1153),Flash:i(1152),Pan:i(1151),Shake:i(1118),Zoom:i(1117)}},function(t,e,i){var n=i(32);t.exports=function(t){var e=new n,i=/^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d+(?:\.\d+)?))?\s*\)$/.exec(t.toLowerCase());if(i){var s=parseInt(i[1],10),r=parseInt(i[2],10),o=parseInt(i[3],10),a=void 0!==i[4]?parseFloat(i[4]):1;e.setTo(s,r,o,255*a)}return e}},function(t,e,i){var n=i(32);t.exports=function(t){return new n(t.r,t.g,t.b,t.a)}},function(t,e){t.exports=function(t){return t>16777215?{a:t>>>24,r:t>>16&255,g:t>>8&255,b:255&t}:{a:255,r:t>>16&255,g:t>>8&255,b:255&t}}},function(t,e,i){var n=i(32),s=i(406);t.exports=function(t){var e=s(t);return new n(e.r,e.g,e.b,e.a)}},function(t,e){t.exports=function(t,e,i,n){void 0===n&&(n={h:0,s:0,v:0}),t/=255,e/=255,i/=255;var s=Math.min(t,e,i),r=Math.max(t,e,i),o=r-s,a=0,h=0===r?0:o/r,l=r;return r!==s&&(r===t?a=(e-i)/o+(ed.right&&(f=u(f,f+(g-d.right),this.lerp.x)),vd.bottom&&(p=u(p,p+(v-d.bottom),this.lerp.y))):(f=u(f,g-h,this.lerp.x),p=u(p,v-l,this.lerp.y))}this.useBounds&&(f=this.clampX(f),p=this.clampY(p)),this.roundPixels&&(h=Math.round(h),l=Math.round(l)),this.scrollX=f,this.scrollY=p;var y=f+n,m=p+s;this.midPoint.set(y,m);var x=e/o,T=i/o;this.worldView.setTo(y-x/2,m-T/2,x,T),a.applyITRS(this.x+h,this.y+l,this.rotation,o,o),a.translate(-h,-l),this.shakeEffect.preRender()},setLerp:function(t,e){return void 0===t&&(t=1),void 0===e&&(e=t),this.lerp.set(t,e),this},setFollowOffset:function(t,e){return void 0===t&&(t=0),void 0===e&&(e=0),this.followOffset.set(t,e),this},startFollow:function(t,e,i,n,s,r){void 0===e&&(e=!1),void 0===i&&(i=1),void 0===n&&(n=i),void 0===s&&(s=0),void 0===r&&(r=s),this._follow=t,this.roundPixels=e,i=o(i,0,1),n=o(n,0,1),this.lerp.set(i,n),this.followOffset.set(s,r);var a=this.width/2,h=this.height/2,l=t.x-s,u=t.y-r;return this.midPoint.set(l,u),this.scrollX=l-a,this.scrollY=u-h,this},stopFollow:function(){return this._follow=null,this},resetFX:function(){return this.panEffect.reset(),this.shakeEffect.reset(),this.flashEffect.reset(),this.fadeEffect.reset(),this},update:function(t,e){this.visible&&(this.panEffect.update(t,e),this.zoomEffect.update(t,e),this.shakeEffect.update(t,e),this.flashEffect.update(t,e),this.fadeEffect.update(t,e))},destroy:function(){this.clearRenderToTexture(),this.resetFX(),n.prototype.destroy.call(this),this._follow=null,this.deadzone=null}});t.exports=f},function(t,e,i){var n=i(414),s=i(0),r=i(26),o=new s({initialize:function(t){this.game=t,this.binary=new n,this.bitmapFont=new n,this.json=new n,this.physics=new n,this.shader=new n,this.audio=new n,this.text=new n,this.html=new n,this.obj=new n,this.tilemap=new n,this.xml=new n,this.custom={},this.game.events.once(r.DESTROY,this.destroy,this)},addCustom:function(t){return this.custom.hasOwnProperty(t)||(this.custom[t]=new n),this.custom[t]},destroy:function(){for(var t=["binary","bitmapFont","json","physics","shader","audio","text","html","obj","tilemap","xml"],e=0;e-h&&(c-=h,n+=l),f=t.right&&(h=1,a+=o-t.right,o=t.right);break;case 1:(a+=e)>=t.bottom&&(h=2,o-=a-t.bottom,a=t.bottom);break;case 2:(o-=e)<=t.left&&(h=3,a-=t.left-o,o=t.left);break;case 3:(a-=e)<=t.top&&(h=0,a=t.top)}return r}},function(t,e,i){t.exports={CHANGE_DATA:i(1238),CHANGE_DATA_KEY:i(1237),REMOVE_DATA:i(1236),SET_DATA:i(1235)}},function(t,e){var i={_visible:!0,visible:{get:function(){return this._visible},set:function(t){t?(this._visible=!0,this.renderFlags|=1):(this._visible=!1,this.renderFlags&=-2)}},setVisible:function(t){return this.visible=t,this}};t.exports=i},function(t,e,i){var n=i(20),s=i(41),r=i(214),o=i(213),a={_scaleX:1,_scaleY:1,_rotation:0,x:0,y:0,z:0,w:0,scaleX:{get:function(){return this._scaleX},set:function(t){this._scaleX=t,0===this._scaleX?this.renderFlags&=-5:this.renderFlags|=4}},scaleY:{get:function(){return this._scaleY},set:function(t){this._scaleY=t,0===this._scaleY?this.renderFlags&=-5:this.renderFlags|=4}},angle:{get:function(){return o(this._rotation*n.RAD_TO_DEG)},set:function(t){this.rotation=o(t)*n.DEG_TO_RAD}},rotation:{get:function(){return this._rotation},set:function(t){this._rotation=r(t)}},setPosition:function(t,e,i,n){return void 0===t&&(t=0),void 0===e&&(e=t),void 0===i&&(i=0),void 0===n&&(n=0),this.x=t,this.y=e,this.z=i,this.w=n,this},setRandomPosition:function(t,e,i,n){return void 0===t&&(t=0),void 0===e&&(e=0),void 0===i&&(i=this.scene.sys.scale.width),void 0===n&&(n=this.scene.sys.scale.height),this.x=t+Math.random()*i,this.y=e+Math.random()*n,this},setRotation:function(t){return void 0===t&&(t=0),this.rotation=t,this},setAngle:function(t){return void 0===t&&(t=0),this.angle=t,this},setScale:function(t,e){return void 0===t&&(t=1),void 0===e&&(e=t),this.scaleX=t,this.scaleY=e,this},setX:function(t){return void 0===t&&(t=0),this.x=t,this},setY:function(t){return void 0===t&&(t=0),this.y=t,this},setZ:function(t){return void 0===t&&(t=0),this.z=t,this},setW:function(t){return void 0===t&&(t=0),this.w=t,this},getLocalTransformMatrix:function(t){return void 0===t&&(t=new s),t.applyITRS(this.x,this.y,this._rotation,this._scaleX,this._scaleY)},getWorldTransformMatrix:function(t,e){void 0===t&&(t=new s),void 0===e&&(e=new s);var i=this.parentContainer;if(!i)return this.getLocalTransformMatrix(t);for(t.applyITRS(this.x,this.y,this._rotation,this._scaleX,this._scaleY);i;)e.applyITRS(i.x,i.y,i._rotation,i._scaleX,i._scaleY),e.multiply(t,t),i=i.parentContainer;return t}};t.exports=a},function(t,e){t.exports=function(t){var e={name:t.name,type:t.type,x:t.x,y:t.y,depth:t.depth,scale:{x:t.scaleX,y:t.scaleY},origin:{x:t.originX,y:t.originY},flipX:t.flipX,flipY:t.flipY,rotation:t.rotation,alpha:t.alpha,visible:t.visible,scaleMode:t.scaleMode,blendMode:t.blendMode,textureKey:"",frameKey:"",data:{}};return t.texture&&(e.textureKey=t.texture.key,e.frameKey=t.frame.name),e}},function(t,e){var i={scrollFactorX:1,scrollFactorY:1,setScrollFactor:function(t,e){return void 0===e&&(e=t),this.scrollFactorX=t,this.scrollFactorY=e,this}};t.exports=i},function(t,e,i){var n=new(i(0))({initialize:function(t,e){this.geometryMask=e,this.invertAlpha=!1},setShape:function(t){this.geometryMask=t},preRenderWebGL:function(t,e,i){var n=t.gl,s=this.geometryMask;t.flush(),n.enable(n.STENCIL_TEST),n.clear(n.STENCIL_BUFFER_BIT),n.colorMask(!1,!1,!1,!1),n.stencilFunc(n.NOTEQUAL,1,1),n.stencilOp(n.REPLACE,n.REPLACE,n.REPLACE),s.renderWebGL(t,s,0,i),t.flush(),n.colorMask(!0,!0,!0,!0),this.invertAlpha?n.stencilFunc(n.NOTEQUAL,1,1):n.stencilFunc(n.EQUAL,1,1),n.stencilOp(n.KEEP,n.KEEP,n.KEEP)},postRenderWebGL:function(t){var e=t.gl;t.flush(),e.disable(e.STENCIL_TEST)},preRenderCanvas:function(t,e,i){var n=this.geometryMask;t.currentContext.save(),n.renderCanvas(t,n,0,i,null,null,!0),t.currentContext.clip()},postRenderCanvas:function(t){t.currentContext.restore()},destroy:function(){this.geometryMask=null}});t.exports=n},function(t,e,i){var n=new(i(0))({initialize:function(t,e){var i=t.sys.game.renderer;if(this.renderer=i,this.bitmapMask=e,this.maskTexture=null,this.mainTexture=null,this.dirty=!0,this.mainFramebuffer=null,this.maskFramebuffer=null,this.invertAlpha=!1,i&&i.gl){var n=i.width,s=i.height,r=0==(n&n-1)&&0==(s&s-1),o=i.gl,a=r?o.REPEAT:o.CLAMP_TO_EDGE,h=o.LINEAR;this.mainTexture=i.createTexture2D(0,h,h,a,a,o.RGBA,null,n,s),this.maskTexture=i.createTexture2D(0,h,h,a,a,o.RGBA,null,n,s),this.mainFramebuffer=i.createFramebuffer(n,s,this.mainTexture,!1),this.maskFramebuffer=i.createFramebuffer(n,s,this.maskTexture,!1),i.onContextRestored(function(t){var e=t.width,i=t.height,n=0==(e&e-1)&&0==(i&i-1),s=t.gl,r=n?s.REPEAT:s.CLAMP_TO_EDGE,o=s.LINEAR;this.mainTexture=t.createTexture2D(0,o,o,r,r,s.RGBA,null,e,i),this.maskTexture=t.createTexture2D(0,o,o,r,r,s.RGBA,null,e,i),this.mainFramebuffer=t.createFramebuffer(e,i,this.mainTexture,!1),this.maskFramebuffer=t.createFramebuffer(e,i,this.maskTexture,!1)},this)}},setBitmap:function(t){this.bitmapMask=t},preRenderWebGL:function(t,e,i){t.pipelines.BitmapMaskPipeline.beginMask(this,e,i)},postRenderWebGL:function(t){t.pipelines.BitmapMaskPipeline.endMask(this)},preRenderCanvas:function(){},postRenderCanvas:function(){},destroy:function(){this.bitmapMask=null;var t=this.renderer;t&&t.gl&&(t.deleteTexture(this.mainTexture),t.deleteTexture(this.maskTexture),t.deleteFramebuffer(this.mainFramebuffer),t.deleteFramebuffer(this.maskFramebuffer)),this.mainTexture=null,this.maskTexture=null,this.mainFramebuffer=null,this.maskFramebuffer=null,this.renderer=null}});t.exports=n},function(t,e,i){var n=i(426),s=i(425),r={mask:null,setMask:function(t){return this.mask=t,this},clearMask:function(t){return void 0===t&&(t=!1),t&&this.mask&&this.mask.destroy(),this.mask=null,this},createBitmapMask:function(t){return void 0===t&&this.texture&&(t=this),new n(this.scene,t)},createGeometryMask:function(t){return void 0===t&&"Graphics"===this.type&&(t=this),new s(this.scene,t)}};t.exports=r},function(t,e){t.exports=function(t,e,i,n){var s=Math.cos(n),r=Math.sin(n),o=t.x-e,a=t.y-i;return t.x=o*s-a*r+e,t.y=o*r+a*s+i,t}},function(t,e,i){var n=i(6);t.exports=function(t,e,i){return void 0===i&&(i=new n),i.x=t.x1+(t.x2-t.x1)*e,i.y=t.y1+(t.y2-t.y1)*e,i}},function(t,e,i){var n=i(204),s=i(135);t.exports=function(t,e,i,r){void 0===r&&(r=[]),e||(e=s(t)/i);for(var o=0;o=-1&&(this._blendMode=t)}},setBlendMode:function(t){return this.blendMode=t,this}};t.exports=s},function(t,e,i){var n=new(i(0))({initialize:function(t,e,i,n){this.textureKey=t,this.textureFrame=e,this.index=i,this.frame=n,this.isFirst=!1,this.isLast=!1,this.prevFrame=null,this.nextFrame=null,this.duration=0,this.progress=0},toJSON:function(){return{key:this.textureKey,frame:this.textureFrame,duration:this.duration}},destroy:function(){this.frame=void 0}});t.exports=n},function(t,e){t.exports=function(t,e,i){if(!e.length)return NaN;if(1===e.length)return e[0];var n,s,r=1;if(i){if(te.length&&(r=e.length),i?(n=e[r-1][i],(s=e[r][i])-t<=t-n?e[r]:e[r-1]):(n=e[r-1],(s=e[r])-t<=t-n?s:n)}},function(t,e,i){var n=i(23),s={_alpha:1,_alphaTL:1,_alphaTR:1,_alphaBL:1,_alphaBR:1,clearAlpha:function(){return this.setAlpha(1)},setAlpha:function(t,e,i,s){return void 0===t&&(t=1),void 0===e?this.alpha=t:(this._alphaTL=n(t,0,1),this._alphaTR=n(e,0,1),this._alphaBL=n(i,0,1),this._alphaBR=n(s,0,1)),this},alpha:{get:function(){return this._alpha},set:function(t){var e=n(t,0,1);this._alpha=e,this._alphaTL=e,this._alphaTR=e,this._alphaBL=e,this._alphaBR=e,0===e?this.renderFlags&=-3:this.renderFlags|=2}},alphaTopLeft:{get:function(){return this._alphaTL},set:function(t){var e=n(t,0,1);this._alphaTL=e,0!==e&&(this.renderFlags|=2)}},alphaTopRight:{get:function(){return this._alphaTR},set:function(t){var e=n(t,0,1);this._alphaTR=e,0!==e&&(this.renderFlags|=2)}},alphaBottomLeft:{get:function(){return this._alphaBL},set:function(t){var e=n(t,0,1);this._alphaBL=e,0!==e&&(this.renderFlags|=2)}},alphaBottomRight:{get:function(){return this._alphaBR},set:function(t){var e=n(t,0,1);this._alphaBR=e,0!==e&&(this.renderFlags|=2)}}};t.exports=s},function(t,e){t.exports=function(t){return Math.PI*t.radius*2}},function(t,e,i){var n=i(436),s=i(207),r=i(100),o=i(20);t.exports=function(t,e,i,a){void 0===a&&(a=[]),e||(e=n(t)/i);for(var h=0;h0&&n>0;if(o&&a){var h=o[0],l=o[1],u=o[2],c=o[3];a=h!==t||l!==e||u!==i||c!==n}a&&(this.flush(),r.scissor(t,s-e-n,i,n))},popScissor:function(){var t=this.scissorStack;t.pop();var e=t[t.length-1];e&&this.setScissor(e[0],e[1],e[2],e[3]),this.currentScissor=e},setPipeline:function(t,e){return this.currentPipeline===t&&this.currentPipeline.vertexBuffer===this.currentVertexBuffer&&this.currentPipeline.program===this.currentProgram||(this.flush(),this.currentPipeline=t,this.currentPipeline.bind()),this.currentPipeline.onBind(e),this.currentPipeline},rebindPipeline:function(t){var e=this.gl;e.disable(e.DEPTH_TEST),e.disable(e.CULL_FACE),e.disable(e.STENCIL_TEST),e.clear(e.DEPTH_BUFFER_BIT|e.STENCIL_BUFFER_BIT),e.viewport(0,0,this.width,this.height),this.setBlendMode(0,!0),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,this.blankTexture.glTexture),this.currentActiveTextureUnit=0,this.currentTextures[0]=this.blankTexture.glTexture,this.currentPipeline=t,this.currentPipeline.bind(),this.currentPipeline.onBind()},clearPipeline:function(){this.flush(),this.currentPipeline=null,this.currentProgram=null,this.currentVertexBuffer=null,this.currentIndexBuffer=null,this.setBlendMode(0,!0)},setBlendMode:function(t,e){void 0===e&&(e=!1);var i=this.gl,n=this.blendModes[t];return!!(e||t!==o.BlendModes.SKIP_CHECK&&this.currentBlendMode!==t)&&(this.flush(),i.enable(i.BLEND),i.blendEquation(n.equation),n.func.length>2?i.blendFuncSeparate(n.func[0],n.func[1],n.func[2],n.func[3]):i.blendFunc(n.func[0],n.func[1]),this.currentBlendMode=t,!0)},addBlendMode:function(t,e){return this.blendModes.push({func:t,equation:e})-1},updateBlendMode:function(t,e,i){return this.blendModes[t]&&(this.blendModes[t].func=e,i&&(this.blendModes[t].equation=i)),this},removeBlendMode:function(t){return t>17&&this.blendModes[t]&&this.blendModes.splice(t,1),this},setBlankTexture:function(t){void 0===t&&(t=!1),!t&&0===this.currentActiveTextureUnit&&this.currentTextures[0]||this.setTexture2D(this.blankTexture.glTexture,0)},setTexture2D:function(t,e,i){void 0===i&&(i=!0);var n=this.gl;return t!==this.currentTextures[e]&&(i&&this.flush(),this.currentActiveTextureUnit!==e&&(n.activeTexture(n.TEXTURE0+e),this.currentActiveTextureUnit=e),n.bindTexture(n.TEXTURE_2D,t),this.currentTextures[e]=t),this},setFramebuffer:function(t,e){void 0===e&&(e=!1);var i=this.gl,n=this.width,s=this.height;return t!==this.currentFramebuffer&&(t&&t.renderTexture?(n=t.renderTexture.width,s=t.renderTexture.height):this.flush(),i.bindFramebuffer(i.FRAMEBUFFER,t),i.viewport(0,0,n,s),e&&(t?(this.drawingBufferHeight=s,this.pushScissor(0,0,n,s)):(this.drawingBufferHeight=this.height,this.popScissor())),this.currentFramebuffer=t),this},setProgram:function(t){var e=this.gl;return t!==this.currentProgram&&(this.flush(),e.useProgram(t),this.currentProgram=t),this},setVertexBuffer:function(t){var e=this.gl;return t!==this.currentVertexBuffer&&(this.flush(),e.bindBuffer(e.ARRAY_BUFFER,t),this.currentVertexBuffer=t),this},setIndexBuffer:function(t){var e=this.gl;return t!==this.currentIndexBuffer&&(this.flush(),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t),this.currentIndexBuffer=t),this},createTextureFromSource:function(t,e,i,n){var s=this.gl,r=s.NEAREST,h=s.CLAMP_TO_EDGE;return e=t?t.width:e,i=t?t.height:i,a(e,i)&&(h=s.REPEAT),n===o.ScaleModes.LINEAR&&this.config.antialias&&(r=s.LINEAR),t||"number"!=typeof e||"number"!=typeof i?this.createTexture2D(0,r,r,h,h,s.RGBA,t):this.createTexture2D(0,r,r,h,h,s.RGBA,null,e,i)},createTexture2D:function(t,e,i,n,s,r,o,a,h,l){l=void 0===l||null===l||l;var u=this.gl,c=u.createTexture();return this.setTexture2D(c,0),u.texParameteri(u.TEXTURE_2D,u.TEXTURE_MIN_FILTER,e),u.texParameteri(u.TEXTURE_2D,u.TEXTURE_MAG_FILTER,i),u.texParameteri(u.TEXTURE_2D,u.TEXTURE_WRAP_S,s),u.texParameteri(u.TEXTURE_2D,u.TEXTURE_WRAP_T,n),u.pixelStorei(u.UNPACK_PREMULTIPLY_ALPHA_WEBGL,l),null===o||void 0===o?u.texImage2D(u.TEXTURE_2D,t,r,a,h,0,r,u.UNSIGNED_BYTE,null):(u.texImage2D(u.TEXTURE_2D,t,r,r,u.UNSIGNED_BYTE,o),a=o.width,h=o.height),this.setTexture2D(null,0),c.isAlphaPremultiplied=l,c.isRenderTexture=!1,c.width=a,c.height=h,this.nativeTextures.push(c),c},createFramebuffer:function(t,e,i,n){var s,r=this.gl,o=r.createFramebuffer();if(this.setFramebuffer(o),n){var a=r.createRenderbuffer();r.bindRenderbuffer(r.RENDERBUFFER,a),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,e),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_STENCIL_ATTACHMENT,r.RENDERBUFFER,a)}if(i.isRenderTexture=!0,i.isAlphaPremultiplied=!1,r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,i,0),(s=r.checkFramebufferStatus(r.FRAMEBUFFER))!==r.FRAMEBUFFER_COMPLETE){throw new Error("Framebuffer incomplete. Framebuffer status: "+{36054:"Incomplete Attachment",36055:"Missing Attachment",36057:"Incomplete Dimensions",36061:"Framebuffer Unsupported"}[s])}return o.renderTexture=i,this.setFramebuffer(null),o},createProgram:function(t,e){var i=this.gl,n=i.createProgram(),s=i.createShader(i.VERTEX_SHADER),r=i.createShader(i.FRAGMENT_SHADER);if(i.shaderSource(s,t),i.shaderSource(r,e),i.compileShader(s),i.compileShader(r),!i.getShaderParameter(s,i.COMPILE_STATUS))throw new Error("Failed to compile Vertex Shader:\n"+i.getShaderInfoLog(s));if(!i.getShaderParameter(r,i.COMPILE_STATUS))throw new Error("Failed to compile Fragment Shader:\n"+i.getShaderInfoLog(r));if(i.attachShader(n,s),i.attachShader(n,r),i.linkProgram(n),!i.getProgramParameter(n,i.LINK_STATUS))throw new Error("Failed to link program:\n"+i.getProgramInfoLog(n));return n},createVertexBuffer:function(t,e){var i=this.gl,n=i.createBuffer();return this.setVertexBuffer(n),i.bufferData(i.ARRAY_BUFFER,t,e),this.setVertexBuffer(null),n},createIndexBuffer:function(t,e){var i=this.gl,n=i.createBuffer();return this.setIndexBuffer(n),i.bufferData(i.ELEMENT_ARRAY_BUFFER,t,e),this.setIndexBuffer(null),n},deleteTexture:function(t){var e=this.nativeTextures.indexOf(t);return-1!==e&&h(this.nativeTextures,e),this.gl.deleteTexture(t),this.currentTextures[0]!==t||this.game.pendingDestroy||this.setBlankTexture(!0),this},deleteFramebuffer:function(t){return this.gl.deleteFramebuffer(t),this},deleteProgram:function(t){return this.gl.deleteProgram(t),this},deleteBuffer:function(t){return this.gl.deleteBuffer(t),this},preRenderCamera:function(t){var e=t._cx,i=t._cy,n=t._cw,r=t._ch,o=this.pipelines.TextureTintPipeline,a=t.backgroundColor;if(t.renderToTexture){this.flush(),this.pushScissor(e,i,n,-r),this.setFramebuffer(t.framebuffer);var h=this.gl;h.clearColor(0,0,0,0),h.clear(h.COLOR_BUFFER_BIT),o.projOrtho(e,n+e,i,r+i,-1e3,1e3),a.alphaGL>0&&o.drawFillRect(e,i,n+e,r+i,c.getTintFromFloats(a.redGL,a.greenGL,a.blueGL,1),a.alphaGL),t.emit(s.PRE_RENDER,t)}else this.pushScissor(e,i,n,r),a.alphaGL>0&&o.drawFillRect(e,i,n,r,c.getTintFromFloats(a.redGL,a.greenGL,a.blueGL,1),a.alphaGL)},postRenderCamera:function(t){var e=this.pipelines.TextureTintPipeline;if(t.flashEffect.postRenderWebGL(e,c.getTintFromFloats),t.fadeEffect.postRenderWebGL(e,c.getTintFromFloats),t.dirty=!1,this.popScissor(),t.renderToTexture){e.flush(),this.setFramebuffer(null),t.emit(s.POST_RENDER,t),e.projOrtho(0,e.width,e.height,0,-1e3,1e3);var i=c.getTintAppendFloatAlpha;(t.pipeline?t.pipeline:e).batchTexture(t,t.glTexture,t.width,t.height,t.x,t.y,t.width,t.height,t.zoom,t.zoom,t.rotation,t.flipX,!t.flipY,1,1,0,0,0,0,t.width,t.height,i(t._tintTL,t._alphaTL),i(t._tintTR,t._alphaTR),i(t._tintBL,t._alphaBL),i(t._tintBR,t._alphaBR),t._isTinted&&t.tintFill,0,0,this.defaultCamera,null),this.setBlankTexture(!0)}},preRender:function(){if(!this.contextLost){var t=this.gl,e=this.pipelines;if(t.bindFramebuffer(t.FRAMEBUFFER,null),this.config.clearBeforeRender){var i=this.config.backgroundColor;t.clearColor(i.redGL,i.greenGL,i.blueGL,i.alphaGL),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT|t.STENCIL_BUFFER_BIT)}for(var n in t.enable(t.SCISSOR_TEST),e)e[n].onPreRender();this.currentScissor=[0,0,this.width,this.height],this.scissorStack=[this.currentScissor],this.game.scene.customViewports&&t.scissor(0,this.drawingBufferHeight-this.height,this.width,this.height),this.setPipeline(this.pipelines.TextureTintPipeline)}},render:function(t,e,i,n){if(!this.contextLost){var s=e.list,r=s.length,a=this.pipelines;for(var h in a)a[h].onRender(t,n);this.preRenderCamera(n);for(var l=0;l=0?g=-(g+d):g<0&&(g=Math.abs(g)-d)),-1===m&&(v>=0?v=-(v+f):v<0&&(v=Math.abs(v)-f))}a.applyITRS(t.x,t.y,t.rotation,t.scaleX,t.scaleY),o.copyFrom(i.matrix),n?(o.multiplyWithOffset(n,-i.scrollX*t.scrollFactorX,-i.scrollY*t.scrollFactorY),a.e=t.x,a.f=t.y,o.multiply(a,h)):(a.e-=i.scrollX*t.scrollFactorX,a.f-=i.scrollY*t.scrollFactorY,o.multiply(a,h)),r.save(),h.setToContext(r),r.scale(y,m),r.globalCompositeOperation=this.blendModes[t.blendMode],r.globalAlpha=s,r.drawImage(e.source.image,u,c,d,f,g,v,d/p,f/p),r.restore()}},destroy:function(){this.gameCanvas=null,this.gameContext=null,this.game=null}});t.exports=c},function(t,e,i){var n=i(205),s=i(0),r=i(136),o=new s({initialize:function(t){this.parent=t,this.animationManager=t.scene.sys.anims,this.animationManager.once(r.REMOVE_ANIMATION,this.remove,this),this.isPlaying=!1,this.currentAnim=null,this.currentFrame=null,this.nextAnim=null,this._timeScale=1,this.frameRate=0,this.duration=0,this.msPerFrame=0,this.skipMissedFrames=!0,this._delay=0,this._repeat=0,this._repeatDelay=0,this._yoyo=!1,this.forward=!0,this._reverse=!1,this.accumulator=0,this.nextTick=0,this.repeatCounter=0,this.pendingRepeat=!1,this._paused=!1,this._wasPlaying=!1,this._pendingStop=0,this._pendingStopValue},chain:function(t){return t instanceof n&&(t=t.key),this.nextAnim=t,this.parent},setDelay:function(t){return void 0===t&&(t=0),this._delay=t,this.parent},getDelay:function(){return this._delay},delayedPlay:function(t,e,i){return this.play(e,!0,i),this.nextTick+=t,this.parent},getCurrentKey:function(){if(this.currentAnim)return this.currentAnim.key},load:function(t,e){return void 0===e&&(e=0),this.isPlaying&&this.stop(),this.animationManager.load(this,t,e),this.parent},pause:function(t){return this._paused||(this._paused=!0,this._wasPlaying=this.isPlaying,this.isPlaying=!1),void 0!==t&&this.updateFrame(t),this.parent},resume:function(t){return this._paused&&(this._paused=!1,this.isPlaying=this._wasPlaying),void 0!==t&&this.updateFrame(t),this.parent},isPaused:{get:function(){return this._paused}},play:function(t,e,i){return void 0===e&&(e=!1),void 0===i&&(i=0),t instanceof n&&(t=t.key),e&&this.isPlaying&&this.currentAnim.key===t?this.parent:(this.forward=!0,this._reverse=!1,this._startAnimation(t,i))},playReverse:function(t,e,i){return void 0===e&&(e=!1),void 0===i&&(i=0),t instanceof n&&(t=t.key),e&&this.isPlaying&&this.currentAnim.key===t?this.parent:(this.forward=!1,this._reverse=!0,this._startAnimation(t,i))},_startAnimation:function(t,e){this.load(t,e);var i=this.currentAnim,n=this.parent;this.repeatCounter=-1===this._repeat?Number.MAX_VALUE:this._repeat,i.getFirstTick(this),this.isPlaying=!0,this.pendingRepeat=!1,i.showOnStart&&(n.visible=!0);var s=this.currentFrame;return i.emit(r.ANIMATION_START,i,s,n),n.emit(r.SPRITE_ANIMATION_KEY_START+t,i,s,n),n.emit(r.SPRITE_ANIMATION_START,i,s,n),n},reverse:function(){return this.isPlaying&&(this._reverse=!this._reverse,this.forward=!this.forward),this.parent},getProgress:function(){var t=this.currentFrame.progress;return this.forward||(t=1-t),t},setProgress:function(t){return this.forward||(t=1-t),this.setCurrentFrame(this.currentAnim.getFrameByProgress(t)),this.parent},remove:function(t,e){void 0===e&&(e=this.currentAnim),this.isPlaying&&e.key===this.currentAnim.key&&(this.stop(),this.setCurrentFrame(this.currentAnim.frames[0]))},getRepeat:function(){return this._repeat},setRepeat:function(t){return this._repeat=t,this.repeatCounter=0,this.parent},getRepeatDelay:function(){return this._repeatDelay},setRepeatDelay:function(t){return this._repeatDelay=t,this.parent},restart:function(t){void 0===t&&(t=!1);var e=this.currentAnim;e.getFirstTick(this,t),this.forward=!0,this.isPlaying=!0,this.pendingRepeat=!1,this._paused=!1,this.updateFrame(e.frames[0]);var i=this.parent,n=this.currentFrame;return e.emit(r.ANIMATION_RESTART,e,n,i),i.emit(r.SPRITE_ANIMATION_KEY_RESTART+e.key,e,n,i),i.emit(r.SPRITE_ANIMATION_RESTART,e,n,i),this.parent},stop:function(){this._pendingStop=0,this.isPlaying=!1;var t=this.parent,e=this.currentAnim,i=this.currentFrame;if(e&&(e.emit(r.ANIMATION_COMPLETE,e,i,t),t.emit(r.SPRITE_ANIMATION_KEY_COMPLETE+e.key,e,i,t),t.emit(r.SPRITE_ANIMATION_COMPLETE,e,i,t)),this.nextAnim){var n=this.nextAnim;this.nextAnim=null,this.play(n)}return t},stopAfterDelay:function(t){return this._pendingStop=1,this._pendingStopValue=t,this.parent},stopOnRepeat:function(){return this._pendingStop=2,this.parent},stopOnFrame:function(t){return this._pendingStop=3,this._pendingStopValue=t,this.parent},setTimeScale:function(t){return void 0===t&&(t=1),this._timeScale=t,this.parent},getTimeScale:function(){return this._timeScale},getTotalFrames:function(){return this.currentAnim.frames.length},update:function(t,e){if(this.currentAnim&&this.isPlaying&&!this.currentAnim.paused){if(this.accumulator+=e*this._timeScale,1===this._pendingStop&&(this._pendingStopValue-=e,this._pendingStopValue<=0))return this.currentAnim.completeAnimation(this);this.accumulator>=this.nextTick&&this.currentAnim.setFrame(this)}},setCurrentFrame:function(t){var e=this.parent;return this.currentFrame=t,e.texture=t.frame.texture,e.frame=t.frame,e.isCropped&&e.frame.updateCropUVs(e._crop,e.flipX,e.flipY),e.setSizeToFrame(),t.frame.customPivot?e.setOrigin(t.frame.pivotX,t.frame.pivotY):e.updateDisplayOrigin(),e},updateFrame:function(t){var e=this.setCurrentFrame(t);if(this.isPlaying){t.setAlpha&&(e.alpha=t.alpha);var i=this.currentAnim;e.emit(r.SPRITE_ANIMATION_KEY_UPDATE+i.key,i,t,e),e.emit(r.SPRITE_ANIMATION_UPDATE,i,t,e),3===this._pendingStop&&this._pendingStopValue===t&&this.currentAnim.completeAnimation(this)}},nextFrame:function(){return this.currentAnim&&this.currentAnim.nextFrame(this),this.parent},previousFrame:function(){return this.currentAnim&&this.currentAnim.previousFrame(this),this.parent},setYoyo:function(t){return void 0===t&&(t=!1),this._yoyo=t,this.parent},getYoyo:function(){return this._yoyo},destroy:function(){this.animationManager.off(r.REMOVE_ANIMATION,this.remove,this),this.animationManager=null,this.parent=null,this.currentAnim=null,this.currentFrame=null}});t.exports=o},function(t,e){t.exports=function(t){return t.split("").reverse().join("")}},function(t,e){t.exports=function(t,e){return t.replace(/%([0-9]+)/g,function(t,i){return e[Number(i)-1]})}},function(t,e,i){t.exports={Format:i(462),Pad:i(193),Reverse:i(461),UppercaseFirst:i(330),UUID:i(299)}},function(t,e,i){var n=i(70);t.exports=function(t,e){var i=n(t);for(var s in e)i.hasOwnProperty(s)&&(i[s]=e[s]);return i}},function(t,e){t.exports=function(t,e){for(var i=0;i-1&&(e.state=h.REMOVED,s.splice(r,1)):(e.state=h.REMOVED,n.splice(r,1))}for(i.length=0,i=this._add,t=0;t-1&&this._active.splice(s,1),n.destroy()}for(i=0;i=n.delay)){var s=n.elapsed-n.delay;n.elapsed=n.delay,!n.hasDispatched&&n.callback&&(n.hasDispatched=!0,n.callback.apply(n.callbackScope,n.args)),n.repeatCount>0?(n.repeatCount--,n.elapsed=s,n.hasDispatched=!1):this._pendingRemoval.push(n)}}}},shutdown:function(){var t;for(t=0;t0&&(t.currentPipeline&&t.currentPipeline.vertexCount>0&&t.flush(),r.vertexBuffer=e.vertexBuffer[a],t.setPipeline(r),t.setTexture2D(s[a].glTexture,0),t.gl.drawArrays(r.topology,0,e.vertexCount[a]));r.vertexBuffer=o,r.viewIdentity(),r.modelIdentity()}},function(t,e,i){var n=i(1),s=i(1);n=i(484),s=i(483),t.exports={renderWebGL:n,renderCanvas:s}},function(t,e){t.exports=function(t,e,i,n,s){e.cull(n);var r=e.culledTiles,o=r.length;if(0!==o){var a=t._tempMatrix1,h=t._tempMatrix2,l=t._tempMatrix3;h.applyITRS(e.x,e.y,e.rotation,e.scaleX,e.scaleY),a.copyFrom(n.matrix);var u=t.currentContext,c=e.gidMap;u.save(),s?(a.multiplyWithOffset(s,-n.scrollX*e.scrollFactorX,-n.scrollY*e.scrollFactorY),h.e=e.x,h.f=e.y,a.multiply(h,l),l.copyToContext(u)):(h.e-=n.scrollX*e.scrollFactorX,h.f-=n.scrollY*e.scrollFactorY,h.copyToContext(u));for(var d=n.alpha*e.alpha,f=0;f-1?new s(a,f,c,u,o.tilesize,o.tilesize):e?null:new s(a,-1,c,u,o.tilesize,o.tilesize),h.push(d)}l.push(h),h=[]}a.data=l,i.push(a)}return i}},function(t,e,i){var n=i(19);t.exports=function(t){for(var e,i,s,r,o,a=0;a1){if(Array.isArray(l.tiles)){for(var c={},d={},f=0;f>>0;return n}},function(t,e,i){var n=i(497),s=i(2),r=i(84),o=i(230),a=i(61);t.exports=function(t,e){for(var i=[],h=0;h0){var y=new a(u,v.gid,c,f.length,t.tilewidth,t.tileheight);y.rotation=v.rotation,y.flipX=v.flipped,d.push(y)}else{var m=e?null:new a(u,-1,c,f.length,t.tilewidth,t.tileheight);d.push(m)}++c===l.width&&(f.push(d),c=0,d=[])}u.data=f,i.push(u)}}return i}},function(t,e,i){t.exports={Parse:i(233),Parse2DArray:i(145),ParseCSV:i(232),Impact:i(226),Tiled:i(231)}},function(t,e,i){var n=i(54),s=i(53),r=i(3);t.exports=function(t,e,i,o,a,h){return void 0===o&&(o=new r(0,0)),o.x=n(t,i,a,h),o.y=s(e,i,a,h),o}},function(t,e,i){var n=i(21);t.exports=function(t,e,i,s,r,o){if(void 0!==r){var a,h=n(t,e,i,s,null,o),l=0;for(a=0;a0&&n(a,t)}}e&&s(0,0,i.width,i.height,i)}},function(t,e,i){var n=i(62),s=i(37),r=i(91);t.exports=function(t,e,i,o){void 0===e&&(e=!0),void 0===i&&(i=!0);for(var a=0;ae)){for(var h=t;h<=e;h++)r(h,i,a);for(var l=0;l=t&&c.index<=e&&n(c,i)}o&&s(0,0,a.width,a.height,a)}}},function(t,e,i){var n=i(62),s=i(37),r=i(146);t.exports=function(t,e,i,o){void 0===e&&(e=!0),void 0===i&&(i=!0),Array.isArray(t)||(t=[t]);for(var a=0;a=0;r--)for(s=n.width-1;s>=0;s--)if((o=n.data[r][s])&&o.index===t){if(a===e)return o;a+=1}}else for(r=0;r=v;o--)(h=c[a][o])&&-1!==h.index&&h.visible&&0!==h.alpha&&i.push(h);else if(2===r)for(a=x;a>=m;a--)for(o=v;c[a]&&o=m;a--)for(o=y;c[a]&&o>=v;o--)(h=c[a][o])&&-1!==h.index&&h.visible&&0!==h.alpha&&i.push(h);return u.tilesDrawn=i.length,u.tilesTotal=d*f,i}},function(t,e,i){var n=i(108),s=i(107),r=i(21),o=i(236);t.exports=function(t,e,i,a,h,l){void 0===i&&(i={}),Array.isArray(t)||(t=[t]);var u=l.tilemapLayer;void 0===a&&(a=u.scene),void 0===h&&(h=a.cameras.main);var c,d=r(0,0,l.width,l.height,null,l),f=[];for(c=0;c=0&&p=0&&g=this._duration&&this.transitionComplete()},transitionComplete:function(){var t=this._target.sys,e=this._target.sys.settings;this.systems.events.off(r.UPDATE,this.step,this),t.events.emit(r.TRANSITION_COMPLETE,this.scene),e.isTransition=!1,e.transitionFrom=null,this._duration=0,this._target=null,this._onUpdate=null,this._onUpdateScope=null,this._willRemove?this.manager.remove(this.key):this._willSleep?this.systems.sleep():this.manager.stop(this.key)},add:function(t,e,i,n){return this.manager.add(t,e,i,n),this},launch:function(t,e){return t&&t!==this.key&&this.manager.queueOp("start",t,e),this},run:function(t,e){return t&&t!==this.key&&this.manager.queueOp("run",t,e),this},pause:function(t,e){return void 0===t&&(t=this.key),this.manager.queueOp("pause",t,e),this},resume:function(t,e){return void 0===t&&(t=this.key),this.manager.queueOp("resume",t,e),this},sleep:function(t,e){return void 0===t&&(t=this.key),this.manager.queueOp("sleep",t,e),this},wake:function(t,e){return void 0===t&&(t=this.key),this.manager.queueOp("wake",t,e),this},switch:function(t){return t!==this.key&&this.manager.queueOp("switch",this.key,t),this},stop:function(t){return void 0===t&&(t=this.key),this.manager.queueOp("stop",t),this},setActive:function(t,e,i){void 0===e&&(e=this.key);var n=this.manager.getScene(e);return n&&n.sys.setActive(t,i),this},setVisible:function(t,e){void 0===e&&(e=this.key);var i=this.manager.getScene(e);return i&&i.sys.setVisible(t),this},isSleeping:function(t){return void 0===t&&(t=this.key),this.manager.isSleeping(t)},isActive:function(t){return void 0===t&&(t=this.key),this.manager.isActive(t)},isVisible:function(t){return void 0===t&&(t=this.key),this.manager.isVisible(t)},swapPosition:function(t,e){return void 0===e&&(e=this.key),t!==e&&this.manager.swapPosition(t,e),this},moveAbove:function(t,e){return void 0===e&&(e=this.key),t!==e&&this.manager.moveAbove(t,e),this},moveBelow:function(t,e){return void 0===e&&(e=this.key),t!==e&&this.manager.moveBelow(t,e),this},remove:function(t){return void 0===t&&(t=this.key),this.manager.remove(t),this},moveUp:function(t){return void 0===t&&(t=this.key),this.manager.moveUp(t),this},moveDown:function(t){return void 0===t&&(t=this.key),this.manager.moveDown(t),this},bringToTop:function(t){return void 0===t&&(t=this.key),this.manager.bringToTop(t),this},sendToBack:function(t){return void 0===t&&(t=this.key),this.manager.sendToBack(t),this},get:function(t){return this.manager.getScene(t)},getIndex:function(t){return void 0===t&&(t=this.key),this.manager.getIndex(t)},shutdown:function(){var t=this.systems.events;t.off(r.SHUTDOWN,this.shutdown,this),t.off(r.POST_UPDATE,this.step,this),t.off(r.TRANSITION_OUT)},destroy:function(){this.shutdown(),this.scene.sys.events.off(r.START,this.start,this),this.scene=null,this.systems=null,this.settings=null,this.manager=null}});a.register("ScenePlugin",h,"scenePlugin"),t.exports=h},function(t,e,i){var n=i(124),s=i(19),r={Events:i(16),SceneManager:i(332),ScenePlugin:i(534),Settings:i(329),Systems:i(176)};r=s(!1,r,n),t.exports=r},function(t,e,i){var n=i(19),s=i(178),r={Center:i(349),Events:i(334),Orientation:i(348),ScaleManager:i(335),ScaleModes:i(347),Zoom:i(346)};r=n(!1,r=n(!1,r=n(!1,r=n(!1,r,s.CENTER),s.ORIENTATION),s.SCALE_MODE),s.ZOOM),t.exports=r},function(t,e,i){var n=i(237),s=i(0),r=i(16),o=new s({Extends:n,initialize:function(t,e){n.call(this,e),this.scene=t,this.systems=t.sys,t.sys.events.once(r.BOOT,this.boot,this)},boot:function(){}});t.exports=o},function(t,e,i){t.exports={BasePlugin:i(237),DefaultPlugins:i(181),PluginCache:i(17),PluginManager:i(336),ScenePlugin:i(537)}},function(t,e,i){var n={};t.exports=n;var s=i(149),r=(i(209),i(36));n.create=function(t){var e=s.create(),i={label:"World",gravity:{x:0,y:1,scale:.001},bounds:{min:{x:-1/0,y:-1/0},max:{x:1/0,y:1/0}}};return r.extend(e,i,t)}},function(t,e,i){var n={};t.exports=n;var s=i(36);n._registry={},n.register=function(t){if(n.isPlugin(t)||s.warn("Plugin.register:",n.toString(t),"does not implement all required fields."),t.name in n._registry){var e=n._registry[t.name],i=n.versionParse(t.version).number,r=n.versionParse(e.version).number;i>r?(s.warn("Plugin.register:",n.toString(e),"was upgraded to",n.toString(t)),n._registry[t.name]=t):i-1},n.isFor=function(t,e){var i=t.for&&n.dependencyParse(t.for);return!t.for||e.name===i.name&&n.versionSatisfies(e.version,i.range)},n.use=function(t,e){if(t.uses=(t.uses||[]).concat(e||[]),0!==t.uses.length){for(var i=n.dependencies(t),r=s.topologicalSort(i),o=[],a=0;a0&&!h.silent&&s.info(o.join(" "))}else s.warn("Plugin.use:",n.toString(t),"does not specify any dependencies to install.")},n.dependencies=function(t,e){var i=n.dependencyParse(t),r=i.name;if(!(r in(e=e||{}))){t=n.resolve(t)||t,e[r]=s.map(t.uses||[],function(e){n.isPlugin(e)&&n.register(e);var r=n.dependencyParse(e),o=n.resolve(e);return o&&!n.versionSatisfies(o.version,r.range)?(s.warn("Plugin.dependencies:",n.toString(o),"does not satisfy",n.toString(r),"used by",n.toString(i)+"."),o._warned=!0,t._warned=!0):o||(s.warn("Plugin.dependencies:",n.toString(e),"used by",n.toString(i),"could not be resolved."),t._warned=!0),r.name});for(var o=0;o=s[2];if("^"===i.operator)return s[0]>0?o[0]===s[0]&&r.number>=i.number:s[1]>0?o[1]===s[1]&&o[2]>=s[2]:o[2]===s[2]}return t===e||"*"===t}},function(t,e,i){var n=i(1286);n.Body=i(72),n.Composite=i(149),n.World=i(539),n.Detector=i(543),n.Grid=i(1285),n.Pairs=i(1284),n.Pair=i(451),n.Query=i(1310),n.Resolver=i(1283),n.SAT=i(542),n.Constraint=i(209),n.Common=i(36),n.Engine=i(1282),n.Events=i(210),n.Sleeping=i(238),n.Plugin=i(540),n.Bodies=i(138),n.Composites=i(1289),n.Axes=i(546),n.Bounds=i(86),n.Svg=i(1308),n.Vector=i(87),n.Vertices=i(82),n.World.add=n.Composite.add,n.World.remove=n.Composite.remove,n.World.addComposite=n.Composite.addComposite,n.World.addBody=n.Composite.addBody,n.World.addConstraint=n.Composite.addConstraint,n.World.clear=n.Composite.clear,t.exports=n},function(t,e,i){var n={};t.exports=n;var s=i(82),r=i(87);n.collides=function(t,e,i){var o,a,h,l,u=!1;if(i){var c=t.parent,d=e.parent,f=c.speed*c.speed+c.angularSpeed*c.angularSpeed+d.speed*d.speed+d.angularSpeed*d.angularSpeed;u=i&&i.collided&&f<.2,l=i}else l={collided:!1,bodyA:t,bodyB:e};if(i&&u){var p=l.axisBody,g=p===t?e:t,v=[p.axes[i.axisNumber]];if(h=n._overlapAxes(p.vertices,g.vertices,v),l.reused=!0,h.overlap<=0)return l.collided=!1,l}else{if((o=n._overlapAxes(t.vertices,e.vertices,t.axes)).overlap<=0)return l.collided=!1,l;if((a=n._overlapAxes(e.vertices,t.vertices,e.axes)).overlap<=0)return l.collided=!1,l;o.overlaps?s=a:a=0?o.index-1:u.length-1],l.x=s.x-c.x,l.y=s.y-c.y,h=-r.dot(i,l),a=s,s=u[(o.index+1)%u.length],l.x=s.x-c.x,l.y=s.y-c.y,(n=-r.dot(i,l))1?1:0;d1?1:0;p0:0!=(t.mask&e.category)&&0!=(e.mask&t.category)}},function(t,e,i){var n=i(138),s=i(72),r=i(0),o=i(452),a=i(2),h=i(91),l=i(82),u=new r({Mixins:[o.Bounce,o.Collision,o.Friction,o.Gravity,o.Mass,o.Sensor,o.Sleep,o.Static],initialize:function(t,e,i){this.tile=e,this.world=t,e.physics.matterBody&&e.physics.matterBody.destroy(),e.physics.matterBody=this;var n=a(i,"body",null),s=a(i,"addToWorld",!0);if(n)this.setBody(n,s);else{var r=e.getCollisionGroup();a(r,"objects",[]).length>0?this.setFromTileCollision(i):this.setFromTileRectangle(i)}},setFromTileRectangle:function(t){void 0===t&&(t={}),h(t,"isStatic")||(t.isStatic=!0),h(t,"addToWorld")||(t.addToWorld=!0);var e=this.tile.getBounds(),i=e.x+e.width/2,s=e.y+e.height/2,r=n.rectangle(i,s,e.width,e.height,t);return this.setBody(r,t.addToWorld),this},setFromTileCollision:function(t){void 0===t&&(t={}),h(t,"isStatic")||(t.isStatic=!0),h(t,"addToWorld")||(t.addToWorld=!0);for(var e=this.tile.tilemapLayer.scaleX,i=this.tile.tilemapLayer.scaleY,r=this.tile.getLeft(),o=this.tile.getTop(),u=this.tile.getCollisionGroup(),c=a(u,"objects",[]),d=[],f=0;f1&&(t.parts=d,this.setBody(s.create(t),t.addToWorld)),this},setBody:function(t,e){return void 0===e&&(e=!0),this.body&&this.removeBody(),this.body=t,this.body.gameObject=this,e&&this.world.add(this.body),this},removeBody:function(){return this.body&&(this.world.remove(this.body),this.body.gameObject=void 0,this.body=void 0),this},destroy:function(){this.removeBody(),this.tile.physics.matterBody=void 0}});t.exports=u},function(t,e,i){t.exports={AFTER_UPDATE:i(1322),BEFORE_UPDATE:i(1321),COLLISION_ACTIVE:i(1320),COLLISION_END:i(1319),COLLISION_START:i(1318),PAUSE:i(1317),RESUME:i(1316),SLEEP_END:i(1315),SLEEP_START:i(1314)}},function(t,e,i){var n={};t.exports=n;var s=i(87),r=i(36);n.fromVertices=function(t){for(var e={},i=0;i0?1:-1),l=Math.sqrt(o*o*t.mass/e.mass)*(o>0?1:-1),u=.5*(h+l);h-=u,l-=u,t.velocity.y=u+h*t.bounce.y,e.velocity.y=u+l*e.bounce.y}return!0}},function(t,e,i){var n=i(246);t.exports=function(t,e,i,s){var r=n(t,e,i,s);if(i||0===r||t.immovable&&e.immovable||t.customSeparateX||e.customSeparateX)return 0!==r||t.embedded&&e.embedded;var o=t.velocity.x,a=e.velocity.x;if(t.immovable||e.immovable)t.immovable?(e.x+=r,e.velocity.x=o-a*e.bounce.x,t.moves&&(e.y+=(t.y-t.prev.y)*t.friction.y)):(t.x-=r,t.velocity.x=a-o*t.bounce.x,e.moves&&(t.y+=(e.y-e.prev.y)*e.friction.y));else{r*=.5,t.x-=r,e.x+=r;var h=Math.sqrt(a*a*e.mass/t.mass)*(a>0?1:-1),l=Math.sqrt(o*o*t.mass/e.mass)*(o>0?1:-1),u=.5*(h+l);h-=u,l-=u,t.velocity.x=u+h*t.bounce.x,e.velocity.x=u+l*e.bounce.x}return!0}},function(t,e){t.exports=function(t,e){e<0?(t.blocked.none=!1,t.blocked.up=!0):e>0&&(t.blocked.none=!1,t.blocked.down=!0),t.position.y-=e,0===t.bounce.y?t.velocity.y=0:t.velocity.y=-t.velocity.y*t.bounce.y}},function(t,e,i){var n=i(551);t.exports=function(t,e,i,s,r){var o=0;return t.deltaY()<0&&!t.blocked.up&&e.collideDown&&t.checkCollision.up?e.faceBottom&&t.y0&&!t.blocked.down&&e.collideUp&&t.checkCollision.down&&e.faceTop&&t.bottom>i&&(o=t.bottom-i)>r&&(o=0),0!==o&&(t.customSeparateY?t.overlapY=o:n(t,o)),o}},function(t,e){t.exports=function(t,e){e<0?(t.blocked.none=!1,t.blocked.left=!0):e>0&&(t.blocked.none=!1,t.blocked.right=!0),t.position.x-=e,0===t.bounce.x?t.velocity.x=0:t.velocity.x=-t.velocity.x*t.bounce.x}},function(t,e,i){var n=i(553);t.exports=function(t,e,i,s,r){var o=0;return t.deltaX()<0&&!t.blocked.left&&e.collideRight&&t.checkCollision.left?e.faceRight&&t.x0&&!t.blocked.right&&e.collideLeft&&t.checkCollision.right&&e.faceLeft&&t.right>i&&(o=t.right-i)>r&&(o=0),0!==o&&(t.customSeparateX?t.overlapX=o:n(t,o)),o}},function(t,e,i){var n=i(554),s=i(552),r=i(242);t.exports=function(t,e,i,o,a,h){var l=o.left,u=o.top,c=o.right,d=o.bottom,f=i.faceLeft||i.faceRight,p=i.faceTop||i.faceBottom;if(!f&&!p)return!1;var g=0,v=0,y=0,m=1;if(e.deltaAbsX()>e.deltaAbsY()?y=-1:e.deltaAbsX()=0;a--){var h=e[a],l=o(s,r,h.x,h.y);l=0;a--){var h=e[a],l=o(s,r,h.x,h.y);l>i&&(n=h,i=l)}return n},moveTo:function(t,e,i,n,s){void 0===n&&(n=60),void 0===s&&(s=0);var o=Math.atan2(i-t.y,e-t.x);return s>0&&(n=r(t.x,t.y,e,i)/(s/1e3)),t.body.velocity.setToPolar(o,n),o},moveToObject:function(t,e,i,n){return this.moveTo(t,e.x,e.y,i,n)},velocityFromAngle:function(t,e,i){return void 0===e&&(e=60),void 0===i&&(i=new d),i.setToPolar(s(t),e)},velocityFromRotation:function(t,e,i){return void 0===e&&(e=60),void 0===i&&(i=new d),i.setToPolar(t,e)},shutdown:function(){if(this.world){var t=this.systems.events;t.off(c.UPDATE,this.world.update,this.world),t.off(c.POST_UPDATE,this.world.postUpdate,this.world),t.off(c.SHUTDOWN,this.shutdown,this),this.add.destroy(),this.world.destroy(),this.add=null,this.world=null}},destroy:function(){this.shutdown(),this.scene.sys.events.off(c.START,this.start,this),this.scene=null,this.systems=null}});u.register("ArcadePhysics",p,"arcadePhysics"),t.exports=p},function(t,e,i){var n=i(38),s=i(19),r={ArcadePhysics:i(576),Body:i(249),Collider:i(247),Factory:i(255),Group:i(252),Image:i(254),Sprite:i(111),StaticBody:i(241),StaticGroup:i(251),World:i(250)};r=s(!1,r,n),t.exports=r},function(t,e,i){var n=i(0),s=i(15),r=i(102),o=i(11),a=i(75),h=i(7),l=i(2),u=i(17),c=i(16),d=i(112),f=new n({Extends:o,initialize:function(t){o.call(this);var e=t.sys.game.config,i=t.sys.settings.loader;this.scene=t,this.systems=t.sys,this.cacheManager=t.sys.cache,this.textureManager=t.sys.textures,this.sceneManager=t.sys.game.scene,h.install(this),this.prefix="",this.path="",this.baseURL="",this.setBaseURL(l(i,"baseURL",e.loaderBaseURL)),this.setPath(l(i,"path",e.loaderPath)),this.setPrefix(l(i,"prefix",e.loaderPrefix)),this.maxParallelDownloads=l(i,"maxParallelDownloads",e.loaderMaxParallelDownloads),this.xhr=d(l(i,"responseType",e.loaderResponseType),l(i,"async",e.loaderAsync),l(i,"user",e.loaderUser),l(i,"password",e.loaderPassword),l(i,"timeout",e.loaderTimeout)),this.crossOrigin=l(i,"crossOrigin",e.loaderCrossOrigin),this.totalToLoad=0,this.progress=0,this.list=new r,this.inflight=new r,this.queue=new r,this._deleteQueue=new r,this.totalFailed=0,this.totalComplete=0,this.state=s.LOADER_IDLE,t.sys.events.once(c.BOOT,this.boot,this),t.sys.events.on(c.START,this.pluginStart,this)},boot:function(){this.systems.events.once(c.DESTROY,this.destroy,this)},pluginStart:function(){this.systems.events.once(c.SHUTDOWN,this.shutdown,this)},setBaseURL:function(t){return void 0===t&&(t=""),""!==t&&"/"!==t.substr(-1)&&(t=t.concat("/")),this.baseURL=t,this},setPath:function(t){return void 0===t&&(t=""),""!==t&&"/"!==t.substr(-1)&&(t=t.concat("/")),this.path=t,this},setPrefix:function(t){return void 0===t&&(t=""),this.prefix=t,this},setCORS:function(t){return this.crossOrigin=t,this},addFile:function(t){Array.isArray(t)||(t=[t]);for(var e=0;e0},isLoading:function(){return this.state===s.LOADER_LOADING||this.state===s.LOADER_PROCESSING},isReady:function(){return this.state===s.LOADER_IDLE||this.state===s.LOADER_COMPLETE},start:function(){this.isReady()&&(this.progress=0,this.totalFailed=0,this.totalComplete=0,this.totalToLoad=this.list.size,this.emit(a.START,this),0===this.list.size?this.loadComplete():(this.state=s.LOADER_LOADING,this.inflight.clear(),this.queue.clear(),this.updateProgress(),this.checkLoadQueue(),this.systems.events.on(c.UPDATE,this.update,this)))},updateProgress:function(){this.progress=1-(this.list.size+this.inflight.size)/this.totalToLoad,this.emit(a.PROGRESS,this.progress)},update:function(){this.state===s.LOADER_LOADING&&this.list.size>0&&this.inflight.size'),i.push(''),i.push(''),i.push(this.xhrLoader.responseText),i.push(""),i.push(""),i.push("");var n=[i.join("\n")],o=this;try{var a=new window.Blob(n,{type:"image/svg+xml;charset=utf-8"})}catch(t){return o.state=s.FILE_ERRORED,void o.onProcessComplete()}this.data=new Image,this.data.crossOrigin=this.crossOrigin,this.data.onload=function(){r.revokeObjectURL(o.data),o.onProcessComplete()},this.data.onerror=function(){r.revokeObjectURL(o.data),o.onProcessError()},r.createObjectURL(this.data,a,"image/svg+xml")},addToCache:function(){var t=this.cache.addImage(this.key,this.data);this.pendingDestroy(t)}});o.register("htmlTexture",function(t,e,i,n,s){if(Array.isArray(t))for(var r=0;r0&&e.maxKeyDelay>0){var r=e.timeLastMatched+e.maxKeyDelay;t.timeStamp<=r&&(s=!0,i=n(t,e))}else s=!0,i=n(t,e);return!s&&e.resetOnWrongKey&&(e.index=0,e.current=e.keyCodes[0]),i&&(e.timeLastMatched=t.timeStamp,e.matched=!0,e.timeMatched=t.timeStamp),i}},function(t,e,i){var n=i(0),s=i(11),r=i(113),o=i(26),a=i(4),h=i(52),l=i(114),u=i(261),c=i(125),d=i(260),f=i(608),p=i(98),g=new n({Extends:s,initialize:function(t){s.call(this),this.game=t.systems.game,this.scene=t.scene,this.settings=this.scene.sys.settings,this.sceneInputPlugin=t,this.manager=t.manager.keyboard,this.enabled=!0,this.keys=[],this.combos=[],this.time=0,t.pluginEvents.once(h.BOOT,this.boot,this),t.pluginEvents.on(h.START,this.start,this)},boot:function(){var t=this.settings.input;this.enabled=a(t,"keyboard",!0);var e=a(t,"keyboard.capture",null);e&&this.addCaptures(e),this.sceneInputPlugin.pluginEvents.once(h.DESTROY,this.destroy,this)},start:function(){this.sceneInputPlugin.manager.useQueue?this.sceneInputPlugin.pluginEvents.on(h.UPDATE,this.update,this):this.sceneInputPlugin.manager.events.on(h.MANAGER_PROCESS,this.update,this),this.sceneInputPlugin.pluginEvents.once(h.SHUTDOWN,this.shutdown,this),this.game.events.on(o.BLUR,this.resetKeys,this)},isActive:function(){return this.enabled&&this.scene.sys.isActive()},addCapture:function(t){return this.manager.addCapture(t),this},removeCapture:function(t){return this.manager.removeCapture(t),this},getCaptures:function(){return this.manager.captures},enableGlobalCapture:function(){return this.manager.preventDefault=!0,this},disableGlobalCapture:function(){return this.manager.preventDefault=!1,this},clearCaptures:function(){return this.manager.clearCaptures(),this},createCursorKeys:function(){return this.addKeys({up:c.UP,down:c.DOWN,left:c.LEFT,right:c.RIGHT,space:c.SPACE,shift:c.SHIFT})},addKeys:function(t,e,i){void 0===e&&(e=!0),void 0===i&&(i=!1);var n={};if("string"==typeof t){t=t.split(",");for(var s=0;s-1?n[s]=t:n[t.keyCode]=t,e&&this.addCapture(t.keyCode),t.setEmitOnRepeat(i),t}return"string"==typeof t&&(t=c[t.toUpperCase()]),n[t]||(n[t]=new u(t),e&&this.addCapture(t),n[t].setEmitOnRepeat(i)),n[t]},removeKey:function(t){var e=this.keys;if(t instanceof u){var i=e.indexOf(t);i>-1&&(this.keys[i]=void 0)}else"string"==typeof t&&(t=c[t.toUpperCase()]);return e[t]&&(e[t]=void 0),this},createCombo:function(t,e){return new d(this,t,e)},checkDown:function(t,e){if(this.enabled&&t.isDown){var i=p(this.time-t.timeDown,e);if(i>t._tick)return t._tick=i,!0}return!1},update:function(t){this.time=t;var e=this.manager.queue,i=e.length;if(this.isActive()&&0!==i)for(var n=this.keys,s=0;s=e}}},function(t,e,i){var n=i(77),s=i(43),r=i(0),o=i(265),a=i(621),h=i(56),l=i(96),u=i(95),c=i(52),d=i(11),f=i(2),p=i(114),g=i(8),v=i(17),y=i(10),m=i(42),x=i(16),T=i(65),w=i(74),b=new r({Extends:d,initialize:function(t){d.call(this),this.scene=t,this.systems=t.sys,this.settings=t.sys.settings,this.manager=t.sys.game.input,this.pluginEvents=new d,this.enabled=!0,this.displayList,this.cameras,p.install(this),this.mouse=this.manager.mouse,this.topOnly=!0,this.pollRate=-1,this._pollTimer=0;var e={cancelled:!1};this._eventContainer={stopPropagation:function(){e.cancelled=!0}},this._eventData=e,this.dragDistanceThreshold=0,this.dragTimeThreshold=0,this._temp=[],this._tempZones=[],this._list=[],this._pendingInsertion=[],this._pendingRemoval=[],this._draggable=[],this._drag={0:[],1:[],2:[],3:[],4:[],5:[],6:[],7:[],8:[],9:[],10:[]},this._dragState=[],this._over={0:[],1:[],2:[],3:[],4:[],5:[],6:[],7:[],8:[],9:[],10:[]},this._validTypes=["onDown","onUp","onOver","onOut","onMove","onDragStart","onDrag","onDragEnd","onDragEnter","onDragLeave","onDragOver","onDrop"],t.sys.events.once(x.BOOT,this.boot,this),t.sys.events.on(x.START,this.start,this)},boot:function(){this.cameras=this.systems.cameras,this.displayList=this.systems.displayList,this.systems.events.once(x.DESTROY,this.destroy,this),this.pluginEvents.emit(c.BOOT)},start:function(){var t=this.systems.events;t.on(x.TRANSITION_START,this.transitionIn,this),t.on(x.TRANSITION_OUT,this.transitionOut,this),t.on(x.TRANSITION_COMPLETE,this.transitionComplete,this),t.on(x.PRE_UPDATE,this.preUpdate,this),this.manager.useQueue&&t.on(x.UPDATE,this.update,this),t.once(x.SHUTDOWN,this.shutdown,this),this.enabled=!0,this._dragState=[0,0,0,0,0,0,0,0,0,0],this.pluginEvents.emit(c.START)},preUpdate:function(){this.pluginEvents.emit(c.PRE_UPDATE);var t=this._pendingRemoval,e=this._pendingInsertion,i=t.length,n=e.length;if(0!==i||0!==n){for(var s=this._list,r=0;r-1&&(s.splice(a,1),this.clear(o))}t.length=0,this._pendingRemoval.length=0,this._list=s.concat(e.splice(0))}},isActive:function(){return this.enabled&&this.scene.sys.isActive()},update:function(t,e){if(this.isActive()){var i=this.manager;if(this.pluginEvents.emit(c.UPDATE,t,e),!i.globalTopOnly||!i.ignoreEvents){if(i._emitIsOverEvent){var n=i.isOver?c.GAME_OVER:c.GAME_OUT;this.emit(n,t,i._emitIsOverEvent)}var s=i.dirty||0===this.pollRate;if(this.pollRate>-1&&(this._pollTimer-=e,this._pollTimer<0&&(s=!0,this._pollTimer=this.pollRate)),s)for(var r=this.manager.pointers,o=this.manager.pointersTotal,a=0;a0&&i.globalTopOnly&&(i.ignoreEvents=!0)}}}},clear:function(t){var e=t.input;if(e){this.queueForRemoval(t),e.gameObject=void 0,e.target=void 0,e.hitArea=void 0,e.hitAreaCallback=void 0,e.callbackContext=void 0,this.manager.resetCursor(e),t.input=null;var i=this._draggable.indexOf(t);return i>-1&&this._draggable.splice(i,1),(i=this._drag[0].indexOf(t))>-1&&this._drag[0].splice(i,1),(i=this._over[0].indexOf(t))>-1&&this._over[0].splice(i,1),t}},disable:function(t){t.input.enabled=!1},enable:function(t,e,i,n){return void 0===n&&(n=!1),t.input?t.input.enabled=!0:this.setHitArea(t,e,i),t.input&&n&&!t.input.dropZone&&(t.input.dropZone=n),this},hitTestPointer:function(t){for(var e=this.cameras.getCamerasBelowPointer(t),i=0;i0)return t.camera=n,s}return t.camera=e[0],[]},processDownEvents:function(t){var e=0,i=this._temp,n=this._eventData,s=this._eventContainer;n.cancelled=!1;for(var r=!1,o=0;o0?this.setDragState(t,1):this.getDragState(t)>0&&!t.primaryDown&&t.justUp&&this.setDragState(t,5),1===this.getDragState(t)){var a=[];for(i=0;i1&&(this.sortGameObjects(a),this.topOnly&&a.splice(1)),this._drag[t.id]=a,0===this.dragDistanceThreshold&&0===this.dragTimeThreshold?this.setDragState(t,3):this.setDragState(t,2)}if(2===this.getDragState(t)&&(this.dragDistanceThreshold>0&&h(t.x,t.y,t.downX,t.downY)>=this.dragDistanceThreshold&&this.setDragState(t,3),this.dragTimeThreshold>0&&e>=t.downTime+this.dragTimeThreshold&&this.setDragState(t,3)),3===this.getDragState(t)){for(s=this._drag[t.id],i=0;i0?(n.emit(c.GAMEOBJECT_DRAG_LEAVE,t,r.target),this.emit(c.DRAG_LEAVE,t,n,r.target),r.target=l[0],n.emit(c.GAMEOBJECT_DRAG_ENTER,t,r.target),this.emit(c.DRAG_ENTER,t,n,r.target)):(n.emit(c.GAMEOBJECT_DRAG_LEAVE,t,r.target),this.emit(c.DRAG_LEAVE,t,n,r.target),l[0]?(r.target=l[0],n.emit(c.GAMEOBJECT_DRAG_ENTER,t,r.target),this.emit(c.DRAG_ENTER,t,n,r.target)):r.target=null)}else!r.target&&l[0]&&(r.target=l[0],n.emit(c.GAMEOBJECT_DRAG_ENTER,t,r.target),this.emit(c.DRAG_ENTER,t,n,r.target));var d=t.x-n.input.dragX,f=t.y-n.input.dragY;n.emit(c.GAMEOBJECT_DRAG,t,d,f),this.emit(c.DRAG,t,n,d,f)}return s.length}if(5===this.getDragState(t)){for(s=this._drag[t.id],i=0;i0){for(this.sortGameObjects(s),e=0;e0){for(this.sortGameObjects(r),e=0;e-1&&this._draggable.splice(s,1)}return this},makePixelPerfect:function(t){void 0===t&&(t=1);var e=this.systems.textures;return a(e,t)},setHitArea:function(t,e,i){if(void 0===e)return this.setHitAreaFromTexture(t);Array.isArray(t)||(t=[t]);var n=!1,s=!1,r=!1,a=!1;if(g(e)){var h=e;e=f(h,"hitArea",null),i=f(h,"hitAreaCallback",null),n=f(h,"draggable",!1),s=f(h,"dropZone",!1),r=f(h,"cursor",!1),a=f(h,"useHandCursor",!1);var l=f(h,"pixelPerfect",!1),u=f(h,"alphaTolerance",1);l&&(e={},i=this.makePixelPerfect(u)),e&&i||this.setHitAreaFromTexture(t)}else"function"!=typeof e||i||(i=e,e={});for(var c=0;c0?t.width/2:t.width/-2,h=r>0?t.height/2:t.height/-2;return Math.abs(a*r)e.x&&t.ye.y}},function(t,e){t.exports=function(t,e){return t.x+=e.x,t.y+=e.y,t}},function(t,e){t.exports=function(t,e,i){return t.x+=e,t.y+=i,t}},function(t,e){t.exports=function(t,e,i){var n=Math.min(t.x,e),s=Math.max(t.right,e);t.x=n,t.width=s-n;var r=Math.min(t.y,i),o=Math.max(t.bottom,i);return t.y=r,t.height=o-r,t}},function(t,e){t.exports=function(t,e){var i=Math.min(t.x,e.x),n=Math.max(t.right,e.right);t.x=i,t.width=n-i;var s=Math.min(t.y,e.y),r=Math.max(t.bottom,e.bottom);return t.y=s,t.height=r-s,t}},function(t,e){t.exports=function(t,e){for(var i=t.x,n=t.right,s=t.y,r=t.bottom,o=0;on(e)?t.setSize(e.height*i,e.height):t.setSize(e.width,e.width/i),t.setPosition(e.centerX-t.width/2,e.centerY-t.height/2)}},function(t,e,i){var n=i(155);t.exports=function(t,e){var i=n(t);return ii&&(i=h.x),h.xr&&(r=h.y),h.ye.right||t.righte.bottom||t.bottom0||(c=s(e),(d=n(t,c,!0)).length>0)}},function(t,e,i){var n=i(74),s=i(115);t.exports=function(t,e){return!!(n(t,e.getPointA())||n(t,e.getPointB())||s(t.getLineA(),e)||s(t.getLineB(),e)||s(t.getLineC(),e))}},function(t,e,i){var n=i(277),s=i(74);t.exports=function(t,e){return!(t.left>e.right||t.righte.bottom||t.bottomt.right+r||it.bottom+r||st.right||e.rightt.bottom||e.bottom0}},function(t,e,i){var n=i(276);t.exports=function(t,e){if(!n(t,e))return!1;var i=Math.min(e.x1,e.x2),s=Math.max(e.x1,e.x2),r=Math.min(e.y1,e.y2),o=Math.max(e.y1,e.y2);return t.x>=i&&t.x<=s&&t.y>=r&&t.y<=o}},function(t,e){t.exports=function(t,e){var i=t.x1,n=t.y1,s=t.x2,r=t.y2,o=e.x,a=e.y,h=e.right,l=e.bottom,u=0;if(i>=o&&i<=h&&n>=a&&n<=l||s>=o&&s<=h&&r>=a&&r<=l)return!0;if(i=o){if((u=n+(r-n)*(o-i)/(s-i))>a&&u<=l)return!0}else if(i>h&&s<=h&&(u=n+(r-n)*(h-i)/(s-i))>=a&&u<=l)return!0;if(n=a){if((u=i+(s-i)*(a-n)/(r-n))>=o&&u<=h)return!0}else if(n>l&&r<=l&&(u=i+(s-i)*(l-n)/(r-n))>=o&&u<=h)return!0;return!1}},function(t,e,i){var n=i(10),s=i(158);t.exports=function(t,e,i){return void 0===i&&(i=new n),s(t,e)&&(i.x=Math.max(t.x,e.x),i.y=Math.max(t.y,e.y),i.width=Math.min(t.right,e.right)-i.x,i.height=Math.min(t.bottom,e.bottom)-i.y),i}},function(t,e){t.exports=function(t,e){var i=e.width/2,n=e.height/2,s=Math.abs(t.x-e.x-i),r=Math.abs(t.y-e.y-n),o=i+t.radius,a=n+t.radius;if(s>o||r>a)return!1;if(s<=i||r<=n)return!0;var h=s-i,l=r-n;return h*h+l*l<=t.radius*t.radius}},function(t,e,i){var n=i(56);t.exports=function(t,e){return n(t.x,t.y,e.x,e.y)<=t.radius+e.radius}},function(t,e){t.exports=function(t,e){return t.x+=e.x,t.y+=e.y,t}},function(t,e){t.exports=function(t,e,i){return t.x+=e,t.y+=i,t}},function(t,e,i){var n=i(10);t.exports=function(t,e){return void 0===e&&(e=new n),e.x=t.left,e.y=t.top,e.width=t.width,e.height=t.height,e}},function(t,e){t.exports=function(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}},function(t,e){t.exports=function(t,e){return e.setTo(t.x,t.y,t.width,t.height)}},function(t,e,i){var n=i(95);t.exports=function(t,e){return n(t,e.x,e.y)&&n(t,e.right,e.y)&&n(t,e.x,e.bottom)&&n(t,e.right,e.bottom)}},function(t,e,i){var n=i(95);t.exports=function(t,e){return n(t,e.x,e.y)}},function(t,e,i){var n=i(96);t.exports=function(t){return new n(t.x,t.y,t.width,t.height)}},function(t,e){t.exports=function(t){return t.isEmpty()?0:t.getMajorRadius()*t.getMinorRadius()*Math.PI}},function(t,e,i){var n=i(96);n.Area=i(734),n.Circumference=i(309),n.CircumferencePoint=i(166),n.Clone=i(733),n.Contains=i(95),n.ContainsPoint=i(732),n.ContainsRect=i(731),n.CopyFrom=i(730),n.Equals=i(729),n.GetBounds=i(728),n.GetPoint=i(311),n.GetPoints=i(310),n.Offset=i(727),n.OffsetPoint=i(726),n.Random=i(199),t.exports=n},function(t,e){t.exports=function(t,e){return t.x+=e.x,t.y+=e.y,t}},function(t,e){t.exports=function(t,e,i){return t.x+=e,t.y+=i,t}},function(t,e,i){var n=i(10);t.exports=function(t,e){return void 0===e&&(e=new n),e.x=t.left,e.y=t.top,e.width=t.diameter,e.height=t.diameter,e}},function(t,e){t.exports=function(t,e){return t.x===e.x&&t.y===e.y&&t.radius===e.radius}},function(t,e){t.exports=function(t,e){return e.setTo(t.x,t.y,t.radius)}},function(t,e,i){var n=i(43);t.exports=function(t,e){return n(t,e.x,e.y)&&n(t,e.right,e.y)&&n(t,e.x,e.bottom)&&n(t,e.right,e.bottom)}},function(t,e,i){var n=i(43);t.exports=function(t,e){return n(t,e.x,e.y)}},function(t,e,i){var n=i(77);t.exports=function(t){return new n(t.x,t.y,t.radius)}},function(t,e){t.exports=function(t){return t.radius>0?Math.PI*t.radius*t.radius:0}},function(t,e,i){var n=i(77);n.Area=i(744),n.Circumference=i(436),n.CircumferencePoint=i(207),n.Clone=i(743),n.Contains=i(43),n.ContainsPoint=i(742),n.ContainsRect=i(741),n.CopyFrom=i(740),n.Equals=i(739),n.GetBounds=i(738),n.GetPoint=i(438),n.GetPoints=i(437),n.Offset=i(737),n.OffsetPoint=i(736),n.Random=i(206),t.exports=n},function(t,e,i){var n=i(0),s=i(280),r=i(17),o=i(16),a=new n({Extends:s,initialize:function(t){this.scene=t,this.systems=t.sys,t.sys.settings.isBooted||t.sys.events.once(o.BOOT,this.boot,this),s.call(this)},boot:function(){var t=this.systems.events;t.on(o.SHUTDOWN,this.shutdown,this),t.on(o.DESTROY,this.destroy,this)},destroy:function(){this.shutdown(),this.scene=void 0,this.systems=void 0}});r.register("LightsPlugin",a,"lights"),t.exports=a},function(t,e,i){var n=i(30),s=i(14),r=i(12),o=i(159);s.register("quad",function(t,e){void 0===t&&(t={});var i=r(t,"x",0),s=r(t,"y",0),a=r(t,"key",null),h=r(t,"frame",null),l=new o(this.scene,i,s,a,h);return void 0!==e&&(t.add=e),n(this.scene,l,t),l})},function(t,e,i){var n=i(30),s=i(14),r=i(12),o=i(4),a=i(116);s.register("mesh",function(t,e){void 0===t&&(t={});var i=r(t,"key",null),s=r(t,"frame",null),h=o(t,"vertices",[]),l=o(t,"colors",[]),u=o(t,"alphas",[]),c=o(t,"uv",[]),d=new a(this.scene,0,0,h,c,l,u,i,s);return void 0!==e&&(t.add=e),n(this.scene,d,t),d})},function(t,e,i){var n=i(159);i(5).register("quad",function(t,e,i,s){return this.displayList.add(new n(this.scene,t,e,i,s))})},function(t,e,i){var n=i(116);i(5).register("mesh",function(t,e,i,s,r,o,a,h){return this.displayList.add(new n(this.scene,t,e,i,s,r,o,a,h))})},function(t,e){t.exports=function(){}},function(t,e,i){var n=i(9);t.exports=function(t,e,i,s,r){var o=this.pipeline;t.setPipeline(o,e);var a=o._tempMatrix1,h=o._tempMatrix2,l=o._tempMatrix3;h.applyITRS(e.x,e.y,e.rotation,e.scaleX,e.scaleY),a.copyFrom(s.matrix),r?(a.multiplyWithOffset(r,-s.scrollX*e.scrollFactorX,-s.scrollY*e.scrollFactorY),h.e=e.x,h.f=e.y,a.multiply(h,l)):(h.e-=s.scrollX*e.scrollFactorX,h.f-=s.scrollY*e.scrollFactorY,a.multiply(h,l));var u=e.frame.glTexture,c=e.vertices,d=e.uv,f=e.colors,p=e.alphas,g=c.length,v=Math.floor(.5*g);o.vertexCount+v>o.vertexCapacity&&o.flush(),o.setTexture2D(u,0);for(var y=o.vertexViewF32,m=o.vertexViewU32,x=o.vertexCount*o.vertexComponentCount-1,T=0,w=e.tintFill,b=0;b0)for(u=o.fillTint,c=n.getTintAppendFloatAlphaAndSwap(e.fillColor,e.fillAlpha*d),u.TL=c,u.TR=c,u.BL=c,u.BR=c,C=0;C0)for(u=o.fillTint,c=n.getTintAppendFloatAlphaAndSwap(e.altFillColor,e.altFillAlpha*d),u.TL=c,u.TR=c,u.BL=c,u.BR=c,C=0;C0){var R=o.strokeTint,L=n.getTintAppendFloatAlphaAndSwap(e.outlineFillColor,e.outlineFillAlpha*d);for(R.TL=L,R.TR=L,R.BL=L,R.BR=L,E=1;Er;h--){for(l=0;l2?o[a++]:"",n=o[a++]||"16px",i=o[a++]||"Courier"}return i===this.fontFamily&&n===this.fontSize&&s===this.fontStyle||(this.fontFamily=i,this.fontSize=n,this.fontStyle=s,e&&this.update(!0)),this.parent},setFontFamily:function(t){return this.fontFamily!==t&&(this.fontFamily=t,this.update(!0)),this.parent},setFontStyle:function(t){return this.fontStyle!==t&&(this.fontStyle=t,this.update(!0)),this.parent},setFontSize:function(t){return"number"==typeof t&&(t=t.toString()+"px"),this.fontSize!==t&&(this.fontSize=t,this.update(!0)),this.parent},setTestString:function(t){return this.testString=t,this.update(!0)},setFixedSize:function(t,e){return this.fixedWidth=t,this.fixedHeight=e,t&&(this.parent.width=t),e&&(this.parent.height=e),this.update(!1)},setBackgroundColor:function(t){return this.backgroundColor=t,this.update(!1)},setFill:function(t){return this.color=t,this.update(!1)},setColor:function(t){return this.color=t,this.update(!1)},setResolution:function(t){return this.resolution=t,this.update(!1)},setStroke:function(t,e){return void 0===e&&(e=this.strokeThickness),void 0===t&&0!==this.strokeThickness?(this.strokeThickness=0,this.update(!0)):this.stroke===t&&this.strokeThickness===e||(this.stroke=t,this.strokeThickness=e,this.update(!0)),this.parent},setShadow:function(t,e,i,n,s,r){return void 0===t&&(t=0),void 0===e&&(e=0),void 0===i&&(i="#000"),void 0===n&&(n=0),void 0===s&&(s=!1),void 0===r&&(r=!0),this.shadowOffsetX=t,this.shadowOffsetY=e,this.shadowColor=i,this.shadowBlur=n,this.shadowStroke=s,this.shadowFill=r,this.update(!1)},setShadowOffset:function(t,e){return void 0===t&&(t=0),void 0===e&&(e=t),this.shadowOffsetX=t,this.shadowOffsetY=e,this.update(!1)},setShadowColor:function(t){return void 0===t&&(t="#000"),this.shadowColor=t,this.update(!1)},setShadowBlur:function(t){return void 0===t&&(t=0),this.shadowBlur=t,this.update(!1)},setShadowStroke:function(t){return this.shadowStroke=t,this.update(!1)},setShadowFill:function(t){return this.shadowFill=t,this.update(!1)},setWordWrapWidth:function(t,e){return void 0===e&&(e=!1),this.wordWrapWidth=t,this.wordWrapUseAdvanced=e,this.update(!1)},setWordWrapCallback:function(t,e){return void 0===e&&(e=null),this.wordWrapCallback=t,this.wordWrapCallbackScope=e,this.update(!1)},setAlign:function(t){return void 0===t&&(t="left"),this.align=t,this.update(!1)},setMaxLines:function(t){return void 0===t&&(t=0),this.maxLines=t,this.update(!1)},getTextMetrics:function(){var t=this.metrics;return{ascent:t.ascent,descent:t.descent,fontSize:t.fontSize}},toJSON:function(){var t={};for(var e in a)t[e]=this[e];return t.metrics=this.getTextMetrics(),t},destroy:function(){this.parent=void 0}});t.exports=h},function(t,e){t.exports=function(t,e,i,n,s){""!==e.text&&t.batchSprite(e,e.frame,n,s)}},function(t,e,i){var n=i(9);t.exports=function(t,e,i,s,r){if(""!==e.text){var o=e.frame,a=o.width,h=o.height,l=n.getTintAppendFloatAlpha;this.pipeline.batchTexture(e,o.glTexture,a,h,e.x,e.y,a/e.style.resolution,h/e.style.resolution,e.scaleX,e.scaleY,e.rotation,e.flipX,e.flipY,e.scrollFactorX,e.scrollFactorY,e.displayOriginX,e.displayOriginY,0,0,a,h,l(e._tintTL,s.alpha*e._alphaTL),l(e._tintTR,s.alpha*e._alphaTR),l(e._tintBL,s.alpha*e._alphaBL),l(e._tintBR,s.alpha*e._alphaBR),e._isTinted&&e.tintFill,0,0,s,r)}}},function(t,e,i){var n=i(1),s=i(1);n=i(832),s=i(831),t.exports={renderWebGL:n,renderCanvas:s}},function(t,e){t.exports=function(t,e,i){var n=t.canvas,s=t.context,r=t.style,o=[],a=0,h=i.length;r.maxLines>0&&r.maxLines1&&(d+=f*(i.length-1)),{width:a,height:d,lines:h,lineWidths:o,lineSpacing:f,lineHeight:c}}},function(t,e,i){var n=i(4);t.exports=function(t,e){var i=e.width,s=e.height,r=Math.floor(i/2),o=Math.floor(s/2),a=n(e,"chars","");if(""!==a){var h=n(e,"image",""),l=n(e,"offset.x",0),u=n(e,"offset.y",0),c=n(e,"spacing.x",0),d=n(e,"spacing.y",0),f=n(e,"lineSpacing",0),p=n(e,"charsPerRow",null);null===p&&(p=t.sys.textures.getFrame(h).width/i)>a.length&&(p=a.length);for(var g=l,v=u,y={retroFont:!0,font:h,size:i,lineHeight:s+f,chars:{}},m=0,x=0;x?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",TEXT_SET2:" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ",TEXT_SET3:"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ",TEXT_SET4:"ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789",TEXT_SET5:"ABCDEFGHIJKLMNOPQRSTUVWXYZ.,/() '!?-*:0123456789",TEXT_SET6:"ABCDEFGHIJKLMNOPQRSTUVWXYZ!?:;0123456789\"(),-.' ",TEXT_SET7:"AGMSY+:4BHNTZ!;5CIOU.?06DJPV,(17EKQW\")28FLRX-'39",TEXT_SET8:"0123456789 .ABCDEFGHIJKLMNOPQRSTUVWXYZ",TEXT_SET9:"ABCDEFGHIJKLMNOPQRSTUVWXYZ()-0123456789.:,'\"?!",TEXT_SET10:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",TEXT_SET11:"ABCDEFGHIJKLMNOPQRSTUVWXYZ.,\"-+!?()':;0123456789"}},function(t,e,i){var n=i(836),s=i(19),r={Parse:i(835)};r=s(!1,r,n),t.exports=r},function(t,e){t.exports=function(t,e,i,n,s){t.batchSprite(e,e.frame,n,s)}},function(t,e,i){var n=i(9);t.exports=function(t,e,i,s,r){var o=e.frame,a=o.width,h=o.height,l=n.getTintAppendFloatAlpha;this.pipeline.batchTexture(e,o.glTexture,a,h,e.x,e.y,a,h,e.scaleX,e.scaleY,e.rotation,e.flipX,!e.flipY,e.scrollFactorX,e.scrollFactorY,e.displayOriginX,e.displayOriginY,0,0,a,h,l(e._tintTL,s.alpha*e._alphaTL),l(e._tintTR,s.alpha*e._alphaTR),l(e._tintBL,s.alpha*e._alphaBL),l(e._tintBR,s.alpha*e._alphaBR),e._isTinted&&e.tintFill,0,0,s,r),t.setBlankTexture(!0)}},function(t,e,i){var n=i(1),s=i(1);n=i(839),s=i(838),t.exports={renderWebGL:n,renderCanvas:s}},function(t,e,i){t.exports={DeathZone:i(304),EdgeZone:i(303),RandomZone:i(301)}},function(t,e){t.exports=function(t,e,i,n,s){var r=e.emitters.list,o=r.length;if(0!==o){var a=t._tempMatrix1.copyFrom(n.matrix),h=t._tempMatrix2,l=t._tempMatrix3,u=t._tempMatrix4.applyITRS(e.x,e.y,e.rotation,e.scaleX,e.scaleY);a.multiply(u);var c=n.roundPixels,d=t.currentContext;d.save();for(var f=0;f0&&(N=N%b-b):N>b?N=b:N<0&&(N=b+N%b),null===E&&(E=new o(k+Math.cos(Y)*B,I+Math.sin(Y)*B,v),S.push(E),F+=.01);F<1+z;)w=N*F+Y,x=k+Math.cos(w)*B,T=I+Math.sin(w)*B,E.points.push(new r(x,T,v)),F+=.01;w=N+Y,x=k+Math.cos(w)*B,T=I+Math.sin(w)*B,E.points.push(new r(x,T,v));break;case n.FILL_RECT:u.setTexture2D(M),u.batchFillRect(p[++P],p[++P],p[++P],p[++P],f,c);break;case n.FILL_TRIANGLE:u.setTexture2D(M),u.batchFillTriangle(p[++P],p[++P],p[++P],p[++P],p[++P],p[++P],f,c);break;case n.STROKE_TRIANGLE:u.setTexture2D(M),u.batchStrokeTriangle(p[++P],p[++P],p[++P],p[++P],p[++P],p[++P],v,f,c);break;case n.LINE_TO:null!==E?E.points.push(new r(p[++P],p[++P],v)):(E=new o(p[++P],p[++P],v),S.push(E));break;case n.MOVE_TO:E=new o(p[++P],p[++P],v),S.push(E);break;case n.SAVE:a.push(f.copyToArray());break;case n.RESTORE:f.copyFromArray(a.pop());break;case n.TRANSLATE:k=p[++P],I=p[++P],f.translate(k,I);break;case n.SCALE:k=p[++P],I=p[++P],f.scale(k,I);break;case n.ROTATE:f.rotate(p[++P]);break;case n.SET_TEXTURE:var U=p[++P],G=p[++P];u.currentFrame=U,u.setTexture2D(U.glTexture,0),u.tintEffect=G,M=U.glTexture;break;case n.CLEAR_TEXTURE:u.currentFrame=t.blankTexture,u.tintEffect=2,M=t.blankTexture.glTexture}}}},function(t,e,i){var n=i(1),s=i(1);n=i(853),s=i(308),s=i(308),t.exports={renderWebGL:n,renderCanvas:s}},function(t,e){},function(t,e){t.exports=function(t,e,i,n,s){var r=t.currentPipeline;t.clearPipeline();var o=t._tempMatrix1,a=t._tempMatrix2,h=t._tempMatrix3;a.applyITRS(e.x,e.y,e.rotation,e.scaleX,e.scaleY),o.copyFrom(n.matrix),s?(o.multiplyWithOffset(s,-n.scrollX*e.scrollFactorX,-n.scrollY*e.scrollFactorY),a.e=e.x,a.f=e.y,o.multiply(a,h)):(a.e-=n.scrollX*e.scrollFactorX,a.f-=n.scrollY*e.scrollFactorY,o.multiply(a,h)),e.render.call(e,t,n,h),t.rebindPipeline(r)}},function(t,e,i){var n=i(1),s=i(1);n=i(856),s=i(855),t.exports={renderWebGL:n,renderCanvas:s}},function(t,e,i){var n=i(25);t.exports=function(t,e,i,s,r){var o=e.text,a=o.length,h=t.currentContext;if(0!==a&&n(t,h,e,s,r)){var l=e.frame,u=e.displayCallback,c=e.callbackData,d=s.scrollX*e.scrollFactorX,f=s.scrollY*e.scrollFactorY,p=e.fontData.chars,g=e.fontData.lineHeight,v=0,y=0,m=0,x=0,T=null,w=0,b=0,S=0,_=0,A=0,E=0,C=null,M=0,P=e.frame.source.image,O=l.cutX,R=l.cutY,L=0,D=e.fontSize/e.fontData.size;e.cropWidth>0&&e.cropHeight>0&&(h.beginPath(),h.rect(0,0,e.cropWidth,e.cropHeight),h.clip());for(var F=0;F0||e.cropHeight>0;l&&(h.flush(),t.pushScissor(e.x,e.y,e.cropWidth*e.scaleX,e.cropHeight*e.scaleY));var u=h._tempMatrix1,c=h._tempMatrix2,d=h._tempMatrix3,f=h._tempMatrix4;c.applyITRS(e.x,e.y,e.rotation,e.scaleX,e.scaleY),u.copyFrom(s.matrix),r?(u.multiplyWithOffset(r,-s.scrollX*e.scrollFactorX,-s.scrollY*e.scrollFactorY),c.e=e.x,c.f=e.y,u.multiply(c,d)):(c.e-=s.scrollX*e.scrollFactorX,c.f-=s.scrollY*e.scrollFactorY,u.multiply(c,d));var p=e.frame,g=p.glTexture,v=p.cutX,y=p.cutY,m=g.width,x=g.height,T=e._isTinted&&e.tintFill,w=n.getTintAppendFloatAlpha(e._tintTL,s.alpha*e._alphaTL),b=n.getTintAppendFloatAlpha(e._tintTR,s.alpha*e._alphaTR),S=n.getTintAppendFloatAlpha(e._tintBL,s.alpha*e._alphaBL),_=n.getTintAppendFloatAlpha(e._tintBR,s.alpha*e._alphaBR);h.setTexture2D(g,0);var A,E,C=0,M=0,P=0,O=0,R=e.letterSpacing,L=0,D=0,F=0,k=0,I=e.scrollX,B=e.scrollY,Y=e.fontData,N=Y.chars,X=Y.lineHeight,z=e.fontSize/Y.size,U=0,G=e._align,W=0,V=0;e.getTextBounds(!1);var H=e._bounds.lines;1===G?V=(H.longest-H.lengths[0])/2:2===G&&(V=H.longest-H.lengths[0]);for(var j=s.roundPixels,q=e.displayCallback,K=e.callbackData,J=0;Jv&&(r=v),o>y&&(o=y);var O=v+g.xAdvance,R=y+u;aA&&(A=C),C<_&&(_=C),E++,C=0;S[E]=C,C>A&&(A=C),C<_&&(_=C);var L=i.local,D=i.global,F=i.lines;return L.x=r*m,L.y=o*m,L.width=a*m,L.height=h*m,D.x=t.x-t.displayOriginX+r*x,D.y=t.y-t.displayOriginY+o*T,D.width=a*x,D.height=h*T,F.shortest=_,F.longest=A,F.lengths=S,e&&(L.x=Math.round(L.x),L.y=Math.round(L.y),L.width=Math.round(L.width),L.height=Math.round(L.height),D.x=Math.round(D.x),D.y=Math.round(D.y),D.width=Math.round(D.width),D.height=Math.round(D.height),F.shortest=Math.round(_),F.longest=Math.round(A)),i}},function(t,e,i){var n=i(0),s=i(17),r=i(16),o=new n({initialize:function(t){this.scene=t,this.systems=t.sys,this._list=[],this._pendingInsertion=[],this._pendingRemoval=[],t.sys.events.once(r.BOOT,this.boot,this),t.sys.events.on(r.START,this.start,this)},boot:function(){this.systems.events.once(r.DESTROY,this.destroy,this)},start:function(){var t=this.systems.events;t.on(r.PRE_UPDATE,this.preUpdate,this),t.on(r.UPDATE,this.update,this),t.once(r.SHUTDOWN,this.shutdown,this)},add:function(t){return-1===this._list.indexOf(t)&&-1===this._pendingInsertion.indexOf(t)&&this._pendingInsertion.push(t),t},preUpdate:function(){var t=this._pendingRemoval.length,e=this._pendingInsertion.length;if(0!==t||0!==e){var i,n;for(i=0;i-1&&this._list.splice(s,1)}this._list=this._list.concat(this._pendingInsertion.splice(0)),this._pendingRemoval.length=0,this._pendingInsertion.length=0}},update:function(t,e){for(var i=0;i0&&(t.splice(i,1),t.unshift(e)),e}},function(t,e){t.exports=function(t,e,i){var n=t.indexOf(e),s=t.indexOf(i);return-1!==n&&-1===s&&(t[n]=i,!0)}},function(t,e,i){var n=i(97);t.exports=function(t,e,i){void 0===e&&(e=0),void 0===i&&(i=t.length);var s=e+Math.floor(Math.random()*i);return n(t,s)}},function(t,e,i){var n=i(68);t.exports=function(t,e,i,s,r){if(void 0===e&&(e=0),void 0===i&&(i=t.length),void 0===r&&(r=t),n(t,e,i)){var o=i-e,a=t.splice(e,o);if(s)for(var h=0;ht.length-1)throw new Error("Index out of bounds");var r=n(t,e);return i&&i.call(s,r),r}},function(t,e,i){var n=i(372);t.exports=function(t,e,i){void 0===t&&(t=0),void 0===e&&(e=null),void 0===i&&(i=1),null===e&&(e=t,t=0);for(var s=[],r=Math.max(n((e-t)/(i||1)),0),o=0;o=t.length)throw new Error("Supplied index out of bounds");return n!==i&&(t.splice(n,1),t.splice(i,0,e)),e}},function(t,e){t.exports=function(t,e){var i=t.indexOf(e);if(i>0){var n=t[i-1],s=t.indexOf(n);t[i]=n,t[s]=e}return t}},function(t,e,i){var n=i(68);t.exports=function(t,e,i,s,r){if(void 0===s&&(s=0),void 0===r&&(r=t.length),n(t,s,r))for(var o=s;o0){var o=n-t.length;if(o<=0)return null}if(!Array.isArray(e))return-1===t.indexOf(e)?(t.splice(i,0,e),s&&s.call(r,e),e):null;for(var a=e.length-1;a>=0;)-1!==t.indexOf(e[a])&&e.pop(),a--;if(0===(a=e.length))return null;n>0&&a>o&&(e.splice(o),a=o);for(var h=a-1;h>=0;h--){var l=e[h];t.splice(i,0,l),s&&s.call(r,l)}return e}},function(t,e){t.exports=function(t,e,i,n,s){if(void 0===s&&(s=t),i>0){var r=i-t.length;if(r<=0)return null}if(!Array.isArray(e))return-1===t.indexOf(e)?(t.push(e),n&&n.call(s,e),e):null;for(var o=e.length-1;o>=0;)-1!==t.indexOf(e[o])&&e.pop(),o--;if(0===(o=e.length))return null;i>0&&o>r&&(e.splice(r),o=r);for(var a=0;ax||a<-x)&&(a=0),a<0&&(a=x+a),-1!==h&&(x=a+(h+1));for(var E=l,C=l,M=0,P=e.sourceIndex,O=0;Og||c<-g)&&(c=0),c<0&&(c=g+c),-1!==d&&(g=c+(d+1));for(var v=f,y=f,m=0,x=0,T=0;Tr&&(m=w-r),b>o&&(x=b-o),t.add(T,e,i+v,s+y,h-m,l-x),(v+=h+p)+h>r&&(v=f,y+=l+p)}return t}},function(t,e,i){var n=i(70);t.exports=function(t,e,i){if(i.frames){var s=t.source[e];t.add("__BASE",e,0,0,s.width,s.height);var r,o=i.frames;for(var a in o){var h=o[a];r=t.add(a,e,h.frame.x,h.frame.y,h.frame.w,h.frame.h),h.trimmed&&r.setTrim(h.sourceSize.w,h.sourceSize.h,h.spriteSourceSize.x,h.spriteSourceSize.y,h.spriteSourceSize.w,h.spriteSourceSize.h),h.rotated&&(r.rotated=!0,r.updateUVsInverted()),r.customData=n(h)}for(var l in i)"frames"!==l&&(Array.isArray(i[l])?t.customData[l]=i[l].slice(0):t.customData[l]=i[l]);return t}console.warn("Invalid Texture Atlas JSON Hash given, missing 'frames' Object")}},function(t,e,i){var n=i(70);t.exports=function(t,e,i){if(i.frames||i.textures){var s=t.source[e];t.add("__BASE",e,0,0,s.width,s.height);for(var r,o=Array.isArray(i.textures)?i.textures[e].frames:i.frames,a=0;a-1){var o=this.context.getImageData(t,e,1,1);o.data[0]=i,o.data[1]=n,o.data[2]=s,o.data[3]=r,this.context.putImageData(o,t,e)}return this},putData:function(t,e,i){return e=Math.abs(Math.floor(e)),i=Math.abs(Math.floor(i)),this.context.putImageData(t,e,i),this},getData:function(t,e,i,n){return t=s(Math.floor(t),0,this.width-1),e=s(Math.floor(e),0,this.height-1),i=s(i,1,this.width-t),n=s(n,1,this.height-e),this.context.getImageData(t,e,i,n)},getPixel:function(t,e,i){i||(i=new r);var n=this.getIndex(t,e);if(n>-1){var s=this.data,o=s[n+0],a=s[n+1],h=s[n+2],l=s[n+3];i.setTo(o,a,h,l)}return i},getPixels:function(t,e,i,n){void 0===n&&(n=i),t=Math.abs(Math.round(t)),e=Math.abs(Math.round(e));for(var o=s(t,0,this.width),a=s(t+i,0,this.width),h=s(e,0,this.height),l=s(e+n,0,this.height),u=new r,c=[],d=h;d>16&255,g:t>>8&255,b:255&t,a:255};return t>16777215&&(e.a=t>>>24),e}},function(t,e){t.exports=function(t,e){void 0===e&&(e="none");return["-webkit-","-khtml-","-moz-","-ms-",""].forEach(function(i){t.style[i+"user-select"]=e}),t.style["-webkit-touch-callout"]=e,t.style["-webkit-tap-highlight-color"]="rgba(0, 0, 0, 0)",t}},function(t,e){t.exports=function(t,e){return void 0===e&&(e="none"),t.style.msTouchAction=e,t.style["ms-touch-action"]=e,t.style["touch-action"]=e,t}},function(t,e,i){t.exports={CanvasInterpolation:i(366),CanvasPool:i(24),Smoothing:i(130),TouchAction:i(1007),UserSelect:i(1006)}},function(t,e){t.exports=function(t){return t.height*t.originY}},function(t,e){t.exports=function(t){return t.width*t.originX}},function(t,e,i){t.exports={CenterOn:i(444),GetBottom:i(51),GetCenterX:i(81),GetCenterY:i(78),GetLeft:i(49),GetOffsetX:i(1010),GetOffsetY:i(1009),GetRight:i(47),GetTop:i(45),SetBottom:i(50),SetCenterX:i(80),SetCenterY:i(79),SetLeft:i(48),SetRight:i(46),SetTop:i(44)}},function(t,e,i){var n=i(47),s=i(45),r=i(50),o=i(46);t.exports=function(t,e,i,a){return void 0===i&&(i=0),void 0===a&&(a=0),o(t,n(e)+i),r(t,s(e)-a),t}},function(t,e,i){var n=i(49),s=i(45),r=i(50),o=i(48);t.exports=function(t,e,i,a){return void 0===i&&(i=0),void 0===a&&(a=0),o(t,n(e)-i),r(t,s(e)-a),t}},function(t,e,i){var n=i(81),s=i(45),r=i(50),o=i(80);t.exports=function(t,e,i,a){return void 0===i&&(i=0),void 0===a&&(a=0),o(t,n(e)+i),r(t,s(e)-a),t}},function(t,e,i){var n=i(47),s=i(45),r=i(48),o=i(44);t.exports=function(t,e,i,a){return void 0===i&&(i=0),void 0===a&&(a=0),r(t,n(e)+i),o(t,s(e)-a),t}},function(t,e,i){var n=i(78),s=i(47),r=i(79),o=i(48);t.exports=function(t,e,i,a){return void 0===i&&(i=0),void 0===a&&(a=0),o(t,s(e)+i),r(t,n(e)+a),t}},function(t,e,i){var n=i(51),s=i(47),r=i(50),o=i(48);t.exports=function(t,e,i,a){return void 0===i&&(i=0),void 0===a&&(a=0),o(t,s(e)+i),r(t,n(e)+a),t}},function(t,e,i){var n=i(49),s=i(45),r=i(46),o=i(44);t.exports=function(t,e,i,a){return void 0===i&&(i=0),void 0===a&&(a=0),r(t,n(e)-i),o(t,s(e)-a),t}},function(t,e,i){var n=i(78),s=i(49),r=i(79),o=i(46);t.exports=function(t,e,i,a){return void 0===i&&(i=0),void 0===a&&(a=0),o(t,s(e)-i),r(t,n(e)+a),t}},function(t,e,i){var n=i(51),s=i(49),r=i(50),o=i(46);t.exports=function(t,e,i,a){return void 0===i&&(i=0),void 0===a&&(a=0),o(t,s(e)-i),r(t,n(e)+a),t}},function(t,e,i){var n=i(51),s=i(47),r=i(46),o=i(44);t.exports=function(t,e,i,a){return void 0===i&&(i=0),void 0===a&&(a=0),r(t,s(e)+i),o(t,n(e)+a),t}},function(t,e,i){var n=i(51),s=i(49),r=i(48),o=i(44);t.exports=function(t,e,i,a){return void 0===i&&(i=0),void 0===a&&(a=0),r(t,s(e)-i),o(t,n(e)+a),t}},function(t,e,i){var n=i(51),s=i(81),r=i(80),o=i(44);t.exports=function(t,e,i,a){return void 0===i&&(i=0),void 0===a&&(a=0),r(t,s(e)+i),o(t,n(e)+a),t}},function(t,e,i){t.exports={BottomCenter:i(1023),BottomLeft:i(1022),BottomRight:i(1021),LeftBottom:i(1020),LeftCenter:i(1019),LeftTop:i(1018),RightBottom:i(1017),RightCenter:i(1016),RightTop:i(1015),TopCenter:i(1014),TopLeft:i(1013),TopRight:i(1012)}},function(t,e,i){t.exports={BottomCenter:i(448),BottomLeft:i(447),BottomRight:i(446),Center:i(445),LeftCenter:i(443),QuickSet:i(449),RightCenter:i(442),TopCenter:i(441),TopLeft:i(440),TopRight:i(439)}},function(t,e,i){var n=i(208),s=i(19),r={In:i(1025),To:i(1024)};r=s(!1,r,n),t.exports=r},function(t,e,i){t.exports={Align:i(1026),Bounds:i(1011),Canvas:i(1008),Color:i(354),Masks:i(999)}},function(t,e,i){var n=i(0),s=i(134),r=i(17),o=i(16),a=new n({Extends:s,initialize:function(t){s.call(this,t,t.sys.events),this.scene=t,this.systems=t.sys,t.sys.events.once(o.BOOT,this.boot,this),t.sys.events.on(o.START,this.start,this)},boot:function(){this.events=this.systems.events,this.events.once(o.DESTROY,this.destroy,this)},start:function(){this.events.once(o.SHUTDOWN,this.shutdown,this)},shutdown:function(){this.systems.events.off(o.SHUTDOWN,this.shutdown,this)},destroy:function(){s.prototype.destroy.call(this),this.events.off(o.START,this.start,this),this.scene=null,this.systems=null}});r.register("DataManagerPlugin",a,"data"),t.exports=a},function(t,e,i){t.exports={DataManager:i(134),DataManagerPlugin:i(1028),Events:i(420)}},function(t,e,i){var n=i(0),s=i(3),r=new n({initialize:function(t,e){this.active=!1,this.p0=new s(t,e)},getPoint:function(t,e){return void 0===e&&(e=new s),e.copy(this.p0)},getPointAt:function(t,e){return this.getPoint(t,e)},getResolution:function(){return 1},getLength:function(){return 0},toJSON:function(){return{type:"MoveTo",points:[this.p0.x,this.p0.y]}}});t.exports=r},function(t,e,i){var n=i(0),s=i(359),r=i(358),o=i(5),a=i(357),h=i(1030),l=i(356),u=i(10),c=i(355),d=i(3),f=new n({initialize:function(t,e){void 0===t&&(t=0),void 0===e&&(e=0),this.name="",this.curves=[],this.cacheLengths=[],this.autoClose=!1,this.startPoint=new d,this._tmpVec2A=new d,this._tmpVec2B=new d,"object"==typeof t?this.fromJSON(t):this.startPoint.set(t,e)},add:function(t){return this.curves.push(t),this},circleTo:function(t,e,i){return void 0===e&&(e=!1),this.ellipseTo(t,t,0,360,e,i)},closePath:function(){var t=this.curves[0].getPoint(0),e=this.curves[this.curves.length-1].getPoint(1);return t.equals(e)||this.curves.push(new a(e,t)),this},cubicBezierTo:function(t,e,i,n,r,o){var a,h,l,u=this.getEndPoint();return t instanceof d?(a=t,h=e,l=i):(a=new d(i,n),h=new d(r,o),l=new d(t,e)),this.add(new s(u,a,h,l))},quadraticBezierTo:function(t,e,i,n){var s,r,o=this.getEndPoint();return t instanceof d?(s=t,r=e):(s=new d(i,n),r=new d(t,e)),this.add(new l(o,s,r))},draw:function(t,e){for(var i=0;i0?this.curves[this.curves.length-1].getPoint(1,t):t.copy(this.startPoint),t},getLength:function(){var t=this.getCurveLengths();return t[t.length-1]},getPoint:function(t,e){void 0===e&&(e=new d);for(var i=t*this.getLength(),n=this.getCurveLengths(),s=0;s=i){var r=n[s]-i,o=this.curves[s],a=o.getLength(),h=0===a?0:1-r/a;return o.getPointAt(h,e)}s++}return null},getPoints:function(t){void 0===t&&(t=12);for(var e,i=[],n=0;n1&&!i[i.length-1].equals(i[0])&&i.push(i[0]),i},getRandomPoint:function(t){return void 0===t&&(t=new d),this.getPoint(Math.random(),t)},getSpacedPoints:function(t){void 0===t&&(t=40);for(var e=[],i=0;i<=t;i++)e.push(this.getPoint(i/t));return this.autoClose&&e.push(e[0]),e},getStartPoint:function(t){return void 0===t&&(t=new d),t.copy(this.startPoint)},lineTo:function(t,e){t instanceof d?this._tmpVec2B.copy(t):this._tmpVec2B.set(t,e);var i=this.getEndPoint(this._tmpVec2A);return this.add(new a([i.x,i.y,this._tmpVec2B.x,this._tmpVec2B.y]))},splineTo:function(t){return t.unshift(this.getEndPoint()),this.add(new c(t))},moveTo:function(t,e){return this.add(new h(t,e))},toJSON:function(){for(var t=[],e=0;e0&&(s=1/Math.sqrt(s),this.x=t*s,this.y=e*s,this.z=i*s,this.w=n*s),this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w},lerp:function(t,e){void 0===e&&(e=0);var i=this.x,n=this.y,s=this.z,r=this.w;return this.x=i+e*(t.x-i),this.y=n+e*(t.y-n),this.z=s+e*(t.z-s),this.w=r+e*(t.w-r),this},multiply:function(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z||1,this.w*=t.w||1,this},divide:function(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z||1,this.w/=t.w||1,this},distance:function(t){var e=t.x-this.x,i=t.y-this.y,n=t.z-this.z||0,s=t.w-this.w||0;return Math.sqrt(e*e+i*i+n*n+s*s)},distanceSq:function(t){var e=t.x-this.x,i=t.y-this.y,n=t.z-this.z||0,s=t.w-this.w||0;return e*e+i*i+n*n+s*s},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this},transformMat4:function(t){var e=this.x,i=this.y,n=this.z,s=this.w,r=t.val;return this.x=r[0]*e+r[4]*i+r[8]*n+r[12]*s,this.y=r[1]*e+r[5]*i+r[9]*n+r[13]*s,this.z=r[2]*e+r[6]*i+r[10]*n+r[14]*s,this.w=r[3]*e+r[7]*i+r[11]*n+r[15]*s,this},transformQuat:function(t){var e=this.x,i=this.y,n=this.z,s=t.x,r=t.y,o=t.z,a=t.w,h=a*e+r*n-o*i,l=a*i+o*e-s*n,u=a*n+s*i-r*e,c=-s*e-r*i-o*n;return this.x=h*a+c*-s+l*-o-u*-r,this.y=l*a+c*-r+u*-s-h*-o,this.z=u*a+c*-o+h*-r-l*-s,this},reset:function(){return this.x=0,this.y=0,this.z=0,this.w=0,this}});n.prototype.sub=n.prototype.subtract,n.prototype.mul=n.prototype.multiply,n.prototype.div=n.prototype.divide,n.prototype.dist=n.prototype.distance,n.prototype.distSq=n.prototype.distanceSq,n.prototype.len=n.prototype.length,n.prototype.lenSq=n.prototype.lengthSq,t.exports=n},function(t,e){t.exports=function(t,e,i){return Math.abs(t-e)<=i}},function(t,e){t.exports=function(t,e,i,n){void 0===e&&(e=1),void 0===i&&(i=1),void 0===n&&(n=1),n*=Math.PI/t;for(var s=[],r=[],o=0;o1?void 0!==n?(s=(n-t)/(n-i))<0&&(s=0):s=1:s<0&&(s=0),s}},function(t,e){t.exports=function(t,e,i){return Math.max(t-e,i)}},function(t,e){t.exports=function(t,e,i){return Math.min(t+e,i)}},function(t,e){t.exports=function(t){return t===parseFloat(t)?!(t%2):void 0}},function(t,e){t.exports=function(t){return t==parseFloat(t)?!(t%2):void 0}},function(t,e){t.exports=function(t,e){return t/e/1e3}},function(t,e){t.exports=function(t,e,i){void 0===e&&(e=0),void 0===i&&(i=10);var n=Math.pow(i,-e);return Math.floor(t*n)/n}},function(t,e){t.exports=function(t,e){return Math.abs(t-e)}},function(t,e){t.exports=function(t,e,i){void 0===e&&(e=0),void 0===i&&(i=10);var n=Math.pow(i,-e);return Math.ceil(t*n)/n}},function(t,e){t.exports=function(t){for(var e=0,i=0;i>>0,i=(e*=i)>>>0,i+=4294967296*(e-=i);return this.n=i,2.3283064365386963e-10*(i>>>0)},init:function(t){"string"==typeof t?this.state(t):this.sow(t)},sow:function(t){if(this.n=4022871197,this.s0=this.hash(" "),this.s1=this.hash(" "),this.s2=this.hash(" "),this.c=1,t)for(var e=0;e0;e--){var i=Math.floor(this.frac()*(e+1)),n=t[i];t[i]=t[e],t[e]=n}return t}});t.exports=n},function(t,e){t.exports=function(t,e,i,n){return void 0===i&&(i=0),0===e?t:(t-=i,t=e*Math.round(t/e),n?(i+t)/e:i+t)}},function(t,e,i){t.exports={Ceil:i(375),Floor:i(98),To:i(1069)}},function(t,e){t.exports=function(t){return t>0&&0==(t&t-1)}},function(t,e,i){t.exports={GetNext:i(376),IsSize:i(127),IsValue:i(1071)}},function(t,e,i){var n=i(196);t.exports=function(t,e,i){return e+(i-e)*n(t,0,1)}},function(t,e,i){var n=i(129);t.exports=function(t,e){var i=t.length-1,s=i*e,r=Math.floor(s);return e<0?n(t[0],t[1],s):e>1?n(t[i],t[i-1],i-s):n(t[r],t[r+1>i?i:r+1],s-r)}},function(t,e,i){var n=i(185);t.exports=function(t,e){var i=t.length-1,s=i*e,r=Math.floor(s);return t[0]===t[i]?(e<0&&(r=Math.floor(s=i*(1+e))),n(s-r,t[(r-1+i)%i],t[r],t[(r+1)%i],t[(r+2)%i])):e<0?t[0]-(n(-s,t[0],t[0],t[1],t[1])-t[0]):e>1?t[i]-(n(s-i,t[i],t[i],t[i-1],t[i-1])-t[i]):n(s-r,t[r?r-1:0],t[r],t[i=n.PI2-i?t=e:(Math.abs(e-t)>Math.PI&&(et?t+=i:e=9&&/Mac OS X (\d+)_(\d+)/.test(navigator.userAgent)){var i=parseInt(RegExp.$1,10),r=parseInt(RegExp.$2,10);(10===i&&r>=11||i>10)&&(s.dolby=!0)}}catch(t){}return s}()},function(t,e,i){var n=i(99),s=i(128),r={gamepads:!1,mspointer:!1,touch:!1,wheelEvent:null};t.exports=(("ontouchstart"in document.documentElement||navigator.maxTouchPoints&&navigator.maxTouchPoints>=1)&&(r.touch=!0),(navigator.msPointerEnabled||navigator.pointerEnabled)&&(r.mspointer=!0),navigator.getGamepads&&(r.gamepads=!0),n.cocoonJS||("onwheel"in window||s.ie&&"WheelEvent"in window?r.wheelEvent="wheel":"onmousewheel"in window?r.wheelEvent="mousewheel":s.firefox&&"MouseScrollEvent"in window&&(r.wheelEvent="DOMMouseScroll")),r)},function(t,e){var i,n,s=t.exports={};function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function a(t){if(i===setTimeout)return setTimeout(t,0);if((i===r||!i)&&setTimeout)return i=setTimeout,setTimeout(t,0);try{return i(t,0)}catch(e){try{return i.call(null,t,0)}catch(e){return i.call(this,t,0)}}}!function(){try{i="function"==typeof setTimeout?setTimeout:r}catch(t){i=r}try{n="function"==typeof clearTimeout?clearTimeout:o}catch(t){n=o}}();var h,l=[],u=!1,c=-1;function d(){u&&h&&(u=!1,h.length?l=h.concat(l):c=-1,l.length&&f())}function f(){if(!u){var t=a(d);u=!0;for(var e=l.length;e;){for(h=l,l=[];++c1)for(var i=1;i0&&(o.preRender(1),t.render(n,e,i,o))}},resetAll:function(){for(var t=0;t=1?1:1/e*(1+(e*t|0))}},function(t,e){t.exports=function(t){return 0===t?0:1===t?1:.5*(1-Math.cos(Math.PI*t))}},function(t,e){t.exports=function(t){return 0===t?0:1===t?1:Math.sin(t*Math.PI/2)}},function(t,e){t.exports=function(t){return 0===t?0:1===t?1:1-Math.cos(t*Math.PI/2)}},function(t,e){t.exports=function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)}},function(t,e){t.exports=function(t){return--t*t*t*t*t+1}},function(t,e){t.exports=function(t){return t*t*t*t*t}},function(t,e){t.exports=function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)}},function(t,e){t.exports=function(t){return 1- --t*t*t*t}},function(t,e){t.exports=function(t){return t*t*t*t}},function(t,e){t.exports=function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)}},function(t,e){t.exports=function(t){return t*(2-t)}},function(t,e){t.exports=function(t){return t*t}},function(t,e){t.exports=function(t){return t}},function(t,e){t.exports=function(t){return(t*=2)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*(t-1)))}},function(t,e){t.exports=function(t){return 1-Math.pow(2,-10*t)}},function(t,e){t.exports=function(t){return Math.pow(2,10*(t-1))-.001}},function(t,e){t.exports=function(t,e,i){if(void 0===e&&(e=.1),void 0===i&&(i=.1),0===t)return 0;if(1===t)return 1;var n=i/4;return e<1?e=1:n=i*Math.asin(1/e)/(2*Math.PI),(t*=2)<1?e*Math.pow(2,10*(t-=1))*Math.sin((t-n)*(2*Math.PI)/i)*-.5:e*Math.pow(2,-10*(t-=1))*Math.sin((t-n)*(2*Math.PI)/i)*.5+1}},function(t,e){t.exports=function(t,e,i){if(void 0===e&&(e=.1),void 0===i&&(i=.1),0===t)return 0;if(1===t)return 1;var n=i/4;return e<1?e=1:n=i*Math.asin(1/e)/(2*Math.PI),e*Math.pow(2,-10*t)*Math.sin((t-n)*(2*Math.PI)/i)+1}},function(t,e){t.exports=function(t,e,i){if(void 0===e&&(e=.1),void 0===i&&(i=.1),0===t)return 0;if(1===t)return 1;var n=i/4;return e<1?e=1:n=i*Math.asin(1/e)/(2*Math.PI),-e*Math.pow(2,10*(t-=1))*Math.sin((t-n)*(2*Math.PI)/i)}},function(t,e){t.exports=function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)}},function(t,e){t.exports=function(t){return--t*t*t+1}},function(t,e){t.exports=function(t){return t*t*t}},function(t,e){t.exports=function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)}},function(t,e){t.exports=function(t){return Math.sqrt(1- --t*t)}},function(t,e){t.exports=function(t){return 1-Math.sqrt(1-t*t)}},function(t,e){t.exports=function(t){var e=!1;return t<.5?(t=1-2*t,e=!0):t=2*t-1,t<1/2.75?t*=7.5625*t:t=t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375,e?.5*(1-t):.5*t+.5}},function(t,e){t.exports=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}},function(t,e){t.exports=function(t){return(t=1-t)<1/2.75?1-7.5625*t*t:t<2/2.75?1-(7.5625*(t-=1.5/2.75)*t+.75):t<2.5/2.75?1-(7.5625*(t-=2.25/2.75)*t+.9375):1-(7.5625*(t-=2.625/2.75)*t+.984375)}},function(t,e){t.exports=function(t,e){void 0===e&&(e=1.70158);var i=1.525*e;return(t*=2)<1?t*t*((i+1)*t-i)*.5:.5*((t-=2)*t*((i+1)*t+i)+2)}},function(t,e){t.exports=function(t,e){return void 0===e&&(e=1.70158),--t*t*((e+1)*t+e)+1}},function(t,e){t.exports=function(t,e){return void 0===e&&(e=1.70158),t*t*((e+1)*t-e)}},function(t,e,i){var n=i(23),s=i(0),r=i(188),o=i(40),a=i(3),h=new s({initialize:function(t){this.camera=t,this.isRunning=!1,this.duration=0,this.source=new a,this.current=new a,this.destination=new a,this.ease,this.progress=0,this._elapsed=0,this._onUpdate,this._onUpdateScope},start:function(t,e,i,n,s,a,h){void 0===i&&(i=1e3),void 0===n&&(n=r.Linear),void 0===s&&(s=!1),void 0===a&&(a=null),void 0===h&&(h=this.camera.scene);var l=this.camera;return!s&&this.isRunning?l:(this.isRunning=!0,this.duration=i,this.progress=0,this.source.set(l.scrollX,l.scrollY),this.destination.set(t,e),l.getScroll(t,e,this.current),"string"==typeof n&&r.hasOwnProperty(n)?this.ease=r[n]:"function"==typeof n&&(this.ease=n),this._elapsed=0,this._onUpdate=a,this._onUpdateScope=h,this.camera.emit(o.PAN_START,this.camera,this,i,t,e),l)},update:function(t,e){if(this.isRunning){this._elapsed+=e;var i=n(this._elapsed/this.duration,0,1);this.progress=i;var s=this.camera;if(this._elapsed0?(this._speedX-=this.dragX*t,this._speedX<0&&(this._speedX=0)):this._speedX<0&&(this._speedX+=this.dragX*t,this._speedX>0&&(this._speedX=0)),this._speedY>0?(this._speedY-=this.dragY*t,this._speedY<0&&(this._speedY=0)):this._speedY<0&&(this._speedY+=this.dragY*t,this._speedY>0&&(this._speedY=0)),this.up&&this.up.isDown?(this._speedY+=this.accelY,this._speedY>this.maxSpeedY&&(this._speedY=this.maxSpeedY)):this.down&&this.down.isDown&&(this._speedY-=this.accelY,this._speedY<-this.maxSpeedY&&(this._speedY=-this.maxSpeedY)),this.left&&this.left.isDown?(this._speedX+=this.accelX,this._speedX>this.maxSpeedX&&(this._speedX=this.maxSpeedX)):this.right&&this.right.isDown&&(this._speedX-=this.accelX,this._speedX<-this.maxSpeedX&&(this._speedX=-this.maxSpeedX)),this.zoomIn&&this.zoomIn.isDown?this._zoom=-this.zoomSpeed:this.zoomOut&&this.zoomOut.isDown?this._zoom=this.zoomSpeed:this._zoom=0,0!==this._speedX&&(e.scrollX-=this._speedX*t|0),0!==this._speedY&&(e.scrollY-=this._speedY*t|0),0!==this._zoom&&(e.zoom+=this._zoom,e.zoom<.1&&(e.zoom=.1))}},destroy:function(){this.camera=null,this.left=null,this.right=null,this.up=null,this.down=null,this.zoomIn=null,this.zoomOut=null}});t.exports=r},function(t,e,i){var n=i(0),s=i(4),r=new n({initialize:function(t){this.camera=s(t,"camera",null),this.left=s(t,"left",null),this.right=s(t,"right",null),this.up=s(t,"up",null),this.down=s(t,"down",null),this.zoomIn=s(t,"zoomIn",null),this.zoomOut=s(t,"zoomOut",null),this.zoomSpeed=s(t,"zoomSpeed",.01),this.speedX=0,this.speedY=0;var e=s(t,"speed",null);"number"==typeof e?(this.speedX=e,this.speedY=e):(this.speedX=s(t,"speed.x",0),this.speedY=s(t,"speed.y",0)),this._zoom=0,this.active=null!==this.camera},start:function(){return this.active=null!==this.camera,this},stop:function(){return this.active=!1,this},setCamera:function(t){return this.camera=t,this},update:function(t){if(this.active){void 0===t&&(t=1);var e=this.camera;this.up&&this.up.isDown?e.scrollY-=this.speedY*t|0:this.down&&this.down.isDown&&(e.scrollY+=this.speedY*t|0),this.left&&this.left.isDown?e.scrollX-=this.speedX*t|0:this.right&&this.right.isDown&&(e.scrollX+=this.speedX*t|0),this.zoomIn&&this.zoomIn.isDown?(e.zoom-=this.zoomSpeed,e.zoom<.1&&(e.zoom=.1)):this.zoomOut&&this.zoomOut.isDown&&(e.zoom+=this.zoomSpeed)}},destroy:function(){this.camera=null,this.left=null,this.right=null,this.up=null,this.down=null,this.zoomIn=null,this.zoomOut=null}});t.exports=r},function(t,e,i){t.exports={FixedKeyControl:i(1171),SmoothedKeyControl:i(1170)}},function(t,e,i){t.exports={Controls:i(1172),Scene2D:i(1169)}},function(t,e){t.exports="remove"},function(t,e){t.exports="add"},function(t,e,i){t.exports={BaseCache:i(414),CacheManager:i(412),Events:i(413)}},function(t,e){t.exports="visible"},function(t,e){t.exports="step"},function(t,e){t.exports="resume"},function(t,e){t.exports="ready"},function(t,e){t.exports="prestep"},function(t,e){t.exports="prerender"},function(t,e){t.exports="poststep"},function(t,e){t.exports="postrender"},function(t,e){t.exports="pause"},function(t,e){t.exports="hidden"},function(t,e){t.exports="focus"},function(t,e){t.exports="destroy"},function(t,e){t.exports="boot"},function(t,e){t.exports="blur"},function(t,e,i){t.exports={Animation:i(205),AnimationFrame:i(433),AnimationManager:i(415),Events:i(136)}},function(t,e,i){var n=i(57);t.exports=function(t,e,i){void 0===i&&(i=0);for(var s=0;s1)if(0===s){var d=t.length-1;for(o=t[d].x,a=t[d].y,h=d-1;h>=0;h--)l=(c=t[h]).x,u=c.y,c.x=o,c.y=a,o=l,a=u;t[d].x=e,t[d].y=i}else{for(o=t[0].x,a=t[0].y,h=1;h0?s(o,i):i<0&&r(o,Math.abs(i));for(var a=0;a>16)+(65280&t)+((255&t)<<16)},n={_tintTL:16777215,_tintTR:16777215,_tintBL:16777215,_tintBR:16777215,_isTinted:!1,tintFill:!1,clearTint:function(){return this.setTint(16777215),this._isTinted=!1,this},setTint:function(t,e,n,s){return void 0===t&&(t=16777215),void 0===e&&(e=t,n=t,s=t),this._tintTL=i(t),this._tintTR=i(e),this._tintBL=i(n),this._tintBR=i(s),this._isTinted=!0,this.tintFill=!1,this},setTintFill:function(t,e,i,n){return this.setTint(t,e,i,n),this.tintFill=!0,this},tintTopLeft:{get:function(){return this._tintTL},set:function(t){this._tintTL=i(t),this._isTinted=!0}},tintTopRight:{get:function(){return this._tintTR},set:function(t){this._tintTR=i(t),this._isTinted=!0}},tintBottomLeft:{get:function(){return this._tintBL},set:function(t){this._tintBL=i(t),this._isTinted=!0}},tintBottomRight:{get:function(){return this._tintBR},set:function(t){this._tintBR=i(t),this._isTinted=!0}},tint:{set:function(t){this.setTint(t,t,t,t)}},isTinted:{get:function(){return this._isTinted}}};t.exports=n},function(t,e){var i={texture:null,frame:null,isCropped:!1,setCrop:function(t,e,i,n){if(void 0===t)this.isCropped=!1;else if(this.frame){if("number"==typeof t)this.frame.setCropUVs(this._crop,t,e,i,n,this.flipX,this.flipY);else{var s=t;this.frame.setCropUVs(this._crop,s.x,s.y,s.width,s.height,this.flipX,this.flipY)}this.isCropped=!0}return this},setTexture:function(t,e){return this.texture=this.scene.sys.textures.get(t),this.setFrame(e)},setFrame:function(t,e,i){return void 0===e&&(e=!0),void 0===i&&(i=!0),this.frame=this.texture.get(t),this.frame.cutWidth&&this.frame.cutHeight?this.renderFlags|=8:this.renderFlags&=-9,this._sizeComponent&&e&&this.setSizeToFrame(),this._originComponent&&i&&(this.frame.customPivot?this.setOrigin(this.frame.pivotX,this.frame.pivotY):this.updateDisplayOrigin()),this.isCropped&&this.frame.updateCropUVs(this._crop,this.flipX,this.flipY),this},resetCropObject:function(){return{u0:0,v0:0,u1:0,v1:0,width:0,height:0,x:0,y:0,flipX:!1,flipY:!1,cx:0,cy:0,cw:0,ch:0}}};t.exports=i},function(t,e){var i={texture:null,frame:null,isCropped:!1,setTexture:function(t,e){return this.texture=this.scene.sys.textures.get(t),this.setFrame(e)},setFrame:function(t,e,i){return void 0===e&&(e=!0),void 0===i&&(i=!0),this.frame=this.texture.get(t),this.frame.cutWidth&&this.frame.cutHeight?this.renderFlags|=8:this.renderFlags&=-9,this._sizeComponent&&e&&this.setSizeToFrame(),this._originComponent&&i&&(this.frame.customPivot?this.setOrigin(this.frame.pivotX,this.frame.pivotY):this.updateDisplayOrigin()),this}};t.exports=i},function(t,e){var i={_sizeComponent:!0,width:0,height:0,displayWidth:{get:function(){return this.scaleX*this.frame.realWidth},set:function(t){this.scaleX=t/this.frame.realWidth}},displayHeight:{get:function(){return this.scaleY*this.frame.realHeight},set:function(t){this.scaleY=t/this.frame.realHeight}},setSizeToFrame:function(t){return void 0===t&&(t=this.frame),this.width=t.realWidth,this.height=t.realHeight,this},setSize:function(t,e){return this.width=t,this.height=e,this},setDisplaySize:function(t,e){return this.displayWidth=t,this.displayHeight=e,this}};t.exports=i},function(t,e,i){var n=i(101),s={_scaleMode:n.DEFAULT,scaleMode:{get:function(){return this._scaleMode},set:function(t){t!==n.LINEAR&&t!==n.NEAREST||(this._scaleMode=t)}},setScaleMode:function(t){return this.scaleMode=t,this}};t.exports=s},function(t,e){var i={_originComponent:!0,originX:.5,originY:.5,_displayOriginX:0,_displayOriginY:0,displayOriginX:{get:function(){return this._displayOriginX},set:function(t){this._displayOriginX=t,this.originX=t/this.width}},displayOriginY:{get:function(){return this._displayOriginY},set:function(t){this._displayOriginY=t,this.originY=t/this.height}},setOrigin:function(t,e){return void 0===t&&(t=.5),void 0===e&&(e=t),this.originX=t,this.originY=e,this.updateDisplayOrigin()},setOriginFromFrame:function(){return this.frame&&this.frame.customPivot?(this.originX=this.frame.pivotX,this.originY=this.frame.pivotY,this.updateDisplayOrigin()):this.setOrigin()},setDisplayOrigin:function(t,e){return void 0===t&&(t=0),void 0===e&&(e=t),this.displayOriginX=t,this.displayOriginY=e,this},updateDisplayOrigin:function(){return this._displayOriginX=Math.round(this.originX*this.width),this._displayOriginY=Math.round(this.originY*this.height),this}};t.exports=i},function(t,e,i){var n=i(10),s=i(428),r=i(3),o={getCenter:function(t){return void 0===t&&(t=new r),t.x=this.x-this.displayWidth*this.originX+this.displayWidth/2,t.y=this.y-this.displayHeight*this.originY+this.displayHeight/2,t},getTopLeft:function(t,e){(t||(t=new r),void 0===e&&(e=!1),t.x=this.x-this.displayWidth*this.originX,t.y=this.y-this.displayHeight*this.originY,0!==this.rotation&&s(t,this.x,this.y,this.rotation),e&&this.parentContainer)&&this.parentContainer.getBoundsTransformMatrix().transformPoint(t.x,t.y,t);return t},getTopRight:function(t,e){(t||(t=new r),void 0===e&&(e=!1),t.x=this.x-this.displayWidth*this.originX+this.displayWidth,t.y=this.y-this.displayHeight*this.originY,0!==this.rotation&&s(t,this.x,this.y,this.rotation),e&&this.parentContainer)&&this.parentContainer.getBoundsTransformMatrix().transformPoint(t.x,t.y,t);return t},getBottomLeft:function(t,e){(t||(t=new r),void 0===e&&(e=!1),t.x=this.x-this.displayWidth*this.originX,t.y=this.y-this.displayHeight*this.originY+this.displayHeight,0!==this.rotation&&s(t,this.x,this.y,this.rotation),e&&this.parentContainer)&&this.parentContainer.getBoundsTransformMatrix().transformPoint(t.x,t.y,t);return t},getBottomRight:function(t,e){(t||(t=new r),void 0===e&&(e=!1),t.x=this.x-this.displayWidth*this.originX+this.displayWidth,t.y=this.y-this.displayHeight*this.originY+this.displayHeight,0!==this.rotation&&s(t,this.x,this.y,this.rotation),e&&this.parentContainer)&&this.parentContainer.getBoundsTransformMatrix().transformPoint(t.x,t.y,t);return t},getBounds:function(t){var e,i,s,r,o,a,h,l;if(void 0===t&&(t=new n),this.parentContainer){var u=this.parentContainer.getBoundsTransformMatrix();this.getTopLeft(t),u.transformPoint(t.x,t.y,t),e=t.x,i=t.y,this.getTopRight(t),u.transformPoint(t.x,t.y,t),s=t.x,r=t.y,this.getBottomLeft(t),u.transformPoint(t.x,t.y,t),o=t.x,a=t.y,this.getBottomRight(t),u.transformPoint(t.x,t.y,t),h=t.x,l=t.y}else this.getTopLeft(t),e=t.x,i=t.y,this.getTopRight(t),s=t.x,r=t.y,this.getBottomLeft(t),o=t.x,a=t.y,this.getBottomRight(t),h=t.x,l=t.y;return t.x=Math.min(e,s,o,h),t.y=Math.min(i,r,a,l),t.width=Math.max(e,s,o,h)-t.x,t.height=Math.max(i,r,a,l)-t.y,t}};t.exports=o},function(t,e){t.exports={flipX:!1,flipY:!1,toggleFlipX:function(){return this.flipX=!this.flipX,this},toggleFlipY:function(){return this.flipY=!this.flipY,this},setFlipX:function(t){return this.flipX=t,this},setFlipY:function(t){return this.flipY=t,this},setFlip:function(t,e){return this.flipX=t,this.flipY=e,this},resetFlip:function(){return this.flipX=!1,this.flipY=!1,this}}},function(t,e){var i={texture:null,frame:null,isCropped:!1,setCrop:function(t,e,i,n){if(void 0===t)this.isCropped=!1;else if(this.frame){if("number"==typeof t)this.frame.setCropUVs(this._crop,t,e,i,n,this.flipX,this.flipY);else{var s=t;this.frame.setCropUVs(this._crop,s.x,s.y,s.width,s.height,this.flipX,this.flipY)}this.isCropped=!0}return this},resetCropObject:function(){return{u0:0,v0:0,u1:0,v1:0,width:0,height:0,x:0,y:0,flipX:!1,flipY:!1,cx:0,cy:0,cw:0,ch:0}}};t.exports=i},function(t,e){t.exports={width:0,height:0,displayWidth:{get:function(){return this.scaleX*this.width},set:function(t){this.scaleX=t/this.width}},displayHeight:{get:function(){return this.scaleY*this.height},set:function(t){this.scaleY=t/this.height}},setSize:function(t,e){return this.width=t,this.height=e,this},setDisplaySize:function(t,e){return this.displayWidth=t,this.displayHeight=e,this}}},function(t,e){t.exports="animationupdate"},function(t,e){t.exports="animationstart"},function(t,e){t.exports="animationrestart"},function(t,e){t.exports="animationrepeat"},function(t,e){t.exports="animationupdate-"},function(t,e){t.exports="animationstart-"},function(t,e){t.exports="animationrestart-"},function(t,e){t.exports="animationrepeat-"},function(t,e){t.exports="animationcomplete-"},function(t,e){t.exports="animationcomplete"},function(t,e){t.exports="resumeall"},function(t,e){t.exports="remove"},function(t,e){t.exports="pauseall"},function(t,e){t.exports="start"},function(t,e){t.exports="restart"},function(t,e){t.exports="repeat"},function(t,e){t.exports="complete"},function(t,e){t.exports="add"},function(t,e,i){var n=i(449),s=i(208),r=i(2),o=i(1),a=new(i(137))({sys:{queueDepthSort:o,events:{once:o}}},0,0,1,1);t.exports=function(t,e){void 0===e&&(e={});var i=r(e,"width",-1),o=r(e,"height",-1),h=r(e,"cellWidth",1),l=r(e,"cellHeight",h),u=r(e,"position",s.TOP_LEFT),c=r(e,"x",0),d=r(e,"y",0),f=0,p=0,g=i*h,v=o*l;a.setPosition(c,d),a.setSize(h,l);for(var y=0;y>>0;if("function"!=typeof t)throw new TypeError;for(var n=arguments.length>=2?arguments[1]:void 0,s=0;s0&&(i=s[0].bodyA,n=s[0].bodyB),t.emit(l.COLLISION_START,e,i,n)}),f.on(e,"collisionActive",function(e){var i,n,s=e.pairs;s.length>0&&(i=s[0].bodyA,n=s[0].bodyB),t.emit(l.COLLISION_ACTIVE,e,i,n)}),f.on(e,"collisionEnd",function(e){var i,n,s=e.pairs;s.length>0&&(i=s[0].bodyA,n=s[0].bodyB),t.emit(l.COLLISION_END,e,i,n)})},setBounds:function(t,e,i,n,s,r,o,a,h){return void 0===t&&(t=0),void 0===e&&(e=0),void 0===i&&(i=this.scene.sys.scale.width),void 0===n&&(n=this.scene.sys.scale.height),void 0===s&&(s=128),void 0===r&&(r=!0),void 0===o&&(o=!0),void 0===a&&(a=!0),void 0===h&&(h=!0),this.updateWall(r,"left",t-s,e,s,n),this.updateWall(o,"right",t+i,e,s,n),this.updateWall(a,"top",t,e-s,i,s),this.updateWall(h,"bottom",t,e+n,i,s),this},updateWall:function(t,e,i,n,s,r){var o=this.walls[e];t?(o&&g.remove(this.localWorld,o),i+=s/2,n+=r/2,this.walls[e]=this.create(i,n,s,r,{isStatic:!0,friction:0,frictionStatic:0})):(o&&g.remove(this.localWorld,o),this.walls[e]=null)},createDebugGraphic:function(){var t=this.scene.sys.add.graphics({x:0,y:0});return t.setDepth(Number.MAX_VALUE),this.debugGraphic=t,this.drawDebug=!0,t},disableGravity:function(){return this.localWorld.gravity.x=0,this.localWorld.gravity.y=0,this.localWorld.gravity.scale=0,this},setGravity:function(t,e,i){return void 0===t&&(t=0),void 0===e&&(e=1),this.localWorld.gravity.x=t,this.localWorld.gravity.y=e,void 0!==i&&(this.localWorld.gravity.scale=i),this},create:function(t,e,i,s,r){var o=n.rectangle(t,e,i,s,r);return g.add(this.localWorld,o),o},add:function(t){return g.add(this.localWorld,t),this},remove:function(t,e){var i=t.body?t.body:t;return o.removeBody(this.localWorld,i,e),this},removeConstraint:function(t,e){return o.remove(this.localWorld,t,e),this},convertTilemapLayer:function(t,e){var i=t.layer,n=t.getTilesWithin(0,0,i.width,i.height,{isColliding:!0});return this.convertTiles(n,e),this},convertTiles:function(t,e){if(0===t.length)return this;for(var i=0;i1?1:0;r1?1:0;s0&&u.trigger(t,"collisionStart",{pairs:T.collisionStart}),o.preSolvePosition(T.list),s=0;s0&&u.trigger(t,"collisionActive",{pairs:T.collisionActive}),T.collisionEnd.length>0&&u.trigger(t,"collisionEnd",{pairs:T.collisionEnd}),h.update(t.metrics,t),n._bodiesClearForces(y),u.trigger(t,"afterUpdate",v),t},n.merge=function(t,e){if(f.extend(t,e),e.world){t.world=e.world,n.clear(t);for(var i=c.allBodies(t.world),s=0;sf.friction*f.frictionStatic*F*i&&(I=R,k=o.clamp(f.friction*L*i,-I,I));var B=r.cross(_,y),Y=r.cross(A,y),N=T/(g.inverseMass+v.inverseMass+g.inverseInertia*B*B+v.inverseInertia*Y*Y);if(D*=N,k*=N,P<0&&P*P>n._restingThresh*i)b.normalImpulse=0;else{var X=b.normalImpulse;b.normalImpulse=Math.min(b.normalImpulse+D,0),D=b.normalImpulse-X}if(O*O>n._restingThreshTangent*i)b.tangentImpulse=0;else{var z=b.tangentImpulse;b.tangentImpulse=o.clamp(b.tangentImpulse+k,-I,I),k=b.tangentImpulse-z}s.x=y.x*D+m.x*k,s.y=y.y*D+m.y*k,g.isStatic||g.isSleeping||(g.positionPrev.x+=s.x*g.inverseMass,g.positionPrev.y+=s.y*g.inverseMass,g.anglePrev+=r.cross(_,s)*g.inverseInertia),v.isStatic||v.isSleeping||(v.positionPrev.x-=s.x*v.inverseMass,v.positionPrev.y-=s.y*v.inverseMass,v.anglePrev-=r.cross(A,s)*v.inverseInertia)}}}}},function(t,e,i){var n={};t.exports=n;var s=i(451),r=i(36);n._pairMaxIdleLife=1e3,n.create=function(t){return r.extend({table:{},list:[],collisionStart:[],collisionActive:[],collisionEnd:[]},t)},n.update=function(t,e,i){var n,r,o,a,h=t.list,l=t.table,u=t.collisionStart,c=t.collisionEnd,d=t.collisionActive;for(u.length=0,c.length=0,d.length=0,a=0;an._pairMaxIdleLife&&l.push(o);for(o=0;ou.bounds.max.x||p.bounds.max.yu.bounds.max.y)){var g=n._getRegion(t,p);if(!p.region||g.id!==p.region.id||s){f.broadphaseTests+=1,p.region&&!s||(p.region=g);var v=n._regionUnion(g,p.region);for(o=v.startCol;o<=v.endCol;o++)for(a=v.startRow;a<=v.endRow;a++){h=c[l=n._getBucketId(o,a)];var y=o>=g.startCol&&o<=g.endCol&&a>=g.startRow&&a<=g.endRow,m=o>=p.region.startCol&&o<=p.region.endCol&&a>=p.region.startRow&&a<=p.region.endRow;!y&&m&&m&&h&&n._bucketRemoveBody(t,h,p),(p.region===g||y&&!m||s)&&(h||(h=n._createBucket(c,l)),n._bucketAddBody(t,h,p))}p.region=g,d=!0}}}d&&(t.pairsList=n._createActivePairsList(t))},n.clear=function(t){t.buckets={},t.pairs={},t.pairsList=[]},n._regionUnion=function(t,e){var i=Math.min(t.startCol,e.startCol),s=Math.max(t.endCol,e.endCol),r=Math.min(t.startRow,e.startRow),o=Math.max(t.endRow,e.endRow);return n._createRegion(i,s,r,o)},n._getRegion=function(t,e){var i=e.bounds,s=Math.floor(i.min.x/t.bucketWidth),r=Math.floor(i.max.x/t.bucketWidth),o=Math.floor(i.min.y/t.bucketHeight),a=Math.floor(i.max.y/t.bucketHeight);return n._createRegion(s,r,o,a)},n._createRegion=function(t,e,i,n){return{id:t+","+e+","+i+","+n,startCol:t,endCol:e,startRow:i,endRow:n}},n._getBucketId=function(t,e){return"C"+t+"R"+e},n._createBucket=function(t,e){return t[e]=[]},n._bucketAddBody=function(t,e,i){for(var n=0;n0?n.push(i):delete t.pairs[e[s]];return n}},function(t,e,i){var n={};t.exports=n;var s=i(540),r=i(36);n.name="matter-js",n.version="0.14.2",n.uses=[],n.used=[],n.use=function(){s.use(n,Array.prototype.slice.call(arguments))},n.before=function(t,e){return t=t.replace(/^Matter./,""),r.chainPathBefore(n,t,e)},n.after=function(t,e){return t=t.replace(/^Matter./,""),r.chainPathAfter(n,t,e)}},function(t,e,i){var n=i(460),s=i(0),r=i(452),o=i(18),a=i(2),h=i(200),l=i(67),u=i(3),c=new s({Extends:l,Mixins:[r.Bounce,r.Collision,r.Force,r.Friction,r.Gravity,r.Mass,r.Sensor,r.SetBody,r.Sleep,r.Static,r.Transform,r.Velocity,h],initialize:function(t,e,i,s,r,h){o.call(this,t.scene,"Sprite"),this.anims=new n(this),this.setTexture(s,r),this.setSizeToFrame(),this.setOrigin(),this.world=t,this._tempVec2=new u(e,i);var l=a(h,"shape",null);l?this.setBody(l,h):this.setRectangle(this.width,this.height,h),this.setPosition(e,i),this.initPipeline("TextureTintPipeline")}});t.exports=c},function(t,e,i){var n=i(0),s=i(452),r=i(18),o=i(2),a=i(93),h=i(200),l=i(3),u=new n({Extends:a,Mixins:[s.Bounce,s.Collision,s.Force,s.Friction,s.Gravity,s.Mass,s.Sensor,s.SetBody,s.Sleep,s.Static,s.Transform,s.Velocity,h],initialize:function(t,e,i,n,s,a){r.call(this,t.scene,"Image"),this.setTexture(n,s),this.setSizeToFrame(),this.setOrigin(),this.world=t,this._tempVec2=new l(e,i);var h=o(a,"shape",null);h?this.setBody(h,a):this.setRectangle(this.width,this.height,a),this.setPosition(e,i),this.initPipeline("TextureTintPipeline")}});t.exports=u},function(t,e,i){var n={};t.exports=n;var s=i(149),r=i(209),o=i(36),a=i(72),h=i(138);n.stack=function(t,e,i,n,r,o,h){for(var l,u=s.create({label:"Stack"}),c=t,d=e,f=0,p=0;pg&&(g=m),a.translate(y,{x:.5*x,y:.5*m}),c=y.bounds.max.x+r,s.addBody(u,y),l=y,f+=1}else c+=r}d+=g+o,c=t}return u},n.chain=function(t,e,i,n,a,h){for(var l=t.bodies,u=1;u0)for(l=0;l0&&(d=f[l-1+(h-1)*e],s.addConstraint(t,r.create(o.extend({bodyA:d,bodyB:c},a)))),n&&ld||o<(l=d-l)||o>i-1-l))return 1===c&&a.translate(u,{x:(o+(i%2==1?1:-1))*f,y:0}),h(t+(u?o*f:0)+o*r,n,o,l,u,c)})},n.newtonsCradle=function(t,e,i,n,o){for(var a=s.create({label:"Newtons Cradle"}),l=0;l=0&&h<=1&&l>=0&&l<=1}function s(t,e,i){return(e[0]-t[0])*(i[1]-t[1])-(i[0]-t[0])*(e[1]-t[1])}function r(t,e,i){return s(t,e,i)>0}function o(t,e,i){return s(t,e,i)>=0}function a(t,e,i){return s(t,e,i)<0}function h(t,e,i){return s(t,e,i)<=0}t.exports={decomp:function(t){var e=function t(e){var i=[],n=[],s=[],r=[];var o=Number.MAX_VALUE;for(var a=0;a0?function t(e,i){if(0===i.length)return[e];if(i instanceof Array&&i.length&&i[0]instanceof Array&&2===i[0].length&&i[0][0]instanceof Array){for(var n=[e],s=0;su)return console.warn("quickDecomp: max level ("+u+") reached."),i;for(var L=0;LA&&(A+=e.length),_=Number.MAX_VALUE,A3&&n>=0;--n)c(f(t,n-1),f(t,n),f(t,n+1),e)&&(t.splice(n%t.length,1),i++);return i},removeDuplicatePoints:function(t,e){for(var i=t.length-1;i>=1;--i)for(var n=t[i],s=i-1;s>=0;--s)S(n,t[s],e)&&t.splice(i,1)},makeCCW:function(t){for(var e=0,i=t,n=1;ni[e][0])&&(e=n);return!r(f(t,e-1),f(t,e),f(t,e+1))&&(function(t){for(var e=[],i=t.length,n=0;n!==i;n++)e.push(t.pop());for(var n=0;n!==i;n++)t[n]=e[n]}(t),!0)}};var l=[],u=[];function c(t,e,i,n){if(n){var r=l,o=u;r[0]=e[0]-t[0],r[1]=e[1]-t[1],o[0]=i[0]-e[0],o[1]=i[1]-e[1];var a=r[0]*o[0]+r[1]*o[1],h=Math.sqrt(r[0]*r[0]+r[1]*r[1]),c=Math.sqrt(o[0]*o[0]+o[1]*o[1]);return Math.acos(a/(h*c))r.ACTIVE&&d(this,t,e))},setCollidesNever:function(t){for(var e=0;e1)for(var h=i/a,l=n/a,u=0;u0?r:0,y=n<0?f:0,m=Math.max(Math.floor(i/f),0),x=Math.min(Math.ceil((i+o)/f),g);u=Math.floor((t.pos.x+v)/f);var T=Math.floor((e+v)/f);if((l>0||u===T||T<0||T>=p)&&(T=-1),u>=0&&u1&&d<=this.lastSlope&&this.checkDef(t,d,e,i,a,h,r,o,T,c));c++)if(1===(d=this.data[c][u])||d>this.lastSlope||d>1&&this.checkDef(t,d,e,i,a,h,r,o,u,c)){if(d>1&&d<=this.lastSlope&&t.collision.slope)break;t.collision.x=!0,t.tile.x=d,t.pos.x=u*f-v+y,e=t.pos.x,a=0;break}}if(s){var w=s>0?o:0,b=s<0?f:0,S=Math.max(Math.floor(t.pos.x/f),0),_=Math.min(Math.ceil((t.pos.x+r)/f),p);c=Math.floor((t.pos.y+w)/f);var A=Math.floor((i+w)/f);if((l>0||c===A||A<0||A>=g)&&(A=-1),c>=0&&c1&&d<=this.lastSlope&&this.checkDef(t,d,e,i,a,h,r,o,u,A));u++)if(1===(d=this.data[c][u])||d>this.lastSlope||d>1&&this.checkDef(t,d,e,i,a,h,r,o,u,c)){if(d>1&&d<=this.lastSlope&&t.collision.slope)break;t.collision.y=!0,t.tile.y=d,t.pos.y=c*f-w+b;break}}},checkDef:function(t,e,i,n,s,r,o,a,h,l){var u=this.tiledef[e];if(!u)return!1;var c=this.tilesize,d=(h+u[0])*c,f=(l+u[1])*c,p=(u[2]-u[0])*c,g=(u[3]-u[1])*c,v=u[4],y=i+s+(g<0?o:0)-d,m=n+r+(p>0?a:0)-f;if(p*m-g*y>0){if(s*-g+r*p<0)return v;var x=Math.sqrt(p*p+g*g),T=g/x,w=-p/x,b=y*T+m*w,S=T*b,_=w*b;return S*S+_*_>=s*s+r*r?v||p*(m-r)-g*(y-s)<.5:(t.pos.x=i+s-S,t.pos.y=n+r-_,t.collision.slope={x:p,y:g,nx:T,ny:w},!0)}return!1}});t.exports=r},function(t,e,i){var n=i(0),s=i(240),r=i(1357),o=i(239),a=i(1356),h=new n({initialize:function(t,e,i,n,r){void 0===n&&(n=16),void 0===r&&(r=n),this.world=t,this.gameObject=null,this.enabled=!0,this.parent,this.id=t.getNextID(),this.name="",this.size={x:n,y:r},this.offset={x:0,y:0},this.pos={x:e,y:i},this.last={x:e,y:i},this.vel={x:0,y:0},this.accel={x:0,y:0},this.friction={x:0,y:0},this.maxVel={x:t.defaults.maxVelocityX,y:t.defaults.maxVelocityY},this.standing=!1,this.gravityFactor=t.defaults.gravityFactor,this.bounciness=t.defaults.bounciness,this.minBounceVelocity=t.defaults.minBounceVelocity,this.accelGround=0,this.accelAir=0,this.jumpSpeed=0,this.type=o.NONE,this.checkAgainst=o.NONE,this.collides=s.NEVER,this.debugShowBody=t.defaults.debugShowBody,this.debugShowVelocity=t.defaults.debugShowVelocity,this.debugBodyColor=t.defaults.bodyDebugColor,this.updateCallback,this.slopeStanding={min:.767944870877505,max:2.3736477827122884}},reset:function(t,e){this.pos={x:t,y:e},this.last={x:t,y:e},this.vel={x:0,y:0},this.accel={x:0,y:0},this.friction={x:0,y:0},this.maxVel={x:100,y:100},this.standing=!1,this.gravityFactor=1,this.bounciness=0,this.minBounceVelocity=40,this.accelGround=0,this.accelAir=0,this.jumpSpeed=0,this.type=o.NONE,this.checkAgainst=o.NONE,this.collides=s.NEVER},update:function(t){var e=this.pos;this.last.x=e.x,this.last.y=e.y,this.vel.y+=this.world.gravity*t*this.gravityFactor,this.vel.x=r(t,this.vel.x,this.accel.x,this.friction.x,this.maxVel.x),this.vel.y=r(t,this.vel.y,this.accel.y,this.friction.y,this.maxVel.y);var i=this.vel.x*t,n=this.vel.y*t,s=this.world.collisionMap.trace(e.x,e.y,i,n,this.size.x,this.size.y);this.handleMovementTrace(s)&&a(this,s);var o=this.gameObject;o&&(o.x=e.x-this.offset.x+o.displayOriginX*o.scaleX,o.y=e.y-this.offset.y+o.displayOriginY*o.scaleY),this.updateCallback&&this.updateCallback(this)},drawDebug:function(t){var e=this.pos;if(this.debugShowBody&&(t.lineStyle(1,this.debugBodyColor,1),t.strokeRect(e.x,e.y,this.size.x,this.size.y)),this.debugShowVelocity){var i=e.x+this.size.x/2,n=e.y+this.size.y/2;t.lineStyle(1,this.world.defaults.velocityDebugColor,1),t.lineBetween(i,n,i+this.vel.x,n+this.vel.y)}},willDrawDebug:function(){return this.debugShowBody||this.debugShowVelocity},skipHash:function(){return!this.enabled||0===this.type&&0===this.checkAgainst&&0===this.collides},touches:function(t){return!(this.pos.x>=t.pos.x+t.size.x||this.pos.x+this.size.x<=t.pos.x||this.pos.y>=t.pos.y+t.size.y||this.pos.y+this.size.y<=t.pos.y)},resetSize:function(t,e,i,n){return this.pos.x=t,this.pos.y=e,this.size.x=i,this.size.y=n,this},toJSON:function(){return{name:this.name,size:{x:this.size.x,y:this.size.y},pos:{x:this.pos.x,y:this.pos.y},vel:{x:this.vel.x,y:this.vel.y},accel:{x:this.accel.x,y:this.accel.y},friction:{x:this.friction.x,y:this.friction.y},maxVel:{x:this.maxVel.x,y:this.maxVel.y},gravityFactor:this.gravityFactor,bounciness:this.bounciness,minBounceVelocity:this.minBounceVelocity,type:this.type,checkAgainst:this.checkAgainst,collides:this.collides}},fromJSON:function(){},check:function(){},collideWith:function(t,e){this.parent&&this.parent._collideCallback&&this.parent._collideCallback.call(this.parent._callbackScope,this,t,e)},handleMovementTrace:function(){return!0},destroy:function(){this.world.remove(this),this.enabled=!1,this.world=null,this.gameObject=null,this.parent=null}});t.exports=h},,function(t,e,i){t.exports={BitmapMaskPipeline:i(454),ForwardDiffuseLightPipeline:i(453),TextureTintPipeline:i(211)}},function(t,e,i){t.exports={Utils:i(9),WebGLPipeline:i(212),WebGLRenderer:i(456),Pipelines:i(1300),BYTE:0,SHORT:1,UNSIGNED_BYTE:2,UNSIGNED_SHORT:3,FLOAT:4}},function(t,e,i){t.exports={Canvas:i(458),WebGL:i(455)}},function(t,e,i){t.exports={CanvasRenderer:i(459),GetBlendModes:i(457),SetTransform:i(25)}},function(t,e,i){t.exports={Canvas:i(1303),Snapshot:i(1302),WebGL:i(1301)}},function(t,e,i){var n=i(541),s={name:"matter-wrap",version:"0.1.4",for:"matter-js@^0.13.1",silent:!0,install:function(t){t.after("Engine.update",function(){s.Engine.update(this)})},Engine:{update:function(t){for(var e=t.world,i=n.Composite.allBodies(e),r=n.Composite.allComposites(e),o=0;oe.max.x?i=e.min.x-t.max.x:t.max.xe.max.y?n=e.min.y-t.max.y:t.max.y0)for(var a=s+1;a1;if(!d||t!=d.x||e!=d.y){d&&n?(f=d.x,p=d.y):(f=0,p=0);var s={x:f+t,y:p+e};!n&&d||(d=s),g.push(s),y=f+t,m=p+e}},T=function(t){var e=t.pathSegTypeAsLetter.toUpperCase();if("Z"!==e){switch(e){case"M":case"L":case"T":case"C":case"S":case"Q":y=t.x,m=t.y;break;case"H":y=t.x;break;case"V":m=t.y}x(y,m,t.pathSegType)}};for(n._svgPathToAbsolute(t),o=t.getTotalLength(),l=[],i=0;i1?1:0;n0))r=t.collisionMap.trace(e.pos.x,e.pos.y,0,-(e.pos.y+e.size.y-i.pos.y),e.size.x,e.size.y),e.pos.y=r.pos.y,e.bounciness>0&&e.vel.y>e.minBounceVelocity?e.vel.y*=-e.bounciness:(e.standing=!0,e.vel.y=0);else{var l=(e.vel.y-i.vel.y)/2;e.vel.y=-l,i.vel.y=l,s=i.vel.x*t.delta,r=t.collisionMap.trace(e.pos.x,e.pos.y,s,-o/2,e.size.x,e.size.y),e.pos.y=r.pos.y;var u=t.collisionMap.trace(i.pos.x,i.pos.y,0,o/2,i.size.x,i.size.y);i.pos.y=u.pos.y}}},function(t,e){t.exports=function(t,e,i,n){var s=e.pos.x+e.size.x-i.pos.x;if(n){var r=e===n?i:e;n.vel.x=-n.vel.x*n.bounciness+r.vel.x;var o=t.collisionMap.trace(n.pos.x,n.pos.y,n===e?-s:s,0,n.size.x,n.size.y);n.pos.x=o.pos.x}else{var a=(e.vel.x-i.vel.x)/2;e.vel.x=-a,i.vel.x=a;var h=t.collisionMap.trace(e.pos.x,e.pos.y,-s/2,0,e.size.x,e.size.y);e.pos.x=Math.floor(h.pos.x);var l=t.collisionMap.trace(i.pos.x,i.pos.y,s/2,0,i.size.x,i.size.y);i.pos.x=Math.ceil(l.pos.x)}}},function(t,e,i){var n=i(240),s=i(548),r=i(1337),o=i(1336);t.exports=function(t,e,i){var a=null;e.collides===n.LITE||i.collides===n.FIXED?a=e:i.collides!==n.LITE&&e.collides!==n.FIXED||(a=i),e.last.x+e.size.x>i.last.x&&e.last.xi.last.y&&e.last.y0&&Math.abs(t.vel.y)>t.minBounceVelocity?t.vel.y*=-t.bounciness:(t.vel.y>0&&(t.standing=!0),t.vel.y=0)),e.collision.x&&(t.bounciness>0&&Math.abs(t.vel.x)>t.minBounceVelocity?t.vel.x*=-t.bounciness:t.vel.x=0),e.collision.slope){var i=e.collision.slope;if(t.bounciness>0){var n=t.vel.x*i.nx+t.vel.y*i.ny;t.vel.x=(t.vel.x-i.nx*n*2)*t.bounciness,t.vel.y=(t.vel.y-i.ny*n*2)*t.bounciness}else{var s=i.x*i.x+i.y*i.y,r=(t.vel.x*i.x+t.vel.y*i.y)/s;t.vel.x=i.x*r,t.vel.y=i.y*r;var o=Math.atan2(i.x,i.y);o>t.slopeStanding.min&&o0?e-o:e+o<0?e+o:0}return n(e,-r,r)}},function(t,e,i){t.exports={Body:i(1298),Events:i(548),COLLIDES:i(240),CollisionMap:i(1297),Factory:i(1296),Image:i(1294),ImpactBody:i(1295),ImpactPhysics:i(1339),Sprite:i(1293),TYPE:i(239),World:i(1292)}},function(t,e,i){t.exports={Arcade:i(577),Impact:i(1358),Matter:i(1335)}},function(t,e,i){(function(e){i(1280);var n=i(28),s=i(19),r={Actions:i(450),Animations:i(1191),Cache:i(1176),Cameras:i(1173),Core:i(1097),Class:i(0),Create:i(1038),Curves:i(1032),Data:i(1029),Display:i(1027),DOM:i(998),Events:i(997),Game:i(995),GameObjects:i(902),Geom:i(279),Input:i(635),Loader:i(601),Math:i(387),Physics:i(1359),Plugins:i(538),Renderer:i(1304),Scale:i(536),Scene:i(331),Scenes:i(535),Sound:i(533),Structs:i(532),Textures:i(531),Tilemaps:i(529),Time:i(480),Tweens:i(478),Utils:i(468)};r=s(!1,r,n),t.exports=r,e.Phaser=r}).call(this,i(215))}])}); \ No newline at end of file diff --git a/tools/eat-what-today/index.html b/tools/eat-what-today/index.html new file mode 100644 index 0000000..5a8859c --- /dev/null +++ b/tools/eat-what-today/index.html @@ -0,0 +1,41 @@ + + + + + + 今天中午吃什么?这是一个很无聊的网站,但能解决你的人生一大困扰!选择困难户必备! + + + + + + + +
+ + + +
+
+
+

今天午饭神马

+ 开始 +

+ 点击可以切换饭点~
+ +
+
正常人类非正常人类 +
+
+ + + + + + + + \ No newline at end of file diff --git a/tools/eat-what-today/old_index.html b/tools/eat-what-today/old_index.html new file mode 100644 index 0000000..d0b2a92 --- /dev/null +++ b/tools/eat-what-today/old_index.html @@ -0,0 +1,91 @@ + + + + + + 今天吃什么 + + + + + + +
+

+
今天吃什么,吃什么?
+
+
+

+ + +
+ + + + + + + + + + \ No newline at end of file diff --git a/tools/md-editor/index.html b/tools/md-editor/index.html new file mode 100644 index 0000000..9628bd0 --- /dev/null +++ b/tools/md-editor/index.html @@ -0,0 +1,66 @@ + + + + + + Markdown编辑器 + + + + + + + + + + + + + +
+
+
+
+
新建文件.md +
+
+
+ +
+
+

设置

+

主题

+
+

显示

全屏窗口化 + +
+
+
{{ appTitle }}
+
+
+ + + + + + + + \ No newline at end of file diff --git a/tools/planet/index.html b/tools/planet/index.html new file mode 100644 index 0000000..ed7e7fa --- /dev/null +++ b/tools/planet/index.html @@ -0,0 +1,43 @@ + + + + + + 星球 + + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/tools/pwd-generator/index.html b/tools/pwd-generator/index.html new file mode 100644 index 0000000..5140501 --- /dev/null +++ b/tools/pwd-generator/index.html @@ -0,0 +1,493 @@ + + + + +密码生成器 + + + + + + + + + + + + +
+

密码生成器

+
+
生成的密码
+
点击复制
+
已复制
+
请点击生成按钮
+ +
+
+
Length
+ +
+ +
+ settings +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/tools/quark/LICENSE b/tools/quark/LICENSE new file mode 100644 index 0000000..3724db8 --- /dev/null +++ b/tools/quark/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 刘明野 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/tools/quark/README.md b/tools/quark/README.md new file mode 100644 index 0000000..888519f --- /dev/null +++ b/tools/quark/README.md @@ -0,0 +1,20 @@ +![](https://img.shields.io/badge/license-MIT-green) ![](https://img.shields.io/badge/version-1.50-red) + +## quarkHomePage +H5仿夸克浏览器主页 +![](https://ae01.alicdn.com/kf/H244bb0ca385f4109a1c9d11d4a8be564O.jpg) +# 更新计划 +1. 搜索历史 +2. 壁纸库 +3. 夜间模式 +4. 可以添加预设书签 +# 图标来源 +* Pure轻雨图标包 +# 在线地址 +[https://liumingye.gitee.io/quarkhomepage/](https://liumingye.gitee.io/quarkhomepage/) +# 感谢开源项目 +* jquery +* sortablejs +* Swiper +* TouchSwipe +* requirejs diff --git a/tools/quark/css/lazy.css b/tools/quark/css/lazy.css new file mode 100644 index 0000000..c5c5a16 --- /dev/null +++ b/tools/quark/css/lazy.css @@ -0,0 +1,16 @@ +/** + * Swiper 4.5.1 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * http://www.idangero.us/swiper/ + * + * Copyright 2014-2019 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: September 13, 2019 + */ +.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;height:100%;position:relative;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform} + +.swiper-wrapper{ + overflow: visible; +} diff --git a/tools/quark/css/main.css b/tools/quark/css/main.css new file mode 100644 index 0000000..e9562df --- /dev/null +++ b/tools/quark/css/main.css @@ -0,0 +1,982 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ +html{-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none} + +/** + * 仿夸克主页 + * author: BigLop +*/ +*{ + overflow:hidden; + margin:0;padding:0;outline:0;user-select:none;-webkit-tap-highlight-color:transparent; + font-family: "Noto Sans CJK SC", "Source Han Sans CN", sans-serif !important; +} +:after, :before, * { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +a{color:var(--dark);text-decoration:none;} +ul,li{list-style-type:none} +body { + font-size: 14px; + background: var(--bg); + background-size: 100%; + background-position: top center; + background-repeat: no-repeat; + background-attachment: fixed; +} +body,html { + height: 100%; +} +::-webkit-scrollbar { + width: 0; +} +#app { + height: 100%; + max-width: 768px; + margin: 0 auto; + position: relative; +} +:root { + --bg: #fff; + --blue: #2c8ef8; + --indigo: #727cf5; + --purple: #6b5eae; + --pink: #ff679b; + --red: #fa5c7c; + --orange: #fd7e14; + --yellow: #ffbc00; + --green: #0acf97; + --teal: #02a8b5; + --cyan: #39afd1; + --white: #fff; + --gray: #98a6ad; + --gray-dark: #343a40; + --primary: #727cf5; + --secondary: #6c757d; + --success: #0acf97; + --info: #39afd1; + --warning: #ffbc00; + --danger: #fa5c7c; + --light: #e3eaef; + --dark: #313a46; +} +/** + * 细圆风格 +*/ +.styleThin .ornament-input-group,.styleThin .anitInput{ + height: 50px; +} +.styleThin .ornament-input-group,.styleThin .anitInput,.styleThin .input-bg{ + border-width:1px; + border-radius:999px; +} +.styleThin .search-btn,.styleThin .empty-input{ + line-height: 48px; + height: 48px; +} +.styleThin .shortcut3 li:not(:first-child),.styleThin .history li,.styleThin .emptyHistory{ + border-radius:999px; +} +.styleThin .history li{ + padding: 8px 12px; +} +.styleThin .input-bg{ + margin: 10px 18px; + line-height: 49px; + height: 49px; +} +.styleThin .suggestion, .styleThin .history{ + bottom: 114px; + max-height: calc(100% - 114px); +} +/** + * home页面 +*/ +.page-home { + justify-content: center; + padding: 30px; + height: 100%; + padding-top: 84px; +} +.logo { + text-align: center; + margin: 0 auto; + max-width: 32%; + min-height: 104px; + max-height: 150px; + margin-bottom: 20px; + background-position: center; + background-size: cover; + transition: opacity .3s; +} +.logo img { + width: 100%; +} +.ornament-input-group, .anitInput { + border: 2px solid var(--dark); + height: 60px; + border-radius: 16px; + margin-bottom: 24px; +} +.bookmark{ + text-align: center; + display: flex; + flex-wrap: wrap; + margin: 0 -10%; + padding: 0 30px 180px; + transition: transform .4s,opacity .5s; + min-height: 90px; +} +.bookmark.animation { + opacity:0; + transform:translateY(80px); +} +.bookmark .list { + flex: 0 0 20%; + padding-top: 6px; + position: relative; +} +.bookmark .list .img { + width: 40px; + height: 40px; + border-radius: 50%; + margin: 0 auto; + background-position:center; + background-size:cover; + background-repeat:no-repeat; + overflow: visible; + position: relative; +} +.bookmark .list .text { + font-size: 12px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + color: var(--dark); + text-shadow: 0 0 4px var(--white); + padding: 7px 0 10px; +} +.delbook{ + top: -5px; + right: -5px; + position:absolute;width:18px;height:18px;background:url(../img/delete.png) no-repeat center;background-size:18px; + animation:scale .3s; + transition: transform .3s; +} +.delbook.animation{ + transform:scale(0); +} +.addbook{ + animation:fadeIn .4s; + transition: opacity .4s; + will-change: opacity; +} +.addbook.animation{ + opacity: 0; +} +.addbook .img svg{ + background: #f9f9f9; + border-radius: 50%; +} +/** + * 浅色图标 +*/ +.theme-white .ornament-input-group,.theme-white .anitInput{ + border-color:var(--white); + opacity: .5; +} +.theme-white .bookmark .list .text{ + color: #fff; + text-shadow: 0 0 4px #999; +} +/* 背景页面 */ +.page-addbook,.page-search,.page-settings{position:absolute;left:0;top:0;width:100%;height:100%;} +.page-addbook{ + display: flex; + flex-direction: column; + background: transparent; +} +/* 添加书签 */ +.addbook-choice{ + display: flex; + padding: 20px 10px; + transform: translateX(40px); + opacity: 0; + transition: transform .35s ease-out, opacity .35s; +} +.addbook-choice.animation{ + transform: translateX(0); + opacity: 1; +} +.addbook-choice li{ + color: #bbb; + padding: 0 16px; + font-size: 16px; + font-weight: bold; +} +.addbook-choice li.current{ + color: #fff; +} +.addbook-choice .active-span{ + position:absolute;top:44px;width:18px;height: 2px;background:var(--white);border-radius:999px; + transition: transform .3s; + left: 34px; +} +.addbook-content{ + flex: 1; + margin: 0 10px 10px; + border-radius: 18px; + background:var(--bg); + color:var(--dark); + transform:scale(1.3); + opacity: 0; + transition: transform .4s cubic-bezier(.49,1.9,0,0.73), opacity .4s; +} +.addbook-content.animation{ + transform:scale(1); + opacity: 1; +} +.addbook-content > div{ + transition: opacity .1s; + opacity: 0; +} +.addbook-content.animation > div{ + opacity: 1; +} +.addbook-sites{ + overflow: auto; + height: 100%; + padding: 20px 20px 50px; +} +.addbook-input{ + width: 100%; + border: 0; + color: var(--dark); + background: #f9f9f9; + border-radius: 10px; + padding: 16px 10px; + margin-bottom: 10px; +} +#addbook-upload{ + background: #f9f9f9; + border-radius: 10px; + text-align: center; + height: 48px; + line-height: 48px; +} +#addbook-upload img{height: 100%;float: left;} +#addbook-upload p{text-overflow: ellipsis;text-align: right;} +.addbook-ok{ + text-align:center; + margin: 0 auto; + background-color: #193ee8; + color:#fff; + width: 130px; + height: 40px; + line-height: 40px; + border-radius:999px; + margin-top: 20px; + font-weight: bold; +} +.addbook-btn{padding:10px 0;text-align:right;} +.addbook-btn a{padding:8px 15px;color:#3399CC;line-height:36px;} +.addbook-btn a:active,#addbook-upload:active{background:#eee;} +/* 搜索页面 */ +.page-search{ + display: none; + opacity: 0; + transition: opacity .4s; + background-color: #f5f5f5; +} +.page-search.animation{ + opacity: 1; +} +.bottom-row{ + position: absolute; + bottom: 0; + width: 100%; + background: #fff; + overflow: visible; +} +.suggestion, .history{overflow:auto;width:100%; + max-height: calc(100% - 122px); + bottom: 122px; + position: absolute; +} +.history{ + font-size: 13px; + padding: 0 16px; + opacity: 0; + transform: translate3d(0,-40px,0); + transition: transform .5s ,opacity cubic-bezier(0.55, 0.06, 0.68, 0.19) .2s .1s; + padding-top:55px; +} +.history.animation{ + opacity: 1; + transform: translate3d(0,0,0); +} +.emptyHistory{ + background: url(../img/empty.png) no-repeat 13px center; + background-size: 14px; + width: 40px; + height: 40px; + display: flex; + align-items: center; + right: 25px; + position: absolute; + top: 8px; + background-color: #efefef; + border-radius: 8px; + padding-left: 40px; + transition: width .3s; +} +.emptyHistory.animation{ + width: 102px; +} +.emptyHistory:after{ + content: "全部删除"; + white-space: pre; + font-size: 12px; + font-weight: bold; +} +.history .content{ + display: flex; + flex-flow: wrap-reverse; + margin-bottom: 10px; +} +.history li{ + padding: 12px; + margin: 5px; + background: #fff; + border-radius: 8px; + color:var(--dark); + white-space: nowrap; + text-overflow: ellipsis; + max-width: calc(50% - 10px); + font-weight: bold; +} +.suggestion li{ + padding-left:50px;background:url(../img/su.png) no-repeat center;background-size:15px;background-position-x:20px; + display: flex; + line-height: 52px; + height: 52px; + color:#444; + font-size: 14px; +} +.suggestion b{ + color:#111; +} +.suggestion li:active{background-color:#eee;} +.suggestion li div{ + flex:1; +} +.suggestion li span{ + width: 50px; + background-image: url(../img/arrow.png); + background-size: 12px; + background-repeat: no-repeat; + background-position: center; +} +.search-from{ + overflow: visible; +} +.s-temp{position:fixed;top:-8pc;} +.input-bg{ + line-height: 50px; + height: 50px; + display: flex; + overflow: visible; + font-size:14px; + margin: 14px 18px; + border-radius: 14px; + opacity: 0; + transition: opacity .3s; + will-change: opacity; + border: 2px solid transparent; +} +.input-bg.animation{ + opacity: 1; +} +.search-input{ + flex: 1; + border:0; + padding-left: 20px; + background-color: transparent; + caret-color: #2196F3; + color: var(--dark); + animation: down .35s; + width: 0; + line-height: 1; +} +.search-input::-webkit-input-placeholder{ + color: #969696; +} +.empty-input{display:none;width:50px;height:46px;background:url(../img/delete.png) no-repeat center;background-size:16px; +} +.search-btn{ + margin-right: 20px; + color: var(--dark); + font-size: 14px; + line-height: 46px; + height: 46px; + font-weight: bold; + animation: down .35s; +} +.shortcut{ + padding:0 10px;background:#efefef;line-height:25px; + height: 44px; + line-height: 44px; + font-size:14px; +} +.shortcut .content{ + opacity: 0; + transition: opacity ease-in .2s .2s; +} +.shortcut.animation .content{ + opacity: 1; +} +.shortcut .content ul{ + display: flex; + align-items: center; +} +.shortcut *>li{ + text-align:center; + flex: 1; +} +.shortcut .shortcut1, +.shortcut .shortcut2{ + font-weight: bold; +} +.shortcut .shortcut1 li:active, +.shortcut .shortcut2 li:active{ + background:#ddd; +} +.shortcut ul{color:#202020;} +.shortcut3{ + overflow-x:scroll; +} +.shortcut3 li{ + padding: 0 10px; + margin: 0 4px; + flex: auto; + flex-shrink: 0; + height: 26px; + line-height: 26px; + font-size:12px; +} +.shortcut3 li:first-child{ + height: 44px; + line-height: 44px; + margin: 0; +} +.shortcut3 li:not(:first-child){ + background-color: #fff; + border-radius: 4px; +} + +/* 设置页面 */ +.page-settings{ + opacity: 0; + transform: translate3d(0, 60px, 0); + transition: transform .3s,opacity .3s; + color:var(--dark); + background:var(--bg); +} +.page-settings.animation{ + opacity: 1; + transform: translate3d(0, 0, 0); +} +.set-option-from{overflow:auto;height:calc(100% - 50px);} +.set-header{ + height: 50px; + line-height: 50px; +} +.set-back{ + position:absolute; + height: 50px; + width: 64px; + float: left; +} +.set-back:hover{ + background: rgba(0,0,0,0.1); +} +.set-back:after,.set-back:before{ + content: ""; + width: 10px; + height: 1.5px; + position: absolute; + top: 24px; + background: var(--dark); + transform-origin: 0; + left: 30px; +} +.set-back:after{ + transform: rotate(-45deg); +} +.set-back:before{ + transform: rotate(45deg); + margin-top: -1px; +} +.set-logo{ + color:var(--dark);font-weight: bold;font-size:16px; + text-align: center; +} +.set-option{ + display: flex; + align-items: center; + padding: 20px; + position: relative; +} +.set-checkbox { + opacity: 0; + position: absolute; +} +.set-option .set-checkbox + label::before, .set-option .set-checkbox + label::after { + content: ""; + position: absolute; + transform: translateY(-50%); + top: 50%; + right: 20px; + border-radius: 999px; +} +.set-option .set-checkbox + label::before { + background: rgba(214, 214, 214, 0.434); + height: 24px; + width: 40px; + transition: .15s cubic-bezier(0.24, 0, 0.5, 1); +} +.set-option .set-checkbox:checked + label:before { + background: #193ee8; +} +.set-option .set-checkbox + label::after { + background: #fff; + height: 19px; + width: 19px; + right: 38px; + transition: right .3s cubic-bezier(.18,.89,.35,1.15); +} +.set-option .set-checkbox:checked + label:after { + right: 23px; +} +.set-option:active{ + background:#eee +} +.set-text{ + flex:1; +} +.set-title{ + font-size: 15px; +} +.set-description{margin-top:4px;color:#666;font-size:13px;line-height:18px;word-break: break-word;} +.set-select{float:right; + background-color: var(--bg); + color: var(--dark); + border: none; + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + direction: rtl; + font-size: 14px; + color: #808080; +} +.set-hr{ + height: 10px; + background-color: #f9f9f9; +} + +/* 精选页面 */ +.page-bg{ + background:rgba(0,0,0,.4); + top:0;position:absolute;width:100%;height:100%; + opacity: 0; + transition: opacity .4s; +} +.page-bg.animation{ + opacity: 1; +} +.page-choice{ + top:0; + position:absolute; + width:100%; + height:100%; + padding: 10px; + transform: translate3d(0, 100%, 0); + transition: transform .4s; +} +.page-choice.animation{ + transform: translate3d(0, 0, 0); +} +.page-choice .page-content{ + border-radius:9px; + background: var(--bg); + position: relative; + height: 100%; +} +.choice-swipe{height:100%;margin: 0 22px;} +.choice-swipe ul{position:relative;height: 100%;overflow: visible;} +.choice-li{float:left;overflow:scroll;width:92%;height:100%; + padding-bottom: 105px; +} +.choice-li a{ + float:left; + width:50%; + height:90px; + padding: 5px; +} +.choice-li a div{ + height: 100%; + border-radius:16px; + background:#f7f7f7; + transition: .2s; +} +.choice-li a:active > div{background:#ddd;} +.choice-li p:nth-child(2){padding:14px 16px 5px;font-size:15px;line-height:20px;color:var(--dark);font-weight:bold;} +.choice-li p:nth-child(3){padding:0 16px;white-space:pre-wrap;font-size:10px;line-height:14px;word-break:break-all;color:#666;} +.choice-li img{float:right;margin-top:15px;margin-right:15px;width:30px;border-radius:99px;} +.choice-ul{display:flex;padding:20px 40px 14px 40px;} +.choice-ul li{flex:1;color:#999;text-align:center;line-height:30px;transition: color .5s; + font-weight: bold; + font-size: 14px; +} +.choice-ul li.current{ + color: var(--dark); +} +.choice-ul li:active{background:#ddd;} +.choice-ul .active-span{position:absolute;top:48px;width:18px;height: 2px;background:var(--dark);border-radius:999px; + transition: transform .3s; + left: 40px; +} +.bottom-close{ + position:absolute;bottom:0;width:100%;height:40px; + background: rgba(255, 255, 255, .9); + z-index: 1; +} +.bottom-close:after{ + position:absolute; + width:100%; + height:40px; + background:url(../img/close.png) no-repeat center; + background-size:10px; + animation: scale forwards .5s .3s; + transform: scale(0); + content:""; +} +/* 捷径 */ +.choice-cut{ + height:100%; + overflow: scroll; + padding-bottom: 105px; +} +.choice-cut .list{ + color: #fff; + display: flex; + height: 90px; + margin-top: 15px; +} +.choice-cut>.list:first-child{ + margin-top: 5px; +} +.choice-cut .h2{ + height: 140px; +} +.choice-cut .h3{ + height: 195px; +} +.choice-cut .flex-1{ + flex:1; +} +.choice-cut .flex-left{ + margin-right: 15px; +} +.choice-cut .cmp-flex{ + margin: 0; +} +.choice-cut .cmp-flex:first-child{ + margin-bottom: 15px; +} +.choice-cut .h3 .cmp-flex .content{ + height: 90px; +} +.choice-cut .flex-right{ + margin-left: 15px; +} +.choice-cut .list a{ + color: #fff; + width: 100px; + box-sizing: border-box; + position: relative; +} +.choice-cut .list .content{ + background: linear-gradient(-36deg, #8471c4 0%, #6147b7 99%); + border-radius: 15px; + height: 100%; + padding: 15px 20px; + position: relative; + box-sizing: border-box; + font-weight: bold; +} + +/* 通用 */ +.choice-cut .list .content > span{ + float: left; + width: 100%; +} +.choice-cut .list .content .hl{ + font-size: 15px; + margin-bottom: 3px; + z-index: 2; + position: absolute; + left: 20px; + top: 15px; +} +.choice-cut .list .content .hl.relative{ + position: relative; + top: 0; + left: 0; + right: 0; +} +.choice-cut .list .content .shl{ + font-size: 8px; + opacity: .5; + z-index: 2; + position: absolute; + left: 20px; + top: 36px; +} + +/* 精选 - 天气 */ +.choice-cut .cmp-icon{ + width: 150px; + height: 140px; + background-size: cover; + position: absolute; + right: 0; + bottom: 0; +} +@media screen and (max-width: 354px){ + .choice-cut .cmp-icon { + -webkit-transform: scale(0.8); + transform: scale(0.8); + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + } +} +.choice-cut .weather { + background: linear-gradient(to right bottom,#ff6666,#ff7e7e); + position: relative; +} +.choice-cut .weather div:nth-child(1){ + font-size: 30px; + font-weight: bold; + margin-bottom: 2px; + position: relative; +} +.choice-cut .weather div:nth-child(1):after{ + content: '°C'; + font-size: 15px; + vertical-align: top; + position: absolute; + margin-left: 2px; + top: 2px; +} +.choice-cut .weather div:nth-child(2){ + font-size: 15px; +} +.choice-cut .weather div:nth-child(3){ + font-size: 8px; + bottom: 16px; + left: 20px; + position: absolute; +} + +/* 精选 - 热搜 */ +.news-list{ + margin-top: 20px; +} +.news-item{ + display: -webkit-box; + display: -ms-flexbox; + display: flex; + overflow: hidden; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + margin-bottom: 11px; +} + +.news-item-count { + font-size: 15px; + color: #fff; + margin-right: 5px; + position: relative; + padding-left: 2px; + height: 20px; + width: 11px; + line-height: 17px; + +} +.news-item-count:after { + display: inline-block; + content: ""; + background: rgba(0,0,0,0.4); + width: 12px; + height: 12px; + border-radius: 12px; + position: absolute; + top: 8px; + left: 0; +} +.news-item-title { + font-size: 12px; + color: #fff; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.news-item-hot { + opacity: 0.5; + font-size: 8px; + color: #fff; + text-align: right; + margin-left: 12px; + letter-spacing: -0.5px; +} +/* 精选 - 今日高分推荐 */ +.video-list { + position: relative; + top: 9px; + margin: 0 -20px; +} +.video-preview { + position: relative; + padding: 0 20px; +} +.video-title { + font-size: 12px; + height: 17px; + line-height: 17px; + text-overflow: ellipsis; + white-space: nowrap; +} +.video-time { + margin-top: 1px; + opacity: 0.5; + font-size: 8px; + height: 10px; + line-height: 10px; +} +.video-poster { + width: 100%; + height: 95px; + margin-top: 8px; + background: rgba(0,0,0,0.3); + background-size: cover; + border-radius: 6px; +} + +/* 精选 - 今日份壁纸 */ +.choice-cut .list .content .back-hl{ + left:0;right:0;text-align:center; +} +.choice-cut .list .content.back-img{ + background-size: cover; +} +.choice-cut .list .content .back-btn{ + bottom: 20px; + color: #222; + border-radius: 10px; + width: 60px; + height: 20px; + background: #fff; + font-size: 8px; + font-weight: bold; + position: absolute; + text-align: center; + line-height: 20px; + display: none; +} + +/* 精选 - 知乎热榜 */ +.audio-list{ + margin-top: 24px; + height: 50px; +} +.audio-list .audio-item{ + display: flex; + align-items: center; + padding-bottom: 11px; +} +.audio-list .audio-item-icon{ + width: 16px; + height: 16px; + background-image: url(https://gw.alicdn.com/L1/272/6837/static/wap/img/ball.png); + background-size: cover; + background-repeat: no-repeat; + margin-right: 10px; + position: relative; + overflow: visible; +} +.audio-list .audio-item-icon:after{ + display: inline-block; + content: ""; + background: rgba(0,0,0,0.4); + width: 12px; + height: 12px; + border-radius: 12px; + position: absolute; + bottom: -2px; + right: -2px; + z-index: -1; +} +.audio-list .audio-item-title{ + font-size: 12px; + flex: 1; + text-overflow: ellipsis; + white-space: nowrap; + margin-right: 10px; +} + +/* 动画 */ +@keyframes fadeIn{ + 0%{opacity:0;} +100%{opacity:1;} +} +@keyframes fadeOut{0%{opacity:1;} +100%{opacity:0;} +} +@keyframes down{0%{transform:translateY(-80px);} +100%{transform:translateY(0);} +} +@keyframes down2{0%{opacity:1;transform:translateY(0);} +100%{opacity:0;transform:translateY(20px);} +} +@keyframes up{0%{opacity:0;transform:translateY(40px);} +100%{opacity:1;transform:translateY(0);} +} +@keyframes scale{0%{transform:scale(0) translate3d(0,0,0);} +100%{transform:scale(1) translate3d(0,0,0);} +} +@keyframes scale2{0%{transform:scale(1);} +100%{transform:scale(0);} +} +/** + * 列表动画 + * from: http://www.jq22.com/demo/animate201804130121/ +*/ +@keyframes fadeInDown { + 0% { + opacity:0; + transform:translateY(-20px); + } + 100% { + opacity:1; + transform:translateY(0); + } +} +/* 书签排序幽灵方块 */ +.ghost{ + opacity: .1 !important; +} diff --git a/tools/quark/css/night.css b/tools/quark/css/night.css new file mode 100644 index 0000000..1b40753 --- /dev/null +++ b/tools/quark/css/night.css @@ -0,0 +1,121 @@ +/** + * 夜间模式 +*/ +:root { + --bg: #282828; + --white: #888; + --dark: #888; +} +body { + background: #1f2120; +} +.bookmark .list { + -webkit-filter: brightness(60%); + filter: brightness(60%); +} +.bookmark .addbook .img svg { + background: #444; +} +.bookmark .addbook .img svg path { + fill: #999; +} +.page-search, +.input-bg { + background: #282828; +} +.bottom-row { + background: #252726; +} +.search-from { + background: #252726; +} +.search-input::-webkit-input-placeholder { + color: #555; +} +.shortcut { + background: #1f2120; +} +.shortcut .content ul { + color: #666; +} +.shortcut .shortcut1 li:active, +.shortcut .shortcut2 li:active { + background: #171717; +} +.history li { + background: #1f1f1f; +} +.emptyHistory { + -webkit-filter: invert(100%) brightness(60%); + filter: invert(100%) brightness(60%); + background-color: #ccc; +} +.suggestion li { + -webkit-filter: invert(100%) brightness(60%); + filter: invert(100%) brightness(60%); +} +.suggestion li:active { + background-color: #c4c4c4; +} +.shortcut3 li:not(:first-child), +.empty-input { + -webkit-filter: brightness(60%); + filter: brightness(60%); +} +.theme-white .bookmark .list .text { + text-shadow: none; +} +.search-btn:active { + color: #444; +} +.addbook-input,#addbook-upload { + background: #212121; +} +.set-option .set-checkbox:checked + label:before { + -webkit-filter: brightness(60%); + filter: brightness(60%); +} +.set-option .set-checkbox + label::after{ + -webkit-filter: brightness(60%); + filter: brightness(60%); +} +.set-option:active{ + background: #212121; +} +.set-hr { + background-color: #212121; +} +/* 精选页面 */ +.page-choice .page-content { + background: #1f2120; +} +.choice-li a div { + background: #282828; +} +.choice-li a:active > div, +.choice-ul li:active { + background: #181818; +} +.choice-ul li { + color: #545454; +} +.bottom-close { + -webkit-filter: invert(85%); + filter: invert(85%); + border-radius: 0 0 9px 9px; +} +.choice-cut .list .content { + background: linear-gradient(to right bottom, #2c2c22, #272727); +} +.choice-cut .list { + -webkit-filter: brightness(60%); + filter: brightness(60%); +} +.choice-li img { + -webkit-filter: brightness(60%); + filter: brightness(60%); +} +.logo { + -webkit-filter: brightness(60%); + filter: brightness(60%); +} diff --git a/tools/quark/icon/bilibilibog.png b/tools/quark/icon/bilibilibog.png new file mode 100644 index 0000000..f898edb Binary files /dev/null and b/tools/quark/icon/bilibilibog.png differ diff --git a/tools/quark/icon/discover.png b/tools/quark/icon/discover.png new file mode 100644 index 0000000..9d17d86 Binary files /dev/null and b/tools/quark/icon/discover.png differ diff --git a/tools/quark/icon/ithome.png b/tools/quark/icon/ithome.png new file mode 100644 index 0000000..ad00098 Binary files /dev/null and b/tools/quark/icon/ithome.png differ diff --git a/tools/quark/icon/netease.png b/tools/quark/icon/netease.png new file mode 100644 index 0000000..562110c Binary files /dev/null and b/tools/quark/icon/netease.png differ diff --git a/tools/quark/icon/pp93.png b/tools/quark/icon/pp93.png new file mode 100644 index 0000000..6d0ef09 Binary files /dev/null and b/tools/quark/icon/pp93.png differ diff --git a/tools/quark/icon/taobao.png b/tools/quark/icon/taobao.png new file mode 100644 index 0000000..7d0c6ae Binary files /dev/null and b/tools/quark/icon/taobao.png differ diff --git a/tools/quark/icon/tieba.png b/tools/quark/icon/tieba.png new file mode 100644 index 0000000..b6bba03 Binary files /dev/null and b/tools/quark/icon/tieba.png differ diff --git a/tools/quark/icon/tophub.png b/tools/quark/icon/tophub.png new file mode 100644 index 0000000..f892b24 Binary files /dev/null and b/tools/quark/icon/tophub.png differ diff --git a/tools/quark/icon/weibo.png b/tools/quark/icon/weibo.png new file mode 100644 index 0000000..72ea1b1 Binary files /dev/null and b/tools/quark/icon/weibo.png differ diff --git a/tools/quark/icon/zhihu.png b/tools/quark/icon/zhihu.png new file mode 100644 index 0000000..9556bce Binary files /dev/null and b/tools/quark/icon/zhihu.png differ diff --git a/tools/quark/img/arrow.png b/tools/quark/img/arrow.png new file mode 100644 index 0000000..d5f2b9e Binary files /dev/null and b/tools/quark/img/arrow.png differ diff --git a/tools/quark/img/choice/12306.png b/tools/quark/img/choice/12306.png new file mode 100644 index 0000000..470f11c Binary files /dev/null and b/tools/quark/img/choice/12306.png differ diff --git a/tools/quark/img/choice/2-class.png b/tools/quark/img/choice/2-class.png new file mode 100644 index 0000000..3293f6e Binary files /dev/null and b/tools/quark/img/choice/2-class.png differ diff --git a/tools/quark/img/choice/baidu.png b/tools/quark/img/choice/baidu.png new file mode 100644 index 0000000..5fbd850 Binary files /dev/null and b/tools/quark/img/choice/baidu.png differ diff --git a/tools/quark/img/choice/douban.png b/tools/quark/img/choice/douban.png new file mode 100644 index 0000000..15129a3 Binary files /dev/null and b/tools/quark/img/choice/douban.png differ diff --git a/tools/quark/img/choice/douyu.png b/tools/quark/img/choice/douyu.png new file mode 100644 index 0000000..d442fcb Binary files /dev/null and b/tools/quark/img/choice/douyu.png differ diff --git a/tools/quark/img/choice/engadget.png b/tools/quark/img/choice/engadget.png new file mode 100644 index 0000000..978faff Binary files /dev/null and b/tools/quark/img/choice/engadget.png differ diff --git a/tools/quark/img/choice/enjoy.png b/tools/quark/img/choice/enjoy.png new file mode 100644 index 0000000..fe762a0 Binary files /dev/null and b/tools/quark/img/choice/enjoy.png differ diff --git a/tools/quark/img/choice/flypig.png b/tools/quark/img/choice/flypig.png new file mode 100644 index 0000000..07e6836 Binary files /dev/null and b/tools/quark/img/choice/flypig.png differ diff --git a/tools/quark/img/choice/game_9.png b/tools/quark/img/choice/game_9.png new file mode 100644 index 0000000..9949166 Binary files /dev/null and b/tools/quark/img/choice/game_9.png differ diff --git a/tools/quark/img/choice/google.png b/tools/quark/img/choice/google.png new file mode 100644 index 0000000..029f0dd Binary files /dev/null and b/tools/quark/img/choice/google.png differ diff --git a/tools/quark/img/choice/hupu.png b/tools/quark/img/choice/hupu.png new file mode 100644 index 0000000..740c396 Binary files /dev/null and b/tools/quark/img/choice/hupu.png differ diff --git a/tools/quark/img/choice/huxiu.png b/tools/quark/img/choice/huxiu.png new file mode 100644 index 0000000..41581a5 Binary files /dev/null and b/tools/quark/img/choice/huxiu.png differ diff --git a/tools/quark/img/choice/huya.png b/tools/quark/img/choice/huya.png new file mode 100644 index 0000000..44ab355 Binary files /dev/null and b/tools/quark/img/choice/huya.png differ diff --git a/tools/quark/img/choice/ifanr.png b/tools/quark/img/choice/ifanr.png new file mode 100644 index 0000000..d2a00f2 Binary files /dev/null and b/tools/quark/img/choice/ifanr.png differ diff --git a/tools/quark/img/choice/iqiyi.png b/tools/quark/img/choice/iqiyi.png new file mode 100644 index 0000000..22ba9c1 Binary files /dev/null and b/tools/quark/img/choice/iqiyi.png differ diff --git a/tools/quark/img/choice/jd.png b/tools/quark/img/choice/jd.png new file mode 100644 index 0000000..4c31a38 Binary files /dev/null and b/tools/quark/img/choice/jd.png differ diff --git a/tools/quark/img/choice/jianshu.png b/tools/quark/img/choice/jianshu.png new file mode 100644 index 0000000..df589a7 Binary files /dev/null and b/tools/quark/img/choice/jianshu.png differ diff --git a/tools/quark/img/choice/kr36.png b/tools/quark/img/choice/kr36.png new file mode 100644 index 0000000..23ed81b Binary files /dev/null and b/tools/quark/img/choice/kr36.png differ diff --git a/tools/quark/img/choice/kuaidi.png b/tools/quark/img/choice/kuaidi.png new file mode 100644 index 0000000..dcc8b8d Binary files /dev/null and b/tools/quark/img/choice/kuaidi.png differ diff --git a/tools/quark/img/choice/mafengwo.png b/tools/quark/img/choice/mafengwo.png new file mode 100644 index 0000000..252721c Binary files /dev/null and b/tools/quark/img/choice/mafengwo.png differ diff --git a/tools/quark/img/choice/meituan.png b/tools/quark/img/choice/meituan.png new file mode 100644 index 0000000..73bdb8c Binary files /dev/null and b/tools/quark/img/choice/meituan.png differ diff --git a/tools/quark/img/choice/mozilla.png b/tools/quark/img/choice/mozilla.png new file mode 100644 index 0000000..60b6708 Binary files /dev/null and b/tools/quark/img/choice/mozilla.png differ diff --git a/tools/quark/img/choice/netease.png b/tools/quark/img/choice/netease.png new file mode 100644 index 0000000..e5f7e73 Binary files /dev/null and b/tools/quark/img/choice/netease.png differ diff --git a/tools/quark/img/choice/netease_edu_study.png b/tools/quark/img/choice/netease_edu_study.png new file mode 100644 index 0000000..c6973c3 Binary files /dev/null and b/tools/quark/img/choice/netease_edu_study.png differ diff --git a/tools/quark/img/choice/one.png b/tools/quark/img/choice/one.png new file mode 100644 index 0000000..f00d4a5 Binary files /dev/null and b/tools/quark/img/choice/one.png differ diff --git a/tools/quark/img/choice/pingwest.png b/tools/quark/img/choice/pingwest.png new file mode 100644 index 0000000..b7a7474 Binary files /dev/null and b/tools/quark/img/choice/pingwest.png differ diff --git a/tools/quark/img/choice/qidian.png b/tools/quark/img/choice/qidian.png new file mode 100644 index 0000000..ebe72a8 Binary files /dev/null and b/tools/quark/img/choice/qidian.png differ diff --git a/tools/quark/img/choice/qingmang.png b/tools/quark/img/choice/qingmang.png new file mode 100644 index 0000000..8e993e8 Binary files /dev/null and b/tools/quark/img/choice/qingmang.png differ diff --git a/tools/quark/img/choice/qq.png b/tools/quark/img/choice/qq.png new file mode 100644 index 0000000..21b2f89 Binary files /dev/null and b/tools/quark/img/choice/qq.png differ diff --git a/tools/quark/img/choice/sina.png b/tools/quark/img/choice/sina.png new file mode 100644 index 0000000..533a1be Binary files /dev/null and b/tools/quark/img/choice/sina.png differ diff --git a/tools/quark/img/choice/sm.png b/tools/quark/img/choice/sm.png new file mode 100644 index 0000000..bbbb5b1 Binary files /dev/null and b/tools/quark/img/choice/sm.png differ diff --git a/tools/quark/img/choice/smzdm.png b/tools/quark/img/choice/smzdm.png new file mode 100644 index 0000000..64dafe4 Binary files /dev/null and b/tools/quark/img/choice/smzdm.png differ diff --git a/tools/quark/img/choice/sspai.png b/tools/quark/img/choice/sspai.png new file mode 100644 index 0000000..c31539a Binary files /dev/null and b/tools/quark/img/choice/sspai.png differ diff --git a/tools/quark/img/choice/taobao.png b/tools/quark/img/choice/taobao.png new file mode 100644 index 0000000..b34cd28 Binary files /dev/null and b/tools/quark/img/choice/taobao.png differ diff --git a/tools/quark/img/choice/taopiaopiao.png b/tools/quark/img/choice/taopiaopiao.png new file mode 100644 index 0000000..c9ade16 Binary files /dev/null and b/tools/quark/img/choice/taopiaopiao.png differ diff --git a/tools/quark/img/choice/tieba.png b/tools/quark/img/choice/tieba.png new file mode 100644 index 0000000..1f9b74c Binary files /dev/null and b/tools/quark/img/choice/tieba.png differ diff --git a/tools/quark/img/choice/tongcheng.png b/tools/quark/img/choice/tongcheng.png new file mode 100644 index 0000000..5c17e0f Binary files /dev/null and b/tools/quark/img/choice/tongcheng.png differ diff --git a/tools/quark/img/choice/v2ex.png b/tools/quark/img/choice/v2ex.png new file mode 100644 index 0000000..dfec8af Binary files /dev/null and b/tools/quark/img/choice/v2ex.png differ diff --git a/tools/quark/img/choice/wandoujia.png b/tools/quark/img/choice/wandoujia.png new file mode 100644 index 0000000..6ccac67 Binary files /dev/null and b/tools/quark/img/choice/wandoujia.png differ diff --git a/tools/quark/img/choice/xiachufang.png b/tools/quark/img/choice/xiachufang.png new file mode 100644 index 0000000..f23a4eb Binary files /dev/null and b/tools/quark/img/choice/xiachufang.png differ diff --git a/tools/quark/img/choice/xiaohongshu.png b/tools/quark/img/choice/xiaohongshu.png new file mode 100644 index 0000000..2db4ec4 Binary files /dev/null and b/tools/quark/img/choice/xiaohongshu.png differ diff --git a/tools/quark/img/choice/xiaomi.png b/tools/quark/img/choice/xiaomi.png new file mode 100644 index 0000000..ca5f2d2 Binary files /dev/null and b/tools/quark/img/choice/xiaomi.png differ diff --git a/tools/quark/img/choice/ximalaya.png b/tools/quark/img/choice/ximalaya.png new file mode 100644 index 0000000..0b7c966 Binary files /dev/null and b/tools/quark/img/choice/ximalaya.png differ diff --git a/tools/quark/img/choice/youku.png b/tools/quark/img/choice/youku.png new file mode 100644 index 0000000..f39d0b7 Binary files /dev/null and b/tools/quark/img/choice/youku.png differ diff --git a/tools/quark/img/choice/zealer.png b/tools/quark/img/choice/zealer.png new file mode 100644 index 0000000..84e1c04 Binary files /dev/null and b/tools/quark/img/choice/zealer.png differ diff --git a/tools/quark/img/choice/zhihu.png b/tools/quark/img/choice/zhihu.png new file mode 100644 index 0000000..5c66d5e Binary files /dev/null and b/tools/quark/img/choice/zhihu.png differ diff --git a/tools/quark/img/close.png b/tools/quark/img/close.png new file mode 100644 index 0000000..2610705 Binary files /dev/null and b/tools/quark/img/close.png differ diff --git a/tools/quark/img/delete.png b/tools/quark/img/delete.png new file mode 100644 index 0000000..96bf0ae Binary files /dev/null and b/tools/quark/img/delete.png differ diff --git a/tools/quark/img/empty.png b/tools/quark/img/empty.png new file mode 100644 index 0000000..70dad71 Binary files /dev/null and b/tools/quark/img/empty.png differ diff --git a/tools/quark/img/su.png b/tools/quark/img/su.png new file mode 100644 index 0000000..892d5fe Binary files /dev/null and b/tools/quark/img/su.png differ diff --git a/tools/quark/index.html b/tools/quark/index.html new file mode 100644 index 0000000..869f719 --- /dev/null +++ b/tools/quark/index.html @@ -0,0 +1,80 @@ + + + + + + + + 主页 + + + + + +
+
+ + +
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/tools/quark/js/lib/Swiper.js b/tools/quark/js/lib/Swiper.js new file mode 100644 index 0000000..b7f4e24 --- /dev/null +++ b/tools/quark/js/lib/Swiper.js @@ -0,0 +1,13 @@ + +/** + * Swiper 4.5.1 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * http://www.idangero.us/swiper/ + * + * Copyright 2014-2019 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: September 13, 2019 + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Swiper=t()}(this,function(){"use strict";var f="undefined"==typeof document?{body:{},addEventListener:function(){},removeEventListener:function(){},activeElement:{blur:function(){},nodeName:""},querySelector:function(){return null},querySelectorAll:function(){return[]},getElementById:function(){return null},createEvent:function(){return{initEvent:function(){}}},createElement:function(){return{children:[],childNodes:[],style:{},setAttribute:function(){},getElementsByTagName:function(){return[]}}},location:{hash:""}}:document,ee="undefined"==typeof window?{document:f,navigator:{userAgent:""},location:{},history:{},CustomEvent:function(){return this},addEventListener:function(){},removeEventListener:function(){},getComputedStyle:function(){return{getPropertyValue:function(){return""}}},Image:function(){},Date:function(){},screen:{},setTimeout:function(){},clearTimeout:function(){}}:window,l=function(e){for(var t=0;t")){var o="div";for(0===n.indexOf(":~]/)?(t||f).querySelectorAll(e.trim()):[f.getElementById(e.trim().split("#")[1])],i=0;ia.slides.length)break;i.push(a.slides.eq(r)[0])}else i.push(a.slides.eq(a.activeIndex)[0]);for(t=0;t=t.size)&&(t.visibleSlides.push(o),t.visibleSlidesIndexes.push(n),i.eq(n).addClass(a.slideVisibleClass))}o.progress=s?-l:l}t.visibleSlides=I(t.visibleSlides)}},updateProgress:function(e){void 0===e&&(e=this&&this.translate||0);var t=this,a=t.params,i=t.maxTranslate()-t.minTranslate(),s=t.progress,r=t.isBeginning,n=t.isEnd,o=r,l=n;n=0==i?r=!(s=0):(r=(s=(e-t.minTranslate())/i)<=0,1<=s),te.extend(t,{progress:s,isBeginning:r,isEnd:n}),(a.watchSlidesProgress||a.watchSlidesVisibility)&&t.updateSlidesProgress(e),r&&!o&&t.emit("reachBeginning toEdge"),n&&!l&&t.emit("reachEnd toEdge"),(o&&!r||l&&!n)&&t.emit("fromEdge"),t.emit("progress",s)},updateSlidesClasses:function(){var e,t=this,a=t.slides,i=t.params,s=t.$wrapperEl,r=t.activeIndex,n=t.realIndex,o=t.virtual&&i.virtual.enabled;a.removeClass(i.slideActiveClass+" "+i.slideNextClass+" "+i.slidePrevClass+" "+i.slideDuplicateActiveClass+" "+i.slideDuplicateNextClass+" "+i.slideDuplicatePrevClass),(e=o?t.$wrapperEl.find("."+i.slideClass+'[data-swiper-slide-index="'+r+'"]'):a.eq(r)).addClass(i.slideActiveClass),i.loop&&(e.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+n+'"]').addClass(i.slideDuplicateActiveClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+n+'"]').addClass(i.slideDuplicateActiveClass));var l=e.nextAll("."+i.slideClass).eq(0).addClass(i.slideNextClass);i.loop&&0===l.length&&(l=a.eq(0)).addClass(i.slideNextClass);var d=e.prevAll("."+i.slideClass).eq(0).addClass(i.slidePrevClass);i.loop&&0===d.length&&(d=a.eq(-1)).addClass(i.slidePrevClass),i.loop&&(l.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass),d.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+d.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+d.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass))},updateActiveIndex:function(e){var t,a=this,i=a.rtlTranslate?a.translate:-a.translate,s=a.slidesGrid,r=a.snapGrid,n=a.params,o=a.activeIndex,l=a.realIndex,d=a.snapIndex,p=e;if(void 0===p){for(var c=0;c=s[c]&&i=s[c]&&i=s[c]&&(p=c);n.normalizeSlideIndex&&(p<0||void 0===p)&&(p=0)}if((t=0<=r.indexOf(i)?r.indexOf(i):Math.floor(p/n.slidesPerGroup))>=r.length&&(t=r.length-1),p!==o){var u=parseInt(a.slides.eq(p).attr("data-swiper-slide-index")||p,10);te.extend(a,{snapIndex:t,realIndex:u,previousIndex:o,activeIndex:p}),a.emit("activeIndexChange"),a.emit("snapIndexChange"),l!==u&&a.emit("realIndexChange"),(a.initialized||a.runCallbacksOnInit)&&a.emit("slideChange")}else t!==d&&(a.snapIndex=t,a.emit("snapIndexChange"))},updateClickedSlide:function(e){var t=this,a=t.params,i=I(e.target).closest("."+a.slideClass)[0],s=!1;if(i)for(var r=0;r=o.length&&(u=o.length-1),(p||n.initialSlide||0)===(d||0)&&a&&s.emit("beforeSlideChangeStart");var h,v=-o[u];if(s.updateProgress(v),n.normalizeSlideIndex)for(var f=0;f=Math.floor(100*l[f])&&(r=f);if(s.initialized&&r!==p){if(!s.allowSlideNext&&vs.translate&&v>s.maxTranslate()&&(p||0)!==r)return!1}return h=pt.slides.length-t.loopedSlides+s/2?(t.loopFix(),r=i.children("."+a.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+a.slideDuplicateClass+")").eq(0).index(),te.nextTick(function(){t.slideTo(r)})):t.slideTo(r):r>t.slides.length-s?(t.loopFix(),r=i.children("."+a.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+a.slideDuplicateClass+")").eq(0).index(),te.nextTick(function(){t.slideTo(r)})):t.slideTo(r)}else t.slideTo(r)}};var h={loopCreate:function(){var i=this,e=i.params,t=i.$wrapperEl;t.children("."+e.slideClass+"."+e.slideDuplicateClass).remove();var s=t.children("."+e.slideClass);if(e.loopFillGroupWithBlank){var a=e.slidesPerGroup-s.length%e.slidesPerGroup;if(a!==e.slidesPerGroup){for(var r=0;rs.length&&(i.loopedSlides=s.length);var o=[],l=[];s.each(function(e,t){var a=I(t);e=s.length-i.loopedSlides&&o.push(t),a.attr("data-swiper-slide-index",e)});for(var d=0;d=s.length-r){e=-s.length+i+r,e+=r,t.slideTo(e,0,!1,!0)&&0!=p&&t.setTranslate((d?-t.translate:t.translate)-p)}t.allowSlidePrev=n,t.allowSlideNext=o},loopDestroy:function(){var e=this.$wrapperEl,t=this.params,a=this.slides;e.children("."+t.slideClass+"."+t.slideDuplicateClass+",."+t.slideClass+"."+t.slideBlankClass).remove(),a.removeAttr("data-swiper-slide-index")}};var v={setGrabCursor:function(e){if(!(ae.touch||!this.params.simulateTouch||this.params.watchOverflow&&this.isLocked)){var t=this.el;t.style.cursor="move",t.style.cursor=e?"-webkit-grabbing":"-webkit-grab",t.style.cursor=e?"-moz-grabbin":"-moz-grab",t.style.cursor=e?"grabbing":"grab"}},unsetGrabCursor:function(){ae.touch||this.params.watchOverflow&&this.isLocked||(this.el.style.cursor="")}};var m={appendSlide:function(e){var t=this,a=t.$wrapperEl,i=t.params;if(i.loop&&t.loopDestroy(),"object"==typeof e&&"length"in e)for(var s=0;s=ee.screen.width-d)){if(te.extend(a,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),s.startX=n,s.startY=o,a.touchStartTime=te.now(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,0s.startY&&t.translate>=t.minTranslate())return a.isTouched=!1,void(a.isMoved=!1)}else if(os.startX&&t.translate>=t.minTranslate())return;if(a.isTouchEvent&&f.activeElement&&n.target===f.activeElement&&I(n.target).is(a.formElements))return a.isMoved=!0,void(t.allowClick=!1);if(a.allowTouchCallbacks&&t.emit("touchMove",n),!(n.targetTouches&&1i.touchAngle:90-c>i.touchAngle);if(a.isScrolling&&t.emit("touchMoveOpposite",n),void 0===a.startMoving&&(s.currentX===s.startX&&s.currentY===s.startY||(a.startMoving=!0)),a.isScrolling)a.isTouched=!1;else if(a.startMoving){t.allowClick=!1,n.preventDefault(),i.touchMoveStopPropagation&&!i.nested&&n.stopPropagation(),a.isMoved||(i.loop&&t.loopFix(),a.startTranslate=t.getTranslate(),t.setTransition(0),t.animating&&t.$wrapperEl.trigger("webkitTransitionEnd transitionend"),a.allowMomentumBounce=!1,!i.grabCursor||!0!==t.allowSlideNext&&!0!==t.allowSlidePrev||t.setGrabCursor(!0),t.emit("sliderFirstMove",n)),t.emit("sliderMove",n),a.isMoved=!0;var u=t.isHorizontal()?d:p;s.diff=u,u*=i.touchRatio,r&&(u=-u),t.swipeDirection=0t.minTranslate()?(h=!1,i.resistance&&(a.currentTranslate=t.minTranslate()-1+Math.pow(-t.minTranslate()+a.startTranslate+u,v))):u<0&&a.currentTranslatea.startTranslate&&(a.currentTranslate=a.startTranslate),0i.threshold||a.allowThresholdMove))return void(a.currentTranslate=a.startTranslate);if(!a.allowThresholdMove)return a.allowThresholdMove=!0,s.startX=s.currentX,s.startY=s.currentY,a.currentTranslate=a.startTranslate,void(s.diff=t.isHorizontal()?s.currentX-s.startX:s.currentY-s.startY)}i.followFinger&&((i.freeMode||i.watchSlidesProgress||i.watchSlidesVisibility)&&(t.updateActiveIndex(),t.updateSlidesClasses()),i.freeMode&&(0===a.velocities.length&&a.velocities.push({position:s[t.isHorizontal()?"startX":"startY"],time:a.touchStartTime}),a.velocities.push({position:s[t.isHorizontal()?"currentX":"currentY"],time:te.now()})),t.updateProgress(a.currentTranslate),t.setTranslate(a.currentTranslate))}}}}}else a.startMoving&&a.isScrolling&&t.emit("touchMoveOpposite",n)}.bind(e),e.onTouchEnd=function(e){var t=this,a=t.touchEventsData,i=t.params,s=t.touches,r=t.rtlTranslate,n=t.$wrapperEl,o=t.slidesGrid,l=t.snapGrid,d=e;if(d.originalEvent&&(d=d.originalEvent),a.allowTouchCallbacks&&t.emit("touchEnd",d),a.allowTouchCallbacks=!1,!a.isTouched)return a.isMoved&&i.grabCursor&&t.setGrabCursor(!1),a.isMoved=!1,void(a.startMoving=!1);i.grabCursor&&a.isMoved&&a.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);var p,c=te.now(),u=c-a.touchStartTime;if(t.allowClick&&(t.updateClickedSlide(d),t.emit("tap",d),u<300&&300-t.maxTranslate())return void(t.slides.lengtht.minTranslate())i.freeModeMomentumBounce?(w-t.minTranslate()>E&&(w=t.minTranslate()+E),y=t.minTranslate(),T=!0,a.allowMomentumBounce=!0):w=t.minTranslate(),i.loop&&i.centeredSlides&&(x=!0);else if(i.freeModeSticky){for(var S,C=0;C-w){S=C;break}w=-(w=Math.abs(l[S]-w)=i.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses())}else{for(var M=0,P=t.slidesSizesGrid[0],k=0;k=o[k]&&p=o[k]&&(M=k,P=o[o.length-1]-o[o.length-2]);var z=(p-o[M])/P;if(u>i.longSwipesMs){if(!i.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(z>=i.longSwipesRatio?t.slideTo(M+i.slidesPerGroup):t.slideTo(M)),"prev"===t.swipeDirection&&(z>1-i.longSwipesRatio?t.slideTo(M+i.slidesPerGroup):t.slideTo(M))}else{if(!i.shortSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&t.slideTo(M+i.slidesPerGroup),"prev"===t.swipeDirection&&t.slideTo(M)}}}.bind(e),e.onClick=function(e){this.allowClick||(this.params.preventClicks&&e.preventDefault(),this.params.preventClicksPropagation&&this.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))}.bind(e);var r="container"===t.touchEventsTarget?i:s,n=!!t.nested;if(ae.touch||!ae.pointerEvents&&!ae.prefixedPointerEvents){if(ae.touch){var o=!("touchstart"!==a.start||!ae.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.addEventListener(a.start,e.onTouchStart,o),r.addEventListener(a.move,e.onTouchMove,ae.passiveListener?{passive:!1,capture:n}:n),r.addEventListener(a.end,e.onTouchEnd,o)}(t.simulateTouch&&!g.ios&&!g.android||t.simulateTouch&&!ae.touch&&g.ios)&&(r.addEventListener("mousedown",e.onTouchStart,!1),f.addEventListener("mousemove",e.onTouchMove,n),f.addEventListener("mouseup",e.onTouchEnd,!1))}else r.addEventListener(a.start,e.onTouchStart,!1),f.addEventListener(a.move,e.onTouchMove,n),f.addEventListener(a.end,e.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.addEventListener("click",e.onClick,!0),e.on(g.ios||g.android?"resize orientationchange observerUpdate":"resize observerUpdate",b,!0)},detachEvents:function(){var e=this,t=e.params,a=e.touchEvents,i=e.el,s=e.wrapperEl,r="container"===t.touchEventsTarget?i:s,n=!!t.nested;if(ae.touch||!ae.pointerEvents&&!ae.prefixedPointerEvents){if(ae.touch){var o=!("onTouchStart"!==a.start||!ae.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.removeEventListener(a.start,e.onTouchStart,o),r.removeEventListener(a.move,e.onTouchMove,n),r.removeEventListener(a.end,e.onTouchEnd,o)}(t.simulateTouch&&!g.ios&&!g.android||t.simulateTouch&&!ae.touch&&g.ios)&&(r.removeEventListener("mousedown",e.onTouchStart,!1),f.removeEventListener("mousemove",e.onTouchMove,n),f.removeEventListener("mouseup",e.onTouchEnd,!1))}else r.removeEventListener(a.start,e.onTouchStart,!1),f.removeEventListener(a.move,e.onTouchMove,n),f.removeEventListener(a.end,e.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.removeEventListener("click",e.onClick,!0),e.off(g.ios||g.android?"resize orientationchange observerUpdate":"resize observerUpdate",b)}},breakpoints:{setBreakpoint:function(){var e=this,t=e.activeIndex,a=e.initialized,i=e.loopedSlides;void 0===i&&(i=0);var s=e.params,r=s.breakpoints;if(r&&(!r||0!==Object.keys(r).length)){var n=e.getBreakpoint(r);if(n&&e.currentBreakpoint!==n){var o=n in r?r[n]:void 0;o&&["slidesPerView","spaceBetween","slidesPerGroup"].forEach(function(e){var t=o[e];void 0!==t&&(o[e]="slidesPerView"!==e||"AUTO"!==t&&"auto"!==t?"slidesPerView"===e?parseFloat(t):parseInt(t,10):"auto")});var l=o||e.originalParams,d=l.direction&&l.direction!==s.direction,p=s.loop&&(l.slidesPerView!==s.slidesPerView||d);d&&a&&e.changeDirection(),te.extend(e.params,l),te.extend(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),e.currentBreakpoint=n,p&&a&&(e.loopDestroy(),e.loopCreate(),e.updateSlides(),e.slideTo(t-i+e.loopedSlides,0,!1)),e.emit("breakpoint",l)}}},getBreakpoint:function(e){if(e){var t=!1,a=[];Object.keys(e).forEach(function(e){a.push(e)}),a.sort(function(e,t){return parseInt(e,10)-parseInt(t,10)});for(var i=0;i=ee.innerWidth&&!t&&(t=s)}return t||"max"}}},checkOverflow:{checkOverflow:function(){var e=this,t=e.isLocked;e.isLocked=1===e.snapGrid.length,e.allowSlideNext=!e.isLocked,e.allowSlidePrev=!e.isLocked,t!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock"),t&&t!==e.isLocked&&(e.isEnd=!1,e.navigation.update())}},classes:{addClasses:function(){var t=this.classNames,a=this.params,e=this.rtl,i=this.$el,s=[];s.push("initialized"),s.push(a.direction),a.freeMode&&s.push("free-mode"),ae.flexbox||s.push("no-flexbox"),a.autoHeight&&s.push("autoheight"),e&&s.push("rtl"),1'+e+"
");return s.attr("data-swiper-slide-index")||s.attr("data-swiper-slide-index",t),i.cache&&(a.virtual.cache[t]=s),s},appendSlide:function(e){if("object"==typeof e&&"length"in e)for(var t=0;tMath.abs(n.pixelY)))return!0;s=n.pixelX*r}else{if(!(Math.abs(n.pixelY)>Math.abs(n.pixelX)))return!0;s=n.pixelY}else s=Math.abs(n.pixelX)>Math.abs(n.pixelY)?-n.pixelX*r:-n.pixelY;if(0===s)return!0;if(i.invert&&(s=-s),a.params.freeMode){a.params.loop&&a.loopFix();var o=a.getTranslate()+s*i.sensitivity,l=a.isBeginning,d=a.isEnd;if(o>=a.minTranslate()&&(o=a.minTranslate()),o<=a.maxTranslate()&&(o=a.maxTranslate()),a.setTransition(0),a.setTranslate(o),a.updateProgress(),a.updateActiveIndex(),a.updateSlidesClasses(),(!l&&a.isBeginning||!d&&a.isEnd)&&a.updateSlidesClasses(),a.params.freeModeSticky&&(clearTimeout(a.mousewheel.timeout),a.mousewheel.timeout=te.nextTick(function(){a.slideToClosest()},300)),a.emit("scroll",t),a.params.autoplay&&a.params.autoplayDisableOnInteraction&&a.autoplay.stop(),o===a.minTranslate()||o===a.maxTranslate())return!0}else{if(60a-1-2*e.loopedSlides&&(r-=a-2*e.loopedSlides),n-1s.dynamicMainBullets-1?e.pagination.dynamicBulletIndex=s.dynamicMainBullets-1:e.pagination.dynamicBulletIndex<0&&(e.pagination.dynamicBulletIndex=0)),o=r-e.pagination.dynamicBulletIndex,d=((l=o+(Math.min(p.length,s.dynamicMainBullets)-1))+o)/2),p.removeClass(s.bulletActiveClass+" "+s.bulletActiveClass+"-next "+s.bulletActiveClass+"-next-next "+s.bulletActiveClass+"-prev "+s.bulletActiveClass+"-prev-prev "+s.bulletActiveClass+"-main"),1";i.html(s),e.pagination.bullets=i.find("."+t.bulletClass)}"fraction"===t.type&&(s=t.renderFraction?t.renderFraction.call(e,t.currentClass,t.totalClass):' / ',i.html(s)),"progressbar"===t.type&&(s=t.renderProgressbar?t.renderProgressbar.call(e,t.progressbarFillClass):'',i.html(s)),"custom"!==t.type&&e.emit("paginationRender",e.pagination.$el[0])}},init:function(){var a=this,e=a.params.pagination;if(e.el){var t=I(e.el);0!==t.length&&(a.params.uniqueNavElements&&"string"==typeof e.el&&1
'),s.append(r)),te.extend(t,{$el:s,el:s[0],$dragEl:r,dragEl:r[0]}),i.draggable&&t.enableDraggable()}},destroy:function(){this.scrollbar.disableDraggable()}},N={setTransform:function(e,t){var a=this.rtl,i=I(e),s=a?-1:1,r=i.attr("data-swiper-parallax")||"0",n=i.attr("data-swiper-parallax-x"),o=i.attr("data-swiper-parallax-y"),l=i.attr("data-swiper-parallax-scale"),d=i.attr("data-swiper-parallax-opacity");if(n||o?(n=n||"0",o=o||"0"):this.isHorizontal()?(n=r,o="0"):(o=r,n="0"),n=0<=n.indexOf("%")?parseInt(n,10)*t*s+"%":n*t*s+"px",o=0<=o.indexOf("%")?parseInt(o,10)*t+"%":o*t+"px",null!=d){var p=d-(d-1)*(1-Math.abs(t));i[0].style.opacity=p}if(null==l)i.transform("translate3d("+n+", "+o+", 0px)");else{var c=l-(l-1)*(1-Math.abs(t));i.transform("translate3d("+n+", "+o+", 0px) scale("+c+")")}},setTranslate:function(){var i=this,e=i.$el,t=i.slides,s=i.progress,r=i.snapGrid;e.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each(function(e,t){i.parallax.setTransform(t,s)}),t.each(function(e,t){var a=t.progress;1i.maxRatio&&(a.scale=i.maxRatio-1+Math.pow(a.scale-i.maxRatio+1,.5)),a.scales.touchesStart.x))return void(s.isTouched=!1);if(!t.isHorizontal()&&(Math.floor(s.minY)===Math.floor(s.startY)&&s.touchesCurrent.ys.touchesStart.y))return void(s.isTouched=!1)}e.preventDefault(),e.stopPropagation(),s.isMoved=!0,s.currentX=s.touchesCurrent.x-s.touchesStart.x+s.startX,s.currentY=s.touchesCurrent.y-s.touchesStart.y+s.startY,s.currentXs.maxX&&(s.currentX=s.maxX-1+Math.pow(s.currentX-s.maxX+1,.8)),s.currentYs.maxY&&(s.currentY=s.maxY-1+Math.pow(s.currentY-s.maxY+1,.8)),r.prevPositionX||(r.prevPositionX=s.touchesCurrent.x),r.prevPositionY||(r.prevPositionY=s.touchesCurrent.y),r.prevTime||(r.prevTime=Date.now()),r.x=(s.touchesCurrent.x-r.prevPositionX)/(Date.now()-r.prevTime)/2,r.y=(s.touchesCurrent.y-r.prevPositionY)/(Date.now()-r.prevTime)/2,Math.abs(s.touchesCurrent.x-r.prevPositionX)<2&&(r.x=0),Math.abs(s.touchesCurrent.y-r.prevPositionY)<2&&(r.y=0),r.prevPositionX=s.touchesCurrent.x,r.prevPositionY=s.touchesCurrent.y,r.prevTime=Date.now(),i.$imageWrapEl.transform("translate3d("+s.currentX+"px, "+s.currentY+"px,0)")}}},onTouchEnd:function(){var e=this.zoom,t=e.gesture,a=e.image,i=e.velocity;if(t.$imageEl&&0!==t.$imageEl.length){if(!a.isTouched||!a.isMoved)return a.isTouched=!1,void(a.isMoved=!1);a.isTouched=!1,a.isMoved=!1;var s=300,r=300,n=i.x*s,o=a.currentX+n,l=i.y*r,d=a.currentY+l;0!==i.x&&(s=Math.abs((o-a.currentX)/i.x)),0!==i.y&&(r=Math.abs((d-a.currentY)/i.y));var p=Math.max(s,r);a.currentX=o,a.currentY=d;var c=a.width*e.scale,u=a.height*e.scale;a.minX=Math.min(t.slideWidth/2-c/2,0),a.maxX=-a.minX,a.minY=Math.min(t.slideHeight/2-u/2,0),a.maxY=-a.minY,a.currentX=Math.max(Math.min(a.currentX,a.maxX),a.minX),a.currentY=Math.max(Math.min(a.currentY,a.maxY),a.minY),t.$imageWrapEl.transition(p).transform("translate3d("+a.currentX+"px, "+a.currentY+"px,0)")}},onTransitionEnd:function(){var e=this.zoom,t=e.gesture;t.$slideEl&&this.previousIndex!==this.activeIndex&&(t.$imageEl.transform("translate3d(0,0,0) scale(1)"),t.$imageWrapEl.transform("translate3d(0,0,0)"),e.scale=1,e.currentScale=1,t.$slideEl=void 0,t.$imageEl=void 0,t.$imageWrapEl=void 0)},toggle:function(e){var t=this.zoom;t.scale&&1!==t.scale?t.out():t.in(e)},in:function(e){var t,a,i,s,r,n,o,l,d,p,c,u,h,v,f,m,g=this,b=g.zoom,w=g.params.zoom,y=b.gesture,x=b.image;y.$slideEl||(y.$slideEl=g.clickedSlide?I(g.clickedSlide):g.slides.eq(g.activeIndex),y.$imageEl=y.$slideEl.find("img, svg, canvas"),y.$imageWrapEl=y.$imageEl.parent("."+w.containerClass)),y.$imageEl&&0!==y.$imageEl.length&&(y.$slideEl.addClass(""+w.zoomedSlideClass),a=void 0===x.touchesStart.x&&e?(t="touchend"===e.type?e.changedTouches[0].pageX:e.pageX,"touchend"===e.type?e.changedTouches[0].pageY:e.pageY):(t=x.touchesStart.x,x.touchesStart.y),b.scale=y.$imageWrapEl.attr("data-swiper-zoom")||w.maxRatio,b.currentScale=y.$imageWrapEl.attr("data-swiper-zoom")||w.maxRatio,e?(f=y.$slideEl[0].offsetWidth,m=y.$slideEl[0].offsetHeight,i=y.$slideEl.offset().left+f/2-t,s=y.$slideEl.offset().top+m/2-a,o=y.$imageEl[0].offsetWidth,l=y.$imageEl[0].offsetHeight,d=o*b.scale,p=l*b.scale,h=-(c=Math.min(f/2-d/2,0)),v=-(u=Math.min(m/2-p/2,0)),(r=i*b.scale)>1]<=t?i=s:a=s;return a};return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(n=o(this.x,e),r=n-1,(e-this.x[r])*(this.y[n]-this.y[r])/(this.x[n]-this.x[r])+this.y[r]):0},this},getInterpolateFunction:function(e){var t=this;t.controller.spline||(t.controller.spline=t.params.loop?new V.LinearSpline(t.slidesGrid,e.slidesGrid):new V.LinearSpline(t.snapGrid,e.snapGrid))},setTranslate:function(e,t){var a,i,s=this,r=s.controller.control;function n(e){var t=s.rtlTranslate?-s.translate:s.translate;"slide"===s.params.controller.by&&(s.controller.getInterpolateFunction(e),i=-s.controller.spline.interpolate(-t)),i&&"container"!==s.params.controller.by||(a=(e.maxTranslate()-e.minTranslate())/(s.maxTranslate()-s.minTranslate()),i=(t-s.minTranslate())*a+e.minTranslate()),s.params.controller.inverse&&(i=e.maxTranslate()-i),e.updateProgress(i),e.setTranslate(i,s),e.updateActiveIndex(),e.updateSlidesClasses()}if(Array.isArray(r))for(var o=0;o'),i.append(e)),e.css({height:r+"px"})):0===(e=a.find(".swiper-cube-shadow")).length&&(e=I('
'),a.append(e)));for(var h=0;h'),v.append(E)),0===S.length&&(S=I('
'),v.append(S)),E.length&&(E[0].style.opacity=Math.max(-b,0)),S.length&&(S[0].style.opacity=Math.max(b,0))}}if(i.css({"-webkit-transform-origin":"50% 50% -"+l/2+"px","-moz-transform-origin":"50% 50% -"+l/2+"px","-ms-transform-origin":"50% 50% -"+l/2+"px","transform-origin":"50% 50% -"+l/2+"px"}),d.shadow)if(p)e.transform("translate3d(0px, "+(r/2+d.shadowOffset)+"px, "+-r/2+"px) rotateX(90deg) rotateZ(0deg) scale("+d.shadowScale+")");else{var C=Math.abs(u)-90*Math.floor(Math.abs(u)/90),M=1.5-(Math.sin(2*C*Math.PI/360)/2+Math.cos(2*C*Math.PI/360)/2),P=d.shadowScale,k=d.shadowScale/M,z=d.shadowOffset;e.transform("scale3d("+P+", 1, "+k+") translate3d(0px, "+(n/2+z)+"px, "+-n/2/k+"px) rotateX(-90deg)")}var $=ie.isSafari||ie.isUiWebView?-l/2:0;i.transform("translate3d(0px,0,"+$+"px) rotateX("+(t.isHorizontal()?0:u)+"deg) rotateY("+(t.isHorizontal()?-u:0)+"deg)")},setTransition:function(e){var t=this.$el;this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),this.params.cubeEffect.shadow&&!this.isHorizontal()&&t.find(".swiper-cube-shadow").transition(e)}},U={setTranslate:function(){for(var e=this,t=e.slides,a=e.rtlTranslate,i=0;i'),s.append(p)),0===c.length&&(c=I('
'),s.append(c)),p.length&&(p[0].style.opacity=Math.max(-r,0)),c.length&&(c[0].style.opacity=Math.max(r,0))}s.transform("translate3d("+l+"px, "+d+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(e){var a=this,t=a.slides,i=a.activeIndex,s=a.$wrapperEl;if(t.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),a.params.virtualTranslate&&0!==e){var r=!1;t.eq(i).transitionEnd(function(){if(!r&&a&&!a.destroyed){r=!0,a.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],t=0;t'),v.append(E)),0===S.length&&(S=I('
'),v.append(S)),E.length&&(E[0].style.opacity=0')}}),Object.keys(Y).forEach(function(e){t.a11y[e]=Y[e].bind(t)})},on:{init:function(){this.params.a11y.enabled&&(this.a11y.init(),this.a11y.updateNavigation())},toEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},fromEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},paginationUpdate:function(){this.params.a11y.enabled&&this.a11y.updatePagination()},destroy:function(){this.params.a11y.enabled&&this.a11y.destroy()}}},{name:"history",params:{history:{enabled:!1,replaceState:!1,key:"slides"}},create:function(){var e=this;te.extend(e,{history:{init:F.init.bind(e),setHistory:F.setHistory.bind(e),setHistoryPopState:F.setHistoryPopState.bind(e),scrollToSlide:F.scrollToSlide.bind(e),destroy:F.destroy.bind(e)}})},on:{init:function(){this.params.history.enabled&&this.history.init()},destroy:function(){this.params.history.enabled&&this.history.destroy()},transitionEnd:function(){this.history.initialized&&this.history.setHistory(this.params.history.key,this.activeIndex)}}},{name:"hash-navigation",params:{hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}},create:function(){var e=this;te.extend(e,{hashNavigation:{initialized:!1,init:R.init.bind(e),destroy:R.destroy.bind(e),setHash:R.setHash.bind(e),onHashCange:R.onHashCange.bind(e)}})},on:{init:function(){this.params.hashNavigation.enabled&&this.hashNavigation.init()},destroy:function(){this.params.hashNavigation.enabled&&this.hashNavigation.destroy()},transitionEnd:function(){this.hashNavigation.initialized&&this.hashNavigation.setHash()}}},{name:"autoplay",params:{autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1}},create:function(){var t=this;te.extend(t,{autoplay:{running:!1,paused:!1,run:q.run.bind(t),start:q.start.bind(t),stop:q.stop.bind(t),pause:q.pause.bind(t),onTransitionEnd:function(e){t&&!t.destroyed&&t.$wrapperEl&&e.target===this&&(t.$wrapperEl[0].removeEventListener("transitionend",t.autoplay.onTransitionEnd),t.$wrapperEl[0].removeEventListener("webkitTransitionEnd",t.autoplay.onTransitionEnd),t.autoplay.paused=!1,t.autoplay.running?t.autoplay.run():t.autoplay.stop())}}})},on:{init:function(){this.params.autoplay.enabled&&this.autoplay.start()},beforeTransitionStart:function(e,t){this.autoplay.running&&(t||!this.params.autoplay.disableOnInteraction?this.autoplay.pause(e):this.autoplay.stop())},sliderFirstMove:function(){this.autoplay.running&&(this.params.autoplay.disableOnInteraction?this.autoplay.stop():this.autoplay.pause())},destroy:function(){this.autoplay.running&&this.autoplay.stop()}}},{name:"effect-fade",params:{fadeEffect:{crossFade:!1}},create:function(){te.extend(this,{fadeEffect:{setTranslate:W.setTranslate.bind(this),setTransition:W.setTransition.bind(this)}})},on:{beforeInit:function(){var e=this;if("fade"===e.params.effect){e.classNames.push(e.params.containerModifierClass+"fade");var t={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};te.extend(e.params,t),te.extend(e.originalParams,t)}},setTranslate:function(){"fade"===this.params.effect&&this.fadeEffect.setTranslate()},setTransition:function(e){"fade"===this.params.effect&&this.fadeEffect.setTransition(e)}}},{name:"effect-cube",params:{cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}},create:function(){te.extend(this,{cubeEffect:{setTranslate:j.setTranslate.bind(this),setTransition:j.setTransition.bind(this)}})},on:{beforeInit:function(){var e=this;if("cube"===e.params.effect){e.classNames.push(e.params.containerModifierClass+"cube"),e.classNames.push(e.params.containerModifierClass+"3d");var t={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0};te.extend(e.params,t),te.extend(e.originalParams,t)}},setTranslate:function(){"cube"===this.params.effect&&this.cubeEffect.setTranslate()},setTransition:function(e){"cube"===this.params.effect&&this.cubeEffect.setTransition(e)}}},{name:"effect-flip",params:{flipEffect:{slideShadows:!0,limitRotation:!0}},create:function(){te.extend(this,{flipEffect:{setTranslate:U.setTranslate.bind(this),setTransition:U.setTransition.bind(this)}})},on:{beforeInit:function(){var e=this;if("flip"===e.params.effect){e.classNames.push(e.params.containerModifierClass+"flip"),e.classNames.push(e.params.containerModifierClass+"3d");var t={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};te.extend(e.params,t),te.extend(e.originalParams,t)}},setTranslate:function(){"flip"===this.params.effect&&this.flipEffect.setTranslate()},setTransition:function(e){"flip"===this.params.effect&&this.flipEffect.setTransition(e)}}},{name:"effect-coverflow",params:{coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0}},create:function(){te.extend(this,{coverflowEffect:{setTranslate:K.setTranslate.bind(this),setTransition:K.setTransition.bind(this)}})},on:{beforeInit:function(){var e=this;"coverflow"===e.params.effect&&(e.classNames.push(e.params.containerModifierClass+"coverflow"),e.classNames.push(e.params.containerModifierClass+"3d"),e.params.watchSlidesProgress=!0,e.originalParams.watchSlidesProgress=!0)},setTranslate:function(){"coverflow"===this.params.effect&&this.coverflowEffect.setTranslate()},setTransition:function(e){"coverflow"===this.params.effect&&this.coverflowEffect.setTransition(e)}}},{name:"thumbs",params:{thumbs:{swiper:null,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-container-thumbs"}},create:function(){te.extend(this,{thumbs:{swiper:null,init:_.init.bind(this),update:_.update.bind(this),onThumbClick:_.onThumbClick.bind(this)}})},on:{beforeInit:function(){var e=this.params.thumbs;e&&e.swiper&&(this.thumbs.init(),this.thumbs.update(!0))},slideChange:function(){this.thumbs.swiper&&this.thumbs.update()},update:function(){this.thumbs.swiper&&this.thumbs.update()},resize:function(){this.thumbs.swiper&&this.thumbs.update()},observerUpdate:function(){this.thumbs.swiper&&this.thumbs.update()},setTransition:function(e){var t=this.thumbs.swiper;t&&t.setTransition(e)},beforeDestroy:function(){var e=this.thumbs.swiper;e&&this.thumbs.swiperCreated&&e&&e.destroy()}}}];return void 0===T.use&&(T.use=T.Class.use,T.installModule=T.Class.installModule),T.use(Z),T}); diff --git a/tools/quark/js/lib/jquery-sortable.js b/tools/quark/js/lib/jquery-sortable.js new file mode 100644 index 0000000..f7b5694 --- /dev/null +++ b/tools/quark/js/lib/jquery-sortable.js @@ -0,0 +1 @@ +!function(r){"use strict";var o,i;if("function"==typeof define&&define.amd)try{define(["sortablejs","jquery"],function(e,t){o=e,i=t,n(),r(e,t)})}catch(e){n()}else{if("object"==typeof exports)try{o=require("sortablejs"),i=require("jquery")}catch(e){}"function"!=typeof jQuery&&"function"!=typeof $||(i=jQuery||$),"undefined"!=typeof Sortable&&(o=Sortable),n(),r(o,i)}function n(){if(!i)throw new Error("jQuery is required for jquery-sortablejs");if(!o)throw new Error("SortableJS is required for jquery-sortablejs (https://github.com/SortableJS/Sortable)")}}(function(n,a){"use strict";a.fn.sortable=function(r){var o,i=arguments;return this.each(function(){var e=a(this),t=e.data("sortable");t||!(r instanceof Object)&&r?t&&("destroy"===r?(t.destroy(),e.removeData("sortable")):"widget"===r?o=t:"function"==typeof t[r]?o=t[r].apply(t,[].slice.call(i,1)):r in t.options&&(o=t.option.apply(t,i))):(t=new n(this,r),e.data("sortable",t))}),void 0===o?this:o}}); \ No newline at end of file diff --git a/tools/quark/js/lib/jquery.js b/tools/quark/js/lib/jquery.js new file mode 100644 index 0000000..07c00cd --- /dev/null +++ b/tools/quark/js/lib/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0"===e[0]&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return!1}return!1}}function P(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"===e[0]?t.parentNode===n&&h(t,e):h(t,e))||o&&t===n)return t;if(t===n)break}while(t=(i=t).host&&i!==document&&i.host.nodeType?i.host:i.parentNode)}var i;return null}var f,p=/\s+/g;function k(t,e,n){if(t&&e)if(t.classList)t.classList[n?"add":"remove"](e);else{var o=(" "+t.className+" ").replace(p," ").replace(" "+e+" "," ");t.className=(o+(n?" "+e:"")).replace(p," ")}}function R(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];e in o||-1!==e.indexOf("webkit")||(e="-webkit-"+e),o[e]=n+("string"==typeof n?"":"px")}}function v(t,e){var n="";if("string"==typeof t)n=t;else do{var o=R(t,"transform");o&&"none"!==o&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix;return i&&new i(n)}function g(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i=e.left-n&&r<=e.right+n,i=a>=e.top-n&&a<=e.bottom+n;return n&&o&&i?l=t:void 0}}),l}((t=t.touches?t.touches[0]:t).clientX,t.clientY);if(e){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[j]._onDragOver(n)}}}function kt(t){z&&z.parentNode[j]._isOutsideThisEl(t.target)}function Rt(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=a({},e),t[j]=this;var n={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Ot(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Rt.supportPointer&&"PointerEvent"in window,emptyInsertThreshold:5};for(var o in O.initializePlugins(this,t,n),n)o in e||(e[o]=n[o]);for(var i in At(e),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!e.forceFallback&&xt,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?u(t,"pointerdown",this._onTapStart):(u(t,"mousedown",this._onTapStart),u(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(u(t,"dragover",this),u(t,"dragenter",this)),bt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,T())}function Xt(t,e,n,o,i,r,a,l){var s,c,u=t[j],d=u.options.onMove;return!window.CustomEvent||w||E?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||X(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),d&&(c=d.call(u,s,a)),c}function Yt(t){t.draggable=!1}function Bt(){Dt=!1}function Ft(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;n--;)o+=e.charCodeAt(n);return o.toString(36)}function Ht(t){return setTimeout(t,0)}function Lt(t){return clearTimeout(t)}Rt.prototype={constructor:Rt,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(ht=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,z):this.options.direction},_onTapStart:function(e){if(e.cancelable){var n=this,o=this.el,t=this.options,i=t.preventOnFilter,r=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,l=(a||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,c=t.filter;if(function(t){_t.length=0;var e=t.getElementsByTagName("input"),n=e.length;for(;n--;){var o=e[n];o.checked&&_t.push(o)}}(o),!z&&!(/mousedown|pointerdown/.test(r)&&0!==e.button||t.disabled||s.isContentEditable||(l=P(l,t.draggable,o,!1))&&l.animated||Z===l)){if(J=F(l),et=F(l,t.draggable),"function"==typeof c){if(c.call(this,e,l,this))return W({sortable:n,rootEl:s,name:"filter",targetEl:l,toEl:o,fromEl:o}),K("filter",n,{evt:e}),void(i&&e.cancelable&&e.preventDefault())}else if(c&&(c=c.split(",").some(function(t){if(t=P(s,t.trim(),o,!1))return W({sortable:n,rootEl:t,name:"filter",targetEl:l,fromEl:o,toEl:o}),K("filter",n,{evt:e}),!0})))return void(i&&e.cancelable&&e.preventDefault());t.handle&&!P(s,t.handle,o,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(t,e,n){var o,i=this,r=i.el,a=i.options,l=r.ownerDocument;if(n&&!z&&n.parentNode===r){var s=X(n);if(q=r,G=(z=n).parentNode,V=z.nextSibling,Z=n,ot=a.group,rt={target:Rt.dragged=z,clientX:(e||t).clientX,clientY:(e||t).clientY},ct=rt.clientX-s.left,ut=rt.clientY-s.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,z.style["will-change"]="all",o=function(){K("delayEnded",i,{evt:t}),Rt.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!c&&i.nativeDraggable&&(z.draggable=!0),i._triggerDragStart(t,e),W({sortable:i,name:"choose",originalEvent:t}),k(z,a.chosenClass,!0))},a.ignore.split(",").forEach(function(t){g(z,t.trim(),Yt)}),u(l,"dragover",Pt),u(l,"mousemove",Pt),u(l,"touchmove",Pt),u(l,"mouseup",i._onDrop),u(l,"touchend",i._onDrop),u(l,"touchcancel",i._onDrop),c&&this.nativeDraggable&&(this.options.touchStartThreshold=4,z.draggable=!0),K("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(E||w))o();else{if(Rt.eventCanceled)return void this._onDrop();u(l,"mouseup",i._disableDelayedDrag),u(l,"touchend",i._disableDelayedDrag),u(l,"touchcancel",i._disableDelayedDrag),u(l,"mousemove",i._delayedDragTouchMoveHandler),u(l,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&u(l,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(o,a.delay)}}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){z&&Yt(z),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;d(t,"mouseup",this._disableDelayedDrag),d(t,"touchend",this._disableDelayedDrag),d(t,"touchcancel",this._disableDelayedDrag),d(t,"mousemove",this._delayedDragTouchMoveHandler),d(t,"touchmove",this._delayedDragTouchMoveHandler),d(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?u(document,"pointermove",this._onTouchMove):u(document,e?"touchmove":"mousemove",this._onTouchMove):(u(z,"dragend",this),u(q,"dragstart",this._onDragStart));try{document.selection?Ht(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){if(vt=!1,q&&z){K("dragStarted",this,{evt:e}),this.nativeDraggable&&u(document,"dragover",kt);var n=this.options;t||k(z,n.dragClass,!1),k(z,n.ghostClass,!0),Rt.active=this,t&&this._appendGhost(),W({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(at){this._lastX=at.clientX,this._lastY=at.clientY,Nt();for(var t=document.elementFromPoint(at.clientX,at.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(at.clientX,at.clientY))!==e;)e=t;if(z.parentNode[j]._isOutsideThisEl(t),e)do{if(e[j]){if(e[j]._onDragOver({clientX:at.clientX,clientY:at.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break}t=e}while(e=e.parentNode);It()}},_onTouchMove:function(t){if(rt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,r=U&&v(U),a=U&&r&&r.a,l=U&&r&&r.d,s=Ct&>&&b(gt),c=(i.clientX-rt.clientX+o.x)/(a||1)+(s?s[0]-Et[0]:0)/(a||1),u=(i.clientY-rt.clientY+o.y)/(l||1)+(s?s[1]-Et[1]:0)/(l||1);if(!Rt.active&&!vt){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))o.right+10||t.clientX<=o.right&&t.clientY>o.bottom&&t.clientX>=o.left:t.clientX>o.right&&t.clientY>o.top||t.clientX<=o.right&&t.clientY>o.bottom+10}(n,a,this)&&!g.animated){if(g===z)return A(!1);if(g&&l===n.target&&(s=g),s&&(i=X(s)),!1!==Xt(q,l,z,o,s,i,n,!!s))return O(),l.appendChild(z),G=l,N(),A(!0)}else if(s.parentNode===l){i=X(s);var v,m,b,y=z.parentNode!==l,w=!function(t,e,n){var o=n?t.left:t.top,i=n?t.right:t.bottom,r=n?t.width:t.height,a=n?e.left:e.top,l=n?e.right:e.bottom,s=n?e.width:e.height;return o===a||i===l||o+r/2===a+s/2}(z.animated&&z.toRect||o,s.animated&&s.toRect||i,a),E=a?"top":"left",D=Y(s,"top","top")||Y(z,"top","top"),_=D?D.scrollTop:void 0;if(ht!==s&&(m=i[E],yt=!1,wt=!w&&e.invertSwap||y),0!==(v=function(t,e,n,o,i,r,a,l){var s=o?t.clientY:t.clientX,c=o?n.height:n.width,u=o?n.top:n.left,d=o?n.bottom:n.right,h=!1;if(!a)if(l&&pt0)){var event=jqEvent.originalEvent?jqEvent.originalEvent:jqEvent;if(!event.pointerType||"mouse"!=event.pointerType||0!=options.fallbackToMouseEvents){var ret,touches=event.touches,evt=touches?touches[0]:event;return phase=PHASE_START,touches?fingerCount=touches.length:options.preventDefaultEvents!==!1&&jqEvent.preventDefault(),distance=0,direction=null,currentDirection=null,pinchDirection=null,duration=0,startTouchesDistance=0,endTouchesDistance=0,pinchZoom=1,pinchDistance=0,maximumsMap=createMaximumsData(),cancelMultiFingerRelease(),createFingerData(0,evt),!touches||fingerCount===options.fingers||options.fingers===ALL_FINGERS||hasPinches()?(startTime=getTimeStamp(),2==fingerCount&&(createFingerData(1,touches[1]),startTouchesDistance=endTouchesDistance=calculateTouchesDistance(fingerData[0].start,fingerData[1].start)),(options.swipeStatus||options.pinchStatus)&&(ret=triggerHandler(event,phase))):ret=!1,ret===!1?(phase=PHASE_CANCEL,triggerHandler(event,phase),ret):(options.hold&&(holdTimeout=setTimeout($.proxy(function(){$element.trigger("hold",[event.target]),options.hold&&(ret=options.hold.call($element,event,event.target))},this),options.longTapThreshold)),setTouchInProgress(!0),null)}}}function touchMove(jqEvent){var event=jqEvent.originalEvent?jqEvent.originalEvent:jqEvent;if(phase!==PHASE_END&&phase!==PHASE_CANCEL&&!inMultiFingerRelease()){var ret,touches=event.touches,evt=touches?touches[0]:event,currentFinger=updateFingerData(evt);if(endTime=getTimeStamp(),touches&&(fingerCount=touches.length),options.hold&&clearTimeout(holdTimeout),phase=PHASE_MOVE,2==fingerCount&&(0==startTouchesDistance?(createFingerData(1,touches[1]),startTouchesDistance=endTouchesDistance=calculateTouchesDistance(fingerData[0].start,fingerData[1].start)):(updateFingerData(touches[1]),endTouchesDistance=calculateTouchesDistance(fingerData[0].end,fingerData[1].end),pinchDirection=calculatePinchDirection(fingerData[0].end,fingerData[1].end)),pinchZoom=calculatePinchZoom(startTouchesDistance,endTouchesDistance),pinchDistance=Math.abs(startTouchesDistance-endTouchesDistance)),fingerCount===options.fingers||options.fingers===ALL_FINGERS||!touches||hasPinches()){if(direction=calculateDirection(currentFinger.start,currentFinger.end),currentDirection=calculateDirection(currentFinger.last,currentFinger.end),validateDefaultEvent(jqEvent,currentDirection),distance=calculateDistance(currentFinger.start,currentFinger.end),duration=calculateDuration(),setMaxDistance(direction,distance),ret=triggerHandler(event,phase),!options.triggerOnTouchEnd||options.triggerOnTouchLeave){var inBounds=!0;if(options.triggerOnTouchLeave){var bounds=getbounds(this);inBounds=isInBounds(currentFinger.end,bounds)}!options.triggerOnTouchEnd&&inBounds?phase=getNextPhase(PHASE_MOVE):options.triggerOnTouchLeave&&!inBounds&&(phase=getNextPhase(PHASE_END)),phase!=PHASE_CANCEL&&phase!=PHASE_END||triggerHandler(event,phase)}}else phase=PHASE_CANCEL,triggerHandler(event,phase);ret===!1&&(phase=PHASE_CANCEL,triggerHandler(event,phase))}}function touchEnd(jqEvent){var event=jqEvent.originalEvent?jqEvent.originalEvent:jqEvent,touches=event.touches;if(touches){if(touches.length&&!inMultiFingerRelease())return startMultiFingerRelease(event),!0;if(touches.length&&inMultiFingerRelease())return!0}return inMultiFingerRelease()&&(fingerCount=fingerCountAtRelease),endTime=getTimeStamp(),duration=calculateDuration(),didSwipeBackToCancel()||!validateSwipeDistance()?(phase=PHASE_CANCEL,triggerHandler(event,phase)):options.triggerOnTouchEnd||options.triggerOnTouchEnd===!1&&phase===PHASE_MOVE?(options.preventDefaultEvents!==!1&&jqEvent.cancelable!==!1&&jqEvent.preventDefault(),phase=PHASE_END,triggerHandler(event,phase)):!options.triggerOnTouchEnd&&hasTap()?(phase=PHASE_END,triggerHandlerForGesture(event,phase,TAP)):phase===PHASE_MOVE&&(phase=PHASE_CANCEL,triggerHandler(event,phase)),setTouchInProgress(!1),null}function touchCancel(){fingerCount=0,endTime=0,startTime=0,startTouchesDistance=0,endTouchesDistance=0,pinchZoom=1,cancelMultiFingerRelease(),setTouchInProgress(!1)}function touchLeave(jqEvent){var event=jqEvent.originalEvent?jqEvent.originalEvent:jqEvent;options.triggerOnTouchLeave&&(phase=getNextPhase(PHASE_END),triggerHandler(event,phase))}function removeListeners(){$element.off(START_EV,touchStart),$element.off(CANCEL_EV,touchCancel),$element.off(MOVE_EV,touchMove),$element.off(END_EV,touchEnd),LEAVE_EV&&$element.off(LEAVE_EV,touchLeave),setTouchInProgress(!1)}function getNextPhase(currentPhase){var nextPhase=currentPhase,validTime=validateSwipeTime(),validDistance=validateSwipeDistance(),didCancel=didSwipeBackToCancel();return!validTime||didCancel?nextPhase=PHASE_CANCEL:!validDistance||currentPhase!=PHASE_MOVE||options.triggerOnTouchEnd&&!options.triggerOnTouchLeave?!validDistance&¤tPhase==PHASE_END&&options.triggerOnTouchLeave&&(nextPhase=PHASE_CANCEL):nextPhase=PHASE_END,nextPhase}function triggerHandler(event,phase){var ret,touches=event.touches;return(didSwipe()||hasSwipes())&&(ret=triggerHandlerForGesture(event,phase,SWIPE)),(didPinch()||hasPinches())&&ret!==!1&&(ret=triggerHandlerForGesture(event,phase,PINCH)),didDoubleTap()&&ret!==!1?ret=triggerHandlerForGesture(event,phase,DOUBLE_TAP):didLongTap()&&ret!==!1?ret=triggerHandlerForGesture(event,phase,LONG_TAP):didTap()&&ret!==!1&&(ret=triggerHandlerForGesture(event,phase,TAP)),phase===PHASE_CANCEL&&touchCancel(event),phase===PHASE_END&&(touches?touches.length||touchCancel(event):touchCancel(event)),ret}function triggerHandlerForGesture(event,phase,gesture){var ret;if(gesture==SWIPE){if($element.trigger("swipeStatus",[phase,direction||null,distance||0,duration||0,fingerCount,fingerData,currentDirection]),options.swipeStatus&&(ret=options.swipeStatus.call($element,event,phase,direction||null,distance||0,duration||0,fingerCount,fingerData,currentDirection),ret===!1))return!1;if(phase==PHASE_END&&validateSwipe()){if(clearTimeout(singleTapTimeout),clearTimeout(holdTimeout),$element.trigger("swipe",[direction,distance,duration,fingerCount,fingerData,currentDirection]),options.swipe&&(ret=options.swipe.call($element,event,direction,distance,duration,fingerCount,fingerData,currentDirection),ret===!1))return!1;switch(direction){case LEFT:$element.trigger("swipeLeft",[direction,distance,duration,fingerCount,fingerData,currentDirection]),options.swipeLeft&&(ret=options.swipeLeft.call($element,event,direction,distance,duration,fingerCount,fingerData,currentDirection));break;case RIGHT:$element.trigger("swipeRight",[direction,distance,duration,fingerCount,fingerData,currentDirection]),options.swipeRight&&(ret=options.swipeRight.call($element,event,direction,distance,duration,fingerCount,fingerData,currentDirection));break;case UP:$element.trigger("swipeUp",[direction,distance,duration,fingerCount,fingerData,currentDirection]),options.swipeUp&&(ret=options.swipeUp.call($element,event,direction,distance,duration,fingerCount,fingerData,currentDirection));break;case DOWN:$element.trigger("swipeDown",[direction,distance,duration,fingerCount,fingerData,currentDirection]),options.swipeDown&&(ret=options.swipeDown.call($element,event,direction,distance,duration,fingerCount,fingerData,currentDirection))}}}if(gesture==PINCH){if($element.trigger("pinchStatus",[phase,pinchDirection||null,pinchDistance||0,duration||0,fingerCount,pinchZoom,fingerData]),options.pinchStatus&&(ret=options.pinchStatus.call($element,event,phase,pinchDirection||null,pinchDistance||0,duration||0,fingerCount,pinchZoom,fingerData),ret===!1))return!1;if(phase==PHASE_END&&validatePinch())switch(pinchDirection){case IN:$element.trigger("pinchIn",[pinchDirection||null,pinchDistance||0,duration||0,fingerCount,pinchZoom,fingerData]),options.pinchIn&&(ret=options.pinchIn.call($element,event,pinchDirection||null,pinchDistance||0,duration||0,fingerCount,pinchZoom,fingerData));break;case OUT:$element.trigger("pinchOut",[pinchDirection||null,pinchDistance||0,duration||0,fingerCount,pinchZoom,fingerData]),options.pinchOut&&(ret=options.pinchOut.call($element,event,pinchDirection||null,pinchDistance||0,duration||0,fingerCount,pinchZoom,fingerData))}}return gesture==TAP?phase!==PHASE_CANCEL&&phase!==PHASE_END||(clearTimeout(singleTapTimeout),clearTimeout(holdTimeout),hasDoubleTap()&&!inDoubleTap()?(doubleTapStartTime=getTimeStamp(),singleTapTimeout=setTimeout($.proxy(function(){doubleTapStartTime=null,$element.trigger("tap",[event.target]),options.tap&&(ret=options.tap.call($element,event,event.target))},this),options.doubleTapThreshold)):(doubleTapStartTime=null,$element.trigger("tap",[event.target]),options.tap&&(ret=options.tap.call($element,event,event.target)))):gesture==DOUBLE_TAP?phase!==PHASE_CANCEL&&phase!==PHASE_END||(clearTimeout(singleTapTimeout),clearTimeout(holdTimeout),doubleTapStartTime=null,$element.trigger("doubletap",[event.target]),options.doubleTap&&(ret=options.doubleTap.call($element,event,event.target))):gesture==LONG_TAP&&(phase!==PHASE_CANCEL&&phase!==PHASE_END||(clearTimeout(singleTapTimeout),doubleTapStartTime=null,$element.trigger("longtap",[event.target]),options.longTap&&(ret=options.longTap.call($element,event,event.target)))),ret}function validateSwipeDistance(){var valid=!0;return null!==options.threshold&&(valid=distance>=options.threshold),valid}function didSwipeBackToCancel(){var cancelled=!1;return null!==options.cancelThreshold&&null!==direction&&(cancelled=getMaxDistance(direction)-distance>=options.cancelThreshold),cancelled}function validatePinchDistance(){return null!==options.pinchThreshold?pinchDistance>=options.pinchThreshold:!0}function validateSwipeTime(){var result;return result=options.maxTimeThreshold?!(duration>=options.maxTimeThreshold):!0}function validateDefaultEvent(jqEvent,direction){if(options.preventDefaultEvents!==!1)if(options.allowPageScroll===NONE)jqEvent.preventDefault();else{var auto=options.allowPageScroll===AUTO;switch(direction){case LEFT:(options.swipeLeft&&auto||!auto&&options.allowPageScroll!=HORIZONTAL)&&jqEvent.preventDefault();break;case RIGHT:(options.swipeRight&&auto||!auto&&options.allowPageScroll!=HORIZONTAL)&&jqEvent.preventDefault();break;case UP:(options.swipeUp&&auto||!auto&&options.allowPageScroll!=VERTICAL)&&jqEvent.preventDefault();break;case DOWN:(options.swipeDown&&auto||!auto&&options.allowPageScroll!=VERTICAL)&&jqEvent.preventDefault();break;case NONE:}}}function validatePinch(){var hasCorrectFingerCount=validateFingers(),hasEndPoint=validateEndPoint(),hasCorrectDistance=validatePinchDistance();return hasCorrectFingerCount&&hasEndPoint&&hasCorrectDistance}function hasPinches(){return!!(options.pinchStatus||options.pinchIn||options.pinchOut)}function didPinch(){return!(!validatePinch()||!hasPinches())}function validateSwipe(){var hasValidTime=validateSwipeTime(),hasValidDistance=validateSwipeDistance(),hasCorrectFingerCount=validateFingers(),hasEndPoint=validateEndPoint(),didCancel=didSwipeBackToCancel(),valid=!didCancel&&hasEndPoint&&hasCorrectFingerCount&&hasValidDistance&&hasValidTime;return valid}function hasSwipes(){return!!(options.swipe||options.swipeStatus||options.swipeLeft||options.swipeRight||options.swipeUp||options.swipeDown)}function didSwipe(){return!(!validateSwipe()||!hasSwipes())}function validateFingers(){return fingerCount===options.fingers||options.fingers===ALL_FINGERS||!SUPPORTS_TOUCH}function validateEndPoint(){return 0!==fingerData[0].end.x}function hasTap(){return!!options.tap}function hasDoubleTap(){return!!options.doubleTap}function hasLongTap(){return!!options.longTap}function validateDoubleTap(){if(null==doubleTapStartTime)return!1;var now=getTimeStamp();return hasDoubleTap()&&now-doubleTapStartTime<=options.doubleTapThreshold}function inDoubleTap(){return validateDoubleTap()}function validateTap(){return(1===fingerCount||!SUPPORTS_TOUCH)&&(isNaN(distance)||distanceoptions.longTapThreshold&&DOUBLE_TAP_THRESHOLD>distance}function didTap(){return!(!validateTap()||!hasTap())}function didDoubleTap(){return!(!validateDoubleTap()||!hasDoubleTap())}function didLongTap(){return!(!validateLongTap()||!hasLongTap())}function startMultiFingerRelease(event){previousTouchEndTime=getTimeStamp(),fingerCountAtRelease=event.touches.length+1}function cancelMultiFingerRelease(){previousTouchEndTime=0,fingerCountAtRelease=0}function inMultiFingerRelease(){var withinThreshold=!1;if(previousTouchEndTime){var diff=getTimeStamp()-previousTouchEndTime;diff<=options.fingerReleaseThreshold&&(withinThreshold=!0)}return withinThreshold}function getTouchInProgress(){return!($element.data(PLUGIN_NS+"_intouch")!==!0)}function setTouchInProgress(val){$element&&(val===!0?($element.on(MOVE_EV,touchMove),$element.on(END_EV,touchEnd),LEAVE_EV&&$element.on(LEAVE_EV,touchLeave)):($element.off(MOVE_EV,touchMove,!1),$element.off(END_EV,touchEnd,!1),LEAVE_EV&&$element.off(LEAVE_EV,touchLeave,!1)),$element.data(PLUGIN_NS+"_intouch",val===!0))}function createFingerData(id,evt){var f={start:{x:0,y:0},last:{x:0,y:0},end:{x:0,y:0}};return f.start.x=f.last.x=f.end.x=evt.pageX||evt.clientX,f.start.y=f.last.y=f.end.y=evt.pageY||evt.clientY,fingerData[id]=f,f}function updateFingerData(evt){var id=void 0!==evt.identifier?evt.identifier:0,f=getFingerData(id);return null===f&&(f=createFingerData(id,evt)),f.last.x=f.end.x,f.last.y=f.end.y,f.end.x=evt.pageX||evt.clientX,f.end.y=evt.pageY||evt.clientY,f}function getFingerData(id){return fingerData[id]||null}function setMaxDistance(direction,distance){direction!=NONE&&(distance=Math.max(distance,getMaxDistance(direction)),maximumsMap[direction].distance=distance)}function getMaxDistance(direction){return maximumsMap[direction]?maximumsMap[direction].distance:void 0}function createMaximumsData(){var maxData={};return maxData[LEFT]=createMaximumVO(LEFT),maxData[RIGHT]=createMaximumVO(RIGHT),maxData[UP]=createMaximumVO(UP),maxData[DOWN]=createMaximumVO(DOWN),maxData}function createMaximumVO(dir){return{direction:dir,distance:0}}function calculateDuration(){return endTime-startTime}function calculateTouchesDistance(startPoint,endPoint){var diffX=Math.abs(startPoint.x-endPoint.x),diffY=Math.abs(startPoint.y-endPoint.y);return Math.round(Math.sqrt(diffX*diffX+diffY*diffY))}function calculatePinchZoom(startDistance,endDistance){var percent=endDistance/startDistance*1;return percent.toFixed(2)}function calculatePinchDirection(){return 1>pinchZoom?OUT:IN}function calculateDistance(startPoint,endPoint){return Math.round(Math.sqrt(Math.pow(endPoint.x-startPoint.x,2)+Math.pow(endPoint.y-startPoint.y,2)))}function calculateAngle(startPoint,endPoint){var x=startPoint.x-endPoint.x,y=endPoint.y-startPoint.y,r=Math.atan2(y,x),angle=Math.round(180*r/Math.PI);return 0>angle&&(angle=360-Math.abs(angle)),angle}function calculateDirection(startPoint,endPoint){if(comparePoints(startPoint,endPoint))return NONE;var angle=calculateAngle(startPoint,endPoint);return 45>=angle&&angle>=0?LEFT:360>=angle&&angle>=315?LEFT:angle>=135&&225>=angle?RIGHT:angle>45&&135>angle?DOWN:UP}function getTimeStamp(){var now=new Date;return now.getTime()}function getbounds(el){el=$(el);var offset=el.offset(),bounds={left:offset.left,right:offset.left+el.outerWidth(),top:offset.top,bottom:offset.top+el.outerHeight()};return bounds}function isInBounds(point,bounds){return point.x>bounds.left&&point.xbounds.top&&point.y'); + } else { + $(".logo").html(''); + } + // 夜间模式 和 壁纸 + var nightMode = { + on: function () { + $("body").removeClass('theme-black theme-white').addClass('theme-white'); + $("body").css("background-image", ""); + $("#nightCss").removeAttr('disabled'); + }, + off: function () { + if (that.get('wallpaper')) { + $("body").css("background-image", "url(" + that.get('wallpaper') + ")"); + } else { + $("body").css("background-image", ""); + } + $("body").removeClass('theme-black theme-white').addClass('theme-' + that.get('bookcolor')); + $("#nightCss").attr('disabled', true); + } + }; + if (that.get('nightMode') === true) { + nightMode.on(); + } else { + nightMode.off(); + } + // 删除掉VIA浏览器夜间模式的暗色支持 + $("head").on("DOMNodeInserted DOMNodeRemoved", function (evt) { + if (evt.target.id === "via_inject_css_night") { + if (evt.type === "DOMNodeInserted") { + $("#via_inject_css_night").html(""); + nightMode.on(); + } else if (evt.type === "DOMNodeRemoved") { + nightMode.off(); + } + } + }); + if ($("#via_inject_css_night").html("").length > 0) { + nightMode.on(); + } + } + } + var settings = new settingsFn(store.get("setData")); + settings.apply(); + + /** + * DOM长按事件 + */ + $.fn.longPress = function (fn) { + var timeout = void 0, + $this = this, + startPos, + movePos, + endPos; + for (var i = $this.length - 1; i > -1; i--) { + $this[i].addEventListener("touchstart", function (e) { + var touch = e.targetTouches[0]; + startPos = { x: touch.pageX, y: touch.pageY }; + timeout = setTimeout(function () { + if ($this.attr("disabled") === undefined) { + fn(); + } + }, 700); + }, { passive: true }); + $this[i].addEventListener("touchmove", function (e) { + var touch = e.targetTouches[0]; + movePos = { x: touch.pageX - startPos.x, y: touch.pageY - startPos.y }; + (Math.abs(movePos.x) > 10 || Math.abs(movePos.y) > 10) && clearTimeout(timeout); + }, { passive: true }); + $this[i].addEventListener("touchend", function () { + clearTimeout(timeout); + }, { passive: true }); + } + }; + + /** + * 文件打开函数 + * @param callback 回调函数 + */ + var openFile = function (callback) { + $('.openFile').remove(); + var input = $(''); + input.on("propertychange change", callback); + $('body').append(input); + input.click(); + } + + /** + * 文件上传函数 + * @param file 文件 + * @param callback 回调函数 + */ + var uploadFile = function (file, callback) { + var imageData = new FormData(); + imageData.append("Filedata", file); + imageData.append("file", "multipart"); + $.ajax({ + url: 'https://api.uomg.com/api/image.ali', + type: 'POST', + data: imageData, + cache: false, + contentType: false, + processData: false, + dataType: 'json', + success: function (res) { + if (res.code == 1) { + callback.success && callback.success(res.imgurl); + } else { + callback.error && callback.error(res.msg); + } + }, + error: function () { + callback.error && callback.error('请求失败!'); + }, + complete: function () { + callback.complete && callback.complete(); + } + }); + } + + /** + * 首页书签构建函数 + * @function init 初始化 + * @function bind 绑定事件 + * @function del 删除书签 + * @function add 添加书签 + */ + var bookMarkFn = function (ele, options) { + this.$ele = $(ele); + this.options = { + data: [{ "name": "精选", "url": "choice()", "icon": "icon/discover.png" }, { "name": "微博", "url": "https://weibo.com", "icon": "icon/weibo.png" }, { "name": "Bilibili", "url": "https://m.bilibili.com", "icon": "icon/bilibilibog.png" }, { "name": "知乎", "url": "https://www.zhihu.com", "icon": "icon/zhihu.png" }, { "name": "淘宝", "url": "https://m.taobao.com", "icon": "icon/taobao.png" }, { "name": "贴吧", "url": "https://tieba.baidu.com", "icon": "icon/tieba.png" }, { "name": "IT之家", "url": "https://m.ithome.com", "icon": "icon/ithome.png" }, { "name": "网易", "url": "https://3g.163.com", "icon": "icon/netease.png" }, { "name": "热榜", "url": "https://tophub.today", "icon": "icon/tophub.png" }, { + "name": "导航", "url": "https://www.pp93.com/m", "icon": "icon/pp93.png" + }], + }; + this.options = $.extend({}, this.options, options); + this.init(); + } + bookMarkFn.prototype = { + init: function () { + var html = ''; + var data = this.options.data; + for (var i = 0, l = data.length; i < l; i++) { + html += '
' + data[i].name + "
"; + } + this.$ele.html(html); + this.bind(); + }, + getJson: function () { + return this.options.data; + }, + bind: function () { + var that = this; + var data = this.options.data; + // 绑定书签长按事件 + this.$ele.longPress(function () { + if (that.status !== "editing" && data.length > 0) { + that.status = "editing"; + $('.logo,.ornament-input-group').css('pointer-events', 'none'); + $('.addbook').remove(); + require(['jquery-sortable'], function () { + that.$ele.sortable({ + animation: 150, + fallbackTolerance: 3, + touchStartThreshold: 3, + ghostClass: "ghost", + onEnd: function (evt) { + var startID = evt.oldIndex, + endID = evt.newIndex; + if (startID > endID) { + data.splice(endID, 0, data[startID]); + data.splice(startID + 1, 1); + } else { + data.splice(endID + 1, 0, data[startID]); + data.splice(startID, 1); + } + store.set("bookMark", data); + } + }); + }) + $(document).click(function () { + $(document).unbind("click"); + $('.logo,.ornament-input-group').css('pointer-events', ''); + $(".delbook").addClass("animation"); + $(".delbook").on('transitionend', function (evt) { + if (evt.target !== this) { + return; + } + $(".delbook").remove(); + that.$ele.sortable("destroy"); + that.status = ""; + }); + }); + var $list = that.$ele.find(".list"); + for (var i = $list.length; i > -1; i--) { + $list.eq(i).find(".img").prepend('
'); + } + } + }); + this.$ele.on('click', function (evt) { + if (evt.target !== this || that.status === 'editing' || $('.addbook').hasClass('animation') || data.length >= 20) { + return; + } + if ($('.addbook').length === 0) { + that.$ele.append('
'); + $('.addbook').click(function () { + $('.addbook').remove(); + // 取消书签编辑状态 + $(document).click(); + // 插入html + $('#app').append(`
+
+
    +
  • 站点
  • + + +
+
+
+ + +
点击选择图标
+
确认添加
+
+
+
+
`); + + setTimeout(function () { + $(".page-bg").addClass("animation"); + $(".addbook-choice").addClass("animation"); + $(".addbook-content").addClass("animation"); + }, 50); + + //绑定事件 + $("#addbook-upload").click(function () { + openFile(function () { + var file = this.files[0]; + var reader = new FileReader(); + reader.onload = function () { + $("#addbook-upload").html('

' + file.name + '

'); + }; + $("#addbook-upload").css("pointer-events", ""); + $(".addbook-ok").css("pointer-events", ""); + reader.readAsDataURL(file); + /*$("#addbook-upload").html('上传图标中...').css("pointer-events", "none"); + $(".addbook-ok").css("pointer-events", "none"); + uploadFile(file, { + success: function (url) { + $("#addbook-upload").html('

' + file.name + '

'); + }, + error: function (msg) { + $("#addbook-upload").html('上传图标失败!' + msg); + }, + complete: function () { + $("#addbook-upload").css("pointer-events", ""); + $(".addbook-ok").css("pointer-events", ""); + } + })*/ + }); + }); + $(".addbook-ok").click(function () { + var name = $(".addbook-name").val(), + url = $(".addbook-url").val(), + icon = $("#addbook-upload img").attr("src"); + if (name.length && url.length) { + if (!icon) { + // 绘制文字图标 + var canvas = document.createElement("canvas"); + canvas.height = 100; + canvas.width = 100; + var ctx = canvas.getContext("2d"); + ctx.fillStyle = "#f5f5f5"; + ctx.fillRect(0, 0, 100, 100); + ctx.fill(); + ctx.fillStyle = "#222"; + ctx.font = "40px Arial"; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillText(name.substr(0, 1), 50, 52); + icon = canvas.toDataURL("image/png"); + } + $(".bottom-close").click(); + bookMark.add(name, url, icon); + } + }); + $(".bottom-close").click(function () { + $(".page-addbook").css({ "pointer-events": "none" }); + $(".page-bg").removeClass("animation"); + $(".addbook-choice").removeClass("animation"); + $(".addbook-content").removeClass("animation"); + setTimeout(function () { + $(".page-addbook").remove(); + $(".page-bg").remove(); + }, 300); + }); + $(".page-addbook").click(function (evt) { + if (evt.target === evt.currentTarget) { + $(".bottom-close").click(); + } + }); + + }) + } else { + $(".addbook").addClass("animation"); + setTimeout(function () { + $(".addbook").remove(); + }, 400); + } + }); + this.$ele.on('click', '.list', function (evt) { + evt.stopPropagation(); + var dom = $(evt.currentTarget); + if (that.status !== "editing") { + var url = dom.data("url"); + if (url) { + switch (url) { + case "choice()": + choice(); + break; + default: + location.href = url; + } + } + } else { + if (evt.target.className === "delbook") { + that.del(dom.index()); + } + } + }); + }, + del: function (index) { + var that = this; + var data = this.options.data; + this.$ele.css("overflow", "visible"); + var dom = this.$ele.find('.list').eq(index); + dom.css({ transform: "translateY(60px)", opacity: 0, transition: ".3s" }); + dom.on('transitionend', function (evt) { + if (evt.target !== this) { + return; + } + dom.remove(); + that.$ele.css("overflow", "hidden"); + }); + data.splice(index, 1); + store.set("bookMark", data); + }, + add: function (name, url, icon) { + var data = this.options.data; + url = url.match(/:\/\//) ? url : "http://" + url; + var i = data.length - 1; + var dom = $('
' + name + '
'); + this.$ele.append(dom); + dom.css({ marginTop: "60px", opacity: "0" }).animate({ marginTop: 0, opacity: 1 }, 300); + data.push({ name: name, url: url, icon: icon }); + store.set("bookMark", data); + } + } + + /** + * 搜索历史构建函数 + * @function init 初始化 + * @function load 加载HTML + * @function bind 绑定事件 + * @function add 添加历史 + * @function empty 清空历史 + */ + var searchHistoryFn = function (ele, options) { + this.$ele = $(ele); + this.options = { + data: [] + }; + this.options = $.extend({}, this.options, options); + this.init(); + } + searchHistoryFn.prototype = { + init: function () { + this.options.data = this.options.data.slice(0, 10); + this.load(); + this.bind(); + }, + load: function () { + var data = this.options.data; + var html = ''; + var l = data.length; + for (var i = 0; i < l; i++) { + html += '
  • ' + data[i] + '
  • '; + } + this.$ele.find('.content').html(html); + l ? $('.emptyHistory').show() : $('.emptyHistory').hide(); + }, + bind: function () { + var that = this; + // 监听touch事件,防止点击后弹出或收回软键盘 + $('.emptyHistory')[0].addEventListener("touchstart", function (e) { + e.preventDefault(); + }, false); + $('.emptyHistory')[0].addEventListener("touchend", function (e) { + if ($('.emptyHistory').hasClass('animation')) { + that.empty(); + } else { + $('.emptyHistory').addClass('animation'); + } + }, false); + this.$ele.click(function (evt) { + if (evt.target.nodeName === "LI") { + $('.search-input').val(evt.target.innerText).trigger("propertychange"); + $('.search-btn').click(); + } + }); + }, + add: function (text) { + var data = this.options.data; + if (settings.get('searchHistory') === true) { + var pos = data.indexOf(text); + if (pos !== -1) { + data.splice(pos, 1); + } + data.unshift(text); + this.load(); + store.set("history", data); + } + }, + empty: function () { + this.options.data = []; + store.set("history", []); + this.load(); + } + } + + // 开始构建 + var bookMark = new bookMarkFn($('.bookmark'), { data: store.get("bookMark") }) + var searchHistory = new searchHistoryFn($('.history'), { data: store.get("history") }); + + /** + * 更改地址栏URL参数 + * @param {string} param 参数 + * @param {string} value 值 + * @param {string} url 需要更改的URL,不设置此值会使用当前链接 + */ + var changeParam = function (param, value, url) { + url = url || location.href; + var reg = new RegExp("(^|)" + param + "=([^&]*)(|$)"); + var tmp = param + "=" + value; + return url.match(reg) ? url.replace(eval(reg), tmp) : url.match("[?]") ? url + "&" + tmp : url + "?" + tmp; + }; + + // 更改URL,去除后面的参数 + history.replaceState(null, document.title, location.origin + location.pathname); + + // 绑定主页虚假输入框点击事件 + $(".ornament-input-group").click(function () { + $('body').css("pointer-events", "none"); + history.pushState(null, document.title, changeParam("page", "search")); + // 输入框边框动画 + $('.anitInput').remove(); + var ornamentInput = $(".ornament-input-group"); + var top = ornamentInput.offset().top; + var left = ornamentInput.offset().left; + var anitInput = ornamentInput.clone(); + anitInput.attr('class', 'anitInput').css({ + 'position': 'absolute', + 'top': top, + 'left': left, + 'width': ornamentInput.outerWidth(), + 'height': ornamentInput.outerHeight(), + 'pointer-events': 'none' + }) + anitInput.on('transitionend', function (evt) { + if (evt.target !== this) { + return; + } + anitInput.unbind('transitionend'); + $(".input-bg").css("border-color", "var(--dark)"); + anitInput.css("opacity", "0"); + }); + $('body').append(anitInput); + ornamentInput.css('opacity', 0); + if ($(window).data('anitInputFn')) { + $(window).unbind('resize', $(window).data('anitInputFn')); + } + var anitInputFn = function () { + var inputBg = $('.input-bg'); + var scaleX = inputBg.outerWidth() / ornamentInput.outerWidth(); + var scaleY = inputBg.outerHeight() / ornamentInput.outerHeight(); + var translateX = inputBg.offset().left - left - (ornamentInput.outerWidth() - inputBg.outerWidth()) / 2; + var translateY = inputBg.offset().top - top - (ornamentInput.outerHeight() - inputBg.outerHeight()) / 2; + anitInput.css({ + 'transform': 'translateX(' + translateX + 'px) translateY(' + translateY + 'px) scale(' + scaleX + ',' + scaleY + ') translate3d(0,0,0)', + 'transition': '.3s', + 'border-color': 'var(--dark)' + }); + } + $(window).data('anitInputFn', anitInputFn); + $(window).bind('resize', anitInputFn); + // 弹出软键盘 + $(".s-temp").focus(); + // 书签动画 + $(".bookmark").addClass("animation"); + // 显示搜索页 + $(".page-search").show(); + setTimeout(function () { + $(".page-search").on('transitionend', function (evt) { + if (evt.target !== this) { + return; + } + $(".page-search").off('transitionend'); + $('body').css("pointer-events", ""); + }).addClass("animation"); + $(".search-input").val("").focus(); + $(".history").show().addClass("animation"); + $(".input-bg").addClass("animation"); + $(".shortcut").addClass("animation"); + }, 1); + }); + + $(".page-search").click(function (evt) { + if (evt.target === evt.currentTarget) { + history.go(-1); + } + }); + + // 返回按键被点击 + window.addEventListener("popstate", function () { + if ($('.page-search').is(":visible")) { + $('body').css("pointer-events", "none"); + history.replaceState(null, document.title, location.origin + location.pathname); + // 输入框边框动画 + $(window).unbind('resize', $(window).data('anitInputFn')); + var anitInput = $('.anitInput'); + anitInput.css({ + 'transform': '', + 'transition': '.3s', + 'opacity': '', + 'border-color': '' + }); + // 书签动画 + $(".bookmark").removeClass("animation"); + // 隐藏搜索页 + $(".history").removeClass("animation"); + $(".input-bg").css("border-color", "").removeClass("animation"); + $(".shortcut").removeClass("animation"); + $(".page-search").removeClass("animation"); + $(".page-search").on('transitionend', function (evt) { + if (evt.target !== this) { + return; + } + $(".page-search").off('transitionend'); + $(".page-search").hide(); + $('.ornament-input-group').css({ 'transition': 'none', 'opacity': '' }); + anitInput.remove(); + // 搜索页内容初始化 + $(".suggestion").html(""); + $(".search-btn").html("取消"); + $(".shortcut1").show(); + $(".shortcut2,.shortcut3,.empty-input").hide(); + $(".search-input").val(''); + $('.emptyHistory').removeClass('animation'); + $('body').css("pointer-events", ""); + }); + } + }, false); + + $(".suggestion").click(function (evt) { + if (evt.target.nodeName === "SPAN") { + $('.search-input').focus().val($(evt.target).parent().text()).trigger("propertychange"); + return; + } else { + searchText(evt.target.innerText); + } + }); + var qs_ajax = null; + $(".search-input").on("input propertychange", function () { + var that = this; + var wd = $(that).val(); + $(".shortcut1,.shortcut2,.shortcut3").hide(); + if (!wd) { + $(".history").show(); + $(".empty-input").hide(); + $(".search-btn").html("取消"); + $(".shortcut1").show(); + $(".suggestion").hide().html(''); + } else { + $(".history").hide(); + $(".empty-input").show(); + $(".search-btn").html(/^\b(((https?|ftp):\/\/)?[-a-z0-9]+(\.[-a-z0-9]+)*\.(?:com|net|org|int|edu|gov|mil|arpa|asia|biz|info|name|pro|coop|aero|museum|[a-z][a-z]|((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]\d)|\d))\b(\/[-a-z0-9_:\@&?=+,.!\/~%\$]*)?)$/i.test(wd) ? "进入" : "搜索"); + var has_char = escape(wd).indexOf("%u"); + has_char < 0 ? $(".shortcut2").show() : $(".shortcut3").show(); + $.ajax({ + url: "https://suggestion.baidu.com/su", + type: "GET", + dataType: "jsonp", + data: { wd: wd, cb: "sug" }, + timeout: 5000, + jsonpCallback: "sug", + success: function (res) { + if ($(that).val() !== wd) { + return; + } + var data = res.s; + var isStyle = $(".suggestion").html(); + var html = ""; + for (var i = data.length; i > 0; i--) { + var style = ""; + if (isStyle === "") { + style = "animation: fadeInDown both .5s " + (i - 1) * 0.05 + 's"'; + } + html += '
  • ' + data[i - 1].replace(wd, '' + wd + '') + "
  • "; + } + $(".suggestion").show().html(html).scrollTop($(".suggestion")[0].scrollHeight); + } + }); + if (qs_ajax) { + qs_ajax.abort(); + } + if (has_char >= 0) { + qs_ajax = $.ajax({ + url: "https://tool.liumingye.cn/jsonp/?url=" + encodeURIComponent("https://quark.sm.cn/api/qs?query=" + wd + "&ve=4.1.0.132"), + type: "GET", + timeout: 5000, + success: function (res) { + if ($(that).val() !== wd) { + return; + } + var data = res.data; + var html = '
  • 快搜:
  • '; + for (var i = 0, l = data.length; i < l; i++) { + html += '
  • ' + data[i] + '
  • '; + } + $('.shortcut3').html(html); + } + }); + } + } + }); + + $(".empty-input").click(function () { + $(".search-input").focus().val("").trigger("propertychange"); + }); + + $(".shortcut1,.shortcut2").click(function (evt) { + $(".search-input").focus().val($(".search-input").val() + evt.target.innerText).trigger("propertychange"); + }); + + $(".shortcut3").click(function (evt) { + if (evt.target.nodeName === "LI") { + var text = evt.target.innerText; + var data = { + 百科: "https://baike.baidu.com/search?word=%s", + 视频: "https://m.v.qq.com/search.html?act=0&keyWord=%s", + 豆瓣: "https://m.douban.com/search/?query=%s", + 新闻: "http://m.toutiao.com/search/?&keyword=%s", + 图片: "https://m.baidu.com/sf/vsearch?pd=image_content&word=%s&tn=vsearch&atn=page", + 微博: "https://m.weibo.cn/search?containerid=100103type=1&q=%s", + 音乐: "http://m.music.migu.cn/v3/search?keyword=%s", + 知乎: "https://www.zhihu.com/search?q=%s", + 小说: "https://m.qidian.com/search?kw=%s", + 旅游: "https://h5.m.taobao.com/trip/rx-search/list/index.html?&keyword=%s", + 地图: "https://m.amap.com/search/mapview/keywords=%s", + 电视剧: "http://m.iqiyi.com/search.html?key=%s", + 股票: "https://emwap.eastmoney.com/info/search/index?t=14&k=%s", + 汽车: "https://sou.m.autohome.com.cn/zonghe?q=%s" + } + if (data[text]) { + location.href = data[text].replace("%s", $(".search-input").val()); + } + } + }); + + $(".search-btn").click(function () { + var text = $(".search-input").val(); + if ($(".search-btn").text() === "进入") { + !text.match(/^(ht|f)tp(s?):\/\//) && (text = "http://" + text); + history.go(-1); + setTimeout(function () { + location.href = text; + }, 1); + } else { + if (!text) { + $(".search-input").blur(); + history.go(-1); + } else { + searchText(text); + } + } + }); + + $(".search-input").keydown(function (evt) { + // 使用回车键进行搜索 + evt.keyCode === 13 && $(".search-btn").click(); + }); + + // 识别浏览器 + var browserInfo = function () { + if (window.via) { + return 'via'; + } else if (window.mbrowser) { + return 'x'; + } + }; + + // 搜索函数 + function searchText(text) { + if (!text) { + return; + } + searchHistory.add(text); + history.go(-1); + setTimeout(function () { // 异步执行 兼容QQ浏览器 + if (settings.get('engines') === "via") { + window.via.searchText(text); + } else { + location.href = { + baidu: "https://m.baidu.com/s?wd=%s", + quark: "https://quark.sm.cn/s?q=%s", + google: "https://www.google.com/search?q=%s", + bing: "https://cn.bing.com/search?q=%s", + sm: "https://m.sm.cn/s?q=%s", + haosou: "https://m.so.com/s?q=%s", + sogou: "https://m.sogou.com/web/searchList.jsp?keyword=%s", + diy: settings.get('diyEngines') + }[settings.get('engines')].replace("%s", text); + } + }, 1); + } + + //精选页面 + function choice() { + // 构建HTML + var data = { "常用": [{ "hl": "百度", "shl": "百度一下你就知道", "img": "baidu", "url": "m.baidu.com" }, { "hl": "腾讯", "shl": "手机腾讯网", "img": "qq", "url": "xw.qq.com" }, { "hl": "新浪", "shl": "联通世界的超级平台", "img": "sina", "url": "sina.cn" }, { "hl": "谷歌", "shl": "最大的搜索引擎", "img": "google", "url": "www.google.com.hk" }, { "hl": "搜狐", "shl": "懂手机更懂你", "img": "sina", "url": "m.sohu.com" }, { "hl": "网易", "shl": "各有态度", "img": "netease", "url": "3g.163.com" }, { "hl": "起点中文网", "shl": "精彩小说大全", "img": "qidian", "url": "m.qidian.com" }, { "hl": "淘宝", "shl": "淘我喜欢", "img": "taobao", "url": "m.taobao.com" }, { "hl": "京东", "shl": "多好快省品质生活", "img": "jd", "url": "m.jd.com" }, { "hl": "百度贴吧", "shl": "最大的中文社区", "img": "tieba", "url": "c.tieba.baidu.com" }, { "hl": "12306", "shl": "你离世界只差一张票", "img": "12306", "url": "www.12306.cn/mormhweb/" }, { "hl": "飞猪", "shl": "阿里旅行再升级", "img": "flypig", "url": "www.fliggy.com" }, { "hl": "查快递", "shl": "快递查询", "img": "kuaidi", "url": "yz.m.sm.cn/s?from=wy279236&q=%E6%9F%A5%E5%BF%AB%E9%80%92" }, { "hl": "优酷", "shl": "热门视频全面覆盖", "img": "youku", "url": "www.youku.com" }, { "hl": "爱奇艺", "shl": "中国领先的视频门户", "img": "iqiyi", "url": "m.iqiyi.com" }, { "hl": "斗鱼", "shl": "每个人的直播平台", "img": "douyu", "url": "m.douyu.com" }, { "hl": "虎牙", "shl": "中国领先的互动直播平台", "img": "huya", "url": "m.huya.com" }, { "hl": "美团", "shl": "吃喝玩乐全都有", "img": "meituan", "url": "i.meituan.com" }, { "hl": "小米", "shl": "小米官网", "img": "xiaomi", "url": "m.mi.com" }, { "hl": "58同城", "shl": "让生活更简单", "img": "tongcheng", "url": "m.58.com" }, { "hl": "九游", "shl": "发现更多好游戏", "img": "game_9", "url": "a.9game.cn" }, { "hl": "虎扑", "shl": "最篮球的世界", "img": "hupu", "url": "m.hupu.com" }], "科技": [{ "hl": "知乎", "shl": "知识分享社区", "img": "zhihu", "url": "www.zhihu.com" }, { "hl": "36kr", "shl": "互联网创业资讯", "img": "kr36", "url": "36kr.com" }, { "hl": "少数派", "shl": "高质量应用推荐", "img": "sspai", "url": "sspai.com" }, { "hl": "爱范儿", "shl": "泛科技媒体", "img": "ifanr", "url": "www.ifanr.com" }, { "hl": "ZEALER", "shl": "电子产品评测网站", "img": "zealer", "url": "m.zealer.com" }, { "hl": "瘾科技", "shl": "科技新闻和测评", "img": "engadget", "url": "cn.engadget.com" }, { "hl": "虎嗅网", "shl": "科技媒体", "img": "huxiu", "url": "m.huxiu.com" }, { "hl": "品玩", "shl": "有品好玩的科技", "img": "pingwest", "url": "www.pingwest.com" }, { "hl": "简书", "shl": "优质原创的内容社区", "img": "jianshu", "url": "jianshu.com" }, { "hl": "V2EX", "shl": "关于分享和探索的地方", "img": "v2ex", "url": "www.v2ex.com" }], "生活": [{ "hl": "豆瓣", "shl": "一个神奇的社区", "img": "douban", "url": "m.douban.com" }, { "hl": "轻芒杂志", "shl": "生活兴趣杂志", "img": "qingmang", "url": "qingmang.me/magazines/" }, { "hl": "ONE", "shl": "韩寒监制", "img": "one", "url": "m.wufazhuce.com" }, { "hl": "蚂蜂窝", "shl": "旅游攻略社区", "img": "mafengwo", "url": "m.mafengwo.cn" }, { "hl": "小红书", "shl": "可以买到国外的好东西", "img": "xiaohongshu", "url": "www.xiaohongshu.com" }, { "hl": "什么值得买", "shl": "应该能省点钱吧", "img": "smzdm", "url": "m.smzdm.com" }, { "hl": "淘票票", "shl": "不看书,就看几场电影吧", "img": "taopiaopiao", "url": "dianying.taobao.com" }, { "hl": "下厨房", "shl": "是男人就学做几道菜", "img": "xiachufang", "url": "m.xiachufang.com" }, { "hl": "ENJOY", "shl": "高端美食团购", "img": "enjoy", "url": "enjoy.ricebook.com" }], "工具": [{ "hl": "豌豆荚设计", "shl": "发现最优美的应用", "img": "wandoujia", "url": "m.wandoujia.com/award" }, { "hl": "喜马拉雅听", "shl": "音频分享平台", "img": "ximalaya", "url": "m.ximalaya.com" }, { "hl": "第2课堂", "shl": "守护全国2亿青少年健康成长", "img": "2-class", "url": "m.2-class.com" }, { "hl": "Mozilla", "shl": "学习web开发的最佳实践", "img": "mozilla", "url": "developer.mozilla.org/zh-CN" }, { "hl": "网易公开课", "shl": "人chou就要多学习", "img": "netease_edu_study", "url": "m.open.163.com" }, { "hl": "石墨文档", "shl": "可多人实时协作的云端文档", "img": "sm", "url": "shimo.im" }] }, + html = '
      正在加载页面中...
    '); + + setTimeout(function () { + $(".page-bg").addClass("animation"); + $(".page-choice").addClass("animation"); + }, 1); + + var dom = $(".choice-ul li"); + var width = dom.width(); + $(".active-span").css("transform", "translate3d(" + (width / 2 - 9) + "px,0,0)"); + + // 动画完成后加载,防止过渡动画卡顿 + $(".page-choice").on("transitionend", function (evt) { + // 过滤掉子元素 + if (evt.target !== this) { + return; + } + $(".page-choice").off("transitionend"); + $('.choice-swipe').find('.swiper-wrapper').html(contentHtml); + // 绑定事件 + var last_page = 0; + + require(['Swiper'], function (Swiper) { + var swiper = new Swiper('.choice-swipe', { + on: { + slideChange: function () { + var i = this.activeIndex; + dom.eq(last_page).removeClass("current"); + $(".active-span").css("transform", "translate3d(" + (width * i + width / 2 - 9) + "px,0,0)"); + dom.eq(i).addClass("current"); + last_page = i; + } + } + }); + + // 绑定TAB点击事件 + $(".choice-ul").click(function (evt) { + if (evt.target.nodeName == "LI") { + swiper.slideTo($(evt.target).index()); + } + }); + }) + + // 绑定关闭按钮事件 + $(".bottom-close").click(function () { + $(".page-choice").css('pointer-events', 'none').removeClass("animation"); + $(".page-bg").removeClass("animation"); + $(".page-choice").on('transitionend', function (evt) { + if (evt.target !== this) { + return; + } + $(".page-choice").remove(); + $(".page-bg").remove(); + }); + }); + + // 天气 + $.ajax({ + url: "https://jsonp.afeld.me/?callback=weather&url=https%3A%2F%2Fai.sm.cn%2Fquark%2F1%2Fapi%3Fformat%3Djson%26method%3Dweather", + type: "get", + dataType: "jsonp", + success: function (res) { + var data = res.data; + var color1 = data.color1; + var color2 = data.color2; + var location = data.location; + var temp = data.temp; + var air = data.air; + var weather = data.weather; + var html = '
    ' + temp + '
    ' + weather + '
    ' + location + ' · ' + air + '
    '; + $('.weather').html(html).css("background-image", "linear-gradient(-33deg," + color1 + " 0%," + color2 + " 99%)"); + } + }) + + // 热搜榜 | 今日高分影荐 | 知乎热榜 + $.ajax({ + url: "https://jsonp.afeld.me/?url=https%3A%2F%2Fai.sm.cn%2Fquark%2F1%2Fapi%3Fformat%3Djson%26method%3Dnewchosen", + type: "get", + dataType: "jsonp", + success: function (res) { + var data = res.data; + for (var i = 0, l = data.length; i < l; i++) { + if (data[i].name === "今日冷知识") { + $('.trivia').attr('href', data[i].link); + $('.trivia').find('.shl').text(data[i].value.subtitle); + } else if (data[i].name === "热搜榜") { + var html = ''; + for (var ii = 0, ll = data[i].value.length; ii < ll; ii++) { + html += '
    ' + (ii + 1) + '
    ' + data[i].value[ii].title + '
    ' + data[i].value[ii].hot + '
    '; + } + $('.news-list').html(html); + } else if (data[i].name === "今日高分影荐") { + var html = ''; + for (var ii = 0, ll = data[i].value.content.length; ii < ll; ii++) { + html += '
    ' + data[i].value.content[ii].title + '
    ' + data[i].value.content[ii].duration + '
    '; + } + $('.video-list').find('.swiper-wrapper').html(html); + require(['Swiper'], function (Swiper) { + var swiper = new Swiper('.video-swipe', { + loop: true, + autoplay: { + delay: 5000, + disableOnInteraction: false, + } + }); + }) + } else if (data[i].name === "知乎热榜") { + var html = ''; + for (var ii = 0, ll = data[i].value.length; ii < ll; ii++) { + html += '
    ' + data[i].value[ii].title + '
    '; + } + $('.audio-list').find('.swiper-wrapper').html(html); + require(['Swiper'], function (Swiper) { + var swiper = new Swiper('.audio-swipe', { + allowTouchMove: false, + height: 54, + direction: 'vertical', + slidesPerView: 2, + slidesPerGroup: 2, + loop: true, + autoplay: { + delay: 5000, + disableOnInteraction: false, + }, + }); + }) + } + } + + } + }); + + // 今日份壁纸 + $.ajax({ + url: "https://jsonp.afeld.me/?callback=&url=https%3A%2F%2Fcn.bing.com%2FHPImageArchive.aspx%3Fformat%3Djs%26cc%3Djp%26idx%3D0%26n%3D1", + type: "get", + dataType: "jsonp", + success: function (res) { + var url = 'https://www.bing.com' + res.images[0].url.replace('1920x1080', '1080x1920'); + $('.back-img').css('background-image', 'url(' + url + ')') + $('.back-btn').show().click(function () { + settings.set('wallpaper', url); + }); + } + }); + + }) + } + + $(".logo").click(() => { + var browser = browserInfo(); + if (browser === 'via') { + location.href = "folder://"; + } else if (browser === 'x') { + location.href = "x:bm?sort=default"; + } + }).longPress(() => { + var data = [{ "title": "搜索引擎", "type": "select", "value": "engines", "data": [{ "t": "夸克搜索", "v": "quark" }, { "t": "跟随Via浏览器", "v": "via" }, { "t": "百度搜索", "v": "baidu" }, { "t": "谷歌搜索", "v": "google" }, { "t": "必应搜索", "v": "bing" }, { "t": "神马搜索", "v": "sm" }, { "t": "好搜搜索", "v": "haosou" }, { "t": "搜狗搜索", "v": "sogou" }, { "t": "自定义", "v": "diy" }] }, { "title": "设置壁纸", "value": "wallpaper" }, { "title": "设置LOGO", "value": "logo" }, { "title": "恢复默认壁纸和LOGO", "value": "delLogo" }, { "title": "图标颜色", "type": "select", "value": "bookcolor", "data": [{ "t": "深色图标", "v": "black" }, { "t": "浅色图标", "v": "white" }] }, { "title": "主页样式细圆", "type": "checkbox", "value": "styleThin" }, { "title": "夜间模式", "type": "checkbox", "value": "nightMode" }, { "title": "记录搜索历史", "type": "checkbox", "value": "searchHistory" }, { "type": "hr" }, { "title": "导出主页数据", "value": "export" }, { "title": "导入主页数据", "value": "import" }, { "type": "hr" }, { "title": "Github", "value": "openurl", "description": "https://github.com/liumingye/quarkHomePage" }, { "title": "关于", "description": "当前版本:" + app.version }]; + var html = '
      '; + for (var json of data) { + if (json.type === 'hr') { + html += `
    • `; + } else { + html += `
    • +
      +

      ${json.title}

      + ${json.description ? `
      ${json.description}
      ` : ''} +
      `; + if (json.type === 'select') { + html += ``; + } else if (json.type === 'checkbox') { + html += ``; + } + html += `
    • `; + } + } + html += '
    '; + $('#app').append(html); + + $(".page-settings").show(); + $(".page-settings").addClass('animation'); + + var browser = browserInfo(); + if (browser !== 'via') { // 只有VIA浏览器才能显示 + $('option[value=via]').hide(); + } + + $(".set-option .set-select").map(function () { + $(this).val(settings.get($(this).parent().data('value'))); + }); + + $(".set-option .set-checkbox").map(function () { + $(this).prop("checked", settings.get($(this).parent().data('value'))); + }); + + $(".set-back").click(function () { + $(".page-settings").css("pointer-events", "none").removeClass("animation"); + $(".page-settings").on('transitionend', function (evt) { + if (evt.target !== this) { + return; + } + $(".page-settings").remove(); + }); + }); + + $(".set-option").click(function (evt) { + var $this = $(this); + var value = $this.data("value"); + if (value === "wallpaper") { + openFile(function () { + var file = this.files[0]; + var reader = new FileReader(); + reader.onload = function () { + settings.set('wallpaper', this.result); + }; + reader.readAsDataURL(file); + }); + } else if (value === "logo") { + openFile(function () { + var file = this.files[0]; + var reader = new FileReader(); + reader.onload = function () { + settings.set('logo', this.result); + }; + reader.readAsDataURL(file); + }); + } else if (value === "delLogo") { + settings.set('wallpaper', ''); + settings.set('logo', ''); + settings.set('bookcolor', 'black'); + location.reload(); + } else if (value === "openurl") { + open($this.find('.set-description').text()); + } else if (value === "export") { + var oInput = $(''); + oInput.val('{"bookMark":' + JSON.stringify(bookMark.getJson()) + '}'); + //oInput.val('{"bookMark":' + JSON.stringify(bookMark.getJson()) + ',"setData":' + JSON.stringify(settings.getJson()) + '}'); + document.body.appendChild(oInput[0]); + console.log(store.get('bookMark')); + oInput.select(); + document.execCommand("Copy"); + alert('已复制到剪贴板,请粘贴保存文件。'); + oInput.remove(); + } else if (value === "import") { + var data = prompt("在这粘贴主页数据"); + try { + data = JSON.parse(data); + store.set("bookMark", data.bookMark); + store.set("setData", data.setData); + alert("导入成功!"); + location.reload(); + } catch (e) { + alert("导入失败!"); + } + } else if (evt.target.className !== 'set-select' && $this.find('.set-select').length > 0) { + $.fn.openSelect = function () { + return this.each(function (idx, domEl) { + if (document.createEvent) { + var event = document.createEvent("MouseEvents"); + event.initMouseEvent("mousedown", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); + domEl.dispatchEvent(event); + } else if (element.fireEvent) { + domEl.fireEvent("onmousedown"); + } + }); + } + $this.find('.set-select').openSelect(); + } else if (evt.target.className !== 'set-checkbox' && $this.find('.set-checkbox').length > 0) { + $this.find('.set-checkbox').prop("checked", !$this.find('.set-checkbox').prop("checked")).change(); + } + }); + + $(".set-select").change(function () { + var dom = $(this), + item = dom.parent().data("value"), + value = dom.val(); + if (item === "engines" && value === "diy") { + var engines = prompt("输入搜索引擎网址,(用“%s”代替搜索字词)"); + console.log(engines); + if (engines) { + settings.set('diyEngines', engines); + } else { + dom.val(settings.get('engines')); + return false; + } + } + // 保存设置 + settings.set(item, value); + }); + + $(".set-checkbox").change(function () { + var dom = $(this), + item = dom.parent().data("value"), + value = dom.prop("checked"); + // 应用设置 + if (item === 'styleThin' && value === true) { + $("body").addClass('styleThin'); + } else { + $("body").removeClass('styleThin'); + } + // 保存设置 + settings.set(item, value); + }); + + }); + + // 下滑进入搜索 + require(['touchSwipe'], function () { + $(".page-home").swipe({ + swipeStatus: function (event, phase, direction, distance, duration, fingerCount, fingerData) { + if ($('.delbook').length !== 0) { + return; + } + if (phase === 'start') { + this.height = $(document).height(); + } else if (phase === 'move') { + var sliding = Math.max(fingerData[0].end.y - fingerData[0].start.y, 0); + $('.logo').attr("disabled", true).css({ 'opacity': 1 - (sliding / this.height) * 4, 'transition-duration': '0ms' }); + $('.ornament-input-group').css({ 'transform': 'translate3d(0,' + Math.min((sliding / this.height) * 80, 30) + 'px,0)', 'transition-duration': '0ms' }); + $('.bookmark').attr("disabled", true).css({ 'opacity': 1 - (sliding / this.height) * 4, 'transform': 'scale(' + (1 - (sliding / this.height) * .3) + ')', 'transition-duration': '0ms' }); + } else if (phase === 'end' || phase === 'cancel') { + $('.logo').removeAttr("disabled style"); + $('.bookmark').removeAttr("disabled style"); + if (distance >= 100 && direction === "down") { + $('.ornament-input-group').css("transform", "").click(); + $('.logo,.bookmark,.anitInput').css('opacity', '0'); + $('.input-bg').css('border-color', 'var(--dark)'); + setTimeout(function () { + $('.logo,.bookmark').css('opacity', ''); + }, 300); + } else { + $('.ornament-input-group').removeAttr("style"); + } + } + } + }); + }) + +}) \ No newline at end of file diff --git a/tools/quark/sw.js b/tools/quark/sw.js new file mode 100644 index 0000000..8ecc244 --- /dev/null +++ b/tools/quark/sw.js @@ -0,0 +1,15 @@ +importScripts('https://g.alicdn.com/kg/workbox/4.3.1/workbox-sw.js'); +// 缓存静态资源 +workbox.routing.registerRoute(/([\/|.|\w|\s|-])*\.(?:png|gif|jpg|jpeg|webp|svg|ico|ttf|woff|woff2|eot|otf|js|css)/, new workbox.strategies.CacheFirst({ + cacheName: 'static-resources', + plugins: [new workbox.expiration.Plugin({ + maxEntries: 500, // 最大保存项目 + maxAgeSeconds: 1 * 24 * 60 * 60, // 缓存 1 天 + purgeOnQuotaError: true + })] +})); +// 缓存主页 +workbox.precaching.precacheAndRoute([{ + "revision": "15990", + "url": "index.html" +}], {}); diff --git a/tools/swing-girl/index.html b/tools/swing-girl/index.html new file mode 100644 index 0000000..f62d069 --- /dev/null +++ b/tools/swing-girl/index.html @@ -0,0 +1,51 @@ + + + + + + + 荡秋千 + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/xml/local-search.xml b/xml/local-search.xml new file mode 100644 index 0000000..d7d0c01 --- /dev/null +++ b/xml/local-search.xml @@ -0,0 +1,45 @@ + + + {% if posts %} + {% for post in posts.toArray() %} + {% if post.indexing == undefined or post.indexing %} + + {{ post.title }} + + {{ [url, post.path] | urlJoin | uriencode }} + {% if content %} + + {% endif %} + {% if post.categories and post.categories.length>0 %} + + {% for cate in post.categories.toArray() %} + {{ cate.name }} + {% endfor %} + + {% endif %} + {% if post.tags and post.tags.length>0 %} + + {% for tag in post.tags.toArray() %} + {{ tag.name }} + {% endfor %} + + {% endif %} + + {% endif %} + {% endfor %} + {% endif %} + {% if pages %} + {% for page in pages.toArray() %} + {% if post.indexing == undefined or post.indexing %} + + {{ page.title }} + + {{ [url, post.path] | urlJoin | uriencode }} + {% if content %} + + {% endif %} + + {% endif %} + {% endfor %} + {% endif %} +