diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000000000000000000000000000000000..6f3a2913e199cebe9ace75cf7e5a2818da27fbd3 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "liveServer.settings.port": 5501 +} \ No newline at end of file diff --git a/README.md b/README.md index 2734d8299fcba95d22d771fd11bd455a2903a482..7bc0c1cfe465bc13b8d00dd97cd56cee1ed78150 100644 --- a/README.md +++ b/README.md @@ -1,137 +1,9 @@ - -
- -
-
- -

- Pear Admin Layui -

-

- 开 箱 即 用 的 前 后 端 解 决 方 案 -

- - [预 览](http://layui.pearadmin.com) | [官 网](http://www.pearadmin.com/) | [文档](http://www.pearadmin.com/doc) - -
- -

- - Pear Admin Layui Version - - - Jquery Version - - - Layui Version - -

- -
- -
- -
-
- -### 项目介绍 - -

- -Pear Admin 是一款开箱即用的前端开发模板,扩展Layui原生UI样式,集成第三方开源组件,提供便捷快速的开发方式,延续 Admin 的设计规范。 - -异步 Ajax 的菜单构建,完善的多标签页,单标签页的共存,丰富自由的布局方式,为研发者提供相对完善的前端解决方案。 - -若你需要更多版本 (Java Go Think 等),请前往 [Pear Admin 社区](https://gitee.com/pear-admin) - -项目不定时更新,建议 Star watch 一份 - -

- -### Branch 说明 - -

- -main: 最新的功能,主要维护的版本。 - -package: 通过 gulp.js 提供打包构建,适合对资源加载和编译速度有要求的项目。 - -i18n: 集成 translate.js 提供 i18n 国际化功能的版本。 - -

- -### 项目结构 - -``` -Pear Admin Layui -│ -├─admin 资源 -│ │ -│ ├─css 样式 -│ │ -│ ├─data 数据 -│ │ -│ └─images 图片 -│ -├─component 组件 -│ │ -│ ├─code 设计器 -│ │ -│ ├─layui 核心框架 -│ │ -│ └─pear 扩展组件 -│ -├─config 配置 -│ │ -│ ├─pear.config.yml 配置文件 -│ │ -│ └─pear.config.json 配置文件 -│ -├─view 视图 -│ │ -│ ├─console 首页 -│ │ -│ ├─document 文档 -│ │ -│ ├─echarts 图表 -│ │ -│ ├─error 错误页 -│ │ -│ ├─result 结果页 -│ │ -│ └─system 系统管理 -│ -├─index.html 入口 -│ -└─login.html 登录 - -``` - -### 项目截图 - -| | | -|---------------------|---------------------| -|![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/221841_9d135fe6_4835367.png "屏幕截图.png") | ![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/221901_b5282417_4835367.png "屏幕截图.png") | -|![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/221920_84f71864_4835367.png "屏幕截图.png")| ![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/221953_eacb1578_4835367.png "屏幕截图.png") | -|![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/222007_334b5411_4835367.png "屏幕截图.png")| ![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/222020_ed5e67ac_4835367.png "屏幕截图.png") | -|![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/222105_9a1036c6_4835367.png "屏幕截图.png")| ![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/222116_50936543_4835367.png "屏幕截图.png") | -|![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/222150_6251bb30_4835367.png "屏幕截图.png")| ![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/222206_777ccf74_4835367.png "屏幕截图.png") | -|![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/222315_712d2942_4835367.png "屏幕截图.png")|![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/222345_2629d03c_4835367.png "屏幕截图.png") | -|![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/222410_e83792fa_4835367.png "屏幕截图.png")| ![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/222431_5b884442_4835367.png "屏幕截图.png") | -|![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/222453_b02034b2_4835367.png "屏幕截图.png")| ![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/222508_fec3ad5e_4835367.png "屏幕截图.png") | -|![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/222533_abda701e_4835367.png "屏幕截图.png")|![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/222547_db49f0b8_4835367.png "屏幕截图.png") | -|![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/222611_7ffd378b_4835367.png "屏幕截图.png")|![输入图片说明](https://images.gitee.com/uploads/images/2021/0331/222625_55e092f3_4835367.png "屏幕截图.png") | - -### 开源共建 - -

- -1. 欢迎提交 [pull request](https://gitee.com/pear-admin/Pear-Admin-Layui/pulls),注意对应提交对应 `main` 分支 - -2. 欢迎提交 [issue](https://gitee.com/pear-admin/Pear-Admin-Layui/issues),请写清楚遇到问题的原因、开发环境、复显步骤。 - -

- -感谢每一位贡献代码的朋友。 - -如果对您有帮助,您可以点右上角 💘Star💘 支持 +### 更新日志 + +- [优化] 移动端 collapse 样式,由圆形调整为正方形。 +- [重构] frame.js 组件,重命名为 page.js, 移除 iframe 嵌套。 +- [重构] tab.js 组件,重命名为 tabPage.js, 移除 iframe 嵌套。 +- [新增] admin.js 模块 setConfigurationProvider 方法,用于自定义 configuration 来源。 +- [优化] admin.js 模块 logout 方法,返回值由 boolean 调整为 Promise 类型。 +- [新增] 夜间模式适配,目前已完成整体框架兼容,layui 待完成。 +- [新增] menuSearch.js 模块,原有的菜单搜索功能。 \ No newline at end of file diff --git a/admin/css/admin.css b/admin/css/admin.css index 60703fed157680f6fb3bfe9240eb26dde29da5be..6d3948abef40eeda9e113f8ad5aa8bdad475262e 100644 --- a/admin/css/admin.css +++ b/admin/css/admin.css @@ -4,16 +4,16 @@ body, height: 100%; } -.pear-admin .layui-header, .pear-admin .layui-body, .pear-admin .layui-logo, .pear-admin .layui-side, +.pear-admin .layui-header, .pear-admin .layui-header .layui-layout-left { transition: all .3s; } .pear-admin.banner-layout .layui-side { - top: 60px!important; + top: 60px !important; } .pear-admin.banner-layout .layui-side .layui-logo { @@ -25,38 +25,15 @@ body, } .pear-admin.banner-layout .layui-side .layui-side-scroll { - height: 100%!important; + height: 100% !important; } .pear-admin.banner-layout .layui-side .layui-side-scroll { - height: 100%!important; -} - -.pear-admin .layui-header.dark-theme .layui-layout-control .layui-this *{ - background-color: rgba(0,0,0,.1)!important; + height: 100% !important; } -.pear-admin.banner-layout .layui-header { - z-index: 99999; - width: 100%; - left: 0px; -} - -.pear-admin.banner-layout .layui-header .layui-layout-left { - left: 230px; -} - -.pear-admin.banner-layout .layui-header .layui-logo .title { - top: 2px; -} - -.pear-admin.banner-layout .layui-header .layui-layout-control { - display: inline-block; - left: 370px; -} - -.pear-admin.banner-layout .layui-header.dark-theme { - box-shadow: 2px 0 6px rgb(0 21 41 / 35%); +.pear-admin .layui-header.dark-theme .layui-layout-control .layui-this * { + background-color: rgba(0, 0, 0, .1) !important; } .pear-admin .layui-header .layui-logo { @@ -79,7 +56,6 @@ body, left: 230px; width: calc(100% - 230px); background-color: white; - border-bottom: 1px solid whitesmoke; } .pear-admin .layui-layout-control { @@ -92,12 +68,13 @@ body, } .pear-admin .layui-logo { - width: 230px; - height: 59px; - line-height: 59px; + height: 60px; + line-height: 60px; + border-bottom: 1px solid rgba(0, 0, 0, .12); + box-sizing: border-box; position: relative; background-color: #28333E; - border-bottom: 1px solid rgba(0, 0, 0, .12); + width: 230px; } .pear-admin .layui-logo img { @@ -108,7 +85,7 @@ body, .pear-admin .layui-logo .title { font-size: 21px; font-weight: 550; - color: #5FB878; + color: var(--global-primary-color); position: relative; top: 5px; margin-left: 5px; @@ -143,9 +120,16 @@ body, } .pear-admin .layui-body { - left: 230px; bottom: 0px; padding-bottom: 0px; + background-color: whitesmoke; + height: calc(100% - 60px); + overflow-y: auto; + left: 230px; +} + +.pear-admin .layui-body>div { + height: 100%; } .pear-admin .layui-layout-left { @@ -154,8 +138,8 @@ body, .pear-admin .layui-footer { position: absolute; - display: flex; - justify-content: space-between; + display: flex; + justify-content: space-between; left: 230px; background: #fff; border-top: 1px solid #F2F2F2; @@ -172,6 +156,61 @@ body, display: none; } +/** 通栏布局 */ + +.pear-admin.banner-layout .layui-header { + left: 0px; + z-index: 99999; + width: 100%; +} + +.pear-admin.banner-layout .layui-header.light-theme { + border-bottom: 1px solid whitesmoke; +} + +.pear-admin.banner-layout .layui-header.auto-theme, +.pear-admin.banner-layout .layui-header.dark-theme { + box-shadow: 0 1px 4px rgba(0, 0, 0, .1); +} + +.pear-admin.banner-layout .layui-header .layui-layout-left { + left: 230px; +} + +.pear-admin.banner-layout .layui-header .layui-logo .title { + top: 2px; +} + +.pear-admin.banner-layout .layui-header .layui-layout-control { + display: inline-block; + left: 370px; +} + +/** 头部主题 */ +.pear-admin .auto-theme { + background-color: var(--global-primary-color); + color: white; +} + +.pear-admin .auto-theme .layui-logo { + background-color: var(--global-primary-color); + border: none; +} + +.pear-admin .auto-theme .layui-logo .title { + color: white; +} + +.pear-admin .auto-theme .layui-nav * { + color: white !important; +} +.pear-admin .auto-theme .layui-nav.pear-nav-control .layui-this * { + color: black !important; +} +.pear-admin .auto-theme .layui-nav .layui-nav-child a { + color: #5f5f5f !important; + color: rgba(0,0,0,.8) !important; +} /** 收缩布局 */ .pear-mini .layui-side .layui-logo .title { display: none; @@ -206,18 +245,14 @@ body, display: none; } -.pear-mini .bottom-nav li { - width: 100% !important; -} - .pear-mini .layui-side-scroll { height: calc(100% - 60px); } .pear-admin .layui-header .layui-nav .layui-nav-bar { top: 0px !important; + background-color: var(--global-primary-color); height: 2px !important; - background-color: #5FB878; } .pear-admin .layui-header .layui-nav .layui-this:after { @@ -229,18 +264,18 @@ body, } .pear-collapsed-pe { - display: none; - width: 50px; - position: absolute; - z-index: 400000; - bottom: 30px; right: 30px; - background-color: #5FB878 !important; - height: 50px; - line-height: 50px; + bottom: 30px; + z-index: 400000; + position: absolute; + background-color: var(--global-primary-color) !important; + box-shadow: 2px 0 6px rgba(0, 21, 41, .20); text-align: center; - border-radius: 50px; - box-shadow: 2px 0 6px rgba(0, 21, 41, .35); + border-radius: 4px; + line-height: 50px; + display: none; + height: 50px; + width: 50px; } .pear-collapsed-pe a { @@ -278,10 +313,6 @@ body, padding-right: 10px; } - .pear-mini .bottom-nav { - display: none; - } - .pear-mini .layui-side-scroll { height: calc(100% - 62px); } @@ -363,8 +394,8 @@ body, } .layer-anim-right { - -webkit-animation: am-horizontal-roll_show .6s ease-out; - animation: am-horizontal-roll_show .6s ease-out; + -webkit-animation: am-horizontal-roll_show .5s ease-out; + animation: am-horizontal-roll_show .5s ease-out; } @@ -390,8 +421,8 @@ body, color: whitesmoke; } -.dark-theme.layui-header li>a{ - color: whitesmoke!important; +.dark-theme.layui-header li>a { + color: whitesmoke !important; } .dark-theme.layui-header .layui-logo { @@ -445,9 +476,9 @@ body, width: 100%; height: 100%; padding: 4px; - top: -5px; - left: -5px; - border: #5FB878 2px solid; + top: -6px; + left: -6px; + border: var(--global-primary-color) 2px solid; opacity: 1; border-radius: 4px; } @@ -481,77 +512,133 @@ body, } .select-color .select-color-content .select-color-item { - background-color: gray; - width: 30px; - height: 30px; - border-radius: 3px; - float: left; - margin-left: 20px; + width: 24px; + height: 24px; color: white; - font-size: 18px; - text-align: center; + margin-left: 24px; + border-radius: 3px; + background-color: gray; box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .15); - line-height: 30px; + text-align: center; + line-height: 24px; + font-size: 14px; + float: left; } .message .layui-tab-title li:not(:last-child) { border-right: 1px solid #eee; } -/* 搜索面板 */ -.menu-search-content .layui-input { - padding-left: 30px; +/** 首屏加载 */ +.loader-wrapper { + position: fixed; + width: 100%; + height: 100%; + background-color: whitesmoke; + z-index: 9999999; } -.menu-search-content { - display: flex; - flex-wrap: wrap; - justify-content: center; +.loader { + width: 50px; + height: 50px; + margin: 30px auto 40px; + margin-top: 20%; + position: relative; + z-index: 999999; + background-color: whitesmoke; } -.menu-search-input-wrapper { - width: 100%; - padding: 15px 15px; +.loader:before { + content: ""; + width: 50px; + height: 7px; + border-radius: 50%; + background: #000; + opacity: 0.1; + position: absolute; + top: 59px; + left: 0; + animation: shadow .5s linear infinite; } -.menu-search-no-data { - display: flex; - justify-content: center; - width: 100%; - height: 122px; - align-items: center; +.loader:after { + content: ""; + width: 50px; + height: 50px; + border-radius: 3px; + background-color: var(--global-primary-color); + position: absolute; + top: 0; + left: 0; + animation: loading .5s linear infinite; } -.menu-search-list { - width: 100%; - padding: 5px 15px; -} +@-webkit-keyframes loading { + 17% { + border-bottom-right-radius: 3px; + } -.menu-search-list li { - position: relative; - display: flex; - justify-content: space-between; - align-items: center; - flex-wrap: nowrap; - height: 50px; - margin-bottom: 8px; - padding: 0px 10px; - color: currentColor; - font-size: 14px; - border-radius: 4px; - box-shadow: 0 1px 3px #d4d9e1; - cursor: pointer; - background-color: #fff; + 25% { + transform: translateY(9px) rotate(22.5deg); + } + + 50% { + transform: translateY(18px) scale(1, 0.9) rotate(45deg); + border-bottom-right-radius: 40px; + } + + 75% { + transform: translateY(9px) rotate(67.5deg); + } + + 100% { + transform: translateY(0) rotate(90deg); + } } -.menu-search-list li:hover { - background-color: #5FB878; - color: white; +@keyframes loading { + 17% { + border-bottom-right-radius: 3px; + } + + 25% { + transform: translateY(9px) rotate(22.5deg); + } + + 50% { + transform: translateY(18px) scale(1, 0.9) rotate(45deg); + border-bottom-right-radius: 40px; + } + + 75% { + transform: translateY(9px) rotate(67.5deg); + } + + 100% { + transform: translateY(0) rotate(90deg); + } } -.menu-search-list li.this { - background-color: #5FB878; - color: white; +@-webkit-keyframes shadow { + + 0%, + 100% { + transform: scale(1, 1); + } + + 50% { + transform: scale(1.2, 1); + } } -/* 搜索面板结束 */ \ No newline at end of file +@keyframes shadow { + + 0%, + 100% { + transform: scale(1, 1); + } + + 50% { + transform: scale(1.2, 1); + } +} \ No newline at end of file diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css new file mode 100644 index 0000000000000000000000000000000000000000..9c507642c0ebd969eb2812ec100fc0ee909f09e2 --- /dev/null +++ b/admin/css/admin.dark.css @@ -0,0 +1,308 @@ +/** loader */ +.pear-admin-dark .loader-wrapper, +.pear-admin-dark .loader-wrapper .loader { + background-color: #141414; +} + +/** layout */ +.pear-admin-dark .layui-layout { + background-color: #141414; +} + +/** header */ +.pear-admin-dark .layui-header, +.pear-admin-dark .layui-header .layui-logo { + background-color: #141414 !important; + box-shadow: none !important; + border: none !important; +} +.pear-admin-dark .layui-header.auto-theme, +.pear-admin-dark .layui-header.auto-theme .layui-logo { + background-color: var(--global-primary-color) !important; +} + +.pear-admin-dark .layui-header.auto-theme .layui-logo .title { + color: #ffffff !important; +} + +.pear-admin-dark .layui-header { + border: 1px solid rgba(0, 0, 0, .40) !important; +} + +.pear-admin-dark .layui-header .layui-nav * { + color: #ffffff !important; +} + +.pear-admin-dark .layui-header .layui-nav .layui-nav-child { + box-shadow: 0 3px 4px rgba(0, 0, 0, .6) !important; + background-color: #141414; + border-color: #141414; +} + +.pear-admin-dark .layui-header .layui-nav .layui-nav-child dd > a:hover { + background-color: #141414 !important; +} + +.pear-admin-dark .layui-header .pear-nav-control .layui-this a{ + background-color: #0c0c0c !important; +} + +.pear-admin-dark .auto-theme .layui-logo .title{ + color: var(--global-primary-color) !important; +} + +/** side */ +.pear-admin-dark .layui-side { + box-shadow: 0 3px 4px rgba(0, 0, 0, .6) !important; +} + +.pear-admin-dark .layui-logo { + border-color: rgba(0, 0, 0, .30) !important; +} + +.pear-admin-dark .layui-side .layui-logo, +.pear-admin-dark .layui-side .layui-side-scroll, +.pear-admin-dark .layui-side .layui-side-scroll .layui-nav-tree{ + background-color: #141414 !important; +} + +.pear-admin-dark .layui-side .layui-side-scroll .layui-nav-tree .layui-nav-child { + background-color: rgba(0,0,0,.3)!important; +} + +.pear-admin-dark .layui-side .layui-side-scroll .layui-nav .layui-nav-item a, +.pear-admin-dark .layui-side .layui-side-scroll .layui-nav .layui-nav-item a > .layui-nav-more { + color: rgba(255,255,255,.7) !important; +} + +.pear-admin-dark .layui-side .layui-side-scroll .layui-nav .layui-nav-child dd.layui-this a, +.pear-admin-dark .layui-side .layui-side-scroll .layui-nav .layui-nav-itemed > a, +.pear-admin-dark .layui-side .layui-side-scroll .layui-nav .layui-nav-itemed > a > .layui-nav-more, +.pear-admin-dark .layui-side .layui-side-scroll .layui-nav .layui-nav-item > a:hover { + color: #ffffff !important; +} + +/** body */ +.pear-admin-dark .layui-body, +.pear-admin-dark .layui-body .pear-tab-page-loading, +.pear-admin-dark .layui-body .pear-page-loading { + background-color: #0a0a0a !important; +} + +.pear-admin-dark .layui-body .layui-tab .layui-tab-title, +.pear-admin-dark .layui-body .layui-tab .layui-tab-title li, +.pear-admin-dark .layui-body .layui-tab .layui-tab-control li { + background-color: #141414 !important; + border-color:rgba(0, 0, 0, .30) !important; + color: #ffffff; +} + +.pear-admin-dark .layui-body .layui-tab .layui-tab-title li > span:first-child { + background-color: #434343; +} + +.pear-admin-dark .layui-body .layui-tab .layui-nav-child.layui-anim { + border-color: #141414; + background-color: #141414 !important; +} + +.pear-admin-dark .layui-body .layui-tab .layui-nav-child.layui-anim a { + color: #ffffff; +} + +.pear-admin-dark .layui-body .layui-tab .layui-nav-child.layui-anim a:hover { + background-color: #0a0a0a; +} + +.pear-admin-dark .pear-tab-page-menu ul li { + color: #ffffff !important; +} + +/** theme */ +.pear-admin-dark .set-text, +.pear-admin-dark .select-color-title, +.pear-admin-dark .color-title { + color: #ffffff; +} + +/** search */ +.pear-admin-dark .menu-search-no-data { + color: #ffffff; +} + +/** message center */ +.pear-admin-dark .pear-message-center .layui-tab-title, +.pear-admin-dark .pear-message-center .message-item { + border-color: rgba(0, 0, 0, .30) !important; + color: #ffffff; +} + +/** button */ +.pear-admin-dark .layui-btn { + color: #ffffff; + border-color: #4C4D4F; +} + +/** layer */ +.pear-admin-dark .layui-layer { + background-color: #141414; +} + +.pear-admin-dark .layui-layer-msg { + border-color: #141414; +} + +.pear-admin-dark .layui-layer-msg .layui-layer-content { + color: #E5EAF3; +} + +.pear-admin-dark .layui-layer .layui-layer-setwin > span, +.pear-admin-dark .layui-layer .layui-layer-title { + color: #ffffff; +} + +/** card */ +.pear-admin-dark .layui-card { + background-color: #1d1e1f !important; +} + +.pear-admin-dark .layui-card .layui-card-header { + border-bottom-color: #414243; + color: #ffffff; +} + +.pear-admin-dark .layui-card .layui-card-body { + color: #ffffff; +} + +/** input */ +.pear-admin-dark .layui-input { + background-color: transparent; + color: #ffffff; + border-color: rgba(0, 0, 0, .30) !important; +} + +/** switch */ +.pear-admin-dark .layui-form-switch { + border-color: #484849; + background-color: rgba(255,255,255,.08); +} + +/** table */ +.pear-admin-dark .layui-table { + background-color: transparent; +} + +.pear-admin-dark .layui-table tr:hover { + background-color: #141414 !important; +} + +.pear-admin-dark .layui-table td, +.pear-admin-dark .layui-table th, +.pear-admin-dark .layui-table-view, +.pear-admin-dark .layui-table-page, +.pear-admin-dark .layui-table-tool, +.pear-admin-dark .layui-table-header { + border-color: rgba(0, 0, 0, .40) !important; +} + +.pear-admin-dark .layui-laypage select, +.pear-admin-dark .layui-laypage button { + border-color: rgba(0, 0, 0, .40) !important; + color: #ffffff !important; + background-color: transparent; +} + +.pear-admin-dark .layui-table-tool-self > div { + border-color: rgba(0, 0, 0, .40) !important; + color: #ffffff !important; + background-color: transparent; +} + +/** panel */ +.pear-admin-dark .layui-panel { + background-color: #1d1e1f !important; + border-color: #1d1e1f !important; +} + +/** menu */ +.pear-admin-dark .layui-menu { + background-color: #1d1e1f !important; +} + +.pear-admin-dark .layui-menu .layui-menu-body-title, +.pear-admin-dark .layui-menu .layui-menu-body-title:hover { + color: #ffffff; + background-color: #1d1e1f !important; +} + +/** timeline */ +.pear-admin-dark .layui-timeline-axis { + background-color: rgb(29, 30, 31) !important; +} + +.pear-admin-dark .layui-timeline-item:before { + background-color: #414243 !important; +} + + +/** toast */ +.pear-admin-dark .iziToast { + background-color: #1f1f1f !important; +} + +/** console */ + +.pear-admin-dark .deputy, +.pear-admin-dark .shortcut-menu { + background-color: #141414 !important; +} + +.pear-admin-dark .deputy:hover, +.pear-admin-dark .shortcut-menu:hover { + box-shadow: 0 3px 4px rgba(0, 0, 0, .6) !important; +} + +.pear-admin-dark .message-board li { + border-bottom: 1px solid rgba(0, 0, 0, .40) !important; +} + +/** analysis */ +.pear-admin-dark .top-panel-number { + color: #ffffff !important; + border-color: #414243; +} + + +.pear-admin-dark .dynamic-status dd { + border-color: #414243; +} + +/** success failure */ +.pear-admin-dark .pear-result .content { + background-color: rgba(153, 153, 153, 0.12); + color: #E5EAF3; +} + +.pear-admin-dark .pear-result .title{ + color: #ffffff; +} + +.pear-admin-dark .pear-result .description{ + color: #8D9095; +} + +/** 403 404 500*/ +.pear-admin-dark .pear-exception .title p{ + color: #E5EAF3 !important; +} + +/** scroll */ +.pear-admin-dark *::-webkit-scrollbar-thumb { + background: #141414; + border-radius: 4px; +} + +.pear-admin-dark *::-webkit-scrollbar-thumb:hover { + background: #0a0a0a; +} \ No newline at end of file diff --git a/admin/css/loader.css b/admin/css/loader.css deleted file mode 100644 index 64ee9404ae83edf0056fd1796fc59b285bb652c4..0000000000000000000000000000000000000000 --- a/admin/css/loader.css +++ /dev/null @@ -1,105 +0,0 @@ -.loader-main{ - position: fixed; - width: 100%; - height: 100%; - background-color: whitesmoke; - z-index: 9999999; -} -.loader { - width: 50px; - height: 50px; - margin: 30px auto 40px; - margin-top: 20%; - position: relative; - z-index: 999999; - background-color: whitesmoke; -} -.loader:before { - content: ""; - width: 50px; - height: 7px; - border-radius: 50%; - background: #000; - opacity: 0.1; - position: absolute; - top: 59px; - left: 0; - animation: shadow .5s linear infinite; -} -.loader:after { - content: ""; - width: 50px; - height: 50px; - border-radius: 3px; - background-color: #5FB878; - position: absolute; - top: 0; - left: 0; - animation: loading .5s linear infinite; -} -@-webkit-keyframes loading { - 17% { - border-bottom-right-radius: 3px; - } - - 25% { - transform: translateY(9px) rotate(22.5deg); - } - - 50% { - transform: translateY(18px) scale(1, 0.9) rotate(45deg); - border-bottom-right-radius: 40px; - } - - 75% { - transform: translateY(9px) rotate(67.5deg); - } - - 100% { - transform: translateY(0) rotate(90deg); - } -} -@keyframes loading { - 17% { - border-bottom-right-radius: 3px; - } - - 25% { - transform: translateY(9px) rotate(22.5deg); - } - - 50% { - transform: translateY(18px) scale(1, 0.9) rotate(45deg); - border-bottom-right-radius: 40px; - } - - 75% { - transform: translateY(9px) rotate(67.5deg); - } - - 100% { - transform: translateY(0) rotate(90deg); - } -} -@-webkit-keyframes shadow { - - 0%, - 100% { - transform: scale(1, 1); - } - - 50% { - transform: scale(1.2, 1); - } -} -@keyframes shadow { - - 0%, - 100% { - transform: scale(1, 1); - } - - 50% { - transform: scale(1.2, 1); - } -} diff --git a/admin/css/other/console1.css b/admin/css/other/analysis.css similarity index 36% rename from admin/css/other/console1.css rename to admin/css/other/analysis.css index e175df84c47abe09f33b48fdab50c258d07cb4cf..3525a21a63b6904d2ea66a9a591306edf1af5d7f 100644 --- a/admin/css/other/console1.css +++ b/admin/css/other/analysis.css @@ -20,105 +20,35 @@ font-size: 12px; } -.pear-container { - background-color: whitesmoke; - margin: 10px; -} - -.card { - width: 100%; - height: 160px; - background-color: whitesmoke; - border-radius: 4px; -} - -.card .header .avatar { - width: 28px; - height: 28px; - margin: 20px; - border-radius: 50px; -} - -.card .header { - color: dimgray; -} - -.card .body { - color: gray; -} - -.card .body { - margin-left: 20px; - margin-right: 20px; -} - -.card .footer { - margin-left: 20px; - margin-right: 20px; - margin-top: 20px; - font-size: 13px; - color: gray; - position: absolute; -} - -.custom-tab .layui-tab-title { - border-bottom-width: 0px; - border-bottom-style: none; -} - -.custom-tab .layui-tab-title li { - margin-left: 10px; -} - -.list .list-item { - height: 31.8px; - line-height: 31.8px; - color: gray; - padding: 5px; - padding-left: 15px; - border-radius: 4px; - margin-top: 5.2px; -} - -.list .list-item:hover { - background-color: whitesmoke; -} - -.list .list-item .title { - font-size: 13px; - width: 100%; -} - -.list .list-item .footer { - position: absolute; - right: 30px; - font-size: 12px; -} - .top-panel-tips i { font-size: 33px; } -.layuiadmin-card-status { +.top-panel-tips svg { + margin-top: -12px; + width: 50px; + height: 50px; +} + +.dynamic-status { padding: 0 10px 10px; } -.layuiadmin-card-status dd { +.dynamic-status dd { padding: 15px 0; border-bottom: 1px solid #EEE; display: -webkit-flex; display: flex; } -.layuiadmin-card-status dd div.layui-status-img, -.layuiadmin-card-team .layui-team-img { +.dynamic-status dd div.dynamic-status-img { width: 32px; height: 32px; border-radius: 50%; margin-right: 15px; } -.layuiadmin-card-status dd div.layui-status-img a { +.dynamic-status dd div.dynamic-status-img a { width: 100%; height: 100%; display: inline-block; @@ -126,16 +56,10 @@ line-height: 32px; } -.layuiadmin-card-status dd div span { +.dynamic-status dd div span { color: #BBB; } -.layuiadmin-card-status dd div a { +.dynamic-status dd div a { color: #01AAED; -} - -.top-panel-tips svg { - margin-top: -12px; - width: 50px; - height: 50px; -} +} \ No newline at end of file diff --git a/admin/css/other/console2.css b/admin/css/other/console.css similarity index 44% rename from admin/css/other/console2.css rename to admin/css/other/console.css index e29ad4113c4e40baf36438ee6fc5fb3e70b2922c..af9930ba4d959a0cf2143f0a89d385faac0721c3 100644 --- a/admin/css/other/console2.css +++ b/admin/css/other/console.css @@ -1,10 +1,6 @@ -.pear-container { - background-color: whitesmoke; - margin: 10px; -} -.pear-card { - width: 100%; +.shortcut-menu { + width: 100%; height: 66px; background-color: #F8F8F8; display: inline-block; @@ -13,109 +9,73 @@ margin-bottom: 3px; } -.pear-card:hover, -.pear-card2:hover { - box-shadow: 2px 0 8px 0 lightgray !important; -} - -.pear-card2 { - width: 100%; - height: 90px; - background-color: #F8F8F8; - display: inline-block; - border-radius: 5px; - text-align: center; - margin-bottom: 3px; -} - -.pear-card2 i { - font-size: 30px; - height: 90px; - line-height: 90px; -} - -.pear-card i { +.shortcut-menu i { font-size: 30px; height: 66px; line-height: 66px; } -.layui-col-md3 { - text-align: center; +.shortcut-menu:hover { + box-shadow: 2px 0 8px 0 lightgray !important; } -.pear-card-title { - margin-top: 3px; +.shortcut-menu-label { + width: 100%; + display: inline-block; + text-align: center; } -.person img { - width: 90px; +.deputy { + width: 100%; height: 90px; - border-radius: 4px; - margin-top: 8px; - margin-left: 8px; + background-color: #F8F8F8; + display: inline-block; + border-radius: 5px; + text-align: center; + margin-bottom: 3px; } -.pear-card2 .count { - color: #51A351; - font-size: 30px; - margin-top: 12px; +.deputy:hover { + box-shadow: 2px 0 8px 0 lightgray !important; } -.pear-card2 .title { +.deputy .deputy-label { color: gray; - font-size: 14px; margin-top: 14px; + font-size: 14px; +} + +.deputy .deputy-count { + margin-top: 12px; + color: var(--global-primary-color); + font-size: 30px; } -.pear-card-status { +.message-board { padding: 0 10px 10px; } -.pear-card-status li { +.message-board li { position: relative; padding: 10px 0; border-bottom: 1px solid #EEE; } -.pear-card-status li h3 { - padding-bottom: 5px; - font-weight: 700; -} - -.pear-card-status li p { +.message-board li p { padding-bottom: 10px; padding-top: 3px; } -.pear-card-status li>span { +.message-board li>span { color: #999; height: 24px; line-height: 24px; } -.pear-reply { +.message-board .message-board-reply { position: absolute; right: 20px; bottom: 12px; height: 24px; line-height: 24px; -} - -.person .title { - font-size: 17px; - font-weight: 600; - margin-left: 18px; - margin-top: 16px; - position: absolute; - display: inline-block; -} - -.person .desc { - font-size: 16px; - font-weight: 600; - margin-left: 115px; - margin-top: -30px; - position: absolute; - display: inline-block; } \ No newline at end of file diff --git a/admin/css/other/department.css b/admin/css/other/department.css deleted file mode 100644 index d6898b7d2ef797cd9c989fc7696ae6f68bcb0c00..0000000000000000000000000000000000000000 --- a/admin/css/other/department.css +++ /dev/null @@ -1,6 +0,0 @@ -.organizationTree { - width: 100% !important; - height: -webkit-calc(100vh - 130px); - height: -moz-calc(100vh - 130px); - height: calc(100vh - 130px); -} diff --git a/admin/css/other/error.css b/admin/css/other/error.css deleted file mode 100644 index 37d4c0e667fa8e89d426f1a527a80613c86786fb..0000000000000000000000000000000000000000 --- a/admin/css/other/error.css +++ /dev/null @@ -1,76 +0,0 @@ -* { - padding: 0; - margin: 0; - font-size: 0.38rem; -} - -ul { - list-style: none; -} - -a { - text-decoration: none; - -webkit-tap-highlight-color: transparent -} - -.clearfix:after { - content: ''; - width: 0; - height: 0; - display: block; - clear: both; -} - -html { - height: 100%; - width: 100%; -} - -body { - font-size: 0.28rem; - height: 100%; - width: 100%; - display: flex; - flex-direction: column; - position: relative; - background-color: white !important; -} - -.content { - position: absolute; - top: 50%; - transform: translateY(-50%); - width: 100%; - text-align: center; -} - -.content>img { - height: 300px; - max-width: 370px; - margin-right: 180px; -} - -.content>* { - display: inline-block; -} - -.content-r { - vertical-align: top; -} - -.content-r>h1 { - font-size: 72px; - color: #434e59; - margin-bottom: 24px; - font-weight: 600; -} - -.content-r>p { - font-size: 20px; - color: rgba(0, 0, 0, .45); - margin-bottom: 16px; -} - -button { - margin-top: 20px; -} diff --git a/admin/css/other/exception.css b/admin/css/other/exception.css new file mode 100644 index 0000000000000000000000000000000000000000..e7f2027cfeeb42dd728f1397552c2c1e4cb480b6 --- /dev/null +++ b/admin/css/other/exception.css @@ -0,0 +1,28 @@ +.pear-exception { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + text-align: center; + box-sizing: border-box; + padding: 70px 40px +} + +.pear-exception .title { + margin-top: 20px; +} + +.pear-exception .title p { + color: rgb(0, 0, 0); + font-size: 20px; +} + +.pear-exception .description { + margin-top: 10px; + color: #8D9095; + font-size: 14px; +} + +.pear-exception .extra { + margin: 30px; +} \ No newline at end of file diff --git a/admin/css/other/icon.css b/admin/css/other/icon.css deleted file mode 100644 index cd1a6ce30a065a044d6c0e81da136582c72d08a1..0000000000000000000000000000000000000000 --- a/admin/css/other/icon.css +++ /dev/null @@ -1,531 +0,0 @@ -/* Logo 字体 */ -@font-face { - font-family: "iconfont logo"; - src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); - src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), - url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), - url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), - url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); -} - -.logo { - font-family: "iconfont logo"; - font-size: 160px; - font-style: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -/* tabs */ -.nav-tabs { - position: relative; -} - -.nav-tabs .nav-more { - position: absolute; - right: 0; - bottom: 0; - height: 42px; - line-height: 42px; - color: #666; -} - -#tabs { - border-bottom: 1px solid #eee; -} - -#tabs li { - cursor: pointer; - width: 100px; - height: 40px; - line-height: 40px; - text-align: center; - font-size: 16px; - border-bottom: 2px solid transparent; - position: relative; - z-index: 1; - margin-bottom: -1px; - color: #666; -} - - -#tabs .active { - border-bottom-color: #f00; - color: #222; -} - -.tab-container .content { - display: none; -} - -/* 页面布局 */ -.main { - padding: 30px 100px; - width: 960px; - margin: 0 auto; -} - -.main .logo { - color: #333; - text-align: left; - margin-bottom: 30px; - line-height: 1; - height: 110px; - margin-top: -50px; - overflow: hidden; - *zoom: 1; -} - -.main .logo a { - font-size: 160px; - color: #333; -} - -.helps { - margin-top: 40px; -} - -.helps pre { - padding: 20px; - margin: 10px 0; - border: solid 1px #e7e1cd; - background-color: #fffdef; - overflow: auto; -} - -.icon_lists { - width: 100% !important; - overflow: hidden; - *zoom: 1; -} - -.icon_lists li { - width: 100px; - margin-bottom: 10px; - margin-right: 20px; - text-align: center; - list-style: none !important; - cursor: default; -} - -.icon_lists li .code-name { - line-height: 1.2; -} - -.icon_lists .icon { - display: block; - height: 100px; - line-height: 100px; - font-size: 42px; - margin: 10px auto; - color: #333; - -webkit-transition: font-size 0.25s linear, width 0.25s linear; - -moz-transition: font-size 0.25s linear, width 0.25s linear; - transition: font-size 0.25s linear, width 0.25s linear; -} - -.icon_lists .icon:hover { - font-size: 100px; -} - -.icon_lists .svg-icon { - /* 通过设置 font-size 来改变图标大小 */ - width: 1em; - /* 图标和文字相邻时,垂直对齐 */ - vertical-align: -0.15em; - /* 通过设置 color 来改变 SVG 的颜色/fill */ - fill: currentColor; - /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 - normalize.css 中也包含这行 */ - overflow: hidden; -} - -.icon_lists li .name, -.icon_lists li .code-name { - color: #666; -} - -/* markdown 样式 */ -.markdown { - color: #666; - font-size: 14px; - line-height: 1.8; -} - -.highlight { - line-height: 1.5; -} - -.markdown img { - vertical-align: middle; - max-width: 100%; -} - -.markdown h1 { - color: #404040; - font-weight: 500; - line-height: 40px; - margin-bottom: 24px; -} - -.markdown h2, -.markdown h3, -.markdown h4, -.markdown h5, -.markdown h6 { - color: #404040; - margin: 1.6em 0 0.6em 0; - font-weight: 500; - clear: both; -} - -.markdown h1 { - font-size: 28px; -} - -.markdown h2 { - font-size: 22px; -} - -.markdown h3 { - font-size: 16px; -} - -.markdown h4 { - font-size: 14px; -} - -.markdown h5 { - font-size: 12px; -} - -.markdown h6 { - font-size: 12px; -} - -.markdown hr { - height: 1px; - border: 0; - background: #e9e9e9; - margin: 16px 0; - clear: both; -} - -.markdown p { - margin: 1em 0; -} - -.markdown>p, -.markdown>blockquote, -.markdown>.highlight, -.markdown>ol, -.markdown>ul { - width: 80%; -} - -.markdown ul>li { - list-style: circle; -} - -.markdown>ul li, -.markdown blockquote ul>li { - margin-left: 20px; - padding-left: 4px; -} - -.markdown>ul li p, -.markdown>ol li p { - margin: 0.6em 0; -} - -.markdown ol>li { - list-style: decimal; -} - -.markdown>ol li, -.markdown blockquote ol>li { - margin-left: 20px; - padding-left: 4px; -} - -.markdown code { - margin: 0 3px; - padding: 0 5px; - background: #eee; - border-radius: 3px; -} - -.markdown strong, -.markdown b { - font-weight: 600; -} - -.markdown>table { - border-collapse: collapse; - border-spacing: 0px; - empty-cells: show; - border: 1px solid #e9e9e9; - width: 95%; - margin-bottom: 24px; -} - -.markdown>table th { - white-space: nowrap; - color: #333; - font-weight: 600; -} - -.markdown>table th, -.markdown>table td { - border: 1px solid #e9e9e9; - padding: 8px 16px; - text-align: left; -} - -.markdown>table th { - background: #F7F7F7; -} - -.markdown blockquote { - font-size: 90%; - color: #999; - border-left: 4px solid #e9e9e9; - padding-left: 0.8em; - margin: 1em 0; -} - -.markdown blockquote p { - margin: 0; -} - -.markdown .anchor { - opacity: 0; - transition: opacity 0.3s ease; - margin-left: 8px; -} - -.markdown .waiting { - color: #ccc; -} - -.markdown h1:hover .anchor, -.markdown h2:hover .anchor, -.markdown h3:hover .anchor, -.markdown h4:hover .anchor, -.markdown h5:hover .anchor, -.markdown h6:hover .anchor { - opacity: 1; - display: inline-block; -} - -.markdown>br, -.markdown>p>br { - clear: both; -} - - -.hljs { - display: block; - background: white; - padding: 0.5em; - color: #333333; - overflow-x: auto; -} - -.hljs-comment, -.hljs-meta { - color: #969896; -} - -.hljs-string, -.hljs-variable, -.hljs-template-variable, -.hljs-strong, -.hljs-emphasis, -.hljs-quote { - color: #df5000; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-type { - color: #a71d5d; -} - -.hljs-literal, -.hljs-symbol, -.hljs-bullet, -.hljs-attribute { - color: #0086b3; -} - -.hljs-section, -.hljs-name { - color: #63a35c; -} - -.hljs-tag { - color: #333333; -} - -.hljs-title, -.hljs-attr, -.hljs-selector-id, -.hljs-selector-class, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #795da3; -} - -.hljs-addition { - color: #55a532; - background-color: #eaffea; -} - -.hljs-deletion { - color: #bd2c00; - background-color: #ffecec; -} - -.hljs-link { - text-decoration: underline; -} - -code[class*="language-"], -pre[class*="language-"] { - color: black; - background: none; - text-shadow: 0 1px white; - font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - line-height: 1.5; - - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; -} - -pre[class*="language-"]::-moz-selection, -pre[class*="language-"] ::-moz-selection, -code[class*="language-"]::-moz-selection, -code[class*="language-"] ::-moz-selection { - text-shadow: none; - background: #b3d4fc; -} - -pre[class*="language-"]::selection, -pre[class*="language-"] ::selection, -code[class*="language-"]::selection, -code[class*="language-"] ::selection { - text-shadow: none; - background: #b3d4fc; -} - -@media print { - - code[class*="language-"], - pre[class*="language-"] { - text-shadow: none; - } -} - -/* Code blocks */ -pre[class*="language-"] { - padding: 1em; - margin: .5em 0; - overflow: auto; -} - -:not(pre)>code[class*="language-"], -pre[class*="language-"] { - background: #f5f2f0; -} - -/* Inline code */ -:not(pre)>code[class*="language-"] { - padding: .1em; - border-radius: .3em; - white-space: normal; -} - -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: slategray; -} - -.token.punctuation { - color: #999; -} - -.namespace { - opacity: .7; -} - -.token.property, -.token.tag, -.token.boolean, -.token.number, -.token.constant, -.token.symbol, -.token.deleted { - color: #905; -} - -.token.selector, -.token.attr-name, -.token.string, -.token.char, -.token.builtin, -.token.inserted { - color: #690; -} - -.token.operator, -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string { - color: #9a6e3a; - background: hsla(0, 0%, 100%, .5); -} - -.token.atrule, -.token.attr-value, -.token.keyword { - color: #07a; -} - -.token.function, -.token.class-name { - color: #DD4A68; -} - -.token.regex, -.token.important, -.token.variable { - color: #e90; -} - -.token.important, -.token.bold { - font-weight: bold; -} - -.token.italic { - font-style: italic; -} - -.token.entity { - cursor: help; -} diff --git a/admin/css/other/login.css b/admin/css/other/login.css index d4b6304e75a43a4160db5f9cd185daf63bc6b554..57e5d3e6358dd4ac6e1efaf76aa1d99151736699 100644 --- a/admin/css/other/login.css +++ b/admin/css/other/login.css @@ -1,100 +1,12 @@ -.layui-form { - width: 320px !important; - margin: auto !important; - margin-top: 160px !important; -} - -.layui-form button { - width: 100% !important; - height: 44px !important; - line-height: 44px !important; - font-size: 16px !important; - background-color: #5FB878 !important; - font-weight: 550 !important; -} - -.layui-form-checked[lay-skin=primary] i { - border-color: #5FB878 !important; - background-color: #5FB878 !important; - color: #fff !important; -} - -.layui-tab-content { - margin-top: 15px !important; - padding-left: 0px !important; - padding-right: 0px !important; -} - -.layui-form-item { - margin-top: 20px !important; -} - -.layui-input { - height: 44px !important; - line-height: 44px !important; - padding-left: 15px !important; - border-radius: 3px !important; -} - -.layui-input:focus { - box-shadow: 0px 0px 2px 1px #5FB878 !important; -} - -.layui-form-danger:focus{ - box-shadow: 0px 0px 2px 1px #f56c6c !important; -} - -.logo { - width: 60px !important; - margin-top: 10px !important; - margin-bottom: 10px !important; - margin-left: 20px !important; -} - -.title { - font-size: 30px !important; - font-weight: 550 !important; - margin-left: 20px !important; - color: #5FB878 !important; - display: inline-block !important; - height: 60px !important; - line-height: 60px !important; - margin-top: 10px !important; - position: absolute !important; -} - -.desc { - width: 100% !important; - text-align: center !important; - color: gray !important; - height: 60px !important; - line-height: 60px !important; -} - -body { - background-repeat:no-repeat; - background-color: whitesmoke; - background-size: 100%; - height: 100%; - } - -.code { - float: left; - margin-right: 13px; - margin: 0px !important; - border: #e6e6e6 1px solid; - display: inline-block!important; -} - -.codeImage { - float: right; - height: 42px; - border: #e6e6e6 1px solid; - cursor: pointer; -} - -@media (max-width:768px){ - body{ - background-position:center; - } -} +.demo-login-container { + width: 320px; + margin: 220px auto 0; +} + +.demo-login-other .layui-icon { + position: relative; + display: inline-block; + margin: 0 2px; + top: 2px; + font-size: 26px; +} \ No newline at end of file diff --git a/admin/css/other/person.css b/admin/css/other/person.css deleted file mode 100644 index 53c787a7fe42287e3fa0c6f914f768a5cc8c32b2..0000000000000000000000000000000000000000 --- a/admin/css/other/person.css +++ /dev/null @@ -1,80 +0,0 @@ -.pear-container { - background-color: whitesmoke; - margin: 10px; -} -.layui-body { - padding: 25px; -} -.text-center { - text-align: center; -} -.user-info-head { - width: 110px; - height: 110px; - line-height: 110px; - position: relative; - display: inline-block; - border-radius: 50%; - overflow: hidden; - cursor: pointer; - margin: 0 auto; -} -.layui-line-dash { - border-bottom: 1px dashed #ccc; - margin: 15px 0; -} -.comment { - position: absolute; - bottom: 3px; - right: 10px; - font-size: 12px; - color: dimgray; -} -.content { - padding-left: 13px; - font-size: 13px; - color: dimgray; -} -.title { - padding-left: 13.5px; -} -.layui-tab-title { - border-bottom: none; -} -.fl-item { - height: 30px; - font-size: 13.5; -} -.dot { - width: 10px; - height: 10px; - border-radius: 50px; - background-color: gray; - display: inline-block; - margin-right: 10px; -} - -.list .list-item { - height: 32px; - line-height: 32px; - color: gray; - padding: 5px; - padding-left: 15px; - border-radius: 4px; - margin-top: 5.2px; -} - -.list .list-item:hover { - background-color: whitesmoke; -} - -.list .list-item .title { - font-size: 13px; - width: 100%; -} - -.list .list-item .footer { - position: absolute; - right: 30px; - font-size: 12px; -} diff --git a/admin/css/other/register.css b/admin/css/other/register.css new file mode 100644 index 0000000000000000000000000000000000000000..4daab579d652572fc0338ba90f149240a009762f --- /dev/null +++ b/admin/css/other/register.css @@ -0,0 +1,12 @@ +.demo-reg-container { + width: 320px; + margin: 220px auto 0; +} + +.demo-reg-other .layui-icon { + position: relative; + display: inline-block; + margin: 0 2px; + top: 2px; + font-size: 26px; +} \ No newline at end of file diff --git a/admin/css/other/result.css b/admin/css/other/result.css index d5ccaa3b0d8b8beccbbfe7f532219a1567bd792a..393c464e564a8e38ab6ac592ea4fffde7093a0aa 100644 --- a/admin/css/other/result.css +++ b/admin/css/other/result.css @@ -1,39 +1,40 @@ -.result { +.pear-result { text-align: center; } -.result .success svg { +.pear-result .success svg { color: #32C682; text-align: center; margin-top: 40px; } -.result .error svg { +.pear-result .error svg { color: #f56c6c; text-align: center; margin-top: 40px; } -.result .title { +.pear-result .title { margin-top: 25px; } -.result .desc { +.pear-result .description { margin-top: 25px; width: 60%; margin-left: 20%; color: rgba(0, 0, 0, .45); } -.result .content { +.pear-result .content { margin-top: 20px; width: 80%; - border-radius: 10px; + border-radius: 4px; background-color: whitesmoke; - height: 200px; + padding: 20px 32px; margin-left: 10%; + margin-bottom: 30px; + text-align: left; } -.result .action { +.pear-result .extra { padding-top: 10px; - border-top: 1px whitesmoke solid; margin-top: 25px; } diff --git a/admin/css/reset.css b/admin/css/reset.css new file mode 100644 index 0000000000000000000000000000000000000000..5406808f0e2583d6d495dface66a023ccc725e2f --- /dev/null +++ b/admin/css/reset.css @@ -0,0 +1,40 @@ +.layui-dropdown { + border-radius: var(--global-border-radius); +} + +.layui-input { + border-radius: var(--global-border-radius); +} + +.layui-form-onswitch { + background-color: var(--global-primary-color) !important; +} + +.layui-btn { + background-color: var(--global-primary-color); +} + +.layui-btn.layui-btn-normal { + background-color: #1e9fff !important; +} + +.layui-btn.layui-btn-danger { + background-color: #ff5722 !important; +} + +.layui-btn.layui-btn-warm { + background-color: #ffb800 !important; +} + +.layui-btn.layui-btn-primary { + background-color: transparent !important; + color: #5f5f5f !important; +} + +.layui-card { + border-radius: var(--global-border-radius); +} + +.layui-timeline-axis { + color: var(--global-primary-color); +} \ No newline at end of file diff --git a/admin/css/variables.css b/admin/css/variables.css new file mode 100644 index 0000000000000000000000000000000000000000..97fd5cb311552c71719e4da3a5ce759f23835bcb --- /dev/null +++ b/admin/css/variables.css @@ -0,0 +1,7 @@ +:root { + + --global-primary-color: #16baaa; + + --global-border-radius: 4px; + +} \ No newline at end of file diff --git a/admin/data/card.json b/admin/data/card.json deleted file mode 100644 index e2385906a4daaff229dc8c4929aed6255e80a2e6..0000000000000000000000000000000000000000 --- a/admin/data/card.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "msg": "not data", - "count": 30, - "data": [{ - "id": "1", - "image": "https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png", - "title": "Alipay", - "remark": "那是一种内在的东西, 他们到达不了,也无法触及的", - "time": "几秒前" - }, { - "id": "2", - "image": "https://gw.alipayobjects.com/zos/rmsportal/iXjVmWVHbCJAyqvDxdtx.png", - "title": "Layui", - "remark": "生命就像一盒巧克力,结果往往出人意料", - "time": "几秒前" - }, { - "id": "3", - "image": "https://gw.alipayobjects.com/zos/rmsportal/iZBVOIhGJiAnhplqjvZW.png", - "title": "Angular", - "remark": "希望是一个好东西,也许是最好的,好东西是不会消亡的", - "time": "几秒前" - }, - { - "id": "4", - "image": "https://gw.alipayobjects.com/zos/rmsportal/uMfMFlvUuceEyPpotzlq.png", - "title": "React", - "remark": "那是一种内在的东西, 他们到达不了,也无法触及的", - "time": "几秒前" - }, { - "id": "5", - "image": "https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png", - "title": "Alipay", - "remark": "那是一种内在的东西, 他们到达不了,也无法触及的", - "time": "几秒前" - }, { - "id": "6", - "image": "https://gw.alipayobjects.com/zos/rmsportal/iXjVmWVHbCJAyqvDxdtx.png", - "title": "Layui", - "remark": "生命就像一盒巧克力,结果往往出人意料", - "time": "几秒前" - }, { - "id": "7", - "image": "https://gw.alipayobjects.com/zos/rmsportal/iZBVOIhGJiAnhplqjvZW.png", - "title": "Angular", - "remark": "希望是一个好东西,也许是最好的,好东西是不会消亡的", - "time": "几秒前" - }, - { - "id": "8", - "image": "https://gw.alipayobjects.com/zos/rmsportal/uMfMFlvUuceEyPpotzlq.png", - "title": "React", - "remark": "那是一种内在的东西, 他们到达不了,也无法触及的", - "time": "几秒前" - } - ], - "code": 0 -} diff --git a/admin/data/dataMenu.json b/admin/data/dataMenu.json deleted file mode 100644 index 7993102a481b38429a69b327080804a951088d66..0000000000000000000000000000000000000000 --- a/admin/data/dataMenu.json +++ /dev/null @@ -1,372 +0,0 @@ -[{ - "id": 1, - "title": "工作空间", - "type": 0, - "icon": "layui-icon layui-icon-console", - "href": "", - "children": [{ - "id": 10, - "title": "控制后台", - "icon": "layui-icon layui-icon-console", - "type": 1, - "openType": "_iframe", - "href": "view/console/console1.html" - }, { - "id": 13, - "title": "数据分析", - "icon": "layui-icon layui-icon-console", - "type": 1, - "openType": "_iframe", - "href": "view/console/console2.html" - }, { - "id": 14, - "title": "百度一下", - "icon": "layui-icon layui-icon-console", - "type": 1, - "openType": "_iframe", - "href": "http://www.baidu.com" - }, { - "id": 15, - "title": "主题预览", - "icon": "layui-icon layui-icon-console", - "type": 1, - "openType": "_iframe", - "href": "view/system/theme.html" - }] - }, - { - "id": "component", - "title": "常用组件", - "icon": "layui-icon layui-icon-component", - "type": 0, - "href": "", - "children": [{ - "id": 201, - "title": "基础组件", - "icon": "layui-icon layui-icon-console", - "type": 0, - "children": [{ - "id": 2011, - "title": "功能按钮", - "icon": "layui-icon layui-icon-face-smile", - "type": 1, - "openType": "_iframe", - "href": "view/document/button.html" - }, { - "id": 2014, - "title": "表单集合", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/form.html" - }, { - "id": 2010, - "title": "字体图标", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/icon.html" - }, { - "id": 2012, - "title": "多选下拉", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/select.html" - }, { - "id": 2013, - "title": "动态标签", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/tag.html" - }] - }, { - "id": 203, - "title": "进阶组件", - "icon": "layui-icon layui-icon-console", - "type": 0, - "children": [{ - "id": 2031, - "title": "数据表格", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/table.html" - }, { - "id": 2032, - "title": "分布表单", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/step.html" - }, { - "id": 2033, - "title": "树形表格", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/treetable.html" - }, { - "id": 2034, - "title": "树状结构", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/dtree.html" - }, { - "id": 2035, - "title": "文本编辑", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/tinymce.html" - }, { - "id": 2036, - "title": "卡片组件", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/card.html" - }] - }, { - "id": 202, - "title": "弹层组件", - "icon": "layui-icon layui-icon-console", - "type": 0, - "children": [{ - "id": 2021, - "title": "抽屉组件", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/drawer.html" - }, { - "id": 2022, - "title": "消息通知", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/notice.html" - }, { - "id": 2024, - "title": "加载组件", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/loading.html" - }, { - "id": 2023, - "title": "弹层组件", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/popup.html" - }] - }, { - "id": 60331, - "title": "高级组件", - "icon": "layui-icon layui-icon-console", - "type": 0, - "children": [{ - "id": 60131, - "title": "多选项卡", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/tab.html" - }, { - "id": 60132, - "title": "数据菜单", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/menu.html" - }] - }, { - "id": 204, - "title": "其他组件", - "icon": "layui-icon layui-icon-console", - "type": 0, - "children": [{ - "id": 2041, - "title": "哈希加密", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/hash.html" - }, - { - "id": 2042, - "title": "图标选择", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/iconPicker.html" - }, - { - "id": 2043, - "title": "省市级联", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/area.html" - }, - { - "id": 2044, - "title": "数字滚动", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/count.html" - }, - { - "id": 2045, - "title": "顶部返回", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/topBar.html" - } - ] - }] - }, - { - "id": "result", - "title": "结果页面", - "icon": "layui-icon layui-icon-auz", - "type": 0, - "href": "", - "children": [{ - "id": "success", - "title": "成功", - "icon": "layui-icon layui-icon-face-smile", - "type": 1, - "openType": "_iframe", - "href": "view/result/success.html" - }, - { - "id": "failure", - "title": "失败", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/result/error.html" - } - ] - }, - { - "id": "error", - "title": "错误页面", - "icon": "layui-icon layui-icon-face-cry", - "type": 0, - "href": "", - "children": [{ - "id": 403, - "title": "403", - "icon": "layui-icon layui-icon-face-smile", - "type": 1, - "openType": "_iframe", - "href": "view/error/403.html" - }, - { - "id": 404, - "title": "404", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/error/404.html" - }, - - { - "id": 500, - "title": "500", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/error/500.html" - } - - ] - }, - { - "id": "system", - "title": "系统管理", - "icon": "layui-icon layui-icon-set-fill", - "type": 0, - "href": "", - "children": [{ - "id": 601, - "title": "用户管理", - "icon": "layui-icon layui-icon-face-smile", - "type": 1, - "openType": "_iframe", - "href": "view/system/user.html" - }, - { - "id": 602, - "title": "角色管理", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/system/role.html" - }, - - { - "id": 603, - "title": "权限管理", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/system/power.html" - }, - - { - "id": 604, - "title": "部门管理", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/system/deptment.html" - }, - { - "id": 605, - "title": "行为日志", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/system/log.html" - }, { - "id": 606, - "title": "数据字典", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/system/dict.html" - } - - ] - }, - { - "id": "common", - "title": "常用页面", - "icon": "layui-icon layui-icon-template-1", - "type": 0, - "href": "", - "children": [{ - "id": 701, - "title": "登录页面", - "icon": "layui-icon layui-icon-face-smile", - "type": 1, - "openType": "_iframe", - "href": "login.html" - }, { - "id": 702, - "title": "空白页面", - "icon": "layui-icon layui-icon-face-smile", - "type": 1, - "openType": "_iframe", - "href": "view/system/space.html" - }] - } -] diff --git a/admin/data/dataTree2.json b/admin/data/dataTree2.json deleted file mode 100644 index 86e8923c16ab2ca5e74aa798bf0b506f800c315c..0000000000000000000000000000000000000000 --- a/admin/data/dataTree2.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "status": { - "code": 200, - "message": "操作成功" - }, - "data": [{ - "id": "001", - "title": "湖南省", - "checkArr": "0", - "parentId": "0" - }, - { - "id": "002", - "title": "湖北省", - "checkArr": "0", - "parentId": "0" - }, - { - "id": "003", - "title": "广东省", - "checkArr": "0", - "parentId": "0" - }, - { - "id": "004", - "title": "浙江省", - "checkArr": "0", - "parentId": "0" - }, - { - "id": "005", - "title": "福建省", - "checkArr": "0", - "parentId": "0" - } - ] -} diff --git a/admin/data/dictData.json b/admin/data/dictData.json deleted file mode 100644 index db7ae1186b3d62c6b8782dab7aa4ea3740c90c5a..0000000000000000000000000000000000000000 --- a/admin/data/dictData.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "code": 0, - "msg": null, - "count": 2, - "data": [{ - "createTime": null, - "createBy": null, - "createName": null, - "updateTime": null, - "updateBy": null, - "updateName": null, - "remark": "男 : body", - "params": null, - "dataId": "1317401149287956480", - "dataLabel": "男", - "dataValue": "boy", - "typeCode": "user_sex", - "isDefault": null, - "enable": "0" - }, { - "createTime": null, - "createBy": null, - "createName": null, - "updateTime": null, - "updateBy": null, - "updateName": null, - "remark": "女 : girl", - "params": null, - "dataId": "1317402976670711808", - "dataLabel": "女", - "dataValue": "girl", - "typeCode": "user_sex", - "isDefault": null, - "enable": "0" - }] -} diff --git a/admin/data/dictType.json b/admin/data/dictType.json deleted file mode 100644 index 3b9ab26e41730c8c8c0bfd5ed813691ccfbd5b90..0000000000000000000000000000000000000000 --- a/admin/data/dictType.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "code": 0, - "msg": null, - "count": 6, - "data": [{ - "createTime": null, - "createBy": null, - "createName": null, - "updateTime": null, - "updateBy": null, - "updateName": null, - "remark": null, - "params": null, - "id": "1304489072256876544", - "typeName": "用户状态", - "typeCode": "user_status", - "description": "用户状态", - "enable": "0" - }, { - "createTime": null, - "createBy": null, - "createName": null, - "updateTime": null, - "updateBy": null, - "updateName": null, - "remark": null, - "params": null, - "id": "1317360314219495424", - "typeName": "登录类型", - "typeCode": "login", - "description": "登录类型", - "enable": "0" - }, { - "createTime": null, - "createBy": null, - "createName": null, - "updateTime": null, - "updateBy": null, - "updateName": null, - "remark": null, - "params": null, - "id": "1317400519127334912", - "typeName": "用户类型", - "typeCode": "user_status", - "description": "用户类型", - "enable": "0" - }, { - "createTime": null, - "createBy": null, - "createName": null, - "updateTime": null, - "updateBy": null, - "updateName": null, - "remark": null, - "params": null, - "id": "1317400823096934400", - "typeName": "配置类型", - "typeCode": "config_type", - "description": "配置类型", - "enable": "0" - }, { - "createTime": null, - "createBy": null, - "createName": null, - "updateTime": null, - "updateBy": null, - "updateName": null, - "remark": null, - "params": null, - "id": "455184568505470976", - "typeName": "用户性别", - "typeCode": "user_sex", - "description": "用户性别", - "enable": "0" - }, { - "createTime": null, - "createBy": null, - "createName": null, - "updateTime": null, - "updateBy": null, - "updateName": null, - "remark": null, - "params": null, - "id": "455184935989415936", - "typeName": "全局状态", - "typeCode": "sys_status", - "description": "状态描述\n", - "enable": "0" - }] -} diff --git a/admin/data/dtree.json b/admin/data/dtree.json deleted file mode 100644 index 376d9b0db8cb164973d530eda879fc9ed7d6d2ed..0000000000000000000000000000000000000000 --- a/admin/data/dtree.json +++ /dev/null @@ -1,181 +0,0 @@ -{ - "status": { - "code": 200, - "message": "操作成功" - }, - "data": [{ - "id": "001", - "title": "湖南省", - "parentId": "0", - "children": [{ - "id": "001001", - "title": "长沙市", - "last": true, - "parentId": "001" - }, - { - "id": "001002", - "title": "株洲市", - "last": true, - "parentId": "001" - }, - { - "id": "001003", - "title": "湘潭市", - "last": true, - "parentId": "001" - }, - { - "id": "001004", - "title": "衡阳市", - "last": true, - "parentId": "001" - }, - { - "id": "001005", - "title": "郴州市", - "last": true, - "parentId": "001" - } - ] - }, - { - "id": "002", - "title": "湖北省", - "parentId": "0", - "children": [{ - "id": "002001", - "title": "武汉市", - "last": true, - "parentId": "002" - }, - { - "id": "002002", - "title": "黄冈市", - "last": true, - "parentId": "002" - }, - { - "id": "002003", - "title": "潜江市", - "last": true, - "parentId": "002" - }, - { - "id": "002004", - "title": "荆州市", - "last": true, - "parentId": "002" - }, - { - "id": "002005", - "title": "襄阳市", - "last": true, - "parentId": "002" - } - ] - }, - { - "id": "003", - "title": "广东省", - "parentId": "0", - "children": [{ - "id": "003001", - "title": "广州市", - "last": false, - "parentId": "003", - "children": [{ - "id": "003001001", - "title": "天河区", - "last": true, - "parentId": "003001" - }, - { - "id": "003001002", - "title": "花都区", - "last": true, - "parentId": "003001" - } - ] - }, - { - "id": "003002", - "title": "深圳市", - "last": true, - "parentId": "003" - }, - { - "id": "003003", - "title": "中山市", - "last": true, - "parentId": "003" - }, - { - "id": "003004", - "title": "东莞市", - "last": true, - "parentId": "003" - }, - { - "id": "003005", - "title": "珠海市", - "last": true, - "parentId": "003" - }, - { - "id": "003006", - "title": "韶关市", - "last": true, - "parentId": "003" - } - ] - }, - { - "id": "004", - "title": "浙江省", - "parentId": "0", - "children": [{ - "id": "004001", - "title": "杭州市", - "last": true, - "parentId": "004" - }, - { - "id": "004002", - "title": "温州市", - "last": true, - "parentId": "004" - }, - { - "id": "004003", - "title": "绍兴市", - "last": true, - "parentId": "004" - }, - { - "id": "004004", - "title": "金华市", - "last": true, - "parentId": "004" - }, - { - "id": "004005", - "title": "义乌市", - "last": true, - "parentId": "004" - } - ] - }, - { - "id": "005", - "title": "福建省", - "parentId": "0", - "children": [{ - "id": "005001", - "title": "厦门市", - "last": true, - "parentId": "005" - }] - } - ] -} diff --git a/admin/data/loginLog.json b/admin/data/loginLog.json deleted file mode 100644 index eb39552f919a817ff18d2d207914bad9cce7e066..0000000000000000000000000000000000000000 --- a/admin/data/loginLog.json +++ /dev/null @@ -1,211 +0,0 @@ -{ - "createTime": null, - "createBy": null, - "updateTime": null, - "updateBy": null, - "remark": null, - "code": 0, - "msg": null, - "count": 167, - "data": [{ - "id": "1305106851892822016", - "title": "登录", - "description": "登录成功", - "businessType": "OTHER", - "requestMethod": "POST", - "method": "/login", - "operateUrl": "/login", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "LOGIN", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T11:31:36.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305101593019940864", - "title": "登录", - "description": "登录成功", - "businessType": "OTHER", - "requestMethod": "POST", - "method": "/login", - "operateUrl": "/login", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "LOGIN", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T11:10:42.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305101247900024832", - "title": "登录", - "description": "登录成功", - "businessType": "OTHER", - "requestMethod": "POST", - "method": "/login", - "operateUrl": "/login", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "LOGIN", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T11:09:20.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305099674977304576", - "title": "登录", - "description": "登录成功", - "businessType": "OTHER", - "requestMethod": "POST", - "method": "/login", - "operateUrl": "/login", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "LOGIN", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T11:03:05.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305095186061197312", - "title": "登录", - "description": "登录成功", - "businessType": "OTHER", - "requestMethod": "POST", - "method": "/login", - "operateUrl": "/login", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "LOGIN", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T10:45:15.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305092027951611904", - "title": "登录", - "description": "登录成功", - "businessType": "OTHER", - "requestMethod": "POST", - "method": "/login", - "operateUrl": "/login", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "LOGIN", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T10:32:42.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305082862634008576", - "title": "登录", - "description": "登录成功", - "businessType": "OTHER", - "requestMethod": "POST", - "method": "/login", - "operateUrl": "/login", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "LOGIN", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T09:56:16.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305071134877679616", - "title": "登录", - "description": "登录成功", - "businessType": "OTHER", - "requestMethod": "POST", - "method": "/login", - "operateUrl": "/login", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "LOGIN", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T09:09:40.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305070481803575296", - "title": "登录", - "description": "登录成功", - "businessType": "OTHER", - "requestMethod": "POST", - "method": "/login", - "operateUrl": "/login", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "LOGIN", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T09:07:05.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305064691009060864", - "title": "登录", - "description": "登录成功", - "businessType": "OTHER", - "requestMethod": "POST", - "method": "/login", - "operateUrl": "/login", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "LOGIN", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T08:44:04.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }] -} diff --git a/admin/data/menu.json b/admin/data/menu.json index 3a20b6e414bc033779d9682016af1608292b8275..7640e7cd7e6dfd9452bf51a52df11ab7e0c8befb 100644 --- a/admin/data/menu.json +++ b/admin/data/menu.json @@ -1,271 +1,75 @@ -[{ +[ + { "id": 1, "title": "工作空间", "icon": "layui-icon layui-icon-console", "type": 0, - "href": "", - "children": [{ - "id": 10, - "title": "控制后台", - "icon": "layui-icon layui-icon-console", - "type": 1, - "openType": "_iframe", - "href": "view/console/console1.html" - }, { - "id": 13, - "title": "数据分析", - "icon": "layui-icon layui-icon-console", - "type": 1, - "openType": "_iframe", - "href": "view/console/console2.html" - }, { - "id": 14, - "title": "百度一下", - "icon": "layui-icon layui-icon-console", - "type": 1, - "openType": "_iframe", - "href": "http://www.bing.com" - }, { - "id": 15, - "title": "主题预览", - "icon": "layui-icon layui-icon-console", - "type": 1, - "openType": "_iframe", - "href": "view/system/theme.html" - }, { - "id": 16, - "title": "酸爽翻倍", - "icon": "layui-icon layui-icon-console", - "type": 1, - "openType": "_iframe", - "href": "view/document/core.html" - }] + "children": [ + { + "id": "10", + "title": "分析页", + "icon": "layui-icon layui-icon-console", + "type": 1, + "openType": "_component", + "href": "view/analysis/index.html" + }, + { + "id": "11", + "title": "工作台", + "icon": "layui-icon layui-icon-console", + "type": 1, + "openType": "_component", + "href": "view/console/index.html" + } + ] }, { - "id": "component", - "title": "常用组件", - "icon": "layui-icon layui-icon-component", + "id": 9, + "title": "列表页面", + "icon": "layui-icon layui-icon-auz", "type": 0, - "href": "", - "children": [{ - "id": 201, - "title": "基础组件", - "icon": "layui-icon layui-icon-console", - "type": 0, - "children": [ + "children": [ { - "id": 2011, - "title": "功能按钮", + "id": 91, + "title": "查询表格", "icon": "layui-icon layui-icon-face-smile", "type": 1, - "openType": "_iframe", - "href": "view/document/button.html" - }, { - "id": 2014, - "title": "表单集合", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/form.html" - }, { - "id": 2010, - "title": "字体图标", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/icon.html" - }, { - "id": 2012, - "title": "多选下拉", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/select.html" - }, { - "id": 2013, - "title": "动态标签", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/tag.html" - }] - }, { - "id": 203, - "title": "进阶组件", - "icon": "layui-icon layui-icon-console", - "type": 0, - "children": [{ - "id": 2031, - "title": "数据表格", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/table.html" - }, { - "id": 2032, - "title": "分布表单", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/step.html" - }, { - "id": 2033, - "title": "树形表格", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/treetable.html" - }, { - "id": 2034, - "title": "树状结构", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/dtree.html" - }, { - "id": 2035, - "title": "文本编辑", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/tinymce.html" - }, { - "id": 2036, - "title": "卡片组件", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/card.html" - }] - }, { - "id": 202, - "title": "弹层组件", - "icon": "layui-icon layui-icon-console", - "type": 0, - "children": [{ - "id": 2021, - "title": "抽屉组件", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/drawer.html" - }, { - "id": 2022, - "title": "消息通知 (过时)", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/notice.html" - }, { - "id": 2025, - "title": "消息通知 (新增)", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/toast.html" - }, { - "id": 2024, - "title": "加载组件", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/loading.html" - }, { - "id": 2023, - "title": "弹层组件", - "icon": "layui-icon layui-icon-face-cry", + "openType": "_component", + "href": "view/listing/table.html" + }, + { + "id":"table1", + "title": "常用列表", + "icon": "layui-icon layui-icon-face-smile", "type": 1, - "openType": "_iframe", - "href": "view/document/popup.html" - }] - },{ - "id": 60331, - "title": "高级组件", - "icon": "layui-icon layui-icon-console", - "type": 0, - "children": [{ - "id": 60131, - "title": "多选项卡", - "icon": "layui-icon layui-icon-face-cry", + "openType": "_component", + "href": "view/component/table.html" + } + ] + }, + { + "id": 2, + "title": "扩展组件", + "icon": "layui-icon layui-icon-auz", + "type": 0, + "children": [ + { + "id": 23, + "title": "高级栅格", + "icon": "layui-icon layui-icon-face-smile", "type": 1, - "openType": "_iframe", - "href": "view/document/tab.html" - },{ - "id": 60132, - "title": "数据菜单", - "icon": "layui-icon layui-icon-face-cry", + "openType": "_component", + "href": "view/component/grid.html" + }, + { + "id": 24, + "title": "消息提示", + "icon": "layui-icon layui-icon-face-smile", "type": 1, - "openType": "_iframe", - "href": "view/document/menu.html" - }] - }, { - "id": 204, - "title": "其他组件", - "icon": "layui-icon layui-icon-console", - "type": 0, - "children": [{ - "id": 2041, - "title": "哈希加密", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/encrypt.html" - }, - { - "id": 2042, - "title": "图标选择", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/iconPicker.html" - }, - { - "id": 2043, - "title": "省市级联", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/area.html" - }, - { - "id": 2044, - "title": "数字滚动", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/count.html" - }, - { - "id": 2045, - "title": "顶部返回", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/document/topBar.html" - }, - { - "id": 2046, - "title": "水印组件", - "type": 1, - "openType": "_iframe", - "href": "view/document/watermark.html" - }, - { - "id": 2047, - "title": "全屏组件", - "type": 1, - "openType": "_iframe", - "href": "view/document/fullscreen.html" - }, - { - "id": 2048, - "title": "汽泡组件", - "type": 1, - "openType": "_iframe", - "href": "view/document/popover.html" - } - ] - }] + "openType": "_component", + "href": "view/component/toast.html" + } + ] }, { "id": "result", @@ -273,172 +77,229 @@ "icon": "layui-icon layui-icon-auz", "type": 0, "href": "", - "children": [{ + "children": [ + { "id": "success", - "title": "成功", + "title": "成功页面", "icon": "layui-icon layui-icon-face-smile", "type": 1, - "openType": "_iframe", + "openType": "_component", "href": "view/result/success.html" }, { "id": "failure", - "title": "失败", + "title": "失败页面", "icon": "layui-icon layui-icon-face-cry", "type": 1, - "openType": "_iframe", + "openType": "_component", "href": "view/result/error.html" } ] }, { - "id": "error", - "title": "错误页面", - "icon": "layui-icon layui-icon-face-cry", + "id": "exception", + "title": "异常页面", + "icon": "layui-icon layui-icon-auz", "type": 0, "href": "", - "children": [{ - "id": 403, + "children": [ + { + "id": "403", "title": "403", "icon": "layui-icon layui-icon-face-smile", "type": 1, - "openType": "_iframe", - "href": "view/error/403.html" + "openType": "_component", + "href": "view/exception/403.html" }, { - "id": 404, + "id": "404", "title": "404", "icon": "layui-icon layui-icon-face-cry", "type": 1, - "openType": "_iframe", - "href": "view/error/404.html" + "openType": "_component", + "href": "view/exception/404.html" }, - { - "id": 500, + "id": "500", "title": "500", "icon": "layui-icon layui-icon-face-cry", "type": 1, - "openType": "_iframe", - "href": "view/error/500.html" + "openType": "_component", + "href": "view/exception/500.html" } - ] }, { - "id": "system", - "title": "系统管理", - "icon": "layui-icon layui-icon-set-fill", + "id": "open", + "title": "菜单模式", + "icon": "layui-icon layui-icon-auz", "type": 0, - "href": "", - "children": [{ - "id": 601, - "title": "用户管理", - "icon": "layui-icon layui-icon-face-smile", - "type": 1, - "openType": "_iframe", - "href": "view/system/user.html" - }, + "children": [ { - "id": 602, - "title": "角色管理", - "icon": "layui-icon layui-icon-face-cry", + "id": "a", + "title": "普通路由", + "icon": "layui-icon layui-icon-face-smile", "type": 1, - "openType": "_iframe", - "href": "view/system/role.html" + "openType": "_component", + "href": "view/result/success.html" }, - { - "id": 603, - "title": "权限管理", + "id": "b", + "title": "嵌套网页", "icon": "layui-icon layui-icon-face-cry", "type": 1, "openType": "_iframe", - "href": "view/system/power.html" + "href": "http://www.layui-vue.com" }, - { - "id": 604, - "title": "部门管理", + "id": "c", + "title": "新建标签", "icon": "layui-icon layui-icon-face-cry", "type": 1, - "openType": "_iframe", - "href": "view/system/deptment.html" + "openType": "_blank", + "href": "http://www.layui-vue.com" }, { - "id": 605, - "title": "行为日志", + "id": "d", + "title": "弹窗网页", "icon": "layui-icon layui-icon-face-cry", "type": 1, - "openType": "_iframe", - "href": "view/system/log.html" - }, { - "id": 606, - "title": "数据字典", - "icon": "layui-icon layui-icon-face-cry", - "type": 1, - "openType": "_iframe", - "href": "view/system/dict.html" + "openType": "_layer", + "href": "http://www.layui-vue.com" } - ] }, { - "id": "common", - "title": "常用页面", - "icon": "layui-icon layui-icon-template-1", - "type": 0, - "href": "", - "children": [{ - "id": 701, - "title": "登录页面", - "icon": "layui-icon layui-icon-face-smile", - "type": 1, - "openType": "_iframe", - "href": "login.html" - }, { - "id": 702, - "title": "空白页面", - "icon": "layui-icon layui-icon-face-smile", - "type": 1, - "openType": "_iframe", - "href": "view/system/space.html" - }] - }, { - "id": "echarts", - "title": "数据图表", - "icon": "layui-icon layui-icon-chart", - "type": 0, - "href": "", - "children": [{ - "id": 12121, - "title": "折线图", - "icon": "layui-icon layui-icon-face-smile", - "type": 1, - "openType": "_iframe", - "href": "view/echarts/line.html" - }, { - "id": 121212, - "title": "柱状图", - "icon": "layui-icon layui-icon-face-smile", - "type": 1, - "openType": "_iframe", - "href": "view/echarts/column.html" - }] - }, - { - "id": "code", - "title": "开发工具", - "icon": "layui-icon layui-icon-util", + "id": "deep", + "title": "菜单深度测试", + "icon": "layui-icon layui-icon-auz", "type": 0, "href": "", - "children": [{ - "id": 801, - "title": "表单构建", - "icon": "layui-icon layui-icon-util", - "type": 1, - "openType": "_iframe", - "href": "component/code/index.html" - }] + "children": [ + { + "id": "deep1-1", + "title": "二级菜单", + "icon": "layui-icon layui-icon-face-smile", + "type": 0, + "openType": "_component", + "href": "view/result/success.html", + "children": [ + { + "id": "deep1-1-1", + "title": "三级菜单", + "icon": "layui-icon layui-icon-face-smile", + "type": 0, + "openType": "_component", + "href": "view/result/success.html", + "children": [ + { + "id": "deep1-1-1-1", + "title": "四级菜单", + "icon": "layui-icon layui-icon-face-smile", + "type": 1, + "openType": "_component", + "href": "view/result/success.html" + }, + { + "id": "deep1-1-1-2", + "title": "四级菜单", + "icon": "layui-icon layui-icon-face-cry", + "type": 1, + "openType": "_blank", + "href": "http://www.layui-vue.com" + } + ] + }, + { + "id": "deep1-1-2", + "title": "三级菜单", + "icon": "layui-icon layui-icon-face-cry", + "type": 0, + "openType": "_blank", + "href": "http://www.layui-vue.com", + "children": [ + { + "id": "deep1-1-2-1", + "title": "四级菜单", + "icon": "layui-icon layui-icon-face-smile", + "type": 1, + "openType": "_component", + "href": "view/result/success.html" + }, + { + "id": "deep1-1-2-2", + "title": "四级菜单", + "icon": "layui-icon layui-icon-face-cry", + "type": 1, + "openType": "_blank", + "href": "http://www.layui-vue.com" + } + ] + } + ] + }, + { + "id": "deep1-2", + "title": "二级菜单", + "icon": "layui-icon layui-icon-face-cry", + "type": 0, + "openType": "_blank", + "href": "http://www.layui-vue.com", + "children": [ + { + "id": "deep1-2-1", + "title": "三级菜单", + "icon": "layui-icon layui-icon-face-smile", + "type": 0, + "openType": "_component", + "href": "view/result/success.html", + "children": [ + { + "id": "deep1-2-1-1", + "title": "四级菜单", + "icon": "layui-icon layui-icon-face-smile", + "type": 1, + "openType": "_component", + "href": "view/result/success.html" + }, + { + "id": "deep1-2-1-2", + "title": "四级菜单", + "icon": "layui-icon layui-icon-face-cry", + "type": 1, + "openType": "_blank", + "href": "http://www.layui-vue.com" + } + ] + }, + { + "id": "deep1-2-2", + "title": "三级菜单", + "icon": "layui-icon layui-icon-face-cry", + "type": 0, + "openType": "_blank", + "href": "http://www.layui-vue.com", + "children": [ + { + "id": "deep1-2-2-1", + "title": "四级菜单", + "icon": "layui-icon layui-icon-face-smile", + "type": 1, + "openType": "_component", + "href": "view/result/success.html" + }, + { + "id": "deep1-2-2-2", + "title": "四级菜单", + "icon": "layui-icon layui-icon-face-cry", + "type": 1, + "openType": "_blank", + "href": "http://www.layui-vue.com" + } + ] + } + ] + } + ] } ] \ No newline at end of file diff --git a/admin/data/message.json b/admin/data/message.json index 7cf9263327e3f3e96b62564a0ca35d12a573ab4b..b95a924f37b6136c7c9482607c9845bb9a31b1c7 100644 --- a/admin/data/message.json +++ b/admin/data/message.json @@ -1,90 +1,102 @@ -[{ - "id": 1, - "title": "通知", - "children": [{ - "id": 11, - "avatar":"https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png", - "title": "你收到了 14 份新周报", - "context": "这是消息内容。", - "form": "就眠仪式", - "time": "刚刚" - }, { - "id": 12, - "avatar":"https://gw.alipayobjects.com/zos/rmsportal/OKJXDXrmkNshAMvwtvhu.png", - "title": "曲妮妮 已通过第三轮面试", - "context": "这是消息内容。", - "form": "就眠仪式", - "time": "刚刚" - }, - { - "id": 11, - "avatar":"https://gw.alipayobjects.com/zos/rmsportal/kISTdvpyTAhtGxpovNWd.png", - "title": "可以区分多种通知类型", - "context": "这是消息内容。", - "form": "就眠仪式", - "time": "刚刚" - }, { - "id": 12, - "avatar":"https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png", - "title": "左侧图标用于区分不同的类型", - "context": "这是消息内容。", - "form": "就眠仪式", - "time": "刚刚" - }, - { - "id": 11, - "avatar":"https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png", - "title": "内容不要超过两行字", - "context": "这是消息内容。", - "form": "就眠仪式", - "time": "刚刚" - }] - }, - { - "id": 2, - "title": "消息", - "children": [{ - "id": 11, - "avatar":"https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png", - "title": "你收到了 14 份新周报", - "context": "这是消息内容。", - "form": "就眠仪式", - "time": "刚刚" - }, { - "id": 12, - "avatar":"https://gw.alipayobjects.com/zos/rmsportal/OKJXDXrmkNshAMvwtvhu.png", - "title": "曲妮妮 已通过第三轮面试", - "context": "这是消息内容。", - "form": "就眠仪式", - "time": "刚刚" - }, - { - "id": 11, - "avatar":"https://gw.alipayobjects.com/zos/rmsportal/kISTdvpyTAhtGxpovNWd.png", - "title": "可以区分多种通知类型", - "context": "这是消息内容。", - "form": "就眠仪式", - "time": "刚刚" - }, { - "id": 12, - "avatar":"https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png", - "title": "左侧图标用于区分不同的类型", - "context": "这是消息内容。", - "form": "就眠仪式", - "time": "刚刚" - }, - { - "id": 11, - "avatar":"https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png", - "title": "内容不要超过两行字", - "context": "这是消息内容。", - "form": "就眠仪式", - "time": "刚刚" - }] - }, - { - "id": 3, - "title": "代办", - "children": [] - } -] +{ + "code": 200, + "data": [ + { + "id": 1, + "title": "通知", + "children": [ + { + "id": 11, + "avatar": "https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png", + "title": "你收到了 14 份新周报", + "context": "这是消息内容。", + "form": "就眠仪式", + "time": "刚刚" + }, + { + "id": 12, + "avatar": "https://gw.alipayobjects.com/zos/rmsportal/OKJXDXrmkNshAMvwtvhu.png", + "title": "曲妮妮 已通过第三轮面试", + "context": "这是消息内容。", + "form": "就眠仪式", + "time": "刚刚" + }, + { + "id": 11, + "avatar": "https://gw.alipayobjects.com/zos/rmsportal/kISTdvpyTAhtGxpovNWd.png", + "title": "可以区分多种通知类型", + "context": "这是消息内容。", + "form": "就眠仪式", + "time": "刚刚" + }, + { + "id": 12, + "avatar": "https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png", + "title": "左侧图标用于区分不同的类型", + "context": "这是消息内容。", + "form": "就眠仪式", + "time": "刚刚" + }, + { + "id": 11, + "avatar": "https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png", + "title": "内容不要超过两行字", + "context": "这是消息内容。", + "form": "就眠仪式", + "time": "刚刚" + } + ] + }, + { + "id": 2, + "title": "消息", + "children": [ + { + "id": 11, + "avatar": "https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png", + "title": "你收到了 14 份新周报", + "context": "这是消息内容。", + "form": "就眠仪式", + "time": "刚刚" + }, + { + "id": 12, + "avatar": "https://gw.alipayobjects.com/zos/rmsportal/OKJXDXrmkNshAMvwtvhu.png", + "title": "曲妮妮 已通过第三轮面试", + "context": "这是消息内容。", + "form": "就眠仪式", + "time": "刚刚" + }, + { + "id": 11, + "avatar": "https://gw.alipayobjects.com/zos/rmsportal/kISTdvpyTAhtGxpovNWd.png", + "title": "可以区分多种通知类型", + "context": "这是消息内容。", + "form": "就眠仪式", + "time": "刚刚" + }, + { + "id": 12, + "avatar": "https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png", + "title": "左侧图标用于区分不同的类型", + "context": "这是消息内容。", + "form": "就眠仪式", + "time": "刚刚" + }, + { + "id": 11, + "avatar": "https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png", + "title": "内容不要超过两行字", + "context": "这是消息内容。", + "form": "就眠仪式", + "time": "刚刚" + } + ] + }, + { + "id": 3, + "title": "代办", + "children": [] + } + ] +} \ No newline at end of file diff --git a/admin/data/operateLog.json b/admin/data/operateLog.json deleted file mode 100644 index 79e5454bc6e3dbcd6f8a0edeecfc3b13f5de55f7..0000000000000000000000000000000000000000 --- a/admin/data/operateLog.json +++ /dev/null @@ -1,211 +0,0 @@ -{ - "createTime": null, - "createBy": null, - "updateTime": null, - "updateBy": null, - "remark": null, - "code": 0, - "msg": null, - "count": 178, - "data": [{ - "id": "1305106857240559616", - "title": "主页", - "description": "返回 Index 主页视图", - "businessType": "ADD", - "requestMethod": "GET", - "method": "/index", - "operateUrl": "/index", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "OPERATE", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T11:31:37.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305101599714050048", - "title": "主页", - "description": "返回 Index 主页视图", - "businessType": "ADD", - "requestMethod": "GET", - "method": "/index", - "operateUrl": "/index", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "OPERATE", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T11:10:44.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305101253352620032", - "title": "主页", - "description": "返回 Index 主页视图", - "businessType": "ADD", - "requestMethod": "GET", - "method": "/index", - "operateUrl": "/index", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "OPERATE", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T11:09:21.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305099681512030208", - "title": "主页", - "description": "返回 Index 主页视图", - "businessType": "ADD", - "requestMethod": "GET", - "method": "/index", - "operateUrl": "/index", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "OPERATE", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T11:03:06.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305095191291494400", - "title": "主页", - "description": "返回 Index 主页视图", - "businessType": "ADD", - "requestMethod": "GET", - "method": "/index", - "operateUrl": "/index", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "OPERATE", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T10:45:16.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305092034448588800", - "title": "主页", - "description": "返回 Index 主页视图", - "businessType": "ADD", - "requestMethod": "GET", - "method": "/index", - "operateUrl": "/index", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "OPERATE", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T10:32:43.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305082868002717696", - "title": "主页", - "description": "返回 Index 主页视图", - "businessType": "ADD", - "requestMethod": "GET", - "method": "/index", - "operateUrl": "/index", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "OPERATE", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T09:56:18.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305071141362073600", - "title": "主页", - "description": "返回 Index 主页视图", - "businessType": "ADD", - "requestMethod": "GET", - "method": "/index", - "operateUrl": "/index", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "OPERATE", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T09:09:42.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305070488145362944", - "title": "主页", - "description": "返回 Index 主页视图", - "businessType": "ADD", - "requestMethod": "GET", - "method": "/index", - "operateUrl": "/index", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "OPERATE", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T09:07:06.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }, { - "id": "1305064697174687744", - "title": "主页", - "description": "返回 Index 主页视图", - "businessType": "ADD", - "requestMethod": "GET", - "method": "/index", - "operateUrl": "/index", - "operateAddress": "127.0.0.1", - "requestParam": null, - "requestBody": "", - "responseBody": null, - "success": true, - "loggingType": "OPERATE", - "errorMsg": null, - "systemOs": "Windows", - "createTime": "2020-09-13T08:44:05.000+0000", - "operateName": "admin", - "map": {}, - "browser": "谷歌浏览器" - }] -} diff --git a/admin/data/organization.json b/admin/data/organization.json deleted file mode 100644 index ff1626b0e265420cc84130fa9833bdcc37e677b8..0000000000000000000000000000000000000000 --- a/admin/data/organization.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "code": 0, - "msg": "...", - "count": 3, - "data": [{ - "name": "软件部", - "userCount": 324, - "location": "二楼201", - "leader": "皮卡丘" - }, { - "name": "美工部", - "userCount": 98, - "location": "二楼101", - "leader": "皮卡丘" - }, { - "name": "设计部", - "userCount": 43, - "location": "六楼602", - "leader": "皮卡丘" - }, { - "name": "销售部", - "userCount": 12, - "location": "一楼131", - "leader": "皮卡丘" - }, { - "name": "产品部", - "userCount": 128, - "location": "四楼401", - "leader": "皮卡丘" - }, { - "name": "财务部", - "userCount": 23, - "location": "三楼105", - "leader": "皮卡丘" - }, { - "name": "人事部", - "userCount": 67, - "location": "二楼201", - "leader": "皮卡丘" - }] -} diff --git a/admin/data/organizationtree.json b/admin/data/organizationtree.json deleted file mode 100644 index 262594fe0af1cd4c205e45c5b715f4140c3994f2..0000000000000000000000000000000000000000 --- a/admin/data/organizationtree.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "status": { - "code": 200, - "message": "操作成功" - }, - "data": [{ - "id": "0", - "title": "济南总部", - "last": false, - "parentId": "9527", - "children": [{ - "id": "001", - "title": "杭州市", - "last": false, - "parentId": "0", - "children": [{ - "id": "001001", - "title": "软件部", - "last": true, - "parentId": "001" - }, - { - "id": "001002", - "title": "销售部", - "last": true, - "parentId": "001" - }, - { - "id": "001003", - "title": "财务部", - "last": true, - "parentId": "001" - }, - { - "id": "001004", - "title": "人事部", - "last": true, - "parentId": "001" - }, - { - "id": "001005", - "title": "行政部", - "last": true, - "parentId": "001" - } - ] - }, - { - "id": "002", - "title": "湖北省", - "last": false, - "parentId": "0", - "children": [{ - "id": "002001", - "title": "武汉市", - "last": true, - "parentId": "002" - }, - { - "id": "002002", - "title": "黄冈市", - "last": true, - "parentId": "002" - }, - { - "id": "002003", - "title": "潜江市", - "last": true, - "parentId": "002" - }, - { - "id": "002004", - "title": "荆州市", - "last": true, - "parentId": "002" - }, - { - "id": "002005", - "title": "襄阳市", - "last": true, - "parentId": "002" - } - ] - }, - { - "id": "003", - "title": "广东省", - "last": false, - "parentId": "0", - "children": [{ - "id": "003001", - "title": "广州市", - "last": false, - "parentId": "003", - "children": [{ - "id": "003001001", - "title": "天河区", - "last": true, - "parentId": "003001" - }, - { - "id": "003001002", - "title": "花都区", - "last": true, - "parentId": "003001" - } - ] - }, - { - "id": "003002", - "title": "深圳市", - "last": true, - "parentId": "003" - }, - { - "id": "003003", - "title": "中山市", - "last": true, - "parentId": "003" - }, - { - "id": "003004", - "title": "东莞市", - "last": true, - "parentId": "003" - }, - { - "id": "003005", - "title": "珠海市", - "last": true, - "parentId": "003" - }, - { - "id": "003006", - "title": "韶关市", - "last": true, - "parentId": "003" - } - ] - } - ] - }] -} \ No newline at end of file diff --git a/admin/data/power.json b/admin/data/power.json deleted file mode 100644 index db7ace11b5044d64cf713cd785ccc1b75cf0eb12..0000000000000000000000000000000000000000 --- a/admin/data/power.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "code": 0, - "msg": "...", - "count": null, - "data": [{ - "powerId": "1", - "powerName": "系统管理", - "powerType": "0", - "powerCode": "", - "powerUrl": "", - "openType": null, - "parentId": "0", - "icon": "layui-icon-set-fill", - "sort": 1, - "enable": 1, - "checkArr": "0" - }, { - "powerId": "2", - "powerName": "用户管理", - "powerType": "1", - "powerCode": "sys:user:main", - "powerUrl": "/system/user/main", - "openType": null, - "parentId": "1", - "icon": "layui-icon-username", - "sort": null, - "enable": 1, - "checkArr": "0" - }, { - "powerId": "3", - "powerName": "角色管理", - "powerType": "1", - "powerCode": "sys:role:main", - "powerUrl": "/system/role/main", - "openType": null, - "parentId": "1", - "icon": "layui-icon-user", - "sort": null, - "enable": 1, - "checkArr": "0" - }, { - "powerId": "4", - "powerName": "权限管理", - "powerType": "1", - "powerCode": "sys:power:main", - "powerUrl": "/system/power/main", - "openType": null, - "parentId": "1", - "icon": "layui-icon-vercode", - "sort": null, - "checkArr": "0" - }, { - "powerId": "442359447487123456", - "powerName": "角色列表", - "powerType": "2", - "powerCode": "sys:role:data", - "powerUrl": "", - "openType": null, - "parentId": "3", - "icon": "layui-icon-rate", - "sort": 1, - "checkArr": "0" - }, { - "powerId": "442417411065516032", - "powerName": "敏捷开发", - "powerType": "0", - "powerCode": "", - "powerUrl": "", - "openType": null, - "parentId": "0", - "icon": "layui-icon-senior", - "sort": 2, - "checkArr": "0" - }, { - "powerId": "442418188639145984", - "powerName": "模板管理", - "powerType": "1", - "powerCode": "exp:template:main", - "powerUrl": "/system/user/main", - "openType": null, - "parentId": "442417411065516032", - "icon": "layui-icon-template-1", - "sort": null, - "checkArr": "0" - }, { - "powerId": "442520236248403968", - "powerName": "数据监控", - "powerType": "1", - "powerCode": "/druid/index.html", - "powerUrl": "/druid/index.html", - "openType": null, - "parentId": "694203021537574912", - "icon": "layui-icon-chart", - "sort": 1, - "checkArr": "0" - }, { - "powerId": "442650387514789888", - "powerName": "定时任务", - "powerType": "0", - "powerCode": "", - "powerUrl": "", - "openType": null, - "parentId": "0", - "icon": "layui-icon-log", - "sort": 5, - "checkArr": "0" - }, { - "powerId": "442650770626711552", - "powerName": "任务管理", - "powerType": "1", - "powerCode": "qrt:task:main", - "powerUrl": "/qrt/task/main", - "openType": null, - "parentId": "442650387514789888", - "icon": "layui-icon-chat", - "sort": 1, - "checkArr": "0" - }, { - "powerId": "442651158935375872", - "powerName": "任务日志", - "powerType": "1", - "powerCode": "qrt:log:main", - "powerUrl": "/qrt/log/main", - "openType": null, - "parentId": "442650387514789888", - "icon": "layui-icon-file", - "sort": 2, - "checkArr": "0" - }, { - "powerId": "442722702474743808", - "powerName": "数据字典", - "powerType": "1", - "powerCode": "system:dictType:main", - "powerUrl": "/system/dictType/main", - "openType": null, - "parentId": "1", - "icon": "layui-icon-form", - "sort": 1, - "checkArr": "0" - }, { - "powerId": "5", - "powerName": "工作流程", - "powerType": "0", - "powerCode": "", - "powerUrl": "", - "openType": null, - "parentId": "0", - "icon": "layui-icon-util", - "sort": 3, - "checkArr": "0" - }, { - "powerId": "6", - "powerName": "模型管理", - "powerType": "1", - "powerCode": null, - "powerUrl": null, - "openType": null, - "parentId": "5", - "icon": "layui-icon layui-icon-edit", - "sort": null, - "checkArr": "0" - }, { - "powerId": "694203021537574912", - "powerName": "系统监控", - "powerType": "0", - "powerCode": "", - "powerUrl": "", - "openType": null, - "parentId": "0", - "icon": "layui-icon-console", - "sort": 4, - "checkArr": "0" - }, { - "powerId": "694203311615639552", - "powerName": "接口文档", - "powerType": "1", - "powerCode": "", - "powerUrl": "/swagger-ui.html", - "openType": null, - "parentId": "694203021537574912", - "icon": "layui-icon-chart", - "sort": 1, - "checkArr": "0" - }] -} diff --git a/admin/data/role.json b/admin/data/role.json deleted file mode 100644 index 42bd064722599de415f6c9dc21e37453bdd632cf..0000000000000000000000000000000000000000 --- a/admin/data/role.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "code": 0, - "msg": "...", - "count": 3, - "data": [{ - "createTime": null, - "createBy": null, - "updateTime": null, - "updateBy": null, - "remark": null, - "roleId": "1", - "roleName": "超级管理员", - "roleCode": "admin", - "enable": "1", - "details": "超级管理员", - "checked": false - }, { - "createTime": null, - "createBy": null, - "updateTime": null, - "updateBy": null, - "remark": null, - "roleId": "2", - "roleName": "普通管理员", - "roleCode": "manager", - "enable": "0", - "details": "普通管理员", - "checked": false - }, { - "createTime": null, - "createBy": null, - "updateTime": null, - "updateBy": null, - "remark": null, - "roleId": "3", - "roleName": "普通用户", - "roleCode": "pearson", - "enable": "0", - "details": "普通用户", - "checked": false - }] -} diff --git a/admin/data/table.json b/admin/data/table.json index 8f148860d6e8922cc8278016402ec459e2a6c02b..c0249f0cdd8cf4d78eab02d84eb5f8a0fb073440 100644 --- a/admin/data/table.json +++ b/admin/data/table.json @@ -1,132 +1,303 @@ { - "code": 0, - "msg": "...", - "count": 3, - "data": [{ - "userId": "1", - "username": "admin", - "password": "$2a$10$1K7E1.IYCrsoZVCb6utOo.5jENtfOzhdKWhc49t2lk.UQd7Oam4FG", - "salt": null, - "status": null, - "realName": "超级'管'理员", - "email": "854085'4@'qq.com", - "avatar": null, - "sex": "1", - "phone": "15543526531", - "enable": "1", - "login": "1", - "roleIds": null - }, { - "userId": "2", - "username": "854085467", - "password": null, - "salt": null, - "status": null, - "realName": "就\"眠\"仪式", - "email": null, - "avatar": null, - "sex": "1", - "phone": "1555324324234", - "enable": "1", - "login": "1", - "roleIds": null - }, { - "userId": "3", - "username": "970796069", - "password": null, - "salt": null, - "status": null, - "realName": "王二麻子", - "email": null, - "avatar": null, - "sex": "1", - "phone": "1555324324234", - "enable": "1", - "login": "1", - "roleIds": null - }, { - "userId": "4", - "username": "admin", - "password": "$2a$10$1K7E1.IYCrsoZVCb6utOo.5jENtfOzhdKWhc49t2lk.UQd7Oam4FG", - "salt": null, - "status": null, - "realName": "超级管理员", - "email": "8540854@qq.com", - "avatar": null, - "sex": "1", - "phone": "15543526531", - "enable": "1", - "login": "1", - "roleIds": null - }, { - "userId": "5", - "username": "854085467", - "password": null, - "salt": null, - "status": null, - "realName": "就眠仪式", - "email": null, - "avatar": null, - "sex": "1", - "phone": "1555324324234", - "enable": "1", - "login": "1", - "roleIds": null - }, { - "userId": "6", - "username": "970796069", - "password": null, - "salt": null, - "status": null, - "realName": "王二麻子", - "email": null, - "avatar": null, - "sex": "1", - "phone": "1555324324234", - "enable": "1", - "login": "1", - "roleIds": null - }, { - "userId": "7", - "username": "admin", - "password": "$2a$10$1K7E1.IYCrsoZVCb6utOo.5jENtfOzhdKWhc49t2lk.UQd7Oam4FG", - "salt": null, - "status": null, - "realName": "超级管理员", - "email": "8540854@qq.com", - "avatar": null, - "sex": "1", - "phone": "15543526531", - "enable": "1", - "login": "1", - "roleIds": null - }, { - "userId": "8", - "username": "854085467", - "password": null, - "salt": null, - "status": null, - "realName": "就眠仪式", - "email": null, - "avatar": null, - "sex": "1", - "phone": "1555324324234", - "enable": "1", - "login": "1", - "roleIds": null - }, { - "userId": "9", - "username": "970796069", - "password": null, - "salt": null, - "status": null, - "realName": "王二麻子", - "email": null, - "avatar": null, - "sex": "1", - "phone": "1555324324234", - "enable": "1", - "login": "1", - "roleIds": null - }] -} + "code": 0, + "msg": "", + "count": 1000, + "totalRow": { + "era": { + "tang": "2", + "song": "2", + "xian": "20" + } + }, + "data": [ + { + "id": "10001", + "username": "就眠儀式", + "email": "test1@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10002", + "username": "杜甫", + "email": "test2@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "108", + "joinTime": "2016-10-14", + "LAY_CHECKED": true + }, + { + "id": "10003", + "username": "就眠儀式", + "email": "test3@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10004", + "username": "就眠儀式", + "email": "test4@email.com", + "sex": "女", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10005", + "username": "就眠儀式", + "email": "test5@email.com", + "sex": "女", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10006", + "username": "就眠儀式", + "email": "test6@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10007", + "username": "就眠儀式", + "email": "test7@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10008", + "username": "就眠儀式", + "email": "test8@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10009", + "username": "就眠儀式", + "email": "test9@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10010", + "username": "就眠儀式", + "email": "test10@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10011", + "username": "就眠儀式", + "email": "test11@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10012", + "username": "就眠儀式", + "email": "test12@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10013", + "username": "就眠儀式", + "email": "test13@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10014", + "username": "就眠儀式", + "email": "test14@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10015", + "username": "就眠儀式", + "email": "test15@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10016", + "username": "就眠儀式", + "email": "test16@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10017", + "username": "就眠儀式", + "email": "test17@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10018", + "username": "就眠儀式", + "email": "test18@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10019", + "username": "就眠儀式", + "email": "test19@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10020", + "username": "就眠儀式", + "email": "test20@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10021", + "username": "就眠儀式", + "email": "test21@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10022", + "username": "就眠儀式", + "email": "test22@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10023", + "username": "就眠儀式", + "email": "test23@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + }, + { + "id": "10024", + "username": "就眠儀式", + "email": "test24@email.com", + "sex": "男", + "city": "浙江杭州", + "sign": "花开堪折直须折,莫待无花空折枝.", + "experience": "100", + "ip": "192.168.0.8", + "checkin": "106", + "joinTime": "2016-10-14" + } + ] +} \ No newline at end of file diff --git a/admin/data/user.json b/admin/data/user.json deleted file mode 100644 index 2e927acc47a225e63b440feaafa34a0595dc8ee2..0000000000000000000000000000000000000000 --- a/admin/data/user.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "code": 0, - "msg": "...", - "count": 3, - "data": [{ - "userId": "1", - "username": "admin", - "password": "$2a$10$1K7E1.IYCrsoZVCb6utOo.5jENtfOzhdKWhc49t2lk.UQd7Oam4FG", - "salt": null, - "status": null, - "realName": "超级管理员", - "email": "8540854@qq.com", - "avatar": null, - "sex": "1", - "phone": "15543526531", - "enable": "1", - "login": "1", - "roleIds": null - }, { - "userId": "442488661347536896", - "username": "854085467", - "password": null, - "salt": null, - "status": null, - "realName": "就眠仪式", - "email": null, - "avatar": null, - "sex": "1", - "phone": "1555324324234", - "enable": "0", - "login": "1", - "roleIds": null - }, { - "userId": "442492965651353600", - "username": "970796069", - "password": null, - "salt": null, - "status": null, - "realName": "王二麻子", - "email": null, - "avatar": null, - "sex": "1", - "phone": "1555324324234", - "enable": "1", - "login": "1", - "roleIds": null - }, { - "userId": "1", - "username": "admin", - "password": "$2a$10$1K7E1.IYCrsoZVCb6utOo.5jENtfOzhdKWhc49t2lk.UQd7Oam4FG", - "salt": null, - "status": null, - "realName": "超级管理员", - "email": "8540854@qq.com", - "avatar": null, - "sex": "1", - "phone": "15543526531", - "enable": "1", - "login": "1", - "roleIds": null - }, { - "userId": "442488661347536896", - "username": "854085467", - "password": null, - "salt": null, - "status": null, - "realName": "就眠仪式", - "email": null, - "avatar": null, - "sex": "1", - "phone": "1555324324234", - "enable": "1", - "login": "1", - "roleIds": null - }, { - "userId": "442492965651353600", - "username": "970796069", - "password": null, - "salt": null, - "status": null, - "realName": "王二麻子", - "email": null, - "avatar": null, - "sex": "1", - "phone": "1555324324234", - "enable": "1", - "login": "1", - "roleIds": null - }, { - "userId": "1", - "username": "admin", - "password": "$2a$10$1K7E1.IYCrsoZVCb6utOo.5jENtfOzhdKWhc49t2lk.UQd7Oam4FG", - "salt": null, - "status": null, - "realName": "超级管理员", - "email": "8540854@qq.com", - "avatar": null, - "sex": "1", - "phone": "15543526531", - "enable": "1", - "login": "1", - "roleIds": null - }, { - "userId": "442488661347536896", - "username": "854085467", - "password": null, - "salt": null, - "status": null, - "realName": "就眠仪式", - "email": null, - "avatar": null, - "sex": "1", - "phone": "1555324324234", - "enable": "1", - "login": "1", - "roleIds": null - }] -} diff --git a/admin/images/403.svg b/admin/images/403.svg deleted file mode 100644 index 610f136fd004f889d25152c3918754988c85f8ca..0000000000000000000000000000000000000000 --- a/admin/images/403.svg +++ /dev/null @@ -1,508 +0,0 @@ - - - - Group 9 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/admin/images/404.svg b/admin/images/404.svg deleted file mode 100644 index 5531d05cffbddd0980b51d1d378671b5520530c7..0000000000000000000000000000000000000000 --- a/admin/images/404.svg +++ /dev/null @@ -1,314 +0,0 @@ - - - - Group 4 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/admin/images/500.svg b/admin/images/500.svg deleted file mode 100644 index de723b1e321432ebe63004f2bc85d3ef6d17132a..0000000000000000000000000000000000000000 --- a/admin/images/500.svg +++ /dev/null @@ -1,208 +0,0 @@ - - - - Group 4 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/admin/images/act.jpg b/admin/images/act.jpg deleted file mode 100644 index 46eb3da8faccbd3a2d0f025d2e20e5e281ec20d2..0000000000000000000000000000000000000000 Binary files a/admin/images/act.jpg and /dev/null differ diff --git a/admin/images/background.svg b/admin/images/background.svg index 2f4b63b9996b80d9a60d8ab0eb93de0344ad0c52..1b153e0df5adb683065b92f39a78f1ccc9de7f94 100644 --- a/admin/images/background.svg +++ b/admin/images/background.svg @@ -1,24 +1,68 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + Group 21 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/admin/images/document.jpg b/admin/images/document.jpg deleted file mode 100644 index 788373eef93aed359f50a335e532b0bee12d5eaf..0000000000000000000000000000000000000000 Binary files a/admin/images/document.jpg and /dev/null differ diff --git a/admin/images/show.png b/admin/images/show.png deleted file mode 100644 index 3d381fe7dbebf6f62f1b65c8981d6798877bbe17..0000000000000000000000000000000000000000 Binary files a/admin/images/show.png and /dev/null differ diff --git a/api/table.json b/api/table.json new file mode 100644 index 0000000000000000000000000000000000000000..7bda61b60cee72bea4cfca81dca7d5ac801c6dda --- /dev/null +++ b/api/table.json @@ -0,0 +1,127 @@ +{ + "code": 0, + "msg": "", + "count": 1000, + "data": [ + { + "id": 10000, + "username": "user-0", + "sex": "女", + "city": "城市-0", + "sign": "签名-0", + "experience": 255, + "logins": 24, + "wealth": 82830700, + "classify": "作家", + "score": 57 + }, + { + "id": 10001, + "username": "user-1", + "sex": "男", + "city": "城市-1", + "sign": "签名-1", + "experience": 884, + "logins": 58, + "wealth": 64928690, + "classify": "词人", + "score": 27 + }, + { + "id": 10002, + "username": "user-2", + "sex": "女", + "city": "城市-2", + "sign": "签名-2", + "experience": 650, + "logins": 77, + "wealth": 6298078, + "classify": "酱油", + "score": 31 + }, + { + "id": 10003, + "username": "user-3", + "sex": "女", + "city": "城市-3", + "sign": "签名-3", + "experience": 362, + "logins": 157, + "wealth": 37117017, + "classify": "诗人", + "score": 68 + }, + { + "id": 10004, + "username": "user-4", + "sex": "男", + "city": "城市-4", + "sign": "签名-4", + "experience": 807, + "logins": 51, + "wealth": 76263262, + "classify": "作家", + "score": 6 + }, + { + "id": 10005, + "username": "user-5", + "sex": "女", + "city": "城市-5", + "sign": "签名-5", + "experience": 173, + "logins": 68, + "wealth": 60344147, + "classify": "作家", + "score": 87 + }, + { + "id": 10006, + "username": "user-6", + "sex": "女", + "city": "城市-6", + "sign": "签名-6", + "experience": 982, + "logins": 37, + "wealth": 57768166, + "classify": "作家", + "score": 34 + }, + { + "id": 10007, + "username": "user-7", + "sex": "男", + "city": "城市-7", + "sign": "签名-7", + "experience": 727, + "logins": 150, + "wealth": 82030578, + "classify": "作家", + "score": 28 + }, + { + "id": 10008, + "username": "user-8", + "sex": "男", + "city": "城市-8", + "sign": "签名-8", + "experience": 951, + "logins": 133, + "wealth": 16503371, + "classify": "词人", + "score": 14 + }, + { + "id": 10009, + "username": "user-9", + "sex": "女", + "city": "城市-9", + "sign": "签名-9", + "experience": 484, + "logins": 25, + "wealth": 86801934, + "classify": "词人", + "score": 75 + } + ] +} \ No newline at end of file diff --git a/component/code/css/style.css b/component/code/css/style.css deleted file mode 100644 index 5d460a5454845a1adbb1d442d051df37d2ce805f..0000000000000000000000000000000000000000 --- a/component/code/css/style.css +++ /dev/null @@ -1,9 +0,0 @@ -html,body{background-color: whitesmoke} -.layui-fluid{margin-top: 15px;} -.content{min-height: 796px;} -.nav{text-align: center;} -.nav button{margin-bottom: 3px;width: 100%;margin-top: 3px;margin-bottom: 3px;border-radius: 1px;} -.nav button:hover{background-color: #5FB878;border: 1px solid #5FB878;color: white;} -.layui-card-body .layui-btn+.layui-btn{margin-left: 0px;} -.code-show{min-height: 454px;} -.js-show{min-height: 200px;} \ No newline at end of file diff --git a/component/code/index.html b/component/code/index.html deleted file mode 100644 index ba02488d8aa7035358ac4376a81f7b836980ef08..0000000000000000000000000000000000000000 --- a/component/code/index.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - layui表单生成器 - - - - -
-
-
- - - - -
-
-
-
- view -
-
-
-
-
-
-
-
-
-
html
-
- -
-
-
-
code
-
- -
-
-
-
-
- - - - - diff --git a/component/pear/css/module/button.css b/component/pear/css/module/button.css deleted file mode 100644 index fcc6ba32ccefc78484aa18545fa737d6024f3c24..0000000000000000000000000000000000000000 --- a/component/pear/css/module/button.css +++ /dev/null @@ -1,169 +0,0 @@ -.pear-btn { - display: inline-block; - line-height: 38px; - white-space: nowrap; - cursor: pointer; - text-align: center; - box-sizing: border-box; - outline: none; - transition: 0.1s; - font-weight: 500; - padding: 0 18px; - height: 38px; - font-size: 14px; - background-color: white; - border: 1px solid #dcdfe6; - border-radius: 2px; -} - -.pear-btn i { - font-size: 13px; -} - -.pear-btn:hover { - opacity: .8; - filter: alpha(opacity=80); - color: #409eff; - background-color: #ECF5FF; -} - -.pear-btn-danger, -.pear-btn-warming, -.pear-btn-success, -.pear-btn-primary { - height: 37px; - line-height: 37px; - color: #fff !important -} - -/** Button 主题 */ -.pear-btn-primary { - border: 1px solid #2D8CF0; - background-color: #2D8CF0 !important; -} -.pear-btn-danger { - border: 1px solid #f56c6c; - background-color: #f56c6c !important; -} -.pear-btn-warming { - border: 1px solid #f6ad55; - background-color: #f6ad55 !important; -} -.pear-btn-success { - border: 1px solid #36b368; - background-color: #36b368 !important; -} - -.pear-btn[round] { - border-radius: 50px; -} - -.pear-btn-primary[plain] { - color: #409eff !important; - background: #ecf5ff 10% !important; -} - -.pear-btn-primary[plain]:hover { - color: #fff !important; - background-color: #2d8cf0!important -} - -.pear-btn-success[plain] { - color: #36b368 !important; - background: #f0f9eb !important; -} - -.pear-btn-success[plain]:hover { - color: white !important; - background-color: #36b368 !important -} - -.pear-btn-warming[plain] { - color: #e6a23c !important; - background: #fdf6ec !important; -} - -.pear-btn-warming[plain]:hover { - color: white !important; - background-color: #e6a23c !important -} - -.pear-btn-danger[plain] { - color: #f56c6c !important; - background: #fef0f0 !important; -} - -.pear-btn-danger[plain]:hover { - color: white !important; - background-color: #f56c6c !important -} - -/** Button Group */ -.pear-btn-group { - display: inline-block; - vertical-align: middle; -} - -.pear-btn-group .pear-btn { - float: left; - position: relative; - border-radius: 0px; - margin-left: 1px; - margin-right: 1px; -} - -.pear-btn-md { - height: 34px; - line-height: 34px; - padding: 0 10px; - font-size: 12.5px; -} - -.pear-btn-group .pear-btn:first-child { - border-top-left-radius: 4px !important; - border-bottom-left-radius: 4px !important; -} - -.pear-btn-group .pear-btn:last-child { - border-top-right-radius: 4px !important; - border-bottom-right-radius: 4px !important; -} - -.pear-btn-group .pear-btn[round]:first-child { - border-top-left-radius: 50px !important; - border-bottom-left-radius: 50px !important; -} - -.pear-btn-group .pear-btn[round]:last-child { - border-top-right-radius: 50px !important; - border-bottom-right-radius: 50px !important; -} - -/** Button Size*/ -.pear-btn-sm { - height: 32px; - line-height: 32px; - padding: 0 10px; - font-size: 12px; -} - -.pear-btn-xs { - height: 28px; - line-height: 28px; - padding: 0 8px; - font-size: 12px; -} - -.pear-btn-md { - height: 34px; - line-height: 34px; - padding: 0 10px; - font-size: 12.5px; -} - -.pear-btn-lg { - height: 44px; - line-height: 44px; - padding: 0 25px; - font-size: 16px; -} diff --git a/component/pear/css/module/card.css b/component/pear/css/module/card.css deleted file mode 100644 index 39b4ed28ec3a169084d39f0a64e883b6912c03e3..0000000000000000000000000000000000000000 --- a/component/pear/css/module/card.css +++ /dev/null @@ -1,93 +0,0 @@ -.project-list-item { - background-color: #fff; - border-radius: 4px; - cursor: pointer; - transition: all .2s; -} - -.project-list-item:hover { - box-shadow: 2px 0 4px rgba(0, 21, 41, .35); -} - -.project-list-item .project-list-item-cover { - width: 100%; - height: 180px; - display: block; - border-top-left-radius: 4px; - border-top-right-radius: 4px; -} - -.project-list-item-body { - padding: 20px; - border: 1px solid #e8e8e8; -} - -.project-list-item .project-list-item-body>h2 { - font-size: 16px; - color: #333; - margin-bottom: 12px; -} - -.project-list-item .project-list-item-text { - height: 40px; - overflow: hidden; - margin-bottom: 12px; -} - -.project-list-item .project-list-item-desc { - position: relative; -} - -.project-list-item .project-list-item-desc .time { - color: #999; - font-size: 12px; -} - -.project-list-item .project-list-item-desc .ew-head-list { - position: absolute; - right: 0; - top: 0; -} - -.ew-head-list .ew-head-list-item:first-child { - margin-left: 0; -} - -.ew-head-list .ew-head-list-item { - width: 22px; - height: 22px; - border-radius: 50%; - border: 1px solid #fff; - margin-left: -10px; -} - -.ew-head-list .ew-head-list-item { - width: 22px; - height: 22px; - border-radius: 50%; - border: 1px solid #fff; - margin-left: -10px; -} - -.cloud-card-component { - padding: 20px; -} - -.cloud-card-component .layui-table-click { - border-radius: 6px!important; -} - -.ew-table-loading { - padding: 10px 0; - text-align: center; -} -.ew-table-loading > i { - color: #999; - font-size: 30px; -} -.ew-table-loading.ew-loading-float { - position: absolute; - top: 0; - left: 0; - right: 0; -} \ No newline at end of file diff --git a/component/pear/css/module/code.css b/component/pear/css/module/code.css deleted file mode 100644 index 4bde0d3d69692553fce81f4057991084372c499a..0000000000000000000000000000000000000000 --- a/component/pear/css/module/code.css +++ /dev/null @@ -1,9 +0,0 @@ -.layui-colla-content{ - padding: 0px; -} -.layui-code-view{ - margin: 0px!important; -} -.layui-code-h3{ - display: none!important; -} \ No newline at end of file diff --git a/component/pear/css/module/cropper.css b/component/pear/css/module/cropper.css deleted file mode 100644 index 2c6404269ec581593a1f3bca286fcb4107b3ae8d..0000000000000000000000000000000000000000 --- a/component/pear/css/module/cropper.css +++ /dev/null @@ -1,272 +0,0 @@ -.cropper-container { - position: relative; - overflow: hidden; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none -} - -.cropper-container img { - display: block; - width: 100%; - min-width: 0 !important; - max-width: none !important; - height: 100%; - min-height: 0 !important; - max-height: none !important; - image-orientation: 0deg !important -} - -.cropper-canvas, -.cropper-crop-box, -.cropper-drag-box, -.cropper-modal { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0 -} - -.cropper-drag-box { - background-color: #fff; - filter: alpha(opacity=0); - opacity: 0 -} - -.cropper-modal { - background-color: #000; - filter: alpha(opacity=50); - opacity: .5 -} - -.cropper-view-box { - display: block; - width: 100%; - height: 100%; - overflow: hidden; - outline: #69f solid 1px; - outline-color: rgba(102, 153, 255, .75) -} - -.cropper-dashed { - position: absolute; - display: block; - filter: alpha(opacity=50); - border: 0 dashed #fff; - opacity: .5 -} - -.cropper-dashed.dashed-h { - top: 33.33333333%; - left: 0; - width: 100%; - height: 33.33333333%; - border-top-width: 1px; - border-bottom-width: 1px -} - -.cropper-dashed.dashed-v { - top: 0; - left: 33.33333333%; - width: 33.33333333%; - height: 100%; - border-right-width: 1px; - border-left-width: 1px -} - -.cropper-face, -.cropper-line, -.cropper-point { - position: absolute; - display: block; - width: 100%; - height: 100%; - filter: alpha(opacity=10); - opacity: .1 -} - -.cropper-face { - top: 0; - left: 0; - cursor: move; - background-color: #fff -} - -.cropper-line { - background-color: #69f -} - -.cropper-line.line-e { - top: 0; - right: -3px; - width: 5px; - cursor: e-resize -} - -.cropper-line.line-n { - top: -3px; - left: 0; - height: 5px; - cursor: n-resize -} - -.cropper-line.line-w { - top: 0; - left: -3px; - width: 5px; - cursor: w-resize -} - -.cropper-line.line-s { - bottom: -3px; - left: 0; - height: 5px; - cursor: s-resize -} - -.cropper-point { - width: 5px; - height: 5px; - background-color: #69f; - filter: alpha(opacity=75); - opacity: .75 -} - -.cropper-point.point-e { - top: 50%; - right: -3px; - margin-top: -3px; - cursor: e-resize -} - -.cropper-point.point-n { - top: -3px; - left: 50%; - margin-left: -3px; - cursor: n-resize -} - -.cropper-point.point-w { - top: 50%; - left: -3px; - margin-top: -3px; - cursor: w-resize -} - -.cropper-point.point-s { - bottom: -3px; - left: 50%; - margin-left: -3px; - cursor: s-resize -} - -.cropper-point.point-ne { - top: -3px; - right: -3px; - cursor: ne-resize -} - -.cropper-point.point-nw { - top: -3px; - left: -3px; - cursor: nw-resize -} - -.cropper-point.point-sw { - bottom: -3px; - left: -3px; - cursor: sw-resize -} - -.cropper-point.point-se { - right: -3px; - bottom: -3px; - width: 20px; - height: 20px; - cursor: se-resize; - filter: alpha(opacity=100); - opacity: 1 -} - -.cropper-point.point-se:before { - position: absolute; - right: -50%; - bottom: -50%; - display: block; - width: 200%; - height: 200%; - content: " "; - background-color: #69f; - filter: alpha(opacity=0); - opacity: 0 -} - -@media (min-width:768px) { - .cropper-point.point-se { - width: 15px; - height: 15px - } -} - -@media (min-width:992px) { - .cropper-point.point-se { - width: 10px; - height: 10px - } -} - -@media (min-width:1200px) { - .cropper-point.point-se { - width: 5px; - height: 5px; - filter: alpha(opacity=75); - opacity: .75 - } -} - -.cropper-bg { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC) -} - -.cropper-invisible { - filter: alpha(opacity=0); - opacity: 0 -} - -.cropper-hide { - position: fixed; - top: 0; - left: 0; - z-index: -1; - width: auto !important; - min-width: 0 !important; - max-width: none !important; - height: auto !important; - min-height: 0 !important; - max-height: none !important; - filter: alpha(opacity=0); - opacity: 0 -} - -.cropper-hidden { - display: none !important -} - -.cropper-move { - cursor: move -} - -.cropper-crop { - cursor: crosshair -} - -.cropper-disabled .cropper-canvas, -.cropper-disabled .cropper-face, -.cropper-disabled .cropper-line, -.cropper-disabled .cropper-point { - cursor: not-allowed -} diff --git a/component/pear/css/module/dtree/dtree.css b/component/pear/css/module/dtree/dtree.css deleted file mode 100644 index 3e5364d4d5fa819bd748d4ce91476300482d68f7..0000000000000000000000000000000000000000 --- a/component/pear/css/module/dtree/dtree.css +++ /dev/null @@ -1,112 +0,0 @@ - -/**************** 主题换肤 ****************/ -/* 默认风格*/ -.dtree-theme-item-this{background-color: #d2d2d2!important;} -.dtree-theme-item:hover{background-color: #eaeceb!important;} -.dtree-theme-item cite{font-size:12px!important;} -.dtree-theme-item:hover cite{color:#fe7786!important;} - -.dtree-theme-dtreefont{font-size: 16px!important;} -.dtree-theme-ficon{color:#000!important;} -.dtree-theme-icon{color:orange!important;} -.dtree-theme-checkbox:hover{color:#fe7786!important;} -.dtree-theme-choose{color:#fe7786!important;} - -/* layui主题风格*/ -.dtree-layui-item-this{background: none!important;} -.dtree-layui-item:hover{background: none!important;} -.dtree-layui-item cite{font-size:14px!important;} -.dtree-layui-item:hover cite{opacity:0.5;filter:Alpha(opacity=50);text-decoration: underline;} - -.dtree-layui-dtreefont{font-size: 18px!important;} -.dtree-layui-ficon{font-size: 18px!important;color:#393D49!important;} -.dtree-layui-icon{color:#666!important;} -.dtree-layui-checkbox:hover{color:#5FB878!important;} -.dtree-layui-choose{color:#5FB878!important;} - -/* laySimple主题风格*/ -.dtree-laySimple-item-this{background-color: #d2d2d2!important;} -.dtree-laySimple-item:hover{background-color: #eaeceb!important;} -.dtree-laySimple-item cite{font-size:12px!important;} -.dtree-laySimple-item:hover cite{color:#01AAED!important;} - -.dtree-laySimple-dtreefont{font-size: 16px!important;} -.dtree-laySimple-ficon{font-size: 14px!important;color:#393D49!important;} -.dtree-laySimple-icon{color:#393D49!important;} -.dtree-laySimple-checkbox:hover{color:#01AAED!important;} -.dtree-laySimple-choose{color:#01AAED!important;} -/**************** 树基础 ****************/ -/* 菜单栏*/ -.dtree-menubar {padding-left: 10px;} -.dtree-menubar .layui-btn-group .layui-btn-sm{height: 20px;line-height: 20px;padding: 0 5px;font-size: 12px;} -.dtree-menubar .layui-btn-group .layui-btn-sm i{font-size: 12px!important;} - -/* 工具栏*/ -.dtree-toolbar{position: absolute;z-index: 940520;padding: 0;background-color: #eceaeb;} -.dtree-toolbar .layui-nav-child{position: static;} -.dtree-toolbar .layui-nav-child dd{cursor: pointer;} -.dtree-toolbar .layui-nav-child dd a i{font-size:16px;display: inline-block;margin: 0px 1px;color:#fe7786;} -.dtree-toolbar .layui-nav-child dd a i:hover{font-weight: bold;} -.dtree-toolbar .layui-nav-bar{display: none!important;} -.dtree-toolbar-tool{padding: 30px;} - -.dtree-toolbar-fixed{position: absolute;right: 5px;top: 2px;font-style: normal;transition: all .3s;-webkit-transition: all .3s;} -/*.dtree-toolbar-fixed a{border:1px solid #fe7786;}*/ -.dtree-toolbar-fixed a i{font-size:14px;display: inline-block;margin: 0px 1px;color:#fe7786;} -.dtree-toolbar-fixed a i:hover{opacity:0.8;filter:Alpha(opacity=80);} - -/* 树基本*/ -.dtree{width:260px;} -.dtree-nav-item{line-height:33px;padding-left:16px;} -.dtree-nav-ul-sid{display: none;} -.dtree-none-text{font-size: 12px;text-align: center;color: gray;} - -/* 树线*/ -.dtree-nav-first-line,.dtree-nav-line,.dtree-nav-last-line{position: relative;} -.dtree-nav-first-line:before{content:"";position: absolute;height: 0;border-left: 1px dotted #c0c4cc;} -.dtree-nav-first-line:after{content:"";position: absolute;height: 0;border-top: 1px dotted #c0c4cc;} - -.dtree-nav-line:before{content:"";position: absolute;top: 0;left: 7px;width: 0;height: 100%;border-left: 1px dotted #c0c4cc;} -.dtree-nav-line:after{content:"";position: absolute;top: 16px;left: 8px;width: 9px;height: 0;border-top: 1px dotted #c0c4cc;} - -.dtree-nav-last-line:before{content:"";position: absolute;top: 0;left: 7px;width: 0;height: 17px;border-left: 1px dotted #c0c4cc;} -.dtree-nav-last-line:after{content:"";position: absolute;top: 16px;left: 8px;width: 9px;height: 0;border-top: 1px dotted #c0c4cc;} - - -/* 图标及复选框*/ -.dtreefont{cursor: pointer;} -.dtreefont-special{margin: 0 4px;} -.dtree-nav-checkbox-div{display: inline-block;} -.dtree-nav-checkbox-div>i{display: inline-block;margin: 0px 1px;} -.dtree-nav-checkbox-div>i:last-child{margin-right: 4px;} -.dtree-nav-checkbox-div>i:hover{opacity:0.8;filter:Alpha(opacity=80);} - -/* 行 文字*/ -.dtree-nav-div{display:block;vertical-align:top;position:relative;} -.dtree-nav-div cite{font-style: normal;cursor: pointer;} -.dtree-nav-div:hover cite{opacity:0.7;filter:Alpha(opacity=70);transition: all .3s;-webkit-transition: all .3s;} - -/* 规则属性*/ -.dtree-nav-show {display: block!important;} -.dtree-nav-hide {display: none!important;} -.dtree-nav-this {} -.dtree-icon-hide {opacity:0;filter:Alpha(opacity=0);} -.dtree-icon-null-open,.dtree-icon-null-close,.dtree-icon-null{margin: 0 2px;} -.dtree-disabled{cursor: not-allowed; color:#c2c2c2!important;} -.dtree-disabled:hover{color:#c2c2c2!important;} -.dtree-nav-div cite.dtree-disabled{font-style: normal; cursor: not-allowed; color:#c2c2c2!important;} -.dtree-nav-div>cite.dtree-disabled:hover{color:#c2c2c2!important;} - - -/** 下拉树属性*/ -.dtree-select{position: absolute;max-height: 500px;height: 350px;overflow: auto;width: 99%;z-index: 123;display: none;border:1px solid silver;top: 42px;} -.dtree-select-show{display: block!important;} - -/* 简单适配*/ -@media screen and (max-width:1700px) and (min-width:1300px){ - .dtree-nav-item {padding-left: 15px;} -} - - - - diff --git a/component/pear/css/module/dtree/dtree.js b/component/pear/css/module/dtree/dtree.js deleted file mode 100644 index a05b22a8e3798284f8e2f84d4b715d04295a6095..0000000000000000000000000000000000000000 --- a/component/pear/css/module/dtree/dtree.js +++ /dev/null @@ -1,4947 +0,0 @@ -/** - *@Name dtree 树形组件 - *@Author 智慧的小西瓜 - *@DOCS http://www.wisdomelon.com/DTreeHelper/ - *@License https://www.layui.com/ - *@LASTTIME 2019/10/24 - *@VERSION v2.5.6 - */ -layui.define(['jquery','layer','form'], function(exports) { - var $ = layui.$, - layer = layui.layer, - form = layui.form; - - // 树的公共定义样式汇总 - var LI_NAV_CHILD = "dtree-nav-ul-sid", LI_NAV_ITEM = "dtree-nav-item", - LI_DIV_ITEM = "dtree-nav-div", DTREEFONTSPECIAL="dtreefont-special", NONETITLE="dtree-none-text", - LI_DIV_MENUBAR = "dtree-menubar", - LI_DIV_TOOLBAR = "dtree-toolbar", TOOLBAR_TOOL = "dtree-toolbar-tool", TOOLBAR_TOOL_EM = "dtree-toolbar-fixed", - LI_DIV_CHECKBAR = "dtree-nav-checkbox-div", - LI_CLICK_CHECKBAR = "d-click-checkbar", //绑定点击复选框时需要用到 - LI_DIV_TEXT_CLASS = "t-click", UL_ROOT="dtree", - LI_NAV_FIRST_LINE = "dtree-nav-first-line", LI_NAV_LINE = "dtree-nav-line", LI_NAV_LAST_LINE = "dtree-nav-last-line"; - - - // 树的公共指定 - var NAV_THIS = "dtree-nav-this", //当前节点 - NAV_SHOW = "dtree-nav-show", //显示子节点 - NAV_HIDE = "dtree-nav-hide", //隐藏节点 - NAV_DIS = "dtree-disabled", //禁用节点 - ICON_HIDE = "dtree-icon-hide", //隐藏图标 - $BODY = $("body"), //body选择器 - $WIN = $(window), //window窗口 - $DOC = $(document), //当前文档 - MOD_NAME = "dtree", //模块名称 - VERSION = "v2.5.6", //版本 - OPTIONS = {}, //全局属性配置 - DTrees = {}; //当前被实例化的树的集合 - - // 树的自定义图标 - var DTREEFONT = "dtreefont", //默认使用图标字体 - LI_DIV_CHECKBAR_ON = "dtree-icon-fuxuankuangxuanzhong", //复选框选中图标 - LI_DIV_CHECKBAR_OUT = "dtree-icon-fuxuankuang", //复选框未选中图标 - LI_DIV_CHECKBAR_NOALL = "dtree-icon-fuxuankuang-banxuan", //复选框半选图标 - LI_DIV_MENUBAR_DOWN = "dtree-icon-move-down", //menubar的展开全部的图标 - LI_DIV_MENUBAR_UP = "dtree-icon-move-up", //menubar的收缩全部的图标 - LI_DIV_MENUBAR_REFRESH = "dtree-icon-refresh", //menubar的刷新图标 - LI_DIV_MENUBAR_CHECKALL = "dtree-icon-roundcheckfill", //menubar的全选图标 - LI_DIV_MENUBAR_UNCHECKALL = "dtree-icon-roundclosefill", //menubar的全不选图标 - LI_DIV_MENUBAR_INVERTALL = "dtree-icon-roundcheck", //menubar的反选图标 - LI_DIV_MENUBAR_DELETE = "dtree-icon-delete1", //menubar的删除图标 - LI_DIV_MENUBAR_SEARCH = "dtree-icon-search_list_light", //menubar的搜索图标 - LI_DIV_TOOLBAR_PULLDOWN = "dtree-icon-pulldown", //toolbar的展开图标 - LI_DIV_TOOLBAR_PULLUP = "dtree-icon-pullup", //toolbar的收缩图标 - LI_DIV_TOOLBAR_ADD = "dtree-icon-roundadd", //toolbar的新增图标 - LI_DIV_TOOLBAR_EDIT = "dtree-icon-bianji", //toolbar的编辑图标 - LI_DIV_TOOLBAR_DEL = "dtree-icon-roundclose"; //toolbar的删除图标 - - // 树的非叶子节点图标集合 - var nodeIconArray = { - "-1": {"open": "dtree-icon-null-open", "close": "dtree-icon-null-close"}, //未指定 - "0" : {"open": "dtree-icon-wenjianjiazhankai", "close": "dtree-icon-weibiaoti5"}, //文件夹(二级图标默认样式) - "1" : {"open": "dtree-icon-jian", "close": "dtree-icon-jia"}, //+-图标(一级图标默认样式) - "2" : {"open": "dtree-icon-xiangxia1", "close": "dtree-icon-xiangyou"} //箭头图标 - }; - - // 树的叶子节点图标集合 - var leafIconArray = { - "-1": "dtree-icon-null", //未指定 - "0" : "dtree-icon-weibiaoti5", //文件夹 - "1" : "dtree-icon-yonghu", //人员 - "2" : "dtree-icon-fenzhijigou", //机构 - "3" : "dtree-icon-fenguangbaobiao", //报表 - "4" : "dtree-icon-xinxipilu", //信息 - "5" : "dtree-icon-shuye1", //叶子(二级图标默认样式) - "6" : "dtree-icon-caidan_xunzhang", //勋章 - "7" : "dtree-icon-normal-file", //文件 - "8" : "dtree-icon-dian", //小圆点(一级图标默认样式) - "9" : "dtree-icon-set-sm", //齿轮 - "10" : "dtree-icon-rate" //星星 - }; - - // 树的自定义样式 - var DTREE = "dtree-", //自定义样式前缀 - ITEMTHIS = "-item-this", //自定义样式当前行选中后缀 - ITEM = "-item", //自定义样式当前行后缀 - DFONT = "-dtreefont", //自定义样式图标样式后缀 - FICON = "-ficon", //自定义样式一级图标样式后缀 - ICON = "-icon", //自定义样式二级图标样式后缀 - CBOX = "-checkbox", //自定义样式复选框样式后缀 - CHS = "-choose"; //自定义样式复选框选中样式后缀 - - // 树自定义操作事件名称集合 绑定dtree-click的事件 - var eventName = { - checkNodeClick: "checkNodeClick", //点击复选框 - itemNodeClick: "itemNodeClick" //点击子节点div - }; - - // 树默认toolbar提供的功能集合 绑定dtree-tool的事件 - var defaultTool = { - pulldown: "pulldown", //点击展开当前节点下的全部节点 - pullup: "pullup", //点击收缩当前节点下的全部节点 - addTool: "addToolbar", //点击toolbar新增 - editTool: "editToolbar", //点击toolbar编辑 - delTool: "delToolbar" //点击toolbar删除 - }; - - // 树默认menubar提供的功能集合 绑定dtree-menu的事件 - var defaultMenu = { - moveDown: "moveDown", //menubar展开全部节点 - moveUp: "moveUp", //menubar收缩全部节点 - refresh: "refresh", //menubar刷新树 - checkAll: "checkAll", //menubar全选 - unCheckAll: "unCheckAll", //menubar全不选 - invertAll: "invertAll", //menubar反选 - remove: "remove", //menubar删除选中节点 - searchNode: "searchNode" //menubar查询节点 - }; - - // 树的公共事件 - var event = { - getElemId: function(options){ // 根据传入的参数获取ID - var elem = options.elem || ""; - var obj = options.obj || $(elem); - - if (obj.length == 0) { //页面中未找到绑定id - return ""; - } else { - return $(obj)[0].id; - } - }, - escape: function(html){ - if(typeof html !== 'string') return ''; - return html.replace(entityReg.escape, function(match){return entityMap.escape[match];}); - }, - unescape: function(str){ - if(typeof str !== 'string') return ''; - return str.replace(entityReg.unescape, function(match){return entityMap.unescape[match];}); - }, - cloneObj: function (obj, filter) { //深复制对象方法 - var newObj = {}; - if (obj instanceof Array) { - newObj = []; - } - var str = ""; - if(typeof filter !== 'undefined') {str = filter.join(",");} - for (var key in obj) { - if(str.indexOf(key) == -1){ - var val = obj[key]; - newObj[key] = typeof val === 'object' ? event.cloneObj(val, typeof filter !== undefined ? filter : []): val; - } - - } - return newObj; - }, - trimToDot: function(str){ - return str.replace(/ /g, "."); - } - }; - - // 特殊符号转义 - var keys = Object.keys || function(obj) { - obj = Object(obj); - var arr = []; - for(var a in obj) arr.push(a); - return arr; - }; - var invert = function(obj){ - obj = Object(obj); - var result = {}; - for(var a in obj) result[obj[a]] = a; - return result; - }; - var entityMap = { - escape: { - "&" : "&", - "<" : "<", - ">" : ">", - "'" : "&quo;" - } - }; - entityMap.unescape = invert(entityMap.escape); - var entityReg = { - escape: RegExp('[' + keys(entityMap.escape).join('') + ']', 'g'), - unescape: RegExp('(' + keys(entityMap.unescape).join('|') + ')', 'g') - }; - - //异步加载接口 - var AjaxHelper = { - request : function(config) { - var data = config.data ? config.data : {}; - var async = (typeof (config.async) === "boolean") ? config.async : true; - $.ajax({ - type : config.type ? config.type : "POST", - headers : config.headers, - url : config.url, - dataType : config.dataType ? config.dataType : "json", - data : data, - async : async, - contentType : config.contentType, - xhrFields: {withCredentials: config.withCredentials}, - success : config.success, - error : function(XMLHttpRequest, textStatus, errorThrown) { - if (typeof (config.error) === "function") { - config.error(XMLHttpRequest, textStatus, errorThrown); - } else { - layer.msg("异步加载失败: " + textStatus,{icon:5, shift:6}); - } - }, - statusCode : { - 404 : function() { - layer.msg('未找到指定请求,请检查访问路径!',{icon:5, shift:6}); - }, - 500 : function() { - layer.msg('系统错误!',{icon:5, shift:6}); - } - }, - complete : function(XMLHttpRequest, textStatus) { - if (typeof (config.complete) === "function") { - config.complete(XMLHttpRequest, textStatus); - } - } - }); - }, - serialize: function(param){ //json序列化 key=value&key1=value1 - var p = "?"; - for (var key in param) { - p += key + "=" + param[key] + "&"; - } - p = p.substring(0, p.length-1); - return p; - } - }; - - // 树类 - var DTree = function(options){ - var _this = this; - /** 默认赋值**/ - this.formatter = { // 数据过滤 - title: false // 文字,默认不开启 - }; - this.response = { // 树返回的json格式 - statusName: "code", //返回标识 - statusCode: 200, //返回码 - message: "message", //返回信息 - rootName: "data", //根节点名称 - treeId: "id", //节点ID - parentId: "parentId", //父节点ID - title: "title", //节点名称 - ficonClass: "ficonClass", //自定义一级图标 - iconClass: "iconClass", //自定义二级图标 - childName: "children", //子节点名称 - last: "last", //是否最后一级节点 -// level: "level", //层级 - spread: "spread", //展开 - disabled: "disabled", //禁用 - hide: "hide", //隐藏 - checkArr: "checkArr", //复选框列表 - checked: "checked", //是否选中 - type: "type", //复选框标记 - basicData: "basicData" //表示用户自定义需要存储在树节点中的数据 - }; - this.defaultRequest = { // 树的默认发起请求参数格式,最后会将value作为参数名称传递 - nodeId: "nodeId", //节点ID - parentId: "parentId", //父节点ID - context: "context", //节点内容 - leaf: "leaf", //是否叶子节点 - level: "level", //层级 - spread: "spread", //节点展开状态 - dataType: "dataType", //节点标记 - checked: "checked", //节点复选框选中状态 - initchecked: "initchecked", //节点复选框初始状态 - basicData: "basicData", //用户自定义的记录节点数据 - recordData: "recordData", //当前data数据(排除basicData和children字段) - }; - this.toolbarFun = { - addTreeNode: function(param, $div) { //添加树节点后调用的函数,用于用户自定义,如未指定则树不会发生变化 - return ; - }, - editTreeNode: function(param, $div) { //编辑树节点后调用的函数,用于用户自定义,如未指定则树不会发生变化 - return ; - }, - editTreeLoad: function(param){ // 编辑树的数据回显,用于打开编辑时,回填数据 - return ; - }, - delTreeNode: function(param, $div){ //删除树后调用的函数,用于用户自定义,如未指定则树不会发生变化 - return ; - }, - loadToolbarBefore: function(buttons, param, $div){ // 右键菜单加载前的函数 - return buttons; - } - }; - this.toolbarStyle = { - title: "节点", - area: ["60%","80%"] - }; - this.menubarFun = { - remove: function(checkbarNodes){ //删除复选框选中节点,需要用户自定义,如未指定则树只是页面上做了修改 - return true; - } - }; - this.menubarTips = { - toolbar: [], - group: [defaultMenu.moveDown, defaultMenu.moveUp, defaultMenu.refresh, defaultMenu.checkAll, defaultMenu.unCheckAll, defaultMenu.invertAll, defaultMenu.remove, defaultMenu.searchNode], - freedom: [] - }; - this.checkbarFun = { - chooseBefore: function($i, node){ // 复选框点击前回调 - return true; - }, - chooseDone: function(checkbarNodesParam) { //复选框点击事件完毕后,返回该树关于复选框操作的全部信息,用于用户自定义,如未指定则树只是页面上做了修改 - return ; - } - }; - this.iframeDefaultRequest = { //iframe的默认参数,目的是与加载树的参数不一样 - nodeId: "nodeId", //节点ID - parentId: "parentId", //父节点ID - context: "context", //节点内容 - leaf: "leaf", //是否叶子节点 - level: "level", //层级 - spread: "spread", //节点展开状态 - dataType: "dataType", //节点标记 - checked: "checked", //节点复选框选中状态 - initchecked: "initchecked", //节点复选框初始状态 - basicData: "basicData", //用户自定义的记录节点数据 - recordData: "recordData", //当前data数据(排除basicData和children字段) - }; - - this.iframeFun = { - iframeDone: function(iframeParam){ //iframe加载完毕后,用于用户自定义事件 - return ; - } - }; - this.style = { //树最终使用的样式集合 - item: "", //每一项div的样式 - itemThis: "", //选中div的样式 - dfont: "", //一级图标的样式 - icon: "", //二级图标的样式 - cbox: "", //复选框的样式 - chs: "" //复选框选中的样式 - }; - this.usefontStyle = { //树最终使用的图标集合 - fnode:{ //一级节点 - node:{ //非叶子节点 - open:"", //节点展开 - close:"" //节点关闭 - }, - leaf:"" //叶子节点 - }, - snode:{ //二级节点 - node:{ //非叶子节点 - open:"", //节点展开 - close:"" //节点关闭 - }, - leaf:"" //叶子节点 - }, - checkbox:{ //复选框 - on:"", //复选框选中 - out:"", //未选中 - noall:"" //半选 - }, - menubar:{ //菜单栏 - movedown:"", //全部展开 - moveup:"", //全部收缩 - refresh:"", //刷新 - checkAll:"", //全选 - unCheckAll:"", //全不选 - invertAll:"", //反选 - remove:"", //删除 - search:"" //搜索 - }, - menubarExt:"", //扩展菜单栏 - toolbar:{ //工具栏 - menubar:{ //依附在菜单栏的工具栏 - movedown:"", //全部展开 - moveup:"", //全部收缩 - refresh:"", //刷新 - checkAll:"", //全选 - unCheckAll:"", //全不选 - invertAll:"", //反选 - remove:"", //删除 - search:"" //搜索 - }, - menubarExt:"", //依附在菜单栏的扩展菜单栏 - pulldown:"", //展开 - pullup:"", //收缩 - add:"", //添加 - edit:"", //编辑 - del:"" //删除 - }, - toolbarExt:"" //扩展工具栏 - } - - /** 数据绑定**/ - this.node = { // 树节点选中时,包含当前节点的全部信息 - nodeId: "", //节点ID - parentId: "", //父节点ID - context: "", //节点内容 - leaf: "", //是否叶子节点 - level: "", //层级 - spread: "", //节点展开状态 - dataType: "", //节点标记 - checked: "", //节点复选框选中状态 - initchecked: "", //节点复选框初始状态 - basicData: "", //用户自定义的记录节点数据 - recordData: "", //当前data数据(排除basicData和children字段) - }; - - this.toolbarMenu = {}; // 工具栏右键菜单绑定的所有元素 - this.checkbarNode = []; // 复选框标记的全部节点数据 - this.errData = []; // 记录在渲染节点时有问题的数据 - this.checkArrLen = 0; //添加节点的时判断复选框个数 - this.temp = []; // 临时变量 - this.bak = ""; // 临时变量 - this.setting(options); - }; - - /******************** 初始参数加载 ********************/ - // 设置基本参数值 - DTree.prototype.setting = function(options) { - this.options = options || {}; - - /** 绑定元素参数(必填,2个参数项必填一个)**/ - this.elem = this.options.elem || OPTIONS.elem || ""; //树绑定的元素ID:#elem - if(typeof this.options.obj === 'undefined'){ - if(this.elem) { - if($(this.elem).length > 0) { - this.obj = $(this.elem); - } - } - } else { - this.obj = this.options.obj || OPTIONS.obj || this.obj; //树绑定的jquery元素,用于当元素是延迟加载出来的话,可以用这个找到 - this.elem = "#" + this.obj[0].id; - } - - /** 基本参数**/ - this.scroll = this.options.scroll || OPTIONS.scroll || this.elem; //树的上级div容器,让树可以显示滚动条的div容器的ID - this.accordion = (typeof (this.options.accordion) === "boolean") ? this.options.accordion : (typeof (OPTIONS.accordion) === "boolean") ? OPTIONS.accordion : false; //手风琴加载, 默认false - if(this.accordion) { - this.initLevel = 1; //默认展开节点 1节 - } else { - this.initLevel = this.options.initLevel || OPTIONS.initLevel || 2; //默认展开节点 2节 - } - this.type = this.options.type || OPTIONS.type || "load"; //树的加载方式 all,全量树, load,增量树,默认load - this.cache = (typeof (this.options.cache) === "boolean") ? this.options.cache : (typeof (OPTIONS.cache) === "boolean") ? OPTIONS.cache : true; //数据缓存,默认true - this.record = this.options.record || OPTIONS.record || false; //开启数据记录模式,默认false - this.load = (typeof (this.options.load) === "boolean") ? this.options.load : (typeof (OPTIONS.load) === "boolean") ? OPTIONS.load : true; //开启加载动画,默认true - this.none = this.options.none || OPTIONS.nont || "无数据"; //初始加载无记录时显示文字 - this.tempHeight = this.options.height || OPTIONS.height; //临时转换高度变量 - if(this.tempHeight) { // 设置高度 - if(/^full-\d+$/.test(this.tempHeight)) { - this.fullHeightGap = this.tempHeight.split('-')[1]; - this.height = $WIN.height() - this.fullHeightGap; //设置高度 - } else { - this.fullHeightGap = this.tempHeight; - this.height = this.tempHeight; - } - } else { - this.fullHeightGap = ""; - this.height = ""; - } - this.width = this.options.width || OPTIONS.width || "260"; //宽度 - this.obj.css("width", this.width); - - /** 样式相关参数**/ - this.iconfont = this.options.iconfont || OPTIONS.iconfont || DTREEFONT; //默认图标字体 dtreefont - this.iconfontStyle = this.options.iconfontStyle || OPTIONS.iconfontStyle || {}; //用于自定义树的每个关键部位使用的图标 - this.nodeIconArray = $.extend(nodeIconArray, this.options.nodeIconArray || OPTIONS.nodeIconArray) || nodeIconArray; //用户自定义非叶子节点图标集合,node - this.leafIconArray = $.extend(leafIconArray, this.options.leafIconArray || OPTIONS.leafIconArray) || leafIconArray; //用户自定义叶子节点图标集合,leaf - this.skin = this.options.skin || OPTIONS.skin || "theme"; // 自定义样式 - if(this.skin == "layui"){ // layui主题 - this.line = (typeof (this.options.line) === "boolean") ? this.options.line : (typeof (OPTIONS.line) === "boolean") ? OPTIONS.line : true; //开启树线,默认开启 - this.ficon = this.options.ficon || OPTIONS.ficon || "7"; //一级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示一级图标。默认'7' - this.fnodeIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? (this.ficon == "-1" ? "-1" : "1") : this.ficon[0]; //一级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示一级图标,默认'1' - this.fleafIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? this.ficon : this.ficon[1]; //一级图标中的leaf节点图标 - this.icon = this.options.icon || OPTIONS.icon || "-1"; //二级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示二级图标。默认'-1' - this.nodeIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? (this.icon == "-1" ? "-1" : "-1") : this.icon[0]; //二级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'-1' - this.leafIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? this.icon : this.icon[1]; //二级图标中的leaf节点图标 - } else if(this.skin == "laySimple"){ // laySimple主题 - this.line = this.options.line || OPTIONS.line || false; //开启树线,默认不开启 - this.ficon = this.options.ficon || OPTIONS.ficon || ["2","-1"]; //一级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示一级图标。默认'-1' - this.fnodeIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? (this.ficon == "-1" ? "-1" : "2") : this.ficon[0]; //一级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示一级图标,默认'2' - this.fleafIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? this.ficon : this.ficon[1]; // 一级图标中的leaf节点图标 - this.icon = this.options.icon || OPTIONS.icon || "-1"; //二级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示二级图标。默认'-1' - this.nodeIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? (this.icon == "-1" ? "-1" : "-1") : this.icon[0]; //二级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'-1' - this.leafIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? this.icon : this.icon[1]; //二级图标中的leaf节点图标 - } else { // 默认主题 或者自定义主题 - this.line = this.options.line || OPTIONS.line || false; //开启树线,默认不开启 - this.ficon = this.options.ficon || OPTIONS.ficon || "8"; //一级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示一级图标。默认'8' - this.fnodeIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? (this.ficon == "-1" ? "-1" : "1") : this.ficon[0]; //一级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示一级图标,默认'1' - this.fleafIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? this.ficon : this.ficon[1]; // 一级图标中的leaf节点图标 - this.icon = this.options.icon || OPTIONS.icon || "5"; //二级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示二级图标。默认'5' - this.nodeIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? (this.icon == "-1" ? "-1" : "0") : this.icon[0]; //二级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'0' - this.leafIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? this.icon : this.icon[1]; //二级图标中的leaf节点图标 - } - - /** 数据加载参数**/ - this.url = this.options.url || OPTIONS.url || ""; //请求地址 - this.async = (typeof (this.options.async) === "boolean") ? this.options.async : (typeof (OPTIONS.async) === "boolean") ? OPTIONS.async : true; //异步同步加载,默认异步加载 - this.headers = this.options.headers || OPTIONS.headers || {}; //ajax header属性 - this.method = this.options.method || OPTIONS.method || "post"; //请求类型 - this.dataType = this.options.dataType || OPTIONS.dataType || "json"; //参数类型 - this.contentType = this.options.contentType || OPTIONS.contentType || "application/x-www-form-urlencoded"; //发送信息至服务器时内容编码类型 - this.defaultRequest = $.extend(this.defaultRequest, this.options.defaultRequest || OPTIONS.defaultRequest) || this.defaultRequest; //默认请求参数 - this.filterRequest = this.options.filterRequest || OPTIONS.filterRequest || []; //过滤请求参数 - this.request = this.options.request || OPTIONS.request || {}; //用户自定义请求参数 - this.response = $.extend(this.response, this.options.response || OPTIONS.response) || this.response; //返回json格式 - this.data = this.options.data || OPTIONS.data || null; //初始化指定该参数,则不会访问异步接口 - this.dataFormat = this.options.dataFormat || OPTIONS.dataFormat || "levelRelationship"; //用于用户配置的data数据格式,list:列表, levelRelationship:层级关系,默认 - this.dataStyle = this.options.dataStyle || OPTIONS.dataStyle || "defaultStyle"; //用于用户配置layui通用的json数据风格,layuiStyle:layui风格,defaultStyle:默认风格 - this.errDataShow = this.options.errDataShow || OPTIONS.errDataShow || false; //是否在递归数据出现错误后,显示错误信息,默认false - this.withCredentials = this.options.withCredentials || OPTIONS.withCredentials || false; //是否允许跨域请求,默认false - this.success = this.options.success || OPTIONS.success || function(data, obj){}; //树加载完毕后执行解析树之前的回调 - this.done = this.options.done || OPTIONS.done || function(data, obj){}; //树加载完毕后的回调 - this.formatter = $.extend(this.formatter, this.options.formatter || OPTIONS.formatter) || this.formatter; //数据过滤 - this.error = this.options.error || OPTIONS.error || function(XMLHttpRequest, textStatus, errorThrown){}; // 异步加载异常回调 - this.complete = this.options.complete || OPTIONS.complete || function(XMLHttpRequest, textStatus){}; // 异步加载完成回调 - - /** 复选框参数**/ - this.checkbar = this.options.checkbar || OPTIONS.checkbar || false; //是否开启复选框模式 - this.checkbarLoad = this.options.checkbarLoad || OPTIONS.checkbarLoad || "node"; //复选框作用范围,node:所有节点, leaf:最后一级;默认所有节点 - this.checkbarType = this.options.checkbarType || OPTIONS.checkbarType || "all"; //复选框选中形式 all:子集选中父级也选中, no-all:子集选中父级半选中,子集全选父级选中,p-casc:父级选中子集全选,子集无法改变父级选中状态, self:没有任何级联关系,only:只能选中一个复选框。 默认all - this.checkbarData = this.options.checkbarData || OPTIONS.checkbarData || "choose"; //复选框记录数据类型形式, change表示记录变更数据,choose表示记录选中数据,all记录全部数据,halfChoose记录选中和半选中的数据,默认choose - this.checkbarFun = $.extend(this.checkbarFun, this.options.checkbarFun || OPTIONS.checkbarFun) || this.checkbarFun; //checkbar事件加载 - - /** 菜单栏参数**/ - this.menubar = this.options.menubar || OPTIONS.menubar || false; //是否打开菜单栏 - this.menubarTips = $.extend(this.menubarTips, this.options.menubarTips || OPTIONS.menubarTips) || this.menubarTips; //菜单栏吸附, toolbar:依附在工具栏,group:依附在按钮组,freedom,自由 - this.menubarFun = $.extend(this.menubarFun, this.options.menubarFun || OPTIONS.menubarFun) || this.menubarFun; //menubar事件加载 - - /** 工具栏参数**/ - this.toolbar = this.options.toolbar || OPTIONS.toolbar || false; //是否开启可编辑模式 - this.toolbarWay = this.options.toolbarWay || OPTIONS.toolbarWay || "contextmenu"; //工具栏显示方式,contextmenu:右键,follow:跟随节点,fixed:固定在节点右侧 - this.toolbarStyle = $.extend(this.toolbarStyle, this.options.toolbarStyle || OPTIONS.toolbarStyle) || this.toolbarStyle; //toolbar的自定义风格,标题,弹框大小 - this.toolbarLoad = this.options.toolbarLoad || OPTIONS.toolbarLoad || "node"; //toolbar作用范围:node:所有节点,noleaf:非最后一级节点,leaf:最后一级 - this.toolbarShow = this.options.toolbarShow || OPTIONS.toolbarShow || ["add","edit","delete"]; //toolbar三个按钮自定义加载 - this.toolbarBtn = this.options.toolbarBtn || OPTIONS.toolbarBtn || null; //toolbar增删改中内容的自定义加载 - this.toolbarExt = this.options.toolbarExt || OPTIONS.toolbarExt || []; //toolbar按钮扩展 - this.toolbarFun = $.extend(this.toolbarFun, this.options.toolbarFun || OPTIONS.toolbarFun) || this.toolbarFun; //toolbar事件加载 - - /** iframe模式参数**/ - this.useIframe = this.options.useIframe || OPTIONS.useIframe || false; //是否加载iframe 默认false, - this.iframeElem = this.options.iframeElem || OPTIONS.iframeElem || ""; //iframe的ID - this.iframeUrl = this.options.iframeUrl || OPTIONS.iframeUrl || ""; //树关联的iframe地址 - this.iframeLoad = this.options.iframeLoad || OPTIONS.iframeLoad || "leaf"; //点击哪一层加载frame: node:所有节点, leaf:默认,最后一级 - this.iframeDefaultRequest = $.extend(this.iframeDefaultRequest, this.options.iframeDefaultRequest || OPTIONS.iframeDefaultRequest) || this.iframeDefaultRequest; //iframe的默认传递参数 - this.iframeRequest = $.extend(this.iframeRequest, this.options.iframeRequest) || $.extend(this.iframeRequest, OPTIONS.iframeRequest) || this.iframeRequest; //iframe的自定义参数 - this.iframeFun = $.extend(this.iframeFun, this.options.iframeFun) || $.extend(this.iframeFun, OPTIONS.iframeFun) || this.iframeFun; //iframe事件加载 - - /** 下拉树模式参数**/ - this.select = this.options.select || false; - if(this.select) { - // 重置下拉树 - this.selectSetting(); - } - - /** 调用确认最终主题方法*/ - this.ensureTheme(); - }; - - // 设置基本参数值 - DTree.prototype.reloadSetting = function(options) { - this.options = $.extend(this.options, options) || this.options; - - /** 绑定元素参数**/ - this.elem = this.options.elem || this.elem; //树绑定的元素ID:#elem - if(typeof this.options.obj === 'undefined'){ - if(this.elem) { - if($(this.elem).length > 0) { - this.obj = $(this.elem); - } - } - } else { - this.obj = this.options.obj || this.obj; //树绑定的jquery元素,用于当元素是延迟加载出来的话,可以用这个找到 - this.elem = "#" + this.obj[0].id; - } - - /** 基本参数**/ - this.scroll = this.options.scroll || this.scroll; //树的上级div容器,让树可以显示滚动条的div容器 - this.accordion = (typeof (this.options.accordion) === "boolean") ? this.options.accordion : this.accordion; //开启手风琴加载 - if(this.accordion) { - this.initLevel = 1; //默认展开节点 1节 - } else { - this.initLevel = this.options.initLevel || this.initLevel; //默认展开节点 2节 - } - this.type = this.options.type || this.type; //树的加载方式 all,全量树, load,增量树,默认load - this.cache = (typeof (this.options.cache) === "boolean") ? this.options.cache : this.cache; //开启数据缓存 - this.record = (typeof (this.options.record) === "boolean") ? this.options.record : this.record; //开启数据记录模式 - this.load = (typeof (this.options.load) === "boolean") ? this.options.load : this.load; //开启加载动画 - this.none = this.options.none || this.none; //初始节点加载无数据时显示文字 - this.tempHeight = this.options.height || this.height; //临时转换高度变量 - if(this.tempHeight) { //设置高度 - if(/^full-\d+$/.test(this.tempHeight)) { - this.fullHeightGap = this.tempHeight.split('-')[1]; - this.height = $WIN.height() - this.fullHeightGap; - } else { - this.fullHeightGap = this.tempHeight; - this.height = this.tempHeight; - } - } - this.width = this.options.width || this.width; //宽度 - this.obj.css("width", this.width); - - /** 样式相关参数**/ - this.line = (typeof (this.options.line) === "boolean") ? this.options.line : this.line; //开启树线,默认不开启 - this.iconfont = this.options.iconfont || this.iconfont; //默认图标字体 dtreefont - this.iconfontStyle = this.options.iconfontStyle || this.iconfontStyle; //用于自定义树的每个关键部位使用的图标 - this.nodeIconArray = $.extend(nodeIconArray, this.options.nodeIconArray) || this.nodeIconArray; //用户自定义非叶子节点图标集合,node - this.leafIconArray = $.extend(leafIconArray, this.options.leafIconArray) || this.leafIconArray; //用户自定义叶子节点图标集合,leaf - this.skin = this.options.skin || this.skin; //自定义样式 - if(this.skin == "layui"){ //layui主题 - this.line = (typeof (this.options.line) === "boolean") ? this.options.line : true; //开启树线,默认开启 - this.ficon = this.options.ficon || this.ficon; //一级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示一级图标。默认'7' - this.fnodeIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? (this.ficon == "-1" ? "-1" : "1") : this.ficon[0]; //一级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'1' - this.fleafIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? this.ficon : this.ficon[1]; //一级图标中的leaf节点图标 - this.icon = this.options.icon || this.icon; //二级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示二级图标。默认'-1' - this.nodeIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? (this.icon == "-1" ? "-1" : "-1") : this.icon[0]; //二级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'-1' - this.leafIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? this.icon : this.icon[1]; //二级图标中的leaf节点图标 - } else if(this.skin == "laySimple"){ //laySimple主题 - this.line = (typeof (this.options.line) === "boolean") ? this.options.line : false; //开启树线,默认不开启 - this.ficon = this.options.ficon || this.ficon; //一级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示一级图标。默认'-1' - this.fnodeIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? (this.ficon == "-1" ? "-1" : "2") : this.ficon[0]; //一级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'2' - this.fleafIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? this.ficon : this.ficon[1];//一级图标中的leaf节点图标 - this.icon = this.options.icon || this.icon; //二级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示二级图标。默认'-1' - this.nodeIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? (this.icon == "-1" ? "-1" : "-1") : this.icon[0]; //二级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'-1' - this.leafIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? this.icon : this.icon[1]; //二级图标中的leaf节点图标 - } else { // 默认主题 或者自定义主题 - this.line = (typeof (this.options.line) === "boolean") ? this.options.line : false; //开启树线,默认不开启 - this.ficon = this.options.ficon || this.ficon; //一级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示一级图标。默认'8' - this.fnodeIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? (this.ficon == "-1" ? "-1" : "1") : this.ficon[0]; //一级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'1' - this.fleafIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? this.ficon : this.ficon[1]; // 一级图标中的leaf节点图标 - this.icon = this.options.icon || this.icon; //二级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示二级图标。默认'5' - this.nodeIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? (this.icon == "-1" ? "-1" : "0") : this.icon[0]; //二级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'0' - this.leafIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? this.icon : this.icon[1]; //二级图标中的leaf节点图标 - } - - /** 数据加载参数**/ - this.url = this.options.url || this.url; //请求地址 - this.async = (typeof (this.options.async) === "boolean") ? this.options.async : this.async; //异步同步加载,默认异步加载 - this.headers = this.options.headers || this.headers; //ajax header属性 - this.method = this.options.method || this.method; //请求类型 - this.dataType = this.options.dataType || this.dataType; //参数类型 - this.contentType = this.options.contentType || this.contentType; //发送信息至服务器时内容编码类型 - this.defaultRequest = $.extend(this.defaultRequest, this.options.defaultRequest) || this.defaultRequest; //默认请求参数 - this.filterRequest = this.options.filterRequest || this.filterRequest; //过滤请求参数 - this.request = this.options.request || this.request; //用户自定义请求参数 - this.response = $.extend(this.response, this.options.response) || this.response; //返回json格式 - this.data = this.options.data || this.data; //初始化指定该参数,则不会访问异步接口 - this.dataFormat = this.options.dataFormat || this.dataFormat; //用于用户配置的data数据格式,list:列表, levelRelationship:层级关系,默认 - this.dataStyle = this.options.dataStyle || this.dataStyle; //用于用户配置layui通用的json数据风格,layuiStyle:layui风格,defaultStyle:默认风格 - this.errDataShow = (typeof (this.options.errDataShow) === "boolean") ? this.options.errDataShow : this.errDataShow; //是否在使用list模式递归数据出现错误时,显示错误信息 - this.withCredentials = (typeof (this.options.withCredentials) === "boolean") ? this.options.withCredentials : this.withCredentials; //是否允许跨域请求 - this.success = this.options.success || this.success; //树加载完毕后执行解析树之前的回调 - this.done = this.options.done || this.done; //树加载完毕后的回调 - this.formatter = $.extend(this.formatter, this.options.formatter)|| this.formatter; //数据过滤 - this.error = this.options.error || this.error; //异步加载异常回调 - this.complete = this.options.complete || this.complete; //异步加载完成回调 - - /** 复选框参数**/ - this.checkbar = this.options.checkbar || this.checkbar; //是否开启复选框模式 - this.checkbarLoad = this.options.checkbarLoad || this.checkbarLoad; //复选框作用范围,node:所有节点, leaf:最后一级;默认所有节点 - this.checkbarType = this.options.checkbarType || this.checkbarType; //复选框选中形式 all:子集选中父级也选中, no-all:子集选中父级半选中,子集全选父级选中,p-casc:父级选中子集全选,子集无法改变父级选中状态, self:没有任何级联关系,only:只能选中一个复选框。 默认all - this.checkbarData = this.options.checkbarData || this.checkbarData; //复选框记录数据类型形式, change表示记录变更数据,choose表示记录选中数据,all记录全部数据,halfChoose记录选中和半选中的数据,默认choose - this.checkbarFun = $.extend(this.checkbarFun, this.options.checkbarFun)|| this.checkbarFun; //checkbar事件加载 - - /** 菜单栏参数**/ - this.menubar = this.options.menubar || this.menubar; //是否打开菜单栏 - this.menubarTips = $.extend(this.menubarTips, this.options.menubarTips) || this.menubarTips; //菜单栏吸附, toolbar:依附在工具栏,group:依附在按钮组,freedom,自由 - this.menubarFun = $.extend(this.menubarFun, this.options.menubarFun) || this.menubarFun; //menubar事件加载 - - /** 工具栏参数**/ - this.toolbar = this.options.toolbar || this.toolbar; //是否开启工具栏 - this.toolbarWay = this.options.toolbarWay || this.toolbarWay; //工具栏显示方式,contextmenu:右键,follow:跟随节点,fixed:固定在节点右侧 - this.toolbarStyle = $.extend(this.toolbarStyle, this.options.toolbarStyle) || this.toolbarStyle; //toolbar的自定义风格,标题,弹框大小 - this.toolbarLoad = this.options.toolbarLoad || this.toolbarLoad; //toolbar作用范围:node:所有节点,noleaf:非最后一级节点,leaf:最后一级 - this.toolbarShow = this.options.toolbarShow || this.toolbarShow; //toolbar三个按钮 - this.toolbarBtn = this.options.toolbarBtn || this.toolbarBtn; //toolbar增删改中内容的自定义加载 - this.toolbarExt = this.options.toolbarExt || this.toolbarExt; //toolbar按钮扩展 - this.toolbarFun = $.extend(this.toolbarFun, this.options.toolbarFun) || this.toolbarFun; //toolbar事件加载 - - /** iframe模式参数**/ - this.useIframe = this.options.useIframe || this.useIframe;//是否加载iframe 默认false - this.iframeElem = this.options.iframeElem || this.iframeElem; //iframe的ID - this.iframeUrl = this.options.iframeUrl || this.iframeUrl; //树关联的iframe地址 - this.iframeLoad = this.options.iframeLoad || this.iframeLoad; //点击哪一层加载frame: node:所有节点, leaf:默认,最后一级 - this.iframeDefaultRequest = $.extend(this.iframeDefaultRequest, this.options.iframeDefaultRequest) || this.iframeDefaultRequest; //iframe的默认传递参数 - this.iframeRequest = $.extend(this.iframeRequest, this.options.iframeRequest) || this.iframeRequest; //iframe的自定义参数 - this.iframeFun = $.extend(this.iframeFun, this.options.iframeFun) || this.iframeFun; //iframe事件加载 - - /** 下拉树模式参数**/ - if(this.select) { - // 重置下拉树 - this.reloadSelectSetting(); - } - - /** 调用确认最终主题方法*/ - this.ensureTheme(); - - }; - - // 设置下拉树的基本参数值 - DTree.prototype.selectSetting = function() { - /** select模式参数*/ - this.select = true; //配置成select模式 - - this.selectInitVal = this.obj.attr("data-value") || this.options.selectInitVal || ""; //输入框的值 - this.selectTreeDiv = this.obj[0].id + "_tree_div"; // 上级DIV节点 - this.selectCardDiv = this.obj[0].id + "_select_card_div"; // 上级layui卡片节点 - this.selectDiv = this.obj[0].id + "_select_div"; // 模拟的select节点 - this.selectTipsName = this.obj[0].id + "_select_input"; // select的提示输入框名称 - this.selectTips = this.options.selectTips || "请选择"; // 输入框的提示语 - this.selectInputName = this.options.selectInputName || {nodeId: this.obj[0].id + "_select_nodeId"}; // select表单中的元素 - - // 调取下拉树的特殊处理页面元素标识 - this.renderSelectDom(); - } - - // 重新设置下拉树的基本参数值 - DTree.prototype.reloadSelectSetting = function() { - - this.selectInitVal = this.obj.attr("data-value") || this.options.selectInitVal || this.selectInitVal; //输入框的值 - this.selectTips = this.options.selectTips || this.selectTips; // 输入框的提示语 - this.selectInputName = $.extend(this.selectInputName, this.options.selectInputName) || this.selectInputName; // select表单中的元素 - - // 调取下拉树的特殊处理页面元素标识 - this.reloadSelectDom(); - } - - /******************** 下拉树设置区域 ********************/ - // 渲染下拉树的Dom结构 - DTree.prototype.renderSelectDom = function() { - var _this = this; - var rootId = _this.obj[0].id; - - // 设置自定义表单隐藏域 - var selectInputName = _this.selectInputName; - var selectInput = []; - for(var key in selectInputName) { - selectInput.push(''); - } - - // 设置html - var prevHtml = ['
', - '
', selectInput.join(""), - '', - '', - '
'].join(''); - - _this.obj.before(prevHtml); - - _this.obj.wrap('
').wrap('
').wrap('
'); - - } - - // 重新渲染下拉树的Dom结构 - DTree.prototype.reloadSelectDom = function() { - var _this = this; - var rootId = _this.obj[0].id; - - // 设置自定义表单隐藏域 - var selectInputName = _this.selectInputName; - var selectInput = []; - for(var key in selectInputName) { - selectInput.push(''); - } - - $("div[dtree-id='"+rootId+"'][dtree-select='"+_this.selectDiv+"']").find("div.layui-select-title").html(""); - - // 设置html - var prevHtml = [selectInput.join(""), - '', - ''].join(''); - - $("div[dtree-id='"+rootId+"'][dtree-select='"+_this.selectDiv+"']").find("div.layui-select-title").html(prevHtml); - - } - - // 设置输入框的值 - DTree.prototype.selectVal = function(param) { - var _this = this; - var rootId = _this.obj[0].id; - var selectInputName = _this.selectInputName; - var selectTipsNameValue = ""; - var selectValues = {}; - - // 如果开启了复选框,则此方法用来取值 - if(_this.checkbar) { - $("div[dtree-select='" + _this.selectDiv + "']").find("input[dtree-id='" + rootId + "']").each(function(){ - var name = $(this).attr("name"); - var val = $(this).val(); - selectValues[name] = val; - }); - } else { - if(typeof param === 'undefined') { // 不传,则为当前树中记录的ID - param = _this.getNowParam(); - } - if(typeof param === 'string') { // 传递ID,则查询树节点ID对应的值 - param = _this.getParam(param); - } - - selectTipsNameValue = param["context"]; - for(var key in selectInputName) { - selectValues[selectInputName[key]] = param[key]; - $("div[dtree-select='" + _this.selectDiv + "']").find("input[dtree-id='" + rootId + "'][name='"+selectInputName[key]+"']").val(param[key] || ""); - } - - if(param["nodeId"] && !param["context"]) { - selectTipsNameValue = _this.getParam(param["nodeId"]); - } - - // 返显提示输入框值 - $("div[dtree-select='" + _this.selectDiv + "']").find("input[dtree-id='" + rootId + "'][name='"+_this.selectTipsName+"']").val(selectTipsNameValue || ""); - - } - - - // 返回隐藏域中的值 - return selectValues; - } - - // 设置复选框模式中的下拉树的值 - DTree.prototype.selectCheckboxVal = function() { - var _this = this; - var rootId = _this.obj[0].id; - var selectInputName = _this.selectInputName; - - // 获取全部复选框选中节点 - var param = _this.getCheckbarJsonArrParam(); - - selectTipsNameValue = param["context"]; - var selectValues = {}; - for(var key in selectInputName) { - var value = param[key].join(","); - selectValues[selectInputName[key]] = value; - $("div[dtree-select='" + _this.selectDiv + "']").find("input[dtree-id='" + rootId + "'][name='"+selectInputName[key]+"']").val(value); - } - - $("div[dtree-select='" + _this.selectDiv + "']").find("input[dtree-id='" + rootId + "'][name='"+_this.selectTipsName+"']").val(selectTipsNameValue); - - // 返回隐藏域中的值 - return selectValues; - } - - // 重置下拉树的值 - DTree.prototype.selectResetVal = function() { - var _this = this; - var rootId = _this.obj[0].id; - // 表单清空 - $("input[dtree-id='"+rootId+"']").val(""); - // 节点重置 - _this.cancelNavThis(); - if(_this.checkbar) { - // 复选框重置 - _this.cancelCheckedNode(); - } - } - - - /******************** 字体及图标区域 ********************/ - // 确认最终主题 - DTree.prototype.ensureTheme = function(){ - var _this = this; - - // 确认style - this.style.item = DTREE + this.skin + ITEM; - this.style.itemThis = DTREE + this.skin + ITEMTHIS; - this.style.dfont = DTREE + this.skin + DFONT; - this.style.ficon = DTREE + this.skin + FICON; - this.style.icon = DTREE + this.skin + ICON; - this.style.cbox = DTREE + this.skin + CBOX; - this.style.chs = DTREE + this.skin + CHS; - - // 确认usefontStyle - var iconfont = this.iconfont; - var iconfonts = []; - if(typeof iconfont === 'string') { - iconfonts.push(iconfont); - } else { - iconfonts = iconfont; - } - - var iconfontStyle = this.iconfontStyle; - var iconfontStyles = []; - if(iconfontStyle.length == undefined) { - iconfontStyles.push(iconfontStyle); - } else { - iconfontStyles = iconfontStyle; - } - - for(var i=0; i 0) { - $lis.each(function(){ - _this.showLineLi($(this)); - }); - } else { - _this.obj.find("li[data-id]").each(function(){ - _this.showLineLi($(this)); - }); - } - } - } - - // 真正显示树线的方法 - DTree.prototype.showLineLi = function($li){ - var _this = this; - var $div = $li.children("div"), - $nextLi = $li.next("li"), - $ul = $li.parent("ul"); - if($ul[0].id == _this.obj[0].id) { - // 根节点下的节点 - $li.removeClass(LI_NAV_LINE); - $li.removeClass(LI_NAV_LAST_LINE); - $li.addClass(LI_NAV_FIRST_LINE); - } else { - // 非根节点下的节点 - var $pnextLi = $ul.parent("li").next("li"); - if($pnextLi.length == 0) { - if($nextLi.length == 0){ - $li.removeClass(LI_NAV_LINE); - $li.removeClass(LI_NAV_FIRST_LINE); - $li.addClass(LI_NAV_LAST_LINE); - } else { - $li.removeClass(LI_NAV_FIRST_LINE); - $li.removeClass(LI_NAV_LAST_LINE); - $li.addClass(LI_NAV_LINE); - } - }else { - var $pnextdiv = $pnextLi.children("div"); - if($nextLi.length == 0 && $div.children("cite").attr("data-leaf") == "leaf" && $pnextdiv.children("cite").attr("data-leaf") == "leaf") { - $li.removeClass(LI_NAV_FIRST_LINE); - $li.removeClass(LI_NAV_LINE); - $li.addClass(LI_NAV_LAST_LINE); - } else { - $li.removeClass(LI_NAV_FIRST_LINE); - $li.removeClass(LI_NAV_LAST_LINE); - $li.addClass(LI_NAV_LINE); - } - } - } - } - - /******************** 初始化数据区域 ********************/ - // 设置高度 - DTree.prototype.autoHeight = function(){ - var _this = this; - var height = _this.height; - if(height != "") { - if(_this.elem == _this.scroll){ - _this.obj.parent().css("height", height + "px"); - } else { - var $toolbarDiv = _this.obj.closest(_this.scroll); - $toolbarDiv.css("height", height + "px"); - } - } - }; - - // 重载树 - DTree.prototype.reload = function(options){ - var _this = this; - _this.reloadSetting(options); - _this.init(); - }; - - // 初始化树 - DTree.prototype.init = function(){ - var _this = this; - if (typeof _this !== "object") { - //_this.obj.html(_this.getNoneDom().errText("树组件未成功加载,请检查配置")); - layer.msg("树组件未成功加载,请检查配置", {icon:5}); - return ; - } - - // 设置组件高度 - _this.autoHeight(); - - if(_this.data) { - if(typeof _this.data.length === 'undefined'){ - //_this.obj.html(_this.getNoneDom().errText("数据解析异常,data数据格式不正确")); - layer.msg("数据解析异常,data数据格式不正确", {icon:5}); - return ; - } - - if(_this.data.length == 0) { - _this.obj.html(_this.getNoneDom().text()); - return ; - } - - //先将ul中的元素清空 - _this.obj.html(""); - - setTimeout(function () { - // 加载完毕后执行树解析前的回调 - _this.success(_this.data, _this.obj); - - // 第一次解析树 - if (_this.dataFormat == 'list'){ - //1.识别根节点ul中的data-id标签,判断顶级父节点 - var pid = _this.obj.attr("data-id"); - //2.构建一个存放节点的树组 - var rootListData = _this.queryListTreeByPid(pid, _this.data); - _this.loadListTree(rootListData, _this.data, 1); - } else { - _this.loadTree(_this.data, 1); - } - - // 显示树线 - _this.showLine(); - - // 这种情况下需要一开始就将toolbar显示在页面上 - if(_this.toolbar && _this.toolbarWay != 'contextmenu') { - _this.setToolbarDom().setToolbarPlace(_this.toolbarMenu); - } - - // 判断是否存在错误数据,并是否打印错误数据 - _this.msgErrData(); - - // 设置复选框的初始值 - if(_this.select){ - _this.selectVal(_this.selectInitVal); - } - - // 保存树副本 - _this.bak = _this.obj.html(); - - // 加载完毕后的回调 - _this.done(_this.data, _this.obj); - }, 100); - } else { - if (!_this.url) { - //_this.obj.html(_this.getNoneDom().errText("数据请求异常,url参数未指定")); - layer.msg("数据请求异常,url参数未指定", {icon:5}); - return ; - } - - //先将ul中的元素清空 - _this.obj.html(""); - - var index = _this.load ? layer.load(1) : ""; - - AjaxHelper.request({ - async: _this.async, - headers: _this.headers, - type: _this.method, - url: _this.url, - dataType: _this.dataType, - contentType: _this.contentType, - withCredentials: _this.withCredentials, - data: _this.getFilterRequestParam(_this.getRequestParam()), - success: function(result) { - if (typeof result === 'string') { - result = $.parseJSON(result); - } - - // 加载完毕后执行树解析前的回调 - _this.success(result, _this.obj); - - var code = ""; - if (_this.dataStyle == 'layuiStyle'){ - code = result[_this.response.statusName]; - } else { - code = result.status[_this.response.statusName]; - } - - if (code == _this.response.statusCode) { - var d = result[_this.response.rootName]; - - if(typeof d.length === 'undefined'){ - _this.obj.html(_this.getNoneDom().errText("数据解析异常,url回调后的数据格式不正确")); - //layer.msg("数据解析异常,url回调后的数据格式不正确", {icon:5}); - return ; - } - - if(d.length == 0) { - _this.obj.html(_this.getNoneDom().text()); - return ; - } - - // 第一次解析树 - if (_this.dataFormat == 'list'){ - //1.识别根节点ul中的data-id标签,判断顶级父节点 - var pid = _this.obj.attr("data-id"); - //2.构建一个存放节点的树组 - var rootListData = _this.queryListTreeByPid(pid, d); - _this.loadListTree(rootListData, d, 1); - } else { - _this.loadTree(d, 1); - } - - // 显示树线 - _this.showLine(); - - // 这种情况下需要一开始就将toolbar显示在页面上 - if(_this.toolbar && _this.toolbarWay != 'contextmenu') { - _this.setToolbarDom().setToolbarPlace(_this.toolbarMenu); - } - - // 判断是否存在错误数据,并是否打印错误数据 - _this.msgErrData(); - - // 设置复选框的初始值 - if(_this.select){ - _this.selectVal(_this.selectInitVal); - } - - // 保存树副本 - _this.bak = _this.obj.html(); - - // 加载完毕后的回调 - _this.done(result, _this.obj); - } else { - // 如果打印不出任何信息说明是在这里,用了错误的数据格式, 或返回码不正确 - if (_this.dataStyle == 'layuiStyle'){ - _this.obj.html(_this.getNoneDom().errText(result[_this.response.message])); - _this.error(null, code, result[_this.response.message]); - //layer.msg(result[_this.response.message], {icon:2}); - } else { - _this.obj.html(_this.getNoneDom().errText(result.status[_this.response.message])); - _this.error(null, code, result.status[_this.response.message]); - //layer.msg(result.status[_this.response.message], {icon:2}); - } - } - }, - error: function(XMLHttpRequest, textStatus, errorThrown){// 异步加载异常回调 - _this.obj.html(_this.getNoneDom().errText(textStatus + ": " + errorThrown)); - _this.error(XMLHttpRequest, textStatus, errorThrown); - }, - complete: function(XMLHttpRequest, textStatus){// 异步加载完成回调 - if(_this.load){layer.close(index);} - _this.complete(XMLHttpRequest, textStatus); - } - }); - } - }; - - // 加载子节点 - DTree.prototype.getChild = function($div, data) { - var _this = this, $ul = $div.next("ul"); - - _this.setNodeParam($div); - - if(typeof data !== 'undefined') { - if(typeof data.length === 'undefined'){ - //_this.obj.html(_this.getNoneDom().errText("数据解析异常,data数据格式不正确")); - layer.msg("数据解析异常,data数据格式不正确", {icon:5}); - return ; - } - - //先将ul中的元素清空 - $ul.html(""); - - // 解析树 - if (_this.dataFormat == 'list'){ - var pid = _this.node.nodeId; - var level = parseInt(_this.node.level)+1; - - var listData = _this.queryListTreeByPid(pid, data); - _this.loadListTree(listData, _this.data, level); - } else { - _this.loadTree(data, level); - } - - // 显示树线 - _this.showLine(); - - // 这种情况下需要一开始就将toolbar显示在页面上 - if(_this.toolbar && _this.toolbarWay != 'contextmenu') { - _this.setToolbarDom().setToolbarPlace(_this.toolbarMenu); - } - - // 判断是否存在错误数据,并是否打印错误数据 - _this.msgErrData(); - - // 保存树副本 - _this.bak = _this.obj.html(); - - } else { - if (!_this.url) { - //_this.obj.html(_this.getNoneDom().errText("数据请求异常,url参数未指定")); - layer.msg("数据请求异常,url参数未指定", {icon:5}); - return ; - } - - $ul.html(""); - var index = _this.load ? layer.load(1) : ""; - AjaxHelper.request({ - async: _this.async, - headers: _this.headers, - type: _this.method, - url: _this.url, - dataType: _this.dataType, - withCredentials: _this.withCredentials, - data: _this.getFilterRequestParam(_this.getRequestParam()), - success: function(result) { - if (typeof result === 'string') { - result = $.parseJSON(result); - } - var code = ""; - if (_this.dataStyle == 'layuiStyle'){ - code = result[_this.response.statusName]; - } else { - code = result.status[_this.response.statusName]; - } - - if (code == _this.response.statusCode) { - // 解析树 - var pid = _this.node.nodeId; - var level = parseInt(_this.node.level)+1; - if (_this.dataFormat == 'list'){ - var pListData = _this.queryListTreeByPid(pid, result[_this.response.rootName]); - _this.loadListTree(pListData, result[_this.response.rootName], level, $ul); - } else { - _this.loadTree(result[_this.response.rootName], level, $ul); - } - - // 显示树线 - _this.showLine(); - - // 这种情况下需要一开始就将toolbar显示在页面上 - if(_this.toolbar && _this.toolbarWay != 'contextmenu') { - _this.setToolbarDom().setToolbarPlace(_this.toolbarMenu); - } - - // 判断是否存在错误数据,并是否打印错误数据 - _this.msgErrData(); - - $ul.addClass(NAV_SHOW); - - // 保存树副本 - _this.bak = _this.obj.html(); - } else { - if (_this.dataStyle == 'layuiStyle'){ - _this.obj.html(_this.getNoneDom().errText(result[_this.response.message])); - _this.error(null, code, result[_this.response.message]); - //layer.msg(result[_this.response.message], {icon:2}); - } else { - _this.obj.html(_this.getNoneDom().errText(result.status[_this.response.message])); - _this.error(null, code, result.status[_this.response.message]); - //layer.msg(result.status[_this.response.message], {icon:2}); - } - } - }, - error: function(XMLHttpRequest, textStatus, errorThrown){// 异步加载异常回调 - _this.obj.html(_this.getNoneDom().errText(textStatus + ": " + errorThrown)); - _this.error(XMLHttpRequest, textStatus, errorThrown); - }, - complete: function(XMLHttpRequest, textStatus){// 异步加载完成回调 - if(_this.load){layer.close(index);} - _this.complete(XMLHttpRequest, textStatus); - } - }); - } - }; - - // 初始化树或者拼接树 - DTree.prototype.loadListTree = function(pListData, listData, level, $ul){ - var _this = this; - $ul = $ul || _this.getNodeDom().nowOrRootUl(); //当前选中的节点或根节点 - if (pListData.length > 0){ - for (var i = 0; i < pListData.length; i++) { - // 1.获取已知节点的全部数据 - var data = pListData[i]; - if(typeof data !== "object") continue; - var parseData = _this.parseData(data); - var childListData = _this.queryListTreeByPid(parseData.treeId(), listData); // 根据已知数据的id判断该条数据是否还有子数据 - - // 3. 页面元素加载数据 - $ul.append(_this.getLiItemDom(parseData.treeId(), parseData.parentId(), parseData.title(), parseData.fmtTitle(), parseData.last(childListData.length), parseData.ficonClass(), parseData.iconClass(), parseData.checkArr(), level, parseData.spread(level), parseData.disabled(), parseData.hide(), parseData.basicData(), parseData.recordData(), ($ul.hasClass(UL_ROOT) ? "root" : "item"))); - // 4.有子数据的元素加载子节点 - if(childListData.length > 0){ - var cLevel = parseInt(level)+1; - _this.loadListTree(childListData, listData, cLevel, _this.obj.find("ul[data-id='"+parseData.treeId()+"']")); - } - } - } - }; - - // 根据父ID查找list数据中匹配的元素 - DTree.prototype.queryListTreeByPid = function(pid, listData){ - var _this = this; - var rootListData = []; - if (listData) { - for (var i = 0; i < listData.length; i++) { - var data = listData[i]; - if(typeof data !== "object") continue; - if(pid == "null" || pid == null){ - if(data[_this.response.parentId] == null) { rootListData.push(data); } - } else { - if (data[_this.response.parentId] == pid){ - if (data[_this.response.treeId] == pid){ - _this.errData.push(data); - } else { - rootListData.push(data); - } - } - } - } - } - return rootListData; - }; - - // 初始化树或者拼接树 - DTree.prototype.loadTree = function(root, level, $ul){ - var _this = this; - if (root) { - $ul = $ul || _this.getNodeDom().nowOrRootUl(); //当前选中的节点或根节点 - for (var i = 0; i < root.length; i++) { // 遍历跟节点或追加的跟节点 - var data = root[i]; - if(typeof data !== "object") continue; - if(data[_this.response.treeId] == data[_this.response.parentId]) { _this.errData.push(data); } - var parseData = _this.parseData(data); - var children = parseData.children(); - $ul.append(_this.getLiItemDom(parseData.treeId(), parseData.parentId(), parseData.title(), parseData.fmtTitle(), parseData.last(children.length), parseData.ficonClass(), parseData.iconClass(), parseData.checkArr(), level, parseData.spread(level), parseData.disabled(), parseData.hide(), parseData.basicData(), parseData.recordData(), ($ul.hasClass(UL_ROOT) ? "root" : "item"))); - if (children.length != 0) { - var cLevel = parseInt(level)+1; - _this.loadTree(children, cLevel, _this.obj.find("ul[data-id='"+parseData.treeId()+"']")); - } - } - } - }; - - // 判断在数据加载时是否存在错误数据,并是否打印错误数据 - DTree.prototype.msgErrData = function() { - var _this = this; - if(_this.errData.length > 0 && _this.errDataShow) { - var title = ""; - for(var i=0; i<_this.errData.length; i++) { - var edata = _this.errData[i]; - title += "数据:【"+edata[_this.response.title]+"】中节点id和上级id值一致! \n"; - } - layer.msg(title, {icon:2,time:5000}); - } - // 显示之后,将错误数据制空 - _this.errData = []; - }; - - // 解析data数据 - DTree.prototype.parseData = function(data) { - var _this = this; - - return { - treeId: function(){ - return data[_this.response.treeId]; - }, - parentId: function(){ - return data[_this.response.parentId]; - }, - fmtTitle: function(){ - if(typeof _this.formatter.title === 'function'){ - var ftitle = _this.formatter.title(data); - var tt = data[_this.response.title]; - tt = (ftitle == "" || ftitle == undefined || ftitle == null) ? tt : ftitle; - return tt || ""; - } - return data[_this.response.title]; - }, - title: function(){ - return data[_this.response.title]; - }, - level: function(){ - return data[_this.response.level] || ""; - }, - ficonClass: function(){ - return data[_this.response.ficonClass] || ""; - }, - iconClass: function(){ - return data[_this.response.iconClass] || ""; - }, - last: function(len){ - return ((len == 0) ? - ((typeof (data[_this.response.last]) === "boolean") ? data[_this.response.last] : true) : - ((typeof (data[_this.response.last]) === "boolean") ? data[_this.response.last] : false)); - }, - spread: function(level){ - return ((level < _this.initLevel) ? - ((typeof (data[_this.response.spread]) === "boolean") ? data[_this.response.spread] : true) : - ((typeof (data[_this.response.spread]) === "boolean") ? data[_this.response.spread] : false)); - }, - disabled: function(){ - return (typeof (data[_this.response.disabled]) === "boolean") ? data[_this.response.disabled] : false; - }, - hide: function(){ - return (typeof (data[_this.response.hide]) === "boolean") ? data[_this.response.hide] : false; - }, - checkArr: function(){ - var checkArr = []; - var checkArrData = data[_this.response.checkArr]; - if(typeof checkArrData === 'string'){ - if(checkArrData.indexOf("{") > -1 && checkArrData.indexOf("}") > -1){ - checkArrData = JSON.parse(checkArrData); - } else { - checkArrData = {"type":"0","checked":checkArrData}; - } - } - if(typeof checkArrData === 'object'){ - if(typeof checkArrData.length === 'undefined'){ - checkArr.push(checkArrData); - } else { - checkArr = checkArrData; - } - } - - if(checkArr.length > 0 && checkArr.length > _this.checkArrLen){ - _this.checkArrLen = checkArr.length; // 获取复选框个数 - } - return checkArr; - - }, - children: function(){ - return data[_this.response.childName] || []; - }, - basicData: function(){ - return event.escape(JSON.stringify(data[_this.response.basicData])) || JSON.stringify({}); - }, - recordData: function(){ - var recordData = _this.record ? event.cloneObj(data, [_this.response.treeId, - _this.response.parentId, - _this.response.title, - _this.response.iconClass, - _this.response.childName, - _this.response.last, - _this.response.spread, - _this.response.disabled, - _this.response.hide, - _this.response.checkArr, - _this.response.checked, - _this.response.type, - _this.response.basicData]) : {}; - - return event.escape(JSON.stringify(recordData)); - }, - data: function(){ - return data; - } - } - - }; - - //当无节点数据时显示dom - DTree.prototype.getNoneDom = function(){ - var _this = this, - rootId = _this.obj[0].id, - noneTitle = _this.none; - - return { - text: function(){ - return "
"+noneTitle+"
"; - }, - errText: function(errInfo){ - return "
"+errInfo+"
"; - } - } - }; - - //新增节点的dom值 - DTree.prototype.getDom = function(treeId, parentId, title, fmtTitle, last, ficonClass, iconClass, checkArr, level, spread, disabled, hide) { - var _this = this, - rootId = _this.obj[0].id, - toolbar = _this.toolbar, - checkbar = _this.checkbar; - - return { - fnode: function() { // + - 图标 - // 获取图标的变量 - var fnodeIcon = _this.fnodeIcon, - fleafIcon = _this.fleafIcon; - - var fleafIconLeaf = _this.usefontStyle.fnode.leaf, - fnodeIconOpen = _this.usefontStyle.fnode.node.open, - fnodeIconClose = _this.usefontStyle.fnode.node.close; - - if(ficonClass){ - var iconfont = _this.iconfont; - if(typeof iconfont === 'string') { - fleafIconLeaf = iconfont + " " + ficonClass; - fnodeIconOpen = iconfont + " " + ficonClass; - fnodeIconClose = iconfont + " " + ficonClass; - } else { - fleafIconLeaf = iconfont[0] + " " + ficonClass; - fnodeIconOpen = iconfont[0] + " " + ficonClass; - fnodeIconClose = iconfont[0] + " " + ficonClass; - } - } - - if(fnodeIcon != "-1" && fleafIcon != "-1"){ // 都加载 - return last ? "" : - (spread ? "" : ""); - } - - if(fnodeIcon != "-1" && fleafIcon == "-1"){ // 加载node 隐藏leaf - return last ? "" : - (spread ? "" : ""); - } - - if(fnodeIcon == "-1" && fleafIcon != "-1"){ // 隐藏node 加载leaf - return last ? "" : - (spread ? "" : ""); - } - - if(fnodeIcon == "-1" && fleafIcon == "-1"){ // 都隐藏 - return last ? "" : - (spread ? "" : ""); - } - }, - node: function() { // 二级图标样式 - // 获取图标的变量 - var nodeIcon = _this.nodeIcon, - leafIcon = _this.leafIcon; - - var sleafIconLeaf = _this.usefontStyle.snode.leaf, - snodeIconOpen = _this.usefontStyle.snode.node.open, - snodeIconClose = _this.usefontStyle.snode.node.close; - if(iconClass){ - var iconfont = _this.iconfont; - if(typeof iconfont === 'string') { - sleafIconLeaf = iconfont + " " + iconClass; - snodeIconOpen = iconfont + " " + iconClass; - snodeIconClose = iconfont + " " + iconClass; - } else { - sleafIconLeaf = iconfont[0] + " " + iconClass; - snodeIconOpen = iconfont[0] + " " + iconClass; - snodeIconClose = iconfont[0] + " " + iconClass; - } - } - - if(nodeIcon != "-1" && leafIcon != "-1"){ // 都加载 - return last ? "" : - (spread ? "" : ""); - } - - if(nodeIcon != "-1" && leafIcon == "-1"){ // 加载node 隐藏leaf - return last ? "" : - (spread ? "" : ""); - } - - if(nodeIcon == "-1" && leafIcon != "-1"){ // 隐藏node 加载leaf - return last ? "" : - (spread ? "" : ""); - } - - if(nodeIcon == "-1" && leafIcon == "-1"){ // 都隐藏 - return last ? "" : - (spread ? "" : ""); - } - }, - checkbox: function() { // 复选框 - var flag = false; - if(_this.checkbarLoad == "node"){if (checkbar) {flag = true;}} else {if (last) {if (checkbar) {flag = true;}}} - - if(flag){ - var result = "
"; - if(checkArr && checkArr.length > 0){ - - for (var i = 0; i < checkArr.length; i++) { - var checkData = checkArr[i]; - var checked = checkData.checked; - var CHOOSE_CLASS = _this.usefontStyle.checkbox.out; - if (checked == "2") { //半选择 - CHOOSE_CLASS = _this.usefontStyle.checkbox.noall + " " + _this.style.chs; - } else if (checked == "1") { //选择 - CHOOSE_CLASS = _this.usefontStyle.checkbox.on + " " + _this.style.chs; - } else { //未选择或者无值 - CHOOSE_CLASS = _this.usefontStyle.checkbox.out; - } - var disClass = ""; - if(disabled){disClass = NAV_DIS;} - result += ""; - } - } - result += "
"; - return result; - } - - return ""; - }, - text: function() { // 文字显示 - var disClass = ""; - if(disabled){disClass = NAV_DIS;} - return ""+fmtTitle+""; - }, - ul: function() { //子节点ul - return last ? "" : - (spread ? "" : ""); - } - }; - }; - - //替换节点的dom值,或指定值 - DTree.prototype.replaceDom = function($div, treeId, last, spread, disabled, hide) { - var _this = this, - rootId = _this.obj[0].id, - toolbar = _this.toolbar, - checkbar = _this.checkbar; - - return { - fnode: function(ficonClass) { // + - 图标 - var fnode = ""; - - // 获取图标的变量 - var fnodeIcon = _this.fnodeIcon, - fleafIcon = _this.fleafIcon; - - var fleafIconLeaf = _this.usefontStyle.fnode.leaf, - fnodeIconOpen = _this.usefontStyle.fnode.node.open, - fnodeIconClose = _this.usefontStyle.fnode.node.close; - - if(ficonClass){ - var iconfont = _this.iconfont; - if(typeof iconfont === 'string') { - fleafIconLeaf = iconfont + " " + ficonClass; - fnodeIconOpen = iconfont + " " + ficonClass; - fnodeIconClose = iconfont + " " + ficonClass; - } else { - fleafIconLeaf = iconfont[0] + " " + ficonClass; - fnodeIconOpen = iconfont[0] + " " + ficonClass; - fnodeIconClose = iconfont[0] + " " + ficonClass; - } - } - - if(fnodeIcon != "-1" && leafIcon != "-1"){ // 都加载 - fnode = last ? "" : - (spread ? "" : ""); - }else if(nodeIcon != "-1" && leafIcon == "-1"){ // 加载node 隐藏leaf - fnode = last ? "" : - (spread ? "" : ""); - }else if(nodeIcon == "-1" && leafIcon != "-1"){ // 隐藏node 加载leaf - fnode = last ? "" : - (spread ? "" : ""); - }else if(nodeIcon == "-1" && leafIcon == "-1"){ // 都隐藏 - fnode = last ? "" : - (spread ? "" : ""); - } - if(fnode != ""){_this.getNodeDom($div).fnode().replaceWith($(fnode));} - }, - node: function(iconClass) { // 二级图标样式 - var snode = ""; - - // 获取图标的变量 - var nodeIcon = _this.nodeIcon, - leafIcon = _this.leafIcon; - - var sleafIconLeaf = _this.usefontStyle.snode.leaf, - snodeIconOpen = _this.usefontStyle.snode.node.open, - snodeIconClose = _this.usefontStyle.snode.node.close; - if(iconClass){ - var iconfont = _this.iconfont; - if(typeof iconfont === 'string') { - sleafIconLeaf = iconfont + " " + iconClass; - snodeIconOpen = iconfont + " " + iconClass; - snodeIconClose = iconfont + " " + iconClass; - } else { - sleafIconLeaf = iconfont[0] + " " + iconClass; - snodeIconOpen = iconfont[0] + " " + iconClass; - snodeIconClose = iconfont[0] + " " + iconClass; - } - } - - if(nodeIcon != "-1" && leafIcon != "-1"){ // 都加载 - snode = last ? "" : - (spread ? "" : ""); - }else if(nodeIcon != "-1" && leafIcon == "-1"){ // 加载node 隐藏leaf - snode = last ? "" : - (spread ? "" : ""); - }else if(nodeIcon == "-1" && leafIcon != "-1"){ // 隐藏node 加载leaf - snode = last ? "" : - (spread ? "" : ""); - }else if(nodeIcon == "-1" && leafIcon == "-1"){ // 都隐藏 - snode = last ? "" : - (spread ? "" : ""); - } - if(snode != ""){_this.getNodeDom($div).snode().replaceWith($(snode));} - }, - checkbox: function(checkArr) { // 复选框 - var flag = false; - if(_this.checkbarLoad == "node"){if (checkbar) {flag = true;}} else {if (last) {if (checkbar) {flag = true;}}} - - if(flag){ - var result = "
"; - if(checkArr && checkArr.length > 0){ - - for (var i = 0; i < checkArr.length; i++) { - var checkData = checkArr[i]; - var checked = checkData.checked; - var CHOOSE_CLASS = _this.usefontStyle.checkbox.out; - if (checked == "2") { //半选择 - CHOOSE_CLASS = _this.usefontStyle.checkbox.noall + " " + _this.style.chs; - } else if (checked == "1") { //选择 - CHOOSE_CLASS = _this.usefontStyle.checkbox.on + " " + _this.style.chs; - } else { //未选择或者无值 - CHOOSE_CLASS = _this.usefontStyle.checkbox.out; - } - var disClass = ""; - if(disabled){disClass = NAV_DIS;} - result += ""; - } - } - result += "
"; - _this.getNodeDom($div).snode().next("div").replaceWith($(result)); - } - }, - text: function(title) { // 文字显示 - var disClass = ""; - if(disabled){disClass = NAV_DIS;} - var cite = ""+title+"" - _this.getNodeDom($div).cite().replaceWith($(cite)); - }, - ul: function() { //子节点ul - var ul = last ? "" : - (spread ? "" : ""); - _this.getNodeDom($div).nextUl().replaceWith($(ul)); - }, - div: function(){ - $div.attr("data-id", treeId); - }, - basicData: function(basicData){ - basicData = (basicData == "{}") ? "" : basicData; - $div.attr("data-basic", basicData); - }, - recordData: function(recordData){ - recordData = (recordData == "{}") ? "" : recordData; - $div.attr("data-record", recordData); - }, - p_li: function(pId){ - var $li = $div.parent("li"); - $li.attr("data-id", treeId); - if(pId) { - $li.attr("data-pid", pId); - } - return $li; - } - }; - - }; - - // 获取拼接好的li - DTree.prototype.getLiItemDom = function(treeId, parentId, title, fmtTitle, last, ficonClass, iconClass, checkArr, level, spread, disabled, hide, basicData, recordData, flag) { - var _this = this, - rootId = _this.obj[0].id; - - var dom = _this.getDom(treeId, parentId, title, fmtTitle, last, ficonClass, iconClass, checkArr, level, spread, disabled, hide); - basicData = (basicData == "{}") ? "" : basicData; - recordData = (recordData == "{}") ? "" : recordData; - var div = "
" + - div , - dom.fnode(), - dom.node(), - dom.checkbox(), - dom.text(), - "
", dom.ul(), ""].join(""); - - return li; - }; - - // 初始化节点,用于数据回显 - DTree.prototype.dataInit = function(chooseId){ - var _this = this; - var $div = _this.obj.find("div[data-id='"+chooseId+"']"); - _this.getNodeDom($div).parentLi().find("."+NAV_THIS).removeClass(NAV_THIS); - _this.getNodeDom($div).parentLi().find("."+_this.style.itemThis).removeClass(_this.style.itemThis); - $div.addClass(NAV_THIS); - $div.addClass(_this.style.itemThis); - _this.setNodeParam($div); - // 将该节点的父节点全部展开 - var $li_parents = $div.parents("."+LI_NAV_ITEM); - $li_parents.children("ul").addClass(NAV_SHOW); - $li_parents.children("."+LI_DIV_ITEM).children("i[data-spread]."+event.trimToDot(_this.usefontStyle.fnode.node.close)).addClass(_this.usefontStyle.fnode.node.open); - $li_parents.children("."+LI_DIV_ITEM).children("i[data-spread]."+event.trimToDot(_this.usefontStyle.fnode.node.close)).removeClass(_this.usefontStyle.fnode.node.close); - $li_parents.children("."+LI_DIV_ITEM).children("i[data-spread]."+event.trimToDot(_this.usefontStyle.snode.node.close)).addClass(_this.usefontStyle.snode.node.open); - $li_parents.children("."+LI_DIV_ITEM).children("i[data-spread]."+event.trimToDot(_this.usefontStyle.snode.node.close)).removeClass(_this.usefontStyle.snode.node.close); - return _this.getNowParam(); - }; - - // 基于备份的Html数据回滚 - DTree.prototype.rollbackHtml = function(chooseId){ - var _this = this; - if(_this.bak) { - _this.obj.html(_this.bak); - // 取消全部选中状态 - _this.cancelNavThis(); - if(_this.checkbar) { - _this.cancelCheckedNode(); - _this.chooseDataInit(chooseId); - } else { - _this.dataInit(chooseId); - } - - _this.bak = _this.obj.html(); - } - }; - - - /******************** 基础事件区域 ********************/ - // 数据格式化 - DTree.prototype.escape = function(html){ - return event.escape(html); - }; - - // 格式化数据转回正常数据 - DTree.prototype.unescape = function(str){ - return event.unescape(str); - }; - - // 取消选中div - DTree.prototype.cancelNavThis = function(){ - var _this = this; - _this.obj.find("div[data-id]").parent().find("."+NAV_THIS).removeClass(NAV_THIS); - _this.obj.find("div[data-id]").parent().find("."+_this.style.itemThis).removeClass(_this.style.itemThis); - } - - // 选中div - DTree.prototype.navThis = function(id){ - var _this = this; - var $div = (typeof id === 'object') ? id : (_this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']").length == 0) ? null : _this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']"); - if($div != null) { - _this.cancelNavThis(); - $div.addClass(NAV_THIS); - $div.addClass(_this.style.itemThis); - } - } - - // 手风琴模式操作其他节点 - DTree.prototype.accordionUL = function($ul) { - var _this = this; - if(_this.accordion) { - $ul.closest("li[data-index]").siblings("li[data-index]").children("ul[data-id]").removeClass(NAV_SHOW); - var $divs = $ul.closest("li[data-index]").siblings("li[data-index]").children("ul[data-id]").prev("div"); - if($divs.length && $divs.length > 0) { - for (var i=0; i<$divs.length; i++) { - var $div = $($divs[i]); - var $i_spread = _this.getNodeDom($div).fnode(), - $i_node = _this.getNodeDom($div).snode(); - if($i_spread.attr("data-spread") != 'last'){ - _this.operateIcon($i_spread, $i_node).close(); - } - } - } - - } - }; - - // 展开或隐藏节点 作用点: div - DTree.prototype.clickSpread = function($div) { - var _this = this; - var $i_spread = _this.getNodeDom($div).fnode(), - $i_node = _this.getNodeDom($div).snode(), - $cite = _this.getNodeDom($div).cite(), - spread = $i_spread.attr("data-spread"), - $ul = $div.next("ul"); - - if ($ul.length > 0) { - if (spread == "close") { - if (_this.type=="load") { //增加加载 - if (_this.cache) { //开启缓存 - if ($ul.html()) { - $ul.addClass(NAV_SHOW); - _this.accordionUL($ul); - } else { //加载节点 - _this.getChild($div); - _this.accordionUL($ul); - } - }else { //每次取新的数据 - $ul.html(""); - _this.getChild($div); - _this.accordionUL($ul); - } - } else { // 全量加载 - $ul.addClass(NAV_SHOW); - _this.accordionUL($ul); - } - _this.operateIcon($i_spread, $i_node).open(); - } else if (spread == "open") { - $ul.removeClass(NAV_SHOW); - _this.operateIcon($i_spread, $i_node).close(); - } - } - }; - - // 设置节点为disabled - DTree.prototype.setDisabledNodes = function(disabledIds){ - var _this = this; - var disabledId = disabledIds.split(","); - for (var i=0; i 0) { - _this.getChild($div, data); - } else { - var parseData = _this.parseData(data); - - if(parseData.treeId()){ - var level = parseInt($div.parent("li").attr("data-index"))+1; - $ul.append(_this.getLiItemDom(parseData.treeId(), parseData.parentId(), parseData.title(), parseData.fmtTitle(), parseData.last(0), parseData.ficonClass(), parseData.iconClass(), parseData.checkArr(), level, parseData.spread(), parseData.disabled(), parseData.hide(), parseData.basicData(), parseData.recordData(), "item")); - - // 建造完毕后,选中该DIV - $thisDiv = $ul.find("div[data-id='"+parseData.treeId()+"']"); - _this.setNodeParam($thisDiv); - - _this.showLine($ul.find("li")); - } else { - layer.msg("添加失败,节点ID为undefined!",{icon:5}); - // 重新赋值 - _this.setNodeParam($div); - } - } - } else { - _this.getChild($div); - } - } - - // 局部刷新树--编辑当前节点选中节点时 - DTree.prototype.partialRefreshEdit = function($div, data){ - var _this = this; - $ul = $div.next("ul"), - $p_li = $div.parent("li"); - - if(data) { - if(typeof data === 'object') { - var parseData = _this.parseData(data); - - if(parseData.treeId()){ - var replaceDom = _this.replaceDom($div, parseData.treeId(), parseData.last(0), parseData.spread(), parseData.disabled(), parseData.hide()); - replaceDom.div(); - replaceDom.node(parseData.iconClass()); - replaceDom.checkbox(parseData.checkArr()); - replaceDom.text(parseData.title()); - replaceDom.ul(); - replaceDom.basicData(parseData.basicData()); - replaceDom.recordData(parseData.recordData()); - - var parentId = parseData.parentId(); - var oldParentId = $p_li.attr("data-pid"); - if(parentId && parentId != oldParentId) { - // 变更了父节点 - $p_li = replaceDom.p_li(parentId); - - // 根据parentId找到下挂节点的ul - var $goto_div = _this.getNodeDom(parentId).div(), - $goto_ul = _this.getNodeDom(parentId).nextUl(); - // 判断父级ul中是否还存在li,如果不存在,则需要修改节点的样式 - if($goto_ul.children("li").length == 0){ - var $icon_i = $goto_div.find("i[data-spread]"); - _this.operateIcon($icon_i.eq(0), $icon_i.eq(1)).openWithLeaf(); - $goto_ul.addClass(NAV_SHOW); - } - $goto_ul.append($p_li); - } else { - replaceDom.p_li(); - } - _this.setNodeParam($div); - } else { - layer.msg("编辑失败,节点ID为undefined!",{icon:5}); - // 重新赋值 - _this.setNodeParam($div); - } - } else { - _this.getNodeDom($div).cite().html(data); - } - } - } - - // 局部刷新树--当前节点选中被删除时 - DTree.prototype.partialRefreshDel = function($div){ - var _this = this; - $p_li = $div.parent("li"); - $p_ul = _this.getNodeDom($div).parentUl(); - $p_div = _this.getNodeDom($div).parentDiv(); - - $p_li.remove(); - _this.showLine($p_ul.find("li")); - // 判断父级ul中是否还存在li,如果不存在,则需要修改节点的样式 - if($p_ul.children("li").length == 0){ - var $icon_i = $p_div.find("i[data-spread]"); - _this.operateIcon($icon_i.eq(0), $icon_i.eq(1)).closeWithLeaf(); - } - _this.initNodeParam(); - } - - /******************** 复选框区域 ********************/ - // 初始化复选框的值 - DTree.prototype.chooseDataInit = function(chooseIds){ - var _this = this; - var chooseId = chooseIds.split(","); - for (var i=0; i."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - _this.checkStatus($child_li_i).noCheck(); - - // 处理父级节点的选中状态 - for (var i = 1, item = $parent_li; i < item.length; i++) { - var flag = item.eq(i).find(">."+LI_NAV_CHILD+" ."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"'][data-checked='1']").length; - if (flag == 0) { - //把父级去掉选中 - var $item_i = item.eq(i).find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - _this.checkStatus($item_i).noCheck(); - } - } - } else { - // 处理当前节点的选中状态 - _this.checkStatus($i).check(); - - // 处理子级节点的选中状态 - var $child_li_i = $child_li.find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - _this.checkStatus($child_li_i).check(); - - // 处理父级节点的选中状态 - for (var i = 1, item = $parent_li; i < item.length; i++) { - var $item_i = item.eq(i).find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - //把父级选中 - _this.checkStatus($item_i).check(); - } - } - }; - - //实现复选框点击, no-all 子集选中父级半选中,子集全选父级选中 - DTree.prototype.checkAllOrNoallOrNot = function($i) { - var _this = this; - //$i 当前点击的checkbox - var $div = $i.closest("."+LI_DIV_ITEM), - dataPar = $i.attr("data-par"), - dataType = $i.attr("data-type"), - $li = $i.closest(dataPar), //当前checkbox的上级li节点 - $parent_li = $i.parents(dataPar), //当前checkbox的所有父级li节点 - $child_li = $li.find(dataPar); //当前checkbox的上级li节点下的所有子级li节点 - - if ($i.attr("data-checked") == "1") { //当前复选框为选中状态,点击后变为未选中状态 - // 处理当前节点的选中状态 - _this.checkStatus($i).noCheck(); - - // 处理子级节点的选中状态 - var $child_li_i = $child_li.find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - _this.checkStatus($child_li_i).noCheck(); - - // 处理父级节点的选中状态 - for (var i = 1, item = $parent_li; i < item.length; i++) { - var flag = item.eq(i).find(">."+LI_NAV_CHILD+" ."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"'][data-checked='1']").length; - var $item_i = item.eq(i).find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - if (flag == 0) { - //把父级去掉选中 - _this.checkStatus($item_i).noCheck(); - } else { - //把父级半选 - _this.checkStatus($item_i).noallCheck(); - } - } - } else { //当前复选框为未选中状态,点击后变为选中状态 - // 处理当前节点的选中状态 - _this.checkStatus($i).check(); - - // 处理子级节点的选中状态 - var $child_li_i = $child_li.find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - _this.checkStatus($child_li_i).check(); - - // 处理父级节点的选中状态 - for (var i = 1, item = $parent_li; i < item.length; i++) { - var flag1 = item.eq(i).find(">."+LI_NAV_CHILD+" ."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"'][data-checked='1']").length; - var flag2 = item.eq(i).find(">."+LI_NAV_CHILD+" ."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']").length; - var $item_i = item.eq(i).find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - if (flag1 != flag2) { - // 父级复选框半选 - _this.checkStatus($item_i).noallCheck(); - } else { - // 父级复选框全选 - _this.checkStatus($item_i).check(); - } - } - } - }; - - //实现复选框点击,p-casc:父级选中子集全选,子集无法改变父级选中状态 - DTree.prototype.checkAllOrPcascOrNot = function($i) { - var _this = this; - //$i 当前点击的checkbox - var $div = $i.closest("."+LI_DIV_ITEM), - dataPar = $i.attr("data-par"), - dataType = $i.attr("data-type"), - $li = $i.closest(dataPar), //当前checkbox的上级li节点 - $parent_li = $i.parents(dataPar), //当前checkbox的所有父级li节点 - $child_li = $li.find(dataPar); //当前checkbox的上级li节点下的所有子级li节点 - - if ($i.attr("data-checked") == "1") { //当前复选框为选中状态,点击后变为未选中状态 - // 处理当前节点的选中状态 - _this.checkStatus($i).noCheck(); - - // 处理子级节点的选中状态 - var $child_li_i = $child_li.find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - _this.checkStatus($child_li_i).noCheck(); - - } else { //当前复选框为未选中状态,点击后变为选中状态 - // 处理当前节点的选中状态 - _this.checkStatus($i).check(); - - // 处理子级节点的选中状态 - var $child_li_i = $child_li.find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - _this.checkStatus($child_li_i).check(); - } - }; - - //实现复选框点击,self:各自选中互不影响 - DTree.prototype.checkOrNot = function($i) { - var _this = this; - //$i 当前点击的checkbox - var $div = $i.closest("."+LI_DIV_ITEM), - dataPar = $i.attr("data-par"), - dataType = $i.attr("data-type"), - $li = $i.closest(dataPar), //当前checkbox的上级li节点 - $parent_li = $i.parents(dataPar), //当前checkbox的所有父级li节点 - $child_li = $li.find(dataPar); //当前checkbox的上级li节点下的所有子级li节点 - - if ($i.attr("data-checked") == "1") { //当前复选框为选中状态,点击后变为未选中状态 - // 处理当前节点的选中状态 - _this.checkStatus($i).noCheck(); - } else { //当前复选框为未选中状态,点击后变为选中状态 - // 处理当前节点的选中状态 - _this.checkStatus($i).check(); - } - }; - - //实现复选框点击,only:只能选中1个复选框 - DTree.prototype.checkOnly = function($i) { - var _this = this; - //$i 当前点击的checkbox - var $div = $i.closest("."+LI_DIV_ITEM), - dataPar = $i.attr("data-par"), - dataType = $i.attr("data-type"), - $li = $i.closest(dataPar), //当前checkbox的上级li节点 - $parent_li = $i.parents(dataPar), //当前checkbox的所有父级li节点 - $child_li = $li.find(dataPar); //当前checkbox的上级li节点下的所有子级li节点 - - var checked = $i.attr("data-checked"); - // 将全部节点全部设为未选中状态 - var $all_i = _this.obj.find("i[data-checked]"); - _this.checkStatus($all_i).noCheck(); - - if (checked != "1") { //当前复选框为未选中状态,点击后变为选中状态 - // 处理当前节点的选中状态 - _this.checkStatus($i).check(); - } - }; - - //实现复选框点击 - DTree.prototype.changeCheck = function($i) { - var _this = this; - var temp = _this.temp; - if(typeof $i === 'undefined') { - $i = temp[0]; - } - // 复选框选中事件 - if (_this.checkbarType == "all") { - _this.checkAllOrNot($i); - } else if(_this.checkbarType == "no-all") { - _this.checkAllOrNoallOrNot($i); - } else if(_this.checkbarType == "p-casc") { - _this.checkAllOrPcascOrNot($i); - } else if(_this.checkbarType == "self") { - _this.checkOrNot($i); - } else if(_this.checkbarType == "only") { - _this.checkOnly($i); - } else { - _this.checkAllOrNot($i); - } - - if(_this.select) { - // 设置复选框模式中的下拉树的值 - _this.selectCheckboxVal(); - } - - // 获取复选框选中节点的内容 - var checkbarNodes = _this.setAndGetCheckbarNodesParam(true); - - // 用户自定义想做的事情 - _this.checkbarFun.chooseDone(checkbarNodes); - layui.event.call(this, MOD_NAME, "chooseDone("+$(_this.obj)[0].id+")", {"checkbarParams": checkbarNodes}); - _this.temp = []; - }; - - //复选框半选状态初始化设置 - DTree.prototype.initNoAllCheck = function(){ - var _this = this; - //1.获取所有选中节点 - var $is = _this.obj.find("i[data-checked='1']"); - if($is.length > 0){ - for ( var key = 0; key < $is.length; key++) { - var $i = $($is[key]), - dataPar = $i.attr("data-par"), - dataType = $i.attr("data-type"), - $li = $i.closest(dataPar), //当前checkbox的上级li节点 - $parent_li = $i.parents(dataPar), //当前checkbox的所有父级li节点 - $child_li = $li.find(dataPar); //当前checkbox的上级li节点下的所有子级li节点 - - // 处理父级节点的选中状态 - for (var i = 1, item = $parent_li; i < item.length; i++) { - var flag1 = item.eq(i).find(">."+LI_NAV_CHILD+" ."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"'][data-checked='1']").length; - var flag2 = item.eq(i).find(">."+LI_NAV_CHILD+" ."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']").length; - var $item_i = item.eq(i).find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - if (flag1 != flag2) { - // 父级复选框半选 - _this.checkStatus($item_i).noallCheck(); - } else { - // 父级复选框全选 - _this.checkStatus($item_i).check(); - } - } - } - } - }; - - //复选框选中状态初始化设置 - DTree.prototype.initAllCheck = function(){ - var _this = this; - //1.获取所有选中节点 - var $is = _this.obj.find("i[data-checked='1']"); - if($is.length > 0){ - for ( var key = 0; key < $is.length; key++) { - var $i = $($is[key]), - dataPar = $i.attr("data-par"), - dataType = $i.attr("data-type"), - $li = $i.closest(dataPar), //当前checkbox的上级li节点 - $parent_li = $i.parents(dataPar), //当前checkbox的所有父级li节点 - $child_li = $li.find(dataPar); //当前checkbox的上级li节点下的所有子级li节点 - - // 处理父级节点的选中状态 - for (var i = 1, item = $parent_li; i < item.length; i++) { - var $item_i = item.eq(i).find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - // 父级复选框全选 - _this.checkStatus($item_i).check(); - } - } - } - }; - - // 设置复选框选中/未选中/半选 _this.checkStatus($i).check(); _this.checkStatus($i).noCheck(); _this.checkStatus($i).noallCheck(); - DTree.prototype.checkStatus = function($i) { - var _this = this; - return { - check: function(){ - $i.removeClass(_this.usefontStyle.checkbox.out); - $i.removeClass(_this.usefontStyle.checkbox.noall); - $i.addClass(_this.usefontStyle.checkbox.on); - $i.addClass(_this.style.chs); - $i.attr("data-checked","1"); - }, - noCheck: function(){ - $i.removeClass(_this.usefontStyle.checkbox.noall); - $i.removeClass(_this.usefontStyle.checkbox.on); - $i.removeClass(_this.style.chs); - $i.addClass(_this.usefontStyle.checkbox.out); - $i.attr("data-checked","0"); - }, - noallCheck: function(){ - $i.removeClass(_this.usefontStyle.checkbox.out); - $i.removeClass(_this.usefontStyle.checkbox.on); - $i.addClass(_this.usefontStyle.checkbox.noall); - $i.addClass(_this.style.chs); - $i.attr("data-checked","2"); - } - } - }; - - // 设置树的复选框操作值的全部参数,并获取 - DTree.prototype.setAndGetCheckbarNodesParam = function(requestParamFlag) { - var _this = this; - //操作前先清空 - _this.checkbarNode = []; - // 选择所有复选框节点 - if (_this.checkbarData == "change"){ //记录变更数据 - _this.obj.find("i[data-par][dtree-disabled='false']").each(function(){ - var $i = $(this), $div = $i.closest("."+LI_DIV_ITEM); - if ($i.attr("data-checked") != $i.attr("data-initchecked")) { - if(requestParamFlag) { - _this.checkbarNode.push(_this.getRequestParam(_this.getCheckbarNodeParam($div, $i))); - } else { - _this.checkbarNode.push(_this.getCheckbarNodeParam($div, $i)); - } - } - }); - } else if (_this.checkbarData == "all"){ //记录全部数据 - _this.obj.find("i[data-par][data-checked][dtree-disabled='false']").each(function(){ - var $i = $(this), $div = $i.closest("."+LI_DIV_ITEM); - if(requestParamFlag) { - _this.checkbarNode.push(_this.getRequestParam(_this.getCheckbarNodeParam($div, $i))); - } else { - _this.checkbarNode.push(_this.getCheckbarNodeParam($div, $i)); - } - }); - } else if (_this.checkbarData == "choose"){ //记录选中数据 - _this.obj.find("i[data-par][data-checked='1'][dtree-disabled='false']").each(function(){ - var $i = $(this), $div = $i.closest("."+LI_DIV_ITEM); - if(requestParamFlag) { - _this.checkbarNode.push(_this.getRequestParam(_this.getCheckbarNodeParam($div, $i))); - } else { - _this.checkbarNode.push(_this.getCheckbarNodeParam($div, $i)); - } - }); - } else if (_this.checkbarData == "halfChoose"){ //记录选中和半选数据 - _this.obj.find("i[data-par][data-checked='1'][dtree-disabled='false']").each(function(){ - var $i = $(this), $div = $i.closest("."+LI_DIV_ITEM); - if(requestParamFlag) { - _this.checkbarNode.push(_this.getRequestParam(_this.getCheckbarNodeParam($div, $i))); - } else { - _this.checkbarNode.push(_this.getCheckbarNodeParam($div, $i)); - } - }); - _this.obj.find("i[data-par][data-checked='2'][dtree-disabled='false']").each(function(){ - var $i = $(this), $div = $i.closest("."+LI_DIV_ITEM); - if(requestParamFlag) { - _this.checkbarNode.push(_this.getRequestParam(_this.getCheckbarNodeParam($div, $i))); - } else { - _this.checkbarNode.push(_this.getCheckbarNodeParam($div, $i)); - } - }); - } - return _this.checkbarNode; - }; - - // 获取树的复选框操作值的全部参数 - DTree.prototype.getCheckbarNodesParam = function() { - var _this = this; - return _this.setAndGetCheckbarNodesParam(true); - }; - - // 获取树的一个复选框的参数 - DTree.prototype.getCheckbarNodeParam = function($div, $i){ - var _this = this; - var temp_node = {}; - temp_node.nodeId = $div.attr("data-id"); - temp_node.parentId = _this.getNodeDom($div).parentLi().attr("data-pid"); - temp_node.context = (typeof _this.formatter.title === 'function') ? _this.getNodeDom($div).cite().attr("data-title") : _this.getNodeDom($div).cite().text(); - temp_node.leaf = _this.getNodeDom($div).cite().attr("data-leaf") == "leaf" ? true : false; - temp_node.level = _this.getNodeDom($div).parentLi().attr("data-index"); - temp_node.spread = _this.getNodeDom($div).fnode().attr("data-spread") == "open" ? true : false; - - var basicData = $div.attr("data-basic"); - if(basicData) { - basicData = JSON.parse(event.unescape(basicData)); - } - temp_node.basicData = basicData; - var recordData = $div.attr("data-record"); - if(recordData) { - recordData = JSON.parse(event.unescape(recordData)); - } - temp_node.recordData = recordData; - - temp_node.dataType = $i.attr("data-type"); - temp_node.checked = $i.attr("data-checked"); - temp_node.initchecked = $i.attr("data-initchecked"); - return temp_node; - }; - - // 获取基于返回参数的树的复选框参数 - DTree.prototype.getCheckbarJsonArrParam = function(){ - var _this = this; - var checkbarJsonArr = { - nodeId: [], //节点ID - parentId: [], //父节点ID - context: [], //节点内容 - leaf: [], //是否叶子节点 - level: [], //层级 - spread: [], //节点展开状态 - dataType: [], //节点标记 - checked: [], //节点复选框选中状态 - initchecked: [], //节点复选框初始状态 - basicData: [], //用户自定义的记录节点数据 - recordData: [], //当前data数据(排除basicData和children字段) - }; - // 获取全部复选框选中节点 - var params = _this.setAndGetCheckbarNodesParam(false); - if(params && params.length > 0) { - for(var i=0; i 0) { _this.checkStatus($i).check(); } - } - - //取消全部复选框选中 - DTree.prototype.cancelCheckedNode = function(nodeId){ - var _this = this; - var $i = _this.obj.find("i[data-par][data-checked!='0']"); - if($i.length > 0) { _this.checkStatus($i).noCheck(); } - } - - //反选复选框 - DTree.prototype.invertCheckedNode = function(nodeId){ - var _this = this; - if(_this.obj.find("i[data-par]").length > 0) { - var b = false; - _this.obj.find("i[data-par]").each(function(){ - var $i = $(this); - if($i.attr("data-checked") == '2'){ - b = true; - }else if($i.attr("data-checked") == '0') { - _this.checkStatus($i).check(); - }else if($i.attr("data-checked") == '1') { - _this.checkStatus($i).noCheck(); - } - }); - - if(b) { - _this.initNoAllCheck(); - } else { - _this.initAllCheck(); - } - } - } - - //删除选中节点 - DTree.prototype.removeCheckedNode = function(nodeId){ - var _this = this; - var len = _this.obj.find("i[data-par][data-checked='1']").length; - if(len == 0){ - layer.msg("请至少选中一个节点",{icon:2}); - }else{ - //操作前先清空 - _this.checkbarNode = []; - // 选择所有复选框节点 - var i_node = {}; - _this.obj.find("i[data-par][data-checked='1']").each(function(){ - var $i = $(this), $div = $i.closest("."+LI_DIV_ITEM); - - _this.checkbarNode.push(_this.getRequestParam(_this.getCheckbarNodeParam($div, $i))); - }); - - layer.confirm('确定要删除选中节点?', {icon: 3, title:'删除选中节点'}, function(index1){ - var flag = _this.menubarFun.remove(_this.checkbarNode); - if(flag){ - _this.obj.find("i[data-par][data-checked='1']").closest("."+LI_DIV_ITEM).next("ul").remove(); - _this.obj.find("i[data-par][data-checked='1']").closest("."+LI_DIV_ITEM).remove(); - _this.checkbarNode=[]; - } - - layer.close(index1); - }); - } - } - - /******************** 工具栏及菜单栏区域 ********************/ - // 初始化菜单栏和工具栏的div - DTree.prototype.initTreePlus = function(){ - var _this = this; - // 初始化菜单栏和工具栏的div - _this.obj.prevAll('div#dtree_menubar_'+_this.obj[0].id).remove(); - _this.toolbarMenu = {}; - if(_this.menubar && _this.menubarTips.group && _this.menubarTips.group.length > 0) _this.obj.before("
"); - if(_this.toolbar){ - if(_this.toolbarWay == "contextmenu") { - _this.obj.prevAll('div#dtree_toolbar_'+_this.obj[0].id).remove(); - _this.obj.before("
"); - } - } - - }; - - // 开启工具栏和菜单栏 - DTree.prototype.openTreePlus = function(){ - var _this = this; - // 先对工具栏做处理,因为菜单栏可能会与工具栏产生关联。 - var ggMenu = []; - if(_this.toolbar) _this.getToolbarDom(); - - if(_this.menubar) { - var menubarTips = _this.menubarTips, - mtbar = menubarTips.toolbar, - group = menubarTips.group, - freedom = menubarTips.freedom; - if(mtbar && mtbar.length > 0){ - // 菜单栏吸附工具栏上 - for(var i=0; i 0){ - // 菜单栏吸附在上方的按钮组div中 - for(var i=0; i"; - break; - case defaultMenu.moveUp: - gg = ""; - break; - case defaultMenu.refresh: - gg = ""; - break; - case defaultMenu.checkAll: - gg = (_this.checkbar && _this.checkbarType != 'only') ? "" : ""; - break; - case defaultMenu.unCheckAll: - gg = (_this.checkbar && _this.checkbarType != 'only') ? "" : ""; - break; - case defaultMenu.invertAll: - gg = (_this.checkbar && _this.checkbarType != 'only') ? "" : ""; - break; - case defaultMenu.remove: - gg = (_this.checkbar) ? "" : ""; - break; - case defaultMenu.searchNode: - gg = ""; - break; - } - return gg; - }; - - // 获取扩展菜单栏 - DTree.prototype.getExtMenubarDom = function(menu){ - var _this = this; - return ""; - }; - - // 获取依附在工具栏的菜单栏 - DTree.prototype.getMenubarToolDom = function(menu){ - var _this = this; - var rootId = _this.obj[0].id; - switch (menu) { - case defaultMenu.moveDown: - _this.toolbarMenu[defaultMenu.moveDown] = _this.setToolbarDom().setMenuToolbarOption(defaultMenu.moveDown, _this.toolbarStyle.title, _this.usefontStyle.toolbar.menubar.movedown, "展开全部"); - break; - case defaultMenu.moveUp: - _this.toolbarMenu[defaultMenu.moveUp] = _this.setToolbarDom().setMenuToolbarOption(defaultMenu.moveUp, _this.toolbarStyle.title, _this.usefontStyle.toolbar.menubar.moveup, "收缩全部"); - break; - case defaultMenu.refresh: - _this.toolbarMenu[defaultMenu.refresh] = _this.setToolbarDom().setMenuToolbarOption(defaultMenu.refresh, _this.toolbarStyle.title, _this.usefontStyle.toolbar.menubar.refresh, "刷新"); - break; - case defaultMenu.checkAll: - if(_this.checkbar && _this.checkbarType != 'only') - _this.toolbarMenu[defaultMenu.checkAll] = _this.setToolbarDom().setMenuToolbarOption(defaultMenu.checkAll, _this.toolbarStyle.title, _this.usefontStyle.toolbar.menubar.checkAll, "全选节点"); - break; - case defaultMenu.unCheckAll: - if(_this.checkbar && _this.checkbarType != 'only') - _this.toolbarMenu[defaultMenu.unCheckAll] = _this.setToolbarDom().setMenuToolbarOption(defaultMenu.unCheckAll, _this.toolbarStyle.title, _this.usefontStyle.toolbar.menubar.unCheckAll, "全不选节点"); - break; - case defaultMenu.invertAll: - if(_this.checkbar && _this.checkbarType != 'only') - _this.toolbarMenu[defaultMenu.invertAll] = _this.setToolbarDom().setMenuToolbarOption(defaultMenu.invertAll, _this.toolbarStyle.title, _this.usefontStyle.toolbar.menubar.invertAll, "反选节点"); - break; - case defaultMenu.remove: - if(_this.checkbar) - _this.toolbarMenu[defaultMenu.remove] = _this.setToolbarDom().setMenuToolbarOption(defaultMenu.remove, _this.toolbarStyle.title, _this.usefontStyle.toolbar.menubar.remove, "删除选中"); - break; - case defaultMenu.searchNode: - _this.toolbarMenu[defaultMenu.searchNode] = _this.setToolbarDom().setMenuToolbarOption(defaultMenu.searchNode, _this.toolbarStyle.title, _this.usefontStyle.toolbar.menubar.searchNode, "查询"); - break; - } - }; - - // 获取依附在工具栏的扩展菜单栏 - DTree.prototype.getExtMenubarToolDom = function(menu){ - var _this = this; - _this.toolbarMenu[menu.menubarId] = _this.setToolbarDom().setMenuToolbarOption(menu.menubarId, menu.title, _this.usefontStyle.toolbar.menubarExt+" "+menu.icon, ""); - }; - - // menubar内置方法 - DTree.prototype.menubarMethod = function(){ - var _this = this; - return { - openAllNode: function(obj){ // 展开所有节点 - var $ulNode = obj || _this.obj.children("li").children("ul"); - // 遍历所有ul子节点 - for (var i = 0; i < $ulNode.length; i++) { - // 获取当前节点的信息 - var $ul = $($ulNode[i]), - $div = $ul.prev("div"), - $i_spread = _this.getNodeDom($div).fnode(), - $i_node = _this.getNodeDom($div).snode(), - $cite = _this.getNodeDom($div).cite(), - spread = $i_spread.attr("data-spread"), - leaf = $cite.attr("data-leaf"); - - if (leaf == "leaf") { continue; } // 说明是叶子了,则继续循环下一个 - - if (spread == "open") { - // 说明该节点已经展开了,则进行子节点循环 - } else { - if (_this.type=="load") { //是否全量加载 - if (_this.cache) { //是否开启缓存 - if ($ul.html()) { - $ul.addClass(NAV_SHOW); - } else { //加载节点 - _this.getChild($div); - } - }else { //每次取新的数据 - $ul.html(""); - _this.getChild($div); - } - } else { // 全量加载 - $ul.addClass(NAV_SHOW); - } - _this.operateIcon($i_spread, $i_node).open(); - - } - var $childUl = $ul.children("li").children("ul"); - _this.menubarMethod().openAllNode($childUl); - } - }, - closeAllNode: function(){ //收缩所有节点 - _this.obj.find("."+LI_NAV_CHILD).each(function(){ - // 获取当前节点的信息 - var $ul = $(this), - $div = $ul.prev("div"), - $i_spread = _this.getNodeDom($div).fnode(), - $i_node = _this.getNodeDom($div).snode(), - $cite = _this.getNodeDom($div).cite(), - spread = $i_spread.attr("data-spread"), - leaf = $cite.attr("data-leaf"); - - $ul.removeClass(NAV_SHOW); - _this.operateIcon($i_spread, $i_node).close(); - }); - }, - refreshTree: function(){// 刷新树 - _this.refreshTree(); - }, - checkAll: function(){ // 全选节点 - _this.checkAllNode(); - }, - unCheckAll: function(){ // 全不选节点 - _this.cancelCheckedNode(); - }, - invertAll: function(){ // 反选节点 - _this.invertCheckedNode(); - }, - remove: function(){// 删除选中节点 - _this.removeCheckedNode(); - }, - searchNode: function(){//模糊查询该值,展开该值节点 - layer.prompt({ - formType: 0, - value: "", - title: '查询节点' - }, function(value, index1, elem){ - if (value) { - var flag = _this.searchNode(value); - if (!flag) { - layer.msg("该名称节点不存在!", {icon:5}); - } - } else { - layer.msg("未指定查询节点名称", {icon:5}); - } - layer.close(index1); - }); - }, - extMethod: function(menuId, $div, flag){ - if(_this.menubar && _this.menubarTips.group && _this.menubarTips.group.length > 0 && flag == "group"){ - for(var i=0; i<_this.menubarTips.group.length; i++){ - var ext = _this.menubarTips.group[i]; - if (menuId == ext.menubarId){ - ext.handler(_this.getRequestParam(_this.getNodeParam($div), $div)); - break; - } - } - } - if(_this.menubar && _this.menubarTips.toolbar && _this.menubarTips.toolbar.length > 0 && flag == "toolbar"){ - for(var i=0; i<_this.menubarTips.toolbar.length; i++){ - var ext = _this.menubarTips.toolbar[i]; - if (menuId == ext.menubarId){ - ext.handler(_this.getRequestParam(_this.getNodeParam($div), $div)); - break; - } - } - } - if(_this.menubar && _this.menubarTips.freedom && _this.menubarTips.freedom.length > 0 && flag == "freedom"){ - for(var i=0; i<_this.menubarTips.freedom.length; i++){ - var ext = _this.menubarTips.freedom[i]; - if (menuId == ext.menubarId){ - ext.handler(_this.getRequestParam(_this.getNodeParam($div), $div)); - break; - } - } - } - } - }; - }; - - // menubar监听方法 - DTree.prototype.menubarListener = function(menuId, flag){ - var _this = this; - var $div = _this.getNodeDom().nowDiv(); - switch (menuId) { - case defaultMenu.moveDown: // 展开全部节点 - _this.menubarMethod().openAllNode(); - break; - case defaultMenu.moveUp: // 收缩全部节点 - _this.menubarMethod().closeAllNode(); - break; - case defaultMenu.refresh: - _this.menubarMethod().refreshTree(); // 刷新树 - break; - case defaultMenu.checkAll: - _this.menubarMethod().checkAll(); - break; - case defaultMenu.unCheckAll: - _this.menubarMethod().unCheckAll(); - break; - case defaultMenu.invertAll: - _this.menubarMethod().invertAll(); - break; - case defaultMenu.remove: - _this.menubarMethod().remove(); - break; - case defaultMenu.searchNode: - _this.menubarMethod().searchNode(); - break; - default: - _this.menubarMethod().extMethod(menuId, $div, flag); - break; - } - }; - - //模糊查询该值,展开该值节点 - DTree.prototype.searchNode = function(value){ - var _this = this; - var b = false; - var $lis = []; - _this.obj.find("cite[data-leaf]").each(function(){ - var $nthis = $(this); - var html = $nthis.html(); - if(html.indexOf(value) > -1){ - if($nthis.attr("data-leaf") == "leaf") { - // 叶子节点提供包含父节点的所有信息 - var title = ""; - $nthis.parents("li").each(function(){ - title = "-" + $(this).find("cite[data-leaf]").html() + title; - }); - title = title.substring(1, title.length); - $nthis.attr("title", title); - } - // 保存当前cite所在的li及父li中包含该值,则只保留父的 - var i = 0; - $nthis.parents("li").each(function(){ - var html2 = $(this).find("cite[data-leaf]").html(); - if(html2.indexOf(value) > -1){ - i++; - } - if(i >= 2){ - return true; - } - }); - if (i < 2){ - $lis.push($nthis.closest("li").prop("outerHTML")); - } - } - }); - if($lis.length > 0) { - b = true; - // 1.将树节点清空 - _this.obj.html(""); - // 2.遍历所有cite节点,展开当前cite节点 - for(var i=0; i<$lis.length; i++){ - _this.obj.append($lis[i]); - } - } - return b; - }; - - - /******************** 工具栏区域 ********************/ - // 获取工具栏 - DTree.prototype.getToolbarDom = function(){ - var _this = this; - var toolbarShow = _this.toolbarShow, - toolbarExt = _this.toolbarExt, - toolbarWay = _this.toolbarWay; - - if(toolbarShow.length > 0){ - for(var i=0; i 0){ - for(var i=0; i "+other +title+""; - } else if(toolbarWay == "fixed" || toolbarWay == "follow") { - return ""; - } - }, - setMenuToolbarOption: function(menubarId, title, classId, other){ - var rootId = _this.obj[0].id; - if(toolbarWay == "contextmenu") { - return "
 "+other +title+"
"; - } else if(toolbarWay == "fixed" || toolbarWay == "follow") { - return ""; - } - }, - setToolbarPlace: function(toolbarMenu){ - if(toolbarWay == "contextmenu") { - if(toolbarMenu){ - _this.obj.prevAll('div#dtree_toolbar_'+_this.obj[0].id).find('div.layui-nav-item>dl.layui-nav-child').html(""); - for(var key in toolbarMenu){ - _this.obj.prevAll('div#dtree_toolbar_'+_this.obj[0].id).find('div.layui-nav-item>dl.layui-nav-child').append(toolbarMenu[key]); - } - } - } else if(toolbarWay == "fixed" || toolbarWay == "follow") { - _this.obj.find("cite[data-leaf][dtree-disabled='false']").each(function(){ - var $cite = $(this); - _this.dynamicToolbarDom($cite); - }); - } - } - } - }; - - // 在节点后动态绑定fixed和follow条件的工具栏 - DTree.prototype.dynamicToolbarDom = function($cite){ - var _this = this; - var toolbarWay = _this.toolbarWay; - if($cite.next("em."+TOOLBAR_TOOL_EM).length == 0) { - var $div = $cite.parent("div"); - var param = _this.getRequestParam(_this.getTempNodeParam($div)); - var toolbarMenus = _this.toolbarFun.loadToolbarBefore(event.cloneObj(_this.toolbarMenu), param, $div); - var hideCls = (toolbarWay == "follow") ? NAV_HIDE : ""; - var em = [""]; - if(toolbarMenus){ - for(var key in toolbarMenus){ - em.push(toolbarMenus[key]); - } - } - em.push(""); - $cite.after(em.join('')); - } - } - - // 隐藏toolbar - DTree.prototype.toolbarHide = function() { - var _this = this; - if(_this.toolbar && _this.toolbarWay == "contextmenu") { - var $toolBarDiv = _this.obj.prevAll('div#dtree_toolbar_'+_this.obj[0].id); - $toolBarDiv.find(".layui-nav-child").removeClass('layui-anim-fadein layui-show'); - } - } - - // toolbar内置方法 - DTree.prototype.toolbarMethod = function(){ - var _this = this; - return { - pulldown: function(obj){ // 展开当前点击节点的下面全部节点 - if(!obj) return; - var $ulNode = obj; - // 遍历所有ul子节点 - for (var i = 0; i < $ulNode.length; i++) { - // 获取当前节点的信息 - var $ul = $($ulNode[i]), - $div = $ul.prev("div"), - $i_spread = _this.getNodeDom($div).fnode(), - $i_node = _this.getNodeDom($div).snode(), - $cite = _this.getNodeDom($div).cite(), - spread = $i_spread.attr("data-spread"), - leaf = $cite.attr("data-leaf"); - - if (leaf == "leaf") { continue; } // 说明是叶子了,则继续循环下一个 - - if (spread == "open") { - // 说明该节点已经展开了,则进行子节点循环 - } else { - if (_this.type=="load") { //是否全量加载 - if (_this.cache) { //是否开启缓存 - if ($ul.html()) { - $ul.addClass(NAV_SHOW); - } else { //加载节点 - _this.getChild($div); - } - }else { //每次取新的数据 - $ul.html(""); - _this.getChild($div); - } - } else { // 全量加载 - $ul.addClass(NAV_SHOW); - } - _this.operateIcon($i_spread, $i_node).open(); - - } - var $childUl = $ul.children("li").children("ul"); - _this.toolbarMethod().pulldown($childUl); - } - }, - pullup: function($li){ // 收缩当前点击节点的下面全部节点 - $li.find("."+LI_NAV_CHILD).each(function(){ - // 获取当前节点的信息 - var $ul = $(this), - $div = $ul.prev("div"), - $i_spread = _this.getNodeDom($div).fnode(), - $i_node = _this.getNodeDom($div).snode(), - $cite = _this.getNodeDom($div).cite(), - spread = $i_spread.attr("data-spread"), - leaf = $cite.attr("data-leaf"); - - $ul.removeClass(NAV_SHOW); - _this.operateIcon($i_spread, $i_node).close(); - }); - } - } - }; - - // toolbar监听方法 - DTree.prototype.toolbarListener = function(tool, $div) { - var _this = this; - var $cite = $div.children("cite[data-leaf]"), - $ul = $div.next("ul"), - $p_li = $div.parent("li[data-index]"), //当前选中节点的顶级li节点 - $p_ul = $p_li.parent("ul"), //当前选中节点的顶级li节点的父级ul - $p_div = $p_ul.prev("div"), //当前选中节点的顶级li节点的父级ul的前一个div - title = $cite.html(); - switch (tool) { - case defaultTool.pulldown: - _this.toolbarMethod().pulldown($ul); - break; - case defaultTool.pullup: - _this.toolbarMethod().pullup($p_li); - break; - case defaultTool.addTool: - var content = _this.loadToolBar(title, defaultTool.addTool); - - layer.open({ - title: "新增"+_this.toolbarStyle.title, - type: 1, - area: _this.toolbarStyle.area, - content: content, - success: function(layero, index){ - form.render(); - form.on("submit(dtree_addNode_form)",function(data){ - var data = data.field; - var parentId = $div.attr("data-id"), - id = $div.attr("data-id")+"_node_"+$ul[0].childNodes.length, - leaf = true, - checked = "0", - level = parseInt($p_li.attr("data-index"))+1; - - // 创建子节点的DOM,添加子节点 - var checkArr = []; - if (_this.checkArrLen > 0) { - for (var i = 0; i < _this.checkArrLen; i++) { - checkArr.push({"type":i,"checked":"0"}); - } - } - - $ul.append(_this.getLiItemDom(id, parentId, data.addNodeName, data.addNodeName, true, "", "", checkArr, level, false, false, false, "", "", "item")); - // 先将li节点隐藏 - $ul.find("li[data-id='"+id+"']").hide(); - // 重新赋值 - var $addDiv = $ul.find("div[data-id='"+id+"']"); - node = _this.getNodeParam($addDiv); - - //获取组装后的requestNode,组合参数 - var requestNode = _this.getRequestParam(node); - requestNode = $.extend(requestNode, data); - - _this.temp = [id, $ul, $div, level]; - // 用户自定义想做的事情 - _this.toolbarFun.addTreeNode(requestNode, $div); - - layer.close(index); - return false; - }); - } - }); - break; - case defaultTool.editTool: - var content = _this.loadToolBar(title, defaultTool.editTool); - - layer.open({ - title: "编辑"+_this.toolbarStyle.title, - type: 1, - area: _this.toolbarStyle.area, - content: content, - success: function(layero, index){ - _this.toolbarFun.editTreeLoad(_this.getRequestParam(_this.getNodeParam($div))); - form.render(); - form.on("submit(dtree_editNode_form)",function(data){ - var data = data.field; - $cite.html(data.editNodeName); - node = _this.getNodeParam($div); - var requestNode = _this.getRequestParam(node); - requestNode = $.extend(requestNode, data); - _this.temp = [$cite, $div, title, $p_div]; - _this.toolbarFun.editTreeNode(requestNode, $div); - - layer.close(index); - }); - } - }); - break; - case defaultTool.delTool: - layer.confirm('确定要删除该'+_this.toolbarStyle.title+'?', {icon: 3, title:'删除'+_this.toolbarStyle.title}, function(index){ - var node = _this.getNodeParam($div); - _this.temp = [$p_li, $p_div]; - _this.toolbarFun.delTreeNode(_this.getRequestParam(_this.getNodeParam($div)), $div); - - layer.close(index); - }); - break; - default: - if(_this.toolbarExt.length > 0){ - for(var i=0; i<_this.toolbarExt.length; i++){ - var ext = _this.toolbarExt[i]; - if (tool == ext.toolbarId){ - ext.handler(_this.getRequestParam(_this.getNodeParam($div)), $div); - break; - } - } - } - break; - } - } - - - // 加载toolBar中的内容 - DTree.prototype.loadToolBar = function(title, name){ - var _this = this; - var toolbarShow = _this.toolbarShow; - var nodeBarContents = _this.toolbarBtn; - - var html = ""; - switch (name) { - case defaultTool.addTool: - var addNodeBarDef = [{"label": "当前选中", "name": "nodeTitle", "type": "text", "value": title, "defElem": "nowChoose", "readonly": true}, - {"label": "新增"+_this.toolbarStyle.title, "name": "addNodeName", "type": "text", "value": "", "defElem": "nowChange", "verify": "required"}, - {"type": "submit", "value": "确认添加", "defElem": "btn", "filter": "dtree_addNode_form"}]; - - //2. 用户自定义的节点内容 - var addNodeBar = ['
']; - - if(nodeBarContents != null && nodeBarContents.length > 0){ - if(nodeBarContents[0] != null && nodeBarContents[0] != undefined && nodeBarContents[0].length > 0){ - var addNodeBarContents = nodeBarContents[0]; - // 1. 检查是否包含了now、newly、btn这三个默认项,将其他元素依次排列,将特殊元素至于栈顶 - for(var i=0; i', '
']; - // 3.遍历生成按钮 - for(var j=0; j
'); - addNodeBar.push(addBtn.join('')); - addNodeBar.push('
'); - html = addNodeBar.join(''); - break; - - case defaultTool.editTool: - var editNodeBarDef = [{"label": "当前选中", "name": "nodeTitle", "type": "text", "value": title, "defElem": "nowChoose", "readonly": true}, - {"label": "编辑"+_this.toolbarStyle.title, "name": "editNodeName", "type": "text", "value": "", "defElem": "nowChange", "verify": "required"}, - {"type": "submit", "value": "确认编辑", "defElem": "btn", "filter": "dtree_editNode_form"}]; - - var editNodeBar = ['
']; - //2. 用户自定义的节点内容 - if(nodeBarContents != null && nodeBarContents.length > 0){ - - if(nodeBarContents[1] != null && nodeBarContents[1] != undefined && nodeBarContents[1].length > 0){ - var editNodeBarContents = nodeBarContents[1]; - // 1. 检查是否包含了now、newly、btn这三个默认项,将其他元素依次排列,将特殊元素至于栈顶 - for(var i=0; i', '
']; - // 3.遍历生成按钮 - for(var j=0; j
'); - editNodeBar.push(editBtn.join('')); - editNodeBar.push('
'); - html = editNodeBar.join(''); - break; - } - return html; - }; - - // 获取toolbar详细的标签信息 - DTree.prototype.loadToolBarDetail = function(nodeBarContents){ - var _this = this; - var readonly = (typeof (nodeBarContents.readonly) === "boolean") ? nodeBarContents.readonly : false; - var disabled = (typeof (nodeBarContents.disabled) === "boolean") ? nodeBarContents.disabled : false; - var id = nodeBarContents.id ? nodeBarContents.id : ""; - var name = nodeBarContents.name ? nodeBarContents.name : ""; - var val = nodeBarContents.value ? nodeBarContents.value : ""; - var verify = nodeBarContents.verify ? nodeBarContents.verify : ""; - var placeholder = nodeBarContents.placeholder ? nodeBarContents.placeholder : val; - return{ - text: function(){ - return ['
', - '', - '
', - '', - '
', - '
'].join(''); - }, - textarea: function(){ - return ['
', - '', - '
', - '', - '
', - '
'].join(''); - }, - hidden: function(){ - return [''].join(''); - }, - select: function(){ - var optionsData = (typeof nodeBarContents.optionsData === 'object') ? nodeBarContents.optionsData : nodeBarContents.optionsData(); - var options = ""; - for(var key in optionsData){ - if(val == optionsData[key]){ - options += ""; - } else { - options += ""; - } - } - return ['
', - '', - '
', - '', '
', '
'].join(''); - }, - submit: function(){ - var filter = nodeBarContents.filter; - return [''].join(''); - }, - button: function(){ - return [''].join(''); - }, - reset: function(){ - return [''].join(''); - } - } - }; - - // 新增节点后改变节点内容 - DTree.prototype.changeTreeNodeAdd = function(returnID){ - var _this = this; - var temp = _this.temp; - var id = temp[0], $ul = temp[1], $div = temp[2], level = temp[3]; - var flag = false; - if(returnID){ - var $thisDiv = _this.obj.find("[data-id='"+id+"']"); - if(typeof returnID === "object"){ - // 如果是JSON格式数据,则将当前DIV删除,重新建造DIV - $thisDiv.remove(); - var parseData = _this.parseData(returnID); - - if(parseData.treeId()){ - $ul.append(_this.getLiItemDom(parseData.treeId(), parseData.parentId(), parseData.title(), parseData.fmtTitle(), parseData.last(0), parseData.ficonClass(), parseData.iconClass(), parseData.checkArr(), level, parseData.spread(), parseData.disabled(), parseData.hide(), parseData.basicData(), parseData.recordData(), "item")); - - // 建造完毕后,选中该DIV - $thisDiv = $ul.find("div[data-id='"+parseData.treeId()+"']"); - _this.setNodeParam($thisDiv) - } else { - layer.msg("添加失败,节点ID为undefined!",{icon:5}); - // 将li节点删除 - $ul.find("li[data-id='"+id+"']").remove(); - // 重新赋值 - _this.setNodeParam($div); - // 临时变量制空 - _this.temp = []; - return ; - } - }else if(returnID == 'refresh'){ - // 如果是设置为refresh参数,则向后台发送请求,获取新增节点下的真实参数,局部刷新树。 - flag = true; - } else if(typeof returnID === "string" || typeof returnID === 'number' || returnID == true){ - $thisDiv.attr("data-id", returnID); - // 将li节点展示 - $ul.find("li[data-id='"+returnID+"']").show(); - _this.setNodeParam($thisDiv) - } - - // 判断当前点击的节点是否是最后一级节点,如果是,则需要修改节点的样式 - var $icon_i = $div.find("i[data-spread]"); - if ($icon_i.eq(0).attr("data-spread") == "last") { - _this.operateIcon($icon_i.eq(0), $icon_i.eq(1)).openWithLeaf(); - } else { //如果不是,也要修改节点样式 - _this.operateIcon($icon_i.eq(0), $icon_i.eq(1)).open(); - } - $ul.addClass(NAV_SHOW); //展开UL - _this.accordionUL($ul); - if(flag) { - _this.getChild($div); - } else { - // _this.showLine(); - _this.showLine($ul.find("li")); - // 这种情况下需要在新增节点后对节点新增工具栏 - if(_this.toolbar && _this.toolbarWay != 'contextmenu') { - _this.dynamicToolbarDom($thisDiv.find("cite[data-leaf]")); - } - } - - } else { - // 将li节点删除 - $ul.find("li[data-id='"+id+"']").remove(); - // 重新赋值 - _this.setNodeParam($div); - } - - _this.temp = []; // 临时变量制空 - - }; - - // 编辑页打开后显示编辑页内容 - DTree.prototype.changeTreeNodeDone = function(param){ - var _this = this; - form.val('dtree_editNode_form', param); - form.render(); - }; - - // 修改节点后改变节点内容 - DTree.prototype.changeTreeNodeEdit = function(returnID){ - var _this = this; - var temp = _this.temp; - var $cite = temp[0], $div = temp[1], title = temp[2], $p_div = temp[3]; - var flag = false; - if(returnID){ - if(typeof returnID === "object"){ - var parseData = _this.parseData(data); - - if(parseData.treeId()){ - var replaceDom = _this.replaceDom($div, parseData.treeId(), parseData.last(0), parseData.spread(), parseData.disabled(), parseData.hide()); - replaceDom.node(parseData.iconClass()); - replaceDom.checkbox(parseData.checkArr()); - replaceDom.text(parseData.title()); - replaceDom.ul(); - replaceDom.basicData(parseData.basicData()); - replaceDom.recordData(parseData.recordData()); - _this.setNodeParam($div); - } else { - layer.msg("编辑失败,节点ID为undefined!",{icon:5}); - // 重新赋值 - _this.setNodeParam($div); - } - } - } else { - $cite.html(title); - _this.getNodeParam($div); - } - - _this.temp = []; // 临时变量制空 - }; - - // 删除节点后改变节点内容 - DTree.prototype.changeTreeNodeDel = function(flag){ - var _this = this; - var temp = _this.temp; - var $p_li = temp[0], - $p_ul = $p_li.parent("ul"), - $p_div = temp[1]; - - if(flag){ - $p_li.remove(); - _this.showLine($p_ul.find("li")); - // 判断父级ul中是否还存在li,如果不存在,则需要修改节点的样式 - if($p_ul.children("li").length == 0){ - var $icon_i = $p_div.find("i[data-spread]"); - _this.operateIcon($icon_i.eq(0), $icon_i.eq(1)).closeWithLeaf(); - } - _this.initNodeParam(); - } - - _this.temp = []; // 临时变量制空 - }; - - /******************** iframe区域 ********************/ - // 加载iframe - DTree.prototype.loadIframe = function($div, iframeParam) { - var _this = this; - var $cite = _this.getNodeDom($div).cite(); - if (!_this.useIframe) { // 启用iframe - return false; - } - var iframeElem = _this.iframeElem, - iframeUrl = _this.iframeUrl, - iframeLoad = _this.iframeLoad; - - var flag = iframeLoad == "leaf" ? (($cite.attr("data-leaf") == "leaf") ? true : false) : true; - - if (flag) { - if ($(iframeElem).length > 0) { //iframe存在 - if (!iframeUrl) { - layer.msg("数据请求异常,iframeUrl参数未指定", {icon:5}); - return false; - } - var param = AjaxHelper.serialize(iframeParam); - if(iframeUrl.indexOf("?")> -1){ - param = "&"+param.substring(1, param.length); - } - var url = iframeUrl + param; - $(iframeElem).attr("src", url); - } else { - layer.msg("iframe绑定异常,请确认页面中是否有iframe页对应的容器", {icon:5}); - return false; - } - } - return flag; - }; - - // 获取传递出去的参数,根据iframe.iframeDefaultRequest、iframe.iframeRequest和node拼出发出请求的参数 - DTree.prototype.getIframeRequestParam = function(nodes){ - var _this = this; - var request = _this.iframeRequest, - defaultRequestNames = _this.iframeDefaultRequest, - node = nodes || _this.node, - requestParam = {}; - - // 先拼用户自定义的,在拼树生成的,这样的话用户可以自定义当树未生成时的节点的初始值 - for ( var key in request) { - requestParam[key] = request[key]; - } - for ( var key in defaultRequestNames) { - var paramName = defaultRequestNames[key]; - var paramValue = node[key]; - if(typeof paramValue === "boolean"){ - requestParam[paramName] = paramValue; - }else { - if(paramValue){ - requestParam[paramName] = paramValue; - } - } - } - - // 解决传递中文的乱码问题 - var reg = /[\u4E00-\u9FA5\uF900-\uFA2D]/; //正则匹配中文 - for(var key in requestParam){ - if(reg.test(requestParam[key])) { - var str = requestParam[key]; - requestParam[key] = encodeURI(encodeURI(str)); - } - } - - return requestParam; - }; - - /******************** 数据回调区域 ********************/ - // 根据具体的id获取基于当前id的div以及对应的其他dom元素 - DTree.prototype.getNodeDom = function(id){ - var _this = this; - // 获取当前div,如果id就是一个dom,则就是这个,如果不是则进行选择。如果选不中则为null - var $div = (typeof id === 'object') ? id : (_this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']").length == 0) ? null : _this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']"); - return { - div: function(){ // 获取当前div - return $div; - }, - fnode: function(){ // 获取一级图标元素 - return ($div == null) ? null : $div.find("i[data-spread]").eq(0); - }, - snode: function(){ // 获取二级图标元素 - return ($div == null) ? null : $div.find("i[data-spread]").eq(1); - }, - checkbox: function(){ // 获取复选框元素 - return ($div == null) ? null : $div.find("i[data-par]"); - }, - cite: function(){ // 获取cite元素 - return ($div == null) ? null : $div.find("cite[data-leaf]"); - }, - nextUl: function(){ // 获取相邻的ul元素 - return ($div == null) ? null : $div.next("ul"); - }, - parentLi: function(){ // 获取父级li元素 - return ($div == null) ? null : $div.parent("li"); - }, - parentUl: function(){ // 获取基于当前$div的上级$ul - return ($div == null) ? null : $div.parent("li").parent("ul"); - }, - parentDiv: function(){ // 获取基于当前$div的上级$div - return ($div == null) ? null : $div.parent("li").parent("ul").prev("div"); - }, - nowDiv: function(){ // 获取当前选中节点,没有则返回null - return (_this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id]").parent().find("."+NAV_THIS).length == 0) ? null : _this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id]").parent().find("."+NAV_THIS); - }, - nowOrRootDiv: function(){ // 获取当前选中节点,没有则返回根节点下的第一个div - return (_this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id]").parent().find("."+NAV_THIS).length == 0) ? _this.obj.children("li").eq(0).children("div").eq(0) : _this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id]").parent().find("."+NAV_THIS); - }, - nowOrRootUl: function(){ // 获取当前选中节点下一个UL 或根节点。为了将新节点放入ul下 - return (_this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id]").parent().find("."+NAV_THIS).length == 0) ? _this.obj : _this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id]").parent().find("."+NAV_THIS).next("ul"); - } - } - }; - - // 获取当前选中节点下一个UL 或根节点。为了将新节点放入ul下 - DTree.prototype.getNowNodeUl = function() { - var _this = this; - return _this.getNodeDom().nowOrRootUl(); - }; - - // 获取当前选中节点 或第一个根节点。 - DTree.prototype.getNowNode = function() { - var _this = this; - return _this.getNodeDom().nowOrRootDiv(); - }; - - // 获取当前选中节点 无则返回null。 - DTree.prototype.getNowNodeOrNull = function() { - var _this = this; - return _this.getNodeDom().nowDiv(); - }; - - // 获取指定节点。 - DTree.prototype.getNode = function(id) { - var _this = this; - return _this.getNodeDom(id).div(); - }; - - // 设置当前选中节点的全部参数 - DTree.prototype.setNodeParam = function($div) { - var _this = this; - _this.node.nodeId = $div.attr("data-id"); - _this.node.parentId = _this.getNodeDom($div).parentLi().attr("data-pid"); - _this.node.context = (typeof _this.formatter.title === 'function') ? _this.getNodeDom($div).cite().attr("data-title") : _this.getNodeDom($div).cite().text(); - _this.node.leaf = _this.getNodeDom($div).cite().attr("data-leaf") == "leaf" ? true : false; - _this.node.level = _this.getNodeDom($div).parentLi().attr("data-index"); - _this.node.spread = _this.getNodeDom($div).fnode().attr("data-spread") == "open" ? true : false; - - var basicData = $div.attr("data-basic"); - if(basicData) { - basicData = JSON.parse(event.unescape(basicData)); - } - _this.node.basicData = basicData; - - var recordData = $div.attr("data-record"); - if(recordData) { - recordData = JSON.parse(event.unescape(recordData)); - } - _this.node.recordData = recordData; - - if (_this.getNodeDom($div).checkbox()) { - var dataTypes = "", checkeds = "", initcheckeds = ""; - _this.getNodeDom($div).checkbox().each(function(){ - dataTypes += $(this).attr("data-type") + ","; - checkeds += $(this).attr("data-checked") + ","; - initcheckeds += $(this).attr("data-initchecked") + ","; - }); - dataTypes = dataTypes.substring(0, dataTypes.length-1); - checkeds = checkeds.substring(0, checkeds.length-1); - initcheckeds = initcheckeds.substring(0, initcheckeds.length-1); - - _this.node.dataType = dataTypes; - _this.node.checked = checkeds; - _this.node.initchecked = initcheckeds; - } - }; - - // 获取当前选中节点的全部参数 - DTree.prototype.getNodeParam = function($div) { - var _this = this; - if ($div) { - _this.setNodeParam($div); - } else { - if(_this.obj.find("div[data-id]").parent().find("."+NAV_THIS).length == 0){ - _this.initNodeParam(); - } - } - return this.node; - }; - - // 获取一个临时的node参数 - DTree.prototype.getTempNodeParam = function($div) { - var _this = this; - var temp_node = {}; - temp_node.nodeId = $div.attr("data-id"); - temp_node.parentId = _this.getNodeDom($div).parentLi().attr("data-pid"); - temp_node.context = (typeof _this.formatter.title === 'function') ? _this.getNodeDom($div).cite().attr("data-title") : _this.getNodeDom($div).cite().text(); - temp_node.leaf = _this.getNodeDom($div).cite().attr("data-leaf") == "leaf" ? true : false; - temp_node.level = _this.getNodeDom($div).parentLi().attr("data-index"); - temp_node.spread = _this.getNodeDom($div).fnode().attr("data-spread") == "open" ? true : false; - - var basicData = $div.attr("data-basic"); - if(basicData) { - basicData = JSON.parse(event.unescape(basicData)); - } - temp_node.basicData = basicData; - var recordData = $div.attr("data-record"); - if(recordData) { - recordData = JSON.parse(event.unescape(recordData)); - } - temp_node.recordData = recordData; - - if (_this.getNodeDom($div).checkbox()) { - var dataTypes = "", checkeds = "", initcheckeds = ""; - _this.getNodeDom($div).checkbox().each(function(){ - dataTypes += $(this).attr("data-type") + ","; - checkeds += $(this).attr("data-checked") + ","; - initcheckeds += $(this).attr("data-initchecked") + ","; - }); - dataTypes = dataTypes.substring(0, dataTypes.length-1); - checkeds = checkeds.substring(0, checkeds.length-1); - initcheckeds = initcheckeds.substring(0, initcheckeds.length-1); - - temp_node.dataType = dataTypes; - temp_node.checked = checkeds; - temp_node.initchecked = initcheckeds; - } - return temp_node; - }; - - // 重置参数 - DTree.prototype.initNodeParam = function(){ - var _this = this; - _this.node.nodeId = ""; - _this.node.parentId = ""; - _this.node.context = ""; - _this.node.leaf = ""; - _this.node.level = ""; - _this.node.spread = ""; - _this.node.dataType = ""; - _this.node.checked = ""; - _this.node.initchecked = ""; - _this.node.basicData = ""; - _this.node.recordData = ""; - - if(_this.select) { - _this.selectResetVal(); - } - }; - - // 获取传递出去的参数,根据defaultRequest、request和node拼出发出请求的参数 - DTree.prototype.getRequestParam = function(nodes){ - var _this = this; - var request = _this.request, - defaultRequestNames = _this.defaultRequest, - node = nodes || _this.node, - requestParam = {}; - - // 先拼用户自定义的,在拼树生成的,这样的话用户可以自定义当树未生成时的节点的初始值 - for ( var key in request) { - requestParam[key] = request[key]; - } - for ( var key in defaultRequestNames) { - var paramName = defaultRequestNames[key]; - var paramValue = node[key]; - if(typeof paramValue === "boolean"){ - requestParam[paramName] = paramValue; - }else { - if(paramValue){ - requestParam[paramName] = paramValue; - } - } - - } - return requestParam; - }; - - // 获取filterParam过滤后的requestParam - DTree.prototype.getFilterRequestParam = function(requestParam){ - var _this = this; - var filterRequest = _this.filterRequest; - return event.cloneObj(requestParam, filterRequest); - }; - - // 获取当前选中值 - DTree.prototype.getNowParam = function(){ - var _this = this; - - return _this.getRequestParam(_this.getNodeParam()); - }; - - // 获取指定节点选中值 - DTree.prototype.getParam = function(id){ - var _this = this; - - // 获取当前div,如果id就是一个dom,则就是这个,如果不是则进行选择。如果选不中则为null - var $div = (typeof id === 'object') ? id : (_this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']").length == 0) ? null : _this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']"); - if($div != null){ return _this.callbackData().node(_this.getTempNodeParam($div)); } else { return {}; } - }; - - // 获取参数的上级节点 - DTree.prototype.getParentParam = function(id){ - var _this = this; - // 获取当前div,如果id就是一个dom,则就是这个,如果不是则进行选择。如果选不中则为null - var $div = (typeof id === 'object') ? id : (_this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']").length == 0) ? null : _this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']"); - if($div != null){ return _this.callbackData().parentNode($div); } else { return {}; } - }; - - // 获取参数的全部上级节点 - DTree.prototype.getAllParentParam = function(id){ - var _this = this; - // 获取当前div,如果id就是一个dom,则就是这个,如果不是则进行选择。如果选不中则为null - var $div = (typeof id === 'object') ? id : (_this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']").length == 0) ? null : _this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']"); - var arr = []; - if($div != null){ - var level = _this.getTempNodeParam($div).level; - for(var i=1; i 0){ - $childDivs.each(function(){ - var $cDiv = $(this); - childNode.push(_this.getRequestParam(_this.getTempNodeParam($cDiv))); - }); - } - return childNode; - }, - parentNode: function($div){ // 获取上级节点值 - var pId = _this.getNodeDom($div).parentLi().attr("data-pid"); - var $pdiv = _this.obj.find("div[data-id='"+pId+"']"); - if($pdiv.length > 0) {return _this.getRequestParam(_this.getTempNodeParam($pdiv));} else {return {};} - - } - } - }; - - /******************** 事件回调区域 ********************/ - // 绑定浏览器事件 - DTree.prototype.bindBrowserEvent = function(){ - var _this = this; - var rootId = _this.obj[0].id; - - // 绑定文件夹展开/收缩的图标的点击事件,点击时给当前节点的div添加选中class - _this.obj.on("click", "i[data-spread]", function(event) { - event.stopPropagation(); - var $i = $(this), - $div = $i.parent("div"), - node = _this.getNodeParam($div); - - _this.toolbarHide(); - _this.navThis($div); - _this.clickSpread($div); // 展开或隐藏节点 - - // 树状态改变后,用户自定义想做的事情 - layui.event.call(this, MOD_NAME, "changeTree("+$(_this.obj)[0].id+")", { - dom: _this.callbackData().dom($i), - param: _this.callbackData().node(node), - show: _this.callbackData().dom($i).attr("data-spread") == "open" ? true : false - }); - }); - - // 绑定所有子节点div的单击事件,点击时触发加载iframe或用户自定义想做的事情 - _this.obj.on("click", "div[dtree-click='"+eventName.itemNodeClick+"'][dtree-disabled='false']", function(event) { - event.stopPropagation(); - var $div = $(this), - $cite = $div.find("cite"), - node = _this.getNodeParam($div); - _this.toolbarHide(); - _this.navThis($div); - - if(_this.select) { - _this.selectVal(node.nodeId); - $("div[dtree-id='" + rootId + "'][dtree-select='"+_this.selectDiv+"']").click(); - } - - if (_this.useIframe) { - var iframeParam = _this.getFilterRequestParam(_this.getIframeRequestParam(node)); - var flag = _this.loadIframe($div, iframeParam); // 加载iframe - if (flag) { - // iframe加载完毕后,用户自定义想做的事情 - _this.iframeFun.iframeDone(iframeParam); - - layui.event.call(this, MOD_NAME, "iframeDone("+$(_this.obj)[0].id+")", { - "iframeParam": iframeParam, - dom: _this.callbackData().dom($div) - }); - } - } else { - // 单击事件执行完毕后,用户自定义想做的事情 - layui.event.call(this, MOD_NAME, "node("+$(_this.obj)[0].id+")", { - param: _this.callbackData().node(node), - childParams: _this.callbackData().childNode($div), - parentParam: _this.callbackData().parentNode($div), - dom: _this.callbackData().dom($div) - }); - } - }); - - // 绑定所有子节点div的双击事件,暴露on给用户自定义 - _this.obj.on("dblclick", "div[dtree-click='"+eventName.itemNodeClick+"'][dtree-disabled='false']", function(event) { - event.stopPropagation(); - var $div = $(this), - $cite = $div.find("cite"), - node = _this.getNodeParam($div); - _this.toolbarHide(); - _this.navThis($div); - - if(_this.select) { - _this.selectVal(node.nodeId); - $("div[dtree-id='" + rootId + "'][dtree-select='"+_this.selectDiv+"']").click(); - } - - // 双击事件执行完毕后,用户自定义想做的事情 - layui.event.call(this, MOD_NAME, "nodedblclick("+$(_this.obj)[0].id+")", { - param: _this.callbackData().node(node), - childParams: _this.callbackData().childNode($div), - parentParam: _this.callbackData().parentNode($div), - dom: _this.callbackData().dom($div) - }); - }); - - if(_this.checkbar) { - // 绑定cheboxbar的节点复选框 - _this.obj.on("click", "i[dtree-click='"+eventName.checkNodeClick+"'][dtree-disabled='false']", function(event) { - _this.toolbarHide(); - var $i = $(this), - $div = $i.closest("div[dtree-click='"+eventName.itemNodeClick+"']"), - node = _this.getNodeParam($div); - // 复选框选中前的回调 - var flag = _this.checkbarFun.chooseBefore($i, _this.getRequestParam(node)); - _this.temp = [$i]; - if(flag){_this.changeCheck();} - - event.stopPropagation(); - }); - } - - if(_this.menubar) { - // 绑定menubar的点击事件 - _this.obj.prevAll('div#dtree_menubar_'+_this.obj[0].id).on("click", "button[d-menu]", function(event) { - event.stopPropagation(); - _this.toolbarHide(); - _this.menubarListener($(this).attr("d-menu"), "group"); - }); - - // 绑定menubar的点击事件 - _this.obj.prevAll('div#dtree_toolbar_'+_this.obj[0].id).on("click", "a[d-menu]", function(event) { - event.stopPropagation(); - _this.toolbarHide(); - _this.menubarListener($(this).attr("d-menu"), "toolbar"); - }); - - // 绑定menubar的点击按钮事件 - _this.obj.closest('body').find("*[dtree-id='"+_this.obj[0].id+"'][dtree-menu]").on("click", function(event) { - event.stopPropagation(); - _this.toolbarHide(); - _this.menubarListener($(this).attr("dtree-menu"), "freedom"); - }); - } - - if(_this.toolbar) { - if(_this.toolbarWay == "contextmenu") { - //绑定所有子节点div的右键点击事件,用于显示toolbar - _this.obj.on("contextmenu", "div[dtree-click='"+eventName.itemNodeClick+"'][d-contextmenu='true'][dtree-disabled='false']", function(e){ - var $div = $(this), - node = _this.getNodeParam($div); - - _this.toolbarHide(); - // toolbar加载前执行的方法,执行完毕之后创建按钮 - _this.setToolbarDom().setToolbarPlace(_this.toolbarFun.loadToolbarBefore(event.cloneObj(_this.toolbarMenu), _this.getRequestParam(node), $div)); - - var e = e || window.event, - mx = e.pageX - $div.offset().left +45 , - my = $div.offset().top - _this.obj.closest(_this.scroll).offset().top +15; - - _this.navThis($div); - var $toolBarDiv = _this.obj.prevAll('div#dtree_toolbar_'+_this.obj[0].id); - $toolBarDiv.find(".layui-nav-child").addClass('layui-anim-fadein layui-show'); - $toolBarDiv.css({'left':mx+'px','top':my+'px'}); - - e.stopPropagation(); - return false; - }); - - // 绑定装载树的上层出现滚动条的容器,让toolbar隐藏 - _this.obj.closest(_this.scroll).scroll(function() { - _this.toolbarHide(); - }); - - // 绑定toolbar的点击事件 - _this.obj.prevAll('div#dtree_toolbar_'+_this.obj[0].id).on("click", "a[dtree-tool]", function(event) { - event.stopPropagation(); - var $div = _this.getNodeDom().nowOrRootDiv(), - node = _this.getNodeParam($div); - _this.toolbarHide(); - var tool = $(this).attr("dtree-tool"); - _this.toolbarListener(tool, $div); - }); - } else if(_this.toolbarWay == "fixed") { - // 绑定toolbar的点击事件 - _this.obj.on("click", "a[dtree-tool]", function(event) { - event.stopPropagation(); - var $a = $(this), - $cite = $a.parent("em."+TOOLBAR_TOOL_EM).prev("cite"), //当前选中节点的text - $div = $cite.parent("div"), - node = _this.getNodeParam($div); - var tool = $a.attr("dtree-tool"); - - _this.toolbarHide(); - _this.navThis($div); - _this.toolbarListener(tool, $div); - }); - } else if(_this.toolbarWay == "follow") { - //绑定所有子节点div的mouseover mouseout事件,用于显示或隐藏toolbar - _this.obj.on("mouseover mouseout", "div[dtree-click='"+eventName.itemNodeClick+"'][dtree-disabled='false']", function(event){ - var $div = $(this), - $toolBarEm = $div.children("em."+TOOLBAR_TOOL_EM); - if(event.type == "mouseover"){ - $toolBarEm.removeClass(NAV_HIDE); - event.stopPropagation(); - } else if(event.type == "mouseout"){ - $toolBarEm.addClass(NAV_HIDE); - event.stopPropagation(); - } - }); - - // 绑定toolbar的点击事件 - _this.obj.on("click", "a[dtree-tool]", function(event) { - event.stopPropagation(); - var $a = $(this), - $cite = $a.parent("em."+TOOLBAR_TOOL_EM).prev("cite"), //当前选中节点的text - $div = $cite.parent("div"), - node = _this.getNodeParam($div); - var tool = $a.attr("dtree-tool"); - - _this.toolbarHide(); - _this.navThis($div); - _this.toolbarListener(tool, $div); - }); - } - } - - if(_this.select) { - // 绑定select的点击事件 - $("div[dtree-id='" + rootId + "'][dtree-select='"+_this.selectDiv+"']").on("click", function(event){ - event.stopPropagation(); - $(this).toggleClass("layui-form-selected"); - $("div[dtree-id='" + rootId + "'][dtree-card='"+_this.selectCardDiv+"']").toggleClass("dtree-select-show layui-anim layui-anim-upbit"); - - // 下拉树面板开闭状态改变后,用户自定义想做的事情 - layui.event.call(this, MOD_NAME, "changeSelect("+$(_this.obj)[0].id+")", { - show: $(this).hasClass("layui-form-selected"), - param: _this.selectVal() - }); - }); - - } - }; - - // 绑定body的单击,让本页面所有的toolbar隐藏 - $BODY.on("click", function(event){ - $("div."+LI_DIV_TOOLBAR).find(".layui-show").removeClass('layui-anim-fadein layui-show'); - // $("div[dtree-id][dtree-select]").removeClass("layui-form-selected"); - // $("div[dtree-id][dtree-card]").removeClass("dtree-select-show layui-anim layui-anim-upbit"); - - }); - - // 解绑浏览器事件 - DTree.prototype.unbindBrowserEvent = function(){ - var _this = this; - - // 本身事件解绑 - _this.obj.unbind(); - // 菜单栏解绑 - if(_this.menubar){ - _this.obj.prevAll('div#dtree_menubar_'+_this.obj[0].id).unbind(); - if(_this.obj.closest('body').find("*[dtree-id='"+_this.obj[0].id+"'][dtree-menu]").length > 0){ - _this.obj.closest('body').find("*[dtree-id='"+_this.obj[0].id+"'][dtree-menu]").unbind(); - } - } - - // 工具栏解绑 - if(_this.toolbar){ - if(_this.toolbarWay == "contextmenu") { - _this.obj.prevAll('div#dtree_toolbar_'+_this.obj[0].id).unbind(); - if(_this.obj.closest(_this.scroll).length > 0){ - _this.obj.closest(_this.scroll).unbind(); - } - } - } - - // 下拉树解绑 - if(_this.select) { - // 解绑select的点击事件 - $("div[dtree-id='" + _this.obj[0].id + "'][dtree-select='"+_this.selectDiv+"']").removeClass("layui-form-selected"); - $("div[dtree-id='" + _this.obj[0].id + "'][dtree-card='"+_this.selectCardDiv+"']").removeClass("dtree-select-show layui-anim layui-anim-upbit"); - $("div[dtree-id='" + _this.obj[0].id + "'][dtree-select='"+_this.selectDiv+"']").unbind(); - } - }; - - - /** 外部访问 **/ - var dtree = { - set: function(options){ //设置全局属性 - if(typeof options !== 'undefined') { - $.extend(OPTIONS, options); - } - }, - render: function(options){ // 初始化树 - var dTree = null; - var id = event.getElemId(options); - if(id == "") { - layer.msg("页面中未找到绑定id", {icon:5}); - } else { - dTree = DTrees[id]; - if(typeof dTree === 'object'){ - dTree.unbindBrowserEvent(); - } - // 创建树 - dTree = new DTree(options); - // 添加到树数组中去 - DTrees[id] = dTree; - dTree.initTreePlus(); - dTree.openTreePlus(); - dTree.init(); - dTree.bindBrowserEvent(); - } - - return dTree; - }, - renderSelect: function(options){ // 初始化下拉树 - var dTree = null; - var id = event.getElemId(options); - if(id == "") { - layer.msg("页面中未找到绑定id", {icon:5}); - } else { - dTree = DTrees[id]; - if(typeof dTree === 'object'){ - dTree.unbindBrowserEvent(); - } - // 创建下拉树 - dTree = new DTree(options); - dTree.selectSetting(); - // 添加到树数组中去 - DTrees[id] = dTree; - dTree.initTreePlus(); - dTree.openTreePlus(); - dTree.init(); - dTree.bindBrowserEvent(); - } - - return dTree; - }, - reload: function(dTree, options){ // 重新加载树 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - dTree.reloadSetting(options); - dTree.initTreePlus(); - dTree.openTreePlus(); - dTree.initNodeParam(); - dTree.init(); - dTree.unbindBrowserEvent(); - dTree.bindBrowserEvent(); - }, - on: function(events, callback) { // 绑定事件 - if(events.indexOf("'") > 0){ - events = events.replace(/'/g,""); - } - if(events.indexOf('"') > 0) { - events = events.replace(/"/g,""); - } - return layui.onevent.call(this, MOD_NAME, events, callback); - }, - click: function(dTree, id) { // 模拟单击事件 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - $("div[dtree-click='"+eventName.itemNodeClick+"'][dtree-id='"+dTree.obj[0].id+"'][data-id='"+id+"']").click(); - }, - getNowParam: function(dTree){ // 获取当前选中值 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.getNowParam(); // 获取当前选中值 - }, - getParam: function(dTree, id){ // 获取指定节点值 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.getParam(id); // 获取指定节点值 - }, - getParentParam: function(dTree, id){ // 获取参数的上级节点 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.getParentParam(id); - }, - getAllParentParam: function(dTree, id){ // 获取参数的全部上级节点 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.getAllParentParam(id); - }, - getChildParam: function(dTree, id){ // 获取参数的全部下级节点 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.getChildParam(id); - }, - getCheckbarNodesParam: function(dTree){ // 获取复选框选中值 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return {}; - } - return dTree.getCheckbarNodesParam(); // 获取复选框选中值 - }, - dataInit: function(dTree, chooseId){ // 初始化选中树,针对数据反选 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - if(chooseId){ - return dTree.dataInit(chooseId); - } - }, - chooseDataInit: function(dTree, chooseIds){ // 初始化复选框选中,针对数据反选 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - if(chooseIds){ - return dTree.chooseDataInit(chooseIds); - } - }, - changeCheckbarNodes: function(dTree){ //判断复选框是否发生变更 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.changeCheckbarNodes(); - }, - initNoAllCheck: function(dTree) { //复选框半选状态初始化设置 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.initNoAllCheck(); - }, - initAllCheck: function(dTree){ // 复选框选中状态初始化设置 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.initAllCheck(); - }, - selectVal: function(dTree, param){ // select模式设置输入框选中值 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.selectVal(param); // select模式设置输入框选中值 - }, - escape: function(html){ // 字符串格式化 - return event.escape(html); - }, - unescape: function(str){ // 字符串反格式化 - return event.unescape(str); - }, - version: function(){ //获取版本号 - return VERSION; - } - }; - - exports('dtree', dtree); -}); \ No newline at end of file diff --git a/component/pear/css/module/dtree/font/dtreefont.css b/component/pear/css/module/dtree/font/dtreefont.css deleted file mode 100644 index df7af65397abb2d2094f986fb08484d58186d2c2..0000000000000000000000000000000000000000 --- a/component/pear/css/module/dtree/font/dtreefont.css +++ /dev/null @@ -1,229 +0,0 @@ -@font-face { - font-family: 'dtreefont'; - src: url('dtreefont.eot?x3m8fp'); - src: url('dtreefont.eot?x3m8fp#iefix') format('embedded-opentype'), - url('dtreefont.ttf?x3m8fp') format('truetype'), - url('dtreefont.woff?x3m8fp') format('woff'), - url('dtreefont.svg?x3m8fp#dtreefont') format('svg'); - font-weight: normal; - font-style: normal; -} - -[class^="dtree-icon-"], [class*=" dtree-icon-"] { - /* use !important to prevent issues with browser extensions that change font */ - font-family: 'dtreefont' !important; - font-size: 16px; - font-style: normal; - -webkit-font-smoothing: antialiased; -} - -.dtree-icon-xiangxia1:before { - content: "\e771"; -} -.dtree-icon-normal-file:before { - content: "\e60c"; -} -.dtree-icon-xiangyou:before { - content: "\e78f"; -} -.dtree-icon-ok-circle:before { - content: "\1005"; -} -.dtree-icon-close1:before { - content: "\1006"; -} -.dtree-icon-close-fill:before { - content: "\1007"; -} -.dtree-icon-jian1:before { - content: "\e600"; -} -.dtree-icon-jia1:before { - content: "\e601"; -} -.dtree-icon-bianji:before { - content: "\e602"; -} -.dtree-icon-yonghu:before { - content: "\e603"; -} -.dtree-icon-shijian:before { - content: "\e606"; -} -.dtree-icon-fuxuankuang-banxuan:before { - content: "\e607"; -} -.dtree-icon-star:before { - content: "\e608"; -} -.dtree-icon-wenjianjiazhankai:before { - content: "\e60e"; -} -.dtree-icon-xiangmuxiaoxi:before { - content: "\e60f"; -} -.dtree-icon-search2:before { - content: "\e615"; -} -.dtree-icon-weibiaoti5:before { - content: "\e618"; -} -.dtree-icon-layim-theme:before { - content: "\e61b"; -} -.dtree-icon-shuye1:before { - content: "\e61e"; -} -.dtree-icon-add-circle:before { - content: "\e61f"; -} -.dtree-icon-xinxipilu:before { - content: "\e620"; -} -.dtree-icon-set-sm:before { - content: "\e621"; -} -.dtree-icon-about:before { - content: "\e623"; -} -.dtree-icon-chart-screen:before { - content: "\e62a"; -} -.dtree-icon-delete1:before { - content: "\e640"; -} -.dtree-icon-share3:before { - content: "\e641"; -} -.dtree-icon-youjian:before { - content: "\e642"; -} -.dtree-icon-check:before { - content: "\e645"; -} -.dtree-icon-close:before { - content: "\e646"; -} -.dtree-icon-favorfill:before { - content: "\e64b"; -} -.dtree-icon-favor:before { - content: "\e64c"; -} -.dtree-icon-fuxuankuangxuanzhong:before { - content: "\e652"; -} -.dtree-icon-fenguangbaobiao:before { - content: "\e655"; -} -.dtree-icon-jian:before { - content: "\e656"; -} -.dtree-icon-jia:before { - content: "\e657"; -} -.dtree-icon-fenzhijigou:before { - content: "\e658"; -} -.dtree-icon-roundcheckfill:before { - content: "\e659"; -} -.dtree-icon-roundcheck:before { - content: "\e65a"; -} -.dtree-icon-roundclosefill:before { - content: "\e65b"; -} -.dtree-icon-roundclose:before { - content: "\e65c"; -} -.dtree-icon-roundrightfill:before { - content: "\e65d"; -} -.dtree-icon-roundright:before { - content: "\e65e"; -} -.dtree-icon-like:before { - content: "\e66c"; -} -.dtree-icon-samefill:before { - content: "\e671"; -} -.dtree-icon-same:before { - content: "\e672"; -} -.dtree-icon-evaluate:before { - content: "\e674"; -} -.dtree-icon-circle1:before { - content: "\e687"; -} -.dtree-icon-radio:before { - content: "\e688"; -} -.dtree-icon-caidan_xunzhang:before { - content: "\e68e"; -} -.dtree-icon-pulldown:before { - content: "\e6a0"; -} -.dtree-icon-pullup:before { - content: "\e6a1"; -} -.dtree-icon-refresh:before { - content: "\e6a4"; -} -.dtree-icon-qrcode1:before { - content: "\e6b0"; -} -.dtree-icon-profile1:before { - content: "\e6b7"; -} -.dtree-icon-home1:before { - content: "\e6b8"; -} -.dtree-icon-homefill:before { - content: "\e6bb"; -} -.dtree-icon-roundaddfill:before { - content: "\e6d8"; -} -.dtree-icon-roundadd:before { - content: "\e6d9"; -} -.dtree-icon-fuxuankuang:before { - content: "\e6f2"; -} -.dtree-icon-wefill:before { - content: "\e6f5"; -} -.dtree-icon-sort:before { - content: "\e701"; -} -.dtree-icon-repair:before { - content: "\e738"; -} -.dtree-icon-shujudaping:before { - content: "\e742"; -} -.dtree-icon-dian:before { - content: "\e7a5"; -} -.dtree-icon-search_list_light:before { - content: "\e807"; -} -.dtree-icon-round_list_light:before { - content: "\e82b"; -} -.dtree-icon-star-fill:before { - content: "\e832"; -} -.dtree-icon-rate:before { - content: "\e833"; -} -.dtree-icon-move-up:before { - content: "\ea47"; -} -.dtree-icon-move-down:before { - content: "\ea48"; -} diff --git a/component/pear/css/module/dtree/font/dtreefont.eot b/component/pear/css/module/dtree/font/dtreefont.eot deleted file mode 100644 index 68bf5f2f2dd33daa67373cca102f8ad764d84c22..0000000000000000000000000000000000000000 Binary files a/component/pear/css/module/dtree/font/dtreefont.eot and /dev/null differ diff --git a/component/pear/css/module/dtree/font/dtreefont.svg b/component/pear/css/module/dtree/font/dtreefont.svg deleted file mode 100644 index 90fe50f041be2e0433b009a20993ec78c8e4e67f..0000000000000000000000000000000000000000 --- a/component/pear/css/module/dtree/font/dtreefont.svg +++ /dev/null @@ -1,80 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/component/pear/css/module/dtree/font/dtreefont.ttf b/component/pear/css/module/dtree/font/dtreefont.ttf deleted file mode 100644 index 78bacd13a0a16b55e6b3be536b35e34e147a396a..0000000000000000000000000000000000000000 Binary files a/component/pear/css/module/dtree/font/dtreefont.ttf and /dev/null differ diff --git a/component/pear/css/module/dtree/font/dtreefont.woff b/component/pear/css/module/dtree/font/dtreefont.woff deleted file mode 100644 index 2b546450765b8d1368d1858ecc2c353d5529bfa5..0000000000000000000000000000000000000000 Binary files a/component/pear/css/module/dtree/font/dtreefont.woff and /dev/null differ diff --git a/component/pear/css/module/dtree/font/icons.json b/component/pear/css/module/dtree/font/icons.json deleted file mode 100644 index fca4788566c21d9bcfc9e3bf0c4406d17651a211..0000000000000000000000000000000000000000 --- a/component/pear/css/module/dtree/font/icons.json +++ /dev/null @@ -1,283 +0,0 @@ -{ - "data": [{ - "cls": "dtree-icon-xiangxia1", - "uncode": "e771" - }, - { - "cls": "dtree-icon-xiangyou", - "uncode": "e78f" - }, - { - "cls": "dtree-icon-jian", - "uncode": "e656" - }, - { - "cls": "dtree-icon-jia", - "uncode": "e657" - }, - { - "cls": "dtree-icon-weibiaoti5", - "uncode": "e618" - }, - { - "cls": "dtree-icon-wenjianjiazhankai", - "uncode": "e60e" - }, - { - "cls": "dtree-icon-dian", - "uncode": "e7a5" - }, - { - "cls": "dtree-icon-yonghu", - "uncode": "e603" - }, - { - "cls": "dtree-icon-fenzhijigou", - "uncode": "e658" - }, - { - "cls": "dtree-icon-fenguangbaobiao", - "uncode": "e655" - }, - { - "cls": "dtree-icon-xinxipilu", - "uncode": "e620" - }, - { - "cls": "dtree-icon-shuye1", - "uncode": "e61e" - }, - { - "cls": "dtree-icon-caidan_xunzhang", - "uncode": "e68e" - }, - { - "cls": "dtree-icon-normal-file", - "uncode": "e60c" - }, - { - "cls": "dtree-icon-roundclose", - "uncode": "e65c" - }, - { - "cls": "dtree-icon-bianji", - "uncode": "e602" - }, - { - "cls": "dtree-icon-roundadd", - "uncode": "e6d9" - }, - { - "cls": "dtree-icon-fuxuankuangxuanzhong", - "uncode": "e652" - }, - { - "cls": "dtree-icon-fuxuankuang", - "uncode": "e6f2" - }, - { - "cls": "dtree-icon-fuxuankuang-banxuan", - "uncode": "e607" - }, - { - "cls": "dtree-icon-search_list_light", - "uncode": "e807" - }, - { - "cls": "dtree-icon-move-up", - "uncode": "ea47" - }, - { - "cls": "dtree-icon-move-down", - "uncode": "ea48" - }, - { - "cls": "dtree-icon-delete1", - "uncode": "e640" - }, - { - "cls": "dtree-icon-refresh", - "uncode": "e6a4" - }, - { - "cls": "dtree-icon-roundcheckfill", - "uncode": "e659" - }, - { - "cls": "dtree-icon-roundclosefill", - "uncode": "e65b" - }, - { - "cls": "dtree-icon-roundcheck", - "uncode": "e65a" - }, - { - "cls": "dtree-icon-pulldown", - "uncode": "e6a0" - }, - { - "cls": "dtree-icon-pullup", - "uncode": "e6a1" - }, - { - "cls": "dtree-icon-set-sm", - "uncode": "e621" - }, - { - "cls": "dtree-icon-rate", - "uncode": "e833" - }, - { - "cls": "dtree-icon-jian1", - "uncode": "e600" - }, - { - "cls": "dtree-icon-jia1", - "uncode": "e601" - }, - { - "cls": "dtree-icon-shijian", - "uncode": "e606" - }, - { - "cls": "dtree-icon-check", - "uncode": "e645" - }, - { - "cls": "dtree-icon-close", - "uncode": "e646" - }, - { - "cls": "dtree-icon-favorfill", - "uncode": "e64b" - }, - { - "cls": "dtree-icon-favor", - "uncode": "e64c" - }, - { - "cls": "dtree-icon-roundrightfill", - "uncode": "e65d" - }, - { - "cls": "dtree-icon-roundright", - "uncode": "e65e" - }, - { - "cls": "dtree-icon-samefill", - "uncode": "e671" - }, - { - "cls": "dtree-icon-same", - "uncode": "e672" - }, - { - "cls": "dtree-icon-qrcode1", - "uncode": "e6b0" - }, - { - "cls": "dtree-icon-profile1", - "uncode": "e6b7" - }, - { - "cls": "dtree-icon-home1", - "uncode": "e6b8" - }, - { - "cls": "dtree-icon-homefill", - "uncode": "e6bb" - }, - { - "cls": "dtree-icon-roundaddfill", - "uncode": "e6d8" - }, - { - "cls": "dtree-icon-wefill", - "uncode": "e6f5" - }, - { - "cls": "dtree-icon-sort", - "uncode": "e701" - }, - { - "cls": "dtree-icon-round_list_light", - "uncode": "e82b" - }, - { - "cls": "dtree-icon-search2", - "uncode": "e615" - }, - { - "cls": "dtree-icon-close1", - "uncode": "1006" - }, - { - "cls": "dtree-icon-close-fill", - "uncode": "1007" - }, - { - "cls": "dtree-icon-chart-screen", - "uncode": "e62a" - }, - { - "cls": "dtree-icon-star", - "uncode": "e608" - }, - { - "cls": "dtree-icon-ok-circle", - "uncode": "1005" - }, - { - "cls": "dtree-icon-add-circle", - "uncode": "e61f" - }, - { - "cls": "dtree-icon-about", - "uncode": "e623" - }, - { - "cls": "dtree-icon-circle1", - "uncode": "e687" - }, - { - "cls": "dtree-icon-radio", - "uncode": "e688" - }, - { - "cls": "dtree-icon-star-fill", - "uncode": "e832" - }, - { - "cls": "dtree-icon-shujudaping", - "uncode": "e742" - }, - { - "cls": "dtree-icon-share3", - "uncode": "e641" - }, - { - "cls": "dtree-icon-youjian", - "uncode": "e642" - }, - { - "cls": "dtree-icon-repair", - "uncode": "e738" - }, - { - "cls": "dtree-icon-evaluate", - "uncode": "e674" - }, - { - "cls": "dtree-icon-like", - "uncode": "e66c" - }, - { - "cls": "dtree-icon-layim-theme", - "uncode": "e61b" - }, - { - "cls": "dtree-icon-xiangmuxiaoxi", - "uncode": "e60f" - } - ] -} \ No newline at end of file diff --git a/component/pear/css/module/form.css b/component/pear/css/module/form.css deleted file mode 100644 index b6a8c8d311dd00765e461d0966a23f992517dcc7..0000000000000000000000000000000000000000 --- a/component/pear/css/module/form.css +++ /dev/null @@ -1,74 +0,0 @@ -.layui-card-body .layui-form{ - margin-top: 15px; -} - -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #ccc; -} - -.layui-input:hover, -.layui-textarea:hover, -.layui-input:focus, -.layui-textarea:focus { - border-color: #eee; -} - -.layui-input:focus, -.layui-textarea:focus { - border-color: #5FB878 !important; - box-shadow: 0 0 0 3px #f0f9eb !important; -} - -.layui-input[success] { - box-shadow: 0px 0px 0px 3px #f0f9eb !important; - border: #5FB878 1px solid!important; -} - -.layui-input[failure], -.layui-form-item .layui-form-danger:focus { - box-shadow: 0px 0px 0px 3px #fef0f0 !important; - border: #F56C6C 1px solid!important; -} - -.layui-input, -.layui-select, -.layui-textarea { - border-radius: 4px; - border-color: #eee; - transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} - -.layui-form-select dl::-webkit-scrollbar { - width: 0px; - height: 0px; -} - -.layui-form-select dl::-webkit-scrollbar { - width: 6px; - height: 6px; -} - -.layui-form-select dl::-webkit-scrollbar-track { - background: white; - border-radius: 3px; -} - -.layui-form-select dl::-webkit-scrollbar-thumb { - background: #E6E6E6; - border-radius: 3px; -} - -.layui-form-select dl::-webkit-scrollbar-thumb:hover { - background: #E6E6E6; -} - -.layui-form-select dl::-webkit-scrollbar-corner { - background: #f6f6f6; -} - -/* layui 2.6.9 样式变化 */ -.layui-form-select dl dd.layui-this{ - background-color: #F6F6F6; - font-weight: 700; -} diff --git a/component/pear/css/module/fullscreen.css b/component/pear/css/module/fullscreen.css deleted file mode 100644 index 63f7775413c722efed1600a0cb236fd0e2302623..0000000000000000000000000000000000000000 --- a/component/pear/css/module/fullscreen.css +++ /dev/null @@ -1,22 +0,0 @@ -html:-moz-full-screen { - background: grey; -} -html:-webkit-full-screen { - background: grey; - width: 100%; - height: 100%; -} -html:fullscreen{ - background: grey; - width: 100% !important; - height: 100% !important; -} - -:not(:root):fullscreen::backdrop{ - background:whitesmoke; -} - -.pear-full-screen { - width: 100% !important; - height: 100% !important; -} \ No newline at end of file diff --git a/component/pear/css/module/layout.css b/component/pear/css/module/global.css similarity index 78% rename from component/pear/css/module/layout.css rename to component/pear/css/module/global.css index 9c4d082247860738a0b115c17b9798520bcec5e5..94d57c7922873815966b3c3733a3a4c1f830eba0 100644 --- a/component/pear/css/module/layout.css +++ b/component/pear/css/module/global.css @@ -1,101 +1,40 @@ .pear-container { - margin: 10px; - background-color: whitesmoke; - width: calc(100vw - 20px); -} - -body::-webkit-scrollbar { - width: 0px; - height: 0px; -} - -body::-webkit-scrollbar { - width: 6px; - height: 6px; -} - -body::-webkit-scrollbar-track { - background: white; - border-radius: 2px; -} - -body::-webkit-scrollbar-thumb { - background: #E6E6E6; - border-radius: 2px; -} - -body::-webkit-scrollbar-thumb:hover { - background: #E6E6E6; -} - -body::-webkit-scrollbar-corner { - background: #f6f6f6; + padding: 10px; + margin: 0px; + box-sizing: border-box; + background-color: transparent; + width: 100%; } -.mainBox::-webkit-scrollbar { +*::-webkit-scrollbar { width: 0px; height: 0px; } -.mainBox::-webkit-scrollbar { +*::-webkit-scrollbar { width: 6px; height: 6px; } -.mainBox::-webkit-scrollbar-track { - background: white; - border-radius: 2px; +*::-webkit-scrollbar-track { + background: transparent; } -.mainBox::-webkit-scrollbar-thumb { +*::-webkit-scrollbar-thumb { background: #E6E6E6; - border-radius: 2px; + border-radius: 4px; } -.mainBox::-webkit-scrollbar-thumb:hover { +*::-webkit-scrollbar-thumb:hover { background: #E6E6E6; } -.mainBox::-webkit-scrollbar-corner { +*::-webkit-scrollbar-corner { background: #f6f6f6; } -.mainBox { - width: 100%; - position: absolute; - top: 0px; - left: 0px; - bottom: 50px; - overflow: auto; -} - -.bottom { - width: 100%; - position: absolute; - bottom: 0px; - left: 0px; - height: 50px; - line-height: 50px; - background-color: #F8F8F8; - border-top: 1px solid #eee; -} - -.button-container { - position: absolute; - right: 15px; -} - -.main-container { - margin: 15px; -} - -.main-container .layui-form-item { - margin-bottom: 15px !important; - margin-top: 10px !important; -} - -.pear-row::before, -.pear-row::after { +.pear-row::after, +.pear-row::before { content: ""; display: table; clear: both; @@ -206,103 +145,100 @@ body::-webkit-scrollbar-corner { width: 100%; } -@media all and (min-width:993px) and (max-width:1199px) { - - .pear-col-md-offset1 { - margin-left: 4.16%; - } +.pear-col-md-offset1 { + margin-left: 4.16%; +} - .pear-col-md-offset2 { - margin-left: 8.33%; - } +.pear-col-md-offset2 { + margin-left: 8.33%; +} - .pear-col-md-offset3 { - margin-left: 12.5%; - } +.pear-col-md-offset3 { + margin-left: 12.5%; +} - .pear-col-md-offset4 { - margin-left: 16.66%; - } +.pear-col-md-offset4 { + margin-left: 16.66%; +} - .pear-col-md-offset5 { - margin-left: 20.83%; - } +.pear-col-md-offset5 { + margin-left: 20.83%; +} - .pear-col-md-offset6 { - margin-left: 25%; - } +.pear-col-md-offset6 { + margin-left: 25%; +} - .pear-col-md-offset7 { - margin-left: 29.16%; - } +.pear-col-md-offset7 { + margin-left: 29.16%; +} - .pear-col-md-offset8 { - margin-left: 33.33%; - } +.pear-col-md-offset8 { + margin-left: 33.33%; +} - .pear-col-md-offset9 { - margin-left: 37.5%; - } +.pear-col-md-offset9 { + margin-left: 37.5%; +} - .pear-col-md-offset10 { - margin-left: 41.66%; - } +.pear-col-md-offset10 { + margin-left: 41.66%; +} - .pear-col-md-offset11 { - margin-left: 45.83%; - } +.pear-col-md-offset11 { + margin-left: 45.83%; +} - .pear-col-md-offset12 { - margin-left: 50%; - } +.pear-col-md-offset12 { + margin-left: 50%; +} - .pear-col-md-offset13 { - margin-left: 54.16%; - } +.pear-col-md-offset13 { + margin-left: 54.16%; +} - .pear-col-md-offset14 { - margin-left: 58.33%; - } +.pear-col-md-offset14 { + margin-left: 58.33%; +} - .pear-col-md-offset15 { - margin-left: 62.5%; - } +.pear-col-md-offset15 { + margin-left: 62.5%; +} - .pear-col-md-offset16 { - margin-left: 66.66%; - } +.pear-col-md-offset16 { + margin-left: 66.66%; +} - .pear-col-md-offset17 { - margin-left: 70.83%; - } +.pear-col-md-offset17 { + margin-left: 70.83%; +} - .pear-col-md-offset18 { - margin-left: 75%; - } +.pear-col-md-offset18 { + margin-left: 75%; +} - .pear-col-md-offset19 { - margin-left: 79.16%; - } +.pear-col-md-offset19 { + margin-left: 79.16%; +} - .pear-col-md-offset20 { - margin-left: 83.33%; - } +.pear-col-md-offset20 { + margin-left: 83.33%; +} - .pear-col-md-offset21 { - margin-left: 87.5%; - } +.pear-col-md-offset21 { + margin-left: 87.5%; +} - .pear-col-md-offset22 { - margin-left: 91.66%; - } +.pear-col-md-offset22 { + margin-left: 91.66%; +} - .pear-col-md-offset23 { - margin-left: 95.83%; - } +.pear-col-md-offset23 { + margin-left: 95.83%; +} - .pear-col-md-offset24 { - margin-left: 100%; - } +.pear-col-md-offset24 { + margin-left: 100%; } @@ -1038,4 +974,4 @@ body::-webkit-scrollbar-corner { .pear-col-space30>* { padding: 15px -} +} \ No newline at end of file diff --git a/component/pear/css/module/iconPicker.css b/component/pear/css/module/iconPicker.css deleted file mode 100644 index 5d80b0b951fe91636eb775855528c45765273d56..0000000000000000000000000000000000000000 --- a/component/pear/css/module/iconPicker.css +++ /dev/null @@ -1,11 +0,0 @@ -.layui-iconpicker { - width: 295px; -} - -.layui-iconpicker .layui-iconpicker-search .layui-input:focus{ - box-shadow: none!important; -} - -.layui-iconpicker-search .layui-icon { - top: 8px; -} \ No newline at end of file diff --git a/component/pear/css/module/label.css b/component/pear/css/module/label.css deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/component/pear/css/module/layer.css b/component/pear/css/module/layer.css deleted file mode 100644 index 0ca669f57aa1e750dc3e566af7dfabfde7fb8036..0000000000000000000000000000000000000000 --- a/component/pear/css/module/layer.css +++ /dev/null @@ -1,324 +0,0 @@ -.layui-layer-msg { - border-color: transparent !important; - box-shadow: 2px 0 6px rgb(0 21 41 / 0.04) !important; -} - -/* 扩展动画开始 */ -.pear-drawer.layui-layer { - border-radius: 0 !important; - overflow: auto; -} - -.pear-drawer.layui-layer.position-absolute { - position: absolute !important; -} -.pear-drawer-anim, -.pear-drawer-anim.layui-anim { - -webkit-animation-duration: .3s; - animation-duration: .3s; - -webkit-animation-timing-function: cubic-bezier(0.7, 0.3, 0.1, 1); - animation-timing-function: cubic-bezier(0.7, 0.3, 0.1, 1); -} - -/* right to left */ -@keyframes layer-rl { - from { - -webkit-transform: translate3d(100%, 0, 0); - -ms-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - opacity: 1; - - } - - to { - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1; - } -} - -@-webkit-keyframes layer-rl { - from { - -webkit-transform: translate3d(100%, 0, 0); - -ms-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - opacity: 1; - - } - - to { - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1; - } -} - -.layer-anim-rl { - -webkit-animation-name: layer-rl; - animation-name: layer-rl; -} - -/* right to left close */ -@keyframes layer-rl-close { - from { - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - -webkit-transform: translate3d(100%, 0, 0); - -ms-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } -} - -@-webkit-keyframes layer-rl-close { - from { - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - - } - - to { - -webkit-transform: translate3d(100%, 0, 0); - -ms-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } -} - -.layer-anim-rl-close, -.layer-anim-rl.layer-anim-close { - -webkit-animation-name: layer-rl-close; - animation-name: layer-rl-close; -} - -/* left to right */ -@-webkit-keyframes layer-lr { - from { - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1 - } - - to { - -webkit-transform: translate3d(-100%, 0, 0); - -ms-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - opacity: 1 - } -} - -@keyframes layer-lr { - from { - -webkit-transform: translate3d(-100%, 0, 0); - -ms-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - opacity: 1 - } - - to { - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1 - } -} - -.layer-anim-lr { - -webkit-animation-name: layer-lr; - animation-name: layer-lr -} - -/* left to right close */ -@-webkit-keyframes layer-lr-close { - from { - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - -webkit-transform: translate3d(-100%, 0, 0); - -ms-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } -} - -@keyframes layer-lr-close { - from { - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - -webkit-transform: translate3d(-100%, 0, 0); - -ms-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } -} - -.layer-anim-lr-close, -.layer-anim-lr.layer-anim-close { - -webkit-animation-name: layer-lr-close; - animation-name: layer-lr-close -} - -/* top to bottom */ -@-webkit-keyframes layer-tb { - from { - -webkit-transform: translate3d(0, -100%, 0); - -ms-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - opacity: 1; - animation-timing-function: cubic-bezier(0.7, 0.3, 0.1, 1); - } - - to { - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1; - animation-timing-function: cubic-bezier(0.7, 0.3, 0.1, 1); - } -} - -@keyframes layer-tb { - from { - -webkit-transform: translate3d(0, -100%, 0); - -ms-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - opacity: 1; - animation-timing-function: cubic-bezier(0.7, 0.3, 0.1, 1); - } - - to { - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1; - animation-timing-function: cubic-bezier(0.7, 0.3, 0.1, 1); - } -} - -.layer-anim-tb { - -webkit-animation-name: layer-tb; - animation-name: layer-tb -} - -/* top to bottom close */ -@-webkit-keyframes layer-tb-close { - from { - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - -webkit-transform: translate3d(0, -100%, 0); - -ms-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - -@keyframes layer-tb-close { - from { - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - -webkit-transform: translate3d(0, -100%, 0); - -ms-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - -.layer-anim-tb-close, -.layer-anim-tb.layer-anim-close { - -webkit-animation-name: layer-tb-close; - animation-name: layer-tb-close -} - -/* bottom to top */ -@-webkit-keyframes layer-bt { - from { - -webkit-transform: translate3d(0, 100%, 0); - -ms-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - opacity: 1 - } - - to { - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1 - } -} - -@keyframes layer-bt { - from { - -webkit-transform: translate3d(0, 100%, 0); - -ms-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - opacity: 1 - } - - to { - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - opacity: 1 - } -} - -.layer-anim-bt { - -webkit-animation-name: layer-bt; - animation-name: layer-bt -} - -/* bottom to top close */ -@-webkit-keyframes layer-bt-close { - from { - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - to { - -webkit-transform: translate3d(0, 100%, 0); - -ms-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - -@keyframes layer-bt-close { - from { - -webkit-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - - } - - to { - -webkit-transform: translate3d(0, 100%, 0); - -ms-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - - } -} - -.layer-anim-bt-close, -.layer-anim-bt.layer-anim-close { - -webkit-animation-name: layer-bt-close; - animation-name: layer-bt-close -} - -/* 扩展动画结束 */ \ No newline at end of file diff --git a/component/pear/css/module/link.css b/component/pear/css/module/link.css deleted file mode 100644 index 380351c5f3541a7407252e56c6d90a740f3cdd95..0000000000000000000000000000000000000000 --- a/component/pear/css/module/link.css +++ /dev/null @@ -1,20 +0,0 @@ -.pear-link{ - font-size: 15px!important; -} - -.pear-link.pear-link-primary{ - color : #5FB878 ; -} - -.pear-link.pear-link-success{ - color : #5FB878 ; -} - -.pear-link .pear-link-warming{ - - -} - -.pear-link .pear-link-danger{ - -} \ No newline at end of file diff --git a/component/pear/css/module/loading.css b/component/pear/css/module/loading.css deleted file mode 100644 index 4abb57d3d823f926cbb83838244a2721618b7b81..0000000000000000000000000000000000000000 --- a/component/pear/css/module/loading.css +++ /dev/null @@ -1,987 +0,0 @@ -/*! -* Notiflix ('https://www.notiflix.com') -* Version: 2.0.0 -* Author: Furkan MT ('https://github.com/furcan') -* Copyright 2020 Notiflix, MIT Licence ('https://opensource.org/licenses/MIT') -*/ - -/* Notiflix: Notify wrap on */ -[id^=NotiflixNotifyWrap] { -position: fixed; -z-index:4001; -opacity:1; -right: 10px; -top: 10px; -width: 280px; -max-width:96%; -box-sizing:border-box; -background: transparent;} - -[id^=NotiflixNotifyWrap] * { -box-sizing:border-box;} -/* Notiflix: Notify wrap off */ - -/* Notiflix: Notify content on */ -[id^=NotiflixNotifyWrap] > div { --webkit-user-select: none; --moz-user-select: none; --ms-user-select: none; -user-select: none; -font-family: 'Quicksand', sans-serif; -width:100%; -display: inline-block; -position:relative; -margin:0 0 10px; -border-radius:5px; -background: #1e1e1e; -color: #fff; -padding: 10px 12px; -font-size: 14px; -line-height: 1.4;} - -[id^=NotiflixNotifyWrap] > div:last-child { -margin:0;} - -[id^=NotiflixNotifyWrap] > div.with-callback { -cursor:pointer;} - -[id^=NotiflixNotifyWrap] *::selection { -background:inherit;} - -[id^=NotiflixNotifyWrap] > div.with-icon { -padding: 8px;} - -[id^=NotiflixNotifyWrap] > div.click-to-close { -cursor: pointer;} - -[id^=NotiflixNotifyWrap] > div.with-close-button { -padding: 10px 30px 10px 12px;} -[id^=NotiflixNotifyWrap] > div.with-icon.with-close-button { -padding: 6px 30px 6px 6px;} - -[id^=NotiflixNotifyWrap] > div > span.the-message { -font-weight: 500; -font-family:inherit !important; -word-break: break-all; -word-break: break-word;} - -[id^=NotiflixNotifyWrap] > div > span.notify-close-button { -cursor:pointer; -transition:all .2s ease-in-out; -position: absolute; -right: 8px; -top: 0; -bottom:0; -margin:auto; -color:inherit; -width: 16px; -height: 16px;} -[id^=NotiflixNotifyWrap] > div > span.notify-close-button:hover { -transform:rotate(90deg);} -[id^=NotiflixNotifyWrap] > div > span.notify-close-button > svg { -position: absolute; -width: 16px; -height: 16px; -right: 0; -top: 0;} -/* Notiflix: Notify content off */ - -/* Notiflix: Notify icon on */ -[id^=NotiflixNotifyWrap] > div > .nmi { -position: absolute; -width: 40px; -height: 40px; -font-size: 30px; -line-height: 40px; -text-align: center; -left: 8px; -top: 0; -bottom: 0; -margin: auto; -border-radius: inherit;} - -[id^=NotiflixNotifyWrap] > div > .wfa.shadow { -color: inherit; -background: rgba(0, 0, 0, 0.15); -box-shadow: inset 0 0 34px rgba(0, 0, 0, 0.2); -text-shadow: 0 0 10px rgba(0, 0, 0, 0.3);} - -[id^=NotiflixNotifyWrap] > div > span.with-icon { -position: relative; -float: left; -width: calc(100% - 40px); -margin:0 0 0 40px; -padding:0 0 0 10px; -box-sizing: border-box;} -/* Notiflix: Notify icon off */ - -/* Notiflix: Notify rtl on */ -[id^=NotiflixNotifyWrap] > div.rtl-on > .nmi { -left:auto; -right:8px;} - -[id^=NotiflixNotifyWrap] > div.rtl-on > span.with-icon { -padding:0 10px 0 0; -margin:0 40px 0 0;} - -[id^=NotiflixNotifyWrap] > div.rtl-on > span.notify-close-button { -right: auto; -left: 8px;} - -[id^=NotiflixNotifyWrap] > div.with-icon.with-close-button.rtl-on { -padding: 6px 6px 6px 30px;} - -[id^=NotiflixNotifyWrap] > div.with-close-button.rtl-on { -padding: 10px 12px 10px 30px;} -/* Notiflix: Notify rtl off */ - -/* Notiflix: Notify animation => fade on */ -[id^=NotiflixNotifyOverlay].with-animation, -[id^=NotiflixNotifyWrap] > div.with-animation.nx-fade { -animation: notify-animation-fade .3s ease-in-out 0s normal; --webkit-animation: notify-animation-fade .3s ease-in-out 0s normal;} - -@keyframes notify-animation-fade { -0% {opacity:0;} -100% {opacity:1;} -} - -@-webkit-keyframes notify-animation-fade { -0% {opacity:0;} -100% {opacity:1;} -} -/* Notiflix: Notify animation => fade off */ - -/* Notiflix: Notify animation => zoom on */ -[id^=NotiflixNotifyWrap] > div.with-animation.nx-zoom { -animation: notify-animation-zoom .3s ease-in-out 0s normal; --webkit-animation: notify-animation-zoom .3s ease-in-out 0s normal;} - -@keyframes notify-animation-zoom { -0% {transform:scale(0);} -50% {transform:scale(1.05);} -100% {transform:scale(1);} -} - -@-webkit-keyframes notify-animation-zoom { -0% {transform:scale(0);} -50% {transform:scale(1.05);} -100% {transform:scale(1);} -} -/* Notiflix: Notify animation => zoom off */ - -/* Notiflix: Notify animation => from right on */ -[id^=NotiflixNotifyWrap] > div.with-animation.nx-from-right { -animation: notify-animation-from-right .3s ease-in-out 0s normal; --webkit-animation: notify-animation-from-right .3s ease-in-out 0s normal;} - -@keyframes notify-animation-from-right { -0% {right:-300px; opacity:0;} -50% {right:8px; opacity:1;} -100% {right:0px; opacity:1;} -} - -@-webkit-keyframes notify-animation-from-right { -0% {right:-300px; opacity:0;} -50% {right:8px; opacity:1;} -100% {right:0px; opacity:1;} -} -/* Notiflix: Notify animation => from right off */ - -/* Notiflix: Notify animation => from left on */ -[id^=NotiflixNotifyWrap] > div.with-animation.nx-from-left { -animation: notify-animation-from-left .3s ease-in-out 0s normal; --webkit-animation: notify-animation-from-left .3s ease-in-out 0s normal;} - -@keyframes notify-animation-from-left { -0% {left:-300px; opacity:0;} -50% {left:8px; opacity:1;} -100% {left:0px; opacity:1;} -} - -@-webkit-keyframes notify-animation-from-left { -0% {left:-300px; opacity:0;} -50% {left:8px; opacity:1;} -100% {left:0px; opacity:1;} -} -/* Notiflix: Notify animation => from left off */ - -/* Notiflix: Notify animation => from top on */ -[id^=NotiflixNotifyWrap] > div.with-animation.nx-from-top { -animation: notify-animation-from-top .3s ease-in-out 0s normal; --webkit-animation: notify-animation-from-top .3s ease-in-out 0s normal;} - -@keyframes notify-animation-from-top { -0% {top:-50px; opacity:0;} -50% {top:8px; opacity:1;} -100% {top:0px; opacity:1;} -} - -@-webkit-keyframes notify-animation-from-top { -0% {top:-50px; opacity:0;} -50% {top:8px; opacity:1;} -100% {top:0px; opacity:1;} -} -/* Notiflix: Notify animation => from top off */ - -/* Notiflix: Notify animation => from bottom on */ -[id^=NotiflixNotifyWrap] > div.with-animation.nx-from-bottom { -animation: notify-animation-from-bottom .3s ease-in-out 0s normal; --webkit-animation: notify-animation-from-bottom .3s ease-in-out 0s normal;} - -@keyframes notify-animation-from-bottom { -0% {bottom:-50px; opacity:0;} -50% {bottom:8px; opacity:1;} -100% {bottom:0px; opacity:1;} -} - -@-webkit-keyframes notify-animation-from-bottom { -0% {bottom:-50px; opacity:0;} -50% {bottom:8px; opacity:1;} -100% {bottom:0px; opacity:1;} -} -/* Notiflix: Notify animation => from bottom off */ - -/* Notiflix: Notify animation remove => fade on */ -[id^=NotiflixNotifyOverlay].with-animation.remove, -[id^=NotiflixNotifyWrap] > div.with-animation.nx-fade.remove { -opacity:0; -animation: notify-remove-fade .3s ease-in-out 0s normal; --webkit-animation: notify-remove-fade .3s ease-in-out 0s normal;} - -@keyframes notify-remove-fade { -0% {opacity:1;} -100% {opacity:0;} -} - -@-webkit-keyframes notify-remove-fade { -0% {opacity:1;} -100% {opacity:0;} -} -/* Notiflix: Notify animation remove => fade off */ - -/* Notiflix: Notify animation remove => zoom on */ -[id^=NotiflixNotifyWrap] > div.with-animation.nx-zoom.remove { -transform:scale(0); -animation: notify-remove-zoom .3s ease-in-out 0s normal; --webkit-animation: notify-remove-zoom .3s ease-in-out 0s normal;} - -@keyframes notify-remove-zoom { -0% {transform:scale(1);} -50% {transform:scale(1.05);} -100% {transform:scale(0);} -} - -@-webkit-keyframes notify-remove-zoom { -0% {transform:scale(1);} -50% {transform:scale(1.05);} -100% {transform:scale(0);} -} -/* Notiflix: Notify animation remove => zoom off */ - -/* Notiflix: Notify animation remove => from top on */ -[id^=NotiflixNotifyWrap] > div.with-animation.nx-from-top.remove { -opacity:0; -animation: notify-remove-to-top .3s ease-in-out 0s normal; --webkit-animation: notify-remove-to-top .3s ease-in-out 0s normal;} - -@keyframes notify-remove-to-top { -0% {top:0px; opacity:1;} -50% {top:8px; opacity:1;} -100% {top:-50px; opacity:0;} -} - -@-webkit-keyframes notify-remove-to-top { -0% {top:0px; opacity:1;} -50% {top:8px; opacity:1;} -100% {top:-50px; opacity:0;} -} -/* Notiflix: Notify animation remove => from top off */ - -/* Notiflix: Notify animation remove => from right on */ -[id^=NotiflixNotifyWrap] > div.with-animation.nx-from-right.remove { -opacity:0; -animation: notify-remove-to-right .3s ease-in-out 0s normal; --webkit-animation: notify-remove-to-right .3s ease-in-out 0s normal;} - -@keyframes notify-remove-to-right { -0% {right:0px; opacity:1;} -50% {right:8px; opacity:1;} -100% {right:-300px; opacity:0;} -} - -@-webkit-keyframes notify-remove-to-right { -0% {right:0px; opacity:1;} -50% {right:8px; opacity:1;} -100% {right:-300px; opacity:0;} -} -/* Notiflix: Notify animation remove => from right off */ - -/* Notiflix: Notify animation remove => from bottom on */ -[id^=NotiflixNotifyWrap] > div.with-animation.nx-from-bottom.remove { -opacity:0; -animation: notify-remove-to-bottom .3s ease-in-out 0s normal; --webkit-animation: notify-remove-to-bottom .3s ease-in-out 0s normal;} - -@keyframes notify-remove-to-bottom { -0% {bottom:0px; opacity:1;} -50% {bottom:8px; opacity:1;} -100% {bottom:-50px; opacity:0;} -} - -@-webkit-keyframes notify-remove-to-bottom { -0% {bottom:0px; opacity:1;} -50% {bottom:8px; opacity:1;} -100% {bottom:-50px; opacity:0;} -} -/* Notiflix: Notify animation remove => from bottom off */ - -/* Notiflix: Notify animation remove => from left on */ -[id^=NotiflixNotifyWrap] > div.with-animation.nx-from-left.remove { -opacity:0; -animation: notify-remove-to-left .3s ease-in-out 0s normal; --webkit-animation: notify-remove-to-left .3s ease-in-out 0s normal;} - -@keyframes notify-remove-to-left { -0% {left:0px; opacity:1;} -50% {left:8px; opacity:1;} -100% {left:-300px; opacity:0;} -} - -@-webkit-keyframes notify-remove-to-left { -0% {left:0px; opacity:1;} -50% {left:8px; opacity:1;} -100% {left:-300px; opacity:0;} -} -/* Notiflix: Notify animation remove => from left off */ - - -/* Notiflix: Report wrap on */ -[id^=NotiflixReportWrap] { -position: fixed; -z-index:4002; -width: 320px; -max-width:96%; -box-sizing:border-box; -font-family: "Quicksand", sans-serif; -left: 0; -right: 0; -top: 20px; -color:#1e1e1e; -border-radius: 25px; -background: transparent; -margin: auto;} - -[id^=NotiflixReportWrap] * { -box-sizing:border-box;} -/* Notiflix: Report wrap off */ - -/* Notiflix: Report content on */ -[id^=NotiflixReportWrap] > div[class*="-overlay"] { -width:100%; -height:100%; -left:0; -top:0; -background: rgba(255, 255, 255, .5); -position:fixed; -z-index:0;} - -[id^=NotiflixReportWrap] > div[class*="-content"] { -width:100%; -float:left; -border-radius: inherit; -padding:10px; -filter: drop-shadow(0 0 5px rgba(0,0,0,.1)); -border: 1px solid rgba(0,0,0,.03); -background: #f8f8f8; -position:relative; -z-index:1;} - -[id^=NotiflixReportWrap] > div[class*="-content"] > div[class$="-icon"] { --webkit-user-select: none; --moz-user-select: none; --ms-user-select: none; -user-select: none; -width:110px; -height:110px; -display:block; -margin:6px auto 12px;} - -[id^=NotiflixReportWrap] > div[class*="-content"] > div[class$="-icon"] svg { -min-width:100%; -max-width:100%; -height:auto;} - -[id^=NotiflixReportWrap] > * > h5 { -word-break: break-all; -word-break: break-word; -font-family:inherit !important; -font-size:16px; -font-weight:500; -line-height: 1.4; -margin: 0 0 10px; -padding: 0 0 10px; -border-bottom: 1px solid rgba(0, 0, 0, 0.1); -float: left; -width: 100%; -text-align: center;} - -[id^=NotiflixReportWrap] > * > p { -word-break: break-all; -word-break: break-word; -font-family:inherit !important; -font-size:13px; -line-height: 1.4; -float: left; -width: 100%; -padding:0 10px; -margin: 0 0 10px;} - -[id^=NotiflixReportWrap] a#NXReportButton { -word-break: break-all; -word-break: break-word; --webkit-user-select: none; --moz-user-select: none; --ms-user-select: none; -user-select: none; -font-family:inherit !important; -transition:all .25s ease-in-out; -cursor:pointer; -float: right; -padding: 7px 17px; -background: #32c682; -font-size:14px; -line-height: 1.4; -font-weight: 500; -border-radius: inherit !important; -color: #fff;} - -[id^=NotiflixReportWrap] a#NXReportButton:hover { -box-shadow:inset 0 -60px 5px -5px rgba(0, 0, 0, 0.25);} - -[id^=NotiflixReportWrap].rtl-on a#NXReportButton { -float:left;} -/* Notiflix: Report content off */ - -/* Notiflix: Report overlay animation => fade on */ -[id^=NotiflixReportWrap] > div[class*="-overlay"].with-animation { -animation: report-overlay-animation .3s ease-in-out 0s normal; --webkit-animation: report-overlay-animation .3s ease-in-out 0s normal;} - -@keyframes report-overlay-animation { -0% {opacity:0;} -100% {opacity:1;} -} - -@-webkit-keyframes report-overlay-animation { -0% {opacity:0;} -100% {opacity:1;} -} -/* Notiflix: Report overlay animation => fade off */ - -/* Notiflix: Report content animation => fade on */ -[id^=NotiflixReportWrap] > div[class*="-content"].with-animation.nx-fade { -animation: report-animation-fade .3s ease-in-out 0s normal; --webkit-animation: report-animation-fade .3s ease-in-out 0s normal;} - -@keyframes report-animation-fade { -0% {opacity:0;} -100% {opacity:1;} -} - -@-webkit-keyframes report-animation-fade { -0% {opacity:0;} -100% {opacity:1;} -} -/* Notiflix: Report content animation => fade off */ - -/* Notiflix: Report content animation => zoom on */ -[id^=NotiflixReportWrap] > div[class*="-content"].with-animation.nx-zoom { -animation: report-animation-zoom .3s ease-in-out 0s normal; --webkit-animation: report-animation-zoom .3s ease-in-out 0s normal;} - -@keyframes report-animation-zoom { -0% {opacity:0; transform:scale(0.5);} -50% {opacity:1; transform:scale(1.05);} -100% {opacity:1; transform:scale(1);} -} - -@-webkit-keyframes report-animation-zoom { -0% {opacity:0; transform:scale(0.5);} -50% {opacity:1; transform:scale(1.05);} -100% {opacity:1; transform:scale(1);} -} -/* Notiflix: Report content animation => zoom off */ - -/* Notiflix: Report overlay animation remove => fade on */ -[id^=NotiflixReportWrap].remove > div[class*="-overlay"].with-animation { -opacity:0; -animation: report-overlay-animation-remove .3s ease-in-out 0s normal; --webkit-animation: report-overlay-animation-remove .3s ease-in-out 0s normal;} - -@keyframes report-overlay-animation-remove { -0% {opacity:1;} -100% {opacity:0;} -} - -@-webkit-keyframes report-overlay-animation-remove { -0% {opacity:1;} -100% {opacity:0;} -} -/* Notiflix: Report overlay animation remove => fade off */ - -/* Notiflix: Report content animation remove => fade on */ -[id^=NotiflixReportWrap].remove > div[class*="-content"].with-animation.nx-fade { -opacity:0; -animation: report-animation-fade-remove .3s ease-in-out 0s normal; --webkit-animation: report-animation-fade-remove .3s ease-in-out 0s normal;} - -@keyframes report-animation-fade-remove { -0% {opacity:1;} -100% {opacity:0;} -} - -@-webkit-keyframes report-animation-fade-remove { -0% {opacity:1;} -100% {opacity:0;} -} -/* Notiflix: Report content animation remove => fade off */ - -/* Notiflix: Report content animation remove => zoom on */ -[id^=NotiflixReportWrap].remove > div[class*="-content"].with-animation.nx-zoom { -opacity:0; -animation: report-animation-zoom-remove .3s ease-in-out 0s normal; --webkit-animation: report-animation-zoom-remove .3s ease-in-out 0s normal;} - -@keyframes report-animation-zoom-remove { -0% {opacity:1; transform:scale(1);} -50% {opacity:0.5; transform:scale(1.05);} -100% {opacity:0; transform:scale(0);} -} - -@-webkit-keyframes report-animation-zoom-remove { -0% {opacity:1; transform:scale(1);} -50% {opacity:0.5; transform:scale(1.05);} -100% {opacity:0; transform:scale(0);} -} -/* Notiflix: Report content animation remove => zoom off */ - - -/* Notiflix: Confirm wrap on */ -[id^=NotiflixConfirmWrap] { -position: fixed; -z-index: 4003; -width: 300px; -max-width:98%; -left: 10px; -right: 10px; -top: 10px; -margin:auto; -text-align: center; -box-sizing:border-box; -background:transparent; -font-family: "Quicksand", sans-serif;} - -[id^=NotiflixConfirmWrap] * { -box-sizing:border-box;} -/* Notiflix: Confirm wrap off */ - -/* Notiflix: Confirm content on */ -[id^=NotiflixConfirmWrap] > div[class*="-overlay"] { -width:100%; -height:100%; -left:0; -top:0; -background: rgba(255, 255, 255, .5); -position:fixed; -z-index:0;} - -[id^=NotiflixConfirmWrap] > div[class*="-content"] { -width:100%; -float:left; -border-radius: 25px; -padding:10px; -margin:0; -filter: drop-shadow(0 0 5px rgba(0,0,0,.1)); -background: #f8f8f8; -color:#1e1e1e; -position:relative; -z-index:1;} - -[id^=NotiflixConfirmWrap] > div[class*="-content"] > div[class*="-head"] { -float:left; -width:100%;} - -[id^=NotiflixConfirmWrap] > div[class*="-content"] > div[class*="-head"] > h5 { -float:left; -width:100%; -margin:0; -padding:0 0 10px; -border-bottom:1px solid rgba(0,0,0,0.1); -color: #32c682; -font-family:inherit !important; -font-size:16px; -line-height:1.4; -font-weight:500;} - -[id^=NotiflixConfirmWrap] > div[class*="-content"] > div[class*="-head"] > p { -font-family:inherit !important; -margin: 15px 0 20px; -padding: 0 10px; -float:left; -width:100%; -font-size: 14px; -line-height: 1.4; -color: inherit;} - -[id^=NotiflixConfirmWrap] > div[class*="-content"] > div[class*="-buttons"] { --webkit-user-select: none; --moz-user-select: none; --ms-user-select: none; -user-select: none; -border-radius:inherit; -float:left; -width:100%;} - -[id^=NotiflixConfirmWrap] > div[class*="-content"] > div[class*="-buttons"] > a { -cursor:pointer; -font-family:inherit !important; -transition:all .25s ease-in-out; -float: left; -width: 48%; -padding: 9px 5px; -border-radius:inherit !important; -font-weight: 500; -font-size: 15px; -line-height: 1.4; -color:#f8f8f8;} - -[id^=NotiflixConfirmWrap] > div[class*="-content"] > div[class*="-buttons"] > a.confirm-button-ok { -margin:0 2% 0 0; -background:#32c682;} - -[id^=NotiflixConfirmWrap] > div[class*="-content"] > div[class*="-buttons"] > a.confirm-button-cancel { -margin:0 0 0 2%; -background:#a9a9a9;} - -[id^=NotiflixConfirmWrap] > div[class*="-content"] > div[class*="-buttons"] > a.full { -margin:0; -width:100%;} - -[id^=NotiflixConfirmWrap] > div[class*="-content"] > div[class*="-buttons"] > a:hover { -box-shadow:inset 0 -60px 5px -5px rgba(0, 0, 0, 0.25);} -/* Notiflix: Confirm content off */ - -/* Notiflix: Confirm rtl on */ -[id^=NotiflixConfirmWrap].rtl-on > div[class*="-content"] > div[class*="-buttons"], -[id^=NotiflixConfirmWrap].rtl-on > div[class*="-content"] > div[class*="-buttons"] > a { -transform:rotateY(180deg);} -/* Notiflix: Confirm rtl off */ - -/* Notiflix: Confirm overlay animation => fade on */ -[id^=NotiflixConfirmWrap] > div[class*="-overlay"].with-animation { -animation: confirm-overlay-animation .3s ease-in-out 0s normal; --webkit-animation: confirm-overlay-animation .3s ease-in-out 0s normal;} - -@keyframes confirm-overlay-animation { -0% {opacity:0;} -100% {opacity:1;} -} - -@-webkit-keyframes confirm-overlay-animation { -0% {opacity:0;} -100% {opacity:1;} -} -/* Notiflix: Confirm overlay animation => fade off */ - -/* Notiflix: Confirm overlay animation remove => fade on */ -[id^=NotiflixConfirmWrap].remove > div[class*="-overlay"].with-animation { -opacity:0; -animation: confirm-overlay-animation-remove .3s ease-in-out 0s normal; --webkit-animation: confirm-overlay-animation-remove .3s ease-in-out 0s normal;} - -@keyframes confirm-overlay-animation-remove { -0% {opacity:1;} -100% {opacity:0;} -} - -@-webkit-keyframes confirm-overlay-animation-remove { -0% {opacity:1;} -100% {opacity:0;} -} -/* Notiflix: Confirm overlay animation remove => fade off */ - -/* Notiflix: Confirm content animation => fade on */ -[id^=NotiflixConfirmWrap].with-animation.nx-fade > div[class*="-content"] { -animation: confirm-animation-fade .3s ease-in-out 0s normal; --webkit-animation: confirm-animation-fade .3s ease-in-out 0s normal;} - -@keyframes confirm-animation-fade { -0% {opacity:0;} -100% {opacity:1;} -} - -@-webkit-keyframes confirm-animation-fade { -0% {opacity:0;} -100% {opacity:1;} -} -/* Notiflix: Confirm content animation => fade off */ - -/* Notiflix: Confirm content animation => zoom on */ -[id^=NotiflixConfirmWrap].with-animation.nx-zoom > div[class*="-content"] { -animation: confirm-animation-zoom .3s ease-in-out 0s normal; --webkit-animation: confirm-animation-zoom .3s ease-in-out 0s normal;} - -@keyframes confirm-animation-zoom { -0% {opacity:0; transform:scale(0.5);} -50% {opacity:1; transform:scale(1.05);} -100% {opacity:1; transform:scale(1);} -} - -@-webkit-keyframes confirm-animation-zoom { -0% {opacity:0; transform:scale(0.5);} -50% {opacity:1; transform:scale(1.05);} -100% {opacity:1; transform:scale(1);} -} -/* Notiflix: Confirm content animation => zoom off */ - -/* Notiflix: Confirm content animation remove => fade on */ -[id^=NotiflixConfirmWrap].with-animation.nx-fade.remove > div[class*="-content"] { -opacity:0; -animation: confirm-animation-fade-remove .3s ease-in-out 0s normal; --webkit-animation: confirm-animation-fade-remove .3s ease-in-out 0s normal;} - -@keyframes confirm-animation-fade-remove { -0% {opacity:1;} -100% {opacity:0;} -} - -@-webkit-keyframes confirm-animation-fade-remove { -0% {opacity:1;} -100% {opacity:0;} -} -/* Notiflix: Confirm content animation remove => fade off */ - -/* Notiflix: Confirm content animation remove => zoom on */ -[id^=NotiflixConfirmWrap].with-animation.nx-zoom.remove > div[class*="-content"] { -opacity:0; -animation: confirm-animation-zoom-remove .3s ease-in-out 0s normal; --webkit-animation: confirm-animation-zoom-remove .3s ease-in-out 0s normal;} - -@keyframes confirm-animation-zoom-remove { -0% {opacity:1; transform:scale(1);} -50% {opacity:0.5; transform:scale(1.05);} -100% {opacity:0; transform:scale(0);} -} - -@-webkit-keyframes confirm-animation-zoom-remove { -0% {opacity:1; transform:scale(1);} -50% {opacity:0.5; transform:scale(1.05);} -100% {opacity:0; transform:scale(0);} -} -/* Notiflix: Confirm content animation remove => zoom off */ - - -/* Notiflix: Loading wrap on */ -[id^=NotiflixLoadingWrap] { --webkit-user-select: none; --moz-user-select: none; --ms-user-select: none; -user-select: none; -position: fixed; -z-index: 4000; -width: 100%; -height: 100%; -left: 0; -top: 0; -right:0; -bottom:0; -margin:auto; -text-align: center; -box-sizing:border-box; -background: white!important; -font-family: "Quicksand", sans-serif;} - -[id^=NotiflixLoadingWrap] * { -box-sizing:border-box;} - -[id^=NotiflixLoadingWrap].click-to-close { -cursor:pointer;} -/* Notiflix: Loading wrap off */ - -/* Notiflix: Loading content on */ -[id^=NotiflixLoadingWrap] > div[class*="-icon"] { -width:60px; -height:60px; -position:fixed; -background-color: white!important; -transition:top .2s ease-in-out; -left: 0; -top: 0; -right:0; -bottom:0; -margin:auto;} - -[id^=NotiflixLoadingWrap] > div[class*="-icon"] img, -[id^=NotiflixLoadingWrap] > div[class*="-icon"] svg { -max-width:unset; -max-height:unset; -width: 100%; -height: 100%; -position:absolute; -left: 0; -top: 0;} - -[id^=NotiflixLoadingWrap] > div[class*="-icon"].with-message { -top:-42px;} - -[id^=NotiflixLoadingWrap] > p { -position: fixed; -left: 0; -right: 0; -top: 42px; -bottom: 0; -margin: auto; -font-family: inherit !important; -font-weight: 500; -line-height: 1.4; -padding: 0 10px; -width: 100%; -font-size:15px; -height: 18px;} -/* Notiflix: Loading content off */ - -/* Notiflix: Loading animation => fade on */ -[id^=NotiflixLoadingWrap].with-animation { -animation: loading-animation-fade .3s ease-in-out 0s normal; --webkit-animation: loading-animation-fade .3s ease-in-out 0s normal;} - -@keyframes loading-animation-fade { -0% {opacity:0;} -100% {opacity:1;} -} - -@-webkit-keyframes loading-animation-fade { -0% {opacity:0;} -100% {opacity:1;} -} -/* Notiflix: Loading animation => fade off */ - -/* Notiflix: Loading animation remove => fade on */ -[id^=NotiflixLoadingWrap].with-animation.remove { -opacity:0; -animation: loading-animation-fade-remove .3s ease-in-out 0s normal; --webkit-animation: loading-animation-fade-remove .3s ease-in-out 0s normal;} - -@keyframes loading-animation-fade-remove { -0% {opacity:1;} -100% {opacity:0;} -} - -@-webkit-keyframes loading-animation-fade-remove { -0% {opacity:1;} -100% {opacity:0;} -} -/* Notiflix: Loading animation remove => fade off */ - -/* Notiflix: Loading animation new message => fade on */ -[id^=NotiflixLoadingWrap] > p.new { -animation: loading-new-message-fade .3s ease-in-out 0s normal; --webkit-animation: loading-new-message-fade .3s ease-in-out 0s normal;} - -@keyframes loading-new-message-fade { -0% {opacity:0;} -100% {opacity:1;} -} - -@-webkit-keyframes loading-new-message-fade { -0% {opacity:0;} -100% {opacity:1;} -} -/* Notiflix: Loading animation new message => fade off */ - - -/* Notiflix: Block wrap on */ -[id^=NotiflixBlockWrap] { --webkit-user-select: none; --moz-user-select: none; --ms-user-select: none; -user-select: none; -box-sizing: border-box; -position: absolute; -z-index: 1000; -font-family: "Quicksand", sans-serif; -background: rgba(255, 255, 255, 0.9); -text-align: center; -animation-duration: 400ms; -width: 100%; -height: 100%; -left: 0; -top: 0; -border-radius: inherit;} - -[id^=NotiflixBlockWrap] * { -box-sizing: border-box;} -/* Notiflix: Block wrap off */ - -/* Notiflix: Block content on */ -[id^=NotiflixBlockWrap] > span[class*="-icon"] { -width: 45px; -height: 45px; -position: absolute; -left: 0; -top: 0; -right: 0; -bottom: 0; -margin: auto;} - -[id^=NotiflixBlockWrap] > span[class*="-message"] { -position: absolute; -left: 0; -right: 0; -top: 50px; -bottom: 0; -margin: auto; -font-family: inherit !important; -font-weight: 500; -font-size: 14px; -line-height: 1.4; -padding: 0 10px; -width: 100%; -height: 20px; -overflow: hidden;} -/* Notiflix: Block content off */ - -/* Notiflix: Block animation => fade on */ -[id^=NotiflixBlockWrap].with-animation { -animation: block-animation-fade .3s ease-in-out 0s normal; --webkit-animation: block-animation-fade .3s ease-in-out 0s normal;} - -@keyframes block-animation-fade { -0% {opacity: 0;} -100% {opacity: 1;} -} - -@-webkit-keyframes block-animation-fade { -0% {opacity: 0;} -100% {opacity: 1;} -} -/* Notiflix: Block animation => fade off */ - -/* Notiflix: Block animation remove => fade on */ -[id^=NotiflixBlockWrap].with-animation.remove { -opacity: 0; -animation: block-animation-fade-remove .3s ease-in-out 0s normal; --webkit-animation: block-animation-fade-remove .3s ease-in-out 0s normal;} - -@keyframes block-animation-fade-remove { -0% {opacity: 1;} -100% {opacity: 0;} -} - -@-webkit-keyframes block-animation-fade-remove { -0% {opacity: 1;} -100% {opacity: 0;} -} -/* Notiflix: Block animation remove => fade off */ - diff --git a/component/pear/css/module/menu.css b/component/pear/css/module/menu.css index 938f987ad3ec060844e918844026bbba5546dd10..9c59c64bb0d17595a742e2a8c3dcdebd81110d4b 100644 --- a/component/pear/css/module/menu.css +++ b/component/pear/css/module/menu.css @@ -16,7 +16,7 @@ line-height: 48px; } -.pear-nav-tree .layui-nav-item>a .layui-nav-more { +.pear-nav-tree .layui-nav-item>a .layui-nav-more { padding: 0px; } @@ -24,7 +24,8 @@ width: 0px; height: 0px; } -.pear-side-scroll{ + +.pear-side-scroll { width: 230px; } @@ -33,7 +34,7 @@ .layui-nav-tree .layui-this, .layui-nav-tree .layui-this>a, .layui-nav-tree .layui-this>a:hover { - background-color: #5FB878; + background-color: var(--global-primary-color); } .pear-nav-tree .toast { @@ -100,7 +101,7 @@ font-size: 14px; } -.pear-nav-control.pc li{ +.pear-nav-control.pc li { display: inline-block; } @@ -112,15 +113,15 @@ background-color: whitesmoke; } -.pear-nav-control.pc *{ - color: darkslategray!important; +.pear-nav-control.pc * { + color: darkslategray !important; } -.pear-nav-control.pc .layui-nav-bar{ - display: none!important; +.pear-nav-control.pc .layui-nav-bar { + display: none !important; } -.pear-nav-control .layui-nav-child{ +.pear-nav-control .layui-nav-child { border: 1px solid whitesmoke; border-radius: 6px; width: 150px; @@ -134,6 +135,7 @@ display: block !important; background: transparent !important; } + .pear-nav-tree .layui-nav-hover:before { content: ''; position: absolute; @@ -147,66 +149,73 @@ display: block; box-shadow: 0px 0px 3px lightgray; } + .pear-nav-tree .layui-nav-hover a span { display: inline-block !important; } + .pear-nav-tree .layui-nav-hover a i { display: none; } + .pear-nav-tree .layui-nav-child dd a span { margin-left: 26px !important; } + .pear-nav-tree .layui-nav-child dd a i { display: none; } + .pear-nav-tree .layui-nav-hover dd a span { margin-left: 0px !important; } + .pear-nav-tree dl { padding-top: 0; padding-bottom: 0; } + /** 亮 样 式*/ -.dark-theme .layui-nav-tree{ - background-color: #28333E!important; +.dark-theme .layui-nav-tree { + background-color: #28333E !important; } -.light-theme{ - background-color: white!important; +.light-theme { + background-color: white !important; } .light-theme .pear-nav-tree, .light-theme .pear-nav-tree .layui-nav-hover:before, -.light-theme .pear-nav-tree .layui-nav-child{ - background-color: white!important; +.light-theme .pear-nav-tree .layui-nav-child { + background-color: white !important; } .light-theme .pear-nav-tree a, -.light-theme .pear-nav-tree .layui-nav-more{ - color: dimgray!important; +.light-theme .pear-nav-tree .layui-nav-more { + color: dimgray !important; border-top-color: dimgray; } -.light-theme .pear-nav-tree .layui-nav-itemed>a>.layui-nav-more{ - border-top-color: white!important; - border-bottom-color: dimgray!important; +.light-theme .pear-nav-tree .layui-nav-itemed>a>.layui-nav-more { + border-top-color: white !important; + border-bottom-color: dimgray !important; } .light-theme .pear-nav-tree .layui-this a, -.light-theme .pear-nav-tree .layui-this{ - color: white!important; - background-color: #5FB878!important; - +.light-theme .pear-nav-tree .layui-this { + color: white !important; + background-color: var(--global-primary-color) !important; + } -.light-theme .pear-nav-tree .layui-this a:hover{ - background-color: #5FB878!important; - +.light-theme .pear-nav-tree .layui-this a:hover { + background-color: var(--global-primary-color) !important; + } - -.light-theme .pear-nav-tree .layui-nav-bar{ + +.light-theme .pear-nav-tree .layui-nav-bar { display: none; - + } /** 下 拉 图 标 */ @@ -247,6 +256,7 @@ width: 12px; text-align: center; } + .pear-nav-tree.arrow .layui-nav-child.layui-nav-hover>dd>a>.layui-nav-more { display: inline-block !important; transform: rotate(270deg); @@ -264,4 +274,4 @@ content: '\e61a'; display: inline-block; vertical-align: middle; -} +} \ No newline at end of file diff --git a/component/pear/css/module/menuSearch.css b/component/pear/css/module/menuSearch.css new file mode 100644 index 0000000000000000000000000000000000000000..cd66d5c4508219ebcb3e9e13e09bb642cb002f7d --- /dev/null +++ b/component/pear/css/module/menuSearch.css @@ -0,0 +1,85 @@ +/* 搜索面板 */ +.menu-search-content .layui-input { + padding-left: 30px; +} + +.menu-search-content { + display: flex; + flex-wrap: wrap; + justify-content: center; +} + +.menu-search-input-wrapper { + width: 100%; + padding: 15px 15px; +} + +.menu-search-no-data { + display: flex; + justify-content: center; + width: 100%; + height: 122px; + align-items: center; +} + +.menu-search-list { + width: 100%; + padding: 5px 15px; +} + +.menu-search-list li { + position: relative; + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: nowrap; + height: 50px; + margin-bottom: 8px; + padding: 0px 10px; + color: currentColor; + font-size: 14px; + border-radius: 4px; + box-shadow: 0 1px 3px #d4d9e1; + cursor: pointer; + background-color: #fff; +} + +.menu-search-list li.this, +.menu-search-list li:hover { + background-color: var(--global-primary-color); + color: white; +} +.menu-search-tips { + margin-bottom: 15px; + padding: 0 15px; + width: 100% +} + +.menu-search-tips>div { + display: flex; + align-items: center; + justify-content: flex-end; + font-size: 12px; +} + +.menu-search-tips .mr-1 { + margin-right: 4px; +} + +.menu-search-tips .mr-5 { + margin-right: 20px; +} + +.menu-search-tips .w-5 { + width: 14px; +} + +.menu-search-tips kbd { + line-height: 1.5; + border: 1px solid #e5e7eb; + font-size: 10px; + text-align: center; + padding: 2px 6px; + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; + border-radius: 5px; +} \ No newline at end of file diff --git a/component/pear/css/module/message.css b/component/pear/css/module/message.css deleted file mode 100644 index 0a61d092a45c05a5ee8c0d3fb52150f9aaeb40ea..0000000000000000000000000000000000000000 --- a/component/pear/css/module/message.css +++ /dev/null @@ -1,133 +0,0 @@ -.pear-notice .layui-this { - color: #5FB878 !important; - font-weight: 500; -} - -.pear-notice { - box-shadow: 0 6px 16px -8px rgb(0 0 0 / 8%), 0 9px 28px 0 rgb(0 0 0 / 5%), 0 12px 48px 16px rgb(0 0 0 / 3%)!important; -} - -.pear-notice .layui-tab-title { - display: flex; - text-align: center; - border-right: 1px solid whitesmoke; -} - -.pear-notice .layui-tab-title li { - flex: 1; - text-align: center; - border-right: 1px solid whitesmoke; -} -/*排除最后一个 li 右边框*/ -.pear-notice .layui-tab-title li:last-child { - border-right: none; -} - -.pear-notice * { - color: dimgray !important; -} - -.pear-notice { - width: 360px !important; -} - -.pear-notice img { - margin-left: 8px; - width: 33px !important; - height: 33px !important; - border-radius: 50px; - margin-right: 15px; -} - -.pear-notice-item { - height: 45px !important; - line-height: 45px !important; - padding-right: 20px; - padding-left: 20px; - border-bottom: 1px solid whitesmoke; - padding-top: 10px; - padding-bottom: 15px; -} -.pear-notice-end { - float: right; - right: 10px; -} - -.pear-notice-item span{ - height: 40px; - line-height: 40px; -} - -/** 滚动条样式 */ -.pear-notice *::-webkit-scrollbar { - width: 0px; - height: 0px; -} - -.pear-notice *::-webkit-scrollbar-track { - background: white; - border-radius: 2px; -} - -.pear-notice *::-webkit-scrollbar-thumb { - background: #E6E6E6; - border-radius: 2px; -} - -.pear-notice *::-webkit-scrollbar-thumb:hover { - background: #E6E6E6; -} - -.pear-notice *::-webkit-scrollbar-corner { - background: #f6f6f6; -} -/** 增加 empty 样式 */ -.pear-empty { - font-size: 14px; - line-height: 1.5715; - min-height: 200px; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; -} -.pear-empty-normal { - margin: 32px 0; - color: #00000040; -} -.pear-empty-normal .pear-empty-image { - height: 40px; -} - -.pear-empty-image { - height: 100px; - margin-bottom: 8px; -} -.pear-empty-image svg { - height: 100%; - margin: auto; -} - -.pear-empty-img-simple-g { - stroke: #d9d9d9; -} -.pear-empty-img-default-g { - fill: #fff; -} -.pear-empty-img-simple-path { - fill: #fafafa; -} -.pear-empty-img-default-path-1 { - fill: #aeb8c2; -} -.pear-empty-img-default-path-2 { - fill: url(#linearGradient-1); -} -.pear-empty-img-default-path-3 { - fill: #f5f5f7; -} -.pear-empty-img-default-path-4, .pear-empty-img-default-path-5 { - fill: #dce0e6; -} - - diff --git a/component/pear/css/module/messageCenter.css b/component/pear/css/module/messageCenter.css new file mode 100644 index 0000000000000000000000000000000000000000..0ab9ef3a94bba0f3c7fb7777232fbd94076080fd --- /dev/null +++ b/component/pear/css/module/messageCenter.css @@ -0,0 +1,39 @@ +.pear-message-center { + width: 360px; + height: 100%; +} + +.pear-message-center .layui-tab .layui-tab-title{ + display: flex; +} + +.pear-message-center .layui-tab .layui-tab-title .layui-this::after { + display: none; +} + +.pear-message-center .layui-tab .layui-tab-title li { + flex: 1; +} + +.pear-message-center .message-item img { + margin-left: 8px; + width: 33px !important; + height: 33px !important; + border-radius: 50px; + margin-right: 15px; +} + +.pear-message-center .message-item { + height: 64px !important; + line-height: 45px !important; + padding-right: 20px; + padding-left: 20px; + border-bottom: 1px solid whitesmoke; + padding-top: 10px; + padding-bottom: 15px; +} + +.pear-message-center .message-item .extra { + float: right; + right: 10px; +} \ No newline at end of file diff --git a/component/pear/css/module/notice.css b/component/pear/css/module/notice.css deleted file mode 100644 index 65c9feacaae238abc377e560a5d4fa8e619f9b5e..0000000000000000000000000000000000000000 --- a/component/pear/css/module/notice.css +++ /dev/null @@ -1,228 +0,0 @@ -.toast-title { - font-weight: bold; -} -.toast-message { - -ms-word-wrap: break-word; - word-wrap: break-word; -} -.toast-message a, -.toast-message label { - color: #FFFFFF; -} -.toast-message a:hover { - color: #CCCCCC; - text-decoration: none; -} -.toast-close-button { - position: relative; - right: -0.3em; - top: -0.3em; - float: right; - font-size: 20px; - font-weight: bold; - color: #FFFFFF; - -webkit-text-shadow: 0 1px 0 #ffffff; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.8; - -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); - filter: alpha(opacity=80); - line-height: 1; -} -.toast-close-button:hover, -.toast-close-button:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.4; - -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40); - filter: alpha(opacity=40); -} -.rtl .toast-close-button { - left: -0.3em; - float: left; - right: 0.3em; -} -/*Additional properties for button version - iOS requires the button element instead of an anchor tag. - If you want the anchor version, it requires `href="#"`.*/ -button.toast-close-button { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.toast-top-center { - top: 0; - right: 0; - width: 100%; -} -.toast-bottom-center { - bottom: 0; - right: 0; - width: 100%; -} -.toast-top-full-width { - top: 0; - right: 0; - width: 100%; -} -.toast-bottom-full-width { - bottom: 0; - right: 0; - width: 100%; -} -.toast-top-left { - top: 12px; - left: 12px; -} -.toast-top-right { - top: 12px; - right: 12px; -} -.toast-bottom-right { - right: 12px; - bottom: 12px; -} -.toast-bottom-left { - bottom: 12px; - left: 12px; -} -#toast-container { - position: fixed; - z-index: 999999; - pointer-events: none; - /*overrides*/ -} -#toast-container * { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; -} -#toast-container > div { - position: relative; - pointer-events: auto; - overflow: hidden; - margin: 0 0 6px; - padding: 15px 15px 15px 50px; - width: 300px; - -moz-border-radius: 3px 3px 3px 3px; - -webkit-border-radius: 3px 3px 3px 3px; - border-radius: 3px 3px 3px 3px; - background-position: 15px center; - background-repeat: no-repeat; - -moz-box-shadow: 0 0 12px #999999; - -webkit-box-shadow: 0 0 12px #999999; - box-shadow: 0 0 12px #999999; - color: #FFFFFF; - opacity: 0.8; - -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); - filter: alpha(opacity=80); -} -#toast-container > div.rtl { - direction: rtl; - padding: 15px 50px 15px 15px; - background-position: right 15px center; -} -#toast-container > div:hover { - -moz-box-shadow: 0 0 12px #000000; - -webkit-box-shadow: 0 0 12px #000000; - box-shadow: 0 0 12px #000000; - opacity: 1; - -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); - filter: alpha(opacity=100); - cursor: pointer; -} -#toast-container > .toast-info { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important; -} -#toast-container > .toast-error { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important; -} -#toast-container > .toast-success { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important; -} -#toast-container > .toast-warning { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important; -} -#toast-container.toast-top-center > div, -#toast-container.toast-bottom-center > div { - width: 300px; - margin-left: auto; - margin-right: auto; -} -#toast-container.toast-top-full-width > div, -#toast-container.toast-bottom-full-width > div { - width: 96%; - margin-left: auto; - margin-right: auto; -} -.toast { - background-color: #030303; -} -.toast-success { - background-color: #51A351; -} -.toast-error { - background-color: #BD362F; -} -.toast-info { - background-color: #2F96B4; -} -.toast-warning { - background-color: #F89406; -} -.toast-progress { - position: absolute; - left: 0; - bottom: 0; - height: 4px; - background-color: #000000; - opacity: 0.4; - -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40); - filter: alpha(opacity=40); -} -/*Responsive Design*/ -@media all and (max-width: 240px) { - #toast-container > div { - padding: 8px 8px 8px 50px; - width: 11em; - } - #toast-container > div.rtl { - padding: 8px 50px 8px 8px; - } - #toast-container .toast-close-button { - right: -0.2em; - top: -0.2em; - } - #toast-container .rtl .toast-close-button { - left: -0.2em; - right: 0.2em; - } -} -@media all and (min-width: 241px) and (max-width: 480px) { - #toast-container > div { - padding: 8px 8px 8px 50px; - width: 18em; - } - #toast-container > div.rtl { - padding: 8px 50px 8px 8px; - } - #toast-container .toast-close-button { - right: -0.2em; - top: -0.2em; - } - #toast-container .rtl .toast-close-button { - left: -0.2em; - right: 0.2em; - } -} -@media all and (min-width: 481px) and (max-width: 768px) { - #toast-container > div { - padding: 15px 15px 15px 50px; - width: 25em; - } - #toast-container > div.rtl { - padding: 15px 50px 15px 15px; - } -} \ No newline at end of file diff --git a/component/pear/css/module/frame.css b/component/pear/css/module/page.css similarity index 87% rename from component/pear/css/module/frame.css rename to component/pear/css/module/page.css index 09a1423f2b330d5c89a34bb11dddabb5e0f651d7..2131056b2371015c2a541e0c8835d02b850c3eb0 100644 --- a/component/pear/css/module/frame.css +++ b/component/pear/css/module/page.css @@ -1,11 +1,11 @@ -.pear-frame { +.pear-page { width: 100%; - height: 100%; position: relative; - overflow: hidden; + overflow-y: auto; + height: 100%; } -.pear-frame .dot { +.pear-page .dot { width: 5px; height: 24px; background-color: #5FB878; @@ -15,38 +15,34 @@ display: inline-block; } -.pear-frame .title { - position: absolute; - margin-top: 0px; - margin-left: 12px; - color: dimgray; - display: inline-block; - letter-spacing: 2px; -} - -.pear-frame .pear-frame-title { +.pear-page .pear-page-title { height: 40px; line-height: 40px; background-color: white; border: whitesmoke 1px solid; } -.pear-frame .pear-frame-content { +.pear-page .pear-page-content, +.pear-page .pear-page-content iframe { width: 100%; height: calc(100% - 0px) !important; } -.pear-frame-loading { +.pear-page .pear-page-content iframe { + height: calc(100% - 4px) !important; +} + +.pear-page-loading { position: absolute; display: none; width: 100%; height: calc(100% - 0px) !important; + background-color: #fff; top: 0px; z-index: 19; - background-color: #fff } -.pear-frame-loading.close { +.pear-page-loading.close { animation: close 1s; -webkit-animation: close 1s; animation-fill-mode: forwards; diff --git a/component/pear/css/module/popover.min.css b/component/pear/css/module/popover.min.css deleted file mode 100644 index 453a50fad00258cd432ec6a0a58b3634c7335ffe..0000000000000000000000000000000000000000 --- a/component/pear/css/module/popover.min.css +++ /dev/null @@ -1 +0,0 @@ -.webui-popover-content{display:none}.webui-popover-rtl{direction:rtl;text-align:right}.webui-popover{position:absolute;top:0;left:0;z-index:9999;display:none;min-width:50px;min-height:32px;padding:1px;text-align:left;white-space:normal;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.webui-popover.top,.webui-popover.top-left,.webui-popover.top-right{margin-top:-10px}.webui-popover.right,.webui-popover.right-top,.webui-popover.right-bottom{margin-left:10px}.webui-popover.bottom,.webui-popover.bottom-left,.webui-popover.bottom-right{margin-top:10px}.webui-popover.left,.webui-popover.left-top,.webui-popover.left-bottom{margin-left:-10px}.webui-popover.pop{-webkit-transform:scale(0.8);-o-transform:scale(0.8);transform:scale(0.8);-webkit-transition:transform .15s cubic-bezier(0.3,0,0,1.5);-o-transition:transform .15s cubic-bezier(0.3,0,0,1.5);transition:transform .15s cubic-bezier(0.3,0,0,1.5);opacity:0;filter:alpha(opacity=0)}.webui-popover.pop-out{-webkit-transition-property:"opacity,transform";-o-transition-property:"opacity,transform";transition-property:"opacity,transform";-webkit-transition:.15s linear;-o-transition:.15s linear;transition:.15s linear;opacity:0;filter:alpha(opacity=0)}.webui-popover.fade,.webui-popover.fade-out{-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear;opacity:0;filter:alpha(opacity=0)}.webui-popover.out{opacity:0;filter:alpha(opacity=0)}.webui-popover.in{-webkit-transform:none;-o-transform:none;transform:none;opacity:1;filter:alpha(opacity=100)}.webui-popover .webui-popover-content{padding:9px 14px;overflow:auto;display:block}.webui-popover .webui-popover-content>div:first-child{width:99%}.webui-popover-inner .close{font-family:arial;margin:8px 10px 0 0;float:right;font-size:16px;font-weight:700;line-height:16px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20);text-decoration:none}.webui-popover-inner .close:hover,.webui-popover-inner .close:focus{opacity:.5;filter:alpha(opacity=50)}.webui-popover-inner .close:after{content:"\00D7";width:.8em;height:.8em;padding:4px;position:relative}.webui-popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:700;line-height:18px;background-color:#fff;border-bottom:1px solid #f2f2f2;border-radius:5px 5px 0 0}.webui-popover-content{padding:9px 14px;overflow:auto;display:none}.webui-popover-inverse{background-color:#333;color:#eee}.webui-popover-inverse .webui-popover-title{background:#333;border-bottom:1px solid #3b3b3b;color:#eee}.webui-no-padding .webui-popover-content{padding:0}.webui-no-padding .list-group-item{border-right:none;border-left:none}.webui-no-padding .list-group-item:first-child{border-top:0}.webui-no-padding .list-group-item:last-child{border-bottom:0}.webui-popover>.webui-arrow,.webui-popover>.webui-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.webui-popover>.webui-arrow{border-width:11px}.webui-popover>.webui-arrow:after{border-width:10px;content:""}.webui-popover.top>.webui-arrow,.webui-popover.top-right>.webui-arrow,.webui-popover.top-left>.webui-arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.webui-popover.top>.webui-arrow:after,.webui-popover.top-right>.webui-arrow:after,.webui-popover.top-left>.webui-arrow:after{content:" ";bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.webui-popover.right>.webui-arrow,.webui-popover.right-top>.webui-arrow,.webui-popover.right-bottom>.webui-arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.webui-popover.right>.webui-arrow:after,.webui-popover.right-top>.webui-arrow:after,.webui-popover.right-bottom>.webui-arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.webui-popover.bottom>.webui-arrow,.webui-popover.bottom-right>.webui-arrow,.webui-popover.bottom-left>.webui-arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);border-top-width:0}.webui-popover.bottom>.webui-arrow:after,.webui-popover.bottom-right>.webui-arrow:after,.webui-popover.bottom-left>.webui-arrow:after{content:" ";top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.webui-popover.left>.webui-arrow,.webui-popover.left-top>.webui-arrow,.webui-popover.left-bottom>.webui-arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.webui-popover.left>.webui-arrow:after,.webui-popover.left-top>.webui-arrow:after,.webui-popover.left-bottom>.webui-arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.webui-popover-inverse.top>.webui-arrow,.webui-popover-inverse.top-left>.webui-arrow,.webui-popover-inverse.top-right>.webui-arrow,.webui-popover-inverse.top>.webui-arrow:after,.webui-popover-inverse.top-left>.webui-arrow:after,.webui-popover-inverse.top-right>.webui-arrow:after{border-top-color:#333}.webui-popover-inverse.right>.webui-arrow,.webui-popover-inverse.right-top>.webui-arrow,.webui-popover-inverse.right-bottom>.webui-arrow,.webui-popover-inverse.right>.webui-arrow:after,.webui-popover-inverse.right-top>.webui-arrow:after,.webui-popover-inverse.right-bottom>.webui-arrow:after{border-right-color:#333}.webui-popover-inverse.bottom>.webui-arrow,.webui-popover-inverse.bottom-left>.webui-arrow,.webui-popover-inverse.bottom-right>.webui-arrow,.webui-popover-inverse.bottom>.webui-arrow:after,.webui-popover-inverse.bottom-left>.webui-arrow:after,.webui-popover-inverse.bottom-right>.webui-arrow:after{border-bottom-color:#333}.webui-popover-inverse.left>.webui-arrow,.webui-popover-inverse.left-top>.webui-arrow,.webui-popover-inverse.left-bottom>.webui-arrow,.webui-popover-inverse.left>.webui-arrow:after,.webui-popover-inverse.left-top>.webui-arrow:after,.webui-popover-inverse.left-bottom>.webui-arrow:after{border-left-color:#333}.webui-popover i.icon-refresh:before{content:""}.webui-popover i.icon-refresh{display:block;width:30px;height:30px;font-size:20px;top:50%;left:50%;position:absolute;margin-left:-15px;margin-right:-15px;background:url(../img/loading.gif) no-repeat}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg)}}@keyframes rotate{100%{transform:rotate(360deg)}}.webui-popover-backdrop{background-color:rgba(0,0,0,.65);width:100%;height:100%;position:fixed;top:0;left:0;z-index:9998}.webui-popover .dropdown-menu{display:block;position:relative;top:0;border:none;box-shadow:none;float:none} \ No newline at end of file diff --git a/component/pear/css/module/select.css b/component/pear/css/module/select.css deleted file mode 100644 index 53285a6881bce8189bd05d23e4f2757f31ea8e43..0000000000000000000000000000000000000000 --- a/component/pear/css/module/select.css +++ /dev/null @@ -1,822 +0,0 @@ -/* formSelects多选css */ -select[xm-select] { - display: none !important; -} - -.xm-select-parent * { - margin: 0; - padding: 0; - font-family: "Helvetica Neue", Helvetica, "PingFang SC", 微软雅黑, Tahoma, Arial, sans-serif; - box-sizing: initial; -} - -.xm-select-parent { - text-align: left; -} - -.xm-select-parent select { - display: none; -} - -.xm-select-parent .xm-select-title { - position: relative; - min-height: 36px; -} - -.xm-select-parent .xm-input { - cursor: pointer; - border-radius: 2px; - border-width: 1px; - border-style: solid; - border-color: #E6E6E6; - display: block; - width: 100%; - box-sizing: border-box; - background-color: #FFF; - height: 36px; - line-height: 1.3; - padding-left: 10px; - outline: 0 -} - -.xm-select-parent .xm-select-sj { - display: inline-block; - width: 0; - height: 0; - border-style: dashed; - border-color: transparent; - overflow: hidden; - position: absolute; - right: 10px; - top: 50%; - margin-top: -3px; - cursor: pointer; - border-width: 6px; - border-top-color: #C2C2C2; - border-top-style: solid; - transition: all .3s; - -webkit-transition: all .3s -} - -.xm-select-parent .xm-form-selected .xm-select-sj { - margin-top: -9px; - transform: rotate(180deg) -} - -.xm-select-parent .xm-form-select dl { - display: none; - position: absolute; - left: 0; - top: 42px; - padding: 5px 0; - z-index: 999; - min-width: 100%; - border: 1px solid #d2d2d2; - max-height: 300px; - overflow-y: auto; - background-color: #fff; - border-radius: 2px; - box-shadow: 0 2px 4px rgba(0, 0, 0, .12); - box-sizing: border-box; - animation-fill-mode: both; - -webkit-animation-name: layui-upbit; - animation-name: layui-upbit; - -webkit-animation-duration: .3s; - animation-duration: .3s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both -} - -@-webkit-keyframes layui-upbit { - from { - -webkit-transform: translate3d(0, 30px, 0); - opacity: .3 - } - - to { - -webkit-transform: translate3d(0, 0, 0); - opacity: 1 - } -} - -@keyframes layui-upbit { - from { - transform: translate3d(0, 30px, 0); - opacity: .3 - } - - to { - transform: translate3d(0, 0, 0); - opacity: 1 - } -} - -.xm-select-parent .xm-form-selected dl { - display: block -} - -.xm-select-parent .xm-form-select dl dd, -.xm-select-parent .xm-form-select dl dt { - padding: 0 10px; - line-height: 36px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis -} - -.xm-select-parent .xm-form-select dl dd { - cursor: pointer; - height: 36px; -} - -.xm-select-parent .xm-form-select dl dd:hover { - background-color: #f2f2f2 -} - -.xm-select-parent .xm-form-select dl dt { - font-size: 12px; - color: #999 -} - -.layui-select-disabled .xm-dis-disabled { - border-color: #eee !important -} - -.xm-select-parent .xm-form-select dl .xm-select-tips { - padding-left: 10px !important; - color: #999; - font-size: 14px -} - -.xm-unselect { - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none -} - -.xm-form-checkbox { - position: relative; - display: block; - vertical-align: middle; - cursor: pointer; - font-size: 0; - -webkit-transition: .1s linear; - transition: .1s linear; - box-sizing: border-box; - height: auto !important; - line-height: normal !important; - border: none !important; - margin-right: 0; - padding-right: 0; - background: 0 0; -} - -.xm-form-checkbox>i { - color: #FFF; - font-size: 16px; - width: 16px; - height: 16px; - position: absolute; - top: 9px; - border: 1px solid #5FB878; - border-radius: 3px; - z-index: 2; -} - -.xm-form-checkbox:hover>i { - border-color: #5FB878; -} - -.xm-form-checkbox>span { - display: block; - position: relative; - padding: 0 15px 0 30px; - height: 100%; - font-size: 14px; - border-radius: 2px 0 0 2px; - background-color: #d2d2d2; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - background: 0 0; - color: #666; - line-height: 36px; -} - -.xm-select-parent dl { - width: 100%; -} - -.xm-select-parent dl dd { - position: relative; -} - -.xm-select-parent dl dd>i:not(.icon-sousuo) { - position: absolute; - right: 10px; - top: 0; - color: #AAAAAA; -} - -.xm-select-parent dl dd.xm-select-this div i { - border: none; - color: #5FB878; - font-size: 18px; -} - -.xm-select-parent dl dd.xm-select-this div i:after { - content: '\e613'; -} - -.xm-select-parent dl dd.xm-dis-disabled div i { - border-color: #C2C2C2; -} - -.xm-select-parent dl dd.xm-dis-disabled.xm-select-this div i { - color: #C2C2C2; -} - -.xm-select-radio div.xm-form-checkbox>i { - border-radius: 20px; -} - -.xm-select-parent dl.xm-select-radio dd.xm-select-this div i:after { - content: '\e62b'; -} - -.xm-dis-disabled, -.xm-dis-disabled:hover { - cursor: not-allowed !important -} - -.xm-form-select dl dd.xm-dis-disabled { - background-color: #fff !important -} - -.xm-form-select dl dd.xm-dis-disabled span { - color: #C2C2C2 -} - -.xm-form-select dl dd.xm-dis-disabled .xm-icon-yes { - border-color: #C2C2C2 -} - -.xm-select-parent { - position: relative; - -moz-user-select: none; - -ms-user-select: none; - -webkit-user-select: none -} - -.xm-select-parent .xm-select { - line-height: normal; - height: auto; - padding: 4px 10px 1px 10px; - overflow: hidden; - min-height: 36px; - left: 0; - z-index: 99; - position: absolute; - background: 0 0; - padding-right: 20px -} - -.xm-select-parent .xm-select:hover { - border-color: #C0C4CC -} - -.xm-select-parent .xm-select .xm-select-label { - display: inline-block; - margin: 0; - vertical-align: middle -} - -.xm-select-parent .xm-select-title div.xm-select-label>span { - position: relative; - padding: 2px 5px; - background-color: #5FB878; - border-radius: 2px; - color: #FFF; - display: inline-block; - line-height: 18px; - height: 18px; - margin: 2px 5px 2px 0; - cursor: initial; - user-select: none; - font-size: 14px; - padding-right: 25px; - -webkit-user-select: none; -} - -.xm-select-parent .xm-select-title div.xm-select-label>span i { - position: absolute; - margin-left: 8px; - font-size: 12px; - cursor: pointer; - line-height: 20px; -} - -.xm-select-parent .xm-select .xm-select-input { - border: none; - height: 28px; - background-color: transparent; - padding: 0; - vertical-align: middle; - display: inline-block; - width: 50px -} - -.xm-select-parent .xm-select--suffix input { - border: none -} - -.xm-form-selected .xm-select, -.xm-form-selected .xm-select:hover { - border-color: #67c23a !important -} - -.xm-select--suffix+div { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0 -} - -.xm-select-dis .xm-select--suffix+div { - z-index: 100; - cursor: no-drop !important; - opacity: .2; - background-color: #FFF; -} - -.xm-select-disabled, -.xm-select-disabled:hover { - color: #d2d2d2 !important; - cursor: not-allowed !important; - background-color: #fff -} - -.xm-select-none { - display: none; - margin: 5px 0; - text-align: center; -} - -.xm-select-none:hover { - background-color: #FFF !important -} - -.xm-select-empty { - display: block -} - -.xm-span-hide { - display: none !important; -} - -.layui-form-pane .xm-select, -.layui-form-pane .xm-select:hover { - border: none !important; - top: 0px -} - -.layui-form-pane .xm-select-title { - border: 1px solid #e6e6e6 !important -} - -.xm-select-hide { - display: none !important; -} - -div[xm-hg] .xm-select-label { - white-space: nowrap; - overflow: hidden; - position: absolute; - right: 30px; - left: 0; - padding-left: 10px; -} - -/* 颜色相关 */ -div[xm-select-skin] .xm-select-title div.xm-select-label>span { - border: 1px solid #67c23a -} - -div[xm-select-skin] .xm-select-title div.xm-select-label>span i:hover { - opacity: .8; - filter: alpha(opacity=80); - cursor: pointer -} - -div[xm-select-skin=default] .xm-select-title div.xm-select-label>span { - background-color: #F0F2F5; - color: #909399; - border: 1px solid #F0F2F5 -} - -div[xm-select-skin=default] .xm-select-title div.xm-select-label>span i { - color: #C0C4CC -} - -div[xm-select-skin=default] .xm-select-title div.xm-select-label>span i:before { - content: '\e60b'; - font-size: 16px; - margin-left: -3px; -} - -div[xm-select-skin=default] dl dd:not(.xm-dis-disabled) i { - border-color: #5FB878 -} - -div[xm-select-skin=default] dl dd.xm-select-this:not(.xm-dis-disabled) i { - color: #5FB878 -} - -div[xm-select-skin=default].xm-form-selected .xm-select, -div[xm-select-skin=default].xm-form-selected .xm-select:hover { - border-color: #C0C4CC!important -} - -div[xm-select-skin=primary] .xm-select-title div.xm-select-label>span { - background-color: #5FB878!important; - color: #FFF; - border: 1px solid #5FB878!important -} - -div[xm-select-skin=primary] .xm-select-title div.xm-select-label>span i { - background-color: #5FB878!important; - color: #FFF -} - -div[xm-select-skin=primary] dl dd:not(.xm-dis-disabled) i { - border-color: #5FB878!important -} - -div[xm-select-skin=primary] dl dd.xm-select-this:not(.xm-dis-disabled) i { - color: #5FB878!important -} - -div[xm-select-skin=primary].xm-form-selected .xm-select, -div[xm-select-skin=primary].xm-form-selected .xm-select:hover { - border-color: #5FB878!important -} - -div[xm-select-skin=normal] .xm-select-title div.xm-select-label>span { - background-color: #2D8CF0!important; - color: #FFF; - border: 1px solid #2D8CF0!important; -} - -div[xm-select-skin=normal] .xm-select-title div.xm-select-label>span i { - background-color: #2D8CF0!important; - color: #FFF -} - -div[xm-select-skin=normal] dl dd:not(.xm-dis-disabled) i { - border-color: #2D8CF0!important; -} - -div[xm-select-skin=normal] dl dd.xm-select-this:not(.xm-dis-disabled) i { - color:#2D8CF0 !important; -} - -div[xm-select-skin=normal].xm-form-selected .xm-select, -div[xm-select-skin=normal].xm-form-selected .xm-select:hover { - border-color:#2D8CF0!important; -} - -div[xm-select-skin=warm] .xm-select-title div.xm-select-label>span { - background-color: #e6a23c!important; - color: #FFF; - border: 1px solid #e6a23c!important; -} - -div[xm-select-skin=warm] .xm-select-title div.xm-select-label>span i { - background-color: #e6a23c!important; - color: #FFF -} - -div[xm-select-skin=warm] dl dd:not(.xm-dis-disabled) i { - border-color:#e6a23c!important -} - -div[xm-select-skin=warm] dl dd.xm-select-this:not(.xm-dis-disabled) i { - color:#e6a23c!important -} - -div[xm-select-skin=warm].xm-form-selected .xm-select, -div[xm-select-skin=warm].xm-form-selected .xm-select:hover { - border-color: #e6a23c!important -} - -div[xm-select-skin=danger] .xm-select-title div.xm-select-label>span { - background-color: #f56c6c!important; - color: #FFF; - border: 1px solid #f56c6c!important; -} - -div[xm-select-skin=danger] .xm-select-title div.xm-select-label>span i { - background-color:#f56c6c!important; - color: #FFF -} - -div[xm-select-skin=danger] dl dd:not(.xm-dis-disabled) i { - border-color: #f56c6c!important -} - -div[xm-select-skin=danger] dl dd.xm-select-this:not(.xm-dis-disabled) i { - color: #f56c6c!important -} - -div[xm-select-skin=danger].xm-form-selected .xm-select, -div[xm-select-skin=danger].xm-form-selected .xm-select:hover { - border-color: #f56c6c!important -} - - -/* 多选联动 */ -.xm-select-parent .layui-form-danger+.xm-select-title .xm-select { - border-color: #f56c6c!important -} - -.xm-select-linkage li { - padding: 10px 0px; - cursor: pointer; -} - -.xm-select-linkage li span { - padding-left: 20px; - padding-right: 30px; - display: inline-block; - height: 20px; - overflow: hidden; - text-overflow: ellipsis; -} - -.xm-select-linkage li.xm-select-this span { - border-left: 5px solid #009688; - color: #009688; - padding-left: 15px; -} - -.xm-select-linkage-group { - position: absolute; - left: 0; - top: 0; - right: 0; - bottom: 0; - overflow-x: hidden; - overflow-y: auto; -} - -.xm-select-linkage-group li:hover { - border-left: 1px solid #009688; -} - -.xm-select-linkage-group li:hover span { - padding-left: 19px; -} - -.xm-select-linkage-group li.xm-select-this:hover span { - padding-left: 15px; - border-left-width: 4px; -} - -.xm-select-linkage-group:nth-child(4n+1) { - background-color: #EFEFEF; - left: 0; -} - -.xm-select-linkage-group:nth-child(4n+1) li.xm-select-active { - background-color: #F5F5F5; -} - -.xm-select-linkage-group:nth-child(4n+2) { - background-color: #F5F5F5; - left: 100px; -} - -.xm-select-linkage-group:nth-child(4n+3) li.xm-select-active { - background-color: #FAFAFA; -} - -.xm-select-linkage-group:nth-child(4n+3) { - background-color: #FAFAFA; - left: 200px; -} - -.xm-select-linkage-group:nth-child(4n+3) li.xm-select-active { - background-color: #FFFFFF; -} - -.xm-select-linkage-group:nth-child(4n+4) { - background-color: #FFFFFF; - left: 300px; -} - -.xm-select-linkage-group:nth-child(4n+4) li.xm-select-active { - background-color: #EFEFEF; -} - -.xm-select-linkage li { - list-style: none; -} - -.xm-select-linkage-hide { - display: none; -} - -.xm-select-linkage-show { - display: block; -} - -div[xm-select-skin='default'] .xm-select-linkage li.xm-select-this span { - border-left-color: #5FB878; - color: #5FB878; -} - -div[xm-select-skin='default'] .xm-select-linkage-group li:hover { - border-left-color: #5FB878; -} - -div[xm-select-skin='primary'] .xm-select-linkage li.xm-select-this span { - border-left-color: #1E9FFF; - color: #1E9FFF; -} - -div[xm-select-skin='primary'] .xm-select-linkage-group li:hover { - border-left-color: #1E9FFF; -} - -div[xm-select-skin='normal'] .xm-select-linkage li.xm-select-this span { - border-left-color: #1E9FFF; - color: #1E9FFF; -} - -div[xm-select-skin='normal'] .xm-select-linkage-group li:hover { - border-left-color: #1E9FFF; -} - -div[xm-select-skin='warm'] .xm-select-linkage li.xm-select-this span { - border-left-color: #FFB800; - color: #FFB800; -} - -div[xm-select-skin='warm'] .xm-select-linkage-group li:hover { - border-left-color: #FFB800; -} - -div[xm-select-skin='danger'] .xm-select-linkage li.xm-select-this span { - border-left-color: #FF5722; - color: #FF5722; -} - -div[xm-select-skin='danger'] .xm-select-linkage-group li:hover { - border-left-color: #FF5722; -} - - -/* 快捷操作 */ -.xm-select-tips[style]:hover { - background-color: #FFF !important; -} - -.xm-select-parent dd>.xm-cz { - position: absolute; - top: 0px; - right: 10px; -} - -.xm-select-parent dd>.xm-cz-group { - margin-right: 30px; - border-right: 2px solid #ddd; - height: 16px; - margin-top: 10px; - line-height: 16px; - overflow: hidden; -} - -.xm-select-parent dd>.xm-cz-group .xm-cz { - display: inline-block; - margin-right: 30px; -} - -.xm-select-parent dd>.xm-cz-group .xm-cz i { - margin-right: 10px; -} - -.xm-select-parent dd>.xm-cz-group[show='name'] .xm-cz i { - display: none; -} - -.xm-select-parent dd>.xm-cz-group[show='icon'] .xm-cz span { - display: none; -} - -.xm-select-parent dd .xm-cz:hover { - color: #009688; -} - -div[xm-select-skin='default'] dd .xm-cz:hover { - color: #C0C4CC; -} - -div[xm-select-skin='primary'] dd .xm-cz:hover { - color: #009688; -} - -div[xm-select-skin='normal'] dd .xm-cz:hover { - color: #1E9FFF; -} - -div[xm-select-skin='warm'] dd .xm-cz:hover { - color: #FFB800; -} - -div[xm-select-skin='danger'] dd .xm-cz:hover { - color: #FF5722; -} - -.xm-select-tips .xm-input { - border: none; - border-bottom: 1px solid #E6E6E6; - padding-left: 27px; -} - -.xm-select-tips .icon-sousuo { - position: absolute; -} - -.xm-select-tips.xm-dl-input { - display: none; -} - -div[xm-select-search-type="1"] .xm-select-tips.xm-dl-input { - display: block; -} - -div[xm-select-search-type="1"] .xm-select .xm-select-input { - display: none !important; -} - -@font-face { - font-family: "xm-iconfont"; - src: url('//at.alicdn.com/t/font_792691_qxv28s6g1l9.eot?t=1534240067831'); - /* IE9*/ - src: url('//at.alicdn.com/t/font_792691_qxv28s6g1l9.eot?t=1534240067831#iefix') format('embedded-opentype'), - /* IE6-IE8 */ - url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAsYAAsAAAAAEQwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8ukovY21hcAAAAYAAAACrAAACPBtV6wxnbHlmAAACLAAABnEAAAmMovtEvWhlYWQAAAigAAAAMQAAADYSctBCaGhlYQAACNQAAAAgAAAAJAgBA69obXR4AAAI9AAAABsAAAAwMCX//WxvY2EAAAkQAAAAGgAAABoN8gwubWF4cAAACSwAAAAeAAAAIAEiAM9uYW1lAAAJTAAAAUUAAAJtPlT+fXBvc3QAAAqUAAAAhAAAALJ1LunfeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWacwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByeMbwwZ27438AQw9zMcAQozAiSAwDk4AxmeJzlks0JwzAMhZ8bN/1xD4GU0h2Se26BbJMJOkkn6KmTPbJF8mT5UGg3qMRn0EPIRs8A9gAq0YsIhDcCLF5SQ9YrnLMe8VB9RSMlMjCxYcueIyfOy7CuAFHU7lP9iqApt5L3ksBJbzlgZ9PVkXDUvbWa6x8T/i0u+XyWKtmmHW0NDI55yeRok2DjaKdg65jX7Bzzm71jXnN08vzJkQvg7Ng/WAYH9Qb3wzM/AHicjVVvbFzFEd/Zfbv7/vn9uXf33vl8Pt/dO99BHOzEZ9/DKTImRS0KjUoLDUFCjtpCMGkT1D9qldQmhkiUSv2G1BBB1VYqilGREOIDViWEGzttqkpI/cAXqyL5gFRALVIF+VCJe9fZd+fEpR/o6d3s7G9mZ2dmZ3aJIKR3h0ZYmVgkIjGZJV8mDxECtenOTDOu1UU+hJoD+TCqzcNMk2V8O5OCbDVRPgZhEt4JCNTZ/4HA3+DfuWIxl8pcFFErG3K7oD7fvev8UaMUmEu259lrRjBsfs6cLhYbRfzSbSjGRVAkfQYihUXsyPkHTVyyZDNmXzSHg3Tl+aPKxpJFqbWGdtLl8w8iYDxuDTQIx7yc1YCdIx7Jk3HSwbwQwGBcyMKZVtG0ZCuJxjFJBb+foMSfhJaPOSr4FYgwSwqIx2MHJALtAdBi/7xcSMJL+fxmmBS2guD61tZm96X02mgcj0J1NAaIR9UMmhXIV24FuLUC71+r1AEmK1AYrQHUK/Tly/m8MrOZz2+FSf7jzc3NK9XR9F2lVq+gmRp0r+HK9B+VJmR263Rgd7ALwR/FOFfx/FeJS0YxQh9drakgMJhaBVizkwgqWxLD6eQ0Qo8f7p44fJziSH9x+PjLZUO+/jZ9+K35X37ljn/Rv+yW4Ziuf2nl4PfS5/LrP47OHTsFJULYjf369UZAEBmSqEOSJmG4Me6LeznA0BFkcDoJlGynVzmH2vY21DhPr25v9DjvbfTp2TXG1s5mlK0q4S7lT++6obbRox/s6CHF2LMEsHvoFfSFQIKnKQMZJVFCD6WH0p0PVvvcRx8uph8eUks0jOFNtskOkpDsJ18k9+NqVRg3qqMCSSerjyRuYUi1/vFH7YIqikGVcD+ehFl/pqPSPKZ6DG6mHisljFhBFvU/PoRkSNd/JHO6Ja5JOXcfwIGJbm/igBq/hn8Kfb57YbYUxyX4cwkLKH1u4gD9GVSL6USxCjjCO2p8VdcvH9XRYIQWqUblu3pR/v2BvXMAc3tTmJiDAQ895B9NL0C9BFdKqqRKczDX/Whg7O1irVbcqZ8/sbfYBOZwihC+6wSDzszUf+dF7rRO1O+fKaDO+nXOr6+vf8L5J44Qe4UvnlyRntwrxMoKzpFdeRJBNb9dGyiur1+nE59R+uwi9M1G395jb9KP0bcK2YM9nJB5cojcS75OFskxclzdc+pW699z8iYbtf14BGKf77ruZNyXKC0e50OEBI+V/Aug5Dex/9WjJfipuqnS00gfybjXbNe1f762tXmRPp3Bdl/l6g5JXyqXR0bK8J3PR+jvwYs8/GBnTM+kr8FX4ZknwC16XtG9iH9QfNn1vDHPe2GAj3ieV3XdF2+IPdeteh62Ra+HfQrsKWKSBtlHSOBgM7KkKQBLWnZoq1mVwotCLRGhOtSkMzMuqq2ml3SqUehdnZtynbtPLB88/Dy9dDrYVzoy/MTT6Svnlpd/AHueon5wpnGsEae/PZm+d3Jp6SSUTy7R3xw4f9/B5RN3O+5t3VNncjm6Cnt+uLx8DpedGj4yvD84HceNxTcG6ku4VPmZ9n6nNdj95BHyB3IJKxBPsKm6rpn4QopmqzlFm1MwqdxO5rPGnIc7aSfCGg1Vqyo6nUlQhnh7WiFhXzgGhVC4qjPRki9xdGCc4zXeSWb9BG1ktlqz2Q5Y7S2sIJfivkpVKCCDpyCWdbQzECj76qMVqvyJ/LxyI2rTv1bTC25lSM9xAUJ4Lc+U0wXTsKXDmaA8tHX+hvDt4Wa9IHLcMUBz9VwpL4xi2aGasAPPKNUbbmD/2jAtk0uXY4eJx8zRgj9iAnVNt5X+BL5vlHTOaiOmG7g6+7ZBNUOaefNXuJF3u25RjVvBLeW8E4wV7ZJBpbAXXGnqrwgupWVTAKqZjq5HbW44fMguNJhgwmw8oOk8GCqE8F3GhLB0uS/UDVt4lgjtqGxK/rpwuaDAqKHZNuWmJjVKuWUxbpg2B9DtoRdN3TKF9B0hw4p41C5i3CI9w4civP3aQLlmLMK3wpJpaI7BvmlhPtH3nPWCKQAdE2hK9zyuUeAm921qCA2kvqY8N1yDMq4beJlG+4XQqHDCQnqPlJIyyN579S4tIGcRv/82BbFfK9SgnVHkZzMeaSQjqR5/fP5XF2Chh+sW0g0gn27snqXv3/bsszsfJbCAIiTdjRTVCBL6jV0K5D8H/8xVAAAAeJxjYGRgYADi16c/vIvnt/nKwM3CAALXZxxzhtH///23YVFhbgZyORiYQKIAm34OJQAAAHicY2BkYGBu+N/AEMOi/P/f//8sKgxAERTAAwCmuAa3eJxjYWBgYAFhRiiNFf//z6L8/x+IDQAkCQRQAAAAAAAAjAEAATgBfgGaAiACbgMMA2AEhATGAAB4nGNgZGBg4GE4DMQgwATEXEDIwPAfzGcAAB2tAfIAAHicZY9NTsMwEIVf+gekEqqoYIfkBWIBKP0Rq25YVGr3XXTfpk6bKokjx63UA3AejsAJOALcgDvwSCebNpbH37x5Y08A3OAHHo7fLfeRPVwyO3INF7gXrlN/EG6QX4SbaONVuEX9TdjHM6bCbXRheYPXuGL2hHdhDx18CNdwjU/hOvUv4Qb5W7iJO/wKt9Dx6sI+5l5XuI1HL/bHVi+cXqnlQcWhySKTOb+CmV7vkoWt0uqca1vEJlODoF9JU51pW91T7NdD5yIVWZOqCas6SYzKrdnq0AUb5/JRrxeJHoQm5Vhj/rbGAo5xBYUlDowxQhhkiMro6DtVZvSvsUPCXntWPc3ndFsU1P9zhQEC9M9cU7qy0nk6T4E9XxtSdXQrbsuelDSRXs1JErJCXta2VELqATZlV44RelzRiT8oZ0j/AAlabsgAAAB4nG2L3QqCQBCFZ9RWU7sOfAeh8IFi3N10EHYUG1p8+gSjqz44F+cPEjgo4T81Jphihic0mGOBZyyxwhovUCxKIe4ylthRuDqV+I22UcLQ6+QH4ubWdZZkU3m4o/0tUqtSvT33TPLits12fzc+zhRcvoquo0o281OLhcMw7Q+AD8sULE0=') format('woff'), - url('//at.alicdn.com/t/font_792691_qxv28s6g1l9.ttf?t=1534240067831') format('truetype'), - /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ - url('//at.alicdn.com/t/font_792691_qxv28s6g1l9.svg?t=1534240067831#iconfont') format('svg'); - /* iOS 4.1- */ -} - -.xm-iconfont { - font-family: "xm-iconfont" !important; - font-size: 16px; - font-style: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.icon-quanxuan:before { - content: "\e62c"; -} - -.icon-caidan:before { - content: "\e610"; -} - -.icon-fanxuan:before { - content: "\e837"; -} - -.icon-pifu:before { - content: "\e668"; -} - -.icon-qingkong:before { - content: "\e63e"; -} - -.icon-sousuo:before { - content: "\e600"; -} - -.icon-danx:before { - content: "\e62b"; -} - -.icon-duox:before { - content: "\e613"; -} - -.icon-close:before { - content: "\e601"; -} - -.icon-expand:before { - content: "\e641"; -} diff --git a/component/pear/css/module/step.css b/component/pear/css/module/step.css deleted file mode 100644 index 63946620ea99f1c8aca47b601dc1663e5d20dbc1..0000000000000000000000000000000000000000 --- a/component/pear/css/module/step.css +++ /dev/null @@ -1,88 +0,0 @@ -.lay-step { - font-size: 0; - margin: 0 auto; - max-width: 100%; - width: 60%; - padding-left: 15%; - -} - -.step-item { - display: inline-block; - line-height: 35px; - position: relative; - font-size: 15px; - vertical-align: top; -} - -.step-item-tail { - width: 100%; - padding: 0 10px; - position: absolute; - left: 0; - top: 13px; -} - -.step-item-tail i { - display: inline-block; - width: 100%; - height: 3px; - margin-top: 4px; - vertical-align: top; - background: #5FB878; - position: relative; -} - -.step-item-tail .step-item-tail-done { - background: #5FB878; - height: 3px; - margin-top: 4px; -} - -.step-item-head { - position: relative; - display: inline-block; - height: 35px; - width: 35px; - text-align: center; - vertical-align: top; - color: #5FB878; - border: 3px solid #5FB878; - border-radius: 50%; - background: #ffffff; -} - -.step-item-head.step-item-head-active { - background: #5FB878; - color: #ffffff; -} - -.step-item-main { - display: block; - position: relative; - margin-left: -50%; - margin-right: 50%; - padding-left: 26px; - text-align: center; -} - -.step-item-main-title { - font-weight: bolder; - color: #555555; -} - -.step-item-main-desc { - color: #aaaaaa; -} - -.step-item-main-time { - color: #aaaaaa; -} - -.lay-step + [carousel-item]:before { - display: none; -} - -.lay-step + [carousel-item] > * { - background-color: transparent; -} \ No newline at end of file diff --git a/component/pear/css/module/tab.css b/component/pear/css/module/tabPage.css similarity index 62% rename from component/pear/css/module/tab.css rename to component/pear/css/module/tabPage.css index 3161f3e4449006f78b43ee38ed6124bb3ded9626..589aea6b4c957b2d5662a7607ec4be59147c2eb0 100644 --- a/component/pear/css/module/tab.css +++ b/component/pear/css/module/tabPage.css @@ -1,24 +1,26 @@ -.pear-tab { +.pear-tab-page { margin: 0px; overflow: hidden; height: 100% !important; } -.pear-tab .layui-tab-content { +.pear-tab-page .layui-tab-content { height: calc(100% - 42px) !important; } -.pear-tab .layui-tab-content .layui-tab-item { +.pear-tab-page .layui-tab-content .layui-tab-item { + overflow-y: auto; height: 100%; } -.pear-tab-menu{ - box-shadow: 0 2px 8px #f0f1f2!important; - border: 1px solid whitesmoke!important; +.pear-tab-page-menu{ + box-shadow: none; border-radius: 4px!important; + overflow: hidden; + box-shadow: 2px 0 6px rgba(0, 21, 41, .10); } -.pear-tab-menu .item{ +.pear-tab-page-menu .item{ height: 20px; padding-left: 18px; padding-top: 7px; @@ -28,36 +30,40 @@ line-height: 20px; cursor:pointer; } -.pear-tab-menu .item:hover{ - background: #36b368; +.pear-tab-page-menu .item:hover{ + background: var(--global-primary-color); color: white; } -.pear-tab .layui-tab-content { +.pear-tab-page .layui-tab-content { padding: 0px; } -.pear-tab .layui-tab-title { +.pear-tab-page > .layui-tab-title { border: none; border: 1px solid whitesmoke; background-color: white; } -.pear-tab .layui-tab-title li { +.pear-tab-page > .layui-tab-title li { border-right: 1px solid whitesmoke; color: dimgray; font-size: 13.5px; } -.pear-tab .layui-tab-title .layui-tab-bar { +.pear-tab-page > .layui-tab-title .layui-tab-bar { + display: none; +} + +.pear-tab-page .layui-nav-more { display: none; } -.pear-tab .layui-tab-title .layui-this:after { +.pear-tab-page > .layui-tab-title .layui-this:after { display: none; } -.pear-tab .layui-tab-title .pear-tab-active { +.pear-tab-page > .layui-tab-title .pear-tab-page-active { display: inline-block; background-color: lightgray; width: 8px; @@ -66,97 +72,97 @@ margin-right: 12px; } -.pear-tab .layui-tab-title .layui-this .pear-tab-active { - background-color: #5FB878; +.pear-tab-page > .layui-tab-title .layui-this .pear-tab-page-active { + background-color: var(--global-primary-color) !important; } -.pear-tab .layui-tab-title .layui-tab-close:hover { +.pear-tab-page > .layui-tab-title .layui-tab-close:hover { background-color: white; line-height: 19px; color: gray; } -.pear-tab .layui-tab-title .disable-close+.layui-tab-close { +.pear-tab-page > .layui-tab-title .disable-close+.layui-tab-close { display: none; } -.pear-tab .layui-tab-title .able-close+.layui-tab-close { +.pear-tab-page > .layui-tab-title .able-close+.layui-tab-close { display: inline-block; } -.pear-tab .layui-tab-close{ +.pear-tab-page .layui-tab-close{ font-size: 13px; } -.pear-tab .layui-tab-control>li { +.pear-tab-page .layui-tab-control>li { position: absolute; top: 0px; height: 40px; line-height: 40px; width: 40px; - text-align: center; background-color: white; border-top: whitesmoke 1px solid; border-bottom: whitesmoke 1px solid; + text-align: center; } -.pear-tab .layui-tab-prev { +.pear-tab-page .layui-tab-prev { left: 0px; border-right: whitesmoke 1px solid; } -.pear-tab .layui-tab-next { +.pear-tab-page .layui-tab-next { right: 40px; border-left: 1px solid whitesmoke; } -.pear-tab .layui-tab-tool { +.pear-tab-page .layui-tab-tool { right: 0px; border-left: 1px solid whitesmoke; } -.pear-tab .layui-tab-control .layui-tab-tool, -.pear-tab .layui-tab-control .layui-tab-prev, -.pear-tab .layui-tab-control .layui-tab-next { +.pear-tab-page .layui-tab-control .layui-tab-tool, +.pear-tab-page .layui-tab-control .layui-tab-prev, +.pear-tab-page .layui-tab-control .layui-tab-next { display: none; } -.pear-tab.layui-tab-roll .layui-tab-control .layui-tab-prev, -.pear-tab.layui-tab-roll .layui-tab-control .layui-tab-next { +.pear-tab-page.layui-tab-roll .layui-tab-control .layui-tab-prev, +.pear-tab-page.layui-tab-roll .layui-tab-control .layui-tab-next { display: block; } -.pear-tab.layui-tab-roll .layui-tab-control .layui-tab-next { +.pear-tab-page.layui-tab-roll .layui-tab-control .layui-tab-next { right: 0px; border-right: 1px solid whitesmoke; } -.pear-tab.layui-tab-roll .layui-tab-title { +.pear-tab-page.layui-tab-roll .layui-tab-title { padding-left: 40px; padding-right: 40px; } -.pear-tab.layui-tab-tool .layui-tab-control .layui-tab-tool { +.pear-tab-page.layui-tab-tool .layui-tab-control .layui-tab-tool { display: block; } -.pear-tab.layui-tab-tool .layui-tab-title { +.pear-tab-page.layui-tab-tool .layui-tab-title { padding-left: 0px; padding-right: 40px; } -.pear-tab.layui-tab-rollTool .layui-tab-title { +.pear-tab-page.layui-tab-rollTool > .layui-tab-title { padding-left: 40px; padding-right: 80px; } -.pear-tab.layui-tab-rollTool .layui-tab-control .layui-tab-prev, -.pear-tab.layui-tab-rollTool .layui-tab-control .layui-tab-next, -.pear-tab.layui-tab-rollTool .layui-tab-control .layui-tab-tool { +.pear-tab-page.layui-tab-rollTool .layui-tab-control .layui-tab-prev, +.pear-tab-page.layui-tab-rollTool .layui-tab-control .layui-tab-next, +.pear-tab-page.layui-tab-rollTool .layui-tab-control .layui-tab-tool { display: block; } -.pear-tab .layui-tab-tool .layui-nav { +.pear-tab-page .layui-tab-tool .layui-nav { position: absolute; height: 43px !important; top: 0; @@ -166,15 +172,15 @@ background: 0 0; } -.pear-tab .layui-tab-tool .layui-nav-item { +.pear-tab-page .layui-tab-tool .layui-nav-item { height: 40px; } -.pear-tab .layui-tab-tool .layui-nav-bar { +.pear-tab-page .layui-tab-tool .layui-nav-bar { display: none; } -.pear-tab .layui-tab-tool .layui-nav-child { +.pear-tab-page .layui-tab-tool .layui-nav-child { left: auto; top: 45px; right: 3px; @@ -182,11 +188,11 @@ border: 1px solid whitesmoke; } -.pear-tab .layui-tab-tool .layui-this a { +.pear-tab-page .layui-tab-tool .layui-this a { background-color: #009688; } -.pear-tab-loading { +.pear-tab-page-loading { position: absolute; display: none; width: 100%; @@ -196,7 +202,7 @@ background-color: #fff } -.pear-tab-loading.close { +.pear-tab-page-loading.close { animation: close 1s; -webkit-animation: close 1s; animation-fill-mode: forwards; @@ -213,7 +219,7 @@ .ball-loader>span, .signal-loader>span { - background-color: #4aca85 !important; + background-color: var(--global-primary-color) !important; display: inline-block } diff --git a/component/pear/css/module/table.css b/component/pear/css/module/table.css deleted file mode 100644 index a3c7210486c57af3ae2b71eecc0f9a5f4461abe3..0000000000000000000000000000000000000000 --- a/component/pear/css/module/table.css +++ /dev/null @@ -1,112 +0,0 @@ -.layui-table-tool-panel { - margin-top: 10px !important; -} - -.layui-table-tool { - background-color: white !important; - border-bottom: none !important; - padding-bottom: 10px !important; -} - -.layui-table-header, -.layui-table-header th { - background-color: white !important; -} - -.layui-table-view { - border: none !important; -} - -/** 兼容 layui 2.7.0 升级 table cell 单元格边距的调整 */ -.layui-table-view .layui-table td, .layui-table-view .layui-table th { - padding: 5px 0px; -} - -.layui-table-cell { - height: 34px; - line-height: 34px; -} - -.layui-table .layui-laypage .layui-laypage-curr .layui-laypage-em { - border-radius: 50px !important; - border-radius: 4px!important; - background-color: #5FB878 !important; -} - -.layui-table tr { - height: 34px; - line-height: 34px; -} - -.layui-table-cell { - padding-top: 1px !important; -} - -.layui-table-box * { - font-size: 13px !important; -} - -.layui-table-page .layui-laypage input { - width: 40px; - height: 26.5px!important; -} - -.layui-table-box button { - font-size: 15px !important; -} - -.layui-table-cell .pear-btn { - margin-right: 5px; -} - -.layui-table-cell .pear-btn:last-child { - margin-right: 0px; -} - -.layui-table-page { - height: 45px !important; - padding-top: 10px !important; -} - -.layui-table-tool .layui-inline { - border-radius: 3px !important; - width: 30px !important; - height: 30px !important; - line-height: 20px !important; -} - -.layui-table-view .layui-table[lay-skin=line] { - border: none !important; -} - -.layui-table-init .layui-icon{ - font-size: 40px !important; - margin: -15px 0 0 -15px; -} - -.layui-table-body::-webkit-scrollbar { - width: 0px; - height: 0px; -} - -.layui-table-body::-webkit-scrollbar { - width: 6px; - height: 6px; -} -.layui-table-body::-webkit-scrollbar-track { - background: white; - border-radius: 2px; -} - -.layui-table-body::-webkit-scrollbar-thumb { - background: #E6E6E6; - border-radius: 2px; -} - -.layui-table-body::-webkit-scrollbar-thumb:hover { - background: #E6E6E6; -} - -.layui-table-body::-webkit-scrollbar-corner { - background: #f6f6f6; -} diff --git a/component/pear/css/module/tag.css b/component/pear/css/module/tag.css deleted file mode 100644 index 7c244bc2094a5dab4eb72ff1ca47369414706a9d..0000000000000000000000000000000000000000 --- a/component/pear/css/module/tag.css +++ /dev/null @@ -1,85 +0,0 @@ -.input-new-tag { - width: 90px; -} - -.input-new-tag input { - height: 100%!important; - border: none; - padding-left: 0px; -} - -.tag .layui-btn .tag-close:hover { - border-radius: 2px; - color: #fff; -} - -.tag .layui-btn .tag-close { - margin-left: 8px; - transition: all .2s; - -webkit-transition: all .2s; -} -.tag-item { - background-color: #5FB878; - color: white; - border: none; -} - -.tag-item:hover { - - color: white; - -} -.tag-item-normal { - background-color: #5FB878; - color: white; - border: none; -} - -.tag-item-warm { - background-color: #f6ad55; - color: white; - border: none; -} - -.tag-item-danger { - background-color: #f56c6c; - color: white; - border: none; -} - -.tag-item-dark { - background-color: #525252; - color: white; - border: none; -} - -.tag-item-primary { - background-color: white !important; - color: dimgray; - border: 1px solid dimgray; -} - -.tag-item-normal:hover { - - color: white !important; -} - -.tag-item-warm:hover { - - color: white; -} - -.tag-item-danger:hover { - - color: white; -} - -.tag-item-dark:hover { - - color: white; -} - -.tag-item-primary:hover { - color: dimgray; - border: 1px solid dimgray; -} \ No newline at end of file diff --git a/component/pear/css/module/topBar.css b/component/pear/css/module/topBar.css deleted file mode 100644 index c3d5becac6bcd414ba7ce409560d3742b872a005..0000000000000000000000000000000000000000 --- a/component/pear/css/module/topBar.css +++ /dev/null @@ -1,5 +0,0 @@ -.layui-fixbar li { - border-radius: 4px; - background-color: #5FB878; - color: white; -} diff --git a/component/pear/css/module/treetable.css b/component/pear/css/module/treetable.css deleted file mode 100644 index da849b89ae83d09e7c8ee5c73954df9ed9cb9ce1..0000000000000000000000000000000000000000 --- a/component/pear/css/module/treetable.css +++ /dev/null @@ -1,25 +0,0 @@ -.treeTable-icon i:last-child{ - display: none!important; -} - -.treeTable-empty{ - margin-left: -3px; -} -.treeTable-empty { - width: 20px; - display: inline-block; -} - -.treeTable-icon { - cursor: pointer; -} - -.treeTable-icon .layui-icon-triangle-d:before { - content: "\e623"; -} - -.treeTable-icon.open .layui-icon-triangle-d:before { - content: "\e625"; - background-color: transparent; -} - diff --git a/component/pear/css/pear.css b/component/pear/css/pear.css index c43e364a3a128bf83fce217e1e03f55e1fe6ebdc..62b55bf38d1e386c523def51445136be3aceee10 100644 --- a/component/pear/css/pear.css +++ b/component/pear/css/pear.css @@ -1,30 +1,10 @@ @import url("../../layui/css/layui.css"); @import url("../font/iconfont.css"); - -@import url("module/dtree/font/dtreefont.css"); -@import url("module/dtree/dtree.css"); -@import url("module/iconPicker.css"); -@import url("module/treetable.css"); @import url("module/nprogress.css"); -@import url("module/message.css"); -@import url("module/cropper.css"); -@import url("module/loading.css"); -@import url("module/topBar.css"); -@import url("module/select.css"); -@import url("module/layout.css"); -@import url("module/notice.css"); -@import url("module/button.css"); -@import url("module/table.css"); -@import url("module/frame.css"); -@import url("module/layer.css"); -@import url("module/toast.css"); +@import url("module/messageCenter.css"); +@import url("module/global.css"); @import url("module/menu.css"); -@import url("module/form.css"); -@import url("module/link.css"); -@import url("module/code.css"); -@import url("module/step.css"); -@import url("module/card.css"); -@import url("module/tab.css"); -@import url("module/tag.css"); -@import url("module/fullscreen.css"); -@import url("module/popover.min.css"); \ No newline at end of file +@import url("module/menuSearch.css"); +@import url("module/page.css"); +@import url("module/tabPage.css"); +@import url("module/toast.css"); \ No newline at end of file diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index b8299337aefdf8bdd356c7e4a5acd26002c91632..f0e5bcfa72cba57b220e53da845f55c2e859928a 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -1,996 +1,914 @@ -layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'menu', 'frame', 'theme', 'convert','fullscreen'], - function(exports) { - "use strict"; - - var $ = layui.jquery, - form = layui.form, - element = layui.element, - yaml = layui.yaml, - pearTab = layui.tab, - convert = layui.convert, - pearMenu = layui.menu, - pearFrame = layui.frame, - pearTheme = layui.theme, - message = layui.message, - fullscreen=layui.fullscreen; - - var bodyFrame; - var sideMenu; - var bodyTab; - var config; - var logout = function() {}; - var msgInstance; - var body = $('body'); - - var pearAdmin = new function() { - - var configType = 'yml'; - var configPath = 'pear.config.yml'; - - this.setConfigPath = function(path) { - configPath = path; - } - - this.setConfigType = function(type) { - configType = type; - } - - this.render = function(initConfig) { - if (initConfig !== undefined) { - applyConfig(initConfig); - } else { - applyConfig(pearAdmin.readConfig()); - } - } - - this.readConfig = function() { - if (configType === "yml") { - return yaml.load(configPath); - } else { - var data; - $.ajax({ - url: configPath, - type: 'get', - dataType: 'json', - async: false, - success: function(result) { - data = result; - } - }) - return data; - } - } - - this.messageRender = function(option) { - var option = { - elem: '.message', - url: option.header.message, - height: '250px' - }; - msgInstance = message.render(option); - } - - this.logoRender = function(param) { - $(".layui-logo .logo").attr("src", param.logo.image); - $(".layui-logo .title").html(param.logo.title); - } - - this.menuRender = function(param) { - sideMenu = pearMenu.render({ - elem: 'sideMenu', - async: param.menu.async !== undefined ? param.menu.async : true, - theme: "dark-theme", - height: '100%', - method: param.menu.method, - control: isControl(param) === 'true' || isControl(param) === true ? 'control' : false, // control - controlWidth: param.menu.controlWidth, - defaultMenu: 0, - accordion: param.menu.accordion, - url: param.menu.data, - data: param.menu.data, - parseData: false, - change: function() { - compatible(); - }, - done: function() { - sideMenu.isCollapse = param.menu.collapse; - sideMenu.selectItem(param.menu.select); - pearAdmin.collapse(param); - } - }); - } - - this.bodyRender = function(param) { - - body.on("click", ".refresh", function() { - refresh(); - }) - - if (isMuiltTab(param) === "true" || isMuiltTab(param) === true) { - bodyTab = pearTab.render({ - elem: 'content', - roll: true, - tool: true, - width: '100%', - height: '100%', - session: param.tab.session, - index: 0, - tabMax: param.tab.max, - preload: param.tab.preload, - closeEvent: function(id) { - sideMenu.selectItem(id); - }, - data: [{ - id: param.tab.index.id, - url: param.tab.index.href, - title: param.tab.index.title, - close: false - }], - success: function(id) { - if (param.tab.session) { - setTimeout(function() { - sideMenu.selectItem(id); - bodyTab.positionTab(); - }, 500) - } - } - }); - - bodyTab.click(function(id) { - if (!param.tab.keepState) { - bodyTab.refresh(false); - } - bodyTab.positionTab(); - sideMenu.selectItem(id); - }) - - sideMenu.click(function(dom, data) { - bodyTab.addTabOnly({ - id: data.menuId, - title: data.menuTitle, - url: data.menuUrl, - icon: data.menuIcon, - close: true - }, 300); - compatible(); - }) - } else { - bodyFrame = pearFrame.render({ - elem: 'content', - title: '首页', - url: param.tab.index.href, - width: '100%', - height: '100%' - }); - - sideMenu.click(function(dom, data) { - bodyFrame.changePage(data.menuUrl, true); - compatible() - }) - } - } - - this.keepLoad = function(param) { - compatible() - setTimeout(function() { - $(".loader-main").fadeOut(200); - }, param.other.keepLoad) - } - - this.themeRender = function(option) { - if (option.theme.allowCustom === false) { - $(".setting").remove(); - } - var colorId = localStorage.getItem("theme-color"); - var currentColor = getColorById(colorId); - localStorage.setItem("theme-color", currentColor.id); - localStorage.setItem("theme-color-color", currentColor.color); - localStorage.setItem("theme-color-second", currentColor.second); - pearTheme.changeTheme(window, isAutoHead(config)); - - var menu = localStorage.getItem("theme-menu"); - if (menu === null) { - menu = option.theme.defaultMenu; - } else { - if (option.theme.allowCustom === false) { - menu = option.theme.defaultMenu; - } - } - - var header = localStorage.getItem("theme-header"); - if (header === null) { - header = option.theme.defaultHeader; - } else { - if (option.theme.allowCustom === false) { - header = option.theme.defaultHeader; - } - } - - var banner = localStorage.getItem("theme-banner"); - if (banner === null) { - banner = option.theme.banner; - } else { - if (option.theme.allowCustom === false) { - banner = option.theme.banner; - } - } - - var autoHead = localStorage.getItem("auto-head"); - if (autoHead === null) { - autoHead = option.other.autoHead; - } else { - if (option.theme.allowCustom === false) { - autoHead = option.other.autoHead; - } - } - - var muiltTab = localStorage.getItem("muilt-tab"); - if (muiltTab === null) { - muiltTab = option.tab.enable; - } else { - if (option.theme.allowCustom === false) { - muiltTab = option.tab.enable; - } - } - - var control = localStorage.getItem("control"); - if (control === null) { - control = option.menu.control; - } else { - if (option.theme.allowCustom === false) { - control = option.menu.control; - } - } - - var footer = localStorage.getItem("footer"); - if( footer === null) { - footer = option.other.footer; - }else{ - if (option.theme.allowCustom === false) { - footer = option.other.footer; - } - } - - localStorage.setItem("muilt-tab", muiltTab); - localStorage.setItem("theme-banner", banner); - localStorage.setItem("theme-menu", menu); - localStorage.setItem("theme-header", header); - localStorage.setItem("auto-head", autoHead); - localStorage.setItem("control", control); - localStorage.setItem("footer", footer); - this.menuSkin(menu); - this.headerSkin(header); - this.bannerSkin(banner); - this.footer(footer); - } - - this.footer = function(footer){ - var bodyDOM = $(".pear-admin .layui-body"); - var footerDOM = $(".pear-admin .layui-footer"); - if (footer === true || footer === "true") { - footerDOM.removeClass("close"); - bodyDOM.css("bottom", footerDOM.outerHeight()); - } else { - footerDOM.addClass("close"); - bodyDOM.css("bottom", ""); - } - } - - this.bannerSkin = function(theme) { - var pearAdmin = $(".pear-admin"); - pearAdmin.removeClass("banner-layout"); - if (theme === true || theme === "true") { - pearAdmin.addClass("banner-layout"); - } - } - - this.collapse = function(param) { - if (param.menu.collapse) { - if ($(window).width() >= 768) { - collapse() - } - } - } - - this.menuSkin = function(theme) { - var pearAdmin = $(".pear-admin .layui-side"); - pearAdmin.removeClass("light-theme"); - pearAdmin.removeClass("dark-theme"); - pearAdmin.addClass(theme); - } - - this.headerSkin = function(theme) { - var pearAdmin = $(".pear-admin .layui-header"); - pearAdmin.removeClass("light-theme"); - pearAdmin.removeClass("dark-theme"); - pearAdmin.addClass(theme); - } - - this.logout = function(callback) { - logout = callback; - } - - this.message = function(callback) { - if (callback != null) { - msgInstance.click(callback); - } - } - - this.collapseSide = function() { - collapse() - } - - this.refreshThis = function() { - refresh() - } - - this.refresh = function(id) { - $("iframe[id='"+ id +"']").attr('src', $("iframe[id='"+ id +"']").attr('src')); - } - - this.addTab = function(id, title, url) { - if (isMuiltTab(config) === "true" || isMuiltTab(config) === true) { - bodyTab.addTabOnly({ - id: id, - title: title, - url: url, - icon: null, - close: true - }, 400); - } else { - return; - } - } - - this.closeTab = function(id) { - if (isMuiltTab(config) === "true" || isMuiltTab(config) === true) { - pearTab.delTabByElem('content', id, function(currentId){ - sideMenu.selectItem(currentId); - }); - } else { - return; - } - } - - this.closeCurrentTab = function() { - if (isMuiltTab(config) === "true" || isMuiltTab(config) === true) { - pearTab.delCurrentTabByElem('content', function(id){ - sideMenu.selectItem(id); - }); - } else { - return; - } - } - - this.closeOtherTab = function() { - if (isMuiltTab(config) === "true" || isMuiltTab(config) === true) { - pearTab.delOtherTabByElem('content', function(id){ - sideMenu.selectItem(id); - }); - } else { - return; - } - } - - this.closeAllTab = function() { - if (isMuiltTab(config) === "true" || isMuiltTab(config) === true) { - pearTab.delAllTabByElem('content', function(id){ - sideMenu.selectItem(id); - }); - } else { - return; - } - } - - this.changeTabTitle = function(id, title) { - pearTab.changeTabTitleById('content', id ,title); - } - - this.changeIframe = function(id, title, url) { - if (isMuiltTab(config) === "true" || isMuiltTab(config) === true) { - return; - } else { - sideMenu.selectItem(id); - bodyFrame.changePage(url, true); - } - } - - this.jump = function(id, title, url) { - if (isMuiltTab(config) === "true" || isMuiltTab(config) === true) { - pearAdmin.addTab(id, title, url) - } else { - pearAdmin.changeIframe(id, title, url) - } - } - - this.fullScreen = function() { - if ($(".fullScreen").hasClass("layui-icon-screen-restore")) { - screenFun(2).then(function() { - $(".fullScreen").eq(0).removeClass("layui-icon-screen-restore"); - }); - } else { - screenFun(1).then(function() { - $(".fullScreen").eq(0).addClass("layui-icon-screen-restore"); - }); - } - } - }; - - function refresh() { - var refreshA = $(".refresh a"); - refreshA.removeClass("layui-icon-refresh-1"); - refreshA.addClass("layui-anim"); - refreshA.addClass("layui-anim-rotate"); - refreshA.addClass("layui-anim-loop"); - refreshA.addClass("layui-icon-loading"); - if (isMuiltTab(config) === "true" || isMuiltTab(config) === true) bodyTab.refresh(true); - else bodyFrame.refresh(true); - setTimeout(function() { - refreshA.addClass("layui-icon-refresh-1"); - refreshA.removeClass("layui-anim"); - refreshA.removeClass("layui-anim-rotate"); - refreshA.removeClass("layui-anim-loop"); - refreshA.removeClass("layui-icon-loading"); - }, 600) - } - - function collapse() { - sideMenu.collapse(); - var admin = $(".pear-admin"); - var left = $(".layui-icon-spread-left") - var right = $(".layui-icon-shrink-right") - if (admin.is(".pear-mini")) { - left.addClass("layui-icon-shrink-right") - left.removeClass("layui-icon-spread-left") - admin.removeClass("pear-mini"); - sideMenu.isCollapse = false; - } else { - right.addClass("layui-icon-spread-left") - right.removeClass("layui-icon-shrink-right") - admin.addClass("pear-mini"); - sideMenu.isCollapse = true; - } - } - - body.on("click", ".logout", function() { - if (logout() && bodyTab) { - bodyTab.clear(); - } - }) - - body.on("click", ".collapse,.pear-cover", function() { - collapse(); - }); - - body.on("click", ".menuSearch", function () { - // 过滤菜单 - var filterHandle = function (filterData, val) { - if (!val) return []; - var filteredMenus = []; - filterData = $.extend(true, {}, filterData); - $.each(filterData, function (index, item) { - if (item.children && item.children.length) { - var children = filterHandle(item.children, val) - var obj = $.extend({}, item, { children: children }); - if (children && children.length) { - filteredMenus.push(obj); - } else if (item.title.indexOf(val) >= 0) { - item.children = []; // 父级匹配但子级不匹配,就去除子级 - filteredMenus.push($.extend({}, item)); - } - } else if (item.title.indexOf(val) >= 0) { - filteredMenus.push(item); - } - }) - return filteredMenus; - } - - // 树转路径 - var tiledHandle = function (data) { - var tiledMenus = []; - var treeTiled = function (data, content) { - var path = ""; - var separator = " / "; - // 上级路径 - if (!content) content = ""; - $.each(data, function (index, item) { - if (item.children && item.children.length) { - path += content + item.title + separator; - var childPath = treeTiled(item.children, path); - path += childPath; - if (!childPath) path = ""; // 重置路径 - } else { - path += content + item.title - tiledMenus.push({ path: path, info: item }); - path = ""; //重置路径 - } - }) - return path; - }; - treeTiled(data); - - return tiledMenus; - } - - // 创建搜索列表 - var createList = function (data) { - var _listHtml = ''; - $.each(data, function (index, item) { - _listHtml += '
  • '; - _listHtml += ' ' + item.path + ''; - _listHtml += ' '; - _listHtml += '
  • ' - }) - return _listHtml; - } - - var _html = [ - '' - ].join(''); - - layer.open({ - type: 1, - offset: "10%", - area: ['600px'], - title: false, - closeBtn: 0, - shadeClose: true, - anim: 0, - move: false, - content: _html, - success: function(layero,layeridx){ - var $layer = layero; - var $content = $(layero).children('.layui-layer-content'); - var $input = $(".menu-search-input-wrapper input"); - var $noData = $(".menu-search-no-data"); - var $list = $(".menu-search-list"); - var menuData = sideMenu.option.data; - - - $layer.css("border-radius", "6px"); - $input.off("focus").focus(); - // 搜索菜单 - $input.off("input").on("input", debounce(function(){ - var keywords = $input.val().trim(); - var filteredMenus = filterHandle(menuData, keywords); - - if(filteredMenus.length){ - var tiledMenus = tiledHandle(filteredMenus); - var listHtml = createList(tiledMenus); - $noData.css("display", "none"); - $list.html("").append(listHtml).children(":first").addClass("this") - }else{ - $list.html(""); - $noData.css("display", "flex"); - } - var currentHeight = $(".menu-search-content").outerHeight() - $layer.css("height", currentHeight); - $content.css("height", currentHeight); - }, 500) - ) - // 搜索列表点击事件 - $list.off("click").on("click", "li", function () { - var menuId = $(this).attr("smenu-id"); - var menuUrl = $(this).attr("smenu-url"); - var menuIcon = $(this).attr("smenu-icon"); - var menuTitle = $(this).attr("smenu-title"); - var menuType = $(this).attr("smenu-type"); - var openableWindow = menuType === "1" || menuType === 1; - - if(sideMenu.isCollapse){ - collapse(); - } - if (openableWindow) { - pearAdmin.jump(menuId, menuTitle, menuUrl) - } else { - sideMenu.selectItem(menuId); - } - compatible(); - layer.close(layeridx); - }) - - $list.off('mouseenter').on("mouseenter", "li", function () { - $(".menu-search-list li.this").removeClass("this"); - $(this).addClass("this"); - }).off("mouseleave").on("mouseleave", "li", function(){ - $(this).removeClass("this"); - }) - - // 监听键盘事件 - // Enter:13 Spacebar:32 UpArrow:38 DownArrow:40 Esc:27 - $(document).off("keydown").keydown(function (e) { - if (e.keyCode === 13 || e.keyCode === 32) { - e.preventDefault(); - var menuId = $(".menu-search-list li.this").attr("smenu-id"); - var menuUrl = $(".menu-search-list li.this").attr("smenu-url"); - var menuTitle = $(".menu-search-list li.this").attr("smenu-title"); - var menuType = $(".menu-search-list li.this").attr("smenu-type"); - var openableWindow = menuType === "1" || menuType === 1; - if (sideMenu.isCollapse) { - collapse(); - } - if (openableWindow) { - pearAdmin.jump(menuId, menuTitle, menuUrl) - } else { - sideMenu.selectItem(menuId); - } - compatible(); - layer.close(layeridx); - }else if(e.keyCode === 38){ - e.preventDefault(); - var prevEl = $(".menu-search-list li.this").prev(); - $(".menu-search-list li.this").removeClass("this"); - if(prevEl.length !== 0){ - prevEl.addClass("this"); - }else{ - $list.children().last().addClass("this"); - } - }else if(e.keyCode === 40){ - e.preventDefault(); - var nextEl = $(".menu-search-list li.this").next(); - $(".menu-search-list li.this").removeClass("this"); - if(nextEl.length !== 0){ - nextEl.addClass("this"); - }else{ - $list.children().first().addClass("this"); - } - }else if(e.keyCode === 27){ - e.preventDefault(); - layer.close(layeridx); - } - }) - } - }) - }); - - - body.on("click", ".fullScreen", function() { - if ($(this).hasClass("layui-icon-screen-restore")) { - fullscreen.fullClose().then(function() { - $(".fullScreen").eq(0).removeClass("layui-icon-screen-restore"); - }); - } else { - fullscreen.fullScreen().then(function() { - $(".fullScreen").eq(0).addClass("layui-icon-screen-restore"); - }); - } - }); - - body.on("click", '[user-menu-id]', function() { - if (isMuiltTab(config) === "true" || isMuiltTab(config) === true) { - bodyTab.addTabOnly({ - id: $(this).attr("user-menu-id"), - title: $(this).attr("user-menu-title"), - url: $(this).attr("user-menu-url"), - icon: "", - close: true - }, 300); - } else { - bodyFrame.changePage($(this).attr("user-menu-url"), true); - } - }); - - body.on("click", ".setting", function() { - - var menuItem = - '
  • ' + - '' + - '
    ' + - '
    ' + - '
    ' + - '
  • '; - - menuItem += - '
  • ' + - '' + - '
    ' + - '
    ' + - '
    ' + - '
  • '; - - var menuHtml = - '
    \n' + - '
    菜单风格
    \n' + - '
    \n' + - '
      \n' + menuItem + '
    \n' + - '
    \n' + - '
    '; - - var headItem = - '
  • ' + - '' + - '
    ' + - '
    ' + - '
    ' + - '
  • '; - - headItem += - '
  • ' + - '' + - '
    ' + - '
    ' + - '
    ' + - '
  • '; - - var headHtml = - '
    \n' + - '
    顶部风格
    \n' + - '
    \n' + - '
      \n' + headItem + '
    \n' + - '
    \n' + - '
    '; - - var moreItem = - '
    菜单
    '; - - moreItem += - '
    视图
    '; - - moreItem += - '
    通栏
    '; - - moreItem += - '
    通色
    '; - - moreItem += - '
    页脚
    '; - - var moreHtml = '
    \n' + - '
    更多设置
    \n' + - '
    \n' + - '
    \n' + moreItem + '
    \n' + - '
    \n' + - '
    '; - - layer.open({ - type: 1, - offset: 'r', - area: ['320px', '100%'], - title: false, - shade: 0.1, - closeBtn: 0, - shadeClose: false, - anim: -1, - skin: 'layer-anim-right', - move: false, - content: menuHtml + headHtml + buildColorHtml() + moreHtml, - success: function(layero, index) { - - form.render(); - - var color = localStorage.getItem("theme-color"); - var menu = localStorage.getItem("theme-menu"); - var header = localStorage.getItem("theme-header"); - - if (color !== "null") { - $(".select-color-item").removeClass("layui-icon").removeClass("layui-icon-ok"); - $("*[color-id='" + color + "']").addClass("layui-icon").addClass("layui-icon-ok"); - } - - if (menu !== "null") { - $("*[data-select-bgcolor]").removeClass("layui-this"); - $("[data-select-bgcolor='" + menu + "']").addClass("layui-this"); - } - - if (header !== "null") { - $("*[data-select-header]").removeClass("layui-this"); - $("[data-select-header='" + header + "']").addClass("layui-this"); - } - - $('#layui-layer-shade' + index).click(function() { - var $layero = $('#layui-layer' + index); - $layero.animate({ - left: $layero.offset().left + $layero.width() - }, 200, function() { - layer.close(index); - }); - }) - - form.on('switch(control)', function(data) { - localStorage.setItem("control", this.checked); - window.location.reload(); - }) - - form.on('switch(muilt-tab)', function(data) { - localStorage.setItem("muilt-tab", this.checked); - window.location.reload(); - }) - - form.on('switch(auto-head)', function(data) { - localStorage.setItem("auto-head", this.checked); - pearTheme.changeTheme(window, this.checked); - }) - - form.on('switch(banner)', function(data) { - localStorage.setItem("theme-banner", this.checked); - pearAdmin.bannerSkin(this.checked); - }) - - form.on('switch(footer)', function (data) { - localStorage.setItem("footer", this.checked); - pearAdmin.footer(this.checked); - }) - - if (localStorage.getItem('theme-banner') === 'true') { - $('input[name="banner"]').attr('checked', 'checked') - } else { - $('input[name="banner"]').removeAttr('checked') - } - - if (localStorage.getItem('control') === 'true') { - $('input[name="control"]').attr('checked', 'checked') - } else { - $('input[name="control"]').removeAttr('checked') - } - - if (localStorage.getItem('muilt-tab') === 'true') { - $('input[name="muilt-tab"]').attr('checked', 'checked') - } else { - $('input[name="muilt-tab"]').removeAttr('checked') - } - - if (localStorage.getItem('auto-head') === 'true') { - $('input[name="auto-head"]').attr('checked', 'checked') - } else { - $('input[name="auto-head"]').removeAttr('checked') - } - - if (localStorage.getItem('footer') === 'true') { - $('input[name="footer"]').attr('checked', 'checked') - } else { - $('input[name="footer"]').removeAttr('checked') - } - - form.render('checkbox'); - } - }); - }); - - body.on('click', '[data-select-bgcolor]', function() { - var theme = $(this).attr('data-select-bgcolor'); - $('[data-select-bgcolor]').removeClass("layui-this"); - $(this).addClass("layui-this"); - localStorage.setItem("theme-menu", theme); - pearAdmin.menuSkin(theme); - }); - - body.on('click', '[data-select-header]', function() { - var theme = $(this).attr('data-select-header'); - $('[data-select-header]').removeClass("layui-this"); - $(this).addClass("layui-this"); - localStorage.setItem("theme-header", theme); - pearAdmin.headerSkin(theme); - }); - - body.on('click', '.select-color-item', function() { - $(".select-color-item").removeClass("layui-icon").removeClass("layui-icon-ok"); - $(this).addClass("layui-icon").addClass("layui-icon-ok"); - var colorId = $(".select-color-item.layui-icon-ok").attr("color-id"); - var currentColor = getColorById(colorId); - localStorage.setItem("theme-color", currentColor.id); - localStorage.setItem("theme-color-color", currentColor.color); - localStorage.setItem("theme-color-second", currentColor.second); - pearTheme.changeTheme(window, isAutoHead(config)); - }); - - function applyConfig(param) { - config = param; - pearAdmin.logoRender(param); - pearAdmin.menuRender(param); - pearAdmin.bodyRender(param); - pearAdmin.themeRender(param); - pearAdmin.keepLoad(param); - if (param.header.message != false) { - pearAdmin.messageRender(param); - } - } - - function getColorById(id) { - var color; - var flag = false; - $.each(config.colors, function(i, value) { - if (value.id === id) { - color = value; - flag = true; - } - }) - if (flag === false || config.theme.allowCustom === false) { - $.each(config.colors, function(i, value) { - if (value.id === config.theme.defaultColor) { - color = value; - } - }) - } - return color; - } - - function buildColorHtml() { - var colors = ""; - $.each(config.colors, function(i, value) { - colors += ""; - }) - return "
    主题配色
    " + - colors + "
    " - } - - function compatible() { - if ($(window).width() <= 768) { - collapse() - } - } - - function isControl(option) { - if (option.theme.allowCustom) { - if (localStorage.getItem("control") != null) { - return localStorage.getItem("control") - } else { - return option.menu.control - } - } else { - return option.menu.control - } - } - - function isAutoHead(option) { - if (option.theme.allowCustom) { - if (localStorage.getItem("auto-head") != null) { - return localStorage.getItem("auto-head"); - } else { - return option.other.autoHead; - } - } else { - return option.other.autoHead; - } - } - - function isMuiltTab(option) { - if (option.theme.allowCustom) { - if (localStorage.getItem("muilt-tab") != null) { - return localStorage.getItem("muilt-tab") - } else { - return option.tab.enable - } - } else { - return option.tab.enable - } - } - - window.onresize = function() { - if (!fullscreen.isFullscreen()) { - $(".fullScreen").eq(0).removeClass("layui-icon-screen-restore"); - } - } - - $(window).on('resize', debounce(function () { - if (sideMenu && !sideMenu.isCollapse && $(window).width() <= 768) { - collapse(); - } - },50)); - - function debounce(fn, awaitTime) { - var timerID = null - return function () { - var arg = arguments[0] - if (timerID) { - clearTimeout(timerID) - } - timerID = setTimeout(function () { - fn(arg) - }, awaitTime) - } - } - exports('admin', pearAdmin); - }) +layui.define(['jquery', 'tools', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'fullscreen', 'messageCenter', 'menuSearch'], + function (exports) { + ("use strict"); + + var $ = layui.jquery, + form = layui.form, + yaml = layui.yaml, + page = layui.page, + menu = layui.menu, + messageCenter = layui.messageCenter, + menuSearch = layui.menuSearch, + fullscreen = layui.fullscreen, + tools = layui.tools, + tabPage = layui.tabPage; + + var sideMenu; + + var configurationCache; + + var bodyTab; + + var bodyFrame; + + var logout = function () {}; + + var body = $("body"); + + var pearAdmin = new (function () { + this.configuration = {}; + + this.configurationPath = "pear.config.yml"; + + this.instances = {}; + + /** + * @since Pear Admin 4.0 + * + * 获取 pear.config 实现 [ default ] + */ + this.configurationProvider = () => { + return new Promise((resolve) => { + if (this.configurationPath.indexOf("json") > -1) { + $.ajax({ + type: "get", + url: this.configurationPath, + dataType: "json", + async: false, + success: (result) => { + resolve(result); + }, + }); + } else { + let json = yaml.load(this.configurationPath); + console.log(json); + resolve(json); + } + }); + }; + + /** + * @since Pear Admin 4.0 + * + * 配置 pear.config 路径 + */ + this.setConfigurationPath = (path) => { + this.configurationPath = path; + }; + + /** + * @since Pear Admin 4.0 + * + * 获取 pear.config 实现 [ implement ] + */ + this.setConfigurationProvider = (provider) => { + this.configurationProvider = provider; + }; + + /** + * @since Pear Admin 4.0 + * + * 获取 pear.config 配置 + */ + this.getConfiguration = () => { + return this.configuration; + }; + + /** + * @since Pear Admin 4.0 + * + * Core Function. + * + * @param {*} options + */ + this.render = (options) => { + if (options !== undefined) { + pearAdmin.apply(options); + } else { + this.configurationProvider().then((result) => { + pearAdmin.apply(result); + }); + } + }; + + /** + * @since Pear Admin 4.0 + * + * 启动构建 + */ + this.apply = function (configuration) { + configurationCache = configuration; + pearAdmin.logoRender(configuration); + pearAdmin.menuRender(configuration); + pearAdmin.menuSearchRender(configuration); + pearAdmin.bodyRender(configuration); + pearAdmin.messageCenterRender(configuration); + pearAdmin.themeRender(configuration); + pearAdmin.keepLoad(configuration); + }; + + /** + * @since Pear Admin 4.0 + */ + this.menuSearchRender = function (options) { + menuSearch.render({ + elem: ".menuSearch", + dataProvider: () => sideMenu.cache(), + select: (node) => { + if (node.type == "1") { + sideMenu.selectItem(node.id); + if (node.openType === "_layer") { + layer.open({ + type: 2, + title: data.title, + content: data.url, + area: ["80%", "80%"], + maxmin: true, + }); + } else { + if ( + isMuiltTab(options) === "true" || + isMuiltTab(options) === true + ) { + bodyTab.addTabOnly({ + id: node.id, + title: node.title, + type: node.openType, + url: node.url, + icon: node.icon, + close: true, + }); + } else { + bodyFrame.changePage({ + href: node.url, + type: node.openType, + }); + } + } + } + }, + }); + }; + + this.messageCenterRender = function (options) { + messageCenter.render({ + elem: ".message", + url: options.header.message, + height: "250px", + }); + }; + + this.logoRender = function (param) { + $(".layui-logo .logo").attr("src", param.logo.image); + $(".layui-logo .title").html(param.logo.title); + }; + + this.menuRender = function (param) { + sideMenu = menu.render({ + elem: "sideMenu", + async: param.menu.async, + method: param.menu.method, + control: + isControl(param) === "true" || isControl(param) === true + ? "control" + : false, + controlWidth: param.menu.controlWidth, + accordion: param.menu.accordion, + data: param.menu.data, + url: param.menu.data, + parseData: false, + defaultMenu: 0, + change: function () { + compatible(); + }, + done: function () { + sideMenu.isCollapse = param.menu.collapse; + sideMenu.selectItem(param.menu.select); + pearAdmin.collapse(param); + }, + }); + }; + + this.bodyRender = function (param) { + body.on("click", ".refresh", function () { + refresh(); + }); + + if (isMuiltTab(param) === "true" || isMuiltTab(param) === true) { + bodyTab = tabPage.render({ + elem: "content", + session: param.tab.session, + index: 0, + tabMax: param.tab.max, + preload: param.tab.preload, + closeEvent: function (id) { + sideMenu.selectItem(id); + }, + data: [ + { + id: param.tab.index.id, + url: param.tab.index.href, + title: param.tab.index.title, + close: false, + }, + ], + success: function (id) { + if (param.tab.session) { + setTimeout(function () { + sideMenu.selectItem(id); + bodyTab.positionTab(); + handlerHash(bodyTab); + }, 500); + } + }, + }); + + bodyTab.click(function (id) { + if (!param.tab.keepState) { + bodyTab.refresh(false); + } + bodyTab.positionTab(); + sideMenu.selectItem(id); + let tab = $(`li[lay-id='${id}']`); + location.hash = tab.attr("lay-pageurl") || ""; + }); + + sideMenu.click(function (dom, data) { + if (data.menuOpenType === "_layer") { + layer.open({ + type: 2, + title: data.menuTitle, + content: data.menuUrl, + area: ["80%", "80%"], + maxmin: true, + }); + } else { + bodyTab.addTabOnly({ + id: data.menuId, + title: data.menuTitle, + type: data.menuOpenType, + url: data.menuUrl, + icon: data.menuIcon, + close: true, + }); + } + compatible(); + }); + } else { + bodyFrame = page.render({ + elem: "content", + title: "首页", + url: param.tab.index.href, + }); + + sideMenu.click(function (dom, data) { + if (data.menuOpenType === "_layer") { + layer.open({ + type: 2, + title: data.menuTitle, + content: data.menuUrl, + area: ["80%", "80%"], + maxmin: true, + }); + } else { + bodyFrame.changePage({ + href: data.menuUrl, + type: data.menuOpenType, + }); + } + compatible(); + }); + } + }; + + this.keepLoad = function (param) { + compatible(); + setTimeout(function () { + $(".loader-wrapper").fadeOut(200); + }, param.other.keepLoad); + }; + + this.changeTheme = function () { + const variableKey = "--global-primary-color"; + const variableVal = localStorage.getItem("theme-color-color"); + document.documentElement.style.setProperty(variableKey, variableVal); + }; + + this.themeRender = function (option) { + if (option.theme.allowCustom === false) { + $(".setting").remove(); + } + var colorId = localStorage.getItem("theme-color"); + var currentColor = getColorById(colorId); + localStorage.setItem("theme-color", currentColor.id); + localStorage.setItem("theme-color-color", currentColor.color); + localStorage.setItem("theme-color-second", currentColor.second); + pearAdmin.changeTheme(); + + var menu = localStorage.getItem("theme-menu"); + if (menu === null) { + menu = option.theme.defaultMenu; + } else { + if (option.theme.allowCustom === false) { + menu = option.theme.defaultMenu; + } + } + + var header = localStorage.getItem("theme-header"); + if (header === null) { + header = option.theme.defaultHeader; + } else { + if (option.theme.allowCustom === false) { + header = option.theme.defaultHeader; + } + } + + var banner = localStorage.getItem("theme-banner"); + if (banner === null) { + banner = option.theme.banner; + } else { + if (option.theme.allowCustom === false) { + banner = option.theme.banner; + } + } + + var autoHead = localStorage.getItem("auto-head"); + if (autoHead === null) { + autoHead = option.other.autoHead; + } else { + if (option.theme.allowCustom === false) { + autoHead = option.other.autoHead; + } + } + + var muiltTab = localStorage.getItem("muilt-tab"); + if (muiltTab === null) { + muiltTab = option.tab.enable; + } else { + if (option.theme.allowCustom === false) { + muiltTab = option.tab.enable; + } + } + + var control = localStorage.getItem("control"); + if (control === null) { + control = option.menu.control; + } else { + if (option.theme.allowCustom === false) { + control = option.menu.control; + } + } + + var footer = localStorage.getItem("footer"); + if (footer === null) { + footer = option.other.footer; + } else { + if (option.theme.allowCustom === false) { + footer = option.other.footer; + } + } + + var dark = localStorage.getItem("dark"); + if (dark === null) { + dark = option.theme.dark; + } else { + if (option.theme.allowCustom === false) { + dark = option.theme.dark; + } + } + + localStorage.setItem("muilt-tab", muiltTab); + localStorage.setItem("theme-banner", banner); + localStorage.setItem("theme-menu", menu); + localStorage.setItem("theme-header", header); + localStorage.setItem("auto-head", autoHead); + localStorage.setItem("control", control); + localStorage.setItem("footer", footer); + localStorage.setItem("dark", dark); + this.menuSkin(menu); + this.headerSkin(header); + this.bannerSkin(banner); + this.enableDark(dark); + this.footer(footer); + }; + + this.footer = function (footer) { + var bodyDOM = $(".pear-admin .layui-body"); + var footerDOM = $(".pear-admin .layui-footer"); + if (footer === true || footer === "true") { + footerDOM.removeClass("close"); + bodyDOM.css("bottom", footerDOM.outerHeight()); + } else { + footerDOM.addClass("close"); + bodyDOM.css("bottom", ""); + } + }; + + this.bannerSkin = function (theme) { + var pearAdmin = $(".pear-admin"); + pearAdmin.removeClass("banner-layout"); + if (theme === true || theme === "true") { + pearAdmin.addClass("banner-layout"); + } + }; + + this.enableDark = function (checked) { + var $pearAdmin = $(".pear-admin"); + $pearAdmin.removeClass("pear-admin-dark"); + if (checked === true || checked === "true") { + $pearAdmin.addClass("pear-admin-dark"); + } + }; + + this.collapse = function (param) { + if (param.menu.collapse) { + if ($(window).width() >= 768) { + collapse(); + } + } + }; + + this.menuSkin = function (theme) { + var pearAdmin = $(".pear-admin .layui-side"); + pearAdmin.removeClass("light-theme"); + pearAdmin.removeClass("dark-theme"); + pearAdmin.addClass(theme); + }; + + this.headerSkin = function (theme) { + var pearAdmin = $(".pear-admin .layui-header"); + pearAdmin.removeClass("dark-theme"); + pearAdmin.removeClass("light-theme"); + pearAdmin.removeClass("auto-theme"); + pearAdmin.addClass(theme); + }; + + this.logout = function (callback) { + logout = callback; + }; + })(); + + function refresh() { + var refreshA = $(".refresh a"); + refreshA.removeClass("layui-icon-refresh-1"); + refreshA.addClass("layui-anim"); + refreshA.addClass("layui-anim-rotate"); + refreshA.addClass("layui-anim-loop"); + refreshA.addClass("layui-icon-loading"); + if ( + isMuiltTab(configurationCache) === "true" || + isMuiltTab(configurationCache) === true + ) + bodyTab.refresh(true); + else bodyFrame.refresh(true); + setTimeout(function () { + refreshA.addClass("layui-icon-refresh-1"); + refreshA.removeClass("layui-anim"); + refreshA.removeClass("layui-anim-rotate"); + refreshA.removeClass("layui-anim-loop"); + refreshA.removeClass("layui-icon-loading"); + }, 600); + } + + function collapse() { + sideMenu.collapse(); + var admin = $(".pear-admin"); + var left = $(".layui-icon-spread-left"); + var right = $(".layui-icon-shrink-right"); + if (admin.is(".pear-mini")) { + left.addClass("layui-icon-shrink-right"); + left.removeClass("layui-icon-spread-left"); + admin.removeClass("pear-mini"); + sideMenu.isCollapse = false; + } else { + right.addClass("layui-icon-spread-left"); + right.removeClass("layui-icon-shrink-right"); + admin.addClass("pear-mini"); + sideMenu.isCollapse = true; + } + } + + /** + * @since Pear Admin 4.0 + * + * 使用 admin.logout(Function) 实现注销 + * + * Promise 作为返回值类型时,泛型内容为 true 时视为注销成功,则清除 bodyTab 缓存 + * + * 否则视为注销失败,不做任何处置。 + */ + body.on("click", ".logout", function () { + var promise = logout(); + if (promise != undefined) { + promise.then((asyncResult) => { + if (asyncResult) { + bodyTab.clear(); + } + }); + } else { + bodyTab.clear(); + } + }); + + body.on("click", ".collapse,.pear-cover", function () { + collapse(); + }); + + body.on("click", ".fullScreen", function () { + if ($(this).hasClass("layui-icon-screen-restore")) { + fullscreen.fullClose().then(function () { + $(".fullScreen").eq(0).removeClass("layui-icon-screen-restore"); + }); + } else { + fullscreen.fullScreen().then(function () { + $(".fullScreen").eq(0).addClass("layui-icon-screen-restore"); + }); + } + }); + + body.on("click", "[user-menu-id]", function () { + if ( + isMuiltTab(configurationCache) === "true" || + isMuiltTab(configurationCache) === true + ) { + bodyTab.addTabOnly( + { + id: $(this).attr("user-menu-id"), + title: $(this).attr("user-menu-title"), + url: $(this).attr("user-menu-url"), + icon: "", + close: true, + }, + 300 + ); + } else { + bodyFrame.changePage($(this).attr("user-menu-url"), true); + } + }); + + body.on("click", ".setting", function () { + var menuItem = + '
  • ' + + '' + + '
    ' + + '
    ' + + "
    " + + "
  • "; + + menuItem += + '
  • ' + + '' + + '
    ' + + '
    ' + + "
    " + + "
  • "; + + var menuHtml = + '
    \n' + + '
    菜单风格
    \n' + + '
    \n' + + "
      \n" + + menuItem + + "
    \n" + + "
    \n" + + "
    "; + + var headItem = + '
  • ' + + '' + + '
    ' + + '
    ' + + "
    " + + "
  • "; + + headItem += + '
  • ' + + '' + + '
    ' + + '
    ' + + "
    " + + "
  • "; + + headItem += + '
  • ' + + '' + + '
    ' + + '
    ' + + "
    " + + "
  • "; + + var headHtml = + '
    \n' + + '
    顶栏风格
    \n' + + '
    \n' + + "
      \n" + + headItem + + "
    \n" + + "
    \n" + + "
    "; + + var moreItem = + '
    菜单分割
    '; + + moreItem += + '
    多选项卡
    '; + + moreItem += + '
    通栏布局
    '; + + moreItem += + '
    开启页脚
    '; + + moreItem += + '
    夜间模式
    '; + + var moreHtml = + '
    \n' + + '
    更多设置
    \n' + + '
    \n' + + '
    \n' + + moreItem + + "
    \n" + + "
    \n" + + "
    "; + + layer.open({ + type: 1, + offset: "r", + area: ["320px", "100%"], + title: false, + shade: 0.1, + closeBtn: 0, + shadeClose: false, + anim: -1, + skin: "layer-anim-right", + move: false, + content: menuHtml + headHtml + buildColorHtml() + moreHtml, + success: function (layero, index) { + form.render(); + + var color = localStorage.getItem("theme-color"); + var menu = localStorage.getItem("theme-menu"); + var header = localStorage.getItem("theme-header"); + + if (color !== "null") { + $(".select-color-item") + .removeClass("layui-icon") + .removeClass("layui-icon-ok"); + $("*[color-id='" + color + "']") + .addClass("layui-icon") + .addClass("layui-icon-ok"); + } + + if (menu !== "null") { + $("*[data-select-bgcolor]").removeClass("layui-this"); + $("[data-select-bgcolor='" + menu + "']").addClass("layui-this"); + } + + if (header !== "null") { + $("*[data-select-header]").removeClass("layui-this"); + $("[data-select-header='" + header + "']").addClass("layui-this"); + } + + $("#layui-layer-shade" + index).click(function () { + var $layero = $("#layui-layer" + index); + $layero.animate( + { + left: $layero.offset().left + $layero.width(), + }, + 200, + function () { + layer.close(index); + } + ); + }); + + form.on("switch(control)", function (data) { + localStorage.setItem("control", this.checked); + window.location.reload(); + }); + + form.on("switch(muilt-tab)", function (data) { + localStorage.setItem("muilt-tab", this.checked); + window.location.reload(); + }); + + form.on("switch(auto-head)", function (data) { + localStorage.setItem("auto-head", this.checked); + pearAdmin.changeTheme(); + }); + + form.on("switch(banner)", function (data) { + localStorage.setItem("theme-banner", this.checked); + pearAdmin.bannerSkin(this.checked); + }); + + form.on("switch(footer)", function (data) { + localStorage.setItem("footer", this.checked); + pearAdmin.footer(this.checked); + }); + + form.on("switch(dark)", function (data) { + localStorage.setItem("dark", this.checked); + pearAdmin.enableDark(this.checked); + }); + + if (localStorage.getItem("theme-banner") === "true") { + $('input[name="banner"]').attr("checked", "checked"); + } else { + $('input[name="banner"]').removeAttr("checked"); + } + + if (localStorage.getItem("control") === "true") { + $('input[name="control"]').attr("checked", "checked"); + } else { + $('input[name="control"]').removeAttr("checked"); + } + + if (localStorage.getItem("muilt-tab") === "true") { + $('input[name="muilt-tab"]').attr("checked", "checked"); + } else { + $('input[name="muilt-tab"]').removeAttr("checked"); + } + + if (localStorage.getItem("footer") === "true") { + $('input[name="footer"]').attr("checked", "checked"); + } else { + $('input[name="footer"]').removeAttr("checked"); + } + + if (localStorage.getItem("dark") === "true") { + $('input[name="dark"]').attr("checked", "checked"); + } else { + $('input[name="dark"]').removeAttr("checked"); + } + + form.render("checkbox"); + }, + }); + }); + + body.on("click", "[data-select-bgcolor]", function () { + var theme = $(this).attr("data-select-bgcolor"); + $("[data-select-bgcolor]").removeClass("layui-this"); + $(this).addClass("layui-this"); + localStorage.setItem("theme-menu", theme); + pearAdmin.menuSkin(theme); + }); + + body.on("click", "[data-select-header]", function () { + var headerColor = $(this).attr("data-select-header"); + $("[data-select-header]").removeClass("layui-this"); + $(this).addClass("layui-this"); + localStorage.setItem("theme-header", headerColor); + if (headerColor == "auto-theme") { + localStorage.setItem("auto-head", true); + pearAdmin.changeTheme(); + } else { + localStorage.setItem("auto-head", false); + pearAdmin.changeTheme(); + } + pearAdmin.headerSkin(headerColor); + }); + + body.on("click", ".select-color-item", function () { + $(".select-color-item") + .removeClass("layui-icon") + .removeClass("layui-icon-ok"); + $(this).addClass("layui-icon").addClass("layui-icon-ok"); + var colorId = $(".select-color-item.layui-icon-ok").attr("color-id"); + var currentColor = getColorById(colorId); + localStorage.setItem("theme-color", currentColor.id); + localStorage.setItem("theme-color-color", currentColor.color); + localStorage.setItem("theme-color-second", currentColor.second); + pearAdmin.changeTheme(); + }); + + /** + * 根据url hash 地址 匹配tab + */ + function handlerHash(tabObj) { + //window.onhashchange = locationHashChanged; + let _this = tabObj; + let hash = location.hash; + if (!hash) { + return; + } + let pageUrl = hash.replace("#", ""); + let tabElement = $("ul.layui-tab-title [lay-pageurl='" + pageUrl + "']"); + if (tabElement.length > 0) { + let layid = tabElement.attr("lay-id"); + if (!tabElement.hasClass("layui-this")) { + element.tabChange(option.elem, layid); // 切换tab + } + } else { + //如果没打开的话 还要打开这个页面 + //菜单中是否有 + let menu = $('ul[lay-filter="sideMenu"] li a[menu-url="' + pageUrl + '"]'); + if (menu.length > 0) { + _this.addTabOnly({ + id: menu.attr("menu-id"), + title: menu.attr("menu-title"), + url: pageUrl, + close: true, + }); + } else { + // 404? + console.log(404); + } + } + } + + function getColorById(id) { + var color; + var flag = false; + $.each(configurationCache.colors, function (i, value) { + if (value.id === id) { + color = value; + flag = true; + } + }); + if (flag === false || configurationCache.theme.allowCustom === false) { + $.each(configurationCache.colors, function (i, value) { + if (value.id === configurationCache.theme.defaultColor) { + color = value; + } + }); + } + return color; + } + + function buildColorHtml() { + var colors = ""; + $.each(configurationCache.colors, function (i, value) { + colors += + ""; + }); + return ( + "
    主题颜色
    " + + colors + + "
    " + ); + } + + function compatible() { + if ($(window).width() <= 768) { + collapse(); + } + } + + function isControl(option) { + if (option.theme.allowCustom) { + if (localStorage.getItem("control") != null) { + return localStorage.getItem("control"); + } else { + return option.menu.control; + } + } else { + return option.menu.control; + } + } + + function isMuiltTab(option) { + if (option.theme.allowCustom) { + if (localStorage.getItem("muilt-tab") != null) { + return localStorage.getItem("muilt-tab"); + } else { + return option.tab.enable; + } + } else { + return option.tab.enable; + } + } + + window.onresize = function () { + if (!fullscreen.isFullscreen()) { + $(".fullScreen").eq(0).removeClass("layui-icon-screen-restore"); + } + }; + + $(window).on( + "resize", + tools.debounce(function () { + if (sideMenu && !sideMenu.isCollapse && $(window).width() <= 768) { + collapse(); + } + }, 50) + ); + + exports("admin", pearAdmin); + }) diff --git a/component/pear/module/area.js b/component/pear/module/area.js deleted file mode 100644 index 604c91e9167bba0253b2124f17dc417441e47492..0000000000000000000000000000000000000000 --- a/component/pear/module/area.js +++ /dev/null @@ -1,4070 +0,0 @@ -layui.define(['layer', 'form', 'laytpl'], function (exports) { - "use strict"; - - let $ = layui.$ - , form = layui.form - , layarea = { - _id: 0 - , config: {} - , set: function (options) { - let that = this; - that.config = $.extend({}, that.config, options); - return that; - } - , on: function (events, callback) { - return layui.onevent.call(this, 'layarea', events, callback); - } - } - , thisArea = function () { - let that = this; - return { - layarea: function (files) { - that.layarea.call(that, files); - } - , config: that.config - , reload: that.reload - , events: that.events - } - } - , Class = function (options) { - let that = this; - that.config = $.extend({}, { - elem: '', - data: { - province: '', - city: '', - county: '', - provinceCode: 0, - cityCode: 0, - countyCode: 0, - } - }, options); - that.render(); - }; - - let areaList = { - province_list: { - 110000: '北京市', - 120000: '天津市', - 130000: '河北省', - 140000: '山西省', - 150000: '内蒙古自治区', - 210000: '辽宁省', - 220000: '吉林省', - 230000: '黑龙江省', - 310000: '上海市', - 320000: '江苏省', - 330000: '浙江省', - 340000: '安徽省', - 350000: '福建省', - 360000: '江西省', - 370000: '山东省', - 410000: '河南省', - 420000: '湖北省', - 430000: '湖南省', - 440000: '广东省', - 450000: '广西壮族自治区', - 460000: '海南省', - 500000: '重庆市', - 510000: '四川省', - 520000: '贵州省', - 530000: '云南省', - 540000: '西藏自治区', - 610000: '陕西省', - 620000: '甘肃省', - 630000: '青海省', - 640000: '宁夏回族自治区', - 650000: '新疆维吾尔自治区', - 710000: '台湾省', - 810000: '香港特别行政区', - 820000: '澳门特别行政区', - 900000: '海外' - }, - city_list: { - 110100: '北京市', - 120100: '天津市', - 130100: '石家庄市', - 130200: '唐山市', - 130300: '秦皇岛市', - 130400: '邯郸市', - 130500: '邢台市', - 130600: '保定市', - 130700: '张家口市', - 130800: '承德市', - 130900: '沧州市', - 131000: '廊坊市', - 131100: '衡水市', - 139000: '省直辖县', - 140100: '太原市', - 140200: '大同市', - 140300: '阳泉市', - 140400: '长治市', - 140500: '晋城市', - 140600: '朔州市', - 140700: '晋中市', - 140800: '运城市', - 140900: '忻州市', - 141000: '临汾市', - 141100: '吕梁市', - 150100: '呼和浩特市', - 150200: '包头市', - 150300: '乌海市', - 150400: '赤峰市', - 150500: '通辽市', - 150600: '鄂尔多斯市', - 150700: '呼伦贝尔市', - 150800: '巴彦淖尔市', - 150900: '乌兰察布市', - 152200: '兴安盟', - 152500: '锡林郭勒盟', - 152900: '阿拉善盟', - 210100: '沈阳市', - 210200: '大连市', - 210300: '鞍山市', - 210400: '抚顺市', - 210500: '本溪市', - 210600: '丹东市', - 210700: '锦州市', - 210800: '营口市', - 210900: '阜新市', - 211000: '辽阳市', - 211100: '盘锦市', - 211200: '铁岭市', - 211300: '朝阳市', - 211400: '葫芦岛市', - 220100: '长春市', - 220200: '吉林市', - 220300: '四平市', - 220400: '辽源市', - 220500: '通化市', - 220600: '白山市', - 220700: '松原市', - 220800: '白城市', - 222400: '延边朝鲜族自治州', - 230100: '哈尔滨市', - 230200: '齐齐哈尔市', - 230300: '鸡西市', - 230400: '鹤岗市', - 230500: '双鸭山市', - 230600: '大庆市', - 230700: '伊春市', - 230800: '佳木斯市', - 230900: '七台河市', - 231000: '牡丹江市', - 231100: '黑河市', - 231200: '绥化市', - 232700: '大兴安岭地区', - 310100: '上海市', - 320100: '南京市', - 320200: '无锡市', - 320300: '徐州市', - 320400: '常州市', - 320500: '苏州市', - 320600: '南通市', - 320700: '连云港市', - 320800: '淮安市', - 320900: '盐城市', - 321000: '扬州市', - 321100: '镇江市', - 321200: '泰州市', - 321300: '宿迁市', - 330100: '杭州市', - 330200: '宁波市', - 330300: '温州市', - 330400: '嘉兴市', - 330500: '湖州市', - 330600: '绍兴市', - 330700: '金华市', - 330800: '衢州市', - 330900: '舟山市', - 331000: '台州市', - 331100: '丽水市', - 340100: '合肥市', - 340200: '芜湖市', - 340300: '蚌埠市', - 340400: '淮南市', - 340500: '马鞍山市', - 340600: '淮北市', - 340700: '铜陵市', - 340800: '安庆市', - 341000: '黄山市', - 341100: '滁州市', - 341200: '阜阳市', - 341300: '宿州市', - 341500: '六安市', - 341600: '亳州市', - 341700: '池州市', - 341800: '宣城市', - 350100: '福州市', - 350200: '厦门市', - 350300: '莆田市', - 350400: '三明市', - 350500: '泉州市', - 350600: '漳州市', - 350700: '南平市', - 350800: '龙岩市', - 350900: '宁德市', - 360100: '南昌市', - 360200: '景德镇市', - 360300: '萍乡市', - 360400: '九江市', - 360500: '新余市', - 360600: '鹰潭市', - 360700: '赣州市', - 360800: '吉安市', - 360900: '宜春市', - 361000: '抚州市', - 361100: '上饶市', - 370100: '济南市', - 370200: '青岛市', - 370300: '淄博市', - 370400: '枣庄市', - 370500: '东营市', - 370600: '烟台市', - 370700: '潍坊市', - 370800: '济宁市', - 370900: '泰安市', - 371000: '威海市', - 371100: '日照市', - 371200: '莱芜市', - 371300: '临沂市', - 371400: '德州市', - 371500: '聊城市', - 371600: '滨州市', - 371700: '菏泽市', - 410100: '郑州市', - 410200: '开封市', - 410300: '洛阳市', - 410400: '平顶山市', - 410500: '安阳市', - 410600: '鹤壁市', - 410700: '新乡市', - 410800: '焦作市', - 410900: '濮阳市', - 411000: '许昌市', - 411100: '漯河市', - 411200: '三门峡市', - 411300: '南阳市', - 411400: '商丘市', - 411500: '信阳市', - 411600: '周口市', - 411700: '驻马店市', - 419000: '省直辖县', - 420100: '武汉市', - 420200: '黄石市', - 420300: '十堰市', - 420500: '宜昌市', - 420600: '襄阳市', - 420700: '鄂州市', - 420800: '荆门市', - 420900: '孝感市', - 421000: '荆州市', - 421100: '黄冈市', - 421200: '咸宁市', - 421300: '随州市', - 422800: '恩施土家族苗族自治州', - 429000: '省直辖县', - 430100: '长沙市', - 430200: '株洲市', - 430300: '湘潭市', - 430400: '衡阳市', - 430500: '邵阳市', - 430600: '岳阳市', - 430700: '常德市', - 430800: '张家界市', - 430900: '益阳市', - 431000: '郴州市', - 431100: '永州市', - 431200: '怀化市', - 431300: '娄底市', - 433100: '湘西土家族苗族自治州', - 440100: '广州市', - 440200: '韶关市', - 440300: '深圳市', - 440400: '珠海市', - 440500: '汕头市', - 440600: '佛山市', - 440700: '江门市', - 440800: '湛江市', - 440900: '茂名市', - 441200: '肇庆市', - 441300: '惠州市', - 441400: '梅州市', - 441500: '汕尾市', - 441600: '河源市', - 441700: '阳江市', - 441800: '清远市', - 441900: '东莞市', - 442000: '中山市', - 445100: '潮州市', - 445200: '揭阳市', - 445300: '云浮市', - 450100: '南宁市', - 450200: '柳州市', - 450300: '桂林市', - 450400: '梧州市', - 450500: '北海市', - 450600: '防城港市', - 450700: '钦州市', - 450800: '贵港市', - 450900: '玉林市', - 451000: '百色市', - 451100: '贺州市', - 451200: '河池市', - 451300: '来宾市', - 451400: '崇左市', - 460100: '海口市', - 460200: '三亚市', - 460300: '三沙市', - 460400: '儋州市', - 469000: '省直辖县', - 500100: '重庆市', - 500200: '县', - 510100: '成都市', - 510300: '自贡市', - 510400: '攀枝花市', - 510500: '泸州市', - 510600: '德阳市', - 510700: '绵阳市', - 510800: '广元市', - 510900: '遂宁市', - 511000: '内江市', - 511100: '乐山市', - 511300: '南充市', - 511400: '眉山市', - 511500: '宜宾市', - 511600: '广安市', - 511700: '达州市', - 511800: '雅安市', - 511900: '巴中市', - 512000: '资阳市', - 513200: '阿坝藏族羌族自治州', - 513300: '甘孜藏族自治州', - 513400: '凉山彝族自治州', - 520100: '贵阳市', - 520200: '六盘水市', - 520300: '遵义市', - 520400: '安顺市', - 520500: '毕节市', - 520600: '铜仁市', - 522300: '黔西南布依族苗族自治州', - 522600: '黔东南苗族侗族自治州', - 522700: '黔南布依族苗族自治州', - 530100: '昆明市', - 530300: '曲靖市', - 530400: '玉溪市', - 530500: '保山市', - 530600: '昭通市', - 530700: '丽江市', - 530800: '普洱市', - 530900: '临沧市', - 532300: '楚雄彝族自治州', - 532500: '红河哈尼族彝族自治州', - 532600: '文山壮族苗族自治州', - 532800: '西双版纳傣族自治州', - 532900: '大理白族自治州', - 533100: '德宏傣族景颇族自治州', - 533300: '怒江傈僳族自治州', - 533400: '迪庆藏族自治州', - 540100: '拉萨市', - 540200: '日喀则市', - 540300: '昌都市', - 540400: '林芝市', - 540500: '山南市', - 540600: '那曲市', - 542500: '阿里地区', - 610100: '西安市', - 610200: '铜川市', - 610300: '宝鸡市', - 610400: '咸阳市', - 610500: '渭南市', - 610600: '延安市', - 610700: '汉中市', - 610800: '榆林市', - 610900: '安康市', - 611000: '商洛市', - 620100: '兰州市', - 620200: '嘉峪关市', - 620300: '金昌市', - 620400: '白银市', - 620500: '天水市', - 620600: '武威市', - 620700: '张掖市', - 620800: '平凉市', - 620900: '酒泉市', - 621000: '庆阳市', - 621100: '定西市', - 621200: '陇南市', - 622900: '临夏回族自治州', - 623000: '甘南藏族自治州', - 630100: '西宁市', - 630200: '海东市', - 632200: '海北藏族自治州', - 632300: '黄南藏族自治州', - 632500: '海南藏族自治州', - 632600: '果洛藏族自治州', - 632700: '玉树藏族自治州', - 632800: '海西蒙古族藏族自治州', - 640100: '银川市', - 640200: '石嘴山市', - 640300: '吴忠市', - 640400: '固原市', - 640500: '中卫市', - 650100: '乌鲁木齐市', - 650200: '克拉玛依市', - 650400: '吐鲁番市', - 650500: '哈密市', - 652300: '昌吉回族自治州', - 652700: '博尔塔拉蒙古自治州', - 652800: '巴音郭楞蒙古自治州', - 652900: '阿克苏地区', - 653000: '克孜勒苏柯尔克孜自治州', - 653100: '喀什地区', - 653200: '和田地区', - 654000: '伊犁哈萨克自治州', - 654200: '塔城地区', - 654300: '阿勒泰地区', - 659000: '自治区直辖县级行政区划', - 710100: '台北市', - 710200: '高雄市', - 710300: '台南市', - 710400: '台中市', - 710500: '金门县', - 710600: '南投县', - 710700: '基隆市', - 710800: '新竹市', - 710900: '嘉义市', - 711100: '新北市', - 711200: '宜兰县', - 711300: '新竹县', - 711400: '桃园县', - 711500: '苗栗县', - 711700: '彰化县', - 711900: '嘉义县', - 712100: '云林县', - 712400: '屏东县', - 712500: '台东县', - 712600: '花莲县', - 712700: '澎湖县', - 712800: '连江县', - 810100: '香港岛', - 810200: '九龙', - 810300: '新界', - 820100: '澳门半岛', - 820200: '离岛', - 912400: '加拿大', - 941000: '韩国', - 984000: '美国' - }, - county_list: { - 110101: '东城区', - 110102: '西城区', - 110105: '朝阳区', - 110106: '丰台区', - 110107: '石景山区', - 110108: '海淀区', - 110109: '门头沟区', - 110111: '房山区', - 110112: '通州区', - 110113: '顺义区', - 110114: '昌平区', - 110115: '大兴区', - 110116: '怀柔区', - 110117: '平谷区', - 110118: '密云区', - 110119: '延庆区', - 120101: '和平区', - 120102: '河东区', - 120103: '河西区', - 120104: '南开区', - 120105: '河北区', - 120106: '红桥区', - 120110: '东丽区', - 120111: '西青区', - 120112: '津南区', - 120113: '北辰区', - 120114: '武清区', - 120115: '宝坻区', - 120116: '滨海新区', - 120117: '宁河区', - 120118: '静海区', - 120119: '蓟州区', - 130102: '长安区', - 130104: '桥西区', - 130105: '新华区', - 130107: '井陉矿区', - 130108: '裕华区', - 130109: '藁城区', - 130110: '鹿泉区', - 130111: '栾城区', - 130121: '井陉县', - 130123: '正定县', - 130125: '行唐县', - 130126: '灵寿县', - 130127: '高邑县', - 130128: '深泽县', - 130129: '赞皇县', - 130130: '无极县', - 130131: '平山县', - 130132: '元氏县', - 130133: '赵县', - 130181: '辛集市', - 130183: '晋州市', - 130184: '新乐市', - 130202: '路南区', - 130203: '路北区', - 130204: '古冶区', - 130205: '开平区', - 130207: '丰南区', - 130208: '丰润区', - 130209: '曹妃甸区', - 130223: '滦县', - 130224: '滦南县', - 130225: '乐亭县', - 130227: '迁西县', - 130229: '玉田县', - 130281: '遵化市', - 130283: '迁安市', - 130302: '海港区', - 130303: '山海关区', - 130304: '北戴河区', - 130306: '抚宁区', - 130321: '青龙满族自治县', - 130322: '昌黎县', - 130324: '卢龙县', - 130390: '经济技术开发区', - 130402: '邯山区', - 130403: '丛台区', - 130404: '复兴区', - 130406: '峰峰矿区', - 130407: '肥乡区', - 130408: '永年区', - 130423: '临漳县', - 130424: '成安县', - 130425: '大名县', - 130426: '涉县', - 130427: '磁县', - 130430: '邱县', - 130431: '鸡泽县', - 130432: '广平县', - 130433: '馆陶县', - 130434: '魏县', - 130435: '曲周县', - 130481: '武安市', - 130502: '桥东区', - 130503: '桥西区', - 130521: '邢台县', - 130522: '临城县', - 130523: '内丘县', - 130524: '柏乡县', - 130525: '隆尧县', - 130526: '任县', - 130527: '南和县', - 130528: '宁晋县', - 130529: '巨鹿县', - 130530: '新河县', - 130531: '广宗县', - 130532: '平乡县', - 130533: '威县', - 130534: '清河县', - 130535: '临西县', - 130581: '南宫市', - 130582: '沙河市', - 130602: '竞秀区', - 130606: '莲池区', - 130607: '满城区', - 130608: '清苑区', - 130609: '徐水区', - 130623: '涞水县', - 130624: '阜平县', - 130626: '定兴县', - 130627: '唐县', - 130628: '高阳县', - 130629: '容城县', - 130630: '涞源县', - 130631: '望都县', - 130632: '安新县', - 130633: '易县', - 130634: '曲阳县', - 130635: '蠡县', - 130636: '顺平县', - 130637: '博野县', - 130638: '雄县', - 130681: '涿州市', - 130682: '定州市', - 130683: '安国市', - 130684: '高碑店市', - 130702: '桥东区', - 130703: '桥西区', - 130705: '宣化区', - 130706: '下花园区', - 130708: '万全区', - 130709: '崇礼区', - 130722: '张北县', - 130723: '康保县', - 130724: '沽源县', - 130725: '尚义县', - 130726: '蔚县', - 130727: '阳原县', - 130728: '怀安县', - 130730: '怀来县', - 130731: '涿鹿县', - 130732: '赤城县', - 130802: '双桥区', - 130803: '双滦区', - 130804: '鹰手营子矿区', - 130821: '承德县', - 130822: '兴隆县', - 130824: '滦平县', - 130825: '隆化县', - 130826: '丰宁满族自治县', - 130827: '宽城满族自治县', - 130828: '围场满族蒙古族自治县', - 130881: '平泉市', - 130902: '新华区', - 130903: '运河区', - 130921: '沧县', - 130922: '青县', - 130923: '东光县', - 130924: '海兴县', - 130925: '盐山县', - 130926: '肃宁县', - 130927: '南皮县', - 130928: '吴桥县', - 130929: '献县', - 130930: '孟村回族自治县', - 130981: '泊头市', - 130982: '任丘市', - 130983: '黄骅市', - 130984: '河间市', - 131002: '安次区', - 131003: '广阳区', - 131022: '固安县', - 131023: '永清县', - 131024: '香河县', - 131025: '大城县', - 131026: '文安县', - 131028: '大厂回族自治县', - 131081: '霸州市', - 131082: '三河市', - 131090: '开发区', - 131102: '桃城区', - 131103: '冀州区', - 131121: '枣强县', - 131122: '武邑县', - 131123: '武强县', - 131124: '饶阳县', - 131125: '安平县', - 131126: '故城县', - 131127: '景县', - 131128: '阜城县', - 131182: '深州市', - 140105: '小店区', - 140106: '迎泽区', - 140107: '杏花岭区', - 140108: '尖草坪区', - 140109: '万柏林区', - 140110: '晋源区', - 140121: '清徐县', - 140122: '阳曲县', - 140123: '娄烦县', - 140181: '古交市', - 140202: '城区', - 140203: '矿区', - 140211: '南郊区', - 140212: '新荣区', - 140221: '阳高县', - 140222: '天镇县', - 140223: '广灵县', - 140224: '灵丘县', - 140225: '浑源县', - 140226: '左云县', - 140227: '大同县', - 140302: '城区', - 140303: '矿区', - 140311: '郊区', - 140321: '平定县', - 140322: '盂县', - 140402: '城区', - 140411: '郊区', - 140421: '长治县', - 140423: '襄垣县', - 140424: '屯留县', - 140425: '平顺县', - 140426: '黎城县', - 140427: '壶关县', - 140428: '长子县', - 140429: '武乡县', - 140430: '沁县', - 140431: '沁源县', - 140481: '潞城市', - 140502: '城区', - 140521: '沁水县', - 140522: '阳城县', - 140524: '陵川县', - 140525: '泽州县', - 140581: '高平市', - 140602: '朔城区', - 140603: '平鲁区', - 140621: '山阴县', - 140622: '应县', - 140623: '右玉县', - 140624: '怀仁县', - 140702: '榆次区', - 140721: '榆社县', - 140722: '左权县', - 140723: '和顺县', - 140724: '昔阳县', - 140725: '寿阳县', - 140726: '太谷县', - 140727: '祁县', - 140728: '平遥县', - 140729: '灵石县', - 140781: '介休市', - 140802: '盐湖区', - 140821: '临猗县', - 140822: '万荣县', - 140823: '闻喜县', - 140824: '稷山县', - 140825: '新绛县', - 140826: '绛县', - 140827: '垣曲县', - 140828: '夏县', - 140829: '平陆县', - 140830: '芮城县', - 140881: '永济市', - 140882: '河津市', - 140902: '忻府区', - 140921: '定襄县', - 140922: '五台县', - 140923: '代县', - 140924: '繁峙县', - 140925: '宁武县', - 140926: '静乐县', - 140927: '神池县', - 140928: '五寨县', - 140929: '岢岚县', - 140930: '河曲县', - 140931: '保德县', - 140932: '偏关县', - 140981: '原平市', - 141002: '尧都区', - 141021: '曲沃县', - 141022: '翼城县', - 141023: '襄汾县', - 141024: '洪洞县', - 141025: '古县', - 141026: '安泽县', - 141027: '浮山县', - 141028: '吉县', - 141029: '乡宁县', - 141030: '大宁县', - 141031: '隰县', - 141032: '永和县', - 141033: '蒲县', - 141034: '汾西县', - 141081: '侯马市', - 141082: '霍州市', - 141102: '离石区', - 141121: '文水县', - 141122: '交城县', - 141123: '兴县', - 141124: '临县', - 141125: '柳林县', - 141126: '石楼县', - 141127: '岚县', - 141128: '方山县', - 141129: '中阳县', - 141130: '交口县', - 141181: '孝义市', - 141182: '汾阳市', - 150102: '新城区', - 150103: '回民区', - 150104: '玉泉区', - 150105: '赛罕区', - 150121: '土默特左旗', - 150122: '托克托县', - 150123: '和林格尔县', - 150124: '清水河县', - 150125: '武川县', - 150202: '东河区', - 150203: '昆都仑区', - 150204: '青山区', - 150205: '石拐区', - 150206: '白云鄂博矿区', - 150207: '九原区', - 150221: '土默特右旗', - 150222: '固阳县', - 150223: '达尔罕茂明安联合旗', - 150302: '海勃湾区', - 150303: '海南区', - 150304: '乌达区', - 150402: '红山区', - 150403: '元宝山区', - 150404: '松山区', - 150421: '阿鲁科尔沁旗', - 150422: '巴林左旗', - 150423: '巴林右旗', - 150424: '林西县', - 150425: '克什克腾旗', - 150426: '翁牛特旗', - 150428: '喀喇沁旗', - 150429: '宁城县', - 150430: '敖汉旗', - 150502: '科尔沁区', - 150521: '科尔沁左翼中旗', - 150522: '科尔沁左翼后旗', - 150523: '开鲁县', - 150524: '库伦旗', - 150525: '奈曼旗', - 150526: '扎鲁特旗', - 150581: '霍林郭勒市', - 150602: '东胜区', - 150603: '康巴什区', - 150621: '达拉特旗', - 150622: '准格尔旗', - 150623: '鄂托克前旗', - 150624: '鄂托克旗', - 150625: '杭锦旗', - 150626: '乌审旗', - 150627: '伊金霍洛旗', - 150702: '海拉尔区', - 150703: '扎赉诺尔区', - 150721: '阿荣旗', - 150722: '莫力达瓦达斡尔族自治旗', - 150723: '鄂伦春自治旗', - 150724: '鄂温克族自治旗', - 150725: '陈巴尔虎旗', - 150726: '新巴尔虎左旗', - 150727: '新巴尔虎右旗', - 150781: '满洲里市', - 150782: '牙克石市', - 150783: '扎兰屯市', - 150784: '额尔古纳市', - 150785: '根河市', - 150802: '临河区', - 150821: '五原县', - 150822: '磴口县', - 150823: '乌拉特前旗', - 150824: '乌拉特中旗', - 150825: '乌拉特后旗', - 150826: '杭锦后旗', - 150902: '集宁区', - 150921: '卓资县', - 150922: '化德县', - 150923: '商都县', - 150924: '兴和县', - 150925: '凉城县', - 150926: '察哈尔右翼前旗', - 150927: '察哈尔右翼中旗', - 150928: '察哈尔右翼后旗', - 150929: '四子王旗', - 150981: '丰镇市', - 152201: '乌兰浩特市', - 152202: '阿尔山市', - 152221: '科尔沁右翼前旗', - 152222: '科尔沁右翼中旗', - 152223: '扎赉特旗', - 152224: '突泉县', - 152501: '二连浩特市', - 152502: '锡林浩特市', - 152522: '阿巴嘎旗', - 152523: '苏尼特左旗', - 152524: '苏尼特右旗', - 152525: '东乌珠穆沁旗', - 152526: '西乌珠穆沁旗', - 152527: '太仆寺旗', - 152528: '镶黄旗', - 152529: '正镶白旗', - 152530: '正蓝旗', - 152531: '多伦县', - 152921: '阿拉善左旗', - 152922: '阿拉善右旗', - 152923: '额济纳旗', - 210102: '和平区', - 210103: '沈河区', - 210104: '大东区', - 210105: '皇姑区', - 210106: '铁西区', - 210111: '苏家屯区', - 210112: '浑南区', - 210113: '沈北新区', - 210114: '于洪区', - 210115: '辽中区', - 210123: '康平县', - 210124: '法库县', - 210181: '新民市', - 210190: '经济技术开发区', - 210202: '中山区', - 210203: '西岗区', - 210204: '沙河口区', - 210211: '甘井子区', - 210212: '旅顺口区', - 210213: '金州区', - 210214: '普兰店区', - 210224: '长海县', - 210281: '瓦房店市', - 210283: '庄河市', - 210302: '铁东区', - 210303: '铁西区', - 210304: '立山区', - 210311: '千山区', - 210321: '台安县', - 210323: '岫岩满族自治县', - 210381: '海城市', - 210390: '高新区', - 210402: '新抚区', - 210403: '东洲区', - 210404: '望花区', - 210411: '顺城区', - 210421: '抚顺县', - 210422: '新宾满族自治县', - 210423: '清原满族自治县', - 210502: '平山区', - 210503: '溪湖区', - 210504: '明山区', - 210505: '南芬区', - 210521: '本溪满族自治县', - 210522: '桓仁满族自治县', - 210602: '元宝区', - 210603: '振兴区', - 210604: '振安区', - 210624: '宽甸满族自治县', - 210681: '东港市', - 210682: '凤城市', - 210702: '古塔区', - 210703: '凌河区', - 210711: '太和区', - 210726: '黑山县', - 210727: '义县', - 210781: '凌海市', - 210782: '北镇市', - 210793: '经济技术开发区', - 210802: '站前区', - 210803: '西市区', - 210804: '鲅鱼圈区', - 210811: '老边区', - 210881: '盖州市', - 210882: '大石桥市', - 210902: '海州区', - 210903: '新邱区', - 210904: '太平区', - 210905: '清河门区', - 210911: '细河区', - 210921: '阜新蒙古族自治县', - 210922: '彰武县', - 211002: '白塔区', - 211003: '文圣区', - 211004: '宏伟区', - 211005: '弓长岭区', - 211011: '太子河区', - 211021: '辽阳县', - 211081: '灯塔市', - 211102: '双台子区', - 211103: '兴隆台区', - 211104: '大洼区', - 211122: '盘山县', - 211202: '银州区', - 211204: '清河区', - 211221: '铁岭县', - 211223: '西丰县', - 211224: '昌图县', - 211281: '调兵山市', - 211282: '开原市', - 211302: '双塔区', - 211303: '龙城区', - 211321: '朝阳县', - 211322: '建平县', - 211324: '喀喇沁左翼蒙古族自治县', - 211381: '北票市', - 211382: '凌源市', - 211402: '连山区', - 211403: '龙港区', - 211404: '南票区', - 211421: '绥中县', - 211422: '建昌县', - 211481: '兴城市', - 215090: '工业园区', - 220102: '南关区', - 220103: '宽城区', - 220104: '朝阳区', - 220105: '二道区', - 220106: '绿园区', - 220112: '双阳区', - 220113: '九台区', - 220122: '农安县', - 220182: '榆树市', - 220183: '德惠市', - 220192: '经济技术开发区', - 220202: '昌邑区', - 220203: '龙潭区', - 220204: '船营区', - 220211: '丰满区', - 220221: '永吉县', - 220281: '蛟河市', - 220282: '桦甸市', - 220283: '舒兰市', - 220284: '磐石市', - 220302: '铁西区', - 220303: '铁东区', - 220322: '梨树县', - 220323: '伊通满族自治县', - 220381: '公主岭市', - 220382: '双辽市', - 220402: '龙山区', - 220403: '西安区', - 220421: '东丰县', - 220422: '东辽县', - 220502: '东昌区', - 220503: '二道江区', - 220521: '通化县', - 220523: '辉南县', - 220524: '柳河县', - 220581: '梅河口市', - 220582: '集安市', - 220602: '浑江区', - 220605: '江源区', - 220621: '抚松县', - 220622: '靖宇县', - 220623: '长白朝鲜族自治县', - 220681: '临江市', - 220702: '宁江区', - 220721: '前郭尔罗斯蒙古族自治县', - 220722: '长岭县', - 220723: '乾安县', - 220781: '扶余市', - 220802: '洮北区', - 220821: '镇赉县', - 220822: '通榆县', - 220881: '洮南市', - 220882: '大安市', - 221090: '工业园区', - 222401: '延吉市', - 222402: '图们市', - 222403: '敦化市', - 222404: '珲春市', - 222405: '龙井市', - 222406: '和龙市', - 222424: '汪清县', - 222426: '安图县', - 230102: '道里区', - 230103: '南岗区', - 230104: '道外区', - 230108: '平房区', - 230109: '松北区', - 230110: '香坊区', - 230111: '呼兰区', - 230112: '阿城区', - 230113: '双城区', - 230123: '依兰县', - 230124: '方正县', - 230125: '宾县', - 230126: '巴彦县', - 230127: '木兰县', - 230128: '通河县', - 230129: '延寿县', - 230183: '尚志市', - 230184: '五常市', - 230202: '龙沙区', - 230203: '建华区', - 230204: '铁锋区', - 230205: '昂昂溪区', - 230206: '富拉尔基区', - 230207: '碾子山区', - 230208: '梅里斯达斡尔族区', - 230221: '龙江县', - 230223: '依安县', - 230224: '泰来县', - 230225: '甘南县', - 230227: '富裕县', - 230229: '克山县', - 230230: '克东县', - 230231: '拜泉县', - 230281: '讷河市', - 230302: '鸡冠区', - 230303: '恒山区', - 230304: '滴道区', - 230305: '梨树区', - 230306: '城子河区', - 230307: '麻山区', - 230321: '鸡东县', - 230381: '虎林市', - 230382: '密山市', - 230402: '向阳区', - 230403: '工农区', - 230404: '南山区', - 230405: '兴安区', - 230406: '东山区', - 230407: '兴山区', - 230421: '萝北县', - 230422: '绥滨县', - 230502: '尖山区', - 230503: '岭东区', - 230505: '四方台区', - 230506: '宝山区', - 230521: '集贤县', - 230522: '友谊县', - 230523: '宝清县', - 230524: '饶河县', - 230602: '萨尔图区', - 230603: '龙凤区', - 230604: '让胡路区', - 230605: '红岗区', - 230606: '大同区', - 230621: '肇州县', - 230622: '肇源县', - 230623: '林甸县', - 230624: '杜尔伯特蒙古族自治县', - 230702: '伊春区', - 230703: '南岔区', - 230704: '友好区', - 230705: '西林区', - 230706: '翠峦区', - 230707: '新青区', - 230708: '美溪区', - 230709: '金山屯区', - 230710: '五营区', - 230711: '乌马河区', - 230712: '汤旺河区', - 230713: '带岭区', - 230714: '乌伊岭区', - 230715: '红星区', - 230716: '上甘岭区', - 230722: '嘉荫县', - 230781: '铁力市', - 230803: '向阳区', - 230804: '前进区', - 230805: '东风区', - 230811: '郊区', - 230822: '桦南县', - 230826: '桦川县', - 230828: '汤原县', - 230881: '同江市', - 230882: '富锦市', - 230883: '抚远市', - 230902: '新兴区', - 230903: '桃山区', - 230904: '茄子河区', - 230921: '勃利县', - 231002: '东安区', - 231003: '阳明区', - 231004: '爱民区', - 231005: '西安区', - 231025: '林口县', - 231081: '绥芬河市', - 231083: '海林市', - 231084: '宁安市', - 231085: '穆棱市', - 231086: '东宁市', - 231102: '爱辉区', - 231121: '嫩江县', - 231123: '逊克县', - 231124: '孙吴县', - 231181: '北安市', - 231182: '五大连池市', - 231202: '北林区', - 231221: '望奎县', - 231222: '兰西县', - 231223: '青冈县', - 231224: '庆安县', - 231225: '明水县', - 231226: '绥棱县', - 231281: '安达市', - 231282: '肇东市', - 231283: '海伦市', - 232721: '呼玛县', - 232722: '塔河县', - 232723: '漠河县', - 232790: '松岭区', - 232791: '呼中区', - 232792: '加格达奇区', - 232793: '新林区', - 310101: '黄浦区', - 310104: '徐汇区', - 310105: '长宁区', - 310106: '静安区', - 310107: '普陀区', - 310109: '虹口区', - 310110: '杨浦区', - 310112: '闵行区', - 310113: '宝山区', - 310114: '嘉定区', - 310115: '浦东新区', - 310116: '金山区', - 310117: '松江区', - 310118: '青浦区', - 310120: '奉贤区', - 310151: '崇明区', - 320102: '玄武区', - 320104: '秦淮区', - 320105: '建邺区', - 320106: '鼓楼区', - 320111: '浦口区', - 320113: '栖霞区', - 320114: '雨花台区', - 320115: '江宁区', - 320116: '六合区', - 320117: '溧水区', - 320118: '高淳区', - 320205: '锡山区', - 320206: '惠山区', - 320211: '滨湖区', - 320213: '梁溪区', - 320214: '新吴区', - 320281: '江阴市', - 320282: '宜兴市', - 320302: '鼓楼区', - 320303: '云龙区', - 320305: '贾汪区', - 320311: '泉山区', - 320312: '铜山区', - 320321: '丰县', - 320322: '沛县', - 320324: '睢宁县', - 320381: '新沂市', - 320382: '邳州市', - 320391: '工业园区', - 320402: '天宁区', - 320404: '钟楼区', - 320411: '新北区', - 320412: '武进区', - 320413: '金坛区', - 320481: '溧阳市', - 320505: '虎丘区', - 320506: '吴中区', - 320507: '相城区', - 320508: '姑苏区', - 320509: '吴江区', - 320581: '常熟市', - 320582: '张家港市', - 320583: '昆山市', - 320585: '太仓市', - 320590: '工业园区', - 320591: '高新区', - 320602: '崇川区', - 320611: '港闸区', - 320612: '通州区', - 320621: '海安县', - 320623: '如东县', - 320681: '启东市', - 320682: '如皋市', - 320684: '海门市', - 320691: '高新区', - 320703: '连云区', - 320706: '海州区', - 320707: '赣榆区', - 320722: '东海县', - 320723: '灌云县', - 320724: '灌南县', - 320803: '淮安区', - 320804: '淮阴区', - 320812: '清江浦区', - 320813: '洪泽区', - 320826: '涟水县', - 320830: '盱眙县', - 320831: '金湖县', - 320890: '经济开发区', - 320902: '亭湖区', - 320903: '盐都区', - 320904: '大丰区', - 320921: '响水县', - 320922: '滨海县', - 320923: '阜宁县', - 320924: '射阳县', - 320925: '建湖县', - 320981: '东台市', - 321002: '广陵区', - 321003: '邗江区', - 321012: '江都区', - 321023: '宝应县', - 321081: '仪征市', - 321084: '高邮市', - 321090: '经济开发区', - 321102: '京口区', - 321111: '润州区', - 321112: '丹徒区', - 321181: '丹阳市', - 321182: '扬中市', - 321183: '句容市', - 321202: '海陵区', - 321203: '高港区', - 321204: '姜堰区', - 321281: '兴化市', - 321282: '靖江市', - 321283: '泰兴市', - 321302: '宿城区', - 321311: '宿豫区', - 321322: '沭阳县', - 321323: '泗阳县', - 321324: '泗洪县', - 330102: '上城区', - 330103: '下城区', - 330104: '江干区', - 330105: '拱墅区', - 330106: '西湖区', - 330108: '滨江区', - 330109: '萧山区', - 330110: '余杭区', - 330111: '富阳区', - 330112: '临安区', - 330122: '桐庐县', - 330127: '淳安县', - 330182: '建德市', - 330203: '海曙区', - 330205: '江北区', - 330206: '北仑区', - 330211: '镇海区', - 330212: '鄞州区', - 330213: '奉化区', - 330225: '象山县', - 330226: '宁海县', - 330281: '余姚市', - 330282: '慈溪市', - 330302: '鹿城区', - 330303: '龙湾区', - 330304: '瓯海区', - 330305: '洞头区', - 330324: '永嘉县', - 330326: '平阳县', - 330327: '苍南县', - 330328: '文成县', - 330329: '泰顺县', - 330381: '瑞安市', - 330382: '乐清市', - 330402: '南湖区', - 330411: '秀洲区', - 330421: '嘉善县', - 330424: '海盐县', - 330481: '海宁市', - 330482: '平湖市', - 330483: '桐乡市', - 330502: '吴兴区', - 330503: '南浔区', - 330521: '德清县', - 330522: '长兴县', - 330523: '安吉县', - 330602: '越城区', - 330603: '柯桥区', - 330604: '上虞区', - 330624: '新昌县', - 330681: '诸暨市', - 330683: '嵊州市', - 330702: '婺城区', - 330703: '金东区', - 330723: '武义县', - 330726: '浦江县', - 330727: '磐安县', - 330781: '兰溪市', - 330782: '义乌市', - 330783: '东阳市', - 330784: '永康市', - 330802: '柯城区', - 330803: '衢江区', - 330822: '常山县', - 330824: '开化县', - 330825: '龙游县', - 330881: '江山市', - 330902: '定海区', - 330903: '普陀区', - 330921: '岱山县', - 330922: '嵊泗县', - 331002: '椒江区', - 331003: '黄岩区', - 331004: '路桥区', - 331022: '三门县', - 331023: '天台县', - 331024: '仙居县', - 331081: '温岭市', - 331082: '临海市', - 331083: '玉环市', - 331102: '莲都区', - 331121: '青田县', - 331122: '缙云县', - 331123: '遂昌县', - 331124: '松阳县', - 331125: '云和县', - 331126: '庆元县', - 331127: '景宁畲族自治县', - 331181: '龙泉市', - 340102: '瑶海区', - 340103: '庐阳区', - 340104: '蜀山区', - 340111: '包河区', - 340121: '长丰县', - 340122: '肥东县', - 340123: '肥西县', - 340124: '庐江县', - 340181: '巢湖市', - 340190: '高新技术开发区', - 340191: '经济技术开发区', - 340202: '镜湖区', - 340203: '弋江区', - 340207: '鸠江区', - 340208: '三山区', - 340221: '芜湖县', - 340222: '繁昌县', - 340223: '南陵县', - 340225: '无为县', - 340302: '龙子湖区', - 340303: '蚌山区', - 340304: '禹会区', - 340311: '淮上区', - 340321: '怀远县', - 340322: '五河县', - 340323: '固镇县', - 340402: '大通区', - 340403: '田家庵区', - 340404: '谢家集区', - 340405: '八公山区', - 340406: '潘集区', - 340421: '凤台县', - 340422: '寿县', - 340503: '花山区', - 340504: '雨山区', - 340506: '博望区', - 340521: '当涂县', - 340522: '含山县', - 340523: '和县', - 340602: '杜集区', - 340603: '相山区', - 340604: '烈山区', - 340621: '濉溪县', - 340705: '铜官区', - 340706: '义安区', - 340711: '郊区', - 340722: '枞阳县', - 340802: '迎江区', - 340803: '大观区', - 340811: '宜秀区', - 340822: '怀宁县', - 340824: '潜山县', - 340825: '太湖县', - 340826: '宿松县', - 340827: '望江县', - 340828: '岳西县', - 340881: '桐城市', - 341002: '屯溪区', - 341003: '黄山区', - 341004: '徽州区', - 341021: '歙县', - 341022: '休宁县', - 341023: '黟县', - 341024: '祁门县', - 341102: '琅琊区', - 341103: '南谯区', - 341122: '来安县', - 341124: '全椒县', - 341125: '定远县', - 341126: '凤阳县', - 341181: '天长市', - 341182: '明光市', - 341202: '颍州区', - 341203: '颍东区', - 341204: '颍泉区', - 341221: '临泉县', - 341222: '太和县', - 341225: '阜南县', - 341226: '颍上县', - 341282: '界首市', - 341302: '埇桥区', - 341321: '砀山县', - 341322: '萧县', - 341323: '灵璧县', - 341324: '泗县', - 341390: '经济开发区', - 341502: '金安区', - 341503: '裕安区', - 341504: '叶集区', - 341522: '霍邱县', - 341523: '舒城县', - 341524: '金寨县', - 341525: '霍山县', - 341602: '谯城区', - 341621: '涡阳县', - 341622: '蒙城县', - 341623: '利辛县', - 341702: '贵池区', - 341721: '东至县', - 341722: '石台县', - 341723: '青阳县', - 341802: '宣州区', - 341821: '郎溪县', - 341822: '广德县', - 341823: '泾县', - 341824: '绩溪县', - 341825: '旌德县', - 341881: '宁国市', - 350102: '鼓楼区', - 350103: '台江区', - 350104: '仓山区', - 350105: '马尾区', - 350111: '晋安区', - 350112: '长乐区', - 350121: '闽侯县', - 350122: '连江县', - 350123: '罗源县', - 350124: '闽清县', - 350125: '永泰县', - 350128: '平潭县', - 350181: '福清市', - 350203: '思明区', - 350205: '海沧区', - 350206: '湖里区', - 350211: '集美区', - 350212: '同安区', - 350213: '翔安区', - 350302: '城厢区', - 350303: '涵江区', - 350304: '荔城区', - 350305: '秀屿区', - 350322: '仙游县', - 350402: '梅列区', - 350403: '三元区', - 350421: '明溪县', - 350423: '清流县', - 350424: '宁化县', - 350425: '大田县', - 350426: '尤溪县', - 350427: '沙县', - 350428: '将乐县', - 350429: '泰宁县', - 350430: '建宁县', - 350481: '永安市', - 350502: '鲤城区', - 350503: '丰泽区', - 350504: '洛江区', - 350505: '泉港区', - 350521: '惠安县', - 350524: '安溪县', - 350525: '永春县', - 350526: '德化县', - 350527: '金门县', - 350581: '石狮市', - 350582: '晋江市', - 350583: '南安市', - 350602: '芗城区', - 350603: '龙文区', - 350622: '云霄县', - 350623: '漳浦县', - 350624: '诏安县', - 350625: '长泰县', - 350626: '东山县', - 350627: '南靖县', - 350628: '平和县', - 350629: '华安县', - 350681: '龙海市', - 350702: '延平区', - 350703: '建阳区', - 350721: '顺昌县', - 350722: '浦城县', - 350723: '光泽县', - 350724: '松溪县', - 350725: '政和县', - 350781: '邵武市', - 350782: '武夷山市', - 350783: '建瓯市', - 350802: '新罗区', - 350803: '永定区', - 350821: '长汀县', - 350823: '上杭县', - 350824: '武平县', - 350825: '连城县', - 350881: '漳平市', - 350902: '蕉城区', - 350921: '霞浦县', - 350922: '古田县', - 350923: '屏南县', - 350924: '寿宁县', - 350925: '周宁县', - 350926: '柘荣县', - 350981: '福安市', - 350982: '福鼎市', - 360102: '东湖区', - 360103: '西湖区', - 360104: '青云谱区', - 360105: '湾里区', - 360111: '青山湖区', - 360112: '新建区', - 360121: '南昌县', - 360123: '安义县', - 360124: '进贤县', - 360190: '经济技术开发区', - 360192: '高新区', - 360202: '昌江区', - 360203: '珠山区', - 360222: '浮梁县', - 360281: '乐平市', - 360302: '安源区', - 360313: '湘东区', - 360321: '莲花县', - 360322: '上栗县', - 360323: '芦溪县', - 360402: '濂溪区', - 360403: '浔阳区', - 360404: '柴桑区', - 360423: '武宁县', - 360424: '修水县', - 360425: '永修县', - 360426: '德安县', - 360428: '都昌县', - 360429: '湖口县', - 360430: '彭泽县', - 360481: '瑞昌市', - 360482: '共青城市', - 360483: '庐山市', - 360490: '经济技术开发区', - 360502: '渝水区', - 360521: '分宜县', - 360602: '月湖区', - 360622: '余江县', - 360681: '贵溪市', - 360702: '章贡区', - 360703: '南康区', - 360704: '赣县区', - 360722: '信丰县', - 360723: '大余县', - 360724: '上犹县', - 360725: '崇义县', - 360726: '安远县', - 360727: '龙南县', - 360728: '定南县', - 360729: '全南县', - 360730: '宁都县', - 360731: '于都县', - 360732: '兴国县', - 360733: '会昌县', - 360734: '寻乌县', - 360735: '石城县', - 360781: '瑞金市', - 360802: '吉州区', - 360803: '青原区', - 360821: '吉安县', - 360822: '吉水县', - 360823: '峡江县', - 360824: '新干县', - 360825: '永丰县', - 360826: '泰和县', - 360827: '遂川县', - 360828: '万安县', - 360829: '安福县', - 360830: '永新县', - 360881: '井冈山市', - 360902: '袁州区', - 360921: '奉新县', - 360922: '万载县', - 360923: '上高县', - 360924: '宜丰县', - 360925: '靖安县', - 360926: '铜鼓县', - 360981: '丰城市', - 360982: '樟树市', - 360983: '高安市', - 361002: '临川区', - 361003: '东乡区', - 361021: '南城县', - 361022: '黎川县', - 361023: '南丰县', - 361024: '崇仁县', - 361025: '乐安县', - 361026: '宜黄县', - 361027: '金溪县', - 361028: '资溪县', - 361030: '广昌县', - 361102: '信州区', - 361103: '广丰区', - 361121: '上饶县', - 361123: '玉山县', - 361124: '铅山县', - 361125: '横峰县', - 361126: '弋阳县', - 361127: '余干县', - 361128: '鄱阳县', - 361129: '万年县', - 361130: '婺源县', - 361181: '德兴市', - 370102: '历下区', - 370103: '市中区', - 370104: '槐荫区', - 370105: '天桥区', - 370112: '历城区', - 370113: '长清区', - 370114: '章丘区', - 370124: '平阴县', - 370125: '济阳县', - 370126: '商河县', - 370190: '高新区', - 370202: '市南区', - 370203: '市北区', - 370211: '黄岛区', - 370212: '崂山区', - 370213: '李沧区', - 370214: '城阳区', - 370215: '即墨区', - 370281: '胶州市', - 370283: '平度市', - 370285: '莱西市', - 370290: '开发区', - 370302: '淄川区', - 370303: '张店区', - 370304: '博山区', - 370305: '临淄区', - 370306: '周村区', - 370321: '桓台县', - 370322: '高青县', - 370323: '沂源县', - 370402: '市中区', - 370403: '薛城区', - 370404: '峄城区', - 370405: '台儿庄区', - 370406: '山亭区', - 370481: '滕州市', - 370502: '东营区', - 370503: '河口区', - 370505: '垦利区', - 370522: '利津县', - 370523: '广饶县', - 370602: '芝罘区', - 370611: '福山区', - 370612: '牟平区', - 370613: '莱山区', - 370634: '长岛县', - 370681: '龙口市', - 370682: '莱阳市', - 370683: '莱州市', - 370684: '蓬莱市', - 370685: '招远市', - 370686: '栖霞市', - 370687: '海阳市', - 370690: '开发区', - 370702: '潍城区', - 370703: '寒亭区', - 370704: '坊子区', - 370705: '奎文区', - 370724: '临朐县', - 370725: '昌乐县', - 370781: '青州市', - 370782: '诸城市', - 370783: '寿光市', - 370784: '安丘市', - 370785: '高密市', - 370786: '昌邑市', - 370790: '开发区', - 370791: '高新区', - 370811: '任城区', - 370812: '兖州区', - 370826: '微山县', - 370827: '鱼台县', - 370828: '金乡县', - 370829: '嘉祥县', - 370830: '汶上县', - 370831: '泗水县', - 370832: '梁山县', - 370881: '曲阜市', - 370883: '邹城市', - 370890: '高新区', - 370902: '泰山区', - 370911: '岱岳区', - 370921: '宁阳县', - 370923: '东平县', - 370982: '新泰市', - 370983: '肥城市', - 371002: '环翠区', - 371003: '文登区', - 371082: '荣成市', - 371083: '乳山市', - 371091: '经济技术开发区', - 371102: '东港区', - 371103: '岚山区', - 371121: '五莲县', - 371122: '莒县', - 371202: '莱城区', - 371203: '钢城区', - 371302: '兰山区', - 371311: '罗庄区', - 371312: '河东区', - 371321: '沂南县', - 371322: '郯城县', - 371323: '沂水县', - 371324: '兰陵县', - 371325: '费县', - 371326: '平邑县', - 371327: '莒南县', - 371328: '蒙阴县', - 371329: '临沭县', - 371402: '德城区', - 371403: '陵城区', - 371422: '宁津县', - 371423: '庆云县', - 371424: '临邑县', - 371425: '齐河县', - 371426: '平原县', - 371427: '夏津县', - 371428: '武城县', - 371481: '乐陵市', - 371482: '禹城市', - 371502: '东昌府区', - 371521: '阳谷县', - 371522: '莘县', - 371523: '茌平县', - 371524: '东阿县', - 371525: '冠县', - 371526: '高唐县', - 371581: '临清市', - 371602: '滨城区', - 371603: '沾化区', - 371621: '惠民县', - 371622: '阳信县', - 371623: '无棣县', - 371625: '博兴县', - 371626: '邹平县', - 371702: '牡丹区', - 371703: '定陶区', - 371721: '曹县', - 371722: '单县', - 371723: '成武县', - 371724: '巨野县', - 371725: '郓城县', - 371726: '鄄城县', - 371728: '东明县', - 410102: '中原区', - 410103: '二七区', - 410104: '管城回族区', - 410105: '金水区', - 410106: '上街区', - 410108: '惠济区', - 410122: '中牟县', - 410181: '巩义市', - 410182: '荥阳市', - 410183: '新密市', - 410184: '新郑市', - 410185: '登封市', - 410190: '高新技术开发区', - 410191: '经济技术开发区', - 410202: '龙亭区', - 410203: '顺河回族区', - 410204: '鼓楼区', - 410205: '禹王台区', - 410212: '祥符区', - 410221: '杞县', - 410222: '通许县', - 410223: '尉氏县', - 410225: '兰考县', - 410302: '老城区', - 410303: '西工区', - 410304: '瀍河回族区', - 410305: '涧西区', - 410306: '吉利区', - 410311: '洛龙区', - 410322: '孟津县', - 410323: '新安县', - 410324: '栾川县', - 410325: '嵩县', - 410326: '汝阳县', - 410327: '宜阳县', - 410328: '洛宁县', - 410329: '伊川县', - 410381: '偃师市', - 410402: '新华区', - 410403: '卫东区', - 410404: '石龙区', - 410411: '湛河区', - 410421: '宝丰县', - 410422: '叶县', - 410423: '鲁山县', - 410425: '郏县', - 410481: '舞钢市', - 410482: '汝州市', - 410502: '文峰区', - 410503: '北关区', - 410505: '殷都区', - 410506: '龙安区', - 410522: '安阳县', - 410523: '汤阴县', - 410526: '滑县', - 410527: '内黄县', - 410581: '林州市', - 410590: '开发区', - 410602: '鹤山区', - 410603: '山城区', - 410611: '淇滨区', - 410621: '浚县', - 410622: '淇县', - 410702: '红旗区', - 410703: '卫滨区', - 410704: '凤泉区', - 410711: '牧野区', - 410721: '新乡县', - 410724: '获嘉县', - 410725: '原阳县', - 410726: '延津县', - 410727: '封丘县', - 410728: '长垣县', - 410781: '卫辉市', - 410782: '辉县市', - 410802: '解放区', - 410803: '中站区', - 410804: '马村区', - 410811: '山阳区', - 410821: '修武县', - 410822: '博爱县', - 410823: '武陟县', - 410825: '温县', - 410882: '沁阳市', - 410883: '孟州市', - 410902: '华龙区', - 410922: '清丰县', - 410923: '南乐县', - 410926: '范县', - 410927: '台前县', - 410928: '濮阳县', - 411002: '魏都区', - 411003: '建安区', - 411024: '鄢陵县', - 411025: '襄城县', - 411081: '禹州市', - 411082: '长葛市', - 411102: '源汇区', - 411103: '郾城区', - 411104: '召陵区', - 411121: '舞阳县', - 411122: '临颍县', - 411202: '湖滨区', - 411203: '陕州区', - 411221: '渑池县', - 411224: '卢氏县', - 411281: '义马市', - 411282: '灵宝市', - 411302: '宛城区', - 411303: '卧龙区', - 411321: '南召县', - 411322: '方城县', - 411323: '西峡县', - 411324: '镇平县', - 411325: '内乡县', - 411326: '淅川县', - 411327: '社旗县', - 411328: '唐河县', - 411329: '新野县', - 411330: '桐柏县', - 411381: '邓州市', - 411402: '梁园区', - 411403: '睢阳区', - 411421: '民权县', - 411422: '睢县', - 411423: '宁陵县', - 411424: '柘城县', - 411425: '虞城县', - 411426: '夏邑县', - 411481: '永城市', - 411502: '浉河区', - 411503: '平桥区', - 411521: '罗山县', - 411522: '光山县', - 411523: '新县', - 411524: '商城县', - 411525: '固始县', - 411526: '潢川县', - 411527: '淮滨县', - 411528: '息县', - 411602: '川汇区', - 411621: '扶沟县', - 411622: '西华县', - 411623: '商水县', - 411624: '沈丘县', - 411625: '郸城县', - 411626: '淮阳县', - 411627: '太康县', - 411628: '鹿邑县', - 411681: '项城市', - 411690: '经济开发区', - 411702: '驿城区', - 411721: '西平县', - 411722: '上蔡县', - 411723: '平舆县', - 411724: '正阳县', - 411725: '确山县', - 411726: '泌阳县', - 411727: '汝南县', - 411728: '遂平县', - 411729: '新蔡县', - 419001: '济源市', - 420102: '江岸区', - 420103: '江汉区', - 420104: '硚口区', - 420105: '汉阳区', - 420106: '武昌区', - 420107: '青山区', - 420111: '洪山区', - 420112: '东西湖区', - 420113: '汉南区', - 420114: '蔡甸区', - 420115: '江夏区', - 420116: '黄陂区', - 420117: '新洲区', - 420202: '黄石港区', - 420203: '西塞山区', - 420204: '下陆区', - 420205: '铁山区', - 420222: '阳新县', - 420281: '大冶市', - 420302: '茅箭区', - 420303: '张湾区', - 420304: '郧阳区', - 420322: '郧西县', - 420323: '竹山县', - 420324: '竹溪县', - 420325: '房县', - 420381: '丹江口市', - 420502: '西陵区', - 420503: '伍家岗区', - 420504: '点军区', - 420505: '猇亭区', - 420506: '夷陵区', - 420525: '远安县', - 420526: '兴山县', - 420527: '秭归县', - 420528: '长阳土家族自治县', - 420529: '五峰土家族自治县', - 420581: '宜都市', - 420582: '当阳市', - 420583: '枝江市', - 420590: '经济开发区', - 420602: '襄城区', - 420606: '樊城区', - 420607: '襄州区', - 420624: '南漳县', - 420625: '谷城县', - 420626: '保康县', - 420682: '老河口市', - 420683: '枣阳市', - 420684: '宜城市', - 420702: '梁子湖区', - 420703: '华容区', - 420704: '鄂城区', - 420802: '东宝区', - 420804: '掇刀区', - 420821: '京山县', - 420822: '沙洋县', - 420881: '钟祥市', - 420902: '孝南区', - 420921: '孝昌县', - 420922: '大悟县', - 420923: '云梦县', - 420981: '应城市', - 420982: '安陆市', - 420984: '汉川市', - 421002: '沙市区', - 421003: '荆州区', - 421022: '公安县', - 421023: '监利县', - 421024: '江陵县', - 421081: '石首市', - 421083: '洪湖市', - 421087: '松滋市', - 421102: '黄州区', - 421121: '团风县', - 421122: '红安县', - 421123: '罗田县', - 421124: '英山县', - 421125: '浠水县', - 421126: '蕲春县', - 421127: '黄梅县', - 421181: '麻城市', - 421182: '武穴市', - 421202: '咸安区', - 421221: '嘉鱼县', - 421222: '通城县', - 421223: '崇阳县', - 421224: '通山县', - 421281: '赤壁市', - 421303: '曾都区', - 421321: '随县', - 421381: '广水市', - 422801: '恩施市', - 422802: '利川市', - 422822: '建始县', - 422823: '巴东县', - 422825: '宣恩县', - 422826: '咸丰县', - 422827: '来凤县', - 422828: '鹤峰县', - 429004: '仙桃市', - 429005: '潜江市', - 429006: '天门市', - 429021: '神农架林区', - 430102: '芙蓉区', - 430103: '天心区', - 430104: '岳麓区', - 430105: '开福区', - 430111: '雨花区', - 430112: '望城区', - 430121: '长沙县', - 430181: '浏阳市', - 430182: '宁乡市', - 430202: '荷塘区', - 430203: '芦淞区', - 430204: '石峰区', - 430211: '天元区', - 430221: '株洲县', - 430223: '攸县', - 430224: '茶陵县', - 430225: '炎陵县', - 430281: '醴陵市', - 430302: '雨湖区', - 430304: '岳塘区', - 430321: '湘潭县', - 430381: '湘乡市', - 430382: '韶山市', - 430405: '珠晖区', - 430406: '雁峰区', - 430407: '石鼓区', - 430408: '蒸湘区', - 430412: '南岳区', - 430421: '衡阳县', - 430422: '衡南县', - 430423: '衡山县', - 430424: '衡东县', - 430426: '祁东县', - 430481: '耒阳市', - 430482: '常宁市', - 430502: '双清区', - 430503: '大祥区', - 430511: '北塔区', - 430521: '邵东县', - 430522: '新邵县', - 430523: '邵阳县', - 430524: '隆回县', - 430525: '洞口县', - 430527: '绥宁县', - 430528: '新宁县', - 430529: '城步苗族自治县', - 430581: '武冈市', - 430602: '岳阳楼区', - 430603: '云溪区', - 430611: '君山区', - 430621: '岳阳县', - 430623: '华容县', - 430624: '湘阴县', - 430626: '平江县', - 430681: '汨罗市', - 430682: '临湘市', - 430702: '武陵区', - 430703: '鼎城区', - 430721: '安乡县', - 430722: '汉寿县', - 430723: '澧县', - 430724: '临澧县', - 430725: '桃源县', - 430726: '石门县', - 430781: '津市市', - 430802: '永定区', - 430811: '武陵源区', - 430821: '慈利县', - 430822: '桑植县', - 430902: '资阳区', - 430903: '赫山区', - 430921: '南县', - 430922: '桃江县', - 430923: '安化县', - 430981: '沅江市', - 431002: '北湖区', - 431003: '苏仙区', - 431021: '桂阳县', - 431022: '宜章县', - 431023: '永兴县', - 431024: '嘉禾县', - 431025: '临武县', - 431026: '汝城县', - 431027: '桂东县', - 431028: '安仁县', - 431081: '资兴市', - 431102: '零陵区', - 431103: '冷水滩区', - 431121: '祁阳县', - 431122: '东安县', - 431123: '双牌县', - 431124: '道县', - 431125: '江永县', - 431126: '宁远县', - 431127: '蓝山县', - 431128: '新田县', - 431129: '江华瑶族自治县', - 431202: '鹤城区', - 431221: '中方县', - 431222: '沅陵县', - 431223: '辰溪县', - 431224: '溆浦县', - 431225: '会同县', - 431226: '麻阳苗族自治县', - 431227: '新晃侗族自治县', - 431228: '芷江侗族自治县', - 431229: '靖州苗族侗族自治县', - 431230: '通道侗族自治县', - 431281: '洪江市', - 431302: '娄星区', - 431321: '双峰县', - 431322: '新化县', - 431381: '冷水江市', - 431382: '涟源市', - 433101: '吉首市', - 433122: '泸溪县', - 433123: '凤凰县', - 433124: '花垣县', - 433125: '保靖县', - 433126: '古丈县', - 433127: '永顺县', - 433130: '龙山县', - 440103: '荔湾区', - 440104: '越秀区', - 440105: '海珠区', - 440106: '天河区', - 440111: '白云区', - 440112: '黄埔区', - 440113: '番禺区', - 440114: '花都区', - 440115: '南沙区', - 440117: '从化区', - 440118: '增城区', - 440203: '武江区', - 440204: '浈江区', - 440205: '曲江区', - 440222: '始兴县', - 440224: '仁化县', - 440229: '翁源县', - 440232: '乳源瑶族自治县', - 440233: '新丰县', - 440281: '乐昌市', - 440282: '南雄市', - 440303: '罗湖区', - 440304: '福田区', - 440305: '南山区', - 440306: '宝安区', - 440307: '龙岗区', - 440308: '盐田区', - 440309: '龙华区', - 440310: '坪山区', - 440402: '香洲区', - 440403: '斗门区', - 440404: '金湾区', - 440507: '龙湖区', - 440511: '金平区', - 440512: '濠江区', - 440513: '潮阳区', - 440514: '潮南区', - 440515: '澄海区', - 440523: '南澳县', - 440604: '禅城区', - 440605: '南海区', - 440606: '顺德区', - 440607: '三水区', - 440608: '高明区', - 440703: '蓬江区', - 440704: '江海区', - 440705: '新会区', - 440781: '台山市', - 440783: '开平市', - 440784: '鹤山市', - 440785: '恩平市', - 440802: '赤坎区', - 440803: '霞山区', - 440804: '坡头区', - 440811: '麻章区', - 440823: '遂溪县', - 440825: '徐闻县', - 440881: '廉江市', - 440882: '雷州市', - 440883: '吴川市', - 440890: '经济技术开发区', - 440902: '茂南区', - 440904: '电白区', - 440981: '高州市', - 440982: '化州市', - 440983: '信宜市', - 441202: '端州区', - 441203: '鼎湖区', - 441204: '高要区', - 441223: '广宁县', - 441224: '怀集县', - 441225: '封开县', - 441226: '德庆县', - 441284: '四会市', - 441302: '惠城区', - 441303: '惠阳区', - 441322: '博罗县', - 441323: '惠东县', - 441324: '龙门县', - 441402: '梅江区', - 441403: '梅县区', - 441422: '大埔县', - 441423: '丰顺县', - 441424: '五华县', - 441426: '平远县', - 441427: '蕉岭县', - 441481: '兴宁市', - 441502: '城区', - 441521: '海丰县', - 441523: '陆河县', - 441581: '陆丰市', - 441602: '源城区', - 441621: '紫金县', - 441622: '龙川县', - 441623: '连平县', - 441624: '和平县', - 441625: '东源县', - 441702: '江城区', - 441704: '阳东区', - 441721: '阳西县', - 441781: '阳春市', - 441802: '清城区', - 441803: '清新区', - 441821: '佛冈县', - 441823: '阳山县', - 441825: '连山壮族瑶族自治县', - 441826: '连南瑶族自治县', - 441881: '英德市', - 441882: '连州市', - 441901: '中堂镇', - 441903: '南城区', - 441904: '长安镇', - 441905: '东坑镇', - 441906: '樟木头镇', - 441907: '莞城区', - 441908: '石龙镇', - 441909: '桥头镇', - 441910: '万江区', - 441911: '麻涌镇', - 441912: '虎门镇', - 441913: '谢岗镇', - 441914: '石碣镇', - 441915: '茶山镇', - 441916: '东城区', - 441917: '洪梅镇', - 441918: '道滘镇', - 441919: '高埗镇', - 441920: '企石镇', - 441921: '凤岗镇', - 441922: '大岭山镇', - 441923: '松山湖', - 441924: '清溪镇', - 441925: '望牛墩镇', - 441926: '厚街镇', - 441927: '常平镇', - 441928: '寮步镇', - 441929: '石排镇', - 441930: '横沥镇', - 441931: '塘厦镇', - 441932: '黄江镇', - 441933: '大朗镇', - 441990: '沙田镇', - 442001: '南头镇', - 442002: '神湾镇', - 442003: '东凤镇', - 442004: '五桂山镇', - 442005: '黄圃镇', - 442006: '小榄镇', - 442007: '石岐区街道', - 442008: '横栏镇', - 442009: '三角镇', - 442010: '三乡镇', - 442011: '港口镇', - 442012: '沙溪镇', - 442013: '板芙镇', - 442014: '沙朗镇', - 442015: '东升镇', - 442016: '阜沙镇', - 442017: '民众镇', - 442018: '东区街道', - 442019: '火炬开发区', - 442020: '西区街道', - 442021: '南区街道', - 442022: '古镇', - 442023: '坦洲镇', - 442024: '大涌镇', - 442025: '南朗镇', - 445102: '湘桥区', - 445103: '潮安区', - 445122: '饶平县', - 445202: '榕城区', - 445203: '揭东区', - 445222: '揭西县', - 445224: '惠来县', - 445281: '普宁市', - 445302: '云城区', - 445303: '云安区', - 445321: '新兴县', - 445322: '郁南县', - 445381: '罗定市', - 450102: '兴宁区', - 450103: '青秀区', - 450105: '江南区', - 450107: '西乡塘区', - 450108: '良庆区', - 450109: '邕宁区', - 450110: '武鸣区', - 450123: '隆安县', - 450124: '马山县', - 450125: '上林县', - 450126: '宾阳县', - 450127: '横县', - 450202: '城中区', - 450203: '鱼峰区', - 450204: '柳南区', - 450205: '柳北区', - 450206: '柳江区', - 450222: '柳城县', - 450223: '鹿寨县', - 450224: '融安县', - 450225: '融水苗族自治县', - 450226: '三江侗族自治县', - 450302: '秀峰区', - 450303: '叠彩区', - 450304: '象山区', - 450305: '七星区', - 450311: '雁山区', - 450312: '临桂区', - 450321: '阳朔县', - 450323: '灵川县', - 450324: '全州县', - 450325: '兴安县', - 450326: '永福县', - 450327: '灌阳县', - 450328: '龙胜各族自治县', - 450329: '资源县', - 450330: '平乐县', - 450331: '荔浦县', - 450332: '恭城瑶族自治县', - 450403: '万秀区', - 450405: '长洲区', - 450406: '龙圩区', - 450421: '苍梧县', - 450422: '藤县', - 450423: '蒙山县', - 450481: '岑溪市', - 450502: '海城区', - 450503: '银海区', - 450512: '铁山港区', - 450521: '合浦县', - 450602: '港口区', - 450603: '防城区', - 450621: '上思县', - 450681: '东兴市', - 450702: '钦南区', - 450703: '钦北区', - 450721: '灵山县', - 450722: '浦北县', - 450802: '港北区', - 450803: '港南区', - 450804: '覃塘区', - 450821: '平南县', - 450881: '桂平市', - 450902: '玉州区', - 450903: '福绵区', - 450921: '容县', - 450922: '陆川县', - 450923: '博白县', - 450924: '兴业县', - 450981: '北流市', - 451002: '右江区', - 451021: '田阳县', - 451022: '田东县', - 451023: '平果县', - 451024: '德保县', - 451026: '那坡县', - 451027: '凌云县', - 451028: '乐业县', - 451029: '田林县', - 451030: '西林县', - 451031: '隆林各族自治县', - 451081: '靖西市', - 451102: '八步区', - 451103: '平桂区', - 451121: '昭平县', - 451122: '钟山县', - 451123: '富川瑶族自治县', - 451202: '金城江区', - 451203: '宜州区', - 451221: '南丹县', - 451222: '天峨县', - 451223: '凤山县', - 451224: '东兰县', - 451225: '罗城仫佬族自治县', - 451226: '环江毛南族自治县', - 451227: '巴马瑶族自治县', - 451228: '都安瑶族自治县', - 451229: '大化瑶族自治县', - 451302: '兴宾区', - 451321: '忻城县', - 451322: '象州县', - 451323: '武宣县', - 451324: '金秀瑶族自治县', - 451381: '合山市', - 451402: '江州区', - 451421: '扶绥县', - 451422: '宁明县', - 451423: '龙州县', - 451424: '大新县', - 451425: '天等县', - 451481: '凭祥市', - 460105: '秀英区', - 460106: '龙华区', - 460107: '琼山区', - 460108: '美兰区', - 460202: '海棠区', - 460203: '吉阳区', - 460204: '天涯区', - 460205: '崖州区', - 460321: '西沙群岛', - 460322: '南沙群岛', - 460323: '中沙群岛的岛礁及其海域', - 460401: '那大镇', - 460402: '和庆镇', - 460403: '南丰镇', - 460404: '大成镇', - 460405: '雅星镇', - 460406: '兰洋镇', - 460407: '光村镇', - 460408: '木棠镇', - 460409: '海头镇', - 460410: '峨蔓镇', - 460411: '王五镇', - 460412: '白马井镇', - 460413: '中和镇', - 460414: '排浦镇', - 460415: '东成镇', - 460416: '新州镇', - 469001: '五指山市', - 469002: '琼海市', - 469005: '文昌市', - 469006: '万宁市', - 469007: '东方市', - 469021: '定安县', - 469022: '屯昌县', - 469023: '澄迈县', - 469024: '临高县', - 469025: '白沙黎族自治县', - 469026: '昌江黎族自治县', - 469027: '乐东黎族自治县', - 469028: '陵水黎族自治县', - 469029: '保亭黎族苗族自治县', - 469030: '琼中黎族苗族自治县', - 500101: '万州区', - 500102: '涪陵区', - 500103: '渝中区', - 500104: '大渡口区', - 500105: '江北区', - 500106: '沙坪坝区', - 500107: '九龙坡区', - 500108: '南岸区', - 500109: '北碚区', - 500110: '綦江区', - 500111: '大足区', - 500112: '渝北区', - 500113: '巴南区', - 500114: '黔江区', - 500115: '长寿区', - 500116: '江津区', - 500117: '合川区', - 500118: '永川区', - 500119: '南川区', - 500120: '璧山区', - 500151: '铜梁区', - 500152: '潼南区', - 500153: '荣昌区', - 500154: '开州区', - 500155: '梁平区', - 500156: '武隆区', - 500229: '城口县', - 500230: '丰都县', - 500231: '垫江县', - 500233: '忠县', - 500235: '云阳县', - 500236: '奉节县', - 500237: '巫山县', - 500238: '巫溪县', - 500240: '石柱土家族自治县', - 500241: '秀山土家族苗族自治县', - 500242: '酉阳土家族苗族自治县', - 500243: '彭水苗族土家族自治县', - 510104: '锦江区', - 510105: '青羊区', - 510106: '金牛区', - 510107: '武侯区', - 510108: '成华区', - 510112: '龙泉驿区', - 510113: '青白江区', - 510114: '新都区', - 510115: '温江区', - 510116: '双流区', - 510117: '郫都区', - 510121: '金堂县', - 510129: '大邑县', - 510131: '蒲江县', - 510132: '新津县', - 510181: '都江堰市', - 510182: '彭州市', - 510183: '邛崃市', - 510184: '崇州市', - 510185: '简阳市', - 510191: '高新区', - 510302: '自流井区', - 510303: '贡井区', - 510304: '大安区', - 510311: '沿滩区', - 510321: '荣县', - 510322: '富顺县', - 510402: '东区', - 510403: '西区', - 510411: '仁和区', - 510421: '米易县', - 510422: '盐边县', - 510502: '江阳区', - 510503: '纳溪区', - 510504: '龙马潭区', - 510521: '泸县', - 510522: '合江县', - 510524: '叙永县', - 510525: '古蔺县', - 510603: '旌阳区', - 510604: '罗江区', - 510623: '中江县', - 510681: '广汉市', - 510682: '什邡市', - 510683: '绵竹市', - 510703: '涪城区', - 510704: '游仙区', - 510705: '安州区', - 510722: '三台县', - 510723: '盐亭县', - 510725: '梓潼县', - 510726: '北川羌族自治县', - 510727: '平武县', - 510781: '江油市', - 510791: '高新区', - 510802: '利州区', - 510811: '昭化区', - 510812: '朝天区', - 510821: '旺苍县', - 510822: '青川县', - 510823: '剑阁县', - 510824: '苍溪县', - 510903: '船山区', - 510904: '安居区', - 510921: '蓬溪县', - 510922: '射洪县', - 510923: '大英县', - 511002: '市中区', - 511011: '东兴区', - 511024: '威远县', - 511025: '资中县', - 511083: '隆昌市', - 511102: '市中区', - 511111: '沙湾区', - 511112: '五通桥区', - 511113: '金口河区', - 511123: '犍为县', - 511124: '井研县', - 511126: '夹江县', - 511129: '沐川县', - 511132: '峨边彝族自治县', - 511133: '马边彝族自治县', - 511181: '峨眉山市', - 511302: '顺庆区', - 511303: '高坪区', - 511304: '嘉陵区', - 511321: '南部县', - 511322: '营山县', - 511323: '蓬安县', - 511324: '仪陇县', - 511325: '西充县', - 511381: '阆中市', - 511402: '东坡区', - 511403: '彭山区', - 511421: '仁寿县', - 511423: '洪雅县', - 511424: '丹棱县', - 511425: '青神县', - 511502: '翠屏区', - 511503: '南溪区', - 511521: '宜宾县', - 511523: '江安县', - 511524: '长宁县', - 511525: '高县', - 511526: '珙县', - 511527: '筠连县', - 511528: '兴文县', - 511529: '屏山县', - 511602: '广安区', - 511603: '前锋区', - 511621: '岳池县', - 511622: '武胜县', - 511623: '邻水县', - 511681: '华蓥市', - 511702: '通川区', - 511703: '达川区', - 511722: '宣汉县', - 511723: '开江县', - 511724: '大竹县', - 511725: '渠县', - 511781: '万源市', - 511802: '雨城区', - 511803: '名山区', - 511822: '荥经县', - 511823: '汉源县', - 511824: '石棉县', - 511825: '天全县', - 511826: '芦山县', - 511827: '宝兴县', - 511902: '巴州区', - 511903: '恩阳区', - 511921: '通江县', - 511922: '南江县', - 511923: '平昌县', - 512002: '雁江区', - 512021: '安岳县', - 512022: '乐至县', - 513201: '马尔康市', - 513221: '汶川县', - 513222: '理县', - 513223: '茂县', - 513224: '松潘县', - 513225: '九寨沟县', - 513226: '金川县', - 513227: '小金县', - 513228: '黑水县', - 513230: '壤塘县', - 513231: '阿坝县', - 513232: '若尔盖县', - 513233: '红原县', - 513301: '康定市', - 513322: '泸定县', - 513323: '丹巴县', - 513324: '九龙县', - 513325: '雅江县', - 513326: '道孚县', - 513327: '炉霍县', - 513328: '甘孜县', - 513329: '新龙县', - 513330: '德格县', - 513331: '白玉县', - 513332: '石渠县', - 513333: '色达县', - 513334: '理塘县', - 513335: '巴塘县', - 513336: '乡城县', - 513337: '稻城县', - 513338: '得荣县', - 513401: '西昌市', - 513422: '木里藏族自治县', - 513423: '盐源县', - 513424: '德昌县', - 513425: '会理县', - 513426: '会东县', - 513427: '宁南县', - 513428: '普格县', - 513429: '布拖县', - 513430: '金阳县', - 513431: '昭觉县', - 513432: '喜德县', - 513433: '冕宁县', - 513434: '越西县', - 513435: '甘洛县', - 513436: '美姑县', - 513437: '雷波县', - 520102: '南明区', - 520103: '云岩区', - 520111: '花溪区', - 520112: '乌当区', - 520113: '白云区', - 520115: '观山湖区', - 520121: '开阳县', - 520122: '息烽县', - 520123: '修文县', - 520181: '清镇市', - 520201: '钟山区', - 520203: '六枝特区', - 520221: '水城县', - 520281: '盘州市', - 520302: '红花岗区', - 520303: '汇川区', - 520304: '播州区', - 520322: '桐梓县', - 520323: '绥阳县', - 520324: '正安县', - 520325: '道真仡佬族苗族自治县', - 520326: '务川仡佬族苗族自治县', - 520327: '凤冈县', - 520328: '湄潭县', - 520329: '余庆县', - 520330: '习水县', - 520381: '赤水市', - 520382: '仁怀市', - 520402: '西秀区', - 520403: '平坝区', - 520422: '普定县', - 520423: '镇宁布依族苗族自治县', - 520424: '关岭布依族苗族自治县', - 520425: '紫云苗族布依族自治县', - 520502: '七星关区', - 520521: '大方县', - 520522: '黔西县', - 520523: '金沙县', - 520524: '织金县', - 520525: '纳雍县', - 520526: '威宁彝族回族苗族自治县', - 520527: '赫章县', - 520602: '碧江区', - 520603: '万山区', - 520621: '江口县', - 520622: '玉屏侗族自治县', - 520623: '石阡县', - 520624: '思南县', - 520625: '印江土家族苗族自治县', - 520626: '德江县', - 520627: '沿河土家族自治县', - 520628: '松桃苗族自治县', - 522301: '兴义市', - 522322: '兴仁县', - 522323: '普安县', - 522324: '晴隆县', - 522325: '贞丰县', - 522326: '望谟县', - 522327: '册亨县', - 522328: '安龙县', - 522601: '凯里市', - 522622: '黄平县', - 522623: '施秉县', - 522624: '三穗县', - 522625: '镇远县', - 522626: '岑巩县', - 522627: '天柱县', - 522628: '锦屏县', - 522629: '剑河县', - 522630: '台江县', - 522631: '黎平县', - 522632: '榕江县', - 522633: '从江县', - 522634: '雷山县', - 522635: '麻江县', - 522636: '丹寨县', - 522701: '都匀市', - 522702: '福泉市', - 522722: '荔波县', - 522723: '贵定县', - 522725: '瓮安县', - 522726: '独山县', - 522727: '平塘县', - 522728: '罗甸县', - 522729: '长顺县', - 522730: '龙里县', - 522731: '惠水县', - 522732: '三都水族自治县', - 530102: '五华区', - 530103: '盘龙区', - 530111: '官渡区', - 530112: '西山区', - 530113: '东川区', - 530114: '呈贡区', - 530115: '晋宁区', - 530124: '富民县', - 530125: '宜良县', - 530126: '石林彝族自治县', - 530127: '嵩明县', - 530128: '禄劝彝族苗族自治县', - 530129: '寻甸回族彝族自治县', - 530181: '安宁市', - 530302: '麒麟区', - 530303: '沾益区', - 530321: '马龙县', - 530322: '陆良县', - 530323: '师宗县', - 530324: '罗平县', - 530325: '富源县', - 530326: '会泽县', - 530381: '宣威市', - 530402: '红塔区', - 530403: '江川区', - 530422: '澄江县', - 530423: '通海县', - 530424: '华宁县', - 530425: '易门县', - 530426: '峨山彝族自治县', - 530427: '新平彝族傣族自治县', - 530428: '元江哈尼族彝族傣族自治县', - 530502: '隆阳区', - 530521: '施甸县', - 530523: '龙陵县', - 530524: '昌宁县', - 530581: '腾冲市', - 530602: '昭阳区', - 530621: '鲁甸县', - 530622: '巧家县', - 530623: '盐津县', - 530624: '大关县', - 530625: '永善县', - 530626: '绥江县', - 530627: '镇雄县', - 530628: '彝良县', - 530629: '威信县', - 530630: '水富县', - 530702: '古城区', - 530721: '玉龙纳西族自治县', - 530722: '永胜县', - 530723: '华坪县', - 530724: '宁蒗彝族自治县', - 530802: '思茅区', - 530821: '宁洱哈尼族彝族自治县', - 530822: '墨江哈尼族自治县', - 530823: '景东彝族自治县', - 530824: '景谷傣族彝族自治县', - 530825: '镇沅彝族哈尼族拉祜族自治县', - 530826: '江城哈尼族彝族自治县', - 530827: '孟连傣族拉祜族佤族自治县', - 530828: '澜沧拉祜族自治县', - 530829: '西盟佤族自治县', - 530902: '临翔区', - 530921: '凤庆县', - 530922: '云县', - 530923: '永德县', - 530924: '镇康县', - 530925: '双江拉祜族佤族布朗族傣族自治县', - 530926: '耿马傣族佤族自治县', - 530927: '沧源佤族自治县', - 532301: '楚雄市', - 532322: '双柏县', - 532323: '牟定县', - 532324: '南华县', - 532325: '姚安县', - 532326: '大姚县', - 532327: '永仁县', - 532328: '元谋县', - 532329: '武定县', - 532331: '禄丰县', - 532501: '个旧市', - 532502: '开远市', - 532503: '蒙自市', - 532504: '弥勒市', - 532523: '屏边苗族自治县', - 532524: '建水县', - 532525: '石屏县', - 532527: '泸西县', - 532528: '元阳县', - 532529: '红河县', - 532530: '金平苗族瑶族傣族自治县', - 532531: '绿春县', - 532532: '河口瑶族自治县', - 532601: '文山市', - 532622: '砚山县', - 532623: '西畴县', - 532624: '麻栗坡县', - 532625: '马关县', - 532626: '丘北县', - 532627: '广南县', - 532628: '富宁县', - 532801: '景洪市', - 532822: '勐海县', - 532823: '勐腊县', - 532901: '大理市', - 532922: '漾濞彝族自治县', - 532923: '祥云县', - 532924: '宾川县', - 532925: '弥渡县', - 532926: '南涧彝族自治县', - 532927: '巍山彝族回族自治县', - 532928: '永平县', - 532929: '云龙县', - 532930: '洱源县', - 532931: '剑川县', - 532932: '鹤庆县', - 533102: '瑞丽市', - 533103: '芒市', - 533122: '梁河县', - 533123: '盈江县', - 533124: '陇川县', - 533301: '泸水市', - 533323: '福贡县', - 533324: '贡山独龙族怒族自治县', - 533325: '兰坪白族普米族自治县', - 533401: '香格里拉市', - 533422: '德钦县', - 533423: '维西傈僳族自治县', - 540102: '城关区', - 540103: '堆龙德庆区', - 540104: '达孜区', - 540121: '林周县', - 540122: '当雄县', - 540123: '尼木县', - 540124: '曲水县', - 540127: '墨竹工卡县', - 540202: '桑珠孜区', - 540221: '南木林县', - 540222: '江孜县', - 540223: '定日县', - 540224: '萨迦县', - 540225: '拉孜县', - 540226: '昂仁县', - 540227: '谢通门县', - 540228: '白朗县', - 540229: '仁布县', - 540230: '康马县', - 540231: '定结县', - 540232: '仲巴县', - 540233: '亚东县', - 540234: '吉隆县', - 540235: '聂拉木县', - 540236: '萨嘎县', - 540237: '岗巴县', - 540302: '卡若区', - 540321: '江达县', - 540322: '贡觉县', - 540323: '类乌齐县', - 540324: '丁青县', - 540325: '察雅县', - 540326: '八宿县', - 540327: '左贡县', - 540328: '芒康县', - 540329: '洛隆县', - 540330: '边坝县', - 540402: '巴宜区', - 540421: '工布江达县', - 540422: '米林县', - 540423: '墨脱县', - 540424: '波密县', - 540425: '察隅县', - 540426: '朗县', - 540502: '乃东区', - 540521: '扎囊县', - 540522: '贡嘎县', - 540523: '桑日县', - 540524: '琼结县', - 540525: '曲松县', - 540526: '措美县', - 540527: '洛扎县', - 540528: '加查县', - 540529: '隆子县', - 540530: '错那县', - 540531: '浪卡子县', - 540602: '色尼区', - 542421: '那曲县', - 542422: '嘉黎县', - 542423: '比如县', - 542424: '聂荣县', - 542425: '安多县', - 542426: '申扎县', - 542427: '索县', - 542428: '班戈县', - 542429: '巴青县', - 542430: '尼玛县', - 542431: '双湖县', - 542521: '普兰县', - 542522: '札达县', - 542523: '噶尔县', - 542524: '日土县', - 542525: '革吉县', - 542526: '改则县', - 542527: '措勤县', - 610102: '新城区', - 610103: '碑林区', - 610104: '莲湖区', - 610111: '灞桥区', - 610112: '未央区', - 610113: '雁塔区', - 610114: '阎良区', - 610115: '临潼区', - 610116: '长安区', - 610117: '高陵区', - 610118: '鄠邑区', - 610122: '蓝田县', - 610124: '周至县', - 610202: '王益区', - 610203: '印台区', - 610204: '耀州区', - 610222: '宜君县', - 610302: '渭滨区', - 610303: '金台区', - 610304: '陈仓区', - 610322: '凤翔县', - 610323: '岐山县', - 610324: '扶风县', - 610326: '眉县', - 610327: '陇县', - 610328: '千阳县', - 610329: '麟游县', - 610330: '凤县', - 610331: '太白县', - 610402: '秦都区', - 610403: '杨陵区', - 610404: '渭城区', - 610422: '三原县', - 610423: '泾阳县', - 610424: '乾县', - 610425: '礼泉县', - 610426: '永寿县', - 610427: '彬县', - 610428: '长武县', - 610429: '旬邑县', - 610430: '淳化县', - 610431: '武功县', - 610481: '兴平市', - 610502: '临渭区', - 610503: '华州区', - 610522: '潼关县', - 610523: '大荔县', - 610524: '合阳县', - 610525: '澄城县', - 610526: '蒲城县', - 610527: '白水县', - 610528: '富平县', - 610581: '韩城市', - 610582: '华阴市', - 610602: '宝塔区', - 610603: '安塞区', - 610621: '延长县', - 610622: '延川县', - 610623: '子长县', - 610625: '志丹县', - 610626: '吴起县', - 610627: '甘泉县', - 610628: '富县', - 610629: '洛川县', - 610630: '宜川县', - 610631: '黄龙县', - 610632: '黄陵县', - 610702: '汉台区', - 610703: '南郑区', - 610722: '城固县', - 610723: '洋县', - 610724: '西乡县', - 610725: '勉县', - 610726: '宁强县', - 610727: '略阳县', - 610728: '镇巴县', - 610729: '留坝县', - 610730: '佛坪县', - 610802: '榆阳区', - 610803: '横山区', - 610822: '府谷县', - 610824: '靖边县', - 610825: '定边县', - 610826: '绥德县', - 610827: '米脂县', - 610828: '佳县', - 610829: '吴堡县', - 610830: '清涧县', - 610831: '子洲县', - 610881: '神木市', - 610902: '汉滨区', - 610921: '汉阴县', - 610922: '石泉县', - 610923: '宁陕县', - 610924: '紫阳县', - 610925: '岚皋县', - 610926: '平利县', - 610927: '镇坪县', - 610928: '旬阳县', - 610929: '白河县', - 611002: '商州区', - 611021: '洛南县', - 611022: '丹凤县', - 611023: '商南县', - 611024: '山阳县', - 611025: '镇安县', - 611026: '柞水县', - 620102: '城关区', - 620103: '七里河区', - 620104: '西固区', - 620105: '安宁区', - 620111: '红古区', - 620121: '永登县', - 620122: '皋兰县', - 620123: '榆中县', - 620201: '市辖区', - 620290: '雄关区', - 620291: '长城区', - 620292: '镜铁区', - 620293: '新城镇', - 620294: '峪泉镇', - 620295: '文殊镇', - 620302: '金川区', - 620321: '永昌县', - 620402: '白银区', - 620403: '平川区', - 620421: '靖远县', - 620422: '会宁县', - 620423: '景泰县', - 620502: '秦州区', - 620503: '麦积区', - 620521: '清水县', - 620522: '秦安县', - 620523: '甘谷县', - 620524: '武山县', - 620525: '张家川回族自治县', - 620602: '凉州区', - 620621: '民勤县', - 620622: '古浪县', - 620623: '天祝藏族自治县', - 620702: '甘州区', - 620721: '肃南裕固族自治县', - 620722: '民乐县', - 620723: '临泽县', - 620724: '高台县', - 620725: '山丹县', - 620802: '崆峒区', - 620821: '泾川县', - 620822: '灵台县', - 620823: '崇信县', - 620824: '华亭县', - 620825: '庄浪县', - 620826: '静宁县', - 620902: '肃州区', - 620921: '金塔县', - 620922: '瓜州县', - 620923: '肃北蒙古族自治县', - 620924: '阿克塞哈萨克族自治县', - 620981: '玉门市', - 620982: '敦煌市', - 621002: '西峰区', - 621021: '庆城县', - 621022: '环县', - 621023: '华池县', - 621024: '合水县', - 621025: '正宁县', - 621026: '宁县', - 621027: '镇原县', - 621102: '安定区', - 621121: '通渭县', - 621122: '陇西县', - 621123: '渭源县', - 621124: '临洮县', - 621125: '漳县', - 621126: '岷县', - 621202: '武都区', - 621221: '成县', - 621222: '文县', - 621223: '宕昌县', - 621224: '康县', - 621225: '西和县', - 621226: '礼县', - 621227: '徽县', - 621228: '两当县', - 622901: '临夏市', - 622921: '临夏县', - 622922: '康乐县', - 622923: '永靖县', - 622924: '广河县', - 622925: '和政县', - 622926: '东乡族自治县', - 622927: '积石山保安族东乡族撒拉族自治县', - 623001: '合作市', - 623021: '临潭县', - 623022: '卓尼县', - 623023: '舟曲县', - 623024: '迭部县', - 623025: '玛曲县', - 623026: '碌曲县', - 623027: '夏河县', - 630102: '城东区', - 630103: '城中区', - 630104: '城西区', - 630105: '城北区', - 630121: '大通回族土族自治县', - 630122: '湟中县', - 630123: '湟源县', - 630202: '乐都区', - 630203: '平安区', - 630222: '民和回族土族自治县', - 630223: '互助土族自治县', - 630224: '化隆回族自治县', - 630225: '循化撒拉族自治县', - 632221: '门源回族自治县', - 632222: '祁连县', - 632223: '海晏县', - 632224: '刚察县', - 632321: '同仁县', - 632322: '尖扎县', - 632323: '泽库县', - 632324: '河南蒙古族自治县', - 632521: '共和县', - 632522: '同德县', - 632523: '贵德县', - 632524: '兴海县', - 632525: '贵南县', - 632621: '玛沁县', - 632622: '班玛县', - 632623: '甘德县', - 632624: '达日县', - 632625: '久治县', - 632626: '玛多县', - 632701: '玉树市', - 632722: '杂多县', - 632723: '称多县', - 632724: '治多县', - 632725: '囊谦县', - 632726: '曲麻莱县', - 632801: '格尔木市', - 632802: '德令哈市', - 632821: '乌兰县', - 632822: '都兰县', - 632823: '天峻县', - 640104: '兴庆区', - 640105: '西夏区', - 640106: '金凤区', - 640121: '永宁县', - 640122: '贺兰县', - 640181: '灵武市', - 640202: '大武口区', - 640205: '惠农区', - 640221: '平罗县', - 640302: '利通区', - 640303: '红寺堡区', - 640323: '盐池县', - 640324: '同心县', - 640381: '青铜峡市', - 640402: '原州区', - 640422: '西吉县', - 640423: '隆德县', - 640424: '泾源县', - 640425: '彭阳县', - 640502: '沙坡头区', - 640521: '中宁县', - 640522: '海原县', - 650102: '天山区', - 650103: '沙依巴克区', - 650104: '新市区', - 650105: '水磨沟区', - 650106: '头屯河区', - 650107: '达坂城区', - 650109: '米东区', - 650121: '乌鲁木齐县', - 650202: '独山子区', - 650203: '克拉玛依区', - 650204: '白碱滩区', - 650205: '乌尔禾区', - 650402: '高昌区', - 650421: '鄯善县', - 650422: '托克逊县', - 650502: '伊州区', - 650521: '巴里坤哈萨克自治县', - 650522: '伊吾县', - 652301: '昌吉市', - 652302: '阜康市', - 652323: '呼图壁县', - 652324: '玛纳斯县', - 652325: '奇台县', - 652327: '吉木萨尔县', - 652328: '木垒哈萨克自治县', - 652701: '博乐市', - 652702: '阿拉山口市', - 652722: '精河县', - 652723: '温泉县', - 652801: '库尔勒市', - 652822: '轮台县', - 652823: '尉犁县', - 652824: '若羌县', - 652825: '且末县', - 652826: '焉耆回族自治县', - 652827: '和静县', - 652828: '和硕县', - 652829: '博湖县', - 652901: '阿克苏市', - 652922: '温宿县', - 652923: '库车县', - 652924: '沙雅县', - 652925: '新和县', - 652926: '拜城县', - 652927: '乌什县', - 652928: '阿瓦提县', - 652929: '柯坪县', - 653001: '阿图什市', - 653022: '阿克陶县', - 653023: '阿合奇县', - 653024: '乌恰县', - 653101: '喀什市', - 653121: '疏附县', - 653122: '疏勒县', - 653123: '英吉沙县', - 653124: '泽普县', - 653125: '莎车县', - 653126: '叶城县', - 653127: '麦盖提县', - 653128: '岳普湖县', - 653129: '伽师县', - 653130: '巴楚县', - 653131: '塔什库尔干塔吉克自治县', - 653201: '和田市', - 653221: '和田县', - 653222: '墨玉县', - 653223: '皮山县', - 653224: '洛浦县', - 653225: '策勒县', - 653226: '于田县', - 653227: '民丰县', - 654002: '伊宁市', - 654003: '奎屯市', - 654004: '霍尔果斯市', - 654021: '伊宁县', - 654022: '察布查尔锡伯自治县', - 654023: '霍城县', - 654024: '巩留县', - 654025: '新源县', - 654026: '昭苏县', - 654027: '特克斯县', - 654028: '尼勒克县', - 654201: '塔城市', - 654202: '乌苏市', - 654221: '额敏县', - 654223: '沙湾县', - 654224: '托里县', - 654225: '裕民县', - 654226: '和布克赛尔蒙古自治县', - 654301: '阿勒泰市', - 654321: '布尔津县', - 654322: '富蕴县', - 654323: '福海县', - 654324: '哈巴河县', - 654325: '青河县', - 654326: '吉木乃县', - 659001: '石河子市', - 659002: '阿拉尔市', - 659003: '图木舒克市', - 659004: '五家渠市', - 659005: '北屯市', - 659006: '铁门关市', - 659007: '双河市', - 659008: '可克达拉市', - 659009: '昆玉市', - 710101: '中正区', - 710102: '大同区', - 710103: '中山区', - 710104: '松山区', - 710105: '大安区', - 710106: '万华区', - 710107: '信义区', - 710108: '士林区', - 710109: '北投区', - 710110: '内湖区', - 710111: '南港区', - 710112: '文山区', - 710199: '其它区', - 710201: '新兴区', - 710202: '前金区', - 710203: '芩雅区', - 710204: '盐埕区', - 710205: '鼓山区', - 710206: '旗津区', - 710207: '前镇区', - 710208: '三民区', - 710209: '左营区', - 710210: '楠梓区', - 710211: '小港区', - 710241: '苓雅区', - 710242: '仁武区', - 710243: '大社区', - 710244: '冈山区', - 710245: '路竹区', - 710246: '阿莲区', - 710247: '田寮区', - 710248: '燕巢区', - 710249: '桥头区', - 710250: '梓官区', - 710251: '弥陀区', - 710252: '永安区', - 710253: '湖内区', - 710254: '凤山区', - 710255: '大寮区', - 710256: '林园区', - 710257: '鸟松区', - 710258: '大树区', - 710259: '旗山区', - 710260: '美浓区', - 710261: '六龟区', - 710262: '内门区', - 710263: '杉林区', - 710264: '甲仙区', - 710265: '桃源区', - 710266: '那玛夏区', - 710267: '茂林区', - 710268: '茄萣区', - 710299: '其它区', - 710301: '中西区', - 710302: '东区', - 710303: '南区', - 710304: '北区', - 710305: '安平区', - 710306: '安南区', - 710339: '永康区', - 710340: '归仁区', - 710341: '新化区', - 710342: '左镇区', - 710343: '玉井区', - 710344: '楠西区', - 710345: '南化区', - 710346: '仁德区', - 710347: '关庙区', - 710348: '龙崎区', - 710349: '官田区', - 710350: '麻豆区', - 710351: '佳里区', - 710352: '西港区', - 710353: '七股区', - 710354: '将军区', - 710355: '学甲区', - 710356: '北门区', - 710357: '新营区', - 710358: '后壁区', - 710359: '白河区', - 710360: '东山区', - 710361: '六甲区', - 710362: '下营区', - 710363: '柳营区', - 710364: '盐水区', - 710365: '善化区', - 710366: '大内区', - 710367: '山上区', - 710368: '新市区', - 710369: '安定区', - 710399: '其它区', - 710401: '中区', - 710402: '东区', - 710403: '南区', - 710404: '西区', - 710405: '北区', - 710406: '北屯区', - 710407: '西屯区', - 710408: '南屯区', - 710431: '太平区', - 710432: '大里区', - 710433: '雾峰区', - 710434: '乌日区', - 710435: '丰原区', - 710436: '后里区', - 710437: '石冈区', - 710438: '东势区', - 710439: '和平区', - 710440: '新社区', - 710441: '潭子区', - 710442: '大雅区', - 710443: '神冈区', - 710444: '大肚区', - 710445: '沙鹿区', - 710446: '龙井区', - 710447: '梧栖区', - 710448: '清水区', - 710449: '大甲区', - 710450: '外埔区', - 710451: '大安区', - 710499: '其它区', - 710507: '金沙镇', - 710508: '金湖镇', - 710509: '金宁乡', - 710510: '金城镇', - 710511: '烈屿乡', - 710512: '乌坵乡', - 710614: '南投市', - 710615: '中寮乡', - 710616: '草屯镇', - 710617: '国姓乡', - 710618: '埔里镇', - 710619: '仁爱乡', - 710620: '名间乡', - 710621: '集集镇', - 710622: '水里乡', - 710623: '鱼池乡', - 710624: '信义乡', - 710625: '竹山镇', - 710626: '鹿谷乡', - 710701: '仁爱区', - 710702: '信义区', - 710703: '中正区', - 710704: '中山区', - 710705: '安乐区', - 710706: '暖暖区', - 710707: '七堵区', - 710799: '其它区', - 710801: '东区', - 710802: '北区', - 710803: '香山区', - 710899: '其它区', - 710901: '东区', - 710902: '西区', - 710999: '其它区', - 711130: '万里区', - 711132: '板桥区', - 711133: '汐止区', - 711134: '深坑区', - 711136: '瑞芳区', - 711137: '平溪区', - 711138: '双溪区', - 711140: '新店区', - 711141: '坪林区', - 711142: '乌来区', - 711143: '永和区', - 711144: '中和区', - 711145: '土城区', - 711146: '三峡区', - 711147: '树林区', - 711149: '三重区', - 711150: '新庄区', - 711151: '泰山区', - 711152: '林口区', - 711154: '五股区', - 711155: '八里区', - 711156: '淡水区', - 711157: '三芝区', - 711287: '宜兰市', - 711288: '头城镇', - 711289: '礁溪乡', - 711290: '壮围乡', - 711291: '员山乡', - 711292: '罗东镇', - 711293: '三星乡', - 711294: '大同乡', - 711295: '五结乡', - 711296: '冬山乡', - 711297: '苏澳镇', - 711298: '南澳乡', - 711299: '钓鱼台', - 711387: '竹北市', - 711388: '湖口乡', - 711389: '新丰乡', - 711390: '新埔镇', - 711391: '关西镇', - 711392: '芎林乡', - 711393: '宝山乡', - 711394: '竹东镇', - 711395: '五峰乡', - 711396: '横山乡', - 711397: '尖石乡', - 711398: '北埔乡', - 711399: '峨眉乡', - 711487: '中坜市', - 711488: '平镇市', - 711489: '龙潭乡', - 711490: '杨梅市', - 711491: '新屋乡', - 711492: '观音乡', - 711493: '桃园市', - 711494: '龟山乡', - 711495: '八德市', - 711496: '大溪镇', - 711497: '复兴乡', - 711498: '大园乡', - 711499: '芦竹乡', - 711582: '竹南镇', - 711583: '头份镇', - 711584: '三湾乡', - 711585: '南庄乡', - 711586: '狮潭乡', - 711587: '后龙镇', - 711588: '通霄镇', - 711589: '苑里镇', - 711590: '苗栗市', - 711591: '造桥乡', - 711592: '头屋乡', - 711593: '公馆乡', - 711594: '大湖乡', - 711595: '泰安乡', - 711596: '铜锣乡', - 711597: '三义乡', - 711598: '西湖乡', - 711599: '卓兰镇', - 711774: '彰化市', - 711775: '芬园乡', - 711776: '花坛乡', - 711777: '秀水乡', - 711778: '鹿港镇', - 711779: '福兴乡', - 711780: '线西乡', - 711781: '和美镇', - 711782: '伸港乡', - 711783: '员林镇', - 711784: '社头乡', - 711785: '永靖乡', - 711786: '埔心乡', - 711787: '溪湖镇', - 711788: '大村乡', - 711789: '埔盐乡', - 711790: '田中镇', - 711791: '北斗镇', - 711792: '田尾乡', - 711793: '埤头乡', - 711794: '溪州乡', - 711795: '竹塘乡', - 711796: '二林镇', - 711797: '大城乡', - 711798: '芳苑乡', - 711799: '二水乡', - 711982: '番路乡', - 711983: '梅山乡', - 711984: '竹崎乡', - 711985: '阿里山乡', - 711986: '中埔乡', - 711987: '大埔乡', - 711988: '水上乡', - 711989: '鹿草乡', - 711990: '太保市', - 711991: '朴子市', - 711992: '东石乡', - 711993: '六脚乡', - 711994: '新港乡', - 711995: '民雄乡', - 711996: '大林镇', - 711997: '溪口乡', - 711998: '义竹乡', - 711999: '布袋镇', - 712180: '斗南镇', - 712181: '大埤乡', - 712182: '虎尾镇', - 712183: '土库镇', - 712184: '褒忠乡', - 712185: '东势乡', - 712186: '台西乡', - 712187: '仑背乡', - 712188: '麦寮乡', - 712189: '斗六市', - 712190: '林内乡', - 712191: '古坑乡', - 712192: '莿桐乡', - 712193: '西螺镇', - 712194: '二仑乡', - 712195: '北港镇', - 712196: '水林乡', - 712197: '口湖乡', - 712198: '四湖乡', - 712199: '元长乡', - 712467: '屏东市', - 712468: '三地门乡', - 712469: '雾台乡', - 712470: '玛家乡', - 712471: '九如乡', - 712472: '里港乡', - 712473: '高树乡', - 712474: '盐埔乡', - 712475: '长治乡', - 712476: '麟洛乡', - 712477: '竹田乡', - 712478: '内埔乡', - 712479: '万丹乡', - 712480: '潮州镇', - 712481: '泰武乡', - 712482: '来义乡', - 712483: '万峦乡', - 712484: '莰顶乡', - 712485: '新埤乡', - 712486: '南州乡', - 712487: '林边乡', - 712488: '东港镇', - 712489: '琉球乡', - 712490: '佳冬乡', - 712491: '新园乡', - 712492: '枋寮乡', - 712493: '枋山乡', - 712494: '春日乡', - 712495: '狮子乡', - 712496: '车城乡', - 712497: '牡丹乡', - 712498: '恒春镇', - 712499: '满州乡', - 712584: '台东市', - 712585: '绿岛乡', - 712586: '兰屿乡', - 712587: '延平乡', - 712588: '卑南乡', - 712589: '鹿野乡', - 712590: '关山镇', - 712591: '海端乡', - 712592: '池上乡', - 712593: '东河乡', - 712594: '成功镇', - 712595: '长滨乡', - 712596: '金峰乡', - 712597: '大武乡', - 712598: '达仁乡', - 712599: '太麻里乡', - 712686: '花莲市', - 712687: '新城乡', - 712688: '太鲁阁', - 712689: '秀林乡', - 712690: '吉安乡', - 712691: '寿丰乡', - 712692: '凤林镇', - 712693: '光复乡', - 712694: '丰滨乡', - 712695: '瑞穗乡', - 712696: '万荣乡', - 712697: '玉里镇', - 712698: '卓溪乡', - 712699: '富里乡', - 712794: '马公市', - 712795: '西屿乡', - 712796: '望安乡', - 712797: '七美乡', - 712798: '白沙乡', - 712799: '湖西乡', - 712896: '南竿乡', - 712897: '北竿乡', - 712898: '东引乡', - 712899: '莒光乡', - 810101: '中西区', - 810102: '湾仔', - 810103: '东区', - 810104: '南区', - 810201: '九龙城区', - 810202: '油尖旺区', - 810203: '深水埗区', - 810204: '黄大仙区', - 810205: '观塘区', - 810301: '北区', - 810302: '大埔区', - 810303: '沙田区', - 810304: '西贡区', - 810305: '元朗区', - 810306: '屯门区', - 810307: '荃湾区', - 810308: '葵青区', - 810309: '离岛区', - 820101: '澳门半岛', - 820201: '离岛' - } - }; - - - Class.prototype.config = { - elem: '', - data: { - province: '', - city: '', - county: '', - provinceCode: 0, - cityCode: 0, - countyCode: 0, - }, - change: function(result){} - }; - - Class.prototype.index = 0; - - Class.prototype.render = function () { - let that = this, options = that.config; - options.elem = $(options.elem); - - that.events(); - }; - - Class.prototype.reload = function (op) { - let options = this.config; - options.data = $.extend(options.data, op.data || {}); - this.events(true); - }; - - Class.prototype.events = function (reload = false) { - let that = this, options = that.config; - let provinceFilter = 'province-' + layarea._id; - let cityFilter = 'city-' + layarea._id; - let countyFilter = 'county-' + layarea._id; - - let provinceEl = options.elem.find('.province-selector'); - let cityEl = options.elem.find('.city-selector'); - let countyEl = options.elem.find('.county-selector'); - - if (reload){ - options.data.provinceCode = getCode('province', options.data.province); - let code = getCode('city', options.data.city, options.data.provinceCode.slice(0, 2)); - options.data.cityCode = code; - options.data.countyCode = getCode('county', options.data.county, options.data.cityCode.slice(0, 4)); - renderProvince(); - return; - } - //filter - if(provinceEl.attr('lay-filter')){ - provinceFilter = provinceEl.attr('lay-filter'); - } - if(cityEl.attr('lay-filter')){ - cityFilter = cityEl.attr('lay-filter'); - } - if(countyEl.attr('lay-filter')){ - countyFilter = countyEl.attr('lay-filter'); - } - provinceEl.attr('lay-filter', provinceFilter); - cityEl.attr('lay-filter', cityFilter); - countyEl.attr('lay-filter', countyFilter); - - //获取默认值 - if(provinceEl.data('value')){ - options.data.province = provinceEl.data('value'); - options.data.provinceCode = getCode('province', options.data.province); - } else if (!options.data.province) { - options.data.province = ''; - } - if(cityEl.data('value')){ - options.data.city = cityEl.data('value'); - let code = getCode('city', options.data.city, options.data.provinceCode.slice(0, 2)); - options.data.cityCode = code; - } else if (!options.data.city) { - options.data.city = ''; - } - if(countyEl.data('value')){ - options.data.county = countyEl.data('value'); - options.data.countyCode = getCode('county', options.data.county, options.data.cityCode.slice(0, 4)); - } else if (!options.data.county) { - options.data.county = ''; - } - provinceEl.attr('lay-filter', provinceFilter); - cityEl.attr('lay-filter', cityFilter); - countyEl.attr('lay-filter', countyFilter); - - //监听结果 - form.on('select('+provinceFilter+')', function(data){ - options.data.province = data.value; - options.data.provinceCode = getCode('province', data.value); - renderCity(options.data.provinceCode); - - options.change(options.data); - }); - form.on('select('+cityFilter+')', function(data){ - options.data.city = data.value; - if(options.data.provinceCode){ - options.data.cityCode = getCode('city', data.value, options.data.provinceCode.slice(0, 2)); - renderCounty(options.data.cityCode); - } - - options.change(options.data); - }); - form.on('select('+countyFilter+')', function(data){ - options.data.county = data.value; - if(options.data.cityCode){ - options.data.countyCode = getCode('county', data.value, options.data.cityCode.slice(0, 4)); - } - options.change(options.data); - }); - - renderProvince(); - - //查找province - function renderProvince(){ - let tpl = ''; - let provinceList = getList("province"); - let currentCode = ''; - let currentName = ''; - provinceList.forEach(function(_item){ - // if (!currentCode){ - // currentCode = _item.code; - // currentName = _item.name; - // } - if(_item.name === options.data.province){ - currentCode = _item.code; - currentName = _item.name; - } - tpl += ''; - }); - provinceEl.html(tpl); - provinceEl.val(options.data.province); - form.render('select'); - renderCity(currentCode); - } - - function renderCity(provinceCode){ - let tpl = ''; - let cityList = getList('city', provinceCode.slice(0, 2)); - let currentCode = ''; - let currentName = ''; - cityList.forEach(function(_item){ - // if (!currentCode){ - // currentCode = _item.code; - // currentName = _item.name; - // } - if(_item.name === options.data.city){ - currentCode = _item.code; - currentName = _item.name; - } - tpl += ''; - }); - options.data.city = currentName; - cityEl.html(tpl); - cityEl.val(options.data.city); - form.render('select'); - renderCounty(currentCode); - } - - function renderCounty(cityCode){ - let tpl = ''; - let countyList = getList('county', cityCode.slice(0, 4)); - let currentCode = ''; - let currentName = ''; - countyList.forEach(function(_item){ - // if (!currentCode){ - // currentCode = _item.code; - // currentName = _item.name; - // } - if(_item.name === options.data.county){ - currentCode = _item.code; - currentName = _item.name; - } - tpl += ''; - }); - options.data.county = currentName; - countyEl.html(tpl); - countyEl.val(options.data.county); - - form.render('select'); - } - - function getList(type, code) { - let result = []; - - if (type !== 'province' && !code) { - return result; - } - - let list = areaList[type + "_list"] || {}; - result = Object.keys(list).map(function (code) { - return { - code: code, - name: list[code] - }; - }); - - if (code) { - // oversea code - if (code[0] === '9' && type === 'city') { - code = '9'; - } - - result = result.filter(function (item) { - return item.code.indexOf(code) === 0; - }); - } - - return result; - } - - function getCode(type, name, parentCode = 0){ - let code = ''; - let list = areaList[type + "_list"] || {}; - let result = {}; - Object.keys(list).map(function (_code) { - if(parentCode){ - if(_code.indexOf(parentCode) === 0){ - result[_code] = list[_code]; - } - }else{ - result[_code] = list[_code]; - } - }); - layui.each(result, function(_code, _name){ - if(_name === name){ - code = _code; - } - }); - - return code; - } - }; - - layarea.render = function (options) { - let inst = new Class(options); - layarea._id++; - return thisArea.call(inst); - }; - - exports('area', layarea); - }); \ No newline at end of file diff --git a/component/pear/module/button.js b/component/pear/module/button.js index d77c18d2f3850ed307d0e418dfbafccc58d0a444..8283a24ee9ac1fe9f109e4a13e1a6b7f251a158e 100644 --- a/component/pear/module/button.js +++ b/component/pear/module/button.js @@ -2,6 +2,8 @@ layui.define(['jquery'], function(exports) { "use strict"; /** + * @since Pear Admin 4.0 + * * Button component * */ var MOD_NAME = 'button', @@ -12,35 +14,39 @@ layui.define(['jquery'], function(exports) { }; /** + * @since Pear Admin 4.0 + * * Button start loading * */ button.prototype.load = function(opt) { - var option = { + var options = { elem: opt.elem, time: opt.time ? opt.time : false, done: opt.done ? opt.done : function(){} } - var text = $(option.elem).html(); - - $(option.elem).html(""); + + var text = $(options.elem).html(); - $(option.elem).attr("disabled", "disabled"); + $(options.elem).html(""); + $(options.elem).attr("disabled", "disabled"); - var buttons = $(option.elem); + var $button = $(options.elem); - if (option.time != "" || option.time !=false) { + if (options.time != "" || options.time != false) { setTimeout(function() { - $(option.elem).attr("disabled", false); - buttons.html(text); - option.done(); - }, option.time); + $button.attr("disabled", false); + $button.html(text); + options.done(); + }, options.time); } - option.text = text; - return new button(option); + options.text = text; + return new button(options); } /** + * @since Pear Admin 4.0 + * * Button stop loaded * */ button.prototype.stop = function(success) { diff --git a/component/pear/module/card.js b/component/pear/module/card.js deleted file mode 100644 index 76934da3e3e3288080eed9a667b6284406e81e4a..0000000000000000000000000000000000000000 --- a/component/pear/module/card.js +++ /dev/null @@ -1,275 +0,0 @@ -layui.define(['table', 'laypage','jquery', 'element'], function(exports) { - "use strict"; - - var MOD_NAME = 'card', - $ = layui.jquery, - element = layui.element, - laypage = layui.laypage; - - var _instances = {}; // 记录所有实例 - - var defaultOption = { - elem: "#currentTableId",// 构建的模型 - url: "",// 数据 url 连接 - loading: true,//是否加载 - limit: 0, //每页数量默认是每行数量的双倍 - linenum: 4, //每行数量 2,3,4,6 - currentPage: 1,//当前页 - data:[], //静态数据 - limits:[], //页码 - page: true, //是否分页 - layout: ['count', 'prev', 'page', 'next','limit', 'skip'],//分页控件 - request: { - pageName: 'page' //页码的参数名称,默认:page - , limitName: 'limit' //每页数据量的参数名,默认:limit - , idName: 'id' //主键名称,默认:id - , titleName: 'title' //标题名称,默认:title - , imageName: 'image' //图片地址,默认:image - , remarkName: 'remark' //备注名称,默认:remark - , timeName: 'time' //时间名称,默认:time - }, - response: { - statusName: 'code' //规定数据状态的字段名称,默认:code - , statusCode: 0 //规定成功的状态码,默认:0 - , msgName: 'msg' //规定状态信息的字段名称,默认:msg - , countName: 'count' //规定数据总数的字段名称,默认:count - , dataName: 'data' //规定数据列表的字段名称,默认:data - }, - clickItem: function(data){}, - done: function () { - - } - }; - - var card = function(opt) { - _instances[opt.elem.substring(1)] = this; - this.reload(opt); - }; - card.prototype.initOptions = function (opt) { - this.option = $.extend(true, {}, defaultOption, opt); - if (!this.option.limit || this.option.limit == 0) { - this.option.limit = this.option.linenum * 2; - } - if (!this.option.limits || this.option.limits.length == 0) { - this.option.limits = [this.option.limit]; - } - }; - - card.prototype.init = function () { - var option = this.option; - var url = option.url; - var html = ""; - html += option.loading == true ? '
    ' : '
    '; - html += ''; - html += '
    '; - $(option.elem).html(html); - html = ""; - if (!!url) { - if (url.indexOf("?") >= 0) { - url = url + '&v=1.0.0'; - } - else { - url = url + '?v=1.0.0'; - } - if (!!option.page) { - url = url + '&' + option.request.limitName + '=' + option.limit; - url = url + '&' + option.request.pageName + '=' + option.currentPage; - } - if (!!option.where) { - for (let key in option.where) { - url = url + '&' + key + '=' + option.where[key]; - } - } - getData(url).then(function(data){ - data = initData(data, option); - if (data.code != option.response.statusCode) { - option.data = []; - option.count = 0; - } else { - option.data = data.data; - option.count = data.count; - } - - if (!!option.data && option.data.length > 0) { - html = createComponent(option.elem.substring(1), option.linenum, option.data); - html += "
    "; - } - else { - if (data.code != option.response.statusCode) { - html = "

    " + data.msg + "

    "; - } else { - html = "

    没有数据

    "; - } - } - $(option.elem).html(html); - if (option.page) { - laypage.render({ - elem: 'cardpage' - , count: option.count, limit: option.limit, limits: option.limits, curr: option.currentPage - , layout: option.layout - , jump: function (obj, first) { - option.limit = obj.limit; - option.currentPage = obj.curr; - if (!first) { - _instances[option.elem.substring(1)].reload(option); - } - } - }); - } - }); - } - else { - if (!option.alldata) { - option.alldata = option.data; - } - if (option.page) { - var data = []; - option.count = option.alldata.length; - for (var i = (option.currentPage - 1) * option.limit; i < option.currentPage * option.limit && i 0) { - html = createComponent(option.elem.substring(1), option.linenum, option.data); - html += "
    "; - } - else { - html = "

    没有数据

    "; - } - $(option.elem).html(html); - if (option.page) { - laypage.render({ - elem: 'cardpage' - , count: option.count, limit: option.limit, limits: option.limits, curr: option.currentPage - , layout: option.layout - , jump: function (obj, first) { - option.limit = obj.limit; - option.currentPage = obj.curr; - if (!first) { - _instances[option.elem.substring(1)].reload(option); - } - } - }); - } - } - } - - card.prototype.reload = function (opt) { - this.initOptions(this.option ? $.extend(true, this.option, opt) : opt); - this.init(); // 初始化表格 - } - - function createComponent(elem,linenum,data) { - var html = "
    " - var content = createCards(elem, linenum,data); - var page = ""; - content = content + page; - html += content + "
    " - return html; - } - - function createCards(elem, linenum,data) { - var content = "
    "; - for (var i = 0; i < data.length; i++) { - content += createCard(elem, linenum,data[i],i); - } - content += "
    "; - return content; - } - - function createCard(elem, linenum, item, no) { - var line = 12 / linenum; - var card = - '

    ' + item.title + '

    ' + item.remark + '
    ' +item.time + '
    ' - return card; - } - - function initData(tempData, option) { - var data = {}; - data.code = tempData[option.response.statusName]; - data.msg = tempData[option.response.msgName]; - data.count = tempData[option.response.countName]; - var dataList = tempData[option.response.dataName]; - if(!dataList){ - return data; - } - data.data = []; - for (var i = 0; i < dataList.length; i++) { - var item = dataList[i]; - item.id = dataList[i][option.request.idName]; - item.image = dataList[i][option.request.imageName]; - item.title = dataList[i][option.request.titleName]; - item.remark = dataList[i][option.request.remarkName]; - item.time = dataList[i][option.request.timeName]; - data.data.push(item); - } - return data; - } - - function getData(url) { - var defer = $.Deferred(); - $.get(url + (url.indexOf("?") ? "&" : "?") + "fresh=" + Math.random(), function(result) { - defer.resolve(result) - }); - return defer.promise(); - } - - window.cardTableCheckedCard = function (elem,obj) { - $(obj).addClass('layui-table-click').siblings().removeClass('layui-table-click'); - var item = {}; - item.id = obj.id; - item.index = $(obj).attr('data-index'); - item.image = $(obj).find('.project-list-item-cover')[0].src; - item.title = $(obj).find('h2')[0].innerHTML; - item.remark = $(obj).find('.project-list-item-text')[0].innerHTML; - item.time = $(obj).find('.time')[0].innerHTML; - _instances[elem.id].option.checkedItem = item; - _instances[elem.id].option.clickItem(item); - } - - /** 对外提供的方法 */ - var tt = { - - render: function (options) { - return new card(options); - }, - - reload: function (id, opt) { - _instances[id].option.checkedItem = null; - _instances[id].reload(opt); - }, - - getChecked: function (id) { - var option = _instances[id].option; - var data = option.checkedItem; - var item = {}; - if (!data) { - return null; - } - item[option.request.idName] = data.id; - item[option.request.imageName] = data.image; - item[option.request.titleName] = data.title; - item[option.request.remarkName] = data.remark; - item[option.request.timeName] = data.time; - return item; - }, - - getAllData: function (id) { - var option = _instances[id].option; - var data = []; - for (var i = 0; i < option.data.length; i++) { - var item = {}; - item[option.request.idName] = option.data[i].id; - item[option.request.imageName] = option.data[i].image; - item[option.request.titleName] = option.data[i].title; - item[option.request.remarkName] = option.data[i].remark; - item[option.request.timeName] = option.data[i].time; - data.push(item); - } - return data; - }, - } - - exports(MOD_NAME, tt); -}) \ No newline at end of file diff --git a/component/pear/module/common.js b/component/pear/module/common.js deleted file mode 100644 index 50f2f15db65016e574d139d98620d906d83f7f0a..0000000000000000000000000000000000000000 --- a/component/pear/module/common.js +++ /dev/null @@ -1,114 +0,0 @@ -layui.define(['jquery', 'element', 'table'], function (exports) { - "use strict"; - - /** - * 常用封装类 - * */ - var MOD_NAME = 'common', - $ = layui.jquery, - table = layui.table, - element = layui.element; - - var common = new function () { - - /** - * 获取当前表格选中字段 - * @param obj 表格回调参数 - * @param field 要获取的字段 - * */ - this.checkField = function (obj, field) { - let data = table.checkStatus(obj.config.id).data; - if (data.length === 0) { - return ""; - } - let ids = ""; - for (let i = 0; i < data.length; i++) { - ids += data[i][field] + ","; - } - ids = ids.substring(0, ids.length - 1); - return ids; - } - - /** - * 当前是否为与移动端 - * */ - this.isModile = function () { - return $(window).width() <= 768; - } - - - /** - * 提交 json 数据 - * @param href 必选 提交接口 - * @param data 可选 提交数据 - * @param ajaxtype 可选 提交方式(默认为get) - * @param table 可选 刷新父级表 - * @param callback 可选 自定义回调函数 - * @param dataType 可选 返回数据类型 智能猜测(可以是xml, json, script, 或 html) - * @param is_async 可选 请求是否异步处理。默认是 true - * @param is_cache 可选 浏览器是否缓存被请求页面。默认是 true - * */ - this.submit = function (href, data, ajaxtype, table, callback, dataType, is_async, is_cache) { - if (data !== undefined) { - $.ajaxSetup({data: JSON.stringify(data)}); - } else { - $.ajaxSetup({data: ''}); - } - if (dataType !== undefined) { - $.ajaxSetup({dataType: dataType}); - } - if (is_async !== undefined) { - $.ajaxSetup({async: is_async}); - } - if (is_cache !== undefined) { - $.ajaxSetup({cache: is_cache}); - } - $.ajax({ - url: href, - contentType: 'application/json', - type: ajaxtype || 'get', - success: callback != null ? callback : function (result) { - if (result.code === 1) { - layer.msg(result.msg, {icon: 1, time: 1000}, function () { - let frameIndex = parent.layer.getFrameIndex(window.name); - if (frameIndex) { - parent.layer.close(frameIndex);//关闭当前页 - } - table && parent.layui.table.reload(table); - }); - } else { - layer.msg(result.msg, {icon: 2, time: 1000}); - } - }, - error: function (xhr) { - if (xhr.status === 401) { - layer.msg('权限不足,您无法访问受限资源或数据', {icon: 5}); - return; - } - if (xhr.status === 404) { - layer.msg('请求url地址错误,请确认后刷新重试', {icon: 5}); - return; - } - if (xhr.status === 419) { - layer.msg('长时间未操作,自动刷新后重试!', {icon: 5}); - setTimeout(function () { - window.location.reload(); - }, 2000); - return; - } - if (xhr.status === 429) { - layer.msg('尝试次数太多,请一分钟后再试', {icon: 5}); - return; - } - if (xhr.status === 500) { - layer.msg(xhr.responseJSON.message, {icon: 5}); - } - } - , complete: function (xhr, status) { - - } - }) - } - } - exports(MOD_NAME, common); -}); diff --git a/component/pear/module/context.js b/component/pear/module/context.js deleted file mode 100644 index a803e02b883d48cf93b29553de4f845ee40eab06..0000000000000000000000000000000000000000 --- a/component/pear/module/context.js +++ /dev/null @@ -1,19 +0,0 @@ -layui.define(['jquery', 'element'], function(exports) { - "use strict"; - - var MOD_NAME = 'context', - $ = layui.jquery, - element = layui.element; - - var context = new function() { - - this.put = function(key,value){ - localStorage.setItem(key,value); - } - - this.get = function(key){ - return localStorage.getItem(key); - } - } - exports(MOD_NAME, context); -}); diff --git a/component/pear/module/convert.js b/component/pear/module/convert.js deleted file mode 100644 index 1f86ba5af31f0ce9a218509ecc1cd4b75add1147..0000000000000000000000000000000000000000 --- a/component/pear/module/convert.js +++ /dev/null @@ -1,27 +0,0 @@ -layui.define(['jquery', 'element'], function(exports) { - "use strict"; - - /** - * 类 型 转 换 工 具 类 - * */ - var MOD_NAME = 'convert', - $ = layui.jquery, - element = layui.element; - - var convert = new function() { - - // image 转 base64 - this.imageToBase64 = function(img) { - var canvas = document.createElement("canvas"); - canvas.width = img.width; - canvas.height = img.height; - var ctx = canvas.getContext("2d"); - ctx.drawImage(img, 0, 0, img.width, img.height); - var ext = img.src.substring(img.src.lastIndexOf(".")+1).toLowerCase(); - var dataURL = canvas.toDataURL("image/"+ext); - return dataURL; - } - - } - exports(MOD_NAME, convert); -}); diff --git a/component/pear/module/cropper.js b/component/pear/module/cropper.js deleted file mode 100644 index 6d774977cbafa228bd022693c5e939aa68f919a1..0000000000000000000000000000000000000000 --- a/component/pear/module/cropper.js +++ /dev/null @@ -1,3087 +0,0 @@ -/*! - * Cropper v3.0.0 - */ - -layui.define(['jquery'], function (exports) { - var $ = layui.jquery; - $ = $ && $.hasOwnProperty('default') ? $['default'] : $; - - var DEFAULTS = { - // Define the view mode of the cropper - viewMode: 0, // 0, 1, 2, 3 - - // Define the dragging mode of the cropper - dragMode: 'crop', // 'crop', 'move' or 'none' - - // Define the aspect ratio of the crop box - aspectRatio: NaN, - - // An object with the previous cropping result data - data: null, - - // A selector for adding extra containers to preview - preview: '', - - // Re-render the cropper when resize the window - responsive: true, - - // Restore the cropped area after resize the window - restore: true, - - // Check if the current image is a cross-origin image - checkCrossOrigin: true, - - // Check the current image's Exif Orientation information - checkOrientation: true, - - // Show the black modal - modal: true, - - // Show the dashed lines for guiding - guides: true, - - // Show the center indicator for guiding - center: true, - - // Show the white modal to highlight the crop box - highlight: true, - - // Show the grid background - background: true, - - // Enable to crop the image automatically when initialize - autoCrop: true, - - // Define the percentage of automatic cropping area when initializes - autoCropArea: 0.8, - - // Enable to move the image - movable: true, - - // Enable to rotate the image - rotatable: true, - - // Enable to scale the image - scalable: true, - - // Enable to zoom the image - zoomable: true, - - // Enable to zoom the image by dragging touch - zoomOnTouch: true, - - // Enable to zoom the image by wheeling mouse - zoomOnWheel: true, - - // Define zoom ratio when zoom the image by wheeling mouse - wheelZoomRatio: 0.1, - - // Enable to move the crop box - cropBoxMovable: true, - - // Enable to resize the crop box - cropBoxResizable: true, - - // Toggle drag mode between "crop" and "move" when click twice on the cropper - toggleDragModeOnDblclick: true, - - // Size limitation - minCanvasWidth: 0, - minCanvasHeight: 0, - minCropBoxWidth: 0, - minCropBoxHeight: 0, - minContainerWidth: 200, - minContainerHeight: 100, - - // Shortcuts of events - ready: null, - cropstart: null, - cropmove: null, - cropend: null, - crop: null, - zoom: null - }; - - var TEMPLATE = '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
    ' + '
    '; - - var REGEXP_DATA_URL_HEAD = /^data:.*,/; - var REGEXP_USERAGENT = /(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i; - var navigator = typeof window !== 'undefined' ? window.navigator : null; - var IS_SAFARI_OR_UIWEBVIEW = navigator && REGEXP_USERAGENT.test(navigator.userAgent); - var fromCharCode = String.fromCharCode; - - function isNumber(n) { - return typeof n === 'number' && !isNaN(n); - } - - function isUndefined(n) { - return typeof n === 'undefined'; - } - - function toArray(obj, offset) { - var args = []; - - // This is necessary for IE8 - if (isNumber(offset)) { - args.push(offset); - } - - return args.slice.apply(obj, args); - } - - // Custom proxy to avoid jQuery's guid - function proxy(fn, context) { - for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - args[_key - 2] = arguments[_key]; - } - - return function () { - for (var _len2 = arguments.length, args2 = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args2[_key2] = arguments[_key2]; - } - - return fn.apply(context, args.concat(toArray(args2))); - }; - } - - function objectKeys(obj) { - var keys = []; - - $.each(obj, function (key) { - keys.push(key); - }); - - return keys; - } - - function isCrossOriginURL(url) { - var parts = url.match(/^(https?:)\/\/([^:/?#]+):?(\d*)/i); - - return parts && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port); - } - - function addTimestamp(url) { - var timestamp = 'timestamp=' + new Date().getTime(); - - return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp; - } - - function getImageSize(image, callback) { - // Modern browsers (ignore Safari, #120 & #509) - if (image.naturalWidth && !IS_SAFARI_OR_UIWEBVIEW) { - callback(image.naturalWidth, image.naturalHeight); - return; - } - - // IE8: Don't use `new Image()` here (#319) - var newImage = document.createElement('img'); - - newImage.onload = function load() { - callback(this.width, this.height); - }; - - newImage.src = image.src; - } - - function getTransform(options) { - var transforms = []; - var translateX = options.translateX; - var translateY = options.translateY; - var rotate = options.rotate; - var scaleX = options.scaleX; - var scaleY = options.scaleY; - - if (isNumber(translateX) && translateX !== 0) { - transforms.push('translateX(' + translateX + 'px)'); - } - - if (isNumber(translateY) && translateY !== 0) { - transforms.push('translateY(' + translateY + 'px)'); - } - - // Rotate should come first before scale to match orientation transform - if (isNumber(rotate) && rotate !== 0) { - transforms.push('rotate(' + rotate + 'deg)'); - } - - if (isNumber(scaleX) && scaleX !== 1) { - transforms.push('scaleX(' + scaleX + ')'); - } - - if (isNumber(scaleY) && scaleY !== 1) { - transforms.push('scaleY(' + scaleY + ')'); - } - - return transforms.length ? transforms.join(' ') : 'none'; - } - - function getRotatedSizes(data, isReversed) { - var deg = Math.abs(data.degree) % 180; - var arc = (deg > 90 ? 180 - deg : deg) * Math.PI / 180; - var sinArc = Math.sin(arc); - var cosArc = Math.cos(arc); - var width = data.width; - var height = data.height; - var aspectRatio = data.aspectRatio; - var newWidth = void 0; - var newHeight = void 0; - - if (!isReversed) { - newWidth = width * cosArc + height * sinArc; - newHeight = width * sinArc + height * cosArc; - } else { - newWidth = width / (cosArc + sinArc / aspectRatio); - newHeight = newWidth / aspectRatio; - } - - return { - width: newWidth, - height: newHeight - }; - } - - function getSourceCanvas(image, data, options) { - var canvas = $('')[0]; - var context = canvas.getContext('2d'); - var dstX = 0; - var dstY = 0; - var dstWidth = data.naturalWidth; - var dstHeight = data.naturalHeight; - var rotate = data.rotate; - var scaleX = data.scaleX; - var scaleY = data.scaleY; - var scalable = isNumber(scaleX) && isNumber(scaleY) && (scaleX !== 1 || scaleY !== 1); - var rotatable = isNumber(rotate) && rotate !== 0; - var advanced = rotatable || scalable; - var canvasWidth = dstWidth * Math.abs(scaleX || 1); - var canvasHeight = dstHeight * Math.abs(scaleY || 1); - var translateX = void 0; - var translateY = void 0; - var rotated = void 0; - - if (scalable) { - translateX = canvasWidth / 2; - translateY = canvasHeight / 2; - } - - if (rotatable) { - rotated = getRotatedSizes({ - width: canvasWidth, - height: canvasHeight, - degree: rotate - }); - - canvasWidth = rotated.width; - canvasHeight = rotated.height; - translateX = canvasWidth / 2; - translateY = canvasHeight / 2; - } - - canvas.width = canvasWidth; - canvas.height = canvasHeight; - - if (options.fillColor) { - context.fillStyle = options.fillColor; - context.fillRect(0, 0, canvasWidth, canvasHeight); - } - - if (advanced) { - dstX = -dstWidth / 2; - dstY = -dstHeight / 2; - - context.save(); - context.translate(translateX, translateY); - } - - // Rotate should come first before scale as in the "getTransform" function - if (rotatable) { - context.rotate(rotate * Math.PI / 180); - } - - if (scalable) { - context.scale(scaleX, scaleY); - } - - context.imageSmoothingEnabled = !!options.imageSmoothingEnabled; - - if (options.imageSmoothingQuality) { - context.imageSmoothingQuality = options.imageSmoothingQuality; - } - - context.drawImage(image, Math.floor(dstX), Math.floor(dstY), Math.floor(dstWidth), Math.floor(dstHeight)); - - if (advanced) { - context.restore(); - } - - return canvas; - } - - function getStringFromCharCode(dataView, start, length) { - var str = ''; - var i = void 0; - - for (i = start, length += start; i < length; i += 1) { - str += fromCharCode(dataView.getUint8(i)); - } - - return str; - } - - function getOrientation(arrayBuffer) { - var dataView = new DataView(arrayBuffer); - var length = dataView.byteLength; - var orientation = void 0; - var exifIDCode = void 0; - var tiffOffset = void 0; - var firstIFDOffset = void 0; - var littleEndian = void 0; - var endianness = void 0; - var app1Start = void 0; - var ifdStart = void 0; - var offset = void 0; - var i = void 0; - - // Only handle JPEG image (start by 0xFFD8) - if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) { - offset = 2; - - while (offset < length) { - if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) { - app1Start = offset; - break; - } - - offset += 1; - } - } - - if (app1Start) { - exifIDCode = app1Start + 4; - tiffOffset = app1Start + 10; - - if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') { - endianness = dataView.getUint16(tiffOffset); - littleEndian = endianness === 0x4949; - - if (littleEndian || endianness === 0x4D4D /* bigEndian */) { - if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) { - firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian); - - if (firstIFDOffset >= 0x00000008) { - ifdStart = tiffOffset + firstIFDOffset; - } - } - } - } - } - - if (ifdStart) { - length = dataView.getUint16(ifdStart, littleEndian); - - for (i = 0; i < length; i += 1) { - offset = ifdStart + i * 12 + 2; - - if (dataView.getUint16(offset, littleEndian) === 0x0112 /* Orientation */) { - // 8 is the offset of the current tag's value - offset += 8; - - // Get the original orientation value - orientation = dataView.getUint16(offset, littleEndian); - - // Override the orientation with its default value for Safari (#120) - if (IS_SAFARI_OR_UIWEBVIEW) { - dataView.setUint16(offset, 1, littleEndian); - } - - break; - } - } - } - - return orientation; - } - - function dataURLToArrayBuffer(dataURL) { - var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, ''); - var binary = atob(base64); - var length = binary.length; - var arrayBuffer = new ArrayBuffer(length); - var dataView = new Uint8Array(arrayBuffer); - var i = void 0; - - for (i = 0; i < length; i += 1) { - dataView[i] = binary.charCodeAt(i); - } - - return arrayBuffer; - } - - // Only available for JPEG image - function arrayBufferToDataURL(arrayBuffer) { - var dataView = new Uint8Array(arrayBuffer); - var length = dataView.length; - var base64 = ''; - var i = void 0; - - for (i = 0; i < length; i += 1) { - base64 += fromCharCode(dataView[i]); - } - - return 'data:image/jpeg;base64,' + btoa(base64); - } - - var render = { - render: function render() { - var self = this; - - self.initContainer(); - self.initCanvas(); - self.initCropBox(); - - self.renderCanvas(); - - if (self.cropped) { - self.renderCropBox(); - } - }, - initContainer: function initContainer() { - var self = this; - var options = self.options; - var $this = self.$element; - var $container = self.$container; - var $cropper = self.$cropper; - var hidden = 'cropper-hidden'; - - $cropper.addClass(hidden); - $this.removeClass(hidden); - - $cropper.css(self.container = { - width: Math.max($container.width(), Number(options.minContainerWidth) || 200), - height: Math.max($container.height(), Number(options.minContainerHeight) || 100) - }); - - $this.addClass(hidden); - $cropper.removeClass(hidden); - }, - - - // Canvas (image wrapper) - initCanvas: function initCanvas() { - var self = this; - var viewMode = self.options.viewMode; - var container = self.container; - var containerWidth = container.width; - var containerHeight = container.height; - var image = self.image; - var imageNaturalWidth = image.naturalWidth; - var imageNaturalHeight = image.naturalHeight; - var is90Degree = Math.abs(image.rotate) % 180 === 90; - var naturalWidth = is90Degree ? imageNaturalHeight : imageNaturalWidth; - var naturalHeight = is90Degree ? imageNaturalWidth : imageNaturalHeight; - var aspectRatio = naturalWidth / naturalHeight; - var canvasWidth = containerWidth; - var canvasHeight = containerHeight; - - if (containerHeight * aspectRatio > containerWidth) { - if (viewMode === 3) { - canvasWidth = containerHeight * aspectRatio; - } else { - canvasHeight = containerWidth / aspectRatio; - } - } else if (viewMode === 3) { - canvasHeight = containerWidth / aspectRatio; - } else { - canvasWidth = containerHeight * aspectRatio; - } - - var canvas = { - naturalWidth: naturalWidth, - naturalHeight: naturalHeight, - aspectRatio: aspectRatio, - width: canvasWidth, - height: canvasHeight - }; - - canvas.left = (containerWidth - canvasWidth) / 2; - canvas.top = (containerHeight - canvasHeight) / 2; - canvas.oldLeft = canvas.left; - canvas.oldTop = canvas.top; - - self.canvas = canvas; - self.limited = viewMode === 1 || viewMode === 2; - self.limitCanvas(true, true); - self.initialImage = $.extend({}, image); - self.initialCanvas = $.extend({}, canvas); - }, - limitCanvas: function limitCanvas(isSizeLimited, isPositionLimited) { - var self = this; - var options = self.options; - var viewMode = options.viewMode; - var container = self.container; - var containerWidth = container.width; - var containerHeight = container.height; - var canvas = self.canvas; - var aspectRatio = canvas.aspectRatio; - var cropBox = self.cropBox; - var cropped = self.cropped && cropBox; - - if (isSizeLimited) { - var minCanvasWidth = Number(options.minCanvasWidth) || 0; - var minCanvasHeight = Number(options.minCanvasHeight) || 0; - - if (viewMode) { - if (viewMode > 1) { - minCanvasWidth = Math.max(minCanvasWidth, containerWidth); - minCanvasHeight = Math.max(minCanvasHeight, containerHeight); - - if (viewMode === 3) { - if (minCanvasHeight * aspectRatio > minCanvasWidth) { - minCanvasWidth = minCanvasHeight * aspectRatio; - } else { - minCanvasHeight = minCanvasWidth / aspectRatio; - } - } - } else if (minCanvasWidth) { - minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBox.width : 0); - } else if (minCanvasHeight) { - minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBox.height : 0); - } else if (cropped) { - minCanvasWidth = cropBox.width; - minCanvasHeight = cropBox.height; - - if (minCanvasHeight * aspectRatio > minCanvasWidth) { - minCanvasWidth = minCanvasHeight * aspectRatio; - } else { - minCanvasHeight = minCanvasWidth / aspectRatio; - } - } - } - - if (minCanvasWidth && minCanvasHeight) { - if (minCanvasHeight * aspectRatio > minCanvasWidth) { - minCanvasHeight = minCanvasWidth / aspectRatio; - } else { - minCanvasWidth = minCanvasHeight * aspectRatio; - } - } else if (minCanvasWidth) { - minCanvasHeight = minCanvasWidth / aspectRatio; - } else if (minCanvasHeight) { - minCanvasWidth = minCanvasHeight * aspectRatio; - } - - canvas.minWidth = minCanvasWidth; - canvas.minHeight = minCanvasHeight; - canvas.maxWidth = Infinity; - canvas.maxHeight = Infinity; - } - - if (isPositionLimited) { - if (viewMode) { - var newCanvasLeft = containerWidth - canvas.width; - var newCanvasTop = containerHeight - canvas.height; - - canvas.minLeft = Math.min(0, newCanvasLeft); - canvas.minTop = Math.min(0, newCanvasTop); - canvas.maxLeft = Math.max(0, newCanvasLeft); - canvas.maxTop = Math.max(0, newCanvasTop); - - if (cropped && self.limited) { - canvas.minLeft = Math.min(cropBox.left, cropBox.left + cropBox.width - canvas.width); - canvas.minTop = Math.min(cropBox.top, cropBox.top + cropBox.height - canvas.height); - canvas.maxLeft = cropBox.left; - canvas.maxTop = cropBox.top; - - if (viewMode === 2) { - if (canvas.width >= containerWidth) { - canvas.minLeft = Math.min(0, newCanvasLeft); - canvas.maxLeft = Math.max(0, newCanvasLeft); - } - - if (canvas.height >= containerHeight) { - canvas.minTop = Math.min(0, newCanvasTop); - canvas.maxTop = Math.max(0, newCanvasTop); - } - } - } - } else { - canvas.minLeft = -canvas.width; - canvas.minTop = -canvas.height; - canvas.maxLeft = containerWidth; - canvas.maxTop = containerHeight; - } - } - }, - renderCanvas: function renderCanvas(isChanged) { - var self = this; - var canvas = self.canvas; - var image = self.image; - var rotate = image.rotate; - var naturalWidth = image.naturalWidth; - var naturalHeight = image.naturalHeight; - - if (self.rotated) { - self.rotated = false; - - // Computes rotated sizes with image sizes - var rotated = getRotatedSizes({ - width: image.width, - height: image.height, - degree: rotate - }); - var aspectRatio = rotated.width / rotated.height; - var isSquareImage = image.aspectRatio === 1; - - if (isSquareImage || aspectRatio !== canvas.aspectRatio) { - canvas.left -= (rotated.width - canvas.width) / 2; - canvas.top -= (rotated.height - canvas.height) / 2; - canvas.width = rotated.width; - canvas.height = rotated.height; - canvas.aspectRatio = aspectRatio; - canvas.naturalWidth = naturalWidth; - canvas.naturalHeight = naturalHeight; - - // Computes rotated sizes with natural image sizes - if (isSquareImage && rotate % 90 || rotate % 180) { - var rotated2 = getRotatedSizes({ - width: naturalWidth, - height: naturalHeight, - degree: rotate - }); - - canvas.naturalWidth = rotated2.width; - canvas.naturalHeight = rotated2.height; - } - - self.limitCanvas(true, false); - } - } - - if (canvas.width > canvas.maxWidth || canvas.width < canvas.minWidth) { - canvas.left = canvas.oldLeft; - } - - if (canvas.height > canvas.maxHeight || canvas.height < canvas.minHeight) { - canvas.top = canvas.oldTop; - } - - canvas.width = Math.min(Math.max(canvas.width, canvas.minWidth), canvas.maxWidth); - canvas.height = Math.min(Math.max(canvas.height, canvas.minHeight), canvas.maxHeight); - - self.limitCanvas(false, true); - - canvas.left = Math.min(Math.max(canvas.left, canvas.minLeft), canvas.maxLeft); - canvas.top = Math.min(Math.max(canvas.top, canvas.minTop), canvas.maxTop); - canvas.oldLeft = canvas.left; - canvas.oldTop = canvas.top; - - self.$canvas.css({ - width: canvas.width, - height: canvas.height, - transform: getTransform({ - translateX: canvas.left, - translateY: canvas.top - }) - }); - - self.renderImage(); - - if (self.cropped && self.limited) { - self.limitCropBox(true, true); - } - - if (isChanged) { - self.output(); - } - }, - renderImage: function renderImage(isChanged) { - var self = this; - var canvas = self.canvas; - var image = self.image; - var reversed = void 0; - - if (image.rotate) { - reversed = getRotatedSizes({ - width: canvas.width, - height: canvas.height, - degree: image.rotate, - aspectRatio: image.aspectRatio - }, true); - } - - $.extend(image, reversed ? { - width: reversed.width, - height: reversed.height, - left: (canvas.width - reversed.width) / 2, - top: (canvas.height - reversed.height) / 2 - } : { - width: canvas.width, - height: canvas.height, - left: 0, - top: 0 - }); - - self.$clone.css({ - width: image.width, - height: image.height, - transform: getTransform($.extend({ - translateX: image.left, - translateY: image.top - }, image)) - }); - - if (isChanged) { - self.output(); - } - }, - initCropBox: function initCropBox() { - var self = this; - var options = self.options; - var canvas = self.canvas; - var aspectRatio = options.aspectRatio; - var autoCropArea = Number(options.autoCropArea) || 0.8; - var cropBox = { - width: canvas.width, - height: canvas.height - }; - - if (aspectRatio) { - if (canvas.height * aspectRatio > canvas.width) { - cropBox.height = cropBox.width / aspectRatio; - } else { - cropBox.width = cropBox.height * aspectRatio; - } - } - - self.cropBox = cropBox; - self.limitCropBox(true, true); - - // Initialize auto crop area - cropBox.width = Math.min(Math.max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); - cropBox.height = Math.min(Math.max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); - - // The width of auto crop area must large than "minWidth", and the height too. (#164) - cropBox.width = Math.max(cropBox.minWidth, cropBox.width * autoCropArea); - cropBox.height = Math.max(cropBox.minHeight, cropBox.height * autoCropArea); - cropBox.left = canvas.left + (canvas.width - cropBox.width) / 2; - cropBox.top = canvas.top + (canvas.height - cropBox.height) / 2; - cropBox.oldLeft = cropBox.left; - cropBox.oldTop = cropBox.top; - - self.initialCropBox = $.extend({}, cropBox); - }, - limitCropBox: function limitCropBox(isSizeLimited, isPositionLimited) { - var self = this; - var options = self.options; - var aspectRatio = options.aspectRatio; - var container = self.container; - var containerWidth = container.width; - var containerHeight = container.height; - var canvas = self.canvas; - var cropBox = self.cropBox; - var limited = self.limited; - - if (isSizeLimited) { - var minCropBoxWidth = Number(options.minCropBoxWidth) || 0; - var minCropBoxHeight = Number(options.minCropBoxHeight) || 0; - var maxCropBoxWidth = Math.min(containerWidth, limited ? canvas.width : containerWidth); - var maxCropBoxHeight = Math.min(containerHeight, limited ? canvas.height : containerHeight); - - // The min/maxCropBoxWidth/Height must be less than containerWidth/Height - minCropBoxWidth = Math.min(minCropBoxWidth, containerWidth); - minCropBoxHeight = Math.min(minCropBoxHeight, containerHeight); - - if (aspectRatio) { - if (minCropBoxWidth && minCropBoxHeight) { - if (minCropBoxHeight * aspectRatio > minCropBoxWidth) { - minCropBoxHeight = minCropBoxWidth / aspectRatio; - } else { - minCropBoxWidth = minCropBoxHeight * aspectRatio; - } - } else if (minCropBoxWidth) { - minCropBoxHeight = minCropBoxWidth / aspectRatio; - } else if (minCropBoxHeight) { - minCropBoxWidth = minCropBoxHeight * aspectRatio; - } - - if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) { - maxCropBoxHeight = maxCropBoxWidth / aspectRatio; - } else { - maxCropBoxWidth = maxCropBoxHeight * aspectRatio; - } - } - - // The minWidth/Height must be less than maxWidth/Height - cropBox.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth); - cropBox.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight); - cropBox.maxWidth = maxCropBoxWidth; - cropBox.maxHeight = maxCropBoxHeight; - } - - if (isPositionLimited) { - if (limited) { - cropBox.minLeft = Math.max(0, canvas.left); - cropBox.minTop = Math.max(0, canvas.top); - cropBox.maxLeft = Math.min(containerWidth, canvas.left + canvas.width) - cropBox.width; - cropBox.maxTop = Math.min(containerHeight, canvas.top + canvas.height) - cropBox.height; - } else { - cropBox.minLeft = 0; - cropBox.minTop = 0; - cropBox.maxLeft = containerWidth - cropBox.width; - cropBox.maxTop = containerHeight - cropBox.height; - } - } - }, - renderCropBox: function renderCropBox() { - var self = this; - var options = self.options; - var container = self.container; - var containerWidth = container.width; - var containerHeight = container.height; - var cropBox = self.cropBox; - - if (cropBox.width > cropBox.maxWidth || cropBox.width < cropBox.minWidth) { - cropBox.left = cropBox.oldLeft; - } - - if (cropBox.height > cropBox.maxHeight || cropBox.height < cropBox.minHeight) { - cropBox.top = cropBox.oldTop; - } - - cropBox.width = Math.min(Math.max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); - cropBox.height = Math.min(Math.max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); - - self.limitCropBox(false, true); - - cropBox.left = Math.min(Math.max(cropBox.left, cropBox.minLeft), cropBox.maxLeft); - cropBox.top = Math.min(Math.max(cropBox.top, cropBox.minTop), cropBox.maxTop); - cropBox.oldLeft = cropBox.left; - cropBox.oldTop = cropBox.top; - - if (options.movable && options.cropBoxMovable) { - // Turn to move the canvas when the crop box is equal to the container - self.$face.data('action', cropBox.width === containerWidth && cropBox.height === containerHeight ? 'move' : 'all'); - } - - self.$cropBox.css({ - width: cropBox.width, - height: cropBox.height, - transform: getTransform({ - translateX: cropBox.left, - translateY: cropBox.top - }) - }); - - if (self.cropped && self.limited) { - self.limitCanvas(true, true); - } - - if (!self.disabled) { - self.output(); - } - }, - output: function output() { - var self = this; - - self.preview(); - - if (self.completed) { - self.trigger('crop', self.getData()); - } - } - }; - - var DATA_PREVIEW = 'preview'; - - var preview = { - initPreview: function initPreview() { - var self = this; - var crossOrigin = self.crossOrigin; - var url = crossOrigin ? self.crossOriginUrl : self.url; - var image = document.createElement('img'); - - if (crossOrigin) { - image.crossOrigin = crossOrigin; - } - - image.src = url; - - var $clone2 = $(image); - - self.$preview = $(self.options.preview); - self.$clone2 = $clone2; - self.$viewBox.html($clone2); - self.$preview.each(function (i, element) { - var $this = $(element); - var img = document.createElement('img'); - - // Save the original size for recover - $this.data(DATA_PREVIEW, { - width: $this.width(), - height: $this.height(), - html: $this.html() - }); - - if (crossOrigin) { - img.crossOrigin = crossOrigin; - } - - img.src = url; - - /** - * Override img element styles - * Add `display:block` to avoid margin top issue - * Add `height:auto` to override `height` attribute on IE8 - * (Occur only when margin-top <= -height) - */ - img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;"'; - - $this.html(img); - }); - }, - resetPreview: function resetPreview() { - this.$preview.each(function (i, element) { - var $this = $(element); - var data = $this.data(DATA_PREVIEW); - - $this.css({ - width: data.width, - height: data.height - }).html(data.html).removeData(DATA_PREVIEW); - }); - }, - preview: function preview() { - var self = this; - var image = self.image; - var canvas = self.canvas; - var cropBox = self.cropBox; - var cropBoxWidth = cropBox.width; - var cropBoxHeight = cropBox.height; - var width = image.width; - var height = image.height; - var left = cropBox.left - canvas.left - image.left; - var top = cropBox.top - canvas.top - image.top; - - if (!self.cropped || self.disabled) { - return; - } - - self.$clone2.css({ - width: width, - height: height, - transform: getTransform($.extend({ - translateX: -left, - translateY: -top - }, image)) - }); - - self.$preview.each(function (i, element) { - var $this = $(element); - var data = $this.data(DATA_PREVIEW); - var originalWidth = data.width; - var originalHeight = data.height; - var newWidth = originalWidth; - var newHeight = originalHeight; - var ratio = 1; - - if (cropBoxWidth) { - ratio = originalWidth / cropBoxWidth; - newHeight = cropBoxHeight * ratio; - } - - if (cropBoxHeight && newHeight > originalHeight) { - ratio = originalHeight / cropBoxHeight; - newWidth = cropBoxWidth * ratio; - newHeight = originalHeight; - } - - $this.css({ - width: newWidth, - height: newHeight - }).find('img').css({ - width: width * ratio, - height: height * ratio, - transform: getTransform($.extend({ - translateX: -left * ratio, - translateY: -top * ratio - }, image)) - }); - }); - } - }; - - // Globals - var PointerEvent = typeof window !== 'undefined' ? window.PointerEvent : null; - - // Events - var EVENT_POINTER_DOWN = PointerEvent ? 'pointerdown' : 'touchstart mousedown'; - var EVENT_POINTER_MOVE = PointerEvent ? 'pointermove' : 'touchmove mousemove'; - var EVENT_POINTER_UP = PointerEvent ? ' pointerup pointercancel' : 'touchend touchcancel mouseup'; - var EVENT_WHEEL = 'wheel mousewheel DOMMouseScroll'; - var EVENT_DBLCLICK = 'dblclick'; - var EVENT_RESIZE = 'resize'; - var EVENT_CROP_START = 'cropstart'; - var EVENT_CROP_MOVE = 'cropmove'; - var EVENT_CROP_END = 'cropend'; - var EVENT_CROP = 'crop'; - var EVENT_ZOOM = 'zoom'; - - var events = { - bind: function bind() { - var self = this; - var options = self.options; - var $this = self.$element; - var $cropper = self.$cropper; - - if ($.isFunction(options.cropstart)) { - $this.on(EVENT_CROP_START, options.cropstart); - } - - if ($.isFunction(options.cropmove)) { - $this.on(EVENT_CROP_MOVE, options.cropmove); - } - - if ($.isFunction(options.cropend)) { - $this.on(EVENT_CROP_END, options.cropend); - } - - if ($.isFunction(options.crop)) { - $this.on(EVENT_CROP, options.crop); - } - - if ($.isFunction(options.zoom)) { - $this.on(EVENT_ZOOM, options.zoom); - } - - $cropper.on(EVENT_POINTER_DOWN, proxy(self.cropStart, this)); - - if (options.zoomable && options.zoomOnWheel) { - $cropper.on(EVENT_WHEEL, proxy(self.wheel, this)); - } - - if (options.toggleDragModeOnDblclick) { - $cropper.on(EVENT_DBLCLICK, proxy(self.dblclick, this)); - } - - $(document).on(EVENT_POINTER_MOVE, self.onCropMove = proxy(self.cropMove, this)).on(EVENT_POINTER_UP, self.onCropEnd = proxy(self.cropEnd, this)); - - if (options.responsive) { - $(window).on(EVENT_RESIZE, self.onResize = proxy(self.resize, this)); - } - }, - unbind: function unbind() { - var self = this; - var options = self.options; - var $this = self.$element; - var $cropper = self.$cropper; - - if ($.isFunction(options.cropstart)) { - $this.off(EVENT_CROP_START, options.cropstart); - } - - if ($.isFunction(options.cropmove)) { - $this.off(EVENT_CROP_MOVE, options.cropmove); - } - - if ($.isFunction(options.cropend)) { - $this.off(EVENT_CROP_END, options.cropend); - } - - if ($.isFunction(options.crop)) { - $this.off(EVENT_CROP, options.crop); - } - - if ($.isFunction(options.zoom)) { - $this.off(EVENT_ZOOM, options.zoom); - } - - $cropper.off(EVENT_POINTER_DOWN, self.cropStart); - - if (options.zoomable && options.zoomOnWheel) { - $cropper.off(EVENT_WHEEL, self.wheel); - } - - if (options.toggleDragModeOnDblclick) { - $cropper.off(EVENT_DBLCLICK, self.dblclick); - } - - $(document).off(EVENT_POINTER_MOVE, self.onCropMove).off(EVENT_POINTER_UP, self.onCropEnd); - - if (options.responsive) { - $(window).off(EVENT_RESIZE, self.onResize); - } - } - }; - - var REGEXP_ACTIONS = /^(e|w|s|n|se|sw|ne|nw|all|crop|move|zoom)$/; - - function getPointer(_ref, endOnly) { - var pageX = _ref.pageX, - pageY = _ref.pageY; - - var end = { - endX: pageX, - endY: pageY - }; - - if (endOnly) { - return end; - } - - return $.extend({ - startX: pageX, - startY: pageY - }, end); - } - - var handlers = { - resize: function resize() { - var self = this; - var options = self.options; - var $container = self.$container; - var container = self.container; - var minContainerWidth = Number(options.minContainerWidth) || 200; - var minContainerHeight = Number(options.minContainerHeight) || 100; - - if (self.disabled || container.width === minContainerWidth || container.height === minContainerHeight) { - return; - } - - var ratio = $container.width() / container.width; - - // Resize when width changed or height changed - if (ratio !== 1 || $container.height() !== container.height) { - var canvasData = void 0; - var cropBoxData = void 0; - - if (options.restore) { - canvasData = self.getCanvasData(); - cropBoxData = self.getCropBoxData(); - } - - self.render(); - - if (options.restore) { - self.setCanvasData($.each(canvasData, function (i, n) { - canvasData[i] = n * ratio; - })); - self.setCropBoxData($.each(cropBoxData, function (i, n) { - cropBoxData[i] = n * ratio; - })); - } - } - }, - dblclick: function dblclick() { - var self = this; - - if (self.disabled || self.options.dragMode === 'none') { - return; - } - - self.setDragMode(self.$dragBox.hasClass('cropper-crop') ? 'move' : 'crop'); - }, - wheel: function wheel(event) { - var self = this; - var e = event.originalEvent || event; - var ratio = Number(self.options.wheelZoomRatio) || 0.1; - - if (self.disabled) { - return; - } - - event.preventDefault(); - - // Limit wheel speed to prevent zoom too fast - if (self.wheeling) { - return; - } - - self.wheeling = true; - - setTimeout(function () { - self.wheeling = false; - }, 50); - - var delta = 1; - - if (e.deltaY) { - delta = e.deltaY > 0 ? 1 : -1; - } else if (e.wheelDelta) { - delta = -e.wheelDelta / 120; - } else if (e.detail) { - delta = e.detail > 0 ? 1 : -1; - } - - self.zoom(-delta * ratio, event); - }, - cropStart: function cropStart(e) { - var self = this; - - if (self.disabled) { - return; - } - - var options = self.options; - var pointers = self.pointers; - var originalEvent = e.originalEvent; - var action = void 0; - - if (originalEvent && originalEvent.changedTouches) { - // Handle touch event - $.each(originalEvent.changedTouches, function (i, touch) { - pointers[touch.identifier] = getPointer(touch); - }); - } else { - // Handle mouse event and pointer event - pointers[originalEvent && originalEvent.pointerId || 0] = getPointer(originalEvent || e); - } - - if (objectKeys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) { - action = 'zoom'; - } else { - action = $(e.target).data('action'); - } - - if (!REGEXP_ACTIONS.test(action)) { - return; - } - - if (self.trigger('cropstart', { - originalEvent: originalEvent, - action: action - }).isDefaultPrevented()) { - return; - } - - e.preventDefault(); - - self.action = action; - self.cropping = false; - - if (action === 'crop') { - self.cropping = true; - self.$dragBox.addClass('cropper-modal'); - } - }, - cropMove: function cropMove(e) { - var self = this; - var action = self.action; - - if (self.disabled || !action) { - return; - } - - var pointers = self.pointers; - var originalEvent = e.originalEvent; - - e.preventDefault(); - - if (self.trigger('cropmove', { - originalEvent: originalEvent, - action: action - }).isDefaultPrevented()) { - return; - } - - if (originalEvent && originalEvent.changedTouches) { - $.each(originalEvent.changedTouches, function (i, touch) { - $.extend(pointers[touch.identifier], getPointer(touch, true)); - }); - } else { - $.extend(pointers[originalEvent && originalEvent.pointerId || 0], getPointer(originalEvent || e, true)); - } - - self.change(e); - }, - cropEnd: function cropEnd(e) { - var self = this; - - if (self.disabled) { - return; - } - - var action = self.action; - var pointers = self.pointers; - var originalEvent = e.originalEvent; - - if (originalEvent && originalEvent.changedTouches) { - $.each(originalEvent.changedTouches, function (i, touch) { - delete pointers[touch.identifier]; - }); - } else { - delete pointers[originalEvent && originalEvent.pointerId || 0]; - } - - if (!action) { - return; - } - - e.preventDefault(); - - if (!objectKeys(pointers).length) { - self.action = ''; - } - - if (self.cropping) { - self.cropping = false; - self.$dragBox.toggleClass('cropper-modal', self.cropped && self.options.modal); - } - - self.trigger('cropend', { - originalEvent: originalEvent, - action: action - }); - } - }; - - // Actions - var ACTION_EAST = 'e'; - var ACTION_WEST = 'w'; - var ACTION_SOUTH = 's'; - var ACTION_NORTH = 'n'; - var ACTION_SOUTH_EAST = 'se'; - var ACTION_SOUTH_WEST = 'sw'; - var ACTION_NORTH_EAST = 'ne'; - var ACTION_NORTH_WEST = 'nw'; - - function getMaxZoomRatio(pointers) { - var pointers2 = $.extend({}, pointers); - var ratios = []; - - $.each(pointers, function (pointerId, pointer) { - delete pointers2[pointerId]; - - $.each(pointers2, function (pointerId2, pointer2) { - var x1 = Math.abs(pointer.startX - pointer2.startX); - var y1 = Math.abs(pointer.startY - pointer2.startY); - var x2 = Math.abs(pointer.endX - pointer2.endX); - var y2 = Math.abs(pointer.endY - pointer2.endY); - var z1 = Math.sqrt(x1 * x1 + y1 * y1); - var z2 = Math.sqrt(x2 * x2 + y2 * y2); - var ratio = (z2 - z1) / z1; - - ratios.push(ratio); - }); - }); - - ratios.sort(function (a, b) { - return Math.abs(a) < Math.abs(b); - }); - - return ratios[0]; - } - - var change = { - change: function change(e) { - var self = this; - var options = self.options; - var pointers = self.pointers; - var pointer = pointers[objectKeys(pointers)[0]]; - var container = self.container; - var canvas = self.canvas; - var cropBox = self.cropBox; - var action = self.action; - var aspectRatio = options.aspectRatio; - var width = cropBox.width; - var height = cropBox.height; - var left = cropBox.left; - var top = cropBox.top; - var right = left + width; - var bottom = top + height; - var minLeft = 0; - var minTop = 0; - var maxWidth = container.width; - var maxHeight = container.height; - var renderable = true; - var offset = void 0; - - // Locking aspect ratio in "free mode" by holding shift key (#259) - if (!aspectRatio && e.shiftKey) { - aspectRatio = width && height ? width / height : 1; - } - - if (self.limited) { - minLeft = cropBox.minLeft; - minTop = cropBox.minTop; - maxWidth = minLeft + Math.min(container.width, canvas.width, canvas.left + canvas.width); - maxHeight = minTop + Math.min(container.height, canvas.height, canvas.top + canvas.height); - } - - var range = { - x: pointer.endX - pointer.startX, - y: pointer.endY - pointer.startY - }; - - switch (action) { - // Move crop box - case 'all': - left += range.x; - top += range.y; - break; - - // Resize crop box - case ACTION_EAST: - if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) { - renderable = false; - break; - } - - if (right + range.x > maxWidth) { - range.x = maxWidth - right; - } - - width += range.x; - - if (aspectRatio) { - height = width / aspectRatio; - top -= range.x / aspectRatio / 2; - } - - if (width < 0) { - action = ACTION_WEST; - width = 0; - } - - break; - - case ACTION_NORTH: - if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) { - renderable = false; - break; - } - - if (top + range.y < minTop) { - range.y = minTop - top; - } - - height -= range.y; - top += range.y; - - if (aspectRatio) { - width = height * aspectRatio; - left += range.y * aspectRatio / 2; - } - - if (height < 0) { - action = ACTION_SOUTH; - height = 0; - } - - break; - - case ACTION_WEST: - if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) { - renderable = false; - break; - } - - if (left + range.x < minLeft) { - range.x = minLeft - left; - } - - width -= range.x; - left += range.x; - - if (aspectRatio) { - height = width / aspectRatio; - top += range.x / aspectRatio / 2; - } - - if (width < 0) { - action = ACTION_EAST; - width = 0; - } - - break; - - case ACTION_SOUTH: - if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) { - renderable = false; - break; - } - - if (bottom + range.y > maxHeight) { - range.y = maxHeight - bottom; - } - - height += range.y; - - if (aspectRatio) { - width = height * aspectRatio; - left -= range.y * aspectRatio / 2; - } - - if (height < 0) { - action = ACTION_NORTH; - height = 0; - } - - break; - - case ACTION_NORTH_EAST: - if (aspectRatio) { - if (range.y <= 0 && (top <= minTop || right >= maxWidth)) { - renderable = false; - break; - } - - height -= range.y; - top += range.y; - width = height * aspectRatio; - } else { - if (range.x >= 0) { - if (right < maxWidth) { - width += range.x; - } else if (range.y <= 0 && top <= minTop) { - renderable = false; - } - } else { - width += range.x; - } - - if (range.y <= 0) { - if (top > minTop) { - height -= range.y; - top += range.y; - } - } else { - height -= range.y; - top += range.y; - } - } - - if (width < 0 && height < 0) { - action = ACTION_SOUTH_WEST; - height = 0; - width = 0; - } else if (width < 0) { - action = ACTION_NORTH_WEST; - width = 0; - } else if (height < 0) { - action = ACTION_SOUTH_EAST; - height = 0; - } - - break; - - case ACTION_NORTH_WEST: - if (aspectRatio) { - if (range.y <= 0 && (top <= minTop || left <= minLeft)) { - renderable = false; - break; - } - - height -= range.y; - top += range.y; - width = height * aspectRatio; - left += range.y * aspectRatio; - } else { - if (range.x <= 0) { - if (left > minLeft) { - width -= range.x; - left += range.x; - } else if (range.y <= 0 && top <= minTop) { - renderable = false; - } - } else { - width -= range.x; - left += range.x; - } - - if (range.y <= 0) { - if (top > minTop) { - height -= range.y; - top += range.y; - } - } else { - height -= range.y; - top += range.y; - } - } - - if (width < 0 && height < 0) { - action = ACTION_SOUTH_EAST; - height = 0; - width = 0; - } else if (width < 0) { - action = ACTION_NORTH_EAST; - width = 0; - } else if (height < 0) { - action = ACTION_SOUTH_WEST; - height = 0; - } - - break; - - case ACTION_SOUTH_WEST: - if (aspectRatio) { - if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) { - renderable = false; - break; - } - - width -= range.x; - left += range.x; - height = width / aspectRatio; - } else { - if (range.x <= 0) { - if (left > minLeft) { - width -= range.x; - left += range.x; - } else if (range.y >= 0 && bottom >= maxHeight) { - renderable = false; - } - } else { - width -= range.x; - left += range.x; - } - - if (range.y >= 0) { - if (bottom < maxHeight) { - height += range.y; - } - } else { - height += range.y; - } - } - - if (width < 0 && height < 0) { - action = ACTION_NORTH_EAST; - height = 0; - width = 0; - } else if (width < 0) { - action = ACTION_SOUTH_EAST; - width = 0; - } else if (height < 0) { - action = ACTION_NORTH_WEST; - height = 0; - } - - break; - - case ACTION_SOUTH_EAST: - if (aspectRatio) { - if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) { - renderable = false; - break; - } - - width += range.x; - height = width / aspectRatio; - } else { - if (range.x >= 0) { - if (right < maxWidth) { - width += range.x; - } else if (range.y >= 0 && bottom >= maxHeight) { - renderable = false; - } - } else { - width += range.x; - } - - if (range.y >= 0) { - if (bottom < maxHeight) { - height += range.y; - } - } else { - height += range.y; - } - } - - if (width < 0 && height < 0) { - action = ACTION_NORTH_WEST; - height = 0; - width = 0; - } else if (width < 0) { - action = ACTION_SOUTH_WEST; - width = 0; - } else if (height < 0) { - action = ACTION_NORTH_EAST; - height = 0; - } - - break; - - // Move canvas - case 'move': - self.move(range.x, range.y); - renderable = false; - break; - - // Zoom canvas - case 'zoom': - self.zoom(getMaxZoomRatio(pointers), e.originalEvent); - renderable = false; - break; - - // Create crop box - case 'crop': - if (!range.x || !range.y) { - renderable = false; - break; - } - - offset = self.$cropper.offset(); - left = pointer.startX - offset.left; - top = pointer.startY - offset.top; - width = cropBox.minWidth; - height = cropBox.minHeight; - - if (range.x > 0) { - action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST; - } else if (range.x < 0) { - left -= width; - action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST; - } - - if (range.y < 0) { - top -= height; - } - - // Show the crop box if is hidden - if (!self.cropped) { - self.$cropBox.removeClass('cropper-hidden'); - self.cropped = true; - - if (self.limited) { - self.limitCropBox(true, true); - } - } - - break; - - default: - } - - if (renderable) { - cropBox.width = width; - cropBox.height = height; - cropBox.left = left; - cropBox.top = top; - self.action = action; - self.renderCropBox(); - } - - // Override - $.each(pointers, function (i, p) { - p.startX = p.endX; - p.startY = p.endY; - }); - } - }; - - function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length) ; i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - - function getPointersCenter(pointers) { - var pageX = 0; - var pageY = 0; - var count = 0; - - $.each(pointers, function (i, _ref) { - var startX = _ref.startX, - startY = _ref.startY; - - pageX += startX; - pageY += startY; - count += 1; - }); - - pageX /= count; - pageY /= count; - - return { - pageX: pageX, - pageY: pageY - }; - } - - var methods = { - // Show the crop box manually - crop: function crop() { - var self = this; - - if (!self.ready || self.disabled) { - return; - } - - if (!self.cropped) { - self.cropped = true; - self.limitCropBox(true, true); - - if (self.options.modal) { - self.$dragBox.addClass('cropper-modal'); - } - - self.$cropBox.removeClass('cropper-hidden'); - } - - self.setCropBoxData(self.initialCropBox); - }, - - - // Reset the image and crop box to their initial states - reset: function reset() { - var self = this; - - if (!self.ready || self.disabled) { - return; - } - - self.image = $.extend({}, self.initialImage); - self.canvas = $.extend({}, self.initialCanvas); - self.cropBox = $.extend({}, self.initialCropBox); - - self.renderCanvas(); - - if (self.cropped) { - self.renderCropBox(); - } - }, - - - // Clear the crop box - clear: function clear() { - var self = this; - - if (!self.cropped || self.disabled) { - return; - } - - $.extend(self.cropBox, { - left: 0, - top: 0, - width: 0, - height: 0 - }); - - self.cropped = false; - self.renderCropBox(); - - self.limitCanvas(true, true); - - // Render canvas after crop box rendered - self.renderCanvas(); - - self.$dragBox.removeClass('cropper-modal'); - self.$cropBox.addClass('cropper-hidden'); - }, - - - /** - * Replace the image's src and rebuild the cropper - * - * @param {String} url - * @param {Boolean} onlyColorChanged (optional) - */ - replace: function replace(url, onlyColorChanged) { - var self = this; - - if (!self.disabled && url) { - if (self.isImg) { - self.$element.attr('src', url); - } - - if (onlyColorChanged) { - self.url = url; - self.$clone.attr('src', url); - - if (self.ready) { - self.$preview.find('img').add(self.$clone2).attr('src', url); - } - } else { - if (self.isImg) { - self.replaced = true; - } - - // Clear previous data - self.options.data = null; - self.load(url); - } - } - }, - - - // Enable (unfreeze) the cropper - enable: function enable() { - var self = this; - - if (self.ready) { - self.disabled = false; - self.$cropper.removeClass('cropper-disabled'); - } - }, - - - // Disable (freeze) the cropper - disable: function disable() { - var self = this; - - if (self.ready) { - self.disabled = true; - self.$cropper.addClass('cropper-disabled'); - } - }, - - - // Destroy the cropper and remove the instance from the image - destroy: function destroy() { - var self = this; - var $this = self.$element; - - if (self.loaded) { - if (self.isImg && self.replaced) { - $this.attr('src', self.originalUrl); - } - - self.unbuild(); - $this.removeClass('cropper-hidden'); - } else if (self.isImg) { - $this.off('load', self.start); - } else if (self.$clone) { - self.$clone.remove(); - } - - $this.removeData('cropper'); - }, - - - /** - * Move the canvas with relative offsets - * - * @param {Number} offsetX - * @param {Number} offsetY (optional) - */ - move: function move(offsetX, offsetY) { - var self = this; - var canvas = self.canvas; - - self.moveTo(isUndefined(offsetX) ? offsetX : canvas.left + Number(offsetX), isUndefined(offsetY) ? offsetY : canvas.top + Number(offsetY)); - }, - - - /** - * Move the canvas to an absolute point - * - * @param {Number} x - * @param {Number} y (optional) - */ - moveTo: function moveTo(x, y) { - var self = this; - var canvas = self.canvas; - var changed = false; - - // If "y" is not present, its default value is "x" - if (isUndefined(y)) { - y = x; - } - - x = Number(x); - y = Number(y); - - if (self.ready && !self.disabled && self.options.movable) { - if (isNumber(x)) { - canvas.left = x; - changed = true; - } - - if (isNumber(y)) { - canvas.top = y; - changed = true; - } - - if (changed) { - self.renderCanvas(true); - } - } - }, - - - /** - * Zoom the canvas with a relative ratio - * - * @param {Number} ratio - * @param {jQuery Event} _event (private) - */ - zoom: function zoom(ratio, _event) { - var self = this; - var canvas = self.canvas; - - ratio = Number(ratio); - - if (ratio < 0) { - ratio = 1 / (1 - ratio); - } else { - ratio = 1 + ratio; - } - - self.zoomTo(canvas.width * ratio / canvas.naturalWidth, _event); - }, - - - /** - * Zoom the canvas to an absolute ratio - * - * @param {Number} ratio - * @param {jQuery Event} _event (private) - */ - zoomTo: function zoomTo(ratio, _event) { - var self = this; - var options = self.options; - var pointers = self.pointers; - var canvas = self.canvas; - var width = canvas.width; - var height = canvas.height; - var naturalWidth = canvas.naturalWidth; - var naturalHeight = canvas.naturalHeight; - - ratio = Number(ratio); - - if (ratio >= 0 && self.ready && !self.disabled && options.zoomable) { - var newWidth = naturalWidth * ratio; - var newHeight = naturalHeight * ratio; - var originalEvent = void 0; - - if (_event) { - originalEvent = _event.originalEvent; - } - - if (self.trigger('zoom', { - originalEvent: originalEvent, - oldRatio: width / naturalWidth, - ratio: newWidth / naturalWidth - }).isDefaultPrevented()) { - return; - } - - if (originalEvent) { - var offset = self.$cropper.offset(); - var center = pointers && objectKeys(pointers).length ? getPointersCenter(pointers) : { - pageX: _event.pageX || originalEvent.pageX || 0, - pageY: _event.pageY || originalEvent.pageY || 0 - }; - - // Zoom from the triggering point of the event - canvas.left -= (newWidth - width) * ((center.pageX - offset.left - canvas.left) / width); - canvas.top -= (newHeight - height) * ((center.pageY - offset.top - canvas.top) / height); - } else { - // Zoom from the center of the canvas - canvas.left -= (newWidth - width) / 2; - canvas.top -= (newHeight - height) / 2; - } - - canvas.width = newWidth; - canvas.height = newHeight; - self.renderCanvas(true); - } - }, - - - /** - * Rotate the canvas with a relative degree - * - * @param {Number} degree - */ - rotate: function rotate(degree) { - var self = this; - - self.rotateTo((self.image.rotate || 0) + Number(degree)); - }, - - - /** - * Rotate the canvas to an absolute degree - * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#rotate() - * - * @param {Number} degree - */ - rotateTo: function rotateTo(degree) { - var self = this; - - degree = Number(degree); - - if (isNumber(degree) && self.ready && !self.disabled && self.options.rotatable) { - self.image.rotate = degree % 360; - self.rotated = true; - self.renderCanvas(true); - } - }, - - - /** - * Scale the image - * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#scale() - * - * @param {Number} scaleX - * @param {Number} scaleY (optional) - */ - scale: function scale(scaleX, scaleY) { - var self = this; - var image = self.image; - var changed = false; - - // If "scaleY" is not present, its default value is "scaleX" - if (isUndefined(scaleY)) { - scaleY = scaleX; - } - - scaleX = Number(scaleX); - scaleY = Number(scaleY); - - if (self.ready && !self.disabled && self.options.scalable) { - if (isNumber(scaleX)) { - image.scaleX = scaleX; - changed = true; - } - - if (isNumber(scaleY)) { - image.scaleY = scaleY; - changed = true; - } - - if (changed) { - self.renderImage(true); - } - } - }, - - - /** - * Scale the abscissa of the image - * - * @param {Number} scaleX - */ - scaleX: function scaleX(_scaleX) { - var self = this; - var scaleY = self.image.scaleY; - - self.scale(_scaleX, isNumber(scaleY) ? scaleY : 1); - }, - - - /** - * Scale the ordinate of the image - * - * @param {Number} scaleY - */ - scaleY: function scaleY(_scaleY) { - var self = this; - var scaleX = self.image.scaleX; - - self.scale(isNumber(scaleX) ? scaleX : 1, _scaleY); - }, - - - /** - * Get the cropped area position and size data (base on the original image) - * - * @param {Boolean} isRounded (optional) - * @return {Object} data - */ - getData: function getData(isRounded) { - var self = this; - var options = self.options; - var image = self.image; - var canvas = self.canvas; - var cropBox = self.cropBox; - var ratio = void 0; - var data = void 0; - - if (self.ready && self.cropped) { - data = { - x: cropBox.left - canvas.left, - y: cropBox.top - canvas.top, - width: cropBox.width, - height: cropBox.height - }; - - ratio = image.width / image.naturalWidth; - - $.each(data, function (i, n) { - n /= ratio; - data[i] = isRounded ? Math.round(n) : n; - }); - } else { - data = { - x: 0, - y: 0, - width: 0, - height: 0 - }; - } - - if (options.rotatable) { - data.rotate = image.rotate || 0; - } - - if (options.scalable) { - data.scaleX = image.scaleX || 1; - data.scaleY = image.scaleY || 1; - } - - return data; - }, - - - /** - * Set the cropped area position and size with new data - * - * @param {Object} data - */ - setData: function setData(data) { - var self = this; - var options = self.options; - var image = self.image; - var canvas = self.canvas; - var cropBoxData = {}; - var rotated = void 0; - var isScaled = void 0; - var ratio = void 0; - - if ($.isFunction(data)) { - data = data.call(self.element); - } - - if (self.ready && !self.disabled && $.isPlainObject(data)) { - if (options.rotatable) { - if (isNumber(data.rotate) && data.rotate !== image.rotate) { - image.rotate = data.rotate; - rotated = true; - self.rotated = rotated; - } - } - - if (options.scalable) { - if (isNumber(data.scaleX) && data.scaleX !== image.scaleX) { - image.scaleX = data.scaleX; - isScaled = true; - } - - if (isNumber(data.scaleY) && data.scaleY !== image.scaleY) { - image.scaleY = data.scaleY; - isScaled = true; - } - } - - if (rotated) { - self.renderCanvas(); - } else if (isScaled) { - self.renderImage(); - } - - ratio = image.width / image.naturalWidth; - - if (isNumber(data.x)) { - cropBoxData.left = data.x * ratio + canvas.left; - } - - if (isNumber(data.y)) { - cropBoxData.top = data.y * ratio + canvas.top; - } - - if (isNumber(data.width)) { - cropBoxData.width = data.width * ratio; - } - - if (isNumber(data.height)) { - cropBoxData.height = data.height * ratio; - } - - self.setCropBoxData(cropBoxData); - } - }, - - - /** - * Get the container size data - * - * @return {Object} data - */ - getContainerData: function getContainerData() { - return this.ready ? this.container : {}; - }, - - - /** - * Get the image position and size data - * - * @return {Object} data - */ - getImageData: function getImageData() { - return this.loaded ? this.image : {}; - }, - - - /** - * Get the canvas position and size data - * - * @return {Object} data - */ - getCanvasData: function getCanvasData() { - var self = this; - var canvas = self.canvas; - var data = {}; - - if (self.ready) { - $.each(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (i, n) { - data[n] = canvas[n]; - }); - } - - return data; - }, - - - /** - * Set the canvas position and size with new data - * - * @param {Object} data - */ - setCanvasData: function setCanvasData(data) { - var self = this; - var canvas = self.canvas; - var aspectRatio = canvas.aspectRatio; - - if ($.isFunction(data)) { - data = data.call(self.$element); - } - - if (self.ready && !self.disabled && $.isPlainObject(data)) { - if (isNumber(data.left)) { - canvas.left = data.left; - } - - if (isNumber(data.top)) { - canvas.top = data.top; - } - - if (isNumber(data.width)) { - canvas.width = data.width; - canvas.height = data.width / aspectRatio; - } else if (isNumber(data.height)) { - canvas.height = data.height; - canvas.width = data.height * aspectRatio; - } - - self.renderCanvas(true); - } - }, - - - /** - * Get the crop box position and size data - * - * @return {Object} data - */ - getCropBoxData: function getCropBoxData() { - var self = this; - var cropBox = self.cropBox; - - return self.ready && self.cropped ? { - left: cropBox.left, - top: cropBox.top, - width: cropBox.width, - height: cropBox.height - } : {}; - }, - - - /** - * Set the crop box position and size with new data - * - * @param {Object} data - */ - setCropBoxData: function setCropBoxData(data) { - var self = this; - var cropBox = self.cropBox; - var aspectRatio = self.options.aspectRatio; - var widthChanged = void 0; - var heightChanged = void 0; - - if ($.isFunction(data)) { - data = data.call(self.$element); - } - - if (self.ready && self.cropped && !self.disabled && $.isPlainObject(data)) { - if (isNumber(data.left)) { - cropBox.left = data.left; - } - - if (isNumber(data.top)) { - cropBox.top = data.top; - } - - if (isNumber(data.width) && data.width !== cropBox.width) { - widthChanged = true; - cropBox.width = data.width; - } - - if (isNumber(data.height) && data.height !== cropBox.height) { - heightChanged = true; - cropBox.height = data.height; - } - - if (aspectRatio) { - if (widthChanged) { - cropBox.height = cropBox.width / aspectRatio; - } else if (heightChanged) { - cropBox.width = cropBox.height * aspectRatio; - } - } - - self.renderCropBox(); - } - }, - - - /** - * Get a canvas drawn the cropped image - * - * @param {Object} options (optional) - * @return {HTMLCanvasElement} canvas - */ - getCroppedCanvas: function getCroppedCanvas(options) { - var self = this; - - if (!self.ready || !window.HTMLCanvasElement) { - return null; - } - - if (!$.isPlainObject(options)) { - options = {}; - } - - if (!self.cropped) { - return getSourceCanvas(self.$clone[0], self.image, options); - } - - var data = self.getData(); - var originalWidth = data.width; - var originalHeight = data.height; - var aspectRatio = originalWidth / originalHeight; - var scaledWidth = void 0; - var scaledHeight = void 0; - var scaledRatio = void 0; - - if ($.isPlainObject(options)) { - scaledWidth = options.width; - scaledHeight = options.height; - - if (scaledWidth) { - scaledHeight = scaledWidth / aspectRatio; - scaledRatio = scaledWidth / originalWidth; - } else if (scaledHeight) { - scaledWidth = scaledHeight * aspectRatio; - scaledRatio = scaledHeight / originalHeight; - } - } - - // The canvas element will use `Math.Math.floor` on a float number, so Math.floor first - var canvasWidth = Math.floor(scaledWidth || originalWidth); - var canvasHeight = Math.floor(scaledHeight || originalHeight); - - var canvas = $('')[0]; - var context = canvas.getContext('2d'); - - canvas.width = canvasWidth; - canvas.height = canvasHeight; - - if (options.fillColor) { - context.fillStyle = options.fillColor; - context.fillRect(0, 0, canvasWidth, canvasHeight); - } - - // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage - var parameters = function () { - var source = getSourceCanvas(self.$clone[0], self.image, options); - var sourceWidth = source.width; - var sourceHeight = source.height; - var canvasData = self.canvas; - var params = [source]; - - // Source canvas - var srcX = data.x + canvasData.naturalWidth * (Math.abs(data.scaleX || 1) - 1) / 2; - var srcY = data.y + canvasData.naturalHeight * (Math.abs(data.scaleY || 1) - 1) / 2; - var srcWidth = void 0; - var srcHeight = void 0; - - // Destination canvas - var dstX = void 0; - var dstY = void 0; - var dstWidth = void 0; - var dstHeight = void 0; - - if (srcX <= -originalWidth || srcX > sourceWidth) { - srcX = 0; - srcWidth = 0; - dstX = 0; - dstWidth = 0; - } else if (srcX <= 0) { - dstX = -srcX; - srcX = 0; - dstWidth = Math.min(sourceWidth, originalWidth + srcX); - srcWidth = dstWidth; - } else if (srcX <= sourceWidth) { - dstX = 0; - dstWidth = Math.min(originalWidth, sourceWidth - srcX); - srcWidth = dstWidth; - } - - if (srcWidth <= 0 || srcY <= -originalHeight || srcY > sourceHeight) { - srcY = 0; - srcHeight = 0; - dstY = 0; - dstHeight = 0; - } else if (srcY <= 0) { - dstY = -srcY; - srcY = 0; - dstHeight = Math.min(sourceHeight, originalHeight + srcY); - srcHeight = dstHeight; - } else if (srcY <= sourceHeight) { - dstY = 0; - dstHeight = Math.min(originalHeight, sourceHeight - srcY); - srcHeight = dstHeight; - } - - // All the numerical parameters should be integer for `drawImage` (#476) - params.push(Math.floor(srcX), Math.floor(srcY), Math.floor(srcWidth), Math.floor(srcHeight)); - - // Scale destination sizes - if (scaledRatio) { - dstX *= scaledRatio; - dstY *= scaledRatio; - dstWidth *= scaledRatio; - dstHeight *= scaledRatio; - } - - // Avoid "IndexSizeError" in IE and Firefox - if (dstWidth > 0 && dstHeight > 0) { - params.push(Math.floor(dstX), Math.floor(dstY), Math.floor(dstWidth), Math.floor(dstHeight)); - } - - return params; - }(); - - context.imageSmoothingEnabled = !!options.imageSmoothingEnabled; - - if (options.imageSmoothingQuality) { - context.imageSmoothingQuality = options.imageSmoothingQuality; - } - - context.drawImage.apply(context, _toConsumableArray(parameters)); - - return canvas; - }, - - - /** - * Change the aspect ratio of the crop box - * - * @param {Number} aspectRatio - */ - setAspectRatio: function setAspectRatio(aspectRatio) { - var self = this; - var options = self.options; - - if (!self.disabled && !isUndefined(aspectRatio)) { - // 0 -> NaN - options.aspectRatio = Math.max(0, aspectRatio) || NaN; - - if (self.ready) { - self.initCropBox(); - - if (self.cropped) { - self.renderCropBox(); - } - } - } - }, - - - /** - * Change the drag mode - * - * @param {String} mode (optional) - */ - setDragMode: function setDragMode(mode) { - var self = this; - var options = self.options; - var croppable = void 0; - var movable = void 0; - - if (self.loaded && !self.disabled) { - croppable = mode === 'crop'; - movable = options.movable && mode === 'move'; - mode = croppable || movable ? mode : 'none'; - - self.$dragBox.data('action', mode).toggleClass('cropper-crop', croppable).toggleClass('cropper-move', movable); - - if (!options.cropBoxMovable) { - // Sync drag mode to crop box when it is not movable(#300) - self.$face.data('action', mode).toggleClass('cropper-crop', croppable).toggleClass('cropper-move', movable); - } - } - } - }; - - var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - var CLASS_HIDDEN = 'cropper-hidden'; - var REGEXP_DATA_URL = /^data:/; - var REGEXP_DATA_URL_JPEG = /^data:image\/jpeg;base64,/; - - var Cropper = function () { - function Cropper(element, options) { - _classCallCheck(this, Cropper); - - var self = this; - - self.$element = $(element); - self.options = $.extend({}, DEFAULTS, $.isPlainObject(options) && options); - self.loaded = false; - self.ready = false; - self.completed = false; - self.rotated = false; - self.cropped = false; - self.disabled = false; - self.replaced = false; - self.limited = false; - self.wheeling = false; - self.isImg = false; - self.originalUrl = ''; - self.canvas = null; - self.cropBox = null; - self.pointers = {}; - self.init(); - } - - _createClass(Cropper, [{ - key: 'init', - value: function init() { - var self = this; - var $this = self.$element; - var url = void 0; - - if ($this.is('img')) { - self.isImg = true; - - // Should use `$.fn.attr` here. e.g.: "img/picture.jpg" - url = $this.attr('src'); - self.originalUrl = url; - - // Stop when it's a blank image - if (!url) { - return; - } - - // Should use `$.fn.prop` here. e.g.: "http://example.com/img/picture.jpg" - url = $this.prop('src'); - } else if ($this.is('canvas') && window.HTMLCanvasElement) { - url = $this[0].toDataURL(); - } - - self.load(url); - } - - // A shortcut for triggering custom events - - }, { - key: 'trigger', - value: function trigger(type, data) { - var e = $.Event(type, data); - - this.$element.trigger(e); - - return e; - } - }, { - key: 'load', - value: function load(url) { - var self = this; - var options = self.options; - var $this = self.$element; - - if (!url) { - return; - } - - self.url = url; - self.image = {}; - - if (!options.checkOrientation || !window.ArrayBuffer) { - self.clone(); - return; - } - - // XMLHttpRequest disallows to open a Data URL in some browsers like IE11 and Safari - if (REGEXP_DATA_URL.test(url)) { - if (REGEXP_DATA_URL_JPEG.test(url)) { - self.read(dataURLToArrayBuffer(url)); - } else { - self.clone(); - } - return; - } - - var xhr = new XMLHttpRequest(); - - xhr.onerror = $.proxy(function () { - self.clone(); - }, this); - - xhr.onload = function load() { - self.read(this.response); - }; - - if (options.checkCrossOrigin && isCrossOriginURL(url) && $this.prop('crossOrigin')) { - url = addTimestamp(url); - } - - xhr.open('get', url); - xhr.responseType = 'arraybuffer'; - xhr.withCredentials = $this.prop('crossOrigin') === 'use-credentials'; - xhr.send(); - } - }, { - key: 'read', - value: function read(arrayBuffer) { - var self = this; - var options = self.options; - var orientation = getOrientation(arrayBuffer); - var image = self.image; - var rotate = 0; - var scaleX = 1; - var scaleY = 1; - - if (orientation > 1) { - self.url = arrayBufferToDataURL(arrayBuffer); - - switch (orientation) { - // flip horizontal - case 2: - scaleX = -1; - break; - - // rotate left 180° - case 3: - rotate = -180; - break; - - // flip vertical - case 4: - scaleY = -1; - break; - - // flip vertical + rotate right 90° - case 5: - rotate = 90; - scaleY = -1; - break; - - // rotate right 90° - case 6: - rotate = 90; - break; - - // flip horizontal + rotate right 90° - case 7: - rotate = 90; - scaleX = -1; - break; - - // rotate left 90° - case 8: - rotate = -90; - break; - - default: - } - } - - if (options.rotatable) { - image.rotate = rotate; - } - - if (options.scalable) { - image.scaleX = scaleX; - image.scaleY = scaleY; - } - - self.clone(); - } - }, { - key: 'clone', - value: function clone() { - var self = this; - var options = self.options; - var $this = self.$element; - var url = self.url; - var crossOrigin = ''; - var crossOriginUrl = void 0; - - if (options.checkCrossOrigin && isCrossOriginURL(url)) { - crossOrigin = $this.prop('crossOrigin'); - - if (crossOrigin) { - crossOriginUrl = url; - } else { - crossOrigin = 'anonymous'; - - // Bust cache (#148) when there is not a "crossOrigin" property - crossOriginUrl = addTimestamp(url); - } - } - - self.crossOrigin = crossOrigin; - self.crossOriginUrl = crossOriginUrl; - - var image = document.createElement('img'); - - if (crossOrigin) { - image.crossOrigin = crossOrigin; - } - - image.src = crossOriginUrl || url; - - var $clone = $(image); - - self.$clone = $clone; - - if (self.isImg) { - if ($this[0].complete) { - self.start(); - } else { - $this.one('load', $.proxy(self.start, this)); - } - } else { - $clone.one('load', $.proxy(self.start, this)).one('error', $.proxy(self.stop, this)).addClass('cropper-hide').insertAfter($this); - } - } - }, { - key: 'start', - value: function start() { - var self = this; - var $clone = self.$clone; - var $image = self.$element; - - if (!self.isImg) { - $clone.off('error', self.stop); - $image = $clone; - } - - getImageSize($image[0], function (naturalWidth, naturalHeight) { - $.extend(self.image, { - naturalWidth: naturalWidth, - naturalHeight: naturalHeight, - aspectRatio: naturalWidth / naturalHeight - }); - - self.loaded = true; - self.build(); - }); - } - }, { - key: 'stop', - value: function stop() { - var self = this; - - self.$clone.remove(); - self.$clone = null; - } - }, { - key: 'build', - value: function build() { - var self = this; - var options = self.options; - var $this = self.$element; - var $clone = self.$clone; - - if (!self.loaded) { - return; - } - - // Unbuild first when replace - if (self.ready) { - self.unbuild(); - } - - var $cropper = $(TEMPLATE); - var $cropBox = $cropper.find('.cropper-crop-box'); - var $face = $cropBox.find('.cropper-face'); - - // Create cropper elements - self.$container = $this.parent(); - self.$cropper = $cropper; - self.$canvas = $cropper.find('.cropper-canvas').append($clone); - self.$dragBox = $cropper.find('.cropper-drag-box'); - self.$cropBox = $cropBox; - self.$viewBox = $cropper.find('.cropper-view-box'); - self.$face = $face; - - // Hide the original image - $this.addClass(CLASS_HIDDEN).after($cropper); - - // Show the clone image if is hidden - if (!self.isImg) { - $clone.removeClass('cropper-hide'); - } - - self.initPreview(); - self.bind(); - - options.aspectRatio = Math.max(0, options.aspectRatio) || NaN; - options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0; - - self.cropped = options.autoCrop; - - if (options.autoCrop) { - if (options.modal) { - self.$dragBox.addClass('cropper-modal'); - } - } else { - $cropBox.addClass(CLASS_HIDDEN); - } - - if (!options.guides) { - $cropBox.find('.cropper-dashed').addClass(CLASS_HIDDEN); - } - - if (!options.center) { - $cropBox.find('.cropper-center').addClass(CLASS_HIDDEN); - } - - if (options.cropBoxMovable) { - $face.addClass('cropper-move').data('action', 'all'); - } - - if (!options.highlight) { - $face.addClass('cropper-invisible'); - } - - if (options.background) { - $cropper.addClass('cropper-bg'); - } - - if (!options.cropBoxResizable) { - $cropBox.find('.cropper-line, .cropper-point').addClass(CLASS_HIDDEN); - } - - self.setDragMode(options.dragMode); - self.render(); - self.ready = true; - self.setData(options.data); - - // Trigger the ready event asynchronously to keep `data('cropper')` is defined - self.completing = setTimeout(function () { - if ($.isFunction(options.ready)) { - $this.one('ready', options.ready); - } - - self.trigger('ready'); - self.trigger('crop', self.getData()); - self.completed = true; - }, 0); - } - }, { - key: 'unbuild', - value: function unbuild() { - var self = this; - - if (!self.ready) { - return; - } - - if (!self.completed) { - clearTimeout(self.completing); - } - - self.ready = false; - self.completed = false; - self.initialImage = null; - - // Clear `initialCanvas` is necessary when replace - self.initialCanvas = null; - self.initialCropBox = null; - self.container = null; - self.canvas = null; - - // Clear `cropBox` is necessary when replace - self.cropBox = null; - self.unbind(); - - self.resetPreview(); - self.$preview = null; - - self.$viewBox = null; - self.$cropBox = null; - self.$dragBox = null; - self.$canvas = null; - self.$container = null; - - self.$cropper.remove(); - self.$cropper = null; - } - }], [{ - key: 'setDefaults', - value: function setDefaults(options) { - $.extend(DEFAULTS, $.isPlainObject(options) && options); - } - }]); - - return Cropper; - }(); - - $.extend(Cropper.prototype, render); - $.extend(Cropper.prototype, preview); - $.extend(Cropper.prototype, events); - $.extend(Cropper.prototype, handlers); - $.extend(Cropper.prototype, change); - $.extend(Cropper.prototype, methods); - - var NAMESPACE = 'cropper'; - var OtherCropper = $.fn.cropper; - - $.fn.cropper = function jQueryCropper(option) { - for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - var result = void 0; - - this.each(function (i, element) { - var $this = $(element); - var data = $this.data(NAMESPACE); - - if (!data) { - if (/destroy/.test(option)) { - return; - } - - var options = $.extend({}, $this.data(), $.isPlainObject(option) && option); - $this.data(NAMESPACE, data = new Cropper(element, options)); - } - - if (typeof option === 'string') { - var fn = data[option]; - - if ($.isFunction(fn)) { - result = fn.apply(data, args); - } - } - }); - - return typeof result !== 'undefined' ? result : this; - }; - - $.fn.cropper.Constructor = Cropper; - $.fn.cropper.setDefaults = Cropper.setDefaults; - - // No conflict - $.fn.cropper.noConflict = function noConflict() { - $.fn.cropper = OtherCropper; - return this; - }; - - exports('cropper', $.fn.cropper); -}); \ No newline at end of file diff --git a/component/pear/module/design.js b/component/pear/module/design.js deleted file mode 100644 index 6bcf7acdfb06126569d51534e85a61398fb1abfa..0000000000000000000000000000000000000000 --- a/component/pear/module/design.js +++ /dev/null @@ -1,182 +0,0 @@ -layui.define(['layer', 'form'], function(exports) { - var layer = layui.layer, - form = layui.form, - $ = layui.$, - key = ''; - delHtml() - $('button').on('click', function() { - var _this = $(this), - size = _this.data('size'), - type = _this.data('type'), - html = ''; - key = randStrName(); - switch (type) { - case 'text': - html = input(type, size) - break; - case 'password': - html = input(type, size) - break; - case 'select': - html = select(size) - break; - case 'checkbox_a': - html = checkbox_a(size) - break; - case 'checkbox_b': - html = checkbox_b(size) - break; - case 'radio': - html = radio(size) - break; - case 'textarea': - html = textarea(size) - break; - case 'submit': - html = submits(size) - break; - case 'del': - $('form').html("\n") - delHtml() - $('.code-show').text('') - return false - break; - default: - layer.msg('类型错误', { - icon: 2 - }) - } - - $('form').append(html); - form.render(); - setHtml(html) - }) - - function delHtml() { - layui.data('form_html', { - key: 'html', - remove: true - }); - } - - function setHtml(html) { - var h = layui.data('form_html'); - if (h && h.html) { - var _d = h.html + html - } else { - var _d = html - } - layui.data('form_html', { - key: 'html', - value: _d - }) - $('.code-show').text('
    \n' + _d + '
    ') - - } - - function input(type, size) { - var name = type === 'text' ? '输入框' : (type === 'password' ? '密码框' : ''); - var html = '
    \n' + - ' \n' + - '
    \n' + - ' \n' + - '
    \n' + - '
    \n'; - return html; - } - - function select(size) { - var html = '
    \n' + - ' \n' + - '
    \n' + - ' \n' + - '
    \n' + - '
    \n'; - return html; - } - - function checkbox_a(size) { - var html = '
    \n' + - ' \n' + - '
    \n' + - ' \n' + - ' \n' + - ' \n' + - '
    \n' + - '
    \n'; - return html; - } - - function checkbox_b(size) { - var html = '
    \n' + - ' \n' + - '
    \n' + - ' \n' + - '
    \n' + - '
    \n'; - return html; - } - - function radio(size) { - var html = '
    \n' + - ' \n' + - '
    \n' + - ' \n' + - ' \n' + - '
    \n' + - '
    \n'; - return html; - } - - function textarea(size) { - var html = '
    \n' + - ' \n' + - '
    \n' + - ' \n' + - '
    \n' + - '
    \n'; - return html; - } - - function submits(size) { - var html = '
    \n' + - '
    \n' + - ' \n' + - ' \n' + - '
    \n' + - '
    \n'; - return html; - } - - function jscode() { - var html = ''; - return html; - } - - function randStrName() { - return Math.random().toString(36).substr(8); - } - var jscodehtml = jscode(); - $('.js-show').text(jscodehtml) - form.on('submit(formDemo)', function(data) { - layer.msg(JSON.stringify(data.field)); - return false; - }); - exports('design', {}); -}); diff --git a/component/pear/module/drawer.js b/component/pear/module/drawer.js deleted file mode 100644 index a95e41ac375dae0e25831131a97eda3488c45ac8..0000000000000000000000000000000000000000 --- a/component/pear/module/drawer.js +++ /dev/null @@ -1,420 +0,0 @@ -layui.define(['jquery', 'element', 'layer', 'loading'], function (exports) { - "use strict"; - - /** - * Drawer component - * */ - var MOD_NAME = 'drawer', - $ = layui.jquery, - element = layui.element, - layer = layui.layer, - loading = layui.loading; - - - var drawer = new function () { - - /** - * open drawer - * */ - this.open = function (option) { - // 默认使用 legacy 模式 - if (option.legacy === undefined) { - option.legacy = true; - }; - if (option.legacy) { - var obj = new mSlider({ - target: option.target, - dom: option.dom, - direction: option.direction, - distance: option.distance, - time: option.time ? option.time : 0, - maskClose: option.maskClose, - callback: option.success - }); - obj.open(); - return obj; - } else { - return layerDrawer(option); - } - } - this.title = layer.title; - this.style = layer.style; - this.close = layer.close; - this.closeAll = layer.closeAll; - } - - /** - * - * 封装 layer.open - * type,anim,move,fixed不可用,其它参数和 layer.open 一致 - * @param {LayerOption} option - * @returns 原生 layer 的 index - */ - function layerDrawer(option) { - var opt = normalizeOption(option) - if (opt.target) appendToTarget(opt); - if (opt.url) loadFragment(opt); - var layerIndex = layer.open(opt); - - return layerIndex; - } - - /** - * 加载 HTML 片段到 layer content - * @param {*} option - */ - function loadFragment(option) { - option.success = Aspect(option.success, function (layero, index) { - var layerID = "#" + layero.attr("id"); - loading.block({ - type: 1, - elem: layerID, - msg: '' - }); - $.ajax({ - url: option.url, - dataType: "html", - success: function (result) { - layero.children('.layui-layer-content').html(result); - loading.blockRemove(layerID); - } - }) - }) - } - - /** - *将 layer 挂载到指定节点 - * @param {object} opt - */ - function appendToTarget(opt) { - var targetDOM = $(opt.target); - var contentDOM = $(opt.content); - contentDOM.appendTo(targetDOM); - opt.skin = getDrawerAnimationClass(opt.offset, true); - opt.offset = calcOffset(opt.offset, opt.area, targetDOM); - // 处理关闭后偶现 DOM 仍显示的问题,layer 的 BUG - opt.end = Aspect(opt.end, function () { - contentDOM.css("display", "none"); - }) - if (opt.shade) { - opt.success = Aspect(opt.success, function (layero, index) { - var shadeDOM = $("#layui-layer-shade" + index); - shadeDOM.css("position", "absolute"); - shadeDOM.appendTo(layero.parent()); - }) - } - } - - /** - * 规格化 layer.open 选项,兼容原版 Drawer 所有选项 - * @param {LayerOption} option layer.open 的选项 - * @returns 规格化后的 layer.open 选项 - */ - function normalizeOption(option) { - if (option.direction && !option.offset) { - if (option.direction === "right") { - option.offset = "r"; - } else if (option.direction === "left") { - option.offset = "l"; - } else if (option.direction === "top") { - option.offset = "t"; - } else if (option.direction === "bottom") { - option.offset = "b"; - } else { - option.offset = "r"; - } - } - if (option.distance && !option.area) { - option.area = option.distance; - } - if (option.dom && !option.content) { - option.content = $(option.dom); - } - if (option.maskClose && option.shadeClose === undefined) { - option.shadeClose = (option.maskClose + "").toString() !== "false" ? true : false; - } - - option.type = 1 - option.anim = -1; - option.move = false; - option.fixed = true; - if (option.iframe) { - option.type = 2; - option.content = option.iframe; - } - if (option.offset === undefined) option.offset = "r"; - option.area = calcDrawerArea(option.offset, option.area); - if (option.title === undefined) option.title = false; - if (option.closeBtn === undefined) option.closeBtn = false; - if (option.shade === undefined) option.shade = 0.3; - if (option.shadeClose === undefined) option.shadeClose = true; - if (option.skin === undefined) option.skin = getDrawerAnimationClass(option.offset); - if (option.resize === undefined) option.resize = false; - if (option.success === undefined) option.success = function () { }; // 处理遮罩需要 - if (option.end === undefined) option.end = function () { }; - - return option; - } - - /** - * 计算抽屉宽高 - * @param {string} offset 抽屉方向 l = 左, r = 右, t = 上, b = 下 - * @param {string[] | string} drawerArea 抽屉大小,字符串数组格式:[width, height],字符串格式:百分比或单位 px。 - * @returns 抽屉宽高数组 - */ - function calcDrawerArea(offset, drawerArea) { - if (drawerArea instanceof Array) { - return drawerArea; - } - if (drawerArea === undefined || drawerArea === "auto") { - drawerArea = "30%"; - } - if (offset === "l" || offset === "r") { - return [drawerArea, "100%"]; - } else if (offset === "t" || offset === "b") { - return ["100%", drawerArea]; - } - return [drawerArea, "100%"]; - } - - /** - * 获取抽屉动画类 - * @param {string} offset 抽屉方向 - * @param {boolean} 是否 absolute 布局 - * @returns 抽屉入场动画类 - */ - function getDrawerAnimationClass(offset, isAbsolute) { - var positionAbsoluteClass = "position-absolute "; - var prefixClass = "pear-drawer pear-drawer-anim layui-anim layer-anim-"; - var suffix = "rl"; - - if (isAbsolute) { - prefixClass = positionAbsoluteClass + prefixClass; - } - if (offset === "l") { - suffix = "lr"; - } else if (offset === "r") { - suffix = "rl"; - } else if (offset === "t") { - suffix = "tb"; - } else if (offset === "b") { - suffix = "bt"; - } - return prefixClass + suffix; - } - - /** - * 指定挂载容器重新计算 offset - * @param {*} offset 位置 - * @param {*} area 范围大小 - * @param {*} targetEl 挂载节点 - * @returns 包含抽屉位置信息的数组,[top,left] - */ - function calcOffset(offset, area, targetEl) { - if (offset === undefined || offset === "l" || offset === "t") { - offset = "lt"; - } else if (offset === "r") { - var left; - if (area instanceof Array) { - area = area[0]; - } - if (area.indexOf("%") != -1) { - left = targetEl.innerWidth() * (1 - area.replace("%", "") / 100); - } else { - left = targetEl.innerWidth() - area; - } - offset = [0, left]; - } else if (offset === "b") { - var top; - if (area instanceof Array) { - area = area[1]; - } - if (area.indexOf("%") != -1) { - top = targetEl.innerHeight() * (1 - area.replace("%", "") / 100); - } else { - top = targetEl.innerHeight() - area; - } - offset = [top, 0]; - } - - return offset; - } - - /** - * 简易的切面 - * @param {Function} func 被通知的对象,原函数 - * @param {Function | undefined} before 前置通知 - * @param {Function | undefined} after 后置通知 - * @returns 代理函数 - */ - function Aspect(target, before, after) { - function proxyFunc() { - if (before && typeof before === "function") { - before.apply(this, arguments) - } - target.apply(this, arguments); - if (after && typeof after === "function") { - after.apply(this, arguments) - } - } - return proxyFunc; - } - - exports(MOD_NAME, drawer); -}); - -/** - * 源码 - * */ -(function (b, c) { - function a(d) { - this.opts = { - "target": d.target || "body", - "direction": d.direction || "left", - "distance": d.distance || "60%", - "dom": this.Q(d.dom), - "time": d.time || "", - "maskClose": (d.maskClose + "").toString() !== "false" ? true : false, - "callback": d.callback || "" - }; - this.rnd = this.rnd(); - this.target = this.opts.target; - this.dom = this.opts.dom[0]; - this.wrap = ""; - this.inner = ""; - this.mask = ""; - this.init() - } - a.prototype = { - Q: function (d) { - return document.querySelectorAll(d) - }, - isMobile: function () { - return navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i) ? true : false - }, - addEvent: function (f, e, d) { - if (f.attachEvent) { - f.attachEvent("on" + e, d) - } else { - f.addEventListener(e, d, false) - } - }, - rnd: function () { - return Math.random().toString(36).substr(2, 6) - }, - init: function () { - var g = this; - if (!g.dom) { - console.log("未正确绑定弹窗容器"); - return - } - g.dom.style.display = "block"; // 兼容 layer 捕获层 - var d = document.createElement("div"); - var e = document.createElement("div"); - var f = document.createElement("div"); - d.setAttribute("class", "mSlider-main ms-" + g.rnd); - e.setAttribute("class", "mSlider-inner"); - f.setAttribute("class", "mSlider-mask"); - g.Q(g.target)[0].appendChild(d); - g.Q(".ms-" + g.rnd)[0].appendChild(e); - g.Q(".ms-" + g.rnd)[0].appendChild(f); - g.wrap = g.Q(".ms-" + g.rnd)[0]; - g.inner = g.Q(".ms-" + g.rnd + " .mSlider-inner")[0]; - g.mask = g.Q(".ms-" + g.rnd + " .mSlider-mask")[0]; - g.inner.appendChild(g.dom); - switch (g.opts.direction) { - case "top": - g.top = "0"; - g.left = "0"; - g.width = "100%"; - g.height = g.opts.distance; - g.translate = "0,-100%,0"; - break; - case "bottom": - g.bottom = "0"; - g.left = "0"; - g.width = "100%"; - g.height = g.opts.distance; - g.translate = "0,100%,0"; - break; - case "right": - g.top = "0"; - g.right = "0"; - g.width = g.opts.distance; - g.height = document.documentElement.clientHeight + "px"; - g.translate = "100%,0,0"; - break; - default: - g.top = "0"; - g.left = "0"; - g.width = g.opts.distance; - g.height = document.documentElement.clientHeight + "px"; - g.translate = "-100%,0,0" - } - g.wrap.style.display = "none"; - g.wrap.style.position = (g.target === "body" ? "fixed" : "absolute"); - g.wrap.style.top = "0"; - g.wrap.style.left = "0"; - g.wrap.style.width = "100%"; - g.wrap.style.height = "100%"; - g.wrap.style.zIndex = 9999999; - g.inner.style.position = "absolute"; - g.inner.style.top = g.top; - g.inner.style.bottom = g.bottom; - g.inner.style.left = g.left; - g.inner.style.right = g.right; - g.inner.style.width = g.width; - g.inner.style.height = (g.target === "body" ? g.height : "100%"); - g.inner.style.backgroundColor = "#fff"; - g.inner.style.transform = "translate3d(" + g.translate + ")"; - g.inner.style.webkitTransition = "all .2s ease-out"; - g.inner.style.transition = "all .2s ease-out"; - g.inner.style.zIndex = 10000000; - g.mask.style.width = "100%"; - g.mask.style.height = "100%"; - g.mask.style.opacity = "0.1"; - g.mask.style.backgroundColor = "black"; - g.mask.style.zIndex = "9999998"; - g.mask.style.webkitBackfaceVisibility = "hidden"; - g.events() - }, - open: function () { - var d = this; - d.wrap.style.display = "block"; - setTimeout(function () { - d.inner.style.transform = "translate3d(0,0,0)"; - d.inner.style.webkitTransform = "translate3d(0,0,0)"; - d.mask.style.opacity = 0.1 - }, 30); - if (d.opts.time) { - d.timer = setTimeout(function () { - d.close() - }, d.opts.time) - } - }, - close: function () { - var d = this; - d.timer && clearTimeout(d.timer); - d.inner.style.webkitTransform = "translate3d(" + d.translate + ")"; - d.inner.style.transform = "translate3d(" + d.translate + ")"; - d.mask.style.opacity = 0; - setTimeout(function () { - d.wrap.style.display = "none"; - d.timer = null; - d.opts.callback && d.opts.callback() - }, 300) - }, - events: function () { - var d = this; - d.addEvent(d.mask, "touchmove", function (f) { - f.preventDefault() - }); - d.addEvent(d.mask, (d.isMobile() ? "touchend" : "click"), function (f) { - if (d.opts.maskClose) { - d.close() - } - }) - } - }; - b.mSlider = a -})(window); diff --git a/component/pear/module/dtree.js b/component/pear/module/dtree.js deleted file mode 100644 index 21fcbabe245c7e0a125f7d04d8531a24c711f3b4..0000000000000000000000000000000000000000 --- a/component/pear/module/dtree.js +++ /dev/null @@ -1,5530 +0,0 @@ -layui.define(['jquery','layer','form'], function(exports) { - var $ = layui.$, - layer = layui.layer, - form = layui.form; - - // 树的公共定义样式汇总 - var LI_NAV_CHILD = "dtree-nav-ul-sid", LI_NAV_ITEM = "dtree-nav-item", - LI_DIV_ITEM = "dtree-nav-div", DTREEFONTSPECIAL="dtreefont-special", NONETITLE="dtree-none-text", - LI_DIV_MENUBAR = "dtree-menubar", - LI_DIV_TOOLBAR = "dtree-toolbar", TOOLBAR_TOOL = "dtree-toolbar-tool", TOOLBAR_TOOL_EM = "dtree-toolbar-fixed", - LI_DIV_CHECKBAR = "dtree-nav-checkbox-div", - LI_CLICK_CHECKBAR = "d-click-checkbar", //绑定点击复选框时需要用到 - LI_DIV_TEXT_CLASS = "t-click", UL_ROOT="dtree", - LI_NAV_FIRST_LINE = "dtree-nav-first-line", LI_NAV_LINE = "dtree-nav-line", LI_NAV_LAST_LINE = "dtree-nav-last-line"; - - - // 树的公共指定 - var NAV_THIS = "dtree-nav-this", //当前节点 - NAV_SHOW = "dtree-nav-show", //显示子节点 - NAV_HIDE = "dtree-nav-hide", //隐藏节点 - NAV_DIS = "dtree-disabled", //禁用节点 - ICON_HIDE = "dtree-icon-hide", //隐藏图标 - $BODY = $("body"), //body选择器 - $WIN = $(window), //window窗口 - $DOC = $(document), //当前文档 - MOD_NAME = "dtree", //模块名称 - VERSION = "v2.5.8", //版本 - OPTIONS = {}, //全局属性配置 - DTrees = {}; //当前被实例化的树的集合 - - // 树的自定义图标 - var DTREEFONT = "dtreefont", //默认使用图标字体 - LI_DIV_CHECKBAR_ON = "dtree-icon-fuxuankuangxuanzhong", //复选框选中图标 - LI_DIV_CHECKBAR_OUT = "dtree-icon-fuxuankuang", //复选框未选中图标 - LI_DIV_CHECKBAR_NOALL = "dtree-icon-fuxuankuang-banxuan", //复选框半选图标 - LI_DIV_MENUBAR_DOWN = "dtree-icon-move-down", //menubar的展开全部的图标 - LI_DIV_MENUBAR_UP = "dtree-icon-move-up", //menubar的收缩全部的图标 - LI_DIV_MENUBAR_REFRESH = "dtree-icon-refresh", //menubar的刷新图标 - LI_DIV_MENUBAR_CHECKALL = "dtree-icon-roundcheckfill", //menubar的全选图标 - LI_DIV_MENUBAR_UNCHECKALL = "dtree-icon-roundclosefill", //menubar的全不选图标 - LI_DIV_MENUBAR_INVERTALL = "dtree-icon-roundcheck", //menubar的反选图标 - LI_DIV_MENUBAR_DELETE = "dtree-icon-delete1", //menubar的删除图标 - LI_DIV_MENUBAR_SEARCH = "dtree-icon-search_list_light", //menubar的搜索图标 - LI_DIV_TOOLBAR_PULLDOWN = "dtree-icon-pulldown", //toolbar的展开图标 - LI_DIV_TOOLBAR_PULLUP = "dtree-icon-pullup", //toolbar的收缩图标 - LI_DIV_TOOLBAR_ADD = "dtree-icon-roundadd", //toolbar的新增图标 - LI_DIV_TOOLBAR_EDIT = "dtree-icon-bianji", //toolbar的编辑图标 - LI_DIV_TOOLBAR_DEL = "dtree-icon-roundclose"; //toolbar的删除图标 - - // 树的非叶子节点图标集合 - var nodeIconArray = { - "-1": {"open": "dtree-icon-null-open", "close": "dtree-icon-null-close"}, //未指定 - "0" : {"open": "dtree-icon-wenjianjiazhankai", "close": "dtree-icon-weibiaoti5"}, //文件夹(二级图标默认样式) - "1" : {"open": "dtree-icon-jian", "close": "dtree-icon-jia"}, //+-图标(一级图标默认样式) - "2" : {"open": "dtree-icon-xiangxia1", "close": "dtree-icon-xiangyou"} //箭头图标 - }; - - // 树的叶子节点图标集合 - var leafIconArray = { - "-1": "dtree-icon-null", //未指定 - "0" : "dtree-icon-weibiaoti5", //文件夹 - "1" : "dtree-icon-yonghu", //人员 - "2" : "dtree-icon-fenzhijigou", //机构 - "3" : "dtree-icon-fenguangbaobiao", //报表 - "4" : "dtree-icon-xinxipilu", //信息 - "5" : "dtree-icon-shuye1", //叶子(二级图标默认样式) - "6" : "dtree-icon-caidan_xunzhang", //勋章 - "7" : "dtree-icon-normal-file", //文件 - "8" : "dtree-icon-dian", //小圆点(一级图标默认样式) - "9" : "dtree-icon-set-sm", //齿轮 - "10" : "dtree-icon-rate" //星星 - }; - - // 树的自定义样式 - var DTREE = "dtree-", //自定义样式前缀 - ITEMTHIS = "-item-this", //自定义样式当前行选中后缀 - ITEM = "-item", //自定义样式当前行后缀 - DFONT = "-dtreefont", //自定义样式图标样式后缀 - FICON = "-ficon", //自定义样式一级图标样式后缀 - ICON = "-icon", //自定义样式二级图标样式后缀 - CBOX = "-checkbox", //自定义样式复选框样式后缀 - CHS = "-choose"; //自定义样式复选框选中样式后缀 - - // 树自定义操作事件名称集合 绑定dtree-click的事件 - var eventName = { - checkNodeClick: "checkNodeClick", //点击复选框 - itemNodeClick: "itemNodeClick" //点击子节点div - }; - - // 树默认toolbar提供的功能集合 绑定dtree-tool的事件 - var defaultTool = { - pulldown: "pulldown", //点击展开当前节点下的全部节点 - pullup: "pullup", //点击收缩当前节点下的全部节点 - addTool: "addToolbar", //点击toolbar新增 - editTool: "editToolbar", //点击toolbar编辑 - delTool: "delToolbar" //点击toolbar删除 - }; - - // 树默认menubar提供的功能集合 绑定dtree-menu的事件 - var defaultMenu = { - moveDown: "moveDown", //menubar展开全部节点 - moveUp: "moveUp", //menubar收缩全部节点 - refresh: "refresh", //menubar刷新树 - checkAll: "checkAll", //menubar全选 - unCheckAll: "unCheckAll", //menubar全不选 - invertAll: "invertAll", //menubar反选 - remove: "remove", //menubar删除选中节点 - searchNode: "searchNode" //menubar查询节点 - }; - - // 树的公共事件 - var event = { - getElemId: function(options){ // 根据传入的参数获取ID - var elem = options.elem || ""; - var obj = options.obj || $(elem); - - if (obj.length == 0) { //页面中未找到绑定id - return ""; - } else { - return $(obj)[0].id; - } - }, - escape: function(html){ // 编码 - if(typeof html !== 'string') return ''; - return html.replace(entityReg.escape, function(match){return entityMap.escape[match];}); - }, - unescape: function(str){ // 解码 - if(typeof str !== 'string') return ''; - return str.replace(entityReg.unescape, function(match){return entityMap.unescape[match];}); - }, - cloneObj: function (obj, filter) { //深复制对象方法 - var newObj = {}; - if (obj instanceof Array) { - newObj = []; - } - var str = ""; - if(typeof filter !== 'undefined') {str = filter.join(",");} - for (var key in obj) { - if(str.indexOf(key) == -1){ - var val = obj[key]; - newObj[key] = typeof val === 'object' ? event.cloneObj(val, typeof filter !== undefined ? filter : []): val; - } - - } - return newObj; - }, - trimToDot: function(str){ - return str.replace(/ /g, "."); - } - }; - - // 特殊符号转义 - var keys = Object.keys || function(obj) { - obj = Object(obj); - var arr = []; - for(var a in obj) arr.push(a); - return arr; - }; - var invert = function(obj){ - obj = Object(obj); - var result = {}; - for(var a in obj) result[obj[a]] = a; - return result; - }; - var entityMap = { - escape: { - "&" : "&", - "<" : "<", - ">" : ">", - "'" : "&quo;" - } - }; - entityMap.unescape = invert(entityMap.escape); - var entityReg = { - escape: RegExp('[' + keys(entityMap.escape).join('') + ']', 'g'), - unescape: RegExp('(' + keys(entityMap.unescape).join('|') + ')', 'g') - }; - - //异步加载接口 - var AjaxHelper = { - request : function(config) { - var data = config.data ? config.data : {}; - var async = (typeof (config.async) === "boolean") ? config.async : true; - $.ajax({ - type : config.type ? config.type : "POST", - headers : config.headers, - url : config.url, - dataType : config.dataType ? config.dataType : "json", - data : data, - async : async, - contentType : config.contentType, - xhrFields: {withCredentials: config.withCredentials}, - beforeSend: function (XMLHttpRequest, self) { - if (typeof (config.beforeSend) === "function") { - return config.beforeSend(XMLHttpRequest, self); - } - return true; - }, - success : config.success, - error : function(XMLHttpRequest, textStatus, errorThrown) { - if (typeof (config.error) === "function") { - config.error(XMLHttpRequest, textStatus, errorThrown); - } else { - layer.msg("异步加载失败: " + textStatus,{icon:5, shift:6}); - } - }, - statusCode : { - 404 : function() { - layer.msg('未找到指定请求,请检查访问路径!',{icon:5, shift:6}); - }, - 500 : function() { - layer.msg('系统错误!',{icon:5, shift:6}); - } - }, - complete : function(XMLHttpRequest, textStatus) { - if (typeof (config.complete) === "function") { - config.complete(XMLHttpRequest, textStatus); - } - } - }); - }, - serialize: function(first, param){ //json序列化 key=value&key1=value1 - var p = first; - for (var key in param) { - p += key + "=" + param[key] + "&"; - } - p = p.substring(0, p.length-1); - return p; - } - }; - - /** 树类 Class定义 */ - var DTree = function(options){ - var _this = this; - /** 默认赋值**/ - this.formatter = { // 数据过滤 - title: false // 文字,默认不开启 - }; - this.response = { // 树返回的json格式 - statusName: "code", //返回标识 - statusCode: 200, //返回码 - message: "message", //返回信息 - rootName: "data", //根节点名称 - treeId: "id", //节点ID - parentId: "parentId", //父节点ID - title: "title", //节点名称 - ficonClass: "ficonClass", //自定义一级图标 - iconClass: "iconClass", //自定义二级图标 - childName: "children", //子节点名称 - last: "last", //是否最后一级节点 -// level: "level", //层级 - spread: "spread", //展开 - disabled: "disabled", //禁用 - hide: "hide", //隐藏 - checkArr: "checkArr", //复选框列表 - checked: "checked", //是否选中 - type: "type", //复选框标记 - basicData: "basicData" //表示用户自定义需要存储在树节点中的数据 - }; - this.defaultRequest = { // 树的默认发起请求参数格式,最后会将value作为参数名称传递 - nodeId: "nodeId", //节点ID - parentId: "parentId", //父节点ID - context: "context", //节点内容 - leaf: "leaf", //是否叶子节点 - level: "level", //层级 - spread: "spread", //节点展开状态 - dataType: "dataType", //节点标记 - checked: "checked", //节点复选框选中状态 - initchecked: "initchecked", //节点复选框初始状态 - basicData: "basicData", //用户自定义的记录节点数据 - recordData: "recordData", //当前data数据(排除basicData和children字段) - }; - this.toolbarFun = { - addTreeNode: function(param, $div) { //添加树节点后调用的函数,用于用户自定义,如未指定则树不会发生变化 - return ; - }, - editTreeNode: function(param, $div) { //编辑树节点后调用的函数,用于用户自定义,如未指定则树不会发生变化 - return ; - }, - editTreeLoad: function(param){ // 编辑树的数据回显,用于打开编辑时,回填数据 - return ; - }, - delTreeNode: function(param, $div){ //删除树后调用的函数,用于用户自定义,如未指定则树不会发生变化 - return ; - }, - loadToolbarBefore: function(buttons, param, $div){ // 右键菜单加载前的函数 - return buttons; - } - }; - this.toolbarStyle = { // 工具栏弹出层的自定义样式 - title: "节点", - area: ["60%","80%"] - }; - this.menubarFun = { - remove: function(checkbarNodes){ //删除复选框选中节点,需要用户自定义,如未指定则树只是页面上做了修改 - return true; - } - }; - this.menubarTips = { // 菜单栏的默认显示 - toolbar: [], - group: [defaultMenu.moveDown, defaultMenu.moveUp, defaultMenu.refresh, defaultMenu.checkAll, defaultMenu.unCheckAll, defaultMenu.invertAll, defaultMenu.remove, defaultMenu.searchNode], - freedom: [] - }; - this.checkbarFun = { - chooseBefore: function($i, node){ // 复选框点击前回调 - return true; - }, - chooseDone: function(checkbarNodesParam) { //复选框点击事件完毕后,返回该树关于复选框操作的全部信息,用于用户自定义,如未指定则树只是页面上做了修改 - return ; - } - }; - this.iframeDefaultRequest = { //iframe的默认参数,目的是与加载树的参数不一样 - nodeId: "nodeId", //节点ID - parentId: "parentId", //父节点ID - context: "context", //节点内容 - leaf: "leaf", //是否叶子节点 - level: "level", //层级 - spread: "spread", //节点展开状态 - dataType: "dataType", //节点标记 - checked: "checked", //节点复选框选中状态 - initchecked: "initchecked", //节点复选框初始状态 - basicData: "basicData", //用户自定义的记录节点数据 - recordData: "recordData", //当前data数据(排除basicData和children字段) - }; - - this.iframeFun = { - iframeDone: function(iframeParam){ //iframe加载完毕后,用于用户自定义事件 - return ; - } - }; - this.style = { //树最终使用的样式集合 - item: "", //每一项div的样式 - itemThis: "", //选中div的样式 - dfont: "", //一级图标的样式 - icon: "", //二级图标的样式 - cbox: "", //复选框的样式 - chs: "" //复选框选中的样式 - }; - this.usefontStyle = { //树最终使用的图标集合 - fnode:{ //一级节点 - node:{ //非叶子节点 - open:"", //节点展开 - close:"" //节点关闭 - }, - leaf:"" //叶子节点 - }, - snode:{ //二级节点 - node:{ //非叶子节点 - open:"", //节点展开 - close:"" //节点关闭 - }, - leaf:"" //叶子节点 - }, - checkbox:{ //复选框 - on:"", //复选框选中 - out:"", //未选中 - noall:"" //半选 - }, - menubar:{ //菜单栏 - movedown:"", //全部展开 - moveup:"", //全部收缩 - refresh:"", //刷新 - checkAll:"", //全选 - unCheckAll:"", //全不选 - invertAll:"", //反选 - remove:"", //删除 - search:"" //搜索 - }, - menubarExt:"", //扩展菜单栏 - toolbar:{ //工具栏 - menubar:{ //依附在菜单栏的工具栏 - movedown:"", //全部展开 - moveup:"", //全部收缩 - refresh:"", //刷新 - checkAll:"", //全选 - unCheckAll:"", //全不选 - invertAll:"", //反选 - remove:"", //删除 - search:"" //搜索 - }, - menubarExt:"", //依附在菜单栏的扩展菜单栏 - pulldown:"", //展开 - pullup:"", //收缩 - add:"", //添加 - edit:"", //编辑 - del:"" //删除 - }, - toolbarExt:"" //扩展工具栏 - } - - /** 数据绑定**/ - this.node = { // 树节点选中时,包含当前节点的全部信息 - nodeId: "", //节点ID - parentId: "", //父节点ID - context: "", //节点内容 - leaf: "", //是否叶子节点 - level: "", //层级 - spread: "", //节点展开状态 - dataType: "", //节点标记 - checked: "", //节点复选框选中状态 - initchecked: "", //节点复选框初始状态 - basicData: "", //用户自定义的记录节点数据 - recordData: "", //当前data数据(排除basicData和children字段) - }; - - this.toolbarMenu = {}; // 工具栏右键菜单绑定的所有元素 - this.checkbarNode = []; // 复选框标记的全部节点数据 - this.errData = []; // 记录在渲染节点时有问题的数据 - this.checkArrLen = 0; // 添加节点的时判断复选框个数 - this.temp = []; // 临时变量 - this.bak = ""; // 临时变量 - this.setting(options); - }; - - /******************** 初始参数加载 ********************/ - /** - * @Desc: 设置基本属性值 - * @Param: options:JSON对象,初始设置dtree所需的全部属性 - */ - DTree.prototype.setting = function(options) { - this.options = options || {}; - - /** 绑定元素参数(必填,2个参数项必填一个)**/ - this.elem = this.options.elem || OPTIONS.elem || ""; //树绑定的元素ID:#elem - if(typeof this.options.obj === 'undefined'){ - if(this.elem) { - if($(this.elem).length > 0) { - this.obj = $(this.elem); - } - } - } else { - this.obj = this.options.obj || OPTIONS.obj || this.obj; //树绑定的jquery元素,用于当元素是延迟加载出来的话,可以用这个找到 - this.elem = "#" + this.obj[0].id; - } - - /** 基本参数**/ - this.scroll = this.options.scroll || OPTIONS.scroll || this.elem; //树的上级div容器,让树可以显示滚动条的div容器的ID - this.accordion = (typeof (this.options.accordion) === "boolean") ? this.options.accordion : (typeof (OPTIONS.accordion) === "boolean") ? OPTIONS.accordion : false; //手风琴加载, 默认false - if(this.accordion) { - this.initLevel = 1; //默认展开节点 1节 - } else { - this.initLevel = this.options.initLevel || OPTIONS.initLevel || 2; //默认展开节点 2节 - } - this.type = this.options.type || OPTIONS.type || "load"; //树的加载方式 all,全量树, load,增量树,默认load - this.cache = (typeof (this.options.cache) === "boolean") ? this.options.cache : (typeof (OPTIONS.cache) === "boolean") ? OPTIONS.cache : true; //数据缓存,默认true - this.record = this.options.record || OPTIONS.record || false; //开启数据记录模式,默认false - this.load = (typeof (this.options.load) === "boolean") ? this.options.load : (typeof (OPTIONS.load) === "boolean") ? OPTIONS.load : true; //开启加载动画,默认true - this.none = this.options.none || OPTIONS.nont || "无数据"; //初始加载无记录时显示文字 - this.tempHeight = this.options.height || OPTIONS.height; //临时转换高度变量 - if(this.tempHeight) { // 设置高度 - if(/^full-\d+$/.test(this.tempHeight)) { - this.fullHeightGap = this.tempHeight.split('-')[1]; - this.height = $WIN.height() - this.fullHeightGap; //设置高度 - } else { - this.fullHeightGap = this.tempHeight; - this.height = this.tempHeight; - } - } else { - this.fullHeightGap = ""; - this.height = ""; - } - this.width = this.options.width || OPTIONS.width || "260"; //宽度 - this.obj.css("width", this.width); - - /** 样式相关参数**/ - this.iconfont = this.options.iconfont || OPTIONS.iconfont || DTREEFONT; //默认图标字体 dtreefont - this.iconfontStyle = this.options.iconfontStyle || OPTIONS.iconfontStyle || {}; //用于自定义树的每个关键部位使用的图标 - this.nodeIconArray = $.extend(nodeIconArray, this.options.nodeIconArray || OPTIONS.nodeIconArray) || nodeIconArray; //用户自定义非叶子节点图标集合,node - this.leafIconArray = $.extend(leafIconArray, this.options.leafIconArray || OPTIONS.leafIconArray) || leafIconArray; //用户自定义叶子节点图标集合,leaf - this.skin = this.options.skin || OPTIONS.skin || "theme"; // 自定义样式 - if(this.skin == "layui"){ // layui主题 - this.line = (typeof (this.options.line) === "boolean") ? this.options.line : (typeof (OPTIONS.line) === "boolean") ? OPTIONS.line : true; //开启树线,默认开启 - this.ficon = this.options.ficon || OPTIONS.ficon || "7"; //一级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示一级图标。默认'7' - this.fnodeIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? (this.ficon == "-1" ? "-1" : "1") : this.ficon[0]; //一级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示一级图标,默认'1' - this.fleafIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? this.ficon : this.ficon[1]; //一级图标中的leaf节点图标 - this.icon = this.options.icon || OPTIONS.icon || "-1"; //二级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示二级图标。默认'-1' - this.nodeIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? (this.icon == "-1" ? "-1" : "-1") : this.icon[0]; //二级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'-1' - this.leafIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? this.icon : this.icon[1]; //二级图标中的leaf节点图标 - } else if(this.skin == "laySimple"){ // laySimple主题 - this.line = this.options.line || OPTIONS.line || false; //开启树线,默认不开启 - this.ficon = this.options.ficon || OPTIONS.ficon || ["2","-1"]; //一级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示一级图标。默认'-1' - this.fnodeIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? (this.ficon == "-1" ? "-1" : "2") : this.ficon[0]; //一级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示一级图标,默认'2' - this.fleafIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? this.ficon : this.ficon[1]; // 一级图标中的leaf节点图标 - this.icon = this.options.icon || OPTIONS.icon || "-1"; //二级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示二级图标。默认'-1' - this.nodeIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? (this.icon == "-1" ? "-1" : "-1") : this.icon[0]; //二级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'-1' - this.leafIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? this.icon : this.icon[1]; //二级图标中的leaf节点图标 - } else { // 默认主题 或者自定义主题 - this.line = this.options.line || OPTIONS.line || false; //开启树线,默认不开启 - this.ficon = this.options.ficon || OPTIONS.ficon || "8"; //一级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示一级图标。默认'8' - this.fnodeIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? (this.ficon == "-1" ? "-1" : "1") : this.ficon[0]; //一级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示一级图标,默认'1' - this.fleafIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? this.ficon : this.ficon[1]; // 一级图标中的leaf节点图标 - this.icon = this.options.icon || OPTIONS.icon || "5"; //二级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示二级图标。默认'5' - this.nodeIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? (this.icon == "-1" ? "-1" : "0") : this.icon[0]; //二级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'0' - this.leafIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? this.icon : this.icon[1]; //二级图标中的leaf节点图标 - } - - /** 数据加载参数**/ - this.url = this.options.url || OPTIONS.url || ""; //请求地址 - this.async = (typeof (this.options.async) === "boolean") ? this.options.async : (typeof (OPTIONS.async) === "boolean") ? OPTIONS.async : true; //异步同步加载,默认异步加载 - this.asyncLoad = this.options.asyncLoad || OPTIONS.asyncLoad || []; //初始异步加载层级数据 - this.headers = this.options.headers || OPTIONS.headers || {}; //ajax header属性 - this.method = this.options.method || OPTIONS.method || "post"; //请求类型 - this.dataType = this.options.dataType || OPTIONS.dataType || "json"; //参数类型 - this.contentType = this.options.contentType || OPTIONS.contentType || "application/x-www-form-urlencoded"; //发送信息至服务器时内容编码类型 - this.defaultRequest = $.extend(this.defaultRequest, this.options.defaultRequest || OPTIONS.defaultRequest) || this.defaultRequest; //默认请求参数 - this.filterRequest = this.options.filterRequest || OPTIONS.filterRequest || []; //过滤请求参数 - this.request = this.options.request || OPTIONS.request || {}; //用户自定义请求参数 - this.response = $.extend(this.response, this.options.response || OPTIONS.response) || this.response; //返回json格式 - this.data = this.options.data || OPTIONS.data || null; //初始化指定该参数,则不会访问异步接口 - this.dataFormat = this.options.dataFormat || OPTIONS.dataFormat || "levelRelationship"; //用于用户配置的data数据格式,list:列表, levelRelationship:层级关系,默认 - this.dataStyle = this.options.dataStyle || OPTIONS.dataStyle || "defaultStyle"; //用于用户配置layui通用的json数据风格,layuiStyle:layui风格,defaultStyle:默认风格 - this.errDataShow = this.options.errDataShow || OPTIONS.errDataShow || false; //是否在递归数据出现错误后,显示错误信息,默认false - this.withCredentials = this.options.withCredentials || OPTIONS.withCredentials || false; //是否允许跨域请求,默认false - this.beforeSend = this.options.beforeSend || OPTIONS.beforeSend || function(ajax, XMLHttpRequest, self){return true}; //异步加载之前的回调 - this.success = this.options.success || OPTIONS.success || function(data, obj, first){}; //树加载完毕后执行解析树之前的回调 - this.done = this.options.done || OPTIONS.done || function(data, obj, first){}; //树加载完毕后的回调 - this.formatter = $.extend(this.formatter, this.options.formatter || OPTIONS.formatter) || this.formatter; //数据过滤 - this.error = this.options.error || OPTIONS.error || function(XMLHttpRequest, textStatus, errorThrown){}; // 异步加载异常回调 - this.complete = this.options.complete || OPTIONS.complete || function(XMLHttpRequest, textStatus){}; // 异步加载完成回调 - - /** 复选框参数**/ - this.checkbar = this.options.checkbar || OPTIONS.checkbar || false; //是否开启复选框模式 - this.checkbarLoad = this.options.checkbarLoad || OPTIONS.checkbarLoad || "node"; //复选框作用范围,node:所有节点, leaf:最后一级;默认所有节点 - this.checkbarType = this.options.checkbarType || OPTIONS.checkbarType || "all"; //复选框选中形式 all:子集选中父级也选中, no-all:子集选中父级半选中,子集全选父级选中,p-casc:父级选中子集全选,子集无法改变父级选中状态, self:没有任何级联关系,only:只能选中一个复选框。 默认all - this.checkbarData = this.options.checkbarData || OPTIONS.checkbarData || "choose"; //复选框记录数据类型形式, change表示记录变更数据,choose表示记录选中数据,all记录全部数据,halfChoose记录选中和半选中的数据,默认choose - this.checkbarFun = $.extend(this.checkbarFun, this.options.checkbarFun || OPTIONS.checkbarFun) || this.checkbarFun; //checkbar事件加载 - - /** 菜单栏参数**/ - this.menubar = this.options.menubar || OPTIONS.menubar || false; //是否打开菜单栏 - this.menubarTips = $.extend(this.menubarTips, this.options.menubarTips || OPTIONS.menubarTips) || this.menubarTips; //菜单栏吸附, toolbar:依附在工具栏,group:依附在按钮组,freedom,自由 - this.menubarFun = $.extend(this.menubarFun, this.options.menubarFun || OPTIONS.menubarFun) || this.menubarFun; //menubar事件加载 - - /** 工具栏参数**/ - this.toolbar = this.options.toolbar || OPTIONS.toolbar || false; //是否开启可编辑模式 - this.toolbarWay = this.options.toolbarWay || OPTIONS.toolbarWay || "contextmenu"; //工具栏显示方式,contextmenu:右键,follow:跟随节点,fixed:固定在节点右侧 - this.toolbarStyle = $.extend(this.toolbarStyle, this.options.toolbarStyle || OPTIONS.toolbarStyle) || this.toolbarStyle; //toolbar的自定义风格,标题,弹框大小 - this.toolbarLoad = this.options.toolbarLoad || OPTIONS.toolbarLoad || "node"; //toolbar作用范围:node:所有节点,noleaf:非最后一级节点,leaf:最后一级 - this.toolbarShow = this.options.toolbarShow || OPTIONS.toolbarShow || ["add","edit","delete"]; //toolbar三个按钮自定义加载 - this.toolbarBtn = this.options.toolbarBtn || OPTIONS.toolbarBtn || null; //toolbar增删改中内容的自定义加载 - this.toolbarExt = this.options.toolbarExt || OPTIONS.toolbarExt || []; //toolbar按钮扩展 - this.toolbarFun = $.extend(this.toolbarFun, this.options.toolbarFun || OPTIONS.toolbarFun) || this.toolbarFun; //toolbar事件加载 - - /** iframe模式参数**/ - this.useIframe = this.options.useIframe || OPTIONS.useIframe || false; //是否加载iframe 默认false, - this.iframeElem = this.options.iframeElem || OPTIONS.iframeElem || ""; //iframe的ID - this.iframeUrl = this.options.iframeUrl || OPTIONS.iframeUrl || ""; //树关联的iframe地址 - this.iframeLoad = this.options.iframeLoad || OPTIONS.iframeLoad || "leaf"; //点击哪一层加载frame: node:所有节点, leaf:默认,最后一级 - this.iframeDefaultRequest = $.extend(this.iframeDefaultRequest, this.options.iframeDefaultRequest || OPTIONS.iframeDefaultRequest) || this.iframeDefaultRequest; //iframe的默认传递参数 - this.iframeRequest = $.extend(this.iframeRequest, this.options.iframeRequest) || $.extend(this.iframeRequest, OPTIONS.iframeRequest) || this.iframeRequest; //iframe的自定义参数 - this.iframeFun = $.extend(this.iframeFun, this.options.iframeFun) || $.extend(this.iframeFun, OPTIONS.iframeFun) || this.iframeFun; //iframe事件加载 - - /** 下拉树模式参数**/ - this.select = this.options.select || false; - if(this.select) { - // 重置下拉树 - this.selectSetting(); - } - - /** 调用确认最终主题方法*/ - this.ensureTheme(); - }; - - /** - * @Desc: 重置基本属性值 - * @Param: options:JSON对象,重置dtree所需的全部属性 - */ - DTree.prototype.reloadSetting = function(options) { - this.options = $.extend(this.options, options) || this.options; - - /** 绑定元素参数**/ - this.elem = this.options.elem || this.elem; //树绑定的元素ID:#elem - if(typeof this.options.obj === 'undefined'){ - if(this.elem) { - if($(this.elem).length > 0) { - this.obj = $(this.elem); - } - } - } else { - this.obj = this.options.obj || this.obj; //树绑定的jquery元素,用于当元素是延迟加载出来的话,可以用这个找到 - this.elem = "#" + this.obj[0].id; - } - - /** 基本参数**/ - this.scroll = this.options.scroll || this.scroll; //树的上级div容器,让树可以显示滚动条的div容器 - this.accordion = (typeof (this.options.accordion) === "boolean") ? this.options.accordion : this.accordion; //开启手风琴加载 - if(this.accordion) { - this.initLevel = 1; //默认展开节点 1节 - } else { - this.initLevel = this.options.initLevel || this.initLevel; //默认展开节点 2节 - } - this.type = this.options.type || this.type; //树的加载方式 all,全量树, load,增量树,默认load - this.cache = (typeof (this.options.cache) === "boolean") ? this.options.cache : this.cache; //开启数据缓存 - this.record = (typeof (this.options.record) === "boolean") ? this.options.record : this.record; //开启数据记录模式 - this.load = (typeof (this.options.load) === "boolean") ? this.options.load : this.load; //开启加载动画 - this.none = this.options.none || this.none; //初始节点加载无数据时显示文字 - this.tempHeight = this.options.height || this.height; //临时转换高度变量 - if(this.tempHeight) { //设置高度 - if(/^full-\d+$/.test(this.tempHeight)) { - this.fullHeightGap = this.tempHeight.split('-')[1]; - this.height = $WIN.height() - this.fullHeightGap; - } else { - this.fullHeightGap = this.tempHeight; - this.height = this.tempHeight; - } - } - this.width = this.options.width || this.width; //宽度 - this.obj.css("width", this.width); - - /** 样式相关参数**/ - this.line = (typeof (this.options.line) === "boolean") ? this.options.line : this.line; //开启树线,默认不开启 - this.iconfont = this.options.iconfont || this.iconfont; //默认图标字体 dtreefont - this.iconfontStyle = this.options.iconfontStyle || this.iconfontStyle; //用于自定义树的每个关键部位使用的图标 - this.nodeIconArray = $.extend(nodeIconArray, this.options.nodeIconArray) || this.nodeIconArray; //用户自定义非叶子节点图标集合,node - this.leafIconArray = $.extend(leafIconArray, this.options.leafIconArray) || this.leafIconArray; //用户自定义叶子节点图标集合,leaf - this.skin = this.options.skin || this.skin; //自定义样式 - if(this.skin == "layui"){ //layui主题 - this.line = (typeof (this.options.line) === "boolean") ? this.options.line : true; //开启树线,默认开启 - this.ficon = this.options.ficon || this.ficon; //一级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示一级图标。默认'7' - this.fnodeIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? (this.ficon == "-1" ? "-1" : "1") : this.ficon[0]; //一级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'1' - this.fleafIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? this.ficon : this.ficon[1]; //一级图标中的leaf节点图标 - this.icon = this.options.icon || this.icon; //二级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示二级图标。默认'-1' - this.nodeIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? (this.icon == "-1" ? "-1" : "-1") : this.icon[0]; //二级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'-1' - this.leafIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? this.icon : this.icon[1]; //二级图标中的leaf节点图标 - } else if(this.skin == "laySimple"){ //laySimple主题 - this.line = (typeof (this.options.line) === "boolean") ? this.options.line : false; //开启树线,默认不开启 - this.ficon = this.options.ficon || this.ficon; //一级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示一级图标。默认'-1' - this.fnodeIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? (this.ficon == "-1" ? "-1" : "2") : this.ficon[0]; //一级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'2' - this.fleafIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? this.ficon : this.ficon[1];//一级图标中的leaf节点图标 - this.icon = this.options.icon || this.icon; //二级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示二级图标。默认'-1' - this.nodeIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? (this.icon == "-1" ? "-1" : "-1") : this.icon[0]; //二级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'-1' - this.leafIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? this.icon : this.icon[1]; //二级图标中的leaf节点图标 - } else { // 默认主题 或者自定义主题 - this.line = (typeof (this.options.line) === "boolean") ? this.options.line : false; //开启树线,默认不开启 - this.ficon = this.options.ficon || this.ficon; //一级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示一级图标。默认'8' - this.fnodeIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? (this.ficon == "-1" ? "-1" : "1") : this.ficon[0]; //一级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'1' - this.fleafIcon = (typeof this.ficon === 'string' || typeof this.ficon === 'number') ? this.ficon : this.ficon[1]; // 一级图标中的leaf节点图标 - this.icon = this.options.icon || this.icon; //二级图标样式,0:文件夹,1:人员,2:机构,3:报表,4:信息,5:叶子,6:勋章,7:文件,8:小圆点,9:齿轮,10:星星, -1:不显示二级图标。默认'5' - this.nodeIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? (this.icon == "-1" ? "-1" : "0") : this.icon[0]; //二级图标中的node节点图标。0:文件夹,1:+、-,2:三角形, -1:不显示二级图标,默认'0' - this.leafIcon = (typeof this.icon === 'string' || typeof this.icon === 'number') ? this.icon : this.icon[1]; //二级图标中的leaf节点图标 - } - - /** 数据加载参数**/ - this.url = this.options.url || this.url; //请求地址 - this.async = (typeof (this.options.async) === "boolean") ? this.options.async : this.async; //异步同步加载,默认异步加载 - this.asyncLoad = this.options.asyncLoad || this.asyncLoad; //初始异步加载层级数据 - this.headers = this.options.headers || this.headers; //ajax header属性 - this.method = this.options.method || this.method; //请求类型 - this.dataType = this.options.dataType || this.dataType; //参数类型 - this.contentType = this.options.contentType || this.contentType; //发送信息至服务器时内容编码类型 - this.defaultRequest = $.extend(this.defaultRequest, this.options.defaultRequest) || this.defaultRequest; //默认请求参数 - this.filterRequest = this.options.filterRequest || this.filterRequest; //过滤请求参数 - this.request = this.options.request || this.request; //用户自定义请求参数 - this.response = $.extend(this.response, this.options.response) || this.response; //返回json格式 - this.data = this.options.data || this.data; //初始化指定该参数,则不会访问异步接口 - this.dataFormat = this.options.dataFormat || this.dataFormat; //用于用户配置的data数据格式,list:列表, levelRelationship:层级关系,默认 - this.dataStyle = this.options.dataStyle || this.dataStyle; //用于用户配置layui通用的json数据风格,layuiStyle:layui风格,defaultStyle:默认风格 - this.errDataShow = (typeof (this.options.errDataShow) === "boolean") ? this.options.errDataShow : this.errDataShow; //是否在使用list模式递归数据出现错误时,显示错误信息 - this.withCredentials = (typeof (this.options.withCredentials) === "boolean") ? this.options.withCredentials : this.withCredentials; //是否允许跨域请求 - this.beforeSend = this.options.beforeSend || this.beforeSend; //异步加载之前的回调 - this.success = this.options.success || this.success; //树加载完毕后执行解析树之前的回调 - this.done = this.options.done || this.done; //树加载完毕后的回调 - this.formatter = $.extend(this.formatter, this.options.formatter)|| this.formatter; //数据过滤 - this.error = this.options.error || this.error; //异步加载异常回调 - this.complete = this.options.complete || this.complete; //异步加载完成回调 - - /** 复选框参数**/ - this.checkbar = this.options.checkbar || this.checkbar; //是否开启复选框模式 - this.checkbarLoad = this.options.checkbarLoad || this.checkbarLoad; //复选框作用范围,node:所有节点, leaf:最后一级;默认所有节点 - this.checkbarType = this.options.checkbarType || this.checkbarType; //复选框选中形式 all:子集选中父级也选中, no-all:子集选中父级半选中,子集全选父级选中,p-casc:父级选中子集全选,子集无法改变父级选中状态, self:没有任何级联关系,only:只能选中一个复选框。 默认all - this.checkbarData = this.options.checkbarData || this.checkbarData; //复选框记录数据类型形式, change表示记录变更数据,choose表示记录选中数据,all记录全部数据,halfChoose记录选中和半选中的数据,默认choose - this.checkbarFun = $.extend(this.checkbarFun, this.options.checkbarFun)|| this.checkbarFun; //checkbar事件加载 - - /** 菜单栏参数**/ - this.menubar = this.options.menubar || this.menubar; //是否打开菜单栏 - this.menubarTips = $.extend(this.menubarTips, this.options.menubarTips) || this.menubarTips; //菜单栏吸附, toolbar:依附在工具栏,group:依附在按钮组,freedom,自由 - this.menubarFun = $.extend(this.menubarFun, this.options.menubarFun) || this.menubarFun; //menubar事件加载 - - /** 工具栏参数**/ - this.toolbar = this.options.toolbar || this.toolbar; //是否开启工具栏 - this.toolbarWay = this.options.toolbarWay || this.toolbarWay; //工具栏显示方式,contextmenu:右键,follow:跟随节点,fixed:固定在节点右侧 - this.toolbarStyle = $.extend(this.toolbarStyle, this.options.toolbarStyle) || this.toolbarStyle; //toolbar的自定义风格,标题,弹框大小 - this.toolbarLoad = this.options.toolbarLoad || this.toolbarLoad; //toolbar作用范围:node:所有节点,noleaf:非最后一级节点,leaf:最后一级 - this.toolbarShow = this.options.toolbarShow || this.toolbarShow; //toolbar三个按钮 - this.toolbarBtn = this.options.toolbarBtn || this.toolbarBtn; //toolbar增删改中内容的自定义加载 - this.toolbarExt = this.options.toolbarExt || this.toolbarExt; //toolbar按钮扩展 - this.toolbarFun = $.extend(this.toolbarFun, this.options.toolbarFun) || this.toolbarFun; //toolbar事件加载 - - /** iframe模式参数**/ - this.useIframe = this.options.useIframe || this.useIframe;//是否加载iframe 默认false - this.iframeElem = this.options.iframeElem || this.iframeElem; //iframe的ID - this.iframeUrl = this.options.iframeUrl || this.iframeUrl; //树关联的iframe地址 - this.iframeLoad = this.options.iframeLoad || this.iframeLoad; //点击哪一层加载frame: node:所有节点, leaf:默认,最后一级 - this.iframeDefaultRequest = $.extend(this.iframeDefaultRequest, this.options.iframeDefaultRequest) || this.iframeDefaultRequest; //iframe的默认传递参数 - this.iframeRequest = $.extend(this.iframeRequest, this.options.iframeRequest) || this.iframeRequest; //iframe的自定义参数 - this.iframeFun = $.extend(this.iframeFun, this.options.iframeFun) || this.iframeFun; //iframe事件加载 - - /** 下拉树模式参数**/ - if(this.select) { - // 重置下拉树 - this.reloadSelectSetting(); - } - - /** 调用确认最终主题方法*/ - this.ensureTheme(); - - }; - - /** - * @Desc: 设置下拉树的基本参数值 - */ - DTree.prototype.selectSetting = function() { - /** select模式参数*/ - this.select = true; //配置成select模式 - - this.selectInitVal = this.obj.attr("data-value") || this.options.selectInitVal || ""; //输入框的值 - this.selectTreeDiv = this.obj[0].id + "_tree_div"; // 上级DIV节点 - this.selectCardDiv = this.obj[0].id + "_select_card_div"; // 上级layui卡片节点 - this.selectDiv = this.obj[0].id + "_select_div"; // 模拟的select节点 - this.selectTipsName = this.obj[0].id + "_select_input"; // select的提示输入框名称 - this.selectTips = this.options.selectTips || "请选择"; // 输入框的提示语 - this.selectCardHeight = this.options.selectCardHeight || "350"; // 下拉面板的高度 - this.selectInputName = this.options.selectInputName || {nodeId: this.obj[0].id + "_select_nodeId"}; // select表单中的元素 - - // 调取下拉树的特殊处理页面元素标识 - this.renderSelectDom(); - } - - /** - * @Desc: 重置下拉树的基本参数值 - */ - DTree.prototype.reloadSelectSetting = function() { - - this.selectInitVal = this.obj.attr("data-value") || this.options.selectInitVal || this.selectInitVal; //输入框的值 - this.selectTips = this.options.selectTips || this.selectTips; // 输入框的提示语 - this.selectCardHeight = this.options.selectCardHeight || this.selectCardHeight; // 下拉面板的高度 - this.selectInputName = $.extend(this.selectInputName, this.options.selectInputName) || this.selectInputName; // select表单中的元素 - - // 调取下拉树的特殊处理页面元素标识 - this.reloadSelectDom(); - } - - /******************** 下拉树设置区域 ********************/ - /** - * @Desc: 渲染下拉树的Dom结构 - */ - DTree.prototype.renderSelectDom = function() { - var _this = this; - var rootId = _this.obj[0].id; - - // 设置自定义表单隐藏域 - var selectInputName = _this.selectInputName; - var selectInput = []; - for(var key in selectInputName) { - selectInput.push(''); - } - - // 设置html - var prevHtml = ['
    ', - '
    ', selectInput.join(""), - '', - '', - '
    '].join(''); - - _this.obj.before(prevHtml); - - var cardStyle = "style="; - if(this.selectCardHeight) { - cardStyle += "'height:"+_this.selectCardHeight+"px'"; - } - _this.obj.wrap('
    ').wrap('
    ').wrap('
    '); - - } - - /** - * @Desc: 重新渲染下拉树的Dom结构 - */ - DTree.prototype.reloadSelectDom = function() { - var _this = this; - var rootId = _this.obj[0].id; - - // 设置自定义表单隐藏域 - var selectInputName = _this.selectInputName; - var selectInput = []; - for(var key in selectInputName) { - selectInput.push(''); - } - - $("div[dtree-id='"+rootId+"'][dtree-select='"+_this.selectDiv+"']").find("div.layui-select-title").html(""); - - // 设置html - var prevHtml = [selectInput.join(""), - '', - ''].join(''); - - $("div[dtree-id='"+rootId+"'][dtree-select='"+_this.selectDiv+"']").find("div.layui-select-title").html(prevHtml); - - var cardStyle = "style="; - if(this.selectCardHeight) { - cardStyle += "'height:"+_this.selectCardHeight+"px'"; - } - $("div[dtree-id='"+rootId+"'][dtree-card='"+_this.selectCardDiv+"']").attr("style", cardStyle); - } - - /** - * @Desc: 设置下拉树模式中,input输入框的值 - * @Param: param: input中的值对应树数据的ID值\当前树选中的数据JSON对象,可不传,不传的话则树内部读取 - */ - DTree.prototype.selectVal = function(param) { - var _this = this; - var rootId = _this.obj[0].id; - var selectInputName = _this.selectInputName; - var selectTipsNameValue = ""; - var selectValues = {}; - - // 如果开启了复选框,则此方法用来取值 - if(_this.checkbar) { - return _this.selectCheckboxVal(); - } - - if(typeof param === 'undefined') { // 不传,则为当前树中记录的ID - param = _this.getNowParam(); - } - if(typeof param === 'string') { // 传递ID,则查询树节点ID对应的值 - param = _this.getParam(param); - } - - selectTipsNameValue = param["context"]; - for(var key in selectInputName) { - selectValues[selectInputName[key]] = param[key]; - $("div[dtree-select='" + _this.selectDiv + "']").find("input[dtree-id='" + rootId + "'][name='"+selectInputName[key]+"']").val(param[key] || ""); - } - - if(param["nodeId"] && !param["context"]) { - selectTipsNameValue = _this.getParam(param["nodeId"]); - } - - // 返显提示输入框值 - $("div[dtree-select='" + _this.selectDiv + "']").find("input[dtree-id='" + rootId + "'][name='"+_this.selectTipsName+"']").val(selectTipsNameValue || ""); - - // 返回隐藏域中的值 - return selectValues; - } - - /** - * @Desc: 设置复选框模式中的下拉树的选中值 - */ - DTree.prototype.selectCheckboxVal = function() { - var _this = this; - var rootId = _this.obj[0].id; - var selectInputName = _this.selectInputName; - - // 获取全部复选框选中节点 - var param = _this.getCheckbarJsonArrParam(); - - selectTipsNameValue = param["context"]; - var selectValues = {}; - for(var key in selectInputName) { - var value = param[key].join(","); - selectValues[selectInputName[key]] = value; - $("div[dtree-select='" + _this.selectDiv + "']").find("input[dtree-id='" + rootId + "'][name='"+selectInputName[key]+"']").val(value); - } - - $("div[dtree-select='" + _this.selectDiv + "']").find("input[dtree-id='" + rootId + "'][name='"+_this.selectTipsName+"']").val(selectTipsNameValue); - - // 返回隐藏域中的值 - return selectValues; - } - - /** - * @Desc: 重置下拉树的值,1.表单清空;2.节点重置;3.复选框重置 - */ - DTree.prototype.selectResetVal = function() { - var _this = this; - var rootId = _this.obj[0].id; - // 表单清空 - $("input[dtree-id='"+rootId+"']").val(""); - // 节点重置 - _this.cancelNavThis(); - if(_this.checkbar) { - // 复选框重置 - _this.cancelCheckedNode(); - } - } - - - /******************** 字体及图标区域 ********************/ - /** - * @Desc: 树使用的最终主题方案 - */ - DTree.prototype.ensureTheme = function(){ - var _this = this; - - // 确认style - this.style.item = DTREE + this.skin + ITEM; - this.style.itemThis = DTREE + this.skin + ITEMTHIS; - this.style.dfont = DTREE + this.skin + DFONT; - this.style.ficon = DTREE + this.skin + FICON; - this.style.icon = DTREE + this.skin + ICON; - this.style.cbox = DTREE + this.skin + CBOX; - this.style.chs = DTREE + this.skin + CHS; - - // 确认usefontStyle - var iconfont = this.iconfont; - var iconfonts = []; - if(typeof iconfont === 'string') { - iconfonts.push(iconfont); - } else { - iconfonts = iconfont; - } - - var iconfontStyle = this.iconfontStyle; - var iconfontStyles = []; - if(iconfontStyle.length == undefined) { - iconfontStyles.push(iconfontStyle); - } else { - iconfontStyles = iconfontStyle; - } - - for(var i=0; i 0) { - $lis.each(function(){ - _this.showLineLi($(this)); - }); - } else { - _this.obj.find("li[data-id]").each(function(){ - _this.showLineLi($(this)); - }); - } - } - } - - /** - * @Desc: 真正显示树线的方法 - * @Param: $li: JQuery对象,表示组成树的li节点 - */ - DTree.prototype.showLineLi = function($li){ - var _this = this; - var $div = $li.children("div"), - $nextLi = $li.next("li"), - $ul = $li.parent("ul"); - if($ul[0].id == _this.obj[0].id) { - // 根节点下的节点 - $li.removeClass(LI_NAV_LINE); - $li.removeClass(LI_NAV_LAST_LINE); - $li.addClass(LI_NAV_FIRST_LINE); - } else { - // 非根节点下的节点 - var $pnextLi = $ul.parent("li").next("li"); - if($pnextLi.length == 0) { - if($nextLi.length == 0){ - $li.removeClass(LI_NAV_LINE); - $li.removeClass(LI_NAV_FIRST_LINE); - $li.addClass(LI_NAV_LAST_LINE); - } else { - $li.removeClass(LI_NAV_FIRST_LINE); - $li.removeClass(LI_NAV_LAST_LINE); - $li.addClass(LI_NAV_LINE); - } - }else { - var $pnextdiv = $pnextLi.children("div"); - if($nextLi.length == 0 && $div.children("cite").attr("data-leaf") == "leaf" && $pnextdiv.children("cite").attr("data-leaf") == "leaf") { - $li.removeClass(LI_NAV_FIRST_LINE); - $li.removeClass(LI_NAV_LINE); - $li.addClass(LI_NAV_LAST_LINE); - } else { - $li.removeClass(LI_NAV_FIRST_LINE); - $li.removeClass(LI_NAV_LAST_LINE); - $li.addClass(LI_NAV_LINE); - } - } - } - } - - /******************** 初始化数据区域 ********************/ - /** - * @Desc: 设置高度 - */ - DTree.prototype.autoHeight = function(){ - var _this = this; - var height = _this.height; - if(height != "") { - if(_this.elem == _this.scroll){ - _this.obj.parent().css("height", height + "px"); - } else { - var $toolbarDiv = _this.obj.closest(_this.scroll); - $toolbarDiv.css("height", height + "px"); - } - } - }; - - /** - * @Desc: 重载树 - * @Param: options: dtree的所有属性的json对象 - */ - DTree.prototype.reload = function(options){ - var _this = this; - _this.reloadSetting(options); - _this.init(); - }; - - /** - * @Desc: 初始化加载 - */ - DTree.prototype.loadTreeInit = function(){ - var _this = this; - var asyncLoad = _this.asyncLoad; - // 初始化加载 - _this.init(function(){ - // ajax加载之后的回调 - if(asyncLoad && asyncLoad.length > 0) { - _this.obj.addClass(NAV_SHOW); - - // 说明此时要异步加载子节点 - _this.loadChildTreeInit(asyncLoad, 0); - } - }) - } - - /** - * @Desc: 初始化加载子节点 - * @Param: asyncLoad: 需异步加载的层级,在基础属性中配置 - * @Param: i: 已经加载到的层级 - */ - DTree.prototype.loadChildTreeInit = function(asyncLoad, i){ - var _this = this; - if(i == asyncLoad.length) { // 满足条件,终止递归 - return ; - } - - var $div = _this.getNode(asyncLoad[i]); - - if($div && $div.length > 0) { - // 设置节点状态 - var $ul = $div.next("ul"), - $i_fnode = _this.getNodeDom($div).fnode(), - $i_snode = _this.getNodeDom($div).snode(); - - $ul.addClass(NAV_SHOW); - _this.accordionUL($ul); - _this.operateIcon($i_fnode, $i_snode).open(); - // 加载子节点 - _this.getChild($div, undefined, function(){ - // 继续递归 - _this.loadChildTreeInit(asyncLoad, ++i); - }); - } - - } - - /** - * @Desc: 初始化树 - * @Param: callback: 异步加载完成之后的回调函数 - */ - DTree.prototype.init = function(callback){ - var _this = this; - if (typeof _this !== "object") { - layer.msg("树组件未成功加载,请检查配置", {icon:5}); - return ; - } - - // 设置组件高度 - _this.autoHeight(); - - if(_this.data) { - _this.dataLoadTree(true, _this.obj, _this.data); - } else { - _this.asyncLoadTree(true, _this.obj, callback); - } - }; - - /** - * @Desc: 加载子节点 - * @Param: $div: JQuery对象,代表当前子节点的父节点div - * @Param: data: data方式加载的数据 - * @Param: callback: 子节点加载完成之后的回调喊出 - */ - DTree.prototype.getChild = function($div, data, callback) { - var _this = this, $ul = $div.next("ul"); - - _this.setNodeParam($div); - - if(typeof data !== 'undefined') { - _this.dataLoadTree(false, $ul, data); - } else { - _this.asyncLoadTree(false, $ul, callback); - } - }; - - /** - * @Desc: 用data加载树 - * @Param: first: 表示是否第一次加载 - * @Param: $ul: JQuery对象,代表当前数据加载到的ul标签里 - * @Param: data: data加载的数据 - */ - DTree.prototype.dataLoadTree = function(first, $ul, data){ - var _this = this; - - if(typeof data.length === 'undefined'){ - layer.msg("数据解析异常,data数据格式不正确", {icon:5}); - return ; - } - - if(first && data.length == 0) { - $ul.html(_this.getNoneDom().text()); - return ; - } - - //先将ul中的元素清空 - $ul.html(""); - - var index = _this.load ? layer.load(1) : ""; - - setTimeout(function () { - // 加载完毕后执行树解析前的回调 - var returnData = _this.success(data, $ul, first); - if(returnData) { - data = returnData; - } - - var pid = (first == true) ? $ul.attr("data-id") : _this.node.nodeId; - var level = (first == true) ? 1 : parseInt(_this.node.level)+1; - - // 解析树 - if (_this.dataFormat == 'list'){ - //1.构建一个存放节点的树组 - var rootListData = _this.queryListTreeByPid(pid, data); - _this.loadListTree(rootListData, _this.data, level); - } else { - _this.loadTree(data, level); - } - - // 显示树线 - _this.showLine(); - - // 这种情况下需要一开始就将toolbar显示在页面上 - if(_this.toolbar && _this.toolbarWay != 'contextmenu') { - _this.setToolbarDom().setToolbarPlace(_this.toolbarMenu); - } - - // 判断是否存在错误数据,并是否打印错误数据 - _this.msgErrData(); - - // 设置下拉树的初始值 - if(first && _this.select && _this.selectInitVal){ - if(_this.checkbar) { // 复选框模式下 - _this.chooseDataInit(_this.selectInitVal); - _this.selectCheckboxVal(_this.selectInitVal); - } else { // 普通模式下 - _this.dataInit(_this.selectInitVal); - _this.selectVal(_this.selectInitVal); - } - } - - // 保存树副本 - _this.bak = _this.obj.html(); - - // 加载完毕后的回调 - _this.done(_this.data, $ul, first); - - if(_this.load){layer.close(index);} - }, 100); - } - - /** - * @Desc: 异步加载树 - * @Param: first: 表示是否第一次加载 - * @Param: $ul: JQuery对象,代表当前数据加载到的ul标签里 - * @Param: callback: 异步加载完成之后的回调函数 - */ - DTree.prototype.asyncLoadTree = function(first, $ul, callback){ - var _this = this; - - if (!_this.url) { - layer.msg("数据请求异常,url参数未指定", {icon:5}); - return ; - } - - //先将ul中的元素清空 - $ul.html(""); - - var index = ""; - - AjaxHelper.request({ - async: _this.async, - headers: _this.headers, - type: _this.method, - url: _this.url, - dataType: _this.dataType, - contentType: _this.contentType, - withCredentials: _this.withCredentials, - data: _this.getFilterRequestParam(_this.getRequestParam()), - beforeSend: function(XMLHttpRequest, self){ - index = _this.load ? layer.load(1) : ""; - var returnFlag = _this.beforeSend(this, XMLHttpRequest, self); - if(!returnFlag) { - if(_this.load){layer.close(index);} - } - return returnFlag; - }, - success: function(result) { - if (typeof result === 'string') { - result = $.parseJSON(result); - } - - // 加载完毕后执行树解析前的回调 - var returnData = _this.success(result, $ul, first); - if(returnData) { - result = returnData; - } - - var code = ""; - if (_this.dataStyle == 'layuiStyle'){ - code = result[_this.response.statusName]; - } else { - code = result.status[_this.response.statusName]; - } - - if (code == _this.response.statusCode) { - - var d = result[_this.response.rootName]; - - if(first && typeof d.length === 'undefined'){ - $ul.html(_this.getNoneDom().errText("数据解析异常,url回调后的数据格式不正确")); - //layer.msg("数据解析异常,url回调后的数据格式不正确", {icon:5}); - return ; - } - - if(first && d.length == 0) { - $ul.html(_this.getNoneDom().text()); - return ; - } - - //1.识别根节点ul中的data-id标签,判断顶级父节点 - var pid = (first == true) ? $ul.attr("data-id") : _this.node.nodeId; - var level = (first == true) ? 1 : parseInt(_this.node.level)+1; - - // 第一次解析树 - if (_this.dataFormat == 'list'){ - //1.构建一个存放节点的树组 - var rootListData = _this.queryListTreeByPid(pid, d); - if(first) { - _this.loadListTree(rootListData, d, level); - } else { - _this.loadListTree(rootListData, d, level, $ul); - } - } else { - if(first) { - _this.loadTree(d, level); - } else { - _this.loadTree(d, level, $ul); - } - } - - // 显示树线 - _this.showLine(); - - // 这种情况下需要一开始就将toolbar显示在页面上 - if(_this.toolbar && _this.toolbarWay != 'contextmenu') { - _this.setToolbarDom().setToolbarPlace(_this.toolbarMenu); - } - - // 判断是否存在错误数据,并是否打印错误数据 - _this.msgErrData(); - - if(!first) { - $ul.addClass(NAV_SHOW); - } - - // 设置下拉树的初始值 - if(first && _this.select && _this.selectInitVal){ - if(_this.checkbar) { // 复选框模式下 - _this.chooseDataInit(_this.selectInitVal); - _this.selectCheckboxVal(_this.selectInitVal); - } else { // 普通模式下 - _this.dataInit(_this.selectInitVal); - _this.selectVal(_this.selectInitVal); - } - } - - // 保存树副本 - _this.bak = _this.obj.html(); - - // 加载完毕后的回调 - _this.done(result, $ul, first); - - callback && callback(); - } else { - // 如果打印不出任何信息说明是在这里,用了错误的数据格式, 或返回码不正确 - if (_this.dataStyle == 'layuiStyle'){ - _this.obj.html(_this.getNoneDom().errText(result[_this.response.message])); - _this.error(null, code, result[_this.response.message]); - } else { - _this.obj.html(_this.getNoneDom().errText(result.status[_this.response.message])); - _this.error(null, code, result.status[_this.response.message]); - } - } - }, - error: function(XMLHttpRequest, textStatus, errorThrown){// 异步加载异常回调 - _this.obj.html(_this.getNoneDom().errText(textStatus + ": " + errorThrown)); - _this.error(XMLHttpRequest, textStatus, errorThrown); - }, - complete: function(XMLHttpRequest, textStatus){// 异步加载完成回调 - if(_this.load){layer.close(index);} - _this.complete(XMLHttpRequest, textStatus); - } - }); - - } - - /** - * @Desc: 初始化渲染树或者拼接渲染树,list模式下 - * @Param: nowListData: 表示当前需要被渲染的数据 - * @Param: listData: 表示全部数据 - * @Param: level: 当前渲染的层级 - * @Param: $ul: JQuery对象,代表当前数据加载到的ul标签里 - */ - DTree.prototype.loadListTree = function(nowListData, listData, level, $ul){ - var _this = this; - $ul = $ul || _this.getNodeDom().nowOrRootUl(); //当前选中的节点或根节点 - if (nowListData.length > 0){ - for (var i = 0; i < nowListData.length; i++) { - // 1.获取已知节点的全部数据 - var data = nowListData[i]; - if(typeof data !== "object") continue; - var parseData = _this.parseData(data); - var childListData = _this.queryListTreeByPid(parseData.treeId(), listData); // 根据已知数据的id判断该条数据是否还有子数据 - - // 3. 页面元素加载数据 - $ul.append(_this.getLiItemDom(parseData.treeId(), parseData.parentId(), parseData.title(), parseData.fmtTitle(), parseData.last(childListData.length), parseData.ficonClass(), parseData.iconClass(), parseData.checkArr(), level, parseData.spread(level), parseData.disabled(), parseData.hide(), parseData.basicData(), parseData.recordData(), ($ul.hasClass(UL_ROOT) ? "root" : "item"))); - // 4.有子数据的元素加载子节点 - if(childListData.length > 0){ - var cLevel = parseInt(level)+1; - _this.loadListTree(childListData, listData, cLevel, _this.obj.find("ul[data-id='"+parseData.treeId()+"']")); - } - } - } - }; - - /** - * @Desc: 根据父ID查找list数据中匹配的元素 - * @Param: pid: 表示父ID - * @Param: listData: 表示全部数据 - */ - DTree.prototype.queryListTreeByPid = function(pid, listData){ - var _this = this; - var rootListData = []; - if (listData) { - for (var i = 0; i < listData.length; i++) { - var data = listData[i]; - if(typeof data !== "object") continue; - if(pid == "null" || pid == null){ - if(data[_this.response.parentId] == null) { rootListData.push(data); } - } else { - if (data[_this.response.parentId] == pid){ - if (data[_this.response.treeId] == pid){ - _this.errData.push(data); - } else { - rootListData.push(data); - } - } - } - } - } - return rootListData; - }; - - /** - * @Desc: 初始化渲染树或者拼接渲染树,层级关系模式下 - * @Param: listData: 表示全部数据 - * @Param: level: 当前渲染的层级 - * @Param: $ul: JQuery对象,代表当前数据加载到的ul标签里 - */ - DTree.prototype.loadTree = function(listData, level, $ul){ - var _this = this; - if (listData) { - $ul = $ul || _this.getNodeDom().nowOrRootUl(); //当前选中的节点或根节点 - for (var i = 0; i < listData.length; i++) { // 遍历跟节点或追加的跟节点 - var data = listData[i]; - if(typeof data !== "object") continue; - if(data[_this.response.treeId] == data[_this.response.parentId]) { _this.errData.push(data); } - var parseData = _this.parseData(data); - var children = parseData.children(); - $ul.append(_this.getLiItemDom(parseData.treeId(), parseData.parentId(), parseData.title(), parseData.fmtTitle(), parseData.last(children.length), parseData.ficonClass(), parseData.iconClass(), parseData.checkArr(), level, parseData.spread(level), parseData.disabled(), parseData.hide(), parseData.basicData(), parseData.recordData(), ($ul.hasClass(UL_ROOT) ? "root" : "item"))); - if (children.length != 0) { - var cLevel = parseInt(level)+1; - _this.loadTree(children, cLevel, _this.obj.find("ul[data-id='"+parseData.treeId()+"']")); - } - } - } - }; - - /** - * @Desc: 判断在数据加载时是否存在错误数据,并是否打印错误数据 - * @Param: - */ - DTree.prototype.msgErrData = function() { - var _this = this; - if(_this.errData.length > 0 && _this.errDataShow) { - var title = ""; - for(var i=0; i<_this.errData.length; i++) { - var edata = _this.errData[i]; - title += "数据:【"+edata[_this.response.title]+"】中节点id和上级id值一致! \n"; - } - layer.msg(title, {icon:2,time:5000}); - } - // 显示之后,将错误数据制空 - _this.errData = []; - }; - - /** - * @Desc: 解析单个数据 - * @Param: data: 被解析的单个数据对象 - */ - DTree.prototype.parseData = function(data) { - var _this = this; - - return { - treeId: function(){ - return data[_this.response.treeId]; - }, - parentId: function(){ - return data[_this.response.parentId]; - }, - fmtTitle: function(){ - if(typeof _this.formatter.title === 'function'){ - var ftitle = _this.formatter.title(data); - var tt = data[_this.response.title]; - tt = (ftitle == "" || ftitle == undefined || ftitle == null) ? tt : ftitle; - return tt || ""; - } - return data[_this.response.title]; - }, - title: function(){ - return data[_this.response.title]; - }, - level: function(){ - return data[_this.response.level] || ""; - }, - ficonClass: function(){ - return data[_this.response.ficonClass] || ""; - }, - iconClass: function(){ - return data[_this.response.iconClass] || ""; - }, - last: function(len){ - return ((len == 0) ? - ((typeof (data[_this.response.last]) === "boolean") ? data[_this.response.last] : true) : - ((typeof (data[_this.response.last]) === "boolean") ? data[_this.response.last] : false)); - }, - spread: function(level){ - return ((level < _this.initLevel) ? - ((typeof (data[_this.response.spread]) === "boolean") ? data[_this.response.spread] : true) : - ((typeof (data[_this.response.spread]) === "boolean") ? data[_this.response.spread] : false)); - }, - disabled: function(){ - return (typeof (data[_this.response.disabled]) === "boolean") ? data[_this.response.disabled] : false; - }, - hide: function(){ - return (typeof (data[_this.response.hide]) === "boolean") ? data[_this.response.hide] : false; - }, - checkArr: function(){ - var checkArr = []; - var checkArrData = data[_this.response.checkArr]; - if(typeof checkArrData === 'string'){ - if(checkArrData.indexOf("{") > -1 && checkArrData.indexOf("}") > -1){ - checkArrData = JSON.parse(checkArrData); - } else { - checkArrData = {"type":"0","checked":checkArrData}; - } - } - if((typeof checkArrData === 'object') && (checkArrData !== null)){ - if(typeof checkArrData.length === 'undefined'){ - checkArr.push(checkArrData); - } else { - checkArr = checkArrData; - } - } - - if(checkArr.length > 0 && checkArr.length > _this.checkArrLen){ - _this.checkArrLen = checkArr.length; // 获取复选框个数 - } - return checkArr; - - }, - children: function(){ - return data[_this.response.childName] || []; - }, - basicData: function(){ - return event.escape(JSON.stringify(data[_this.response.basicData])) || JSON.stringify({}); - }, - recordData: function(){ - var recordData = _this.record ? event.cloneObj(data, [_this.response.treeId, - _this.response.parentId, - _this.response.title, - _this.response.iconClass, - _this.response.childName, - _this.response.last, - _this.response.spread, - _this.response.disabled, - _this.response.hide, - _this.response.checkArr, - _this.response.checked, - _this.response.type, - _this.response.basicData]) : {}; - - return event.escape(JSON.stringify(recordData)); - }, - data: function(){ - return data; - } - } - - }; - - /** - * @Desc: 无节点数据、节点数据异常时显示dom - */ - DTree.prototype.getNoneDom = function(){ - var _this = this, - rootId = _this.obj[0].id, - noneTitle = _this.none; - - return { - text: function(){ - return "
    "+noneTitle+"
    "; - }, - errText: function(errInfo){ - return "
    "+errInfo+"
    "; - } - } - }; - - /** - * @Desc: 新增节点的dom值 - * @Param: treeId: 节点ID - * @Param: parentId: 节点父ID - * @Param: title: 节点标题 - * @Param: fmtTitle: 节点附加标题 - * @Param: last: 是否最后一级节点 - * @Param: ficonClass: 一级图标class - * @Param: iconClass: 二级图标class - * @Param: checkArr: 复选框 - * @Param: spread: 是否展开 - * @Param: disabled: 是否禁用 - * @Param: hide: 是否隐藏 - */ - DTree.prototype.getDom = function(treeId, parentId, title, fmtTitle, last, ficonClass, iconClass, checkArr, level, spread, disabled, hide) { - var _this = this, - rootId = _this.obj[0].id, - toolbar = _this.toolbar, - checkbar = _this.checkbar; - - return { - fnode: function() { // + - 图标 - // 获取图标的变量 - var fnodeIcon = _this.fnodeIcon, - fleafIcon = _this.fleafIcon; - - var fleafIconLeaf = _this.usefontStyle.fnode.leaf, - fnodeIconOpen = _this.usefontStyle.fnode.node.open, - fnodeIconClose = _this.usefontStyle.fnode.node.close; - - if(ficonClass){ - var iconfont = _this.iconfont; - if(typeof iconfont === 'string') { - fleafIconLeaf = iconfont + " " + ficonClass; - fnodeIconOpen = iconfont + " " + ficonClass; - fnodeIconClose = iconfont + " " + ficonClass; - } else { - fleafIconLeaf = iconfont[0] + " " + ficonClass; - fnodeIconOpen = iconfont[0] + " " + ficonClass; - fnodeIconClose = iconfont[0] + " " + ficonClass; - } - } - - if(fnodeIcon != "-1" && fleafIcon != "-1"){ // 都加载 - return last ? "" : - (spread ? "" : ""); - } - - if(fnodeIcon != "-1" && fleafIcon == "-1"){ // 加载node 隐藏leaf - return last ? "" : - (spread ? "" : ""); - } - - if(fnodeIcon == "-1" && fleafIcon != "-1"){ // 隐藏node 加载leaf - return last ? "" : - (spread ? "" : ""); - } - - if(fnodeIcon == "-1" && fleafIcon == "-1"){ // 都隐藏 - return last ? "" : - (spread ? "" : ""); - } - }, - node: function() { // 二级图标样式 - // 获取图标的变量 - var nodeIcon = _this.nodeIcon, - leafIcon = _this.leafIcon; - - var sleafIconLeaf = _this.usefontStyle.snode.leaf, - snodeIconOpen = _this.usefontStyle.snode.node.open, - snodeIconClose = _this.usefontStyle.snode.node.close; - if(iconClass){ - var iconfont = _this.iconfont; - if(typeof iconfont === 'string') { - sleafIconLeaf = iconfont + " " + iconClass; - snodeIconOpen = iconfont + " " + iconClass; - snodeIconClose = iconfont + " " + iconClass; - } else { - sleafIconLeaf = iconfont[0] + " " + iconClass; - snodeIconOpen = iconfont[0] + " " + iconClass; - snodeIconClose = iconfont[0] + " " + iconClass; - } - } - - if(nodeIcon != "-1" && leafIcon != "-1"){ // 都加载 - return last ? "" : - (spread ? "" : ""); - } - - if(nodeIcon != "-1" && leafIcon == "-1"){ // 加载node 隐藏leaf - return last ? "" : - (spread ? "" : ""); - } - - if(nodeIcon == "-1" && leafIcon != "-1"){ // 隐藏node 加载leaf - return last ? "" : - (spread ? "" : ""); - } - - if(nodeIcon == "-1" && leafIcon == "-1"){ // 都隐藏 - return last ? "" : - (spread ? "" : ""); - } - }, - checkbox: function() { // 复选框 - var flag = false; - if(_this.checkbarLoad == "node"){if (checkbar) {flag = true;}} else {if (last) {if (checkbar) {flag = true;}}} - - if(flag){ - var result = "
    "; - if(checkArr && checkArr.length > 0){ - - for (var i = 0; i < checkArr.length; i++) { - var checkData = checkArr[i]; - var checked = checkData[_this.response.checked]; - var type = checkData[_this.response.type]; - var CHOOSE_CLASS = _this.usefontStyle.checkbox.out; - if (checked == "2") { //半选择 - CHOOSE_CLASS = _this.usefontStyle.checkbox.noall + " " + _this.style.chs; - } else if (checked == "1") { //选择 - CHOOSE_CLASS = _this.usefontStyle.checkbox.on + " " + _this.style.chs; - } else { //未选择或者无值 - CHOOSE_CLASS = _this.usefontStyle.checkbox.out; - } - var disClass = ""; - if(disabled){disClass = NAV_DIS;} - result += ""; - } - } - result += "
    "; - return result; - } - - return ""; - }, - text: function() { // 文字显示 - var disClass = ""; - if(disabled){disClass = NAV_DIS;} - return ""+fmtTitle+""; - }, - ul: function() { //子节点ul - return last ? "
      " : - (spread ? "
        " : "
          "); - } - }; - }; - - /** - * @Desc: 替换节点的dom值,或指定这些值 - * @Param: $div: JQuery对象,表示当前被操作的节点 - * @Param: treeId: 节点ID - * @Param: last: 是否最后一级节点 - * @Param: spread: 是否展开 - * @Param: disabled: 是否禁用 - * @Param: hide: 是否隐藏 - */ - DTree.prototype.replaceDom = function($div, treeId, last, spread, disabled, hide) { - var _this = this, - rootId = _this.obj[0].id, - toolbar = _this.toolbar, - checkbar = _this.checkbar; - - return { - fnode: function(ficonClass) { // + - 图标 - var fnode = ""; - - // 获取图标的变量 - var fnodeIcon = _this.fnodeIcon, - fleafIcon = _this.fleafIcon; - - var fleafIconLeaf = _this.usefontStyle.fnode.leaf, - fnodeIconOpen = _this.usefontStyle.fnode.node.open, - fnodeIconClose = _this.usefontStyle.fnode.node.close; - - if(ficonClass){ - var iconfont = _this.iconfont; - if(typeof iconfont === 'string') { - fleafIconLeaf = iconfont + " " + ficonClass; - fnodeIconOpen = iconfont + " " + ficonClass; - fnodeIconClose = iconfont + " " + ficonClass; - } else { - fleafIconLeaf = iconfont[0] + " " + ficonClass; - fnodeIconOpen = iconfont[0] + " " + ficonClass; - fnodeIconClose = iconfont[0] + " " + ficonClass; - } - } - - if(fnodeIcon != "-1" && leafIcon != "-1"){ // 都加载 - fnode = last ? "" : - (spread ? "" : ""); - }else if(nodeIcon != "-1" && leafIcon == "-1"){ // 加载node 隐藏leaf - fnode = last ? "" : - (spread ? "" : ""); - }else if(nodeIcon == "-1" && leafIcon != "-1"){ // 隐藏node 加载leaf - fnode = last ? "" : - (spread ? "" : ""); - }else if(nodeIcon == "-1" && leafIcon == "-1"){ // 都隐藏 - fnode = last ? "" : - (spread ? "" : ""); - } - if(fnode != ""){_this.getNodeDom($div).fnode().replaceWith($(fnode));} - }, - node: function(iconClass) { // 二级图标样式 - var snode = ""; - - // 获取图标的变量 - var nodeIcon = _this.nodeIcon, - leafIcon = _this.leafIcon; - - var sleafIconLeaf = _this.usefontStyle.snode.leaf, - snodeIconOpen = _this.usefontStyle.snode.node.open, - snodeIconClose = _this.usefontStyle.snode.node.close; - if(iconClass){ - var iconfont = _this.iconfont; - if(typeof iconfont === 'string') { - sleafIconLeaf = iconfont + " " + iconClass; - snodeIconOpen = iconfont + " " + iconClass; - snodeIconClose = iconfont + " " + iconClass; - } else { - sleafIconLeaf = iconfont[0] + " " + iconClass; - snodeIconOpen = iconfont[0] + " " + iconClass; - snodeIconClose = iconfont[0] + " " + iconClass; - } - } - - if(nodeIcon != "-1" && leafIcon != "-1"){ // 都加载 - snode = last ? "" : - (spread ? "" : ""); - }else if(nodeIcon != "-1" && leafIcon == "-1"){ // 加载node 隐藏leaf - snode = last ? "" : - (spread ? "" : ""); - }else if(nodeIcon == "-1" && leafIcon != "-1"){ // 隐藏node 加载leaf - snode = last ? "" : - (spread ? "" : ""); - }else if(nodeIcon == "-1" && leafIcon == "-1"){ // 都隐藏 - snode = last ? "" : - (spread ? "" : ""); - } - if(snode != ""){_this.getNodeDom($div).snode().replaceWith($(snode));} - }, - checkbox: function(checkArr) { // 复选框 - var flag = false; - if(_this.checkbarLoad == "node"){if (checkbar) {flag = true;}} else {if (last) {if (checkbar) {flag = true;}}} - - if(flag){ - var result = "
          "; - if(checkArr && checkArr.length > 0){ - - for (var i = 0; i < checkArr.length; i++) { - var checkData = checkArr[i]; - var checked = checkData[_this.response.checked]; - var type = checkData[_this.response.type]; - var CHOOSE_CLASS = _this.usefontStyle.checkbox.out; - if (checked == "2") { //半选择 - CHOOSE_CLASS = _this.usefontStyle.checkbox.noall + " " + _this.style.chs; - } else if (checked == "1") { //选择 - CHOOSE_CLASS = _this.usefontStyle.checkbox.on + " " + _this.style.chs; - } else { //未选择或者无值 - CHOOSE_CLASS = _this.usefontStyle.checkbox.out; - } - var disClass = ""; - if(disabled){disClass = NAV_DIS;} - result += ""; - } - } - result += "
          "; - _this.getNodeDom($div).snode().next("div").replaceWith($(result)); - } - }, - text: function(title) { // 文字显示 - var disClass = ""; - if(disabled){disClass = NAV_DIS;} - var cite = ""+title+"" - _this.getNodeDom($div).cite().replaceWith($(cite)); - }, - ul: function() { //子节点ul - var ul = last ? "
            " : - (spread ? "
              " : "
                "); - _this.getNodeDom($div).nextUl().replaceWith($(ul)); - }, - div: function(){ - $div.attr("data-id", treeId); - }, - basicData: function(basicData){ - basicData = (basicData == "{}") ? "" : basicData; - $div.attr("data-basic", basicData); - }, - recordData: function(recordData){ - recordData = (recordData == "{}") ? "" : recordData; - $div.attr("data-record", recordData); - }, - p_li: function(pId){ - var $li = $div.parent("li"); - $li.attr("data-id", treeId); - if(pId) { - $li.attr("data-pid", pId); - } - return $li; - } - }; - - }; - - /** - * @Desc: 获取拼接好的li的dom - * @Param: treeId: 节点ID - * @Param: parentId: 节点父ID - * @Param: title: 节点标题 - * @Param: fmtTitle: 节点附加标题 - * @Param: last: 是否最后一级节点 - * @Param: ficonClass: 一级图标class - * @Param: iconClass: 二级图标class - * @Param: checkArr: 复选框 - * @Param: level: 当前li的层级 - * @Param: spread: 是否展开 - * @Param: disabled: 是否禁用 - * @Param: hide: 是否隐藏 - * @Param: basicData: 自定义的扩展字段值(转义后的JSON字符) - * @Param: recordData: 开启记录模式的记录值(转义后的JSON字符) - * @Param: isRoot: 当前节点是否是根节点下的节点 - */ - DTree.prototype.getLiItemDom = function(treeId, parentId, title, fmtTitle, last, ficonClass, iconClass, checkArr, level, spread, disabled, hide, basicData, recordData, isRoot) { - var _this = this, - rootId = _this.obj[0].id; - - var dom = _this.getDom(treeId, parentId, title, fmtTitle, last, ficonClass, iconClass, checkArr, level, spread, disabled, hide); - basicData = (basicData == "{}") ? "" : basicData; - recordData = (recordData == "{}") ? "" : recordData; - var div = "
                " + - div , - dom.fnode(), - dom.node(), - dom.checkbox(), - dom.text(), - "
                ", dom.ul(), ""].join(""); - - return li; - }; - - /** - * @Desc: 初始化节点,用于数据回显 - * @Param: chooseId: 节点ID - */ - DTree.prototype.dataInit = function(chooseId){ - var _this = this; - var $div = _this.obj.find("div[data-id='"+chooseId+"']"); - if($div && $div.length > 0) { - _this.obj.find("."+NAV_THIS).removeClass(NAV_THIS); - _this.obj.find("."+_this.style.itemThis).removeClass(_this.style.itemThis); - $div.addClass(NAV_THIS); - $div.addClass(_this.style.itemThis); - _this.setNodeParam($div); - // 将该节点的父节点全部展开 - var $li_parents = $div.parents("."+LI_NAV_ITEM); - $li_parents.children("ul").addClass(NAV_SHOW); - $li_parents.children("."+LI_DIV_ITEM).children("i[data-spread]."+event.trimToDot(_this.usefontStyle.fnode.node.close)).addClass(_this.usefontStyle.fnode.node.open); - $li_parents.children("."+LI_DIV_ITEM).children("i[data-spread]."+event.trimToDot(_this.usefontStyle.fnode.node.close)).removeClass(_this.usefontStyle.fnode.node.close); - $li_parents.children("."+LI_DIV_ITEM).children("i[data-spread]."+event.trimToDot(_this.usefontStyle.snode.node.close)).addClass(_this.usefontStyle.snode.node.open); - $li_parents.children("."+LI_DIV_ITEM).children("i[data-spread]."+event.trimToDot(_this.usefontStyle.snode.node.close)).removeClass(_this.usefontStyle.snode.node.close); - } - return _this.getNowParam(); - }; - - /** - * @Desc: 基于备份的Html数据回滚 - * @Param: chooseId: 节点ID - */ - DTree.prototype.rollbackHtml = function(chooseId){ - var _this = this; - if(_this.bak) { - _this.obj.html(_this.bak); - // 取消全部选中状态 - _this.cancelNavThis(); - if(_this.checkbar) { - _this.cancelCheckedNode(); - _this.chooseDataInit(chooseId); - } else { - _this.dataInit(chooseId); - } - - _this.bak = _this.obj.html(); - } - }; - - - /******************** 基础事件区域 ********************/ - /** - * @Desc: 数据格式化 - * @Param: html: 需要格式化的数据 - */ - DTree.prototype.escape = function(html){ - return event.escape(html); - }; - - /** - * @Desc: 格式化数据转回正常数据 - * @Param: str: 需要转回的数据 - */ - DTree.prototype.unescape = function(str){ - return event.unescape(str); - }; - - /** - * @Desc: 取消选中当前选中的div - */ - DTree.prototype.cancelNavThis = function(){ - var _this = this; - _this.obj.find("div[data-id]").parent().find("."+NAV_THIS).removeClass(NAV_THIS); - _this.obj.find("div[data-id]").parent().find("."+_this.style.itemThis).removeClass(_this.style.itemThis); - } - - /** - * @Desc: 选中div - * @Param: id: 当前div本身 / 当前选中div的id值 - */ - DTree.prototype.navThis = function(id){ - var _this = this; - var $div = (typeof id === 'object') ? id : (_this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']").length == 0) ? null : _this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']"); - if($div != null) { - _this.cancelNavThis(); - $div.addClass(NAV_THIS); - $div.addClass(_this.style.itemThis); - } - } - - /** - * @Desc: 手风琴模式操作其他节点 - * @Param: $ul: JQuery对象,表示dtree中的ul节点 - */ - DTree.prototype.accordionUL = function($ul) { - var _this = this; - if(_this.accordion) { - $ul.closest("li[data-index]").siblings("li[data-index]").children("ul[data-id]").removeClass(NAV_SHOW); - var $divs = $ul.closest("li[data-index]").siblings("li[data-index]").children("ul[data-id]").prev("div"); - if($divs.length && $divs.length > 0) { - for (var i=0; i<$divs.length; i++) { - var $div = $($divs[i]); - var $i_fnode = _this.getNodeDom($div).fnode(), - $i_snode = _this.getNodeDom($div).snode(); - if($i_fnode.attr("data-spread") != 'last'){ - _this.operateIcon($i_fnode, $i_snode).close(); - } - } - } - - } - }; - - /** - * @Desc: 展开或隐藏节点 作用点: div - * @Param: $div: JQuery对象,表示当前操作的div节点 - */ - DTree.prototype.clickSpread = function($div) { - var _this = this; - var $i_fnode = _this.getNodeDom($div).fnode(), - $i_snode = _this.getNodeDom($div).snode(), - $cite = _this.getNodeDom($div).cite(), - spread = $i_fnode.attr("data-spread"), - $ul = $div.next("ul"); - - if ($ul.length > 0) { - if (spread == "close") { - if (_this.type=="load") { //增加加载 - if (_this.cache) { //开启缓存 - if ($ul.html()) { - $ul.addClass(NAV_SHOW); - _this.accordionUL($ul); - } else { //加载节点 - _this.getChild($div); - _this.accordionUL($ul); - } - }else { //每次取新的数据 - $ul.html(""); - _this.getChild($div); - _this.accordionUL($ul); - } - } else { // 全量加载 - $ul.addClass(NAV_SHOW); - _this.accordionUL($ul); - } - _this.operateIcon($i_fnode, $i_snode).open(); - } else if (spread == "open") { - $ul.removeClass(NAV_SHOW); - _this.operateIcon($i_fnode, $i_snode).close(); - } - } - }; - - /** - * @Desc: 设置节点为disabled - * @Param: disabledIds: 需要设置禁用的节点id字符串集合(用,分割)/id数组 - */ - DTree.prototype.setDisabledNodes = function(disabledIds){ - var _this = this; - var disabledId = []; - if(typeof disabledIds === "string") { - disabledId = disabledIds.split(","); - } else { - disabledId = disabledIds; - } - - if(disabledIds.length) { - for (var i=0; i 0) { - _this.getChild($div, data); - } else { - var parseData = _this.parseData(data); - - if(parseData.treeId()){ - var level = parseInt($div.parent("li").attr("data-index"))+1; - $ul.append(_this.getLiItemDom(parseData.treeId(), parseData.parentId(), parseData.title(), parseData.fmtTitle(), parseData.last(0), parseData.ficonClass(), parseData.iconClass(), parseData.checkArr(), level, parseData.spread(), parseData.disabled(), parseData.hide(), parseData.basicData(), parseData.recordData(), "item")); - - // 建造完毕后,选中该DIV - $thisDiv = $ul.find("div[data-id='"+parseData.treeId()+"']"); - _this.setNodeParam($thisDiv); - - _this.showLine($ul.find("li")); - } else { - layer.msg("添加失败,节点ID为undefined!",{icon:5}); - // 重新赋值 - _this.setNodeParam($div); - } - } - } else { - _this.getChild($div); - } - } - - /** - * @Desc: 局部刷新树--编辑当前节点选中节点时 - * @Param: $div: JQuery对象,当前编辑节点的Div - * @Param: data: 当前需要渲染的数据,JSON对象、字符串 - */ - DTree.prototype.partialRefreshEdit = function($div, data){ - var _this = this; - $ul = $div.next("ul"), - $p_li = $div.parent("li"); - - if(data) { - if(typeof data === 'object') { - var parseData = _this.parseData(data); - - if(parseData.treeId()){ - var replaceDom = _this.replaceDom($div, parseData.treeId(), parseData.last(0), parseData.spread(), parseData.disabled(), parseData.hide()); - replaceDom.div(); - replaceDom.node(parseData.iconClass()); - replaceDom.checkbox(parseData.checkArr()); - replaceDom.text(parseData.title()); - replaceDom.ul(); - replaceDom.basicData(parseData.basicData()); - replaceDom.recordData(parseData.recordData()); - - var parentId = parseData.parentId(); - var oldParentId = $p_li.attr("data-pid"); - if(parentId && parentId != oldParentId) { - // 变更了父节点 - $p_li = replaceDom.p_li(parentId); - - // 根据parentId找到下挂节点的ul - var $goto_div = _this.getNodeDom(parentId).div(), - $goto_ul = _this.getNodeDom(parentId).nextUl(); - // 判断父级ul中是否还存在li,如果不存在,则需要修改节点的样式 - if($goto_ul.children("li").length == 0){ - var $icon_i = $goto_div.find("i[data-spread]"); - _this.operateIcon($icon_i.eq(0), $icon_i.eq(1)).openWithLeaf(); - $goto_ul.addClass(NAV_SHOW); - } - $goto_ul.append($p_li); - } else { - replaceDom.p_li(); - } - _this.setNodeParam($div); - } else { - layer.msg("编辑失败,节点ID为undefined!",{icon:5}); - // 重新赋值 - _this.setNodeParam($div); - } - } else { - _this.getNodeDom($div).cite().html(data); - } - } - } - - /** - * @Desc: 局部刷新树--当前节点选中被删除时 - * @Param: $div: JQuery对象,当前被删除节点的Div - */ - DTree.prototype.partialRefreshDel = function($div){ - var _this = this; - $p_li = $div.parent("li"); - $p_ul = _this.getNodeDom($div).parentUl(); - $p_div = _this.getNodeDom($div).parentDiv(); - - $p_li.remove(); - _this.showLine($p_ul.find("li")); - // 判断父级ul中是否还存在li,如果不存在,则需要修改节点的样式 - if($p_ul.children("li").length == 0){ - var $icon_i = $p_div.find("i[data-spread]"); - _this.operateIcon($icon_i.eq(0), $icon_i.eq(1)).closeWithLeaf(); - } - _this.initNodeParam(); - } - - /*** - * @Desc: 搜索节点,保留上级节点 - * @param: value: 传入的节点名称 - * layui-dtree群友: 没水平的水瓶提供。 - */ - DTree.prototype.fuzzySearch = function (value) { - var _this = this; - // - if (value.trim() == '') { - _this.obj.find("li").removeClass("layui-hide").attr("dtree-hide", false) - return - } - _this.obj.find("li").addClass("layui-hide").attr("dtree-hide", true) - - var cites = [] - var filterMode = _this.filterMode - /*if (filterMode == 'default') { - cites = _this.obj.find("li>div cite:contains('" + value + "')"); - }*/ - cites = _this.obj.find("li>div cite:contains('" + value + "')"); - cites.each(function (index, cite) { - var li = $(cite).parent().parent(); - var curNode = _this.getParam(li.attr("data-id")); - li.removeClass("layui-hide").attr("dtree-hide", false); - // 显示所有子级 - li.find('ul li').removeClass("layui-hide").attr("dtree-hide", false); - // 显示所有父级 - li.parents('li').removeClass("layui-hide").attr("dtree-hide", false); - }) - } - - /******************** 复选框区域 ********************/ - /** - * @Desc: 初始化复选框的值 - * @Param: chooseIds: 需要被选中的节点id字符串集合(用,分割)/id数组/id二维数组(多级复选框) - */ - DTree.prototype.chooseDataInit = function(chooseIds){ - var _this = this; - // 多级复选框二维数组 - var chooseIdArrs = []; - var chooseId = []; - if(typeof chooseIds === "string") { - chooseId = chooseIds.split(","); - } else { - chooseId = chooseIds; - } - if(chooseId.length) { - // 说明是数组 - for (var i=0; i."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - _this.checkStatus($child_li_i).noCheck(); - - // 处理父级节点的选中状态 - for (var i = 1, item = $parent_li; i < item.length; i++) { - var flag = item.eq(i).find(">."+LI_NAV_CHILD+" ."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"'][data-checked='1']").length; - if (flag == 0) { - //把父级去掉选中 - var $item_i = item.eq(i).find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - _this.checkStatus($item_i).noCheck(); - } - } - } else { - // 处理当前节点的选中状态 - _this.checkStatus($i).check(); - - // 处理子级节点的选中状态 - var $child_li_i = $child_li.find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - _this.checkStatus($child_li_i).check(); - - // 处理父级节点的选中状态 - for (var i = 1, item = $parent_li; i < item.length; i++) { - var $item_i = item.eq(i).find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - //把父级选中 - _this.checkStatus($item_i).check(); - } - } - }; - - /** - * @Desc: 实现复选框点击, no-all 子集选中父级半选中,子集全选父级选中 - * @Param: $i: JQuery对象,表示当前点击的checkbox节点 - */ - DTree.prototype.checkAllOrNoallOrNot = function($i) { - var _this = this; - //$i 当前点击的checkbox - var $div = $i.closest("."+LI_DIV_ITEM), - dataPar = $i.attr("data-par"), - dataType = $i.attr("data-type"), - $li = $i.closest(dataPar), //当前checkbox的上级li节点 - $parent_li = $i.parents(dataPar), //当前checkbox的所有父级li节点 - $child_li = $li.find(dataPar); //当前checkbox的上级li节点下的所有子级li节点 - - if ($i.attr("data-checked") == "1") { //当前复选框为选中状态,点击后变为未选中状态 - // 处理当前节点的选中状态 - _this.checkStatus($i).noCheck(); - - // 处理子级节点的选中状态 - var $child_li_i = $child_li.find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - _this.checkStatus($child_li_i).noCheck(); - - // 处理父级节点的选中状态 - for (var i = 1, item = $parent_li; i < item.length; i++) { - var flag = item.eq(i).find(">."+LI_NAV_CHILD+" ."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"'][data-checked='1']").length; - var $item_i = item.eq(i).find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - if (flag == 0) { - //把父级去掉选中 - _this.checkStatus($item_i).noCheck(); - } else { - //把父级半选 - _this.checkStatus($item_i).noallCheck(); - } - } - } else { //当前复选框为未选中状态,点击后变为选中状态 - // 处理当前节点的选中状态 - _this.checkStatus($i).check(); - - // 处理子级节点的选中状态 - var $child_li_i = $child_li.find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - _this.checkStatus($child_li_i).check(); - - // 处理父级节点的选中状态 - for (var i = 1, item = $parent_li; i < item.length; i++) { - var flag1 = item.eq(i).find(">."+LI_NAV_CHILD+" ."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"'][data-checked='1']").length; - var flag2 = item.eq(i).find(">."+LI_NAV_CHILD+" ."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']").length; - var $item_i = item.eq(i).find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - if (flag1 != flag2) { - // 父级复选框半选 - _this.checkStatus($item_i).noallCheck(); - } else { - // 父级复选框全选 - _this.checkStatus($item_i).check(); - } - } - } - }; - - /** - * @Desc: 实现复选框点击,p-casc:父级选中子集全选,子集无法改变父级选中状态 - * @Param: $i: JQuery对象,表示当前点击的checkbox节点 - */ - DTree.prototype.checkAllOrPcascOrNot = function($i) { - var _this = this; - //$i 当前点击的checkbox - var $div = $i.closest("."+LI_DIV_ITEM), - dataPar = $i.attr("data-par"), - dataType = $i.attr("data-type"), - $li = $i.closest(dataPar), //当前checkbox的上级li节点 - $parent_li = $i.parents(dataPar), //当前checkbox的所有父级li节点 - $child_li = $li.find(dataPar); //当前checkbox的上级li节点下的所有子级li节点 - - if ($i.attr("data-checked") == "1") { //当前复选框为选中状态,点击后变为未选中状态 - // 处理当前节点的选中状态 - _this.checkStatus($i).noCheck(); - - // 处理子级节点的选中状态 - var $child_li_i = $child_li.find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - _this.checkStatus($child_li_i).noCheck(); - - } else { //当前复选框为未选中状态,点击后变为选中状态 - // 处理当前节点的选中状态 - _this.checkStatus($i).check(); - - // 处理子级节点的选中状态 - var $child_li_i = $child_li.find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - _this.checkStatus($child_li_i).check(); - } - }; - - /** - * @Desc: 实现复选框点击,self:各自选中互不影响 - * @Param: $i: JQuery对象,表示当前点击的checkbox节点 - */ - DTree.prototype.checkOrNot = function($i) { - var _this = this; - //$i 当前点击的checkbox - var $div = $i.closest("."+LI_DIV_ITEM), - dataPar = $i.attr("data-par"), - dataType = $i.attr("data-type"), - $li = $i.closest(dataPar), //当前checkbox的上级li节点 - $parent_li = $i.parents(dataPar), //当前checkbox的所有父级li节点 - $child_li = $li.find(dataPar); //当前checkbox的上级li节点下的所有子级li节点 - - if ($i.attr("data-checked") == "1") { //当前复选框为选中状态,点击后变为未选中状态 - // 处理当前节点的选中状态 - _this.checkStatus($i).noCheck(); - } else { //当前复选框为未选中状态,点击后变为选中状态 - // 处理当前节点的选中状态 - _this.checkStatus($i).check(); - } - }; - - /** - * @Desc: 实现复选框点击,only:只能选中1个复选框 - * @Param: $i: JQuery对象,表示当前点击的checkbox节点 - */ - DTree.prototype.checkOnly = function($i) { - var _this = this; - //$i 当前点击的checkbox - var $div = $i.closest("."+LI_DIV_ITEM), - dataPar = $i.attr("data-par"), - dataType = $i.attr("data-type"), - $li = $i.closest(dataPar), //当前checkbox的上级li节点 - $parent_li = $i.parents(dataPar), //当前checkbox的所有父级li节点 - $child_li = $li.find(dataPar); //当前checkbox的上级li节点下的所有子级li节点 - - var checked = $i.attr("data-checked"); - // 将全部节点全部设为未选中状态 - var $all_i = _this.obj.find("i[data-checked]"); - _this.checkStatus($all_i).noCheck(); - - if (checked != "1") { //当前复选框为未选中状态,点击后变为选中状态 - // 处理当前节点的选中状态 - _this.checkStatus($i).check(); - } - }; - - /** - * @Desc: 实现复选框点击汇总,分派具体的点击方式 - * @Param: $i: JQuery对象,表示当前点击的checkbox节点 - */ - DTree.prototype.changeCheck = function($i) { - var _this = this; - var temp = _this.temp; - if(typeof $i === 'undefined') { - $i = temp[0]; - } - // 复选框选中事件 - if (_this.checkbarType == "all") { - _this.checkAllOrNot($i); - } else if(_this.checkbarType == "no-all") { - _this.checkAllOrNoallOrNot($i); - } else if(_this.checkbarType == "p-casc") { - _this.checkAllOrPcascOrNot($i); - } else if(_this.checkbarType == "self") { - _this.checkOrNot($i); - } else if(_this.checkbarType == "only") { - _this.checkOnly($i); - } else { - _this.checkAllOrNot($i); - } - - if(_this.select) { - // 设置复选框模式中的下拉树的值 - _this.selectCheckboxVal(); - } - - // 获取复选框选中节点的内容 - var checkbarNodes = _this.setAndGetCheckbarNodesParam(true); - - // 用户自定义想做的事情 - _this.checkbarFun.chooseDone(checkbarNodes); - layui.event.call(this, MOD_NAME, "chooseDone("+$(_this.obj)[0].id+")", {"checkbarParams": checkbarNodes}); - _this.temp = []; - }; - - /** - * @Desc: 复选框半选状态初始化设置,树节点渲染完毕后重置半选状态 - */ - DTree.prototype.initNoAllCheck = function(){ - var _this = this; - //1.获取所有选中节点 - var $is = _this.obj.find("i[data-checked='1']"); - if($is.length > 0){ - for ( var key = 0; key < $is.length; key++) { - var $i = $($is[key]), - dataPar = $i.attr("data-par"), - dataType = $i.attr("data-type"), - $li = $i.closest(dataPar), //当前checkbox的上级li节点 - $parent_li = $i.parents(dataPar), //当前checkbox的所有父级li节点 - $child_li = $li.find(dataPar); //当前checkbox的上级li节点下的所有子级li节点 - - // 处理父级节点的选中状态 - for (var i = 1, item = $parent_li; i < item.length; i++) { - var flag1 = item.eq(i).find(">."+LI_NAV_CHILD+" ."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"'][data-checked='1']").length; - var flag2 = item.eq(i).find(">."+LI_NAV_CHILD+" ."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']").length; - var $item_i = item.eq(i).find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - if (flag1 != flag2) { - // 父级复选框半选 - _this.checkStatus($item_i).noallCheck(); - } else { - // 父级复选框全选 - _this.checkStatus($item_i).check(); - } - } - } - } - }; - - /** - * @Desc: 复选框选中状态初始化设置,树节点渲染完毕后重置选中状态 - */ - DTree.prototype.initAllCheck = function(){ - var _this = this; - //1.获取所有选中节点 - var $is = _this.obj.find("i[data-checked='1']"); - if($is.length > 0){ - for ( var key = 0; key < $is.length; key++) { - var $i = $($is[key]), - dataPar = $i.attr("data-par"), - dataType = $i.attr("data-type"), - $li = $i.closest(dataPar), //当前checkbox的上级li节点 - $parent_li = $i.parents(dataPar), //当前checkbox的所有父级li节点 - $child_li = $li.find(dataPar); //当前checkbox的上级li节点下的所有子级li节点 - - // 处理父级节点的选中状态 - for (var i = 1, item = $parent_li; i < item.length; i++) { - var $item_i = item.eq(i).find(">."+LI_DIV_ITEM+">."+LI_DIV_CHECKBAR+">i[data-type='"+dataType+"']"); - // 父级复选框全选 - _this.checkStatus($item_i).check(); - } - } - } - }; - - /** - * @Desc: 设置复选框选中/未选中/半选 _this.checkStatus($i).check(); _this.checkStatus($i).noCheck(); _this.checkStatus($i).noallCheck(); - * @Param: $i: JQuery对象,表示当前点击的checkbox节点 - */ - DTree.prototype.checkStatus = function($i) { - var _this = this; - return { - check: function(){ - $i.removeClass(_this.usefontStyle.checkbox.out); - $i.removeClass(_this.usefontStyle.checkbox.noall); - $i.addClass(_this.usefontStyle.checkbox.on); - $i.addClass(_this.style.chs); - $i.attr("data-checked","1"); - }, - noCheck: function(){ - $i.removeClass(_this.usefontStyle.checkbox.noall); - $i.removeClass(_this.usefontStyle.checkbox.on); - $i.removeClass(_this.style.chs); - $i.addClass(_this.usefontStyle.checkbox.out); - $i.attr("data-checked","0"); - }, - noallCheck: function(){ - $i.removeClass(_this.usefontStyle.checkbox.out); - $i.removeClass(_this.usefontStyle.checkbox.on); - $i.addClass(_this.usefontStyle.checkbox.noall); - $i.addClass(_this.style.chs); - $i.attr("data-checked","2"); - } - } - }; - - /** - * @Desc: 设置树的复选框操作值的全部参数,并获取 - * @Param: requestParamFlag: 设置复选框返回值的数据结构, true:基于请求类型的返回对象数组, false:原始的节点返回对象数组 - */ - DTree.prototype.setAndGetCheckbarNodesParam = function(requestParamFlag) { - var _this = this; - //操作前先清空 - _this.checkbarNode = []; - // 选择所有复选框节点 - if (_this.checkbarData == "change"){ //记录变更数据 - _this.obj.find("i[data-par][dtree-disabled='false']").each(function(){ - var $i = $(this), $div = $i.closest("."+LI_DIV_ITEM); - if ($i.attr("data-checked") != $i.attr("data-initchecked")) { - if(requestParamFlag) { - _this.checkbarNode.push(_this.getRequestParam(_this.getCheckbarNodeParam($div, $i))); - } else { - _this.checkbarNode.push(_this.getCheckbarNodeParam($div, $i)); - } - } - }); - } else if (_this.checkbarData == "all"){ //记录全部数据 - _this.obj.find("i[data-par][data-checked][dtree-disabled='false']").each(function(){ - var $i = $(this), $div = $i.closest("."+LI_DIV_ITEM); - if(requestParamFlag) { - _this.checkbarNode.push(_this.getRequestParam(_this.getCheckbarNodeParam($div, $i))); - } else { - _this.checkbarNode.push(_this.getCheckbarNodeParam($div, $i)); - } - }); - } else if (_this.checkbarData == "choose"){ //记录选中数据 - _this.obj.find("i[data-par][data-checked='1'][dtree-disabled='false']").each(function(){ - var $i = $(this), $div = $i.closest("."+LI_DIV_ITEM); - if(requestParamFlag) { - _this.checkbarNode.push(_this.getRequestParam(_this.getCheckbarNodeParam($div, $i))); - } else { - _this.checkbarNode.push(_this.getCheckbarNodeParam($div, $i)); - } - }); - } else if (_this.checkbarData == "halfChoose"){ //记录选中和半选数据 - _this.obj.find("i[data-par][data-checked='1'][dtree-disabled='false']").each(function(){ - var $i = $(this), $div = $i.closest("."+LI_DIV_ITEM); - if(requestParamFlag) { - _this.checkbarNode.push(_this.getRequestParam(_this.getCheckbarNodeParam($div, $i))); - } else { - _this.checkbarNode.push(_this.getCheckbarNodeParam($div, $i)); - } - }); - _this.obj.find("i[data-par][data-checked='2'][dtree-disabled='false']").each(function(){ - var $i = $(this), $div = $i.closest("."+LI_DIV_ITEM); - if(requestParamFlag) { - _this.checkbarNode.push(_this.getRequestParam(_this.getCheckbarNodeParam($div, $i))); - } else { - _this.checkbarNode.push(_this.getCheckbarNodeParam($div, $i)); - } - }); - } - return _this.checkbarNode; - }; - - /** - * @Desc: 获取树的复选框操作值的全部参数 - */ - DTree.prototype.getCheckbarNodesParam = function() { - var _this = this; - return _this.setAndGetCheckbarNodesParam(true); - }; - - /** - * @Desc: 获取树的一个复选框的参数 - * @Param: $div: JQuery对象,表示当前选中节点 - * @Param: $i: JQuery对象,表示当前选中的复选框节点 - */ - DTree.prototype.getCheckbarNodeParam = function($div, $i){ - var _this = this; - var temp_node = {}; - temp_node.nodeId = $div.attr("data-id"); - temp_node.parentId = _this.getNodeDom($div).parentLi().attr("data-pid"); - temp_node.context = (typeof _this.formatter.title === 'function') ? _this.getNodeDom($div).cite().attr("data-title") : _this.getNodeDom($div).cite().text(); - temp_node.leaf = _this.getNodeDom($div).cite().attr("data-leaf") == "leaf" ? true : false; - temp_node.level = _this.getNodeDom($div).parentLi().attr("data-index"); - temp_node.spread = _this.getNodeDom($div).fnode().attr("data-spread") == "open" ? true : false; - - var basicData = $div.attr("data-basic"); - if(basicData) { - basicData = JSON.parse(event.unescape(basicData)); - } - temp_node.basicData = basicData; - var recordData = $div.attr("data-record"); - if(recordData) { - recordData = JSON.parse(event.unescape(recordData)); - } - temp_node.recordData = recordData; - - temp_node.dataType = $i.attr("data-type"); - temp_node.checked = $i.attr("data-checked"); - temp_node.initchecked = $i.attr("data-initchecked"); - return temp_node; - }; - - /** - * @Desc: 获取基于返回参数的树的复选框参数,选中数据横向存储 - */ - DTree.prototype.getCheckbarJsonArrParam = function(){ - var _this = this; - var checkbarJsonArr = { - nodeId: [], //节点ID - parentId: [], //父节点ID - context: [], //节点内容 - leaf: [], //是否叶子节点 - level: [], //层级 - spread: [], //节点展开状态 - dataType: [], //节点标记 - checked: [], //节点复选框选中状态 - initchecked: [], //节点复选框初始状态 - basicData: [], //用户自定义的记录节点数据 - recordData: [], //当前data数据(排除basicData和children字段) - }; - // 获取全部复选框选中节点 - var params = _this.setAndGetCheckbarNodesParam(false); - if(params && params.length > 0) { - for(var i=0; i 0) { _this.checkStatus($i).check(); } - } - - /** - * @Desc: 取消全部复选框选中 - */ - DTree.prototype.cancelCheckedNode = function(){ - var _this = this; - var $i = _this.obj.find("i[data-par][data-checked!='0']"); - if($i.length > 0) { _this.checkStatus($i).noCheck(); } - } - - /** - * @Desc: 反选复选框 - */ - DTree.prototype.invertCheckedNode = function(){ - var _this = this; - if(_this.obj.find("i[data-par]").length > 0) { - var flag = false; - _this.obj.find("i[data-par]").each(function(){ - var $i = $(this); - if($i.attr("data-checked") == '2'){ - flag = true; - }else if($i.attr("data-checked") == '0') { - _this.checkStatus($i).check(); - }else if($i.attr("data-checked") == '1') { - _this.checkStatus($i).noCheck(); - } - }); - - if(flag) { - _this.initNoAllCheck(); - } else { - _this.initAllCheck(); - } - } - } - - /** - * @Desc: 删除选中节点 - */ - DTree.prototype.removeCheckedNode = function(){ - var _this = this; - var len = _this.obj.find("i[data-par][data-checked='1']").length; - if(len == 0){ - layer.msg("请至少选中一个节点",{icon:2}); - }else{ - //操作前先清空 - _this.checkbarNode = []; - // 选择所有复选框节点 - var i_node = {}; - _this.obj.find("i[data-par][data-checked='1']").each(function(){ - var $i = $(this), $div = $i.closest("."+LI_DIV_ITEM); - - _this.checkbarNode.push(_this.getRequestParam(_this.getCheckbarNodeParam($div, $i))); - }); - - layer.confirm('确定要删除选中节点?', {icon: 3, title:'删除选中节点'}, function(index1){ - var flag = _this.menubarFun.remove(_this.checkbarNode); - if(flag){ - _this.obj.find("i[data-par][data-checked='1']").closest("."+LI_DIV_ITEM).next("ul").remove(); - _this.obj.find("i[data-par][data-checked='1']").closest("."+LI_DIV_ITEM).remove(); - _this.checkbarNode=[]; - } - - layer.close(index1); - }); - } - } - - /******************** 工具栏及菜单栏区域 ********************/ - /** - * @Desc: 初始化菜单栏和工具栏的div - */ - DTree.prototype.initTreePlus = function(){ - var _this = this; - // 初始化菜单栏和工具栏的div - _this.obj.prevAll('div#dtree_menubar_'+_this.obj[0].id).remove(); - _this.toolbarMenu = {}; - if(_this.menubar && _this.menubarTips.group && _this.menubarTips.group.length > 0) _this.obj.before("
                "); - if(_this.toolbar){ - if(_this.toolbarWay == "contextmenu") { - _this.obj.prevAll('div#dtree_toolbar_'+_this.obj[0].id).remove(); - if(_this.toolbarShow && _this.toolbarShow.length > 0) { - _this.obj.before("
                "); - } - } - } - - }; - - /** - * @Desc: 开启工具栏和菜单栏 - */ - DTree.prototype.openTreePlus = function(){ - var _this = this; - // 先对工具栏做处理,因为菜单栏可能会与工具栏产生关联。 - var ggMenu = []; - if(_this.toolbar) _this.getToolbarDom(); - - if(_this.menubar) { - var menubarTips = _this.menubarTips, - mtbar = menubarTips.toolbar, - group = menubarTips.group, - freedom = menubarTips.freedom; - if(mtbar && mtbar.length > 0){ - // 菜单栏吸附工具栏上 - for(var i=0; i 0){ - // 菜单栏吸附在上方的按钮组div中 - for(var i=0; i"; - break; - case defaultMenu.moveUp: - gg = ""; - break; - case defaultMenu.refresh: - gg = ""; - break; - case defaultMenu.checkAll: - gg = (_this.checkbar && _this.checkbarType != 'only') ? "" : ""; - break; - case defaultMenu.unCheckAll: - gg = (_this.checkbar && _this.checkbarType != 'only') ? "" : ""; - break; - case defaultMenu.invertAll: - gg = (_this.checkbar && _this.checkbarType != 'only') ? "" : ""; - break; - case defaultMenu.remove: - gg = (_this.checkbar) ? "" : ""; - break; - case defaultMenu.searchNode: - gg = ""; - break; - } - return gg; - }; - - /** - * @Desc: 获取扩展菜单栏 - * @Param: menu: 扩展菜单栏的Json对象 - */ - DTree.prototype.getExtMenubarDom = function(menu){ - var _this = this; - return ""; - }; - - /** - * @Desc: 获取依附在工具栏的菜单栏 - * @Param: menu: 菜单栏的具体操作字符串 - */ - DTree.prototype.getMenubarToolDom = function(menu){ - var _this = this; - var rootId = _this.obj[0].id; - switch (menu) { - case defaultMenu.moveDown: - _this.toolbarMenu[defaultMenu.moveDown] = _this.setToolbarDom().setMenuToolbarOption(defaultMenu.moveDown, _this.toolbarStyle.title, _this.usefontStyle.toolbar.menubar.movedown, "展开全部"); - break; - case defaultMenu.moveUp: - _this.toolbarMenu[defaultMenu.moveUp] = _this.setToolbarDom().setMenuToolbarOption(defaultMenu.moveUp, _this.toolbarStyle.title, _this.usefontStyle.toolbar.menubar.moveup, "收缩全部"); - break; - case defaultMenu.refresh: - _this.toolbarMenu[defaultMenu.refresh] = _this.setToolbarDom().setMenuToolbarOption(defaultMenu.refresh, _this.toolbarStyle.title, _this.usefontStyle.toolbar.menubar.refresh, "刷新"); - break; - case defaultMenu.checkAll: - if(_this.checkbar && _this.checkbarType != 'only') - _this.toolbarMenu[defaultMenu.checkAll] = _this.setToolbarDom().setMenuToolbarOption(defaultMenu.checkAll, _this.toolbarStyle.title, _this.usefontStyle.toolbar.menubar.checkAll, "全选节点"); - break; - case defaultMenu.unCheckAll: - if(_this.checkbar && _this.checkbarType != 'only') - _this.toolbarMenu[defaultMenu.unCheckAll] = _this.setToolbarDom().setMenuToolbarOption(defaultMenu.unCheckAll, _this.toolbarStyle.title, _this.usefontStyle.toolbar.menubar.unCheckAll, "全不选节点"); - break; - case defaultMenu.invertAll: - if(_this.checkbar && _this.checkbarType != 'only') - _this.toolbarMenu[defaultMenu.invertAll] = _this.setToolbarDom().setMenuToolbarOption(defaultMenu.invertAll, _this.toolbarStyle.title, _this.usefontStyle.toolbar.menubar.invertAll, "反选节点"); - break; - case defaultMenu.remove: - if(_this.checkbar) - _this.toolbarMenu[defaultMenu.remove] = _this.setToolbarDom().setMenuToolbarOption(defaultMenu.remove, _this.toolbarStyle.title, _this.usefontStyle.toolbar.menubar.remove, "删除选中"); - break; - case defaultMenu.searchNode: - _this.toolbarMenu[defaultMenu.searchNode] = _this.setToolbarDom().setMenuToolbarOption(defaultMenu.searchNode, _this.toolbarStyle.title, _this.usefontStyle.toolbar.menubar.searchNode, "查询"); - break; - } - }; - - /** - * @Desc: 获取依附在工具栏的扩展菜单栏 - * @Param: menu: 扩展菜单栏的Json对象 - */ - DTree.prototype.getExtMenubarToolDom = function(menu){ - var _this = this; - _this.toolbarMenu[menu.menubarId] = _this.setToolbarDom().setMenuToolbarOption(menu.menubarId, menu.title, _this.usefontStyle.toolbar.menubarExt+" "+menu.icon, ""); - }; - - /** - * @Desc: menubar内置方法 - */ - DTree.prototype.menubarMethod = function(){ - var _this = this; - return { - openAllNode: function(obj){ // 展开所有节点 - var $ulNode = obj || _this.obj.children("li").children("ul"); - // 遍历所有ul子节点 - for (var i = 0; i < $ulNode.length; i++) { - // 获取当前节点的信息 - var $ul = $($ulNode[i]), - $div = $ul.prev("div"), - $i_fnode = _this.getNodeDom($div).fnode(), - $i_snode = _this.getNodeDom($div).snode(), - $cite = _this.getNodeDom($div).cite(), - spread = $i_fnode.attr("data-spread"), - leaf = $cite.attr("data-leaf"); - - if (leaf == "leaf") { - continue; - } // 说明是叶子了,则继续循环下一个 - - if (spread == "open") { - // 说明该节点已经展开了,则进行子节点循环 - } else { - if (_this.type=="load") { //是否全量加载 - if (_this.cache) { //是否开启缓存 - if ($ul.html()) { - $ul.addClass(NAV_SHOW); - } else { //加载节点 - _this.getChild($div); - } - }else { //每次取新的数据 - $ul.html(""); - _this.getChild($div); - } - } else { // 全量加载 - $ul.addClass(NAV_SHOW); - } - _this.operateIcon($i_fnode, $i_snode).open(); - - } - var $childUl = $ul.children("li").children("ul"); - _this.menubarMethod().openAllNode($childUl); - } - }, - closeAllNode: function(){ //收缩所有节点 - _this.obj.find("."+LI_NAV_CHILD).each(function(){ - // 获取当前节点的信息 - var $ul = $(this), - $div = $ul.prev("div"), - $i_fnode = _this.getNodeDom($div).fnode(), - $i_snode = _this.getNodeDom($div).snode(), - $cite = _this.getNodeDom($div).cite(), - spread = $i_fnode.attr("data-spread"), - leaf = $cite.attr("data-leaf"); - - $ul.removeClass(NAV_SHOW); - if(leaf !== "leaf") { - _this.operateIcon($i_fnode, $i_snode).close(); - } - }); - }, - refreshTree: function(){// 刷新树 - _this.refreshTree(); - }, - checkAll: function(){ // 全选节点 - _this.checkAllNode(); - }, - unCheckAll: function(){ // 全不选节点 - _this.cancelCheckedNode(); - }, - invertAll: function(){ // 反选节点 - _this.invertCheckedNode(); - }, - remove: function(){// 删除选中节点 - _this.removeCheckedNode(); - }, - searchNode: function(){//模糊查询该值,展开该值节点 - layer.prompt({ - formType: 0, - value: "", - title: '查询节点' - }, function(value, index1, elem){ - if (value) { - var flag = _this.searchNode(value); - if (!flag) { - layer.msg("该名称节点不存在!", {icon:5}); - } - } else { - layer.msg("未指定查询节点名称", {icon:5}); - } - layer.close(index1); - }); - }, - extMethod: function(menuId, $div, flag){ - if(_this.menubar && _this.menubarTips.group && _this.menubarTips.group.length > 0 && flag == "group"){ - for(var i=0; i<_this.menubarTips.group.length; i++){ - var ext = _this.menubarTips.group[i]; - if (menuId == ext.menubarId){ - ext.handler(_this.getRequestParam(_this.getNodeParam($div), $div)); - break; - } - } - } - if(_this.menubar && _this.menubarTips.toolbar && _this.menubarTips.toolbar.length > 0 && flag == "toolbar"){ - for(var i=0; i<_this.menubarTips.toolbar.length; i++){ - var ext = _this.menubarTips.toolbar[i]; - if (menuId == ext.menubarId){ - ext.handler(_this.getRequestParam(_this.getNodeParam($div), $div)); - break; - } - } - } - if(_this.menubar && _this.menubarTips.freedom && _this.menubarTips.freedom.length > 0 && flag == "freedom"){ - for(var i=0; i<_this.menubarTips.freedom.length; i++){ - var ext = _this.menubarTips.freedom[i]; - if (menuId == ext.menubarId){ - ext.handler(_this.getRequestParam(_this.getNodeParam($div), $div)); - break; - } - } - } - } - }; - }; - - /** - * @Desc: menubar监听方法 - * @Param: menuId:菜单栏的具体操作字符串 - * @Param: flag:菜单栏的显示方式 - */ - DTree.prototype.menubarListener = function(menuId, flag){ - var _this = this; - var $div = _this.getNodeDom().nowDiv(); - switch (menuId) { - case defaultMenu.moveDown: // 展开全部节点 - _this.menubarMethod().openAllNode(); - break; - case defaultMenu.moveUp: // 收缩全部节点 - _this.menubarMethod().closeAllNode(); - break; - case defaultMenu.refresh: - _this.menubarMethod().refreshTree(); // 刷新树 - break; - case defaultMenu.checkAll: - _this.menubarMethod().checkAll(); - break; - case defaultMenu.unCheckAll: - _this.menubarMethod().unCheckAll(); - break; - case defaultMenu.invertAll: - _this.menubarMethod().invertAll(); - break; - case defaultMenu.remove: - _this.menubarMethod().remove(); - break; - case defaultMenu.searchNode: - _this.menubarMethod().searchNode(); - break; - default: - _this.menubarMethod().extMethod(menuId, $div, flag); - break; - } - }; - - /** - * @Desc: 模糊查询该值,展开该值节点 - * @Param: value: 模糊查询的值 - */ - DTree.prototype.searchNode = function(value){ - var _this = this; - var b = false; - var $lis = []; - _this.obj.find("cite[data-leaf]").each(function(){ - var $nthis = $(this); - var html = $nthis.html(); - if(html.indexOf(value) > -1){ - if($nthis.attr("data-leaf") == "leaf") { - // 叶子节点提供包含父节点的所有信息 - var title = ""; - $nthis.parents("li").each(function(){ - title = "-" + $(this).find("cite[data-leaf]").html() + title; - }); - title = title.substring(1, title.length); - $nthis.attr("title", title); - } - // 保存当前cite所在的li及父li中包含该值,则只保留父的 - var i = 0; - $nthis.parents("li").each(function(){ - var html2 = $(this).find("cite[data-leaf]").html(); - if(html2.indexOf(value) > -1){ - i++; - } - if(i >= 2){ - return true; - } - }); - if (i < 2){ - $lis.push($nthis.closest("li").prop("outerHTML")); - } - } - }); - if($lis.length > 0) { - b = true; - // 1.将树节点清空 - _this.obj.html(""); - // 2.遍历所有cite节点,展开当前cite节点 - for(var i=0; i<$lis.length; i++){ - _this.obj.append($lis[i]); - } - } - return b; - }; - - - /******************** 工具栏区域 ********************/ - /** - * @Desc: 获取工具栏 - */ - DTree.prototype.getToolbarDom = function(){ - var _this = this; - var toolbarShow = _this.toolbarShow, - toolbarExt = _this.toolbarExt, - toolbarWay = _this.toolbarWay; - - if(toolbarShow.length > 0){ - for(var i=0; i 0){ - for(var i=0; i "+other +title+""; - } else if(toolbarWay == "fixed" || toolbarWay == "follow") { - return ""; - } - }, - setMenuToolbarOption: function(menubarId, title, classId, other){ - var rootId = _this.obj[0].id; - if(toolbarWay == "contextmenu") { - return "
                 "+other +title+"
                "; - } else if(toolbarWay == "fixed" || toolbarWay == "follow") { - return ""; - } - }, - setToolbarPlace: function(toolbarMenu){ - if(toolbarWay == "contextmenu") { - if(toolbarMenu){ - _this.obj.prevAll('div#dtree_toolbar_'+_this.obj[0].id).find('div.layui-nav-item>dl.layui-nav-child').html(""); - for(var key in toolbarMenu){ - _this.obj.prevAll('div#dtree_toolbar_'+_this.obj[0].id).find('div.layui-nav-item>dl.layui-nav-child').append(toolbarMenu[key]); - } - } - } else if(toolbarWay == "fixed" || toolbarWay == "follow") { - _this.obj.find("cite[data-leaf][dtree-disabled='false']").each(function(){ - var $cite = $(this); - _this.dynamicToolbarDom($cite); - }); - } - } - } - }; - - /** - * @Desc: 在节点后动态绑定fixed和follow条件的工具栏 - * @Param: $cite: JQuery对象,表示当前文本节点 - */ - DTree.prototype.dynamicToolbarDom = function($cite){ - var _this = this; - var toolbarWay = _this.toolbarWay; - if($cite.next("em."+TOOLBAR_TOOL_EM).length == 0) { - var $div = $cite.parent("div"); - var param = _this.getRequestParam(_this.getTempNodeParam($div)); - var toolbarMenus = _this.toolbarFun.loadToolbarBefore(event.cloneObj(_this.toolbarMenu), param, $div); - var hideCls = (toolbarWay == "follow") ? NAV_HIDE : ""; - var em = [""]; - if(toolbarMenus){ - for(var key in toolbarMenus){ - em.push(toolbarMenus[key]); - } - } - em.push(""); - $cite.after(em.join('')); - } - } - - /** - * @Desc: 隐藏toolbar - */ - DTree.prototype.toolbarHide = function() { - var _this = this; - if(_this.toolbar && _this.toolbarWay == "contextmenu") { - var $toolBarDiv = _this.obj.prevAll('div#dtree_toolbar_'+_this.obj[0].id); - $toolBarDiv.find(".layui-nav-child").removeClass('layui-anim-fadein layui-show'); - } - } - - /** - * @Desc: toolbar内置方法 - */ - DTree.prototype.toolbarMethod = function(){ - var _this = this; - return { - pulldown: function(obj){ // 展开当前点击节点的下面全部节点 - if(!obj) return; - var $ulNode = obj; - // 遍历所有ul子节点 - for (var i = 0; i < $ulNode.length; i++) { - // 获取当前节点的信息 - var $ul = $($ulNode[i]), - $div = $ul.prev("div"), - $i_fnode = _this.getNodeDom($div).fnode(), - $i_snode = _this.getNodeDom($div).snode(), - $cite = _this.getNodeDom($div).cite(), - spread = $i_fnode.attr("data-spread"), - leaf = $cite.attr("data-leaf"); - - if (leaf == "leaf") { continue; } // 说明是叶子了,则继续循环下一个 - - if (spread == "open") { - // 说明该节点已经展开了,则进行子节点循环 - } else { - if (_this.type=="load") { //是否全量加载 - if (_this.cache) { //是否开启缓存 - if ($ul.html()) { - $ul.addClass(NAV_SHOW); - } else { //加载节点 - _this.getChild($div); - } - }else { //每次取新的数据 - $ul.html(""); - _this.getChild($div); - } - } else { // 全量加载 - $ul.addClass(NAV_SHOW); - } - _this.operateIcon($i_fnode, $i_snode).open(); - - } - var $childUl = $ul.children("li").children("ul"); - _this.toolbarMethod().pulldown($childUl); - } - }, - pullup: function($li){ // 收缩当前点击节点的下面全部节点 - $li.find("."+LI_NAV_CHILD).each(function(){ - // 获取当前节点的信息 - var $ul = $(this), - $div = $ul.prev("div"), - $i_fnode = _this.getNodeDom($div).fnode(), - $i_snode = _this.getNodeDom($div).snode(), - $cite = _this.getNodeDom($div).cite(), - spread = $i_fnode.attr("data-spread"), - leaf = $cite.attr("data-leaf"); - - $ul.removeClass(NAV_SHOW); - if(leaf !== "leaf") { - _this.operateIcon($i_fnode, $i_snode).close(); - } - }); - } - } - }; - - /** - * @Desc: toolbar监听方法 - * @Param: tool: 工具栏的具体操作字符串 - * @Param: $div: JQuery对象,表示当前操作节点 - */ - DTree.prototype.toolbarListener = function(tool, $div) { - var _this = this; - var $cite = $div.children("cite[data-leaf]"), - $ul = $div.next("ul"), - $p_li = $div.parent("li[data-index]"), //当前选中节点的顶级li节点 - $p_ul = $p_li.parent("ul"), //当前选中节点的顶级li节点的父级ul - $p_div = $p_ul.prev("div"), //当前选中节点的顶级li节点的父级ul的前一个div - title = (typeof _this.formatter.title === 'function') ? $cite.attr("data-title") : $cite.text(); - - switch (tool) { - case defaultTool.pulldown: - _this.toolbarMethod().pulldown($ul); - break; - case defaultTool.pullup: - _this.toolbarMethod().pullup($p_li); - break; - case defaultTool.addTool: - var content = _this.loadToolBar(title, defaultTool.addTool); - - layer.open({ - title: "新增"+_this.toolbarStyle.title, - type: 1, - area: _this.toolbarStyle.area, - content: content, - success: function(layero, index){ - form.render(); - form.on("submit(dtree_addNode_" + _this.obj[0].id + "_form)",function(data){ - var data = data.field; - var parentId = $div.attr("data-id"), - id = $div.attr("data-id")+"_node_"+$ul[0].childNodes.length, - leaf = true, - checked = "0", - level = parseInt($p_li.attr("data-index"))+1; - - var type = _this.response.type; - var checked = _this.response.checked; - // 创建子节点的DOM,添加子节点 - var checkArr = []; - if (_this.checkArrLen > 0) { - for (var i = 0; i < _this.checkArrLen; i++) { - checkArr.push({type: i, checked: "0"}); - } - } - - $ul.append(_this.getLiItemDom(id, parentId, data.addNodeName, data.addNodeName, true, "", "", checkArr, level, false, false, false, "", "", "item")); - // 先将li节点隐藏 - $ul.find("li[data-id='"+id+"']").hide(); - // 重新赋值 - var $addDiv = $ul.find("div[data-id='"+id+"']"); - node = _this.getNodeParam($addDiv); - - //获取组装后的requestNode,组合参数 - var requestNode = _this.getRequestParam(node); - requestNode = $.extend(requestNode, data); - - _this.temp = [id, $ul, $div, level]; - // 用户自定义想做的事情 - _this.toolbarFun.addTreeNode(requestNode, $div); - - layer.close(index); - return false; - }); - } - }); - break; - case defaultTool.editTool: - var content = _this.loadToolBar(title, defaultTool.editTool); - - layer.open({ - title: "编辑"+_this.toolbarStyle.title, - type: 1, - area: _this.toolbarStyle.area, - content: content, - success: function(layero, index){ - _this.toolbarFun.editTreeLoad(_this.getRequestParam(_this.getNodeParam($div))); - form.render(); - form.on("submit(dtree_editNode_" + _this.obj[0].id + "_form)",function(data){ - var data = data.field; - $cite.html(data.editNodeName); - node = _this.getNodeParam($div); - var requestNode = _this.getRequestParam(node); - requestNode = $.extend(requestNode, data); - _this.temp = [$cite, $div, title, $p_div]; - _this.toolbarFun.editTreeNode(requestNode, $div); - - layer.close(index); - }); - } - }); - break; - case defaultTool.delTool: - layer.confirm('确定要删除该'+_this.toolbarStyle.title+'?', {icon: 3, title:'删除'+_this.toolbarStyle.title}, function(index){ - var node = _this.getNodeParam($div); - _this.temp = [$p_li, $p_div]; - _this.toolbarFun.delTreeNode(_this.getRequestParam(_this.getNodeParam($div)), $div); - - layer.close(index); - }); - break; - default: - if(_this.toolbarExt.length > 0){ - for(var i=0; i<_this.toolbarExt.length; i++){ - var ext = _this.toolbarExt[i]; - if (tool == ext.toolbarId){ - ext.handler(_this.getRequestParam(_this.getNodeParam($div)), $div); - break; - } - } - } - break; - } - } - - - /** - * @Desc: 加载toolbar中的内容 - * @Param: title: 默认操作中的input输入框的值 - * @Param: name: 工具栏的具体操作字符串 - */ - DTree.prototype.loadToolBar = function(title, name){ - var _this = this; - var toolbarShow = _this.toolbarShow; - var nodeBarContents = _this.toolbarBtn; - - var html = ""; - switch (name) { - case defaultTool.addTool: - var addNodeBarDef = [{"label": "当前选中", "name": "nodeTitle", "type": "text", "value": title, "defElem": "nowChoose", "readonly": true}, - {"label": "新增"+_this.toolbarStyle.title, "name": "addNodeName", "type": "text", "value": "", "defElem": "nowChange", "verify": "required"}, - {"type": "submit", "value": "确认添加", "defElem": "btn", "filter": "dtree_addNode_" + _this.obj[0].id + "_form"}]; - - //2. 用户自定义的节点内容 - var addNodeBar = ['
                ']; - - if(nodeBarContents != null && nodeBarContents.length > 0){ - if(nodeBarContents[0] != null && nodeBarContents[0] != undefined && nodeBarContents[0].length > 0){ - var addNodeBarContents = nodeBarContents[0]; - // 1. 检查是否包含了now、newly、btn这三个默认项,将其他元素依次排列,将特殊元素至于栈顶 - for(var i=0; i', '
                ']; - // 3.遍历生成按钮 - for(var j=0; j
                '); - addNodeBar.push(addBtn.join('')); - addNodeBar.push('
                '); - html = addNodeBar.join(''); - break; - - case defaultTool.editTool: - var editNodeBarDef = [{"label": "当前选中", "name": "nodeTitle", "type": "text", "value": title, "defElem": "nowChoose", "readonly": true}, - {"label": "编辑"+_this.toolbarStyle.title, "name": "editNodeName", "type": "text", "value": "", "defElem": "nowChange", "verify": "required"}, - {"type": "submit", "value": "确认编辑", "defElem": "btn", "filter": "dtree_editNode_" + _this.obj[0].id + "_form"}]; - - var editNodeBar = ['
                ']; - //2. 用户自定义的节点内容 - if(nodeBarContents != null && nodeBarContents.length > 0){ - - if(nodeBarContents[1] != null && nodeBarContents[1] != undefined && nodeBarContents[1].length > 0){ - var editNodeBarContents = nodeBarContents[1]; - // 1. 检查是否包含了now、newly、btn这三个默认项,将其他元素依次排列,将特殊元素至于栈顶 - for(var i=0; i', '
                ']; - // 3.遍历生成按钮 - for(var j=0; j
                '); - editNodeBar.push(editBtn.join('')); - editNodeBar.push('
                '); - html = editNodeBar.join(''); - break; - } - return html; - }; - - /** - * @Desc: 获取toolbar详细的标签信息 - * @Param: nodeBarContents: 工具栏中的数据渲染内容JSON对象 - */ - DTree.prototype.loadToolBarDetail = function(nodeBarContents){ - var _this = this; - var readonly = (typeof (nodeBarContents.readonly) === "boolean") ? nodeBarContents.readonly : false; - var disabled = (typeof (nodeBarContents.disabled) === "boolean") ? nodeBarContents.disabled : false; - var id = nodeBarContents.id ? nodeBarContents.id : ""; - var name = nodeBarContents.name ? nodeBarContents.name : ""; - var val = nodeBarContents.value ? nodeBarContents.value : ""; - var verify = nodeBarContents.verify ? nodeBarContents.verify : ""; - var placeholder = nodeBarContents.placeholder ? nodeBarContents.placeholder : val; - return{ - text: function(){ - return ['
                ', - '', - '
                ', - '', - '
                ', - '
                '].join(''); - }, - textarea: function(){ - return ['
                ', - '', - '
                ', - '', - '
                ', - '
                '].join(''); - }, - hidden: function(){ - return [''].join(''); - }, - select: function(){ - var optionsData = (typeof nodeBarContents.optionsData === 'object') ? nodeBarContents.optionsData : nodeBarContents.optionsData(); - var options = ""; - for(var key in optionsData){ - if(val == optionsData[key]){ - options += ""; - } else { - options += ""; - } - } - return ['
                ', - '', - '
                ', - '', '
                ', '
                '].join(''); - }, - submit: function(){ - var filter = nodeBarContents.filter; - return [''].join(''); - }, - button: function(){ - return [''].join(''); - }, - reset: function(){ - return [''].join(''); - } - } - }; - - /** - * @Desc: 新增节点后改变节点内容 - * @Param: returnID: 当前需要加载的内容,JSON对象、字符串、指定字符串("refresh")、true - */ - DTree.prototype.changeTreeNodeAdd = function(returnID){ - var _this = this; - var temp = _this.temp; - var id = temp[0], $ul = temp[1], $div = temp[2], level = temp[3]; - var flag = false; - if(returnID){ - var $thisDiv = _this.obj.find("[data-id='"+id+"']"); - if(typeof returnID === "object"){ - // 如果是JSON格式数据,则将当前DIV删除,重新建造DIV - $thisDiv.remove(); - var parseData = _this.parseData(returnID); - - if(parseData.treeId()){ - $ul.append(_this.getLiItemDom(parseData.treeId(), parseData.parentId(), parseData.title(), parseData.fmtTitle(), parseData.last(0), parseData.ficonClass(), parseData.iconClass(), parseData.checkArr(), level, parseData.spread(), parseData.disabled(), parseData.hide(), parseData.basicData(), parseData.recordData(), "item")); - - // 建造完毕后,选中该DIV - $thisDiv = $ul.find("div[data-id='"+parseData.treeId()+"']"); - _this.setNodeParam($thisDiv) - } else { - layer.msg("添加失败,节点ID为undefined!",{icon:5}); - // 将li节点删除 - $ul.find("li[data-id='"+id+"']").remove(); - // 重新赋值 - _this.setNodeParam($div); - // 临时变量制空 - _this.temp = []; - return ; - } - }else if(returnID == 'refresh' || returnID == true){ - // 如果是设置为refresh参数,则向后台发送请求,获取新增节点下的真实参数,局部刷新树。 - flag = true; - } else if(typeof returnID === "string" || typeof returnID === 'number'){ - $thisDiv.attr("data-id", returnID); - // 将li节点展示 - $ul.find("li[data-id='"+returnID+"']").show(); - _this.setNodeParam($thisDiv) - } - - // 判断当前点击的节点是否是最后一级节点,如果是,则需要修改节点的样式 - var $icon_i = $div.find("i[data-spread]"); - if ($icon_i.eq(0).attr("data-spread") == "last") { - _this.operateIcon($icon_i.eq(0), $icon_i.eq(1)).openWithLeaf(); - } else { //如果不是,也要修改节点样式 - _this.operateIcon($icon_i.eq(0), $icon_i.eq(1)).open(); - } - $ul.addClass(NAV_SHOW); //展开UL - _this.accordionUL($ul); - if(flag) { - _this.getChild($div); - } else { - // _this.showLine(); - _this.showLine($ul.find("li")); - // 这种情况下需要在新增节点后对节点新增工具栏 - if(_this.toolbar && _this.toolbarWay != 'contextmenu') { - _this.dynamicToolbarDom($thisDiv.find("cite[data-leaf]")); - } - } - - } else { - // 将li节点删除 - $ul.find("li[data-id='"+id+"']").remove(); - // 重新赋值 - _this.setNodeParam($div); - } - - _this.temp = []; // 临时变量制空 - - }; - - /** - * @Desc: 编辑页打开后显示编辑页内容 - * @Param: param: 编辑页打开之后回显的数据集 - */ - DTree.prototype.changeTreeNodeDone = function(param){ - var _this = this; - form.val('dtree_editNode_' + _this.obj[0].id + '_form', param); - form.render(); - }; - - /** - * @Desc: 修改节点后改变节点内容 - * @Param: returnID: 当前需要变更的内容,JSON对象 - */ - DTree.prototype.changeTreeNodeEdit = function(returnID){ - var _this = this; - var temp = _this.temp; - var $cite = temp[0], $div = temp[1], title = temp[2], $p_div = temp[3]; - var flag = false; - if(returnID){ - if(typeof returnID === "object"){ - var parseData = _this.parseData(data); - - if(parseData.treeId()){ - var replaceDom = _this.replaceDom($div, parseData.treeId(), parseData.last(0), parseData.spread(), parseData.disabled(), parseData.hide()); - replaceDom.node(parseData.iconClass()); - replaceDom.checkbox(parseData.checkArr()); - replaceDom.text(parseData.title()); - replaceDom.ul(); - replaceDom.basicData(parseData.basicData()); - replaceDom.recordData(parseData.recordData()); - _this.setNodeParam($div); - } else { - layer.msg("编辑失败,节点ID为undefined!",{icon:5}); - // 重新赋值 - _this.setNodeParam($div); - } - } - } else { - $cite.html(title); - _this.getNodeParam($div); - } - - _this.temp = []; // 临时变量制空 - }; - - /** - * @Desc: 删除节点后改变节点内容 - * @Param: flag: 是否要删除节点 - */ - DTree.prototype.changeTreeNodeDel = function(flag){ - var _this = this; - var temp = _this.temp; - var $p_li = temp[0], - $p_ul = $p_li.parent("ul"), - $p_div = temp[1]; - - if(flag){ - $p_li.remove(); - _this.showLine($p_ul.find("li")); - // 判断父级ul中是否还存在li,如果不存在,则需要修改节点的样式 - if($p_ul.children("li").length == 0){ - var $icon_i = $p_div.find("i[data-spread]"); - _this.operateIcon($icon_i.eq(0), $icon_i.eq(1)).closeWithLeaf(); - } - _this.initNodeParam(); - } - - _this.temp = []; // 临时变量制空 - }; - - /******************** iframe区域 ********************/ - /** - * @Desc: 加载iframe - * @Param: $div: JQuery对象,表示当前节点 - * @Param: iframeParam: iframe加载的参数 - */ - DTree.prototype.loadIframe = function($div, iframeParam) { - var _this = this; - var $cite = _this.getNodeDom($div).cite(); - if (!_this.useIframe) { // 启用iframe - return false; - } - var iframeElem = _this.iframeElem, - iframeUrl = _this.iframeUrl, - iframeLoad = _this.iframeLoad; - - var flag = iframeLoad == "leaf" ? (($cite.attr("data-leaf") == "leaf") ? true : false) : true; - - if (flag) { - if ($(iframeElem).length > 0) { //iframe存在 - if (!iframeUrl) { - layer.msg("数据请求异常,iframeUrl参数未指定", {icon:5}); - return false; - } - var param = AjaxHelper.serialize("?", iframeParam); - if(iframeUrl.indexOf("?")> -1){ - param = "&"+param.substring(1, param.length); - } - var url = iframeUrl + param; - $(iframeElem).attr("src", url); - } else { - layer.msg("iframe绑定异常,请确认页面中是否有iframe页对应的容器", {icon:5}); - return false; - } - } - return flag; - }; - - /** - * @Desc: 获取传递出去的参数,根据iframe.iframeDefaultRequest、iframe.iframeRequest和node拼出发出请求的参数 - * @Param: nodes: 需要传递出去的参数 - */ - DTree.prototype.getIframeRequestParam = function(nodes){ - var _this = this; - var request = _this.iframeRequest, - defaultRequestNames = _this.iframeDefaultRequest, - node = nodes || _this.node, - requestParam = {}; - - // 先拼用户自定义的,在拼树生成的,这样的话用户可以自定义当树未生成时的节点的初始值 - for ( var key in request) { - requestParam[key] = request[key]; - } - for ( var key in defaultRequestNames) { - var paramName = defaultRequestNames[key]; - var paramValue = node[key]; - if(typeof paramValue === "boolean"){ - requestParam[paramName] = paramValue; - }else { - if(paramValue){ - requestParam[paramName] = paramValue; - } - } - } - - // 解决传递中文的乱码问题 - var reg = /[\u4E00-\u9FA5\uF900-\uFA2D]/; //正则匹配中文 - for(var key in requestParam){ - if(reg.test(requestParam[key])) { - var str = requestParam[key]; - requestParam[key] = encodeURI(encodeURI(str)); - } - } - - return requestParam; - }; - - /******************** 数据回调区域 ********************/ - /** - * @Desc: 根据具体的id获取基于当前id的div以及对应的其他dom元素 - * @Param: id: 节点的ID值 - */ - DTree.prototype.getNodeDom = function(id){ - var _this = this; - // 获取当前div,如果id就是一个dom,则就是这个,如果不是则进行选择。如果选不中则为null - var $div = (typeof id === 'object') ? id : (_this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']").length == 0) ? null : _this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']"); - return { - div: function(){ // 获取当前div - return $div; - }, - fnode: function(){ // 获取一级图标元素 - return ($div == null) ? null : $div.find("i[data-spread]").eq(0); - }, - snode: function(){ // 获取二级图标元素 - return ($div == null) ? null : $div.find("i[data-spread]").eq(1); - }, - checkbox: function(){ // 获取复选框元素 - return ($div == null) ? null : $div.find("i[data-par]"); - }, - cite: function(){ // 获取cite元素 - return ($div == null) ? null : $div.find("cite[data-leaf]"); - }, - nextUl: function(){ // 获取相邻的ul元素 - return ($div == null) ? null : $div.next("ul"); - }, - parentLi: function(){ // 获取父级li元素 - return ($div == null) ? null : $div.parent("li"); - }, - parentUl: function(){ // 获取基于当前$div的上级$ul - return ($div == null) ? null : $div.parent("li").parent("ul"); - }, - parentDiv: function(){ // 获取基于当前$div的上级$div - return ($div == null) ? null : $div.parent("li").parent("ul").prev("div"); - }, - nowDiv: function(){ // 获取当前选中节点,没有则返回null - return (_this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id]").parent().find("."+NAV_THIS).length == 0) ? null : _this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id]").parent().find("."+NAV_THIS); - }, - nowOrRootDiv: function(){ // 获取当前选中节点,没有则返回根节点下的第一个div - return (_this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id]").parent().find("."+NAV_THIS).length == 0) ? _this.obj.children("li").eq(0).children("div").eq(0) : _this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id]").parent().find("."+NAV_THIS); - }, - nowOrRootUl: function(){ // 获取当前选中节点下一个UL 或根节点。为了将新节点放入ul下 - return (_this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id]").parent().find("."+NAV_THIS).length == 0) ? _this.obj : _this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id]").parent().find("."+NAV_THIS).next("ul"); - } - } - }; - - /** - * @Desc: 获取当前选中节点下一个ul节点 或根节点。为了将新节点放入ul下 - */ - DTree.prototype.getNowNodeUl = function() { - var _this = this; - return _this.getNodeDom().nowOrRootUl(); - }; - - /** - * @Desc: 获取当前选中div节点 或第一个根div节点。 - */ - DTree.prototype.getNowNode = function() { - var _this = this; - return _this.getNodeDom().nowOrRootDiv(); - }; - - /** - * @Desc: 获取当前选中div节点 无则返回null。 - */ - DTree.prototype.getNowNodeOrNull = function() { - var _this = this; - return _this.getNodeDom().nowDiv(); - }; - - /** - * @Desc: 根据获取指定div节点。 - * @Param: id: 指定节点的ID - */ - DTree.prototype.getNode = function(id) { - var _this = this; - return _this.getNodeDom(id).div(); - }; - - /** - * @Desc: 设置当前选中节点的全部参数 - * @Param: $div: 当前选中的节点 - */ - DTree.prototype.setNodeParam = function($div) { - var _this = this; - _this.node.nodeId = $div.attr("data-id"); - _this.node.parentId = _this.getNodeDom($div).parentLi().attr("data-pid"); - _this.node.context = (typeof _this.formatter.title === 'function') ? _this.getNodeDom($div).cite().attr("data-title") : _this.getNodeDom($div).cite().text(); - _this.node.leaf = _this.getNodeDom($div).cite().attr("data-leaf") == "leaf" ? true : false; - _this.node.level = _this.getNodeDom($div).parentLi().attr("data-index"); - _this.node.spread = _this.getNodeDom($div).fnode().attr("data-spread") == "open" ? true : false; - - var basicData = $div.attr("data-basic"); - if(basicData) { - basicData = JSON.parse(event.unescape(basicData)); - } - _this.node.basicData = basicData; - - var recordData = $div.attr("data-record"); - if(recordData) { - recordData = JSON.parse(event.unescape(recordData)); - } - _this.node.recordData = recordData; - - if (_this.getNodeDom($div).checkbox()) { - var dataTypes = "", checkeds = "", initcheckeds = ""; - _this.getNodeDom($div).checkbox().each(function(){ - dataTypes += $(this).attr("data-type") + ","; - checkeds += $(this).attr("data-checked") + ","; - initcheckeds += $(this).attr("data-initchecked") + ","; - }); - dataTypes = dataTypes.substring(0, dataTypes.length-1); - checkeds = checkeds.substring(0, checkeds.length-1); - initcheckeds = initcheckeds.substring(0, initcheckeds.length-1); - - _this.node.dataType = dataTypes; - _this.node.checked = checkeds; - _this.node.initchecked = initcheckeds; - } - }; - - /** - * @Desc: 获取当前选中节点的全部参数 - * @Param: $div: 当前选中的节点 - */ - DTree.prototype.getNodeParam = function($div) { - var _this = this; - if ($div) { - _this.setNodeParam($div); - } else { - if(_this.obj.find("div[data-id]").parent().find("."+NAV_THIS).length == 0){ - _this.initNodeParam(); - } - } - return this.node; - }; - - /** - * @Desc: 获取一个临时的node参数 - * @Param: $div: 当前选中的节点 - */ - DTree.prototype.getTempNodeParam = function($div) { - var _this = this; - var temp_node = {}; - temp_node.nodeId = $div.attr("data-id"); - temp_node.parentId = _this.getNodeDom($div).parentLi().attr("data-pid"); - temp_node.context = (typeof _this.formatter.title === 'function') ? _this.getNodeDom($div).cite().attr("data-title") : _this.getNodeDom($div).cite().text(); - temp_node.leaf = _this.getNodeDom($div).cite().attr("data-leaf") == "leaf" ? true : false; - temp_node.level = _this.getNodeDom($div).parentLi().attr("data-index"); - temp_node.spread = _this.getNodeDom($div).fnode().attr("data-spread") == "open" ? true : false; - - var basicData = $div.attr("data-basic"); - if(basicData) { - basicData = JSON.parse(event.unescape(basicData)); - } - temp_node.basicData = basicData; - var recordData = $div.attr("data-record"); - if(recordData) { - recordData = JSON.parse(event.unescape(recordData)); - } - temp_node.recordData = recordData; - - if (_this.getNodeDom($div).checkbox()) { - var dataTypes = "", checkeds = "", initcheckeds = ""; - _this.getNodeDom($div).checkbox().each(function(){ - dataTypes += $(this).attr("data-type") + ","; - checkeds += $(this).attr("data-checked") + ","; - initcheckeds += $(this).attr("data-initchecked") + ","; - }); - dataTypes = dataTypes.substring(0, dataTypes.length-1); - checkeds = checkeds.substring(0, checkeds.length-1); - initcheckeds = initcheckeds.substring(0, initcheckeds.length-1); - - temp_node.dataType = dataTypes; - temp_node.checked = checkeds; - temp_node.initchecked = initcheckeds; - } - return temp_node; - }; - - /** - * @Desc: 重置内置参数 - */ - DTree.prototype.initNodeParam = function(){ - var _this = this; - _this.node.nodeId = ""; - _this.node.parentId = ""; - _this.node.context = ""; - _this.node.leaf = ""; - _this.node.level = ""; - _this.node.spread = ""; - _this.node.dataType = ""; - _this.node.checked = ""; - _this.node.initchecked = ""; - _this.node.basicData = ""; - _this.node.recordData = ""; - - if(_this.select) { - _this.selectResetVal(); - } - }; - - /** - * @Desc: 获取传递出去的参数,根据defaultRequest、request和node拼出发出请求的参数 - * @Param: nodes:需要传递出去的参数 - */ - DTree.prototype.getRequestParam = function(nodes){ - var _this = this; - var request = _this.request, - defaultRequestNames = _this.defaultRequest, - node = nodes || _this.node, - requestParam = {}; - - // 先拼用户自定义的,在拼树生成的,这样的话用户可以自定义当树未生成时的节点的初始值 - for ( var key in request) { - requestParam[key] = request[key]; - } - for ( var key in defaultRequestNames) { - var paramName = defaultRequestNames[key]; - var paramValue = node[key]; - if(typeof paramValue === "boolean"){ - requestParam[paramName] = paramValue; - }else { - if(paramValue){ - requestParam[paramName] = paramValue; - } - } - - } - return requestParam; - }; - - /** - * @Desc: 获取filterParam过滤后的requestParam - * @Param: requestParam:请求参数 - */ - DTree.prototype.getFilterRequestParam = function(requestParam){ - var _this = this; - var filterRequest = _this.filterRequest; - return event.cloneObj(requestParam, filterRequest); - }; - - /** - * @Desc: 获取当前选中的请求参数 - */ - DTree.prototype.getNowParam = function(){ - var _this = this; - - return _this.getRequestParam(_this.getNodeParam()); - }; - - /** - * @Desc: 根据id获取指定div节点选中参数 - * @Param: id:节点的ID值 - */ - DTree.prototype.getParam = function(id){ - var _this = this; - - // 获取当前div,如果id就是一个dom,则就是这个,如果不是则进行选择。如果选不中则为null - var $div = (typeof id === 'object') ? id : (_this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']").length == 0) ? null : _this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']"); - if($div != null){ return _this.callbackData().node(_this.getTempNodeParam($div)); } else { return {}; } - }; - - /** - * @Desc: 根据id获取节点上级节点参数 - * @Param: id:节点的ID值 - */ - DTree.prototype.getParentParam = function(id){ - var _this = this; - // 获取当前div,如果id就是一个dom,则就是这个,如果不是则进行选择。如果选不中则为null - var $div = (typeof id === 'object') ? id : (_this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']").length == 0) ? null : _this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']"); - if($div != null){ return _this.callbackData().parentNode($div); } else { return {}; } - }; - - /** - * @Desc: 根据id获取节点的全部上级节点参数值 - * @Param: id:节点的ID值 - */ - DTree.prototype.getAllParentParam = function(id){ - var _this = this; - // 获取当前div,如果id就是一个dom,则就是这个,如果不是则进行选择。如果选不中则为null - var $div = (typeof id === 'object') ? id : (_this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']").length == 0) ? null : _this.obj.find("div[dtree-click='"+eventName.itemNodeClick+"'][data-id='"+id+"']"); - var arr = []; - if($div != null){ - var level = _this.getTempNodeParam($div).level; - for(var i=1; i 0){ - $childDivs.each(function(){ - var $cDiv = $(this); - childNode.push(_this.getRequestParam(_this.getTempNodeParam($cDiv))); - }); - } - return childNode; - }, - parentNode: function($div){ // 获取上级节点值 - var pId = _this.getNodeDom($div).parentLi().attr("data-pid"); - var $pdiv = _this.obj.find("div[data-id='"+pId+"']"); - if($pdiv.length > 0) {return _this.getRequestParam(_this.getTempNodeParam($pdiv));} else {return {};} - - } - } - }; - - /******************** 事件回调区域 ********************/ - /** - * @Desc: 绑定浏览器事件 - */ - DTree.prototype.bindBrowserEvent = function(){ - var _this = this; - var rootId = _this.obj[0].id; - - // 绑定文件夹展开/收缩的图标的点击事件,点击时给当前节点的div添加选中class - _this.obj.on("click", "i[data-spread]", function(event) { - event.stopPropagation(); - var $i = $(this), - $div = $i.parent("div"), - node = _this.getNodeParam($div); - - _this.toolbarHide(); - _this.navThis($div); - _this.clickSpread($div); // 展开或隐藏节点 - - // 树状态改变后,用户自定义想做的事情 - layui.event.call(this, MOD_NAME, "changeTree("+$(_this.obj)[0].id+")", { - dom: _this.callbackData().dom($i), - param: _this.callbackData().node(node), - show: _this.callbackData().dom($i).attr("data-spread") == "open" ? true : false - }); - }); - - // 绑定所有子节点div的单击事件,点击时触发加载iframe或用户自定义想做的事情 - _this.obj.on("click", "div[dtree-click='"+eventName.itemNodeClick+"'][dtree-disabled='false']", function(event) { - event.stopPropagation(); - var $div = $(this), - $cite = $div.find("cite"), - node = _this.getNodeParam($div); - _this.toolbarHide(); - _this.navThis($div); - - if(_this.select) { - _this.selectVal(node.nodeId); - $("div[dtree-id='" + rootId + "'][dtree-select='"+_this.selectDiv+"']").click(); - } - - if (_this.useIframe) { - var iframeParam = _this.getFilterRequestParam(_this.getIframeRequestParam(node)); - var flag = _this.loadIframe($div, iframeParam); // 加载iframe - if (flag) { - // iframe加载完毕后,用户自定义想做的事情 - _this.iframeFun.iframeDone(iframeParam); - - layui.event.call(this, MOD_NAME, "iframeDone("+$(_this.obj)[0].id+")", { - "iframeParam": iframeParam, - dom: _this.callbackData().dom($div) - }); - } - } else { - // 单击事件执行完毕后,用户自定义想做的事情 - layui.event.call(this, MOD_NAME, "node("+$(_this.obj)[0].id+")", { - param: _this.callbackData().node(node), - childParams: _this.callbackData().childNode($div), - parentParam: _this.callbackData().parentNode($div), - dom: _this.callbackData().dom($div) - }); - } - }); - - // 绑定所有子节点div的双击事件,暴露on给用户自定义 - _this.obj.on("dblclick", "div[dtree-click='"+eventName.itemNodeClick+"'][dtree-disabled='false']", function(event) { - event.stopPropagation(); - var $div = $(this), - $cite = $div.find("cite"), - node = _this.getNodeParam($div); - _this.toolbarHide(); - _this.navThis($div); - - if(_this.select) { - _this.selectVal(node.nodeId); - $("div[dtree-id='" + rootId + "'][dtree-select='"+_this.selectDiv+"']").click(); - } - - // 双击事件执行完毕后,用户自定义想做的事情 - layui.event.call(this, MOD_NAME, "nodedblclick("+$(_this.obj)[0].id+")", { - param: _this.callbackData().node(node), - childParams: _this.callbackData().childNode($div), - parentParam: _this.callbackData().parentNode($div), - dom: _this.callbackData().dom($div) - }); - }); - - if(_this.checkbar) { - // 绑定cheboxbar的节点复选框 - _this.obj.on("click", "i[dtree-click='"+eventName.checkNodeClick+"'][dtree-disabled='false']", function(event) { - _this.toolbarHide(); - var $i = $(this), - $div = $i.closest("div[dtree-click='"+eventName.itemNodeClick+"']"), - node = _this.getNodeParam($div); - // 复选框选中前的回调 - var flag = _this.checkbarFun.chooseBefore($i, _this.getRequestParam(node)); - _this.temp = [$i]; - if(flag){_this.changeCheck();} - - event.stopPropagation(); - }); - } - - if(_this.menubar) { - // 绑定menubar的点击事件 - _this.obj.prevAll('div#dtree_menubar_'+_this.obj[0].id).on("click", "button[d-menu]", function(event) { - event.stopPropagation(); - _this.toolbarHide(); - _this.menubarListener($(this).attr("d-menu"), "group"); - }); - - // 绑定menubar的点击事件 - _this.obj.prevAll('div#dtree_toolbar_'+_this.obj[0].id).on("click", "a[d-menu]", function(event) { - event.stopPropagation(); - _this.toolbarHide(); - _this.menubarListener($(this).attr("d-menu"), "toolbar"); - }); - - // 绑定menubar的点击按钮事件 - _this.obj.closest('body').find("*[dtree-id='"+_this.obj[0].id+"'][dtree-menu]").on("click", function(event) { - event.stopPropagation(); - _this.toolbarHide(); - _this.menubarListener($(this).attr("dtree-menu"), "freedom"); - }); - } - - if(_this.toolbar) { - if(_this.toolbarWay == "contextmenu") { - //绑定所有子节点div的右键点击事件,用于显示toolbar - _this.obj.on("contextmenu", "div[dtree-click='"+eventName.itemNodeClick+"'][d-contextmenu='true'][dtree-disabled='false']", function(e){ - var $div = $(this), - node = _this.getNodeParam($div); - - _this.toolbarHide(); - // toolbar加载前执行的方法,执行完毕之后创建按钮 - _this.setToolbarDom().setToolbarPlace(_this.toolbarFun.loadToolbarBefore(event.cloneObj(_this.toolbarMenu), _this.getRequestParam(node), $div)); - - var e = e || window.event, - mx = e.pageX - $div.offset().left +45 , - my = $div.offset().top - _this.obj.closest(_this.scroll).offset().top +15; - - _this.navThis($div); - var $toolBarDiv = _this.obj.prevAll('div#dtree_toolbar_'+_this.obj[0].id); - $toolBarDiv.find(".layui-nav-child").addClass('layui-anim-fadein layui-show'); - $toolBarDiv.css({'left':mx+'px','top':my+'px'}); - - e.stopPropagation(); - return false; - }); - - // 绑定装载树的上层出现滚动条的容器,让toolbar隐藏 - _this.obj.closest(_this.scroll).scroll(function() { - _this.toolbarHide(); - }); - - // 绑定toolbar的点击事件 - _this.obj.prevAll('div#dtree_toolbar_'+_this.obj[0].id).on("click", "a[dtree-tool]", function(event) { - event.stopPropagation(); - var $div = _this.getNodeDom().nowOrRootDiv(), - node = _this.getNodeParam($div); - _this.toolbarHide(); - var tool = $(this).attr("dtree-tool"); - _this.toolbarListener(tool, $div); - }); - } else if(_this.toolbarWay == "fixed") { - // 绑定toolbar的点击事件 - _this.obj.on("click", "a[dtree-tool]", function(event) { - event.stopPropagation(); - var $a = $(this), - $cite = $a.parent("em."+TOOLBAR_TOOL_EM).prev("cite"), //当前选中节点的text - $div = $cite.parent("div"), - node = _this.getNodeParam($div); - var tool = $a.attr("dtree-tool"); - - _this.toolbarHide(); - _this.navThis($div); - _this.toolbarListener(tool, $div); - }); - } else if(_this.toolbarWay == "follow") { - //绑定所有子节点div的mouseover mouseout事件,用于显示或隐藏toolbar - _this.obj.on("mouseover mouseout", "div[dtree-click='"+eventName.itemNodeClick+"'][dtree-disabled='false']", function(event){ - var $div = $(this), - $toolBarEm = $div.children("em."+TOOLBAR_TOOL_EM); - if(event.type == "mouseover"){ - $toolBarEm.removeClass(NAV_HIDE); - event.stopPropagation(); - } else if(event.type == "mouseout"){ - $toolBarEm.addClass(NAV_HIDE); - event.stopPropagation(); - } - }); - - // 绑定toolbar的点击事件 - _this.obj.on("click", "a[dtree-tool]", function(event) { - event.stopPropagation(); - var $a = $(this), - $cite = $a.parent("em."+TOOLBAR_TOOL_EM).prev("cite"), //当前选中节点的text - $div = $cite.parent("div"), - node = _this.getNodeParam($div); - var tool = $a.attr("dtree-tool"); - - _this.toolbarHide(); - _this.navThis($div); - _this.toolbarListener(tool, $div); - }); - } - } - - if(_this.select) { - // 绑定select的点击事件 - $("div[dtree-id='" + rootId + "'][dtree-select='"+_this.selectDiv+"']").on("click", function(event){ - event.stopPropagation(); - var dl = $(this).find('dl'); - //debugger; - $(this).toggleClass("layui-form-selected"); - - var $card = $("div[dtree-id='" + rootId + "'][dtree-card='"+_this.selectCardDiv+"']"); - - $card.toggleClass("dtree-select-show layui-anim layui-anim-upbit"); - var top = $(this).offset().top + $(this).outerHeight() - $WIN.scrollTop() - 5, - cardHeight = $card.height(), - winHeight = $WIN.height(); -// console.log("top = $(this).offset().top: " + $(this).offset().top + " + $(this).outerHeight(): " + $(this).outerHeight() + " - $WIN.scrollTop(): " + $WIN.scrollTop() + " - 5 =" + top); -// console.log("winHeight = " + winHeight); - if($card.hasClass('dtree-select-up')) { - $card.removeClass('dtree-select-up'); - } - - //上下定位识别 - if(top + cardHeight > $WIN.height() && top >= cardHeight){ - console.log(" top + cardHeight : "+ top + " + " + cardHeight + " > $WIN.height() :" + $WIN.height() + " && top >= cardHeight :" + top + " > " + cardHeight); - if($card.hasClass('dtree-select-up')) { - $card.removeClass('dtree-select-up'); - } else { - $card.addClass('dtree-select-up'); - } - } else { - $card.removeClass('dtree-select-up'); - } - - // 下拉树面板开闭状态改变后,用户自定义想做的事情 - layui.event.call(this, MOD_NAME, "changeSelect("+$(_this.obj)[0].id+")", { - show: $(this).hasClass("layui-form-selected"), - param: _this.selectVal() - }); - }); - - } - }; - - // 绑定body的单击,让本页面所有的toolbar隐藏 - $BODY.on("click", function(event){ - $("div."+LI_DIV_TOOLBAR).find(".layui-show").removeClass('layui-anim-fadein layui-show'); - // $("div[dtree-id][dtree-select]").removeClass("layui-form-selected"); - // $("div[dtree-id][dtree-card]").removeClass("dtree-select-show layui-anim layui-anim-upbit"); - - }); - - // 解绑浏览器事件 - DTree.prototype.unbindBrowserEvent = function(){ - var _this = this; - - // 本身事件解绑 - _this.obj.unbind(); - // 菜单栏解绑 - if(_this.menubar){ - _this.obj.prevAll('div#dtree_menubar_'+_this.obj[0].id).unbind(); - if(_this.obj.closest('body').find("*[dtree-id='"+_this.obj[0].id+"'][dtree-menu]").length > 0){ - _this.obj.closest('body').find("*[dtree-id='"+_this.obj[0].id+"'][dtree-menu]").unbind(); - } - } - - // 工具栏解绑 - if(_this.toolbar){ - if(_this.toolbarWay == "contextmenu") { - _this.obj.prevAll('div#dtree_toolbar_'+_this.obj[0].id).unbind(); - if(_this.obj.closest(_this.scroll).length > 0){ - _this.obj.closest(_this.scroll).unbind(); - } - } - } - - // 下拉树解绑 - if(_this.select) { - // 解绑select的点击事件 - $("div[dtree-id='" + _this.obj[0].id + "'][dtree-select='"+_this.selectDiv+"']").removeClass("layui-form-selected"); - $("div[dtree-id='" + _this.obj[0].id + "'][dtree-card='"+_this.selectCardDiv+"']").removeClass("dtree-select-show layui-anim layui-anim-upbit"); - $("div[dtree-id='" + _this.obj[0].id + "'][dtree-select='"+_this.selectDiv+"']").unbind(); - } - }; - - - /** 外部访问 **/ - var dtree = { - set: function(options){ //设置全局属性 - if(typeof options !== 'undefined') { - $.extend(OPTIONS, options); - } - }, - render: function(options){ // 初始化树 - var dTree = null; - var id = event.getElemId(options); - if(id == "") { - layer.msg("页面中未找到绑定id", {icon:5}); - } else { - dTree = DTrees[id]; - if(typeof dTree === 'object'){ - dTree.unbindBrowserEvent(); - } - // 创建树 - dTree = new DTree(options); - // 添加到树数组中去 - DTrees[id] = dTree; - dTree.initTreePlus(); - dTree.openTreePlus(); - dTree.loadTreeInit(); - dTree.bindBrowserEvent(); - } - - return dTree; - }, - renderSelect: function(options){ // 初始化下拉树 - var dTree = null; - var id = event.getElemId(options); - if(id == "") { - layer.msg("页面中未找到绑定id", {icon:5}); - } else { - dTree = DTrees[id]; - if(typeof dTree === 'object'){ - dTree.unbindBrowserEvent(); - } - // 创建下拉树 - dTree = new DTree(options); - dTree.selectSetting(); - // 添加到树数组中去 - DTrees[id] = dTree; - dTree.initTreePlus(); - dTree.openTreePlus(); - dTree.loadTreeInit(); - dTree.bindBrowserEvent(); - } - - return dTree; - }, - reload: function(dTree, options){ // 重新加载树 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - dTree.reloadSetting(options); - dTree.initTreePlus(); - dTree.openTreePlus(); - dTree.initNodeParam(); - dTree.loadTreeInit(); - dTree.unbindBrowserEvent(); - dTree.bindBrowserEvent(); - }, - on: function(events, callback) { // 绑定事件 - if(events.indexOf("'") > 0){ - events = events.replace(/'/g,""); - } - if(events.indexOf('"') > 0) { - events = events.replace(/"/g,""); - } - return layui.onevent.call(this, MOD_NAME, events, callback); - }, - click: function(dTree, id) { // 模拟单击事件 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - $("div[dtree-click='"+eventName.itemNodeClick+"'][dtree-id='"+dTree.obj[0].id+"'][data-id='"+id+"']").click(); - }, - getNowParam: function(dTree){ // 获取当前选中值 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.getNowParam(); // 获取当前选中值 - }, - getParam: function(dTree, id){ // 获取指定节点值 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.getParam(id); // 获取指定节点值 - }, - getParentParam: function(dTree, id){ // 获取参数的上级节点 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.getParentParam(id); - }, - getAllParentParam: function(dTree, id){ // 获取参数的全部上级节点 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.getAllParentParam(id); - }, - getChildParam: function(dTree, id){ // 获取参数的全部下级节点 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.getChildParam(id); - }, - getCheckbarNodesParam: function(dTree){ // 获取复选框选中值 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return {}; - } - return dTree.getCheckbarNodesParam(); // 获取复选框选中值 - }, - getCheckbarJsonArrParam: function(dTree){ // 获取复选框选中值 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return {}; - } - return dTree.getCheckbarJsonArrParam(); // 获取复选框选中值 - }, - dataInit: function(dTree, chooseId){ // 初始化选中树,针对数据反选 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - if(chooseId){ - return dTree.dataInit(chooseId); - } - }, - chooseDataInit: function(dTree, chooseIds){ // 初始化复选框选中,针对数据反选 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - if(chooseIds){ - return dTree.chooseDataInit(chooseIds); - } - }, - changeCheckbarNodes: function(dTree){ //判断复选框是否发生变更 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.changeCheckbarNodes(); - }, - initNoAllCheck: function(dTree) { //复选框半选状态初始化设置 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.initNoAllCheck(); - }, - initAllCheck: function(dTree){ // 复选框选中状态初始化设置 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.initAllCheck(); - }, - selectVal: function(dTree, param){ // select模式设置输入框选中值 - if(typeof dTree === "string"){ - dTree = DTrees[dTree]; - } - if(typeof dTree === "undefined"){ - layer.msg("方法获取失败,请检查ID或对象传递是否正确",{icon:2}); - return ; - } - return dTree.selectVal(param); // select模式设置输入框选中值 - }, - escape: function(html){ // 字符串格式化 - return event.escape(html); - }, - unescape: function(str){ // 字符串反格式化 - return event.unescape(str); - }, - serialize: function(first, param) { // 序列化JSON对象 - return AjaxHelper.serialize(first, param); - }, - version: function(){ //获取版本号 - return VERSION; - } - }; - - exports('dtree', dtree); -}); \ No newline at end of file diff --git a/component/pear/module/encrypt.js b/component/pear/module/encrypt.js deleted file mode 100644 index 9594f1a0f1da95d0a13f19d9b332856d711be1cf..0000000000000000000000000000000000000000 --- a/component/pear/module/encrypt.js +++ /dev/null @@ -1,1775 +0,0 @@ -/** - layui hash extend -**/ - -layui.define(function (exports) { - /** - * jshashes - https://github.com/h2non/jshashes - * Released under the "New BSD" license - * - * Algorithms specification: - * - * MD5 - http://www.ietf.org/rfc/rfc1321.txt - * RIPEMD-160 - http://homes.esat.kuleuven.be/~bosselae/ripemd160.html - * SHA1 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf - * SHA256 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf - * SHA512 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf - * HMAC - http://www.ietf.org/rfc/rfc2104.txt - */ - var pearHash; - - function utf8Encode(str) { - var x, y, output = '', - i = -1, - l; - - if (str && str.length) { - l = str.length; - while ((i += 1) < l) { - /* Decode utf-16 surrogate pairs */ - x = str.charCodeAt(i); - y = i + 1 < l ? str.charCodeAt(i + 1) : 0; - if (0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) { - x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF); - i += 1; - } - /* Encode output as utf-8 */ - if (x <= 0x7F) { - output += String.fromCharCode(x); - } else if (x <= 0x7FF) { - output += String.fromCharCode(0xC0 | ((x >>> 6) & 0x1F), - 0x80 | (x & 0x3F)); - } else if (x <= 0xFFFF) { - output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F), - 0x80 | ((x >>> 6) & 0x3F), - 0x80 | (x & 0x3F)); - } else if (x <= 0x1FFFFF) { - output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07), - 0x80 | ((x >>> 12) & 0x3F), - 0x80 | ((x >>> 6) & 0x3F), - 0x80 | (x & 0x3F)); - } - } - } - return output; - } - - function utf8Decode(str) { - var i, ac, c1, c2, c3, arr = [], - l; - i = ac = c1 = c2 = c3 = 0; - - if (str && str.length) { - l = str.length; - str += ''; - - while (i < l) { - c1 = str.charCodeAt(i); - ac += 1; - if (c1 < 128) { - arr[ac] = String.fromCharCode(c1); - i += 1; - } else if (c1 > 191 && c1 < 224) { - c2 = str.charCodeAt(i + 1); - arr[ac] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63)); - i += 2; - } else { - c2 = str.charCodeAt(i + 1); - c3 = str.charCodeAt(i + 2); - arr[ac] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); - i += 3; - } - } - } - return arr.join(''); - } - - /** - * Add integers, wrapping at 2^32. This uses 16-bit operations internally - * to work around bugs in some JS interpreters. - */ - - function safe_add(x, y) { - var lsw = (x & 0xFFFF) + (y & 0xFFFF), - msw = (x >> 16) + (y >> 16) + (lsw >> 16); - return (msw << 16) | (lsw & 0xFFFF); - } - - /** - * Bitwise rotate a 32-bit number to the left. - */ - - function bit_rol(num, cnt) { - return (num << cnt) | (num >>> (32 - cnt)); - } - - /** - * Convert a raw string to a hex string - */ - - function rstr2hex(input, hexcase) { - var hex_tab = hexcase ? '0123456789ABCDEF' : '0123456789abcdef', - output = '', - x, i = 0, - l = input.length; - for (; i < l; i += 1) { - x = input.charCodeAt(i); - output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt(x & 0x0F); - } - return output; - } - - /** - * Encode a string as utf-16 - */ - - function str2rstr_utf16le(input) { - var i, l = input.length, - output = ''; - for (i = 0; i < l; i += 1) { - output += String.fromCharCode(input.charCodeAt(i) & 0xFF, (input.charCodeAt(i) >>> 8) & 0xFF); - } - return output; - } - - function str2rstr_utf16be(input) { - var i, l = input.length, - output = ''; - for (i = 0; i < l; i += 1) { - output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF, input.charCodeAt(i) & 0xFF); - } - return output; - } - - /** - * Convert an array of big-endian words to a string - */ - - function binb2rstr(input) { - var i, l = input.length * 32, - output = ''; - for (i = 0; i < l; i += 8) { - output += String.fromCharCode((input[i >> 5] >>> (24 - i % 32)) & 0xFF); - } - return output; - } - - /** - * Convert an array of little-endian words to a string - */ - - function binl2rstr(input) { - var i, l = input.length * 32, - output = ''; - for (i = 0; i < l; i += 8) { - output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF); - } - return output; - } - - /** - * Convert a raw string to an array of little-endian words - * Characters >255 have their high-byte silently ignored. - */ - - function rstr2binl(input) { - var i, l = input.length * 8, - output = Array(input.length >> 2), - lo = output.length; - for (i = 0; i < lo; i += 1) { - output[i] = 0; - } - for (i = 0; i < l; i += 8) { - output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32); - } - return output; - } - - /** - * Convert a raw string to an array of big-endian words - * Characters >255 have their high-byte silently ignored. - */ - - function rstr2binb(input) { - var i, l = input.length * 8, - output = Array(input.length >> 2), - lo = output.length; - for (i = 0; i < lo; i += 1) { - output[i] = 0; - } - for (i = 0; i < l; i += 8) { - output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (24 - i % 32); - } - return output; - } - - /** - * Convert a raw string to an arbitrary string encoding - */ - - function rstr2any(input, encoding) { - var divisor = encoding.length, - remainders = Array(), - i, q, x, ld, quotient, dividend, output, full_length; - - /* Convert to an array of 16-bit big-endian values, forming the dividend */ - dividend = Array(Math.ceil(input.length / 2)); - ld = dividend.length; - for (i = 0; i < ld; i += 1) { - dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1); - } - - /** - * Repeatedly perform a long division. The binary array forms the dividend, - * the length of the encoding is the divisor. Once computed, the quotient - * forms the dividend for the next step. We stop when the dividend is zerHashes. - * All remainders are stored for later use. - */ - while (dividend.length > 0) { - quotient = Array(); - x = 0; - for (i = 0; i < dividend.length; i += 1) { - x = (x << 16) + dividend[i]; - q = Math.floor(x / divisor); - x -= q * divisor; - if (quotient.length > 0 || q > 0) { - quotient[quotient.length] = q; - } - } - remainders[remainders.length] = x; - dividend = quotient; - } - - /* Convert the remainders to the output string */ - output = ''; - for (i = remainders.length - 1; i >= 0; i--) { - output += encoding.charAt(remainders[i]); - } - - /* Append leading zero equivalents */ - full_length = Math.ceil(input.length * 8 / (Math.log(encoding.length) / Math.log(2))); - for (i = output.length; i < full_length; i += 1) { - output = encoding[0] + output; - } - return output; - } - - /** - * Convert a raw string to a base-64 string - */ - - function rstr2b64(input, b64pad) { - var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', - output = '', - len = input.length, - i, j, triplet; - b64pad = b64pad || '='; - for (i = 0; i < len; i += 3) { - triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0); - for (j = 0; j < 4; j += 1) { - if (i * 8 + j * 6 > input.length * 8) { - output += b64pad; - } else { - output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F); - } - } - } - return output; - } - - pearHash = { - /** - * @property {String} version - * @readonly - */ - VERSION: '1.0.6', - /** - * @member Hashes - * @class Base64 - * @constructor - */ - Base64: function () { - // private properties - var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', - pad = '=', // default pad according with the RFC standard - url = false, // URL encoding support @todo - utf8 = true; // by default enable UTF-8 support encoding - - // public method for encoding - this.encode = function (input) { - var i, j, triplet, - output = '', - len = input.length; - - pad = pad || '='; - input = (utf8) ? utf8Encode(input) : input; - - for (i = 0; i < len; i += 3) { - triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0); - for (j = 0; j < 4; j += 1) { - if (i * 8 + j * 6 > len * 8) { - output += pad; - } else { - output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F); - } - } - } - return output; - }; - - // public method for decoding - this.decode = function (input) { - // var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - var i, o1, o2, o3, h1, h2, h3, h4, bits, ac, - dec = '', - arr = []; - if (!input) { - return input; - } - - i = ac = 0; - input = input.replace(new RegExp('\\' + pad, 'gi'), ''); // use '=' - //input += ''; - - do { // unpack four hexets into three octets using index points in b64 - h1 = tab.indexOf(input.charAt(i += 1)); - h2 = tab.indexOf(input.charAt(i += 1)); - h3 = tab.indexOf(input.charAt(i += 1)); - h4 = tab.indexOf(input.charAt(i += 1)); - - bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; - - o1 = bits >> 16 & 0xff; - o2 = bits >> 8 & 0xff; - o3 = bits & 0xff; - ac += 1; - - if (h3 === 64) { - arr[ac] = String.fromCharCode(o1); - } else if (h4 === 64) { - arr[ac] = String.fromCharCode(o1, o2); - } else { - arr[ac] = String.fromCharCode(o1, o2, o3); - } - } while (i < input.length); - - dec = arr.join(''); - dec = (utf8) ? utf8Decode(dec) : dec; - - return dec; - }; - - // set custom pad string - this.setPad = function (str) { - pad = str || pad; - return this; - }; - // set custom tab string characters - this.setTab = function (str) { - tab = str || tab; - return this; - }; - this.setUTF8 = function (bool) { - if (typeof bool === 'boolean') { - utf8 = bool; - } - return this; - }; - }, - - /** - * CRC-32 calculation - * @member Hashes - * @method CRC32 - * @static - * @param {String} str Input String - * @return {String} - */ - CRC32: function (str) { - var crc = 0, - x = 0, - y = 0, - table, i, iTop; - str = utf8Encode(str); - - table = [ - '00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 ', - '79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 ', - '84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F ', - '63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD ', - 'A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC ', - '51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 ', - 'B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 ', - '06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 ', - 'E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 ', - '12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 ', - 'D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 ', - '33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 ', - 'CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 ', - '9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E ', - '7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D ', - '806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 ', - '60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA ', - 'AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 ', - '5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 ', - 'B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 ', - '05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 ', - 'F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA ', - '11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 ', - 'D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F ', - '30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E ', - 'C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D' - ].join(''); - - crc = crc ^ (-1); - for (i = 0, iTop = str.length; i < iTop; i += 1) { - y = (crc ^ str.charCodeAt(i)) & 0xFF; - x = '0x' + table.substr(y * 9, 8); - crc = (crc >>> 8) ^ x; - } - // always return a positive number (that's what >>> 0 does) - return (crc ^ (-1)) >>> 0; - }, - /** - * @member Hashes - * @class MD5 - * @constructor - * @param {Object} [config] - * - * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message - * Digest Algorithm, as defined in RFC 1321. - * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * See for more infHashes. - */ - MD5: function (options) { - /** - * Private config properties. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase} - */ - var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase - b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance - utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding - - // privileged (public) methods - this.hex = function (s) { - return rstr2hex(rstr(s, utf8), hexcase); - }; - this.b64 = function (s) { - return rstr2b64(rstr(s), b64pad); - }; - this.any = function (s, e) { - return rstr2any(rstr(s, utf8), e); - }; - this.raw = function (s) { - return rstr(s, utf8); - }; - this.hex_hmac = function (k, d) { - return rstr2hex(rstr_hmac(k, d), hexcase); - }; - this.b64_hmac = function (k, d) { - return rstr2b64(rstr_hmac(k, d), b64pad); - }; - this.any_hmac = function (k, d, e) { - return rstr2any(rstr_hmac(k, d), e); - }; - /** - * Perform a simple self-test to see if the VM is working - * @return {String} Hexadecimal hash sample - */ - this.vm_test = function () { - return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; - }; - /** - * Enable/disable uppercase hexadecimal returned string - * @param {Boolean} - * @return {Object} this - */ - this.setUpperCase = function (a) { - if (typeof a === 'boolean') { - hexcase = a; - } - return this; - }; - /** - * Defines a base64 pad string - * @param {String} Pad - * @return {Object} this - */ - this.setPad = function (a) { - b64pad = a || b64pad; - return this; - }; - /** - * Defines a base64 pad string - * @param {Boolean} - * @return {Object} [this] - */ - this.setUTF8 = function (a) { - if (typeof a === 'boolean') { - utf8 = a; - } - return this; - }; - - // private methods - - /** - * Calculate the MD5 of a raw string - */ - - function rstr(s) { - s = (utf8) ? utf8Encode(s) : s; - return binl2rstr(binl(rstr2binl(s), s.length * 8)); - } - - /** - * Calculate the HMAC-MD5, of a key and some data (raw strings) - */ - - function rstr_hmac(key, data) { - var bkey, ipad, opad, hash, i; - - key = (utf8) ? utf8Encode(key) : key; - data = (utf8) ? utf8Encode(data) : data; - bkey = rstr2binl(key); - if (bkey.length > 16) { - bkey = binl(bkey, key.length * 8); - } - - ipad = Array(16), opad = Array(16); - for (i = 0; i < 16; i += 1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8); - return binl2rstr(binl(opad.concat(hash), 512 + 128)); - } - - /** - * Calculate the MD5 of an array of little-endian words, and a bit length. - */ - - function binl(x, len) { - var i, olda, oldb, oldc, oldd, - a = 1732584193, - b = -271733879, - c = -1732584194, - d = 271733878; - - /* append padding */ - x[len >> 5] |= 0x80 << ((len) % 32); - x[(((len + 64) >>> 9) << 4) + 14] = len; - - for (i = 0; i < x.length; i += 16) { - olda = a; - oldb = b; - oldc = c; - oldd = d; - - a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936); - d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586); - c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819); - b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330); - a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897); - d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426); - c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341); - b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983); - a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416); - d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417); - c = md5_ff(c, d, a, b, x[i + 10], 17, -42063); - b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162); - a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682); - d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101); - c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290); - b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329); - - a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510); - d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632); - c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713); - b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302); - a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691); - d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083); - c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335); - b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848); - a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438); - d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690); - c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961); - b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501); - a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467); - d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784); - c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473); - b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734); - - a = md5_hh(a, b, c, d, x[i + 5], 4, -378558); - d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463); - c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562); - b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556); - a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060); - d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353); - c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632); - b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640); - a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174); - d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222); - c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979); - b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189); - a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487); - d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835); - c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520); - b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651); - - a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844); - d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415); - c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905); - b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055); - a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571); - d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606); - c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523); - b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799); - a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359); - d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744); - c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380); - b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649); - a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070); - d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379); - c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259); - b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551); - - a = safe_add(a, olda); - b = safe_add(b, oldb); - c = safe_add(c, oldc); - d = safe_add(d, oldd); - } - return Array(a, b, c, d); - } - - /** - * These functions implement the four basic operations the algorithm uses. - */ - - function md5_cmn(q, a, b, x, s, t) { - return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b); - } - - function md5_ff(a, b, c, d, x, s, t) { - return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); - } - - function md5_gg(a, b, c, d, x, s, t) { - return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); - } - - function md5_hh(a, b, c, d, x, s, t) { - return md5_cmn(b ^ c ^ d, a, b, x, s, t); - } - - function md5_ii(a, b, c, d, x, s, t) { - return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); - } - }, - /** - * @member Hashes - * @class Hashes.SHA1 - * @param {Object} [config] - * @constructor - * - * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined in FIPS 180-1 - * Version 2.2 Copyright Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * See http://pajhome.org.uk/crypt/md5 for details. - */ - SHA1: function (options) { - /** - * Private config properties. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase} - */ - var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase - b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance - utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding - - // public methods - this.hex = function (s) { - return rstr2hex(rstr(s, utf8), hexcase); - }; - this.b64 = function (s) { - return rstr2b64(rstr(s, utf8), b64pad); - }; - this.any = function (s, e) { - return rstr2any(rstr(s, utf8), e); - }; - this.raw = function (s) { - return rstr(s, utf8); - }; - this.hex_hmac = function (k, d) { - return rstr2hex(rstr_hmac(k, d)); - }; - this.b64_hmac = function (k, d) { - return rstr2b64(rstr_hmac(k, d), b64pad); - }; - this.any_hmac = function (k, d, e) { - return rstr2any(rstr_hmac(k, d), e); - }; - /** - * Perform a simple self-test to see if the VM is working - * @return {String} Hexadecimal hash sample - * @public - */ - this.vm_test = function () { - return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; - }; - /** - * @description Enable/disable uppercase hexadecimal returned string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUpperCase = function (a) { - if (typeof a === 'boolean') { - hexcase = a; - } - return this; - }; - /** - * @description Defines a base64 pad string - * @param {string} Pad - * @return {Object} this - * @public - */ - this.setPad = function (a) { - b64pad = a || b64pad; - return this; - }; - /** - * @description Defines a base64 pad string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUTF8 = function (a) { - if (typeof a === 'boolean') { - utf8 = a; - } - return this; - }; - - // private methods - - /** - * Calculate the SHA-512 of a raw string - */ - - function rstr(s) { - s = (utf8) ? utf8Encode(s) : s; - return binb2rstr(binb(rstr2binb(s), s.length * 8)); - } - - /** - * Calculate the HMAC-SHA1 of a key and some data (raw strings) - */ - - function rstr_hmac(key, data) { - var bkey, ipad, opad, i, hash; - key = (utf8) ? utf8Encode(key) : key; - data = (utf8) ? utf8Encode(data) : data; - bkey = rstr2binb(key); - - if (bkey.length > 16) { - bkey = binb(bkey, key.length * 8); - } - ipad = Array(16), opad = Array(16); - for (i = 0; i < 16; i += 1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8); - return binb2rstr(binb(opad.concat(hash), 512 + 160)); - } - - /** - * Calculate the SHA-1 of an array of big-endian words, and a bit length - */ - - function binb(x, len) { - var i, j, t, olda, oldb, oldc, oldd, olde, - w = Array(80), - a = 1732584193, - b = -271733879, - c = -1732584194, - d = 271733878, - e = -1009589776; - - /* append padding */ - x[len >> 5] |= 0x80 << (24 - len % 32); - x[((len + 64 >> 9) << 4) + 15] = len; - - for (i = 0; i < x.length; i += 16) { - olda = a; - oldb = b; - oldc = c; - oldd = d; - olde = e; - - for (j = 0; j < 80; j += 1) { - if (j < 16) { - w[j] = x[i + j]; - } else { - w[j] = bit_rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1); - } - t = safe_add(safe_add(bit_rol(a, 5), sha1_ft(j, b, c, d)), - safe_add(safe_add(e, w[j]), sha1_kt(j))); - e = d; - d = c; - c = bit_rol(b, 30); - b = a; - a = t; - } - - a = safe_add(a, olda); - b = safe_add(b, oldb); - c = safe_add(c, oldc); - d = safe_add(d, oldd); - e = safe_add(e, olde); - } - return Array(a, b, c, d, e); - } - - /** - * Perform the appropriate triplet combination function for the current - * iteration - */ - - function sha1_ft(t, b, c, d) { - if (t < 20) { - return (b & c) | ((~b) & d); - } - if (t < 40) { - return b ^ c ^ d; - } - if (t < 60) { - return (b & c) | (b & d) | (c & d); - } - return b ^ c ^ d; - } - - /** - * Determine the appropriate additive constant for the current iteration - */ - - function sha1_kt(t) { - return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : - (t < 60) ? -1894007588 : -899497514; - } - }, - /** - * @class Hashes.SHA256 - * @param {config} - * - * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined in FIPS 180-2 - * Version 2.2 Copyright Angel Marin, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * See http://pajhome.org.uk/crypt/md5 for details. - * Also http://anmar.eu.org/projects/jssha2/ - */ - SHA256: function (options) { - /** - * Private properties configuration variables. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - * @see this.setUpperCase() method - * @see this.setPad() method - */ - var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase */ - b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', - /* base-64 pad character. Default '=' for strict RFC compliance */ - utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true, - /* enable/disable utf8 encoding */ - sha256_K; - - /* privileged (public) methods */ - this.hex = function (s) { - return rstr2hex(rstr(s, utf8)); - }; - this.b64 = function (s) { - return rstr2b64(rstr(s, utf8), b64pad); - }; - this.any = function (s, e) { - return rstr2any(rstr(s, utf8), e); - }; - this.raw = function (s) { - return rstr(s, utf8); - }; - this.hex_hmac = function (k, d) { - return rstr2hex(rstr_hmac(k, d)); - }; - this.b64_hmac = function (k, d) { - return rstr2b64(rstr_hmac(k, d), b64pad); - }; - this.any_hmac = function (k, d, e) { - return rstr2any(rstr_hmac(k, d), e); - }; - /** - * Perform a simple self-test to see if the VM is working - * @return {String} Hexadecimal hash sample - * @public - */ - this.vm_test = function () { - return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; - }; - /** - * Enable/disable uppercase hexadecimal returned string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUpperCase = function (a) { - if (typeof a === 'boolean') { - hexcase = a; - } - return this; - }; - /** - * @description Defines a base64 pad string - * @param {string} Pad - * @return {Object} this - * @public - */ - this.setPad = function (a) { - b64pad = a || b64pad; - return this; - }; - /** - * Defines a base64 pad string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUTF8 = function (a) { - if (typeof a === 'boolean') { - utf8 = a; - } - return this; - }; - - // private methods - - /** - * Calculate the SHA-512 of a raw string - */ - - function rstr(s, utf8) { - s = (utf8) ? utf8Encode(s) : s; - return binb2rstr(binb(rstr2binb(s), s.length * 8)); - } - - /** - * Calculate the HMAC-sha256 of a key and some data (raw strings) - */ - - function rstr_hmac(key, data) { - key = (utf8) ? utf8Encode(key) : key; - data = (utf8) ? utf8Encode(data) : data; - var hash, i = 0, - bkey = rstr2binb(key), - ipad = Array(16), - opad = Array(16); - - if (bkey.length > 16) { - bkey = binb(bkey, key.length * 8); - } - - for (; i < 16; i += 1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - - hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8); - return binb2rstr(binb(opad.concat(hash), 512 + 256)); - } - - /* - * Main sha256 function, with its support functions - */ - - function sha256_S(X, n) { - return (X >>> n) | (X << (32 - n)); - } - - function sha256_R(X, n) { - return (X >>> n); - } - - function sha256_Ch(x, y, z) { - return ((x & y) ^ ((~x) & z)); - } - - function sha256_Maj(x, y, z) { - return ((x & y) ^ (x & z) ^ (y & z)); - } - - function sha256_Sigma0256(x) { - return (sha256_S(x, 2) ^ sha256_S(x, 13) ^ sha256_S(x, 22)); - } - - function sha256_Sigma1256(x) { - return (sha256_S(x, 6) ^ sha256_S(x, 11) ^ sha256_S(x, 25)); - } - - function sha256_Gamma0256(x) { - return (sha256_S(x, 7) ^ sha256_S(x, 18) ^ sha256_R(x, 3)); - } - - function sha256_Gamma1256(x) { - return (sha256_S(x, 17) ^ sha256_S(x, 19) ^ sha256_R(x, 10)); - } - - function sha256_Sigma0512(x) { - return (sha256_S(x, 28) ^ sha256_S(x, 34) ^ sha256_S(x, 39)); - } - - function sha256_Sigma1512(x) { - return (sha256_S(x, 14) ^ sha256_S(x, 18) ^ sha256_S(x, 41)); - } - - function sha256_Gamma0512(x) { - return (sha256_S(x, 1) ^ sha256_S(x, 8) ^ sha256_R(x, 7)); - } - - function sha256_Gamma1512(x) { - return (sha256_S(x, 19) ^ sha256_S(x, 61) ^ sha256_R(x, 6)); - } - - sha256_K = [ - 1116352408, 1899447441, -1245643825, -373957723, 961987163, 1508970993, -1841331548, -1424204075, -670586216, 310598401, 607225278, 1426881987, - 1925078388, -2132889090, -1680079193, -1046744716, -459576895, -272742522, - 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, -1740746414, -1473132947, -1341970488, -1084653625, -958395405, -710438585, - 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, - 1695183700, 1986661051, -2117940946, -1838011259, -1564481375, -1474664885, -1035236496, -949202525, -778901479, -694614492, -200395387, 275423344, - 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, - 1537002063, 1747873779, 1955562222, 2024104815, -2067236844, -1933114872, -1866530822, -1538233109, -1090935817, -965641998 - ]; - - function binb(m, l) { - var HASH = [1779033703, -1150833019, 1013904242, -1521486534, - 1359893119, -1694144372, 528734635, 1541459225 - ]; - var W = new Array(64); - var a, b, c, d, e, f, g, h; - var i, j, T1, T2; - - /* append padding */ - m[l >> 5] |= 0x80 << (24 - l % 32); - m[((l + 64 >> 9) << 4) + 15] = l; - - for (i = 0; i < m.length; i += 16) { - a = HASH[0]; - b = HASH[1]; - c = HASH[2]; - d = HASH[3]; - e = HASH[4]; - f = HASH[5]; - g = HASH[6]; - h = HASH[7]; - - for (j = 0; j < 64; j += 1) { - if (j < 16) { - W[j] = m[j + i]; - } else { - W[j] = safe_add(safe_add(safe_add(sha256_Gamma1256(W[j - 2]), W[j - 7]), - sha256_Gamma0256(W[j - 15])), W[j - 16]); - } - - T1 = safe_add(safe_add(safe_add(safe_add(h, sha256_Sigma1256(e)), sha256_Ch(e, f, g)), - sha256_K[j]), W[j]); - T2 = safe_add(sha256_Sigma0256(a), sha256_Maj(a, b, c)); - h = g; - g = f; - f = e; - e = safe_add(d, T1); - d = c; - c = b; - b = a; - a = safe_add(T1, T2); - } - - HASH[0] = safe_add(a, HASH[0]); - HASH[1] = safe_add(b, HASH[1]); - HASH[2] = safe_add(c, HASH[2]); - HASH[3] = safe_add(d, HASH[3]); - HASH[4] = safe_add(e, HASH[4]); - HASH[5] = safe_add(f, HASH[5]); - HASH[6] = safe_add(g, HASH[6]); - HASH[7] = safe_add(h, HASH[7]); - } - return HASH; - } - - }, - - /** - * @class Hashes.SHA512 - * @param {config} - * - * A JavaScript implementation of the Secure Hash Algorithm, SHA-512, as defined in FIPS 180-2 - * Version 2.2 Copyright Anonymous Contributor, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * See http://pajhome.org.uk/crypt/md5 for details. - */ - SHA512: function (options) { - /** - * Private properties configuration variables. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - * @see this.setUpperCase() method - * @see this.setPad() method - */ - var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, - /* hexadecimal output case format. false - lowercase; true - uppercase */ - b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', - /* base-64 pad character. Default '=' for strict RFC compliance */ - utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true, - /* enable/disable utf8 encoding */ - sha512_k; - - /* privileged (public) methods */ - this.hex = function (s) { - return rstr2hex(rstr(s)); - }; - this.b64 = function (s) { - return rstr2b64(rstr(s), b64pad); - }; - this.any = function (s, e) { - return rstr2any(rstr(s), e); - }; - this.raw = function (s) { - return rstr(s, utf8); - }; - this.hex_hmac = function (k, d) { - return rstr2hex(rstr_hmac(k, d)); - }; - this.b64_hmac = function (k, d) { - return rstr2b64(rstr_hmac(k, d), b64pad); - }; - this.any_hmac = function (k, d, e) { - return rstr2any(rstr_hmac(k, d), e); - }; - /** - * Perform a simple self-test to see if the VM is working - * @return {String} Hexadecimal hash sample - * @public - */ - this.vm_test = function () { - return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; - }; - /** - * @description Enable/disable uppercase hexadecimal returned string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUpperCase = function (a) { - if (typeof a === 'boolean') { - hexcase = a; - } - return this; - }; - /** - * @description Defines a base64 pad string - * @param {string} Pad - * @return {Object} this - * @public - */ - this.setPad = function (a) { - b64pad = a || b64pad; - return this; - }; - /** - * @description Defines a base64 pad string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUTF8 = function (a) { - if (typeof a === 'boolean') { - utf8 = a; - } - return this; - }; - - /* private methods */ - - /** - * Calculate the SHA-512 of a raw string - */ - - function rstr(s) { - s = (utf8) ? utf8Encode(s) : s; - return binb2rstr(binb(rstr2binb(s), s.length * 8)); - } - /* - * Calculate the HMAC-SHA-512 of a key and some data (raw strings) - */ - - function rstr_hmac(key, data) { - key = (utf8) ? utf8Encode(key) : key; - data = (utf8) ? utf8Encode(data) : data; - - var hash, i = 0, - bkey = rstr2binb(key), - ipad = Array(32), - opad = Array(32); - - if (bkey.length > 32) { - bkey = binb(bkey, key.length * 8); - } - - for (; i < 32; i += 1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - - hash = binb(ipad.concat(rstr2binb(data)), 1024 + data.length * 8); - return binb2rstr(binb(opad.concat(hash), 1024 + 512)); - } - - /** - * Calculate the SHA-512 of an array of big-endian dwords, and a bit length - */ - - function binb(x, len) { - var j, i, l, - W = new Array(80), - hash = new Array(16), - //Initial hash values - H = [ - new int64(0x6a09e667, -205731576), - new int64(-1150833019, -2067093701), - new int64(0x3c6ef372, -23791573), - new int64(-1521486534, 0x5f1d36f1), - new int64(0x510e527f, -1377402159), - new int64(-1694144372, 0x2b3e6c1f), - new int64(0x1f83d9ab, -79577749), - new int64(0x5be0cd19, 0x137e2179) - ], - T1 = new int64(0, 0), - T2 = new int64(0, 0), - a = new int64(0, 0), - b = new int64(0, 0), - c = new int64(0, 0), - d = new int64(0, 0), - e = new int64(0, 0), - f = new int64(0, 0), - g = new int64(0, 0), - h = new int64(0, 0), - //Temporary variables not specified by the document - s0 = new int64(0, 0), - s1 = new int64(0, 0), - Ch = new int64(0, 0), - Maj = new int64(0, 0), - r1 = new int64(0, 0), - r2 = new int64(0, 0), - r3 = new int64(0, 0); - - if (sha512_k === undefined) { - //SHA512 constants - sha512_k = [ - new int64(0x428a2f98, -685199838), new int64(0x71374491, 0x23ef65cd), - new int64(-1245643825, -330482897), new int64(-373957723, -2121671748), - new int64(0x3956c25b, -213338824), new int64(0x59f111f1, -1241133031), - new int64(-1841331548, -1357295717), new int64(-1424204075, -630357736), - new int64(-670586216, -1560083902), new int64(0x12835b01, 0x45706fbe), - new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, -704662302), - new int64(0x72be5d74, -226784913), new int64(-2132889090, 0x3b1696b1), - new int64(-1680079193, 0x25c71235), new int64(-1046744716, -815192428), - new int64(-459576895, -1628353838), new int64(-272742522, 0x384f25e3), - new int64(0xfc19dc6, -1953704523), new int64(0x240ca1cc, 0x77ac9c65), - new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483), - new int64(0x5cb0a9dc, -1119749164), new int64(0x76f988da, -2096016459), - new int64(-1740746414, -295247957), new int64(-1473132947, 0x2db43210), - new int64(-1341970488, -1728372417), new int64(-1084653625, -1091629340), - new int64(-958395405, 0x3da88fc2), new int64(-710438585, -1828018395), - new int64(0x6ca6351, -536640913), new int64(0x14292967, 0xa0e6e70), - new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926), - new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, -1651133473), - new int64(0x650a7354, -1951439906), new int64(0x766a0abb, 0x3c77b2a8), - new int64(-2117940946, 0x47edaee6), new int64(-1838011259, 0x1482353b), - new int64(-1564481375, 0x4cf10364), new int64(-1474664885, -1136513023), - new int64(-1035236496, -789014639), new int64(-949202525, 0x654be30), - new int64(-778901479, -688958952), new int64(-694614492, 0x5565a910), - new int64(-200395387, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8), - new int64(0x19a4c116, -1194143544), new int64(0x1e376c08, 0x5141ab53), - new int64(0x2748774c, -544281703), new int64(0x34b0bcb5, -509917016), - new int64(0x391c0cb3, -976659869), new int64(0x4ed8aa4a, -482243893), - new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, -692930397), - new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60), - new int64(-2067236844, -1578062990), new int64(-1933114872, 0x1a6439ec), - new int64(-1866530822, 0x23631e28), new int64(-1538233109, -561857047), - new int64(-1090935817, -1295615723), new int64(-965641998, -479046869), - new int64(-903397682, -366583396), new int64(-779700025, 0x21c0c207), - new int64(-354779690, -840897762), new int64(-176337025, -294727304), - new int64(0x6f067aa, 0x72176fba), new int64(0xa637dc5, -1563912026), - new int64(0x113f9804, -1090974290), new int64(0x1b710b35, 0x131c471b), - new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493), - new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, -1676669620), - new int64(0x4cc5d4be, -885112138), new int64(0x597f299c, -60457430), - new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817) - ]; - } - - for (i = 0; i < 80; i += 1) { - W[i] = new int64(0, 0); - } - - // append padding to the source string. The format is described in the FIPS. - x[len >> 5] |= 0x80 << (24 - (len & 0x1f)); - x[((len + 128 >> 10) << 5) + 31] = len; - l = x.length; - for (i = 0; i < l; i += 32) { //32 dwords is the block size - int64copy(a, H[0]); - int64copy(b, H[1]); - int64copy(c, H[2]); - int64copy(d, H[3]); - int64copy(e, H[4]); - int64copy(f, H[5]); - int64copy(g, H[6]); - int64copy(h, H[7]); - - for (j = 0; j < 16; j += 1) { - W[j].h = x[i + 2 * j]; - W[j].l = x[i + 2 * j + 1]; - } - - for (j = 16; j < 80; j += 1) { - //sigma1 - int64rrot(r1, W[j - 2], 19); - int64revrrot(r2, W[j - 2], 29); - int64shr(r3, W[j - 2], 6); - s1.l = r1.l ^ r2.l ^ r3.l; - s1.h = r1.h ^ r2.h ^ r3.h; - //sigma0 - int64rrot(r1, W[j - 15], 1); - int64rrot(r2, W[j - 15], 8); - int64shr(r3, W[j - 15], 7); - s0.l = r1.l ^ r2.l ^ r3.l; - s0.h = r1.h ^ r2.h ^ r3.h; - - int64add4(W[j], s1, W[j - 7], s0, W[j - 16]); - } - - for (j = 0; j < 80; j += 1) { - //Ch - Ch.l = (e.l & f.l) ^ (~e.l & g.l); - Ch.h = (e.h & f.h) ^ (~e.h & g.h); - - //Sigma1 - int64rrot(r1, e, 14); - int64rrot(r2, e, 18); - int64revrrot(r3, e, 9); - s1.l = r1.l ^ r2.l ^ r3.l; - s1.h = r1.h ^ r2.h ^ r3.h; - - //Sigma0 - int64rrot(r1, a, 28); - int64revrrot(r2, a, 2); - int64revrrot(r3, a, 7); - s0.l = r1.l ^ r2.l ^ r3.l; - s0.h = r1.h ^ r2.h ^ r3.h; - - //Maj - Maj.l = (a.l & b.l) ^ (a.l & c.l) ^ (b.l & c.l); - Maj.h = (a.h & b.h) ^ (a.h & c.h) ^ (b.h & c.h); - - int64add5(T1, h, s1, Ch, sha512_k[j], W[j]); - int64add(T2, s0, Maj); - - int64copy(h, g); - int64copy(g, f); - int64copy(f, e); - int64add(e, d, T1); - int64copy(d, c); - int64copy(c, b); - int64copy(b, a); - int64add(a, T1, T2); - } - int64add(H[0], H[0], a); - int64add(H[1], H[1], b); - int64add(H[2], H[2], c); - int64add(H[3], H[3], d); - int64add(H[4], H[4], e); - int64add(H[5], H[5], f); - int64add(H[6], H[6], g); - int64add(H[7], H[7], h); - } - - //represent the hash as an array of 32-bit dwords - for (i = 0; i < 8; i += 1) { - hash[2 * i] = H[i].h; - hash[2 * i + 1] = H[i].l; - } - return hash; - } - - //A constructor for 64-bit numbers - - function int64(h, l) { - this.h = h; - this.l = l; - //this.toString = int64toString; - } - - //Copies src into dst, assuming both are 64-bit numbers - - function int64copy(dst, src) { - dst.h = src.h; - dst.l = src.l; - } - - //Right-rotates a 64-bit number by shift - //Won't handle cases of shift>=32 - //The function revrrot() is for that - - function int64rrot(dst, x, shift) { - dst.l = (x.l >>> shift) | (x.h << (32 - shift)); - dst.h = (x.h >>> shift) | (x.l << (32 - shift)); - } - - //Reverses the dwords of the source and then rotates right by shift. - //This is equivalent to rotation by 32+shift - - function int64revrrot(dst, x, shift) { - dst.l = (x.h >>> shift) | (x.l << (32 - shift)); - dst.h = (x.l >>> shift) | (x.h << (32 - shift)); - } - - //Bitwise-shifts right a 64-bit number by shift - //Won't handle shift>=32, but it's never needed in SHA512 - - function int64shr(dst, x, shift) { - dst.l = (x.l >>> shift) | (x.h << (32 - shift)); - dst.h = (x.h >>> shift); - } - - //Adds two 64-bit numbers - //Like the original implementation, does not rely on 32-bit operations - - function int64add(dst, x, y) { - var w0 = (x.l & 0xffff) + (y.l & 0xffff); - var w1 = (x.l >>> 16) + (y.l >>> 16) + (w0 >>> 16); - var w2 = (x.h & 0xffff) + (y.h & 0xffff) + (w1 >>> 16); - var w3 = (x.h >>> 16) + (y.h >>> 16) + (w2 >>> 16); - dst.l = (w0 & 0xffff) | (w1 << 16); - dst.h = (w2 & 0xffff) | (w3 << 16); - } - - //Same, except with 4 addends. Works faster than adding them one by one. - - function int64add4(dst, a, b, c, d) { - var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff); - var w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (w0 >>> 16); - var w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (w1 >>> 16); - var w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (w2 >>> 16); - dst.l = (w0 & 0xffff) | (w1 << 16); - dst.h = (w2 & 0xffff) | (w3 << 16); - } - - //Same, except with 5 addends - - function int64add5(dst, a, b, c, d, e) { - var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff) + (e.l & 0xffff), - w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (e.l >>> 16) + (w0 >>> 16), - w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (e.h & 0xffff) + (w1 >>> 16), - w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (e.h >>> 16) + (w2 >>> 16); - dst.l = (w0 & 0xffff) | (w1 << 16); - dst.h = (w2 & 0xffff) | (w3 << 16); - } - }, - /** - * @class Hashes.RMD160 - * @constructor - * @param {Object} [config] - * - * A JavaScript implementation of the RIPEMD-160 Algorithm - * Version 2.2 Copyright Jeremy Lin, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * See http://pajhome.org.uk/crypt/md5 for details. - * Also http://www.ocf.berkeley.edu/~jjlin/jsotp/ - */ - RMD160: function (options) { - /** - * Private properties configuration variables. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - * @see this.setUpperCase() method - * @see this.setPad() method - */ - var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, - /* hexadecimal output case format. false - lowercase; true - uppercase */ - b64pad = (options && typeof options.pad === 'string') ? options.pa : '=', - /* base-64 pad character. Default '=' for strict RFC compliance */ - utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true, - /* enable/disable utf8 encoding */ - rmd160_r1 = [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 - ], - rmd160_r2 = [ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 - ], - rmd160_s1 = [ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 - ], - rmd160_s2 = [ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 - ]; - - /* privileged (public) methods */ - this.hex = function (s) { - return rstr2hex(rstr(s, utf8)); - }; - this.b64 = function (s) { - return rstr2b64(rstr(s, utf8), b64pad); - }; - this.any = function (s, e) { - return rstr2any(rstr(s, utf8), e); - }; - this.raw = function (s) { - return rstr(s, utf8); - }; - this.hex_hmac = function (k, d) { - return rstr2hex(rstr_hmac(k, d)); - }; - this.b64_hmac = function (k, d) { - return rstr2b64(rstr_hmac(k, d), b64pad); - }; - this.any_hmac = function (k, d, e) { - return rstr2any(rstr_hmac(k, d), e); - }; - /** - * Perform a simple self-test to see if the VM is working - * @return {String} Hexadecimal hash sample - * @public - */ - this.vm_test = function () { - return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; - }; - /** - * @description Enable/disable uppercase hexadecimal returned string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUpperCase = function (a) { - if (typeof a === 'boolean') { - hexcase = a; - } - return this; - }; - /** - * @description Defines a base64 pad string - * @param {string} Pad - * @return {Object} this - * @public - */ - this.setPad = function (a) { - if (typeof a !== 'undefined') { - b64pad = a; - } - return this; - }; - /** - * @description Defines a base64 pad string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUTF8 = function (a) { - if (typeof a === 'boolean') { - utf8 = a; - } - return this; - }; - - /* private methods */ - - /** - * Calculate the rmd160 of a raw string - */ - - function rstr(s) { - s = (utf8) ? utf8Encode(s) : s; - return binl2rstr(binl(rstr2binl(s), s.length * 8)); - } - - /** - * Calculate the HMAC-rmd160 of a key and some data (raw strings) - */ - - function rstr_hmac(key, data) { - key = (utf8) ? utf8Encode(key) : key; - data = (utf8) ? utf8Encode(data) : data; - var i, hash, - bkey = rstr2binl(key), - ipad = Array(16), - opad = Array(16); - - if (bkey.length > 16) { - bkey = binl(bkey, key.length * 8); - } - - for (i = 0; i < 16; i += 1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8); - return binl2rstr(binl(opad.concat(hash), 512 + 160)); - } - - /** - * Convert an array of little-endian words to a string - */ - - function binl2rstr(input) { - var i, output = '', - l = input.length * 32; - for (i = 0; i < l; i += 8) { - output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF); - } - return output; - } - - /** - * Calculate the RIPE-MD160 of an array of little-endian words, and a bit length. - */ - - function binl(x, len) { - var T, j, i, l, - h0 = 0x67452301, - h1 = 0xefcdab89, - h2 = 0x98badcfe, - h3 = 0x10325476, - h4 = 0xc3d2e1f0, - A1, B1, C1, D1, E1, - A2, B2, C2, D2, E2; - - /* append padding */ - x[len >> 5] |= 0x80 << (len % 32); - x[(((len + 64) >>> 9) << 4) + 14] = len; - l = x.length; - - for (i = 0; i < l; i += 16) { - A1 = A2 = h0; - B1 = B2 = h1; - C1 = C2 = h2; - D1 = D2 = h3; - E1 = E2 = h4; - for (j = 0; j <= 79; j += 1) { - T = safe_add(A1, rmd160_f(j, B1, C1, D1)); - T = safe_add(T, x[i + rmd160_r1[j]]); - T = safe_add(T, rmd160_K1(j)); - T = safe_add(bit_rol(T, rmd160_s1[j]), E1); - A1 = E1; - E1 = D1; - D1 = bit_rol(C1, 10); - C1 = B1; - B1 = T; - T = safe_add(A2, rmd160_f(79 - j, B2, C2, D2)); - T = safe_add(T, x[i + rmd160_r2[j]]); - T = safe_add(T, rmd160_K2(j)); - T = safe_add(bit_rol(T, rmd160_s2[j]), E2); - A2 = E2; - E2 = D2; - D2 = bit_rol(C2, 10); - C2 = B2; - B2 = T; - } - - T = safe_add(h1, safe_add(C1, D2)); - h1 = safe_add(h2, safe_add(D1, E2)); - h2 = safe_add(h3, safe_add(E1, A2)); - h3 = safe_add(h4, safe_add(A1, B2)); - h4 = safe_add(h0, safe_add(B1, C2)); - h0 = T; - } - return [h0, h1, h2, h3, h4]; - } - - // specific algorithm methods - - function rmd160_f(j, x, y, z) { - return (0 <= j && j <= 15) ? (x ^ y ^ z) : - (16 <= j && j <= 31) ? (x & y) | (~x & z) : - (32 <= j && j <= 47) ? (x | ~y) ^ z : - (48 <= j && j <= 63) ? (x & z) | (y & ~z) : - (64 <= j && j <= 79) ? x ^ (y | ~z) : - 'rmd160_f: j out of range'; - } - - function rmd160_K1(j) { - return (0 <= j && j <= 15) ? 0x00000000 : - (16 <= j && j <= 31) ? 0x5a827999 : - (32 <= j && j <= 47) ? 0x6ed9eba1 : - (48 <= j && j <= 63) ? 0x8f1bbcdc : - (64 <= j && j <= 79) ? 0xa953fd4e : - 'rmd160_K1: j out of range'; - } - - function rmd160_K2(j) { - return (0 <= j && j <= 15) ? 0x50a28be6 : - (16 <= j && j <= 31) ? 0x5c4dd124 : - (32 <= j && j <= 47) ? 0x6d703ef3 : - (48 <= j && j <= 63) ? 0x7a6d76e9 : - (64 <= j && j <= 79) ? 0x00000000 : - 'rmd160_K2: j out of range'; - } - } - }; - - // new MD5 instance - var MD5 = new pearHash.MD5 - // new SHA1 instance - var SHA1 = new pearHash.SHA1 - // new SHA256 instance - var SHA256 = new pearHash.SHA256 - // new SHA512 instace - var SHA512 = new pearHash.SHA512 - // new RIPEMD-160 instace - var RMD160 = new pearHash.RMD160 - var Base64 = new pearHash.Base64 - - pearHash.md5 = function (str) { - return MD5.hex(str); - } - pearHash.sha1 = function (str) { - return SHA1.hex(str); - } - pearHash.sha256 = function (str) { - return SHA256.hex(str); - } - pearHash.sha512 = function (str) { - return SHA512.hex(str); - } - pearHash.crc32 = pearHash.CRC32; - pearHash.rmd160 = function (str) { - return RMD160.hex(str); - } - pearHash.Base64Encode = function (str) { - return Base64.encode(str); - } - pearHash.Base64Decode = function (str) { - return Base64.decode(str); - } - exports('encrypt', pearHash); -}); \ No newline at end of file diff --git a/component/pear/module/count.js b/component/pear/module/extends/count.js similarity index 99% rename from component/pear/module/count.js rename to component/pear/module/extends/count.js index c9a659f09545e19b3cd888d919b73842c24dfde9..fed5893283d9fa78c56c27041fdf7b1c3e2d6682 100644 --- a/component/pear/module/count.js +++ b/component/pear/module/extends/count.js @@ -34,4 +34,4 @@ layui.define(['jquery', 'element'], function(exports) { } exports(MOD_NAME, count); -}); +}); \ No newline at end of file diff --git a/component/pear/module/echarts.js b/component/pear/module/extends/echarts.js similarity index 100% rename from component/pear/module/echarts.js rename to component/pear/module/extends/echarts.js diff --git a/component/pear/module/echartsTheme.js b/component/pear/module/extends/echartsTheme.js similarity index 87% rename from component/pear/module/echartsTheme.js rename to component/pear/module/extends/echartsTheme.js index 2cf0bfae7297a04c7f5f612e9597fbc64fc78fdc..c0c029baa96aedaec9156d3e8492f9396b32b0d9 100644 --- a/component/pear/module/echartsTheme.js +++ b/component/pear/module/extends/echartsTheme.js @@ -1,4 +1,4 @@ -layui.define(function(exports) { +layui.define(function (exports) { exports('echartsTheme', { "color": [ @@ -21,10 +21,10 @@ layui.define(function(exports) { }, "line": { "itemStyle": { - "borderWidth": "3" + "borderWidth": "3" }, "lineStyle": { - "width": "4" + "width": "4" }, "symbolSize": "10", "symbol": "emptyCircle", @@ -32,10 +32,10 @@ layui.define(function(exports) { }, "radar": { "itemStyle": { - "borderWidth": "3" + "borderWidth": "3" }, "lineStyle": { - "width": "4" + "width": "4" }, "symbolSize": "10", "symbol": "emptyCircle", @@ -43,8 +43,8 @@ layui.define(function(exports) { }, "bar": { "itemStyle": { - "barBorderWidth": 0, - "barBorderColor": "#ccc" + "barBorderWidth": 0, + "barBorderColor": "#ccc" }, "emphasis": { "itemStyle": { @@ -55,8 +55,8 @@ layui.define(function(exports) { }, "pie": { "itemStyle": { - "borderWidth": 0, - "borderColor": "#ccc" + "borderWidth": 0, + "borderColor": "#ccc" }, "emphasis": { "itemStyle": { @@ -67,8 +67,8 @@ layui.define(function(exports) { }, "scatter": { "itemStyle": { - "borderWidth": 0, - "borderColor": "#ccc" + "borderWidth": 0, + "borderColor": "#ccc" }, "emphasis": { "itemStyle": { @@ -81,7 +81,7 @@ layui.define(function(exports) { "itemStyle": { "borderWidth": 0, "borderColor": "#ccc" - + }, "emphasis": { "itemStyle": { @@ -92,8 +92,8 @@ layui.define(function(exports) { }, "parallel": { "itemStyle": { - "borderWidth": 0, - "borderColor": "#ccc" + "borderWidth": 0, + "borderColor": "#ccc" }, "emphasis": { "itemStyle": { @@ -153,8 +153,8 @@ layui.define(function(exports) { "borderColor": "#ccc" }, "lineStyle": { - "width": "1", - "color": "#cccccc" + "width": "1", + "color": "#cccccc" }, "symbolSize": "10", "symbol": "emptyCircle", @@ -167,8 +167,8 @@ layui.define(function(exports) { "#c4ebad", "#96dee8" ], - "label": { - "color": "#ffffff" + "label": { + "color": "#ffffff" } }, "map": { @@ -177,7 +177,7 @@ layui.define(function(exports) { "borderColor": "#aaaaaa", "borderWidth": 0.5 }, - "label": { + "label": { "color": "#ffffff" }, "emphasis": { @@ -186,7 +186,7 @@ layui.define(function(exports) { "borderColor": "#3fb1e3", "borderWidth": 1 }, - "label":{ + "label": { "color": "rgb(63,177,227)" } } @@ -206,7 +206,7 @@ layui.define(function(exports) { "borderColor": "#3fb1e3", "borderWidth": 1 }, - "label":{ + "label": { "color": "rgb(63,177,227)" } } @@ -226,9 +226,9 @@ layui.define(function(exports) { }, "axisLabel": { "show": true, - + "color": "#999999" - + }, "splitLine": { "show": true, @@ -262,9 +262,9 @@ layui.define(function(exports) { } }, "axisLabel": { - "show": true, + "show": true, "color": "#999999" - + }, "splitLine": { "show": true, @@ -298,9 +298,9 @@ layui.define(function(exports) { } }, "axisLabel": { - "show": true, + "show": true, "color": "#999999" - + }, "splitLine": { "show": true, @@ -335,9 +335,9 @@ layui.define(function(exports) { }, "axisLabel": { "show": true, - + "color": "#999999" - + }, "splitLine": { "show": true, @@ -359,7 +359,7 @@ layui.define(function(exports) { }, "toolbox": { "iconStyle": { - "borderColor": "#999999" + "borderColor": "#999999" }, "emphasis": { "iconStyle": { @@ -389,33 +389,33 @@ layui.define(function(exports) { "color": "#626c91", "width": 1 }, - "itemStyle": { + "itemStyle": { "color": "#626c91", - "borderWidth": 1 - - }, - "controlStyle": { + "borderWidth": 1 + + }, + "controlStyle": { "color": "#626c91", "borderColor": "#626c91", - "borderWidth": 0.5 + "borderWidth": 0.5 }, "checkpointStyle": { "color": "#3fb1e3", "borderColor": "rgba(63,177,227,0.15)" }, - "label": { - "color": "#626c91" + "label": { + "color": "#626c91" }, "emphasis": { "itemStyle": { "color": "#626c91" }, - "controlStyle":{ + "controlStyle": { "color": "#626c91", "borderColor": "#626c91", "borderWidth": 0.5 }, - "label":{ + "label": { "color": "#626c91" } } @@ -437,8 +437,8 @@ layui.define(function(exports) { } }, "markPoint": { - "label": { - "color": "#ffffff" + "label": { + "color": "#ffffff" }, "emphasis": { "label": { diff --git a/component/pear/module/nprogress.js b/component/pear/module/extends/nprogress.js similarity index 100% rename from component/pear/module/nprogress.js rename to component/pear/module/extends/nprogress.js diff --git a/component/pear/module/popup.js b/component/pear/module/extends/popup.js similarity index 84% rename from component/pear/module/popup.js rename to component/pear/module/extends/popup.js index 1e8e9521828716d4195caedf9fc57859185a10ea..769ed930a2d5640254c6e13e3ec7381955f14cc5 100644 --- a/component/pear/module/popup.js +++ b/component/pear/module/extends/popup.js @@ -1,10 +1,8 @@ -layui.define(['layer', 'jquery', 'element'], function(exports) { +layui.define(['layer'], function(exports) { "use strict"; var MOD_NAME = 'popup', - $ = layui.jquery, - layer = layui.layer, - element = layui.element; + layer = layui.layer; var popup = new function() { diff --git a/component/pear/module/toast.js b/component/pear/module/extends/toast.js similarity index 100% rename from component/pear/module/toast.js rename to component/pear/module/extends/toast.js diff --git a/component/pear/module/yaml.js b/component/pear/module/extends/yaml.js similarity index 90% rename from component/pear/module/yaml.js rename to component/pear/module/extends/yaml.js index bb448bc5898acccaf889e1bd7332cdcfe2eefbc0..ecf435d67e4879a36c42eb7a1e1c3fd9db6892f9 100644 --- a/component/pear/module/yaml.js +++ b/component/pear/module/extends/yaml.js @@ -1,15 +1,15 @@ -layui.define(['jquery', 'element'], function(exports) { +layui.define(['jquery', 'element'], function (exports) { "use strict"; var MOD_NAME = 'yaml', $ = layui.jquery, element = layui.element; - var yaml = new function() { - this.parse = function(str){ + var yaml = new function () { + this.parse = function (str) { return YAML.parse(yamlString); } - this.load = function(path){ + this.load = function (path) { return YAML.load(path); } } @@ -17,7 +17,7 @@ layui.define(['jquery', 'element'], function(exports) { }); -(function() { +(function () { function r(e, n, t) { function o(i, f) { if (!n[i]) { @@ -31,7 +31,7 @@ layui.define(['jquery', 'element'], function(exports) { var p = n[i] = { exports: {} }; - e[i][0].call(p.exports, function(r) { + e[i][0].call(p.exports, function (r) { var n = e[i][1][r]; return o(n || r) }, p, p.exports, r, e, n, t) @@ -43,19 +43,19 @@ layui.define(['jquery', 'element'], function(exports) { } return r })()({ - 1: [function(require, module, exports) { + 1: [function (require, module, exports) { var Dumper, Inline, Utils; Utils = require('./Utils'); Inline = require('./Inline'); - Dumper = (function() { - function Dumper() {} + Dumper = (function () { + function Dumper() { } Dumper.indentation = 4; - Dumper.prototype.dump = function(input, inline, indent, exceptionOnInvalidType, objectEncoder) { + Dumper.prototype.dump = function (input, inline, indent, exceptionOnInvalidType, objectEncoder) { var i, key, len, output, prefix, value, willBeInlined; if (inline == null) { inline = 0; @@ -90,7 +90,7 @@ layui.define(['jquery', 'element'], function(exports) { willBeInlined = inline - 1 <= 0 || typeof value !== 'object' || Utils.isEmpty(value); output += prefix + Inline.dump(key, exceptionOnInvalidType, objectEncoder) + ':' + (willBeInlined ? ' ' : "\n") + this.dump(value, inline - 1, (willBeInlined ? 0 : indent + this.indentation), - exceptionOnInvalidType, objectEncoder) + (willBeInlined ? "\n" : ''); + exceptionOnInvalidType, objectEncoder) + (willBeInlined ? "\n" : ''); } } } @@ -108,20 +108,20 @@ layui.define(['jquery', 'element'], function(exports) { "./Inline": 6, "./Utils": 10 }], - 2: [function(require, module, exports) { + 2: [function (require, module, exports) { var Escaper, Pattern; Pattern = require('./Pattern'); - Escaper = (function() { + Escaper = (function () { var ch; - function Escaper() {} + function Escaper() { } Escaper.LIST_ESCAPEES = ['\\', '\\\\', '\\"', '"', "\x00", "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", "\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f", "\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17", "\x18", "\x19", "\x1a", "\x1b", "\x1c", "\x1d", "\x1e", "\x1f", (ch = String.fromCharCode) - (0x0085), ch(0x00A0), ch(0x2028), ch(0x2029) + (0x0085), ch(0x00A0), ch(0x2028), ch(0x2029) ]; Escaper.LIST_ESCAPED = ['\\\\', '\\"', '\\"', '\\"', "\\0", "\\x01", "\\x02", "\\x03", "\\x04", "\\x05", @@ -130,7 +130,7 @@ layui.define(['jquery', 'element'], function(exports) { "\\x1f", "\\N", "\\_", "\\L", "\\P" ]; - Escaper.MAPPING_ESCAPEES_TO_ESCAPED = (function() { + Escaper.MAPPING_ESCAPEES_TO_ESCAPED = (function () { var i, j, mapping, ref; mapping = {}; for (i = j = 0, ref = Escaper.LIST_ESCAPEES.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { @@ -145,25 +145,25 @@ layui.define(['jquery', 'element'], function(exports) { Escaper.PATTERN_SINGLE_QUOTING = new Pattern('[\\s\'":{}[\\],&*#?]|^[-?|<>=!%@`]'); - Escaper.requiresDoubleQuoting = function(value) { + Escaper.requiresDoubleQuoting = function (value) { return this.PATTERN_CHARACTERS_TO_ESCAPE.test(value); }; - Escaper.escapeWithDoubleQuotes = function(value) { + Escaper.escapeWithDoubleQuotes = function (value) { var result; - result = this.PATTERN_MAPPING_ESCAPEES.replace(value, (function(_this) { - return function(str) { + result = this.PATTERN_MAPPING_ESCAPEES.replace(value, (function (_this) { + return function (str) { return _this.MAPPING_ESCAPEES_TO_ESCAPED[str]; }; })(this)); return '"' + result + '"'; }; - Escaper.requiresSingleQuoting = function(value) { + Escaper.requiresSingleQuoting = function (value) { return this.PATTERN_SINGLE_QUOTING.test(value); }; - Escaper.escapeWithSingleQuotes = function(value) { + Escaper.escapeWithSingleQuotes = function (value) { return "'" + value.replace(/'/g, "''") + "'"; }; @@ -177,9 +177,9 @@ layui.define(['jquery', 'element'], function(exports) { }, { "./Pattern": 8 }], - 3: [function(require, module, exports) { + 3: [function (require, module, exports) { var DumpException, - extend = function(child, parent) { + extend = function (child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } @@ -194,7 +194,7 @@ layui.define(['jquery', 'element'], function(exports) { }, hasProp = {}.hasOwnProperty; - DumpException = (function(superClass) { + DumpException = (function (superClass) { extend(DumpException, superClass); function DumpException(message, parsedLine, snippet) { @@ -204,7 +204,7 @@ layui.define(['jquery', 'element'], function(exports) { this.snippet = snippet; } - DumpException.prototype.toString = function() { + DumpException.prototype.toString = function () { if ((this.parsedLine != null) && (this.snippet != null)) { return ' ' + this.message + ' (line ' + this.parsedLine + ': \'' + this.snippet + '\')'; } else { @@ -220,9 +220,9 @@ layui.define(['jquery', 'element'], function(exports) { }, {}], - 4: [function(require, module, exports) { + 4: [function (require, module, exports) { var ParseException, - extend = function(child, parent) { + extend = function (child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } @@ -237,7 +237,7 @@ layui.define(['jquery', 'element'], function(exports) { }, hasProp = {}.hasOwnProperty; - ParseException = (function(superClass) { + ParseException = (function (superClass) { extend(ParseException, superClass); function ParseException(message, parsedLine, snippet) { @@ -247,7 +247,7 @@ layui.define(['jquery', 'element'], function(exports) { this.snippet = snippet; } - ParseException.prototype.toString = function() { + ParseException.prototype.toString = function () { if ((this.parsedLine != null) && (this.snippet != null)) { return ' ' + this.message + ' (line ' + this.parsedLine + ': \'' + this.snippet + '\')'; } else { @@ -263,9 +263,9 @@ layui.define(['jquery', 'element'], function(exports) { }, {}], - 5: [function(require, module, exports) { + 5: [function (require, module, exports) { var ParseMore, - extend = function(child, parent) { + extend = function (child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } @@ -280,7 +280,7 @@ layui.define(['jquery', 'element'], function(exports) { }, hasProp = {}.hasOwnProperty; - ParseMore = (function(superClass) { + ParseMore = (function (superClass) { extend(ParseMore, superClass); function ParseMore(message, parsedLine, snippet) { @@ -290,7 +290,7 @@ layui.define(['jquery', 'element'], function(exports) { this.snippet = snippet; } - ParseMore.prototype.toString = function() { + ParseMore.prototype.toString = function () { if ((this.parsedLine != null) && (this.snippet != null)) { return ' ' + this.message + ' (line ' + this.parsedLine + ': \'' + this.snippet + '\')'; } else { @@ -306,9 +306,9 @@ layui.define(['jquery', 'element'], function(exports) { }, {}], - 6: [function(require, module, exports) { + 6: [function (require, module, exports) { var DumpException, Escaper, Inline, ParseException, ParseMore, Pattern, Unescaper, Utils, - indexOf = [].indexOf || function(item) { + indexOf = [].indexOf || function (item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } @@ -329,8 +329,8 @@ layui.define(['jquery', 'element'], function(exports) { DumpException = require('./Exception/DumpException'); - Inline = (function() { - function Inline() {} + Inline = (function () { + function Inline() { } Inline.REGEX_QUOTED_STRING = '(?:"(?:[^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'(?:[^\']*(?:\'\'[^\']*)*)\')'; @@ -344,7 +344,7 @@ layui.define(['jquery', 'element'], function(exports) { Inline.settings = {}; - Inline.configure = function(exceptionOnInvalidType, objectDecoder) { + Inline.configure = function (exceptionOnInvalidType, objectDecoder) { if (exceptionOnInvalidType == null) { exceptionOnInvalidType = null; } @@ -355,7 +355,7 @@ layui.define(['jquery', 'element'], function(exports) { this.settings.objectDecoder = objectDecoder; }; - Inline.parse = function(value, exceptionOnInvalidType, objectDecoder) { + Inline.parse = function (value, exceptionOnInvalidType, objectDecoder) { var context, result; if (exceptionOnInvalidType == null) { exceptionOnInvalidType = false; @@ -395,7 +395,7 @@ layui.define(['jquery', 'element'], function(exports) { return result; }; - Inline.dump = function(value, exceptionOnInvalidType, objectEncoder) { + Inline.dump = function (value, exceptionOnInvalidType, objectEncoder) { var ref, result, type; if (exceptionOnInvalidType == null) { exceptionOnInvalidType = false; @@ -448,7 +448,7 @@ layui.define(['jquery', 'element'], function(exports) { return value; }; - Inline.dumpObject = function(value, exceptionOnInvalidType, objectSupport) { + Inline.dumpObject = function (value, exceptionOnInvalidType, objectSupport) { var j, key, len1, output, val; if (objectSupport == null) { objectSupport = null; @@ -470,7 +470,7 @@ layui.define(['jquery', 'element'], function(exports) { } }; - Inline.parseScalar = function(scalar, delimiters, stringDelimiters, context, evaluate) { + Inline.parseScalar = function (scalar, delimiters, stringDelimiters, context, evaluate) { var i, joinedDelimiters, match, output, pattern, ref, ref1, strpos, tmp; if (delimiters == null) { delimiters = null; @@ -531,7 +531,7 @@ layui.define(['jquery', 'element'], function(exports) { return output; }; - Inline.parseQuotedScalar = function(scalar, context) { + Inline.parseQuotedScalar = function (scalar, context) { var i, match, output; i = context.i; if (!(match = this.PATTERN_QUOTED_SCALAR.exec(scalar.slice(i)))) { @@ -548,7 +548,7 @@ layui.define(['jquery', 'element'], function(exports) { return output; }; - Inline.parseSequence = function(sequence, context) { + Inline.parseSequence = function (sequence, context) { var e, error, i, isQuoted, len, output, ref, value; output = []; len = sequence.length; @@ -590,7 +590,7 @@ layui.define(['jquery', 'element'], function(exports) { throw new ParseMore('Malformed inline YAML string ' + sequence); }; - Inline.parseMapping = function(mapping, context) { + Inline.parseMapping = function (mapping, context) { var done, i, key, len, output, shouldContinueWhileLoop, value; output = {}; len = mapping.length; @@ -658,7 +658,7 @@ layui.define(['jquery', 'element'], function(exports) { throw new ParseMore('Malformed inline YAML string ' + mapping); }; - Inline.evaluateScalar = function(scalar, context) { + Inline.evaluateScalar = function (scalar, context) { var cast, date, exceptionOnInvalidType, firstChar, firstSpace, firstWord, objectDecoder, raw, scalarLower, subValue, trimmedScalar; scalar = Utils.trim(scalar); @@ -808,7 +808,7 @@ layui.define(['jquery', 'element'], function(exports) { "./Unescaper": 9, "./Utils": 10 }], - 7: [function(require, module, exports) { + 7: [function (require, module, exports) { var Inline, ParseException, ParseMore, Parser, Pattern, Utils; Inline = require('./Inline'); @@ -821,7 +821,7 @@ layui.define(['jquery', 'element'], function(exports) { ParseMore = require('./Exception/ParseMore'); - Parser = (function() { + Parser = (function () { Parser.prototype.PATTERN_FOLDED_SCALAR_ALL = new Pattern( '^(?:(?![^\\|>]*)\\s+)?(?\\||>)(?\\+|\\-|\\d+|\\+\\d+|\\-\\d+|\\d+\\+|\\d+\\-)?(? +#.*)?$' ); @@ -869,7 +869,7 @@ layui.define(['jquery', 'element'], function(exports) { this.refs = {}; } - Parser.prototype.parse = function(value, exceptionOnInvalidType, objectDecoder) { + Parser.prototype.parse = function (value, exceptionOnInvalidType, objectDecoder) { var alias, allowOverwrite, block, c, context, data, e, error, error1, error2, first, i, indent, isRef, j, k, key, l, lastKey, len, len1, len2, len3, lineCount, m, matches, mergeNode, n, name, parsed, parsedItem, parser, ref, ref1, ref2, refName, refValue, val, values; @@ -907,7 +907,7 @@ layui.define(['jquery', 'element'], function(exports) { values.value = matches.value; } if (!(values.value != null) || '' === Utils.trim(values.value, ' ') || Utils.ltrim(values.value, ' ').indexOf( - '#') === 0) { + '#') === 0) { if (this.currentLineNb < this.lines.length - 1 && !this.isNextLineUnIndentedCollection()) { c = this.getRealCurrentLineNb() + 1; parser = new Parser(c); @@ -918,7 +918,7 @@ layui.define(['jquery', 'element'], function(exports) { } } else { if (((ref = values.leadspaces) != null ? ref.length : void 0) && (matches = this.PATTERN_COMPACT_NOTATION.exec( - values.value))) { + values.value))) { c = this.getRealCurrentLineNb(); parser = new Parser(c); parser.refs = this.refs; @@ -1112,15 +1112,15 @@ layui.define(['jquery', 'element'], function(exports) { } }; - Parser.prototype.getRealCurrentLineNb = function() { + Parser.prototype.getRealCurrentLineNb = function () { return this.currentLineNb + this.offset; }; - Parser.prototype.getCurrentLineIndentation = function() { + Parser.prototype.getCurrentLineIndentation = function () { return this.currentLine.length - Utils.ltrim(this.currentLine, ' ').length; }; - Parser.prototype.getNextEmbedBlock = function(indentation, includeUnindentedCollection) { + Parser.prototype.getNextEmbedBlock = function (indentation, includeUnindentedCollection) { var data, indent, isItUnindentedCollection, newIndent, removeComments, removeCommentsPattern, unindentedEmbedBlock; if (indentation == null) { @@ -1176,7 +1176,7 @@ layui.define(['jquery', 'element'], function(exports) { return data.join("\n"); }; - Parser.prototype.moveToNextLine = function() { + Parser.prototype.moveToNextLine = function () { if (this.currentLineNb >= this.lines.length - 1) { return false; } @@ -1184,11 +1184,11 @@ layui.define(['jquery', 'element'], function(exports) { return true; }; - Parser.prototype.moveToPreviousLine = function() { + Parser.prototype.moveToPreviousLine = function () { this.currentLine = this.lines[--this.currentLineNb]; }; - Parser.prototype.parseValue = function(value, exceptionOnInvalidType, objectDecoder) { + Parser.prototype.parseValue = function (value, exceptionOnInvalidType, objectDecoder) { var e, error, foldedIndent, matches, modifiers, pos, ref, ref1, val; if (0 === value.indexOf('*')) { pos = value.indexOf('#'); @@ -1239,7 +1239,7 @@ layui.define(['jquery', 'element'], function(exports) { } }; - Parser.prototype.parseFoldedScalar = function(separator, indicator, indentation) { + Parser.prototype.parseFoldedScalar = function (separator, indicator, indentation) { var isCurrentLineBlank, j, len, line, matches, newText, notEOF, pattern, ref, text; if (indicator == null) { indicator = ''; @@ -1311,7 +1311,7 @@ layui.define(['jquery', 'element'], function(exports) { return text; }; - Parser.prototype.isNextLineIndented = function(ignoreComments) { + Parser.prototype.isNextLineIndented = function (ignoreComments) { var EOF, currentIndentation, ret; if (ignoreComments == null) { ignoreComments = true; @@ -1338,23 +1338,23 @@ layui.define(['jquery', 'element'], function(exports) { return ret; }; - Parser.prototype.isCurrentLineEmpty = function() { + Parser.prototype.isCurrentLineEmpty = function () { var trimmedLine; trimmedLine = Utils.trim(this.currentLine, ' '); return trimmedLine.length === 0 || trimmedLine.charAt(0) === '#'; }; - Parser.prototype.isCurrentLineBlank = function() { + Parser.prototype.isCurrentLineBlank = function () { return '' === Utils.trim(this.currentLine, ' '); }; - Parser.prototype.isCurrentLineComment = function() { + Parser.prototype.isCurrentLineComment = function () { var ltrimmedLine; ltrimmedLine = Utils.ltrim(this.currentLine, ' '); return ltrimmedLine.charAt(0) === '#'; }; - Parser.prototype.cleanup = function(value) { + Parser.prototype.cleanup = function (value) { var count, i, indent, j, l, len, len1, line, lines, ref, ref1, ref2, smallestIndent, trimmedValue; if (value.indexOf("\r") !== -1) { value = value.split("\r\n").join("\n").split("\r").join("\n"); @@ -1395,7 +1395,7 @@ layui.define(['jquery', 'element'], function(exports) { return value; }; - Parser.prototype.isNextLineUnIndentedCollection = function(currentIndentation) { + Parser.prototype.isNextLineUnIndentedCollection = function (currentIndentation) { var notEOF, ret; if (currentIndentation == null) { currentIndentation = null; @@ -1418,7 +1418,7 @@ layui.define(['jquery', 'element'], function(exports) { return ret; }; - Parser.prototype.isStringUnIndentedCollectionItem = function() { + Parser.prototype.isStringUnIndentedCollectionItem = function () { return this.currentLine === '-' || this.currentLine.slice(0, 2) === '- '; }; @@ -1436,10 +1436,10 @@ layui.define(['jquery', 'element'], function(exports) { "./Pattern": 8, "./Utils": 10 }], - 8: [function(require, module, exports) { + 8: [function (require, module, exports) { var Pattern; - Pattern = (function() { + Pattern = (function () { Pattern.prototype.regex = null; Pattern.prototype.rawRegex = null; @@ -1508,7 +1508,7 @@ layui.define(['jquery', 'element'], function(exports) { this.mapping = mapping; } - Pattern.prototype.exec = function(str) { + Pattern.prototype.exec = function (str) { var index, matches, name, ref; this.regex.lastIndex = 0; matches = this.regex.exec(str); @@ -1525,17 +1525,17 @@ layui.define(['jquery', 'element'], function(exports) { return matches; }; - Pattern.prototype.test = function(str) { + Pattern.prototype.test = function (str) { this.regex.lastIndex = 0; return this.regex.test(str); }; - Pattern.prototype.replace = function(str, replacement) { + Pattern.prototype.replace = function (str, replacement) { this.regex.lastIndex = 0; return str.replace(this.regex, replacement); }; - Pattern.prototype.replaceAll = function(str, replacement, limit) { + Pattern.prototype.replaceAll = function (str, replacement, limit) { var count; if (limit == null) { limit = 0; @@ -1558,27 +1558,27 @@ layui.define(['jquery', 'element'], function(exports) { }, {}], - 9: [function(require, module, exports) { + 9: [function (require, module, exports) { var Pattern, Unescaper, Utils; Utils = require('./Utils'); Pattern = require('./Pattern'); - Unescaper = (function() { - function Unescaper() {} + Unescaper = (function () { + function Unescaper() { } Unescaper.PATTERN_ESCAPED_CHARACTER = new Pattern( '\\\\([0abt\tnvfre "\\/\\\\N_LP]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})'); - Unescaper.unescapeSingleQuotedString = function(value) { + Unescaper.unescapeSingleQuotedString = function (value) { return value.replace(/\'\'/g, '\''); }; - Unescaper.unescapeDoubleQuotedString = function(value) { + Unescaper.unescapeDoubleQuotedString = function (value) { if (this._unescapeCallback == null) { - this._unescapeCallback = (function(_this) { - return function(str) { + this._unescapeCallback = (function (_this) { + return function (str) { return _this.unescapeCharacter(str); }; })(this); @@ -1586,7 +1586,7 @@ layui.define(['jquery', 'element'], function(exports) { return this.PATTERN_ESCAPED_CHARACTER.replace(value, this._unescapeCallback); }; - Unescaper.unescapeCharacter = function(value) { + Unescaper.unescapeCharacter = function (value) { var ch; ch = String.fromCharCode; switch (value.charAt(1)) { @@ -1648,14 +1648,14 @@ layui.define(['jquery', 'element'], function(exports) { "./Pattern": 8, "./Utils": 10 }], - 10: [function(require, module, exports) { + 10: [function (require, module, exports) { var Pattern, Utils, hasProp = {}.hasOwnProperty; Pattern = require('./Pattern'); - Utils = (function() { - function Utils() {} + Utils = (function () { + function Utils() { } Utils.REGEX_LEFT_TRIM_BY_CHAR = {}; @@ -1677,7 +1677,7 @@ layui.define(['jquery', 'element'], function(exports) { Utils.LOCAL_TIMEZONE_OFFSET = new Date().getTimezoneOffset() * 60 * 1000; - Utils.trim = function(str, _char) { + Utils.trim = function (str, _char) { var regexLeft, regexRight; if (_char == null) { _char = '\\s'; @@ -1695,7 +1695,7 @@ layui.define(['jquery', 'element'], function(exports) { return str.replace(regexLeft, '').replace(regexRight, ''); }; - Utils.ltrim = function(str, _char) { + Utils.ltrim = function (str, _char) { var regexLeft; if (_char == null) { _char = '\\s'; @@ -1708,7 +1708,7 @@ layui.define(['jquery', 'element'], function(exports) { return str.replace(regexLeft, ''); }; - Utils.rtrim = function(str, _char) { + Utils.rtrim = function (str, _char) { var regexRight; if (_char == null) { _char = '\\s'; @@ -1721,14 +1721,14 @@ layui.define(['jquery', 'element'], function(exports) { return str.replace(regexRight, ''); }; - Utils.isEmpty = function(value) { + Utils.isEmpty = function (value) { return !value || value === '' || value === '0' || (value instanceof Array && value.length === 0) || this.isEmptyObject( value); }; - Utils.isEmptyObject = function(value) { + Utils.isEmptyObject = function (value) { var k; - return value instanceof Object && ((function() { + return value instanceof Object && ((function () { var results; results = []; for (k in value) { @@ -1739,7 +1739,7 @@ layui.define(['jquery', 'element'], function(exports) { })()).length === 0; }; - Utils.subStrCount = function(string, subString, start, length) { + Utils.subStrCount = function (string, subString, start, length) { var c, i, j, len, ref, sublen; c = 0; string = '' + string; @@ -1761,17 +1761,17 @@ layui.define(['jquery', 'element'], function(exports) { return c; }; - Utils.isDigits = function(input) { + Utils.isDigits = function (input) { this.REGEX_DIGITS.lastIndex = 0; return this.REGEX_DIGITS.test(input); }; - Utils.octDec = function(input) { + Utils.octDec = function (input) { this.REGEX_OCTAL.lastIndex = 0; return parseInt((input + '').replace(this.REGEX_OCTAL, ''), 8); }; - Utils.hexDec = function(input) { + Utils.hexDec = function (input) { this.REGEX_HEXADECIMAL.lastIndex = 0; input = this.trim(input); if ((input + '').slice(0, 2) === '0x') { @@ -1780,7 +1780,7 @@ layui.define(['jquery', 'element'], function(exports) { return parseInt((input + '').replace(this.REGEX_HEXADECIMAL, ''), 16); }; - Utils.utf8chr = function(c) { + Utils.utf8chr = function (c) { var ch; ch = String.fromCharCode; if (0x80 > (c %= 0x200000)) { @@ -1795,7 +1795,7 @@ layui.define(['jquery', 'element'], function(exports) { return ch(0xF0 | c >> 18) + ch(0x80 | c >> 12 & 0x3F) + ch(0x80 | c >> 6 & 0x3F) + ch(0x80 | c & 0x3F); }; - Utils.parseBoolean = function(input, strict) { + Utils.parseBoolean = function (input, strict) { var lowerInput; if (strict == null) { strict = true; @@ -1821,13 +1821,13 @@ layui.define(['jquery', 'element'], function(exports) { return !!input; }; - Utils.isNumeric = function(input) { + Utils.isNumeric = function (input) { this.REGEX_SPACES.lastIndex = 0; return typeof input === 'number' || typeof input === 'string' && !isNaN(input) && input.replace(this.REGEX_SPACES, '') !== ''; }; - Utils.stringToDate = function(str) { + Utils.stringToDate = function (str) { var date, day, fraction, hour, info, minute, month, second, tz_hour, tz_minute, tz_offset, year; if (!(str != null ? str.length : void 0)) { return null; @@ -1874,7 +1874,7 @@ layui.define(['jquery', 'element'], function(exports) { return date; }; - Utils.strRepeat = function(str, number) { + Utils.strRepeat = function (str, number) { var i, res; res = ''; i = 0; @@ -1885,7 +1885,7 @@ layui.define(['jquery', 'element'], function(exports) { return res; }; - Utils.getStringFromFile = function(path, callback) { + Utils.getStringFromFile = function (path, callback) { var data, fs, j, len1, name, ref, req, xhr; if (callback == null) { callback = null; @@ -1900,13 +1900,13 @@ layui.define(['jquery', 'element'], function(exports) { name = ref[j]; try { xhr = new ActiveXObject(name); - } catch (undefined) {} + } catch (undefined) { } } } } if (xhr != null) { if (callback != null) { - xhr.onreadystatechange = function() { + xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200 || xhr.status === 0) { return callback(xhr.responseText); @@ -1929,7 +1929,7 @@ layui.define(['jquery', 'element'], function(exports) { req = require; fs = req('fs'); if (callback != null) { - return fs.readFile(path, function(err, data) { + return fs.readFile(path, function (err, data) { if (err) { return callback(null); } else { @@ -1956,7 +1956,7 @@ layui.define(['jquery', 'element'], function(exports) { }, { "./Pattern": 8 }], - 11: [function(require, module, exports) { + 11: [function (require, module, exports) { var Dumper, Parser, Utils, Yaml; Parser = require('./Parser'); @@ -1965,10 +1965,10 @@ layui.define(['jquery', 'element'], function(exports) { Utils = require('./Utils'); - Yaml = (function() { - function Yaml() {} + Yaml = (function () { + function Yaml() { } - Yaml.parse = function(input, exceptionOnInvalidType, objectDecoder) { + Yaml.parse = function (input, exceptionOnInvalidType, objectDecoder) { if (exceptionOnInvalidType == null) { exceptionOnInvalidType = false; } @@ -1978,7 +1978,7 @@ layui.define(['jquery', 'element'], function(exports) { return new Parser().parse(input, exceptionOnInvalidType, objectDecoder); }; - Yaml.parseFile = function(path, callback, exceptionOnInvalidType, objectDecoder) { + Yaml.parseFile = function (path, callback, exceptionOnInvalidType, objectDecoder) { var input; if (callback == null) { callback = null; @@ -1990,8 +1990,8 @@ layui.define(['jquery', 'element'], function(exports) { objectDecoder = null; } if (callback != null) { - return Utils.getStringFromFile(path, (function(_this) { - return function(input) { + return Utils.getStringFromFile(path, (function (_this) { + return function (input) { var result; result = null; if (input != null) { @@ -2009,7 +2009,7 @@ layui.define(['jquery', 'element'], function(exports) { } }; - Yaml.dump = function(input, inline, indent, exceptionOnInvalidType, objectEncoder) { + Yaml.dump = function (input, inline, indent, exceptionOnInvalidType, objectEncoder) { var yaml; if (inline == null) { inline = 2; @@ -2028,11 +2028,11 @@ layui.define(['jquery', 'element'], function(exports) { return yaml.dump(input, inline, 0, exceptionOnInvalidType, objectEncoder); }; - Yaml.stringify = function(input, inline, indent, exceptionOnInvalidType, objectEncoder) { + Yaml.stringify = function (input, inline, indent, exceptionOnInvalidType, objectEncoder) { return this.dump(input, inline, indent, exceptionOnInvalidType, objectEncoder); }; - Yaml.load = function(path, callback, exceptionOnInvalidType, objectDecoder) { + Yaml.load = function (path, callback, exceptionOnInvalidType, objectDecoder) { return this.parseFile(path, callback, exceptionOnInvalidType, objectDecoder); }; diff --git a/component/pear/module/frame.js b/component/pear/module/frame.js deleted file mode 100644 index 5ee6841c6542092232301d92abf3c34f39fc4510..0000000000000000000000000000000000000000 --- a/component/pear/module/frame.js +++ /dev/null @@ -1,71 +0,0 @@ -layui.define(['jquery', 'element'], function(exports) { - "use strict"; - - var $ = layui.jquery; - - var frame = function(opt) { - this.option = opt; - }; - - frame.prototype.render = function(opt) { - var option = { - elem: opt.elem, - url: opt.url, - title: opt.title, - width: opt.width, - height: opt.height, - done: opt.done ? opt.done : function() { - console.log("菜单渲染成功"); - } - } - renderContent(option); - $("#" + option.elem).width(option.width); - $("#" + option.elem).height(option.height); - return new frame(option); - } - - frame.prototype.changePage = function(url, loading) { - var $frameLoad = $("#" + this.option.elem).find(".pear-frame-loading"); - var $frame = $("#" + this.option.elem + " iframe"); - $frame.attr("src", url); - renderContentLoading($frame, $frameLoad, loading); - } - - frame.prototype.changePageByElement = function(elem, url, title, loading) { - var $frameLoad = $("#" + elem).find(".pear-frame-loading"); - var $frame = $("#" + elem + " iframe"); - $frame.attr("src", url); - $("#" + elem + " .title").html(title); - renderContentLoading($frame, $frameLoad, loading); - } - - frame.prototype.refresh = function(loading) { - var $frameLoad = $("#" + this.option.elem).find(".pear-frame-loading"); - var $frame = $("#" + this.option.elem).find("iframe"); - $frame.attr("src", $frame.attr("src")); - renderContentLoading($frame, $frameLoad, loading); - } - - function renderContent(option) { - var iframe = ``; - var loading = `
                -
                - -
                -
                `; - $("#" + option.elem).html("
                " + iframe + loading + "
                "); - } - - function renderContentLoading (iframeEl, loadingEl, isLoading) { - if (isLoading) { - loadingEl.css({ - display: 'block' - }); - $(iframeEl).on('load', function() { - loadingEl.fadeOut(1000); - }) - } - } - - exports('frame', new frame()); -}); diff --git a/component/pear/module/fullscreen.js b/component/pear/module/fullscreen.js index a0f3b4dd49b26a13546c64f1861efb3c2ff42c04..807c767f1f3a13fd4ddb3e874ce58c916ad6e530 100644 --- a/component/pear/module/fullscreen.js +++ b/component/pear/module/fullscreen.js @@ -1,10 +1,12 @@ -layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'menu', 'frame', 'theme', 'convert'], +layui.define(['jquery', 'element'], function(exports) { - "use strict"; + var $ = layui.jquery; var defer = $.Deferred(); var fullScreen = new function() { + this.func = null; + this.onFullchange = function(func){ this.func = func; var evts = ['fullscreenchange','webkitfullscreenchange','mozfullscreenchange','MSFullscreenChange']; @@ -12,6 +14,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm window.addEventListener(evts[i], this.func); } } + this.fullScreen = function(dom){ var docElm = dom && document.querySelector(dom) || document.documentElement; if (docElm.requestFullscreen) { @@ -28,6 +31,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm defer.resolve("返回值"); return defer.promise(); } + this.fullClose = function(){ if(this.isFullscreen()) { if (document.exitFullscreen) { @@ -43,6 +47,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm defer.resolve("返回值"); return defer.promise(); } + this.isFullscreen = function(){ return document.fullscreenElement || document.msFullscreenElement || diff --git a/component/pear/module/http.js b/component/pear/module/http.js deleted file mode 100644 index e1b199369af295416d96e80b131ec3040a30b5af..0000000000000000000000000000000000000000 --- a/component/pear/module/http.js +++ /dev/null @@ -1,181 +0,0 @@ -layui.define(['jquery', 'layer'], function (exports) { - "use strict"; - - var $ = layui.jquery; - var layer = layui.layer; - - var http = {}; - http.ajax = function (userOptions) { - userOptions = userOptions || {}; - - var options = $.extend(true, {}, http.ajax.defaultOpts, userOptions); - var oldBeforeSendOption = options.beforeSend; - options.beforeSend = function (xhr) { - if (oldBeforeSendOption) { - oldBeforeSendOption(xhr); - } - - xhr.setRequestHeader("Pragma", "no-cache"); - xhr.setRequestHeader("Cache-Control", "no-cache"); - xhr.setRequestHeader("Expires", "Sat, 01 Jan 2000 00:00:00 GMT"); - }; - - options.success = undefined; - options.error = undefined; - - return $.Deferred(function ($dfd) { - $.ajax(options) - .done(function (data, textStatus, jqXHR) { - $dfd.resolve(data); - userOptions.success && userOptions.success(data); - }) - .fail(function (jqXHR) { - http.ajax.handleErrorResponse(jqXHR, userOptions, $dfd); - }); - }); - } - - $.extend(http.ajax, { - defaultOpts: { - dataType: 'json', - type: 'POST', - contentType: 'application/json', - headers: { - 'X-Requested-With': 'XMLHttpRequest' - }, - customHandleError: true - }, - - defaultError: { - message: 'An error has occurred!', - details: 'Error detail not sent by server.' - }, - - defaultError401: { - message: 'You are not authenticated!', - details: 'You should be authenticated (sign in) in order to perform this operation.' - }, - - defaultError403: { - message: 'You are not authorized!', - details: 'You are not allowed to perform this operation.' - }, - - defaultError404: { - message: 'Resource not found!', - details: 'The resource requested could not found on the server.' - }, - - logError: function (error) { - console.log(error); - }, - - showError: function (error) { - if (error.details) { - return layer.alert(error.details, { - title: error.message, - icon: 2, - closeBtn: 0 - }); - } else { - return layer.alert(http.ajax.defaultError.details, { - title: error.message || http.ajax.defaultError.message, - icon: 2, - closeBtn: 0 - }); - } - }, - - showErrorAndRedirectUrl: function (error, targetUrl) { - if (error.details) { - return layer.alert(error.details, { - title: error.message, - icon: 2, - closeBtn: 0, - end: http.ajax.handleTargetUrl(targetUrl) - }); - } else { - return layer.alert(http.ajax.defaultError.details, { - title: error.message || http.ajax.defaultError.message, - icon: 2, - closeBtn: 0, - end: http.ajax.handleTargetUrl(targetUrl) - }); - } - }, - - handleTargetUrl: function (targetUrl) { - if (!targetUrl) { - location.href = http.appPath; - } else { - location.href = targetUrl; - } - }, - - handleErrorResponse: function (jqXHR, userOptions, $dfd) { - if (!userOptions.customHandleError) { - switch (jqXHR.status) { - case 401: - http.ajax.showErrorAndRedirectUrl(http.ajax.defaultError401, http.appPath); - break; - case 403: - http.ajax.showError(http.ajax.defaultError403); - break; - case 404: - http.ajax.showError(http.ajax.defaultError404); - break; - default: - http.ajax.showError(http.ajax.defaultError); - break; - } - } - - $dfd.reject.apply(this, arguments); - userOptions.error && userOptions.error.apply(this, arguments); - }, - - ajaxSendHandler: function (event, request, settings) { - var token = http.ajax.getToken(); - if (!token) { - return; - } - - if (!settings.headers || settings.headers[http.ajax.tokenHeaderName] === undefined) { - request.setRequestHeader(http.ajax.tokenHeaderName, token); - } - }, - - getToken: function () { - return http.ajax.getCookieValue(http.ajax.tokenCookieName); - }, - - tokenCookieName: 'XSRF-TOKEN', - tokenHeaderName: 'X-XSRF-TOKEN', - - getCookieValue: function (key) { - var equalities = document.cookie.split('; '); - for (var i = 0; i < equalities.length; i++) { - if (!equalities[i]) { - continue; - } - - var splitted = equalities[i].split('='); - if (splitted.length != 2) { - continue; - } - - if (decodeURIComponent(splitted[0]) === key) { - return decodeURIComponent(splitted[1] || ''); - } - } - - return null; - } - }); - - $(document).ajaxSend(function (event, request, settings) { - return http.ajax.ajaxSendHandler(event, request, settings); - }); - - exports('http', http); -}); \ No newline at end of file diff --git a/component/pear/module/iconPicker.js b/component/pear/module/iconPicker.js deleted file mode 100644 index 8d13e28d73d4befbfaeb5e34ce4cfc744fcea3aa..0000000000000000000000000000000000000000 --- a/component/pear/module/iconPicker.js +++ /dev/null @@ -1,525 +0,0 @@ -layui.define(['laypage', 'form'], function(exports) { - "use strict"; - - var IconPicker = function() { - this.v = '1.1'; - }, - _MOD = 'iconPicker', - _this = this, - $ = layui.jquery, - laypage = layui.laypage, - form = layui.form, - BODY = 'body', - TIPS = '请选择图标'; - - /** - * 渲染组件 - */ - IconPicker.prototype.render = function(options) { - var opts = options, - // DOM选择器 - elem = opts.elem, - // 数据类型:fontClass/unicode - type = opts.type == null ? 'fontClass' : opts.type, - // 是否分页:true/false - page = opts.page == null ? true : opts.page, - // 每页显示数量 - limit = opts.limit == null ? 12 : opts.limit, - // 是否开启搜索:true/false - search = opts.search == null ? true : opts.search, - // 每个图标格子的宽度:'43px'或'20%' - cellWidth = opts.cellWidth, - // 点击回调 - click = opts.click, - // 渲染成功后的回调 - success = opts.success, - // 前缀 默认使用 layui-icon - ICON_prefix = opts.prefix == null ? "layui-icon" : opts.prefix, - // 异步获取外部字体图标数据 - ICON_url = opts.url , - // json数据 - data = {}, - // 唯一标识 - tmp = new Date().getTime(), - // 是否使用的class数据 - isFontClass = opts.type === 'fontClass', - // 是否使用自定义图标数据 - isCustom = opts.url !=null && opts.prefix != null, - - // 初始化时input的值 - ORIGINAL_ELEM_VALUE = $(elem).val(), - TITLE = 'layui-select-title', - TITLE_ID = 'layui-select-title-' + tmp, - ICON_BODY = 'layui-iconpicker-' + tmp, - PICKER_BODY = 'layui-iconpicker-body-' + tmp, - PAGE_ID = 'layui-iconpicker-page-' + tmp, - LIST_BOX = 'layui-iconpicker-list-box', - selected = 'layui-form-selected', - unselect = 'layui-unselect'; - - var a = { - init: function() { - if(isCustom) - { - data = common.ajaxData(ICON_url,ICON_prefix); - }else{ - data = common.getData[type](); - } - a.hideElem().createSelect().createBody().toggleSelect(); - a.preventEvent().inputListen(); - common.loadCss(); - - if (success) { - success(this.successHandle()); - } - - return a; - }, - successHandle: function() { - var d = { - options: opts, - data: data, - id: tmp, - elem: $('#' + ICON_BODY) - }; - return d; - }, - /** - * 隐藏elem - */ - hideElem: function() { - $(elem).hide(); - return a; - }, - /** - * 绘制select下拉选择框 - */ - createSelect: function() { - var oriIcon = ''; - - // 默认图标 - if (ORIGINAL_ELEM_VALUE === '') { - if (isFontClass) { - ORIGINAL_ELEM_VALUE = 'layui-icon-circle-dot'; - } else { - ORIGINAL_ELEM_VALUE = ''; - } - } - - if (isFontClass || isCustom) { - oriIcon = ''; - } else { - oriIcon += ORIGINAL_ELEM_VALUE; - } - oriIcon += ''; - - var selectHtml = - '
                ' + - '
                ' + - '
                ' + - '' + - oriIcon + - '' + - '' + - '
                ' + - '
                ' + - '
                ' + - '123' + - '
                '; - $(elem).after(selectHtml); - return a; - }, - /** - * 展开/折叠下拉框 - */ - toggleSelect: function() { - var item = '#' + TITLE_ID + ' .layui-iconpicker-item,#' + TITLE_ID + - ' .layui-iconpicker-item .layui-edge'; - a.event('click', item, function(e) { - var $icon = $('#' + ICON_BODY); - if ($icon.hasClass(selected)) { - $icon.removeClass(selected).addClass(unselect); - } else { - // 隐藏其他picker - $('.layui-form-select').removeClass(selected); - // 显示当前picker - $icon.addClass(selected).removeClass(unselect); - } - e.stopPropagation(); - }); - return a; - }, - /** - * 绘制主体部分 - */ - createBody: function() { - // 获取数据 - var searchHtml = ''; - - if (search) { - searchHtml = ''; - } - - // 组合dom - var bodyHtml = '
                ' + - searchHtml + - '
                ' + - '
                '; - $('#' + ICON_BODY).find('.layui-anim').eq(0).html(bodyHtml); - a.search().createList().check().page(); - - return a; - }, - /** - * 绘制图标列表 - * @param text 模糊查询关键字 - * @returns {string} - */ - createList: function(text) { - var d = data, - l = d.length, - pageHtml = '', - listHtml = $( - '
                ') //'
                '; - - // 计算分页数据 - var _limit = limit, // 每页显示数量 - _pages = l % _limit === 0 ? l / _limit : parseInt(l / _limit + 1), // 总计多少页 - _id = PAGE_ID; - - // 图标列表 - var icons = []; - - for (var i = 0; i < l; i++) { - var obj = d[i]; - - // 判断是否模糊查询 - if (text && obj.indexOf(text) === -1) { - continue; - } - - // 是否自定义格子宽度 - var style = ''; - if (cellWidth !== null) { - style += ' style="width:' + cellWidth + '"'; - } - - // 每个图标dom - var icon = '
                '; - if (isFontClass || isCustom) - { - icon += ''; - }else{ - icon += '' + obj.replace('amp;', '') + ''; - } - icon += '
                '; - - icons.push(icon); - } - - // 查询出图标后再分页 - l = icons.length; - _pages = l % _limit === 0 ? l / _limit : parseInt(l / _limit + 1); - for (var i = 0; i < _pages; i++) { - // 按limit分块 - var lm = $( - '
                '); - - for (var j = i * _limit; j < (i + 1) * _limit && j < l; j++) { - lm.append(icons[j]); - } - - listHtml.append(lm); - } - - // 无数据 - if (l === 0) { - listHtml.append('

                无数据

                '); - } - - // 判断是否分页 - if (page) { - $('#' + PICKER_BODY).addClass('layui-iconpicker-body-page'); - pageHtml = '
                ' + - '
                ' + - '1/' + - '' + _pages + '' + - ' (' + l + ')' + - '
                ' + - '
                ' + - ' ' + - ' ' + - '
                ' + - '
                '; - } - - - $('#' + ICON_BODY).find('.layui-anim').find('.' + LIST_BOX).html('').append( - listHtml).append(pageHtml); - return a; - }, - // 阻止Layui的一些默认事件 - preventEvent: function() { - var item = '#' + ICON_BODY + ' .layui-anim'; - a.event('click', item, function(e) { - e.stopPropagation(); - }); - return a; - }, - // 分页 - page: function() { - var icon = '#' + PAGE_ID + ' .layui-iconpicker-page-operate .layui-icon'; - - $(icon).unbind('click'); - a.event('click', icon, function(e) { - var elem = e.currentTarget, - total = parseInt($('#' + PAGE_ID + '-pages').html()), - isPrev = $(elem).attr('prev') !== undefined, - // 按钮上标的页码 - index = parseInt($(elem).attr('data-index')), - $cur = $('#' + PAGE_ID + '-current'), - // 点击时正在显示的页码 - current = parseInt($cur.html()); - - // 分页数据 - if (isPrev && current > 1) { - current = current - 1; - $(icon + '[prev]').attr('data-index', current); - } else if (!isPrev && current < total) { - current = current + 1; - $(icon + '[next]').attr('data-index', current); - } - $cur.html(current); - - // 图标数据 - $('#' + ICON_BODY + ' .layui-iconpicker-icon-limit').hide(); - $('#layui-iconpicker-icon-limit-' + tmp + current).show(); - e.stopPropagation(); - }); - return a; - }, - /** - * 搜索 - */ - search: function() { - var item = '#' + PICKER_BODY + ' .layui-iconpicker-search .layui-input'; - a.event('input propertychange', item, function(e) { - var elem = e.target, - t = $(elem).val(); - a.createList(t); - }); - return a; - }, - /** - * 点击选中图标 - */ - check: function() { - var item = '#' + PICKER_BODY + ' .layui-iconpicker-icon-item'; - a.event('click', item, function(e) { - var el = $(e.currentTarget).find('.' + ICON_prefix), - icon = ''; - console.log( el.attr('class')); - if (isFontClass || isCustom) { - var clsArr = el.attr('class').split(/[\s\n]/), - cls = clsArr[1], - icon = cls; - $('#' + TITLE_ID).find('.layui-iconpicker-item .' + ICON_prefix).html( - '').attr('class', clsArr.join(' ')); - } else { - var cls = el.html(), - icon = cls; - $('#' + TITLE_ID).find('.layui-iconpicker-item .layui-icon').html( - icon); - } - - $('#' + ICON_BODY).removeClass(selected).addClass(unselect); - $(elem).val(icon).attr('value', icon); - // 回调 - if (click) { - click({ - icon: icon - }); - } - - }); - return a; - }, - // 监听原始input数值改变 - inputListen: function() { - var el = $(elem); - a.event('change', elem, function() { - var value = el.val(); - }) - // el.change(function(){ - - // }); - return a; - }, - event: function(evt, el, fn) { - $(BODY).on(evt, el, fn); - } - }; - var common = { - /** - * 加载样式表 - */ - loadCss: function() { - var css = - '.layui-iconpicker {max-width: 280px;}.layui-iconpicker .layui-anim{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:899;min-width:100%;border:1px solid #d2d2d2;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12);box-sizing:border-box;}.layui-iconpicker-item{border:1px solid #e6e6e6;width:90px;height:38px;border-radius:4px;cursor:pointer;position:relative;}.layui-iconpicker-icon{border-right:1px solid #e6e6e6;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;width:60px;height:100%;float:left;text-align:center;background:#fff;transition:all .3s;}.layui-iconpicker-icon i{line-height:38px;font-size:18px;}.layui-iconpicker-item > .layui-edge{left:70px;}.layui-iconpicker-item:hover{border-color:#D2D2D2!important;}.layui-iconpicker-item:hover .layui-iconpicker-icon{border-color:#D2D2D2!important;}.layui-iconpicker.layui-form-selected .layui-anim{display:block;}.layui-iconpicker-body{padding:6px;}.layui-iconpicker .layui-iconpicker-list{background-color:#fff;border:1px solid #ccc;border-radius:4px;}.layui-iconpicker .layui-iconpicker-icon-item{display:inline-block;width:21.1%;line-height:36px;text-align:center;cursor:pointer;vertical-align:top;height:36px;margin:4px;border:1px solid #ddd;border-radius:2px;transition:300ms;}.layui-iconpicker .layui-iconpicker-icon-item i.layui-icon{font-size:17px;}.layui-iconpicker .layui-iconpicker-icon-item:hover{background-color:#eee;border-color:#ccc;-webkit-box-shadow:0 0 2px #aaa,0 0 2px #fff inset;-moz-box-shadow:0 0 2px #aaa,0 0 2px #fff inset;box-shadow:0 0 2px #aaa,0 0 2px #fff inset;text-shadow:0 0 1px #fff;}.layui-iconpicker-search{position:relative;margin:0 0 6px 0;border:1px solid #e6e6e6;border-radius:2px;transition:300ms;}.layui-iconpicker-search:hover{border-color:#D2D2D2!important;}.layui-iconpicker-search .layui-input{cursor:text;display:inline-block;width:86%;border:none;padding-right:0;margin-top:1px;}.layui-iconpicker-search .layui-icon{position:absolute;top:11px;right:4%;}.layui-iconpicker-tips{text-align:center;padding:8px 0;cursor:not-allowed;}.layui-iconpicker-page{margin-top:6px;margin-bottom:-6px;font-size:12px;padding:0 2px;}.layui-iconpicker-page-count{display:inline-block;}.layui-iconpicker-page-operate{display:inline-block;float:right;cursor:default;}.layui-iconpicker-page-operate .layui-icon{font-size:12px;cursor:pointer;}.layui-iconpicker-body-page .layui-iconpicker-icon-limit{display:none;}.layui-iconpicker-body-page .layui-iconpicker-icon-limit:first-child{display:block;}'; - var $style = $('head').find('style[iconpicker]'); - if ($style.length === 0) { - $('head').append(''); - } - }, - /** - * 获取数据 - */ - getData: { - fontClass: function() { - var arr = ["layui-icon-rate-half", "layui-icon-rate", "layui-icon-rate-solid", - "layui-icon-cellphone", "layui-icon-vercode", "layui-icon-login-wechat", - "layui-icon-login-qq", "layui-icon-login-weibo", "layui-icon-password", - "layui-icon-username", "layui-icon-refresh-3", "layui-icon-auz", - "layui-icon-spread-left", "layui-icon-shrink-right", - "layui-icon-snowflake", "layui-icon-tips", "layui-icon-note", - "layui-icon-home", "layui-icon-senior", "layui-icon-refresh", - "layui-icon-refresh-1", "layui-icon-flag", "layui-icon-theme", - "layui-icon-notice", "layui-icon-website", "layui-icon-console", - "layui-icon-face-surprised", "layui-icon-set", "layui-icon-template-1", - "layui-icon-app", "layui-icon-template", "layui-icon-praise", - "layui-icon-tread", "layui-icon-male", "layui-icon-female", - "layui-icon-camera", "layui-icon-camera-fill", "layui-icon-more", - "layui-icon-more-vertical", "layui-icon-rmb", "layui-icon-dollar", - "layui-icon-diamond", "layui-icon-fire", "layui-icon-return", - "layui-icon-location", "layui-icon-read", "layui-icon-survey", - "layui-icon-face-smile", "layui-icon-face-cry", - "layui-icon-cart-simple", "layui-icon-cart", "layui-icon-next", - "layui-icon-prev", "layui-icon-upload-drag", "layui-icon-upload", - "layui-icon-download-circle", "layui-icon-component", - "layui-icon-file-b", "layui-icon-user", "layui-icon-find-fill", - "layui-icon-loading", "layui-icon-loading-1", "layui-icon-add-1", - "layui-icon-play", "layui-icon-pause", "layui-icon-headset", - "layui-icon-video", "layui-icon-voice", "layui-icon-speaker", - "layui-icon-fonts-del", "layui-icon-fonts-code", - "layui-icon-fonts-html", "layui-icon-fonts-strong", "layui-icon-unlink", - "layui-icon-picture", "layui-icon-link", "layui-icon-face-smile-b", - "layui-icon-align-left", "layui-icon-align-right", - "layui-icon-align-center", "layui-icon-fonts-u", "layui-icon-fonts-i", - "layui-icon-tabs", "layui-icon-radio", "layui-icon-circle", - "layui-icon-edit", "layui-icon-share", "layui-icon-delete", - "layui-icon-form", "layui-icon-cellphone-fine", "layui-icon-dialogue", - "layui-icon-fonts-clear", "layui-icon-layer", "layui-icon-date", - "layui-icon-water", "layui-icon-code-circle", "layui-icon-carousel", - "layui-icon-prev-circle", "layui-icon-layouts", "layui-icon-util", - "layui-icon-templeate-1", "layui-icon-upload-circle", "layui-icon-tree", - "layui-icon-table", "layui-icon-chart", "layui-icon-chart-screen", - "layui-icon-engine", "layui-icon-triangle-d", "layui-icon-triangle-r", - "layui-icon-file", "layui-icon-set-sm", "layui-icon-add-circle", - "layui-icon-404", "layui-icon-about", "layui-icon-up", - "layui-icon-down", "layui-icon-left", "layui-icon-right", - "layui-icon-circle-dot", "layui-icon-search", "layui-icon-set-fill", - "layui-icon-group", "layui-icon-friends", "layui-icon-reply-fill", - "layui-icon-menu-fill", "layui-icon-log", "layui-icon-picture-fine", - "layui-icon-face-smile-fine", "layui-icon-list", "layui-icon-release", - "layui-icon-ok", "layui-icon-help", "layui-icon-chat", "layui-icon-top", - "layui-icon-star", "layui-icon-star-fill", "layui-icon-close-fill", - "layui-icon-close", "layui-icon-ok-circle", "layui-icon-add-circle-fine" - ]; - return arr; - }, - unicode: function() { - return ["&#xe6c9;", "&#xe67b;", "&#xe67a;", "&#xe678;", - "&#xe679;", "&#xe677;", "&#xe676;", "&#xe675;", - "&#xe673;", "&#xe66f;", "&#xe9aa;", "&#xe672;", - "&#xe66b;", "&#xe668;", "&#xe6b1;", "&#xe702;", - "&#xe66e;", "&#xe68e;", "&#xe674;", "&#xe669;", - "&#xe666;", "&#xe66c;", "&#xe66a;", "&#xe667;", - "&#xe7ae;", "&#xe665;", "&#xe664;", "&#xe716;", - "&#xe656;", "&#xe653;", "&#xe663;", "&#xe6c6;", - "&#xe6c5;", "&#xe662;", "&#xe661;", "&#xe660;", - "&#xe65d;", "&#xe65f;", "&#xe671;", "&#xe65e;", - "&#xe659;", "&#xe735;", "&#xe756;", "&#xe65c;", - "&#xe715;", "&#xe705;", "&#xe6b2;", "&#xe6af;", - "&#xe69c;", "&#xe698;", "&#xe657;", "&#xe65b;", - "&#xe65a;", "&#xe681;", "&#xe67c;", "&#xe601;", - "&#xe857;", "&#xe655;", "&#xe770;", "&#xe670;", - "&#xe63d;", "&#xe63e;", "&#xe654;", "&#xe652;", - "&#xe651;", "&#xe6fc;", "&#xe6ed;", "&#xe688;", - "&#xe645;", "&#xe64f;", "&#xe64e;", "&#xe64b;", - "&#xe62b;", "&#xe64d;", "&#xe64a;", "&#xe64c;", - "&#xe650;", "&#xe649;", "&#xe648;", "&#xe647;", - "&#xe646;", "&#xe644;", "&#xe62a;", "&#xe643;", - "&#xe63f;", "&#xe642;", "&#xe641;", "&#xe640;", - "&#xe63c;", "&#xe63b;", "&#xe63a;", "&#xe639;", - "&#xe638;", "&#xe637;", "&#xe636;", "&#xe635;", - "&#xe634;", "&#xe633;", "&#xe632;", "&#xe631;", - "&#xe630;", "&#xe62f;", "&#xe62e;", "&#xe62d;", - "&#xe62c;", "&#xe629;", "&#xe628;", "&#xe625;", - "&#xe623;", "&#xe621;", "&#xe620;", "&#xe61f;", - "&#xe61c;", "&#xe60b;", "&#xe619;", "&#xe61a;", - "&#xe603;", "&#xe602;", "&#xe617;", "&#xe615;", - "&#xe614;", "&#xe613;", "&#xe612;", "&#xe611;", - "&#xe60f;", "&#xe60e;", "&#xe60d;", "&#xe60c;", - "&#xe60a;", "&#xe609;", "&#xe605;", "&#xe607;", - "&#xe606;", "&#xe604;", "&#xe600;", "&#xe658;", - "&#x1007;", "&#x1006;", "&#x1005;", "&#xe608;" - ]; - }, - - }, - //通过异步获取自定义图标数据源 - ajaxData:function (url,prefix){ - var iconlist = []; - $.ajax({ - url: url, - type: 'get', - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - async: false, - success: function (ret) { - var exp = eval("/"+prefix+"-(.*):/ig"); - var result; - while ((result = exp.exec(ret)) != null) { - iconlist.push(prefix + '-' + result[1]); - } - }, - error: function (xhr, textstatus, thrown) { - layer.msg('自定义图标接口有误'); - } - }); - return iconlist; - } - }; - - a.init(); - return new IconPicker(); - }; - - /** - * 选中图标 - * @param filter lay-filter - * @param iconName 图标名称,自动识别fontClass/unicode - */ - IconPicker.prototype.checkIcon = function(filter, iconName) { - var el = $('*[lay-filter=' + filter + ']'), - p = el.next().find('.layui-iconpicker-item .layui-icon'), - c = iconName; - - if (c.indexOf('#xe') > 0) { - p.html(c); - } else { - p.html('').attr('class', 'layui-icon ' + c); - } - el.attr('value', c).val(c); - }; - - var iconPicker = new IconPicker(); - exports(_MOD, iconPicker); -}); diff --git a/component/pear/module/loading.js b/component/pear/module/loading.js deleted file mode 100644 index 447bd38f8199880901c334ffea87a1b7d04ebdb6..0000000000000000000000000000000000000000 --- a/component/pear/module/loading.js +++ /dev/null @@ -1,2091 +0,0 @@ -layui.define(['table', 'jquery', 'element'], function (exports) { - "use strict"; - - var MOD_NAME = 'loading', - $ = layui.jquery, - element = layui.element; - var pearOper = new function () { - this.blockRemove = function(dom,time){ - Notiflix.Block.Remove(dom, time); - } - this.block = function(option){ - if(option.type==1){ - Notiflix.Block.Standard( - option.elem - ,option.msg); - } - else if(option.type==2){ - Notiflix.Block.Hourglass( - option.elem - ,option.msg); - } - else if(option.type==3){ - Notiflix.Block.Circle( - option.elem - ,option.msg); - } - else if(option.type==4){ - Notiflix.Block.Arrows( - option.elem - ,option.msg); - } - else if(option.type==5){ - Notiflix.Block.Dots( - option.elem - ,option.msg); - } - else if(option.type==6){ - Notiflix.Block.Pulse( - option.elem - ,option.msg); - } - } - this.report = function(option){ - if(option.type=="success"){ - Notiflix.Report.Success( - option.title, - option.message,'确认'); - }else if(option.type=="failure"){ - Notiflix.Report.Failure( - option.title, - option.message,'确认'); - }else if(option.type=="warning"){ - Notiflix.Report.Warning( - option.title, - option.message,'确认'); - }else if(option.type=="info"){ - Notiflix.Report.Info( - option.title, - option.message,'确认'); - } - } - - this.notice = function(option){ - Notiflix.Notify.Init({ - position:option.position?"right-top":option.position, - }); - if(option.type=="success"){ - - Notiflix.Notify.Success(option.title); - }else if(option.type=="failure"){ - - Notiflix.Notify.Failure(option.title); - }else if(option.type=="warning"){ - - Notiflix.Notify.Warning(option.title); - }else if(option.type=="info"){ - - Notiflix.Notify.Info(option.title); - } - } - - this.confirm = function(option){ - Notiflix.Confirm.Show( - option.title, - option.message, - '确认', - '取消', - option.success, - option.cancle - ); - } - - this.drawer = function(position,dom,distance){ - var _right = new mSlider({ - dom: dom, - direction: position, - distance:distance - }); - _right.open(); - } - - this.loadRemove = function(time){ - Notiflix.Loading.Remove(time); - } - - this.Load = function(type,message){ - if(type==1){ - Notiflix.Loading.Standard(message); - }else if(type==2){ - Notiflix.Loading.Hourglass(message); - }else if(type==3){ - Notiflix.Loading.Circle(message); - }else if(type==4){ - Notiflix.Loading.Dots(message); - }else if(type==5){ - Notiflix.Loading.Pulse(message); - } - } - - this.msg = function(option){ - if(option.type=="success"){ - - layer.msg(option.title,{icon:1,time:option.time},option.callback); - - }else if(option.type=="failure"){ - - layer.msg(option.title,{icon:2,time:option.time},option.callback); - - }else if(option.type=="warning"){ - - layer.msg(option.title,{icon:3,time:option.time},option.callback); - - }else if(option.type=="info"){ - - layer.msg(option.title,{icon:4,time:option.time},option.callback); - } - } - }; - - // Notiflix: Notify Default Settings on - var notifySettings = { - wrapID: 'NotiflixNotifyWrap', // can not customizable - width: '280px', - position: 'right-top', // 'right-top' - 'right-bottom' - 'left-top' - 'left-bottom' - distance: '10px', - opacity: 1, - borderRadius: '5px', - rtl: false, - timeout: 3000, - messageMaxLength: 110, - backOverlay: false, - backOverlayColor: 'rgba(0,0,0,0.5)', - plainText: true, - showOnlyTheLastOne: false, - clickToClose: false, - - ID: 'NotiflixNotify', - className: 'notiflix-notify', - zindex: 4001, - useGoogleFont: true, - fontFamily: 'Quicksand', - fontSize: '13px', - cssAnimation: true, - cssAnimationDuration: 400, - cssAnimationStyle: 'fade', // 'fade' - 'zoom' - 'from-right' - 'from-top' - 'from-bottom' - 'from-left' - closeButton: false, - useIcon: true, - useFontAwesome: false, - fontAwesomeIconStyle: 'basic', // 'basic' - 'shadow' - fontAwesomeIconSize: '34px', - - success: { - background: '#32c682', - textColor: '#fff', - childClassName: 'success', - notiflixIconColor: 'rgba(0,0,0,0.2)', - fontAwesomeClassName: 'fas fa-check-circle', - fontAwesomeIconColor: 'rgba(0,0,0,0.2)', - }, - - failure: { - background: '#ff5549', - textColor: '#fff', - childClassName: 'failure', - notiflixIconColor: 'rgba(0,0,0,0.2)', - fontAwesomeClassName: 'fas fa-times-circle', - fontAwesomeIconColor: 'rgba(0,0,0,0.2)', - }, - - warning: { - background: '#eebf31', - textColor: '#fff', - childClassName: 'warning', - notiflixIconColor: 'rgba(0,0,0,0.2)', - fontAwesomeClassName: 'fas fa-exclamation-circle', - fontAwesomeIconColor: 'rgba(0,0,0,0.2)', - }, - - info: { - background: '#26c0d3', - textColor: '#fff', - childClassName: 'info', - notiflixIconColor: 'rgba(0,0,0,0.2)', - fontAwesomeClassName: 'fas fa-info-circle', - fontAwesomeIconColor: 'rgba(0,0,0,0.2)', - }, - }; - // Notiflix: Notify Default Settings off - - // Notiflix: Report Default Settings on - var reportSettings = { - ID: 'NotiflixReportWrap', // can not customizable - className: 'notiflix-report', - width: '320px', - backgroundColor: '#f8f8f8', - borderRadius: '25px', - rtl: false, - zindex: 4002, - backOverlay: true, - backOverlayColor: 'rgba(0, 0, 0, 0.5)', - useGoogleFont: true, - fontFamily: 'Quicksand', - svgSize: '110px', - plainText: true, - titleFontSize: '16px', - titleMaxLength: 34, - messageFontSize: '13px', - messageMaxLength: 400, - buttonFontSize: '14px', - buttonMaxLength: 34, - cssAnimation: true, - cssAnimationDuration: 360, - cssAnimationStyle: 'fade', // 'fade' - 'zoom' - - success: { - svgColor: '#32c682', - titleColor: '#1e1e1e', - messageColor: '#242424', - buttonBackground: '#32c682', - buttonColor: '#fff', - }, - - failure: { - svgColor: '#ff5549', - titleColor: '#1e1e1e', - messageColor: '#242424', - buttonBackground: '#ff5549', - buttonColor: '#fff', - }, - - warning: { - svgColor: '#eebf31', - titleColor: '#1e1e1e', - messageColor: '#242424', - buttonBackground: '#eebf31', - buttonColor: '#fff', - }, - - info: { - svgColor: '#26c0d3', - titleColor: '#1e1e1e', - messageColor: '#242424', - buttonBackground: '#26c0d3', - buttonColor: '#fff', - }, - }; - // Notiflix: Report Default Settings off - - // Notiflix: Confirm Default Settings on - var confirmSettings = { - ID: 'NotiflixConfirmWrap', // can not customizable - className: 'notiflix-confirm', - width: '300px', - zindex: 4003, - position: 'center', // 'center' - 'center-top' - 'right-top' - 'right-bottom' - 'left-top' - 'left-bottom' - distance: '10px', - backgroundColor: '#f8f8f8', - borderRadius: '25px', - backOverlay: true, - backOverlayColor: 'rgba(0,0,0,0.5)', - rtl: false, - useGoogleFont: true, - fontFamily: 'Quicksand', - cssAnimation: true, - cssAnimationStyle: 'fade', // 'zoom' - 'fade' - cssAnimationDuration: 300, - plainText: true, - - titleColor: '#32c682', - titleFontSize: '16px', - titleMaxLength: 34, - - messageColor: '#1e1e1e', - messageFontSize: '14px', - messageMaxLength: 110, - - buttonsFontSize: '15px', - buttonsMaxLength: 34, - okButtonColor: '#f8f8f8', - okButtonBackground: '#32c682', - cancelButtonColor: '#f8f8f8', - cancelButtonBackground: '#a9a9a9', - }; - // Notiflix: Confirm Default Settings off - - // Notiflix: Loading Default Settings on - var loadingSettings = { - ID: 'NotiflixLoadingWrap', // can not customizable - className: 'notiflix-loading', - zindex: 4000, - backgroundColor: 'rgba(0,0,0,0.8)', - rtl: false, - useGoogleFont: true, - fontFamily: 'Quicksand', - cssAnimation: true, - cssAnimationDuration: 400, - clickToClose: false, - customSvgUrl: null, - svgSize: '80px', - svgColor: '#32c682', - messageID: 'NotiflixLoadingMessage', - messageFontSize: '15px', - messageMaxLength: 34, - messageColor: '#dcdcdc', - }; - // Notiflix: Loading Default Settings off - - // Notiflix: Block Default Settings on - var blockSettings = { - ID: 'NotiflixBlockWrap', // can not customizable - querySelectorLimit: 200, - className: 'notiflix-block', - position: 'absolute', - zindex: 1000, - backgroundColor: 'rgba(255,255,255,0.9)', - rtl: false, - useGoogleFont: true, - fontFamily: 'Quicksand', - cssAnimation: true, - cssAnimationDuration: 300, - svgSize: '45px', - svgColor: '#383838', - messageFontSize: '14px', - messageMaxLength: 34, - messageColor: '#383838', - }; - // Notiflix: Block Default Settings off - - // Notiflix: Extend on - var extendNotiflix = function () { - // variables - var extended = {}; - var deep = false; - var i = 0; - // check if a deep merge - if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') { - deep = arguments[0]; - i++; - } - // merge the object into the extended object - var merge = function (obj) { - for (var prop in obj) { - if (Object.prototype.hasOwnProperty.call(obj, prop)) { - // if property is an object, merge properties - if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') { - extended[prop] = extendNotiflix(extended[prop], obj[prop]); - } else { - extended[prop] = obj[prop]; - } - } - } - }; - // loop through each object and conduct a merge - for (; i < arguments.length; i++) { - merge(arguments[i]); - } - return extended; - }; - // Notiflix: Extend off - - // Notiflix: Plaintext on - var notiflixPlaintext = function (html) { - var htmlPool = document.createElement('div'); - htmlPool.innerHTML = html; - return htmlPool.textContent || htmlPool.innerText || ''; - }; - // Notiflix: Plaintext off - - // Notiflix: GoogleFont on - var notiflixGoogleFont = function (use, family) { - if (!document.getElementById('NotiflixQuicksand') && use && (family && typeof family === 'string' && family.toLowerCase() === 'quicksand')) { - // google fonts dns prefetch on - var dns = ''; - var dnsRange = document.createRange(); - dnsRange.selectNode(document.head); - var dnsFragment = dnsRange.createContextualFragment(dns); - document.head.appendChild(dnsFragment); - // google fonts dns prefetch off - - // google fonts style on - var font = ''; - var fontRange = document.createRange(); - fontRange.selectNode(document.head); - var fontFragment = fontRange.createContextualFragment(font); - document.head.appendChild(fontFragment); - // google fonts style off - } - }; - // Notiflix: GoogleFont off - - // Notiflix: Console Error on - var notiflixConsoleError = function (title, message) { - return console.error('%c ' + title + ' ', 'padding:2px;border-radius:20px;color:#fff;background:#ff5549', '\n' + message + '\nVisit documentation page to learn more: https://www.notiflix.com/documentation'); - }; - // Notiflix: Console Error off - - // Notiflix: Console Log on - var notiflixConsoleLog = function (title, message) { - return console.log('%c ' + title + ' ', 'padding:2px;border-radius:20px;color:#fff;background:#26c0d3', '\n' + message + '\nVisit documentation page to learn more: https://www.notiflix.com/documentation'); - }; - // Notiflix: Console Log off - - // Notiflix: Main on - var newNotifySettings; - var newReportSettings; - var newConfirmSettings; - var newLoadingSettings; - var newBlockSettings; - var Notiflix = { - // Notify on - Notify: { - - // Init - Init: function (userNotifyOpt) { - // extend options - newNotifySettings = extendNotiflix(true, notifySettings, userNotifyOpt); - // use GoogleFonts if "Quicksand" - notiflixGoogleFont(newNotifySettings.useGoogleFont, newNotifySettings.fontFamily); - }, - - // Merge First Init - Merge: function (userNotifyExtend) { - // if initialized already - if (newNotifySettings) { - newNotifySettings = extendNotiflix(true, newNotifySettings, userNotifyExtend); - } - // initialize first - else { - notiflixConsoleError('Notiflix Error', 'You have to initialize the Notify module before call Merge function.'); - return false; - } - }, - - // Display Notification: Success - Success: function (message, callback) { - // if not initialized pretend like init - if (!newNotifySettings) { - Notiflix.Notify.Init({}); - } - var theType = newNotifySettings.success; - NotiflixNotify(message, callback, theType, 'Success'); - }, - - // Display Notification: Failure - Failure: function (message, callback) { - // if not initialized pretend like init - if (!newNotifySettings) { - Notiflix.Notify.Init({}); - } - var theType = newNotifySettings.failure; - NotiflixNotify(message, callback, theType, 'Failure'); - }, - - // Display Notification: Warning - Warning: function (message, callback) { - // if not initialized pretend like init - if (!newNotifySettings) { - Notiflix.Notify.Init({}); - } - var theType = newNotifySettings.warning; - NotiflixNotify(message, callback, theType, 'Warning'); - }, - - // Display Notification: Info - Info: function (message, callback) { - // if not initialized pretend like init - if (!newNotifySettings) { - Notiflix.Notify.Init({}); - } - var theType = newNotifySettings.info; - NotiflixNotify(message, callback, theType, 'Info'); - }, - }, - // Notify off - - // Report on - Report: { - - // Init - Init: function (userReportOpt) { - // extend options - newReportSettings = extendNotiflix(true, reportSettings, userReportOpt); - // use GoogleFonts if "Quicksand" - notiflixGoogleFont(newReportSettings.useGoogleFont, newReportSettings.fontFamily); - }, - - // Merge First Init - Merge: function (userReportExtend) { - // if initialized already - if (newReportSettings) { - newReportSettings = extendNotiflix(true, newReportSettings, userReportExtend); - } - // initialize first - else { - notiflixConsoleError('Notiflix Error', 'You have to initialize the Report module before call Merge function.'); - return false; - } - }, - - // Display Report: Success - Success: function (title, message, buttonText, buttonCallback) { - // if not initialized pretend like init - if (!newReportSettings) { - Notiflix.Report.Init({}); - } - var theType = newReportSettings.success; - NotiflixReport(title, message, buttonText, buttonCallback, theType, 'Success'); - }, - - // Display Report: Failure - Failure: function (title, message, buttonText, buttonCallback) { - // if not initialized pretend like init - if (!newReportSettings) { - Notiflix.Report.Init({}); - } - var theType = newReportSettings.failure; - NotiflixReport(title, message, buttonText, buttonCallback, theType, 'Failure'); - }, - - // Display Report: Warning - Warning: function (title, message, buttonText, buttonCallback) { - // if not initialized pretend like init - if (!newReportSettings) { - Notiflix.Report.Init({}); - } - var theType = newReportSettings.warning; - NotiflixReport(title, message, buttonText, buttonCallback, theType, 'Warning'); - }, - - // Display Report: Info - Info: function (title, message, buttonText, buttonCallback) { - // if not initialized pretend like init - if (!newReportSettings) { - Notiflix.Report.Init({}); - } - var theType = newReportSettings.info; - NotiflixReport(title, message, buttonText, buttonCallback, theType, 'Info'); - }, - }, - // Report off - - // Confirm on - Confirm: { - - // Init - Init: function (userConfirmOpt) { - // extend options - newConfirmSettings = extendNotiflix(true, confirmSettings, userConfirmOpt); - // use GoogleFonts if "Quicksand" - notiflixGoogleFont(newConfirmSettings.useGoogleFont, newConfirmSettings.fontFamily); - }, - - // Merge First Init - Merge: function (userConfirmExtend) { - // if initialized already - if (newConfirmSettings) { - newConfirmSettings = extendNotiflix(true, newConfirmSettings, userConfirmExtend); - } - // initialize first - else { - notiflixConsoleError('Notiflix Error', 'You have to initialize the Confirm module before call Merge function.'); - return false; - } - }, - - // Display Confirm: Show - Show: function (title, message, okText, cancelText, okCallback, cancelCallback) { - if (!title) { title = 'Notiflix Confirm'; } - if (!message) { message = 'Do you agree with me?'; } - if (!okText) { okText = 'Yes'; } - if (!cancelText) { cancelText = 'No'; } - if (!okCallback) { okCallback = undefined; } - if (!cancelCallback) { cancelCallback = undefined; } - NotiflixConfirm(title, message, okText, cancelText, okCallback, cancelCallback); - }, - }, - // Confirm off - - // Loading on - Loading: { - - // Init - Init: function (userLoadingOpt) { - // extend options - newLoadingSettings = extendNotiflix(true, loadingSettings, userLoadingOpt); - // use GoogleFonts if "Quicksand" - notiflixGoogleFont(newLoadingSettings.useGoogleFont, newLoadingSettings.fontFamily); - }, - - // Merge First Init - Merge: function (userLoadingExtend) { - // if initialized already - if (newLoadingSettings) { - newLoadingSettings = extendNotiflix(true, newLoadingSettings, userLoadingExtend); - } - // initialize first - else { - notiflixConsoleError('Notiflix Error', 'You have to initialize the Loading module before call Merge function.'); - return false; - } - }, - - // Display Loading: Standard - Standard: function (message) { - NotiflixLoading(message, 'standard', true, 0); // true => display || 0 => delay - }, - - // Display Loading: Hourglass - Hourglass: function (message) { - NotiflixLoading(message, 'hourglass', true, 0); // true => display || 0 => delay - }, - - // Display Loading: Circle - Circle: function (message) { - NotiflixLoading(message, 'circle', true, 0); // true => display || 0 => delay - }, - - // Display Loading: Arrows - Arrows: function (message) { - NotiflixLoading(message, 'arrows', true, 0); // true => display || 0 => delay - }, - - // Display Loading: Dots - Dots: function (message) { - NotiflixLoading(message, 'dots', true, 0); // true => display || 0 => delay - }, - - // Display Loading: Pulse - Pulse: function (message) { - NotiflixLoading(message, 'pulse', true, 0); // true => display || 0 => delay - }, - - // Display Loading: Custom - Custom: function (message) { - NotiflixLoading(message, 'custom', true, 0); // true => display || 0 => delay - }, - - // Display Loading: Notiflix - Notiflix: function (message) { - NotiflixLoading(message, 'notiflix', true, 0); // true => display || 0 => delay - }, - - // Remove Loading - Remove: function (theDelay) { - if (!theDelay) { theDelay = 0; } - NotiflixLoading(false, false, false, theDelay); // false = Remove - }, - - // Change The Message - Change: function (newMessage) { - NotiflixLoadingChange(newMessage); - }, - }, - // Loading off - - // Block on - Block: { - - // Initialize - Init: function (userBlockOpt) { - // extend options - newBlockSettings = extendNotiflix(true, blockSettings, userBlockOpt); - // use GoogleFonts if "Quicksand" - notiflixGoogleFont(newBlockSettings.useGoogleFont, newBlockSettings.fontFamily); - }, - - // Merge First Initialize - Merge: function (userBlockExtend) { - // if initialized already - if (newBlockSettings) { - newBlockSettings = extendNotiflix(true, newBlockSettings, userBlockExtend); - } - // initialize first - else { - notiflixConsoleError('Notiflix Error', 'You have to initialize the "Notiflix.Block" module before call Merge function.'); - return false; - } - }, - - // Display Block: Standard - Standard: function (selector, message) { - var block = true; - var theIcon = 'standard'; - NotiflixBlockUnblockElement(block, selector, theIcon, message); - }, - - // Display Block: Hourglass - Hourglass: function (selector, message) { - var block = true; - var theIcon = 'hourglass'; - NotiflixBlockUnblockElement(block, selector, theIcon, message); - }, - - // Display Block: Circle - Circle: function (selector, message) { - var block = true; - var theIcon = 'circle'; - NotiflixBlockUnblockElement(block, selector, theIcon, message); - }, - - // Display Block: Arrows - Arrows: function (selector, message) { - var block = true; - var theIcon = 'arrows'; - NotiflixBlockUnblockElement(block, selector, theIcon, message); - }, - - // Display Block: Dots - Dots: function (selector, message) { - var block = true; - var theIcon = 'dots'; - NotiflixBlockUnblockElement(block, selector, theIcon, message); - }, - - // Display Block: Pulse - Pulse: function (selector, message) { - var block = true; - var theIcon = 'pulse'; - NotiflixBlockUnblockElement(block, selector, theIcon, message); - }, - - // Remove Block - Remove: function (selector, delay) { - var block = false; - var theIcon = null; - var message = null; - NotiflixBlockUnblockElement(block, selector, theIcon, message, delay); - }, - }, - // Block off - }; - // Notiflix: Main off - - - // Notiflix: Notify Single on - var notiflixNotifyCount = 0; - var NotiflixNotify = function (message, callback, theType, staticType) { - if (arguments && arguments.length === 4) { - - // notify counter on - notiflixNotifyCount++; - // notify counter off - - // if no message on - if (!message) { - message = 'Notiflix ' + staticType; - } - // if no message off - - // if plainText true = HTML tags not allowed on - if (newNotifySettings.plainText) { - message = notiflixPlaintext(message); // message plain text - } - // if plainText true = HTML tags not allowed off - - // if plainText false but the message length more than messageMaxLength = HTML tags error on - if (!newNotifySettings.plainText && message.length > newNotifySettings.messageMaxLength) { - Notiflix.Notify.Merge({ closeButton: true, plainText: false, }); - message = 'HTML Tags Error: Your content length is more than "messageMaxLength" option.'; // message html error - } - // if plainText false but the message length more than messageMaxLength = HTML tags error off - - // message max length substring on - if (message.length > newNotifySettings.messageMaxLength) { - message = message.substring(0, newNotifySettings.messageMaxLength) + '...'; - } - // message max length substring off - - // font awesome icon style on - if (newNotifySettings.fontAwesomeIconStyle === 'shadow') { - theType.fontAwesomeIconColor = theType.background; - } - // font awesome icon style off - - // if cssAnimaion false -> duration on - if (!newNotifySettings.cssAnimation) { - newNotifySettings.cssAnimationDuration = 0; - } - // if cssAnimaion false -> duration off - - // notify wrap on - var docBody = document.body; - var ntflxNotifyWrap = document.createElement('div'); - ntflxNotifyWrap.id = notifySettings.wrapID; - ntflxNotifyWrap.style.width = newNotifySettings.width; - ntflxNotifyWrap.style.zIndex = newNotifySettings.zindex; - ntflxNotifyWrap.style.opacity = newNotifySettings.opacity; - - // wrap position on - if (newNotifySettings.position === 'right-bottom') { - ntflxNotifyWrap.style.right = newNotifySettings.distance; - ntflxNotifyWrap.style.bottom = newNotifySettings.distance; - ntflxNotifyWrap.style.top = 'auto'; - ntflxNotifyWrap.style.left = 'auto'; - } else if (newNotifySettings.position === 'left-top') { - ntflxNotifyWrap.style.left = newNotifySettings.distance; - ntflxNotifyWrap.style.top = newNotifySettings.distance; - ntflxNotifyWrap.style.right = 'auto'; - ntflxNotifyWrap.style.bottom = 'auto'; - } else if (newNotifySettings.position === 'left-bottom') { - ntflxNotifyWrap.style.left = newNotifySettings.distance; - ntflxNotifyWrap.style.bottom = newNotifySettings.distance; - ntflxNotifyWrap.style.top = 'auto'; - ntflxNotifyWrap.style.right = 'auto'; - } else { // 'right-top' or else - ntflxNotifyWrap.style.right = newNotifySettings.distance; - ntflxNotifyWrap.style.top = newNotifySettings.distance; - ntflxNotifyWrap.style.left = 'auto'; - ntflxNotifyWrap.style.bottom = 'auto'; - } - // wrap position off - - // if background overlay true on - var notifyOverlay; - if (newNotifySettings.backOverlay) { - notifyOverlay = document.createElement('div'); - notifyOverlay.id = newNotifySettings.ID + 'Overlay'; - notifyOverlay.style.width = '100%'; - notifyOverlay.style.height = '100%'; - notifyOverlay.style.position = 'fixed'; - notifyOverlay.style.zIndex = newNotifySettings.zindex; - notifyOverlay.style.left = 0; - notifyOverlay.style.top = 0; - notifyOverlay.style.right = 0; - notifyOverlay.style.bottom = 0; - notifyOverlay.style.background = newNotifySettings.backOverlayColor; - notifyOverlay.className = (newNotifySettings.cssAnimation ? 'with-animation' : ''); - notifyOverlay.style.animationDuration = (newNotifySettings.cssAnimation) ? newNotifySettings.cssAnimationDuration + 'ms' : ''; - if (!document.getElementById(notifyOverlay.id)) { - docBody.appendChild(notifyOverlay); - } - } - // if background overlay true off - - if (!document.getElementById(ntflxNotifyWrap.id)) { - docBody.appendChild(ntflxNotifyWrap); - } - // notify wrap off - - // notify content on - var ntflxNotify = document.createElement('div'); - ntflxNotify.id = newNotifySettings.ID + '-' + notiflixNotifyCount; - ntflxNotify.className = newNotifySettings.className + ' ' + theType.childClassName + ' ' + (newNotifySettings.cssAnimation ? 'with-animation' : '') + ' ' + (newNotifySettings.useIcon ? 'with-icon' : '') + ' nx-' + newNotifySettings.cssAnimationStyle + ' ' + (newNotifySettings.closeButton && !callback ? 'with-close-button' : '') + ' ' + (callback && typeof callback === 'function' ? 'with-callback' : '') + ' ' + (newNotifySettings.clickToClose ? 'click-to-close' : ''); - ntflxNotify.style.fontSize = newNotifySettings.fontSize; - ntflxNotify.style.color = theType.textColor; - ntflxNotify.style.background = theType.background; - ntflxNotify.style.borderRadius = newNotifySettings.borderRadius; - - // rtl on - if (newNotifySettings.rtl) { - ntflxNotify.setAttribute('dir', 'rtl'); - ntflxNotify.classList.add('rtl-on'); - } - // rtl off - - // font-family on - ntflxNotify.style.fontFamily = '"' + newNotifySettings.fontFamily + '"' + ', sans-serif'; - // font-family off - - // use css animation on - if (newNotifySettings.cssAnimation) { - ntflxNotify.style.animationDuration = newNotifySettings.cssAnimationDuration + 'ms'; - } - // use css animation off - - // close button element on - var closeButtonHTML = ''; - if (newNotifySettings.closeButton && !callback) { - closeButtonHTML = ''; - } - // close buttpon element off - - // use icon on - if (newNotifySettings.useIcon) { - // use font awesome - if (newNotifySettings.useFontAwesome) { - ntflxNotify.innerHTML = '' + message + '' + (newNotifySettings.closeButton ? closeButtonHTML : ''); - } - // use notiflix icon - else { - var svgIcon; - if (staticType === 'Success') { // success - svgIcon = ''; - } else if (staticType === 'Failure') { // failure - svgIcon = ''; - } else if (staticType === 'Warning') { // warning - svgIcon = ''; - } else if (staticType === 'Info') { // info - svgIcon = ''; - } else { - svgIcon = ''; - } - ntflxNotify.innerHTML = svgIcon + '' + message + '' + (newNotifySettings.closeButton ? closeButtonHTML : ''); - } - } - // without icon - else { - ntflxNotify.innerHTML = '' + message + '' + (newNotifySettings.closeButton ? closeButtonHTML : ''); - } - // use icon off - // notify content off - - // notify append or prepend on - if (newNotifySettings.position === 'left-bottom' || newNotifySettings.position === 'right-bottom') { // the new one will be first - var notifyWrap = document.getElementById(ntflxNotifyWrap.id); - notifyWrap.insertBefore(ntflxNotify, notifyWrap.firstChild); - } else { - document.getElementById(ntflxNotifyWrap.id).appendChild(ntflxNotify); - } - - if (newNotifySettings.useIcon) { // if useIcon, dynamically vertical align the contents - var messageIcon = document.getElementById(ntflxNotify.id).querySelectorAll('.nmi')[0]; - var messageIconH = 40; - // if font awesome - if (newNotifySettings.useFontAwesome) { - messageIconH = Math.round(parseInt(messageIcon.offsetHeight)); - } - // if notiflix SVG - else { - var SvgBBox = messageIcon.getBBox(); - messageIconH = Math.round(parseInt(SvgBBox.width)); - } - var messageText = document.getElementById(ntflxNotify.id).querySelectorAll('span')[0]; - var messageTextH = Math.round(messageText.offsetHeight); - if (messageTextH <= messageIconH) { - messageText.style.paddingTop = (messageIconH - messageTextH) / 2 + 'px'; - messageText.style.paddingBottom = (messageIconH - messageTextH) / 2 + 'px'; - } - } - // notify append or prepend off - - // remove by timeout or click on - if (document.getElementById(ntflxNotify.id)) { - // set elements on - var removeDiv = document.getElementById(ntflxNotify.id); - var removeWrap = document.getElementById(ntflxNotifyWrap.id); - var removeOverlay; - if (newNotifySettings.backOverlay) { - removeOverlay = document.getElementById(notifyOverlay.id); - } - // set elements on - - // timeout vars on - var timeoutHide; - var timeoutRemove; - // timeout vars off - - // hide notify elm and hide overlay on - var hideNotifyElementsAndOverlay = function () { - removeDiv.classList.add('remove'); - if (newNotifySettings.backOverlay && removeWrap.childElementCount <= 0) { - removeOverlay.classList.add('remove'); - } - clearTimeout(timeoutHide); - }; - // hide notify elm and hide overlay off - - // remove notify elm and wrapper on - var removeNotifyElmentsAndWrapper = function () { - var notifyExist = document.getElementById(ntflxNotify.id); - if (notifyExist && removeDiv.parentNode !== null) { - removeDiv.parentNode.removeChild(removeDiv); - } - if (removeWrap.childElementCount <= 0 && removeWrap.parentNode !== null) { // if childs count === 0 remove wrap - removeWrap.parentNode.removeChild(removeWrap); - if (newNotifySettings.backOverlay && removeOverlay.parentNode !== null) { - removeOverlay.parentNode.removeChild(removeOverlay); - } - } - clearTimeout(timeoutRemove); - }; - // remove notify elm and wrapper off - - // if close button and callback undefined on - if (newNotifySettings.closeButton && !callback) { - var closeButtonElm = document.getElementById(ntflxNotify.id).querySelectorAll('span.notify-close-button')[0]; - closeButtonElm.addEventListener('click', function () { - hideNotifyElementsAndOverlay(); - var clickToCloseTimeout = setTimeout(function () { - removeNotifyElmentsAndWrapper(); - clearTimeout(clickToCloseTimeout); - }, newNotifySettings.cssAnimationDuration); - }); - } - // if close button and callback undefined off - - // if callback or click to close on - if ((callback && typeof callback === 'function') || newNotifySettings.clickToClose) { - removeDiv.addEventListener('click', function (e) { - if (callback && typeof callback === 'function') { - callback(); - } - hideNotifyElementsAndOverlay(); - var callbackTimeout = setTimeout(function () { - removeNotifyElmentsAndWrapper(); - clearTimeout(callbackTimeout); - }, newNotifySettings.cssAnimationDuration); - }); - } - // if callback or click to close off - - // else auto remove on - if (!newNotifySettings.closeButton && !callback) { - timeoutHide = setTimeout(function () { - hideNotifyElementsAndOverlay(); - }, newNotifySettings.timeout); - timeoutRemove = setTimeout(function () { - removeNotifyElmentsAndWrapper(); - }, newNotifySettings.timeout + newNotifySettings.cssAnimationDuration); - } - // else auto remove off - } - // remove by timeout or click off - - // notify - show only the last one on - if (newNotifySettings.showOnlyTheLastOne && notiflixNotifyCount > 0) { - var allNotifyElmNotTheLastOne = document.querySelectorAll('[id^=' + newNotifySettings.ID + '-]:not([id=' + newNotifySettings.ID + '-' + notiflixNotifyCount + '])'); - for (var i = 0; i < allNotifyElmNotTheLastOne.length; i++) { - var eachNotifyElmNotLastOne = allNotifyElmNotTheLastOne[i]; - if (eachNotifyElmNotLastOne.parentNode !== null) { - eachNotifyElmNotLastOne.parentNode.removeChild(eachNotifyElmNotLastOne); - } - } - } - // notify - show only the last one off - - } else { - notiflixConsoleError('Notiflix Error', 'Where is the arguments?'); - } - }; - // Notiflix: Notify Single off - - - // Notiflix: Report Single on - var NotiflixReport = function (title, message, buttonText, buttonCallback, theType, staticType) { - - // check the arguments on - if (!title) { title = 'Notiflix ' + staticType; } - if (!message) { - if (staticType === 'Success') { - message = '"Do not try to become a person of success but try to become a person of value."

                - Albert Einstein'; - } - else if (staticType === 'Failure') { - message = '"Failure is simply the opportunity to begin again, this time more intelligently."

                - Henry Ford'; - } - else if (staticType === 'Warning') { - message = '"The peoples who want to live comfortably without producing and fatigue; they are doomed to lose their dignity, then liberty, and then independence and destiny."

                - Mustafa Kemal Ataturk'; - } - else if (staticType === 'Info') { - message = '"Knowledge rests not upon truth alone, but upon error also."

                - Carl Gustav Jung'; - } - } - if (!buttonText) { buttonText = 'Okay'; } - if (!buttonCallback) { buttonCallback = undefined; } - // check the arguments off - - // if plainText true = HTML tags not allowed on - if (newReportSettings.plainText) { - title = notiflixPlaintext(title); - message = notiflixPlaintext(message); - buttonText = notiflixPlaintext(buttonText); - } - // if plainText true = HTML tags not allowed off - - // if plainText false but the contents length more than *MaxLength = HTML tags error on - if (!newReportSettings.plainText) { - if (title.length > newReportSettings.titleMaxLength) { - title = 'HTML Tags Error'; // title html error - message = 'Your Title content length is more than "titleMaxLength" option.'; // message html error - buttonText = 'Okay'; // button html error - } - if (message.length > newReportSettings.messageMaxLength) { - title = 'HTML Tags Error'; // title html error - message = 'Your Message content length is more than "messageMaxLength" option.'; // message html error - buttonText = 'Okay'; // button html error - } - if (buttonText.length > newReportSettings.buttonMaxLength) { - title = 'HTML Tags Error'; // title html error - message = 'Your Button content length is more than "buttonMaxLength" option.'; // message html error - buttonText = 'Okay'; // button html error - } - } - // if plainText false but the contents length more than *MaxLength = HTML tags error off - - // max length on - if (title.length > newReportSettings.titleMaxLength) { - title = title.substring(0, newReportSettings.titleMaxLength) + '...'; - } - if (message.length > newReportSettings.messageMaxLength) { - message = message.substring(0, newReportSettings.messageMaxLength) + '...'; - } - if (buttonText.length > newReportSettings.buttonMaxLength) { - buttonText = buttonText.substring(0, newReportSettings.buttonMaxLength) + '...'; - } - // max length off - - // if cssAnimaion false -> duration on - if (!newReportSettings.cssAnimation) { - newReportSettings.cssAnimationDuration = 0; - } - // if cssAnimaion false -> duration off - - // report wrap on - var docBody = document.body; - var ntflxReportWrap = document.createElement('div'); - ntflxReportWrap.id = reportSettings.ID; - ntflxReportWrap.className = newReportSettings.className; - ntflxReportWrap.style.width = newReportSettings.width; - ntflxReportWrap.style.zIndex = newReportSettings.zindex; - ntflxReportWrap.style.borderRadius = newReportSettings.borderRadius; - ntflxReportWrap.style.fontFamily = '"' + newReportSettings.fontFamily + '"' + ', sans-serif'; - - // rtl on - if (newReportSettings.rtl) { - ntflxReportWrap.setAttribute('dir', 'rtl'); - ntflxReportWrap.classList.add('rtl-on'); - } - // rtl off - - // overlay on - var reportOverlay = ''; - if (newReportSettings.backOverlay) { - reportOverlay = '
                '; - } - // overlay off - - // svg icon on - var svgIcon = ''; - if (staticType === 'Success') { - svgIcon = notiflixReportSvgSuccess(newReportSettings.svgSize, theType.svgColor); - } else if (staticType === 'Failure') { - svgIcon = notiflixReportSvgFailure(newReportSettings.svgSize, theType.svgColor); - } else if (staticType === 'Warning') { - svgIcon = notiflixReportSvgWarning(newReportSettings.svgSize, theType.svgColor); - } else if (staticType === 'Info') { - svgIcon = notiflixReportSvgInfo(newReportSettings.svgSize, theType.svgColor); - } - // svg icon off - - ntflxReportWrap.innerHTML = reportOverlay + '
                ' + - '
                ' + svgIcon + '
                ' + - '
                ' + title + '
                ' + - '

                ' + message + '

                ' + - '' + buttonText + '' + - '
                '; - - // if there is no report element - if (!document.getElementById(ntflxReportWrap.id)) { - // append - docBody.appendChild(ntflxReportWrap); - - // vertical align on - var windowH = Math.round(window.innerHeight); - var reportH = Math.round(document.getElementById(ntflxReportWrap.id).offsetHeight); - ntflxReportWrap.style.top = (windowH - reportH) / 2 + 'px'; - // vertical align off - - // callback on - var getReportWrap = document.getElementById(ntflxReportWrap.id); - var reportButton = document.getElementById('NXReportButton'); - reportButton.addEventListener('click', function () { - // if callback on - if (buttonCallback && typeof buttonCallback === 'function') { - buttonCallback(); - } - // if callback off - - // remove element on - getReportWrap.classList.add('remove'); - var timeout = setTimeout(function () { - if (getReportWrap.parentNode !== null) { - getReportWrap.parentNode.removeChild(getReportWrap); - } - clearTimeout(timeout); - }, newReportSettings.cssAnimationDuration); - // remove element off - }); - // callback off - - } - // report wrap off - - }; - // Notiflix: Report Single off - - - // Notiflix: Confirm Single on - var NotiflixConfirm = function (title, message, okButtonText, cancelButtonText, okButtonCallback, cancelButtonCallback) { - // if not initialized pretend like init - if (!newConfirmSettings) { - Notiflix.Confirm.Init({}); - } - - // if plainText true => HTML tags not allowed on - if (newConfirmSettings.plainText) { - title = notiflixPlaintext(title); - message = notiflixPlaintext(message); - okButtonText = notiflixPlaintext(okButtonText); - cancelButtonText = notiflixPlaintext(cancelButtonText); - } - // if plainText true => HTML tags not allowed off - - // if plainText false but the contents length more than *MaxLength = HTML tags error on - if (!newConfirmSettings.plainText) { - if (title.length > newConfirmSettings.titleMaxLength) { - title = 'HTML Tags Error'; // title html error - message = 'Your Title content length is more than "titleMaxLength" option.'; // message html error - okButtonText = 'Okay'; // button html error - cancelButtonText = '...'; // button html error - } - if (message.length > newConfirmSettings.messageMaxLength) { - title = 'HTML Tags Error'; // title html error - message = 'Your Message content length is more than "messageMaxLength" option.'; // message html error - okButtonText = 'Okay'; // button html error - cancelButtonText = '...'; // button html error - } - if ((okButtonText.length || cancelButtonText.length) > newConfirmSettings.buttonsMaxLength) { - title = 'HTML Tags Error'; // title html error - message = 'Your Buttons contents length is more than "buttonsMaxLength" option.'; // message html error - okButtonText = 'Okay'; // button html error - cancelButtonText = '...'; // button html error - } - } - // if plainText false but the contents length more than *MaxLength = HTML tags error off - - // max length on - if (title.length > newConfirmSettings.titleMaxLength) { - title = title.substring(0, newConfirmSettings.titleMaxLength) + '...'; - } - if (message.length > newConfirmSettings.messageMaxLength) { - message = message.substring(0, newConfirmSettings.messageMaxLength) + '...'; - } - if (okButtonText.length > newConfirmSettings.buttonsMaxLength) { - okButtonText = okButtonText.substring(0, newConfirmSettings.buttonsMaxLength) + '...'; - } - if (cancelButtonText.length > newConfirmSettings.buttonsMaxLength) { - cancelButtonText = cancelButtonText.substring(0, newConfirmSettings.buttonsMaxLength) + '...'; - } - // max length off - - // if cssAnimaion false -> duration on - if (!newConfirmSettings.cssAnimation) { - newConfirmSettings.cssAnimationDuration = 0; - } - // if cssAnimaion false -> duration off - - // confirm wrap on - var docBody = document.body; - var ntflxConfirmWrap = document.createElement('div'); - ntflxConfirmWrap.id = confirmSettings.ID; - ntflxConfirmWrap.className = newConfirmSettings.className + (newConfirmSettings.cssAnimation ? ' with-animation nx-' + newConfirmSettings.cssAnimationStyle : ''); - ntflxConfirmWrap.style.width = newConfirmSettings.width; - ntflxConfirmWrap.style.zIndex = newConfirmSettings.zindex; - - // rtl on - if (newConfirmSettings.rtl) { - ntflxConfirmWrap.setAttribute('dir', 'rtl'); - ntflxConfirmWrap.classList.add('rtl-on'); - } - // rtl off - - // font-family on - ntflxConfirmWrap.style.fontFamily = '"' + newConfirmSettings.fontFamily + '"' + ', sans-serif'; - // font-family off - - // if background overlay true on - var confirmOverlay = ''; - if (newConfirmSettings.backOverlay) { - confirmOverlay = '
                '; - } - // if background overlay true off - - // if have a callback => add cancel button on - var cancelButtonHTML = ''; - if (okButtonCallback) { - cancelButtonHTML = '' + cancelButtonText + ''; - } - // if have a callback => add cancel button off - - ntflxConfirmWrap.innerHTML = confirmOverlay + - '
                ' + - '
                ' + - '
                ' + title + '
                ' + - '

                ' + message + '

                ' + - '
                ' + - '
                ' + - '' + okButtonText + '' + - cancelButtonHTML + - '
                ' + - '
                '; - // confirm wrap off - - // if there is no confirm box on - if (!document.getElementById(ntflxConfirmWrap.id)) { - docBody.appendChild(ntflxConfirmWrap); - - // position on - if (newConfirmSettings.position === 'center') { // if center-center - var windowH = Math.round(window.innerHeight); - var confirmH = Math.round(document.getElementById(ntflxConfirmWrap.id).offsetHeight); - ntflxConfirmWrap.style.top = (windowH - confirmH) / 2 + 'px'; - ntflxConfirmWrap.style.left = newConfirmSettings.distance; - ntflxConfirmWrap.style.right = newConfirmSettings.distance; - ntflxConfirmWrap.style.bottom = 'auto'; - ntflxConfirmWrap.style.margin = 'auto'; - } else if (newConfirmSettings.position === 'right-top') { // if right-top - ntflxConfirmWrap.style.right = newConfirmSettings.distance; - ntflxConfirmWrap.style.top = newConfirmSettings.distance; - ntflxConfirmWrap.style.bottom = 'auto'; - ntflxConfirmWrap.style.left = 'auto'; - ntflxConfirmWrap.style.margin = 'auto'; - } else if (newConfirmSettings.position === 'right-bottom') { // if right-bottom - ntflxConfirmWrap.style.right = newConfirmSettings.distance; - ntflxConfirmWrap.style.bottom = newConfirmSettings.distance; - ntflxConfirmWrap.style.top = 'auto'; - ntflxConfirmWrap.style.left = 'auto'; - ntflxConfirmWrap.style.margin = 'auto'; - } else if (newConfirmSettings.position === 'left-top') { // if left-top - ntflxConfirmWrap.style.left = newConfirmSettings.distance; - ntflxConfirmWrap.style.top = newConfirmSettings.distance; - ntflxConfirmWrap.style.right = 'auto'; - ntflxConfirmWrap.style.bottom = 'auto'; - ntflxConfirmWrap.style.margin = 'auto'; - } else if (newConfirmSettings.position === 'left-bottom') { // if left-bottom - ntflxConfirmWrap.style.left = newConfirmSettings.distance; - ntflxConfirmWrap.style.bottom = newConfirmSettings.distance; - ntflxConfirmWrap.style.top = 'auto'; - ntflxConfirmWrap.style.right = 'auto'; - ntflxConfirmWrap.style.margin = 'auto'; - } else { // if center-top - ntflxConfirmWrap.style.top = newConfirmSettings.distance; - ntflxConfirmWrap.style.left = 0; - ntflxConfirmWrap.style.right = 0; - ntflxConfirmWrap.style.bottom = 'auto'; - ntflxConfirmWrap.style.margin = 'auto'; - } - // position off - - // buttons listener on - var confirmCloseWrap = document.getElementById(ntflxConfirmWrap.id); - var okButton = document.getElementById('NXConfirmButtonOk'); - - // ok button listener on - okButton.addEventListener('click', function () { - // if ok callback && if ok callback is a function - if (okButtonCallback && typeof okButtonCallback === 'function') { - okButtonCallback(); - } - confirmCloseWrap.classList.add('remove'); - - var timeout = setTimeout(function () { - if (confirmCloseWrap.parentNode !== null) { - confirmCloseWrap.parentNode.removeChild(confirmCloseWrap); - clearTimeout(timeout); - } - }, newConfirmSettings.cssAnimationDuration); - }); - // ok button listener off - - // if ok callback && if ok callback a function => add Cancel Button listener on - if (okButtonCallback && typeof okButtonCallback === 'function') { - // cancel button listener on - var cancelButton = document.getElementById('NXConfirmButtonCancel'); - cancelButton.addEventListener('click', function () { - // if cancel callback && if cancel callback a function - if (cancelButtonCallback && typeof cancelButtonCallback === 'function') { - cancelButtonCallback(); - } - confirmCloseWrap.classList.add('remove'); - - var timeout = setTimeout(function () { - if (confirmCloseWrap.parentNode !== null) { - confirmCloseWrap.parentNode.removeChild(confirmCloseWrap); - clearTimeout(timeout); - } - }, newConfirmSettings.cssAnimationDuration); - }); - // cancel button listener off - } - // if ok callback && if ok callback a function => add Cancel Button listener off - // buttons listener off - } - // if there is no confirm box off - }; - // Notiflix: Confirm Single off - - - // Notiflix: Loading Single on - var NotiflixLoading = function (message, iconType, display, theDelay) { - // if not initialized pretend like init - if (!newLoadingSettings) { - Notiflix.Loading.Init({}); - } - // check the message - if (!message) { - message = ''; - } - // show loading - if (display) { - - // if message settings on - if (message.toString().length > newLoadingSettings.messageMaxLength) { - message = notiflixPlaintext(message).toString().substring(0, newLoadingSettings.messageMaxLength) + '...'; - } else { - message = notiflixPlaintext(message).toString(); - } - var intSvgSize = parseInt(newLoadingSettings.svgSize); - var messageHTML = ''; - if (message.length > 0) { - var messagePosTop = Math.round(intSvgSize - (intSvgSize / 4)).toString() + 'px'; - var messageHeight = (parseInt(newLoadingSettings.messageFontSize) * 1.4).toString() + 'px'; - messageHTML = '

                ' + message + '

                '; - } - // if message settings off - - // if cssAnimaion false -> duration on - if (!newLoadingSettings.cssAnimation) { - newLoadingSettings.cssAnimationDuration = 0; - } - // if cssAnimaion false -> duration off - - // svgIcon on - var svgIcon = ''; - if (iconType === 'standard') { - svgIcon = notiflixIndicatorSvgStandard(newLoadingSettings.svgSize, newLoadingSettings.svgColor); - } else if (iconType === 'hourglass') { - svgIcon = notiflixIndicatorSvgHourglass(newLoadingSettings.svgSize, newLoadingSettings.svgColor); - } else if (iconType === 'circle') { - svgIcon = notiflixIndicatorSvgCircle(newLoadingSettings.svgSize, newLoadingSettings.svgColor); - } else if (iconType === 'arrows') { - svgIcon = notiflixIndicatorSvgArrows(newLoadingSettings.svgSize, newLoadingSettings.svgColor); - } else if (iconType === 'dots') { - svgIcon = notiflixIndicatorSvgDots(newLoadingSettings.svgSize, newLoadingSettings.svgColor); - } else if (iconType === 'pulse') { - svgIcon = notiflixIndicatorSvgPulse(newLoadingSettings.svgSize, newLoadingSettings.svgColor); - } else if (iconType === 'custom' && newLoadingSettings.customSvgUrl !== null) { - svgIcon = 'Notiflix'; - } else if (iconType === 'custom' && newLoadingSettings.customSvgUrl == null) { - notiflixConsoleError('Notiflix Error', 'You have to set a static SVG url to "customSvgUrl" option to use Loading Custom.'); - return false; - } else if (iconType === 'notiflix') { - svgIcon = notiflixIndicatorSvgNotiflix(newLoadingSettings.svgSize, '#f8f8f8', '#32c682'); - } - var svgPosTop = 0; - if (message.length > 0) { - svgPosTop = '-' + Math.round(intSvgSize - (intSvgSize / 4)).toString() + 'px'; - } - var svgIconHTML = '
                ' + svgIcon + '
                '; - // svgIcon off - - // loading wrap on - var docBody = document.body; - var ntflxLoadingWrap = document.createElement('div'); - ntflxLoadingWrap.id = loadingSettings.ID; - ntflxLoadingWrap.className = newLoadingSettings.className + (newLoadingSettings.cssAnimation ? ' with-animation' : '') + (newLoadingSettings.clickToClose ? ' click-to-close' : ''); - ntflxLoadingWrap.style.zIndex = newLoadingSettings.zindex; - ntflxLoadingWrap.style.background = newLoadingSettings.backgroundColor; - ntflxLoadingWrap.style.animationDuration = newLoadingSettings.cssAnimationDuration + 'ms'; - ntflxLoadingWrap.style.fontFamily = '"' + newLoadingSettings.fontFamily + '"' + ', sans-serif'; - - // rtl on - if (newLoadingSettings.rtl) { - ntflxLoadingWrap.setAttribute('dir', 'rtl'); - ntflxLoadingWrap.classList.add('rtl-on'); - } - // rtl off - - // append on - ntflxLoadingWrap.innerHTML = svgIconHTML + messageHTML; - - // if there is no loading element - if (!document.getElementById(ntflxLoadingWrap.id)) { - // append - docBody.appendChild(ntflxLoadingWrap); - - // if click to close - if (newLoadingSettings.clickToClose) { - var loadingWrapElm = document.getElementById(ntflxLoadingWrap.id); - loadingWrapElm.addEventListener('click', function () { - ntflxLoadingWrap.classList.add('remove'); - var timeout = setTimeout(function () { - if (ntflxLoadingWrap.parentNode !== null) { - ntflxLoadingWrap.parentNode.removeChild(ntflxLoadingWrap); - clearTimeout(timeout); - } - }, newLoadingSettings.cssAnimationDuration); - }); - } - } - // append off - - } - // remove loading - else { - // if there is a loading element - if (document.getElementById(loadingSettings.ID)) { - var loadingElm = document.getElementById(loadingSettings.ID); - var timeout = setTimeout(function () { - loadingElm.classList.add('remove'); - var timeout2 = setTimeout(function () { - if (loadingElm.parentNode !== null) { - loadingElm.parentNode.removeChild(loadingElm); - clearTimeout(timeout2); - } - }, newLoadingSettings.cssAnimationDuration); - clearTimeout(timeout); - }, theDelay); - } - } - }; - // Notiflix: Loading Single off - - // Notiflix: Loading Change Message on - var NotiflixLoadingChange = function (newMessage) { - // check the new message - if (!newMessage) { - newMessage = ''; - } - // if has any loading - if (document.getElementById(loadingSettings.ID)) { - // if there is a new message - if (newMessage.length > 0) { - // max length on - if (newMessage.length > newLoadingSettings.messageMaxLength) { - newMessage = notiflixPlaintext(newMessage).toString().substring(0, newLoadingSettings.messageMaxLength) + '...'; - } else { - newMessage = notiflixPlaintext(newMessage).toString(); - } - // max length off - - // there is a message element - var oldMessageElm = document.getElementById(loadingSettings.ID).getElementsByTagName('p')[0]; - if (oldMessageElm) { - oldMessageElm.innerHTML = newMessage; // change the message - } - // there is no message element - else { - // create a new message element on - var newMessageHTML = document.createElement('p'); - newMessageHTML.id = newLoadingSettings.messageID; - newMessageHTML.className = 'loading-message new'; - newMessageHTML.style.color = newLoadingSettings.messageColor; - newMessageHTML.style.fontSize = newLoadingSettings.messageFontSize; - var intSvgSize = parseInt(newLoadingSettings.svgSize); - var messagePosTop = Math.round(intSvgSize - (intSvgSize / 4)).toString() + 'px'; - newMessageHTML.style.top = messagePosTop; - var messageHeight = (parseInt(newLoadingSettings.messageFontSize) * 1.4).toString() + 'px'; - newMessageHTML.style.height = messageHeight; - newMessageHTML.innerHTML = newMessage; - var messageWrap = document.getElementById(loadingSettings.ID); - messageWrap.appendChild(newMessageHTML); - // create a new message element off - - // vertical align svg on - var svgDivElm = document.getElementById(loadingSettings.ID).getElementsByTagName('div')[0]; - var svgNewPosTop = '-' + Math.round(intSvgSize - (intSvgSize / 4)).toString() + 'px'; - svgDivElm.style.top = svgNewPosTop; - // vertical align svg off - } - } - // if no message - else { - notiflixConsoleError('Notiflix Error', 'Where is the new message?'); - } - } - }; - // Notiflix: Loading Change Message off - - - // Notiflix: Block or Unblock Element on - var notiflixBlockElementCounter = 0; - var NotiflixBlockUnblockElement = function (block, selector, iconType, message, theDelay) { - - // check typeof selector on - if (typeof selector !== 'string') { - notiflixConsoleError('Notiflix Error', 'The selector must be a String.'); - return false; - } - // check typeof selector off - - // check the delay on - if (typeof theDelay !== 'number') { - theDelay = 0; - } - // check the delay off - - // check the selector on - var getSelector = document.querySelectorAll(selector); - if (getSelector.length > 0) { - - // if not initialized pretend like init on - if (!newBlockSettings) { - Notiflix.Block.Init({}); - } - // if not initialized pretend like init off - - // check the message on - if (!message || (message && typeof message !== 'string')) { - message = undefined; - } - // check the message off - - } else { - notiflixConsoleError('Notiflix Error', 'You called the "Notiflix.Block..." function with "' + selector + '" selector, but there is no such element(s) on the document.'); - return false; - } - // check the selector off - - // if cssAnimaion false => duration on - if (!newBlockSettings.cssAnimation) { - newBlockSettings.cssAnimationDuration = 0; - } - // if cssAnimaion false => duration off - - // check the class name on - var blockClassName = 'notiflix-block'; - if (newBlockSettings.className && typeof newBlockSettings.className === 'string') { - blockClassName = newBlockSettings.className.trim(); - } - // check the class name off - - // check query limit on - var getQueryLimit = (typeof newBlockSettings.querySelectorLimit === 'number' ? newBlockSettings.querySelectorLimit : 200); - var checkQueryLimit = (getSelector.length >= getQueryLimit ? getQueryLimit : getSelector.length); - // check query limit off - - // block - if (block) { - - // add element(s) and style on - for (var i = 0; i < checkQueryLimit; i++) { - var eachSelector = getSelector[i]; - - // check block element exist on - var eachBlockElement = eachSelector.querySelectorAll('[id^=' + blockSettings.ID + ']'); - if (eachBlockElement.length < 1) { - - // check the icon on - var icon = ''; - if (iconType) { - if (iconType === 'hourglass') { - icon = notiflixIndicatorSvgHourglass(newBlockSettings.svgSize, newBlockSettings.svgColor); - } else if (iconType === 'circle') { - icon = notiflixIndicatorSvgCircle(newBlockSettings.svgSize, newBlockSettings.svgColor); - } else if (iconType === 'arrows') { - icon = notiflixIndicatorSvgArrows(newBlockSettings.svgSize, newBlockSettings.svgColor); - } else if (iconType === 'dots') { - icon = notiflixIndicatorSvgDots(newBlockSettings.svgSize, newBlockSettings.svgColor); - } else if (iconType === 'pulse') { - icon = notiflixIndicatorSvgPulse(newBlockSettings.svgSize, newBlockSettings.svgColor); - } else { - icon = notiflixIndicatorSvgStandard(newBlockSettings.svgSize, newBlockSettings.svgColor); - } - } - var intSvgSize = parseInt(newBlockSettings.svgSize); - var posRatio = Math.round(intSvgSize - (intSvgSize / 5)).toString() + 'px'; - var svgPosTop = (message && message.length > 0 ? '-' + posRatio : 0); - var iconElement = '' + icon + ''; - // check the icon off - - // check the message on - var messageElement = ''; - var messageHeight = 0; - if (message) { - if (message.length > newBlockSettings.messageMaxLength) { - message = notiflixPlaintext(message).toString().substring(0, newBlockSettings.messageMaxLength) + '...'; - } else { - message = notiflixPlaintext(message).toString(); - } - messageHeight = Math.round(parseInt(newBlockSettings.messageFontSize) * 1.4).toString() + 'px'; - messageElement = '' + message + ''; - } - // check the message off - - // block element on - notiflixBlockElementCounter++; - var notiflixBlockWrap = document.createElement('div'); - notiflixBlockWrap.id = blockSettings.ID + '-' + notiflixBlockElementCounter; - notiflixBlockWrap.className = blockClassName + '-wrap' + (newBlockSettings.cssAnimation ? ' with-animation' : ''); - notiflixBlockWrap.style.position = newBlockSettings.position; - notiflixBlockWrap.style.zIndex = newBlockSettings.zindex; - notiflixBlockWrap.style.background = newBlockSettings.backgroundColor; - notiflixBlockWrap.style.animationDuration = newBlockSettings.cssAnimationDuration + 'ms'; - notiflixBlockWrap.style.fontFamily = '"' + newBlockSettings.fontFamily + '"' + ', sans-serif'; - // block element off - - // block element rtl on - if (newBlockSettings.rtl) { - notiflixBlockWrap.setAttribute('dir', 'rtl'); - notiflixBlockWrap.classList.add('rtl-on'); - } - // block element rtl off - - // block element data on - notiflixBlockWrap.innerHTML = iconElement + messageElement; - // block element data off - - // append block element on - var eachSelectorPos = getComputedStyle(eachSelector).getPropertyValue('position'); - eachSelectorPos = eachSelectorPos && typeof eachSelectorPos === 'string' ? eachSelectorPos.toLowerCase() : 'relative'; - - // selector internal style on - var eachSelectorIdOrClass = ''; - if (eachSelector.getAttribute('id')) { - eachSelectorIdOrClass = '#' + eachSelector.getAttribute('id'); - } else if (eachSelector.classList[0]) { - eachSelectorIdOrClass = '.' + eachSelector.classList[0]; - } - - var positions = ['absolute', 'relative', 'fixed', 'sticky']; - if (positions.indexOf(eachSelectorPos) <= -1) { - var minHeight = Math.round((parseInt(messageHeight) + intSvgSize) * 1.5).toString() + 'px'; - var style = ''; - var styleRange = document.createRange(); - styleRange.selectNode(document.head); - var styleFragment = styleRange.createContextualFragment(style); - document.head.appendChild(styleFragment); - eachSelector.classList.add(blockClassName + '-position'); - } - // selector internal style off - - // append - eachSelector.appendChild(notiflixBlockWrap); - // append block element off - } - // check block element exist off - } - // add element(s) and style off - } - // unblock/remove - else { - - // Step 3 => Remove each block element on - var removeBlockElements = function (eachOne) { - var timeout = setTimeout(function () { - // remove element - eachOne.remove(); - - // remove this selector internal style - var eachOneId = eachOne.getAttribute('id'); - var eachOneStyle = document.getElementById('Style-' + eachOneId); - if (eachOneStyle) { - eachOneStyle.remove(); - } - - // clear timeout - clearTimeout(timeout); - }, newBlockSettings.cssAnimationDuration); - } - // Step 3 => Remove each block element off - - // Step 2A => Remove each block element on - var removeClassBlockElements = function (eachBlockElement) { - // if elements exist - if (eachBlockElement && eachBlockElement.length > 0) { - for (var i = 0; i < eachBlockElement.length; i++) { - var eachOne = eachBlockElement[i]; - if (eachOne) { - // add remove class - eachOne.classList.add('remove'); - // remove block elements - removeBlockElements(eachOne); - } - } - } - // not exist - else { - notiflixConsoleLog('Notiflix Info', '"Notiflix.Block.Remove();" function called with "' + selector + '" selector, but this selector does not have a "Notiflix.Block..." element to remove.'); - } - } - // Step 2A => Remove each block element on - - // Step 2B => Remove each selector class name on - var removeEachSelectorClassName = function (eachSelector) { - var timeout = setTimeout(function () { - // remove class name - var positionClass = blockClassName + '-position'; - eachSelector.classList.remove(positionClass); - - // clear timeout - clearTimeout(timeout); - }, newBlockSettings.cssAnimationDuration + 300); - } - // Step 2B => Remove each selector class name off - - // Step 1 => Remove selector class name on - var selectorTimeout = setTimeout(function () { - for (var i = 0; i < checkQueryLimit; i++) { - var eachSelector = getSelector[i]; - - // remove each selector class name - removeEachSelectorClassName(eachSelector); - - // remove each block element - eachBlockElement = eachSelector.querySelectorAll('[id^=' + blockSettings.ID + ']'); - removeClassBlockElements(eachBlockElement); - } - // clear timeout - clearTimeout(selectorTimeout); - }, theDelay); - // Step 1 => Remove selector class name off - } - }; - // Notiflix: Block or Unblock Element off - - - // Notiflix: Report SVG Success on - var notiflixReportSvgSuccess = function (width, color) { - if (!width) { width = '110px'; } - if (!color) { color = '#32c682'; } - var reportSvgSuccess = ''; - return reportSvgSuccess; - }; - // Notiflix: Report SVG Success off - - // Notiflix: Report SVG Failure on - var notiflixReportSvgFailure = function (width, color) { - if (!width) { width = '110px'; } - if (!color) { color = '#ff5549'; } - var reportSvgFailure = ''; - return reportSvgFailure; - }; - // Notiflix: Report SVG Failure off - - // Notiflix: Report SVG Warning on - var notiflixReportSvgWarning = function (width, color) { - if (!width) { width = '110px'; } - if (!color) { color = '#eebf31'; } - var reportSvgWarning = ''; - return reportSvgWarning; - }; - // Notiflix: Report SVG Warning off - - // Notiflix: Report SVG Info on - var notiflixReportSvgInfo = function (width, color) { - if (!width) { width = '110px'; } - if (!color) { color = '#26c0d3'; } - var reportSvgInfo = ''; - return reportSvgInfo; - }; - // Notiflix: Report SVG Info off - - - // Notiflix: Indicator SVG standard on - var notiflixIndicatorSvgStandard = function (width, color) { - if (!width) { width = '60px'; } - if (!color) { color = '#32c682'; } - var standard = ''; - return standard; - }; - // Notiflix: Indicator SVG standard off - - // Notiflix: Indicator SVG hourglass on - var notiflixIndicatorSvgHourglass = function (width, color) { - if (!width) { width = '60px'; } - if (!color) { color = '#32c682'; } - var hourglass = ' '; - return hourglass; - }; - // Notiflix: Indicator SVG hourglass off - - // Notiflix: Indicator SVG circle on - var notiflixIndicatorSvgCircle = function (width, color) { - if (!width) { width = '60px'; } - if (!color) { color = '#32c682'; } - var circle = ''; - return circle; - }; - // Notiflix: Indicator SVG circle off - - // Notiflix: Indicator SVG arrows on - var notiflixIndicatorSvgArrows = function (width, color) { - if (!width) { width = '60px'; } - if (!color) { color = '#32c682'; } - var arrows = ''; - return arrows; - }; - // Notiflix: Indicator SVG arrows off - - // Notiflix: Indicator SVG dots on - var notiflixIndicatorSvgDots = function (width, color) { - if (!width) { width = '60px'; } - if (!color) { color = '#32c682'; } - var dots = ' '; - return dots; - }; - // Notiflix: Indicator SVG dots off - - // Notiflix: Indicator SVG pulse on - var notiflixIndicatorSvgPulse = function (width, color) { - if (!width) { width = '60px'; } - if (!color) { color = '#32c682'; } - var pulse = ''; - return pulse; - }; - // Notiflix: Indicator SVG pulse off - - // Notiflix: Indicator SVG notiflix on - var notiflixIndicatorSvgNotiflix = function (width, white, green) { - if (!width) { width = '60px'; } - if (!white) { white = '#f8f8f8'; } - if (!green) { green = '#32c682'; } - var notiflixIcon = ''; - return notiflixIcon; - }; - // Notiflix: Indicator SVG notiflix off - - - /* - * 侧边滑出弹层插件 mSlider.js - * DH (https://denghao.me) - * 2018-07 - */ - // (function(b, c) { - // function a(d) { - // this.opts = { - // "direction": d.direction || "left", - // "distance": d.distance || "60%", - // "dom": this.Q(d.dom), - // "time": d.time || "", - // "maskClose": (d.maskClose + "").toString() !== "false" ? true : false, - // "callback": d.callback || "" - // }; - // this.rnd = this.rnd(); - // this.dom = this.opts.dom[0]; - // this.wrap = ""; - // this.inner = ""; - // this.mask = ""; - // this.init() - // } - // a.prototype = { - // Q: function(d) { - // return document.querySelectorAll(d) - // }, - // isMobile: function() { - // return navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i) ? true : false - // }, - // addEvent: function(f, e, d) { - // if (f.attachEvent) { - // f.attachEvent("on" + e, d) - // } else { - // f.addEventListener(e, d, false) - // } - // }, - // rnd: function() { - // return Math.random().toString(36).substr(2, 6) - // }, - // init: function() { - // var g = this; - // if (!g.dom) { - // console.log("未正确绑定弹窗容器"); - // return - // } - // var d = document.createElement("div"); - // var e = document.createElement("div"); - // var f = document.createElement("div"); - // d.setAttribute("class", "mSlider-main ms-" + g.rnd); - // e.setAttribute("class", "mSlider-inner"); - // f.setAttribute("class", "mSlider-mask"); - // g.Q("body")[0].appendChild(d); - // g.Q(".ms-" + g.rnd)[0].appendChild(e); - // g.Q(".ms-" + g.rnd)[0].appendChild(f); - // g.wrap = g.Q(".ms-" + g.rnd)[0]; - // g.inner = g.Q(".ms-" + g.rnd + " .mSlider-inner")[0]; - // g.mask = g.Q(".ms-" + g.rnd + " .mSlider-mask")[0]; - // g.inner.appendChild(g.dom); - // switch (g.opts.direction) { - // case "top": - // g.top = "0"; - // g.left = "0"; - // g.width = "100%"; - // g.height = g.opts.distance; - // g.translate = "0,-100%,0"; - // break; - // case "bottom": - // g.bottom = "0"; - // g.left = "0"; - // g.width = "100%"; - // g.height = g.opts.distance; - // g.translate = "0,100%,0"; - // break; - // case "right": - // g.top = "0"; - // g.right = "0"; - // g.width = g.opts.distance; - // g.height = document.documentElement.clientHeight + "px"; - // g.translate = "100%,0,0"; - // break; - // default: - // g.top = "0"; - // g.left = "0"; - // g.width = g.opts.distance; - // g.height = document.documentElement.clientHeight + "px"; - // g.translate = "-100%,0,0" - // } - // g.wrap.style.display = "none"; - // g.wrap.style.position = "fixed"; - // g.wrap.style.top = "0"; - // g.wrap.style.left = "0"; - // g.wrap.style.width = "100%"; - // g.wrap.style.height = "100%"; - // g.wrap.style.zIndex = 99; - // g.inner.style.position = "absolute"; - // g.inner.style.top = g.top; - // g.inner.style.bottom = g.bottom; - // g.inner.style.left = g.left; - // g.inner.style.right = g.right; - // g.inner.style.width = g.width; - // g.inner.style.height = g.height; - // g.inner.style.backgroundColor = "#fff"; - // g.inner.style.transform = "translate3d(" + g.translate + ")"; - // g.inner.style.webkitTransition = "all .2s ease-out"; - // g.inner.style.transition = "all .2s ease-out"; - // g.inner.style.zIndex = 100; - // g.mask.style.width = "100%"; - // g.mask.style.height = "100%"; - // g.mask.style.opacity = "0"; - // g.mask.style.backgroundColor = "black"; - // g.mask.style.zIndex = "98"; - // g.mask.style.webkitTransition = "all .2s ease-out"; - // g.mask.style.transition = "all .2s ease-out"; - // g.mask.style.webkitBackfaceVisibility = "hidden"; - // g.events() - // }, - // open: function() { - // var d = this; - // d.wrap.style.display = "block"; - - // setTimeout(function() { - // d.inner.style.transform = "translate3d(0,0,0)"; - // d.inner.style.webkitTransform = "translate3d(0,0,0)"; - // d.mask.style.opacity = 0.5 - // }, 30); - // if (d.opts.time) { - // d.timer = setTimeout(function() { - // d.close() - // }, d.opts.time) - // } - // }, - // close: function() { - // var d = this; - // d.timer && clearTimeout(d.timer); - // d.inner.style.webkitTransform = "translate3d(" + d.translate + ")"; - // d.inner.style.transform = "translate3d(" + d.translate + ")"; - // d.mask.style.opacity = 0; - // setTimeout(function() { - // d.wrap.style.display = "none"; - // d.timer = null; - // d.opts.callback && d.opts.callback() - // }, 300) - // }, - // events: function() { - // var d = this; - // d.addEvent(d.mask, "touchmove", function(f) { - // f.preventDefault() - // }); - // d.addEvent(d.mask, (d.isMobile() ? "touchend" : "click"), function(f) { - // if (d.opts.maskClose) { - // d.close() - // } - // }) - // } - // }; - // b.mSlider = a - // })(window); - - exports(MOD_NAME,pearOper); -}) - diff --git a/component/pear/module/menu.js b/component/pear/module/menu.js index 33cde7f4a024eb328d44ee98c8a633b33b786b27..c125f0f92e1dd68af5da4fb28a61200ce09477f8 100644 --- a/component/pear/module/menu.js +++ b/component/pear/module/menu.js @@ -5,15 +5,15 @@ layui.define(['table', 'jquery', 'element'], function (exports) { $ = layui.jquery, element = layui.element; - var pearMenu = function (opt) { + var menu = function (opt) { this.option = opt; }; - pearMenu.prototype.render = function (opt) { + menu.prototype.render = function (opt) { var option = { elem: opt.elem, - async: opt.async, + async: opt.async || true, parseData: opt.parseData, url: opt.url, method: opt.method ? opt.method : "GET", @@ -21,16 +21,18 @@ layui.define(['table', 'jquery', 'element'], function (exports) { defaultSelect: opt.defaultSelect, control: opt.control, controlWidth: opt.controlWidth ? opt.controlWidth : "auto", - defaultMenu: opt.defaultMenu, + defaultMenu: opt.defaultMenu || 0, accordion: opt.accordion, - height: opt.height, - theme: opt.theme, + height: opt.height || "100%", + theme: opt.theme || "dark-theme", data: opt.data ? opt.data : [], change: opt.change ? opt.change : function () { }, done: opt.done ? opt.done : function () { } } + var tempDone = option.done; - option.done = function(){ + + option.done = function () { if (option.control) { rationalizeHeaderControlWidthAuto(option); } @@ -50,11 +52,9 @@ layui.define(['table', 'jquery', 'element'], function (exports) { }); } } else { - // 延时返回,和 javascript 执行时序关联 window.setTimeout(function () { renderMenu(option); }, 500); } - // 处理高度 $("#" + opt.elem).height(option.height) setTimeout(function () { @@ -83,10 +83,14 @@ layui.define(['table', 'jquery', 'element'], function (exports) { }); }, 1000) - return new pearMenu(option); + return new menu(option); } - pearMenu.prototype.click = function (clickEvent) { + menu.prototype.cache = function () { + return this.option.data; + } + + menu.prototype.click = function (clickEvent) { var _this = this; $("body").on("click", "#" + _this.option.elem + " .site-demo-active", function () { var dom = $(this); @@ -96,7 +100,8 @@ layui.define(['table', 'jquery', 'element'], function (exports) { menuPath: dom.attr("menu-title"), menuIcon: dom.attr("menu-icon"), menuUrl: dom.attr("menu-url"), - openType: dom.attr("open-type") + menuType: dom.attr("menu-type"), + menuOpenType: dom.attr("menu-open-type") }; var doms = hash(dom); if (doms != null) { @@ -139,14 +144,14 @@ layui.define(['table', 'jquery', 'element'], function (exports) { return d; } - pearMenu.prototype.skin = function (skin) { + menu.prototype.skin = function (skin) { var menu = $(".pear-nav-tree[lay-filter='" + this.option.elem + "']").parent(); menu.removeClass("dark-theme"); menu.removeClass("light-theme"); menu.addClass(skin); } - pearMenu.prototype.selectItem = function (pearId) { + menu.prototype.selectItem = function (pearId) { if (this.option.control != false) { $("#" + this.option.elem + " a[menu-id='" + pearId + "']").parents(".layui-side-scroll ").find("ul").css({ display: "none" @@ -209,7 +214,7 @@ layui.define(['table', 'jquery', 'element'], function (exports) { } var activeMenus; - pearMenu.prototype.collapse = function (time) { + menu.prototype.collapse = function (time) { var elem = this.option.elem; var config = this.option; if ($("#" + this.option.elem).is(".pear-nav-mini")) { @@ -223,12 +228,12 @@ layui.define(['table', 'jquery', 'element'], function (exports) { isHoverMenu(false, config); var that = this; $("#" + this.option.elem) - .promise() - .done(function () { - if (that.option.control) { - rationalizeHeaderControlWidth(that.option); - } - }) + .promise() + .done(function () { + if (that.option.control) { + rationalizeHeaderControlWidth(that.option); + } + }) } else { activeMenus = $("#" + this.option.elem).find(".layui-nav-itemed>a"); $("#" + this.option.elem).find(".layui-nav-itemed").removeClass("layui-nav-itemed"); @@ -238,13 +243,13 @@ layui.define(['table', 'jquery', 'element'], function (exports) { }, 400); var that = this; $("#" + this.option.elem) - .promise() - .done(function () { - isHoverMenu(true, config); - if (that.option.control) { - rationalizeHeaderControlWidth(that.option); - } - }) + .promise() + .done(function () { + isHoverMenu(true, config); + if (that.option.control) { + rationalizeHeaderControlWidth(that.option); + } + }) } } @@ -304,7 +309,7 @@ layui.define(['table', 'jquery', 'element'], function (exports) { '" ' + target + '>' + item.title + ''; } else if (item.type == 1) { - content += '' + item.title + ''; @@ -374,7 +379,7 @@ layui.define(['table', 'jquery', 'element'], function (exports) { ''; } else if (note.type == 1) { // 创 建 菜 单 结 构 - content += '' + note.title + ''; @@ -433,7 +438,7 @@ layui.define(['table', 'jquery', 'element'], function (exports) { '">' + note.title + ''; } else if (note.type == 1) { // 创 建 菜 单 结 构 - content += '' + note.title + ''; } @@ -557,7 +562,7 @@ layui.define(['table', 'jquery', 'element'], function (exports) { $("#" + option.control + " .control").css({ "width": rationalizeWidth, "transition": "width .15s" }); } - function rationalizeHeaderControlWidthAuto(option){ + function rationalizeHeaderControlWidthAuto(option) { $(window).on('resize', function () { rationalizeHeaderControlWidth(option); }) @@ -567,5 +572,5 @@ layui.define(['table', 'jquery', 'element'], function (exports) { }); } - exports(MOD_NAME, new pearMenu()); + exports(MOD_NAME, new menu()); }) diff --git a/component/pear/module/menuSearch.js b/component/pear/module/menuSearch.js new file mode 100644 index 0000000000000000000000000000000000000000..aba67275dc55f4c7aaf32090c7304e8907e335d0 --- /dev/null +++ b/component/pear/module/menuSearch.js @@ -0,0 +1,232 @@ +layui.define(['jquery', 'tools'], function (exports) { + "use strict"; + + /** + * @since Pear Admin 4.0 + * + * Button component + * */ + var MOD_NAME = 'menuSearch', + tools = layui.tools, + $ = layui.jquery; + + var menuSearch = function (opt) { + this.option = opt; + }; + + /** + * @since Pear Admin 4.0 + * + * Button start loading + * */ + menuSearch.prototype.render = function (opt) { + + var options = { + select: opt.select, + elem: opt.elem, + dataProvider: opt.dataProvider, + } + + $('body').on("click", options.elem, function () { + + var _html = [ + `` + ].join(''); + + layer.open({ + type: 1, + offset: "10%", + area: ['600px'], + title: false, + closeBtn: 0, + shadeClose: true, + anim: 0, + move: false, + content: _html, + success: function (layero, layeridx) { + + var $layer = layero; + var $content = $(layero).children('.layui-layer-content'); + var $input = $(".menu-search-input-wrapper input"); + var $noData = $(".menu-search-no-data"); + var $list = $(".menu-search-list"); + var menuData = options.dataProvider(); + + $layer.css("border-radius", "6px"); + $input.off("focus").focus(); + + // 搜索输入事件 + $input.off("input").on("input", tools.debounce(function () { + var keywords = $input.val().trim(); + var filteredMenus = filterHandle(menuData, keywords); + + if (filteredMenus.length) { + var tiledMenus = tiledHandle(filteredMenus); + var listHtml = createList(tiledMenus); + $noData.css("display", "none"); + $list.html("").append(listHtml).children(":first").addClass("this") + } else { + $list.html(""); + $noData.css("display", "flex"); + } + var currentHeight = $(".menu-search-content").outerHeight() + $layer.css("height", currentHeight); + $content.css("height", currentHeight); + }, 500) + ) + + // 列表点击事件 + $list.off("click").on("click", "li", function () { + var id = $(this).attr("smenu-id"); + var title = $(this).attr("smenu-title"); + var url = $(this).attr("smenu-url"); + var type = $(this).attr("smenu-type"); + var openType = $(this).attr("smenu-open-type"); + + options.select({ id, title, url, type, openType }); + + layer.close(layeridx); + }) + + $list.off('mouseenter').on("mouseenter", "li", function () { + $(".menu-search-list li.this").removeClass("this"); + $(this).addClass("this"); + }).off("mouseleave").on("mouseleave", "li", function () { + $(this).removeClass("this"); + }) + + // 监听键盘事件 + $(document).off("keydown").keydown(function (e) { + if (e.keyCode === 13 || e.keyCode === 32) { + e.preventDefault(); + var id = $(this).attr("smenu-id"); + var title = $(this).attr("smenu-title"); + var url = $(this).attr("smenu-url"); + var type = $(this).attr("smenu-type"); + var openType = $(this).attr("smenu-open-type"); + + options.select({ id, title, url, type, openType }); + + layer.close(layeridx); + } else if (e.keyCode === 38) { + e.preventDefault(); + var prevEl = $(".menu-search-list li.this").prev(); + $(".menu-search-list li.this").removeClass("this"); + if (prevEl.length !== 0) { + prevEl.addClass("this"); + } else { + $list.children().last().addClass("this"); + } + } else if (e.keyCode === 40) { + e.preventDefault(); + var nextEl = $(".menu-search-list li.this").next(); + $(".menu-search-list li.this").removeClass("this"); + if (nextEl.length !== 0) { + nextEl.addClass("this"); + } else { + $list.children().first().addClass("this"); + } + } else if (e.keyCode === 27) { + e.preventDefault(); + layer.close(layeridx); + } + }) + } + }) + }); + + return new menuSearch(options); + } + + /** + * @since Pear Admin 4.0 + * + * 创建结果列表 + */ + var createList = function (data) { + var listHtml = ''; + $.each(data, function (index, item) { + listHtml += `
              • + ${item.path} + +
              • ` + }) + return listHtml; + } + + /** + * @since Pear Admin 4.0 + * + * Tree 转 path 列表 + */ + var tiledHandle = function (data) { + var tiledMenus = []; + var treeTiled = function (data, content) { + var path = ""; + var separator = " / "; + if (!content) content = ""; + $.each(data, function (index, item) { + if (item.children && item.children.length) { + path += content + item.title + separator; + var childPath = treeTiled(item.children, path); + path += childPath; + if (!childPath) path = ""; // 重置路径 + } else { + path += content + item.title + tiledMenus.push({ path: path, info: item }); + path = ""; //重置路径 + } + }) + return path; + }; + treeTiled(data); + + return tiledMenus; + } + + /** + * @since Pear Admin 4.0 + * + * 查询匹配算法 + */ + var filterHandle = function (filterData, val) { + if (!val) return []; + var filteredMenus = []; + filterData = $.extend(true, {}, filterData); + $.each(filterData, function (index, item) { + if (item.children && item.children.length) { + var children = filterHandle(item.children, val) + var obj = $.extend({}, item, { children: children }); + if (children && children.length) { + filteredMenus.push(obj); + } else if (item.title.indexOf(val) >= 0) { + item.children = []; // 父级匹配但子级不匹配,就去除子级 + filteredMenus.push($.extend({}, item)); + } + } else if (item.title.indexOf(val) >= 0) { + filteredMenus.push(item); + } + }) + return filteredMenus; + } + + exports(MOD_NAME, new menuSearch()); +}); diff --git a/component/pear/module/message.js b/component/pear/module/message.js deleted file mode 100644 index 54e96bd38aeb423693e3d7555a855f4927cc3716..0000000000000000000000000000000000000000 --- a/component/pear/module/message.js +++ /dev/null @@ -1,140 +0,0 @@ -layui.define(['table', 'jquery', 'element'], function (exports) { - "use strict"; - - var MOD_NAME = 'message', - $ = layui.jquery, - element = layui.element; - - var message = function (opt) { - this.option = opt; - }; - - message.prototype.render = function (opt) { - //默认配置值 - var option = { - elem: opt.elem, - url: opt.url ? opt.url : false, - height: opt.height, - data: opt.data - } - if (option.url != false) { - option.data = getData(option.url); - var notice = createHtml(option); - $(option.elem).html(notice); - var targetNode = document.querySelector(option.elem + ' .pear-notice') - var mutationObserver = new MutationObserver(function (mutationsList, observer) { - if (getComputedStyle(targetNode).display !== 'none') { - var rect = targetNode.getBoundingClientRect(); - //是否超出右侧屏幕 - if (rect.right > $(window).width()) { - var elemRight = document.querySelector(option.elem).getBoundingClientRect().right; - var offsetRight = 20; - targetNode.style.right = elemRight - $(window).width() + offsetRight + 'px'; - targetNode.style.left = 'unset'; - } - } - }); - mutationObserver.observe(targetNode, { - attributes: true, - childList: false, - subtree: false, - attributeOldValue: false, - attributeFilter: ['class'] - }); - } - setTimeout(function () { - element.init(); - $(opt.elem + " li").click(function (e) { - $(this).siblings().removeClass('pear-this'); - $(this).addClass('pear-this'); - }) - }, 300); - return new message(option); - } - - message.prototype.click = function (callback) { - $("*[notice-id]").click(function (event) { - event.preventDefault(); - var id = $(this).attr("notice-id"); - var title = $(this).attr("notice-title"); - var context = $(this).attr("notice-context"); - var form = $(this).attr("notice-form"); - callback(id, title, context, form); - }) - } - - /** 刷 新 消 息 */ - message.prototype.reload = function () { - - } - - /** 同 步 请 求 获 取 数 据 */ - function getData(url) { - $.ajaxSettings.async = false; - var data = null; - $.get(url, function (result) { - data = result; - }); - $.ajaxSettings.async = true; - return data; - } - - function createHtml(option) { - - var count = 0; - var noticeTitle = '
                  '; - var noticeContent = '
                  '; - - - // 根据 data 便利数据 - $.each(option.data, function (i, item) { - - if (i === 0) { - noticeTitle += '
                • ' + item.title + '
                • '; - noticeContent += '
                  '; - } else { - noticeTitle += '
                • ' + item.title + '
                • '; - noticeContent += '
                  '; - } - - $.each(item.children, function (i, note) { - count++; - noticeContent += '
                  ' ; - - if (note.avatar) - noticeContent +=''; - - noticeContent +='
                  ' + note.title + '
                  ' + - '
                  ' + note.time + '
                  ' + - '
                  '; - }) - - // 空内容 - if(item.children.length==0){ - noticeContent +='

                  暂无数据

                  '; - } - noticeContent += '
                  '; - }) - - var notice; - if (count > 0){ - notice = '
                • ' + - '' + - '
                  '; - }else { - notice = '
                • ' + - '' + - '
                  '; - } - - noticeTitle += '
                '; - noticeContent += '
                '; - notice += noticeTitle; - notice += noticeContent; - notice += '
                '; - return notice; - } - - exports(MOD_NAME, new message()); -}) diff --git a/component/pear/module/messageCenter.js b/component/pear/module/messageCenter.js new file mode 100644 index 0000000000000000000000000000000000000000..c7535cb30c78fc5464df6b95b10b8a0085d435b9 --- /dev/null +++ b/component/pear/module/messageCenter.js @@ -0,0 +1,85 @@ +layui.define(['table', 'jquery', 'element', 'dropdown'], function (exports) { + "use strict"; + + var MOD_NAME = 'messageCenter', + $ = layui.jquery, + dropdown = layui.dropdown; + + var message = function (opt) { + this.option = opt; + }; + + message.prototype.render = function (opt) { + var option = { + elem: opt.elem, + url: opt.url ? opt.url : false, + height: opt.height, + data: opt.data + } + if (option.url != false) { + $.get(option.url, function (result) { + const { code, success, data } = result; + $(`${opt.elem}`).append(`
              • + +
              • `); + if (code == 200 || success) { + option.data = data; + dropdown.render({ + elem: option.elem, + align: "center", + content: createHtml(option), + }) + } + }); + } + return new message(option); + } + + message.prototype.click = function (callback) { + $("*[notice-id]").click(function (event) { + event.preventDefault(); + var id = $(this).attr("notice-id"); + var title = $(this).attr("notice-title"); + var context = $(this).attr("notice-context"); + var form = $(this).attr("notice-form"); + callback(id, title, context, form); + }) + } + + function createHtml(option) { + + var count = 0; + var notice = '
                ' + var noticeTitle = '
                  '; + var noticeContent = '
                  '; + + $.each(option.data, function (i, item) { + + noticeTitle += `
                • ${item.title}
                • `; + noticeContent += '
                  '; + + + $.each(item.children, function (i, note) { + count++; + noticeContent += '
                  '; + + noticeContent += '
                  ' + note.title + '
                  ' + + '
                  ' + note.time + '
                  ' + + '
                  '; + }) + + noticeContent += '
                  '; + }) + + noticeTitle += '
                '; + noticeContent += '
                '; + notice += noticeTitle; + notice += noticeContent; + notice += "
                " + + return notice; + } + + exports(MOD_NAME, new message()); +}) \ No newline at end of file diff --git a/component/pear/module/notice.js b/component/pear/module/notice.js deleted file mode 100644 index 4ea67ec8b3e784abd5b28d103042bd3499bdaf2d..0000000000000000000000000000000000000000 --- a/component/pear/module/notice.js +++ /dev/null @@ -1,489 +0,0 @@ - -(function(define) { - define(['jquery'], function($) { - return (function() { - var $container; - var listener; - var toastId = 0; - var toastType = { - error: 'error', - info: 'info', - success: 'success', - warning: 'warning' - }; - - var cssStyle = $( - '' - ); - $("body").append(cssStyle); - - var toastr = { - clear: clear, - remove: remove, - error: error, - getContainer: getContainer, - info: info, - options: {}, - subscribe: subscribe, - success: success, - version: '2.1.4', - warning: warning - }; - - var previousToast; - - return toastr; - - function error(message, title, optionsOverride) { - return notify({ - type: toastType.error, - iconClass: getOptions().iconClasses.error, - message: message, - optionsOverride: optionsOverride, - title: title - }); - } - - function getContainer(options, create) { - if (!options) { - options = getOptions(); - } - $container = $('#' + options.containerId); - if ($container.length) { - return $container; - } - if (create) { - $container = createContainer(options); - } - return $container; - } - - function info(message, title, optionsOverride) { - return notify({ - type: toastType.info, - iconClass: getOptions().iconClasses.info, - message: message, - optionsOverride: optionsOverride, - title: title - }); - } - - function subscribe(callback) { - listener = callback; - } - - function success(message, title, optionsOverride) { - return notify({ - type: toastType.success, - iconClass: getOptions().iconClasses.success, - message: message, - optionsOverride: optionsOverride, - title: title - }); - } - - function warning(message, title, optionsOverride) { - return notify({ - type: toastType.warning, - iconClass: getOptions().iconClasses.warning, - message: message, - optionsOverride: optionsOverride, - title: title - }); - } - - function clear($toastElement, clearOptions) { - var options = getOptions(); - if (!$container) { - getContainer(options); - } - if (!clearToast($toastElement, options, clearOptions)) { - clearContainer(options); - } - } - - function remove($toastElement) { - var options = getOptions(); - if (!$container) { - getContainer(options); - } - if ($toastElement && $(':focus', $toastElement).length === 0) { - removeToast($toastElement); - return; - } - if ($container.children().length) { - $container.remove(); - } - } - - // internal functions - - function clearContainer(options) { - var toastsToClear = $container.children(); - for (var i = toastsToClear.length - 1; i >= 0; i--) { - clearToast($(toastsToClear[i]), options); - } - } - - function clearToast($toastElement, options, clearOptions) { - var force = clearOptions && clearOptions.force ? clearOptions.force : false; - if ($toastElement && (force || $(':focus', $toastElement).length === 0)) { - $toastElement[options.hideMethod]({ - duration: options.hideDuration, - easing: options.hideEasing, - complete: function() { - removeToast($toastElement); - } - }); - return true; - } - return false; - } - - function createContainer(options) { - $container = $('
                ') - .attr('id', options.containerId) - .addClass(options.positionClass); - - $container.appendTo($(options.target)); - return $container; - } - - function getDefaults() { - return { - tapToDismiss: true, - toastClass: 'toast', - containerId: 'toast-container', - debug: false, - - showMethod: 'fadeIn', //fadeIn, slideDown, and show are built into jQuery - showDuration: 300, - showEasing: 'swing', //swing and linear are built into jQuery - onShown: undefined, - hideMethod: 'fadeOut', - hideDuration: 1000, - hideEasing: 'swing', - onHidden: undefined, - closeMethod: false, - closeDuration: false, - closeEasing: false, - closeOnHover: true, - - extendedTimeOut: 1000, - iconClasses: { - error: 'toast-error', - info: 'toast-info', - success: 'toast-success', - warning: 'toast-warning' - }, - iconClass: 'toast-info', - positionClass: 'toast-top-right', - timeOut: 5000, // Set timeOut and extendedTimeOut to 0 to make it sticky - titleClass: 'toast-title', - messageClass: 'toast-message', - escapeHtml: false, - target: 'body', - closeHtml: '', - closeClass: 'toast-close-button', - newestOnTop: true, - preventDuplicates: false, - progressBar: false, - progressClass: 'toast-progress', - rtl: false - }; - } - - function publish(args) { - if (!listener) { - return; - } - listener(args); - } - - function notify(map) { - var options = getOptions(); - var iconClass = map.iconClass || options.iconClass; - - if (typeof(map.optionsOverride) !== 'undefined') { - options = $.extend(options, map.optionsOverride); - iconClass = map.optionsOverride.iconClass || iconClass; - } - - if (shouldExit(options, map)) { - return; - } - - toastId++; - - $container = getContainer(options, true); - - var intervalId = null; - var $toastElement = $('
                '); - var $titleElement = $('
                '); - var $messageElement = $('
                '); - var $progressElement = $('
                '); - var $closeElement = $(options.closeHtml); - var progressBar = { - intervalId: null, - hideEta: null, - maxHideTime: null - }; - var response = { - toastId: toastId, - state: 'visible', - startTime: new Date(), - options: options, - map: map - }; - - personalizeToast(); - - displayToast(); - - handleEvents(); - - publish(response); - - if (options.debug && console) { - console.log(response); - } - - return $toastElement; - - function escapeHtml(source) { - if (source == null) { - source = ''; - } - - return source - .replace(/&/g, '&') - .replace(/"/g, '"') - .replace(/'/g, ''') - .replace(//g, '>'); - } - - function personalizeToast() { - setIcon(); - setTitle(); - setMessage(); - setCloseButton(); - setProgressBar(); - setRTL(); - setSequence(); - setAria(); - } - - function setAria() { - var ariaValue = ''; - switch (map.iconClass) { - case 'toast-success': - case 'toast-info': - ariaValue = 'polite'; - break; - default: - ariaValue = 'assertive'; - } - $toastElement.attr('aria-live', ariaValue); - } - - function handleEvents() { - if (options.closeOnHover) { - $toastElement.hover(stickAround, delayedHideToast); - } - - if (!options.onclick && options.tapToDismiss) { - $toastElement.click(hideToast); - } - - if (options.closeButton && $closeElement) { - $closeElement.click(function(event) { - if (event.stopPropagation) { - event.stopPropagation(); - } else if (event.cancelBubble !== undefined && event.cancelBubble !== true) { - event.cancelBubble = true; - } - - if (options.onCloseClick) { - options.onCloseClick(event); - } - - hideToast(true); - }); - } - - if (options.onclick) { - $toastElement.click(function(event) { - options.onclick(event); - hideToast(); - }); - } - } - - function displayToast() { - $toastElement.hide(); - - $toastElement[options.showMethod]({ - duration: options.showDuration, - easing: options.showEasing, - complete: options.onShown - }); - - if (options.timeOut > 0) { - intervalId = setTimeout(hideToast, options.timeOut); - progressBar.maxHideTime = parseFloat(options.timeOut); - progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime; - if (options.progressBar) { - progressBar.intervalId = setInterval(updateProgress, 10); - } - } - } - - function setIcon() { - if (map.iconClass) { - $toastElement.addClass(options.toastClass).addClass(iconClass); - } - } - - function setSequence() { - if (options.newestOnTop) { - $container.prepend($toastElement); - } else { - $container.append($toastElement); - } - } - - function setTitle() { - if (map.title) { - var suffix = map.title; - if (options.escapeHtml) { - suffix = escapeHtml(map.title); - } - $titleElement.append(suffix).addClass(options.titleClass); - $toastElement.append($titleElement); - } - } - - function setMessage() { - if (map.message) { - var suffix = map.message; - if (options.escapeHtml) { - suffix = escapeHtml(map.message); - } - $messageElement.append(suffix).addClass(options.messageClass); - $toastElement.append($messageElement); - } - } - - function setCloseButton() { - if (options.closeButton) { - $closeElement.addClass(options.closeClass).attr('role', 'button'); - $toastElement.prepend($closeElement); - } - } - - function setProgressBar() { - if (options.progressBar) { - $progressElement.addClass(options.progressClass); - $toastElement.prepend($progressElement); - } - } - - function setRTL() { - if (options.rtl) { - $toastElement.addClass('rtl'); - } - } - - function shouldExit(options, map) { - if (options.preventDuplicates) { - if (map.message === previousToast) { - return true; - } else { - previousToast = map.message; - } - } - return false; - } - - function hideToast(override) { - var method = override && options.closeMethod !== false ? options.closeMethod : options.hideMethod; - var duration = override && options.closeDuration !== false ? - options.closeDuration : options.hideDuration; - var easing = override && options.closeEasing !== false ? options.closeEasing : options.hideEasing; - if ($(':focus', $toastElement).length && !override) { - return; - } - clearTimeout(progressBar.intervalId); - return $toastElement[method]({ - duration: duration, - easing: easing, - complete: function() { - removeToast($toastElement); - clearTimeout(intervalId); - if (options.onHidden && response.state !== 'hidden') { - options.onHidden(); - } - response.state = 'hidden'; - response.endTime = new Date(); - publish(response); - } - }); - } - - function delayedHideToast() { - if (options.timeOut > 0 || options.extendedTimeOut > 0) { - intervalId = setTimeout(hideToast, options.extendedTimeOut); - progressBar.maxHideTime = parseFloat(options.extendedTimeOut); - progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime; - } - } - - function stickAround() { - clearTimeout(intervalId); - progressBar.hideEta = 0; - $toastElement.stop(true, true)[options.showMethod]({ - duration: options.showDuration, - easing: options.showEasing - }); - } - - function updateProgress() { - var percentage = ((progressBar.hideEta - (new Date().getTime())) / progressBar.maxHideTime) * 100; - $progressElement.width(percentage + '%'); - } - } - - function getOptions() { - return $.extend({}, getDefaults(), toastr.options); - } - - function removeToast($toastElement) { - if (!$container) { - $container = getContainer(); - } - if ($toastElement.is(':visible')) { - return; - } - $toastElement.remove(); - $toastElement = null; - if ($container.children().length === 0) { - $container.remove(); - previousToast = undefined; - } - } - - })(); - }); -}(typeof define === 'function' && define.amd ? define : function(deps, factory) { - if (typeof module !== 'undefined' && module.exports) { //Node - module.exports = factory(require('jquery')); - } else if (window.layui && layui.define) { - layui.define('jquery', function(exports) { //layui加载 - exports('toastr', factory(layui.jquery)); - exports('notice', factory(layui.jquery)); - }); - } else { - window.toastr = factory(window.jQuery); - } -})); diff --git a/component/pear/module/page.js b/component/pear/module/page.js new file mode 100644 index 0000000000000000000000000000000000000000..de90eac322d328ad8b48852e75bd50fa5648f14f --- /dev/null +++ b/component/pear/module/page.js @@ -0,0 +1,132 @@ +layui.define(['jquery', 'element'], function (exports) { + "use strict"; + + var $ = layui.jquery; + var element = layui.element; + + var page = function (opt) { + this.option = opt; + }; + + /** + * @since Pear Admin 4.0 + * + * 创建 Page 页面 + */ + page.prototype.render = function (opt) { + var option = { + elem: opt.elem, + url: opt.url, + width: opt.width || "100%", + height: opt.height || "100%", + title: opt.title + } + renderContent(option); + return new page(option); + } + + /** + * @since Pear Admin 4.0 + * + * 切换 Page 页面 + */ + page.prototype.changePage = function (options) { + + const $frame = $(`#${this.option.elem} .pear-page-content`); + + if (options.type === "_iframe") { + + $frame.html(``); + + } else { + $.ajax({ + url: options.href, + type: 'get', + dataType: 'html', + success: function (data) { + $frame.html(data) + }, + error: function (xhr) { + return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); + } + }); + } + $frame.attr("type", options.type); + $frame.attr("href", options.href); + } + + page.prototype.refresh = function (loading) { + + var $frameLoad = $(`#${this.option.elem} .pear-page-loading`); + var $frame = $(`#${this.option.elem} .pear-page-content`); + + if (loading) { + $frameLoad.css({ + display: 'block' + }); + } + + if ($frame.attr("type") === "_iframe") { + + $frame.html(``); + + const $contentFrame = $frame.find("iframe"); + + $contentFrame.on("load", () => { + $frameLoad.fadeOut(1000); + }) + + } else { + $.ajax({ + type: 'get', + url: $frame.attr("href"), + dataType: 'html', + success: function (data) { + $frame.html(data) + $frameLoad.fadeOut(1000); + element.init(); + }, + error: function (xhr) { + return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); + } + }); + } + } + + function renderContent(option) { + + $("#" + option.elem).html(` +
                +
                +
                +
                + + + + +
                +
                +
                `); + + var $frame = $("#" + option.elem).find(".pear-page-content"); + + if (option.type === "_iframe") { + + $frame.html(``); + } else { + $.ajax({ + url: option.url, + type: 'get', + dataType: 'html', + success: function (data) { + $frame.html(data); + }, + error: function (xhr) { + return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); + } + }); + } + } + + exports('page', new page()); +}); diff --git a/component/pear/module/popover/popover.js b/component/pear/module/popover/popover.js deleted file mode 100644 index 7f2e9bd7dfd019eb88f5933890c2aab33a637d29..0000000000000000000000000000000000000000 --- a/component/pear/module/popover/popover.js +++ /dev/null @@ -1,1219 +0,0 @@ -/* - * webui popover plugin - v1.2.17 - * A lightWeight popover plugin with jquery ,enchance the popover plugin of bootstrap with some awesome new features. It works well with bootstrap ,but bootstrap is not necessary! - * https://github.com/sandywalker/webui-popover - * - * Made by Sandy Duan - * Under MIT License - */ - -layui.define(['jquery', 'element'], function(exports) { - var $=layui.$; - // Create the defaults once - var pluginName = 'webuiPopover'; - var pluginClass = 'webui-popover'; - var pluginType = 'webui.popover'; - var defaults = { - placement: 'auto', - container: null, - width: 'auto', - height: 'auto', - trigger: 'click', //hover,click,sticky,manual - style: '', - opacity:null, - selector: false, // jQuery selector, if a selector is provided, popover objects will be delegated to the specified. - delay: { - show: null, - hide: 300 - }, - async: { - type: 'GET', - before: null, //function(that, xhr, settings){} - success: null, //function(that, xhr){} - error: null //function(that, xhr, data){} - }, - cache: true, - multi: false, - arrow: true, - title: '', - content: '', - closeable: false, - padding: true, - url: '', - type: 'html', - direction: '', // ltr,rtl - animation: null, - template: '
                ' + - '
                ' + - '
                ' + - '' + - '

                ' + - '

                 

                ' + - '
                ' + - '
                ', - backdrop: false, - dismissible: true, - onShow: null, - onHide: null, - abortXHR: true, - autoHide: false, - offsetTop: 0, - offsetLeft: 0, - iframeOptions: { - frameborder: '0', - allowtransparency: 'true', - id: '', - name: '', - scrolling: '', - onload: '', - height: '', - width: '' - }, - hideEmpty: false - }; - - var rtlClass = pluginClass + '-rtl'; - var _srcElements = []; - var backdrop = $('
                '); - var _globalIdSeed = 0; - var _isBodyEventHandled = false; - var _offsetOut = -2000; // the value offset out of the screen - var $document = $(document); - - var toNumber = function (numeric, fallback) { - return isNaN(numeric) ? (fallback || 0) : Number(numeric); - }; - - var getPopFromElement = function ($element) { - return $element.data('plugin_' + pluginName); - }; - - var hideAllPop = function () { - var pop = null; - for (var i = 0; i < _srcElements.length; i++) { - pop = getPopFromElement(_srcElements[i]); - if (pop) { - pop.hide(true); - } - } - $document.trigger('hiddenAll.' + pluginType); - }; - - var hideOtherPops = function (currentPop) { - var pop = null; - for (var i = 0; i < _srcElements.length; i++) { - pop = getPopFromElement(_srcElements[i]); - if (pop && pop.id !== currentPop.id) { - pop.hide(true); - } - } - $document.trigger('hiddenAll.' + pluginType); - }; - - var isMobile = ('ontouchstart' in document.documentElement) && (/Mobi/.test(navigator.userAgent)); - - var pointerEventToXY = function (e) { - var out = { - x: 0, - y: 0 - }; - if (e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend' || e.type === 'touchcancel') { - var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0]; - out.x = touch.pageX; - out.y = touch.pageY; - } else if (e.type === 'mousedown' || e.type === 'mouseup' || e.type === 'click') { - out.x = e.pageX; - out.y = e.pageY; - } - return out; - }; - - - // The actual plugin constructor - function WebuiPopover(element, options) { - this.$element = $(element); - if (options) { - if ($.type(options.delay) === 'string' || $.type(options.delay) === 'number') { - options.delay = { - show: options.delay, - hide: options.delay - }; // bc break fix - } - } - this.options = $.extend({}, defaults, options); - this._defaults = defaults; - this._name = pluginName; - this._targetclick = false; - this.init(); - _srcElements.push(this.$element); - return this; - - } - - WebuiPopover.prototype = { - //init webui popover - init: function () { - if (this.$element[0] instanceof document.constructor && !this.options.selector) { - throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!'); - } - - if (this.getTrigger() !== 'manual') { - //init the event handlers - if (isMobile) { - this.$element.off('touchend', this.options.selector).on('touchend', this.options.selector, $.proxy(this.toggle, this)); - } else if (this.getTrigger() === 'click') { - this.$element.off('click', this.options.selector).on('click', this.options.selector, $.proxy(this.toggle, this)); - } else if (this.getTrigger() === 'hover') { - this.$element - .off('mouseenter mouseleave click', this.options.selector) - .on('mouseenter', this.options.selector, $.proxy(this.mouseenterHandler, this)) - .on('mouseleave', this.options.selector, $.proxy(this.mouseleaveHandler, this)); - } - } - this._poped = false; - this._inited = true; - this._opened = false; - this._idSeed = _globalIdSeed; - this.id = pluginName + this._idSeed; - // normalize container - this.options.container = $(this.options.container || document.body).first(); - - if (this.options.backdrop) { - backdrop.appendTo(this.options.container).hide(); - } - _globalIdSeed++; - if (this.getTrigger() === 'sticky') { - this.show(); - } - - if (this.options.selector) { - this._options = $.extend({}, this.options, { - selector: '' - }); - } - - }, - /* api methods and actions */ - destroy: function () { - var index = -1; - - for (var i = 0; i < _srcElements.length; i++) { - if (_srcElements[i] === this.$element) { - index = i; - break; - } - } - - _srcElements.splice(index, 1); - - - this.hide(); - this.$element.data('plugin_' + pluginName, null); - if (this.getTrigger() === 'click') { - this.$element.off('click'); - } else if (this.getTrigger() === 'hover') { - this.$element.off('mouseenter mouseleave'); - } - if (this.$target) { - this.$target.remove(); - } - }, - getDelegateOptions: function () { - var options = {}; - - this._options && $.each(this._options, function (key, value) { - if (defaults[key] !== value) { - options[key] = value; - } - }); - return options; - }, - /* - param: force boolean value, if value is true then force hide the popover - param: event dom event, - */ - hide: function (force, event) { - - if (!force && this.getTrigger() === 'sticky') { - return; - } - if (!this._opened) { - return; - } - if (event) { - event.preventDefault(); - event.stopPropagation(); - } - - if (this.xhr && this.options.abortXHR === true) { - this.xhr.abort(); - this.xhr = null; - } - - - var e = $.Event('hide.' + pluginType); - this.$element.trigger(e, [this.$target]); - if (this.$target) { - this.$target.removeClass('in').addClass(this.getHideAnimation()); - var that = this; - setTimeout(function () { - that.$target.hide(); - if (!that.getCache()) { - that.$target.remove(); - //that.getTriggerElement.removeAttr('data-target'); - } - }, that.getHideDelay()); - } - if (this.options.backdrop) { - backdrop.hide(); - } - this._opened = false; - this.$element.trigger('hidden.' + pluginType, [this.$target]); - - if (this.options.onHide) { - this.options.onHide(this.$target); - } - - }, - resetAutoHide: function () { - var that = this; - var autoHide = that.getAutoHide(); - if (autoHide) { - if (that.autoHideHandler) { - clearTimeout(that.autoHideHandler); - } - that.autoHideHandler = setTimeout(function () { - that.hide(); - }, autoHide); - } - }, - delegate: function (eventTarget) { - var self = $(eventTarget).data('plugin_' + pluginName); - if (!self) { - self = new WebuiPopover(eventTarget, this.getDelegateOptions()); - $(eventTarget).data('plugin_' + pluginName, self); - } - return self; - }, - toggle: function (e) { - var self = this; - if (e) { - e.preventDefault(); - e.stopPropagation(); - if (this.options.selector) { - self = this.delegate(e.currentTarget); - } - } - self[self.getTarget().hasClass('in') ? 'hide' : 'show'](); - }, - hideAll: function () { - hideAllPop(); - }, - hideOthers: function () { - hideOtherPops(this); - }, - /*core method ,show popover */ - show: function () { - if (this._opened) { - return; - } - //removeAllTargets(); - var - $target = this.getTarget().removeClass().addClass(pluginClass).addClass(this._customTargetClass); - if (!this.options.multi) { - this.hideOthers(); - } - - // use cache by default, if not cache setted , reInit the contents - if (!this.getCache() || !this._poped || this.content === '') { - this.content = ''; - this.setTitle(this.getTitle()); - if (!this.options.closeable) { - $target.find('.close').off('click').remove(); - } - if (!this.isAsync()) { - this.setContent(this.getContent()); - } else { - this.setContentASync(this.options.content); - } - - if (this.canEmptyHide() && this.content === '') { - return; - } - $target.show(); - } - - this.displayContent(); - - if (this.options.onShow) { - this.options.onShow($target); - } - - this.bindBodyEvents(); - if (this.options.backdrop) { - backdrop.show(); - } - this._opened = true; - this.resetAutoHide(); - }, - displayContent: function () { - var - //element postion - elementPos = this.getElementPosition(), - //target postion - $target = this.getTarget().removeClass().addClass(pluginClass).addClass(this._customTargetClass), - //target content - $targetContent = this.getContentElement(), - //target Width - targetWidth = $target[0].offsetWidth, - //target Height - targetHeight = $target[0].offsetHeight, - //placement - placement = 'bottom', - e = $.Event('show.' + pluginType); - - if (this.canEmptyHide()) { - - var content = $targetContent.children().html(); - if (content !== null && content.trim().length === 0) { - return; - } - } - - //if (this.hasContent()){ - this.$element.trigger(e, [$target]); - //} - // support width as data attribute - var optWidth = this.$element.data('width') || this.options.width; - if (optWidth === '') { - optWidth = this._defaults.width; - } - - if (optWidth !== 'auto') { - $target.width(optWidth); - } - - // support height as data attribute - var optHeight = this.$element.data('height') || this.options.height; - if (optHeight === '') { - optHeight = this._defaults.height; - } - - if (optHeight !== 'auto') { - $targetContent.height(optHeight); - } - - if (this.options.style) { - this.$target.addClass(pluginClass + '-' + this.options.style); - } - - //check rtl - if (this.options.direction === 'rtl' && !$targetContent.hasClass(rtlClass)) { - $targetContent.addClass(rtlClass); - } - - //init the popover and insert into the document body - if (!this.options.arrow) { - $target.find('.webui-arrow').remove(); - } - $target.detach().css({ - top: _offsetOut, - left: _offsetOut, - display: 'block', - opacity:this.options.opacity || 1 - }); - - if (this.getAnimation()) { - $target.addClass(this.getAnimation()); - } - $target.appendTo(this.options.container); - - - placement = this.getPlacement(elementPos); - - //This line is just for compatible with knockout custom binding - this.$element.trigger('added.' + pluginType); - - this.initTargetEvents(); - - if (!this.options.padding) { - if (this.options.height !== 'auto') { - $targetContent.css('height', $targetContent.outerHeight()); - } - this.$target.addClass('webui-no-padding'); - } - - // add maxHeight and maxWidth support by limodou@gmail.com 2016/10/1 - if (this.options.maxHeight) { - $targetContent.css('maxHeight', this.options.maxHeight); - } - - if (this.options.maxWidth) { - $targetContent.css('maxWidth', this.options.maxWidth); - } - // end - - targetWidth = $target[0].offsetWidth; - targetHeight = $target[0].offsetHeight; - - var postionInfo = this.getTargetPositin(elementPos, placement, targetWidth, targetHeight); - - this.$target.css(postionInfo.position).addClass(placement).addClass('in'); - - if (this.options.type === 'iframe') { - var $iframe = $target.find('iframe'); - var iframeWidth = $target.width(); - var iframeHeight = $iframe.parent().height(); - - if (this.options.iframeOptions.width !== '' && this.options.iframeOptions.width !== 'auto') { - iframeWidth = this.options.iframeOptions.width; - } - - if (this.options.iframeOptions.height !== '' && this.options.iframeOptions.height !== 'auto') { - iframeHeight = this.options.iframeOptions.height; - } - - $iframe.width(iframeWidth).height(iframeHeight); - } - - if (!this.options.arrow) { - this.$target.css({ - 'margin': 0 - }); - } - if (this.options.arrow) { - var $arrow = this.$target.find('.webui-arrow'); - $arrow.removeAttr('style'); - - //prevent arrow change by content size - if (placement === 'left' || placement === 'right') { - $arrow.css({ - top: this.$target.height() / 2 - }); - } else if (placement === 'top' || placement === 'bottom') { - $arrow.css({ - left: this.$target.width() / 2 - }); - } - - if (postionInfo.arrowOffset) { - //hide the arrow if offset is negative - if (postionInfo.arrowOffset.left === -1 || postionInfo.arrowOffset.top === -1) { - $arrow.hide(); - } else { - $arrow.css(postionInfo.arrowOffset); - } - } - - } - this._poped = true; - this.$element.trigger('shown.' + pluginType, [this.$target]); - }, - - isTargetLoaded: function () { - return this.getTarget().find('i.glyphicon-refresh').length === 0; - }, - - /*getter setters */ - getTriggerElement: function () { - return this.$element; - }, - getTarget: function () { - if (!this.$target) { - var id = pluginName + this._idSeed; - this.$target = $(this.options.template) - .attr('id', id); - this._customTargetClass = this.$target.attr('class') !== pluginClass ? this.$target.attr('class') : null; - this.getTriggerElement().attr('data-target', id); - } - if (!this.$target.data('trigger-element')) { - this.$target.data('trigger-element', this.getTriggerElement()); - } - return this.$target; - }, - removeTarget: function () { - this.$target.remove(); - this.$target = null; - this.$contentElement = null; - }, - getTitleElement: function () { - return this.getTarget().find('.' + pluginClass + '-title'); - }, - getContentElement: function () { - if (!this.$contentElement) { - this.$contentElement = this.getTarget().find('.' + pluginClass + '-content'); - } - return this.$contentElement; - }, - getTitle: function () { - return this.$element.attr('data-title') || this.options.title || this.$element.attr('title'); - }, - getUrl: function () { - return this.$element.attr('data-url') || this.options.url; - }, - getAutoHide: function () { - return this.$element.attr('data-auto-hide') || this.options.autoHide; - }, - getOffsetTop: function () { - return toNumber(this.$element.attr('data-offset-top')) || this.options.offsetTop; - }, - getOffsetLeft: function () { - return toNumber(this.$element.attr('data-offset-left')) || this.options.offsetLeft; - }, - getCache: function () { - var dataAttr = this.$element.attr('data-cache'); - if (typeof (dataAttr) !== 'undefined') { - switch (dataAttr.toLowerCase()) { - case 'true': - case 'yes': - case '1': - return true; - case 'false': - case 'no': - case '0': - return false; - } - } - return this.options.cache; - }, - getTrigger: function () { - return this.$element.attr('data-trigger') || this.options.trigger; - }, - getDelayShow: function () { - var dataAttr = this.$element.attr('data-delay-show'); - if (typeof (dataAttr) !== 'undefined') { - return dataAttr; - } - return this.options.delay.show === 0 ? 0 : this.options.delay.show || 100; - }, - getHideDelay: function () { - var dataAttr = this.$element.attr('data-delay-hide'); - if (typeof (dataAttr) !== 'undefined') { - return dataAttr; - } - return this.options.delay.hide === 0 ? 0 : this.options.delay.hide || 100; - }, - getAnimation: function () { - var dataAttr = this.$element.attr('data-animation'); - return dataAttr || this.options.animation; - }, - getHideAnimation: function () { - var ani = this.getAnimation(); - return ani ? ani + '-out' : 'out'; - }, - setTitle: function (title) { - var $titleEl = this.getTitleElement(); - if (title) { - //check rtl - if (this.options.direction === 'rtl' && !$titleEl.hasClass(rtlClass)) { - $titleEl.addClass(rtlClass); - } - $titleEl.html(title); - } else { - $titleEl.remove(); - } - }, - hasContent: function () { - return this.getContent(); - }, - canEmptyHide: function () { - return this.options.hideEmpty && this.options.type === 'html'; - }, - getIframe: function () { - var $iframe = $('').attr('src', this.getUrl()); - var self = this; - $.each(this._defaults.iframeOptions, function (opt) { - if (typeof self.options.iframeOptions[opt] !== 'undefined') { - $iframe.attr(opt, self.options.iframeOptions[opt]); - } - }); - - return $iframe; - }, - getContent: function () { - if (this.getUrl()) { - switch (this.options.type) { - case 'iframe': - this.content = this.getIframe(); - break; - case 'html': - try { - this.content = $(this.getUrl()); - if (!this.content.is(':visible')) { - this.content.show(); - } - } catch (error) { - throw new Error('Unable to get popover content. Invalid selector specified.'); - } - break; - } - } else if (!this.content) { - var content = ''; - if ($.isFunction(this.options.content)) { - content = this.options.content.apply(this.$element[0], [this]); - } else { - content = this.options.content; - } - this.content = this.$element.attr('data-content') || content; - if (!this.content) { - var $next = this.$element.next(); - - if ($next && $next.hasClass(pluginClass + '-content')) { - this.content = $next; - } - } - } - return this.content; - }, - setContent: function (content) { - var $target = this.getTarget(); - var $ct = this.getContentElement(); - if (typeof content === 'string') { - $ct.html(content); - } else if (content instanceof $) { - $ct.html(''); - //Don't want to clone too many times. - if (!this.options.cache) { - content.clone(true, true).removeClass(pluginClass + '-content').appendTo($ct); - } else { - content.removeClass(pluginClass + '-content').appendTo($ct); - } - } - this.$target = $target; - }, - isAsync: function () { - return this.options.type === 'async'; - }, - setContentASync: function (content) { - var that = this; - if (this.xhr) { - return; - } - this.xhr = $.ajax({ - url: this.getUrl(), - type: this.options.async.type, - cache: this.getCache(), - beforeSend: function (xhr, settings) { - if (that.options.async.before) { - that.options.async.before(that, xhr, settings); - } - }, - success: function (data) { - that.bindBodyEvents(); - if (content && $.isFunction(content)) { - that.content = content.apply(that.$element[0], [data]); - } else { - that.content = data; - } - that.setContent(that.content); - var $targetContent = that.getContentElement(); - $targetContent.removeAttr('style'); - that.displayContent(); - if (that.options.async.success) { - that.options.async.success(that, data); - } - }, - complete: function () { - that.xhr = null; - }, - error: function (xhr, data) { - if (that.options.async.error) { - that.options.async.error(that, xhr, data); - } - } - }); - }, - - bindBodyEvents: function () { - if (_isBodyEventHandled) { - return; - } - if (this.options.dismissible && this.getTrigger() === 'click') { - if (isMobile) { - $document.off('touchstart.webui-popover').on('touchstart.webui-popover', $.proxy(this.bodyTouchStartHandler, this)); - } else { - $document.off('keyup.webui-popover').on('keyup.webui-popover', $.proxy(this.escapeHandler, this)); - $document.off('click.webui-popover').on('click.webui-popover', $.proxy(this.bodyClickHandler, this)); - } - } else if (this.getTrigger() === 'hover') { - $document.off('touchend.webui-popover') - .on('touchend.webui-popover', $.proxy(this.bodyClickHandler, this)); - } - }, - - /* event handlers */ - mouseenterHandler: function (e) { - var self = this; - - if (e && this.options.selector) { - self = this.delegate(e.currentTarget); - } - - if (self._timeout) { - clearTimeout(self._timeout); - } - self._enterTimeout = setTimeout(function () { - if (!self.getTarget().is(':visible')) { - self.show(); - } - }, this.getDelayShow()); - }, - mouseleaveHandler: function () { - var self = this; - clearTimeout(self._enterTimeout); - //key point, set the _timeout then use clearTimeout when mouse leave - self._timeout = setTimeout(function () { - self.hide(); - }, this.getHideDelay()); - }, - escapeHandler: function (e) { - if (e.keyCode === 27) { - this.hideAll(); - } - }, - bodyTouchStartHandler: function (e) { - var self = this; - var $eventEl = $(e.currentTarget); - $eventEl.on('touchend', function (e) { - self.bodyClickHandler(e); - $eventEl.off('touchend'); - }); - $eventEl.on('touchmove', function () { - $eventEl.off('touchend'); - }); - }, - bodyClickHandler: function (e) { - _isBodyEventHandled = true; - var canHide = true; - for (var i = 0; i < _srcElements.length; i++) { - var pop = getPopFromElement(_srcElements[i]); - if (pop && pop._opened) { - var offset = pop.getTarget().offset(); - var popX1 = offset.left; - var popY1 = offset.top; - var popX2 = offset.left + pop.getTarget().width(); - var popY2 = offset.top + pop.getTarget().height(); - var pt = pointerEventToXY(e); - var inPop = pt.x >= popX1 && pt.x <= popX2 && pt.y >= popY1 && pt.y <= popY2; - if (inPop) { - canHide = false; - break; - } - } - } - if (canHide) { - hideAllPop(); - } - }, - - /* - targetClickHandler: function() { - this._targetclick = true; - }, - */ - - //reset and init the target events; - initTargetEvents: function () { - if (this.getTrigger() === 'hover') { - this.$target - .off('mouseenter mouseleave') - .on('mouseenter', $.proxy(this.mouseenterHandler, this)) - .on('mouseleave', $.proxy(this.mouseleaveHandler, this)); - } - this.$target.find('.close').off('click').on('click', $.proxy(this.hide, this, true)); - //this.$target.off('click.webui-popover').on('click.webui-popover', $.proxy(this.targetClickHandler, this)); - }, - /* utils methods */ - //caculate placement of the popover - getPlacement: function (pos) { - var - placement, - container = this.options.container, - clientWidth = container.innerWidth(), - clientHeight = container.innerHeight(), - scrollTop = container.scrollTop(), - scrollLeft = container.scrollLeft(), - pageX = Math.max(0, pos.left - scrollLeft), - pageY = Math.max(0, pos.top - scrollTop); - //arrowSize = 20; - - //if placement equals auto,caculate the placement by element information; - if (typeof (this.options.placement) === 'function') { - placement = this.options.placement.call(this, this.getTarget()[0], this.$element[0]); - } else { - placement = this.$element.data('placement') || this.options.placement; - } - - var isH = placement === 'horizontal'; - var isV = placement === 'vertical'; - var detect = placement === 'auto' || isH || isV; - - if (detect) { - if (pageX < clientWidth / 3) { - if (pageY < clientHeight / 3) { - placement = isH ? 'right-bottom' : 'bottom-right'; - } else if (pageY < clientHeight * 2 / 3) { - if (isV) { - placement = pageY <= clientHeight / 2 ? 'bottom-right' : 'top-right'; - } else { - placement = 'right'; - } - } else { - placement = isH ? 'right-top' : 'top-right'; - } - //placement= pageY>targetHeight+arrowSize?'top-right':'bottom-right'; - } else if (pageX < clientWidth * 2 / 3) { - if (pageY < clientHeight / 3) { - if (isH) { - placement = pageX <= clientWidth / 2 ? 'right-bottom' : 'left-bottom'; - } else { - placement = 'bottom'; - } - } else if (pageY < clientHeight * 2 / 3) { - if (isH) { - placement = pageX <= clientWidth / 2 ? 'right' : 'left'; - } else { - placement = pageY <= clientHeight / 2 ? 'bottom' : 'top'; - } - } else { - if (isH) { - placement = pageX <= clientWidth / 2 ? 'right-top' : 'left-top'; - } else { - placement = 'top'; - } - } - } else { - //placement = pageY>targetHeight+arrowSize?'top-left':'bottom-left'; - if (pageY < clientHeight / 3) { - placement = isH ? 'left-bottom' : 'bottom-left'; - } else if (pageY < clientHeight * 2 / 3) { - if (isV) { - placement = pageY <= clientHeight / 2 ? 'bottom-left' : 'top-left'; - } else { - placement = 'left'; - } - } else { - placement = isH ? 'left-top' : 'top-left'; - } - } - } else if (placement === 'auto-top') { - if (pageX < clientWidth / 3) { - placement = 'top-right'; - } else if (pageX < clientWidth * 2 / 3) { - placement = 'top'; - } else { - placement = 'top-left'; - } - } else if (placement === 'auto-bottom') { - if (pageX < clientWidth / 3) { - placement = 'bottom-right'; - } else if (pageX < clientWidth * 2 / 3) { - placement = 'bottom'; - } else { - placement = 'bottom-left'; - } - } else if (placement === 'auto-left') { - if (pageY < clientHeight / 3) { - placement = 'left-top'; - } else if (pageY < clientHeight * 2 / 3) { - placement = 'left'; - } else { - placement = 'left-bottom'; - } - } else if (placement === 'auto-right') { - if (pageY < clientHeight / 3) { - placement = 'right-bottom'; - } else if (pageY < clientHeight * 2 / 3) { - placement = 'right'; - } else { - placement = 'right-top'; - } - } - return placement; - }, - getElementPosition: function () { - // If the container is the body or normal conatiner, just use $element.offset() - var elRect = this.$element[0].getBoundingClientRect(); - var container = this.options.container; - var cssPos = container.css('position'); - - if (container.is(document.body) || cssPos === 'static') { - return $.extend({}, this.$element.offset(), { - width: this.$element[0].offsetWidth || elRect.width, - height: this.$element[0].offsetHeight || elRect.height - }); - // Else fixed container need recalculate the position - } else if (cssPos === 'fixed') { - var containerRect = container[0].getBoundingClientRect(); - return { - top: elRect.top - containerRect.top + container.scrollTop(), - left: elRect.left - containerRect.left + container.scrollLeft(), - width: elRect.width, - height: elRect.height - }; - } else if (cssPos === 'relative') { - return { - top: this.$element.offset().top - container.offset().top, - left: this.$element.offset().left - container.offset().left, - width: this.$element[0].offsetWidth || elRect.width, - height: this.$element[0].offsetHeight || elRect.height - }; - } - }, - - getTargetPositin: function (elementPos, placement, targetWidth, targetHeight) { - var pos = elementPos, - container = this.options.container, - //clientWidth = container.innerWidth(), - //clientHeight = container.innerHeight(), - elementW = this.$element.outerWidth(), - elementH = this.$element.outerHeight(), - scrollTop = document.documentElement.scrollTop + container.scrollTop(), - scrollLeft = document.documentElement.scrollLeft + container.scrollLeft(), - position = {}, - arrowOffset = null, - arrowSize = this.options.arrow ? 20 : 0, - padding = 10, - fixedW = elementW < arrowSize + padding ? arrowSize : 0, - fixedH = elementH < arrowSize + padding ? arrowSize : 0, - refix = 0, - pageH = document.documentElement.clientHeight + scrollTop, - pageW = document.documentElement.clientWidth + scrollLeft; - - var validLeft = pos.left + pos.width / 2 - fixedW > 0; - var validRight = pos.left + pos.width / 2 + fixedW < pageW; - var validTop = pos.top + pos.height / 2 - fixedH > 0; - var validBottom = pos.top + pos.height / 2 + fixedH < pageH; - - - switch (placement) { - case 'bottom': - position = { - top: pos.top + pos.height, - left: pos.left + pos.width / 2 - targetWidth / 2 - }; - break; - case 'top': - position = { - top: pos.top - targetHeight, - left: pos.left + pos.width / 2 - targetWidth / 2 - }; - break; - case 'left': - position = { - top: pos.top + pos.height / 2 - targetHeight / 2, - left: pos.left - targetWidth - }; - break; - case 'right': - position = { - top: pos.top + pos.height / 2 - targetHeight / 2, - left: pos.left + pos.width - }; - break; - case 'top-right': - position = { - top: pos.top - targetHeight, - left: validLeft ? pos.left - fixedW : padding - }; - arrowOffset = { - left: validLeft ? Math.min(elementW, targetWidth) / 2 + fixedW : _offsetOut - }; - break; - case 'top-left': - refix = validRight ? fixedW : -padding; - position = { - top: pos.top - targetHeight, - left: pos.left - targetWidth + pos.width + refix - }; - arrowOffset = { - left: validRight ? targetWidth - Math.min(elementW, targetWidth) / 2 - fixedW : _offsetOut - }; - break; - case 'bottom-right': - position = { - top: pos.top + pos.height, - left: validLeft ? pos.left - fixedW : padding - }; - arrowOffset = { - left: validLeft ? Math.min(elementW, targetWidth) / 2 + fixedW : _offsetOut - }; - break; - case 'bottom-left': - refix = validRight ? fixedW : -padding; - position = { - top: pos.top + pos.height, - left: pos.left - targetWidth + pos.width + refix - }; - arrowOffset = { - left: validRight ? targetWidth - Math.min(elementW, targetWidth) / 2 - fixedW : _offsetOut - }; - break; - case 'right-top': - refix = validBottom ? fixedH : -padding; - position = { - top: pos.top - targetHeight + pos.height + refix, - left: pos.left + pos.width - }; - arrowOffset = { - top: validBottom ? targetHeight - Math.min(elementH, targetHeight) / 2 - fixedH : _offsetOut - }; - break; - case 'right-bottom': - position = { - top: validTop ? pos.top - fixedH : padding, - left: pos.left + pos.width - }; - arrowOffset = { - top: validTop ? Math.min(elementH, targetHeight) / 2 + fixedH : _offsetOut - }; - break; - case 'left-top': - refix = validBottom ? fixedH : -padding; - position = { - top: pos.top - targetHeight + pos.height + refix, - left: pos.left - targetWidth - }; - arrowOffset = { - top: validBottom ? targetHeight - Math.min(elementH, targetHeight) / 2 - fixedH : _offsetOut - }; - break; - case 'left-bottom': - position = { - top: validTop ? pos.top - fixedH : padding, - left: pos.left - targetWidth - }; - arrowOffset = { - top: validTop ? Math.min(elementH, targetHeight) / 2 + fixedH : _offsetOut - }; - break; - - } - position.top += this.getOffsetTop(); - position.left += this.getOffsetLeft(); - - return { - position: position, - arrowOffset: arrowOffset - }; - } - }; - $.fn[pluginName] = function (options, noInit) { - var results = []; - var $result = this.each(function () { - - var webuiPopover = $.data(this, 'plugin_' + pluginName); - if (!webuiPopover) { - if (!options) { - webuiPopover = new WebuiPopover(this, null); - } else if (typeof options === 'string') { - if (options !== 'destroy') { - if (!noInit) { - webuiPopover = new WebuiPopover(this, null); - results.push(webuiPopover[options]()); - } - } - } else if (typeof options === 'object') { - webuiPopover = new WebuiPopover(this, options); - } - $.data(this, 'plugin_' + pluginName, webuiPopover); - } else { - if (options === 'destroy') { - webuiPopover.destroy(); - } else if (typeof options === 'string') { - results.push(webuiPopover[options]()); - } - } - }); - return (results.length) ? results : $result; - }; - - //Global object exposes to window. - var webuiPopovers = (function () { - var _hideAll = function () { - hideAllPop(); - }; - var _create = function (selector, options) { - options = options || {}; - $(selector).webuiPopover(options); - }; - var _isCreated = function (selector) { - var created = true; - $(selector).each(function (i, item) { - created = created && $(item).data('plugin_' + pluginName) !== undefined; - }); - return created; - }; - var _show = function (selector, options) { - if (options) { - $(selector).webuiPopover(options).webuiPopover('show'); - } else { - $(selector).webuiPopover('show'); - } - }; - var _hide = function (selector) { - $(selector).webuiPopover('hide'); - }; - - var _setDefaultOptions = function (options) { - defaults = $.extend({}, defaults, options); - }; - - var _updateContent = function (selector, content) { - var pop = $(selector).data('plugin_' + pluginName); - if (pop) { - var cache = pop.getCache(); - pop.options.cache = false; - pop.options.content = content; - if (pop._opened) { - pop._opened = false; - pop.show(); - } else { - if (pop.isAsync()) { - pop.setContentASync(content); - } else { - pop.setContent(content); - } - } - pop.options.cache = cache; - } - }; - - var _updateContentAsync = function (selector, url) { - var pop = $(selector).data('plugin_' + pluginName); - if (pop) { - var cache = pop.getCache(); - var type = pop.options.type; - pop.options.cache = false; - pop.options.url = url; - - if (pop._opened) { - pop._opened = false; - pop.show(); - } else { - pop.options.type = 'async'; - pop.setContentASync(pop.content); - } - pop.options.cache = cache; - pop.options.type = type; - } - }; - - return { - show: _show, - hide: _hide, - create: _create, - isCreated: _isCreated, - hideAll: _hideAll, - updateContent: _updateContent, - updateContentAsync: _updateContentAsync, - setDefaultOptions: _setDefaultOptions - }; - })(); - window.WebuiPopovers = webuiPopovers; - exports("popover",WebuiPopovers); -}) - - - - diff --git a/component/pear/module/select.js b/component/pear/module/select.js deleted file mode 100644 index 3b095f72cdfea386ca6adcf4ae1ac7c1b14128c2..0000000000000000000000000000000000000000 --- a/component/pear/module/select.js +++ /dev/null @@ -1,1740 +0,0 @@ -/** - * name: formSelects - * 基于Layui Select多选 - * version: 4.0.0.0910 - * http://sun.faysunshine.com/layui/formSelects-v4/dist/formSelects-v4.js - */ -(function(layui, window, factory) { - if(typeof exports === 'object') { // 支持 CommonJS - module.exports = factory(); - } else if(typeof define === 'function' && define.amd) { // 支持 AMD - define(factory); - } else if(window.layui && layui.define) { //layui加载 - layui.define(['jquery'], function(exports) { - exports('select', factory()); - }); - } else { - window.formSelects = factory(); - } -})(typeof layui == 'undefined' ? null : layui, window, function() { - let v = '4.0.0.0910', - NAME = 'xm-select', - PNAME = 'xm-select-parent', - INPUT = 'xm-select-input', - TDIV = 'xm-select--suffix', - THIS = 'xm-select-this', - LABEL = 'xm-select-label', - SEARCH = 'xm-select-search', - SEARCH_TYPE = 'xm-select-search-type', - SHOW_COUNT = 'xm-select-show-count', - CREATE = 'xm-select-create', - CREATE_LONG = 'xm-select-create-long', - MAX = 'xm-select-max', - SKIN = 'xm-select-skin', - DIRECTION = "xm-select-direction", - HEIGHT = 'xm-select-height', - DISABLED = 'xm-dis-disabled', - DIS = 'xm-select-dis', - TEMP = 'xm-select-temp', - RADIO = 'xm-select-radio', - LINKAGE= 'xm-select-linkage', - DL = 'xm-select-dl', - DD_HIDE = 'xm-select-hide', - HIDE_INPUT = 'xm-hide-input', - SANJIAO = 'xm-select-sj', - ICON_CLOSE = 'xm-icon-close', - FORM_TITLE = 'xm-select-title', - FORM_SELECT = 'xm-form-select', - FORM_SELECTED = 'xm-form-selected', - FORM_NONE = 'xm-select-none', - FORM_EMPTY = 'xm-select-empty', - FORM_INPUT = 'xm-input', - FORM_DL_INPUT = 'xm-dl-input', - FORM_SELECT_TIPS = 'xm-select-tips', - CHECKBOX_YES = 'xm-iconfont', - FORM_TEAM_PID = 'XM_PID_VALUE', - CZ = 'xm-cz', - CZ_GROUP = 'xm-cz-group', - TIPS = '请选择', - data = {}, - events = { - on: {}, - endOn: {}, - filter: {}, - maxTips: {}, - opened: {}, - closed: {} - }, - ajax = { - type: 'get', - header: { - - }, - first: true, - data: {}, - searchUrl: '', - searchName: 'keyword', - searchVal: null, - keyName: 'name', - keyVal: 'value', - keySel: 'selected', - keyDis: 'disabled', - keyChildren: 'children', - dataType: '', - delay: 500, - beforeSuccess: null, - success: null, - error: null, - beforeSearch: null, - response: { - statusCode: 0, - statusName: 'code', - msgName: 'msg', - dataName: 'data' - }, - tree: { - nextClick: function(id, item, callback){ - callback([]); - }, - folderChoose: true, - lazy: true - } - }, - quickBtns = [ - {icon: 'xm-iconfont icon-quanxuan', name: '全选', click: function(id, cm){ - cm.selectAll(id, true, true); - }}, - {icon: 'xm-iconfont icon-qingkong', name: '清空', click: function(id, cm){ - cm.removeAll(id, true, true); - }}, - {icon: 'xm-iconfont icon-fanxuan', name: '反选', click: function(id, cm){ - cm.reverse(id, true, true); - }}, - {icon: 'xm-iconfont icon-pifu', name: '换肤', click: function(id, cm){ - cm.skin(id); - }} - ], - $ = window.$ || (window.layui && window.layui.jquery), - $win = $(window), - ajaxs = {}, - fsConfig = {}, - fsConfigs = {}, - FormSelects = function(options) { - this.config = { - name: null, //xm-select="xxx" - max: null, - maxTips: (id, vals, val, max) => { - let ipt = $(`[xid="${this.config.name}"]`).prev().find(`.${NAME}`); - if(ipt.parents('.layui-form-item[pane]').length) { - ipt = ipt.parents('.layui-form-item[pane]'); - } - ipt.attr('style', 'border-color: red !important'); - setTimeout(() => { - ipt.removeAttr('style'); - }, 300); - }, - init: null, //初始化的选择值, - on: null, //select值发生变化 - opened: null, - closed: null, - filter: (id, inputVal, val, isDisabled) => { - return val.name.indexOf(inputVal) == -1; - }, - clearid: -1, - direction: 'auto', - height: null, - isEmpty: false, - btns: [quickBtns[0], quickBtns[1], quickBtns[2]], - searchType: 0, - create: (id, name) => { - return Date.now(); - }, - template: (id, item) => { - return item.name; - }, - showCount: 0, - isCreate: false, - placeholder: TIPS, - clearInput: false, - }; - this.select = null; - this.values = []; - $.extend(this.config, options, { - searchUrl: options.isSearch ? options.searchUrl : null, - placeholder: options.optionsFirst ? ( - options.optionsFirst.value ? TIPS : (options.optionsFirst.innerHTML || TIPS) - ) : TIPS, - btns: options.radio ? [quickBtns[1]] : [quickBtns[0], quickBtns[1], quickBtns[2]], - }, fsConfigs[options.name] || fsConfig); - if(isNaN(this.config.showCount) || this.config.showCount <= 0) { - this.config.showCount = 19921012; - } - }; - - //一些简单的处理方法 - let Common = function(){ - this.appender(); - this.on(); - this.onreset(); - }; - - Common.prototype.appender = function(){//针对IE做的一些拓展 - //拓展Array map方法 - if(!Array.prototype.map){Array.prototype.map=function(i,h){var b,a,c,e=Object(this),f=e.length>>>0;if(h){b=h}a=new Array(f);c=0;while(c>>0;if(typeof g!=="function"){throw new TypeError(g+" is not a function")}if(arguments.length>1){d=b}c=0;while(c>>0;if(typeof b!=="function"){throw new TypeError()}var e=[];var d=arguments[1];for(var c=0;c { - let othis = $(select), - id = othis.attr(NAME), - hasLayuiRender = othis.next(`.layui-form-select`), - hasRender = othis.next(`.${PNAME}`), - options = { - name: id, - disabled: select.disabled, - max: othis.attr(MAX) - 0, - isSearch: othis.attr(SEARCH) != undefined, - searchUrl: othis.attr(SEARCH), - isCreate: othis.attr(CREATE) != undefined, - radio: othis.attr(RADIO) != undefined, - skin: othis.attr(SKIN), - direction: othis.attr(DIRECTION), - optionsFirst: select.options[0], - height: othis.attr(HEIGHT), - formname: othis.attr('name') || othis.attr('_name'), - layverify: othis.attr('lay-verify') || othis.attr('_lay-verify'), - layverType: othis.attr('lay-verType'), - searchType: othis.attr(SEARCH_TYPE) == 'dl' ? 1 : 0, - showCount: othis.attr(SHOW_COUNT) - 0, - }, - value = othis.find('option[selected]').toArray().map((option) => {//获取已选中的数据 - return { - name: option.innerHTML, - value: option.value, - } - }), - fs = new FormSelects(options); - - fs.values = value; - - if(fs.config.init) { - fs.values = fs.config.init.map(item => { - if(typeof item == 'object') { - return item; - } - return { - name: othis.find(`option[value="${item}"]`).text(), - value: item - } - }).filter(item => { - return item.name; - }); - fs.config.init = fs.values.concat([]); - }else{ - fs.config.init = value.concat([]); - } - - !fs.values && (fs.values = []); - - data[id] = fs; - - //先取消layui对select的渲染 - hasLayuiRender[0] && hasLayuiRender.remove(); - hasRender[0] && hasRender.remove(); - - //构造渲染div - let dinfo = this.renderSelect(id, fs.config.placeholder, select); - let heightStyle = !fs.config.height || fs.config.height == 'auto' ? '' : `xm-hg style="height: 34px;"`; - let inputHtml = [ - `
                `, - ``, - `
                ` - ]; - let reElem = - $(`
                - -
                -
                - ${inputHtml.join('')} - -
                -
                - -
                -
                -
                -
                ${dinfo}
                -
                `); - - var $parent = $(`
                `); - $parent.append(reElem) - othis.after($parent); - othis.attr('lay-ignore', ''); - othis.removeAttr('name') && othis.attr('_name', fs.config.formname); - othis.removeAttr('lay-verify') && othis.attr('_lay-verify', fs.config.layverify); - - //如果可搜索, 加上事件 - if(fs.config.isSearch){ - ajaxs[id] = $.extend({}, ajax, {searchUrl: fs.config.searchUrl}, ajaxs[id]); - $(document).on('input', `div.${PNAME}[FS_ID="${id}"] .${INPUT}`, (e) => { - this.search(id, e, fs.config.searchUrl); - }); - if(fs.config.searchUrl){//触发第一次请求事件 - this.triggerSearch(reElem, true); - } - }else{//隐藏第二个dl - reElem.find(`dl dd.${FORM_DL_INPUT}`).css('display', 'none'); - } - }); - } - - Common.prototype.search = function(id, e, searchUrl, call){ - let input; - if(call){ - input = call; - }else{ - input = e.target; - let keyCode = e.keyCode; - if(keyCode === 9 || keyCode === 13 || keyCode === 37 || keyCode === 38 || keyCode === 39 || keyCode === 40) { - return false; - } - } - let inputValue = $.trim(input.value); - //过滤一下tips - this.changePlaceHolder($(input)); - - let ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax; - searchUrl = ajaxConfig.searchUrl || searchUrl; - let fs = data[id], - isCreate = fs.config.isCreate, - reElem = $(`dl[xid="${id}"]`).parents(`.${FORM_SELECT}`); - //如果开启了远程搜索 - if(searchUrl){ - if(ajaxConfig.searchVal){ - inputValue = ajaxConfig.searchVal; - ajaxConfig.searchVal = ''; - } - if(!ajaxConfig.beforeSearch || (ajaxConfig.beforeSearch && ajaxConfig.beforeSearch instanceof Function && ajaxConfig.beforeSearch(id, searchUrl, inputValue))){ - let delay = ajaxConfig.delay; - if(ajaxConfig.first){ - ajaxConfig.first = false; - delay = 10; - } - clearTimeout(fs.clearid); - fs.clearid = setTimeout(() => { - reElem.find(`dl > *:not(.${FORM_SELECT_TIPS})`).remove(); - reElem.find(`dd.${FORM_NONE}`).addClass(FORM_EMPTY).text('请求中'); - this.ajax(id, searchUrl, inputValue, false, null, true); - }, delay); - } - }else{ - reElem.find(`dl .${DD_HIDE}`).removeClass(DD_HIDE); - //遍历选项, 选择可以显示的值 - reElem.find(`dl dd:not(.${FORM_SELECT_TIPS})`).each((idx, item) => { - let _item = $(item); - let searchFun = events.filter[id] || data[id].config.filter; - if(searchFun && searchFun(id, inputValue, this.getItem(id, _item), _item.hasClass(DISABLED)) == true){ - _item.addClass(DD_HIDE); - } - }); - //控制分组名称 - reElem.find('dl dt').each((index, item) => { - if(!$(item).nextUntil('dt', `:not(.${DD_HIDE})`).length) { - $(item).addClass(DD_HIDE); - } - }); - //动态创建 - this.create(id, isCreate, inputValue); - let shows = reElem.find(`dl dd:not(.${FORM_SELECT_TIPS}):not(.${DD_HIDE})`); - if(!shows.length){ - reElem.find(`dd.${FORM_NONE}`).addClass(FORM_EMPTY).text('无匹配项'); - }else{ - reElem.find(`dd.${FORM_NONE}`).removeClass(FORM_EMPTY); - } - } - } - - Common.prototype.isArray = function(obj){ - return Object.prototype.toString.call(obj) == "[object Array]"; - } - - Common.prototype.triggerSearch = function(div, isCall){ - (div ? [div] : $(`.${FORM_SELECT}`).toArray()).forEach((reElem, index) => { - reElem = $(reElem); - let id = reElem.find('dl').attr('xid') - if((id && data[id] && data[id].config.isEmpty) || isCall){ - this.search(id, null, null, data[id].config.searchType == 0 ? reElem.find(`.${LABEL} .${INPUT}`) : reElem.find(`dl .${FORM_DL_INPUT} .${INPUT}`)); - } - }); - } - - Common.prototype.clearInput = function(id){ - let div = $(`.${PNAME}[fs_id="${id}"]`); - let input = data[id].config.searchType == 0 ? div.find(`.${LABEL} .${INPUT}`) : div.find(`dl .${FORM_DL_INPUT} .${INPUT}`); - input.val(''); - } - - Common.prototype.ajax = function(id, searchUrl, inputValue, isLinkage, linkageWidth, isSearch, successCallback, isReplace){ - let reElem = $(`.${PNAME} dl[xid="${id}"]`).parents(`.${FORM_SELECT}`); - if(!reElem[0] || !searchUrl){ - return ; - } - let ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax; - let ajaxData = $.extend(true, {}, ajaxConfig.data); - ajaxData[ajaxConfig.searchName] = inputValue; - //是否需要对ajax添加随机时间 - //ajaxData['_'] = Date.now(); - $.ajax({ - type: ajaxConfig.type, - headers: ajaxConfig.header, - url: searchUrl, - data: ajaxConfig.dataType == 'json' ? JSON.stringify(ajaxData) : ajaxData, - success: (res) => { - if(typeof res == 'string'){ - res = JSON.parse(res); - } - ajaxConfig.beforeSuccess && ajaxConfig.beforeSuccess instanceof Function && (res = ajaxConfig.beforeSuccess(id, searchUrl, inputValue, res)); - if(this.isArray(res)){ - let newRes = {}; - newRes[ajaxConfig.response.statusName] = ajaxConfig.response.statusCode; - newRes[ajaxConfig.response.msgName] = ""; - newRes[ajaxConfig.response.dataName] = res; - res = newRes; - } - if(res[ajaxConfig.response.statusName] != ajaxConfig.response.statusCode) { - reElem.find(`dd.${FORM_NONE}`).addClass(FORM_EMPTY).text(res[ajaxConfig.response.msgName]); - }else{ - reElem.find(`dd.${FORM_NONE}`).removeClass(FORM_EMPTY); - this.renderData(id, res[ajaxConfig.response.dataName], isLinkage, linkageWidth, isSearch, isReplace); - data[id].config.isEmpty = res[ajaxConfig.response.dataName].length == 0; - } - successCallback && successCallback(id); - ajaxConfig.success && ajaxConfig.success instanceof Function && ajaxConfig.success(id, searchUrl, inputValue, res); - }, - error: (err) => { - reElem.find(`dd[lay-value]:not(.${FORM_SELECT_TIPS})`).remove(); - reElem.find(`dd.${FORM_NONE}`).addClass(FORM_EMPTY).text('服务异常'); - ajaxConfig.error && ajaxConfig.error instanceof Function && ajaxConfig.error(id, searchUrl, inputValue, err); - } - }); - } - - Common.prototype.renderData = function(id, dataArr, linkage, linkageWidth, isSearch, isReplace){ - if(linkage){//渲染多级联动 - this.renderLinkage(id, dataArr, linkageWidth); - return; - } - if(isReplace){ - this.renderReplace(id, dataArr); - return; - } - - let reElem = $(`.${PNAME} dl[xid="${id}"]`).parents(`.${FORM_SELECT}`); - let ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax; - let pcInput = reElem.find(`.${TDIV} input`); - - dataArr = this.exchangeData(id, dataArr); - let values = []; - reElem.find('dl').html(this.renderSelect(id, pcInput.attr('placeholder') || pcInput.attr('back'), dataArr.map((item) => { - let itemVal = $.extend({}, item, { - innerHTML: item[ajaxConfig.keyName], - value: item[ajaxConfig.keyVal], - sel: item[ajaxConfig.keySel], - disabled: item[ajaxConfig.keyDis], - type: item.type, - name: item[ajaxConfig.keyName] - }); - if(itemVal.sel){ - values.push(itemVal); - } - return itemVal; - }))); - - let label = reElem.find(`.${LABEL}`); - let dl = reElem.find('dl[xid]'); - if(isSearch){//如果是远程搜索, 这里需要判重 - let oldVal = data[id].values; - oldVal.forEach((item, index) => { - dl.find(`dd[lay-value="${item.value}"]`).addClass(THIS); - }); - values.forEach((item, index) => { - if(this.indexOf(oldVal, item) == -1){ - this.addLabel(id, label, item); - dl.find(`dd[lay-value="${item.value}"]`).addClass(THIS); - oldVal.push(item); - } - }); - }else{ - values.forEach((item, index) => { - this.addLabel(id, label, item); - dl.find(`dd[lay-value="${item.value}"]`).addClass(THIS); - }); - data[id].values = values; - } - this.commonHandler(id, label); - } - - Common.prototype.renderLinkage = function(id, dataArr, linkageWidth){ - let result = [], - index = 0, - temp = {"0": dataArr}, - ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax; - db[id] = {}; - do{ - let group = result[index ++] = [], - _temp = temp; - temp = {}; - $.each(_temp, (pid, arr) => { - $.each(arr, (idx, item) => { - let val = { - pid: pid, - name: item[ajaxConfig.keyName], - value: item[ajaxConfig.keyVal], - }; - db[id][val.value] = $.extend(item, val); - group.push(val); - let children = item[ajaxConfig.keyChildren]; - if(children && children.length){ - temp[val.value] = children; - } - }); - }); - }while(Object.getOwnPropertyNames(temp).length); - - let reElem = $(`.${PNAME} dl[xid="${id}"]`).parents(`.${FORM_SELECT}`); - let html = ['
                ']; - - $.each(result, (idx, arr) => { - let groupDiv = [`
                `]; - $.each(arr, (idx2, item) => { - let span = `
              • ${item.name}
              • `; - groupDiv.push(span); - }); - groupDiv.push(`
                `); - html = html.concat(groupDiv); - }); - html.push('
                '); - html.push('
                '); - reElem.find('dl').html(html.join('')); - reElem.find(`.${INPUT}`).css('display', 'none');//联动暂时不支持搜索 - } - - Common.prototype.renderReplace = function(id, dataArr){ - let dl = $(`.${PNAME} dl[xid="${id}"]`); - let ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax; - - dataArr = this.exchangeData(id, dataArr); - db[id] = dataArr; - - let html = dataArr.map((item) => { - let itemVal = $.extend({}, item, { - innerHTML: item[ajaxConfig.keyName], - value: item[ajaxConfig.keyVal], - sel: item[ajaxConfig.keySel], - disabled: item[ajaxConfig.keyDis], - type: item.type, - name: item[ajaxConfig.keyName] - }); - return this.createDD(id, itemVal); - }).join(''); - - dl.find(`dd:not(.${FORM_SELECT_TIPS}),dt:not([style])`).remove(); - dl.find(`dt[style]`).after($(html)); - } - - Common.prototype.exchangeData = function(id, arr){//这里处理树形结构 - let ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax; - let childrenName = ajaxConfig['keyChildren']; - let disabledName = ajaxConfig['keyDis']; - db[id] = {}; - let result = this.getChildrenList(arr, childrenName, disabledName, [], false); - return result; - } - - Common.prototype.getChildrenList = function(arr, childrenName, disabledName, pid, disabled){ - let result = [], offset = 0; - for(let a = 0; a < arr.length; a ++){ - let item = arr[a]; - if(item.type && item.type == 'optgroup'){ - result.push(item); - continue; - }else{ - offset ++; - } - let parentIds = pid.concat([]); - parentIds.push(`${offset - 1}_E`); - item[FORM_TEAM_PID] = JSON.stringify(parentIds); - item[disabledName] = item[disabledName] || disabled; - result.push(item); - let child = item[childrenName]; - if(child && common.isArray(child) && child.length){ - item['XM_TREE_FOLDER'] = true; - let pidArr = parentIds.concat([]); - let childResult = this.getChildrenList(child, childrenName, disabledName, pidArr, item[disabledName]); - result = result.concat(childResult); - } - } - return result; - } - - Common.prototype.create = function(id, isCreate, inputValue){ - if(isCreate && inputValue){ - let fs = data[id], - dl = $(`[xid="${id}"]`), - tips= dl.find(`dd.${FORM_SELECT_TIPS}.${FORM_DL_INPUT}`), - tdd = null, - temp = dl.find(`dd.${TEMP}`); - dl.find(`dd:not(.${FORM_SELECT_TIPS}):not(.${TEMP})`).each((index, item) => { - if(inputValue == $(item).find('span').attr('name')){ - tdd = item; - } - }); - if(!tdd){//如果不存在, 则创建 - let val = fs.config.create(id, inputValue); - if(temp[0]){ - temp.attr('lay-value', val); - temp.find('span').text(inputValue); - temp.find('span').attr("name", inputValue); - temp.removeClass(DD_HIDE); - }else{ - tips.after($(this.createDD(id, { - name: inputValue, - innerHTML: inputValue, - value: val - }, `${TEMP} ${CREATE_LONG}`))); - } - } - }else{ - $(`[xid=${id}] dd.${TEMP}`).remove(); - } - } - - Common.prototype.createDD = function(id, item, clz){ - let ajaxConfig = ajaxs[id] ? ajaxs[id] : ajax; - let name = $.trim(item.innerHTML); - db[id][item.value] = $(item).is('option') ? (item = function(){ - let resultItem = {}; - resultItem[ajaxConfig.keyName] = name; - resultItem[ajaxConfig.keyVal] = item.value; - resultItem[ajaxConfig.keyDis] = item.disabled; - return resultItem; - }()) : item; - let template = data[id].config.template(id, item); - let pid = item[FORM_TEAM_PID]; - pid ? (pid = JSON.parse(pid)) : (pid = [-1]); - let attr = pid[0] == -1 ? '' : `tree-id="${pid.join('-')}" tree-folder="${!!item['XM_TREE_FOLDER']}"`; - return `
                -
                - - ${template} -
                -
                `; - } - - Common.prototype.createQuickBtn = function(obj, right){ - return `
                ${obj.name}
                ` - } - - Common.prototype.renderBtns = function(id, show, right){ - let quickBtn = []; - let dl = $(`dl[xid="${id}"]`); - quickBtn.push(`
                `); - $.each(data[id].config.btns, (index, item) => { - quickBtn.push(this.createQuickBtn(item, right)); - }); - quickBtn.push(`
                `); - quickBtn.push(this.createQuickBtn({icon: 'xm-iconfont icon-caidan', name: ''})); - return quickBtn.join(''); - } - - Common.prototype.renderSelect = function(id, tips, select){ - db[id] = {}; - let arr = []; - if(data[id].config.btns.length){ - setTimeout(() => { - let dl = $(`dl[xid="${id}"]`); - dl.parents(`.${FORM_SELECT}`).attr(SEARCH_TYPE, data[id].config.searchType); - dl.find(`.${CZ_GROUP}`).css('max-width', `${dl.prev().width() - 54}px`); - }, 10) - arr.push([ - `
                `, - this.renderBtns(id, null, '30px'), - `
                `, - `
                `, - ``, - ``, - `
                ` - ].join('')); - }else{ - arr.push(`
                ${tips}
                `); - } - if(this.isArray(select)){ - $(select).each((index, item) => { - if(item){ - if(item.type && item.type === 'optgroup') { - arr.push(`
                ${item.name}
                `); - } else { - arr.push(this.createDD(id, item)); - } - } - }); - }else{ - $(select).find('*').each((index, item) => { - if(item.tagName.toLowerCase() == 'option' && index == 0 && !item.value){ - return ; - } - if(item.tagName.toLowerCase() === 'optgroup') { - arr.push(`
                ${item.label}
                `); - } else { - arr.push(this.createDD(id, item)); - } - }); - } - arr.push('
                '); - arr.push(`
                没有选项
                `); - return arr.join(''); - } - - Common.prototype.on = function(){//事件绑定 - this.one(); - - $(document).on('click', (e) => { - if(!$(e.target).parents(`.${FORM_TITLE}`)[0]){//清空input中的值 - $(`.${PNAME} dl .${DD_HIDE}`).removeClass(DD_HIDE); - $(`.${PNAME} dl dd.${FORM_EMPTY}`).removeClass(FORM_EMPTY); - $(`.${PNAME} dl dd.${TEMP}`).remove(); - $.each(data, (key, fs) => { - this.clearInput(key); - if(!fs.values.length){ - this.changePlaceHolder($(`div[FS_ID="${key}"] .${LABEL}`)); - } - }); - } - $(`.${PNAME} .${FORM_SELECTED}`).each((index, item) => { - this.changeShow($(item).find(`.${FORM_TITLE}`), false); - }) ; - }); - } - - Common.prototype.calcLabelLeft = function(label, w, call){ - let pos = this.getPosition(label[0]); - pos.y = pos.x + label[0].clientWidth; - let left = label[0].offsetLeft; - if(!label.find('span').length){ - left = 0; - }else if(call){//校正归位 - let span = label.find('span:last'); - span.css('display') == 'none' ? (span = span.prev()[0]) : (span = span[0]); - let spos = this.getPosition(span); - spos.y = spos.x + span.clientWidth; - - if(spos.y > pos.y){ - left = left - (spos.y - pos.y) - 5; - }else{ - left = 0; - } - }else{ - if(w < 0){ - let span = label.find(':last'); - span.css('display') == 'none' ? (span = span.prev()[0]) : (span = span[0]); - let spos = this.getPosition(span); - spos.y = spos.x + span.clientWidth; - if(spos.y > pos.y){ - left -= 10; - } - }else{ - if(left < 0){ - left += 10; - } - if(left > 0){ - left = 0; - } - } - } - label.css('left', left + 'px'); - } - - Common.prototype.one = function(target){//一次性事件绑定 - $(target ? target : document).off('click', `.${FORM_TITLE}`).on('click', `.${FORM_TITLE}`, (e) => { - let othis = $(e.target), - title = othis.is(FORM_TITLE) ? othis : othis.parents(`.${FORM_TITLE}`), - dl = title.next(), - id = dl.attr('xid'); - - //清空非本select的input val - $(`dl[xid]`).not(dl).each((index, item) => { - this.clearInput($(item).attr('xid')); - }); - $(`dl[xid]`).not(dl).find(`dd.${DD_HIDE}`).removeClass(DD_HIDE); - - //如果是disabled select - if(title.hasClass(DIS)){ - return false; - } - //如果点击的是右边的三角或者只读的input - if(othis.is(`.${SANJIAO}`) || othis.is(`.${INPUT}[readonly]`)){ - this.changeShow(title, !title.parents(`.${FORM_SELECT}`).hasClass(FORM_SELECTED)); - return false; - } - //如果点击的是input的右边, focus一下 - if(title.find(`.${INPUT}:not(readonly)`)[0]){ - let input = title.find(`.${INPUT}`), - epos = {x: e.pageX, y: e.pageY}, - pos = this.getPosition(title[0]), - width = title.width(); - while(epos.x > pos.x){ - if($(document.elementFromPoint(epos.x, epos.y)).is(input)){ - input.focus(); - this.changeShow(title, true); - return false; - } - epos.x -= 50; - } - } - - //如果点击的是可搜索的input - if(othis.is(`.${INPUT}`)){ - this.changeShow(title, true); - return false; - } - //如果点击的是x按钮 - if(othis.is(`i[fsw="${NAME}"]`)){ - let val = this.getItem(id, othis), - dd = dl.find(`dd[lay-value='${val.value}']`); - if(dd.hasClass(DISABLED)){//如果是disabled状态, 不可选, 不可删 - return false; - } - this.handlerLabel(id, dd, false, val); - return false; - } - - this.changeShow(title, !title.parents(`.${FORM_SELECT}`).hasClass(FORM_SELECTED)); - return false; - }); - $(target ? target : document).off('click', `dl.${DL}`).on('click', `dl.${DL}`, (e) => { - let othis = $(e.target); - if(othis.is(`.${LINKAGE}`) || othis.parents(`.${LINKAGE}`)[0]){//linkage的处理 - othis = othis.is('li') ? othis : othis.parents('li[xm-value]'); - let group = othis.parents('.xm-select-linkage-group'), - id = othis.parents('dl').attr('xid'); - if(!id){ - return false; - } - //激活li - group.find('.xm-select-active').removeClass('xm-select-active'); - othis.addClass('xm-select-active'); - //激活下一个group, 激活前显示对应数据 - group.nextAll('.xm-select-linkage-group').addClass('xm-select-linkage-hide'); - let nextGroup = group.next('.xm-select-linkage-group'); - nextGroup.find('li').addClass('xm-select-linkage-hide'); - nextGroup.find(`li[pid="${othis.attr('xm-value')}"]`).removeClass('xm-select-linkage-hide'); - //如果没有下一个group, 或没有对应的值 - if(!nextGroup[0] || nextGroup.find(`li:not(.xm-select-linkage-hide)`).length == 0){ - let vals = [], - index = 0, - isAdd = !othis.hasClass('xm-select-this'); - if(data[id].config.radio){ - othis.parents('.xm-select-linkage').find('.xm-select-this').removeClass('xm-select-this'); - } - do{ - vals[index ++] = { - name: othis.find('span').text(), - value: othis.attr('xm-value') - } - othis = othis.parents('.xm-select-linkage-group').prev().find(`li[xm-value="${othis.attr('pid')}"]`); - }while(othis.length); - vals.reverse(); - let val = { - name: vals.map((item) => { - return item.name; - }).join('/'), - value: vals.map((item) => { - return item.value; - }).join('/'), - } - this.handlerLabel(id, null, isAdd, val); - }else{ - nextGroup.removeClass('xm-select-linkage-hide'); - } - return false; - } - - if(othis.is('dl')){ - return false; - } - - if(othis.is('dt')){ - othis.nextUntil(`dt`).each((index, item) => { - item = $(item); - if(item.hasClass(DISABLED) || item.hasClass(THIS)){ - - }else{ - item.find('i:not(.icon-expand)').click(); - } - }); - return false; - } - let dd = othis.is('dd') ? othis : othis.parents('dd'); - let id = dd.parent('dl').attr('xid'); - - if(dd.hasClass(DISABLED)){//被禁用选项的处理 - return false; - } - - //菜单功效 - if(othis.is('i.icon-caidan')){ - let opens = [], closes = []; - othis.parents('dl').find('dd[tree-folder="true"]').each((index, item) => { - $(item).attr('xm-tree-hidn') == undefined ? opens.push(item) : closes.push(item); - }); - let arr = closes.length ? closes : opens; - arr.forEach(item => item.click()); - return false; - } - //树状结构的选择 - let treeId = dd.attr('tree-id'); - if(treeId){ - //忽略右边的图标 - if(othis.is('i:not(.icon-expand)')){ - this.handlerLabel(id, dd, !dd.hasClass(THIS)); - return false; - } - let ajaxConfig = ajaxs[id] || ajax; - let treeConfig = ajaxConfig.tree; - let childrens = dd.nextAll(`dd[tree-id^="${treeId}"]`); - if(childrens && childrens.length){ - let len = childrens[0].clientHeight; - len ? ( - this.addTreeHeight(dd, len), - len = 0 - ) : ( - len = dd.attr('xm-tree-hidn') || 36, - dd.removeAttr('xm-tree-hidn'), - dd.find('>i').remove(), - (childrens = childrens.filter((index, item) => $(item).attr('tree-id').split('-').length - 1 == treeId.split('-').length)) - ); - childrens.animate({ - height: len - }, 150) - return false; - }else{ - if(treeConfig.nextClick && treeConfig.nextClick instanceof Function){ - treeConfig.nextClick(id, this.getItem(id, dd), (res) => { - if(!res || !res.length){ - this.handlerLabel(id, dd, !dd.hasClass(THIS)); - }else{ - dd.attr('tree-folder', 'true'); - let ddChilds = []; - res.forEach((item, idx) => { - item.innerHTML = item[ajaxConfig.keyName]; - item[FORM_TEAM_PID] = JSON.stringify(treeId.split('-').concat([idx])); - ddChilds.push(this.createDD(id, item)); - db[id][item[ajaxConfig.keyVal]] = item; - }); - dd.after(ddChilds.join('')); - } - }); - return false; - } - } - } - - if(dd.hasClass(FORM_SELECT_TIPS)){//tips的处理 - let btn = othis.is(`.${CZ}`) ? othis : othis.parents(`.${CZ}`); - if(!btn[0]){ - return false; - } - let method = btn.attr('method'); - let obj = data[id].config.btns.filter(bean => bean.name == method)[0]; - obj && obj.click && obj.click instanceof Function && obj.click(id, this); - return false; - } - this.handlerLabel(id, dd, !dd.hasClass(THIS)); - return false; - }); - } - - Common.prototype.addTreeHeight = function(dd, len){ - let treeId = dd.attr('tree-id'); - let childrens = dd.nextAll(`dd[tree-id^="${treeId}"]`); - if(childrens.length){ - dd.append(''); - dd.attr('xm-tree-hidn', len); - childrens.each((index, item) => { - let that = $(item); - this.addTreeHeight(that, len); - }) - } - } - - let db = {}; - Common.prototype.getItem = function(id, value){ - if(value instanceof $){ - if(value.is(`i[fsw="${NAME}"]`)){ - let span = value.parent(); - return db[id][value] || { - name: span.find('font').text(), - value: span.attr('value') - } - } - let val = value.attr('lay-value'); - return !db[id][val] ? (db[id][val] = { - name: value.find('span[name]').attr('name'), - value: val - }) : db[id][val]; - }else if(typeof(value) == 'string' && value.indexOf('/') != -1){ - return db[id][value] || { - name: this.valToName(id, value), - value: value - } - } - return db[id][value]; - } - - Common.prototype.linkageAdd = function(id, val){ - let dl = $(`dl[xid="${id}"]`); - dl.find('.xm-select-active').removeClass('xm-select-active'); - let vs = val.value.split('/'); - let pid, li, index = 0; - let lis = []; - do{ - pid = vs[index]; - li = dl.find(`.xm-select-linkage-group${index + 1} li[xm-value="${pid}"]`); - li[0] && lis.push(li); - index ++; - }while(li.length && pid != undefined); - if(lis.length == vs.length){ - $.each(lis, (idx, item) => { - item.addClass('xm-select-this'); - }); - } - } - - Common.prototype.linkageDel = function(id, val){ - let dl = $(`dl[xid="${id}"]`); - let vs = val.value.split('/'); - let pid, li, index = vs.length - 1; - do{ - pid = vs[index]; - li = dl.find(`.xm-select-linkage-group${index + 1} li[xm-value="${pid}"]`); - if(!li.parent().next().find(`li[pid=${pid}].xm-select-this`).length){ - li.removeClass('xm-select-this'); - } - index --; - }while(li.length && pid != undefined); - } - - Common.prototype.valToName = function(id, val){ - let dl = $(`dl[xid="${id}"]`); - let vs = (val + "").split('/'); - if(!vs.length){ - return null; - } - let names = []; - $.each(vs, (idx, item) => { - let name = dl.find(`.xm-select-linkage-group${idx + 1} li[xm-value="${item}"] span`).text(); - names.push(name); - }); - return names.length == vs.length ? names.join('/') : null; - } - - Common.prototype.commonHandler = function(key, label){ - if(!label || !label[0]){ - return ; - } - this.checkHideSpan(key, label); - //计算input的提示语 - this.changePlaceHolder(label); - //计算高度 - this.retop(label.parents(`.${FORM_SELECT}`)); - this.calcLabelLeft(label, 0, true); - //表单默认值 - this.setHidnVal(key, label); - //title值 - label.parents(`.${FORM_TITLE} .${NAME}`).attr('title', data[key].values.map((val) => { - return val.name; - }).join(',')); - } - - Common.prototype.initVal = function(id){ - let target = {}; - if(id){ - target[id] = data[id]; - }else{ - target = data; - } - $.each(target, (key, val) => { - let values = val.values, - div = $(`dl[xid="${key}"]`).parent(), - label = div.find(`.${LABEL}`), - dl = div.find('dl'); - dl.find(`dd.${THIS}`).removeClass(THIS); - - let _vals = values.concat([]); - _vals.concat([]).forEach((item, index) => { - this.addLabel(key, label, item); - dl.find(`dd[lay-value="${item.value}"]`).addClass(THIS); - }); - if(val.config.radio){ - _vals.length && values.push(_vals[_vals.length - 1]); - } - this.commonHandler(key, label); - }); - } - - Common.prototype.setHidnVal = function(key, label) { - if(!label || !label[0]) { - return; - } - label.parents(`.${PNAME}`).find(`.${HIDE_INPUT}`).val(data[key].values.map((val) => { - return val.value; - }).join(',')); - } - - Common.prototype.handlerLabel = function(id, dd, isAdd, oval, notOn){ - let div = $(`[xid="${id}"]`).prev().find(`.${LABEL}`), - val = dd && this.getItem(id, dd), - vals = data[id].values, - on = data[id].config.on || events.on[id], - endOn = data[id].config.endOn || events.endOn[id]; - if(oval){ - val = oval; - } - let fs = data[id]; - if(isAdd && fs.config.max && fs.values.length >= fs.config.max){ - let maxTipsFun = events.maxTips[id] || data[id].config.maxTips; - maxTipsFun && maxTipsFun(id, vals.concat([]), val, fs.config.max); - return ; - } - if(!notOn){ - if(on && on instanceof Function && on(id, vals.concat([]), val, isAdd, dd && dd.hasClass(DISABLED)) == false) { - return ; - } - } - let dl = $(`dl[xid="${id}"]`); - isAdd ? ( - (dd && dd[0] ? ( - dd.addClass(THIS), - dd.removeClass(TEMP) - ) : ( - dl.find('.xm-select-linkage')[0] && this.linkageAdd(id, val) - )), - this.addLabel(id, div, val), - vals.push(val) - ) : ( - (dd && dd[0] ? ( - dd.removeClass(THIS) - ) : ( - dl.find('.xm-select-linkage')[0] && this.linkageDel(id, val) - )), - this.delLabel(id, div, val), - this.remove(vals, val) - ); - if(!div[0]) return ; - //单选选完后直接关闭选择域 - if(fs.config.radio){ - this.changeShow(div, false); - } - //移除表单验证的红色边框 - div.parents(`.${FORM_TITLE}`).prev().removeClass('layui-form-danger'); - - //清空搜索值 - fs.config.clearInput && this.clearInput(id); - - this.commonHandler(id, div); - - !notOn && endOn && endOn instanceof Function && endOn(id, vals.concat([]), val, isAdd, dd && dd.hasClass(DISABLED)); - } - - Common.prototype.addLabel = function(id, div, val){ - if(!val) return ; - let tips = `fsw="${NAME}"`; - let [$label, $close] = [ - $(`${val.name}`), - $(``) - ]; - $label.append($close); - //如果是radio模式 - let fs = data[id]; - if(fs.config.radio){ - fs.values.length = 0; - $(`dl[xid="${id}"]`).find(`dd.${THIS}:not([lay-value="${val.value}"])`).removeClass(THIS); - div.find('span').remove(); - } - //如果是固定高度 - div.find('input').css('width', '50px'); - div.find('input').before($label); - } - - Common.prototype.delLabel = function(id, div, val){ - if(!val) return ; - div.find(`span[value="${val.value}"]:first`).remove(); - } - - Common.prototype.checkHideSpan = function(id, div){ - let parentHeight = div.parents(`.${NAME}`)[0].offsetHeight + 5; - div.find('span.xm-span-hide').removeClass('xm-span-hide'); - div.find('span[style]').remove(); - - let count = data[id].config.showCount; - div.find('span').each((index, item) => { - if(index >= count){ - $(item).addClass('xm-span-hide'); - } - }); - - let prefix = div.find(`span:eq(${count})`); - prefix[0] && prefix.before($(` + ${div.find('span').length - count}`)) - } - - Common.prototype.retop = function(div){//计算dl显示的位置 - let dl = div.find('dl'), - top = div.offset().top + div.outerHeight() + 5 - $win.scrollTop(), - dlHeight = dl.outerHeight(); - let up = div.hasClass('layui-form-selectup') || dl.css('top').indexOf('-') != -1 || (top + dlHeight > $win.height() && top >= dlHeight); - div = div.find(`.${NAME}`); - - let fs = data[dl.attr('xid')]; - let base = dl.parents('.layui-form-pane')[0] && dl.prev()[0].clientHeight > 38 ? 14 : 10; - if((fs && fs.config.direction == 'up') || up){ - up = true; - if((fs && fs.config.direction == 'down')){ - up = false; - } - } - let reHeight = div[0].offsetTop + div.height() + base; - if(up) { - dl.css({ - top: 'auto', - bottom: reHeight + 3 + 'px', - }); - } else { - dl.css({ - top: reHeight + 'px', - bottom: 'auto' - }); - } - } - - Common.prototype.changeShow = function(children, isShow){//显示于隐藏 - $('.layui-form-selected').removeClass('layui-form-selected'); - let top = children.parents(`.${FORM_SELECT}`), - realShow = top.hasClass(FORM_SELECTED), - id = top.find('dl').attr('xid'); - $(`.${PNAME} .${FORM_SELECT}`).not(top).removeClass(FORM_SELECTED); - if(isShow){ - this.retop(top); - top.addClass(FORM_SELECTED); - top.find(`.${INPUT}`).focus(); - if(!top.find(`dl dd[lay-value]:not(.${FORM_SELECT_TIPS})`).length){ - top.find(`dl .${FORM_NONE}`).addClass(FORM_EMPTY); - } - }else{ - top.removeClass(FORM_SELECTED); - this.clearInput(id); - top.find(`dl .${FORM_EMPTY}`).removeClass(FORM_EMPTY); - top.find(`dl dd.${DD_HIDE}`).removeClass(DD_HIDE); - top.find(`dl dd.${TEMP}`).remove(); - //计算ajax数据是否为空, 然后重新请求数据 - if(id && data[id] && data[id].config.isEmpty){ - this.triggerSearch(top); - } - this.changePlaceHolder(top.find(`.${LABEL}`)); - } - if(isShow != realShow){ - let openFun = data[id].config.opened || events.opened[id]; - isShow && openFun && openFun instanceof Function && openFun(id); - let closeFun = data[id].config.closed || events.closed[id]; - !isShow && closeFun && closeFun instanceof Function && closeFun(id); - } - } - - Common.prototype.changePlaceHolder = function(div){//显示于隐藏提示语 - //调整pane模式下的高度 - let title = div.parents(`.${FORM_TITLE}`); - title[0] || (title = div.parents(`dl`).prev()); - if(!title[0]){ - return ; - } - - let id = div.parents(`.${PNAME}`).find(`dl[xid]`).attr('xid'); - if(data[id] && data[id].config.height){//既然固定高度了, 那就看着办吧 - - }else{ - let height = title.find(`.${NAME}`)[0].clientHeight; - title.css('height' , (height > 36 ? height + 4 : height) + 'px'); - //如果是layui pane模式, 处理label的高度 - let label = title.parents(`.${PNAME}`).parent().prev(); - if(label.is('.layui-form-label') && title.parents('.layui-form-pane')[0]){ - height = height > 36 ? height + 4 : height; - title.css('height' , height + 'px'); - label.css({ - height: height + 2 + 'px', - lineHeight: (height - 18) + 'px' - }) - } - } - - let input = title.find(`.${TDIV} input`), - isShow = !div.find('span:last')[0] && !title.find(`.${INPUT}`).val(); - if(isShow){ - let ph = input.attr('back'); - input.removeAttr('back'); - input.attr('placeholder', ph); - }else{ - let ph = input.attr('placeholder'); - input.removeAttr('placeholder'); - input.attr('back', ph) - } - } - - Common.prototype.indexOf = function(arr, val){ - for(let i = 0; i < arr.length; i++) { - if(arr[i].value == val || arr[i].value == (val ? val.value : val) || arr[i] == val || JSON.stringify(arr[i]) == JSON.stringify(val)) { - return i; - } - } - return -1; - } - - Common.prototype.remove = function(arr, val){ - let idx = this.indexOf(arr, val ? val.value : val); - if(idx > -1) { - arr.splice(idx, 1); - return true; - } - return false; - } - - Common.prototype.selectAll = function(id, isOn, skipDis){ - let dl = $(`[xid="${id}"]`); - if(!dl[0]){ - return ; - } - if(dl.find('.xm-select-linkage')[0]){ - return ; - } - dl.find(`dd[lay-value]:not(.${FORM_SELECT_TIPS}):not(.${THIS})${skipDis ? ':not(.'+DISABLED+')' :''}`).each((index, item) => { - item = $(item); - let val = this.getItem(id, item); - this.handlerLabel(id, dl.find(`dd[lay-value="${val.value}"]`), true, val, !isOn); - }); - } - - Common.prototype.removeAll = function(id, isOn, skipDis){ - let dl = $(`[xid="${id}"]`); - if(!dl[0]){ - return ; - } - if(dl.find('.xm-select-linkage')[0]){//针对多级联动的处理 - data[id].values.concat([]).forEach((item, idx) => { - let vs = item.value.split('/'); - let pid, li, index = 0; - do{ - pid = vs[index ++]; - li = dl.find(`.xm-select-linkage-group${index}:not(.xm-select-linkage-hide) li[xm-value="${pid}"]`); - li.click(); - }while(li.length && pid != undefined); - }); - return ; - } - data[id].values.concat([]).forEach((item, index) => { - if(skipDis && dl.find(`dd[lay-value="${item.value}"]`).hasClass(DISABLED)){ - - }else{ - this.handlerLabel(id, dl.find(`dd[lay-value="${item.value}"]`), false, item, !isOn); - } - }); - } - - Common.prototype.reverse = function(id, isOn, skipDis){ - let dl = $(`[xid="${id}"]`); - if(!dl[0]){ - return ; - } - if(dl.find('.xm-select-linkage')[0]){ - return ; - } - dl.find(`dd[lay-value]:not(.${FORM_SELECT_TIPS})${skipDis ? ':not(.'+DISABLED+')' :''}`).each((index, item) => { - item = $(item); - let val = this.getItem(id, item); - this.handlerLabel(id, dl.find(`dd[lay-value="${val.value}"]`), !item.hasClass(THIS), val, !isOn); - }); - } - - Common.prototype.skin = function(id){ - let skins = ['default' ,'primary', 'normal', 'warm', 'danger']; - let skin = skins[Math.floor(Math.random() * skins.length)]; - $(`dl[xid="${id}"]`).parents(`.${PNAME}`).find(`.${FORM_SELECT}`).attr('xm-select-skin', skin); - this.check(id) && this.commonHandler(id, $(`dl[xid="${id}"]`).parents(`.${PNAME}`).find(`.${LABEL}`)); - } - - Common.prototype.getPosition = function(e){ - let x = 0, y = 0; - while (e != null) { - x += e.offsetLeft; - y += e.offsetTop; - e = e.offsetParent; - } - return { x: x, y: y }; - }; - - Common.prototype.onreset = function(){//监听reset按钮, 然后重置多选 - $(document).on('click', '[type=reset]', (e) => { - $(e.target).parents('form').find(`.${PNAME} dl[xid]`).each((index, item) => { - let id = item.getAttribute('xid'), - dl = $(item), - dd, - temp = {}; - common.removeAll(id); - data[id].config.init.forEach((val, idx) => { - if(val && (!temp[val] || data[id].config.repeat) && (dd = dl.find(`dd[lay-value="${val.value}"]`))[0]){ - common.handlerLabel(id, dd, true); - temp[val] = 1; - } - }); - }) - }); - } - - Common.prototype.bindEvent = function(name, id, fun){ - if(id && id instanceof Function){ - fun = id; - id = null; - } - if(fun && fun instanceof Function){ - if(!id){ - $.each(data, (id, val) => { - data[id] ? (data[id].config[name] = fun) : (events[name][id] = fun) - }) - }else{ - data[id] ? (data[id].config[name] = fun, delete events[name][id]) : (events[name][id] = fun) - } - } - } - - Common.prototype.check = function(id, notAutoRender){ - if($(`dl[xid="${id}"]`).length) { - return true; - }else if($(`select[xm-select="${id}"]`).length){ - if(!notAutoRender){ - this.render(id, $(`select[xm-select="${id}"]`)); - return true; - } - }else{ - delete data[id]; - return false; - } - } - - Common.prototype.render = function(id, select){ - common.init(select); - common.one($(`dl[xid="${id}"]`).parents(`.${PNAME}`)); - common.initVal(id); - } - - Common.prototype.log = function(obj){ - console.log(obj); - } - - let Select4 = function(){ - this.v = v; - this.render(); - }; - let common = new Common(); - - Select4.prototype.value = function(id, type, isAppend){ - if(typeof id != 'string'){ - return []; - } - let fs = data[id]; - if(!common.check(id)){ - return []; - } - if(typeof type == 'string' || type == undefined){ - let arr = fs.values.concat([]) || []; - if(type == 'val') { - return arr.map((val) => { - return val.value; - }); - } - if(type == 'valStr') { - return arr.map((val) => { - return val.value; - }).join(','); - } - if(type == 'name') { - return arr.map((val) => { - return val.name; - }); - } - if(type == 'nameStr') { - return arr.map((val) => { - return val.name; - }).join(','); - } - return arr; - } - if(common.isArray(type)) { - let dl = $(`[xid="${id}"]`), - temp = {}, - dd, - isAdd = true; - if(isAppend == false){//删除传入的数组 - isAdd = false; - }else if(isAppend == true){//追加模式 - isAdd = true; - }else{//删除原有的数据 - common.removeAll(id); - } - if(isAdd){ - fs.values.forEach((val, index) => { - temp[val.value] = 1; - }); - } - type.forEach((val, index) => { - if(val && (!temp[val] || fs.config.repeat)){ - if((dd = dl.find(`dd[lay-value="${val}"]`))[0]){ - common.handlerLabel(id, dd, isAdd, null, true); - temp[val] = 1; - }else{ - let name = common.valToName(id, val); - if(name){ - common.handlerLabel(id, dd, isAdd, common.getItem(id, val), true); - temp[val] = 1; - } - } - } - }); - } - } - - Select4.prototype.on = function(id, fun, isEnd) { - common.bindEvent(isEnd ? 'endOn' : 'on', id, fun); - return this; - } - - Select4.prototype.filter = function(id, fun){ - common.bindEvent('filter', id, fun); - return this; - } - - Select4.prototype.maxTips = function(id, fun){ - common.bindEvent('maxTips', id, fun); - return this; - } - - Select4.prototype.opened = function(id, fun){ - common.bindEvent('opened', id, fun); - return this; - } - - Select4.prototype.closed = function(id, fun){ - common.bindEvent('closed', id, fun); - return this; - } - - Select4.prototype.config = function(id, config, isJson){ - if(id && typeof id == 'object'){ - isJson = config == true; - config = id; - id = null; - } - if(config && typeof config== 'object'){ - if(isJson){ - config.header || (config.header = {}); - config.header['Content-Type'] = 'application/json; charset=UTF-8'; - config.dataType = 'json'; - } - id ? ( - ajaxs[id] = $.extend(true, {}, ajaxs[id] || ajax, config), !common.check(id) && this.render(id), - data[id] && config.direction && (data[id].config.direction = config.direction), - data[id] && config.clearInput && (data[id].config.clearInput = true), - config.searchUrl && data[id] && common.triggerSearch($(`.${PNAME} dl[xid="${id}"]`).parents(`.${FORM_SELECT}`), true) - ) : ( - $.extend(true, ajax, config), - $.each(ajaxs, (key, item) => { - $.extend(true, item, config) - }) - ); - } - return this; - } - - Select4.prototype.render = function(id, options){ - if(id && typeof id == 'object'){ - options = id; - id = null; - } - let config = options ? { - init: options.init, - disabled: options.disabled, - max: options.max, - isSearch: options.isSearch, - searchUrl: options.searchUrl, - isCreate: options.isCreate, - radio: options.radio, - skin: options.skin, - direction: options.direction, - height: options.height, - formname: options.formname, - layverify: options.layverify, - layverType: options.layverType, - showCount: options.showCount, - placeholder: options.placeholder, - create: options.create, - filter: options.filter, - maxTips: options.maxTips, - on: options.on, - on: options.on, - opened: options.opened, - closed: options.closed, - template: options.template, - clearInput: options.clearInput, - } : {}; - - options && options.searchType != undefined && (config.searchType = options.searchType == 'dl' ? 1 : 0); - - if(id){ - fsConfigs[id] = {}; - $.extend(fsConfigs[id], data[id] ? data[id].config : {}, config); - }else{ - $.extend(fsConfig, config); - } - - ($(`select[${NAME}="${id}"]`)[0] ? $(`select[${NAME}="${id}"]`) : $(`select[${NAME}]`)).each((index, select) => { - let sid = select.getAttribute(NAME); - common.render(sid, select); - setTimeout(() => common.setHidnVal(sid, $(`select[xm-select="${sid}"] + div.${PNAME} .${LABEL}`)), 10); - }); - return this; - } - - Select4.prototype.disabled = function(id){ - let target = {}; - id ? (common.check(id) && (target[id] = data[id])) : (target = data); - - $.each(target, (key, val) => { - $(`dl[xid="${key}"]`).prev().addClass(DIS); - }); - return this; - } - - Select4.prototype.undisabled = function(id){ - let target = {}; - id ? (common.check(id) && (target[id] = data[id])) : (target = data); - - $.each(target, (key, val) => { - $(`dl[xid="${key}"]`).prev().removeClass(DIS); - }); - return this; - } - - Select4.prototype.data = function(id, type, config){ - if(!id || !type || !config){ - common.log(`id: ${id} param error !!!`) - return this; - } - if(!common.check(id)){ - common.log(`id: ${id} not render !!!`) - return this; - } - this.value(id, []); - this.config(id, config); - if(type == 'local'){ - common.renderData(id, config.arr, config.linkage == true, config.linkageWidth ? config.linkageWidth : '100'); - }else if(type == 'server'){ - common.ajax(id, config.url, config.keyword, config.linkage == true, config.linkageWidth ? config.linkageWidth : '100'); - } - return this; - } - - Select4.prototype.btns = function(id, btns, config){ - if(id && common.isArray(id)){ - btns = id; - id = null; - } - if(!btns || !common.isArray(btns)) { - return this; - }; - let target = {}; - id ? (common.check(id) && (target[id] = data[id])) : (target = data); - - btns = btns.map((obj) => { - if(typeof obj == 'string'){ - if(obj == 'select'){ - return quickBtns[0]; - } - if(obj == 'remove'){ - return quickBtns[1]; - } - if(obj == 'reverse'){ - return quickBtns[2]; - } - if(obj == 'skin'){ - return quickBtns[3]; - } - } - return obj; - }); - - $.each(target, (key, val) => { - val.config.btns = btns; - let dd = $(`dl[xid="${key}"]`).find(`.${FORM_SELECT_TIPS}:first`); - if(btns.length){ - let show = config && config.show && (config.show == 'name' || config.show == 'icon') ? config.show : ''; - let html = common.renderBtns(key, show, config && config.space ? config.space : '30px'); - dd.html(html); - }else{ - let pcInput = dd.parents(`.${FORM_SELECT}`).find(`.${TDIV} input`); - let html = pcInput.attr('placeholder') || pcInput.attr('back'); - dd.html(html); - dd.removeAttr('style'); - } - }); - - return this; - } - - Select4.prototype.search = function(id, val){ - if(id && common.check(id)){ - ajaxs[id] = $.extend(true, {}, ajaxs[id] || ajax, { - first: true, - searchVal: val - }); - common.triggerSearch($(`dl[xid="${id}"]`).parents(`.${FORM_SELECT}`), true); - } - return this; - } - - Select4.prototype.replace = function(id, type, config){ - if(!id || !type || !config){ - common.log(`id: ${id} param error !!!`) - return this; - } - if(!common.check(id, true)){ - common.log(`id: ${id} not render !!!`) - return this; - } - let oldVals = this.value(id, 'val'); - this.value(id, []); - this.config(id, config); - if(type == 'local'){ - common.renderData(id, config.arr, config.linkage == true, config.linkageWidth ? config.linkageWidth : '100', false, true); - this.value(id, oldVals, true); - }else if(type == 'server'){ - common.ajax(id, config.url, config.keyword, config.linkage == true, config.linkageWidth ? config.linkageWidth : '100', false, (id) => { - this.value(id, oldVals, true); - }, true); - } - } - - return new Select4(); -}); \ No newline at end of file diff --git a/component/pear/module/step.js b/component/pear/module/step.js deleted file mode 100644 index 4c96d1788571c5c08b70386186365849bf54ce87..0000000000000000000000000000000000000000 --- a/component/pear/module/step.js +++ /dev/null @@ -1,80 +0,0 @@ -layui.define(['layer', 'carousel'], function (exports) { - var $ = layui.jquery; - var layer = layui.layer; - var carousel = layui.carousel; - - var renderDom = function (elem, stepItems, postion) { - var stepDiv = '
                '; - for (var i = 0; i < stepItems.length; i++) { - stepDiv += '
                '; - if (i < (stepItems.length - 1)) { - if (i < postion) { - stepDiv += '
                '; - } else { - stepDiv += '
                '; - } - } - var number = stepItems[i].number; - if (!number) { - number = i + 1; - } - if (i == postion) { - stepDiv += '
                ' + number + '
                '; - } else if (i < postion) { - stepDiv += '
                '; - } else { - stepDiv += '
                ' + number + '
                '; - } - var title = stepItems[i].title; - var desc = stepItems[i].desc; - var time = stepItems[i].time; - if (title || desc || time) { - stepDiv += '
                '; - if (title) { - stepDiv += '
                ' + title + '
                '; - } - if (desc) { - stepDiv += '
                ' + desc + '
                '; - } - if (time) { - stepDiv += '
                ' + time + '
                '; - } - stepDiv += '
                '; - } - stepDiv += '
                '; - } - stepDiv += '
                '; - $(elem).prepend(stepDiv); - var bfb = 100 / stepItems.length; - $('.step-item').css('width', bfb + '%'); - }; - - var pearStep = { - render: function (param) { - param.indicator = 'none'; // 不显示指示器 - param.arrow = 'always'; // 始终显示箭头 - param.autoplay = false; // 关闭自动播放 - if (!param.stepWidth) { - param.stepWidth = '400px'; - } - carousel.render(param); - var stepItems = param.stepItems; - renderDom(param.elem, stepItems, 0); - $('.lay-step').css('width', param.stepWidth); - carousel.on('change(' + param.filter + ')', function (obj) { - $(param.elem).find('.lay-step').remove(); - renderDom(param.elem, stepItems, obj.index); - $('.lay-step').css('width', param.stepWidth); - }); - $(param.elem).find('.layui-carousel-arrow').css('display', 'none'); - $(param.elem).css('background-color', 'transparent'); - }, - next: function (elem) { - $(elem).find('.layui-carousel-arrow[lay-type=add]').trigger('click'); - }, - pre: function (elem) { - $(elem).find('.layui-carousel-arrow[lay-type=sub]').trigger('click'); - } - }; - exports('step', pearStep); -}); \ No newline at end of file diff --git a/component/pear/module/tab.js b/component/pear/module/tabPage.js similarity index 37% rename from component/pear/module/tab.js rename to component/pear/module/tabPage.js index 088a3aa0b8e786935fdb1ead8a32fab3c3163bee..c727ab50ee3d7b601561e7741bc6249d381deb09 100644 --- a/component/pear/module/tab.js +++ b/component/pear/module/tabPage.js @@ -1,11 +1,12 @@ -layui.define(['jquery', 'element'], function(exports) { +layui.define(['jquery', 'element', 'dropdown'], function (exports) { "use strict"; - var MOD_NAME = 'tab', + var MOD_NAME = 'tabPage', $ = layui.jquery, + dropdown = layui.dropdown, element = layui.element; - var pearTab = function(opt) { + var tabPage = function (opt) { this.option = opt; }; @@ -13,29 +14,29 @@ layui.define(['jquery', 'element'], function(exports) { var tabDataCurrent = 0; var contextTabDOM; - pearTab.prototype.render = function(opt) { + tabPage.prototype.render = function (opt) { var option = { elem: opt.elem, data: opt.data, - tool: opt.tool, - roll: opt.roll, index: opt.index, - width: opt.width, - height: opt.height, - tabMax: opt.tabMax, + tool: opt.tool || true, + roll: opt.roll || true, + success: opt.success ? opt.success : function (id) { }, session: opt.session ? opt.session : false, preload: opt.preload ? opt.preload : false, + height: opt.height || "100%", + width: opt.width || "100%", closeEvent: opt.closeEvent, - success: opt.success ? opt.success : function(id) {} + tabMax: opt.tabMax, } if (option.session) { - if (sessionStorage.getItem(option.elem + "-pear-tab-data") != null) { - tabData = JSON.parse(sessionStorage.getItem(option.elem + "-pear-tab-data")); - option.data = JSON.parse(sessionStorage.getItem(option.elem + "-pear-tab-data")); - tabDataCurrent = sessionStorage.getItem(option.elem + "-pear-tab-data-current"); - tabData.forEach(function(item, index) { + if (sessionStorage.getItem(option.elem + "-pear-tab-page-data") != null) { + tabData = JSON.parse(sessionStorage.getItem(option.elem + "-pear-tab-page-data")); + option.data = JSON.parse(sessionStorage.getItem(option.elem + "-pear-tab-page-data")); + tabDataCurrent = sessionStorage.getItem(option.elem + "-pear-tab-page-data-current"); + tabData.forEach(function (item, index) { if (item.id == tabDataCurrent) { option.index = index; } @@ -48,14 +49,13 @@ layui.define(['jquery', 'element'], function(exports) { var lastIndex; var tab = createTab(option); $("#" + option.elem).html(tab); - $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-prev").click(function() { + $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-prev").click(function () { rollPage("left", option); }) - $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-next").click(function() { + $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-next").click(function () { rollPage("right", option); }) - element.init(); - toolEvent(option); + element.render("tab",option.elem); $("#" + option.elem).width(opt.width); $("#" + option.elem).height(opt.height); $("#" + option.elem).css({ @@ -63,96 +63,134 @@ layui.define(['jquery', 'element'], function(exports) { }); closeEvent(option); - option.success(sessionStorage.getItem(option.elem + "-pear-tab-data-current")); + option.success(sessionStorage.getItem(option.elem + "-pear-tab-page-data-current")); + + dropdown.render({ + elem: `#${option.elem} .layui-icon-down`, + trigger: 'hover', + data: [{ + title: '关 闭 当 前', + id: 1 + }, { + title: '关 闭 其 他', + id: 2 + }, { + title: '关 闭 全 部', + id: 3 + }], + click: function (obj) { + + const id = obj.id; + + if (id === 1) { + var currentTab = $(".layui-tab[lay-filter='" + option.elem + + "'] .layui-tab-title .layui-this"); + if (currentTab.find("span").is(".able-close")) { + var currentId = currentTab.attr("lay-id"); + tabDelete(option.elem, currentId, option.closeEvent, option); + } else { + layer.msg("当前页面不允许关闭", { + icon: 3, + time: 1000 + }) + } + } else if (id === 2) { + var currentId = $(".layui-tab[lay-filter='" + option.elem + + "'] .layui-tab-title .layui-this").attr("lay-id"); + var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li"); + $.each(tabtitle, function (i) { + if ($(this).attr("lay-id") != currentId) { + if ($(this).find("span").is(".able-close")) { + tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, + option); + } + } + }) + } else { + var currentId = $(".layui-tab[lay-filter='" + option.elem + + "'] .layui-tab-title .layui-this").attr("lay-id"); + var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li"); + $.each(tabtitle, function (i) { + if ($(this).find("span").is(".able-close")) { + tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, option); + } + }) + } + } + }) + //tab页关闭功能内容菜单 $("body .layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title").on("contextmenu", "li", - function(e) { - // 获取当前元素位置 + function (e) { var top = e.clientY; var left = e.clientX; var menuWidth = 100; var currentId = $(this).attr("lay-id"); - var menu = "
                • 关闭当前
                • 关闭其他
                • 关闭所有
                "; + var menu = `
                  +
                • 关闭当前
                • +
                • 关闭其他
                • +
                • 关闭所有
                • +
                `; contextTabDOM = $(this); var isOutsideBounds = (left + menuWidth) > $(window).width(); if (isOutsideBounds) { left = $(window).width() - menuWidth; } - // 初始化 + layer.open({ type: 1, title: false, shade: false, - skin: 'pear-tab-menu', + skin: 'pear-tab-page-menu', closeBtn: false, area: [menuWidth + 'px', '108px'], fixed: true, anim: false, isOutAnim: false, offset: [top, left], - content: menu, //iframe的url, - success: function(layero, index) { + content: menu, + success: function (layero, index) { layer.close(lastIndex); lastIndex = index; menuEvent(option, index); var timer; - $(layero).on('mouseout', function() { - timer = setTimeout(function() { + $(layero).on('mouseout', function () { + timer = setTimeout(function () { layer.close(index); }, 30) }); - $(layero).on('mouseover', function() { + $(layero).on('mouseover', function () { clearTimeout(timer); }); - // 清除 item 右击 - $(layero).on('contextmenu', function() { + $(layero).on('contextmenu', function () { return false; }) - } }); return false; }) mousewheelAndTouchmoveHandler(option) - return new pearTab(option); + return new tabPage(option); } - pearTab.prototype.click = function(callback) { - var elem = this.option.elem; + tabPage.prototype.click = function (callback) { var option = this.option; - element.on('tab(' + this.option.elem + ')', function(data) { - var id = $("#" + elem + " .layui-tab-title .layui-this").attr("lay-id"); - sessionStorage.setItem(option.elem + "-pear-tab-data-current", id); - if (!option.preload) { - var $iframe = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-content").find( - "iframe[id='" + id + "']"); - var iframeUrl = $iframe.attr("src"); - if (!iframeUrl || iframeUrl === "about:blank") { - // 获取 url 并重载 - tabData.forEach(function(item, index) { - if (item.id === id) { - iframeUrl = item.url; - } - }) - tabIframeLoading(elem); - $iframe.attr("src", iframeUrl); - } - } + element.on('tab(' + option.elem + ')', function (data) { + let tab= $(this); + let id = tab.attr("lay-id"); + sessionStorage.setItem(option.elem + "-pear-tab-page-data-current", id); callback(id); }); } - pearTab.prototype.positionTab = function() { + tabPage.prototype.positionTab = function () { var $tabTitle = $('.layui-tab[lay-filter=' + this.option.elem + '] .layui-tab-title'); var autoLeft = 0; - $tabTitle.children("li").each(function() { + $tabTitle.children("li").each(function () { if ($(this).hasClass('layui-this')) { return false; } else { @@ -164,54 +202,31 @@ layui.define(['jquery', 'element'], function(exports) { }, 200); } - pearTab.prototype.clear = function() { - sessionStorage.removeItem(this.option.elem + "-pear-tab-data"); - sessionStorage.removeItem(this.option.elem + "-pear-tab-data-current"); - } - - pearTab.prototype.addTab = function(opt) { - var title = ''; - if (opt.close) { - title += '' + opt.title + - ''; - } else { - title += '' + opt.title + - ''; - } - element.tabAdd(this.option.elem, { - title: title, - content: '', - id: opt.id - }); - if (time != false && time != 0) { - tabIframeLoading(elem, opt.id); - } - tabData.push(opt); - sessionStorage.setItem(elem + "-pear-tab-data", JSON.stringify(tabData)); - } else { - var isData = false; - $.each($(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title li[lay-id]"), function() { + /** + * @since Pear Admin 4.0 + */ + tabPage.prototype.addTabOnly = function (opt, time) { + + var title = ` + ${opt.title} + `; + var isData = false; + $.each($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]"), + function () { if ($(this).attr("lay-id") == opt.id) { isData = true; } }) - if (isData == false) { - element.tabAdd(elem, { - title: title, - content: '', - id: opt.id - }); - if (time != false && time != 0) { - tabIframeLoading(elem, opt.id); + if (isData == false) { + + if (this.option.tabMax != false) { + if ($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]") + .length >= this.option.tabMax) { + layer.msg("最多打开" + this.option.tabMax + "个标签页", { + icon: 2, + time: 1000, + shift: 6 + }); + return false; } - tabData.push(opt); - sessionStorage.setItem(elem + "-pear-tab-data", JSON.stringify(tabData)); - } - } - sessionStorage.setItem(elem + "-pear-tab-data-current", opt.id); - element.tabChange(elem, opt.id); - } - /** 添 加 唯 一 选 项 卡 */ - pearTab.prototype.addTabOnly = function(opt, time) { - var title = ''; - if (opt.close) { - title += '' + opt.title + - ''; - } else { - title += '' + opt.title + - ''; + var that = this; + addLayuiTab(this.option.elem, title, opt); + tabData.push(opt); + sessionStorage.setItem(that.option.elem + "-pear-tab-page-data", JSON.stringify(tabData)); + sessionStorage.setItem(that.option.elem + "-pear-tab-page-data-current", opt.id); } - if ($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]").length <= - 0) { - element.tabAdd(this.option.elem, { - title: title, - content: '', - id: opt.id - }); - if (time != false && time != 0) { - tabIframeLoading(this.option.elem, opt.id); - } - tabData.push(opt); - sessionStorage.setItem(this.option.elem + "-pear-tab-data", JSON.stringify(tabData)); - sessionStorage.setItem(this.option.elem + "-pear-tab-data-current", opt.id); - } else { - var isData = false; - $.each($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]"), - function() { - if ($(this).attr("lay-id") == opt.id) { - isData = true; - } - }) - if (isData == false) { - - if (this.option.tabMax != false) { - if ($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]") - .length >= this.option.tabMax) { - layer.msg("最多打开" + this.option.tabMax + "个标签页", { - icon: 2, - time: 1000, - shift: 6 - }); - return false; - } - } - element.tabAdd(this.option.elem, { - title: title, - content: '', - id: opt.id - }); - if (time != false && time != 0) { - tabIframeLoading(this.option.elem, opt.id); - } - tabData.push(opt); - sessionStorage.setItem(this.option.elem + "-pear-tab-data", JSON.stringify(tabData)); - sessionStorage.setItem(this.option.elem + "-pear-tab-data-current", opt.id); - } - } element.tabChange(this.option.elem, opt.id); - sessionStorage.setItem(this.option.elem + "-pear-tab-data-current", opt.id); + sessionStorage.setItem(this.option.elem + "-pear-tab-page-data-current", opt.id); + + } // 刷 新 指 定 的 选 项 卡 - pearTab.prototype.refresh = function(time) { - // 刷 新 指 定 的 选 项 卡 - var $iframe = $(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-content .layui-show") - .find("iframe"); + tabPage.prototype.refresh = function (time) { + var $iframe = $(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-content .layui-show > *"); + var $iframeLoad; + if (time != false && time != 0) { - tabIframeLoading(this.option.elem); + $iframe.parent().append(`
                `); + $iframeLoad = $("#" + this.option.elem).find("#pear-tab-page-loading" + index++); + $iframeLoad.css({ + display: "block" + }); } - $iframe.attr("src", $iframe.attr("src")); - } - function tabIframeLoading(elem, id) { - var load = '
                ' + - '
                ' + - '' + - '
                ' + - '
                ' - var $iframe = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-content .layui-show").find("iframe"); - if (id) { - $iframe = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-content").find("iframe[id='" + id + - "']"); - } - $iframe.parent().append(load); - var pearLoad = $("#" + elem).find("#pear-tab-loading" + index); - pearLoad.css({ - display: "block" - }); - index++; - $iframe.on("load", function() { - pearLoad.fadeOut(1000, function() { - pearLoad.remove(); + if ($iframe.attr("type") === "_iframe") { + $iframe.attr("src", $iframe.attr("src")); + $iframe.on("load", function () { + $iframeLoad.fadeOut(1000, function () { + $iframeLoad.remove(); + }); + }) + } else { + $.ajax({ + url: $iframe.attr("src"), + type: 'get', + dataType: 'html', + success: function (data) { + $iframe.html(data); + if ($iframeLoad != undefined) { + $iframeLoad.fadeOut(1000, function () { + $iframeLoad.remove(); + }); + } + }, + error: function (xhr) { + return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); + } }); - }) + } } + + function tabDelete(elem, id, callback, option) { - //根据 elem id 来删除指定的 layui title li var tabTitle = $(".layui-tab[lay-filter='" + elem + "']").find(".layui-tab-title"); - - // 删除指定 id 的 title var removeTab = tabTitle.find("li[lay-id='" + id + "']"); var nextNode = removeTab.next("li"); if (!removeTab.hasClass("layui-this")) { removeTab.remove(); - var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("iframe[id='" + id + "']") - .parent(); + var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("*[id='" + id + "']") + .parent(); tabContent.remove(); - tabData = JSON.parse(sessionStorage.getItem(elem + "-pear-tab-data")); - tabDataCurrent = sessionStorage.getItem(elem + "-pear-tab-data-current"); - tabData = tabData.filter(function(item) { + tabData = JSON.parse(sessionStorage.getItem(elem + "-pear-tab-page-data")); + tabDataCurrent = sessionStorage.getItem(elem + "-pear-tab-page-data-current"); + tabData = tabData.filter(function (item) { return item.id != id; }) - sessionStorage.setItem(elem + "-pear-tab-data", JSON.stringify(tabData)); + sessionStorage.setItem(elem + "-pear-tab-page-data", JSON.stringify(tabData)); return false; } var currId; - if (nextNode.length) { - nextNode.addClass("layui-this"); - currId = nextNode.attr("lay-id"); - $("#" + elem + " [id='" + currId + "']").parent().addClass("layui-show"); - } else { - var prevNode = removeTab.prev("li"); - prevNode.addClass("layui-this"); - currId = prevNode.attr("lay-id"); - $("#" + elem + " [id='" + currId + "']").parent().addClass("layui-show"); - } + let activeNode = nextNode.length ? nextNode : removeTab.prev("li"); + activeNode.click() callback(currId); - tabData = JSON.parse(sessionStorage.getItem(elem + "-pear-tab-data")); - tabDataCurrent = sessionStorage.getItem(elem + "-pear-tab-data-current"); - tabData = tabData.filter(function(item) { + tabData = JSON.parse(sessionStorage.getItem(elem + "-pear-tab-page-data")); + tabDataCurrent = sessionStorage.getItem(elem + "-pear-tab-page-data-current"); + tabData = tabData.filter(function (item) { return item.id != id; }) - sessionStorage.setItem(elem + "-pear-tab-data", JSON.stringify(tabData)); - sessionStorage.setItem(elem + "-pear-tab-data-current", currId); + sessionStorage.setItem(elem + "-pear-tab-page-data", JSON.stringify(tabData)); + sessionStorage.setItem(elem + "-pear-tab-page-data-current", currId); removeTab.remove(); // 删除 content - var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("iframe[id='" + id + "']").parent(); + var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("*[id='" + id + "']").parent(); // 删除 tabContent.remove(); } + /** + * 创建tab组件 返回tab 组件的 html字符串(一个div) + * @param {any} option + * @returns + */ function createTab(option) { var type = ""; @@ -454,59 +395,46 @@ layui.define(['jquery', 'element'], function(exports) { if (option.roll == true && option.tool != false) { type = "layui-tab-rollTool"; } - var tab = '
                '; + var title = '
                  '; var content = '
                  '; - var control = - '
                  • '; + var control = `
                    +
                  • +
                  • +
                  • +
                    `; // 处 理 选 项 卡 头 部 var index = 0; - $.each(option.data, function(i, item) { - var TitleItem = ''; - if (option.index == index) { - TitleItem += '
                  • '; - } else { - TitleItem += '
                  • '; - } + $.each(option.data, function (i, item) { + + var titleItem = `
                  • + + + ${item.title} + +
                  • +
                  • `; + + title += titleItem; + + if (item.type === "_iframe") { + + content += `
                    ` - if (item.close) { - // 当 前 选 项 卡 可 以 关 闭 - TitleItem += '' + item.title + ''; - } else { - // 当 前 选 项 卡 不 允 许 关 闭 - TitleItem += '' + item.title + ''; - } - TitleItem += ''; - title += TitleItem; - if (option.index == index) { - - // 处 理 显 示 内 容 - content += '
                    ' } else { - if (!option.preload) { - item.url = "about:blank"; - } - // 处 理 显 示 内 容 - content += '
                    ' + $getHtml(item.url, data => + content += `
                    ${data}
                    ` + ); } + index++; }); title += '
                  '; content += '
                • '; - control += '
                  关 闭 当 前
                  ' - control += '
                  关 闭 其 他
                  ' - control += '
                  关 闭 全 部
                  ' - control += '
                '; tab += title; tab += control; @@ -515,7 +443,57 @@ layui.define(['jquery', 'element'], function(exports) { tab += '' return tab; } + /** + * 添加tab页 用的Layui的tab页组件 + * 如果opt.type=='_iframe' 则不用Layui tab而是 直接插入一个iframe + * @param {any} filter + * @param {any} title + * @param {any} opt + */ + function addLayuiTab(filter, title, opt) { + if (opt.type === "_iframe") { + + element.tabAdd(filter, { + id: opt.id, + title: title, + content: `` + }); + } else { + $getHtml(opt.url, data => element.tabAdd(filter, { + id: opt.id, + pageUrl: opt.url, + title: title, + content: `
                ${data}
                `, + })); + } + } + /** + * jq ajax get方式获取html页面 + * @param {any} url + * @param { function (HTMLElement)} callBack + */ + function $getHtml(url, callBack) { + $.ajax({ + url: url, + type: 'get', + dataType: 'html', + async: false, + success: function (data) { + if (typeof (callBack) === 'function') { + callBack(data) + } + }, + error: function (xhr, textstatus, thrown) { + return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); + } + }); + } + /** + * 滚动tab页头 + * @param {any} d + * @param {any} option + */ function rollPage(d, option) { var $tabTitle = $('#' + option.elem + ' .layui-tab-title'); var left = $tabTitle.scrollLeft(); @@ -531,7 +509,7 @@ layui.define(['jquery', 'element'], function(exports) { } function closeEvent(option) { - $(".layui-tab[lay-filter='" + option.elem + "']").on("click", ".layui-tab-close", function() { + $(".layui-tab[lay-filter='" + option.elem + "']").on("click", ".layui-tab-close", function () { var layid = $(this).parent().attr("lay-id"); tabDelete(option.elem, layid, option.closeEvent, option); }) @@ -539,7 +517,7 @@ layui.define(['jquery', 'element'], function(exports) { function menuEvent(option, index) { - $("#" + option.elem + "closeThis").click(function() { + $("#" + option.elem + "closeThis").click(function () { var currentTab = contextTabDOM; if (currentTab.find("span").is(".able-close")) { @@ -554,10 +532,10 @@ layui.define(['jquery', 'element'], function(exports) { layer.close(index); }) - $("#" + option.elem + "closeOther").click(function() { + $("#" + option.elem + "closeOther").click(function () { var currentId = contextTabDOM.attr("lay-id"); var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li"); - $.each(tabtitle, function(i) { + $.each(tabtitle, function (i) { if ($(this).attr("lay-id") != currentId) { if ($(this).find("span").is(".able-close")) { tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, @@ -568,10 +546,9 @@ layui.define(['jquery', 'element'], function(exports) { layer.close(index); }) - $("#" + option.elem + "closeAll").click(function() { - var currentId = contextTabDOM.attr("lay-id"); + $("#" + option.elem + "closeAll").click(function () { var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li"); - $.each(tabtitle, function(i) { + $.each(tabtitle, function (i) { if ($(this).find("span").is(".able-close")) { tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, option); } @@ -580,56 +557,15 @@ layui.define(['jquery', 'element'], function(exports) { }) } - function toolEvent(option) { - $("body .layui-tab[lay-filter='" + option.elem + "']").on("click", "#closeThis", function() { - var currentTab = $(".layui-tab[lay-filter='" + option.elem + - "'] .layui-tab-title .layui-this"); - if (currentTab.find("span").is(".able-close")) { - var currentId = currentTab.attr("lay-id"); - tabDelete(option.elem, currentId, option.closeEvent, option); - } else { - layer.msg("当前页面不允许关闭", { - icon: 3, - time: 800 - }) - } - }) - - $("body .layui-tab[lay-filter='" + option.elem + "']").on("click", "#closeOther", function() { - var currentId = $(".layui-tab[lay-filter='" + option.elem + - "'] .layui-tab-title .layui-this").attr("lay-id"); - var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li"); - $.each(tabtitle, function(i) { - if ($(this).attr("lay-id") != currentId) { - if ($(this).find("span").is(".able-close")) { - tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, - option); - } - } - }) - }) - - $("body .layui-tab[lay-filter='" + option.elem + "']").on("click", "#closeAll", function() { - var currentId = $(".layui-tab[lay-filter='" + option.elem + - "'] .layui-tab-title .layui-this").attr("lay-id"); - var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li"); - $.each(tabtitle, function(i) { - if ($(this).find("span").is(".able-close")) { - tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, option); - } - }) - }) - } - function mousewheelAndTouchmoveHandler(option) { var $bodyTab = $("body .layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title") var $tabTitle = $('#' + option.elem + ' .layui-tab-title'); var mouseScrollStep = 100 // 鼠标滚轮 - $bodyTab.on("mousewheel DOMMouseScroll", function(e) { + $bodyTab.on("mousewheel DOMMouseScroll", function (e) { e.originalEvent.preventDefault() var delta = (e.originalEvent.wheelDelta && (e.originalEvent.wheelDelta > 0 ? "top" : - "down")) || // chrome & ie + "down")) || // chrome & ie (e.originalEvent.detail && (e.originalEvent.detail > 0 ? "down" : "top")); // firefox var scrollLeft = $tabTitle.scrollLeft(); @@ -643,11 +579,11 @@ layui.define(['jquery', 'element'], function(exports) { // 触摸移动 var touchX = 0; - $bodyTab.on("touchstart", function(e) { + $bodyTab.on("touchstart", function (e) { var touch = e.originalEvent.targetTouches[0]; touchX = touch.pageX }) - $bodyTab.on("touchmove", function(e) { + $bodyTab.on("touchmove", function (e) { var event = e.originalEvent; if (event.targetTouches.length > 1) return; event.preventDefault(); @@ -659,5 +595,5 @@ layui.define(['jquery', 'element'], function(exports) { }); } - exports(MOD_NAME, new pearTab()); + exports(MOD_NAME, new tabPage()); }) diff --git a/component/pear/module/tag.js b/component/pear/module/tag.js deleted file mode 100644 index b7222ce296ba1ee1f2fe61f303cbd2545b412401..0000000000000000000000000000000000000000 --- a/component/pear/module/tag.js +++ /dev/null @@ -1,159 +0,0 @@ -layui.define('jquery', function(exports){ - "use strict"; - - var $ = layui.$ - ,MOD_NAME = 'tag', - TAG_CLASS = '.tag', - BUTTON_NEW_TAG ='button-new-tag', - INPUT_NEW_TAG ='input-new-tag', - TAG_ITEM ='tag-item', - CLOSE = 'tag-close', - DEFAULT_SKIN ='layui-btn layui-btn-primary layui-btn-sm' - ,tag = function(){ - this.config = { - skin: DEFAULT_SKIN, - tagText:'+ New Tag' - }; - this.configs = {} - }; - - //全局设置 - tag.prototype.set = function(options){ - var that = this; - $.extend(true, that.config, options); - tag.render(); - return that; - }; - - //表单事件监听 - tag.prototype.on = function(events, callback){ - return layui.onevent.call(this, MOD_NAME, events, callback); - }; - - //外部Tag新增 - tag.prototype.add = function(filter, options){ - var tagElem = $(TAG_CLASS + '[lay-filter='+ filter +']') - call.add(null, tagElem, options); - call.tagAuto(filter); - return this; - }; - - //外部Tag删除 - tag.prototype.delete = function(filter, layid){ - var tagElem = $(TAG_CLASS + '[lay-filter='+ filter +']') - ,tagItemElem = tagElem.find('>.' + TAG_ITEM + '[lay-id="'+ layid +'"]'); - call.delete(null, tagItemElem); - return this; - }; - - //基础事件体 - var call = { - //Tag点击 - tagClick: function(e, index, tagItemElem, options){ - options = options || {}; - var othis = tagItemElem || $(this) - ,index = index || othis.index(othis) - ,parents = othis.parents(TAG_CLASS).eq(0) - ,filter = parents.attr('lay-filter'); - layui.event.call(this, MOD_NAME, 'click('+ filter +')', { - elem: parents - ,index: index - }); - } - //Tag新增事件 - ,add: function(e, tagElem, options){ - var filter = tagElem.attr('lay-filter'), - buttonNewTag = tagElem.children('.' + BUTTON_NEW_TAG), - index = buttonNewTag.index() - ,newTag = ''; - var result = layui.event.call(this, MOD_NAME, 'add('+ filter +')', { - elem: tagElem - ,index: index - ,othis: newTag - }) - if(result === false) return; - buttonNewTag[0] ? buttonNewTag.before(newTag) : tagElem.append(newTag); - } - //Tag输入事件 - ,input: function(e, othis){ - var buttonNewTag = othis || $(this) - ,parents = buttonNewTag.parents(TAG_CLASS).eq(0) - ,filter = parents.attr('lay-filter') - var options = tag.configs[filter] = $.extend({}, tag.config, tag.configs[filter] || {}, options); - //标签输入框 - var inpatNewTag = $('
                '); - inpatNewTag.addClass(options.skin); - buttonNewTag.after(inpatNewTag).remove(); - inpatNewTag.children('.layui-input').on('blur', function () { - if(this.value){ - var options = { - text: this.value - } - call.add(null, parents, options); - } - inpatNewTag.remove(); - call.tagAuto(filter); - }).focus(); - } - //Tag删除 - ,delete: function(e, othis){ - var tagItem = othis || $(this).parent(), index = tagItem.index() - ,parents = tagItem.parents(TAG_CLASS).eq(0) - ,filter = parents.attr('lay-filter'); - - var result = layui.event.call(this, MOD_NAME, 'delete('+ filter +')', { - elem: parents - ,index: index - }) - if(result === false) return; - tagItem.remove() - } - //Tag 自适应 - ,tagAuto: function(filter){ - filter = filter || ''; - var options = filter ? tag.configs[filter] || tag.config : tag.config; - var elemFilter = function(){ - return filter ? ('[lay-filter="' + filter +'"]') : ''; - }(); - $(TAG_CLASS + elemFilter).each(function(){ - var othis = $(this),tagItem = othis.children('.' + TAG_ITEM), buttonNewTag = othis.children('.' + BUTTON_NEW_TAG); - tagItem.removeClass(DEFAULT_SKIN).addClass(options.skin); - //允许关闭 - if(othis.attr('lay-allowClose') && tagItem.length){ - tagItem.each(function(){ - var li = $(this); - if(!li.find('.'+CLOSE)[0]){ - var close = $(''); - close.on('click', call.delete); - li.append(close); - } - }); - } - //允许新增标签 - if(othis.attr('lay-newTag') && buttonNewTag.length === 0){ - buttonNewTag = $(''); - buttonNewTag.on('click', call.input); - othis.append(buttonNewTag); - } - buttonNewTag.html(options.tagText); - buttonNewTag.removeClass(DEFAULT_SKIN).addClass(options.skin); - }); - } - }; - - tag.prototype.init = function(filter, options){ - if(filter){ - tag.configs[filter] = $.extend({}, tag.config, tag.configs[filter] || {}, options); - } - return call.tagAuto.call(this, filter); - }; - - tag.prototype.render = tag.prototype.init; - - var tag = new tag(), dom = $(document); - tag.render(); - - dom.on('click', '.' + TAG_ITEM, call.tagClick); //tag 单击事件 - exports(MOD_NAME, tag); -}); - diff --git a/component/pear/module/theme.js b/component/pear/module/theme.js deleted file mode 100644 index 01fd0267b91ba2d5faa99faac68cd6710ad1cfb3..0000000000000000000000000000000000000000 --- a/component/pear/module/theme.js +++ /dev/null @@ -1,102 +0,0 @@ -layui.define(["jquery","layer"], function (exports) { - var MOD_NAME = 'theme', - $ = layui.jquery; - - var theme = {}; - theme.autoHead = false; - - theme.changeTheme = function (target, autoHead) { - this.autoHead = autoHead; - var color = localStorage.getItem("theme-color-color"); - var second = localStorage.getItem("theme-color-second"); - this.colorSet(color, second); - if (target.frames.length == 0) return; - for (var i = 0; i < target.frames.length; i++) { - try { - if(target.frames[i].layui == undefined) continue; - target.frames[i].layui.theme.changeTheme(target.frames[i], autoHead); - } - catch (error) { - console.log(error); - } - } - } - - theme.colorSet = function(color, second) { - - var style = ''; - style += '.light-theme .pear-nav-tree .layui-this a:hover,.light-theme .pear-nav-tree .layui-this,.light-theme .pear-nav-tree .layui-this a,.pear-nav-tree .layui-this a,.pear-nav-tree .layui-this{background-color: ' +color + '!important;}'; - style += '.pear-admin .layui-logo .title{color:' + color + '!important;}'; - style += '.pear-frame-title .dot,.pear-tab .layui-this .pear-tab-active{background-color: ' + color +'!important;}'; - style += '.bottom-nav li a:hover{background-color:' + color + '!important;}'; - style += '.pear-btn-primary {border: 1px solid ' + color + '!important;}'; - style += '.pear-admin .layui-header .layui-nav .layui-nav-bar{background-color: ' + color + '!important;}' - style += '.ball-loader>span,.signal-loader>span {background-color: ' + color + '!important;}'; - style += '.layui-header .layui-nav-child .layui-this a{background-color:' + color +'!important;color:white!important;}'; - style += '#preloader{background-color:' + color + '!important;}'; - style += '.pearone-color .color-content li.layui-this:after, .pearone-color .color-content li:hover:after {border: ' +color + ' 3px solid!important;}'; - style += '.layui-nav .layui-nav-child dd.layui-this a, .layui-nav-child dd.layui-this{background-color:' + color + ';color:white;}'; - style += '.pear-social-entrance {background-color:' + color + '!important}'; - style += '.pear-admin .pe-collapse {background-color:' + color + '!important}'; - style += '.layui-fixbar li {background-color:' + color + '!important}'; - style += '.pear-btn-primary {background-color:' + color + '!important}'; - style += '.layui-input:focus,.layui-textarea:focus {border-color: ' + color + '!important;box-shadow: 0 0 0 3px ' + second + ' !important;}' - style += '.layui-form-checkbox[lay-skin=primary]:hover span {background-color: initial;}' - style += '.layui-form-checked[lay-skin=primary] i {border-color: ' + color + '!important;background-color: ' + color + ';}' - style += '.layui-form-checked,.layui-form-checked:hover {border-color: ' + color + '!important;}' - style += '.layui-form-checked span,.layui-form-checked:hover span {background-color: ' + color + ';}' - style += '.layui-form-checked i,.layui-form-checked:hover i {color: ' + color + ';}' - style += '.layui-form-onswitch { border-color: ' + color + '; background-color: ' + color + ';}' - style += '.layui-form-radio>i:hover, .layui-form-radioed>i {color: ' + color + ';}' - style += '.layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:'+ color +'!important}' - style += '.layui-tab-brief>.layui-tab-more li.layui-this:after, .layui-tab-brief>.layui-tab-title .layui-this:after{border-bottom: 3px solid '+color+'!important}' - style += '.layui-tab-brief>.layui-tab-title .layui-this{color:'+color+'!important}' - style += '.layui-progress-bar{background-color:'+color+'}'; - style += '.layui-elem-quote{border-left: 5px solid '+ color +'}'; - style += '.layui-timeline-axis{color:' + color + '}'; - style += '.layui-laydate .layui-this{background-color:'+color+'!important}'; - style += '.pear-this,.pear-text{color:' + color + '!important}'; - style += '.pear-back{background-color:'+ color +'!important}'; - style += '.pear-collapsed-pe{background-color:'+color+'!important}' - style += '.layui-form-select dl dd.layui-this{color:'+color+'!important;}' - style += '.tag-item-normal{background:'+color+'!important}'; - style += '.step-item-head.step-item-head-active{background-color:'+color+'}' - style += '.step-item-head{border: 3px solid '+color+';}' - style += '.step-item-tail i{background-color:'+color+'}' - style += '.step-item-head{color:' + color + '}' - style += 'div[xm-select-skin=normal] .xm-select-title div.xm-select-label>span i {background-color:'+color+'!important}' - style += 'div[xm-select-skin=normal] .xm-select-title div.xm-select-label>span{border: 1px solid '+color+'!important;background-color:'+color+'!important}' - style += 'div[xm-select-skin=normal] dl dd:not(.xm-dis-disabled) i{border-color:'+color+'!important}' - style += 'div[xm-select-skin=normal] dl dd.xm-select-this:not(.xm-dis-disabled) i{color:'+color+'!important}' - style += 'div[xm-select-skin=normal].xm-form-selected .xm-select, div[xm-select-skin=normal].xm-form-selected .xm-select:hover{border-color:'+color+'!important}' - style += '.layui-layer-btn a:first-child{border-color:'+color+';background-color:'+color+'!important}'; - style += '.layui-form-checkbox[lay-skin=primary]:hover i{border-color:'+color+'!important}' - style += '.pear-tab-menu .item:hover{background-color:'+color+'!important}' - style += '.layui-form-danger:focus {border-color:#FF5722 !important}' - style += '.pear-admin .user .layui-this a:hover{color:white!important}' - style += '.pear-admin .user a:hover{color:'+color+'!important}' - style += '.pear-notice .layui-this{color:'+color+'!important}' - style += '.layui-form-radio:hover *, .layui-form-radioed, .layui-form-radioed>i{color:' + color + ' !important}'; - style += '.pear-btn:hover {color: '+color+';background-color: ' + second + ';}' - style += '.pear-btn-primary[plain] {color: '+ color +' !important;background: ' + second + ' !important;}' - style += '.pear-btn-primary[plain]:hover {background-color: ' + color + '!important}' - style += '.light-theme .pear-nav-tree .layui-this a:hover,.light-theme .pear-nav-tree .layui-this,.light-theme .pear-nav-tree .layui-this a {background-color:'+second+'!important;color:'+color+'!important;}' - style += '.light-theme .pear-nav-tree .layui-this{ border-right: 3px solid '+color+'!important}' - style += '.loader:after {background:'+color+'}' - style += '.layui-laydate .layui-this, .layui-laydate .layui-this>div{background:'+color+'!important}' - if(this.autoHead === true || this.autoHead === "true"){ - style += '.pear-admin.banner-layout .layui-header .layui-logo,.pear-admin .layui-header{border:none;background-color:' + color + '!important;}.pear-admin.banner-layout .layui-header .layui-logo .title,.pear-admin .layui-header .layui-nav .layui-nav-item>a{color:whitesmoke!important;}'; - style += '.pear-admin.banner-layout .layui-header{ box-shadow: 2px 0 6px rgb(0 21 41 / 35%) }' - style += '.pear-admin .layui-header .layui-layout-control .layui-this *,.pear-admin.banner-layout .layui-header .layui-layout-control .layui-this *{ background-color: rgba(0,0,0,.1)!important;}' - } - style += '.menu-search-list li:hover,.menu-search-list li.this{background-color:'+ color +'}' - var colorPane = $("#pear-admin-color"); - if(colorPane.length>0){ - colorPane.html(style); - }else{ - $("head").append("") - } - } - - exports(MOD_NAME, theme); -}); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce.js b/component/pear/module/tinymce/tinymce.js deleted file mode 100644 index b6ef22032c3ee390e2f454cd78c57f328dad4900..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce.js +++ /dev/null @@ -1,213 +0,0 @@ -layui.define(['jquery'],function (exports) { - var $ = layui.$ - - var modFile = layui.cache.modules['tinymce']; - - var modPath = modFile.substr(0, modFile.lastIndexOf('.')) - - var setter = layui.setter || {} - - var response = setter.response || {} - - var plugin_filename = 'tinymce.min.js'//插件路径,不包含base_url部分 - - var settings = { - base_url: modPath - , images_upload_url: ''//图片上传接口,可在option传入,也可在这里修改,option的值优先 - , language: 'zh_CN'//语言,可在option传入,也可在这里修改,option的值优先 - , response: {//后台返回数据格式设置 - statusName: response.statusName || 'code'//返回状态字段 - , msgName: response.msgName || 'msg'//返回消息字段 - , dataName: response.dataName || 'data'//返回的数据 - , statusCode: response.statusCode || { - ok: 0//数据正常 - } - } - , success: function (res, succFun, failFun) {//图片上传完成回调 根据自己需要修改 - if (res[this.response.statusName] == this.response.statusCode.ok) { - succFun(res[this.response.dataName]); - } else { - failFun(res[this.response.msgName]); - } - } - }; - - // ---------------- 以下代码无需修改 ---------------- - - var t = {}; - - //初始化 - t.render = function (options,callback) { - - initTinymce(); - - var option = initOptions(options,callback) - - ,edit = t.get(option.elem); - - if (edit) { - edit.destroy(); - } - - tinymce.init(option); - - return t.get(option.elem); - }; - - t.init = t.render - - // 获取ID对应的编辑器对象 - t.get = function (elem) { - - initTinymce(); - - if (elem && /^#|\./.test(elem)) { - var id = elem.substr(1); - var edit = tinymce.editors[id]; - return edit - } else { - return false; - } - } - - //重载 - t.reload = function (elem, option, callback) { - - var options = {} - - if(typeof elem == 'string'){ - option.elem = elem - options = $.extend({}, option) - } else if (typeof elem == 'object' && typeof elem.elem == 'string'){ - options = $.extend({}, elem) - callback = option - } - - var optionCache = layui.sessionData('layui-tinymce')[options.elem] - - delete optionCache.init_instance_callback - - $.extend(optionCache,options) - - return t.render(optionCache,callback) - } - - function initOptions(option,callback) { - - var admin = layui.admin || {} - - var form = option.form || {} - - var file_field = form.name || 'edit' //文件字段名 - - var form_data = form.data || {} //其他表单数据 {key:value, ...} - - option.suffix= isset(option.suffix) ? option.suffix : (plugin_filename.indexOf('.min')>-1 ? '.min' : '') - - option.base_url = isset(option.base_url) ? option.base_url : settings.base_url - - option.language = isset(option.language) ? option.language : settings.language - - option.selector = isset(option.selector) ? option.selector : option.elem - - option.quickbars_selection_toolbar = isset(option.quickbars_selection_toolbar) ? option.quickbars_selection_toolbar : 'cut copy | bold italic underline strikethrough ' - - option.plugins = isset(option.plugins) ? option.plugins : 'code kityformula-editor quickbars print preview searchreplace autolink fullscreen image link media codesample table charmap hr advlist lists wordcount imagetools indent2em'; - - option.toolbar = isset(option.toolbar) ? option.toolbar : 'code undo redo | kityformula-editor forecolor backcolor bold italic underline strikethrough | indent2em alignleft aligncenter alignright alignjustify outdent indent | link bullist numlist image table codesample | formatselect fontselect fontsizeselect'; - - option.resize = isset(option.resize) ? option.resize : false; - - option.elementpath = isset(option.elementpath) ? option.elementpath : false; - - option.branding = isset(option.branding) ? option.branding : false; - - option.contextmenu_never_use_native = isset(option.contextmenu_never_use_native) ? option.contextmenu_never_use_native : true; - - option.menubar = isset(option.menubar) ? option.menubar : 'file edit insert format table'; - - option.menu = isset(option.menu) ? option.menu : { - file: {title: '文件', items: 'newdocument | print preview fullscreen | wordcount'}, - edit: {title: '编辑', items: 'undo redo | cut copy paste pastetext selectall | searchreplace'}, - format: { - title: '格式', - items: 'bold italic underline strikethrough superscript subscript | formats | forecolor backcolor | removeformat' - }, - table: {title: '表格', items: 'inserttable tableprops deletetable | cell row column'}, - }; - - option.init_instance_callback =isset(option.init_instance_callback) ? option.init_instance_callback : function(inst) { - if(typeof callback == 'function') callback(option,inst) - }; - - option.images_upload_url = isset(option.images_upload_url) ? option.images_upload_url : settings.images_upload_url; - - option.images_upload_handler = isset(option.images_upload_handler) ? option.images_upload_handler : function(blobInfo, succFun, failFun) { - if(isEmpty(option.images_upload_url)){ - failFun("上传接口未配置"); - return console.error('images_upload_url未配置'); - } - var formData = new FormData(); - formData.append(file_field, blobInfo.blob()); - if(typeof form_data == 'object'){ - for(var key in form_data){ - formData.append(key, form_data[key]); - } - } - var ajaxOpt = { - url: option.images_upload_url, - dataType: 'json', - type: 'POST', - data: formData, - processData: false, - contentType: false, - success: function (res) { - settings.success(res, succFun, failFun) - }, - error: function (res) { - failFun("网络错误:" + res.status); - } - }; - if (typeof admin.req == 'function') { - admin.req(ajaxOpt); - } else { - $.ajax(ajaxOpt); - } - } - - layui.sessionData('layui-tinymce',{ - key:option.selector, - value:option - }) - return option - } - - function initTinymce() { - if (typeof tinymce == 'undefined') { - $.ajax({//获取插件 - url: settings.base_url + '/' + plugin_filename, - dataType: 'script', - cache: true, - async: false, - }); - } - } - - function isset(value) { - return typeof value !== 'undefined' && value !== null - } - - function isEmpty(value) { - if(typeof value === 'undefined' || value === null|| value === ''){ - return true - } else if (value instanceof Array && value.length === 0){ - return true - } else if (typeof value === 'object' && Object.keys(value).length === 0){ - return true - } - return false - } - - exports('tinymce', t); - -}); diff --git a/component/pear/module/tinymce/tinymce/icons/default/icons.js b/component/pear/module/tinymce/tinymce/icons/default/icons.js deleted file mode 100644 index d31c90729dd5f8f653d00f8f772e14fcf94f1634..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/icons/default/icons.js +++ /dev/null @@ -1,172 +0,0 @@ -tinymce.IconManager.add('default', { - icons: { - 'accessibility-check': '', - 'action-next': '', - 'action-prev': '', - 'align-center': '', - 'align-justify': '', - 'align-left': '', - 'align-none': '', - 'align-right': '', - 'arrow-left': '', - 'arrow-right': '', - 'bold': '', - 'bookmark': '', - 'border-width': '', - 'brightness': '', - 'browse': '', - 'cancel': '', - 'change-case': '', - 'character-count': '', - 'checklist-rtl': '', - 'checklist': '', - 'checkmark': '', - 'chevron-down': '', - 'chevron-left': '', - 'chevron-right': '', - 'chevron-up': '', - 'close': '', - 'code-sample': '', - 'color-levels': '', - 'color-picker': '', - 'color-swatch-remove-color': '', - 'color-swatch': '', - 'comment-add': '', - 'comment': '', - 'contrast': '', - 'copy': '', - 'crop': '', - 'cut-column': '', - 'cut-row': '', - 'cut': '', - 'document-properties': '', - 'drag': '', - 'duplicate-column': '', - 'duplicate-row': '', - 'duplicate': '', - 'edit-block': '', - 'edit-image': '', - 'embed-page': '', - 'embed': '', - 'emoji': '', - 'export': '', - 'fill': '', - 'flip-horizontally': '', - 'flip-vertically': '', - 'format-painter': '', - 'format': '', - 'fullscreen': '', - 'gallery': '', - 'gamma': '', - 'help': '', - 'highlight-bg-color': '', - 'home': '', - 'horizontal-rule': '', - 'image-options': '', - 'image': '', - 'indent': '', - 'info': '', - 'insert-character': '', - 'insert-time': '', - 'invert': '', - 'italic': '', - 'line-height': '', - 'line': '', - 'link': '', - 'list-bull-circle': '', - 'list-bull-default': '', - 'list-bull-square': '', - 'list-num-default-rtl': '', - 'list-num-default': '', - 'list-num-lower-alpha-rtl': '', - 'list-num-lower-alpha': '', - 'list-num-lower-greek-rtl': '', - 'list-num-lower-greek': '', - 'list-num-lower-roman-rtl': '', - 'list-num-lower-roman': '', - 'list-num-upper-alpha-rtl': '', - 'list-num-upper-alpha': '', - 'list-num-upper-roman-rtl': '', - 'list-num-upper-roman': '', - 'lock': '', - 'ltr': '', - 'more-drawer': '', - 'new-document': '', - 'new-tab': '', - 'non-breaking': '', - 'notice': '', - 'ordered-list-rtl': '', - 'ordered-list': '', - 'orientation': '', - 'outdent': '', - 'page-break': '', - 'paragraph': '', - 'paste-column-after': '', - 'paste-column-before': '', - 'paste-row-after': '', - 'paste-row-before': '', - 'paste-text': '', - 'paste': '', - 'permanent-pen': '', - 'plus': '', - 'preferences': '', - 'preview': '', - 'print': '', - 'quote': '', - 'redo': '', - 'reload': '', - 'remove-formatting': '', - 'remove': '', - 'resize-handle': '', - 'resize': '', - 'restore-draft': '', - 'rotate-left': '', - 'rotate-right': '', - 'rtl': '', - 'save': '', - 'search': '', - 'select-all': '', - 'selected': '', - 'settings': '', - 'sharpen': '', - 'sourcecode': '', - 'spell-check': '', - 'strike-through': '', - 'subscript': '', - 'superscript': '', - 'table-cell-properties': '', - 'table-cell-select-all': '', - 'table-cell-select-inner': '', - 'table-delete-column': '', - 'table-delete-row': '', - 'table-delete-table': '', - 'table-insert-column-after': '', - 'table-insert-column-before': '', - 'table-insert-row-above': '', - 'table-insert-row-after': '', - 'table-left-header': '', - 'table-merge-cells': '', - 'table-row-properties': '', - 'table-split-cells': '', - 'table-top-header': '', - 'table': '', - 'template': '', - 'temporary-placeholder': '', - 'text-color': '', - 'toc': '', - 'translate': '', - 'underline': '', - 'undo': '', - 'unlink': '', - 'unlock': '', - 'unordered-list': '', - 'unselected': '', - 'upload': '', - 'user': '', - 'visualblocks': '', - 'visualchars': '', - 'warning': '', - 'zoom-in': '', - 'zoom-out': '', - } -}); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/icons/default/icons.min.js b/component/pear/module/tinymce/tinymce/icons/default/icons.min.js deleted file mode 100644 index 086f297d3278cfd6ef86b01297022f883ff80dd5..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/icons/default/icons.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.IconManager.add("default",{icons:{"accessibility-check":'',"action-next":'',"action-prev":'',"align-center":'',"align-justify":'',"align-left":'',"align-none":'',"align-right":'',"arrow-left":'',"arrow-right":'',bold:'',bookmark:'',"border-width":'',brightness:'',browse:'',cancel:'',"change-case":'',"character-count":'',"checklist-rtl":'',checklist:'',checkmark:'',"chevron-down":'',"chevron-left":'',"chevron-right":'',"chevron-up":'',close:'',"code-sample":'',"color-levels":'',"color-picker":'',"color-swatch-remove-color":'',"color-swatch":'',"comment-add":'',comment:'',contrast:'',copy:'',crop:'',"cut-column":'',"cut-row":'',cut:'',"document-properties":'',drag:'',"duplicate-column":'',"duplicate-row":'',duplicate:'',"edit-block":'',"edit-image":'',"embed-page":'',embed:'',emoji:'',"export":'',fill:'',"flip-horizontally":'',"flip-vertically":'',"format-painter":'',format:'',fullscreen:'',gallery:'',gamma:'',help:'',"highlight-bg-color":'',home:'',"horizontal-rule":'',"image-options":'',image:'',indent:'',info:'',"insert-character":'',"insert-time":'',invert:'',italic:'',"line-height":'',line:'',link:'',"list-bull-circle":'',"list-bull-default":'',"list-bull-square":'',"list-num-default-rtl":'',"list-num-default":'',"list-num-lower-alpha-rtl":'',"list-num-lower-alpha":'',"list-num-lower-greek-rtl":'',"list-num-lower-greek":'',"list-num-lower-roman-rtl":'',"list-num-lower-roman":'',"list-num-upper-alpha-rtl":'',"list-num-upper-alpha":'',"list-num-upper-roman-rtl":'',"list-num-upper-roman":'',lock:'',ltr:'',"more-drawer":'',"new-document":'',"new-tab":'',"non-breaking":'',notice:'',"ordered-list-rtl":'',"ordered-list":'',orientation:'',outdent:'',"page-break":'',paragraph:'',"paste-column-after":'',"paste-column-before":'',"paste-row-after":'',"paste-row-before":'',"paste-text":'',paste:'',"permanent-pen":'',plus:'',preferences:'',preview:'',print:'',quote:'',redo:'',reload:'',"remove-formatting":'',remove:'',"resize-handle":'',resize:'',"restore-draft":'',"rotate-left":'',"rotate-right":'',rtl:'',save:'',search:'',"select-all":'',selected:'',settings:'',sharpen:'',sourcecode:'',"spell-check":'',"strike-through":'',subscript:'',superscript:'',"table-cell-properties":'',"table-cell-select-all":'',"table-cell-select-inner":'',"table-delete-column":'',"table-delete-row":'',"table-delete-table":'',"table-insert-column-after":'',"table-insert-column-before":'',"table-insert-row-above":'',"table-insert-row-after":'',"table-left-header":'',"table-merge-cells":'',"table-row-properties":'',"table-split-cells":'',"table-top-header":'',table:'',template:'',"temporary-placeholder":'',"text-color":'',toc:'',translate:'',underline:'',undo:'',unlink:'',unlock:'',"unordered-list":'',unselected:'',upload:'',user:'',visualblocks:'',visualchars:'',warning:'',"zoom-in":'',"zoom-out":''}}); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/langs/readme.md b/component/pear/module/tinymce/tinymce/langs/readme.md deleted file mode 100644 index a52bf03f9a3ae977eaca0d3f4c406199cc15b023..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/langs/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -This is where language files should be placed. - -Please DO NOT translate these directly use this service: https://www.transifex.com/projects/p/tinymce/ diff --git a/component/pear/module/tinymce/tinymce/langs/zh_CN.js b/component/pear/module/tinymce/tinymce/langs/zh_CN.js deleted file mode 100644 index 89b106c296961d5b77563073977757a8bfefeba0..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/langs/zh_CN.js +++ /dev/null @@ -1,419 +0,0 @@ -tinymce.addI18n('zh_CN',{ -"Redo": "\u91cd\u505a", -"Undo": "\u64a4\u9500", -"Cut": "\u526a\u5207", -"Copy": "\u590d\u5236", -"Paste": "\u7c98\u8d34", -"Select all": "\u5168\u9009", -"New document": "\u65b0\u6587\u4ef6", -"Ok": "\u786e\u5b9a", -"Cancel": "\u53d6\u6d88", -"Visual aids": "\u7f51\u683c\u7ebf", -"Bold": "\u7c97\u4f53", -"Italic": "\u659c\u4f53", -"Underline": "\u4e0b\u5212\u7ebf", -"Strikethrough": "\u5220\u9664\u7ebf", -"Superscript": "\u4e0a\u6807", -"Subscript": "\u4e0b\u6807", -"Clear formatting": "\u6e05\u9664\u683c\u5f0f", -"Align left": "\u5de6\u8fb9\u5bf9\u9f50", -"Align center": "\u4e2d\u95f4\u5bf9\u9f50", -"Align right": "\u53f3\u8fb9\u5bf9\u9f50", -"Justify": "\u4e24\u7aef\u5bf9\u9f50", -"Bullet list": "\u9879\u76ee\u7b26\u53f7", -"Numbered list": "\u7f16\u53f7\u5217\u8868", -"Decrease indent": "\u51cf\u5c11\u7f29\u8fdb", -"Increase indent": "\u589e\u52a0\u7f29\u8fdb", -"Close": "\u5173\u95ed", -"Formats": "\u683c\u5f0f", -"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u6253\u5f00\u526a\u8d34\u677f\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u7b49\u5feb\u6377\u952e\u3002", -"Headers": "\u6807\u9898", -"Header 1": "\u6807\u98981", -"Header 2": "\u6807\u98982", -"Header 3": "\u6807\u98983", -"Header 4": "\u6807\u98984", -"Header 5": "\u6807\u98985", -"Header 6": "\u6807\u98986", -"Headings": "\u6807\u9898", -"Heading 1": "\u6807\u98981", -"Heading 2": "\u6807\u98982", -"Heading 3": "\u6807\u98983", -"Heading 4": "\u6807\u98984", -"Heading 5": "\u6807\u98985", -"Heading 6": "\u6807\u98986", -"Preformatted": "\u9884\u5148\u683c\u5f0f\u5316\u7684", -"Div": "Div", -"Pre": "Pre", -"Code": "\u4ee3\u7801", -"Paragraph": "\u6bb5\u843d", -"Blockquote": "\u5f15\u6587\u533a\u5757", -"Inline": "\u6587\u672c", -"Blocks": "\u57fa\u5757", -"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002", -"Fonts": "\u5b57\u4f53", -"Font Sizes": "\u5b57\u53f7", -"Class": "\u7c7b\u578b", -"Browse for an image": "\u6d4f\u89c8\u56fe\u50cf", -"OR": "\u6216", -"Drop an image here": "\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64", -"Upload": "\u4e0a\u4f20", -"Block": "\u5757", -"Align": "\u5bf9\u9f50", -"Default": "\u9ed8\u8ba4", -"Circle": "\u7a7a\u5fc3\u5706", -"Disc": "\u5b9e\u5fc3\u5706", -"Square": "\u65b9\u5757", -"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd", -"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd", -"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd", -"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd", -"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd", -"Anchor...": "\u951a\u70b9...", -"Name": "\u540d\u79f0", -"Id": "\u6807\u8bc6\u7b26", -"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002", -"You have unsaved changes are you sure you want to navigate away?": "\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f", -"Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f", -"Special character...": "\u7279\u6b8a\u5b57\u7b26...", -"Source code": "\u6e90\u4ee3\u7801", -"Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b", -"Language": "\u8bed\u8a00", -"Code sample...": "\u793a\u4f8b\u4ee3\u7801...", -"Color Picker": "\u9009\u8272\u5668", -"R": "R", -"G": "G", -"B": "B", -"Left to right": "\u4ece\u5de6\u5230\u53f3", -"Right to left": "\u4ece\u53f3\u5230\u5de6", -"Emoticons...": "\u8868\u60c5\u7b26\u53f7...", -"Metadata and Document Properties": "\u5143\u6570\u636e\u548c\u6587\u6863\u5c5e\u6027", -"Title": "\u6807\u9898", -"Keywords": "\u5173\u952e\u8bcd", -"Description": "\u63cf\u8ff0", -"Robots": "\u673a\u5668\u4eba", -"Author": "\u4f5c\u8005", -"Encoding": "\u7f16\u7801", -"Fullscreen": "\u5168\u5c4f", -"Action": "\u64cd\u4f5c", -"Shortcut": "\u5feb\u6377\u952e", -"Help": "\u5e2e\u52a9", -"Address": "\u5730\u5740", -"Focus to menubar": "\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f", -"Focus to toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f", -"Focus to element path": "\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84", -"Focus to contextual toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355", -"Insert link (if link plugin activated)": "\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)", -"Save (if save plugin activated)": "\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)", -"Find (if searchreplace plugin activated)": "\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)", -"Plugins installed ({0}):": "\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):", -"Premium plugins:": "\u4f18\u79c0\u63d2\u4ef6\uff1a", -"Learn more...": "\u4e86\u89e3\u66f4\u591a...", -"You are using {0}": "\u4f60\u6b63\u5728\u4f7f\u7528 {0}", -"Plugins": "\u63d2\u4ef6", -"Handy Shortcuts": "\u5feb\u6377\u952e", -"Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf", -"Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247", -"Image description": "\u56fe\u7247\u63cf\u8ff0", -"Source": "\u5730\u5740", -"Dimensions": "\u5927\u5c0f", -"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4", -"General": "\u666e\u901a", -"Advanced": "\u9ad8\u7ea7", -"Style": "\u6837\u5f0f", -"Vertical space": "\u5782\u76f4\u8fb9\u8ddd", -"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd", -"Border": "\u8fb9\u6846", -"Insert image": "\u63d2\u5165\u56fe\u7247", -"Image...": "\u56fe\u7247...", -"Image list": "\u56fe\u7247\u5217\u8868", -"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c", -"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c", -"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c", -"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c", -"Edit image": "\u7f16\u8f91\u56fe\u7247", -"Image options": "\u56fe\u7247\u9009\u9879", -"Zoom in": "\u653e\u5927", -"Zoom out": "\u7f29\u5c0f", -"Crop": "\u88c1\u526a", -"Resize": "\u8c03\u6574\u5927\u5c0f", -"Orientation": "\u65b9\u5411", -"Brightness": "\u4eae\u5ea6", -"Sharpen": "\u9510\u5316", -"Contrast": "\u5bf9\u6bd4\u5ea6", -"Color levels": "\u989c\u8272\u5c42\u6b21", -"Gamma": "\u4f3d\u9a6c\u503c", -"Invert": "\u53cd\u8f6c", -"Apply": "\u5e94\u7528", -"Back": "\u540e\u9000", -"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4", -"Date\/time": "\u65e5\u671f\/\u65f6\u95f4", -"Insert\/Edit Link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5", -"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5", -"Text to display": "\u663e\u793a\u6587\u5b57", -"Url": "\u5730\u5740", -"Open link in...": "\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...", -"Current window": "\u5f53\u524d\u7a97\u53e3", -"None": "\u65e0", -"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00", -"Remove link": "\u5220\u9664\u94fe\u63a5", -"Anchors": "\u951a\u70b9", -"Link...": "\u94fe\u63a5...", -"Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5", -"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f", -"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7f00\u5417\uff1f", -"Link list": "\u94fe\u63a5\u5217\u8868", -"Insert video": "\u63d2\u5165\u89c6\u9891", -"Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891", -"Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53", -"Alternative source": "\u955c\u50cf", -"Alternative source URL": "\u66ff\u4ee3\u6765\u6e90\u7f51\u5740", -"Media poster (Image URL)": "\u5c01\u9762(\u56fe\u7247\u5730\u5740)", -"Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:", -"Embed": "\u5185\u5d4c", -"Media...": "\u591a\u5a92\u4f53...", -"Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c", -"Page break": "\u5206\u9875\u7b26", -"Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c", -"Preview": "\u9884\u89c8", -"Print...": "\u6253\u5370...", -"Save": "\u4fdd\u5b58", -"Find": "\u67e5\u627e", -"Replace with": "\u66ff\u6362\u4e3a", -"Replace": "\u66ff\u6362", -"Replace all": "\u5168\u90e8\u66ff\u6362", -"Previous": "\u4e0a\u4e00\u4e2a", -"Next": "\u4e0b\u4e00\u4e2a", -"Find and replace...": "\u67e5\u627e\u5e76\u66ff\u6362...", -"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.", -"Match case": "\u533a\u5206\u5927\u5c0f\u5199", -"Find whole words only": "\u5168\u5b57\u5339\u914d", -"Spell check": "\u62fc\u5199\u68c0\u67e5", -"Ignore": "\u5ffd\u7565", -"Ignore all": "\u5168\u90e8\u5ffd\u7565", -"Finish": "\u5b8c\u6210", -"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178", -"Insert table": "\u63d2\u5165\u8868\u683c", -"Table properties": "\u8868\u683c\u5c5e\u6027", -"Delete table": "\u5220\u9664\u8868\u683c", -"Cell": "\u5355\u5143\u683c", -"Row": "\u884c", -"Column": "\u5217", -"Cell properties": "\u5355\u5143\u683c\u5c5e\u6027", -"Merge cells": "\u5408\u5e76\u5355\u5143\u683c", -"Split cell": "\u62c6\u5206\u5355\u5143\u683c", -"Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165", -"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165", -"Delete row": "\u5220\u9664\u884c", -"Row properties": "\u884c\u5c5e\u6027", -"Cut row": "\u526a\u5207\u884c", -"Copy row": "\u590d\u5236\u884c", -"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9", -"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9", -"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165", -"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165", -"Delete column": "\u5220\u9664\u5217", -"Cols": "\u5217", -"Rows": "\u884c", -"Width": "\u5bbd", -"Height": "\u9ad8", -"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd", -"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd", -"Show caption": "\u663e\u793a\u6807\u9898", -"Left": "\u5de6\u5bf9\u9f50", -"Center": "\u5c45\u4e2d", -"Right": "\u53f3\u5bf9\u9f50", -"Cell type": "\u5355\u5143\u683c\u7c7b\u578b", -"Scope": "\u8303\u56f4", -"Alignment": "\u5bf9\u9f50\u65b9\u5f0f", -"H Align": "\u6c34\u5e73\u5bf9\u9f50", -"V Align": "\u5782\u76f4\u5bf9\u9f50", -"Top": "\u9876\u90e8\u5bf9\u9f50", -"Middle": "\u5782\u76f4\u5c45\u4e2d", -"Bottom": "\u5e95\u90e8\u5bf9\u9f50", -"Header cell": "\u8868\u5934\u5355\u5143\u683c", -"Row group": "\u884c\u7ec4", -"Column group": "\u5217\u7ec4", -"Row type": "\u884c\u7c7b\u578b", -"Header": "\u8868\u5934", -"Body": "\u8868\u4f53", -"Footer": "\u8868\u5c3e", -"Border color": "\u8fb9\u6846\u989c\u8272", -"Insert template...": "\u63d2\u5165\u6a21\u677f...", -"Templates": "\u6a21\u677f", -"Template": "\u6a21\u677f", -"Text color": "\u6587\u5b57\u989c\u8272", -"Background color": "\u80cc\u666f\u8272", -"Custom...": "\u81ea\u5b9a\u4e49...", -"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272", -"No color": "\u65e0", -"Remove color": "\u79fb\u9664\u989c\u8272", -"Table of Contents": "\u5185\u5bb9\u5217\u8868", -"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846", -"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26", -"Word count": "\u5b57\u6570", -"Count": "\u8ba1\u6570", -"Document": "\u6587\u6863", -"Selection": "\u9009\u62e9", -"Words": "\u5355\u8bcd", -"Words: {0}": "\u5b57\u6570\uff1a{0}", -"{0} words": "{0} \u5b57", -"File": "\u6587\u4ef6", -"Edit": "\u7f16\u8f91", -"Insert": "\u63d2\u5165", -"View": "\u89c6\u56fe", -"Format": "\u683c\u5f0f", -"Table": "\u8868\u683c", -"Tools": "\u5de5\u5177", -"Powered by {0}": "\u7531{0}\u9a71\u52a8", -"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9", -"Image title": "\u56fe\u7247\u6807\u9898", -"Border width": "\u8fb9\u6846\u5bbd\u5ea6", -"Border style": "\u8fb9\u6846\u6837\u5f0f", -"Error": "\u9519\u8bef", -"Warn": "\u8b66\u544a", -"Valid": "\u6709\u6548", -"To open the popup, press Shift+Enter": "\u6309Shitf+Enter\u952e\u6253\u5f00\u5bf9\u8bdd\u6846", -"Rich Text Area. Press ALT-0 for help.": "\u7f16\u8f91\u533a\u3002\u6309Alt+0\u952e\u6253\u5f00\u5e2e\u52a9\u3002", -"System Font": "\u7cfb\u7edf\u5b57\u4f53", -"Failed to upload image: {0}": "\u56fe\u7247\u4e0a\u4f20\u5931\u8d25: {0}", -"Failed to load plugin: {0} from url {1}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25: {0} \u6765\u81ea\u94fe\u63a5 {1}", -"Failed to load plugin url: {0}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25 \u94fe\u63a5: {0}", -"Failed to initialize plugin: {0}": "\u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25: {0}", -"example": "\u793a\u4f8b", -"Search": "\u641c\u7d22", -"All": "\u5168\u90e8", -"Currency": "\u8d27\u5e01", -"Text": "\u6587\u5b57", -"Quotations": "\u5f15\u7528", -"Mathematical": "\u6570\u5b66", -"Extended Latin": "\u62c9\u4e01\u8bed\u6269\u5145", -"Symbols": "\u7b26\u53f7", -"Arrows": "\u7bad\u5934", -"User Defined": "\u81ea\u5b9a\u4e49", -"dollar sign": "\u7f8e\u5143\u7b26\u53f7", -"currency sign": "\u8d27\u5e01\u7b26\u53f7", -"euro-currency sign": "\u6b27\u5143\u7b26\u53f7", -"colon sign": "\u5192\u53f7", -"cruzeiro sign": "\u514b\u9c81\u8d5b\u7f57\u5e01\u7b26\u53f7", -"french franc sign": "\u6cd5\u90ce\u7b26\u53f7", -"lira sign": "\u91cc\u62c9\u7b26\u53f7", -"mill sign": "\u5bc6\u5c14\u7b26\u53f7", -"naira sign": "\u5948\u62c9\u7b26\u53f7", -"peseta sign": "\u6bd4\u585e\u5854\u7b26\u53f7", -"rupee sign": "\u5362\u6bd4\u7b26\u53f7", -"won sign": "\u97e9\u5143\u7b26\u53f7", -"new sheqel sign": "\u65b0\u8c22\u514b\u5c14\u7b26\u53f7", -"dong sign": "\u8d8a\u5357\u76fe\u7b26\u53f7", -"kip sign": "\u8001\u631d\u57fa\u666e\u7b26\u53f7", -"tugrik sign": "\u56fe\u683c\u91cc\u514b\u7b26\u53f7", -"drachma sign": "\u5fb7\u62c9\u514b\u9a6c\u7b26\u53f7", -"german penny symbol": "\u5fb7\u56fd\u4fbf\u58eb\u7b26\u53f7", -"peso sign": "\u6bd4\u7d22\u7b26\u53f7", -"guarani sign": "\u74dc\u62c9\u5c3c\u7b26\u53f7", -"austral sign": "\u6fb3\u5143\u7b26\u53f7", -"hryvnia sign": "\u683c\u91cc\u592b\u5c3c\u4e9a\u7b26\u53f7", -"cedi sign": "\u585e\u5730\u7b26\u53f7", -"livre tournois sign": "\u91cc\u5f17\u5f17\u5c14\u7b26\u53f7", -"spesmilo sign": "spesmilo\u7b26\u53f7", -"tenge sign": "\u575a\u6208\u7b26\u53f7", -"indian rupee sign": "\u5370\u5ea6\u5362\u6bd4", -"turkish lira sign": "\u571f\u8033\u5176\u91cc\u62c9", -"nordic mark sign": "\u5317\u6b27\u9a6c\u514b", -"manat sign": "\u9a6c\u7eb3\u7279\u7b26\u53f7", -"ruble sign": "\u5362\u5e03\u7b26\u53f7", -"yen character": "\u65e5\u5143\u5b57\u6837", -"yuan character": "\u4eba\u6c11\u5e01\u5143\u5b57\u6837", -"yuan character, in hong kong and taiwan": "\u5143\u5b57\u6837\uff08\u6e2f\u53f0\u5730\u533a\uff09", -"yen\/yuan character variant one": "\u5143\u5b57\u6837\uff08\u5927\u5199\uff09", -"Loading emoticons...": "\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7...", -"Could not load emoticons": "\u4e0d\u80fd\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7", -"People": "\u4eba\u7c7b", -"Animals and Nature": "\u52a8\u7269\u548c\u81ea\u7136", -"Food and Drink": "\u98df\u7269\u548c\u996e\u54c1", -"Activity": "\u6d3b\u52a8", -"Travel and Places": "\u65c5\u6e38\u548c\u5730\u70b9", -"Objects": "\u7269\u4ef6", -"Flags": "\u65d7\u5e1c", -"Characters": "\u5b57\u7b26", -"Characters (no spaces)": "\u5b57\u7b26(\u65e0\u7a7a\u683c)", -"{0} characters": "{0} \u4e2a\u5b57\u7b26", -"Error: Form submit field collision.": "\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002", -"Error: No form element found.": "\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002", -"Update": "\u66f4\u65b0", -"Color swatch": "\u989c\u8272\u6837\u672c", -"Turquoise": "\u9752\u7eff\u8272", -"Green": "\u7eff\u8272", -"Blue": "\u84dd\u8272", -"Purple": "\u7d2b\u8272", -"Navy Blue": "\u6d77\u519b\u84dd", -"Dark Turquoise": "\u6df1\u84dd\u7eff\u8272", -"Dark Green": "\u6df1\u7eff\u8272", -"Medium Blue": "\u4e2d\u84dd\u8272", -"Medium Purple": "\u4e2d\u7d2b\u8272", -"Midnight Blue": "\u6df1\u84dd\u8272", -"Yellow": "\u9ec4\u8272", -"Orange": "\u6a59\u8272", -"Red": "\u7ea2\u8272", -"Light Gray": "\u6d45\u7070\u8272", -"Gray": "\u7070\u8272", -"Dark Yellow": "\u6697\u9ec4\u8272", -"Dark Orange": "\u6df1\u6a59\u8272", -"Dark Red": "\u6df1\u7ea2\u8272", -"Medium Gray": "\u4e2d\u7070\u8272", -"Dark Gray": "\u6df1\u7070\u8272", -"Light Green": "\u6d45\u7eff\u8272", -"Light Yellow": "\u6d45\u9ec4\u8272", -"Light Red": "\u6d45\u7ea2\u8272", -"Light Purple": "\u6d45\u7d2b\u8272", -"Light Blue": "\u6d45\u84dd\u8272", -"Dark Purple": "\u6df1\u7d2b\u8272", -"Dark Blue": "\u6df1\u84dd\u8272", -"Black": "\u9ed1\u8272", -"White": "\u767d\u8272", -"Switch to or from fullscreen mode": "\u5207\u6362\u5168\u5c4f\u6a21\u5f0f", -"Open help dialog": "\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846", -"history": "\u5386\u53f2", -"styles": "\u6837\u5f0f", -"formatting": "\u683c\u5f0f\u5316", -"alignment": "\u5bf9\u9f50", -"indentation": "\u7f29\u8fdb", -"permanent pen": "\u8bb0\u53f7\u7b14", -"comments": "\u5907\u6ce8", -"Format Painter": "\u683c\u5f0f\u5237", -"Insert\/edit iframe": "\u63d2\u5165\/\u7f16\u8f91\u6846\u67b6", -"Capitalization": "\u5927\u5199", -"lowercase": "\u5c0f\u5199", -"UPPERCASE": "\u5927\u5199", -"Title Case": "\u9996\u5b57\u6bcd\u5927\u5199", -"Permanent Pen Properties": "\u6c38\u4e45\u7b14\u5c5e\u6027", -"Permanent pen properties...": "\u6c38\u4e45\u7b14\u5c5e\u6027...", -"Font": "\u5b57\u4f53", -"Size": "\u5b57\u53f7", -"More...": "\u66f4\u591a...", -"Spellcheck Language": "\u62fc\u5199\u68c0\u67e5\u8bed\u8a00", -"Select...": "\u9009\u62e9...", -"Preferences": "\u9996\u9009\u9879", -"Yes": "\u662f", -"No": "\u5426", -"Keyboard Navigation": "\u952e\u76d8\u6307\u5f15", -"Version": "\u7248\u672c", -"Anchor": "\u951a\u70b9", -"Special character": "\u7279\u6b8a\u7b26\u53f7", -"Code sample": "\u4ee3\u7801\u793a\u4f8b", -"Color": "\u989c\u8272", -"Emoticons": "\u8868\u60c5", -"Document properties": "\u6587\u6863\u5c5e\u6027", -"Image": "\u56fe\u7247", -"Insert link": "\u63d2\u5165\u94fe\u63a5", -"Target": "\u6253\u5f00\u65b9\u5f0f", -"Link": "\u94fe\u63a5", -"Poster": "\u5c01\u9762", -"Media": "\u5a92\u4f53", -"Print": "\u6253\u5370", -"Prev": "\u4e0a\u4e00\u4e2a", -"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362", -"Whole words": "\u5168\u5b57\u5339\u914d", -"Spellcheck": "\u62fc\u5199\u68c0\u67e5", -"Caption": "\u6807\u9898", -"Insert template": "\u63d2\u5165\u6a21\u677f" -}); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/advlist/plugin.js b/component/pear/module/tinymce/tinymce/plugins/advlist/plugin.js deleted file mode 100644 index 0dd07b0660256bb5730d03a6dadcb61b93320626..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/advlist/plugin.js +++ /dev/null @@ -1,278 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -(function () { - 'use strict'; - - var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); - - var applyListFormat = function (editor, listName, styleValue) { - var cmd = listName === 'UL' ? 'InsertUnorderedList' : 'InsertOrderedList'; - editor.execCommand(cmd, false, styleValue === false ? null : { 'list-style-type': styleValue }); - }; - - var register = function (editor) { - editor.addCommand('ApplyUnorderedListStyle', function (ui, value) { - applyListFormat(editor, 'UL', value['list-style-type']); - }); - editor.addCommand('ApplyOrderedListStyle', function (ui, value) { - applyListFormat(editor, 'OL', value['list-style-type']); - }); - }; - - var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools'); - - var getNumberStyles = function (editor) { - var styles = editor.getParam('advlist_number_styles', 'default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman'); - return styles ? styles.split(/[ ,]/) : []; - }; - var getBulletStyles = function (editor) { - var styles = editor.getParam('advlist_bullet_styles', 'default,circle,square'); - return styles ? styles.split(/[ ,]/) : []; - }; - - var noop = function () { - }; - var constant = function (value) { - return function () { - return value; - }; - }; - var never = constant(false); - var always = constant(true); - - var none = function () { - return NONE; - }; - var NONE = function () { - var eq = function (o) { - return o.isNone(); - }; - var call = function (thunk) { - return thunk(); - }; - var id = function (n) { - return n; - }; - var me = { - fold: function (n, _s) { - return n(); - }, - is: never, - isSome: never, - isNone: always, - getOr: id, - getOrThunk: call, - getOrDie: function (msg) { - throw new Error(msg || 'error: getOrDie called on none.'); - }, - getOrNull: constant(null), - getOrUndefined: constant(undefined), - or: id, - orThunk: call, - map: none, - each: noop, - bind: none, - exists: never, - forall: always, - filter: none, - equals: eq, - equals_: eq, - toArray: function () { - return []; - }, - toString: constant('none()') - }; - return me; - }(); - var some = function (a) { - var constant_a = constant(a); - var self = function () { - return me; - }; - var bind = function (f) { - return f(a); - }; - var me = { - fold: function (n, s) { - return s(a); - }, - is: function (v) { - return a === v; - }, - isSome: always, - isNone: never, - getOr: constant_a, - getOrThunk: constant_a, - getOrDie: constant_a, - getOrNull: constant_a, - getOrUndefined: constant_a, - or: self, - orThunk: self, - map: function (f) { - return some(f(a)); - }, - each: function (f) { - f(a); - }, - bind: bind, - exists: bind, - forall: bind, - filter: function (f) { - return f(a) ? me : NONE; - }, - toArray: function () { - return [a]; - }, - toString: function () { - return 'some(' + a + ')'; - }, - equals: function (o) { - return o.is(a); - }, - equals_: function (o, elementEq) { - return o.fold(never, function (b) { - return elementEq(a, b); - }); - } - }; - return me; - }; - var from = function (value) { - return value === null || value === undefined ? NONE : some(value); - }; - var Optional = { - some: some, - none: none, - from: from - }; - - var isChildOfBody = function (editor, elm) { - return editor.$.contains(editor.getBody(), elm); - }; - var isTableCellNode = function (node) { - return node && /^(TH|TD)$/.test(node.nodeName); - }; - var isListNode = function (editor) { - return function (node) { - return node && /^(OL|UL|DL)$/.test(node.nodeName) && isChildOfBody(editor, node); - }; - }; - var getSelectedStyleType = function (editor) { - var listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul'); - var style = editor.dom.getStyle(listElm, 'listStyleType'); - return Optional.from(style); - }; - - var findIndex = function (list, predicate) { - for (var index = 0; index < list.length; index++) { - var element = list[index]; - if (predicate(element)) { - return index; - } - } - return -1; - }; - var styleValueToText = function (styleValue) { - return styleValue.replace(/\-/g, ' ').replace(/\b\w/g, function (chr) { - return chr.toUpperCase(); - }); - }; - var isWithinList = function (editor, e, nodeName) { - var tableCellIndex = findIndex(e.parents, isTableCellNode); - var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents; - var lists = global$1.grep(parents, isListNode(editor)); - return lists.length > 0 && lists[0].nodeName === nodeName; - }; - var addSplitButton = function (editor, id, tooltip, cmd, nodeName, styles) { - editor.ui.registry.addSplitButton(id, { - tooltip: tooltip, - icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list', - presets: 'listpreview', - columns: 3, - fetch: function (callback) { - var items = global$1.map(styles, function (styleValue) { - var iconStyle = nodeName === 'OL' ? 'num' : 'bull'; - var iconName = styleValue === 'disc' || styleValue === 'decimal' ? 'default' : styleValue; - var itemValue = styleValue === 'default' ? '' : styleValue; - var displayText = styleValueToText(styleValue); - return { - type: 'choiceitem', - value: itemValue, - icon: 'list-' + iconStyle + '-' + iconName, - text: displayText - }; - }); - callback(items); - }, - onAction: function () { - return editor.execCommand(cmd); - }, - onItemAction: function (_splitButtonApi, value) { - applyListFormat(editor, nodeName, value); - }, - select: function (value) { - var listStyleType = getSelectedStyleType(editor); - return listStyleType.map(function (listStyle) { - return value === listStyle; - }).getOr(false); - }, - onSetup: function (api) { - var nodeChangeHandler = function (e) { - api.setActive(isWithinList(editor, e, nodeName)); - }; - editor.on('NodeChange', nodeChangeHandler); - return function () { - return editor.off('NodeChange', nodeChangeHandler); - }; - } - }); - }; - var addButton = function (editor, id, tooltip, cmd, nodeName, _styles) { - editor.ui.registry.addToggleButton(id, { - active: false, - tooltip: tooltip, - icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list', - onSetup: function (api) { - var nodeChangeHandler = function (e) { - api.setActive(isWithinList(editor, e, nodeName)); - }; - editor.on('NodeChange', nodeChangeHandler); - return function () { - return editor.off('NodeChange', nodeChangeHandler); - }; - }, - onAction: function () { - return editor.execCommand(cmd); - } - }); - }; - var addControl = function (editor, id, tooltip, cmd, nodeName, styles) { - if (styles.length > 1) { - addSplitButton(editor, id, tooltip, cmd, nodeName, styles); - } else { - addButton(editor, id, tooltip, cmd, nodeName); - } - }; - var register$1 = function (editor) { - addControl(editor, 'numlist', 'Numbered list', 'InsertOrderedList', 'OL', getNumberStyles(editor)); - addControl(editor, 'bullist', 'Bullet list', 'InsertUnorderedList', 'UL', getBulletStyles(editor)); - }; - - function Plugin () { - global.add('advlist', function (editor) { - if (editor.hasPlugin('lists')) { - register$1(editor); - register(editor); - } - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/advlist/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/advlist/plugin.min.js deleted file mode 100644 index dfa80d9ae746cd6af06417ab91da6d6876ca9dc1..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/advlist/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var n,e,t,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=function(n,e,t){var r="UL"===e?"InsertUnorderedList":"InsertOrderedList";n.execCommand(r,!1,!1===t?null:{"list-style-type":t})},l=tinymce.util.Tools.resolve("tinymce.util.Tools"),i=function(n){return function(){return n}},c=i(!1),s=i(!0),o=function(){return a},a=(n=function(n){return n.isNone()},{fold:function(n,e){return n()},is:c,isSome:c,isNone:s,getOr:t=function(n){return n},getOrThunk:e=function(n){return n()},getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(undefined),or:t,orThunk:e,map:o,each:function(){},bind:o,exists:c,forall:s,filter:o,equals:n,equals_:n,toArray:function(){return[]},toString:i("none()")}),f=function(t){var n=i(t),e=function(){return o},r=function(n){return n(t)},o={fold:function(n,e){return e(t)},is:function(n){return t===n},isSome:s,isNone:c,getOr:n,getOrThunk:n,getOrDie:n,getOrNull:n,getOrUndefined:n,or:e,orThunk:e,map:function(n){return f(n(t))},each:function(n){n(t)},bind:r,exists:r,forall:r,filter:function(n){return n(t)?o:a},toArray:function(){return[t]},toString:function(){return"some("+t+")"},equals:function(n){return n.is(t)},equals_:function(n,e){return n.fold(c,function(n){return e(t,n)})}};return o},d=function(n){return null===n||n===undefined?a:f(n)},g=function(n){return n&&/^(TH|TD)$/.test(n.nodeName)},m=function(r){return function(n){return n&&/^(OL|UL|DL)$/.test(n.nodeName)&&(t=n,(e=r).$.contains(e.getBody(),t));var e,t}},p=function(n,e,t){var r=function(n,e){for(var t=0;t len) { - index = len; - } - } - return index; - }; - var setStart = function (rng, container, offset) { - if (container.nodeType !== 1 || container.hasChildNodes()) { - rng.setStart(container, scopeIndex(container, offset)); - } else { - rng.setStartBefore(container); - } - }; - var setEnd = function (rng, container, offset) { - if (container.nodeType !== 1 || container.hasChildNodes()) { - rng.setEnd(container, scopeIndex(container, offset)); - } else { - rng.setEndAfter(container); - } - }; - var parseCurrentLine = function (editor, endOffset, delimiter) { - var end, endContainer, bookmark, text, prev, len, rngText; - var autoLinkPattern = getAutoLinkPattern(editor); - var defaultLinkTarget = getDefaultLinkTarget(editor); - if (editor.selection.getNode().tagName === 'A') { - return; - } - var rng = editor.selection.getRng().cloneRange(); - if (rng.startOffset < 5) { - prev = rng.endContainer.previousSibling; - if (!prev) { - if (!rng.endContainer.firstChild || !rng.endContainer.firstChild.nextSibling) { - return; - } - prev = rng.endContainer.firstChild.nextSibling; - } - len = prev.length; - setStart(rng, prev, len); - setEnd(rng, prev, len); - if (rng.endOffset < 5) { - return; - } - end = rng.endOffset; - endContainer = prev; - } else { - endContainer = rng.endContainer; - if (endContainer.nodeType !== 3 && endContainer.firstChild) { - while (endContainer.nodeType !== 3 && endContainer.firstChild) { - endContainer = endContainer.firstChild; - } - if (endContainer.nodeType === 3) { - setStart(rng, endContainer, 0); - setEnd(rng, endContainer, endContainer.nodeValue.length); - } - } - if (rng.endOffset === 1) { - end = 2; - } else { - end = rng.endOffset - 1 - endOffset; - } - } - var start = end; - do { - setStart(rng, endContainer, end >= 2 ? end - 2 : 0); - setEnd(rng, endContainer, end >= 1 ? end - 1 : 0); - end -= 1; - rngText = rng.toString(); - } while (rngText !== ' ' && rngText !== '' && rngText.charCodeAt(0) !== 160 && end - 2 >= 0 && rngText !== delimiter); - if (rangeEqualsDelimiterOrSpace(rng.toString(), delimiter)) { - setStart(rng, endContainer, end); - setEnd(rng, endContainer, start); - end += 1; - } else if (rng.startOffset === 0) { - setStart(rng, endContainer, 0); - setEnd(rng, endContainer, start); - } else { - setStart(rng, endContainer, end); - setEnd(rng, endContainer, start); - } - text = rng.toString(); - if (text.charAt(text.length - 1) === '.') { - setEnd(rng, endContainer, start - 1); - } - text = rng.toString().trim(); - var matches = text.match(autoLinkPattern); - var protocol = getDefaultLinkProtocol(editor); - if (matches) { - if (matches[1] === 'www.') { - matches[1] = protocol + '://www.'; - } else if (/@$/.test(matches[1]) && !/^mailto:/.test(matches[1])) { - matches[1] = 'mailto:' + matches[1]; - } - bookmark = editor.selection.getBookmark(); - editor.selection.setRng(rng); - editor.execCommand('createlink', false, matches[1] + matches[2]); - if (defaultLinkTarget !== false) { - editor.dom.setAttrib(editor.selection.getNode(), 'target', defaultLinkTarget); - } - editor.selection.moveToBookmark(bookmark); - editor.nodeChanged(); - } - }; - var setup = function (editor) { - var autoUrlDetectState; - editor.on('keydown', function (e) { - if (e.keyCode === 13) { - return handleEnter(editor); - } - }); - if (global$1.browser.isIE()) { - editor.on('focus', function () { - if (!autoUrlDetectState) { - autoUrlDetectState = true; - try { - editor.execCommand('AutoUrlDetect', false, true); - } catch (ex) { - } - } - }); - return; - } - editor.on('keypress', function (e) { - if (e.keyCode === 41) { - return handleEclipse(editor); - } - }); - editor.on('keyup', function (e) { - if (e.keyCode === 32) { - return handleSpacebar(editor); - } - }); - }; - - function Plugin () { - global.add('autolink', function (editor) { - setup(editor); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/autolink/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/autolink/plugin.min.js deleted file mode 100644 index 244005414ba8a9b59c7c5462e04a8c580cf31427..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/autolink/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=tinymce.util.Tools.resolve("tinymce.Env"),i=function(e,t){var n;return t<0&&(t=0),3!==e.nodeType||(n=e.data.length) getAutoResizeMinHeight(editor)) { - resizeHeight = contentHeight + chromeHeight; - } - var maxHeight = getAutoResizeMaxHeight(editor); - if (maxHeight && resizeHeight > maxHeight) { - resizeHeight = maxHeight; - toggleScrolling(editor, true); - } else { - toggleScrolling(editor, false); - } - if (resizeHeight !== oldSize.get()) { - var deltaSize = resizeHeight - oldSize.get(); - dom.setStyle(editor.getContainer(), 'height', resizeHeight + 'px'); - oldSize.set(resizeHeight); - fireResizeEditor(editor); - if (global$1.browser.isSafari() && global$1.mac) { - var win = editor.getWin(); - win.scrollTo(win.pageXOffset, win.pageYOffset); - } - if (editor.hasFocus()) { - editor.selection.scrollIntoView(editor.selection.getNode()); - } - if (global$1.webkit && deltaSize < 0) { - resize(editor, oldSize); - } - } - }; - var setup = function (editor, oldSize) { - editor.on('init', function () { - var overflowPadding = getAutoResizeOverflowPadding(editor); - var dom = editor.dom; - dom.setStyles(editor.getDoc().documentElement, { height: 'auto' }); - dom.setStyles(editor.getBody(), { - 'paddingLeft': overflowPadding, - 'paddingRight': overflowPadding, - 'min-height': 0 - }); - }); - editor.on('NodeChange SetContent keyup FullscreenStateChanged ResizeContent', function () { - resize(editor, oldSize); - }); - if (shouldAutoResizeOnInit(editor)) { - editor.on('init', function () { - wait(editor, oldSize, 20, 100, function () { - wait(editor, oldSize, 5, 1000); - }); - }); - } - }; - - var register = function (editor, oldSize) { - editor.addCommand('mceAutoResize', function () { - resize(editor, oldSize); - }); - }; - - function Plugin () { - global.add('autoresize', function (editor) { - if (!editor.settings.hasOwnProperty('resize')) { - editor.settings.resize = false; - } - if (!editor.inline) { - var oldSize = Cell(0); - register(editor, oldSize); - setup(editor, oldSize); - } - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/autoresize/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/autoresize/plugin.min.js deleted file mode 100644 index 01cb7d5383df5816d4c610fb679ceaeadd16d04e..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/autoresize/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),h=tinymce.util.Tools.resolve("tinymce.Env"),r=tinymce.util.Tools.resolve("tinymce.util.Delay"),y=function(e){return e.getParam("min_height",e.getElement().offsetHeight,"number")},a=function(e,t,n,i,o){r.setEditorTimeout(e,function(){b(e,t),n--?a(e,t,n,i,o):o&&o()},i)},p=function(e,t){var n=e.getBody();n&&(n.style.overflowY=t?"":"hidden",t||(n.scrollTop=0))},v=function(e,t,n,i){var o=parseInt(e.getStyle(t,n,i),10);return isNaN(o)?0:o},b=function(e,t){var n,i,o,r,s,a,g,u,l,c,m,f=e.dom,d=e.getDoc();d&&((n=e).plugins.fullscreen&&n.plugins.fullscreen.isFullscreen()?p(e,!0):(i=d.documentElement,o=e.getParam("autoresize_bottom_margin",50,"number"),r=y(e),s=v(f,i,"margin-top",!0),a=v(f,i,"margin-bottom",!0),(g=i.offsetHeight+s+a+o)<0&&(g=0),g+(u=e.getContainer().offsetHeight-e.getContentAreaContainer().offsetHeight)>y(e)&&(r=g+u),(l=e.getParam("max_height",0,"number"))&&l getAutoSaveRetention(editor)) { - removeDraft(editor, false); - return false; - } - return true; - }; - var removeDraft = function (editor, fire) { - var prefix = getAutoSavePrefix(editor); - global$2.removeItem(prefix + 'draft'); - global$2.removeItem(prefix + 'time'); - if (fire !== false) { - fireRemoveDraft(editor); - } - }; - var storeDraft = function (editor) { - var prefix = getAutoSavePrefix(editor); - if (!isEmpty(editor) && editor.isDirty()) { - global$2.setItem(prefix + 'draft', editor.getContent({ - format: 'raw', - no_events: true - })); - global$2.setItem(prefix + 'time', new Date().getTime().toString()); - fireStoreDraft(editor); - } - }; - var restoreDraft = function (editor) { - var prefix = getAutoSavePrefix(editor); - if (hasDraft(editor)) { - editor.setContent(global$2.getItem(prefix + 'draft'), { format: 'raw' }); - fireRestoreDraft(editor); - } - }; - var startStoreDraft = function (editor) { - var interval = getAutoSaveInterval(editor); - global$1.setEditorInterval(editor, function () { - storeDraft(editor); - }, interval); - }; - var restoreLastDraft = function (editor) { - editor.undoManager.transact(function () { - restoreDraft(editor); - removeDraft(editor); - }); - editor.focus(); - }; - - var get = function (editor) { - return { - hasDraft: function () { - return hasDraft(editor); - }, - storeDraft: function () { - return storeDraft(editor); - }, - restoreDraft: function () { - return restoreDraft(editor); - }, - removeDraft: function (fire) { - return removeDraft(editor, fire); - }, - isEmpty: function (html) { - return isEmpty(editor, html); - } - }; - }; - - var global$4 = tinymce.util.Tools.resolve('tinymce.EditorManager'); - - var setup = function (editor) { - editor.editorManager.on('BeforeUnload', function (e) { - var msg; - global$3.each(global$4.get(), function (editor) { - if (editor.plugins.autosave) { - editor.plugins.autosave.storeDraft(); - } - if (!msg && editor.isDirty() && shouldAskBeforeUnload(editor)) { - msg = editor.translate('You have unsaved changes are you sure you want to navigate away?'); - } - }); - if (msg) { - e.preventDefault(); - e.returnValue = msg; - } - }); - }; - - var makeSetupHandler = function (editor) { - return function (api) { - api.setDisabled(!hasDraft(editor)); - var editorEventCallback = function () { - return api.setDisabled(!hasDraft(editor)); - }; - editor.on('StoreDraft RestoreDraft RemoveDraft', editorEventCallback); - return function () { - return editor.off('StoreDraft RestoreDraft RemoveDraft', editorEventCallback); - }; - }; - }; - var register = function (editor) { - startStoreDraft(editor); - editor.ui.registry.addButton('restoredraft', { - tooltip: 'Restore last draft', - icon: 'restore-draft', - onAction: function () { - restoreLastDraft(editor); - }, - onSetup: makeSetupHandler(editor) - }); - editor.ui.registry.addMenuItem('restoredraft', { - text: 'Restore last draft', - icon: 'restore-draft', - onAction: function () { - restoreLastDraft(editor); - }, - onSetup: makeSetupHandler(editor) - }); - }; - - function Plugin () { - global.add('autosave', function (editor) { - setup(editor); - register(editor); - editor.on('init', function () { - if (shouldRestoreWhenEmpty(editor) && editor.dom.isEmpty(editor.getBody())) { - restoreDraft(editor); - } - }); - return get(editor); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/autosave/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/autosave/plugin.min.js deleted file mode 100644 index cd2529400b592035216299e9f052832fb5a5a510..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/autosave/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var e,t=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=(e=undefined,function(t){return e===t}),r=tinymce.util.Tools.resolve("tinymce.util.Delay"),n=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),o=tinymce.util.Tools.resolve("tinymce.util.Tools"),i=function(t,e){var r=t||e,n=/^(\d+)([ms]?)$/.exec(""+r);return(n[2]?{s:1e3,m:6e4}[n[2]]:1)*parseInt(r,10)},u=function(t){var e=document.location;return t.getParam("autosave_prefix","tinymce-autosave-{path}{query}{hash}-{id}-").replace(/{path}/g,e.pathname).replace(/{query}/g,e.search).replace(/{hash}/g,e.hash).replace(/{id}/g,t.id)},s=function(t,e){if(a(e))return t.dom.isEmpty(t.getBody());var r=o.trim(e);if(""===r)return!0;var n=(new DOMParser).parseFromString(r,"text/html");return t.dom.isEmpty(n)},f=function(t){var e=parseInt(n.getItem(u(t)+"time"),10)||0;return!((new Date).getTime()-e>i(t.getParam("autosave_retention"),"20m"))||(c(t,!1),!1)},c=function(t,e){var r=u(t);n.removeItem(r+"draft"),n.removeItem(r+"time"),!1!==e&&t.fire("RemoveDraft")},m=function(t){var e=u(t);!s(t)&&t.isDirty()&&(n.setItem(e+"draft",t.getContent({format:"raw",no_events:!0})),n.setItem(e+"time",(new Date).getTime().toString()),t.fire("StoreDraft"))},l=function(t){var e=u(t);f(t)&&(t.setContent(n.getItem(e+"draft"),{format:"raw"}),t.fire("RestoreDraft"))},v=function(t){var e=i(t.getParam("autosave_interval"),"30s");r.setEditorInterval(t,function(){m(t)},e)},d=function(t){t.undoManager.transact(function(){l(t),c(t)}),t.focus()},g=tinymce.util.Tools.resolve("tinymce.EditorManager"),y=function(r){return function(t){t.setDisabled(!f(r));var e=function(){return t.setDisabled(!f(r))};return r.on("StoreDraft RestoreDraft RemoveDraft",e),function(){return r.off("StoreDraft RestoreDraft RemoveDraft",e)}}};t.add("autosave",function(t){var e,r;return t.editorManager.on("BeforeUnload",function(t){var e;o.each(g.get(),function(t){t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&t.getParam("autosave_ask_before_unload",!0)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))}),e&&(t.preventDefault(),t.returnValue=e)}),v(e=t),e.ui.registry.addButton("restoredraft",{tooltip:"Restore last draft",icon:"restore-draft",onAction:function(){d(e)},onSetup:y(e)}),e.ui.registry.addMenuItem("restoredraft",{text:"Restore last draft",icon:"restore-draft",onAction:function(){d(e)},onSetup:y(e)}),t.on("init",function(){t.getParam("autosave_restore_when_empty",!1)&&t.dom.isEmpty(t.getBody())&&l(t)}),r=t,{hasDraft:function(){return f(r)},storeDraft:function(){return m(r)},restoreDraft:function(){return l(r)},removeDraft:function(t){return c(r,t)},isEmpty:function(t){return s(r,t)}}})}(); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/bbcode/plugin.js b/component/pear/module/tinymce/tinymce/plugins/bbcode/plugin.js deleted file mode 100644 index 5b7ac22397ac5f8615dd700ba86b5c155bdb0f41..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/bbcode/plugin.js +++ /dev/null @@ -1,99 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -(function () { - 'use strict'; - - var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); - - var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools'); - - var html2bbcode = function (s) { - s = global$1.trim(s); - var rep = function (re, str) { - s = s.replace(re, str); - }; - rep(/(.*?)<\/a>/gi, '[url=$1]$2[/url]'); - rep(/(.*?)<\/font>/gi, '[code][color=$1]$2[/color][/code]'); - rep(/(.*?)<\/font>/gi, '[quote][color=$1]$2[/color][/quote]'); - rep(/(.*?)<\/font>/gi, '[code][color=$1]$2[/color][/code]'); - rep(/(.*?)<\/font>/gi, '[quote][color=$1]$2[/color][/quote]'); - rep(/(.*?)<\/span>/gi, '[color=$1]$2[/color]'); - rep(/(.*?)<\/font>/gi, '[color=$1]$2[/color]'); - rep(/(.*?)<\/span>/gi, '[size=$1]$2[/size]'); - rep(/(.*?)<\/font>/gi, '$1'); - rep(//gi, '[img]$1[/img]'); - rep(/(.*?)<\/span>/gi, '[code]$1[/code]'); - rep(/(.*?)<\/span>/gi, '[quote]$1[/quote]'); - rep(/(.*?)<\/strong>/gi, '[code][b]$1[/b][/code]'); - rep(/(.*?)<\/strong>/gi, '[quote][b]$1[/b][/quote]'); - rep(/(.*?)<\/em>/gi, '[code][i]$1[/i][/code]'); - rep(/(.*?)<\/em>/gi, '[quote][i]$1[/i][/quote]'); - rep(/(.*?)<\/u>/gi, '[code][u]$1[/u][/code]'); - rep(/(.*?)<\/u>/gi, '[quote][u]$1[/u][/quote]'); - rep(/<\/(strong|b)>/gi, '[/b]'); - rep(/<(strong|b)>/gi, '[b]'); - rep(/<\/(em|i)>/gi, '[/i]'); - rep(/<(em|i)>/gi, '[i]'); - rep(/<\/u>/gi, '[/u]'); - rep(/(.*?)<\/span>/gi, '[u]$1[/u]'); - rep(//gi, '[u]'); - rep(/]*>/gi, '[quote]'); - rep(/<\/blockquote>/gi, '[/quote]'); - rep(/
                /gi, '\n'); - rep(//gi, '\n'); - rep(/
                /gi, '\n'); - rep(/

                /gi, ''); - rep(/<\/p>/gi, '\n'); - rep(/ |\u00a0/gi, ' '); - rep(/"/gi, '"'); - rep(/</gi, '<'); - rep(/>/gi, '>'); - rep(/&/gi, '&'); - return s; - }; - var bbcode2html = function (s) { - s = global$1.trim(s); - var rep = function (re, str) { - s = s.replace(re, str); - }; - rep(/\n/gi, '
                '); - rep(/\[b\]/gi, ''); - rep(/\[\/b\]/gi, ''); - rep(/\[i\]/gi, ''); - rep(/\[\/i\]/gi, ''); - rep(/\[u\]/gi, ''); - rep(/\[\/u\]/gi, ''); - rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi, '$2'); - rep(/\[url\](.*?)\[\/url\]/gi, '$1'); - rep(/\[img\](.*?)\[\/img\]/gi, ''); - rep(/\[color=(.*?)\](.*?)\[\/color\]/gi, '$2'); - rep(/\[code\](.*?)\[\/code\]/gi, '$1 '); - rep(/\[quote.*?\](.*?)\[\/quote\]/gi, '$1 '); - return s; - }; - - function Plugin () { - global.add('bbcode', function (editor) { - editor.on('BeforeSetContent', function (e) { - e.content = bbcode2html(e.content); - }); - editor.on('PostProcess', function (e) { - if (e.set) { - e.content = bbcode2html(e.content); - } - if (e.get) { - e.content = html2bbcode(e.content); - } - }); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/bbcode/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/bbcode/plugin.min.js deleted file mode 100644 index a0471d465ff1b12ba3a734c34188ef09596ef37e..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/bbcode/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var o=tinymce.util.Tools.resolve("tinymce.PluginManager"),e=tinymce.util.Tools.resolve("tinymce.util.Tools"),t=function(t){t=e.trim(t);var o=function(o,e){t=t.replace(o,e)};return o(/\n/gi,"
                "),o(/\[b\]/gi,""),o(/\[\/b\]/gi,""),o(/\[i\]/gi,""),o(/\[\/i\]/gi,""),o(/\[u\]/gi,""),o(/\[\/u\]/gi,""),o(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'$2'),o(/\[url\](.*?)\[\/url\]/gi,'$1'),o(/\[img\](.*?)\[\/img\]/gi,''),o(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2'),o(/\[code\](.*?)\[\/code\]/gi,'$1 '),o(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 '),t};o.add("bbcode",function(o){o.on("BeforeSetContent",function(o){o.content=t(o.content)}),o.on("PostProcess",function(o){o.set&&(o.content=t(o.content)),o.get&&(o.content=function(t){t=e.trim(t);var o=function(o,e){t=t.replace(o,e)};return o(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"),o(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),o(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),o(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),o(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),o(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"),o(/(.*?)<\/font>/gi,"[color=$1]$2[/color]"),o(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"),o(/(.*?)<\/font>/gi,"$1"),o(//gi,"[img]$1[/img]"),o(/(.*?)<\/span>/gi,"[code]$1[/code]"),o(/(.*?)<\/span>/gi,"[quote]$1[/quote]"),o(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"),o(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"),o(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"),o(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"),o(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"),o(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"),o(/<\/(strong|b)>/gi,"[/b]"),o(/<(strong|b)>/gi,"[b]"),o(/<\/(em|i)>/gi,"[/i]"),o(/<(em|i)>/gi,"[i]"),o(/<\/u>/gi,"[/u]"),o(/(.*?)<\/span>/gi,"[u]$1[/u]"),o(//gi,"[u]"),o(/]*>/gi,"[quote]"),o(/<\/blockquote>/gi,"[/quote]"),o(/
                /gi,"\n"),o(//gi,"\n"),o(/
                /gi,"\n"),o(/

                /gi,""),o(/<\/p>/gi,"\n"),o(/ |\u00a0/gi," "),o(/"/gi,'"'),o(/</gi,"<"),o(/>/gi,">"),o(/&/gi,"&"),t}(o.content))})})}(); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/charmap/plugin.js b/component/pear/module/tinymce/tinymce/plugins/charmap/plugin.js deleted file mode 100644 index cceb2ec18ffbed225037c6beb3bdaff16cd74b6c..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/charmap/plugin.js +++ /dev/null @@ -1,1706 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -(function () { - 'use strict'; - - var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); - - var fireInsertCustomChar = function (editor, chr) { - return editor.fire('insertCustomChar', { chr: chr }); - }; - - var insertChar = function (editor, chr) { - var evtChr = fireInsertCustomChar(editor, chr).chr; - editor.execCommand('mceInsertContent', false, evtChr); - }; - - var noop = function () { - }; - var constant = function (value) { - return function () { - return value; - }; - }; - var never = constant(false); - var always = constant(true); - - var none = function () { - return NONE; - }; - var NONE = function () { - var eq = function (o) { - return o.isNone(); - }; - var call = function (thunk) { - return thunk(); - }; - var id = function (n) { - return n; - }; - var me = { - fold: function (n, _s) { - return n(); - }, - is: never, - isSome: never, - isNone: always, - getOr: id, - getOrThunk: call, - getOrDie: function (msg) { - throw new Error(msg || 'error: getOrDie called on none.'); - }, - getOrNull: constant(null), - getOrUndefined: constant(undefined), - or: id, - orThunk: call, - map: none, - each: noop, - bind: none, - exists: never, - forall: always, - filter: none, - equals: eq, - equals_: eq, - toArray: function () { - return []; - }, - toString: constant('none()') - }; - return me; - }(); - var some = function (a) { - var constant_a = constant(a); - var self = function () { - return me; - }; - var bind = function (f) { - return f(a); - }; - var me = { - fold: function (n, s) { - return s(a); - }, - is: function (v) { - return a === v; - }, - isSome: always, - isNone: never, - getOr: constant_a, - getOrThunk: constant_a, - getOrDie: constant_a, - getOrNull: constant_a, - getOrUndefined: constant_a, - or: self, - orThunk: self, - map: function (f) { - return some(f(a)); - }, - each: function (f) { - f(a); - }, - bind: bind, - exists: bind, - forall: bind, - filter: function (f) { - return f(a) ? me : NONE; - }, - toArray: function () { - return [a]; - }, - toString: function () { - return 'some(' + a + ')'; - }, - equals: function (o) { - return o.is(a); - }, - equals_: function (o, elementEq) { - return o.fold(never, function (b) { - return elementEq(a, b); - }); - } - }; - return me; - }; - var from = function (value) { - return value === null || value === undefined ? NONE : some(value); - }; - var Optional = { - some: some, - none: none, - from: from - }; - - var typeOf = function (x) { - var t = typeof x; - if (x === null) { - return 'null'; - } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) { - return 'array'; - } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) { - return 'string'; - } else { - return t; - } - }; - var isType = function (type) { - return function (value) { - return typeOf(value) === type; - }; - }; - var isArray = isType('array'); - - var nativePush = Array.prototype.push; - var map = function (xs, f) { - var len = xs.length; - var r = new Array(len); - for (var i = 0; i < len; i++) { - var x = xs[i]; - r[i] = f(x, i); - } - return r; - }; - var each = function (xs, f) { - for (var i = 0, len = xs.length; i < len; i++) { - var x = xs[i]; - f(x, i); - } - }; - var findUntil = function (xs, pred, until) { - for (var i = 0, len = xs.length; i < len; i++) { - var x = xs[i]; - if (pred(x, i)) { - return Optional.some(x); - } else if (until(x, i)) { - break; - } - } - return Optional.none(); - }; - var find = function (xs, pred) { - return findUntil(xs, pred, never); - }; - var flatten = function (xs) { - var r = []; - for (var i = 0, len = xs.length; i < len; ++i) { - if (!isArray(xs[i])) { - throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs); - } - nativePush.apply(r, xs[i]); - } - return r; - }; - var bind = function (xs, f) { - return flatten(map(xs, f)); - }; - - var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools'); - - var getCharMap = function (editor) { - return editor.getParam('charmap'); - }; - var getCharMapAppend = function (editor) { - return editor.getParam('charmap_append'); - }; - - var isArray$1 = global$1.isArray; - var UserDefined = 'User Defined'; - var getDefaultCharMap = function () { - return [ - { - name: 'Currency', - characters: [ - [ - 36, - 'dollar sign' - ], - [ - 162, - 'cent sign' - ], - [ - 8364, - 'euro sign' - ], - [ - 163, - 'pound sign' - ], - [ - 165, - 'yen sign' - ], - [ - 164, - 'currency sign' - ], - [ - 8352, - 'euro-currency sign' - ], - [ - 8353, - 'colon sign' - ], - [ - 8354, - 'cruzeiro sign' - ], - [ - 8355, - 'french franc sign' - ], - [ - 8356, - 'lira sign' - ], - [ - 8357, - 'mill sign' - ], - [ - 8358, - 'naira sign' - ], - [ - 8359, - 'peseta sign' - ], - [ - 8360, - 'rupee sign' - ], - [ - 8361, - 'won sign' - ], - [ - 8362, - 'new sheqel sign' - ], - [ - 8363, - 'dong sign' - ], - [ - 8365, - 'kip sign' - ], - [ - 8366, - 'tugrik sign' - ], - [ - 8367, - 'drachma sign' - ], - [ - 8368, - 'german penny symbol' - ], - [ - 8369, - 'peso sign' - ], - [ - 8370, - 'guarani sign' - ], - [ - 8371, - 'austral sign' - ], - [ - 8372, - 'hryvnia sign' - ], - [ - 8373, - 'cedi sign' - ], - [ - 8374, - 'livre tournois sign' - ], - [ - 8375, - 'spesmilo sign' - ], - [ - 8376, - 'tenge sign' - ], - [ - 8377, - 'indian rupee sign' - ], - [ - 8378, - 'turkish lira sign' - ], - [ - 8379, - 'nordic mark sign' - ], - [ - 8380, - 'manat sign' - ], - [ - 8381, - 'ruble sign' - ], - [ - 20870, - 'yen character' - ], - [ - 20803, - 'yuan character' - ], - [ - 22291, - 'yuan character, in hong kong and taiwan' - ], - [ - 22278, - 'yen/yuan character variant one' - ] - ] - }, - { - name: 'Text', - characters: [ - [ - 169, - 'copyright sign' - ], - [ - 174, - 'registered sign' - ], - [ - 8482, - 'trade mark sign' - ], - [ - 8240, - 'per mille sign' - ], - [ - 181, - 'micro sign' - ], - [ - 183, - 'middle dot' - ], - [ - 8226, - 'bullet' - ], - [ - 8230, - 'three dot leader' - ], - [ - 8242, - 'minutes / feet' - ], - [ - 8243, - 'seconds / inches' - ], - [ - 167, - 'section sign' - ], - [ - 182, - 'paragraph sign' - ], - [ - 223, - 'sharp s / ess-zed' - ] - ] - }, - { - name: 'Quotations', - characters: [ - [ - 8249, - 'single left-pointing angle quotation mark' - ], - [ - 8250, - 'single right-pointing angle quotation mark' - ], - [ - 171, - 'left pointing guillemet' - ], - [ - 187, - 'right pointing guillemet' - ], - [ - 8216, - 'left single quotation mark' - ], - [ - 8217, - 'right single quotation mark' - ], - [ - 8220, - 'left double quotation mark' - ], - [ - 8221, - 'right double quotation mark' - ], - [ - 8218, - 'single low-9 quotation mark' - ], - [ - 8222, - 'double low-9 quotation mark' - ], - [ - 60, - 'less-than sign' - ], - [ - 62, - 'greater-than sign' - ], - [ - 8804, - 'less-than or equal to' - ], - [ - 8805, - 'greater-than or equal to' - ], - [ - 8211, - 'en dash' - ], - [ - 8212, - 'em dash' - ], - [ - 175, - 'macron' - ], - [ - 8254, - 'overline' - ], - [ - 164, - 'currency sign' - ], - [ - 166, - 'broken bar' - ], - [ - 168, - 'diaeresis' - ], - [ - 161, - 'inverted exclamation mark' - ], - [ - 191, - 'turned question mark' - ], - [ - 710, - 'circumflex accent' - ], - [ - 732, - 'small tilde' - ], - [ - 176, - 'degree sign' - ], - [ - 8722, - 'minus sign' - ], - [ - 177, - 'plus-minus sign' - ], - [ - 247, - 'division sign' - ], - [ - 8260, - 'fraction slash' - ], - [ - 215, - 'multiplication sign' - ], - [ - 185, - 'superscript one' - ], - [ - 178, - 'superscript two' - ], - [ - 179, - 'superscript three' - ], - [ - 188, - 'fraction one quarter' - ], - [ - 189, - 'fraction one half' - ], - [ - 190, - 'fraction three quarters' - ] - ] - }, - { - name: 'Mathematical', - characters: [ - [ - 402, - 'function / florin' - ], - [ - 8747, - 'integral' - ], - [ - 8721, - 'n-ary sumation' - ], - [ - 8734, - 'infinity' - ], - [ - 8730, - 'square root' - ], - [ - 8764, - 'similar to' - ], - [ - 8773, - 'approximately equal to' - ], - [ - 8776, - 'almost equal to' - ], - [ - 8800, - 'not equal to' - ], - [ - 8801, - 'identical to' - ], - [ - 8712, - 'element of' - ], - [ - 8713, - 'not an element of' - ], - [ - 8715, - 'contains as member' - ], - [ - 8719, - 'n-ary product' - ], - [ - 8743, - 'logical and' - ], - [ - 8744, - 'logical or' - ], - [ - 172, - 'not sign' - ], - [ - 8745, - 'intersection' - ], - [ - 8746, - 'union' - ], - [ - 8706, - 'partial differential' - ], - [ - 8704, - 'for all' - ], - [ - 8707, - 'there exists' - ], - [ - 8709, - 'diameter' - ], - [ - 8711, - 'backward difference' - ], - [ - 8727, - 'asterisk operator' - ], - [ - 8733, - 'proportional to' - ], - [ - 8736, - 'angle' - ] - ] - }, - { - name: 'Extended Latin', - characters: [ - [ - 192, - 'A - grave' - ], - [ - 193, - 'A - acute' - ], - [ - 194, - 'A - circumflex' - ], - [ - 195, - 'A - tilde' - ], - [ - 196, - 'A - diaeresis' - ], - [ - 197, - 'A - ring above' - ], - [ - 256, - 'A - macron' - ], - [ - 198, - 'ligature AE' - ], - [ - 199, - 'C - cedilla' - ], - [ - 200, - 'E - grave' - ], - [ - 201, - 'E - acute' - ], - [ - 202, - 'E - circumflex' - ], - [ - 203, - 'E - diaeresis' - ], - [ - 274, - 'E - macron' - ], - [ - 204, - 'I - grave' - ], - [ - 205, - 'I - acute' - ], - [ - 206, - 'I - circumflex' - ], - [ - 207, - 'I - diaeresis' - ], - [ - 298, - 'I - macron' - ], - [ - 208, - 'ETH' - ], - [ - 209, - 'N - tilde' - ], - [ - 210, - 'O - grave' - ], - [ - 211, - 'O - acute' - ], - [ - 212, - 'O - circumflex' - ], - [ - 213, - 'O - tilde' - ], - [ - 214, - 'O - diaeresis' - ], - [ - 216, - 'O - slash' - ], - [ - 332, - 'O - macron' - ], - [ - 338, - 'ligature OE' - ], - [ - 352, - 'S - caron' - ], - [ - 217, - 'U - grave' - ], - [ - 218, - 'U - acute' - ], - [ - 219, - 'U - circumflex' - ], - [ - 220, - 'U - diaeresis' - ], - [ - 362, - 'U - macron' - ], - [ - 221, - 'Y - acute' - ], - [ - 376, - 'Y - diaeresis' - ], - [ - 562, - 'Y - macron' - ], - [ - 222, - 'THORN' - ], - [ - 224, - 'a - grave' - ], - [ - 225, - 'a - acute' - ], - [ - 226, - 'a - circumflex' - ], - [ - 227, - 'a - tilde' - ], - [ - 228, - 'a - diaeresis' - ], - [ - 229, - 'a - ring above' - ], - [ - 257, - 'a - macron' - ], - [ - 230, - 'ligature ae' - ], - [ - 231, - 'c - cedilla' - ], - [ - 232, - 'e - grave' - ], - [ - 233, - 'e - acute' - ], - [ - 234, - 'e - circumflex' - ], - [ - 235, - 'e - diaeresis' - ], - [ - 275, - 'e - macron' - ], - [ - 236, - 'i - grave' - ], - [ - 237, - 'i - acute' - ], - [ - 238, - 'i - circumflex' - ], - [ - 239, - 'i - diaeresis' - ], - [ - 299, - 'i - macron' - ], - [ - 240, - 'eth' - ], - [ - 241, - 'n - tilde' - ], - [ - 242, - 'o - grave' - ], - [ - 243, - 'o - acute' - ], - [ - 244, - 'o - circumflex' - ], - [ - 245, - 'o - tilde' - ], - [ - 246, - 'o - diaeresis' - ], - [ - 248, - 'o slash' - ], - [ - 333, - 'o macron' - ], - [ - 339, - 'ligature oe' - ], - [ - 353, - 's - caron' - ], - [ - 249, - 'u - grave' - ], - [ - 250, - 'u - acute' - ], - [ - 251, - 'u - circumflex' - ], - [ - 252, - 'u - diaeresis' - ], - [ - 363, - 'u - macron' - ], - [ - 253, - 'y - acute' - ], - [ - 254, - 'thorn' - ], - [ - 255, - 'y - diaeresis' - ], - [ - 563, - 'y - macron' - ], - [ - 913, - 'Alpha' - ], - [ - 914, - 'Beta' - ], - [ - 915, - 'Gamma' - ], - [ - 916, - 'Delta' - ], - [ - 917, - 'Epsilon' - ], - [ - 918, - 'Zeta' - ], - [ - 919, - 'Eta' - ], - [ - 920, - 'Theta' - ], - [ - 921, - 'Iota' - ], - [ - 922, - 'Kappa' - ], - [ - 923, - 'Lambda' - ], - [ - 924, - 'Mu' - ], - [ - 925, - 'Nu' - ], - [ - 926, - 'Xi' - ], - [ - 927, - 'Omicron' - ], - [ - 928, - 'Pi' - ], - [ - 929, - 'Rho' - ], - [ - 931, - 'Sigma' - ], - [ - 932, - 'Tau' - ], - [ - 933, - 'Upsilon' - ], - [ - 934, - 'Phi' - ], - [ - 935, - 'Chi' - ], - [ - 936, - 'Psi' - ], - [ - 937, - 'Omega' - ], - [ - 945, - 'alpha' - ], - [ - 946, - 'beta' - ], - [ - 947, - 'gamma' - ], - [ - 948, - 'delta' - ], - [ - 949, - 'epsilon' - ], - [ - 950, - 'zeta' - ], - [ - 951, - 'eta' - ], - [ - 952, - 'theta' - ], - [ - 953, - 'iota' - ], - [ - 954, - 'kappa' - ], - [ - 955, - 'lambda' - ], - [ - 956, - 'mu' - ], - [ - 957, - 'nu' - ], - [ - 958, - 'xi' - ], - [ - 959, - 'omicron' - ], - [ - 960, - 'pi' - ], - [ - 961, - 'rho' - ], - [ - 962, - 'final sigma' - ], - [ - 963, - 'sigma' - ], - [ - 964, - 'tau' - ], - [ - 965, - 'upsilon' - ], - [ - 966, - 'phi' - ], - [ - 967, - 'chi' - ], - [ - 968, - 'psi' - ], - [ - 969, - 'omega' - ] - ] - }, - { - name: 'Symbols', - characters: [ - [ - 8501, - 'alef symbol' - ], - [ - 982, - 'pi symbol' - ], - [ - 8476, - 'real part symbol' - ], - [ - 978, - 'upsilon - hook symbol' - ], - [ - 8472, - 'Weierstrass p' - ], - [ - 8465, - 'imaginary part' - ] - ] - }, - { - name: 'Arrows', - characters: [ - [ - 8592, - 'leftwards arrow' - ], - [ - 8593, - 'upwards arrow' - ], - [ - 8594, - 'rightwards arrow' - ], - [ - 8595, - 'downwards arrow' - ], - [ - 8596, - 'left right arrow' - ], - [ - 8629, - 'carriage return' - ], - [ - 8656, - 'leftwards double arrow' - ], - [ - 8657, - 'upwards double arrow' - ], - [ - 8658, - 'rightwards double arrow' - ], - [ - 8659, - 'downwards double arrow' - ], - [ - 8660, - 'left right double arrow' - ], - [ - 8756, - 'therefore' - ], - [ - 8834, - 'subset of' - ], - [ - 8835, - 'superset of' - ], - [ - 8836, - 'not a subset of' - ], - [ - 8838, - 'subset of or equal to' - ], - [ - 8839, - 'superset of or equal to' - ], - [ - 8853, - 'circled plus' - ], - [ - 8855, - 'circled times' - ], - [ - 8869, - 'perpendicular' - ], - [ - 8901, - 'dot operator' - ], - [ - 8968, - 'left ceiling' - ], - [ - 8969, - 'right ceiling' - ], - [ - 8970, - 'left floor' - ], - [ - 8971, - 'right floor' - ], - [ - 9001, - 'left-pointing angle bracket' - ], - [ - 9002, - 'right-pointing angle bracket' - ], - [ - 9674, - 'lozenge' - ], - [ - 9824, - 'black spade suit' - ], - [ - 9827, - 'black club suit' - ], - [ - 9829, - 'black heart suit' - ], - [ - 9830, - 'black diamond suit' - ], - [ - 8194, - 'en space' - ], - [ - 8195, - 'em space' - ], - [ - 8201, - 'thin space' - ], - [ - 8204, - 'zero width non-joiner' - ], - [ - 8205, - 'zero width joiner' - ], - [ - 8206, - 'left-to-right mark' - ], - [ - 8207, - 'right-to-left mark' - ] - ] - } - ]; - }; - var charmapFilter = function (charmap) { - return global$1.grep(charmap, function (item) { - return isArray$1(item) && item.length === 2; - }); - }; - var getCharsFromSetting = function (settingValue) { - if (isArray$1(settingValue)) { - return [].concat(charmapFilter(settingValue)); - } - if (typeof settingValue === 'function') { - return settingValue(); - } - return []; - }; - var extendCharMap = function (editor, charmap) { - var userCharMap = getCharMap(editor); - if (userCharMap) { - charmap = [{ - name: UserDefined, - characters: getCharsFromSetting(userCharMap) - }]; - } - var userCharMapAppend = getCharMapAppend(editor); - if (userCharMapAppend) { - var userDefinedGroup = global$1.grep(charmap, function (cg) { - return cg.name === UserDefined; - }); - if (userDefinedGroup.length) { - userDefinedGroup[0].characters = [].concat(userDefinedGroup[0].characters).concat(getCharsFromSetting(userCharMapAppend)); - return charmap; - } - return [].concat(charmap).concat({ - name: UserDefined, - characters: getCharsFromSetting(userCharMapAppend) - }); - } - return charmap; - }; - var getCharMap$1 = function (editor) { - var groups = extendCharMap(editor, getDefaultCharMap()); - return groups.length > 1 ? [{ - name: 'All', - characters: bind(groups, function (g) { - return g.characters; - }) - }].concat(groups) : groups; - }; - - var get = function (editor) { - var getCharMap = function () { - return getCharMap$1(editor); - }; - var insertChar$1 = function (chr) { - insertChar(editor, chr); - }; - return { - getCharMap: getCharMap, - insertChar: insertChar$1 - }; - }; - - var Cell = function (initial) { - var value = initial; - var get = function () { - return value; - }; - var set = function (v) { - value = v; - }; - return { - get: get, - set: set - }; - }; - - var last = function (fn, rate) { - var timer = null; - var cancel = function () { - if (timer !== null) { - clearTimeout(timer); - timer = null; - } - }; - var throttle = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - if (timer !== null) { - clearTimeout(timer); - } - timer = setTimeout(function () { - fn.apply(null, args); - timer = null; - }, rate); - }; - return { - cancel: cancel, - throttle: throttle - }; - }; - - var nativeFromCodePoint = String.fromCodePoint; - var contains = function (str, substr) { - return str.indexOf(substr) !== -1; - }; - var fromCodePoint = function () { - var codePoints = []; - for (var _i = 0; _i < arguments.length; _i++) { - codePoints[_i] = arguments[_i]; - } - if (nativeFromCodePoint) { - return nativeFromCodePoint.apply(void 0, codePoints); - } else { - var codeUnits = []; - var codeLen = 0; - var result = ''; - for (var index = 0, len = codePoints.length; index !== len; ++index) { - var codePoint = +codePoints[index]; - if (!(codePoint < 1114111 && codePoint >>> 0 === codePoint)) { - throw RangeError('Invalid code point: ' + codePoint); - } - if (codePoint <= 65535) { - codeLen = codeUnits.push(codePoint); - } else { - codePoint -= 65536; - codeLen = codeUnits.push((codePoint >> 10) + 55296, codePoint % 1024 + 56320); - } - if (codeLen >= 16383) { - result += String.fromCharCode.apply(null, codeUnits); - codeUnits.length = 0; - } - } - return result + String.fromCharCode.apply(null, codeUnits); - } - }; - - var charMatches = function (charCode, name, lowerCasePattern) { - if (contains(fromCodePoint(charCode).toLowerCase(), lowerCasePattern)) { - return true; - } else { - return contains(name.toLowerCase(), lowerCasePattern) || contains(name.toLowerCase().replace(/\s+/g, ''), lowerCasePattern); - } - }; - var scan = function (group, pattern) { - var matches = []; - var lowerCasePattern = pattern.toLowerCase(); - each(group.characters, function (g) { - if (charMatches(g[0], g[1], lowerCasePattern)) { - matches.push(g); - } - }); - return map(matches, function (m) { - return { - text: m[1], - value: fromCodePoint(m[0]), - icon: fromCodePoint(m[0]) - }; - }); - }; - - var patternName = 'pattern'; - var open = function (editor, charMap) { - var makeGroupItems = function () { - return [ - { - label: 'Search', - type: 'input', - name: patternName - }, - { - type: 'collection', - name: 'results' - } - ]; - }; - var makeTabs = function () { - return map(charMap, function (charGroup) { - return { - title: charGroup.name, - name: charGroup.name, - items: makeGroupItems() - }; - }); - }; - var makePanel = function () { - return { - type: 'panel', - items: makeGroupItems() - }; - }; - var makeTabPanel = function () { - return { - type: 'tabpanel', - tabs: makeTabs() - }; - }; - var currentTab = charMap.length === 1 ? Cell(UserDefined) : Cell('All'); - var scanAndSet = function (dialogApi, pattern) { - find(charMap, function (group) { - return group.name === currentTab.get(); - }).each(function (f) { - var items = scan(f, pattern); - dialogApi.setData({ results: items }); - }); - }; - var SEARCH_DELAY = 40; - var updateFilter = last(function (dialogApi) { - var pattern = dialogApi.getData().pattern; - scanAndSet(dialogApi, pattern); - }, SEARCH_DELAY); - var body = charMap.length === 1 ? makePanel() : makeTabPanel(); - var initialData = { - pattern: '', - results: scan(charMap[0], '') - }; - var bridgeSpec = { - title: 'Special Character', - size: 'normal', - body: body, - buttons: [{ - type: 'cancel', - name: 'close', - text: 'Close', - primary: true - }], - initialData: initialData, - onAction: function (api, details) { - if (details.name === 'results') { - insertChar(editor, details.value); - api.close(); - } - }, - onTabChange: function (dialogApi, details) { - currentTab.set(details.newTabName); - updateFilter.throttle(dialogApi); - }, - onChange: function (dialogApi, changeData) { - if (changeData.name === patternName) { - updateFilter.throttle(dialogApi); - } - } - }; - var dialogApi = editor.windowManager.open(bridgeSpec); - dialogApi.focus(patternName); - }; - - var register = function (editor, charMap) { - editor.addCommand('mceShowCharmap', function () { - open(editor, charMap); - }); - }; - - var global$2 = tinymce.util.Tools.resolve('tinymce.util.Promise'); - - var init = function (editor, all) { - editor.ui.registry.addAutocompleter('charmap', { - ch: ':', - columns: 'auto', - minChars: 2, - fetch: function (pattern, _maxResults) { - return new global$2(function (resolve, _reject) { - resolve(scan(all, pattern)); - }); - }, - onAction: function (autocompleteApi, rng, value) { - editor.selection.setRng(rng); - editor.insertContent(value); - autocompleteApi.hide(); - } - }); - }; - - var register$1 = function (editor) { - editor.ui.registry.addButton('charmap', { - icon: 'insert-character', - tooltip: 'Special character', - onAction: function () { - return editor.execCommand('mceShowCharmap'); - } - }); - editor.ui.registry.addMenuItem('charmap', { - icon: 'insert-character', - text: 'Special character...', - onAction: function () { - return editor.execCommand('mceShowCharmap'); - } - }); - }; - - function Plugin () { - global.add('charmap', function (editor) { - var charMap = getCharMap$1(editor); - register(editor, charMap); - register$1(editor); - init(editor, charMap[0]); - return get(editor); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/charmap/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/charmap/plugin.min.js deleted file mode 100644 index 3df46f29907ce0e27f7ceebe958fdc96932ce665..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/charmap/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var e,n,r,t,a=tinymce.util.Tools.resolve("tinymce.PluginManager"),s=function(e,n){var r,t=(r=n,e.fire("insertCustomChar",{chr:r}).chr);e.execCommand("mceInsertContent",!1,t)},i=function(e){return function(){return e}},o=i(!1),c=i(!0),u=function(){return l},l=(e=function(e){return e.isNone()},{fold:function(e,n){return e()},is:o,isSome:o,isNone:c,getOr:r=function(e){return e},getOrThunk:n=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(undefined),or:r,orThunk:n,map:u,each:function(){},bind:u,exists:o,forall:c,filter:u,equals:e,equals_:e,toArray:function(){return[]},toString:i("none()")}),g=function(r){var e=i(r),n=function(){return a},t=function(e){return e(r)},a={fold:function(e,n){return n(r)},is:function(e){return r===e},isSome:c,isNone:o,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:n,orThunk:n,map:function(e){return g(e(r))},each:function(e){e(r)},bind:t,exists:t,forall:t,filter:function(e){return e(r)?a:l},toArray:function(){return[r]},toString:function(){return"some("+r+")"},equals:function(e){return e.is(r)},equals_:function(e,n){return e.fold(o,function(e){return n(r,e)})}};return a},m={some:g,none:u,from:function(e){return null===e||e===undefined?l:g(e)}},f=(t="array",function(e){return r=typeof(n=e),(null===n?"null":"object"==r&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==r&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":r)===t;var n,r}),h=Array.prototype.push,p=function(e,n){for(var r=e.length,t=new Array(r),a=0;a>>0===o))throw RangeError("Invalid code point: "+o);16383<=(o<=65535?r.push(o):(o-=65536,r.push(55296+(o>>10),o%1024+56320)))&&(t+=String.fromCharCode.apply(null,r),r.length=0)}return t+String.fromCharCode.apply(null,r)},S=function(e,n){var a=[],i=n.toLowerCase();return function(e,n){for(var r=0,t=e.length;r= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none(); - }; - var head = function (xs) { - return get(xs, 0); - }; - - var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); - - function isCodeSample(elm) { - return elm && elm.nodeName === 'PRE' && elm.className.indexOf('language-') !== -1; - } - function trimArg(predicateFn) { - return function (arg1, arg2) { - return predicateFn(arg2); - }; - } - - var Global = typeof window !== 'undefined' ? window : Function('return this;')(); - - var exports$1 = {}, module = { exports: exports$1 }, global$2 = {}; - (function (define, exports, module, require) { - var oldprism = window.Prism; - window.Prism = { manual: true }; - (function (f) { - if (typeof exports === 'object' && typeof module !== 'undefined') { - module.exports = f(); - } else if (typeof define === 'function' && define.amd) { - define([], f); - } else { - var g; - if (typeof window !== 'undefined') { - g = window; - } else if (typeof global$2 !== 'undefined') { - g = global$2; - } else if (typeof self !== 'undefined') { - g = self; - } else { - g = this; - } - g.EphoxContactWrapper = f(); - } - }(function () { - return function () { - function r(e, n, t) { - function o(i, f) { - if (!n[i]) { - if (!e[i]) { - var c = 'function' == typeof require && require; - if (!f && c) - return c(i, !0); - if (u) - return u(i, !0); - var a = new Error('Cannot find module \'' + i + '\''); - throw a.code = 'MODULE_NOT_FOUND', a; - } - var p = n[i] = { exports: {} }; - e[i][0].call(p.exports, function (r) { - var n = e[i][1][r]; - return o(n || r); - }, p, p.exports, r, e, n, t); - } - return n[i].exports; - } - for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++) - o(t[i]); - return o; - } - return r; - }()({ - 1: [ - function (require, module, exports) { - Prism.languages.c = Prism.languages.extend('clike', { - 'comment': { - pattern: /\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/, - greedy: true - }, - 'class-name': { - pattern: /(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+/, - lookbehind: true - }, - 'keyword': /\b(?:__attribute__|_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/, - 'function': /[a-z_]\w*(?=\s*\()/i, - 'operator': />>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/, - 'number': /(?:\b0x(?:[\da-f]+\.?[\da-f]*|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)[ful]*/i - }); - Prism.languages.insertBefore('c', 'string', { - 'macro': { - pattern: /(^\s*)#\s*[a-z]+(?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im, - lookbehind: true, - greedy: true, - alias: 'property', - inside: { - 'string': [ - { - pattern: /^(#\s*include\s*)<[^>]+>/, - lookbehind: true - }, - Prism.languages.c['string'] - ], - 'comment': Prism.languages.c['comment'], - 'directive': { - pattern: /^(#\s*)[a-z]+/, - lookbehind: true, - alias: 'keyword' - }, - 'directive-hash': /^#/, - 'punctuation': /##|\\(?=[\r\n])/, - 'expression': { - pattern: /\S[\s\S]*/, - inside: Prism.languages.c - } - } - }, - 'constant': /\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/ - }); - delete Prism.languages.c['boolean']; - }, - {} - ], - 2: [ - function (require, module, exports) { - Prism.languages.clike = { - 'comment': [ - { - pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/, - lookbehind: true - }, - { - pattern: /(^|[^\\:])\/\/.*/, - lookbehind: true, - greedy: true - } - ], - 'string': { - pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, - greedy: true - }, - 'class-name': { - pattern: /(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i, - lookbehind: true, - inside: { 'punctuation': /[.\\]/ } - }, - 'keyword': /\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/, - 'boolean': /\b(?:true|false)\b/, - 'function': /\w+(?=\()/, - 'number': /\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i, - 'operator': /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/, - 'punctuation': /[{}[\];(),.:]/ - }; - }, - {} - ], - 3: [ - function (require, module, exports) { - (function (global) { - (function () { - var _self = typeof window !== 'undefined' ? window : typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope ? self : {}; - var Prism = function (_self) { - var lang = /\blang(?:uage)?-([\w-]+)\b/i; - var uniqueId = 0; - var _ = { - manual: _self.Prism && _self.Prism.manual, - disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler, - util: { - encode: function encode(tokens) { - if (tokens instanceof Token) { - return new Token(tokens.type, encode(tokens.content), tokens.alias); - } else if (Array.isArray(tokens)) { - return tokens.map(encode); - } else { - return tokens.replace(/&/g, '&').replace(/' + env.content + ''; - }; - function matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) { - for (var token in grammar) { - if (!grammar.hasOwnProperty(token) || !grammar[token]) { - continue; - } - var patterns = grammar[token]; - patterns = Array.isArray(patterns) ? patterns : [patterns]; - for (var j = 0; j < patterns.length; ++j) { - if (rematch && rematch.cause == token + ',' + j) { - return; - } - var patternObj = patterns[j], inside = patternObj.inside, lookbehind = !!patternObj.lookbehind, greedy = !!patternObj.greedy, lookbehindLength = 0, alias = patternObj.alias; - if (greedy && !patternObj.pattern.global) { - var flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0]; - patternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g'); - } - var pattern = patternObj.pattern || patternObj; - for (var currentNode = startNode.next, pos = startPos; currentNode !== tokenList.tail; pos += currentNode.value.length, currentNode = currentNode.next) { - if (rematch && pos >= rematch.reach) { - break; - } - var str = currentNode.value; - if (tokenList.length > text.length) { - return; - } - if (str instanceof Token) { - continue; - } - var removeCount = 1; - if (greedy && currentNode != tokenList.tail.prev) { - pattern.lastIndex = pos; - var match = pattern.exec(text); - if (!match) { - break; - } - var from = match.index + (lookbehind && match[1] ? match[1].length : 0); - var to = match.index + match[0].length; - var p = pos; - p += currentNode.value.length; - while (from >= p) { - currentNode = currentNode.next; - p += currentNode.value.length; - } - p -= currentNode.value.length; - pos = p; - if (currentNode.value instanceof Token) { - continue; - } - for (var k = currentNode; k !== tokenList.tail && (p < to || typeof k.value === 'string'); k = k.next) { - removeCount++; - p += k.value.length; - } - removeCount--; - str = text.slice(pos, p); - match.index -= pos; - } else { - pattern.lastIndex = 0; - var match = pattern.exec(str); - } - if (!match) { - continue; - } - if (lookbehind) { - lookbehindLength = match[1] ? match[1].length : 0; - } - var from = match.index + lookbehindLength, matchStr = match[0].slice(lookbehindLength), to = from + matchStr.length, before = str.slice(0, from), after = str.slice(to); - var reach = pos + str.length; - if (rematch && reach > rematch.reach) { - rematch.reach = reach; - } - var removeFrom = currentNode.prev; - if (before) { - removeFrom = addAfter(tokenList, removeFrom, before); - pos += before.length; - } - removeRange(tokenList, removeFrom, removeCount); - var wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr); - currentNode = addAfter(tokenList, removeFrom, wrapped); - if (after) { - addAfter(tokenList, currentNode, after); - } - if (removeCount > 1) { - matchGrammar(text, tokenList, grammar, currentNode.prev, pos, { - cause: token + ',' + j, - reach: reach - }); - } - } - } - } - } - function LinkedList() { - var head = { - value: null, - prev: null, - next: null - }; - var tail = { - value: null, - prev: head, - next: null - }; - head.next = tail; - this.head = head; - this.tail = tail; - this.length = 0; - } - function addAfter(list, node, value) { - var next = node.next; - var newNode = { - value: value, - prev: node, - next: next - }; - node.next = newNode; - next.prev = newNode; - list.length++; - return newNode; - } - function removeRange(list, node, count) { - var next = node.next; - for (var i = 0; i < count && next !== list.tail; i++) { - next = next.next; - } - node.next = next; - next.prev = node; - list.length -= i; - } - function toArray(list) { - var array = []; - var node = list.head.next; - while (node !== list.tail) { - array.push(node.value); - node = node.next; - } - return array; - } - if (!_self.document) { - if (!_self.addEventListener) { - return _; - } - if (!_.disableWorkerMessageHandler) { - _self.addEventListener('message', function (evt) { - var message = JSON.parse(evt.data), lang = message.language, code = message.code, immediateClose = message.immediateClose; - _self.postMessage(_.highlight(code, _.languages[lang], lang)); - if (immediateClose) { - _self.close(); - } - }, false); - } - return _; - } - var script = _.util.currentScript(); - if (script) { - _.filename = script.src; - if (script.hasAttribute('data-manual')) { - _.manual = true; - } - } - function highlightAutomaticallyCallback() { - if (!_.manual) { - _.highlightAll(); - } - } - if (!_.manual) { - var readyState = document.readyState; - if (readyState === 'loading' || readyState === 'interactive' && script && script.defer) { - document.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback); - } else { - if (window.requestAnimationFrame) { - window.requestAnimationFrame(highlightAutomaticallyCallback); - } else { - window.setTimeout(highlightAutomaticallyCallback, 16); - } - } - } - return _; - }(_self); - if (typeof module !== 'undefined' && module.exports) { - module.exports = Prism; - } - if (typeof global !== 'undefined') { - global.Prism = Prism; - } - }.call(this)); - }.call(this, typeof global$2 !== 'undefined' ? global$2 : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {})); - }, - {} - ], - 4: [ - function (require, module, exports) { - (function (Prism) { - var keyword = /\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/; - Prism.languages.cpp = Prism.languages.extend('c', { - 'class-name': [ - { - pattern: RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g, function () { - return keyword.source; - })), - lookbehind: true - }, - /\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/, - /\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i, - /\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/ - ], - 'keyword': keyword, - 'number': { - pattern: /(?:\b0b[01']+|\b0x(?:[\da-f']+\.?[\da-f']*|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+\.?[\d']*|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]*/i, - greedy: true - }, - 'operator': />>=?|<<=?|->|([-+&|:])\1|[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/, - 'boolean': /\b(?:true|false)\b/ - }); - Prism.languages.insertBefore('cpp', 'string', { - 'raw-string': { - pattern: /R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/, - alias: 'string', - greedy: true - } - }); - Prism.languages.insertBefore('cpp', 'class-name', { - 'base-clause': { - pattern: /(\b(?:class|struct)\s+\w+\s*:\s*)(?:[^;{}"'])+?(?=\s*[;{])/, - lookbehind: true, - greedy: true, - inside: Prism.languages.extend('cpp', {}) - } - }); - Prism.languages.insertBefore('inside', 'operator', { 'class-name': /\b[a-z_]\w*\b(?!\s*::)/i }, Prism.languages.cpp['base-clause']); - }(Prism)); - }, - {} - ], - 5: [ - function (require, module, exports) { - (function (Prism) { - function replace(pattern, replacements) { - return pattern.replace(/<<(\d+)>>/g, function (m, index) { - return '(?:' + replacements[+index] + ')'; - }); - } - function re(pattern, replacements, flags) { - return RegExp(replace(pattern, replacements), flags || ''); - } - function nested(pattern, depthLog2) { - for (var i = 0; i < depthLog2; i++) { - pattern = pattern.replace(/<>/g, function () { - return '(?:' + pattern + ')'; - }); - } - return pattern.replace(/<>/g, '[^\\s\\S]'); - } - var keywordKinds = { - type: 'bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void', - typeDeclaration: 'class enum interface struct', - contextual: 'add alias and ascending async await by descending from get global group into join let nameof not notnull on or orderby partial remove select set unmanaged value when where where', - other: 'abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield' - }; - function keywordsToPattern(words) { - return '\\b(?:' + words.trim().replace(/ /g, '|') + ')\\b'; - } - var typeDeclarationKeywords = keywordsToPattern(keywordKinds.typeDeclaration); - var keywords = RegExp(keywordsToPattern(keywordKinds.type + ' ' + keywordKinds.typeDeclaration + ' ' + keywordKinds.contextual + ' ' + keywordKinds.other)); - var nonTypeKeywords = keywordsToPattern(keywordKinds.typeDeclaration + ' ' + keywordKinds.contextual + ' ' + keywordKinds.other); - var nonContextualKeywords = keywordsToPattern(keywordKinds.type + ' ' + keywordKinds.typeDeclaration + ' ' + keywordKinds.other); - var generic = nested(/<(?:[^<>;=+\-*/%&|^]|<>)*>/.source, 2); - var nestedRound = nested(/\((?:[^()]|<>)*\)/.source, 2); - var name = /@?\b[A-Za-z_]\w*\b/.source; - var genericName = replace(/<<0>>(?:\s*<<1>>)?/.source, [ - name, - generic - ]); - var identifier = replace(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source, [ - nonTypeKeywords, - genericName - ]); - var array = /\[\s*(?:,\s*)*\]/.source; - var typeExpressionWithoutTuple = replace(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source, [ - identifier, - array - ]); - var tupleElement = replace(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source, [ - generic, - nestedRound, - array - ]); - var tuple = replace(/\(<<0>>+(?:,<<0>>+)+\)/.source, [tupleElement]); - var typeExpression = replace(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source, [ - tuple, - identifier, - array - ]); - var typeInside = { - 'keyword': keywords, - 'punctuation': /[<>()?,.:[\]]/ - }; - var character = /'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source; - var regularString = /"(?:\\.|[^\\"\r\n])*"/.source; - var verbatimString = /@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source; - Prism.languages.csharp = Prism.languages.extend('clike', { - 'string': [ - { - pattern: re(/(^|[^$\\])<<0>>/.source, [verbatimString]), - lookbehind: true, - greedy: true - }, - { - pattern: re(/(^|[^@$\\])<<0>>/.source, [regularString]), - lookbehind: true, - greedy: true - }, - { - pattern: RegExp(character), - greedy: true, - alias: 'character' - } - ], - 'class-name': [ - { - pattern: re(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source, [identifier]), - lookbehind: true, - inside: typeInside - }, - { - pattern: re(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source, [ - name, - typeExpression - ]), - lookbehind: true, - inside: typeInside - }, - { - pattern: re(/(\busing\s+)<<0>>(?=\s*=)/.source, [name]), - lookbehind: true - }, - { - pattern: re(/(\b<<0>>\s+)<<1>>/.source, [ - typeDeclarationKeywords, - genericName - ]), - lookbehind: true, - inside: typeInside - }, - { - pattern: re(/(\bcatch\s*\(\s*)<<0>>/.source, [identifier]), - lookbehind: true, - inside: typeInside - }, - { - pattern: re(/(\bwhere\s+)<<0>>/.source, [name]), - lookbehind: true - }, - { - pattern: re(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source, [typeExpressionWithoutTuple]), - lookbehind: true, - inside: typeInside - }, - { - pattern: re(/\b<<0>>(?=\s+(?!<<1>>)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source, [ - typeExpression, - nonContextualKeywords, - name - ]), - inside: typeInside - } - ], - 'keyword': keywords, - 'number': /(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:ul|lu|[dflmu])?\b/i, - 'operator': />>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/, - 'punctuation': /\?\.?|::|[{}[\];(),.:]/ - }); - Prism.languages.insertBefore('csharp', 'number', { - 'range': { - pattern: /\.\./, - alias: 'operator' - } - }); - Prism.languages.insertBefore('csharp', 'punctuation', { - 'named-parameter': { - pattern: re(/([(,]\s*)<<0>>(?=\s*:)/.source, [name]), - lookbehind: true, - alias: 'punctuation' - } - }); - Prism.languages.insertBefore('csharp', 'class-name', { - 'namespace': { - pattern: re(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source, [name]), - lookbehind: true, - inside: { 'punctuation': /\./ } - }, - 'type-expression': { - pattern: re(/(\b(?:default|typeof|sizeof)\s*\(\s*)(?:[^()\s]|\s(?!\s*\))|<<0>>)*(?=\s*\))/.source, [nestedRound]), - lookbehind: true, - alias: 'class-name', - inside: typeInside - }, - 'return-type': { - pattern: re(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source, [ - typeExpression, - identifier - ]), - inside: typeInside, - alias: 'class-name' - }, - 'constructor-invocation': { - pattern: re(/(\bnew\s+)<<0>>(?=\s*[[({])/.source, [typeExpression]), - lookbehind: true, - inside: typeInside, - alias: 'class-name' - }, - 'generic-method': { - pattern: re(/<<0>>\s*<<1>>(?=\s*\()/.source, [ - name, - generic - ]), - inside: { - 'function': re(/^<<0>>/.source, [name]), - 'generic': { - pattern: RegExp(generic), - alias: 'class-name', - inside: typeInside - } - } - }, - 'type-list': { - pattern: re(/\b((?:<<0>>\s+<<1>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>)(?:\s*,\s*(?:<<3>>|<<4>>))*(?=\s*(?:where|[{;]|=>|$))/.source, [ - typeDeclarationKeywords, - genericName, - name, - typeExpression, - keywords.source - ]), - lookbehind: true, - inside: { - 'keyword': keywords, - 'class-name': { - pattern: RegExp(typeExpression), - greedy: true, - inside: typeInside - }, - 'punctuation': /,/ - } - }, - 'preprocessor': { - pattern: /(^\s*)#.*/m, - lookbehind: true, - alias: 'property', - inside: { - 'directive': { - pattern: /(\s*#)\b(?:define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/, - lookbehind: true, - alias: 'keyword' - } - } - } - }); - var regularStringOrCharacter = regularString + '|' + character; - var regularStringCharacterOrComment = replace(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source, [regularStringOrCharacter]); - var roundExpression = nested(replace(/[^"'/()]|<<0>>|\(<>*\)/.source, [regularStringCharacterOrComment]), 2); - var attrTarget = /\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source; - var attr = replace(/<<0>>(?:\s*\(<<1>>*\))?/.source, [ - identifier, - roundExpression - ]); - Prism.languages.insertBefore('csharp', 'class-name', { - 'attribute': { - pattern: re(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source, [ - attrTarget, - attr - ]), - lookbehind: true, - greedy: true, - inside: { - 'target': { - pattern: re(/^<<0>>(?=\s*:)/.source, [attrTarget]), - alias: 'keyword' - }, - 'attribute-arguments': { - pattern: re(/\(<<0>>*\)/.source, [roundExpression]), - inside: Prism.languages.csharp - }, - 'class-name': { - pattern: RegExp(identifier), - inside: { 'punctuation': /\./ } - }, - 'punctuation': /[:,]/ - } - } - }); - var formatString = /:[^}\r\n]+/.source; - var mInterpolationRound = nested(replace(/[^"'/()]|<<0>>|\(<>*\)/.source, [regularStringCharacterOrComment]), 2); - var mInterpolation = replace(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source, [ - mInterpolationRound, - formatString - ]); - var sInterpolationRound = nested(replace(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<>*\)/.source, [regularStringOrCharacter]), 2); - var sInterpolation = replace(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source, [ - sInterpolationRound, - formatString - ]); - function createInterpolationInside(interpolation, interpolationRound) { - return { - 'interpolation': { - pattern: re(/((?:^|[^{])(?:\{\{)*)<<0>>/.source, [interpolation]), - lookbehind: true, - inside: { - 'format-string': { - pattern: re(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source, [ - interpolationRound, - formatString - ]), - lookbehind: true, - inside: { 'punctuation': /^:/ } - }, - 'punctuation': /^\{|\}$/, - 'expression': { - pattern: /[\s\S]+/, - alias: 'language-csharp', - inside: Prism.languages.csharp - } - } - }, - 'string': /[\s\S]+/ - }; - } - Prism.languages.insertBefore('csharp', 'string', { - 'interpolation-string': [ - { - pattern: re(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source, [mInterpolation]), - lookbehind: true, - greedy: true, - inside: createInterpolationInside(mInterpolation, mInterpolationRound) - }, - { - pattern: re(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source, [sInterpolation]), - lookbehind: true, - greedy: true, - inside: createInterpolationInside(sInterpolation, sInterpolationRound) - } - ] - }); - }(Prism)); - Prism.languages.dotnet = Prism.languages.cs = Prism.languages.csharp; - }, - {} - ], - 6: [ - function (require, module, exports) { - (function (Prism) { - var string = /("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/; - Prism.languages.css = { - 'comment': /\/\*[\s\S]*?\*\//, - 'atrule': { - pattern: /@[\w-]+[\s\S]*?(?:;|(?=\s*\{))/, - inside: { - 'rule': /^@[\w-]+/, - 'selector-function-argument': { - pattern: /(\bselector\s*\((?!\s*\))\s*)(?:[^()]|\((?:[^()]|\([^()]*\))*\))+?(?=\s*\))/, - lookbehind: true, - alias: 'selector' - }, - 'keyword': { - pattern: /(^|[^\w-])(?:and|not|only|or)(?![\w-])/, - lookbehind: true - } - } - }, - 'url': { - pattern: RegExp('\\burl\\((?:' + string.source + '|' + /(?:[^\\\r\n()"']|\\[\s\S])*/.source + ')\\)', 'i'), - greedy: true, - inside: { - 'function': /^url/i, - 'punctuation': /^\(|\)$/, - 'string': { - pattern: RegExp('^' + string.source + '$'), - alias: 'url' - } - } - }, - 'selector': RegExp('[^{}\\s](?:[^{};"\']|' + string.source + ')*?(?=\\s*\\{)'), - 'string': { - pattern: string, - greedy: true - }, - 'property': /[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i, - 'important': /!important\b/i, - 'function': /[-a-z0-9]+(?=\()/i, - 'punctuation': /[(){};:,]/ - }; - Prism.languages.css['atrule'].inside.rest = Prism.languages.css; - var markup = Prism.languages.markup; - if (markup) { - markup.tag.addInlined('style', 'css'); - Prism.languages.insertBefore('inside', 'attr-value', { - 'style-attr': { - pattern: /\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i, - inside: { - 'attr-name': { - pattern: /^\s*style/i, - inside: markup.tag.inside - }, - 'punctuation': /^\s*=\s*['"]|['"]\s*$/, - 'attr-value': { - pattern: /.+/i, - inside: Prism.languages.css - } - }, - alias: 'language-css' - } - }, markup.tag); - } - }(Prism)); - }, - {} - ], - 7: [ - function (require, module, exports) { - (function (Prism) { - var keywords = /\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|null|open|opens|package|private|protected|provides|public|record|requires|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/; - var className = /\b[A-Z](?:\w*[a-z]\w*)?\b/; - Prism.languages.java = Prism.languages.extend('clike', { - 'class-name': [ - className, - /\b[A-Z]\w*(?=\s+\w+\s*[;,=())])/ - ], - 'keyword': keywords, - 'function': [ - Prism.languages.clike.function, - { - pattern: /(\:\:)[a-z_]\w*/, - lookbehind: true - } - ], - 'number': /\b0b[01][01_]*L?\b|\b0x[\da-f_]*\.?[\da-f_p+-]+\b|(?:\b\d[\d_]*\.?[\d_]*|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i, - 'operator': { - pattern: /(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m, - lookbehind: true - } - }); - Prism.languages.insertBefore('java', 'string', { - 'triple-quoted-string': { - pattern: /"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/, - greedy: true, - alias: 'string' - } - }); - Prism.languages.insertBefore('java', 'class-name', { - 'annotation': { - alias: 'punctuation', - pattern: /(^|[^.])@\w+/, - lookbehind: true - }, - 'namespace': { - pattern: RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g, function () { - return keywords.source; - })), - lookbehind: true, - inside: { 'punctuation': /\./ } - }, - 'generics': { - pattern: /<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/, - inside: { - 'class-name': className, - 'keyword': keywords, - 'punctuation': /[<>(),.:]/, - 'operator': /[?&|]/ - } - } - }); - }(Prism)); - }, - {} - ], - 8: [ - function (require, module, exports) { - Prism.languages.javascript = Prism.languages.extend('clike', { - 'class-name': [ - Prism.languages.clike['class-name'], - { - pattern: /(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/, - lookbehind: true - } - ], - 'keyword': [ - { - pattern: /((?:^|})\s*)(?:catch|finally)\b/, - lookbehind: true - }, - { - pattern: /(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|(?:get|set)(?=\s*[\[$\w\xA0-\uFFFF])|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/, - lookbehind: true - } - ], - 'number': /\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/, - 'function': /#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/, - 'operator': /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/ - }); - Prism.languages.javascript['class-name'][0].pattern = /(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/; - Prism.languages.insertBefore('javascript', 'keyword', { - 'regex': { - pattern: /((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/, - lookbehind: true, - greedy: true, - inside: { - 'regex-source': { - pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/, - lookbehind: true, - alias: 'language-regex', - inside: Prism.languages.regex - }, - 'regex-flags': /[a-z]+$/, - 'regex-delimiter': /^\/|\/$/ - } - }, - 'function-variable': { - pattern: /#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/, - alias: 'function' - }, - 'parameter': [ - { - pattern: /(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/, - lookbehind: true, - inside: Prism.languages.javascript - }, - { - pattern: /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i, - inside: Prism.languages.javascript - }, - { - pattern: /(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/, - lookbehind: true, - inside: Prism.languages.javascript - }, - { - pattern: /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/, - lookbehind: true, - inside: Prism.languages.javascript - } - ], - 'constant': /\b[A-Z](?:[A-Z_]|\dx?)*\b/ - }); - Prism.languages.insertBefore('javascript', 'string', { - 'template-string': { - pattern: /`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/, - greedy: true, - inside: { - 'template-punctuation': { - pattern: /^`|`$/, - alias: 'string' - }, - 'interpolation': { - pattern: /((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/, - lookbehind: true, - inside: { - 'interpolation-punctuation': { - pattern: /^\${|}$/, - alias: 'punctuation' - }, - rest: Prism.languages.javascript - } - }, - 'string': /[\s\S]+/ - } - } - }); - if (Prism.languages.markup) { - Prism.languages.markup.tag.addInlined('script', 'javascript'); - } - Prism.languages.js = Prism.languages.javascript; - }, - {} - ], - 9: [ - function (require, module, exports) { - (function (Prism) { - function getPlaceholder(language, index) { - return '___' + language.toUpperCase() + index + '___'; - } - Object.defineProperties(Prism.languages['markup-templating'] = {}, { - buildPlaceholders: { - value: function (env, language, placeholderPattern, replaceFilter) { - if (env.language !== language) { - return; - } - var tokenStack = env.tokenStack = []; - env.code = env.code.replace(placeholderPattern, function (match) { - if (typeof replaceFilter === 'function' && !replaceFilter(match)) { - return match; - } - var i = tokenStack.length; - var placeholder; - while (env.code.indexOf(placeholder = getPlaceholder(language, i)) !== -1) - ++i; - tokenStack[i] = match; - return placeholder; - }); - env.grammar = Prism.languages.markup; - } - }, - tokenizePlaceholders: { - value: function (env, language) { - if (env.language !== language || !env.tokenStack) { - return; - } - env.grammar = Prism.languages[language]; - var j = 0; - var keys = Object.keys(env.tokenStack); - function walkTokens(tokens) { - for (var i = 0; i < tokens.length; i++) { - if (j >= keys.length) { - break; - } - var token = tokens[i]; - if (typeof token === 'string' || token.content && typeof token.content === 'string') { - var k = keys[j]; - var t = env.tokenStack[k]; - var s = typeof token === 'string' ? token : token.content; - var placeholder = getPlaceholder(language, k); - var index = s.indexOf(placeholder); - if (index > -1) { - ++j; - var before = s.substring(0, index); - var middle = new Prism.Token(language, Prism.tokenize(t, env.grammar), 'language-' + language, t); - var after = s.substring(index + placeholder.length); - var replacement = []; - if (before) { - replacement.push.apply(replacement, walkTokens([before])); - } - replacement.push(middle); - if (after) { - replacement.push.apply(replacement, walkTokens([after])); - } - if (typeof token === 'string') { - tokens.splice.apply(tokens, [ - i, - 1 - ].concat(replacement)); - } else { - token.content = replacement; - } - } - } else if (token.content) { - walkTokens(token.content); - } - } - return tokens; - } - walkTokens(env.tokens); - } - } - }); - }(Prism)); - }, - {} - ], - 10: [ - function (require, module, exports) { - Prism.languages.markup = { - 'comment': //, - 'prolog': /<\?[\s\S]+?\?>/, - 'doctype': { - pattern: /"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i, - greedy: true, - inside: { - 'internal-subset': { - pattern: /(\[)[\s\S]+(?=\]>$)/, - lookbehind: true, - greedy: true, - inside: null - }, - 'string': { - pattern: /"[^"]*"|'[^']*'/, - greedy: true - }, - 'punctuation': /^$|[[\]]/, - 'doctype-tag': /^DOCTYPE/, - 'name': /[^\s<>'"]+/ - } - }, - 'cdata': //i, - 'tag': { - pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/, - greedy: true, - inside: { - 'tag': { - pattern: /^<\/?[^\s>\/]+/, - inside: { - 'punctuation': /^<\/?/, - 'namespace': /^[^\s>\/:]+:/ - } - }, - 'attr-value': { - pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/, - inside: { - 'punctuation': [ - { - pattern: /^=/, - alias: 'attr-equals' - }, - /"|'/ - ] - } - }, - 'punctuation': /\/?>/, - 'attr-name': { - pattern: /[^\s>\/]+/, - inside: { 'namespace': /^[^\s>\/:]+:/ } - } - } - }, - 'entity': [ - { - pattern: /&[\da-z]{1,8};/i, - alias: 'named-entity' - }, - /&#x?[\da-f]{1,8};/i - ] - }; - Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] = Prism.languages.markup['entity']; - Prism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup; - Prism.hooks.add('wrap', function (env) { - if (env.type === 'entity') { - env.attributes['title'] = env.content.replace(/&/, '&'); - } - }); - Object.defineProperty(Prism.languages.markup.tag, 'addInlined', { - value: function addInlined(tagName, lang) { - var includedCdataInside = {}; - includedCdataInside['language-' + lang] = { - pattern: /(^$)/i, - lookbehind: true, - inside: Prism.languages[lang] - }; - includedCdataInside['cdata'] = /^$/i; - var inside = { - 'included-cdata': { - pattern: //i, - inside: includedCdataInside - } - }; - inside['language-' + lang] = { - pattern: /[\s\S]+/, - inside: Prism.languages[lang] - }; - var def = {}; - def[tagName] = { - pattern: RegExp(/(<__[\s\S]*?>)(?:))*\]\]>|(?!)/.source.replace(/__/g, function () { - return tagName; - }), 'i'), - lookbehind: true, - greedy: true, - inside: inside - }; - Prism.languages.insertBefore('markup', 'cdata', def); - } - }); - Prism.languages.html = Prism.languages.markup; - Prism.languages.mathml = Prism.languages.markup; - Prism.languages.svg = Prism.languages.markup; - Prism.languages.xml = Prism.languages.extend('markup', {}); - Prism.languages.ssml = Prism.languages.xml; - Prism.languages.atom = Prism.languages.xml; - Prism.languages.rss = Prism.languages.xml; - }, - {} - ], - 11: [ - function (require, module, exports) { - (function (Prism) { - Prism.languages.php = Prism.languages.extend('clike', { - 'keyword': /\b(?:__halt_compiler|abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exit|extends|final|finally|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|new|or|parent|print|private|protected|public|require|require_once|return|static|switch|throw|trait|try|unset|use|var|while|xor|yield)\b/i, - 'boolean': { - pattern: /\b(?:false|true)\b/i, - alias: 'constant' - }, - 'constant': [ - /\b[A-Z_][A-Z0-9_]*\b/, - /\b(?:null)\b/i - ], - 'comment': { - pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/, - lookbehind: true - } - }); - Prism.languages.insertBefore('php', 'string', { - 'shell-comment': { - pattern: /(^|[^\\])#.*/, - lookbehind: true, - alias: 'comment' - } - }); - Prism.languages.insertBefore('php', 'comment', { - 'delimiter': { - pattern: /\?>$|^<\?(?:php(?=\s)|=)?/i, - alias: 'important' - } - }); - Prism.languages.insertBefore('php', 'keyword', { - 'variable': /\$+(?:\w+\b|(?={))/i, - 'package': { - pattern: /(\\|namespace\s+|use\s+)[\w\\]+/, - lookbehind: true, - inside: { punctuation: /\\/ } - } - }); - Prism.languages.insertBefore('php', 'operator', { - 'property': { - pattern: /(->)[\w]+/, - lookbehind: true - } - }); - var string_interpolation = { - pattern: /{\$(?:{(?:{[^{}]+}|[^{}]+)}|[^{}])+}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)*)/, - lookbehind: true, - inside: Prism.languages.php - }; - Prism.languages.insertBefore('php', 'string', { - 'nowdoc-string': { - pattern: /<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/, - greedy: true, - alias: 'string', - inside: { - 'delimiter': { - pattern: /^<<<'[^']+'|[a-z_]\w*;$/i, - alias: 'symbol', - inside: { 'punctuation': /^<<<'?|[';]$/ } - } - } - }, - 'heredoc-string': { - pattern: /<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i, - greedy: true, - alias: 'string', - inside: { - 'delimiter': { - pattern: /^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i, - alias: 'symbol', - inside: { 'punctuation': /^<<<"?|[";]$/ } - }, - 'interpolation': string_interpolation - } - }, - 'single-quoted-string': { - pattern: /'(?:\\[\s\S]|[^\\'])*'/, - greedy: true, - alias: 'string' - }, - 'double-quoted-string': { - pattern: /"(?:\\[\s\S]|[^\\"])*"/, - greedy: true, - alias: 'string', - inside: { 'interpolation': string_interpolation } - } - }); - delete Prism.languages.php['string']; - Prism.hooks.add('before-tokenize', function (env) { - if (!/<\?/.test(env.code)) { - return; - } - var phpPattern = /<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#)(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|\/\*[\s\S]*?(?:\*\/|$))*?(?:\?>|$)/ig; - Prism.languages['markup-templating'].buildPlaceholders(env, 'php', phpPattern); - }); - Prism.hooks.add('after-tokenize', function (env) { - Prism.languages['markup-templating'].tokenizePlaceholders(env, 'php'); - }); - }(Prism)); - }, - {} - ], - 12: [ - function (require, module, exports) { - Prism.languages.python = { - 'comment': { - pattern: /(^|[^\\])#.*/, - lookbehind: true - }, - 'string-interpolation': { - pattern: /(?:f|rf|fr)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i, - greedy: true, - inside: { - 'interpolation': { - pattern: /((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/, - lookbehind: true, - inside: { - 'format-spec': { - pattern: /(:)[^:(){}]+(?=}$)/, - lookbehind: true - }, - 'conversion-option': { - pattern: /![sra](?=[:}]$)/, - alias: 'punctuation' - }, - rest: null - } - }, - 'string': /[\s\S]+/ - } - }, - 'triple-quoted-string': { - pattern: /(?:[rub]|rb|br)?("""|''')[\s\S]*?\1/i, - greedy: true, - alias: 'string' - }, - 'string': { - pattern: /(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i, - greedy: true - }, - 'function': { - pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g, - lookbehind: true - }, - 'class-name': { - pattern: /(\bclass\s+)\w+/i, - lookbehind: true - }, - 'decorator': { - pattern: /(^\s*)@\w+(?:\.\w+)*/im, - lookbehind: true, - alias: [ - 'annotation', - 'punctuation' - ], - inside: { 'punctuation': /\./ } - }, - 'keyword': /\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/, - 'builtin': /\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/, - 'boolean': /\b(?:True|False|None)\b/, - 'number': /(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i, - 'operator': /[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/, - 'punctuation': /[{}[\];(),.:]/ - }; - Prism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = Prism.languages.python; - Prism.languages.py = Prism.languages.python; - }, - {} - ], - 13: [ - function (require, module, exports) { - (function (Prism) { - Prism.languages.ruby = Prism.languages.extend('clike', { - 'comment': [ - /#.*/, - { - pattern: /^=begin\s[\s\S]*?^=end/m, - greedy: true - } - ], - 'class-name': { - pattern: /(\b(?:class)\s+|\bcatch\s+\()[\w.\\]+/i, - lookbehind: true, - inside: { 'punctuation': /[.\\]/ } - }, - 'keyword': /\b(?:alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|protected|private|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/ - }); - var interpolation = { - pattern: /#\{[^}]+\}/, - inside: { - 'delimiter': { - pattern: /^#\{|\}$/, - alias: 'tag' - }, - rest: Prism.languages.ruby - } - }; - delete Prism.languages.ruby.function; - Prism.languages.insertBefore('ruby', 'keyword', { - 'regex': [ - { - pattern: RegExp(/%r/.source + '(?:' + [ - /([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1[gim]{0,3}/.source, - /\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/.source, - /\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/.source, - /\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/.source, - /<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/.source - ].join('|') + ')'), - greedy: true, - inside: { 'interpolation': interpolation } - }, - { - pattern: /(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[gim]{0,3}(?=\s*(?:$|[\r\n,.;})]))/, - lookbehind: true, - greedy: true - } - ], - 'variable': /[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/, - 'symbol': { - pattern: /(^|[^:]):[a-zA-Z_]\w*(?:[?!]|\b)/, - lookbehind: true - }, - 'method-definition': { - pattern: /(\bdef\s+)[\w.]+/, - lookbehind: true, - inside: { - 'function': /\w+$/, - rest: Prism.languages.ruby - } - } - }); - Prism.languages.insertBefore('ruby', 'number', { - 'builtin': /\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|Fixnum|Float|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/, - 'constant': /\b[A-Z]\w*(?:[?!]|\b)/ - }); - Prism.languages.ruby.string = [ - { - pattern: RegExp(/%[qQiIwWxs]?/.source + '(?:' + [ - /([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source, - /\((?:[^()\\]|\\[\s\S])*\)/.source, - /\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/.source, - /\[(?:[^\[\]\\]|\\[\s\S])*\]/.source, - /<(?:[^<>\\]|\\[\s\S])*>/.source - ].join('|') + ')'), - greedy: true, - inside: { 'interpolation': interpolation } - }, - { - pattern: /("|')(?:#\{[^}]+\}|\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, - greedy: true, - inside: { 'interpolation': interpolation } - } - ]; - Prism.languages.rb = Prism.languages.ruby; - }(Prism)); - }, - {} - ], - 14: [ - function (require, module, exports) { - var Prism = require('prismjs/components/prism-core'); - require('prismjs/components/prism-clike'); - require('prismjs/components/prism-markup-templating'); - require('prismjs/components/prism-c'); - require('prismjs/components/prism-cpp'); - require('prismjs/components/prism-csharp'); - require('prismjs/components/prism-css'); - require('prismjs/components/prism-java'); - require('prismjs/components/prism-javascript'); - require('prismjs/components/prism-markup'); - require('prismjs/components/prism-php'); - require('prismjs/components/prism-python'); - require('prismjs/components/prism-ruby'); - module.exports = { boltExport: Prism }; - }, - { - 'prismjs/components/prism-c': 1, - 'prismjs/components/prism-clike': 2, - 'prismjs/components/prism-core': 3, - 'prismjs/components/prism-cpp': 4, - 'prismjs/components/prism-csharp': 5, - 'prismjs/components/prism-css': 6, - 'prismjs/components/prism-java': 7, - 'prismjs/components/prism-javascript': 8, - 'prismjs/components/prism-markup': 10, - 'prismjs/components/prism-markup-templating': 9, - 'prismjs/components/prism-php': 11, - 'prismjs/components/prism-python': 12, - 'prismjs/components/prism-ruby': 13 - } - ] - }, {}, [14])(14); - })); - var prism = window.Prism; - window.Prism = oldprism; - return prism; - }(undefined, exports$1, module, undefined)); - var Prism$1 = module.exports.boltExport; - - var getLanguages = function (editor) { - return editor.getParam('codesample_languages'); - }; - var useGlobalPrismJS = function (editor) { - return editor.getParam('codesample_global_prismjs', false, 'boolean'); - }; - - var get$1 = function (editor) { - return Global.Prism && useGlobalPrismJS(editor) ? Global.Prism : Prism$1; - }; - - var getSelectedCodeSample = function (editor) { - var node = editor.selection ? editor.selection.getNode() : null; - if (isCodeSample(node)) { - return Optional.some(node); - } - return Optional.none(); - }; - var insertCodeSample = function (editor, language, code) { - editor.undoManager.transact(function () { - var node = getSelectedCodeSample(editor); - code = global$1.DOM.encode(code); - return node.fold(function () { - editor.insertContent('

                ' + code + '
                '); - editor.selection.select(editor.$('#__new').removeAttr('id')[0]); - }, function (n) { - editor.dom.setAttrib(n, 'class', 'language-' + language); - n.innerHTML = code; - get$1(editor).highlightElement(n); - editor.selection.select(n); - }); - }); - }; - var getCurrentCode = function (editor) { - var node = getSelectedCodeSample(editor); - return node.fold(function () { - return ''; - }, function (n) { - return n.textContent; - }); - }; - - var getLanguages$1 = function (editor) { - var defaultLanguages = [ - { - text: 'HTML/XML', - value: 'markup' - }, - { - text: 'JavaScript', - value: 'javascript' - }, - { - text: 'CSS', - value: 'css' - }, - { - text: 'PHP', - value: 'php' - }, - { - text: 'Ruby', - value: 'ruby' - }, - { - text: 'Python', - value: 'python' - }, - { - text: 'Java', - value: 'java' - }, - { - text: 'C', - value: 'c' - }, - { - text: 'C#', - value: 'csharp' - }, - { - text: 'C++', - value: 'cpp' - } - ]; - var customLanguages = getLanguages(editor); - return customLanguages ? customLanguages : defaultLanguages; - }; - var getCurrentLanguage = function (editor, fallback) { - var node = getSelectedCodeSample(editor); - return node.fold(function () { - return fallback; - }, function (n) { - var matches = n.className.match(/language-(\w+)/); - return matches ? matches[1] : fallback; - }); - }; - - var open = function (editor) { - var languages = getLanguages$1(editor); - var defaultLanguage = head(languages).fold(function () { - return ''; - }, function (l) { - return l.value; - }); - var currentLanguage = getCurrentLanguage(editor, defaultLanguage); - var currentCode = getCurrentCode(editor); - editor.windowManager.open({ - title: 'Insert/Edit Code Sample', - size: 'large', - body: { - type: 'panel', - items: [ - { - type: 'selectbox', - name: 'language', - label: 'Language', - items: languages - }, - { - type: 'textarea', - name: 'code', - label: 'Code view' - } - ] - }, - buttons: [ - { - type: 'cancel', - name: 'cancel', - text: 'Cancel' - }, - { - type: 'submit', - name: 'save', - text: 'Save', - primary: true - } - ], - initialData: { - language: currentLanguage, - code: currentCode - }, - onSubmit: function (api) { - var data = api.getData(); - insertCodeSample(editor, data.language, data.code); - api.close(); - } - }); - }; - - var register = function (editor) { - editor.addCommand('codesample', function () { - var node = editor.selection.getNode(); - if (editor.selection.isCollapsed() || isCodeSample(node)) { - open(editor); - } else { - editor.formatter.toggle('code'); - } - }); - }; - - var setup = function (editor) { - var $ = editor.$; - editor.on('PreProcess', function (e) { - $('pre[contenteditable=false]', e.node).filter(trimArg(isCodeSample)).each(function (idx, elm) { - var $elm = $(elm), code = elm.textContent; - $elm.attr('class', $.trim($elm.attr('class'))); - $elm.removeAttr('contentEditable'); - $elm.empty().append($('').each(function () { - this.textContent = code; - })); - }); - }); - editor.on('SetContent', function () { - var unprocessedCodeSamples = $('pre').filter(trimArg(isCodeSample)).filter(function (idx, elm) { - return elm.contentEditable !== 'false'; - }); - if (unprocessedCodeSamples.length) { - editor.undoManager.transact(function () { - unprocessedCodeSamples.each(function (idx, elm) { - $(elm).find('br').each(function (idx, elm) { - elm.parentNode.replaceChild(editor.getDoc().createTextNode('\n'), elm); - }); - elm.contentEditable = 'false'; - elm.innerHTML = editor.dom.encode(elm.textContent); - get$1(editor).highlightElement(elm); - elm.className = $.trim(elm.className); - }); - }); - } - }); - }; - - var isCodeSampleSelection = function (editor) { - var node = editor.selection.getStart(); - return editor.dom.is(node, 'pre[class*="language-"]'); - }; - var register$1 = function (editor) { - editor.ui.registry.addToggleButton('codesample', { - icon: 'code-sample', - tooltip: 'Insert/edit code sample', - onAction: function () { - return open(editor); - }, - onSetup: function (api) { - var nodeChangeHandler = function () { - api.setActive(isCodeSampleSelection(editor)); - }; - editor.on('NodeChange', nodeChangeHandler); - return function () { - return editor.off('NodeChange', nodeChangeHandler); - }; - } - }); - editor.ui.registry.addMenuItem('codesample', { - text: 'Code sample...', - icon: 'code-sample', - onAction: function () { - return open(editor); - } - }); - }; - - function Plugin () { - global.add('codesample', function (editor) { - setup(editor); - register$1(editor); - register(editor); - editor.on('dblclick', function (ev) { - if (isCodeSample(ev.target)) { - open(editor); - } - }); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/codesample/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/codesample/plugin.min.js deleted file mode 100644 index 53f78f8a74bbee469a2368a0f07afc4c94ffc996..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/codesample/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var e,n,t,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),s=function(e){return function(){return e}},i=s(!1),o=s(!0),a=function(){return l},l=(e=function(e){return e.isNone()},{fold:function(e,n){return e()},is:i,isSome:i,isNone:o,getOr:t=function(e){return e},getOrThunk:n=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:s(null),getOrUndefined:s(undefined),or:t,orThunk:n,map:a,each:function(){},bind:a,exists:i,forall:o,filter:a,equals:e,equals_:e,toArray:function(){return[]},toString:s("none()")}),u=function(t){var e=s(t),n=function(){return a},r=function(e){return e(t)},a={fold:function(e,n){return n(t)},is:function(e){return t===e},isSome:o,isNone:i,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:n,orThunk:n,map:function(e){return u(e(t))},each:function(e){e(t)},bind:r,exists:r,forall:r,filter:function(e){return e(t)?a:l},toArray:function(){return[t]},toString:function(){return"some("+t+")"},equals:function(e){return e.is(t)},equals_:function(e,n){return e.fold(i,function(e){return n(t,e)})}};return a},c={some:u,none:a,from:function(e){return null===e||e===undefined?l:u(e)}},p=function(e){return n=e,(t=0)<=t&&t>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/,number:/(?:\b0x(?:[\da-f]+\.?[\da-f]*|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)[ful]*/i}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+(?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],comment:Prism.languages.c.comment,directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete Prism.languages.c["boolean"]},{}],2:[function(e,n,t){Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(?:true|false)\b/,"function":/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}},{}],3:[function(e,t,n){(function(n){(function(){var e=function(u){var c=/\blang(?:uage)?-([\w-]+)\b/i,n=0,O={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function a(e){return e instanceof N?new N(e.type,a(e.content),e.alias):Array.isArray(e)?e.map(a):e.replace(/&/g,"&").replace(/=s.reach);y+=b.value.length,b=b.next){var v=b.value;if(n.length>e.length)return;if(!(v instanceof N)){var w,k,x,_,P,F,A=1;if(g&&b!=n.tail.prev){h.lastIndex=y;var S=h.exec(e);if(!S)break;var $=S.index+(d&&S[1]?S[1].length:0),j=S.index+S[0].length,E=y;for(E+=b.value.length;E<=$;)b=b.next,E+=b.value.length;if(E-=b.value.length,y=E,b.value instanceof N)continue;for(var z=b;z!==n.tail&&(Es.reach&&(s.reach=_),P=b.prev,k&&(P=B(n,P,k),y+=k.length),T(n,P,A),F=new N(i,p?O.tokenize(w,p):w,f,w),b=B(n,P,F),x&&B(n,b,x),1"+r.content+""},!u.document)return u.addEventListener&&(O.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,r=n.code,a=n.immediateClose;u.postMessage(O.highlight(r,O.languages[t],t)),a&&u.close()},!1)),O;var e,t=O.util.currentScript();function r(){O.manual||O.highlightAll()}return t&&(O.filename=t.src,t.hasAttribute("data-manual")&&(O.manual=!0)),O.manual||("loading"===(e=document.readyState)||"interactive"===e&&t&&t.defer?document.addEventListener("DOMContentLoaded",r):window.requestAnimationFrame?window.requestAnimationFrame(r):window.setTimeout(r,16)),O}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});void 0!==t&&t.exports&&(t.exports=e),void 0!==n&&(n.Prism=e)}).call(this)}).call(this,void 0!==y?y:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,n,t){var r,a;r=Prism,a=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,r.languages.cpp=r.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,function(){return a.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:a,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+\.?[\da-f']*|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+\.?[\d']*|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]*/i,greedy:!0},operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,"boolean":/\b(?:true|false)\b/}),r.languages.insertBefore("cpp","string",{"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),r.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)(?:[^;{}"'])+?(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:r.languages.extend("cpp",{})}}),r.languages.insertBefore("inside","operator",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},r.languages.cpp["base-clause"])},{}],5:[function(e,n,t){!function(t){function r(e,t){return e.replace(/<<(\d+)>>/g,function(e,n){return"(?:"+t[+n]+")"})}function a(e,n,t){return RegExp(r(e,n),t||"")}function e(e,n){for(var t=0;t>/g,function(){return"(?:"+e+")"});return e.replace(/<>/g,"[^\\s\\S]")}var n="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",s="class enum interface struct",i="add alias and ascending async await by descending from get global group into join let nameof not notnull on or orderby partial remove select set unmanaged value when where where",o="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var u=l(s),c=RegExp(l(n+" "+s+" "+i+" "+o)),p=l(s+" "+i+" "+o),d=l(n+" "+s+" "+o),g=e(/<(?:[^<>;=+\-*/%&|^]|<>)*>/.source,2),m=e(/\((?:[^()]|<>)*\)/.source,2),f=/@?\b[A-Za-z_]\w*\b/.source,h=r(/<<0>>(?:\s*<<1>>)?/.source,[f,g]),b=r(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[p,h]),y=/\[\s*(?:,\s*)*\]/.source,v=r(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[b,y]),w=r(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[g,m,y]),k=r(/\(<<0>>+(?:,<<0>>+)+\)/.source,[w]),x=r(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[k,b,y]),_={keyword:c,punctuation:/[<>()?,.:[\]]/},P=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,F=/"(?:\\.|[^\\"\r\n])*"/.source,A=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;t.languages.csharp=t.languages.extend("clike",{string:[{pattern:a(/(^|[^$\\])<<0>>/.source,[A]),lookbehind:!0,greedy:!0},{pattern:a(/(^|[^@$\\])<<0>>/.source,[F]),lookbehind:!0,greedy:!0},{pattern:RegExp(P),greedy:!0,alias:"character"}],"class-name":[{pattern:a(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[b]),lookbehind:!0,inside:_},{pattern:a(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[f,x]),lookbehind:!0,inside:_},{pattern:a(/(\busing\s+)<<0>>(?=\s*=)/.source,[f]),lookbehind:!0},{pattern:a(/(\b<<0>>\s+)<<1>>/.source,[u,h]),lookbehind:!0,inside:_},{pattern:a(/(\bcatch\s*\(\s*)<<0>>/.source,[b]),lookbehind:!0,inside:_},{pattern:a(/(\bwhere\s+)<<0>>/.source,[f]),lookbehind:!0},{pattern:a(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[v]),lookbehind:!0,inside:_},{pattern:a(/\b<<0>>(?=\s+(?!<<1>>)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[x,d,f]),inside:_}],keyword:c,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:ul|lu|[dflmu])?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),t.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),t.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:a(/([(,]\s*)<<0>>(?=\s*:)/.source,[f]),lookbehind:!0,alias:"punctuation"}}),t.languages.insertBefore("csharp","class-name",{namespace:{pattern:a(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[f]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:a(/(\b(?:default|typeof|sizeof)\s*\(\s*)(?:[^()\s]|\s(?!\s*\))|<<0>>)*(?=\s*\))/.source,[m]),lookbehind:!0,alias:"class-name",inside:_},"return-type":{pattern:a(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[x,b]),inside:_,alias:"class-name"},"constructor-invocation":{pattern:a(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[x]),lookbehind:!0,inside:_,alias:"class-name"},"generic-method":{pattern:a(/<<0>>\s*<<1>>(?=\s*\()/.source,[f,g]),inside:{"function":a(/^<<0>>/.source,[f]),generic:{pattern:RegExp(g),alias:"class-name",inside:_}}},"type-list":{pattern:a(/\b((?:<<0>>\s+<<1>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>)(?:\s*,\s*(?:<<3>>|<<4>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[u,h,f,x,c.source]),lookbehind:!0,inside:{keyword:c,"class-name":{pattern:RegExp(x),greedy:!0,inside:_},punctuation:/,/}},preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(\s*#)\b(?:define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var S=F+"|"+P,$=r(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[S]),j=e(r(/[^"'/()]|<<0>>|\(<>*\)/.source,[$]),2),E=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,z=r(/<<0>>(?:\s*\(<<1>>*\))?/.source,[b,j]);t.languages.insertBefore("csharp","class-name",{attribute:{pattern:a(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[E,z]),lookbehind:!0,greedy:!0,inside:{target:{pattern:a(/^<<0>>(?=\s*:)/.source,[E]),alias:"keyword"},"attribute-arguments":{pattern:a(/\(<<0>>*\)/.source,[j]),inside:t.languages.csharp},"class-name":{pattern:RegExp(b),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var C=/:[^}\r\n]+/.source,O=e(r(/[^"'/()]|<<0>>|\(<>*\)/.source,[$]),2),N=r(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[O,C]),B=e(r(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<>*\)/.source,[S]),2),T=r(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[B,C]);function D(e,n){return{interpolation:{pattern:a(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[e]),lookbehind:!0,inside:{"format-string":{pattern:a(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[n,C]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:t.languages.csharp}}},string:/[\s\S]+/}}t.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:a(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[N]),lookbehind:!0,greedy:!0,inside:D(N,O)},{pattern:a(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[T]),lookbehind:!0,greedy:!0,inside:D(T,B)}]})}(Prism),Prism.languages.dotnet=Prism.languages.cs=Prism.languages.csharp},{}],6:[function(e,n,t){!function(e){var n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+[\s\S]*?(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\((?!\s*\))\s*)(?:[^()]|\((?:[^()]|\([^()]*\))*\))+?(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+n.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{"function":/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+n.source+"$"),alias:"url"}}},selector:RegExp("[^{}\\s](?:[^{};\"']|"+n.source+")*?(?=\\s*\\{)"),string:{pattern:n,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var t=e.languages.markup;t&&(t.tag.addInlined("style","css"),e.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:t.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:e.languages.css}},alias:"language-css"}},t.tag))}(Prism)},{}],7:[function(e,n,t){var r,a,s;r=Prism,a=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|null|open|opens|package|private|protected|provides|public|record|requires|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,s=/\b[A-Z](?:\w*[a-z]\w*)?\b/,r.languages.java=r.languages.extend("clike",{"class-name":[s,/\b[A-Z]\w*(?=\s+\w+\s*[;,=())])/],keyword:a,"function":[r.languages.clike["function"],{pattern:/(\:\:)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x[\da-f_]*\.?[\da-f_p+-]+\b|(?:\b\d[\d_]*\.?[\d_]*|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),r.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"}}),r.languages.insertBefore("java","class-name",{annotation:{alias:"punctuation",pattern:/(^|[^.])@\w+/,lookbehind:!0},namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g,function(){return a.source})),lookbehind:!0,inside:{punctuation:/\./}},generics:{pattern:/<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,inside:{"class-name":s,keyword:a,punctuation:/[<>(),.:]/,operator:/[?&|]/}}})},{}],8:[function(e,n,t){Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|(?:get|set)(?=\s*[\[$\w\xA0-\uFFFF])|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,"function":/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-flags":/[a-z]+$/,"regex-delimiter":/^\/|\/$/}},"function-variable":{pattern:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.js=Prism.languages.javascript},{}],9:[function(e,n,t){function b(e,n){return"___"+e.toUpperCase()+n+"___"}var y;y=Prism,Object.defineProperties(y.languages["markup-templating"]={},{buildPlaceholders:{value:function(r,a,e,s){var i;r.language===a&&(i=r.tokenStack=[],r.code=r.code.replace(e,function(e){if("function"==typeof s&&!s(e))return e;for(var n,t=i.length;-1!==r.code.indexOf(n=b(a,t));)++t;return i[t]=e,n}),r.grammar=y.languages.markup)}},tokenizePlaceholders:{value:function(d,g){var m,f;d.language===g&&d.tokenStack&&(d.grammar=y.languages[g],m=0,f=Object.keys(d.tokenStack),function h(e){for(var n=0;n=f.length);n++){var t,r,a,s,i,o,l,u,c,p=e[n];"string"==typeof p||p.content&&"string"==typeof p.content?(t=f[m],r=d.tokenStack[t],a="string"==typeof p?p:p.content,s=b(g,t),-1<(i=a.indexOf(s))&&(++m,o=a.substring(0,i),l=new y.Token(g,y.tokenize(r,d.grammar),"language-"+g,r),u=a.substring(i+s.length),c=[],o&&c.push.apply(c,h([o])),c.push(l),u&&c.push.apply(c,h([u])),"string"==typeof p?e.splice.apply(e,[n,1].concat(c)):p.content=c)):p.content&&h(p.content)}return e}(d.tokens))}}})},{}],10:[function(e,n,t){Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/,name:/[^\s<>'"]+/}},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(e,n){var t={};t["language-"+n]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[n]},t.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:t}};r["language-"+n]={pattern:/[\s\S]+/,inside:Prism.languages[n]};var a={};a[e]={pattern:RegExp(/(<__[\s\S]*?>)(?:))*\]\]>|(?!)/.source.replace(/__/g,function(){return e}),"i"),lookbehind:!0,greedy:!0,inside:r},Prism.languages.insertBefore("markup","cdata",a)}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml},{}],11:[function(e,n,t){!function(n){n.languages.php=n.languages.extend("clike",{keyword:/\b(?:__halt_compiler|abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exit|extends|final|finally|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|new|or|parent|print|private|protected|public|require|require_once|return|static|switch|throw|trait|try|unset|use|var|while|xor|yield)\b/i,"boolean":{pattern:/\b(?:false|true)\b/i,alias:"constant"},constant:[/\b[A-Z_][A-Z0-9_]*\b/,/\b(?:null)\b/i],comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0}}),n.languages.insertBefore("php","string",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),n.languages.insertBefore("php","comment",{delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"}}),n.languages.insertBefore("php","keyword",{variable:/\$+(?:\w+\b|(?={))/i,"package":{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),n.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}});var e={pattern:/{\$(?:{(?:{[^{}]+}|[^{}]+)}|[^{}])+}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)*)/,lookbehind:!0,inside:n.languages.php};n.languages.insertBefore("php","string",{"nowdoc-string":{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,greedy:!0,alias:"string",inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},"heredoc-string":{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,greedy:!0,alias:"string",inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:e}},"single-quoted-string":{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0,alias:"string"},"double-quoted-string":{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,alias:"string",inside:{interpolation:e}}}),delete n.languages.php.string,n.hooks.add("before-tokenize",function(e){/<\?/.test(e.code)&&n.languages["markup-templating"].buildPlaceholders(e,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#)(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|\/\*[\s\S]*?(?:\*\/|$))*?(?:\?>|$)/gi)}),n.hooks.add("after-tokenize",function(e){n.languages["markup-templating"].tokenizePlaceholders(e,"php")})}(Prism)},{}],12:[function(e,n,t){Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},"function":{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/im,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,"boolean":/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python},{}],13:[function(e,n,t){!function(e){e.languages.ruby=e.languages.extend("clike",{comment:[/#.*/,{pattern:/^=begin\s[\s\S]*?^=end/m,greedy:!0}],"class-name":{pattern:/(\b(?:class)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|protected|private|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/});var n={pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"tag"},rest:e.languages.ruby}};delete e.languages.ruby["function"],e.languages.insertBefore("ruby","keyword",{regex:[{pattern:RegExp(/%r/.source+"(?:"+[/([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1[gim]{0,3}/.source,/\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/.source,/\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/.source,/\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/.source,/<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/.source].join("|")+")"),greedy:!0,inside:{interpolation:n}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[gim]{0,3}(?=\s*(?:$|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:{pattern:/(^|[^:]):[a-zA-Z_]\w*(?:[?!]|\b)/,lookbehind:!0},"method-definition":{pattern:/(\bdef\s+)[\w.]+/,lookbehind:!0,inside:{"function":/\w+$/,rest:e.languages.ruby}}}),e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|Fixnum|Float|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z]\w*(?:[?!]|\b)/}),e.languages.ruby.string=[{pattern:RegExp(/%[qQiIwWxs]?/.source+"(?:"+[/([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S])*\)/.source,/\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S])*\]/.source,/<(?:[^<>\\]|\\[\s\S])*>/.source].join("|")+")"),greedy:!0,inside:{interpolation:n}},{pattern:/("|')(?:#\{[^}]+\}|\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{interpolation:n}}],e.languages.rb=e.languages.ruby}(Prism)},{}],14:[function(e,n,t){var r=e("prismjs/components/prism-core");e("prismjs/components/prism-clike"),e("prismjs/components/prism-markup-templating"),e("prismjs/components/prism-c"),e("prismjs/components/prism-cpp"),e("prismjs/components/prism-csharp"),e("prismjs/components/prism-css"),e("prismjs/components/prism-java"),e("prismjs/components/prism-javascript"),e("prismjs/components/prism-markup"),e("prismjs/components/prism-php"),e("prismjs/components/prism-python"),e("prismjs/components/prism-ruby"),n.exports={boltExport:r}},{"prismjs/components/prism-c":1,"prismjs/components/prism-clike":2,"prismjs/components/prism-core":3,"prismjs/components/prism-cpp":4,"prismjs/components/prism-csharp":5,"prismjs/components/prism-css":6,"prismjs/components/prism-java":7,"prismjs/components/prism-javascript":8,"prismjs/components/prism-markup":10,"prismjs/components/prism-markup-templating":9,"prismjs/components/prism-php":11,"prismjs/components/prism-python":12,"prismjs/components/prism-ruby":13}]},{},[14])(14)});var a=window.Prism;window.Prism=e}(undefined,h,b,undefined);var v=b.exports.boltExport,w=function(e){return f.Prism&&e.getParam("codesample_global_prismjs",!1,"boolean")?f.Prism:v},k=function(e){var n=e.selection?e.selection.getNode():null;return g(n)?c.some(n):c.none()},x=function(s){var t,e=s.getParam("codesample_languages")||[{text:"HTML/XML",value:"markup"},{text:"JavaScript",value:"javascript"},{text:"CSS",value:"css"},{text:"PHP",value:"php"},{text:"Ruby",value:"ruby"},{text:"Python",value:"python"},{text:"Java",value:"java"},{text:"C",value:"c"},{text:"C#",value:"csharp"},{text:"C++",value:"cpp"}],n=p(e).fold(function(){return""},function(e){return e.value}),r=(t=n,k(s).fold(function(){return t},function(e){var n=e.className.match(/language-(\w+)/);return n?n[1]:t})),a=k(s).fold(function(){return""},function(e){return e.textContent});s.windowManager.open({title:"Insert/Edit Code Sample",size:"large",body:{type:"panel",items:[{type:"selectbox",name:"language",label:"Language",items:e},{type:"textarea",name:"code",label:"Code view"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{language:r,code:a},onSubmit:function(e){var n,t,r,a=e.getData();n=s,t=a.language,r=a.code,n.undoManager.transact(function(){var e=k(n);return r=d.DOM.encode(r),e.fold(function(){n.insertContent('
                '+r+"
                "),n.selection.select(n.$("#__new").removeAttr("id")[0])},function(e){n.dom.setAttrib(e,"class","language-"+t),e.innerHTML=r,w(n).highlightElement(e),n.selection.select(e)})}),e.close()}})},_=function(r){r.ui.registry.addToggleButton("codesample",{icon:"code-sample",tooltip:"Insert/edit code sample",onAction:function(){return x(r)},onSetup:function(t){var e=function(){var e,n;t.setActive((n=(e=r).selection.getStart(),e.dom.is(n,'pre[class*="language-"]')))};return r.on("NodeChange",e),function(){return r.off("NodeChange",e)}}}),r.ui.registry.addMenuItem("codesample",{text:"Code sample...",icon:"code-sample",onAction:function(){return x(r)}})};r.add("codesample",function(n){var t,a,r;a=(t=n).$,t.on("PreProcess",function(e){a("pre[contenteditable=false]",e.node).filter(m(g)).each(function(e,n){var t=a(n),r=n.textContent;t.attr("class",a.trim(t.attr("class"))),t.removeAttr("contentEditable"),t.empty().append(a("").each(function(){this.textContent=r}))})}),t.on("SetContent",function(){var e=a("pre").filter(m(g)).filter(function(e,n){return"false"!==n.contentEditable});e.length&&t.undoManager.transact(function(){e.each(function(e,n){a(n).find("br").each(function(e,n){n.parentNode.replaceChild(t.getDoc().createTextNode("\n"),n)}),n.contentEditable="false",n.innerHTML=t.dom.encode(n.textContent),w(t).highlightElement(n),n.className=a.trim(n.className)})})}),_(n),(r=n).addCommand("codesample",function(){var e=r.selection.getNode();r.selection.isCollapsed()||g(e)?x(r):r.formatter.toggle("code")}),n.on("dblclick",function(e){g(e.target)&&x(n)})})}(); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/colorpicker/plugin.js b/component/pear/module/tinymce/tinymce/plugins/colorpicker/plugin.js deleted file mode 100644 index c8cbff2df8ab4e69d74252cdaef9588b3b8c72a5..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/colorpicker/plugin.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -(function () { - 'use strict'; - - var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); - - function Plugin () { - global.add('colorpicker', function () { - console.warn('Color picker plugin is now built in to the core editor, please remove it from your editor configuration'); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/colorpicker/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/colorpicker/plugin.min.js deleted file mode 100644 index 67519fb5e5e07e579d047bfd429d6ecbe1ea7915..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/colorpicker/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("colorpicker",function(){console.warn("Color picker plugin is now built in to the core editor, please remove it from your editor configuration")})}(); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/contextmenu/plugin.js b/component/pear/module/tinymce/tinymce/plugins/contextmenu/plugin.js deleted file mode 100644 index 084e28762898ed8de1184330eb56f07a736e51ee..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/contextmenu/plugin.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -(function () { - 'use strict'; - - var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); - - function Plugin () { - global.add('contextmenu', function () { - console.warn('Context menu plugin is now built in to the core editor, please remove it from your editor configuration'); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/contextmenu/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/contextmenu/plugin.min.js deleted file mode 100644 index 3fe1c73463d94fee54a3c9980fa2a9462c3ec972..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/contextmenu/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("contextmenu",function(){console.warn("Context menu plugin is now built in to the core editor, please remove it from your editor configuration")})}(); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/directionality/plugin.js b/component/pear/module/tinymce/tinymce/plugins/directionality/plugin.js deleted file mode 100644 index fc9e6eb56a1d23043d43a8dc4fd30c66befd481c..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/directionality/plugin.js +++ /dev/null @@ -1,314 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -(function () { - 'use strict'; - - var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); - - var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools'); - - var setDir = function (editor, dir) { - var dom = editor.dom; - var curDir; - var blocks = editor.selection.getSelectedBlocks(); - if (blocks.length) { - curDir = dom.getAttrib(blocks[0], 'dir'); - global$1.each(blocks, function (block) { - if (!dom.getParent(block.parentNode, '*[dir="' + dir + '"]', dom.getRoot())) { - dom.setAttrib(block, 'dir', curDir !== dir ? dir : null); - } - }); - editor.nodeChanged(); - } - }; - - var register = function (editor) { - editor.addCommand('mceDirectionLTR', function () { - setDir(editor, 'ltr'); - }); - editor.addCommand('mceDirectionRTL', function () { - setDir(editor, 'rtl'); - }); - }; - - var noop = function () { - }; - var compose1 = function (fbc, fab) { - return function (a) { - return fbc(fab(a)); - }; - }; - var constant = function (value) { - return function () { - return value; - }; - }; - var never = constant(false); - var always = constant(true); - - var none = function () { - return NONE; - }; - var NONE = function () { - var eq = function (o) { - return o.isNone(); - }; - var call = function (thunk) { - return thunk(); - }; - var id = function (n) { - return n; - }; - var me = { - fold: function (n, _s) { - return n(); - }, - is: never, - isSome: never, - isNone: always, - getOr: id, - getOrThunk: call, - getOrDie: function (msg) { - throw new Error(msg || 'error: getOrDie called on none.'); - }, - getOrNull: constant(null), - getOrUndefined: constant(undefined), - or: id, - orThunk: call, - map: none, - each: noop, - bind: none, - exists: never, - forall: always, - filter: none, - equals: eq, - equals_: eq, - toArray: function () { - return []; - }, - toString: constant('none()') - }; - return me; - }(); - var some = function (a) { - var constant_a = constant(a); - var self = function () { - return me; - }; - var bind = function (f) { - return f(a); - }; - var me = { - fold: function (n, s) { - return s(a); - }, - is: function (v) { - return a === v; - }, - isSome: always, - isNone: never, - getOr: constant_a, - getOrThunk: constant_a, - getOrDie: constant_a, - getOrNull: constant_a, - getOrUndefined: constant_a, - or: self, - orThunk: self, - map: function (f) { - return some(f(a)); - }, - each: function (f) { - f(a); - }, - bind: bind, - exists: bind, - forall: bind, - filter: function (f) { - return f(a) ? me : NONE; - }, - toArray: function () { - return [a]; - }, - toString: function () { - return 'some(' + a + ')'; - }, - equals: function (o) { - return o.is(a); - }, - equals_: function (o, elementEq) { - return o.fold(never, function (b) { - return elementEq(a, b); - }); - } - }; - return me; - }; - var from = function (value) { - return value === null || value === undefined ? NONE : some(value); - }; - var Optional = { - some: some, - none: none, - from: from - }; - - var isSimpleType = function (type) { - return function (value) { - return typeof value === type; - }; - }; - var isFunction = isSimpleType('function'); - - var isSupported = function (dom) { - return dom.style !== undefined && isFunction(dom.style.getPropertyValue); - }; - - var fromHtml = function (html, scope) { - var doc = scope || document; - var div = doc.createElement('div'); - div.innerHTML = html; - if (!div.hasChildNodes() || div.childNodes.length > 1) { - console.error('HTML does not have a single root node', html); - throw new Error('HTML must have a single root node'); - } - return fromDom(div.childNodes[0]); - }; - var fromTag = function (tag, scope) { - var doc = scope || document; - var node = doc.createElement(tag); - return fromDom(node); - }; - var fromText = function (text, scope) { - var doc = scope || document; - var node = doc.createTextNode(text); - return fromDom(node); - }; - var fromDom = function (node) { - if (node === null || node === undefined) { - throw new Error('Node cannot be null or undefined'); - } - return { dom: node }; - }; - var fromPoint = function (docElm, x, y) { - return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom); - }; - var SugarElement = { - fromHtml: fromHtml, - fromTag: fromTag, - fromText: fromText, - fromDom: fromDom, - fromPoint: fromPoint - }; - - var Global = typeof window !== 'undefined' ? window : Function('return this;')(); - - var DOCUMENT = 9; - var DOCUMENT_FRAGMENT = 11; - var TEXT = 3; - - var type = function (element) { - return element.dom.nodeType; - }; - var isType = function (t) { - return function (element) { - return type(element) === t; - }; - }; - var isText = isType(TEXT); - var isDocument = isType(DOCUMENT); - var isDocumentFragment = isType(DOCUMENT_FRAGMENT); - - var owner = function (element) { - return SugarElement.fromDom(element.dom.ownerDocument); - }; - var documentOrOwner = function (dos) { - return isDocument(dos) ? dos : owner(dos); - }; - - var isShadowRoot = function (dos) { - return isDocumentFragment(dos); - }; - var supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode); - var getRootNode = supported ? function (e) { - return SugarElement.fromDom(e.dom.getRootNode()); - } : documentOrOwner; - var getShadowRoot = function (e) { - var r = getRootNode(e); - return isShadowRoot(r) ? Optional.some(r) : Optional.none(); - }; - var getShadowHost = function (e) { - return SugarElement.fromDom(e.dom.host); - }; - - var inBody = function (element) { - var dom = isText(element) ? element.dom.parentNode : element.dom; - if (dom === undefined || dom === null || dom.ownerDocument === null) { - return false; - } - var doc = dom.ownerDocument; - return getShadowRoot(SugarElement.fromDom(dom)).fold(function () { - return doc.body.contains(dom); - }, compose1(inBody, getShadowHost)); - }; - - var get = function (element, property) { - var dom = element.dom; - var styles = window.getComputedStyle(dom); - var r = styles.getPropertyValue(property); - return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r; - }; - var getUnsafeProperty = function (dom, property) { - return isSupported(dom) ? dom.style.getPropertyValue(property) : ''; - }; - - var getDirection = function (element) { - return get(element, 'direction') === 'rtl' ? 'rtl' : 'ltr'; - }; - - var getNodeChangeHandler = function (editor, dir) { - return function (api) { - var nodeChangeHandler = function (e) { - var element = SugarElement.fromDom(e.element); - api.setActive(getDirection(element) === dir); - }; - editor.on('NodeChange', nodeChangeHandler); - return function () { - return editor.off('NodeChange', nodeChangeHandler); - }; - }; - }; - var register$1 = function (editor) { - editor.ui.registry.addToggleButton('ltr', { - tooltip: 'Left to right', - icon: 'ltr', - onAction: function () { - return editor.execCommand('mceDirectionLTR'); - }, - onSetup: getNodeChangeHandler(editor, 'ltr') - }); - editor.ui.registry.addToggleButton('rtl', { - tooltip: 'Right to left', - icon: 'rtl', - onAction: function () { - return editor.execCommand('mceDirectionRTL'); - }, - onSetup: getNodeChangeHandler(editor, 'rtl') - }); - }; - - function Plugin () { - global.add('directionality', function (editor) { - register(editor); - register$1(editor); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/directionality/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/directionality/plugin.min.js deleted file mode 100644 index e20ec96ef42b10a36acd69ec52819701ef728b7b..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/directionality/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var n,t,e,o,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=tinymce.util.Tools.resolve("tinymce.util.Tools"),i=function(n,t){var e,o=n.dom,r=n.selection.getSelectedBlocks();r.length&&(e=o.getAttrib(r[0],"dir"),u.each(r,function(n){o.getParent(n.parentNode,'*[dir="'+t+'"]',o.getRoot())||o.setAttrib(n,"dir",e!==t?t:null)}),n.nodeChanged())},c=function(n){return function(){return n}},f=c(!1),d=c(!0),l=function(){return m},m=(n=function(n){return n.isNone()},{fold:function(n,t){return n()},is:f,isSome:f,isNone:d,getOr:e=function(n){return n},getOrThunk:t=function(n){return n()},getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:c(null),getOrUndefined:c(undefined),or:e,orThunk:t,map:l,each:function(){},bind:l,exists:f,forall:d,filter:l,equals:n,equals_:n,toArray:function(){return[]},toString:c("none()")}),a=function(e){var n=c(e),t=function(){return r},o=function(n){return n(e)},r={fold:function(n,t){return t(e)},is:function(n){return e===n},isSome:d,isNone:f,getOr:n,getOrThunk:n,getOrDie:n,getOrNull:n,getOrUndefined:n,or:t,orThunk:t,map:function(n){return a(n(e))},each:function(n){n(e)},bind:o,exists:o,forall:o,filter:function(n){return n(e)?r:m},toArray:function(){return[e]},toString:function(){return"some("+e+")"},equals:function(n){return n.is(e)},equals_:function(n,t){return n.fold(f,function(n){return t(e,n)})}};return r},s={some:a,none:l,from:function(n){return null===n||n===undefined?m:a(n)}},g=(o="function",function(n){return typeof n===o}),h=function(n){if(null===n||n===undefined)throw new Error("Node cannot be null or undefined");return{dom:n}},y={fromHtml:function(n,t){var e=(t||document).createElement("div");if(e.innerHTML=n,!e.hasChildNodes()||1', - fitzpatrick_scale: false, - category: "symbols" - }, - 1234: { - keywords: [ "numbers", "blue-square" ], - "char": '\ud83d\udd22', - fitzpatrick_scale: false, - category: "symbols" - }, - grinning: { - keywords: [ "face", "smile", "happy", "joy", ":D", "grin" ], - "char": '\ud83d\ude00', - fitzpatrick_scale: false, - category: "people" - }, - grimacing: { - keywords: [ "face", "grimace", "teeth" ], - "char": '\ud83d\ude2c', - fitzpatrick_scale: false, - category: "people" - }, - grin: { - keywords: [ "face", "happy", "smile", "joy", "kawaii" ], - "char": '\ud83d\ude01', - fitzpatrick_scale: false, - category: "people" - }, - joy: { - keywords: [ "face", "cry", "tears", "weep", "happy", "happytears", "haha" ], - "char": '\ud83d\ude02', - fitzpatrick_scale: false, - category: "people" - }, - rofl: { - keywords: [ "face", "rolling", "floor", "laughing", "lol", "haha" ], - "char": '\ud83e\udd23', - fitzpatrick_scale: false, - category: "people" - }, - partying: { - keywords: [ "face", "celebration", "woohoo" ], - "char": '\ud83e\udd73', - fitzpatrick_scale: false, - category: "people" - }, - smiley: { - keywords: [ "face", "happy", "joy", "haha", ":D", ":)", "smile", "funny" ], - "char": '\ud83d\ude03', - fitzpatrick_scale: false, - category: "people" - }, - smile: { - keywords: [ "face", "happy", "joy", "funny", "haha", "laugh", "like", ":D", ":)" ], - "char": '\ud83d\ude04', - fitzpatrick_scale: false, - category: "people" - }, - sweat_smile: { - keywords: [ "face", "hot", "happy", "laugh", "sweat", "smile", "relief" ], - "char": '\ud83d\ude05', - fitzpatrick_scale: false, - category: "people" - }, - laughing: { - keywords: [ "happy", "joy", "lol", "satisfied", "haha", "face", "glad", "XD", "laugh" ], - "char": '\ud83d\ude06', - fitzpatrick_scale: false, - category: "people" - }, - innocent: { - keywords: [ "face", "angel", "heaven", "halo" ], - "char": '\ud83d\ude07', - fitzpatrick_scale: false, - category: "people" - }, - wink: { - keywords: [ "face", "happy", "mischievous", "secret", ";)", "smile", "eye" ], - "char": '\ud83d\ude09', - fitzpatrick_scale: false, - category: "people" - }, - blush: { - keywords: [ "face", "smile", "happy", "flushed", "crush", "embarrassed", "shy", "joy" ], - "char": '\ud83d\ude0a', - fitzpatrick_scale: false, - category: "people" - }, - slightly_smiling_face: { - keywords: [ "face", "smile" ], - "char": '\ud83d\ude42', - fitzpatrick_scale: false, - category: "people" - }, - upside_down_face: { - keywords: [ "face", "flipped", "silly", "smile" ], - "char": '\ud83d\ude43', - fitzpatrick_scale: false, - category: "people" - }, - relaxed: { - keywords: [ "face", "blush", "massage", "happiness" ], - "char": '\u263a\ufe0f', - fitzpatrick_scale: false, - category: "people" - }, - yum: { - keywords: [ "happy", "joy", "tongue", "smile", "face", "silly", "yummy", "nom", "delicious", "savouring" ], - "char": '\ud83d\ude0b', - fitzpatrick_scale: false, - category: "people" - }, - relieved: { - keywords: [ "face", "relaxed", "phew", "massage", "happiness" ], - "char": '\ud83d\ude0c', - fitzpatrick_scale: false, - category: "people" - }, - heart_eyes: { - keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "crush", "heart" ], - "char": '\ud83d\ude0d', - fitzpatrick_scale: false, - category: "people" - }, - smiling_face_with_three_hearts: { - keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "crush", "hearts", "adore" ], - "char": '\ud83e\udd70', - fitzpatrick_scale: false, - category: "people" - }, - kissing_heart: { - keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "kiss" ], - "char": '\ud83d\ude18', - fitzpatrick_scale: false, - category: "people" - }, - kissing: { - keywords: [ "love", "like", "face", "3", "valentines", "infatuation", "kiss" ], - "char": '\ud83d\ude17', - fitzpatrick_scale: false, - category: "people" - }, - kissing_smiling_eyes: { - keywords: [ "face", "affection", "valentines", "infatuation", "kiss" ], - "char": '\ud83d\ude19', - fitzpatrick_scale: false, - category: "people" - }, - kissing_closed_eyes: { - keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "kiss" ], - "char": '\ud83d\ude1a', - fitzpatrick_scale: false, - category: "people" - }, - stuck_out_tongue_winking_eye: { - keywords: [ "face", "prank", "childish", "playful", "mischievous", "smile", "wink", "tongue" ], - "char": '\ud83d\ude1c', - fitzpatrick_scale: false, - category: "people" - }, - zany: { - keywords: [ "face", "goofy", "crazy" ], - "char": '\ud83e\udd2a', - fitzpatrick_scale: false, - category: "people" - }, - raised_eyebrow: { - keywords: [ "face", "distrust", "scepticism", "disapproval", "disbelief", "surprise" ], - "char": '\ud83e\udd28', - fitzpatrick_scale: false, - category: "people" - }, - monocle: { - keywords: [ "face", "stuffy", "wealthy" ], - "char": '\ud83e\uddd0', - fitzpatrick_scale: false, - category: "people" - }, - stuck_out_tongue_closed_eyes: { - keywords: [ "face", "prank", "playful", "mischievous", "smile", "tongue" ], - "char": '\ud83d\ude1d', - fitzpatrick_scale: false, - category: "people" - }, - stuck_out_tongue: { - keywords: [ "face", "prank", "childish", "playful", "mischievous", "smile", "tongue" ], - "char": '\ud83d\ude1b', - fitzpatrick_scale: false, - category: "people" - }, - money_mouth_face: { - keywords: [ "face", "rich", "dollar", "money" ], - "char": '\ud83e\udd11', - fitzpatrick_scale: false, - category: "people" - }, - nerd_face: { - keywords: [ "face", "nerdy", "geek", "dork" ], - "char": '\ud83e\udd13', - fitzpatrick_scale: false, - category: "people" - }, - sunglasses: { - keywords: [ "face", "cool", "smile", "summer", "beach", "sunglass" ], - "char": '\ud83d\ude0e', - fitzpatrick_scale: false, - category: "people" - }, - star_struck: { - keywords: [ "face", "smile", "starry", "eyes", "grinning" ], - "char": '\ud83e\udd29', - fitzpatrick_scale: false, - category: "people" - }, - clown_face: { - keywords: [ "face" ], - "char": '\ud83e\udd21', - fitzpatrick_scale: false, - category: "people" - }, - cowboy_hat_face: { - keywords: [ "face", "cowgirl", "hat" ], - "char": '\ud83e\udd20', - fitzpatrick_scale: false, - category: "people" - }, - hugs: { - keywords: [ "face", "smile", "hug" ], - "char": '\ud83e\udd17', - fitzpatrick_scale: false, - category: "people" - }, - smirk: { - keywords: [ "face", "smile", "mean", "prank", "smug", "sarcasm" ], - "char": '\ud83d\ude0f', - fitzpatrick_scale: false, - category: "people" - }, - no_mouth: { - keywords: [ "face", "hellokitty" ], - "char": '\ud83d\ude36', - fitzpatrick_scale: false, - category: "people" - }, - neutral_face: { - keywords: [ "indifference", "meh", ":|", "neutral" ], - "char": '\ud83d\ude10', - fitzpatrick_scale: false, - category: "people" - }, - expressionless: { - keywords: [ "face", "indifferent", "-_-", "meh", "deadpan" ], - "char": '\ud83d\ude11', - fitzpatrick_scale: false, - category: "people" - }, - unamused: { - keywords: [ "indifference", "bored", "straight face", "serious", "sarcasm", "unimpressed", "skeptical", "dubious", "side_eye" ], - "char": '\ud83d\ude12', - fitzpatrick_scale: false, - category: "people" - }, - roll_eyes: { - keywords: [ "face", "eyeroll", "frustrated" ], - "char": '\ud83d\ude44', - fitzpatrick_scale: false, - category: "people" - }, - thinking: { - keywords: [ "face", "hmmm", "think", "consider" ], - "char": '\ud83e\udd14', - fitzpatrick_scale: false, - category: "people" - }, - lying_face: { - keywords: [ "face", "lie", "pinocchio" ], - "char": '\ud83e\udd25', - fitzpatrick_scale: false, - category: "people" - }, - hand_over_mouth: { - keywords: [ "face", "whoops", "shock", "surprise" ], - "char": '\ud83e\udd2d', - fitzpatrick_scale: false, - category: "people" - }, - shushing: { - keywords: [ "face", "quiet", "shhh" ], - "char": '\ud83e\udd2b', - fitzpatrick_scale: false, - category: "people" - }, - symbols_over_mouth: { - keywords: [ "face", "swearing", "cursing", "cussing", "profanity", "expletive" ], - "char": '\ud83e\udd2c', - fitzpatrick_scale: false, - category: "people" - }, - exploding_head: { - keywords: [ "face", "shocked", "mind", "blown" ], - "char": '\ud83e\udd2f', - fitzpatrick_scale: false, - category: "people" - }, - flushed: { - keywords: [ "face", "blush", "shy", "flattered" ], - "char": '\ud83d\ude33', - fitzpatrick_scale: false, - category: "people" - }, - disappointed: { - keywords: [ "face", "sad", "upset", "depressed", ":(" ], - "char": '\ud83d\ude1e', - fitzpatrick_scale: false, - category: "people" - }, - worried: { - keywords: [ "face", "concern", "nervous", ":(" ], - "char": '\ud83d\ude1f', - fitzpatrick_scale: false, - category: "people" - }, - angry: { - keywords: [ "mad", "face", "annoyed", "frustrated" ], - "char": '\ud83d\ude20', - fitzpatrick_scale: false, - category: "people" - }, - rage: { - keywords: [ "angry", "mad", "hate", "despise" ], - "char": '\ud83d\ude21', - fitzpatrick_scale: false, - category: "people" - }, - pensive: { - keywords: [ "face", "sad", "depressed", "upset" ], - "char": '\ud83d\ude14', - fitzpatrick_scale: false, - category: "people" - }, - confused: { - keywords: [ "face", "indifference", "huh", "weird", "hmmm", ":/" ], - "char": '\ud83d\ude15', - fitzpatrick_scale: false, - category: "people" - }, - slightly_frowning_face: { - keywords: [ "face", "frowning", "disappointed", "sad", "upset" ], - "char": '\ud83d\ude41', - fitzpatrick_scale: false, - category: "people" - }, - frowning_face: { - keywords: [ "face", "sad", "upset", "frown" ], - "char": '\u2639', - fitzpatrick_scale: false, - category: "people" - }, - persevere: { - keywords: [ "face", "sick", "no", "upset", "oops" ], - "char": '\ud83d\ude23', - fitzpatrick_scale: false, - category: "people" - }, - confounded: { - keywords: [ "face", "confused", "sick", "unwell", "oops", ":S" ], - "char": '\ud83d\ude16', - fitzpatrick_scale: false, - category: "people" - }, - tired_face: { - keywords: [ "sick", "whine", "upset", "frustrated" ], - "char": '\ud83d\ude2b', - fitzpatrick_scale: false, - category: "people" - }, - weary: { - keywords: [ "face", "tired", "sleepy", "sad", "frustrated", "upset" ], - "char": '\ud83d\ude29', - fitzpatrick_scale: false, - category: "people" - }, - pleading: { - keywords: [ "face", "begging", "mercy" ], - "char": '\ud83e\udd7a', - fitzpatrick_scale: false, - category: "people" - }, - triumph: { - keywords: [ "face", "gas", "phew", "proud", "pride" ], - "char": '\ud83d\ude24', - fitzpatrick_scale: false, - category: "people" - }, - open_mouth: { - keywords: [ "face", "surprise", "impressed", "wow", "whoa", ":O" ], - "char": '\ud83d\ude2e', - fitzpatrick_scale: false, - category: "people" - }, - scream: { - keywords: [ "face", "munch", "scared", "omg" ], - "char": '\ud83d\ude31', - fitzpatrick_scale: false, - category: "people" - }, - fearful: { - keywords: [ "face", "scared", "terrified", "nervous", "oops", "huh" ], - "char": '\ud83d\ude28', - fitzpatrick_scale: false, - category: "people" - }, - cold_sweat: { - keywords: [ "face", "nervous", "sweat" ], - "char": '\ud83d\ude30', - fitzpatrick_scale: false, - category: "people" - }, - hushed: { - keywords: [ "face", "woo", "shh" ], - "char": '\ud83d\ude2f', - fitzpatrick_scale: false, - category: "people" - }, - frowning: { - keywords: [ "face", "aw", "what" ], - "char": '\ud83d\ude26', - fitzpatrick_scale: false, - category: "people" - }, - anguished: { - keywords: [ "face", "stunned", "nervous" ], - "char": '\ud83d\ude27', - fitzpatrick_scale: false, - category: "people" - }, - cry: { - keywords: [ "face", "tears", "sad", "depressed", "upset", ":'(" ], - "char": '\ud83d\ude22', - fitzpatrick_scale: false, - category: "people" - }, - disappointed_relieved: { - keywords: [ "face", "phew", "sweat", "nervous" ], - "char": '\ud83d\ude25', - fitzpatrick_scale: false, - category: "people" - }, - drooling_face: { - keywords: [ "face" ], - "char": '\ud83e\udd24', - fitzpatrick_scale: false, - category: "people" - }, - sleepy: { - keywords: [ "face", "tired", "rest", "nap" ], - "char": '\ud83d\ude2a', - fitzpatrick_scale: false, - category: "people" - }, - sweat: { - keywords: [ "face", "hot", "sad", "tired", "exercise" ], - "char": '\ud83d\ude13', - fitzpatrick_scale: false, - category: "people" - }, - hot: { - keywords: [ "face", "feverish", "heat", "red", "sweating" ], - "char": '\ud83e\udd75', - fitzpatrick_scale: false, - category: "people" - }, - cold: { - keywords: [ "face", "blue", "freezing", "frozen", "frostbite", "icicles" ], - "char": '\ud83e\udd76', - fitzpatrick_scale: false, - category: "people" - }, - sob: { - keywords: [ "face", "cry", "tears", "sad", "upset", "depressed" ], - "char": '\ud83d\ude2d', - fitzpatrick_scale: false, - category: "people" - }, - dizzy_face: { - keywords: [ "spent", "unconscious", "xox", "dizzy" ], - "char": '\ud83d\ude35', - fitzpatrick_scale: false, - category: "people" - }, - astonished: { - keywords: [ "face", "xox", "surprised", "poisoned" ], - "char": '\ud83d\ude32', - fitzpatrick_scale: false, - category: "people" - }, - zipper_mouth_face: { - keywords: [ "face", "sealed", "zipper", "secret" ], - "char": '\ud83e\udd10', - fitzpatrick_scale: false, - category: "people" - }, - nauseated_face: { - keywords: [ "face", "vomit", "gross", "green", "sick", "throw up", "ill" ], - "char": '\ud83e\udd22', - fitzpatrick_scale: false, - category: "people" - }, - sneezing_face: { - keywords: [ "face", "gesundheit", "sneeze", "sick", "allergy" ], - "char": '\ud83e\udd27', - fitzpatrick_scale: false, - category: "people" - }, - vomiting: { - keywords: [ "face", "sick" ], - "char": '\ud83e\udd2e', - fitzpatrick_scale: false, - category: "people" - }, - mask: { - keywords: [ "face", "sick", "ill", "disease" ], - "char": '\ud83d\ude37', - fitzpatrick_scale: false, - category: "people" - }, - face_with_thermometer: { - keywords: [ "sick", "temperature", "thermometer", "cold", "fever" ], - "char": '\ud83e\udd12', - fitzpatrick_scale: false, - category: "people" - }, - face_with_head_bandage: { - keywords: [ "injured", "clumsy", "bandage", "hurt" ], - "char": '\ud83e\udd15', - fitzpatrick_scale: false, - category: "people" - }, - woozy: { - keywords: [ "face", "dizzy", "intoxicated", "tipsy", "wavy" ], - "char": '\ud83e\udd74', - fitzpatrick_scale: false, - category: "people" - }, - sleeping: { - keywords: [ "face", "tired", "sleepy", "night", "zzz" ], - "char": '\ud83d\ude34', - fitzpatrick_scale: false, - category: "people" - }, - zzz: { - keywords: [ "sleepy", "tired", "dream" ], - "char": '\ud83d\udca4', - fitzpatrick_scale: false, - category: "people" - }, - poop: { - keywords: [ "hankey", "shitface", "fail", "turd", "shit" ], - "char": '\ud83d\udca9', - fitzpatrick_scale: false, - category: "people" - }, - smiling_imp: { - keywords: [ "devil", "horns" ], - "char": '\ud83d\ude08', - fitzpatrick_scale: false, - category: "people" - }, - imp: { - keywords: [ "devil", "angry", "horns" ], - "char": '\ud83d\udc7f', - fitzpatrick_scale: false, - category: "people" - }, - japanese_ogre: { - keywords: [ "monster", "red", "mask", "halloween", "scary", "creepy", "devil", "demon", "japanese", "ogre" ], - "char": '\ud83d\udc79', - fitzpatrick_scale: false, - category: "people" - }, - japanese_goblin: { - keywords: [ "red", "evil", "mask", "monster", "scary", "creepy", "japanese", "goblin" ], - "char": '\ud83d\udc7a', - fitzpatrick_scale: false, - category: "people" - }, - skull: { - keywords: [ "dead", "skeleton", "creepy", "death" ], - "char": '\ud83d\udc80', - fitzpatrick_scale: false, - category: "people" - }, - ghost: { - keywords: [ "halloween", "spooky", "scary" ], - "char": '\ud83d\udc7b', - fitzpatrick_scale: false, - category: "people" - }, - alien: { - keywords: [ "UFO", "paul", "weird", "outer_space" ], - "char": '\ud83d\udc7d', - fitzpatrick_scale: false, - category: "people" - }, - robot: { - keywords: [ "computer", "machine", "bot" ], - "char": '\ud83e\udd16', - fitzpatrick_scale: false, - category: "people" - }, - smiley_cat: { - keywords: [ "animal", "cats", "happy", "smile" ], - "char": '\ud83d\ude3a', - fitzpatrick_scale: false, - category: "people" - }, - smile_cat: { - keywords: [ "animal", "cats", "smile" ], - "char": '\ud83d\ude38', - fitzpatrick_scale: false, - category: "people" - }, - joy_cat: { - keywords: [ "animal", "cats", "haha", "happy", "tears" ], - "char": '\ud83d\ude39', - fitzpatrick_scale: false, - category: "people" - }, - heart_eyes_cat: { - keywords: [ "animal", "love", "like", "affection", "cats", "valentines", "heart" ], - "char": '\ud83d\ude3b', - fitzpatrick_scale: false, - category: "people" - }, - smirk_cat: { - keywords: [ "animal", "cats", "smirk" ], - "char": '\ud83d\ude3c', - fitzpatrick_scale: false, - category: "people" - }, - kissing_cat: { - keywords: [ "animal", "cats", "kiss" ], - "char": '\ud83d\ude3d', - fitzpatrick_scale: false, - category: "people" - }, - scream_cat: { - keywords: [ "animal", "cats", "munch", "scared", "scream" ], - "char": '\ud83d\ude40', - fitzpatrick_scale: false, - category: "people" - }, - crying_cat_face: { - keywords: [ "animal", "tears", "weep", "sad", "cats", "upset", "cry" ], - "char": '\ud83d\ude3f', - fitzpatrick_scale: false, - category: "people" - }, - pouting_cat: { - keywords: [ "animal", "cats" ], - "char": '\ud83d\ude3e', - fitzpatrick_scale: false, - category: "people" - }, - palms_up: { - keywords: [ "hands", "gesture", "cupped", "prayer" ], - "char": '\ud83e\udd32', - fitzpatrick_scale: true, - category: "people" - }, - raised_hands: { - keywords: [ "gesture", "hooray", "yea", "celebration", "hands" ], - "char": '\ud83d\ude4c', - fitzpatrick_scale: true, - category: "people" - }, - clap: { - keywords: [ "hands", "praise", "applause", "congrats", "yay" ], - "char": '\ud83d\udc4f', - fitzpatrick_scale: true, - category: "people" - }, - wave: { - keywords: [ "hands", "gesture", "goodbye", "solong", "farewell", "hello", "hi", "palm" ], - "char": '\ud83d\udc4b', - fitzpatrick_scale: true, - category: "people" - }, - call_me_hand: { - keywords: [ "hands", "gesture" ], - "char": '\ud83e\udd19', - fitzpatrick_scale: true, - category: "people" - }, - "+1": { - keywords: [ "thumbsup", "yes", "awesome", "good", "agree", "accept", "cool", "hand", "like" ], - "char": '\ud83d\udc4d', - fitzpatrick_scale: true, - category: "people" - }, - "-1": { - keywords: [ "thumbsdown", "no", "dislike", "hand" ], - "char": '\ud83d\udc4e', - fitzpatrick_scale: true, - category: "people" - }, - facepunch: { - keywords: [ "angry", "violence", "fist", "hit", "attack", "hand" ], - "char": '\ud83d\udc4a', - fitzpatrick_scale: true, - category: "people" - }, - fist: { - keywords: [ "fingers", "hand", "grasp" ], - "char": '\u270a', - fitzpatrick_scale: true, - category: "people" - }, - fist_left: { - keywords: [ "hand", "fistbump" ], - "char": '\ud83e\udd1b', - fitzpatrick_scale: true, - category: "people" - }, - fist_right: { - keywords: [ "hand", "fistbump" ], - "char": '\ud83e\udd1c', - fitzpatrick_scale: true, - category: "people" - }, - v: { - keywords: [ "fingers", "ohyeah", "hand", "peace", "victory", "two" ], - "char": '\u270c', - fitzpatrick_scale: true, - category: "people" - }, - ok_hand: { - keywords: [ "fingers", "limbs", "perfect", "ok", "okay" ], - "char": '\ud83d\udc4c', - fitzpatrick_scale: true, - category: "people" - }, - raised_hand: { - keywords: [ "fingers", "stop", "highfive", "palm", "ban" ], - "char": '\u270b', - fitzpatrick_scale: true, - category: "people" - }, - raised_back_of_hand: { - keywords: [ "fingers", "raised", "backhand" ], - "char": '\ud83e\udd1a', - fitzpatrick_scale: true, - category: "people" - }, - open_hands: { - keywords: [ "fingers", "butterfly", "hands", "open" ], - "char": '\ud83d\udc50', - fitzpatrick_scale: true, - category: "people" - }, - muscle: { - keywords: [ "arm", "flex", "hand", "summer", "strong", "biceps" ], - "char": '\ud83d\udcaa', - fitzpatrick_scale: true, - category: "people" - }, - pray: { - keywords: [ "please", "hope", "wish", "namaste", "highfive" ], - "char": '\ud83d\ude4f', - fitzpatrick_scale: true, - category: "people" - }, - foot: { - keywords: [ "kick", "stomp" ], - "char": '\ud83e\uddb6', - fitzpatrick_scale: true, - category: "people" - }, - leg: { - keywords: [ "kick", "limb" ], - "char": '\ud83e\uddb5', - fitzpatrick_scale: true, - category: "people" - }, - handshake: { - keywords: [ "agreement", "shake" ], - "char": '\ud83e\udd1d', - fitzpatrick_scale: false, - category: "people" - }, - point_up: { - keywords: [ "hand", "fingers", "direction", "up" ], - "char": '\u261d', - fitzpatrick_scale: true, - category: "people" - }, - point_up_2: { - keywords: [ "fingers", "hand", "direction", "up" ], - "char": '\ud83d\udc46', - fitzpatrick_scale: true, - category: "people" - }, - point_down: { - keywords: [ "fingers", "hand", "direction", "down" ], - "char": '\ud83d\udc47', - fitzpatrick_scale: true, - category: "people" - }, - point_left: { - keywords: [ "direction", "fingers", "hand", "left" ], - "char": '\ud83d\udc48', - fitzpatrick_scale: true, - category: "people" - }, - point_right: { - keywords: [ "fingers", "hand", "direction", "right" ], - "char": '\ud83d\udc49', - fitzpatrick_scale: true, - category: "people" - }, - fu: { - keywords: [ "hand", "fingers", "rude", "middle", "flipping" ], - "char": '\ud83d\udd95', - fitzpatrick_scale: true, - category: "people" - }, - raised_hand_with_fingers_splayed: { - keywords: [ "hand", "fingers", "palm" ], - "char": '\ud83d\udd90', - fitzpatrick_scale: true, - category: "people" - }, - love_you: { - keywords: [ "hand", "fingers", "gesture" ], - "char": '\ud83e\udd1f', - fitzpatrick_scale: true, - category: "people" - }, - metal: { - keywords: [ "hand", "fingers", "evil_eye", "sign_of_horns", "rock_on" ], - "char": '\ud83e\udd18', - fitzpatrick_scale: true, - category: "people" - }, - crossed_fingers: { - keywords: [ "good", "lucky" ], - "char": '\ud83e\udd1e', - fitzpatrick_scale: true, - category: "people" - }, - vulcan_salute: { - keywords: [ "hand", "fingers", "spock", "star trek" ], - "char": '\ud83d\udd96', - fitzpatrick_scale: true, - category: "people" - }, - writing_hand: { - keywords: [ "lower_left_ballpoint_pen", "stationery", "write", "compose" ], - "char": '\u270d', - fitzpatrick_scale: true, - category: "people" - }, - selfie: { - keywords: [ "camera", "phone" ], - "char": '\ud83e\udd33', - fitzpatrick_scale: true, - category: "people" - }, - nail_care: { - keywords: [ "beauty", "manicure", "finger", "fashion", "nail" ], - "char": '\ud83d\udc85', - fitzpatrick_scale: true, - category: "people" - }, - lips: { - keywords: [ "mouth", "kiss" ], - "char": '\ud83d\udc44', - fitzpatrick_scale: false, - category: "people" - }, - tooth: { - keywords: [ "teeth", "dentist" ], - "char": '\ud83e\uddb7', - fitzpatrick_scale: false, - category: "people" - }, - tongue: { - keywords: [ "mouth", "playful" ], - "char": '\ud83d\udc45', - fitzpatrick_scale: false, - category: "people" - }, - ear: { - keywords: [ "face", "hear", "sound", "listen" ], - "char": '\ud83d\udc42', - fitzpatrick_scale: true, - category: "people" - }, - nose: { - keywords: [ "smell", "sniff" ], - "char": '\ud83d\udc43', - fitzpatrick_scale: true, - category: "people" - }, - eye: { - keywords: [ "face", "look", "see", "watch", "stare" ], - "char": '\ud83d\udc41', - fitzpatrick_scale: false, - category: "people" - }, - eyes: { - keywords: [ "look", "watch", "stalk", "peek", "see" ], - "char": '\ud83d\udc40', - fitzpatrick_scale: false, - category: "people" - }, - brain: { - keywords: [ "smart", "intelligent" ], - "char": '\ud83e\udde0', - fitzpatrick_scale: false, - category: "people" - }, - bust_in_silhouette: { - keywords: [ "user", "person", "human" ], - "char": '\ud83d\udc64', - fitzpatrick_scale: false, - category: "people" - }, - busts_in_silhouette: { - keywords: [ "user", "person", "human", "group", "team" ], - "char": '\ud83d\udc65', - fitzpatrick_scale: false, - category: "people" - }, - speaking_head: { - keywords: [ "user", "person", "human", "sing", "say", "talk" ], - "char": '\ud83d\udde3', - fitzpatrick_scale: false, - category: "people" - }, - baby: { - keywords: [ "child", "boy", "girl", "toddler" ], - "char": '\ud83d\udc76', - fitzpatrick_scale: true, - category: "people" - }, - child: { - keywords: [ "gender-neutral", "young" ], - "char": '\ud83e\uddd2', - fitzpatrick_scale: true, - category: "people" - }, - boy: { - keywords: [ "man", "male", "guy", "teenager" ], - "char": '\ud83d\udc66', - fitzpatrick_scale: true, - category: "people" - }, - girl: { - keywords: [ "female", "woman", "teenager" ], - "char": '\ud83d\udc67', - fitzpatrick_scale: true, - category: "people" - }, - adult: { - keywords: [ "gender-neutral", "person" ], - "char": '\ud83e\uddd1', - fitzpatrick_scale: true, - category: "people" - }, - man: { - keywords: [ "mustache", "father", "dad", "guy", "classy", "sir", "moustache" ], - "char": '\ud83d\udc68', - fitzpatrick_scale: true, - category: "people" - }, - woman: { - keywords: [ "female", "girls", "lady" ], - "char": '\ud83d\udc69', - fitzpatrick_scale: true, - category: "people" - }, - blonde_woman: { - keywords: [ "woman", "female", "girl", "blonde", "person" ], - "char": '\ud83d\udc71\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - blonde_man: { - keywords: [ "man", "male", "boy", "blonde", "guy", "person" ], - "char": '\ud83d\udc71', - fitzpatrick_scale: true, - category: "people" - }, - bearded_person: { - keywords: [ "person", "bewhiskered" ], - "char": '\ud83e\uddd4', - fitzpatrick_scale: true, - category: "people" - }, - older_adult: { - keywords: [ "human", "elder", "senior", "gender-neutral" ], - "char": '\ud83e\uddd3', - fitzpatrick_scale: true, - category: "people" - }, - older_man: { - keywords: [ "human", "male", "men", "old", "elder", "senior" ], - "char": '\ud83d\udc74', - fitzpatrick_scale: true, - category: "people" - }, - older_woman: { - keywords: [ "human", "female", "women", "lady", "old", "elder", "senior" ], - "char": '\ud83d\udc75', - fitzpatrick_scale: true, - category: "people" - }, - man_with_gua_pi_mao: { - keywords: [ "male", "boy", "chinese" ], - "char": '\ud83d\udc72', - fitzpatrick_scale: true, - category: "people" - }, - woman_with_headscarf: { - keywords: [ "female", "hijab", "mantilla", "tichel" ], - "char": '\ud83e\uddd5', - fitzpatrick_scale: true, - category: "people" - }, - woman_with_turban: { - keywords: [ "female", "indian", "hinduism", "arabs", "woman" ], - "char": '\ud83d\udc73\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - man_with_turban: { - keywords: [ "male", "indian", "hinduism", "arabs" ], - "char": '\ud83d\udc73', - fitzpatrick_scale: true, - category: "people" - }, - policewoman: { - keywords: [ "woman", "police", "law", "legal", "enforcement", "arrest", "911", "female" ], - "char": '\ud83d\udc6e\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - policeman: { - keywords: [ "man", "police", "law", "legal", "enforcement", "arrest", "911" ], - "char": '\ud83d\udc6e', - fitzpatrick_scale: true, - category: "people" - }, - construction_worker_woman: { - keywords: [ "female", "human", "wip", "build", "construction", "worker", "labor", "woman" ], - "char": '\ud83d\udc77\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - construction_worker_man: { - keywords: [ "male", "human", "wip", "guy", "build", "construction", "worker", "labor" ], - "char": '\ud83d\udc77', - fitzpatrick_scale: true, - category: "people" - }, - guardswoman: { - keywords: [ "uk", "gb", "british", "female", "royal", "woman" ], - "char": '\ud83d\udc82\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - guardsman: { - keywords: [ "uk", "gb", "british", "male", "guy", "royal" ], - "char": '\ud83d\udc82', - fitzpatrick_scale: true, - category: "people" - }, - female_detective: { - keywords: [ "human", "spy", "detective", "female", "woman" ], - "char": '\ud83d\udd75\ufe0f\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - male_detective: { - keywords: [ "human", "spy", "detective" ], - "char": '\ud83d\udd75', - fitzpatrick_scale: true, - category: "people" - }, - woman_health_worker: { - keywords: [ "doctor", "nurse", "therapist", "healthcare", "woman", "human" ], - "char": '\ud83d\udc69\u200d\u2695\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - man_health_worker: { - keywords: [ "doctor", "nurse", "therapist", "healthcare", "man", "human" ], - "char": '\ud83d\udc68\u200d\u2695\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - woman_farmer: { - keywords: [ "rancher", "gardener", "woman", "human" ], - "char": '\ud83d\udc69\u200d\ud83c\udf3e', - fitzpatrick_scale: true, - category: "people" - }, - man_farmer: { - keywords: [ "rancher", "gardener", "man", "human" ], - "char": '\ud83d\udc68\u200d\ud83c\udf3e', - fitzpatrick_scale: true, - category: "people" - }, - woman_cook: { - keywords: [ "chef", "woman", "human" ], - "char": '\ud83d\udc69\u200d\ud83c\udf73', - fitzpatrick_scale: true, - category: "people" - }, - man_cook: { - keywords: [ "chef", "man", "human" ], - "char": '\ud83d\udc68\u200d\ud83c\udf73', - fitzpatrick_scale: true, - category: "people" - }, - woman_student: { - keywords: [ "graduate", "woman", "human" ], - "char": '\ud83d\udc69\u200d\ud83c\udf93', - fitzpatrick_scale: true, - category: "people" - }, - man_student: { - keywords: [ "graduate", "man", "human" ], - "char": '\ud83d\udc68\u200d\ud83c\udf93', - fitzpatrick_scale: true, - category: "people" - }, - woman_singer: { - keywords: [ "rockstar", "entertainer", "woman", "human" ], - "char": '\ud83d\udc69\u200d\ud83c\udfa4', - fitzpatrick_scale: true, - category: "people" - }, - man_singer: { - keywords: [ "rockstar", "entertainer", "man", "human" ], - "char": '\ud83d\udc68\u200d\ud83c\udfa4', - fitzpatrick_scale: true, - category: "people" - }, - woman_teacher: { - keywords: [ "instructor", "professor", "woman", "human" ], - "char": '\ud83d\udc69\u200d\ud83c\udfeb', - fitzpatrick_scale: true, - category: "people" - }, - man_teacher: { - keywords: [ "instructor", "professor", "man", "human" ], - "char": '\ud83d\udc68\u200d\ud83c\udfeb', - fitzpatrick_scale: true, - category: "people" - }, - woman_factory_worker: { - keywords: [ "assembly", "industrial", "woman", "human" ], - "char": '\ud83d\udc69\u200d\ud83c\udfed', - fitzpatrick_scale: true, - category: "people" - }, - man_factory_worker: { - keywords: [ "assembly", "industrial", "man", "human" ], - "char": '\ud83d\udc68\u200d\ud83c\udfed', - fitzpatrick_scale: true, - category: "people" - }, - woman_technologist: { - keywords: [ "coder", "developer", "engineer", "programmer", "software", "woman", "human", "laptop", "computer" ], - "char": '\ud83d\udc69\u200d\ud83d\udcbb', - fitzpatrick_scale: true, - category: "people" - }, - man_technologist: { - keywords: [ "coder", "developer", "engineer", "programmer", "software", "man", "human", "laptop", "computer" ], - "char": '\ud83d\udc68\u200d\ud83d\udcbb', - fitzpatrick_scale: true, - category: "people" - }, - woman_office_worker: { - keywords: [ "business", "manager", "woman", "human" ], - "char": '\ud83d\udc69\u200d\ud83d\udcbc', - fitzpatrick_scale: true, - category: "people" - }, - man_office_worker: { - keywords: [ "business", "manager", "man", "human" ], - "char": '\ud83d\udc68\u200d\ud83d\udcbc', - fitzpatrick_scale: true, - category: "people" - }, - woman_mechanic: { - keywords: [ "plumber", "woman", "human", "wrench" ], - "char": '\ud83d\udc69\u200d\ud83d\udd27', - fitzpatrick_scale: true, - category: "people" - }, - man_mechanic: { - keywords: [ "plumber", "man", "human", "wrench" ], - "char": '\ud83d\udc68\u200d\ud83d\udd27', - fitzpatrick_scale: true, - category: "people" - }, - woman_scientist: { - keywords: [ "biologist", "chemist", "engineer", "physicist", "woman", "human" ], - "char": '\ud83d\udc69\u200d\ud83d\udd2c', - fitzpatrick_scale: true, - category: "people" - }, - man_scientist: { - keywords: [ "biologist", "chemist", "engineer", "physicist", "man", "human" ], - "char": '\ud83d\udc68\u200d\ud83d\udd2c', - fitzpatrick_scale: true, - category: "people" - }, - woman_artist: { - keywords: [ "painter", "woman", "human" ], - "char": '\ud83d\udc69\u200d\ud83c\udfa8', - fitzpatrick_scale: true, - category: "people" - }, - man_artist: { - keywords: [ "painter", "man", "human" ], - "char": '\ud83d\udc68\u200d\ud83c\udfa8', - fitzpatrick_scale: true, - category: "people" - }, - woman_firefighter: { - keywords: [ "fireman", "woman", "human" ], - "char": '\ud83d\udc69\u200d\ud83d\ude92', - fitzpatrick_scale: true, - category: "people" - }, - man_firefighter: { - keywords: [ "fireman", "man", "human" ], - "char": '\ud83d\udc68\u200d\ud83d\ude92', - fitzpatrick_scale: true, - category: "people" - }, - woman_pilot: { - keywords: [ "aviator", "plane", "woman", "human" ], - "char": '\ud83d\udc69\u200d\u2708\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - man_pilot: { - keywords: [ "aviator", "plane", "man", "human" ], - "char": '\ud83d\udc68\u200d\u2708\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - woman_astronaut: { - keywords: [ "space", "rocket", "woman", "human" ], - "char": '\ud83d\udc69\u200d\ud83d\ude80', - fitzpatrick_scale: true, - category: "people" - }, - man_astronaut: { - keywords: [ "space", "rocket", "man", "human" ], - "char": '\ud83d\udc68\u200d\ud83d\ude80', - fitzpatrick_scale: true, - category: "people" - }, - woman_judge: { - keywords: [ "justice", "court", "woman", "human" ], - "char": '\ud83d\udc69\u200d\u2696\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - man_judge: { - keywords: [ "justice", "court", "man", "human" ], - "char": '\ud83d\udc68\u200d\u2696\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - woman_superhero: { - keywords: [ "woman", "female", "good", "heroine", "superpowers" ], - "char": '\ud83e\uddb8\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - man_superhero: { - keywords: [ "man", "male", "good", "hero", "superpowers" ], - "char": '\ud83e\uddb8\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - woman_supervillain: { - keywords: [ "woman", "female", "evil", "bad", "criminal", "heroine", "superpowers" ], - "char": '\ud83e\uddb9\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - man_supervillain: { - keywords: [ "man", "male", "evil", "bad", "criminal", "hero", "superpowers" ], - "char": '\ud83e\uddb9\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - mrs_claus: { - keywords: [ "woman", "female", "xmas", "mother christmas" ], - "char": '\ud83e\udd36', - fitzpatrick_scale: true, - category: "people" - }, - santa: { - keywords: [ "festival", "man", "male", "xmas", "father christmas" ], - "char": '\ud83c\udf85', - fitzpatrick_scale: true, - category: "people" - }, - sorceress: { - keywords: [ "woman", "female", "mage", "witch" ], - "char": '\ud83e\uddd9\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - wizard: { - keywords: [ "man", "male", "mage", "sorcerer" ], - "char": '\ud83e\uddd9\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - woman_elf: { - keywords: [ "woman", "female" ], - "char": '\ud83e\udddd\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - man_elf: { - keywords: [ "man", "male" ], - "char": '\ud83e\udddd\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - woman_vampire: { - keywords: [ "woman", "female" ], - "char": '\ud83e\udddb\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - man_vampire: { - keywords: [ "man", "male", "dracula" ], - "char": '\ud83e\udddb\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - woman_zombie: { - keywords: [ "woman", "female", "undead", "walking dead" ], - "char": '\ud83e\udddf\u200d\u2640\ufe0f', - fitzpatrick_scale: false, - category: "people" - }, - man_zombie: { - keywords: [ "man", "male", "dracula", "undead", "walking dead" ], - "char": '\ud83e\udddf\u200d\u2642\ufe0f', - fitzpatrick_scale: false, - category: "people" - }, - woman_genie: { - keywords: [ "woman", "female" ], - "char": '\ud83e\uddde\u200d\u2640\ufe0f', - fitzpatrick_scale: false, - category: "people" - }, - man_genie: { - keywords: [ "man", "male" ], - "char": '\ud83e\uddde\u200d\u2642\ufe0f', - fitzpatrick_scale: false, - category: "people" - }, - mermaid: { - keywords: [ "woman", "female", "merwoman", "ariel" ], - "char": '\ud83e\udddc\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - merman: { - keywords: [ "man", "male", "triton" ], - "char": '\ud83e\udddc\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - woman_fairy: { - keywords: [ "woman", "female" ], - "char": '\ud83e\uddda\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - man_fairy: { - keywords: [ "man", "male" ], - "char": '\ud83e\uddda\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - angel: { - keywords: [ "heaven", "wings", "halo" ], - "char": '\ud83d\udc7c', - fitzpatrick_scale: true, - category: "people" - }, - pregnant_woman: { - keywords: [ "baby" ], - "char": '\ud83e\udd30', - fitzpatrick_scale: true, - category: "people" - }, - breastfeeding: { - keywords: [ "nursing", "baby" ], - "char": '\ud83e\udd31', - fitzpatrick_scale: true, - category: "people" - }, - princess: { - keywords: [ "girl", "woman", "female", "blond", "crown", "royal", "queen" ], - "char": '\ud83d\udc78', - fitzpatrick_scale: true, - category: "people" - }, - prince: { - keywords: [ "boy", "man", "male", "crown", "royal", "king" ], - "char": '\ud83e\udd34', - fitzpatrick_scale: true, - category: "people" - }, - bride_with_veil: { - keywords: [ "couple", "marriage", "wedding", "woman", "bride" ], - "char": '\ud83d\udc70', - fitzpatrick_scale: true, - category: "people" - }, - man_in_tuxedo: { - keywords: [ "couple", "marriage", "wedding", "groom" ], - "char": '\ud83e\udd35', - fitzpatrick_scale: true, - category: "people" - }, - running_woman: { - keywords: [ "woman", "walking", "exercise", "race", "running", "female" ], - "char": '\ud83c\udfc3\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - running_man: { - keywords: [ "man", "walking", "exercise", "race", "running" ], - "char": '\ud83c\udfc3', - fitzpatrick_scale: true, - category: "people" - }, - walking_woman: { - keywords: [ "human", "feet", "steps", "woman", "female" ], - "char": '\ud83d\udeb6\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - walking_man: { - keywords: [ "human", "feet", "steps" ], - "char": '\ud83d\udeb6', - fitzpatrick_scale: true, - category: "people" - }, - dancer: { - keywords: [ "female", "girl", "woman", "fun" ], - "char": '\ud83d\udc83', - fitzpatrick_scale: true, - category: "people" - }, - man_dancing: { - keywords: [ "male", "boy", "fun", "dancer" ], - "char": '\ud83d\udd7a', - fitzpatrick_scale: true, - category: "people" - }, - dancing_women: { - keywords: [ "female", "bunny", "women", "girls" ], - "char": '\ud83d\udc6f', - fitzpatrick_scale: false, - category: "people" - }, - dancing_men: { - keywords: [ "male", "bunny", "men", "boys" ], - "char": '\ud83d\udc6f\u200d\u2642\ufe0f', - fitzpatrick_scale: false, - category: "people" - }, - couple: { - keywords: [ "pair", "people", "human", "love", "date", "dating", "like", "affection", "valentines", "marriage" ], - "char": '\ud83d\udc6b', - fitzpatrick_scale: false, - category: "people" - }, - two_men_holding_hands: { - keywords: [ "pair", "couple", "love", "like", "bromance", "friendship", "people", "human" ], - "char": '\ud83d\udc6c', - fitzpatrick_scale: false, - category: "people" - }, - two_women_holding_hands: { - keywords: [ "pair", "friendship", "couple", "love", "like", "female", "people", "human" ], - "char": '\ud83d\udc6d', - fitzpatrick_scale: false, - category: "people" - }, - bowing_woman: { - keywords: [ "woman", "female", "girl" ], - "char": '\ud83d\ude47\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - bowing_man: { - keywords: [ "man", "male", "boy" ], - "char": '\ud83d\ude47', - fitzpatrick_scale: true, - category: "people" - }, - man_facepalming: { - keywords: [ "man", "male", "boy", "disbelief" ], - "char": '\ud83e\udd26\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - woman_facepalming: { - keywords: [ "woman", "female", "girl", "disbelief" ], - "char": '\ud83e\udd26\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - woman_shrugging: { - keywords: [ "woman", "female", "girl", "confused", "indifferent", "doubt" ], - "char": '\ud83e\udd37', - fitzpatrick_scale: true, - category: "people" - }, - man_shrugging: { - keywords: [ "man", "male", "boy", "confused", "indifferent", "doubt" ], - "char": '\ud83e\udd37\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - tipping_hand_woman: { - keywords: [ "female", "girl", "woman", "human", "information" ], - "char": '\ud83d\udc81', - fitzpatrick_scale: true, - category: "people" - }, - tipping_hand_man: { - keywords: [ "male", "boy", "man", "human", "information" ], - "char": '\ud83d\udc81\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - no_good_woman: { - keywords: [ "female", "girl", "woman", "nope" ], - "char": '\ud83d\ude45', - fitzpatrick_scale: true, - category: "people" - }, - no_good_man: { - keywords: [ "male", "boy", "man", "nope" ], - "char": '\ud83d\ude45\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - ok_woman: { - keywords: [ "women", "girl", "female", "pink", "human", "woman" ], - "char": '\ud83d\ude46', - fitzpatrick_scale: true, - category: "people" - }, - ok_man: { - keywords: [ "men", "boy", "male", "blue", "human", "man" ], - "char": '\ud83d\ude46\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - raising_hand_woman: { - keywords: [ "female", "girl", "woman" ], - "char": '\ud83d\ude4b', - fitzpatrick_scale: true, - category: "people" - }, - raising_hand_man: { - keywords: [ "male", "boy", "man" ], - "char": '\ud83d\ude4b\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - pouting_woman: { - keywords: [ "female", "girl", "woman" ], - "char": '\ud83d\ude4e', - fitzpatrick_scale: true, - category: "people" - }, - pouting_man: { - keywords: [ "male", "boy", "man" ], - "char": '\ud83d\ude4e\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - frowning_woman: { - keywords: [ "female", "girl", "woman", "sad", "depressed", "discouraged", "unhappy" ], - "char": '\ud83d\ude4d', - fitzpatrick_scale: true, - category: "people" - }, - frowning_man: { - keywords: [ "male", "boy", "man", "sad", "depressed", "discouraged", "unhappy" ], - "char": '\ud83d\ude4d\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - haircut_woman: { - keywords: [ "female", "girl", "woman" ], - "char": '\ud83d\udc87', - fitzpatrick_scale: true, - category: "people" - }, - haircut_man: { - keywords: [ "male", "boy", "man" ], - "char": '\ud83d\udc87\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - massage_woman: { - keywords: [ "female", "girl", "woman", "head" ], - "char": '\ud83d\udc86', - fitzpatrick_scale: true, - category: "people" - }, - massage_man: { - keywords: [ "male", "boy", "man", "head" ], - "char": '\ud83d\udc86\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - woman_in_steamy_room: { - keywords: [ "female", "woman", "spa", "steamroom", "sauna" ], - "char": '\ud83e\uddd6\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - man_in_steamy_room: { - keywords: [ "male", "man", "spa", "steamroom", "sauna" ], - "char": '\ud83e\uddd6\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "people" - }, - couple_with_heart_woman_man: { - keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ], - "char": '\ud83d\udc91', - fitzpatrick_scale: false, - category: "people" - }, - couple_with_heart_woman_woman: { - keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ], - "char": '\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69', - fitzpatrick_scale: false, - category: "people" - }, - couple_with_heart_man_man: { - keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ], - "char": '\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68', - fitzpatrick_scale: false, - category: "people" - }, - couplekiss_man_woman: { - keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ], - "char": '\ud83d\udc8f', - fitzpatrick_scale: false, - category: "people" - }, - couplekiss_woman_woman: { - keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ], - "char": '\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69', - fitzpatrick_scale: false, - category: "people" - }, - couplekiss_man_man: { - keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ], - "char": '\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68', - fitzpatrick_scale: false, - category: "people" - }, - family_man_woman_boy: { - keywords: [ "home", "parents", "child", "mom", "dad", "father", "mother", "people", "human" ], - "char": '\ud83d\udc6a', - fitzpatrick_scale: false, - category: "people" - }, - family_man_woman_girl: { - keywords: [ "home", "parents", "people", "human", "child" ], - "char": '\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67', - fitzpatrick_scale: false, - category: "people" - }, - family_man_woman_girl_boy: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": '\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66', - fitzpatrick_scale: false, - category: "people" - }, - family_man_woman_boy_boy: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": '\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66', - fitzpatrick_scale: false, - category: "people" - }, - family_man_woman_girl_girl: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": '\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67', - fitzpatrick_scale: false, - category: "people" - }, - family_woman_woman_boy: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": '\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66', - fitzpatrick_scale: false, - category: "people" - }, - family_woman_woman_girl: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": '\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67', - fitzpatrick_scale: false, - category: "people" - }, - family_woman_woman_girl_boy: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": '\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66', - fitzpatrick_scale: false, - category: "people" - }, - family_woman_woman_boy_boy: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": '\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66', - fitzpatrick_scale: false, - category: "people" - }, - family_woman_woman_girl_girl: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": '\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67', - fitzpatrick_scale: false, - category: "people" - }, - family_man_man_boy: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": '\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66', - fitzpatrick_scale: false, - category: "people" - }, - family_man_man_girl: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": '\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67', - fitzpatrick_scale: false, - category: "people" - }, - family_man_man_girl_boy: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": '\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66', - fitzpatrick_scale: false, - category: "people" - }, - family_man_man_boy_boy: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": '\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66', - fitzpatrick_scale: false, - category: "people" - }, - family_man_man_girl_girl: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": '\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67', - fitzpatrick_scale: false, - category: "people" - }, - family_woman_boy: { - keywords: [ "home", "parent", "people", "human", "child" ], - "char": '\ud83d\udc69\u200d\ud83d\udc66', - fitzpatrick_scale: false, - category: "people" - }, - family_woman_girl: { - keywords: [ "home", "parent", "people", "human", "child" ], - "char": '\ud83d\udc69\u200d\ud83d\udc67', - fitzpatrick_scale: false, - category: "people" - }, - family_woman_girl_boy: { - keywords: [ "home", "parent", "people", "human", "children" ], - "char": '\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66', - fitzpatrick_scale: false, - category: "people" - }, - family_woman_boy_boy: { - keywords: [ "home", "parent", "people", "human", "children" ], - "char": '\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66', - fitzpatrick_scale: false, - category: "people" - }, - family_woman_girl_girl: { - keywords: [ "home", "parent", "people", "human", "children" ], - "char": '\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67', - fitzpatrick_scale: false, - category: "people" - }, - family_man_boy: { - keywords: [ "home", "parent", "people", "human", "child" ], - "char": '\ud83d\udc68\u200d\ud83d\udc66', - fitzpatrick_scale: false, - category: "people" - }, - family_man_girl: { - keywords: [ "home", "parent", "people", "human", "child" ], - "char": '\ud83d\udc68\u200d\ud83d\udc67', - fitzpatrick_scale: false, - category: "people" - }, - family_man_girl_boy: { - keywords: [ "home", "parent", "people", "human", "children" ], - "char": '\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66', - fitzpatrick_scale: false, - category: "people" - }, - family_man_boy_boy: { - keywords: [ "home", "parent", "people", "human", "children" ], - "char": '\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66', - fitzpatrick_scale: false, - category: "people" - }, - family_man_girl_girl: { - keywords: [ "home", "parent", "people", "human", "children" ], - "char": '\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67', - fitzpatrick_scale: false, - category: "people" - }, - yarn: { - keywords: [ "ball", "crochet", "knit" ], - "char": '\ud83e\uddf6', - fitzpatrick_scale: false, - category: "people" - }, - thread: { - keywords: [ "needle", "sewing", "spool", "string" ], - "char": '\ud83e\uddf5', - fitzpatrick_scale: false, - category: "people" - }, - coat: { - keywords: [ "jacket" ], - "char": '\ud83e\udde5', - fitzpatrick_scale: false, - category: "people" - }, - labcoat: { - keywords: [ "doctor", "experiment", "scientist", "chemist" ], - "char": '\ud83e\udd7c', - fitzpatrick_scale: false, - category: "people" - }, - womans_clothes: { - keywords: [ "fashion", "shopping_bags", "female" ], - "char": '\ud83d\udc5a', - fitzpatrick_scale: false, - category: "people" - }, - tshirt: { - keywords: [ "fashion", "cloth", "casual", "shirt", "tee" ], - "char": '\ud83d\udc55', - fitzpatrick_scale: false, - category: "people" - }, - jeans: { - keywords: [ "fashion", "shopping" ], - "char": '\ud83d\udc56', - fitzpatrick_scale: false, - category: "people" - }, - necktie: { - keywords: [ "shirt", "suitup", "formal", "fashion", "cloth", "business" ], - "char": '\ud83d\udc54', - fitzpatrick_scale: false, - category: "people" - }, - dress: { - keywords: [ "clothes", "fashion", "shopping" ], - "char": '\ud83d\udc57', - fitzpatrick_scale: false, - category: "people" - }, - bikini: { - keywords: [ "swimming", "female", "woman", "girl", "fashion", "beach", "summer" ], - "char": '\ud83d\udc59', - fitzpatrick_scale: false, - category: "people" - }, - kimono: { - keywords: [ "dress", "fashion", "women", "female", "japanese" ], - "char": '\ud83d\udc58', - fitzpatrick_scale: false, - category: "people" - }, - lipstick: { - keywords: [ "female", "girl", "fashion", "woman" ], - "char": '\ud83d\udc84', - fitzpatrick_scale: false, - category: "people" - }, - kiss: { - keywords: [ "face", "lips", "love", "like", "affection", "valentines" ], - "char": '\ud83d\udc8b', - fitzpatrick_scale: false, - category: "people" - }, - footprints: { - keywords: [ "feet", "tracking", "walking", "beach" ], - "char": '\ud83d\udc63', - fitzpatrick_scale: false, - category: "people" - }, - flat_shoe: { - keywords: [ "ballet", "slip-on", "slipper" ], - "char": '\ud83e\udd7f', - fitzpatrick_scale: false, - category: "people" - }, - high_heel: { - keywords: [ "fashion", "shoes", "female", "pumps", "stiletto" ], - "char": '\ud83d\udc60', - fitzpatrick_scale: false, - category: "people" - }, - sandal: { - keywords: [ "shoes", "fashion", "flip flops" ], - "char": '\ud83d\udc61', - fitzpatrick_scale: false, - category: "people" - }, - boot: { - keywords: [ "shoes", "fashion" ], - "char": '\ud83d\udc62', - fitzpatrick_scale: false, - category: "people" - }, - mans_shoe: { - keywords: [ "fashion", "male" ], - "char": '\ud83d\udc5e', - fitzpatrick_scale: false, - category: "people" - }, - athletic_shoe: { - keywords: [ "shoes", "sports", "sneakers" ], - "char": '\ud83d\udc5f', - fitzpatrick_scale: false, - category: "people" - }, - hiking_boot: { - keywords: [ "backpacking", "camping", "hiking" ], - "char": '\ud83e\udd7e', - fitzpatrick_scale: false, - category: "people" - }, - socks: { - keywords: [ "stockings", "clothes" ], - "char": '\ud83e\udde6', - fitzpatrick_scale: false, - category: "people" - }, - gloves: { - keywords: [ "hands", "winter", "clothes" ], - "char": '\ud83e\udde4', - fitzpatrick_scale: false, - category: "people" - }, - scarf: { - keywords: [ "neck", "winter", "clothes" ], - "char": '\ud83e\udde3', - fitzpatrick_scale: false, - category: "people" - }, - womans_hat: { - keywords: [ "fashion", "accessories", "female", "lady", "spring" ], - "char": '\ud83d\udc52', - fitzpatrick_scale: false, - category: "people" - }, - tophat: { - keywords: [ "magic", "gentleman", "classy", "circus" ], - "char": '\ud83c\udfa9', - fitzpatrick_scale: false, - category: "people" - }, - billed_hat: { - keywords: [ "cap", "baseball" ], - "char": '\ud83e\udde2', - fitzpatrick_scale: false, - category: "people" - }, - rescue_worker_helmet: { - keywords: [ "construction", "build" ], - "char": '\u26d1', - fitzpatrick_scale: false, - category: "people" - }, - mortar_board: { - keywords: [ "school", "college", "degree", "university", "graduation", "cap", "hat", "legal", "learn", "education" ], - "char": '\ud83c\udf93', - fitzpatrick_scale: false, - category: "people" - }, - crown: { - keywords: [ "king", "kod", "leader", "royalty", "lord" ], - "char": '\ud83d\udc51', - fitzpatrick_scale: false, - category: "people" - }, - school_satchel: { - keywords: [ "student", "education", "bag", "backpack" ], - "char": '\ud83c\udf92', - fitzpatrick_scale: false, - category: "people" - }, - luggage: { - keywords: [ "packing", "travel" ], - "char": '\ud83e\uddf3', - fitzpatrick_scale: false, - category: "people" - }, - pouch: { - keywords: [ "bag", "accessories", "shopping" ], - "char": '\ud83d\udc5d', - fitzpatrick_scale: false, - category: "people" - }, - purse: { - keywords: [ "fashion", "accessories", "money", "sales", "shopping" ], - "char": '\ud83d\udc5b', - fitzpatrick_scale: false, - category: "people" - }, - handbag: { - keywords: [ "fashion", "accessory", "accessories", "shopping" ], - "char": '\ud83d\udc5c', - fitzpatrick_scale: false, - category: "people" - }, - briefcase: { - keywords: [ "business", "documents", "work", "law", "legal", "job", "career" ], - "char": '\ud83d\udcbc', - fitzpatrick_scale: false, - category: "people" - }, - eyeglasses: { - keywords: [ "fashion", "accessories", "eyesight", "nerdy", "dork", "geek" ], - "char": '\ud83d\udc53', - fitzpatrick_scale: false, - category: "people" - }, - dark_sunglasses: { - keywords: [ "face", "cool", "accessories" ], - "char": '\ud83d\udd76', - fitzpatrick_scale: false, - category: "people" - }, - goggles: { - keywords: [ "eyes", "protection", "safety" ], - "char": '\ud83e\udd7d', - fitzpatrick_scale: false, - category: "people" - }, - ring: { - keywords: [ "wedding", "propose", "marriage", "valentines", "diamond", "fashion", "jewelry", "gem", "engagement" ], - "char": '\ud83d\udc8d', - fitzpatrick_scale: false, - category: "people" - }, - closed_umbrella: { - keywords: [ "weather", "rain", "drizzle" ], - "char": '\ud83c\udf02', - fitzpatrick_scale: false, - category: "people" - }, - dog: { - keywords: [ "animal", "friend", "nature", "woof", "puppy", "pet", "faithful" ], - "char": '\ud83d\udc36', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cat: { - keywords: [ "animal", "meow", "nature", "pet", "kitten" ], - "char": '\ud83d\udc31', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - mouse: { - keywords: [ "animal", "nature", "cheese_wedge", "rodent" ], - "char": '\ud83d\udc2d', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - hamster: { - keywords: [ "animal", "nature" ], - "char": '\ud83d\udc39', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - rabbit: { - keywords: [ "animal", "nature", "pet", "spring", "magic", "bunny" ], - "char": '\ud83d\udc30', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - fox_face: { - keywords: [ "animal", "nature", "face" ], - "char": '\ud83e\udd8a', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - bear: { - keywords: [ "animal", "nature", "wild" ], - "char": '\ud83d\udc3b', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - panda_face: { - keywords: [ "animal", "nature", "panda" ], - "char": '\ud83d\udc3c', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - koala: { - keywords: [ "animal", "nature" ], - "char": '\ud83d\udc28', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - tiger: { - keywords: [ "animal", "cat", "danger", "wild", "nature", "roar" ], - "char": '\ud83d\udc2f', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - lion: { - keywords: [ "animal", "nature" ], - "char": '\ud83e\udd81', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cow: { - keywords: [ "beef", "ox", "animal", "nature", "moo", "milk" ], - "char": '\ud83d\udc2e', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - pig: { - keywords: [ "animal", "oink", "nature" ], - "char": '\ud83d\udc37', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - pig_nose: { - keywords: [ "animal", "oink" ], - "char": '\ud83d\udc3d', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - frog: { - keywords: [ "animal", "nature", "croak", "toad" ], - "char": '\ud83d\udc38', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - squid: { - keywords: [ "animal", "nature", "ocean", "sea" ], - "char": '\ud83e\udd91', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - octopus: { - keywords: [ "animal", "creature", "ocean", "sea", "nature", "beach" ], - "char": '\ud83d\udc19', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - shrimp: { - keywords: [ "animal", "ocean", "nature", "seafood" ], - "char": '\ud83e\udd90', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - monkey_face: { - keywords: [ "animal", "nature", "circus" ], - "char": '\ud83d\udc35', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - gorilla: { - keywords: [ "animal", "nature", "circus" ], - "char": '\ud83e\udd8d', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - see_no_evil: { - keywords: [ "monkey", "animal", "nature", "haha" ], - "char": '\ud83d\ude48', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - hear_no_evil: { - keywords: [ "animal", "monkey", "nature" ], - "char": '\ud83d\ude49', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - speak_no_evil: { - keywords: [ "monkey", "animal", "nature", "omg" ], - "char": '\ud83d\ude4a', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - monkey: { - keywords: [ "animal", "nature", "banana", "circus" ], - "char": '\ud83d\udc12', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - chicken: { - keywords: [ "animal", "cluck", "nature", "bird" ], - "char": '\ud83d\udc14', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - penguin: { - keywords: [ "animal", "nature" ], - "char": '\ud83d\udc27', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - bird: { - keywords: [ "animal", "nature", "fly", "tweet", "spring" ], - "char": '\ud83d\udc26', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - baby_chick: { - keywords: [ "animal", "chicken", "bird" ], - "char": '\ud83d\udc24', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - hatching_chick: { - keywords: [ "animal", "chicken", "egg", "born", "baby", "bird" ], - "char": '\ud83d\udc23', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - hatched_chick: { - keywords: [ "animal", "chicken", "baby", "bird" ], - "char": '\ud83d\udc25', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - duck: { - keywords: [ "animal", "nature", "bird", "mallard" ], - "char": '\ud83e\udd86', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - eagle: { - keywords: [ "animal", "nature", "bird" ], - "char": '\ud83e\udd85', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - owl: { - keywords: [ "animal", "nature", "bird", "hoot" ], - "char": '\ud83e\udd89', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - bat: { - keywords: [ "animal", "nature", "blind", "vampire" ], - "char": '\ud83e\udd87', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - wolf: { - keywords: [ "animal", "nature", "wild" ], - "char": '\ud83d\udc3a', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - boar: { - keywords: [ "animal", "nature" ], - "char": '\ud83d\udc17', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - horse: { - keywords: [ "animal", "brown", "nature" ], - "char": '\ud83d\udc34', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - unicorn: { - keywords: [ "animal", "nature", "mystical" ], - "char": '\ud83e\udd84', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - honeybee: { - keywords: [ "animal", "insect", "nature", "bug", "spring", "honey" ], - "char": '\ud83d\udc1d', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - bug: { - keywords: [ "animal", "insect", "nature", "worm" ], - "char": '\ud83d\udc1b', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - butterfly: { - keywords: [ "animal", "insect", "nature", "caterpillar" ], - "char": '\ud83e\udd8b', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - snail: { - keywords: [ "slow", "animal", "shell" ], - "char": '\ud83d\udc0c', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - beetle: { - keywords: [ "animal", "insect", "nature", "ladybug" ], - "char": '\ud83d\udc1e', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - ant: { - keywords: [ "animal", "insect", "nature", "bug" ], - "char": '\ud83d\udc1c', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - grasshopper: { - keywords: [ "animal", "cricket", "chirp" ], - "char": '\ud83e\udd97', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - spider: { - keywords: [ "animal", "arachnid" ], - "char": '\ud83d\udd77', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - scorpion: { - keywords: [ "animal", "arachnid" ], - "char": '\ud83e\udd82', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - crab: { - keywords: [ "animal", "crustacean" ], - "char": '\ud83e\udd80', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - snake: { - keywords: [ "animal", "evil", "nature", "hiss", "python" ], - "char": '\ud83d\udc0d', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - lizard: { - keywords: [ "animal", "nature", "reptile" ], - "char": '\ud83e\udd8e', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - "t-rex": { - keywords: [ "animal", "nature", "dinosaur", "tyrannosaurus", "extinct" ], - "char": '\ud83e\udd96', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sauropod: { - keywords: [ "animal", "nature", "dinosaur", "brachiosaurus", "brontosaurus", "diplodocus", "extinct" ], - "char": '\ud83e\udd95', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - turtle: { - keywords: [ "animal", "slow", "nature", "tortoise" ], - "char": '\ud83d\udc22', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - tropical_fish: { - keywords: [ "animal", "swim", "ocean", "beach", "nemo" ], - "char": '\ud83d\udc20', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - fish: { - keywords: [ "animal", "food", "nature" ], - "char": '\ud83d\udc1f', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - blowfish: { - keywords: [ "animal", "nature", "food", "sea", "ocean" ], - "char": '\ud83d\udc21', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - dolphin: { - keywords: [ "animal", "nature", "fish", "sea", "ocean", "flipper", "fins", "beach" ], - "char": '\ud83d\udc2c', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - shark: { - keywords: [ "animal", "nature", "fish", "sea", "ocean", "jaws", "fins", "beach" ], - "char": '\ud83e\udd88', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - whale: { - keywords: [ "animal", "nature", "sea", "ocean" ], - "char": '\ud83d\udc33', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - whale2: { - keywords: [ "animal", "nature", "sea", "ocean" ], - "char": '\ud83d\udc0b', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - crocodile: { - keywords: [ "animal", "nature", "reptile", "lizard", "alligator" ], - "char": '\ud83d\udc0a', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - leopard: { - keywords: [ "animal", "nature" ], - "char": '\ud83d\udc06', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - zebra: { - keywords: [ "animal", "nature", "stripes", "safari" ], - "char": '\ud83e\udd93', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - tiger2: { - keywords: [ "animal", "nature", "roar" ], - "char": '\ud83d\udc05', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - water_buffalo: { - keywords: [ "animal", "nature", "ox", "cow" ], - "char": '\ud83d\udc03', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - ox: { - keywords: [ "animal", "cow", "beef" ], - "char": '\ud83d\udc02', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cow2: { - keywords: [ "beef", "ox", "animal", "nature", "moo", "milk" ], - "char": '\ud83d\udc04', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - deer: { - keywords: [ "animal", "nature", "horns", "venison" ], - "char": '\ud83e\udd8c', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - dromedary_camel: { - keywords: [ "animal", "hot", "desert", "hump" ], - "char": '\ud83d\udc2a', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - camel: { - keywords: [ "animal", "nature", "hot", "desert", "hump" ], - "char": '\ud83d\udc2b', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - giraffe: { - keywords: [ "animal", "nature", "spots", "safari" ], - "char": '\ud83e\udd92', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - elephant: { - keywords: [ "animal", "nature", "nose", "th", "circus" ], - "char": '\ud83d\udc18', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - rhinoceros: { - keywords: [ "animal", "nature", "horn" ], - "char": '\ud83e\udd8f', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - goat: { - keywords: [ "animal", "nature" ], - "char": '\ud83d\udc10', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - ram: { - keywords: [ "animal", "sheep", "nature" ], - "char": '\ud83d\udc0f', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sheep: { - keywords: [ "animal", "nature", "wool", "shipit" ], - "char": '\ud83d\udc11', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - racehorse: { - keywords: [ "animal", "gamble", "luck" ], - "char": '\ud83d\udc0e', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - pig2: { - keywords: [ "animal", "nature" ], - "char": '\ud83d\udc16', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - rat: { - keywords: [ "animal", "mouse", "rodent" ], - "char": '\ud83d\udc00', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - mouse2: { - keywords: [ "animal", "nature", "rodent" ], - "char": '\ud83d\udc01', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - rooster: { - keywords: [ "animal", "nature", "chicken" ], - "char": '\ud83d\udc13', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - turkey: { - keywords: [ "animal", "bird" ], - "char": '\ud83e\udd83', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - dove: { - keywords: [ "animal", "bird" ], - "char": '\ud83d\udd4a', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - dog2: { - keywords: [ "animal", "nature", "friend", "doge", "pet", "faithful" ], - "char": '\ud83d\udc15', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - poodle: { - keywords: [ "dog", "animal", "101", "nature", "pet" ], - "char": '\ud83d\udc29', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cat2: { - keywords: [ "animal", "meow", "pet", "cats" ], - "char": '\ud83d\udc08', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - rabbit2: { - keywords: [ "animal", "nature", "pet", "magic", "spring" ], - "char": '\ud83d\udc07', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - chipmunk: { - keywords: [ "animal", "nature", "rodent", "squirrel" ], - "char": '\ud83d\udc3f', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - hedgehog: { - keywords: [ "animal", "nature", "spiny" ], - "char": '\ud83e\udd94', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - raccoon: { - keywords: [ "animal", "nature" ], - "char": '\ud83e\udd9d', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - llama: { - keywords: [ "animal", "nature", "alpaca" ], - "char": '\ud83e\udd99', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - hippopotamus: { - keywords: [ "animal", "nature" ], - "char": '\ud83e\udd9b', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - kangaroo: { - keywords: [ "animal", "nature", "australia", "joey", "hop", "marsupial" ], - "char": '\ud83e\udd98', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - badger: { - keywords: [ "animal", "nature", "honey" ], - "char": '\ud83e\udda1', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - swan: { - keywords: [ "animal", "nature", "bird" ], - "char": '\ud83e\udda2', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - peacock: { - keywords: [ "animal", "nature", "peahen", "bird" ], - "char": '\ud83e\udd9a', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - parrot: { - keywords: [ "animal", "nature", "bird", "pirate", "talk" ], - "char": '\ud83e\udd9c', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - lobster: { - keywords: [ "animal", "nature", "bisque", "claws", "seafood" ], - "char": '\ud83e\udd9e', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - mosquito: { - keywords: [ "animal", "nature", "insect", "malaria" ], - "char": '\ud83e\udd9f', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - paw_prints: { - keywords: [ "animal", "tracking", "footprints", "dog", "cat", "pet", "feet" ], - "char": '\ud83d\udc3e', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - dragon: { - keywords: [ "animal", "myth", "nature", "chinese", "green" ], - "char": '\ud83d\udc09', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - dragon_face: { - keywords: [ "animal", "myth", "nature", "chinese", "green" ], - "char": '\ud83d\udc32', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cactus: { - keywords: [ "vegetable", "plant", "nature" ], - "char": '\ud83c\udf35', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - christmas_tree: { - keywords: [ "festival", "vacation", "december", "xmas", "celebration" ], - "char": '\ud83c\udf84', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - evergreen_tree: { - keywords: [ "plant", "nature" ], - "char": '\ud83c\udf32', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - deciduous_tree: { - keywords: [ "plant", "nature" ], - "char": '\ud83c\udf33', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - palm_tree: { - keywords: [ "plant", "vegetable", "nature", "summer", "beach", "mojito", "tropical" ], - "char": '\ud83c\udf34', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - seedling: { - keywords: [ "plant", "nature", "grass", "lawn", "spring" ], - "char": '\ud83c\udf31', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - herb: { - keywords: [ "vegetable", "plant", "medicine", "weed", "grass", "lawn" ], - "char": '\ud83c\udf3f', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - shamrock: { - keywords: [ "vegetable", "plant", "nature", "irish", "clover" ], - "char": '\u2618', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - four_leaf_clover: { - keywords: [ "vegetable", "plant", "nature", "lucky", "irish" ], - "char": '\ud83c\udf40', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - bamboo: { - keywords: [ "plant", "nature", "vegetable", "panda", "pine_decoration" ], - "char": '\ud83c\udf8d', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - tanabata_tree: { - keywords: [ "plant", "nature", "branch", "summer" ], - "char": '\ud83c\udf8b', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - leaves: { - keywords: [ "nature", "plant", "tree", "vegetable", "grass", "lawn", "spring" ], - "char": '\ud83c\udf43', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - fallen_leaf: { - keywords: [ "nature", "plant", "vegetable", "leaves" ], - "char": '\ud83c\udf42', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - maple_leaf: { - keywords: [ "nature", "plant", "vegetable", "ca", "fall" ], - "char": '\ud83c\udf41', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - ear_of_rice: { - keywords: [ "nature", "plant" ], - "char": '\ud83c\udf3e', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - hibiscus: { - keywords: [ "plant", "vegetable", "flowers", "beach" ], - "char": '\ud83c\udf3a', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sunflower: { - keywords: [ "nature", "plant", "fall" ], - "char": '\ud83c\udf3b', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - rose: { - keywords: [ "flowers", "valentines", "love", "spring" ], - "char": '\ud83c\udf39', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - wilted_flower: { - keywords: [ "plant", "nature", "flower" ], - "char": '\ud83e\udd40', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - tulip: { - keywords: [ "flowers", "plant", "nature", "summer", "spring" ], - "char": '\ud83c\udf37', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - blossom: { - keywords: [ "nature", "flowers", "yellow" ], - "char": '\ud83c\udf3c', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cherry_blossom: { - keywords: [ "nature", "plant", "spring", "flower" ], - "char": '\ud83c\udf38', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - bouquet: { - keywords: [ "flowers", "nature", "spring" ], - "char": '\ud83d\udc90', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - mushroom: { - keywords: [ "plant", "vegetable" ], - "char": '\ud83c\udf44', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - chestnut: { - keywords: [ "food", "squirrel" ], - "char": '\ud83c\udf30', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - jack_o_lantern: { - keywords: [ "halloween", "light", "pumpkin", "creepy", "fall" ], - "char": '\ud83c\udf83', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - shell: { - keywords: [ "nature", "sea", "beach" ], - "char": '\ud83d\udc1a', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - spider_web: { - keywords: [ "animal", "insect", "arachnid", "silk" ], - "char": '\ud83d\udd78', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - earth_americas: { - keywords: [ "globe", "world", "USA", "international" ], - "char": '\ud83c\udf0e', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - earth_africa: { - keywords: [ "globe", "world", "international" ], - "char": '\ud83c\udf0d', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - earth_asia: { - keywords: [ "globe", "world", "east", "international" ], - "char": '\ud83c\udf0f', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - full_moon: { - keywords: [ "nature", "yellow", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": '\ud83c\udf15', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - waning_gibbous_moon: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep", "waxing_gibbous_moon" ], - "char": '\ud83c\udf16', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - last_quarter_moon: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": '\ud83c\udf17', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - waning_crescent_moon: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": '\ud83c\udf18', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - new_moon: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": '\ud83c\udf11', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - waxing_crescent_moon: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": '\ud83c\udf12', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - first_quarter_moon: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": '\ud83c\udf13', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - waxing_gibbous_moon: { - keywords: [ "nature", "night", "sky", "gray", "twilight", "planet", "space", "evening", "sleep" ], - "char": '\ud83c\udf14', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - new_moon_with_face: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": '\ud83c\udf1a', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - full_moon_with_face: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": '\ud83c\udf1d', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - first_quarter_moon_with_face: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": '\ud83c\udf1b', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - last_quarter_moon_with_face: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": '\ud83c\udf1c', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sun_with_face: { - keywords: [ "nature", "morning", "sky" ], - "char": '\ud83c\udf1e', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - crescent_moon: { - keywords: [ "night", "sleep", "sky", "evening", "magic" ], - "char": '\ud83c\udf19', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - star: { - keywords: [ "night", "yellow" ], - "char": '\u2b50', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - star2: { - keywords: [ "night", "sparkle", "awesome", "good", "magic" ], - "char": '\ud83c\udf1f', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - dizzy: { - keywords: [ "star", "sparkle", "shoot", "magic" ], - "char": '\ud83d\udcab', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sparkles: { - keywords: [ "stars", "shine", "shiny", "cool", "awesome", "good", "magic" ], - "char": '\u2728', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - comet: { - keywords: [ "space" ], - "char": '\u2604', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sunny: { - keywords: [ "weather", "nature", "brightness", "summer", "beach", "spring" ], - "char": '\u2600\ufe0f', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sun_behind_small_cloud: { - keywords: [ "weather" ], - "char": '\ud83c\udf24', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - partly_sunny: { - keywords: [ "weather", "nature", "cloudy", "morning", "fall", "spring" ], - "char": '\u26c5', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sun_behind_large_cloud: { - keywords: [ "weather" ], - "char": '\ud83c\udf25', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sun_behind_rain_cloud: { - keywords: [ "weather" ], - "char": '\ud83c\udf26', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cloud: { - keywords: [ "weather", "sky" ], - "char": '\u2601\ufe0f', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cloud_with_rain: { - keywords: [ "weather" ], - "char": '\ud83c\udf27', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cloud_with_lightning_and_rain: { - keywords: [ "weather", "lightning" ], - "char": '\u26c8', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cloud_with_lightning: { - keywords: [ "weather", "thunder" ], - "char": '\ud83c\udf29', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - zap: { - keywords: [ "thunder", "weather", "lightning bolt", "fast" ], - "char": '\u26a1', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - fire: { - keywords: [ "hot", "cook", "flame" ], - "char": '\ud83d\udd25', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - boom: { - keywords: [ "bomb", "explode", "explosion", "collision", "blown" ], - "char": '\ud83d\udca5', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - snowflake: { - keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas" ], - "char": '\u2744\ufe0f', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cloud_with_snow: { - keywords: [ "weather" ], - "char": '\ud83c\udf28', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - snowman: { - keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas", "frozen", "without_snow" ], - "char": '\u26c4', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - snowman_with_snow: { - keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas", "frozen" ], - "char": '\u2603', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - wind_face: { - keywords: [ "gust", "air" ], - "char": '\ud83c\udf2c', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - dash: { - keywords: [ "wind", "air", "fast", "shoo", "fart", "smoke", "puff" ], - "char": '\ud83d\udca8', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - tornado: { - keywords: [ "weather", "cyclone", "twister" ], - "char": '\ud83c\udf2a', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - fog: { - keywords: [ "weather" ], - "char": '\ud83c\udf2b', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - open_umbrella: { - keywords: [ "weather", "spring" ], - "char": '\u2602', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - umbrella: { - keywords: [ "rainy", "weather", "spring" ], - "char": '\u2614', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - droplet: { - keywords: [ "water", "drip", "faucet", "spring" ], - "char": '\ud83d\udca7', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sweat_drops: { - keywords: [ "water", "drip", "oops" ], - "char": '\ud83d\udca6', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - ocean: { - keywords: [ "sea", "water", "wave", "nature", "tsunami", "disaster" ], - "char": '\ud83c\udf0a', - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - green_apple: { - keywords: [ "fruit", "nature" ], - "char": '\ud83c\udf4f', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - apple: { - keywords: [ "fruit", "mac", "school" ], - "char": '\ud83c\udf4e', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - pear: { - keywords: [ "fruit", "nature", "food" ], - "char": '\ud83c\udf50', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - tangerine: { - keywords: [ "food", "fruit", "nature", "orange" ], - "char": '\ud83c\udf4a', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - lemon: { - keywords: [ "fruit", "nature" ], - "char": '\ud83c\udf4b', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - banana: { - keywords: [ "fruit", "food", "monkey" ], - "char": '\ud83c\udf4c', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - watermelon: { - keywords: [ "fruit", "food", "picnic", "summer" ], - "char": '\ud83c\udf49', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - grapes: { - keywords: [ "fruit", "food", "wine" ], - "char": '\ud83c\udf47', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - strawberry: { - keywords: [ "fruit", "food", "nature" ], - "char": '\ud83c\udf53', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - melon: { - keywords: [ "fruit", "nature", "food" ], - "char": '\ud83c\udf48', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - cherries: { - keywords: [ "food", "fruit" ], - "char": '\ud83c\udf52', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - peach: { - keywords: [ "fruit", "nature", "food" ], - "char": '\ud83c\udf51', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - pineapple: { - keywords: [ "fruit", "nature", "food" ], - "char": '\ud83c\udf4d', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - coconut: { - keywords: [ "fruit", "nature", "food", "palm" ], - "char": '\ud83e\udd65', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - kiwi_fruit: { - keywords: [ "fruit", "food" ], - "char": '\ud83e\udd5d', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - mango: { - keywords: [ "fruit", "food", "tropical" ], - "char": '\ud83e\udd6d', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - avocado: { - keywords: [ "fruit", "food" ], - "char": '\ud83e\udd51', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - broccoli: { - keywords: [ "fruit", "food", "vegetable" ], - "char": '\ud83e\udd66', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - tomato: { - keywords: [ "fruit", "vegetable", "nature", "food" ], - "char": '\ud83c\udf45', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - eggplant: { - keywords: [ "vegetable", "nature", "food", "aubergine" ], - "char": '\ud83c\udf46', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - cucumber: { - keywords: [ "fruit", "food", "pickle" ], - "char": '\ud83e\udd52', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - carrot: { - keywords: [ "vegetable", "food", "orange" ], - "char": '\ud83e\udd55', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - hot_pepper: { - keywords: [ "food", "spicy", "chilli", "chili" ], - "char": '\ud83c\udf36', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - potato: { - keywords: [ "food", "tuber", "vegatable", "starch" ], - "char": '\ud83e\udd54', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - corn: { - keywords: [ "food", "vegetable", "plant" ], - "char": '\ud83c\udf3d', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - leafy_greens: { - keywords: [ "food", "vegetable", "plant", "bok choy", "cabbage", "kale", "lettuce" ], - "char": '\ud83e\udd6c', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - sweet_potato: { - keywords: [ "food", "nature" ], - "char": '\ud83c\udf60', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - peanuts: { - keywords: [ "food", "nut" ], - "char": '\ud83e\udd5c', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - honey_pot: { - keywords: [ "bees", "sweet", "kitchen" ], - "char": '\ud83c\udf6f', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - croissant: { - keywords: [ "food", "bread", "french" ], - "char": '\ud83e\udd50', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - bread: { - keywords: [ "food", "wheat", "breakfast", "toast" ], - "char": '\ud83c\udf5e', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - baguette_bread: { - keywords: [ "food", "bread", "french" ], - "char": '\ud83e\udd56', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - bagel: { - keywords: [ "food", "bread", "bakery", "schmear" ], - "char": '\ud83e\udd6f', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - pretzel: { - keywords: [ "food", "bread", "twisted" ], - "char": '\ud83e\udd68', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - cheese: { - keywords: [ "food", "chadder" ], - "char": '\ud83e\uddc0', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - egg: { - keywords: [ "food", "chicken", "breakfast" ], - "char": '\ud83e\udd5a', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - bacon: { - keywords: [ "food", "breakfast", "pork", "pig", "meat" ], - "char": '\ud83e\udd53', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - steak: { - keywords: [ "food", "cow", "meat", "cut", "chop", "lambchop", "porkchop" ], - "char": '\ud83e\udd69', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - pancakes: { - keywords: [ "food", "breakfast", "flapjacks", "hotcakes" ], - "char": '\ud83e\udd5e', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - poultry_leg: { - keywords: [ "food", "meat", "drumstick", "bird", "chicken", "turkey" ], - "char": '\ud83c\udf57', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - meat_on_bone: { - keywords: [ "good", "food", "drumstick" ], - "char": '\ud83c\udf56', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - bone: { - keywords: [ "skeleton" ], - "char": '\ud83e\uddb4', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - fried_shrimp: { - keywords: [ "food", "animal", "appetizer", "summer" ], - "char": '\ud83c\udf64', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - fried_egg: { - keywords: [ "food", "breakfast", "kitchen", "egg" ], - "char": '\ud83c\udf73', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - hamburger: { - keywords: [ "meat", "fast food", "beef", "cheeseburger", "mcdonalds", "burger king" ], - "char": '\ud83c\udf54', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - fries: { - keywords: [ "chips", "snack", "fast food" ], - "char": '\ud83c\udf5f', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - stuffed_flatbread: { - keywords: [ "food", "flatbread", "stuffed", "gyro" ], - "char": '\ud83e\udd59', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - hotdog: { - keywords: [ "food", "frankfurter" ], - "char": '\ud83c\udf2d', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - pizza: { - keywords: [ "food", "party" ], - "char": '\ud83c\udf55', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - sandwich: { - keywords: [ "food", "lunch", "bread" ], - "char": '\ud83e\udd6a', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - canned_food: { - keywords: [ "food", "soup" ], - "char": '\ud83e\udd6b', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - spaghetti: { - keywords: [ "food", "italian", "noodle" ], - "char": '\ud83c\udf5d', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - taco: { - keywords: [ "food", "mexican" ], - "char": '\ud83c\udf2e', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - burrito: { - keywords: [ "food", "mexican" ], - "char": '\ud83c\udf2f', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - green_salad: { - keywords: [ "food", "healthy", "lettuce" ], - "char": '\ud83e\udd57', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - shallow_pan_of_food: { - keywords: [ "food", "cooking", "casserole", "paella" ], - "char": '\ud83e\udd58', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - ramen: { - keywords: [ "food", "japanese", "noodle", "chopsticks" ], - "char": '\ud83c\udf5c', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - stew: { - keywords: [ "food", "meat", "soup" ], - "char": '\ud83c\udf72', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - fish_cake: { - keywords: [ "food", "japan", "sea", "beach", "narutomaki", "pink", "swirl", "kamaboko", "surimi", "ramen" ], - "char": '\ud83c\udf65', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - fortune_cookie: { - keywords: [ "food", "prophecy" ], - "char": '\ud83e\udd60', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - sushi: { - keywords: [ "food", "fish", "japanese", "rice" ], - "char": '\ud83c\udf63', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - bento: { - keywords: [ "food", "japanese", "box" ], - "char": '\ud83c\udf71', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - curry: { - keywords: [ "food", "spicy", "hot", "indian" ], - "char": '\ud83c\udf5b', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - rice_ball: { - keywords: [ "food", "japanese" ], - "char": '\ud83c\udf59', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - rice: { - keywords: [ "food", "china", "asian" ], - "char": '\ud83c\udf5a', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - rice_cracker: { - keywords: [ "food", "japanese" ], - "char": '\ud83c\udf58', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - oden: { - keywords: [ "food", "japanese" ], - "char": '\ud83c\udf62', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - dango: { - keywords: [ "food", "dessert", "sweet", "japanese", "barbecue", "meat" ], - "char": '\ud83c\udf61', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - shaved_ice: { - keywords: [ "hot", "dessert", "summer" ], - "char": '\ud83c\udf67', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - ice_cream: { - keywords: [ "food", "hot", "dessert" ], - "char": '\ud83c\udf68', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - icecream: { - keywords: [ "food", "hot", "dessert", "summer" ], - "char": '\ud83c\udf66', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - pie: { - keywords: [ "food", "dessert", "pastry" ], - "char": '\ud83e\udd67', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - cake: { - keywords: [ "food", "dessert" ], - "char": '\ud83c\udf70', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - cupcake: { - keywords: [ "food", "dessert", "bakery", "sweet" ], - "char": '\ud83e\uddc1', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - moon_cake: { - keywords: [ "food", "autumn" ], - "char": '\ud83e\udd6e', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - birthday: { - keywords: [ "food", "dessert", "cake" ], - "char": '\ud83c\udf82', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - custard: { - keywords: [ "dessert", "food" ], - "char": '\ud83c\udf6e', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - candy: { - keywords: [ "snack", "dessert", "sweet", "lolly" ], - "char": '\ud83c\udf6c', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - lollipop: { - keywords: [ "food", "snack", "candy", "sweet" ], - "char": '\ud83c\udf6d', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - chocolate_bar: { - keywords: [ "food", "snack", "dessert", "sweet" ], - "char": '\ud83c\udf6b', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - popcorn: { - keywords: [ "food", "movie theater", "films", "snack" ], - "char": '\ud83c\udf7f', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - dumpling: { - keywords: [ "food", "empanada", "pierogi", "potsticker" ], - "char": '\ud83e\udd5f', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - doughnut: { - keywords: [ "food", "dessert", "snack", "sweet", "donut" ], - "char": '\ud83c\udf69', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - cookie: { - keywords: [ "food", "snack", "oreo", "chocolate", "sweet", "dessert" ], - "char": '\ud83c\udf6a', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - milk_glass: { - keywords: [ "beverage", "drink", "cow" ], - "char": '\ud83e\udd5b', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - beer: { - keywords: [ "relax", "beverage", "drink", "drunk", "party", "pub", "summer", "alcohol", "booze" ], - "char": '\ud83c\udf7a', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - beers: { - keywords: [ "relax", "beverage", "drink", "drunk", "party", "pub", "summer", "alcohol", "booze" ], - "char": '\ud83c\udf7b', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - clinking_glasses: { - keywords: [ "beverage", "drink", "party", "alcohol", "celebrate", "cheers", "wine", "champagne", "toast" ], - "char": '\ud83e\udd42', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - wine_glass: { - keywords: [ "drink", "beverage", "drunk", "alcohol", "booze" ], - "char": '\ud83c\udf77', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - tumbler_glass: { - keywords: [ "drink", "beverage", "drunk", "alcohol", "liquor", "booze", "bourbon", "scotch", "whisky", "glass", "shot" ], - "char": '\ud83e\udd43', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - cocktail: { - keywords: [ "drink", "drunk", "alcohol", "beverage", "booze", "mojito" ], - "char": '\ud83c\udf78', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - tropical_drink: { - keywords: [ "beverage", "cocktail", "summer", "beach", "alcohol", "booze", "mojito" ], - "char": '\ud83c\udf79', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - champagne: { - keywords: [ "drink", "wine", "bottle", "celebration" ], - "char": '\ud83c\udf7e', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - sake: { - keywords: [ "wine", "drink", "drunk", "beverage", "japanese", "alcohol", "booze" ], - "char": '\ud83c\udf76', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - tea: { - keywords: [ "drink", "bowl", "breakfast", "green", "british" ], - "char": '\ud83c\udf75', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - cup_with_straw: { - keywords: [ "drink", "soda" ], - "char": '\ud83e\udd64', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - coffee: { - keywords: [ "beverage", "caffeine", "latte", "espresso" ], - "char": '\u2615', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - baby_bottle: { - keywords: [ "food", "container", "milk" ], - "char": '\ud83c\udf7c', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - salt: { - keywords: [ "condiment", "shaker" ], - "char": '\ud83e\uddc2', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - spoon: { - keywords: [ "cutlery", "kitchen", "tableware" ], - "char": '\ud83e\udd44', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - fork_and_knife: { - keywords: [ "cutlery", "kitchen" ], - "char": '\ud83c\udf74', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - plate_with_cutlery: { - keywords: [ "food", "eat", "meal", "lunch", "dinner", "restaurant" ], - "char": '\ud83c\udf7d', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - bowl_with_spoon: { - keywords: [ "food", "breakfast", "cereal", "oatmeal", "porridge" ], - "char": '\ud83e\udd63', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - takeout_box: { - keywords: [ "food", "leftovers" ], - "char": '\ud83e\udd61', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - chopsticks: { - keywords: [ "food" ], - "char": '\ud83e\udd62', - fitzpatrick_scale: false, - category: "food_and_drink" - }, - soccer: { - keywords: [ "sports", "football" ], - "char": '\u26bd', - fitzpatrick_scale: false, - category: "activity" - }, - basketball: { - keywords: [ "sports", "balls", "NBA" ], - "char": '\ud83c\udfc0', - fitzpatrick_scale: false, - category: "activity" - }, - football: { - keywords: [ "sports", "balls", "NFL" ], - "char": '\ud83c\udfc8', - fitzpatrick_scale: false, - category: "activity" - }, - baseball: { - keywords: [ "sports", "balls" ], - "char": '\u26be', - fitzpatrick_scale: false, - category: "activity" - }, - softball: { - keywords: [ "sports", "balls" ], - "char": '\ud83e\udd4e', - fitzpatrick_scale: false, - category: "activity" - }, - tennis: { - keywords: [ "sports", "balls", "green" ], - "char": '\ud83c\udfbe', - fitzpatrick_scale: false, - category: "activity" - }, - volleyball: { - keywords: [ "sports", "balls" ], - "char": '\ud83c\udfd0', - fitzpatrick_scale: false, - category: "activity" - }, - rugby_football: { - keywords: [ "sports", "team" ], - "char": '\ud83c\udfc9', - fitzpatrick_scale: false, - category: "activity" - }, - flying_disc: { - keywords: [ "sports", "frisbee", "ultimate" ], - "char": '\ud83e\udd4f', - fitzpatrick_scale: false, - category: "activity" - }, - "8ball": { - keywords: [ "pool", "hobby", "game", "luck", "magic" ], - "char": '\ud83c\udfb1', - fitzpatrick_scale: false, - category: "activity" - }, - golf: { - keywords: [ "sports", "business", "flag", "hole", "summer" ], - "char": '\u26f3', - fitzpatrick_scale: false, - category: "activity" - }, - golfing_woman: { - keywords: [ "sports", "business", "woman", "female" ], - "char": '\ud83c\udfcc\ufe0f\u200d\u2640\ufe0f', - fitzpatrick_scale: false, - category: "activity" - }, - golfing_man: { - keywords: [ "sports", "business" ], - "char": '\ud83c\udfcc', - fitzpatrick_scale: true, - category: "activity" - }, - ping_pong: { - keywords: [ "sports", "pingpong" ], - "char": '\ud83c\udfd3', - fitzpatrick_scale: false, - category: "activity" - }, - badminton: { - keywords: [ "sports" ], - "char": '\ud83c\udff8', - fitzpatrick_scale: false, - category: "activity" - }, - goal_net: { - keywords: [ "sports" ], - "char": '\ud83e\udd45', - fitzpatrick_scale: false, - category: "activity" - }, - ice_hockey: { - keywords: [ "sports" ], - "char": '\ud83c\udfd2', - fitzpatrick_scale: false, - category: "activity" - }, - field_hockey: { - keywords: [ "sports" ], - "char": '\ud83c\udfd1', - fitzpatrick_scale: false, - category: "activity" - }, - lacrosse: { - keywords: [ "sports", "ball", "stick" ], - "char": '\ud83e\udd4d', - fitzpatrick_scale: false, - category: "activity" - }, - cricket: { - keywords: [ "sports" ], - "char": '\ud83c\udfcf', - fitzpatrick_scale: false, - category: "activity" - }, - ski: { - keywords: [ "sports", "winter", "cold", "snow" ], - "char": '\ud83c\udfbf', - fitzpatrick_scale: false, - category: "activity" - }, - skier: { - keywords: [ "sports", "winter", "snow" ], - "char": '\u26f7', - fitzpatrick_scale: false, - category: "activity" - }, - snowboarder: { - keywords: [ "sports", "winter" ], - "char": '\ud83c\udfc2', - fitzpatrick_scale: true, - category: "activity" - }, - person_fencing: { - keywords: [ "sports", "fencing", "sword" ], - "char": '\ud83e\udd3a', - fitzpatrick_scale: false, - category: "activity" - }, - women_wrestling: { - keywords: [ "sports", "wrestlers" ], - "char": '\ud83e\udd3c\u200d\u2640\ufe0f', - fitzpatrick_scale: false, - category: "activity" - }, - men_wrestling: { - keywords: [ "sports", "wrestlers" ], - "char": '\ud83e\udd3c\u200d\u2642\ufe0f', - fitzpatrick_scale: false, - category: "activity" - }, - woman_cartwheeling: { - keywords: [ "gymnastics" ], - "char": '\ud83e\udd38\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - man_cartwheeling: { - keywords: [ "gymnastics" ], - "char": '\ud83e\udd38\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - woman_playing_handball: { - keywords: [ "sports" ], - "char": '\ud83e\udd3e\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - man_playing_handball: { - keywords: [ "sports" ], - "char": '\ud83e\udd3e\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - ice_skate: { - keywords: [ "sports" ], - "char": '\u26f8', - fitzpatrick_scale: false, - category: "activity" - }, - curling_stone: { - keywords: [ "sports" ], - "char": '\ud83e\udd4c', - fitzpatrick_scale: false, - category: "activity" - }, - skateboard: { - keywords: [ "board" ], - "char": '\ud83d\udef9', - fitzpatrick_scale: false, - category: "activity" - }, - sled: { - keywords: [ "sleigh", "luge", "toboggan" ], - "char": '\ud83d\udef7', - fitzpatrick_scale: false, - category: "activity" - }, - bow_and_arrow: { - keywords: [ "sports" ], - "char": '\ud83c\udff9', - fitzpatrick_scale: false, - category: "activity" - }, - fishing_pole_and_fish: { - keywords: [ "food", "hobby", "summer" ], - "char": '\ud83c\udfa3', - fitzpatrick_scale: false, - category: "activity" - }, - boxing_glove: { - keywords: [ "sports", "fighting" ], - "char": '\ud83e\udd4a', - fitzpatrick_scale: false, - category: "activity" - }, - martial_arts_uniform: { - keywords: [ "judo", "karate", "taekwondo" ], - "char": '\ud83e\udd4b', - fitzpatrick_scale: false, - category: "activity" - }, - rowing_woman: { - keywords: [ "sports", "hobby", "water", "ship", "woman", "female" ], - "char": '\ud83d\udea3\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - rowing_man: { - keywords: [ "sports", "hobby", "water", "ship" ], - "char": '\ud83d\udea3', - fitzpatrick_scale: true, - category: "activity" - }, - climbing_woman: { - keywords: [ "sports", "hobby", "woman", "female", "rock" ], - "char": '\ud83e\uddd7\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - climbing_man: { - keywords: [ "sports", "hobby", "man", "male", "rock" ], - "char": '\ud83e\uddd7\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - swimming_woman: { - keywords: [ "sports", "exercise", "human", "athlete", "water", "summer", "woman", "female" ], - "char": '\ud83c\udfca\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - swimming_man: { - keywords: [ "sports", "exercise", "human", "athlete", "water", "summer" ], - "char": '\ud83c\udfca', - fitzpatrick_scale: true, - category: "activity" - }, - woman_playing_water_polo: { - keywords: [ "sports", "pool" ], - "char": '\ud83e\udd3d\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - man_playing_water_polo: { - keywords: [ "sports", "pool" ], - "char": '\ud83e\udd3d\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - woman_in_lotus_position: { - keywords: [ "woman", "female", "meditation", "yoga", "serenity", "zen", "mindfulness" ], - "char": '\ud83e\uddd8\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - man_in_lotus_position: { - keywords: [ "man", "male", "meditation", "yoga", "serenity", "zen", "mindfulness" ], - "char": '\ud83e\uddd8\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - surfing_woman: { - keywords: [ "sports", "ocean", "sea", "summer", "beach", "woman", "female" ], - "char": '\ud83c\udfc4\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - surfing_man: { - keywords: [ "sports", "ocean", "sea", "summer", "beach" ], - "char": '\ud83c\udfc4', - fitzpatrick_scale: true, - category: "activity" - }, - bath: { - keywords: [ "clean", "shower", "bathroom" ], - "char": '\ud83d\udec0', - fitzpatrick_scale: true, - category: "activity" - }, - basketball_woman: { - keywords: [ "sports", "human", "woman", "female" ], - "char": '\u26f9\ufe0f\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - basketball_man: { - keywords: [ "sports", "human" ], - "char": '\u26f9', - fitzpatrick_scale: true, - category: "activity" - }, - weight_lifting_woman: { - keywords: [ "sports", "training", "exercise", "woman", "female" ], - "char": '\ud83c\udfcb\ufe0f\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - weight_lifting_man: { - keywords: [ "sports", "training", "exercise" ], - "char": '\ud83c\udfcb', - fitzpatrick_scale: true, - category: "activity" - }, - biking_woman: { - keywords: [ "sports", "bike", "exercise", "hipster", "woman", "female" ], - "char": '\ud83d\udeb4\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - biking_man: { - keywords: [ "sports", "bike", "exercise", "hipster" ], - "char": '\ud83d\udeb4', - fitzpatrick_scale: true, - category: "activity" - }, - mountain_biking_woman: { - keywords: [ "transportation", "sports", "human", "race", "bike", "woman", "female" ], - "char": '\ud83d\udeb5\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - mountain_biking_man: { - keywords: [ "transportation", "sports", "human", "race", "bike" ], - "char": '\ud83d\udeb5', - fitzpatrick_scale: true, - category: "activity" - }, - horse_racing: { - keywords: [ "animal", "betting", "competition", "gambling", "luck" ], - "char": '\ud83c\udfc7', - fitzpatrick_scale: true, - category: "activity" - }, - business_suit_levitating: { - keywords: [ "suit", "business", "levitate", "hover", "jump" ], - "char": '\ud83d\udd74', - fitzpatrick_scale: true, - category: "activity" - }, - trophy: { - keywords: [ "win", "award", "contest", "place", "ftw", "ceremony" ], - "char": '\ud83c\udfc6', - fitzpatrick_scale: false, - category: "activity" - }, - running_shirt_with_sash: { - keywords: [ "play", "pageant" ], - "char": '\ud83c\udfbd', - fitzpatrick_scale: false, - category: "activity" - }, - medal_sports: { - keywords: [ "award", "winning" ], - "char": '\ud83c\udfc5', - fitzpatrick_scale: false, - category: "activity" - }, - medal_military: { - keywords: [ "award", "winning", "army" ], - "char": '\ud83c\udf96', - fitzpatrick_scale: false, - category: "activity" - }, - "1st_place_medal": { - keywords: [ "award", "winning", "first" ], - "char": '\ud83e\udd47', - fitzpatrick_scale: false, - category: "activity" - }, - "2nd_place_medal": { - keywords: [ "award", "second" ], - "char": '\ud83e\udd48', - fitzpatrick_scale: false, - category: "activity" - }, - "3rd_place_medal": { - keywords: [ "award", "third" ], - "char": '\ud83e\udd49', - fitzpatrick_scale: false, - category: "activity" - }, - reminder_ribbon: { - keywords: [ "sports", "cause", "support", "awareness" ], - "char": '\ud83c\udf97', - fitzpatrick_scale: false, - category: "activity" - }, - rosette: { - keywords: [ "flower", "decoration", "military" ], - "char": '\ud83c\udff5', - fitzpatrick_scale: false, - category: "activity" - }, - ticket: { - keywords: [ "event", "concert", "pass" ], - "char": '\ud83c\udfab', - fitzpatrick_scale: false, - category: "activity" - }, - tickets: { - keywords: [ "sports", "concert", "entrance" ], - "char": '\ud83c\udf9f', - fitzpatrick_scale: false, - category: "activity" - }, - performing_arts: { - keywords: [ "acting", "theater", "drama" ], - "char": '\ud83c\udfad', - fitzpatrick_scale: false, - category: "activity" - }, - art: { - keywords: [ "design", "paint", "draw", "colors" ], - "char": '\ud83c\udfa8', - fitzpatrick_scale: false, - category: "activity" - }, - circus_tent: { - keywords: [ "festival", "carnival", "party" ], - "char": '\ud83c\udfaa', - fitzpatrick_scale: false, - category: "activity" - }, - woman_juggling: { - keywords: [ "juggle", "balance", "skill", "multitask" ], - "char": '\ud83e\udd39\u200d\u2640\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - man_juggling: { - keywords: [ "juggle", "balance", "skill", "multitask" ], - "char": '\ud83e\udd39\u200d\u2642\ufe0f', - fitzpatrick_scale: true, - category: "activity" - }, - microphone: { - keywords: [ "sound", "music", "PA", "sing", "talkshow" ], - "char": '\ud83c\udfa4', - fitzpatrick_scale: false, - category: "activity" - }, - headphones: { - keywords: [ "music", "score", "gadgets" ], - "char": '\ud83c\udfa7', - fitzpatrick_scale: false, - category: "activity" - }, - musical_score: { - keywords: [ "treble", "clef", "compose" ], - "char": '\ud83c\udfbc', - fitzpatrick_scale: false, - category: "activity" - }, - musical_keyboard: { - keywords: [ "piano", "instrument", "compose" ], - "char": '\ud83c\udfb9', - fitzpatrick_scale: false, - category: "activity" - }, - drum: { - keywords: [ "music", "instrument", "drumsticks", "snare" ], - "char": '\ud83e\udd41', - fitzpatrick_scale: false, - category: "activity" - }, - saxophone: { - keywords: [ "music", "instrument", "jazz", "blues" ], - "char": '\ud83c\udfb7', - fitzpatrick_scale: false, - category: "activity" - }, - trumpet: { - keywords: [ "music", "brass" ], - "char": '\ud83c\udfba', - fitzpatrick_scale: false, - category: "activity" - }, - guitar: { - keywords: [ "music", "instrument" ], - "char": '\ud83c\udfb8', - fitzpatrick_scale: false, - category: "activity" - }, - violin: { - keywords: [ "music", "instrument", "orchestra", "symphony" ], - "char": '\ud83c\udfbb', - fitzpatrick_scale: false, - category: "activity" - }, - clapper: { - keywords: [ "movie", "film", "record" ], - "char": '\ud83c\udfac', - fitzpatrick_scale: false, - category: "activity" - }, - video_game: { - keywords: [ "play", "console", "PS4", "controller" ], - "char": '\ud83c\udfae', - fitzpatrick_scale: false, - category: "activity" - }, - space_invader: { - keywords: [ "game", "arcade", "play" ], - "char": '\ud83d\udc7e', - fitzpatrick_scale: false, - category: "activity" - }, - dart: { - keywords: [ "game", "play", "bar", "target", "bullseye" ], - "char": '\ud83c\udfaf', - fitzpatrick_scale: false, - category: "activity" - }, - game_die: { - keywords: [ "dice", "random", "tabletop", "play", "luck" ], - "char": '\ud83c\udfb2', - fitzpatrick_scale: false, - category: "activity" - }, - chess_pawn: { - keywords: [ "expendable" ], - "char": "\u265f", - fitzpatrick_scale: false, - category: "activity" - }, - slot_machine: { - keywords: [ "bet", "gamble", "vegas", "fruit machine", "luck", "casino" ], - "char": '\ud83c\udfb0', - fitzpatrick_scale: false, - category: "activity" - }, - jigsaw: { - keywords: [ "interlocking", "puzzle", "piece" ], - "char": '\ud83e\udde9', - fitzpatrick_scale: false, - category: "activity" - }, - bowling: { - keywords: [ "sports", "fun", "play" ], - "char": '\ud83c\udfb3', - fitzpatrick_scale: false, - category: "activity" - }, - red_car: { - keywords: [ "red", "transportation", "vehicle" ], - "char": '\ud83d\ude97', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - taxi: { - keywords: [ "uber", "vehicle", "cars", "transportation" ], - "char": '\ud83d\ude95', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - blue_car: { - keywords: [ "transportation", "vehicle" ], - "char": '\ud83d\ude99', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - bus: { - keywords: [ "car", "vehicle", "transportation" ], - "char": '\ud83d\ude8c', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - trolleybus: { - keywords: [ "bart", "transportation", "vehicle" ], - "char": '\ud83d\ude8e', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - racing_car: { - keywords: [ "sports", "race", "fast", "formula", "f1" ], - "char": '\ud83c\udfce', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - police_car: { - keywords: [ "vehicle", "cars", "transportation", "law", "legal", "enforcement" ], - "char": '\ud83d\ude93', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - ambulance: { - keywords: [ "health", "911", "hospital" ], - "char": '\ud83d\ude91', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - fire_engine: { - keywords: [ "transportation", "cars", "vehicle" ], - "char": '\ud83d\ude92', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - minibus: { - keywords: [ "vehicle", "car", "transportation" ], - "char": '\ud83d\ude90', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - truck: { - keywords: [ "cars", "transportation" ], - "char": '\ud83d\ude9a', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - articulated_lorry: { - keywords: [ "vehicle", "cars", "transportation", "express" ], - "char": '\ud83d\ude9b', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - tractor: { - keywords: [ "vehicle", "car", "farming", "agriculture" ], - "char": '\ud83d\ude9c', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - kick_scooter: { - keywords: [ "vehicle", "kick", "razor" ], - "char": '\ud83d\udef4', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - motorcycle: { - keywords: [ "race", "sports", "fast" ], - "char": '\ud83c\udfcd', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - bike: { - keywords: [ "sports", "bicycle", "exercise", "hipster" ], - "char": '\ud83d\udeb2', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - motor_scooter: { - keywords: [ "vehicle", "vespa", "sasha" ], - "char": '\ud83d\udef5', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - rotating_light: { - keywords: [ "police", "ambulance", "911", "emergency", "alert", "error", "pinged", "law", "legal" ], - "char": '\ud83d\udea8', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - oncoming_police_car: { - keywords: [ "vehicle", "law", "legal", "enforcement", "911" ], - "char": '\ud83d\ude94', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - oncoming_bus: { - keywords: [ "vehicle", "transportation" ], - "char": '\ud83d\ude8d', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - oncoming_automobile: { - keywords: [ "car", "vehicle", "transportation" ], - "char": '\ud83d\ude98', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - oncoming_taxi: { - keywords: [ "vehicle", "cars", "uber" ], - "char": '\ud83d\ude96', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - aerial_tramway: { - keywords: [ "transportation", "vehicle", "ski" ], - "char": '\ud83d\udea1', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - mountain_cableway: { - keywords: [ "transportation", "vehicle", "ski" ], - "char": '\ud83d\udea0', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - suspension_railway: { - keywords: [ "vehicle", "transportation" ], - "char": '\ud83d\ude9f', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - railway_car: { - keywords: [ "transportation", "vehicle" ], - "char": '\ud83d\ude83', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - train: { - keywords: [ "transportation", "vehicle", "carriage", "public", "travel" ], - "char": '\ud83d\ude8b', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - monorail: { - keywords: [ "transportation", "vehicle" ], - "char": '\ud83d\ude9d', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - bullettrain_side: { - keywords: [ "transportation", "vehicle" ], - "char": '\ud83d\ude84', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - bullettrain_front: { - keywords: [ "transportation", "vehicle", "speed", "fast", "public", "travel" ], - "char": '\ud83d\ude85', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - light_rail: { - keywords: [ "transportation", "vehicle" ], - "char": '\ud83d\ude88', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - mountain_railway: { - keywords: [ "transportation", "vehicle" ], - "char": '\ud83d\ude9e', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - steam_locomotive: { - keywords: [ "transportation", "vehicle", "train" ], - "char": '\ud83d\ude82', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - train2: { - keywords: [ "transportation", "vehicle" ], - "char": '\ud83d\ude86', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - metro: { - keywords: [ "transportation", "blue-square", "mrt", "underground", "tube" ], - "char": '\ud83d\ude87', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - tram: { - keywords: [ "transportation", "vehicle" ], - "char": '\ud83d\ude8a', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - station: { - keywords: [ "transportation", "vehicle", "public" ], - "char": '\ud83d\ude89', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - flying_saucer: { - keywords: [ "transportation", "vehicle", "ufo" ], - "char": '\ud83d\udef8', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - helicopter: { - keywords: [ "transportation", "vehicle", "fly" ], - "char": '\ud83d\ude81', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - small_airplane: { - keywords: [ "flight", "transportation", "fly", "vehicle" ], - "char": '\ud83d\udee9', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - airplane: { - keywords: [ "vehicle", "transportation", "flight", "fly" ], - "char": '\u2708\ufe0f', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - flight_departure: { - keywords: [ "airport", "flight", "landing" ], - "char": '\ud83d\udeeb', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - flight_arrival: { - keywords: [ "airport", "flight", "boarding" ], - "char": '\ud83d\udeec', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - sailboat: { - keywords: [ "ship", "summer", "transportation", "water", "sailing" ], - "char": '\u26f5', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - motor_boat: { - keywords: [ "ship" ], - "char": '\ud83d\udee5', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - speedboat: { - keywords: [ "ship", "transportation", "vehicle", "summer" ], - "char": '\ud83d\udea4', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - ferry: { - keywords: [ "boat", "ship", "yacht" ], - "char": '\u26f4', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - passenger_ship: { - keywords: [ "yacht", "cruise", "ferry" ], - "char": '\ud83d\udef3', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - rocket: { - keywords: [ "launch", "ship", "staffmode", "NASA", "outer space", "outer_space", "fly" ], - "char": '\ud83d\ude80', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - artificial_satellite: { - keywords: [ "communication", "gps", "orbit", "spaceflight", "NASA", "ISS" ], - "char": '\ud83d\udef0', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - seat: { - keywords: [ "sit", "airplane", "transport", "bus", "flight", "fly" ], - "char": '\ud83d\udcba', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - canoe: { - keywords: [ "boat", "paddle", "water", "ship" ], - "char": '\ud83d\udef6', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - anchor: { - keywords: [ "ship", "ferry", "sea", "boat" ], - "char": '\u2693', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - construction: { - keywords: [ "wip", "progress", "caution", "warning" ], - "char": '\ud83d\udea7', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - fuelpump: { - keywords: [ "gas station", "petroleum" ], - "char": '\u26fd', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - busstop: { - keywords: [ "transportation", "wait" ], - "char": '\ud83d\ude8f', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - vertical_traffic_light: { - keywords: [ "transportation", "driving" ], - "char": '\ud83d\udea6', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - traffic_light: { - keywords: [ "transportation", "signal" ], - "char": '\ud83d\udea5', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - checkered_flag: { - keywords: [ "contest", "finishline", "race", "gokart" ], - "char": '\ud83c\udfc1', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - ship: { - keywords: [ "transportation", "titanic", "deploy" ], - "char": '\ud83d\udea2', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - ferris_wheel: { - keywords: [ "photo", "carnival", "londoneye" ], - "char": '\ud83c\udfa1', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - roller_coaster: { - keywords: [ "carnival", "playground", "photo", "fun" ], - "char": '\ud83c\udfa2', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - carousel_horse: { - keywords: [ "photo", "carnival" ], - "char": '\ud83c\udfa0', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - building_construction: { - keywords: [ "wip", "working", "progress" ], - "char": '\ud83c\udfd7', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - foggy: { - keywords: [ "photo", "mountain" ], - "char": '\ud83c\udf01', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - tokyo_tower: { - keywords: [ "photo", "japanese" ], - "char": '\ud83d\uddfc', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - factory: { - keywords: [ "building", "industry", "pollution", "smoke" ], - "char": '\ud83c\udfed', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - fountain: { - keywords: [ "photo", "summer", "water", "fresh" ], - "char": '\u26f2', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - rice_scene: { - keywords: [ "photo", "japan", "asia", "tsukimi" ], - "char": '\ud83c\udf91', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - mountain: { - keywords: [ "photo", "nature", "environment" ], - "char": '\u26f0', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - mountain_snow: { - keywords: [ "photo", "nature", "environment", "winter", "cold" ], - "char": '\ud83c\udfd4', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - mount_fuji: { - keywords: [ "photo", "mountain", "nature", "japanese" ], - "char": '\ud83d\uddfb', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - volcano: { - keywords: [ "photo", "nature", "disaster" ], - "char": '\ud83c\udf0b', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - japan: { - keywords: [ "nation", "country", "japanese", "asia" ], - "char": '\ud83d\uddfe', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - camping: { - keywords: [ "photo", "outdoors", "tent" ], - "char": '\ud83c\udfd5', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - tent: { - keywords: [ "photo", "camping", "outdoors" ], - "char": '\u26fa', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - national_park: { - keywords: [ "photo", "environment", "nature" ], - "char": '\ud83c\udfde', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - motorway: { - keywords: [ "road", "cupertino", "interstate", "highway" ], - "char": '\ud83d\udee3', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - railway_track: { - keywords: [ "train", "transportation" ], - "char": '\ud83d\udee4', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - sunrise: { - keywords: [ "morning", "view", "vacation", "photo" ], - "char": '\ud83c\udf05', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - sunrise_over_mountains: { - keywords: [ "view", "vacation", "photo" ], - "char": '\ud83c\udf04', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - desert: { - keywords: [ "photo", "warm", "saharah" ], - "char": '\ud83c\udfdc', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - beach_umbrella: { - keywords: [ "weather", "summer", "sunny", "sand", "mojito" ], - "char": '\ud83c\udfd6', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - desert_island: { - keywords: [ "photo", "tropical", "mojito" ], - "char": '\ud83c\udfdd', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - city_sunrise: { - keywords: [ "photo", "good morning", "dawn" ], - "char": '\ud83c\udf07', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - city_sunset: { - keywords: [ "photo", "evening", "sky", "buildings" ], - "char": '\ud83c\udf06', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - cityscape: { - keywords: [ "photo", "night life", "urban" ], - "char": '\ud83c\udfd9', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - night_with_stars: { - keywords: [ "evening", "city", "downtown" ], - "char": '\ud83c\udf03', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - bridge_at_night: { - keywords: [ "photo", "sanfrancisco" ], - "char": '\ud83c\udf09', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - milky_way: { - keywords: [ "photo", "space", "stars" ], - "char": '\ud83c\udf0c', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - stars: { - keywords: [ "night", "photo" ], - "char": '\ud83c\udf20', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - sparkler: { - keywords: [ "stars", "night", "shine" ], - "char": '\ud83c\udf87', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - fireworks: { - keywords: [ "photo", "festival", "carnival", "congratulations" ], - "char": '\ud83c\udf86', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - rainbow: { - keywords: [ "nature", "happy", "unicorn_face", "photo", "sky", "spring" ], - "char": '\ud83c\udf08', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - houses: { - keywords: [ "buildings", "photo" ], - "char": '\ud83c\udfd8', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - european_castle: { - keywords: [ "building", "royalty", "history" ], - "char": '\ud83c\udff0', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - japanese_castle: { - keywords: [ "photo", "building" ], - "char": '\ud83c\udfef', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - stadium: { - keywords: [ "photo", "place", "sports", "concert", "venue" ], - "char": '\ud83c\udfdf', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - statue_of_liberty: { - keywords: [ "american", "newyork" ], - "char": '\ud83d\uddfd', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - house: { - keywords: [ "building", "home" ], - "char": '\ud83c\udfe0', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - house_with_garden: { - keywords: [ "home", "plant", "nature" ], - "char": '\ud83c\udfe1', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - derelict_house: { - keywords: [ "abandon", "evict", "broken", "building" ], - "char": '\ud83c\udfda', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - office: { - keywords: [ "building", "bureau", "work" ], - "char": '\ud83c\udfe2', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - department_store: { - keywords: [ "building", "shopping", "mall" ], - "char": '\ud83c\udfec', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - post_office: { - keywords: [ "building", "envelope", "communication" ], - "char": '\ud83c\udfe3', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - european_post_office: { - keywords: [ "building", "email" ], - "char": '\ud83c\udfe4', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - hospital: { - keywords: [ "building", "health", "surgery", "doctor" ], - "char": '\ud83c\udfe5', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - bank: { - keywords: [ "building", "money", "sales", "cash", "business", "enterprise" ], - "char": '\ud83c\udfe6', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - hotel: { - keywords: [ "building", "accomodation", "checkin" ], - "char": '\ud83c\udfe8', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - convenience_store: { - keywords: [ "building", "shopping", "groceries" ], - "char": '\ud83c\udfea', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - school: { - keywords: [ "building", "student", "education", "learn", "teach" ], - "char": '\ud83c\udfeb', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - love_hotel: { - keywords: [ "like", "affection", "dating" ], - "char": '\ud83c\udfe9', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - wedding: { - keywords: [ "love", "like", "affection", "couple", "marriage", "bride", "groom" ], - "char": '\ud83d\udc92', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - classical_building: { - keywords: [ "art", "culture", "history" ], - "char": '\ud83c\udfdb', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - church: { - keywords: [ "building", "religion", "christ" ], - "char": '\u26ea', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - mosque: { - keywords: [ "islam", "worship", "minaret" ], - "char": '\ud83d\udd4c', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - synagogue: { - keywords: [ "judaism", "worship", "temple", "jewish" ], - "char": '\ud83d\udd4d', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - kaaba: { - keywords: [ "mecca", "mosque", "islam" ], - "char": '\ud83d\udd4b', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - shinto_shrine: { - keywords: [ "temple", "japan", "kyoto" ], - "char": '\u26e9', - fitzpatrick_scale: false, - category: "travel_and_places" - }, - watch: { - keywords: [ "time", "accessories" ], - "char": '\u231a', - fitzpatrick_scale: false, - category: "objects" - }, - iphone: { - keywords: [ "technology", "apple", "gadgets", "dial" ], - "char": '\ud83d\udcf1', - fitzpatrick_scale: false, - category: "objects" - }, - calling: { - keywords: [ "iphone", "incoming" ], - "char": '\ud83d\udcf2', - fitzpatrick_scale: false, - category: "objects" - }, - computer: { - keywords: [ "technology", "laptop", "screen", "display", "monitor" ], - "char": '\ud83d\udcbb', - fitzpatrick_scale: false, - category: "objects" - }, - keyboard: { - keywords: [ "technology", "computer", "type", "input", "text" ], - "char": '\u2328', - fitzpatrick_scale: false, - category: "objects" - }, - desktop_computer: { - keywords: [ "technology", "computing", "screen" ], - "char": '\ud83d\udda5', - fitzpatrick_scale: false, - category: "objects" - }, - printer: { - keywords: [ "paper", "ink" ], - "char": '\ud83d\udda8', - fitzpatrick_scale: false, - category: "objects" - }, - computer_mouse: { - keywords: [ "click" ], - "char": '\ud83d\uddb1', - fitzpatrick_scale: false, - category: "objects" - }, - trackball: { - keywords: [ "technology", "trackpad" ], - "char": '\ud83d\uddb2', - fitzpatrick_scale: false, - category: "objects" - }, - joystick: { - keywords: [ "game", "play" ], - "char": '\ud83d\udd79', - fitzpatrick_scale: false, - category: "objects" - }, - clamp: { - keywords: [ "tool" ], - "char": '\ud83d\udddc', - fitzpatrick_scale: false, - category: "objects" - }, - minidisc: { - keywords: [ "technology", "record", "data", "disk", "90s" ], - "char": '\ud83d\udcbd', - fitzpatrick_scale: false, - category: "objects" - }, - floppy_disk: { - keywords: [ "oldschool", "technology", "save", "90s", "80s" ], - "char": '\ud83d\udcbe', - fitzpatrick_scale: false, - category: "objects" - }, - cd: { - keywords: [ "technology", "dvd", "disk", "disc", "90s" ], - "char": '\ud83d\udcbf', - fitzpatrick_scale: false, - category: "objects" - }, - dvd: { - keywords: [ "cd", "disk", "disc" ], - "char": '\ud83d\udcc0', - fitzpatrick_scale: false, - category: "objects" - }, - vhs: { - keywords: [ "record", "video", "oldschool", "90s", "80s" ], - "char": '\ud83d\udcfc', - fitzpatrick_scale: false, - category: "objects" - }, - camera: { - keywords: [ "gadgets", "photography" ], - "char": '\ud83d\udcf7', - fitzpatrick_scale: false, - category: "objects" - }, - camera_flash: { - keywords: [ "photography", "gadgets" ], - "char": '\ud83d\udcf8', - fitzpatrick_scale: false, - category: "objects" - }, - video_camera: { - keywords: [ "film", "record" ], - "char": '\ud83d\udcf9', - fitzpatrick_scale: false, - category: "objects" - }, - movie_camera: { - keywords: [ "film", "record" ], - "char": '\ud83c\udfa5', - fitzpatrick_scale: false, - category: "objects" - }, - film_projector: { - keywords: [ "video", "tape", "record", "movie" ], - "char": '\ud83d\udcfd', - fitzpatrick_scale: false, - category: "objects" - }, - film_strip: { - keywords: [ "movie" ], - "char": '\ud83c\udf9e', - fitzpatrick_scale: false, - category: "objects" - }, - telephone_receiver: { - keywords: [ "technology", "communication", "dial" ], - "char": '\ud83d\udcde', - fitzpatrick_scale: false, - category: "objects" - }, - phone: { - keywords: [ "technology", "communication", "dial", "telephone" ], - "char": '\u260e\ufe0f', - fitzpatrick_scale: false, - category: "objects" - }, - pager: { - keywords: [ "bbcall", "oldschool", "90s" ], - "char": '\ud83d\udcdf', - fitzpatrick_scale: false, - category: "objects" - }, - fax: { - keywords: [ "communication", "technology" ], - "char": '\ud83d\udce0', - fitzpatrick_scale: false, - category: "objects" - }, - tv: { - keywords: [ "technology", "program", "oldschool", "show", "television" ], - "char": '\ud83d\udcfa', - fitzpatrick_scale: false, - category: "objects" - }, - radio: { - keywords: [ "communication", "music", "podcast", "program" ], - "char": '\ud83d\udcfb', - fitzpatrick_scale: false, - category: "objects" - }, - studio_microphone: { - keywords: [ "sing", "recording", "artist", "talkshow" ], - "char": '\ud83c\udf99', - fitzpatrick_scale: false, - category: "objects" - }, - level_slider: { - keywords: [ "scale" ], - "char": '\ud83c\udf9a', - fitzpatrick_scale: false, - category: "objects" - }, - control_knobs: { - keywords: [ "dial" ], - "char": '\ud83c\udf9b', - fitzpatrick_scale: false, - category: "objects" - }, - compass: { - keywords: [ "magnetic", "navigation", "orienteering" ], - "char": '\ud83e\udded', - fitzpatrick_scale: false, - category: "objects" - }, - stopwatch: { - keywords: [ "time", "deadline" ], - "char": '\u23f1', - fitzpatrick_scale: false, - category: "objects" - }, - timer_clock: { - keywords: [ "alarm" ], - "char": '\u23f2', - fitzpatrick_scale: false, - category: "objects" - }, - alarm_clock: { - keywords: [ "time", "wake" ], - "char": '\u23f0', - fitzpatrick_scale: false, - category: "objects" - }, - mantelpiece_clock: { - keywords: [ "time" ], - "char": '\ud83d\udd70', - fitzpatrick_scale: false, - category: "objects" - }, - hourglass_flowing_sand: { - keywords: [ "oldschool", "time", "countdown" ], - "char": '\u23f3', - fitzpatrick_scale: false, - category: "objects" - }, - hourglass: { - keywords: [ "time", "clock", "oldschool", "limit", "exam", "quiz", "test" ], - "char": '\u231b', - fitzpatrick_scale: false, - category: "objects" - }, - satellite: { - keywords: [ "communication", "future", "radio", "space" ], - "char": '\ud83d\udce1', - fitzpatrick_scale: false, - category: "objects" - }, - battery: { - keywords: [ "power", "energy", "sustain" ], - "char": '\ud83d\udd0b', - fitzpatrick_scale: false, - category: "objects" - }, - electric_plug: { - keywords: [ "charger", "power" ], - "char": '\ud83d\udd0c', - fitzpatrick_scale: false, - category: "objects" - }, - bulb: { - keywords: [ "light", "electricity", "idea" ], - "char": '\ud83d\udca1', - fitzpatrick_scale: false, - category: "objects" - }, - flashlight: { - keywords: [ "dark", "camping", "sight", "night" ], - "char": '\ud83d\udd26', - fitzpatrick_scale: false, - category: "objects" - }, - candle: { - keywords: [ "fire", "wax" ], - "char": '\ud83d\udd6f', - fitzpatrick_scale: false, - category: "objects" - }, - fire_extinguisher: { - keywords: [ "quench" ], - "char": '\ud83e\uddef', - fitzpatrick_scale: false, - category: "objects" - }, - wastebasket: { - keywords: [ "bin", "trash", "rubbish", "garbage", "toss" ], - "char": '\ud83d\uddd1', - fitzpatrick_scale: false, - category: "objects" - }, - oil_drum: { - keywords: [ "barrell" ], - "char": '\ud83d\udee2', - fitzpatrick_scale: false, - category: "objects" - }, - money_with_wings: { - keywords: [ "dollar", "bills", "payment", "sale" ], - "char": '\ud83d\udcb8', - fitzpatrick_scale: false, - category: "objects" - }, - dollar: { - keywords: [ "money", "sales", "bill", "currency" ], - "char": '\ud83d\udcb5', - fitzpatrick_scale: false, - category: "objects" - }, - yen: { - keywords: [ "money", "sales", "japanese", "dollar", "currency" ], - "char": '\ud83d\udcb4', - fitzpatrick_scale: false, - category: "objects" - }, - euro: { - keywords: [ "money", "sales", "dollar", "currency" ], - "char": '\ud83d\udcb6', - fitzpatrick_scale: false, - category: "objects" - }, - pound: { - keywords: [ "british", "sterling", "money", "sales", "bills", "uk", "england", "currency" ], - "char": '\ud83d\udcb7', - fitzpatrick_scale: false, - category: "objects" - }, - moneybag: { - keywords: [ "dollar", "payment", "coins", "sale" ], - "char": '\ud83d\udcb0', - fitzpatrick_scale: false, - category: "objects" - }, - credit_card: { - keywords: [ "money", "sales", "dollar", "bill", "payment", "shopping" ], - "char": '\ud83d\udcb3', - fitzpatrick_scale: false, - category: "objects" - }, - gem: { - keywords: [ "blue", "ruby", "diamond", "jewelry" ], - "char": '\ud83d\udc8e', - fitzpatrick_scale: false, - category: "objects" - }, - balance_scale: { - keywords: [ "law", "fairness", "weight" ], - "char": '\u2696', - fitzpatrick_scale: false, - category: "objects" - }, - toolbox: { - keywords: [ "tools", "diy", "fix", "maintainer", "mechanic" ], - "char": '\ud83e\uddf0', - fitzpatrick_scale: false, - category: "objects" - }, - wrench: { - keywords: [ "tools", "diy", "ikea", "fix", "maintainer" ], - "char": '\ud83d\udd27', - fitzpatrick_scale: false, - category: "objects" - }, - hammer: { - keywords: [ "tools", "build", "create" ], - "char": '\ud83d\udd28', - fitzpatrick_scale: false, - category: "objects" - }, - hammer_and_pick: { - keywords: [ "tools", "build", "create" ], - "char": '\u2692', - fitzpatrick_scale: false, - category: "objects" - }, - hammer_and_wrench: { - keywords: [ "tools", "build", "create" ], - "char": '\ud83d\udee0', - fitzpatrick_scale: false, - category: "objects" - }, - pick: { - keywords: [ "tools", "dig" ], - "char": '\u26cf', - fitzpatrick_scale: false, - category: "objects" - }, - nut_and_bolt: { - keywords: [ "handy", "tools", "fix" ], - "char": '\ud83d\udd29', - fitzpatrick_scale: false, - category: "objects" - }, - gear: { - keywords: [ "cog" ], - "char": '\u2699', - fitzpatrick_scale: false, - category: "objects" - }, - brick: { - keywords: [ "bricks" ], - "char": '\ud83e\uddf1', - fitzpatrick_scale: false, - category: "objects" - }, - chains: { - keywords: [ "lock", "arrest" ], - "char": '\u26d3', - fitzpatrick_scale: false, - category: "objects" - }, - magnet: { - keywords: [ "attraction", "magnetic" ], - "char": '\ud83e\uddf2', - fitzpatrick_scale: false, - category: "objects" - }, - gun: { - keywords: [ "violence", "weapon", "pistol", "revolver" ], - "char": '\ud83d\udd2b', - fitzpatrick_scale: false, - category: "objects" - }, - bomb: { - keywords: [ "boom", "explode", "explosion", "terrorism" ], - "char": '\ud83d\udca3', - fitzpatrick_scale: false, - category: "objects" - }, - firecracker: { - keywords: [ "dynamite", "boom", "explode", "explosion", "explosive" ], - "char": '\ud83e\udde8', - fitzpatrick_scale: false, - category: "objects" - }, - hocho: { - keywords: [ "knife", "blade", "cutlery", "kitchen", "weapon" ], - "char": '\ud83d\udd2a', - fitzpatrick_scale: false, - category: "objects" - }, - dagger: { - keywords: [ "weapon" ], - "char": '\ud83d\udde1', - fitzpatrick_scale: false, - category: "objects" - }, - crossed_swords: { - keywords: [ "weapon" ], - "char": '\u2694', - fitzpatrick_scale: false, - category: "objects" - }, - shield: { - keywords: [ "protection", "security" ], - "char": '\ud83d\udee1', - fitzpatrick_scale: false, - category: "objects" - }, - smoking: { - keywords: [ "kills", "tobacco", "cigarette", "joint", "smoke" ], - "char": '\ud83d\udeac', - fitzpatrick_scale: false, - category: "objects" - }, - skull_and_crossbones: { - keywords: [ "poison", "danger", "deadly", "scary", "death", "pirate", "evil" ], - "char": '\u2620', - fitzpatrick_scale: false, - category: "objects" - }, - coffin: { - keywords: [ "vampire", "dead", "die", "death", "rip", "graveyard", "cemetery", "casket", "funeral", "box" ], - "char": '\u26b0', - fitzpatrick_scale: false, - category: "objects" - }, - funeral_urn: { - keywords: [ "dead", "die", "death", "rip", "ashes" ], - "char": '\u26b1', - fitzpatrick_scale: false, - category: "objects" - }, - amphora: { - keywords: [ "vase", "jar" ], - "char": '\ud83c\udffa', - fitzpatrick_scale: false, - category: "objects" - }, - crystal_ball: { - keywords: [ "disco", "party", "magic", "circus", "fortune_teller" ], - "char": '\ud83d\udd2e', - fitzpatrick_scale: false, - category: "objects" - }, - prayer_beads: { - keywords: [ "dhikr", "religious" ], - "char": '\ud83d\udcff', - fitzpatrick_scale: false, - category: "objects" - }, - nazar_amulet: { - keywords: [ "bead", "charm" ], - "char": '\ud83e\uddff', - fitzpatrick_scale: false, - category: "objects" - }, - barber: { - keywords: [ "hair", "salon", "style" ], - "char": '\ud83d\udc88', - fitzpatrick_scale: false, - category: "objects" - }, - alembic: { - keywords: [ "distilling", "science", "experiment", "chemistry" ], - "char": '\u2697', - fitzpatrick_scale: false, - category: "objects" - }, - telescope: { - keywords: [ "stars", "space", "zoom", "science", "astronomy" ], - "char": '\ud83d\udd2d', - fitzpatrick_scale: false, - category: "objects" - }, - microscope: { - keywords: [ "laboratory", "experiment", "zoomin", "science", "study" ], - "char": '\ud83d\udd2c', - fitzpatrick_scale: false, - category: "objects" - }, - hole: { - keywords: [ "embarrassing" ], - "char": '\ud83d\udd73', - fitzpatrick_scale: false, - category: "objects" - }, - pill: { - keywords: [ "health", "medicine", "doctor", "pharmacy", "drug" ], - "char": '\ud83d\udc8a', - fitzpatrick_scale: false, - category: "objects" - }, - syringe: { - keywords: [ "health", "hospital", "drugs", "blood", "medicine", "needle", "doctor", "nurse" ], - "char": '\ud83d\udc89', - fitzpatrick_scale: false, - category: "objects" - }, - dna: { - keywords: [ "biologist", "genetics", "life" ], - "char": '\ud83e\uddec', - fitzpatrick_scale: false, - category: "objects" - }, - microbe: { - keywords: [ "amoeba", "bacteria", "germs" ], - "char": '\ud83e\udda0', - fitzpatrick_scale: false, - category: "objects" - }, - petri_dish: { - keywords: [ "bacteria", "biology", "culture", "lab" ], - "char": '\ud83e\uddeb', - fitzpatrick_scale: false, - category: "objects" - }, - test_tube: { - keywords: [ "chemistry", "experiment", "lab", "science" ], - "char": '\ud83e\uddea', - fitzpatrick_scale: false, - category: "objects" - }, - thermometer: { - keywords: [ "weather", "temperature", "hot", "cold" ], - "char": '\ud83c\udf21', - fitzpatrick_scale: false, - category: "objects" - }, - broom: { - keywords: [ "cleaning", "sweeping", "witch" ], - "char": '\ud83e\uddf9', - fitzpatrick_scale: false, - category: "objects" - }, - basket: { - keywords: [ "laundry" ], - "char": '\ud83e\uddfa', - fitzpatrick_scale: false, - category: "objects" - }, - toilet_paper: { - keywords: [ "roll" ], - "char": '\ud83e\uddfb', - fitzpatrick_scale: false, - category: "objects" - }, - label: { - keywords: [ "sale", "tag" ], - "char": '\ud83c\udff7', - fitzpatrick_scale: false, - category: "objects" - }, - bookmark: { - keywords: [ "favorite", "label", "save" ], - "char": '\ud83d\udd16', - fitzpatrick_scale: false, - category: "objects" - }, - toilet: { - keywords: [ "restroom", "wc", "washroom", "bathroom", "potty" ], - "char": '\ud83d\udebd', - fitzpatrick_scale: false, - category: "objects" - }, - shower: { - keywords: [ "clean", "water", "bathroom" ], - "char": '\ud83d\udebf', - fitzpatrick_scale: false, - category: "objects" - }, - bathtub: { - keywords: [ "clean", "shower", "bathroom" ], - "char": '\ud83d\udec1', - fitzpatrick_scale: false, - category: "objects" - }, - soap: { - keywords: [ "bar", "bathing", "cleaning", "lather" ], - "char": '\ud83e\uddfc', - fitzpatrick_scale: false, - category: "objects" - }, - sponge: { - keywords: [ "absorbing", "cleaning", "porous" ], - "char": '\ud83e\uddfd', - fitzpatrick_scale: false, - category: "objects" - }, - lotion_bottle: { - keywords: [ "moisturizer", "sunscreen" ], - "char": '\ud83e\uddf4', - fitzpatrick_scale: false, - category: "objects" - }, - key: { - keywords: [ "lock", "door", "password" ], - "char": '\ud83d\udd11', - fitzpatrick_scale: false, - category: "objects" - }, - old_key: { - keywords: [ "lock", "door", "password" ], - "char": '\ud83d\udddd', - fitzpatrick_scale: false, - category: "objects" - }, - couch_and_lamp: { - keywords: [ "read", "chill" ], - "char": '\ud83d\udecb', - fitzpatrick_scale: false, - category: "objects" - }, - sleeping_bed: { - keywords: [ "bed", "rest" ], - "char": '\ud83d\udecc', - fitzpatrick_scale: true, - category: "objects" - }, - bed: { - keywords: [ "sleep", "rest" ], - "char": '\ud83d\udecf', - fitzpatrick_scale: false, - category: "objects" - }, - door: { - keywords: [ "house", "entry", "exit" ], - "char": '\ud83d\udeaa', - fitzpatrick_scale: false, - category: "objects" - }, - bellhop_bell: { - keywords: [ "service" ], - "char": '\ud83d\udece', - fitzpatrick_scale: false, - category: "objects" - }, - teddy_bear: { - keywords: [ "plush", "stuffed" ], - "char": '\ud83e\uddf8', - fitzpatrick_scale: false, - category: "objects" - }, - framed_picture: { - keywords: [ "photography" ], - "char": '\ud83d\uddbc', - fitzpatrick_scale: false, - category: "objects" - }, - world_map: { - keywords: [ "location", "direction" ], - "char": '\ud83d\uddfa', - fitzpatrick_scale: false, - category: "objects" - }, - parasol_on_ground: { - keywords: [ "weather", "summer" ], - "char": '\u26f1', - fitzpatrick_scale: false, - category: "objects" - }, - moyai: { - keywords: [ "rock", "easter island", "moai" ], - "char": '\ud83d\uddff', - fitzpatrick_scale: false, - category: "objects" - }, - shopping: { - keywords: [ "mall", "buy", "purchase" ], - "char": '\ud83d\udecd', - fitzpatrick_scale: false, - category: "objects" - }, - shopping_cart: { - keywords: [ "trolley" ], - "char": '\ud83d\uded2', - fitzpatrick_scale: false, - category: "objects" - }, - balloon: { - keywords: [ "party", "celebration", "birthday", "circus" ], - "char": '\ud83c\udf88', - fitzpatrick_scale: false, - category: "objects" - }, - flags: { - keywords: [ "fish", "japanese", "koinobori", "carp", "banner" ], - "char": '\ud83c\udf8f', - fitzpatrick_scale: false, - category: "objects" - }, - ribbon: { - keywords: [ "decoration", "pink", "girl", "bowtie" ], - "char": '\ud83c\udf80', - fitzpatrick_scale: false, - category: "objects" - }, - gift: { - keywords: [ "present", "birthday", "christmas", "xmas" ], - "char": '\ud83c\udf81', - fitzpatrick_scale: false, - category: "objects" - }, - confetti_ball: { - keywords: [ "festival", "party", "birthday", "circus" ], - "char": '\ud83c\udf8a', - fitzpatrick_scale: false, - category: "objects" - }, - tada: { - keywords: [ "party", "congratulations", "birthday", "magic", "circus", "celebration" ], - "char": '\ud83c\udf89', - fitzpatrick_scale: false, - category: "objects" - }, - dolls: { - keywords: [ "japanese", "toy", "kimono" ], - "char": '\ud83c\udf8e', - fitzpatrick_scale: false, - category: "objects" - }, - wind_chime: { - keywords: [ "nature", "ding", "spring", "bell" ], - "char": '\ud83c\udf90', - fitzpatrick_scale: false, - category: "objects" - }, - crossed_flags: { - keywords: [ "japanese", "nation", "country", "border" ], - "char": '\ud83c\udf8c', - fitzpatrick_scale: false, - category: "objects" - }, - izakaya_lantern: { - keywords: [ "light", "paper", "halloween", "spooky" ], - "char": '\ud83c\udfee', - fitzpatrick_scale: false, - category: "objects" - }, - red_envelope: { - keywords: [ "gift" ], - "char": '\ud83e\udde7', - fitzpatrick_scale: false, - category: "objects" - }, - email: { - keywords: [ "letter", "postal", "inbox", "communication" ], - "char": '\u2709\ufe0f', - fitzpatrick_scale: false, - category: "objects" - }, - envelope_with_arrow: { - keywords: [ "email", "communication" ], - "char": '\ud83d\udce9', - fitzpatrick_scale: false, - category: "objects" - }, - incoming_envelope: { - keywords: [ "email", "inbox" ], - "char": '\ud83d\udce8', - fitzpatrick_scale: false, - category: "objects" - }, - "e-mail": { - keywords: [ "communication", "inbox" ], - "char": '\ud83d\udce7', - fitzpatrick_scale: false, - category: "objects" - }, - love_letter: { - keywords: [ "email", "like", "affection", "envelope", "valentines" ], - "char": '\ud83d\udc8c', - fitzpatrick_scale: false, - category: "objects" - }, - postbox: { - keywords: [ "email", "letter", "envelope" ], - "char": '\ud83d\udcee', - fitzpatrick_scale: false, - category: "objects" - }, - mailbox_closed: { - keywords: [ "email", "communication", "inbox" ], - "char": '\ud83d\udcea', - fitzpatrick_scale: false, - category: "objects" - }, - mailbox: { - keywords: [ "email", "inbox", "communication" ], - "char": '\ud83d\udceb', - fitzpatrick_scale: false, - category: "objects" - }, - mailbox_with_mail: { - keywords: [ "email", "inbox", "communication" ], - "char": '\ud83d\udcec', - fitzpatrick_scale: false, - category: "objects" - }, - mailbox_with_no_mail: { - keywords: [ "email", "inbox" ], - "char": '\ud83d\udced', - fitzpatrick_scale: false, - category: "objects" - }, - "package": { - keywords: [ "mail", "gift", "cardboard", "box", "moving" ], - "char": '\ud83d\udce6', - fitzpatrick_scale: false, - category: "objects" - }, - postal_horn: { - keywords: [ "instrument", "music" ], - "char": '\ud83d\udcef', - fitzpatrick_scale: false, - category: "objects" - }, - inbox_tray: { - keywords: [ "email", "documents" ], - "char": '\ud83d\udce5', - fitzpatrick_scale: false, - category: "objects" - }, - outbox_tray: { - keywords: [ "inbox", "email" ], - "char": '\ud83d\udce4', - fitzpatrick_scale: false, - category: "objects" - }, - scroll: { - keywords: [ "documents", "ancient", "history", "paper" ], - "char": '\ud83d\udcdc', - fitzpatrick_scale: false, - category: "objects" - }, - page_with_curl: { - keywords: [ "documents", "office", "paper" ], - "char": '\ud83d\udcc3', - fitzpatrick_scale: false, - category: "objects" - }, - bookmark_tabs: { - keywords: [ "favorite", "save", "order", "tidy" ], - "char": '\ud83d\udcd1', - fitzpatrick_scale: false, - category: "objects" - }, - receipt: { - keywords: [ "accounting", "expenses" ], - "char": '\ud83e\uddfe', - fitzpatrick_scale: false, - category: "objects" - }, - bar_chart: { - keywords: [ "graph", "presentation", "stats" ], - "char": '\ud83d\udcca', - fitzpatrick_scale: false, - category: "objects" - }, - chart_with_upwards_trend: { - keywords: [ "graph", "presentation", "stats", "recovery", "business", "economics", "money", "sales", "good", "success" ], - "char": '\ud83d\udcc8', - fitzpatrick_scale: false, - category: "objects" - }, - chart_with_downwards_trend: { - keywords: [ "graph", "presentation", "stats", "recession", "business", "economics", "money", "sales", "bad", "failure" ], - "char": '\ud83d\udcc9', - fitzpatrick_scale: false, - category: "objects" - }, - page_facing_up: { - keywords: [ "documents", "office", "paper", "information" ], - "char": '\ud83d\udcc4', - fitzpatrick_scale: false, - category: "objects" - }, - date: { - keywords: [ "calendar", "schedule" ], - "char": '\ud83d\udcc5', - fitzpatrick_scale: false, - category: "objects" - }, - calendar: { - keywords: [ "schedule", "date", "planning" ], - "char": '\ud83d\udcc6', - fitzpatrick_scale: false, - category: "objects" - }, - spiral_calendar: { - keywords: [ "date", "schedule", "planning" ], - "char": '\ud83d\uddd3', - fitzpatrick_scale: false, - category: "objects" - }, - card_index: { - keywords: [ "business", "stationery" ], - "char": '\ud83d\udcc7', - fitzpatrick_scale: false, - category: "objects" - }, - card_file_box: { - keywords: [ "business", "stationery" ], - "char": '\ud83d\uddc3', - fitzpatrick_scale: false, - category: "objects" - }, - ballot_box: { - keywords: [ "election", "vote" ], - "char": '\ud83d\uddf3', - fitzpatrick_scale: false, - category: "objects" - }, - file_cabinet: { - keywords: [ "filing", "organizing" ], - "char": '\ud83d\uddc4', - fitzpatrick_scale: false, - category: "objects" - }, - clipboard: { - keywords: [ "stationery", "documents" ], - "char": '\ud83d\udccb', - fitzpatrick_scale: false, - category: "objects" - }, - spiral_notepad: { - keywords: [ "memo", "stationery" ], - "char": '\ud83d\uddd2', - fitzpatrick_scale: false, - category: "objects" - }, - file_folder: { - keywords: [ "documents", "business", "office" ], - "char": '\ud83d\udcc1', - fitzpatrick_scale: false, - category: "objects" - }, - open_file_folder: { - keywords: [ "documents", "load" ], - "char": '\ud83d\udcc2', - fitzpatrick_scale: false, - category: "objects" - }, - card_index_dividers: { - keywords: [ "organizing", "business", "stationery" ], - "char": '\ud83d\uddc2', - fitzpatrick_scale: false, - category: "objects" - }, - newspaper_roll: { - keywords: [ "press", "headline" ], - "char": '\ud83d\uddde', - fitzpatrick_scale: false, - category: "objects" - }, - newspaper: { - keywords: [ "press", "headline" ], - "char": '\ud83d\udcf0', - fitzpatrick_scale: false, - category: "objects" - }, - notebook: { - keywords: [ "stationery", "record", "notes", "paper", "study" ], - "char": '\ud83d\udcd3', - fitzpatrick_scale: false, - category: "objects" - }, - closed_book: { - keywords: [ "read", "library", "knowledge", "textbook", "learn" ], - "char": '\ud83d\udcd5', - fitzpatrick_scale: false, - category: "objects" - }, - green_book: { - keywords: [ "read", "library", "knowledge", "study" ], - "char": '\ud83d\udcd7', - fitzpatrick_scale: false, - category: "objects" - }, - blue_book: { - keywords: [ "read", "library", "knowledge", "learn", "study" ], - "char": '\ud83d\udcd8', - fitzpatrick_scale: false, - category: "objects" - }, - orange_book: { - keywords: [ "read", "library", "knowledge", "textbook", "study" ], - "char": '\ud83d\udcd9', - fitzpatrick_scale: false, - category: "objects" - }, - notebook_with_decorative_cover: { - keywords: [ "classroom", "notes", "record", "paper", "study" ], - "char": '\ud83d\udcd4', - fitzpatrick_scale: false, - category: "objects" - }, - ledger: { - keywords: [ "notes", "paper" ], - "char": '\ud83d\udcd2', - fitzpatrick_scale: false, - category: "objects" - }, - books: { - keywords: [ "literature", "library", "study" ], - "char": '\ud83d\udcda', - fitzpatrick_scale: false, - category: "objects" - }, - open_book: { - keywords: [ "book", "read", "library", "knowledge", "literature", "learn", "study" ], - "char": '\ud83d\udcd6', - fitzpatrick_scale: false, - category: "objects" - }, - safety_pin: { - keywords: [ "diaper" ], - "char": '\ud83e\uddf7', - fitzpatrick_scale: false, - category: "objects" - }, - link: { - keywords: [ "rings", "url" ], - "char": '\ud83d\udd17', - fitzpatrick_scale: false, - category: "objects" - }, - paperclip: { - keywords: [ "documents", "stationery" ], - "char": '\ud83d\udcce', - fitzpatrick_scale: false, - category: "objects" - }, - paperclips: { - keywords: [ "documents", "stationery" ], - "char": '\ud83d\udd87', - fitzpatrick_scale: false, - category: "objects" - }, - scissors: { - keywords: [ "stationery", "cut" ], - "char": '\u2702\ufe0f', - fitzpatrick_scale: false, - category: "objects" - }, - triangular_ruler: { - keywords: [ "stationery", "math", "architect", "sketch" ], - "char": '\ud83d\udcd0', - fitzpatrick_scale: false, - category: "objects" - }, - straight_ruler: { - keywords: [ "stationery", "calculate", "length", "math", "school", "drawing", "architect", "sketch" ], - "char": '\ud83d\udccf', - fitzpatrick_scale: false, - category: "objects" - }, - abacus: { - keywords: [ "calculation" ], - "char": '\ud83e\uddee', - fitzpatrick_scale: false, - category: "objects" - }, - pushpin: { - keywords: [ "stationery", "mark", "here" ], - "char": '\ud83d\udccc', - fitzpatrick_scale: false, - category: "objects" - }, - round_pushpin: { - keywords: [ "stationery", "location", "map", "here" ], - "char": '\ud83d\udccd', - fitzpatrick_scale: false, - category: "objects" - }, - triangular_flag_on_post: { - keywords: [ "mark", "milestone", "place" ], - "char": '\ud83d\udea9', - fitzpatrick_scale: false, - category: "objects" - }, - white_flag: { - keywords: [ "losing", "loser", "lost", "surrender", "give up", "fail" ], - "char": '\ud83c\udff3', - fitzpatrick_scale: false, - category: "objects" - }, - black_flag: { - keywords: [ "pirate" ], - "char": '\ud83c\udff4', - fitzpatrick_scale: false, - category: "objects" - }, - rainbow_flag: { - keywords: [ "flag", "rainbow", "pride", "gay", "lgbt", "glbt", "queer", "homosexual", "lesbian", "bisexual", "transgender" ], - "char": '\ud83c\udff3\ufe0f\u200d\ud83c\udf08', - fitzpatrick_scale: false, - category: "objects" - }, - closed_lock_with_key: { - keywords: [ "security", "privacy" ], - "char": '\ud83d\udd10', - fitzpatrick_scale: false, - category: "objects" - }, - lock: { - keywords: [ "security", "password", "padlock" ], - "char": '\ud83d\udd12', - fitzpatrick_scale: false, - category: "objects" - }, - unlock: { - keywords: [ "privacy", "security" ], - "char": '\ud83d\udd13', - fitzpatrick_scale: false, - category: "objects" - }, - lock_with_ink_pen: { - keywords: [ "security", "secret" ], - "char": '\ud83d\udd0f', - fitzpatrick_scale: false, - category: "objects" - }, - pen: { - keywords: [ "stationery", "writing", "write" ], - "char": '\ud83d\udd8a', - fitzpatrick_scale: false, - category: "objects" - }, - fountain_pen: { - keywords: [ "stationery", "writing", "write" ], - "char": '\ud83d\udd8b', - fitzpatrick_scale: false, - category: "objects" - }, - black_nib: { - keywords: [ "pen", "stationery", "writing", "write" ], - "char": '\u2712\ufe0f', - fitzpatrick_scale: false, - category: "objects" - }, - memo: { - keywords: [ "write", "documents", "stationery", "pencil", "paper", "writing", "legal", "exam", "quiz", "test", "study", "compose" ], - "char": '\ud83d\udcdd', - fitzpatrick_scale: false, - category: "objects" - }, - pencil2: { - keywords: [ "stationery", "write", "paper", "writing", "school", "study" ], - "char": '\u270f\ufe0f', - fitzpatrick_scale: false, - category: "objects" - }, - crayon: { - keywords: [ "drawing", "creativity" ], - "char": '\ud83d\udd8d', - fitzpatrick_scale: false, - category: "objects" - }, - paintbrush: { - keywords: [ "drawing", "creativity", "art" ], - "char": '\ud83d\udd8c', - fitzpatrick_scale: false, - category: "objects" - }, - mag: { - keywords: [ "search", "zoom", "find", "detective" ], - "char": '\ud83d\udd0d', - fitzpatrick_scale: false, - category: "objects" - }, - mag_right: { - keywords: [ "search", "zoom", "find", "detective" ], - "char": '\ud83d\udd0e', - fitzpatrick_scale: false, - category: "objects" - }, - heart: { - keywords: [ "love", "like", "valentines" ], - "char": '\u2764\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - orange_heart: { - keywords: [ "love", "like", "affection", "valentines" ], - "char": '\ud83e\udde1', - fitzpatrick_scale: false, - category: "symbols" - }, - yellow_heart: { - keywords: [ "love", "like", "affection", "valentines" ], - "char": '\ud83d\udc9b', - fitzpatrick_scale: false, - category: "symbols" - }, - green_heart: { - keywords: [ "love", "like", "affection", "valentines" ], - "char": '\ud83d\udc9a', - fitzpatrick_scale: false, - category: "symbols" - }, - blue_heart: { - keywords: [ "love", "like", "affection", "valentines" ], - "char": '\ud83d\udc99', - fitzpatrick_scale: false, - category: "symbols" - }, - purple_heart: { - keywords: [ "love", "like", "affection", "valentines" ], - "char": '\ud83d\udc9c', - fitzpatrick_scale: false, - category: "symbols" - }, - black_heart: { - keywords: [ "evil" ], - "char": '\ud83d\udda4', - fitzpatrick_scale: false, - category: "symbols" - }, - broken_heart: { - keywords: [ "sad", "sorry", "break", "heart", "heartbreak" ], - "char": '\ud83d\udc94', - fitzpatrick_scale: false, - category: "symbols" - }, - heavy_heart_exclamation: { - keywords: [ "decoration", "love" ], - "char": '\u2763', - fitzpatrick_scale: false, - category: "symbols" - }, - two_hearts: { - keywords: [ "love", "like", "affection", "valentines", "heart" ], - "char": '\ud83d\udc95', - fitzpatrick_scale: false, - category: "symbols" - }, - revolving_hearts: { - keywords: [ "love", "like", "affection", "valentines" ], - "char": '\ud83d\udc9e', - fitzpatrick_scale: false, - category: "symbols" - }, - heartbeat: { - keywords: [ "love", "like", "affection", "valentines", "pink", "heart" ], - "char": '\ud83d\udc93', - fitzpatrick_scale: false, - category: "symbols" - }, - heartpulse: { - keywords: [ "like", "love", "affection", "valentines", "pink" ], - "char": '\ud83d\udc97', - fitzpatrick_scale: false, - category: "symbols" - }, - sparkling_heart: { - keywords: [ "love", "like", "affection", "valentines" ], - "char": '\ud83d\udc96', - fitzpatrick_scale: false, - category: "symbols" - }, - cupid: { - keywords: [ "love", "like", "heart", "affection", "valentines" ], - "char": '\ud83d\udc98', - fitzpatrick_scale: false, - category: "symbols" - }, - gift_heart: { - keywords: [ "love", "valentines" ], - "char": '\ud83d\udc9d', - fitzpatrick_scale: false, - category: "symbols" - }, - heart_decoration: { - keywords: [ "purple-square", "love", "like" ], - "char": '\ud83d\udc9f', - fitzpatrick_scale: false, - category: "symbols" - }, - peace_symbol: { - keywords: [ "hippie" ], - "char": '\u262e', - fitzpatrick_scale: false, - category: "symbols" - }, - latin_cross: { - keywords: [ "christianity" ], - "char": '\u271d', - fitzpatrick_scale: false, - category: "symbols" - }, - star_and_crescent: { - keywords: [ "islam" ], - "char": '\u262a', - fitzpatrick_scale: false, - category: "symbols" - }, - om: { - keywords: [ "hinduism", "buddhism", "sikhism", "jainism" ], - "char": '\ud83d\udd49', - fitzpatrick_scale: false, - category: "symbols" - }, - wheel_of_dharma: { - keywords: [ "hinduism", "buddhism", "sikhism", "jainism" ], - "char": '\u2638', - fitzpatrick_scale: false, - category: "symbols" - }, - star_of_david: { - keywords: [ "judaism" ], - "char": '\u2721', - fitzpatrick_scale: false, - category: "symbols" - }, - six_pointed_star: { - keywords: [ "purple-square", "religion", "jewish", "hexagram" ], - "char": '\ud83d\udd2f', - fitzpatrick_scale: false, - category: "symbols" - }, - menorah: { - keywords: [ "hanukkah", "candles", "jewish" ], - "char": '\ud83d\udd4e', - fitzpatrick_scale: false, - category: "symbols" - }, - yin_yang: { - keywords: [ "balance" ], - "char": '\u262f', - fitzpatrick_scale: false, - category: "symbols" - }, - orthodox_cross: { - keywords: [ "suppedaneum", "religion" ], - "char": '\u2626', - fitzpatrick_scale: false, - category: "symbols" - }, - place_of_worship: { - keywords: [ "religion", "church", "temple", "prayer" ], - "char": '\ud83d\uded0', - fitzpatrick_scale: false, - category: "symbols" - }, - ophiuchus: { - keywords: [ "sign", "purple-square", "constellation", "astrology" ], - "char": '\u26ce', - fitzpatrick_scale: false, - category: "symbols" - }, - aries: { - keywords: [ "sign", "purple-square", "zodiac", "astrology" ], - "char": '\u2648', - fitzpatrick_scale: false, - category: "symbols" - }, - taurus: { - keywords: [ "purple-square", "sign", "zodiac", "astrology" ], - "char": '\u2649', - fitzpatrick_scale: false, - category: "symbols" - }, - gemini: { - keywords: [ "sign", "zodiac", "purple-square", "astrology" ], - "char": '\u264a', - fitzpatrick_scale: false, - category: "symbols" - }, - cancer: { - keywords: [ "sign", "zodiac", "purple-square", "astrology" ], - "char": '\u264b', - fitzpatrick_scale: false, - category: "symbols" - }, - leo: { - keywords: [ "sign", "purple-square", "zodiac", "astrology" ], - "char": '\u264c', - fitzpatrick_scale: false, - category: "symbols" - }, - virgo: { - keywords: [ "sign", "zodiac", "purple-square", "astrology" ], - "char": '\u264d', - fitzpatrick_scale: false, - category: "symbols" - }, - libra: { - keywords: [ "sign", "purple-square", "zodiac", "astrology" ], - "char": '\u264e', - fitzpatrick_scale: false, - category: "symbols" - }, - scorpius: { - keywords: [ "sign", "zodiac", "purple-square", "astrology", "scorpio" ], - "char": '\u264f', - fitzpatrick_scale: false, - category: "symbols" - }, - sagittarius: { - keywords: [ "sign", "zodiac", "purple-square", "astrology" ], - "char": '\u2650', - fitzpatrick_scale: false, - category: "symbols" - }, - capricorn: { - keywords: [ "sign", "zodiac", "purple-square", "astrology" ], - "char": '\u2651', - fitzpatrick_scale: false, - category: "symbols" - }, - aquarius: { - keywords: [ "sign", "purple-square", "zodiac", "astrology" ], - "char": '\u2652', - fitzpatrick_scale: false, - category: "symbols" - }, - pisces: { - keywords: [ "purple-square", "sign", "zodiac", "astrology" ], - "char": '\u2653', - fitzpatrick_scale: false, - category: "symbols" - }, - id: { - keywords: [ "purple-square", "words" ], - "char": '\ud83c\udd94', - fitzpatrick_scale: false, - category: "symbols" - }, - atom_symbol: { - keywords: [ "science", "physics", "chemistry" ], - "char": '\u269b', - fitzpatrick_scale: false, - category: "symbols" - }, - u7a7a: { - keywords: [ "kanji", "japanese", "chinese", "empty", "sky", "blue-square" ], - "char": '\ud83c\ude33', - fitzpatrick_scale: false, - category: "symbols" - }, - u5272: { - keywords: [ "cut", "divide", "chinese", "kanji", "pink-square" ], - "char": '\ud83c\ude39', - fitzpatrick_scale: false, - category: "symbols" - }, - radioactive: { - keywords: [ "nuclear", "danger" ], - "char": '\u2622', - fitzpatrick_scale: false, - category: "symbols" - }, - biohazard: { - keywords: [ "danger" ], - "char": '\u2623', - fitzpatrick_scale: false, - category: "symbols" - }, - mobile_phone_off: { - keywords: [ "mute", "orange-square", "silence", "quiet" ], - "char": '\ud83d\udcf4', - fitzpatrick_scale: false, - category: "symbols" - }, - vibration_mode: { - keywords: [ "orange-square", "phone" ], - "char": '\ud83d\udcf3', - fitzpatrick_scale: false, - category: "symbols" - }, - u6709: { - keywords: [ "orange-square", "chinese", "have", "kanji" ], - "char": '\ud83c\ude36', - fitzpatrick_scale: false, - category: "symbols" - }, - u7121: { - keywords: [ "nothing", "chinese", "kanji", "japanese", "orange-square" ], - "char": '\ud83c\ude1a', - fitzpatrick_scale: false, - category: "symbols" - }, - u7533: { - keywords: [ "chinese", "japanese", "kanji", "orange-square" ], - "char": '\ud83c\ude38', - fitzpatrick_scale: false, - category: "symbols" - }, - u55b6: { - keywords: [ "japanese", "opening hours", "orange-square" ], - "char": '\ud83c\ude3a', - fitzpatrick_scale: false, - category: "symbols" - }, - u6708: { - keywords: [ "chinese", "month", "moon", "japanese", "orange-square", "kanji" ], - "char": '\ud83c\ude37\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - eight_pointed_black_star: { - keywords: [ "orange-square", "shape", "polygon" ], - "char": '\u2734\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - vs: { - keywords: [ "words", "orange-square" ], - "char": '\ud83c\udd9a', - fitzpatrick_scale: false, - category: "symbols" - }, - accept: { - keywords: [ "ok", "good", "chinese", "kanji", "agree", "yes", "orange-circle" ], - "char": '\ud83c\ude51', - fitzpatrick_scale: false, - category: "symbols" - }, - white_flower: { - keywords: [ "japanese", "spring" ], - "char": '\ud83d\udcae', - fitzpatrick_scale: false, - category: "symbols" - }, - ideograph_advantage: { - keywords: [ "chinese", "kanji", "obtain", "get", "circle" ], - "char": '\ud83c\ude50', - fitzpatrick_scale: false, - category: "symbols" - }, - secret: { - keywords: [ "privacy", "chinese", "sshh", "kanji", "red-circle" ], - "char": '\u3299\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - congratulations: { - keywords: [ "chinese", "kanji", "japanese", "red-circle" ], - "char": '\u3297\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - u5408: { - keywords: [ "japanese", "chinese", "join", "kanji", "red-square" ], - "char": '\ud83c\ude34', - fitzpatrick_scale: false, - category: "symbols" - }, - u6e80: { - keywords: [ "full", "chinese", "japanese", "red-square", "kanji" ], - "char": '\ud83c\ude35', - fitzpatrick_scale: false, - category: "symbols" - }, - u7981: { - keywords: [ "kanji", "japanese", "chinese", "forbidden", "limit", "restricted", "red-square" ], - "char": '\ud83c\ude32', - fitzpatrick_scale: false, - category: "symbols" - }, - a: { - keywords: [ "red-square", "alphabet", "letter" ], - "char": '\ud83c\udd70\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - b: { - keywords: [ "red-square", "alphabet", "letter" ], - "char": '\ud83c\udd71\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - ab: { - keywords: [ "red-square", "alphabet" ], - "char": '\ud83c\udd8e', - fitzpatrick_scale: false, - category: "symbols" - }, - cl: { - keywords: [ "alphabet", "words", "red-square" ], - "char": '\ud83c\udd91', - fitzpatrick_scale: false, - category: "symbols" - }, - o2: { - keywords: [ "alphabet", "red-square", "letter" ], - "char": '\ud83c\udd7e\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - sos: { - keywords: [ "help", "red-square", "words", "emergency", "911" ], - "char": '\ud83c\udd98', - fitzpatrick_scale: false, - category: "symbols" - }, - no_entry: { - keywords: [ "limit", "security", "privacy", "bad", "denied", "stop", "circle" ], - "char": '\u26d4', - fitzpatrick_scale: false, - category: "symbols" - }, - name_badge: { - keywords: [ "fire", "forbid" ], - "char": '\ud83d\udcdb', - fitzpatrick_scale: false, - category: "symbols" - }, - no_entry_sign: { - keywords: [ "forbid", "stop", "limit", "denied", "disallow", "circle" ], - "char": '\ud83d\udeab', - fitzpatrick_scale: false, - category: "symbols" - }, - x: { - keywords: [ "no", "delete", "remove", "cancel", "red" ], - "char": '\u274c', - fitzpatrick_scale: false, - category: "symbols" - }, - o: { - keywords: [ "circle", "round" ], - "char": '\u2b55', - fitzpatrick_scale: false, - category: "symbols" - }, - stop_sign: { - keywords: [ "stop" ], - "char": '\ud83d\uded1', - fitzpatrick_scale: false, - category: "symbols" - }, - anger: { - keywords: [ "angry", "mad" ], - "char": '\ud83d\udca2', - fitzpatrick_scale: false, - category: "symbols" - }, - hotsprings: { - keywords: [ "bath", "warm", "relax" ], - "char": '\u2668\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - no_pedestrians: { - keywords: [ "rules", "crossing", "walking", "circle" ], - "char": '\ud83d\udeb7', - fitzpatrick_scale: false, - category: "symbols" - }, - do_not_litter: { - keywords: [ "trash", "bin", "garbage", "circle" ], - "char": '\ud83d\udeaf', - fitzpatrick_scale: false, - category: "symbols" - }, - no_bicycles: { - keywords: [ "cyclist", "prohibited", "circle" ], - "char": '\ud83d\udeb3', - fitzpatrick_scale: false, - category: "symbols" - }, - "non-potable_water": { - keywords: [ "drink", "faucet", "tap", "circle" ], - "char": '\ud83d\udeb1', - fitzpatrick_scale: false, - category: "symbols" - }, - underage: { - keywords: [ "18", "drink", "pub", "night", "minor", "circle" ], - "char": '\ud83d\udd1e', - fitzpatrick_scale: false, - category: "symbols" - }, - no_mobile_phones: { - keywords: [ "iphone", "mute", "circle" ], - "char": '\ud83d\udcf5', - fitzpatrick_scale: false, - category: "symbols" - }, - exclamation: { - keywords: [ "heavy_exclamation_mark", "danger", "surprise", "punctuation", "wow", "warning" ], - "char": '\u2757', - fitzpatrick_scale: false, - category: "symbols" - }, - grey_exclamation: { - keywords: [ "surprise", "punctuation", "gray", "wow", "warning" ], - "char": '\u2755', - fitzpatrick_scale: false, - category: "symbols" - }, - question: { - keywords: [ "doubt", "confused" ], - "char": '\u2753', - fitzpatrick_scale: false, - category: "symbols" - }, - grey_question: { - keywords: [ "doubts", "gray", "huh", "confused" ], - "char": '\u2754', - fitzpatrick_scale: false, - category: "symbols" - }, - bangbang: { - keywords: [ "exclamation", "surprise" ], - "char": '\u203c\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - interrobang: { - keywords: [ "wat", "punctuation", "surprise" ], - "char": '\u2049\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - low_brightness: { - keywords: [ "sun", "afternoon", "warm", "summer" ], - "char": '\ud83d\udd05', - fitzpatrick_scale: false, - category: "symbols" - }, - high_brightness: { - keywords: [ "sun", "light" ], - "char": '\ud83d\udd06', - fitzpatrick_scale: false, - category: "symbols" - }, - trident: { - keywords: [ "weapon", "spear" ], - "char": '\ud83d\udd31', - fitzpatrick_scale: false, - category: "symbols" - }, - fleur_de_lis: { - keywords: [ "decorative", "scout" ], - "char": '\u269c', - fitzpatrick_scale: false, - category: "symbols" - }, - part_alternation_mark: { - keywords: [ "graph", "presentation", "stats", "business", "economics", "bad" ], - "char": '\u303d\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - warning: { - keywords: [ "exclamation", "wip", "alert", "error", "problem", "issue" ], - "char": '\u26a0\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - children_crossing: { - keywords: [ "school", "warning", "danger", "sign", "driving", "yellow-diamond" ], - "char": '\ud83d\udeb8', - fitzpatrick_scale: false, - category: "symbols" - }, - beginner: { - keywords: [ "badge", "shield" ], - "char": '\ud83d\udd30', - fitzpatrick_scale: false, - category: "symbols" - }, - recycle: { - keywords: [ "arrow", "environment", "garbage", "trash" ], - "char": '\u267b\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - u6307: { - keywords: [ "chinese", "point", "green-square", "kanji" ], - "char": '\ud83c\ude2f', - fitzpatrick_scale: false, - category: "symbols" - }, - chart: { - keywords: [ "green-square", "graph", "presentation", "stats" ], - "char": '\ud83d\udcb9', - fitzpatrick_scale: false, - category: "symbols" - }, - sparkle: { - keywords: [ "stars", "green-square", "awesome", "good", "fireworks" ], - "char": '\u2747\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - eight_spoked_asterisk: { - keywords: [ "star", "sparkle", "green-square" ], - "char": '\u2733\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - negative_squared_cross_mark: { - keywords: [ "x", "green-square", "no", "deny" ], - "char": '\u274e', - fitzpatrick_scale: false, - category: "symbols" - }, - white_check_mark: { - keywords: [ "green-square", "ok", "agree", "vote", "election", "answer", "tick" ], - "char": '\u2705', - fitzpatrick_scale: false, - category: "symbols" - }, - diamond_shape_with_a_dot_inside: { - keywords: [ "jewel", "blue", "gem", "crystal", "fancy" ], - "char": '\ud83d\udca0', - fitzpatrick_scale: false, - category: "symbols" - }, - cyclone: { - keywords: [ "weather", "swirl", "blue", "cloud", "vortex", "spiral", "whirlpool", "spin", "tornado", "hurricane", "typhoon" ], - "char": '\ud83c\udf00', - fitzpatrick_scale: false, - category: "symbols" - }, - loop: { - keywords: [ "tape", "cassette" ], - "char": '\u27bf', - fitzpatrick_scale: false, - category: "symbols" - }, - globe_with_meridians: { - keywords: [ "earth", "international", "world", "internet", "interweb", "i18n" ], - "char": '\ud83c\udf10', - fitzpatrick_scale: false, - category: "symbols" - }, - m: { - keywords: [ "alphabet", "blue-circle", "letter" ], - "char": '\u24c2\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - atm: { - keywords: [ "money", "sales", "cash", "blue-square", "payment", "bank" ], - "char": '\ud83c\udfe7', - fitzpatrick_scale: false, - category: "symbols" - }, - sa: { - keywords: [ "japanese", "blue-square", "katakana" ], - "char": '\ud83c\ude02\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - passport_control: { - keywords: [ "custom", "blue-square" ], - "char": '\ud83d\udec2', - fitzpatrick_scale: false, - category: "symbols" - }, - customs: { - keywords: [ "passport", "border", "blue-square" ], - "char": '\ud83d\udec3', - fitzpatrick_scale: false, - category: "symbols" - }, - baggage_claim: { - keywords: [ "blue-square", "airport", "transport" ], - "char": '\ud83d\udec4', - fitzpatrick_scale: false, - category: "symbols" - }, - left_luggage: { - keywords: [ "blue-square", "travel" ], - "char": '\ud83d\udec5', - fitzpatrick_scale: false, - category: "symbols" - }, - wheelchair: { - keywords: [ "blue-square", "disabled", "a11y", "accessibility" ], - "char": '\u267f', - fitzpatrick_scale: false, - category: "symbols" - }, - no_smoking: { - keywords: [ "cigarette", "blue-square", "smell", "smoke" ], - "char": '\ud83d\udead', - fitzpatrick_scale: false, - category: "symbols" - }, - wc: { - keywords: [ "toilet", "restroom", "blue-square" ], - "char": '\ud83d\udebe', - fitzpatrick_scale: false, - category: "symbols" - }, - parking: { - keywords: [ "cars", "blue-square", "alphabet", "letter" ], - "char": '\ud83c\udd7f\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - potable_water: { - keywords: [ "blue-square", "liquid", "restroom", "cleaning", "faucet" ], - "char": '\ud83d\udeb0', - fitzpatrick_scale: false, - category: "symbols" - }, - mens: { - keywords: [ "toilet", "restroom", "wc", "blue-square", "gender", "male" ], - "char": '\ud83d\udeb9', - fitzpatrick_scale: false, - category: "symbols" - }, - womens: { - keywords: [ "purple-square", "woman", "female", "toilet", "loo", "restroom", "gender" ], - "char": '\ud83d\udeba', - fitzpatrick_scale: false, - category: "symbols" - }, - baby_symbol: { - keywords: [ "orange-square", "child" ], - "char": '\ud83d\udebc', - fitzpatrick_scale: false, - category: "symbols" - }, - restroom: { - keywords: [ "blue-square", "toilet", "refresh", "wc", "gender" ], - "char": '\ud83d\udebb', - fitzpatrick_scale: false, - category: "symbols" - }, - put_litter_in_its_place: { - keywords: [ "blue-square", "sign", "human", "info" ], - "char": '\ud83d\udeae', - fitzpatrick_scale: false, - category: "symbols" - }, - cinema: { - keywords: [ "blue-square", "record", "film", "movie", "curtain", "stage", "theater" ], - "char": '\ud83c\udfa6', - fitzpatrick_scale: false, - category: "symbols" - }, - signal_strength: { - keywords: [ "blue-square", "reception", "phone", "internet", "connection", "wifi", "bluetooth", "bars" ], - "char": '\ud83d\udcf6', - fitzpatrick_scale: false, - category: "symbols" - }, - koko: { - keywords: [ "blue-square", "here", "katakana", "japanese", "destination" ], - "char": '\ud83c\ude01', - fitzpatrick_scale: false, - category: "symbols" - }, - ng: { - keywords: [ "blue-square", "words", "shape", "icon" ], - "char": '\ud83c\udd96', - fitzpatrick_scale: false, - category: "symbols" - }, - ok: { - keywords: [ "good", "agree", "yes", "blue-square" ], - "char": '\ud83c\udd97', - fitzpatrick_scale: false, - category: "symbols" - }, - up: { - keywords: [ "blue-square", "above", "high" ], - "char": '\ud83c\udd99', - fitzpatrick_scale: false, - category: "symbols" - }, - cool: { - keywords: [ "words", "blue-square" ], - "char": '\ud83c\udd92', - fitzpatrick_scale: false, - category: "symbols" - }, - "new": { - keywords: [ "blue-square", "words", "start" ], - "char": '\ud83c\udd95', - fitzpatrick_scale: false, - category: "symbols" - }, - free: { - keywords: [ "blue-square", "words" ], - "char": '\ud83c\udd93', - fitzpatrick_scale: false, - category: "symbols" - }, - zero: { - keywords: [ "0", "numbers", "blue-square", "null" ], - "char": '0\ufe0f\u20e3', - fitzpatrick_scale: false, - category: "symbols" - }, - one: { - keywords: [ "blue-square", "numbers", "1" ], - "char": '1\ufe0f\u20e3', - fitzpatrick_scale: false, - category: "symbols" - }, - two: { - keywords: [ "numbers", "2", "prime", "blue-square" ], - "char": '2\ufe0f\u20e3', - fitzpatrick_scale: false, - category: "symbols" - }, - three: { - keywords: [ "3", "numbers", "prime", "blue-square" ], - "char": '3\ufe0f\u20e3', - fitzpatrick_scale: false, - category: "symbols" - }, - four: { - keywords: [ "4", "numbers", "blue-square" ], - "char": '4\ufe0f\u20e3', - fitzpatrick_scale: false, - category: "symbols" - }, - five: { - keywords: [ "5", "numbers", "blue-square", "prime" ], - "char": '5\ufe0f\u20e3', - fitzpatrick_scale: false, - category: "symbols" - }, - six: { - keywords: [ "6", "numbers", "blue-square" ], - "char": '6\ufe0f\u20e3', - fitzpatrick_scale: false, - category: "symbols" - }, - seven: { - keywords: [ "7", "numbers", "blue-square", "prime" ], - "char": '7\ufe0f\u20e3', - fitzpatrick_scale: false, - category: "symbols" - }, - eight: { - keywords: [ "8", "blue-square", "numbers" ], - "char": '8\ufe0f\u20e3', - fitzpatrick_scale: false, - category: "symbols" - }, - nine: { - keywords: [ "blue-square", "numbers", "9" ], - "char": '9\ufe0f\u20e3', - fitzpatrick_scale: false, - category: "symbols" - }, - keycap_ten: { - keywords: [ "numbers", "10", "blue-square" ], - "char": '\ud83d\udd1f', - fitzpatrick_scale: false, - category: "symbols" - }, - asterisk: { - keywords: [ "star", "keycap" ], - "char": '*\u20e3', - fitzpatrick_scale: false, - category: "symbols" - }, - eject_button: { - keywords: [ "blue-square" ], - "char": '\u23cf\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_forward: { - keywords: [ "blue-square", "right", "direction", "play" ], - "char": '\u25b6\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - pause_button: { - keywords: [ "pause", "blue-square" ], - "char": '\u23f8', - fitzpatrick_scale: false, - category: "symbols" - }, - next_track_button: { - keywords: [ "forward", "next", "blue-square" ], - "char": '\u23ed', - fitzpatrick_scale: false, - category: "symbols" - }, - stop_button: { - keywords: [ "blue-square" ], - "char": '\u23f9', - fitzpatrick_scale: false, - category: "symbols" - }, - record_button: { - keywords: [ "blue-square" ], - "char": '\u23fa', - fitzpatrick_scale: false, - category: "symbols" - }, - play_or_pause_button: { - keywords: [ "blue-square", "play", "pause" ], - "char": '\u23ef', - fitzpatrick_scale: false, - category: "symbols" - }, - previous_track_button: { - keywords: [ "backward" ], - "char": '\u23ee', - fitzpatrick_scale: false, - category: "symbols" - }, - fast_forward: { - keywords: [ "blue-square", "play", "speed", "continue" ], - "char": '\u23e9', - fitzpatrick_scale: false, - category: "symbols" - }, - rewind: { - keywords: [ "play", "blue-square" ], - "char": '\u23ea', - fitzpatrick_scale: false, - category: "symbols" - }, - twisted_rightwards_arrows: { - keywords: [ "blue-square", "shuffle", "music", "random" ], - "char": '\ud83d\udd00', - fitzpatrick_scale: false, - category: "symbols" - }, - repeat: { - keywords: [ "loop", "record" ], - "char": '\ud83d\udd01', - fitzpatrick_scale: false, - category: "symbols" - }, - repeat_one: { - keywords: [ "blue-square", "loop" ], - "char": '\ud83d\udd02', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_backward: { - keywords: [ "blue-square", "left", "direction" ], - "char": '\u25c0\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_up_small: { - keywords: [ "blue-square", "triangle", "direction", "point", "forward", "top" ], - "char": '\ud83d\udd3c', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_down_small: { - keywords: [ "blue-square", "direction", "bottom" ], - "char": '\ud83d\udd3d', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_double_up: { - keywords: [ "blue-square", "direction", "top" ], - "char": '\u23eb', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_double_down: { - keywords: [ "blue-square", "direction", "bottom" ], - "char": '\u23ec', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_right: { - keywords: [ "blue-square", "next" ], - "char": '\u27a1\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_left: { - keywords: [ "blue-square", "previous", "back" ], - "char": '\u2b05\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_up: { - keywords: [ "blue-square", "continue", "top", "direction" ], - "char": '\u2b06\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_down: { - keywords: [ "blue-square", "direction", "bottom" ], - "char": '\u2b07\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_upper_right: { - keywords: [ "blue-square", "point", "direction", "diagonal", "northeast" ], - "char": '\u2197\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_lower_right: { - keywords: [ "blue-square", "direction", "diagonal", "southeast" ], - "char": '\u2198\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_lower_left: { - keywords: [ "blue-square", "direction", "diagonal", "southwest" ], - "char": '\u2199\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_upper_left: { - keywords: [ "blue-square", "point", "direction", "diagonal", "northwest" ], - "char": '\u2196\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_up_down: { - keywords: [ "blue-square", "direction", "way", "vertical" ], - "char": '\u2195\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - left_right_arrow: { - keywords: [ "shape", "direction", "horizontal", "sideways" ], - "char": '\u2194\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - arrows_counterclockwise: { - keywords: [ "blue-square", "sync", "cycle" ], - "char": '\ud83d\udd04', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_right_hook: { - keywords: [ "blue-square", "return", "rotate", "direction" ], - "char": '\u21aa\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - leftwards_arrow_with_hook: { - keywords: [ "back", "return", "blue-square", "undo", "enter" ], - "char": '\u21a9\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_heading_up: { - keywords: [ "blue-square", "direction", "top" ], - "char": '\u2934\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_heading_down: { - keywords: [ "blue-square", "direction", "bottom" ], - "char": '\u2935\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - hash: { - keywords: [ "symbol", "blue-square", "twitter" ], - "char": '#\ufe0f\u20e3', - fitzpatrick_scale: false, - category: "symbols" - }, - information_source: { - keywords: [ "blue-square", "alphabet", "letter" ], - "char": '\u2139\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - abc: { - keywords: [ "blue-square", "alphabet" ], - "char": '\ud83d\udd24', - fitzpatrick_scale: false, - category: "symbols" - }, - abcd: { - keywords: [ "blue-square", "alphabet" ], - "char": '\ud83d\udd21', - fitzpatrick_scale: false, - category: "symbols" - }, - capital_abcd: { - keywords: [ "alphabet", "words", "blue-square" ], - "char": '\ud83d\udd20', - fitzpatrick_scale: false, - category: "symbols" - }, - symbols: { - keywords: [ "blue-square", "music", "note", "ampersand", "percent", "glyphs", "characters" ], - "char": '\ud83d\udd23', - fitzpatrick_scale: false, - category: "symbols" - }, - musical_note: { - keywords: [ "score", "tone", "sound" ], - "char": '\ud83c\udfb5', - fitzpatrick_scale: false, - category: "symbols" - }, - notes: { - keywords: [ "music", "score" ], - "char": '\ud83c\udfb6', - fitzpatrick_scale: false, - category: "symbols" - }, - wavy_dash: { - keywords: [ "draw", "line", "moustache", "mustache", "squiggle", "scribble" ], - "char": '\u3030\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - curly_loop: { - keywords: [ "scribble", "draw", "shape", "squiggle" ], - "char": '\u27b0', - fitzpatrick_scale: false, - category: "symbols" - }, - heavy_check_mark: { - keywords: [ "ok", "nike", "answer", "yes", "tick" ], - "char": '\u2714\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - arrows_clockwise: { - keywords: [ "sync", "cycle", "round", "repeat" ], - "char": '\ud83d\udd03', - fitzpatrick_scale: false, - category: "symbols" - }, - heavy_plus_sign: { - keywords: [ "math", "calculation", "addition", "more", "increase" ], - "char": '\u2795', - fitzpatrick_scale: false, - category: "symbols" - }, - heavy_minus_sign: { - keywords: [ "math", "calculation", "subtract", "less" ], - "char": '\u2796', - fitzpatrick_scale: false, - category: "symbols" - }, - heavy_division_sign: { - keywords: [ "divide", "math", "calculation" ], - "char": '\u2797', - fitzpatrick_scale: false, - category: "symbols" - }, - heavy_multiplication_x: { - keywords: [ "math", "calculation" ], - "char": '\u2716\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - infinity: { - keywords: [ "forever" ], - "char": '\u267e', - fitzpatrick_scale: false, - category: "symbols" - }, - heavy_dollar_sign: { - keywords: [ "money", "sales", "payment", "currency", "buck" ], - "char": '\ud83d\udcb2', - fitzpatrick_scale: false, - category: "symbols" - }, - currency_exchange: { - keywords: [ "money", "sales", "dollar", "travel" ], - "char": '\ud83d\udcb1', - fitzpatrick_scale: false, - category: "symbols" - }, - copyright: { - keywords: [ "ip", "license", "circle", "law", "legal" ], - "char": '\xa9\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - registered: { - keywords: [ "alphabet", "circle" ], - "char": '\xae\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - tm: { - keywords: [ "trademark", "brand", "law", "legal" ], - "char": '\u2122\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - end: { - keywords: [ "words", "arrow" ], - "char": '\ud83d\udd1a', - fitzpatrick_scale: false, - category: "symbols" - }, - back: { - keywords: [ "arrow", "words", "return" ], - "char": '\ud83d\udd19', - fitzpatrick_scale: false, - category: "symbols" - }, - on: { - keywords: [ "arrow", "words" ], - "char": '\ud83d\udd1b', - fitzpatrick_scale: false, - category: "symbols" - }, - top: { - keywords: [ "words", "blue-square" ], - "char": '\ud83d\udd1d', - fitzpatrick_scale: false, - category: "symbols" - }, - soon: { - keywords: [ "arrow", "words" ], - "char": '\ud83d\udd1c', - fitzpatrick_scale: false, - category: "symbols" - }, - ballot_box_with_check: { - keywords: [ "ok", "agree", "confirm", "black-square", "vote", "election", "yes", "tick" ], - "char": '\u2611\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - radio_button: { - keywords: [ "input", "old", "music", "circle" ], - "char": '\ud83d\udd18', - fitzpatrick_scale: false, - category: "symbols" - }, - white_circle: { - keywords: [ "shape", "round" ], - "char": '\u26aa', - fitzpatrick_scale: false, - category: "symbols" - }, - black_circle: { - keywords: [ "shape", "button", "round" ], - "char": '\u26ab', - fitzpatrick_scale: false, - category: "symbols" - }, - red_circle: { - keywords: [ "shape", "error", "danger" ], - "char": '\ud83d\udd34', - fitzpatrick_scale: false, - category: "symbols" - }, - large_blue_circle: { - keywords: [ "shape", "icon", "button" ], - "char": '\ud83d\udd35', - fitzpatrick_scale: false, - category: "symbols" - }, - small_orange_diamond: { - keywords: [ "shape", "jewel", "gem" ], - "char": '\ud83d\udd38', - fitzpatrick_scale: false, - category: "symbols" - }, - small_blue_diamond: { - keywords: [ "shape", "jewel", "gem" ], - "char": '\ud83d\udd39', - fitzpatrick_scale: false, - category: "symbols" - }, - large_orange_diamond: { - keywords: [ "shape", "jewel", "gem" ], - "char": '\ud83d\udd36', - fitzpatrick_scale: false, - category: "symbols" - }, - large_blue_diamond: { - keywords: [ "shape", "jewel", "gem" ], - "char": '\ud83d\udd37', - fitzpatrick_scale: false, - category: "symbols" - }, - small_red_triangle: { - keywords: [ "shape", "direction", "up", "top" ], - "char": '\ud83d\udd3a', - fitzpatrick_scale: false, - category: "symbols" - }, - black_small_square: { - keywords: [ "shape", "icon" ], - "char": '\u25aa\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - white_small_square: { - keywords: [ "shape", "icon" ], - "char": '\u25ab\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - black_large_square: { - keywords: [ "shape", "icon", "button" ], - "char": '\u2b1b', - fitzpatrick_scale: false, - category: "symbols" - }, - white_large_square: { - keywords: [ "shape", "icon", "stone", "button" ], - "char": '\u2b1c', - fitzpatrick_scale: false, - category: "symbols" - }, - small_red_triangle_down: { - keywords: [ "shape", "direction", "bottom" ], - "char": '\ud83d\udd3b', - fitzpatrick_scale: false, - category: "symbols" - }, - black_medium_square: { - keywords: [ "shape", "button", "icon" ], - "char": '\u25fc\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - white_medium_square: { - keywords: [ "shape", "stone", "icon" ], - "char": '\u25fb\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - black_medium_small_square: { - keywords: [ "icon", "shape", "button" ], - "char": '\u25fe', - fitzpatrick_scale: false, - category: "symbols" - }, - white_medium_small_square: { - keywords: [ "shape", "stone", "icon", "button" ], - "char": '\u25fd', - fitzpatrick_scale: false, - category: "symbols" - }, - black_square_button: { - keywords: [ "shape", "input", "frame" ], - "char": '\ud83d\udd32', - fitzpatrick_scale: false, - category: "symbols" - }, - white_square_button: { - keywords: [ "shape", "input" ], - "char": '\ud83d\udd33', - fitzpatrick_scale: false, - category: "symbols" - }, - speaker: { - keywords: [ "sound", "volume", "silence", "broadcast" ], - "char": '\ud83d\udd08', - fitzpatrick_scale: false, - category: "symbols" - }, - sound: { - keywords: [ "volume", "speaker", "broadcast" ], - "char": '\ud83d\udd09', - fitzpatrick_scale: false, - category: "symbols" - }, - loud_sound: { - keywords: [ "volume", "noise", "noisy", "speaker", "broadcast" ], - "char": '\ud83d\udd0a', - fitzpatrick_scale: false, - category: "symbols" - }, - mute: { - keywords: [ "sound", "volume", "silence", "quiet" ], - "char": '\ud83d\udd07', - fitzpatrick_scale: false, - category: "symbols" - }, - mega: { - keywords: [ "sound", "speaker", "volume" ], - "char": '\ud83d\udce3', - fitzpatrick_scale: false, - category: "symbols" - }, - loudspeaker: { - keywords: [ "volume", "sound" ], - "char": '\ud83d\udce2', - fitzpatrick_scale: false, - category: "symbols" - }, - bell: { - keywords: [ "sound", "notification", "christmas", "xmas", "chime" ], - "char": '\ud83d\udd14', - fitzpatrick_scale: false, - category: "symbols" - }, - no_bell: { - keywords: [ "sound", "volume", "mute", "quiet", "silent" ], - "char": '\ud83d\udd15', - fitzpatrick_scale: false, - category: "symbols" - }, - black_joker: { - keywords: [ "poker", "cards", "game", "play", "magic" ], - "char": '\ud83c\udccf', - fitzpatrick_scale: false, - category: "symbols" - }, - mahjong: { - keywords: [ "game", "play", "chinese", "kanji" ], - "char": '\ud83c\udc04', - fitzpatrick_scale: false, - category: "symbols" - }, - spades: { - keywords: [ "poker", "cards", "suits", "magic" ], - "char": '\u2660\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - clubs: { - keywords: [ "poker", "cards", "magic", "suits" ], - "char": '\u2663\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - hearts: { - keywords: [ "poker", "cards", "magic", "suits" ], - "char": '\u2665\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - diamonds: { - keywords: [ "poker", "cards", "magic", "suits" ], - "char": '\u2666\ufe0f', - fitzpatrick_scale: false, - category: "symbols" - }, - flower_playing_cards: { - keywords: [ "game", "sunset", "red" ], - "char": '\ud83c\udfb4', - fitzpatrick_scale: false, - category: "symbols" - }, - thought_balloon: { - keywords: [ "bubble", "cloud", "speech", "thinking", "dream" ], - "char": '\ud83d\udcad', - fitzpatrick_scale: false, - category: "symbols" - }, - right_anger_bubble: { - keywords: [ "caption", "speech", "thinking", "mad" ], - "char": '\ud83d\uddef', - fitzpatrick_scale: false, - category: "symbols" - }, - speech_balloon: { - keywords: [ "bubble", "words", "message", "talk", "chatting" ], - "char": '\ud83d\udcac', - fitzpatrick_scale: false, - category: "symbols" - }, - left_speech_bubble: { - keywords: [ "words", "message", "talk", "chatting" ], - "char": '\ud83d\udde8', - fitzpatrick_scale: false, - category: "symbols" - }, - clock1: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd50', - fitzpatrick_scale: false, - category: "symbols" - }, - clock2: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd51', - fitzpatrick_scale: false, - category: "symbols" - }, - clock3: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd52', - fitzpatrick_scale: false, - category: "symbols" - }, - clock4: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd53', - fitzpatrick_scale: false, - category: "symbols" - }, - clock5: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd54', - fitzpatrick_scale: false, - category: "symbols" - }, - clock6: { - keywords: [ "time", "late", "early", "schedule", "dawn", "dusk" ], - "char": '\ud83d\udd55', - fitzpatrick_scale: false, - category: "symbols" - }, - clock7: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd56', - fitzpatrick_scale: false, - category: "symbols" - }, - clock8: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd57', - fitzpatrick_scale: false, - category: "symbols" - }, - clock9: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd58', - fitzpatrick_scale: false, - category: "symbols" - }, - clock10: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd59', - fitzpatrick_scale: false, - category: "symbols" - }, - clock11: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd5a', - fitzpatrick_scale: false, - category: "symbols" - }, - clock12: { - keywords: [ "time", "noon", "midnight", "midday", "late", "early", "schedule" ], - "char": '\ud83d\udd5b', - fitzpatrick_scale: false, - category: "symbols" - }, - clock130: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd5c', - fitzpatrick_scale: false, - category: "symbols" - }, - clock230: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd5d', - fitzpatrick_scale: false, - category: "symbols" - }, - clock330: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd5e', - fitzpatrick_scale: false, - category: "symbols" - }, - clock430: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd5f', - fitzpatrick_scale: false, - category: "symbols" - }, - clock530: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd60', - fitzpatrick_scale: false, - category: "symbols" - }, - clock630: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd61', - fitzpatrick_scale: false, - category: "symbols" - }, - clock730: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd62', - fitzpatrick_scale: false, - category: "symbols" - }, - clock830: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd63', - fitzpatrick_scale: false, - category: "symbols" - }, - clock930: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd64', - fitzpatrick_scale: false, - category: "symbols" - }, - clock1030: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd65', - fitzpatrick_scale: false, - category: "symbols" - }, - clock1130: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd66', - fitzpatrick_scale: false, - category: "symbols" - }, - clock1230: { - keywords: [ "time", "late", "early", "schedule" ], - "char": '\ud83d\udd67', - fitzpatrick_scale: false, - category: "symbols" - }, - afghanistan: { - keywords: [ "af", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde6\ud83c\uddeb', - fitzpatrick_scale: false, - category: "flags" - }, - aland_islands: { - keywords: [ "\xc5land", "islands", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde6\ud83c\uddfd', - fitzpatrick_scale: false, - category: "flags" - }, - albania: { - keywords: [ "al", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde6\ud83c\uddf1', - fitzpatrick_scale: false, - category: "flags" - }, - algeria: { - keywords: [ "dz", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde9\ud83c\uddff', - fitzpatrick_scale: false, - category: "flags" - }, - american_samoa: { - keywords: [ "american", "ws", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde6\ud83c\uddf8', - fitzpatrick_scale: false, - category: "flags" - }, - andorra: { - keywords: [ "ad", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde6\ud83c\udde9', - fitzpatrick_scale: false, - category: "flags" - }, - angola: { - keywords: [ "ao", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde6\ud83c\uddf4', - fitzpatrick_scale: false, - category: "flags" - }, - anguilla: { - keywords: [ "ai", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde6\ud83c\uddee', - fitzpatrick_scale: false, - category: "flags" - }, - antarctica: { - keywords: [ "aq", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde6\ud83c\uddf6', - fitzpatrick_scale: false, - category: "flags" - }, - antigua_barbuda: { - keywords: [ "antigua", "barbuda", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde6\ud83c\uddec', - fitzpatrick_scale: false, - category: "flags" - }, - argentina: { - keywords: [ "ar", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde6\ud83c\uddf7', - fitzpatrick_scale: false, - category: "flags" - }, - armenia: { - keywords: [ "am", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde6\ud83c\uddf2', - fitzpatrick_scale: false, - category: "flags" - }, - aruba: { - keywords: [ "aw", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde6\ud83c\uddfc', - fitzpatrick_scale: false, - category: "flags" - }, - australia: { - keywords: [ "au", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde6\ud83c\uddfa', - fitzpatrick_scale: false, - category: "flags" - }, - austria: { - keywords: [ "at", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde6\ud83c\uddf9', - fitzpatrick_scale: false, - category: "flags" - }, - azerbaijan: { - keywords: [ "az", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde6\ud83c\uddff', - fitzpatrick_scale: false, - category: "flags" - }, - bahamas: { - keywords: [ "bs", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\uddf8', - fitzpatrick_scale: false, - category: "flags" - }, - bahrain: { - keywords: [ "bh", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\udded', - fitzpatrick_scale: false, - category: "flags" - }, - bangladesh: { - keywords: [ "bd", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\udde9', - fitzpatrick_scale: false, - category: "flags" - }, - barbados: { - keywords: [ "bb", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\udde7', - fitzpatrick_scale: false, - category: "flags" - }, - belarus: { - keywords: [ "by", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\uddfe', - fitzpatrick_scale: false, - category: "flags" - }, - belgium: { - keywords: [ "be", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\uddea', - fitzpatrick_scale: false, - category: "flags" - }, - belize: { - keywords: [ "bz", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\uddff', - fitzpatrick_scale: false, - category: "flags" - }, - benin: { - keywords: [ "bj", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\uddef', - fitzpatrick_scale: false, - category: "flags" - }, - bermuda: { - keywords: [ "bm", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\uddf2', - fitzpatrick_scale: false, - category: "flags" - }, - bhutan: { - keywords: [ "bt", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\uddf9', - fitzpatrick_scale: false, - category: "flags" - }, - bolivia: { - keywords: [ "bo", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\uddf4', - fitzpatrick_scale: false, - category: "flags" - }, - caribbean_netherlands: { - keywords: [ "bonaire", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\uddf6', - fitzpatrick_scale: false, - category: "flags" - }, - bosnia_herzegovina: { - keywords: [ "bosnia", "herzegovina", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\udde6', - fitzpatrick_scale: false, - category: "flags" - }, - botswana: { - keywords: [ "bw", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\uddfc', - fitzpatrick_scale: false, - category: "flags" - }, - brazil: { - keywords: [ "br", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\uddf7', - fitzpatrick_scale: false, - category: "flags" - }, - british_indian_ocean_territory: { - keywords: [ "british", "indian", "ocean", "territory", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddee\ud83c\uddf4', - fitzpatrick_scale: false, - category: "flags" - }, - british_virgin_islands: { - keywords: [ "british", "virgin", "islands", "bvi", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddfb\ud83c\uddec', - fitzpatrick_scale: false, - category: "flags" - }, - brunei: { - keywords: [ "bn", "darussalam", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\uddf3', - fitzpatrick_scale: false, - category: "flags" - }, - bulgaria: { - keywords: [ "bg", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\uddec', - fitzpatrick_scale: false, - category: "flags" - }, - burkina_faso: { - keywords: [ "burkina", "faso", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\uddeb', - fitzpatrick_scale: false, - category: "flags" - }, - burundi: { - keywords: [ "bi", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\uddee', - fitzpatrick_scale: false, - category: "flags" - }, - cape_verde: { - keywords: [ "cabo", "verde", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\uddfb', - fitzpatrick_scale: false, - category: "flags" - }, - cambodia: { - keywords: [ "kh", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf0\ud83c\udded', - fitzpatrick_scale: false, - category: "flags" - }, - cameroon: { - keywords: [ "cm", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\uddf2', - fitzpatrick_scale: false, - category: "flags" - }, - canada: { - keywords: [ "ca", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\udde6', - fitzpatrick_scale: false, - category: "flags" - }, - canary_islands: { - keywords: [ "canary", "islands", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddee\ud83c\udde8', - fitzpatrick_scale: false, - category: "flags" - }, - cayman_islands: { - keywords: [ "cayman", "islands", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf0\ud83c\uddfe', - fitzpatrick_scale: false, - category: "flags" - }, - central_african_republic: { - keywords: [ "central", "african", "republic", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\uddeb', - fitzpatrick_scale: false, - category: "flags" - }, - chad: { - keywords: [ "td", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf9\ud83c\udde9', - fitzpatrick_scale: false, - category: "flags" - }, - chile: { - keywords: [ "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\uddf1', - fitzpatrick_scale: false, - category: "flags" - }, - cn: { - keywords: [ "china", "chinese", "prc", "flag", "country", "nation", "banner" ], - "char": '\ud83c\udde8\ud83c\uddf3', - fitzpatrick_scale: false, - category: "flags" - }, - christmas_island: { - keywords: [ "christmas", "island", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\uddfd', - fitzpatrick_scale: false, - category: "flags" - }, - cocos_islands: { - keywords: [ "cocos", "keeling", "islands", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\udde8', - fitzpatrick_scale: false, - category: "flags" - }, - colombia: { - keywords: [ "co", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\uddf4', - fitzpatrick_scale: false, - category: "flags" - }, - comoros: { - keywords: [ "km", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf0\ud83c\uddf2', - fitzpatrick_scale: false, - category: "flags" - }, - congo_brazzaville: { - keywords: [ "congo", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\uddec', - fitzpatrick_scale: false, - category: "flags" - }, - congo_kinshasa: { - keywords: [ "congo", "democratic", "republic", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\udde9', - fitzpatrick_scale: false, - category: "flags" - }, - cook_islands: { - keywords: [ "cook", "islands", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\uddf0', - fitzpatrick_scale: false, - category: "flags" - }, - costa_rica: { - keywords: [ "costa", "rica", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\uddf7', - fitzpatrick_scale: false, - category: "flags" - }, - croatia: { - keywords: [ "hr", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udded\ud83c\uddf7', - fitzpatrick_scale: false, - category: "flags" - }, - cuba: { - keywords: [ "cu", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\uddfa', - fitzpatrick_scale: false, - category: "flags" - }, - curacao: { - keywords: [ "cura\xe7ao", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\uddfc', - fitzpatrick_scale: false, - category: "flags" - }, - cyprus: { - keywords: [ "cy", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\uddfe', - fitzpatrick_scale: false, - category: "flags" - }, - czech_republic: { - keywords: [ "cz", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\uddff', - fitzpatrick_scale: false, - category: "flags" - }, - denmark: { - keywords: [ "dk", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde9\ud83c\uddf0', - fitzpatrick_scale: false, - category: "flags" - }, - djibouti: { - keywords: [ "dj", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde9\ud83c\uddef', - fitzpatrick_scale: false, - category: "flags" - }, - dominica: { - keywords: [ "dm", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde9\ud83c\uddf2', - fitzpatrick_scale: false, - category: "flags" - }, - dominican_republic: { - keywords: [ "dominican", "republic", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde9\ud83c\uddf4', - fitzpatrick_scale: false, - category: "flags" - }, - ecuador: { - keywords: [ "ec", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddea\ud83c\udde8', - fitzpatrick_scale: false, - category: "flags" - }, - egypt: { - keywords: [ "eg", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddea\ud83c\uddec', - fitzpatrick_scale: false, - category: "flags" - }, - el_salvador: { - keywords: [ "el", "salvador", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\uddfb', - fitzpatrick_scale: false, - category: "flags" - }, - equatorial_guinea: { - keywords: [ "equatorial", "gn", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\uddf6', - fitzpatrick_scale: false, - category: "flags" - }, - eritrea: { - keywords: [ "er", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddea\ud83c\uddf7', - fitzpatrick_scale: false, - category: "flags" - }, - estonia: { - keywords: [ "ee", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddea\ud83c\uddea', - fitzpatrick_scale: false, - category: "flags" - }, - ethiopia: { - keywords: [ "et", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddea\ud83c\uddf9', - fitzpatrick_scale: false, - category: "flags" - }, - eu: { - keywords: [ "european", "union", "flag", "banner" ], - "char": '\ud83c\uddea\ud83c\uddfa', - fitzpatrick_scale: false, - category: "flags" - }, - falkland_islands: { - keywords: [ "falkland", "islands", "malvinas", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddeb\ud83c\uddf0', - fitzpatrick_scale: false, - category: "flags" - }, - faroe_islands: { - keywords: [ "faroe", "islands", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddeb\ud83c\uddf4', - fitzpatrick_scale: false, - category: "flags" - }, - fiji: { - keywords: [ "fj", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddeb\ud83c\uddef', - fitzpatrick_scale: false, - category: "flags" - }, - finland: { - keywords: [ "fi", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddeb\ud83c\uddee', - fitzpatrick_scale: false, - category: "flags" - }, - fr: { - keywords: [ "banner", "flag", "nation", "france", "french", "country" ], - "char": '\ud83c\uddeb\ud83c\uddf7', - fitzpatrick_scale: false, - category: "flags" - }, - french_guiana: { - keywords: [ "french", "guiana", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\uddeb', - fitzpatrick_scale: false, - category: "flags" - }, - french_polynesia: { - keywords: [ "french", "polynesia", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf5\ud83c\uddeb', - fitzpatrick_scale: false, - category: "flags" - }, - french_southern_territories: { - keywords: [ "french", "southern", "territories", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf9\ud83c\uddeb', - fitzpatrick_scale: false, - category: "flags" - }, - gabon: { - keywords: [ "ga", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\udde6', - fitzpatrick_scale: false, - category: "flags" - }, - gambia: { - keywords: [ "gm", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\uddf2', - fitzpatrick_scale: false, - category: "flags" - }, - georgia: { - keywords: [ "ge", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\uddea', - fitzpatrick_scale: false, - category: "flags" - }, - de: { - keywords: [ "german", "nation", "flag", "country", "banner" ], - "char": '\ud83c\udde9\ud83c\uddea', - fitzpatrick_scale: false, - category: "flags" - }, - ghana: { - keywords: [ "gh", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\udded', - fitzpatrick_scale: false, - category: "flags" - }, - gibraltar: { - keywords: [ "gi", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\uddee', - fitzpatrick_scale: false, - category: "flags" - }, - greece: { - keywords: [ "gr", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\uddf7', - fitzpatrick_scale: false, - category: "flags" - }, - greenland: { - keywords: [ "gl", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\uddf1', - fitzpatrick_scale: false, - category: "flags" - }, - grenada: { - keywords: [ "gd", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\udde9', - fitzpatrick_scale: false, - category: "flags" - }, - guadeloupe: { - keywords: [ "gp", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\uddf5', - fitzpatrick_scale: false, - category: "flags" - }, - guam: { - keywords: [ "gu", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\uddfa', - fitzpatrick_scale: false, - category: "flags" - }, - guatemala: { - keywords: [ "gt", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\uddf9', - fitzpatrick_scale: false, - category: "flags" - }, - guernsey: { - keywords: [ "gg", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\uddec', - fitzpatrick_scale: false, - category: "flags" - }, - guinea: { - keywords: [ "gn", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\uddf3', - fitzpatrick_scale: false, - category: "flags" - }, - guinea_bissau: { - keywords: [ "gw", "bissau", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\uddfc', - fitzpatrick_scale: false, - category: "flags" - }, - guyana: { - keywords: [ "gy", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\uddfe', - fitzpatrick_scale: false, - category: "flags" - }, - haiti: { - keywords: [ "ht", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udded\ud83c\uddf9', - fitzpatrick_scale: false, - category: "flags" - }, - honduras: { - keywords: [ "hn", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udded\ud83c\uddf3', - fitzpatrick_scale: false, - category: "flags" - }, - hong_kong: { - keywords: [ "hong", "kong", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udded\ud83c\uddf0', - fitzpatrick_scale: false, - category: "flags" - }, - hungary: { - keywords: [ "hu", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udded\ud83c\uddfa', - fitzpatrick_scale: false, - category: "flags" - }, - iceland: { - keywords: [ "is", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddee\ud83c\uddf8', - fitzpatrick_scale: false, - category: "flags" - }, - india: { - keywords: [ "in", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddee\ud83c\uddf3', - fitzpatrick_scale: false, - category: "flags" - }, - indonesia: { - keywords: [ "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddee\ud83c\udde9', - fitzpatrick_scale: false, - category: "flags" - }, - iran: { - keywords: [ "iran,", "islamic", "republic", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddee\ud83c\uddf7', - fitzpatrick_scale: false, - category: "flags" - }, - iraq: { - keywords: [ "iq", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddee\ud83c\uddf6', - fitzpatrick_scale: false, - category: "flags" - }, - ireland: { - keywords: [ "ie", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddee\ud83c\uddea', - fitzpatrick_scale: false, - category: "flags" - }, - isle_of_man: { - keywords: [ "isle", "man", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddee\ud83c\uddf2', - fitzpatrick_scale: false, - category: "flags" - }, - israel: { - keywords: [ "il", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddee\ud83c\uddf1', - fitzpatrick_scale: false, - category: "flags" - }, - it: { - keywords: [ "italy", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddee\ud83c\uddf9', - fitzpatrick_scale: false, - category: "flags" - }, - cote_divoire: { - keywords: [ "ivory", "coast", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\uddee', - fitzpatrick_scale: false, - category: "flags" - }, - jamaica: { - keywords: [ "jm", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddef\ud83c\uddf2', - fitzpatrick_scale: false, - category: "flags" - }, - jp: { - keywords: [ "japanese", "nation", "flag", "country", "banner" ], - "char": '\ud83c\uddef\ud83c\uddf5', - fitzpatrick_scale: false, - category: "flags" - }, - jersey: { - keywords: [ "je", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddef\ud83c\uddea', - fitzpatrick_scale: false, - category: "flags" - }, - jordan: { - keywords: [ "jo", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddef\ud83c\uddf4', - fitzpatrick_scale: false, - category: "flags" - }, - kazakhstan: { - keywords: [ "kz", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf0\ud83c\uddff', - fitzpatrick_scale: false, - category: "flags" - }, - kenya: { - keywords: [ "ke", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf0\ud83c\uddea', - fitzpatrick_scale: false, - category: "flags" - }, - kiribati: { - keywords: [ "ki", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf0\ud83c\uddee', - fitzpatrick_scale: false, - category: "flags" - }, - kosovo: { - keywords: [ "xk", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddfd\ud83c\uddf0', - fitzpatrick_scale: false, - category: "flags" - }, - kuwait: { - keywords: [ "kw", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf0\ud83c\uddfc', - fitzpatrick_scale: false, - category: "flags" - }, - kyrgyzstan: { - keywords: [ "kg", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf0\ud83c\uddec', - fitzpatrick_scale: false, - category: "flags" - }, - laos: { - keywords: [ "lao", "democratic", "republic", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf1\ud83c\udde6', - fitzpatrick_scale: false, - category: "flags" - }, - latvia: { - keywords: [ "lv", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf1\ud83c\uddfb', - fitzpatrick_scale: false, - category: "flags" - }, - lebanon: { - keywords: [ "lb", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf1\ud83c\udde7', - fitzpatrick_scale: false, - category: "flags" - }, - lesotho: { - keywords: [ "ls", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf1\ud83c\uddf8', - fitzpatrick_scale: false, - category: "flags" - }, - liberia: { - keywords: [ "lr", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf1\ud83c\uddf7', - fitzpatrick_scale: false, - category: "flags" - }, - libya: { - keywords: [ "ly", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf1\ud83c\uddfe', - fitzpatrick_scale: false, - category: "flags" - }, - liechtenstein: { - keywords: [ "li", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf1\ud83c\uddee', - fitzpatrick_scale: false, - category: "flags" - }, - lithuania: { - keywords: [ "lt", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf1\ud83c\uddf9', - fitzpatrick_scale: false, - category: "flags" - }, - luxembourg: { - keywords: [ "lu", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf1\ud83c\uddfa', - fitzpatrick_scale: false, - category: "flags" - }, - macau: { - keywords: [ "macao", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddf4', - fitzpatrick_scale: false, - category: "flags" - }, - macedonia: { - keywords: [ "macedonia,", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddf0', - fitzpatrick_scale: false, - category: "flags" - }, - madagascar: { - keywords: [ "mg", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddec', - fitzpatrick_scale: false, - category: "flags" - }, - malawi: { - keywords: [ "mw", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddfc', - fitzpatrick_scale: false, - category: "flags" - }, - malaysia: { - keywords: [ "my", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddfe', - fitzpatrick_scale: false, - category: "flags" - }, - maldives: { - keywords: [ "mv", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddfb', - fitzpatrick_scale: false, - category: "flags" - }, - mali: { - keywords: [ "ml", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddf1', - fitzpatrick_scale: false, - category: "flags" - }, - malta: { - keywords: [ "mt", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddf9', - fitzpatrick_scale: false, - category: "flags" - }, - marshall_islands: { - keywords: [ "marshall", "islands", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\udded', - fitzpatrick_scale: false, - category: "flags" - }, - martinique: { - keywords: [ "mq", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddf6', - fitzpatrick_scale: false, - category: "flags" - }, - mauritania: { - keywords: [ "mr", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddf7', - fitzpatrick_scale: false, - category: "flags" - }, - mauritius: { - keywords: [ "mu", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddfa', - fitzpatrick_scale: false, - category: "flags" - }, - mayotte: { - keywords: [ "yt", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddfe\ud83c\uddf9', - fitzpatrick_scale: false, - category: "flags" - }, - mexico: { - keywords: [ "mx", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddfd', - fitzpatrick_scale: false, - category: "flags" - }, - micronesia: { - keywords: [ "micronesia,", "federated", "states", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddeb\ud83c\uddf2', - fitzpatrick_scale: false, - category: "flags" - }, - moldova: { - keywords: [ "moldova,", "republic", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\udde9', - fitzpatrick_scale: false, - category: "flags" - }, - monaco: { - keywords: [ "mc", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\udde8', - fitzpatrick_scale: false, - category: "flags" - }, - mongolia: { - keywords: [ "mn", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddf3', - fitzpatrick_scale: false, - category: "flags" - }, - montenegro: { - keywords: [ "me", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddea', - fitzpatrick_scale: false, - category: "flags" - }, - montserrat: { - keywords: [ "ms", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddf8', - fitzpatrick_scale: false, - category: "flags" - }, - morocco: { - keywords: [ "ma", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\udde6', - fitzpatrick_scale: false, - category: "flags" - }, - mozambique: { - keywords: [ "mz", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddff', - fitzpatrick_scale: false, - category: "flags" - }, - myanmar: { - keywords: [ "mm", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddf2', - fitzpatrick_scale: false, - category: "flags" - }, - namibia: { - keywords: [ "na", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf3\ud83c\udde6', - fitzpatrick_scale: false, - category: "flags" - }, - nauru: { - keywords: [ "nr", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf3\ud83c\uddf7', - fitzpatrick_scale: false, - category: "flags" - }, - nepal: { - keywords: [ "np", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf3\ud83c\uddf5', - fitzpatrick_scale: false, - category: "flags" - }, - netherlands: { - keywords: [ "nl", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf3\ud83c\uddf1', - fitzpatrick_scale: false, - category: "flags" - }, - new_caledonia: { - keywords: [ "new", "caledonia", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf3\ud83c\udde8', - fitzpatrick_scale: false, - category: "flags" - }, - new_zealand: { - keywords: [ "new", "zealand", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf3\ud83c\uddff', - fitzpatrick_scale: false, - category: "flags" - }, - nicaragua: { - keywords: [ "ni", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf3\ud83c\uddee', - fitzpatrick_scale: false, - category: "flags" - }, - niger: { - keywords: [ "ne", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf3\ud83c\uddea', - fitzpatrick_scale: false, - category: "flags" - }, - nigeria: { - keywords: [ "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf3\ud83c\uddec', - fitzpatrick_scale: false, - category: "flags" - }, - niue: { - keywords: [ "nu", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf3\ud83c\uddfa', - fitzpatrick_scale: false, - category: "flags" - }, - norfolk_island: { - keywords: [ "norfolk", "island", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf3\ud83c\uddeb', - fitzpatrick_scale: false, - category: "flags" - }, - northern_mariana_islands: { - keywords: [ "northern", "mariana", "islands", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf2\ud83c\uddf5', - fitzpatrick_scale: false, - category: "flags" - }, - north_korea: { - keywords: [ "north", "korea", "nation", "flag", "country", "banner" ], - "char": '\ud83c\uddf0\ud83c\uddf5', - fitzpatrick_scale: false, - category: "flags" - }, - norway: { - keywords: [ "no", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf3\ud83c\uddf4', - fitzpatrick_scale: false, - category: "flags" - }, - oman: { - keywords: [ "om_symbol", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf4\ud83c\uddf2', - fitzpatrick_scale: false, - category: "flags" - }, - pakistan: { - keywords: [ "pk", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf5\ud83c\uddf0', - fitzpatrick_scale: false, - category: "flags" - }, - palau: { - keywords: [ "pw", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf5\ud83c\uddfc', - fitzpatrick_scale: false, - category: "flags" - }, - palestinian_territories: { - keywords: [ "palestine", "palestinian", "territories", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf5\ud83c\uddf8', - fitzpatrick_scale: false, - category: "flags" - }, - panama: { - keywords: [ "pa", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf5\ud83c\udde6', - fitzpatrick_scale: false, - category: "flags" - }, - papua_new_guinea: { - keywords: [ "papua", "new", "guinea", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf5\ud83c\uddec', - fitzpatrick_scale: false, - category: "flags" - }, - paraguay: { - keywords: [ "py", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf5\ud83c\uddfe', - fitzpatrick_scale: false, - category: "flags" - }, - peru: { - keywords: [ "pe", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf5\ud83c\uddea', - fitzpatrick_scale: false, - category: "flags" - }, - philippines: { - keywords: [ "ph", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf5\ud83c\udded', - fitzpatrick_scale: false, - category: "flags" - }, - pitcairn_islands: { - keywords: [ "pitcairn", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf5\ud83c\uddf3', - fitzpatrick_scale: false, - category: "flags" - }, - poland: { - keywords: [ "pl", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf5\ud83c\uddf1', - fitzpatrick_scale: false, - category: "flags" - }, - portugal: { - keywords: [ "pt", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf5\ud83c\uddf9', - fitzpatrick_scale: false, - category: "flags" - }, - puerto_rico: { - keywords: [ "puerto", "rico", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf5\ud83c\uddf7', - fitzpatrick_scale: false, - category: "flags" - }, - qatar: { - keywords: [ "qa", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf6\ud83c\udde6', - fitzpatrick_scale: false, - category: "flags" - }, - reunion: { - keywords: [ "r\xe9union", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf7\ud83c\uddea', - fitzpatrick_scale: false, - category: "flags" - }, - romania: { - keywords: [ "ro", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf7\ud83c\uddf4', - fitzpatrick_scale: false, - category: "flags" - }, - ru: { - keywords: [ "russian", "federation", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf7\ud83c\uddfa', - fitzpatrick_scale: false, - category: "flags" - }, - rwanda: { - keywords: [ "rw", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf7\ud83c\uddfc', - fitzpatrick_scale: false, - category: "flags" - }, - st_barthelemy: { - keywords: [ "saint", "barth\xe9lemy", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde7\ud83c\uddf1', - fitzpatrick_scale: false, - category: "flags" - }, - st_helena: { - keywords: [ "saint", "helena", "ascension", "tristan", "cunha", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\udded', - fitzpatrick_scale: false, - category: "flags" - }, - st_kitts_nevis: { - keywords: [ "saint", "kitts", "nevis", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf0\ud83c\uddf3', - fitzpatrick_scale: false, - category: "flags" - }, - st_lucia: { - keywords: [ "saint", "lucia", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf1\ud83c\udde8', - fitzpatrick_scale: false, - category: "flags" - }, - st_pierre_miquelon: { - keywords: [ "saint", "pierre", "miquelon", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf5\ud83c\uddf2', - fitzpatrick_scale: false, - category: "flags" - }, - st_vincent_grenadines: { - keywords: [ "saint", "vincent", "grenadines", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddfb\ud83c\udde8', - fitzpatrick_scale: false, - category: "flags" - }, - samoa: { - keywords: [ "ws", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddfc\ud83c\uddf8', - fitzpatrick_scale: false, - category: "flags" - }, - san_marino: { - keywords: [ "san", "marino", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\uddf2', - fitzpatrick_scale: false, - category: "flags" - }, - sao_tome_principe: { - keywords: [ "sao", "tome", "principe", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\uddf9', - fitzpatrick_scale: false, - category: "flags" - }, - saudi_arabia: { - keywords: [ "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\udde6', - fitzpatrick_scale: false, - category: "flags" - }, - senegal: { - keywords: [ "sn", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\uddf3', - fitzpatrick_scale: false, - category: "flags" - }, - serbia: { - keywords: [ "rs", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf7\ud83c\uddf8', - fitzpatrick_scale: false, - category: "flags" - }, - seychelles: { - keywords: [ "sc", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\udde8', - fitzpatrick_scale: false, - category: "flags" - }, - sierra_leone: { - keywords: [ "sierra", "leone", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\uddf1', - fitzpatrick_scale: false, - category: "flags" - }, - singapore: { - keywords: [ "sg", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\uddec', - fitzpatrick_scale: false, - category: "flags" - }, - sint_maarten: { - keywords: [ "sint", "maarten", "dutch", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\uddfd', - fitzpatrick_scale: false, - category: "flags" - }, - slovakia: { - keywords: [ "sk", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\uddf0', - fitzpatrick_scale: false, - category: "flags" - }, - slovenia: { - keywords: [ "si", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\uddee', - fitzpatrick_scale: false, - category: "flags" - }, - solomon_islands: { - keywords: [ "solomon", "islands", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\udde7', - fitzpatrick_scale: false, - category: "flags" - }, - somalia: { - keywords: [ "so", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\uddf4', - fitzpatrick_scale: false, - category: "flags" - }, - south_africa: { - keywords: [ "south", "africa", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddff\ud83c\udde6', - fitzpatrick_scale: false, - category: "flags" - }, - south_georgia_south_sandwich_islands: { - keywords: [ "south", "georgia", "sandwich", "islands", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddec\ud83c\uddf8', - fitzpatrick_scale: false, - category: "flags" - }, - kr: { - keywords: [ "south", "korea", "nation", "flag", "country", "banner" ], - "char": '\ud83c\uddf0\ud83c\uddf7', - fitzpatrick_scale: false, - category: "flags" - }, - south_sudan: { - keywords: [ "south", "sd", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\uddf8', - fitzpatrick_scale: false, - category: "flags" - }, - es: { - keywords: [ "spain", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddea\ud83c\uddf8', - fitzpatrick_scale: false, - category: "flags" - }, - sri_lanka: { - keywords: [ "sri", "lanka", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf1\ud83c\uddf0', - fitzpatrick_scale: false, - category: "flags" - }, - sudan: { - keywords: [ "sd", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\udde9', - fitzpatrick_scale: false, - category: "flags" - }, - suriname: { - keywords: [ "sr", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\uddf7', - fitzpatrick_scale: false, - category: "flags" - }, - swaziland: { - keywords: [ "sz", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\uddff', - fitzpatrick_scale: false, - category: "flags" - }, - sweden: { - keywords: [ "se", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\uddea', - fitzpatrick_scale: false, - category: "flags" - }, - switzerland: { - keywords: [ "ch", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde8\ud83c\udded', - fitzpatrick_scale: false, - category: "flags" - }, - syria: { - keywords: [ "syrian", "arab", "republic", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf8\ud83c\uddfe', - fitzpatrick_scale: false, - category: "flags" - }, - taiwan: { - keywords: [ "tw", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf9\ud83c\uddfc', - fitzpatrick_scale: false, - category: "flags" - }, - tajikistan: { - keywords: [ "tj", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf9\ud83c\uddef', - fitzpatrick_scale: false, - category: "flags" - }, - tanzania: { - keywords: [ "tanzania,", "united", "republic", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf9\ud83c\uddff', - fitzpatrick_scale: false, - category: "flags" - }, - thailand: { - keywords: [ "th", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf9\ud83c\udded', - fitzpatrick_scale: false, - category: "flags" - }, - timor_leste: { - keywords: [ "timor", "leste", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf9\ud83c\uddf1', - fitzpatrick_scale: false, - category: "flags" - }, - togo: { - keywords: [ "tg", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf9\ud83c\uddec', - fitzpatrick_scale: false, - category: "flags" - }, - tokelau: { - keywords: [ "tk", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf9\ud83c\uddf0', - fitzpatrick_scale: false, - category: "flags" - }, - tonga: { - keywords: [ "to", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf9\ud83c\uddf4', - fitzpatrick_scale: false, - category: "flags" - }, - trinidad_tobago: { - keywords: [ "trinidad", "tobago", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf9\ud83c\uddf9', - fitzpatrick_scale: false, - category: "flags" - }, - tunisia: { - keywords: [ "tn", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf9\ud83c\uddf3', - fitzpatrick_scale: false, - category: "flags" - }, - tr: { - keywords: [ "turkey", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf9\ud83c\uddf7', - fitzpatrick_scale: false, - category: "flags" - }, - turkmenistan: { - keywords: [ "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf9\ud83c\uddf2', - fitzpatrick_scale: false, - category: "flags" - }, - turks_caicos_islands: { - keywords: [ "turks", "caicos", "islands", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf9\ud83c\udde8', - fitzpatrick_scale: false, - category: "flags" - }, - tuvalu: { - keywords: [ "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddf9\ud83c\uddfb', - fitzpatrick_scale: false, - category: "flags" - }, - uganda: { - keywords: [ "ug", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddfa\ud83c\uddec', - fitzpatrick_scale: false, - category: "flags" - }, - ukraine: { - keywords: [ "ua", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddfa\ud83c\udde6', - fitzpatrick_scale: false, - category: "flags" - }, - united_arab_emirates: { - keywords: [ "united", "arab", "emirates", "flag", "nation", "country", "banner" ], - "char": '\ud83c\udde6\ud83c\uddea', - fitzpatrick_scale: false, - category: "flags" - }, - uk: { - keywords: [ "united", "kingdom", "great", "britain", "northern", "ireland", "flag", "nation", "country", "banner", "british", "UK", "english", "england", "union jack" ], - "char": '\ud83c\uddec\ud83c\udde7', - fitzpatrick_scale: false, - category: "flags" - }, - england: { - keywords: [ "flag", "english" ], - "char": '\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f', - fitzpatrick_scale: false, - category: "flags" - }, - scotland: { - keywords: [ "flag", "scottish" ], - "char": '\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f', - fitzpatrick_scale: false, - category: "flags" - }, - wales: { - keywords: [ "flag", "welsh" ], - "char": '\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f', - fitzpatrick_scale: false, - category: "flags" - }, - us: { - keywords: [ "united", "states", "america", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddfa\ud83c\uddf8', - fitzpatrick_scale: false, - category: "flags" - }, - us_virgin_islands: { - keywords: [ "virgin", "islands", "us", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddfb\ud83c\uddee', - fitzpatrick_scale: false, - category: "flags" - }, - uruguay: { - keywords: [ "uy", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddfa\ud83c\uddfe', - fitzpatrick_scale: false, - category: "flags" - }, - uzbekistan: { - keywords: [ "uz", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddfa\ud83c\uddff', - fitzpatrick_scale: false, - category: "flags" - }, - vanuatu: { - keywords: [ "vu", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddfb\ud83c\uddfa', - fitzpatrick_scale: false, - category: "flags" - }, - vatican_city: { - keywords: [ "vatican", "city", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddfb\ud83c\udde6', - fitzpatrick_scale: false, - category: "flags" - }, - venezuela: { - keywords: [ "ve", "bolivarian", "republic", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddfb\ud83c\uddea', - fitzpatrick_scale: false, - category: "flags" - }, - vietnam: { - keywords: [ "viet", "nam", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddfb\ud83c\uddf3', - fitzpatrick_scale: false, - category: "flags" - }, - wallis_futuna: { - keywords: [ "wallis", "futuna", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddfc\ud83c\uddeb', - fitzpatrick_scale: false, - category: "flags" - }, - western_sahara: { - keywords: [ "western", "sahara", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddea\ud83c\udded', - fitzpatrick_scale: false, - category: "flags" - }, - yemen: { - keywords: [ "ye", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddfe\ud83c\uddea', - fitzpatrick_scale: false, - category: "flags" - }, - zambia: { - keywords: [ "zm", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddff\ud83c\uddf2', - fitzpatrick_scale: false, - category: "flags" - }, - zimbabwe: { - keywords: [ "zw", "flag", "nation", "country", "banner" ], - "char": '\ud83c\uddff\ud83c\uddfc', - fitzpatrick_scale: false, - category: "flags" - }, - united_nations: { - keywords: [ "un", "flag", "banner" ], - "char": '\ud83c\uddfa\ud83c\uddf3', - fitzpatrick_scale: false, - category: "flags" - }, - pirate_flag: { - keywords: [ "skull", "crossbones", "flag", "banner" ], - "char": '\ud83c\udff4\u200d\u2620\ufe0f', - fitzpatrick_scale: false, - category: "flags" - } -}); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/emoticons/js/emojiimages.min.js b/component/pear/module/tinymce/tinymce/plugins/emoticons/js/emojiimages.min.js deleted file mode 100644 index 1bc8d72d61228f5541e3d1256c359da0717184ec..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/emoticons/js/emojiimages.min.js +++ /dev/null @@ -1,3 +0,0 @@ -// Source: npm package: emojilib -// Images provided by twemoji: https://github.com/twitter/twemoji -window.tinymce.Resource.add("tinymce.plugins.emoticons",{100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],"char":'\ud83d\udcaf',fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],"char":'\ud83d\udd22',fitzpatrick_scale:!1,category:"symbols"},grinning:{keywords:["face","smile","happy","joy",":D","grin"],"char":'\ud83d\ude00',fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],"char":'\ud83d\ude2c',fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],"char":'\ud83d\ude01',fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],"char":'\ud83d\ude02',fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],"char":'\ud83e\udd23',fitzpatrick_scale:!1,category:"people"},partying:{keywords:["face","celebration","woohoo"],"char":'\ud83e\udd73',fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],"char":'\ud83d\ude03',fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],"char":'\ud83d\ude04',fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],"char":'\ud83d\ude05',fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],"char":'\ud83d\ude06',fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],"char":'\ud83d\ude07',fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],"char":'\ud83d\ude09',fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],"char":'\ud83d\ude0a',fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],"char":'\ud83d\ude42',fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],"char":'\ud83d\ude43',fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],"char":'\u263a\ufe0f',fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],"char":'\ud83d\ude0b',fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],"char":'\ud83d\ude0c',fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],"char":'\ud83d\ude0d',fitzpatrick_scale:!1,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],"char":'\ud83e\udd70',fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],"char":'\ud83d\ude18',fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],"char":'\ud83d\ude17',fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],"char":'\ud83d\ude19',fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],"char":'\ud83d\ude1a',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],"char":'\ud83d\ude1c',fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],"char":'\ud83e\udd2a',fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],"char":'\ud83e\udd28',fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],"char":'\ud83e\uddd0',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],"char":'\ud83d\ude1d',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],"char":'\ud83d\ude1b',fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],"char":'\ud83e\udd11',fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],"char":'\ud83e\udd13',fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],"char":'\ud83d\ude0e',fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],"char":'\ud83e\udd29',fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],"char":'\ud83e\udd21',fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],"char":'\ud83e\udd20',fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],"char":'\ud83e\udd17',fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],"char":'\ud83d\ude0f',fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],"char":'\ud83d\ude36',fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],"char":'\ud83d\ude10',fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],"char":'\ud83d\ude11',fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],"char":'\ud83d\ude12',fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],"char":'\ud83d\ude44',fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],"char":'\ud83e\udd14',fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],"char":'\ud83e\udd25',fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],"char":'\ud83e\udd2d',fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],"char":'\ud83e\udd2b',fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],"char":'\ud83e\udd2c',fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],"char":'\ud83e\udd2f',fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],"char":'\ud83d\ude33',fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],"char":'\ud83d\ude1e',fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],"char":'\ud83d\ude1f',fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],"char":'\ud83d\ude20',fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],"char":'\ud83d\ude21',fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],"char":'\ud83d\ude14',fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],"char":'\ud83d\ude15',fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],"char":'\ud83d\ude41',fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],"char":'\u2639',fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],"char":'\ud83d\ude23',fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],"char":'\ud83d\ude16',fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],"char":'\ud83d\ude2b',fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],"char":'\ud83d\ude29',fitzpatrick_scale:!1,category:"people"},pleading:{keywords:["face","begging","mercy"],"char":'\ud83e\udd7a',fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],"char":'\ud83d\ude24',fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],"char":'\ud83d\ude2e',fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],"char":'\ud83d\ude31',fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],"char":'\ud83d\ude28',fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],"char":'\ud83d\ude30',fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],"char":'\ud83d\ude2f',fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],"char":'\ud83d\ude26',fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],"char":'\ud83d\ude27',fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],"char":'\ud83d\ude22',fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],"char":'\ud83d\ude25',fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],"char":'\ud83e\udd24',fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],"char":'\ud83d\ude2a',fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],"char":'\ud83d\ude13',fitzpatrick_scale:!1,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],"char":'\ud83e\udd75',fitzpatrick_scale:!1,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],"char":'\ud83e\udd76',fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],"char":'\ud83d\ude2d',fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],"char":'\ud83d\ude35',fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],"char":'\ud83d\ude32',fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],"char":'\ud83e\udd10',fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],"char":'\ud83e\udd22',fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],"char":'\ud83e\udd27',fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],"char":'\ud83e\udd2e',fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],"char":'\ud83d\ude37',fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],"char":'\ud83e\udd12',fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],"char":'\ud83e\udd15',fitzpatrick_scale:!1,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],"char":'\ud83e\udd74',fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],"char":'\ud83d\ude34',fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],"char":'\ud83d\udca4',fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],"char":'\ud83d\udca9',fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],"char":'\ud83d\ude08',fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],"char":'\ud83d\udc7f',fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],"char":'\ud83d\udc79',fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],"char":'\ud83d\udc7a',fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],"char":'\ud83d\udc80',fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],"char":'\ud83d\udc7b',fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],"char":'\ud83d\udc7d',fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],"char":'\ud83e\udd16',fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],"char":'\ud83d\ude3a',fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],"char":'\ud83d\ude38',fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],"char":'\ud83d\ude39',fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],"char":'\ud83d\ude3b',fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],"char":'\ud83d\ude3c',fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],"char":'\ud83d\ude3d',fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],"char":'\ud83d\ude40',fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],"char":'\ud83d\ude3f',fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],"char":'\ud83d\ude3e',fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],"char":'\ud83e\udd32',fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],"char":'\ud83d\ude4c',fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],"char":'\ud83d\udc4f',fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],"char":'\ud83d\udc4b',fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],"char":'\ud83e\udd19',fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],"char":'\ud83d\udc4d',fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],"char":'\ud83d\udc4e',fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],"char":'\ud83d\udc4a',fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],"char":'\u270a',fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],"char":'\ud83e\udd1b',fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],"char":'\ud83e\udd1c',fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],"char":'\u270c',fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],"char":'\ud83d\udc4c',fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],"char":'\u270b',fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],"char":'\ud83e\udd1a',fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],"char":'\ud83d\udc50',fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],"char":'\ud83d\udcaa',fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],"char":'\ud83d\ude4f',fitzpatrick_scale:!0,category:"people"},foot:{keywords:["kick","stomp"],"char":'\ud83e\uddb6',fitzpatrick_scale:!0,category:"people"},leg:{keywords:["kick","limb"],"char":'\ud83e\uddb5',fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],"char":'\ud83e\udd1d',fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],"char":'\u261d',fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],"char":'\ud83d\udc46',fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],"char":'\ud83d\udc47',fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],"char":'\ud83d\udc48',fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],"char":'\ud83d\udc49',fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],"char":'\ud83d\udd95',fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],"char":'\ud83d\udd90',fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],"char":'\ud83e\udd1f',fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],"char":'\ud83e\udd18',fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],"char":'\ud83e\udd1e',fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],"char":'\ud83d\udd96',fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],"char":'\u270d',fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],"char":'\ud83e\udd33',fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],"char":'\ud83d\udc85',fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],"char":'\ud83d\udc44',fitzpatrick_scale:!1,category:"people"},tooth:{keywords:["teeth","dentist"],"char":'\ud83e\uddb7',fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],"char":'\ud83d\udc45',fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],"char":'\ud83d\udc42',fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],"char":'\ud83d\udc43',fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],"char":'\ud83d\udc41',fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],"char":'\ud83d\udc40',fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],"char":'\ud83e\udde0',fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],"char":'\ud83d\udc64',fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],"char":'\ud83d\udc65',fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],"char":'\ud83d\udde3',fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],"char":'\ud83d\udc76',fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],"char":'\ud83e\uddd2',fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],"char":'\ud83d\udc66',fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],"char":'\ud83d\udc67',fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],"char":'\ud83e\uddd1',fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],"char":'\ud83d\udc68',fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],"char":'\ud83d\udc69',fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],"char":'\ud83d\udc71\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],"char":'\ud83d\udc71',fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],"char":'\ud83e\uddd4',fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],"char":'\ud83e\uddd3',fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],"char":'\ud83d\udc74',fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],"char":'\ud83d\udc75',fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],"char":'\ud83d\udc72',fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],"char":'\ud83e\uddd5',fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],"char":'\ud83d\udc73\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],"char":'\ud83d\udc73',fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],"char":'\ud83d\udc6e\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],"char":'\ud83d\udc6e',fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],"char":'\ud83d\udc77\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],"char":'\ud83d\udc77',fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],"char":'\ud83d\udc82\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],"char":'\ud83d\udc82',fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],"char":'\ud83d\udd75\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],"char":'\ud83d\udd75',fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],"char":'\ud83d\udc69\u200d\u2695\ufe0f',fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],"char":'\ud83d\udc68\u200d\u2695\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],"char":'\ud83d\udc69\u200d\ud83c\udf3e',fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],"char":'\ud83d\udc68\u200d\ud83c\udf3e',fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],"char":'\ud83d\udc69\u200d\ud83c\udf73',fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],"char":'\ud83d\udc68\u200d\ud83c\udf73',fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],"char":'\ud83d\udc69\u200d\ud83c\udf93',fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],"char":'\ud83d\udc68\u200d\ud83c\udf93',fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],"char":'\ud83d\udc69\u200d\ud83c\udfa4',fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],"char":'\ud83d\udc68\u200d\ud83c\udfa4',fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],"char":'\ud83d\udc69\u200d\ud83c\udfeb',fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],"char":'\ud83d\udc68\u200d\ud83c\udfeb',fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],"char":'\ud83d\udc69\u200d\ud83c\udfed',fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],"char":'\ud83d\udc68\u200d\ud83c\udfed',fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],"char":'\ud83d\udc69\u200d\ud83d\udcbb',fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],"char":'\ud83d\udc68\u200d\ud83d\udcbb',fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],"char":'\ud83d\udc69\u200d\ud83d\udcbc',fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],"char":'\ud83d\udc68\u200d\ud83d\udcbc',fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],"char":'\ud83d\udc69\u200d\ud83d\udd27',fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],"char":'\ud83d\udc68\u200d\ud83d\udd27',fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],"char":'\ud83d\udc69\u200d\ud83d\udd2c',fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],"char":'\ud83d\udc68\u200d\ud83d\udd2c',fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],"char":'\ud83d\udc69\u200d\ud83c\udfa8',fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],"char":'\ud83d\udc68\u200d\ud83c\udfa8',fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],"char":'\ud83d\udc69\u200d\ud83d\ude92',fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],"char":'\ud83d\udc68\u200d\ud83d\ude92',fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],"char":'\ud83d\udc69\u200d\u2708\ufe0f',fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],"char":'\ud83d\udc68\u200d\u2708\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],"char":'\ud83d\udc69\u200d\ud83d\ude80',fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],"char":'\ud83d\udc68\u200d\ud83d\ude80',fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],"char":'\ud83d\udc69\u200d\u2696\ufe0f',fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],"char":'\ud83d\udc68\u200d\u2696\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],"char":'\ud83e\uddb8\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],"char":'\ud83e\uddb8\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],"char":'\ud83e\uddb9\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],"char":'\ud83e\uddb9\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],"char":'\ud83e\udd36',fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],"char":'\ud83c\udf85',fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],"char":'\ud83e\uddd9\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],"char":'\ud83e\uddd9\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],"char":'\ud83e\udddd\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],"char":'\ud83e\udddd\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],"char":'\ud83e\udddb\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],"char":'\ud83e\udddb\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],"char":'\ud83e\udddf\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],"char":'\ud83e\udddf\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],"char":'\ud83e\uddde\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],"char":'\ud83e\uddde\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],"char":'\ud83e\udddc\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],"char":'\ud83e\udddc\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],"char":'\ud83e\uddda\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],"char":'\ud83e\uddda\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],"char":'\ud83d\udc7c',fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],"char":'\ud83e\udd30',fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],"char":'\ud83e\udd31',fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],"char":'\ud83d\udc78',fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],"char":'\ud83e\udd34',fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],"char":'\ud83d\udc70',fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],"char":'\ud83e\udd35',fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],"char":'\ud83c\udfc3\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],"char":'\ud83c\udfc3',fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],"char":'\ud83d\udeb6\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],"char":'\ud83d\udeb6',fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],"char":'\ud83d\udc83',fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],"char":'\ud83d\udd7a',fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],"char":'\ud83d\udc6f',fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],"char":'\ud83d\udc6f\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],"char":'\ud83d\udc6b',fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],"char":'\ud83d\udc6c',fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],"char":'\ud83d\udc6d',fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],"char":'\ud83d\ude47\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],"char":'\ud83d\ude47',fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],"char":'\ud83e\udd26\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],"char":'\ud83e\udd26\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],"char":'\ud83e\udd37',fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],"char":'\ud83e\udd37\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],"char":'\ud83d\udc81',fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],"char":'\ud83d\udc81\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],"char":'\ud83d\ude45',fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],"char":'\ud83d\ude45\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],"char":'\ud83d\ude46',fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],"char":'\ud83d\ude46\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],"char":'\ud83d\ude4b',fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],"char":'\ud83d\ude4b\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],"char":'\ud83d\ude4e',fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],"char":'\ud83d\ude4e\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],"char":'\ud83d\ude4d',fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],"char":'\ud83d\ude4d\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],"char":'\ud83d\udc87',fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],"char":'\ud83d\udc87\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],"char":'\ud83d\udc86',fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],"char":'\ud83d\udc86\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],"char":'\ud83e\uddd6\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],"char":'\ud83e\uddd6\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":'\ud83d\udc91',fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":'\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69',fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":'\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68',fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],"char":'\ud83d\udc8f',fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],"char":'\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69',fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],"char":'\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68',fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],"char":'\ud83d\udc6a',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],"char":'\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],"char":'\ud83d\udc69\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],"char":'\ud83d\udc69\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],"char":'\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],"char":'\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],"char":'\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],"char":'\ud83d\udc68\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],"char":'\ud83d\udc68\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66',fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],"char":'\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67',fitzpatrick_scale:!1,category:"people"},yarn:{keywords:["ball","crochet","knit"],"char":'\ud83e\uddf6',fitzpatrick_scale:!1,category:"people"},thread:{keywords:["needle","sewing","spool","string"],"char":'\ud83e\uddf5',fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],"char":'\ud83e\udde5',fitzpatrick_scale:!1,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],"char":'\ud83e\udd7c',fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],"char":'\ud83d\udc5a',fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],"char":'\ud83d\udc55',fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],"char":'\ud83d\udc56',fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],"char":'\ud83d\udc54',fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],"char":'\ud83d\udc57',fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],"char":'\ud83d\udc59',fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],"char":'\ud83d\udc58',fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],"char":'\ud83d\udc84',fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],"char":'\ud83d\udc8b',fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],"char":'\ud83d\udc63',fitzpatrick_scale:!1,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],"char":'\ud83e\udd7f',fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],"char":'\ud83d\udc60',fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],"char":'\ud83d\udc61',fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],"char":'\ud83d\udc62',fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],"char":'\ud83d\udc5e',fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],"char":'\ud83d\udc5f',fitzpatrick_scale:!1,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],"char":'\ud83e\udd7e',fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],"char":'\ud83e\udde6',fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],"char":'\ud83e\udde4',fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],"char":'\ud83e\udde3',fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],"char":'\ud83d\udc52',fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],"char":'\ud83c\udfa9',fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],"char":'\ud83e\udde2',fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],"char":'\u26d1',fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],"char":'\ud83c\udf93',fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],"char":'\ud83d\udc51',fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],"char":'\ud83c\udf92',fitzpatrick_scale:!1,category:"people"},luggage:{keywords:["packing","travel"],"char":'\ud83e\uddf3',fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],"char":'\ud83d\udc5d',fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],"char":'\ud83d\udc5b',fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],"char":'\ud83d\udc5c',fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],"char":'\ud83d\udcbc',fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],"char":'\ud83d\udc53',fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],"char":'\ud83d\udd76',fitzpatrick_scale:!1,category:"people"},goggles:{keywords:["eyes","protection","safety"],"char":'\ud83e\udd7d',fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],"char":'\ud83d\udc8d',fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],"char":'\ud83c\udf02',fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],"char":'\ud83d\udc36',fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],"char":'\ud83d\udc31',fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],"char":'\ud83d\udc2d',fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],"char":'\ud83d\udc39',fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],"char":'\ud83d\udc30',fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],"char":'\ud83e\udd8a',fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],"char":'\ud83d\udc3b',fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],"char":'\ud83d\udc3c',fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],"char":'\ud83d\udc28',fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],"char":'\ud83d\udc2f',fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],"char":'\ud83e\udd81',fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],"char":'\ud83d\udc2e',fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],"char":'\ud83d\udc37',fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],"char":'\ud83d\udc3d',fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],"char":'\ud83d\udc38',fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],"char":'\ud83e\udd91',fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],"char":'\ud83d\udc19',fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],"char":'\ud83e\udd90',fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],"char":'\ud83d\udc35',fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],"char":'\ud83e\udd8d',fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],"char":'\ud83d\ude48',fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],"char":'\ud83d\ude49',fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],"char":'\ud83d\ude4a',fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],"char":'\ud83d\udc12',fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],"char":'\ud83d\udc14',fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],"char":'\ud83d\udc27',fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],"char":'\ud83d\udc26',fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],"char":'\ud83d\udc24',fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],"char":'\ud83d\udc23',fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],"char":'\ud83d\udc25',fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],"char":'\ud83e\udd86',fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],"char":'\ud83e\udd85',fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],"char":'\ud83e\udd89',fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],"char":'\ud83e\udd87',fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],"char":'\ud83d\udc3a',fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],"char":'\ud83d\udc17',fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],"char":'\ud83d\udc34',fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],"char":'\ud83e\udd84',fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],"char":'\ud83d\udc1d',fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],"char":'\ud83d\udc1b',fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],"char":'\ud83e\udd8b',fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],"char":'\ud83d\udc0c',fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],"char":'\ud83d\udc1e',fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],"char":'\ud83d\udc1c',fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],"char":'\ud83e\udd97',fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],"char":'\ud83d\udd77',fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],"char":'\ud83e\udd82',fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],"char":'\ud83e\udd80',fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],"char":'\ud83d\udc0d',fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],"char":'\ud83e\udd8e',fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],"char":'\ud83e\udd96',fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],"char":'\ud83e\udd95',fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],"char":'\ud83d\udc22',fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],"char":'\ud83d\udc20',fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],"char":'\ud83d\udc1f',fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],"char":'\ud83d\udc21',fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],"char":'\ud83d\udc2c',fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],"char":'\ud83e\udd88',fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],"char":'\ud83d\udc33',fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],"char":'\ud83d\udc0b',fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],"char":'\ud83d\udc0a',fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],"char":'\ud83d\udc06',fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],"char":'\ud83e\udd93',fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],"char":'\ud83d\udc05',fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],"char":'\ud83d\udc03',fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],"char":'\ud83d\udc02',fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],"char":'\ud83d\udc04',fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],"char":'\ud83e\udd8c',fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],"char":'\ud83d\udc2a',fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],"char":'\ud83d\udc2b',fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],"char":'\ud83e\udd92',fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],"char":'\ud83d\udc18',fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],"char":'\ud83e\udd8f',fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],"char":'\ud83d\udc10',fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],"char":'\ud83d\udc0f',fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],"char":'\ud83d\udc11',fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],"char":'\ud83d\udc0e',fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],"char":'\ud83d\udc16',fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],"char":'\ud83d\udc00',fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],"char":'\ud83d\udc01',fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],"char":'\ud83d\udc13',fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],"char":'\ud83e\udd83',fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],"char":'\ud83d\udd4a',fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],"char":'\ud83d\udc15',fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],"char":'\ud83d\udc29',fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],"char":'\ud83d\udc08',fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],"char":'\ud83d\udc07',fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],"char":'\ud83d\udc3f',fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],"char":'\ud83e\udd94',fitzpatrick_scale:!1,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],"char":'\ud83e\udd9d',fitzpatrick_scale:!1,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],"char":'\ud83e\udd99',fitzpatrick_scale:!1,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],"char":'\ud83e\udd9b',fitzpatrick_scale:!1,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],"char":'\ud83e\udd98',fitzpatrick_scale:!1,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],"char":'\ud83e\udda1',fitzpatrick_scale:!1,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],"char":'\ud83e\udda2',fitzpatrick_scale:!1,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],"char":'\ud83e\udd9a',fitzpatrick_scale:!1,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],"char":'\ud83e\udd9c',fitzpatrick_scale:!1,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],"char":'\ud83e\udd9e',fitzpatrick_scale:!1,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],"char":'\ud83e\udd9f',fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],"char":'\ud83d\udc3e',fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],"char":'\ud83d\udc09',fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],"char":'\ud83d\udc32',fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],"char":'\ud83c\udf35',fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],"char":'\ud83c\udf84',fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],"char":'\ud83c\udf32',fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],"char":'\ud83c\udf33',fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],"char":'\ud83c\udf34',fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],"char":'\ud83c\udf31',fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],"char":'\ud83c\udf3f',fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],"char":'\u2618',fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],"char":'\ud83c\udf40',fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],"char":'\ud83c\udf8d',fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],"char":'\ud83c\udf8b',fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],"char":'\ud83c\udf43',fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],"char":'\ud83c\udf42',fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],"char":'\ud83c\udf41',fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],"char":'\ud83c\udf3e',fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],"char":'\ud83c\udf3a',fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],"char":'\ud83c\udf3b',fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],"char":'\ud83c\udf39',fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],"char":'\ud83e\udd40',fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],"char":'\ud83c\udf37',fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],"char":'\ud83c\udf3c',fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],"char":'\ud83c\udf38',fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],"char":'\ud83d\udc90',fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],"char":'\ud83c\udf44',fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],"char":'\ud83c\udf30',fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],"char":'\ud83c\udf83',fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],"char":'\ud83d\udc1a',fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],"char":'\ud83d\udd78',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],"char":'\ud83c\udf0e',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],"char":'\ud83c\udf0d',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],"char":'\ud83c\udf0f',fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf15',fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],"char":'\ud83c\udf16',fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf17',fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf18',fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf11',fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf12',fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf13',fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],"char":'\ud83c\udf14',fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf1a',fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf1d',fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf1b',fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":'\ud83c\udf1c',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],"char":'\ud83c\udf1e',fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],"char":'\ud83c\udf19',fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],"char":'\u2b50',fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],"char":'\ud83c\udf1f',fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],"char":'\ud83d\udcab',fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],"char":'\u2728',fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],"char":'\u2604',fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],"char":'\u2600\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],"char":'\ud83c\udf24',fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],"char":'\u26c5',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],"char":'\ud83c\udf25',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],"char":'\ud83c\udf26',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],"char":'\u2601\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],"char":'\ud83c\udf27',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],"char":'\u26c8',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],"char":'\ud83c\udf29',fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],"char":'\u26a1',fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],"char":'\ud83d\udd25',fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],"char":'\ud83d\udca5',fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],"char":'\u2744\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],"char":'\ud83c\udf28',fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],"char":'\u26c4',fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],"char":'\u2603',fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],"char":'\ud83c\udf2c',fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],"char":'\ud83d\udca8',fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],"char":'\ud83c\udf2a',fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],"char":'\ud83c\udf2b',fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],"char":'\u2602',fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],"char":'\u2614',fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],"char":'\ud83d\udca7',fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],"char":'\ud83d\udca6',fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],"char":'\ud83c\udf0a',fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],"char":'\ud83c\udf4f',fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],"char":'\ud83c\udf4e',fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],"char":'\ud83c\udf50',fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],"char":'\ud83c\udf4a',fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],"char":'\ud83c\udf4b',fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],"char":'\ud83c\udf4c',fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],"char":'\ud83c\udf49',fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],"char":'\ud83c\udf47',fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],"char":'\ud83c\udf53',fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],"char":'\ud83c\udf48',fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],"char":'\ud83c\udf52',fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],"char":'\ud83c\udf51',fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],"char":'\ud83c\udf4d',fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],"char":'\ud83e\udd65',fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],"char":'\ud83e\udd5d',fitzpatrick_scale:!1,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],"char":'\ud83e\udd6d',fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],"char":'\ud83e\udd51',fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],"char":'\ud83e\udd66',fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],"char":'\ud83c\udf45',fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],"char":'\ud83c\udf46',fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],"char":'\ud83e\udd52',fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],"char":'\ud83e\udd55',fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],"char":'\ud83c\udf36',fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],"char":'\ud83e\udd54',fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],"char":'\ud83c\udf3d',fitzpatrick_scale:!1,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],"char":'\ud83e\udd6c',fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],"char":'\ud83c\udf60',fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],"char":'\ud83e\udd5c',fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],"char":'\ud83c\udf6f',fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],"char":'\ud83e\udd50',fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],"char":'\ud83c\udf5e',fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],"char":'\ud83e\udd56',fitzpatrick_scale:!1,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],"char":'\ud83e\udd6f',fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],"char":'\ud83e\udd68',fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],"char":'\ud83e\uddc0',fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],"char":'\ud83e\udd5a',fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],"char":'\ud83e\udd53',fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],"char":'\ud83e\udd69',fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],"char":'\ud83e\udd5e',fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],"char":'\ud83c\udf57',fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],"char":'\ud83c\udf56',fitzpatrick_scale:!1,category:"food_and_drink"},bone:{keywords:["skeleton"],"char":'\ud83e\uddb4',fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],"char":'\ud83c\udf64',fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],"char":'\ud83c\udf73',fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],"char":'\ud83c\udf54',fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],"char":'\ud83c\udf5f',fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],"char":'\ud83e\udd59',fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],"char":'\ud83c\udf2d',fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],"char":'\ud83c\udf55',fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],"char":'\ud83e\udd6a',fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],"char":'\ud83e\udd6b',fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],"char":'\ud83c\udf5d',fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],"char":'\ud83c\udf2e',fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],"char":'\ud83c\udf2f',fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],"char":'\ud83e\udd57',fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],"char":'\ud83e\udd58',fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],"char":'\ud83c\udf5c',fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],"char":'\ud83c\udf72',fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],"char":'\ud83c\udf65',fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],"char":'\ud83e\udd60',fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],"char":'\ud83c\udf63',fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],"char":'\ud83c\udf71',fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],"char":'\ud83c\udf5b',fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],"char":'\ud83c\udf59',fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],"char":'\ud83c\udf5a',fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],"char":'\ud83c\udf58',fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],"char":'\ud83c\udf62',fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],"char":'\ud83c\udf61',fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],"char":'\ud83c\udf67',fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],"char":'\ud83c\udf68',fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],"char":'\ud83c\udf66',fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],"char":'\ud83e\udd67',fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],"char":'\ud83c\udf70',fitzpatrick_scale:!1,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],"char":'\ud83e\uddc1',fitzpatrick_scale:!1,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],"char":'\ud83e\udd6e',fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],"char":'\ud83c\udf82',fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],"char":'\ud83c\udf6e',fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],"char":'\ud83c\udf6c',fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],"char":'\ud83c\udf6d',fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],"char":'\ud83c\udf6b',fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],"char":'\ud83c\udf7f',fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],"char":'\ud83e\udd5f',fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],"char":'\ud83c\udf69',fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],"char":'\ud83c\udf6a',fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],"char":'\ud83e\udd5b',fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],"char":'\ud83c\udf7a',fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],"char":'\ud83c\udf7b',fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],"char":'\ud83e\udd42',fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],"char":'\ud83c\udf77',fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],"char":'\ud83e\udd43',fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],"char":'\ud83c\udf78',fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],"char":'\ud83c\udf79',fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],"char":'\ud83c\udf7e',fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],"char":'\ud83c\udf76',fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],"char":'\ud83c\udf75',fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],"char":'\ud83e\udd64',fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],"char":'\u2615',fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],"char":'\ud83c\udf7c',fitzpatrick_scale:!1,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],"char":'\ud83e\uddc2',fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],"char":'\ud83e\udd44',fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],"char":'\ud83c\udf74',fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],"char":'\ud83c\udf7d',fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],"char":'\ud83e\udd63',fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],"char":'\ud83e\udd61',fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],"char":'\ud83e\udd62',fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],"char":'\u26bd',fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],"char":'\ud83c\udfc0',fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],"char":'\ud83c\udfc8',fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],"char":'\u26be',fitzpatrick_scale:!1,category:"activity"},softball:{keywords:["sports","balls"],"char":'\ud83e\udd4e',fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],"char":'\ud83c\udfbe',fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],"char":'\ud83c\udfd0',fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],"char":'\ud83c\udfc9',fitzpatrick_scale:!1,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],"char":'\ud83e\udd4f',fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],"char":'\ud83c\udfb1',fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],"char":'\u26f3',fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],"char":'\ud83c\udfcc\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],"char":'\ud83c\udfcc',fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],"char":'\ud83c\udfd3',fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],"char":'\ud83c\udff8',fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],"char":'\ud83e\udd45',fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],"char":'\ud83c\udfd2',fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],"char":'\ud83c\udfd1',fitzpatrick_scale:!1,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],"char":'\ud83e\udd4d',fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],"char":'\ud83c\udfcf',fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],"char":'\ud83c\udfbf',fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],"char":'\u26f7',fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],"char":'\ud83c\udfc2',fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],"char":'\ud83e\udd3a',fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],"char":'\ud83e\udd3c\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],"char":'\ud83e\udd3c\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],"char":'\ud83e\udd38\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],"char":'\ud83e\udd38\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],"char":'\ud83e\udd3e\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],"char":'\ud83e\udd3e\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],"char":'\u26f8',fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],"char":'\ud83e\udd4c',fitzpatrick_scale:!1,category:"activity"},skateboard:{keywords:["board"],"char":'\ud83d\udef9',fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],"char":'\ud83d\udef7',fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],"char":'\ud83c\udff9',fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],"char":'\ud83c\udfa3',fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],"char":'\ud83e\udd4a',fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],"char":'\ud83e\udd4b',fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],"char":'\ud83d\udea3\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],"char":'\ud83d\udea3',fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],"char":'\ud83e\uddd7\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],"char":'\ud83e\uddd7\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],"char":'\ud83c\udfca\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],"char":'\ud83c\udfca',fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],"char":'\ud83e\udd3d\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],"char":'\ud83e\udd3d\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],"char":'\ud83e\uddd8\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],"char":'\ud83e\uddd8\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],"char":'\ud83c\udfc4\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],"char":'\ud83c\udfc4',fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],"char":'\ud83d\udec0',fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],"char":'\u26f9\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],"char":'\u26f9',fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],"char":'\ud83c\udfcb\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],"char":'\ud83c\udfcb',fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],"char":'\ud83d\udeb4\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],"char":'\ud83d\udeb4',fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],"char":'\ud83d\udeb5\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],"char":'\ud83d\udeb5',fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],"char":'\ud83c\udfc7',fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],"char":'\ud83d\udd74',fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],"char":'\ud83c\udfc6',fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],"char":'\ud83c\udfbd',fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],"char":'\ud83c\udfc5',fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],"char":'\ud83c\udf96',fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],"char":'\ud83e\udd47',fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],"char":'\ud83e\udd48',fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],"char":'\ud83e\udd49',fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],"char":'\ud83c\udf97',fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],"char":'\ud83c\udff5',fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],"char":'\ud83c\udfab',fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],"char":'\ud83c\udf9f',fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],"char":'\ud83c\udfad',fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],"char":'\ud83c\udfa8',fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],"char":'\ud83c\udfaa',fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],"char":'\ud83e\udd39\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],"char":'\ud83e\udd39\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],"char":'\ud83c\udfa4',fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],"char":'\ud83c\udfa7',fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],"char":'\ud83c\udfbc',fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],"char":'\ud83c\udfb9',fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],"char":'\ud83e\udd41',fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],"char":'\ud83c\udfb7',fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],"char":'\ud83c\udfba',fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],"char":'\ud83c\udfb8',fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],"char":'\ud83c\udfbb',fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],"char":'\ud83c\udfac',fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],"char":'\ud83c\udfae',fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],"char":'\ud83d\udc7e',fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],"char":'\ud83c\udfaf',fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],"char":'\ud83c\udfb2',fitzpatrick_scale:!1,category:"activity"},chess_pawn:{keywords:["expendable"],"char":"\u265f",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],"char":'\ud83c\udfb0',fitzpatrick_scale:!1,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],"char":'\ud83e\udde9',fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],"char":'\ud83c\udfb3',fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],"char":'\ud83d\ude97',fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],"char":'\ud83d\ude95',fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],"char":'\ud83d\ude99',fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],"char":'\ud83d\ude8c',fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],"char":'\ud83d\ude8e',fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],"char":'\ud83c\udfce',fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],"char":'\ud83d\ude93',fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],"char":'\ud83d\ude91',fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],"char":'\ud83d\ude92',fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],"char":'\ud83d\ude90',fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],"char":'\ud83d\ude9a',fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],"char":'\ud83d\ude9b',fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],"char":'\ud83d\ude9c',fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],"char":'\ud83d\udef4',fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],"char":'\ud83c\udfcd',fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],"char":'\ud83d\udeb2',fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],"char":'\ud83d\udef5',fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],"char":'\ud83d\udea8',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],"char":'\ud83d\ude94',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],"char":'\ud83d\ude8d',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],"char":'\ud83d\ude98',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],"char":'\ud83d\ude96',fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],"char":'\ud83d\udea1',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],"char":'\ud83d\udea0',fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],"char":'\ud83d\ude9f',fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],"char":'\ud83d\ude83',fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],"char":'\ud83d\ude8b',fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],"char":'\ud83d\ude9d',fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],"char":'\ud83d\ude84',fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],"char":'\ud83d\ude85',fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],"char":'\ud83d\ude88',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],"char":'\ud83d\ude9e',fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],"char":'\ud83d\ude82',fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],"char":'\ud83d\ude86',fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],"char":'\ud83d\ude87',fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],"char":'\ud83d\ude8a',fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],"char":'\ud83d\ude89',fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],"char":'\ud83d\udef8',fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],"char":'\ud83d\ude81',fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],"char":'\ud83d\udee9',fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],"char":'\u2708\ufe0f',fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],"char":'\ud83d\udeeb',fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],"char":'\ud83d\udeec',fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],"char":'\u26f5',fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],"char":'\ud83d\udee5',fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],"char":'\ud83d\udea4',fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],"char":'\u26f4',fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],"char":'\ud83d\udef3',fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],"char":'\ud83d\ude80',fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],"char":'\ud83d\udef0',fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],"char":'\ud83d\udcba',fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],"char":'\ud83d\udef6',fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],"char":'\u2693',fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],"char":'\ud83d\udea7',fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],"char":'\u26fd',fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],"char":'\ud83d\ude8f',fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],"char":'\ud83d\udea6',fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],"char":'\ud83d\udea5',fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],"char":'\ud83c\udfc1',fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],"char":'\ud83d\udea2',fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],"char":'\ud83c\udfa1',fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],"char":'\ud83c\udfa2',fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],"char":'\ud83c\udfa0',fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],"char":'\ud83c\udfd7',fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],"char":'\ud83c\udf01',fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],"char":'\ud83d\uddfc',fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],"char":'\ud83c\udfed',fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],"char":'\u26f2',fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],"char":'\ud83c\udf91',fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],"char":'\u26f0',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],"char":'\ud83c\udfd4',fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],"char":'\ud83d\uddfb',fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],"char":'\ud83c\udf0b',fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],"char":'\ud83d\uddfe',fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],"char":'\ud83c\udfd5',fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],"char":'\u26fa',fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],"char":'\ud83c\udfde',fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],"char":'\ud83d\udee3',fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],"char":'\ud83d\udee4',fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],"char":'\ud83c\udf05',fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],"char":'\ud83c\udf04',fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],"char":'\ud83c\udfdc',fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],"char":'\ud83c\udfd6',fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],"char":'\ud83c\udfdd',fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],"char":'\ud83c\udf07',fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],"char":'\ud83c\udf06',fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],"char":'\ud83c\udfd9',fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],"char":'\ud83c\udf03',fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],"char":'\ud83c\udf09',fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],"char":'\ud83c\udf0c',fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],"char":'\ud83c\udf20',fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],"char":'\ud83c\udf87',fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],"char":'\ud83c\udf86',fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],"char":'\ud83c\udf08',fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],"char":'\ud83c\udfd8',fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],"char":'\ud83c\udff0',fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],"char":'\ud83c\udfef',fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],"char":'\ud83c\udfdf',fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],"char":'\ud83d\uddfd',fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],"char":'\ud83c\udfe0',fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],"char":'\ud83c\udfe1',fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],"char":'\ud83c\udfda',fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],"char":'\ud83c\udfe2',fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],"char":'\ud83c\udfec',fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],"char":'\ud83c\udfe3',fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],"char":'\ud83c\udfe4',fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],"char":'\ud83c\udfe5',fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],"char":'\ud83c\udfe6',fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],"char":'\ud83c\udfe8',fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],"char":'\ud83c\udfea',fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],"char":'\ud83c\udfeb',fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],"char":'\ud83c\udfe9',fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],"char":'\ud83d\udc92',fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],"char":'\ud83c\udfdb',fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],"char":'\u26ea',fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],"char":'\ud83d\udd4c',fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],"char":'\ud83d\udd4d',fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],"char":'\ud83d\udd4b',fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],"char":'\u26e9',fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],"char":'\u231a',fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],"char":'\ud83d\udcf1',fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],"char":'\ud83d\udcf2',fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],"char":'\ud83d\udcbb',fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],"char":'\u2328',fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],"char":'\ud83d\udda5',fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],"char":'\ud83d\udda8',fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],"char":'\ud83d\uddb1',fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],"char":'\ud83d\uddb2',fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],"char":'\ud83d\udd79',fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],"char":'\ud83d\udddc',fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],"char":'\ud83d\udcbd',fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],"char":'\ud83d\udcbe',fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],"char":'\ud83d\udcbf',fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],"char":'\ud83d\udcc0',fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],"char":'\ud83d\udcfc',fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],"char":'\ud83d\udcf7',fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],"char":'\ud83d\udcf8',fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],"char":'\ud83d\udcf9',fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],"char":'\ud83c\udfa5',fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],"char":'\ud83d\udcfd',fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],"char":'\ud83c\udf9e',fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],"char":'\ud83d\udcde',fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],"char":'\u260e\ufe0f',fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],"char":'\ud83d\udcdf',fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],"char":'\ud83d\udce0',fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],"char":'\ud83d\udcfa',fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],"char":'\ud83d\udcfb',fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],"char":'\ud83c\udf99',fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],"char":'\ud83c\udf9a',fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],"char":'\ud83c\udf9b',fitzpatrick_scale:!1,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],"char":'\ud83e\udded',fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],"char":'\u23f1',fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],"char":'\u23f2',fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],"char":'\u23f0',fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],"char":'\ud83d\udd70',fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],"char":'\u23f3',fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],"char":'\u231b',fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],"char":'\ud83d\udce1',fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],"char":'\ud83d\udd0b',fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],"char":'\ud83d\udd0c',fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],"char":'\ud83d\udca1',fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],"char":'\ud83d\udd26',fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],"char":'\ud83d\udd6f',fitzpatrick_scale:!1,category:"objects"},fire_extinguisher:{keywords:["quench"],"char":'\ud83e\uddef',fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],"char":'\ud83d\uddd1',fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],"char":'\ud83d\udee2',fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],"char":'\ud83d\udcb8',fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],"char":'\ud83d\udcb5',fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],"char":'\ud83d\udcb4',fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],"char":'\ud83d\udcb6',fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],"char":'\ud83d\udcb7',fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],"char":'\ud83d\udcb0',fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],"char":'\ud83d\udcb3',fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],"char":'\ud83d\udc8e',fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],"char":'\u2696',fitzpatrick_scale:!1,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],"char":'\ud83e\uddf0',fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],"char":'\ud83d\udd27',fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],"char":'\ud83d\udd28',fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],"char":'\u2692',fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],"char":'\ud83d\udee0',fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],"char":'\u26cf',fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],"char":'\ud83d\udd29',fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],"char":'\u2699',fitzpatrick_scale:!1,category:"objects"},brick:{keywords:["bricks"],"char":'\ud83e\uddf1',fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],"char":'\u26d3',fitzpatrick_scale:!1,category:"objects"},magnet:{keywords:["attraction","magnetic"],"char":'\ud83e\uddf2',fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],"char":'\ud83d\udd2b',fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],"char":'\ud83d\udca3',fitzpatrick_scale:!1,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],"char":'\ud83e\udde8',fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],"char":'\ud83d\udd2a',fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],"char":'\ud83d\udde1',fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],"char":'\u2694',fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],"char":'\ud83d\udee1',fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],"char":'\ud83d\udeac',fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],"char":'\u2620',fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],"char":'\u26b0',fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],"char":'\u26b1',fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],"char":'\ud83c\udffa',fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],"char":'\ud83d\udd2e',fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],"char":'\ud83d\udcff',fitzpatrick_scale:!1,category:"objects"},nazar_amulet:{keywords:["bead","charm"],"char":'\ud83e\uddff',fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],"char":'\ud83d\udc88',fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],"char":'\u2697',fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],"char":'\ud83d\udd2d',fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],"char":'\ud83d\udd2c',fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],"char":'\ud83d\udd73',fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],"char":'\ud83d\udc8a',fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],"char":'\ud83d\udc89',fitzpatrick_scale:!1,category:"objects"},dna:{keywords:["biologist","genetics","life"],"char":'\ud83e\uddec',fitzpatrick_scale:!1,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],"char":'\ud83e\udda0',fitzpatrick_scale:!1,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],"char":'\ud83e\uddeb',fitzpatrick_scale:!1,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],"char":'\ud83e\uddea',fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],"char":'\ud83c\udf21',fitzpatrick_scale:!1,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],"char":'\ud83e\uddf9',fitzpatrick_scale:!1,category:"objects"},basket:{keywords:["laundry"],"char":'\ud83e\uddfa',fitzpatrick_scale:!1,category:"objects"},toilet_paper:{keywords:["roll"],"char":'\ud83e\uddfb',fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],"char":'\ud83c\udff7',fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],"char":'\ud83d\udd16',fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],"char":'\ud83d\udebd',fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],"char":'\ud83d\udebf',fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],"char":'\ud83d\udec1',fitzpatrick_scale:!1,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],"char":'\ud83e\uddfc',fitzpatrick_scale:!1,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],"char":'\ud83e\uddfd',fitzpatrick_scale:!1,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],"char":'\ud83e\uddf4',fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],"char":'\ud83d\udd11',fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],"char":'\ud83d\udddd',fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],"char":'\ud83d\udecb',fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],"char":'\ud83d\udecc',fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],"char":'\ud83d\udecf',fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],"char":'\ud83d\udeaa',fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],"char":'\ud83d\udece',fitzpatrick_scale:!1,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],"char":'\ud83e\uddf8',fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],"char":'\ud83d\uddbc',fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],"char":'\ud83d\uddfa',fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],"char":'\u26f1',fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],"char":'\ud83d\uddff',fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],"char":'\ud83d\udecd',fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],"char":'\ud83d\uded2',fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],"char":'\ud83c\udf88',fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],"char":'\ud83c\udf8f',fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],"char":'\ud83c\udf80',fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],"char":'\ud83c\udf81',fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],"char":'\ud83c\udf8a',fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],"char":'\ud83c\udf89',fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],"char":'\ud83c\udf8e',fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],"char":'\ud83c\udf90',fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],"char":'\ud83c\udf8c',fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],"char":'\ud83c\udfee',fitzpatrick_scale:!1,category:"objects"},red_envelope:{keywords:["gift"],"char":'\ud83e\udde7',fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],"char":'\u2709\ufe0f',fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],"char":'\ud83d\udce9',fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],"char":'\ud83d\udce8',fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],"char":'\ud83d\udce7',fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],"char":'\ud83d\udc8c',fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],"char":'\ud83d\udcee',fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],"char":'\ud83d\udcea',fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],"char":'\ud83d\udceb',fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],"char":'\ud83d\udcec',fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],"char":'\ud83d\udced',fitzpatrick_scale:!1,category:"objects"},"package":{keywords:["mail","gift","cardboard","box","moving"],"char":'\ud83d\udce6',fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],"char":'\ud83d\udcef',fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],"char":'\ud83d\udce5',fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],"char":'\ud83d\udce4',fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],"char":'\ud83d\udcdc',fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],"char":'\ud83d\udcc3',fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],"char":'\ud83d\udcd1',fitzpatrick_scale:!1,category:"objects"},receipt:{keywords:["accounting","expenses"],"char":'\ud83e\uddfe',fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],"char":'\ud83d\udcca',fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],"char":'\ud83d\udcc8',fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],"char":'\ud83d\udcc9',fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],"char":'\ud83d\udcc4',fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],"char":'\ud83d\udcc5',fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],"char":'\ud83d\udcc6',fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],"char":'\ud83d\uddd3',fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],"char":'\ud83d\udcc7',fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],"char":'\ud83d\uddc3',fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],"char":'\ud83d\uddf3',fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],"char":'\ud83d\uddc4',fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],"char":'\ud83d\udccb',fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],"char":'\ud83d\uddd2',fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],"char":'\ud83d\udcc1',fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],"char":'\ud83d\udcc2',fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],"char":'\ud83d\uddc2',fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],"char":'\ud83d\uddde',fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],"char":'\ud83d\udcf0',fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],"char":'\ud83d\udcd3',fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],"char":'\ud83d\udcd5',fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],"char":'\ud83d\udcd7',fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],"char":'\ud83d\udcd8',fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],"char":'\ud83d\udcd9',fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],"char":'\ud83d\udcd4',fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],"char":'\ud83d\udcd2',fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],"char":'\ud83d\udcda',fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],"char":'\ud83d\udcd6',fitzpatrick_scale:!1,category:"objects"},safety_pin:{keywords:["diaper"],"char":'\ud83e\uddf7',fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],"char":'\ud83d\udd17',fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],"char":'\ud83d\udcce',fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],"char":'\ud83d\udd87',fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],"char":'\u2702\ufe0f',fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],"char":'\ud83d\udcd0',fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],"char":'\ud83d\udccf',fitzpatrick_scale:!1,category:"objects"},abacus:{keywords:["calculation"],"char":'\ud83e\uddee',fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],"char":'\ud83d\udccc',fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],"char":'\ud83d\udccd',fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],"char":'\ud83d\udea9',fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],"char":'\ud83c\udff3',fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],"char":'\ud83c\udff4',fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],"char":'\ud83c\udff3\ufe0f\u200d\ud83c\udf08',fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],"char":'\ud83d\udd10',fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],"char":'\ud83d\udd12',fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],"char":'\ud83d\udd13',fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],"char":'\ud83d\udd0f',fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],"char":'\ud83d\udd8a',fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],"char":'\ud83d\udd8b',fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],"char":'\u2712\ufe0f',fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],"char":'\ud83d\udcdd',fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],"char":'\u270f\ufe0f',fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],"char":'\ud83d\udd8d',fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],"char":'\ud83d\udd8c',fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],"char":'\ud83d\udd0d',fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],"char":'\ud83d\udd0e',fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],"char":'\u2764\ufe0f',fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],"char":'\ud83e\udde1',fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],"char":'\ud83d\udc9b',fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],"char":'\ud83d\udc9a',fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],"char":'\ud83d\udc99',fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],"char":'\ud83d\udc9c',fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],"char":'\ud83d\udda4',fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],"char":'\ud83d\udc94',fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],"char":'\u2763',fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],"char":'\ud83d\udc95',fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],"char":'\ud83d\udc9e',fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],"char":'\ud83d\udc93',fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],"char":'\ud83d\udc97',fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],"char":'\ud83d\udc96',fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],"char":'\ud83d\udc98',fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],"char":'\ud83d\udc9d',fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],"char":'\ud83d\udc9f',fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],"char":'\u262e',fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],"char":'\u271d',fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],"char":'\u262a',fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],"char":'\ud83d\udd49',fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],"char":'\u2638',fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],"char":'\u2721',fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],"char":'\ud83d\udd2f',fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],"char":'\ud83d\udd4e',fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],"char":'\u262f',fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],"char":'\u2626',fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],"char":'\ud83d\uded0',fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],"char":'\u26ce',fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],"char":'\u2648',fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],"char":'\u2649',fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],"char":'\u264a',fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],"char":'\u264b',fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],"char":'\u264c',fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],"char":'\u264d',fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],"char":'\u264e',fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],"char":'\u264f',fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],"char":'\u2650',fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],"char":'\u2651',fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],"char":'\u2652',fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],"char":'\u2653',fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],"char":'\ud83c\udd94',fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],"char":'\u269b',fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],"char":'\ud83c\ude33',fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],"char":'\ud83c\ude39',fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],"char":'\u2622',fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],"char":'\u2623',fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],"char":'\ud83d\udcf4',fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],"char":'\ud83d\udcf3',fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],"char":'\ud83c\ude36',fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],"char":'\ud83c\ude1a',fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],"char":'\ud83c\ude38',fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],"char":'\ud83c\ude3a',fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],"char":'\ud83c\ude37\ufe0f',fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],"char":'\u2734\ufe0f',fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],"char":'\ud83c\udd9a',fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],"char":'\ud83c\ude51',fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],"char":'\ud83d\udcae',fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],"char":'\ud83c\ude50',fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],"char":'\u3299\ufe0f',fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],"char":'\u3297\ufe0f',fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],"char":'\ud83c\ude34',fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],"char":'\ud83c\ude35',fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],"char":'\ud83c\ude32',fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],"char":'\ud83c\udd70\ufe0f',fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],"char":'\ud83c\udd71\ufe0f',fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],"char":'\ud83c\udd8e',fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],"char":'\ud83c\udd91',fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],"char":'\ud83c\udd7e\ufe0f',fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],"char":'\ud83c\udd98',fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],"char":'\u26d4',fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],"char":'\ud83d\udcdb',fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],"char":'\ud83d\udeab',fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],"char":'\u274c',fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],"char":'\u2b55',fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],"char":'\ud83d\uded1',fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],"char":'\ud83d\udca2',fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],"char":'\u2668\ufe0f',fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],"char":'\ud83d\udeb7',fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],"char":'\ud83d\udeaf',fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],"char":'\ud83d\udeb3',fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],"char":'\ud83d\udeb1',fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],"char":'\ud83d\udd1e',fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],"char":'\ud83d\udcf5',fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],"char":'\u2757',fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],"char":'\u2755',fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],"char":'\u2753',fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],"char":'\u2754',fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],"char":'\u203c\ufe0f',fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],"char":'\u2049\ufe0f',fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],"char":'\ud83d\udd05',fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],"char":'\ud83d\udd06',fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],"char":'\ud83d\udd31',fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],"char":'\u269c',fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],"char":'\u303d\ufe0f',fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],"char":'\u26a0\ufe0f',fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],"char":'\ud83d\udeb8',fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],"char":'\ud83d\udd30',fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],"char":'\u267b\ufe0f',fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],"char":'\ud83c\ude2f',fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],"char":'\ud83d\udcb9',fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],"char":'\u2747\ufe0f',fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],"char":'\u2733\ufe0f',fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],"char":'\u274e',fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],"char":'\u2705',fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],"char":'\ud83d\udca0',fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],"char":'\ud83c\udf00',fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],"char":'\u27bf',fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],"char":'\ud83c\udf10',fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],"char":'\u24c2\ufe0f',fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],"char":'\ud83c\udfe7',fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],"char":'\ud83c\ude02\ufe0f',fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],"char":'\ud83d\udec2',fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],"char":'\ud83d\udec3',fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],"char":'\ud83d\udec4',fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],"char":'\ud83d\udec5',fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],"char":'\u267f',fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],"char":'\ud83d\udead',fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],"char":'\ud83d\udebe',fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],"char":'\ud83c\udd7f\ufe0f',fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],"char":'\ud83d\udeb0',fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],"char":'\ud83d\udeb9',fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],"char":'\ud83d\udeba',fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],"char":'\ud83d\udebc',fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],"char":'\ud83d\udebb',fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],"char":'\ud83d\udeae',fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],"char":'\ud83c\udfa6',fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],"char":'\ud83d\udcf6',fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],"char":'\ud83c\ude01',fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],"char":'\ud83c\udd96',fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],"char":'\ud83c\udd97',fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],"char":'\ud83c\udd99',fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],"char":'\ud83c\udd92',fitzpatrick_scale:!1,category:"symbols"},"new":{keywords:["blue-square","words","start"],"char":'\ud83c\udd95',fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],"char":'\ud83c\udd93',fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],"char":'0\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],"char":'1\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],"char":'2\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],"char":'3\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],"char":'4\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],"char":'5\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],"char":'6\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],"char":'7\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],"char":'8\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],"char":'9\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],"char":'\ud83d\udd1f',fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],"char":'*\u20e3',fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],"char":'\u23cf\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],"char":'\u25b6\ufe0f',fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],"char":'\u23f8',fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],"char":'\u23ed',fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],"char":'\u23f9',fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],"char":'\u23fa',fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],"char":'\u23ef',fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],"char":'\u23ee',fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],"char":'\u23e9',fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],"char":'\u23ea',fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],"char":'\ud83d\udd00',fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],"char":'\ud83d\udd01',fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],"char":'\ud83d\udd02',fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],"char":'\u25c0\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],"char":'\ud83d\udd3c',fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],"char":'\ud83d\udd3d',fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],"char":'\u23eb',fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],"char":'\u23ec',fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],"char":'\u27a1\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],"char":'\u2b05\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],"char":'\u2b06\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],"char":'\u2b07\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],"char":'\u2197\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],"char":'\u2198\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],"char":'\u2199\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],"char":'\u2196\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],"char":'\u2195\ufe0f',fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],"char":'\u2194\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],"char":'\ud83d\udd04',fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],"char":'\u21aa\ufe0f',fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],"char":'\u21a9\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],"char":'\u2934\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],"char":'\u2935\ufe0f',fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],"char":'#\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],"char":'\u2139\ufe0f',fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],"char":'\ud83d\udd24',fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],"char":'\ud83d\udd21',fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],"char":'\ud83d\udd20',fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],"char":'\ud83d\udd23',fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],"char":'\ud83c\udfb5',fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],"char":'\ud83c\udfb6',fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],"char":'\u3030\ufe0f',fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],"char":'\u27b0',fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],"char":'\u2714\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],"char":'\ud83d\udd03',fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],"char":'\u2795',fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],"char":'\u2796',fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],"char":'\u2797',fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],"char":'\u2716\ufe0f',fitzpatrick_scale:!1,category:"symbols"},infinity:{keywords:["forever"],"char":'\u267e',fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],"char":'\ud83d\udcb2',fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],"char":'\ud83d\udcb1',fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],"char":'\xa9\ufe0f',fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],"char":'\xae\ufe0f',fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],"char":'\u2122\ufe0f',fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],"char":'\ud83d\udd1a',fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],"char":'\ud83d\udd19',fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],"char":'\ud83d\udd1b',fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],"char":'\ud83d\udd1d',fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],"char":'\ud83d\udd1c',fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],"char":'\u2611\ufe0f',fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],"char":'\ud83d\udd18',fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],"char":'\u26aa',fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],"char":'\u26ab',fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],"char":'\ud83d\udd34',fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],"char":'\ud83d\udd35',fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],"char":'\ud83d\udd38',fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],"char":'\ud83d\udd39',fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],"char":'\ud83d\udd36',fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],"char":'\ud83d\udd37',fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],"char":'\ud83d\udd3a',fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],"char":'\u25aa\ufe0f',fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],"char":'\u25ab\ufe0f',fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],"char":'\u2b1b',fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],"char":'\u2b1c',fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],"char":'\ud83d\udd3b',fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],"char":'\u25fc\ufe0f',fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],"char":'\u25fb\ufe0f',fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],"char":'\u25fe',fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],"char":'\u25fd',fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],"char":'\ud83d\udd32',fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],"char":'\ud83d\udd33',fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],"char":'\ud83d\udd08',fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],"char":'\ud83d\udd09',fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],"char":'\ud83d\udd0a',fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],"char":'\ud83d\udd07',fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],"char":'\ud83d\udce3',fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],"char":'\ud83d\udce2',fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],"char":'\ud83d\udd14',fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],"char":'\ud83d\udd15',fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],"char":'\ud83c\udccf',fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],"char":'\ud83c\udc04',fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],"char":'\u2660\ufe0f',fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],"char":'\u2663\ufe0f',fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],"char":'\u2665\ufe0f',fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],"char":'\u2666\ufe0f',fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],"char":'\ud83c\udfb4',fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],"char":'\ud83d\udcad',fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],"char":'\ud83d\uddef',fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],"char":'\ud83d\udcac',fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],"char":'\ud83d\udde8',fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd50',fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd51',fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd52',fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd53',fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd54',fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],"char":'\ud83d\udd55',fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd56',fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd57',fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd58',fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd59',fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd5a',fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],"char":'\ud83d\udd5b',fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd5c',fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd5d',fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd5e',fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd5f',fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd60',fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd61',fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd62',fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd63',fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd64',fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd65',fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd66',fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],"char":'\ud83d\udd67',fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddeb',fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddfd',fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],"char":'\ud83c\udde9\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\udde9',fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddf6',fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\udde9',fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\udde7',fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddef',fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddf6',fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],"char":'\ud83c\uddfb\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddeb',fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddfb',fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddeb',fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\udde9',fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],"char":'\ud83c\udde8\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddfd',fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\udde9',fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],"char":'\ud83c\udded\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],"char":'\ud83c\udde9\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],"char":'\ud83c\udde9\ud83c\uddef',fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],"char":'\ud83c\udde9\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],"char":'\ud83c\udde9\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],"char":'\ud83c\uddea\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],"char":'\ud83c\uddea\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddfb',fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddf6',fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],"char":'\ud83c\uddea\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],"char":'\ud83c\uddea\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],"char":'\ud83c\uddea\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],"char":'\ud83c\uddea\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],"char":'\ud83c\uddeb\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],"char":'\ud83c\uddeb\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],"char":'\ud83c\uddeb\ud83c\uddef',fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],"char":'\ud83c\uddeb\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],"char":'\ud83c\uddeb\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddeb',fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddeb',fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddeb',fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],"char":'\ud83c\udde9\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\udde9',fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddf5',fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],"char":'\ud83c\udded\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],"char":'\ud83c\udded\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],"char":'\ud83c\udded\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],"char":'\ud83c\udded\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\udde9',fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddf6',fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],"char":'\ud83c\uddee\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],"char":'\ud83c\uddef\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],"char":'\ud83c\uddef\ud83c\uddf5',fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],"char":'\ud83c\uddef\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],"char":'\ud83c\uddef\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],"char":'\ud83c\uddfd\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\uddfb',fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\udde7',fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddfb',fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf6',fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],"char":'\ud83c\uddfe\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddfd',fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],"char":'\ud83c\uddeb\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\udde9',fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddf5',fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddeb',fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],"char":'\ud83c\uddf2\ud83c\uddf5',fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],"char":'\ud83c\uddf0\ud83c\uddf5',fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],"char":'\ud83c\uddf3\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],"char":'\ud83c\uddf4\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],"char":'\ud83c\uddf6\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],"char":'\ud83c\uddf7\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],"char":'\ud83c\uddf7\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],"char":'\ud83c\uddf7\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],"char":'\ud83c\uddf7\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],"char":'\ud83c\udde7\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],"char":'\ud83c\uddf0\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],"char":'\ud83c\uddf5\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],"char":'\ud83c\uddfb\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],"char":'\ud83c\uddfc\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],"char":'\ud83c\uddf7\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddfd',fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\udde7',fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],"char":'\ud83c\uddff\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],"char":'\ud83c\uddec\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],"char":'\ud83c\uddf0\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],"char":'\ud83c\uddea\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],"char":'\ud83c\uddf1\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\udde9',fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],"char":'\ud83c\udde8\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],"char":'\ud83c\uddf8\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddef',fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddf1',fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddf0',fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddf4',fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddf9',fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddf7',fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\udde8',fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],"char":'\ud83c\uddf9\ud83c\uddfb',fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],"char":'\ud83c\uddfa\ud83c\uddec',fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],"char":'\ud83c\uddfa\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],"char":'\ud83c\udde6\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],"char":'\ud83c\uddec\ud83c\udde7',fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],"char":'\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f',fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],"char":'\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f',fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],"char":'\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f',fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],"char":'\ud83c\uddfa\ud83c\uddf8',fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],"char":'\ud83c\uddfb\ud83c\uddee',fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],"char":'\ud83c\uddfa\ud83c\uddfe',fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],"char":'\ud83c\uddfa\ud83c\uddff',fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],"char":'\ud83c\uddfb\ud83c\uddfa',fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],"char":'\ud83c\uddfb\ud83c\udde6',fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],"char":'\ud83c\uddfb\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],"char":'\ud83c\uddfb\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],"char":'\ud83c\uddfc\ud83c\uddeb',fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],"char":'\ud83c\uddea\ud83c\udded',fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],"char":'\ud83c\uddfe\ud83c\uddea',fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],"char":'\ud83c\uddff\ud83c\uddf2',fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],"char":'\ud83c\uddff\ud83c\uddfc',fitzpatrick_scale:!1,category:"flags"},united_nations:{keywords:["un","flag","banner"],"char":'\ud83c\uddfa\ud83c\uddf3',fitzpatrick_scale:!1,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],"char":'\ud83c\udff4\u200d\u2620\ufe0f',fitzpatrick_scale:!1,category:"flags"}}); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/emoticons/js/emojis.js b/component/pear/module/tinymce/tinymce/plugins/emoticons/js/emojis.js deleted file mode 100644 index 4adb59b0cf764289b4f86f4ecd4e82f1d71713bf..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/emoticons/js/emojis.js +++ /dev/null @@ -1,9423 +0,0 @@ -// Source: npm package: emojilib, file:emojis.json -window.tinymce.Resource.add("tinymce.plugins.emoticons", { - grinning: { - keywords: [ "face", "smile", "happy", "joy", ":D", "grin" ], - "char": "\ud83d\ude00", - fitzpatrick_scale: false, - category: "people" - }, - grimacing: { - keywords: [ "face", "grimace", "teeth" ], - "char": "\ud83d\ude2c", - fitzpatrick_scale: false, - category: "people" - }, - grin: { - keywords: [ "face", "happy", "smile", "joy", "kawaii" ], - "char": "\ud83d\ude01", - fitzpatrick_scale: false, - category: "people" - }, - joy: { - keywords: [ "face", "cry", "tears", "weep", "happy", "happytears", "haha" ], - "char": "\ud83d\ude02", - fitzpatrick_scale: false, - category: "people" - }, - rofl: { - keywords: [ "face", "rolling", "floor", "laughing", "lol", "haha" ], - "char": "\ud83e\udd23", - fitzpatrick_scale: false, - category: "people" - }, - partying: { - keywords: [ "face", "celebration", "woohoo" ], - "char": "\ud83e\udd73", - fitzpatrick_scale: false, - category: "people" - }, - smiley: { - keywords: [ "face", "happy", "joy", "haha", ":D", ":)", "smile", "funny" ], - "char": "\ud83d\ude03", - fitzpatrick_scale: false, - category: "people" - }, - smile: { - keywords: [ "face", "happy", "joy", "funny", "haha", "laugh", "like", ":D", ":)" ], - "char": "\ud83d\ude04", - fitzpatrick_scale: false, - category: "people" - }, - sweat_smile: { - keywords: [ "face", "hot", "happy", "laugh", "sweat", "smile", "relief" ], - "char": "\ud83d\ude05", - fitzpatrick_scale: false, - category: "people" - }, - laughing: { - keywords: [ "happy", "joy", "lol", "satisfied", "haha", "face", "glad", "XD", "laugh" ], - "char": "\ud83d\ude06", - fitzpatrick_scale: false, - category: "people" - }, - innocent: { - keywords: [ "face", "angel", "heaven", "halo" ], - "char": "\ud83d\ude07", - fitzpatrick_scale: false, - category: "people" - }, - wink: { - keywords: [ "face", "happy", "mischievous", "secret", ";)", "smile", "eye" ], - "char": "\ud83d\ude09", - fitzpatrick_scale: false, - category: "people" - }, - blush: { - keywords: [ "face", "smile", "happy", "flushed", "crush", "embarrassed", "shy", "joy" ], - "char": "\ud83d\ude0a", - fitzpatrick_scale: false, - category: "people" - }, - slightly_smiling_face: { - keywords: [ "face", "smile" ], - "char": "\ud83d\ude42", - fitzpatrick_scale: false, - category: "people" - }, - upside_down_face: { - keywords: [ "face", "flipped", "silly", "smile" ], - "char": "\ud83d\ude43", - fitzpatrick_scale: false, - category: "people" - }, - relaxed: { - keywords: [ "face", "blush", "massage", "happiness" ], - "char": "\u263a\ufe0f", - fitzpatrick_scale: false, - category: "people" - }, - yum: { - keywords: [ "happy", "joy", "tongue", "smile", "face", "silly", "yummy", "nom", "delicious", "savouring" ], - "char": "\ud83d\ude0b", - fitzpatrick_scale: false, - category: "people" - }, - relieved: { - keywords: [ "face", "relaxed", "phew", "massage", "happiness" ], - "char": "\ud83d\ude0c", - fitzpatrick_scale: false, - category: "people" - }, - heart_eyes: { - keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "crush", "heart" ], - "char": "\ud83d\ude0d", - fitzpatrick_scale: false, - category: "people" - }, - smiling_face_with_three_hearts: { - keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "crush", "hearts", "adore" ], - "char": "\ud83e\udd70", - fitzpatrick_scale: false, - category: "people" - }, - kissing_heart: { - keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "kiss" ], - "char": "\ud83d\ude18", - fitzpatrick_scale: false, - category: "people" - }, - kissing: { - keywords: [ "love", "like", "face", "3", "valentines", "infatuation", "kiss" ], - "char": "\ud83d\ude17", - fitzpatrick_scale: false, - category: "people" - }, - kissing_smiling_eyes: { - keywords: [ "face", "affection", "valentines", "infatuation", "kiss" ], - "char": "\ud83d\ude19", - fitzpatrick_scale: false, - category: "people" - }, - kissing_closed_eyes: { - keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "kiss" ], - "char": "\ud83d\ude1a", - fitzpatrick_scale: false, - category: "people" - }, - stuck_out_tongue_winking_eye: { - keywords: [ "face", "prank", "childish", "playful", "mischievous", "smile", "wink", "tongue" ], - "char": "\ud83d\ude1c", - fitzpatrick_scale: false, - category: "people" - }, - zany: { - keywords: [ "face", "goofy", "crazy" ], - "char": "\ud83e\udd2a", - fitzpatrick_scale: false, - category: "people" - }, - raised_eyebrow: { - keywords: [ "face", "distrust", "scepticism", "disapproval", "disbelief", "surprise" ], - "char": "\ud83e\udd28", - fitzpatrick_scale: false, - category: "people" - }, - monocle: { - keywords: [ "face", "stuffy", "wealthy" ], - "char": "\ud83e\uddd0", - fitzpatrick_scale: false, - category: "people" - }, - stuck_out_tongue_closed_eyes: { - keywords: [ "face", "prank", "playful", "mischievous", "smile", "tongue" ], - "char": "\ud83d\ude1d", - fitzpatrick_scale: false, - category: "people" - }, - stuck_out_tongue: { - keywords: [ "face", "prank", "childish", "playful", "mischievous", "smile", "tongue" ], - "char": "\ud83d\ude1b", - fitzpatrick_scale: false, - category: "people" - }, - money_mouth_face: { - keywords: [ "face", "rich", "dollar", "money" ], - "char": "\ud83e\udd11", - fitzpatrick_scale: false, - category: "people" - }, - nerd_face: { - keywords: [ "face", "nerdy", "geek", "dork" ], - "char": "\ud83e\udd13", - fitzpatrick_scale: false, - category: "people" - }, - sunglasses: { - keywords: [ "face", "cool", "smile", "summer", "beach", "sunglass" ], - "char": "\ud83d\ude0e", - fitzpatrick_scale: false, - category: "people" - }, - star_struck: { - keywords: [ "face", "smile", "starry", "eyes", "grinning" ], - "char": "\ud83e\udd29", - fitzpatrick_scale: false, - category: "people" - }, - clown_face: { - keywords: [ "face" ], - "char": "\ud83e\udd21", - fitzpatrick_scale: false, - category: "people" - }, - cowboy_hat_face: { - keywords: [ "face", "cowgirl", "hat" ], - "char": "\ud83e\udd20", - fitzpatrick_scale: false, - category: "people" - }, - hugs: { - keywords: [ "face", "smile", "hug" ], - "char": "\ud83e\udd17", - fitzpatrick_scale: false, - category: "people" - }, - smirk: { - keywords: [ "face", "smile", "mean", "prank", "smug", "sarcasm" ], - "char": "\ud83d\ude0f", - fitzpatrick_scale: false, - category: "people" - }, - no_mouth: { - keywords: [ "face", "hellokitty" ], - "char": "\ud83d\ude36", - fitzpatrick_scale: false, - category: "people" - }, - neutral_face: { - keywords: [ "indifference", "meh", ":|", "neutral" ], - "char": "\ud83d\ude10", - fitzpatrick_scale: false, - category: "people" - }, - expressionless: { - keywords: [ "face", "indifferent", "-_-", "meh", "deadpan" ], - "char": "\ud83d\ude11", - fitzpatrick_scale: false, - category: "people" - }, - unamused: { - keywords: [ "indifference", "bored", "straight face", "serious", "sarcasm", "unimpressed", "skeptical", "dubious", "side_eye" ], - "char": "\ud83d\ude12", - fitzpatrick_scale: false, - category: "people" - }, - roll_eyes: { - keywords: [ "face", "eyeroll", "frustrated" ], - "char": "\ud83d\ude44", - fitzpatrick_scale: false, - category: "people" - }, - thinking: { - keywords: [ "face", "hmmm", "think", "consider" ], - "char": "\ud83e\udd14", - fitzpatrick_scale: false, - category: "people" - }, - lying_face: { - keywords: [ "face", "lie", "pinocchio" ], - "char": "\ud83e\udd25", - fitzpatrick_scale: false, - category: "people" - }, - hand_over_mouth: { - keywords: [ "face", "whoops", "shock", "surprise" ], - "char": "\ud83e\udd2d", - fitzpatrick_scale: false, - category: "people" - }, - shushing: { - keywords: [ "face", "quiet", "shhh" ], - "char": "\ud83e\udd2b", - fitzpatrick_scale: false, - category: "people" - }, - symbols_over_mouth: { - keywords: [ "face", "swearing", "cursing", "cussing", "profanity", "expletive" ], - "char": "\ud83e\udd2c", - fitzpatrick_scale: false, - category: "people" - }, - exploding_head: { - keywords: [ "face", "shocked", "mind", "blown" ], - "char": "\ud83e\udd2f", - fitzpatrick_scale: false, - category: "people" - }, - flushed: { - keywords: [ "face", "blush", "shy", "flattered" ], - "char": "\ud83d\ude33", - fitzpatrick_scale: false, - category: "people" - }, - disappointed: { - keywords: [ "face", "sad", "upset", "depressed", ":(" ], - "char": "\ud83d\ude1e", - fitzpatrick_scale: false, - category: "people" - }, - worried: { - keywords: [ "face", "concern", "nervous", ":(" ], - "char": "\ud83d\ude1f", - fitzpatrick_scale: false, - category: "people" - }, - angry: { - keywords: [ "mad", "face", "annoyed", "frustrated" ], - "char": "\ud83d\ude20", - fitzpatrick_scale: false, - category: "people" - }, - rage: { - keywords: [ "angry", "mad", "hate", "despise" ], - "char": "\ud83d\ude21", - fitzpatrick_scale: false, - category: "people" - }, - pensive: { - keywords: [ "face", "sad", "depressed", "upset" ], - "char": "\ud83d\ude14", - fitzpatrick_scale: false, - category: "people" - }, - confused: { - keywords: [ "face", "indifference", "huh", "weird", "hmmm", ":/" ], - "char": "\ud83d\ude15", - fitzpatrick_scale: false, - category: "people" - }, - slightly_frowning_face: { - keywords: [ "face", "frowning", "disappointed", "sad", "upset" ], - "char": "\ud83d\ude41", - fitzpatrick_scale: false, - category: "people" - }, - frowning_face: { - keywords: [ "face", "sad", "upset", "frown" ], - "char": "\u2639", - fitzpatrick_scale: false, - category: "people" - }, - persevere: { - keywords: [ "face", "sick", "no", "upset", "oops" ], - "char": "\ud83d\ude23", - fitzpatrick_scale: false, - category: "people" - }, - confounded: { - keywords: [ "face", "confused", "sick", "unwell", "oops", ":S" ], - "char": "\ud83d\ude16", - fitzpatrick_scale: false, - category: "people" - }, - tired_face: { - keywords: [ "sick", "whine", "upset", "frustrated" ], - "char": "\ud83d\ude2b", - fitzpatrick_scale: false, - category: "people" - }, - weary: { - keywords: [ "face", "tired", "sleepy", "sad", "frustrated", "upset" ], - "char": "\ud83d\ude29", - fitzpatrick_scale: false, - category: "people" - }, - pleading: { - keywords: [ "face", "begging", "mercy" ], - "char": "\ud83e\udd7a", - fitzpatrick_scale: false, - category: "people" - }, - triumph: { - keywords: [ "face", "gas", "phew", "proud", "pride" ], - "char": "\ud83d\ude24", - fitzpatrick_scale: false, - category: "people" - }, - open_mouth: { - keywords: [ "face", "surprise", "impressed", "wow", "whoa", ":O" ], - "char": "\ud83d\ude2e", - fitzpatrick_scale: false, - category: "people" - }, - scream: { - keywords: [ "face", "munch", "scared", "omg" ], - "char": "\ud83d\ude31", - fitzpatrick_scale: false, - category: "people" - }, - fearful: { - keywords: [ "face", "scared", "terrified", "nervous", "oops", "huh" ], - "char": "\ud83d\ude28", - fitzpatrick_scale: false, - category: "people" - }, - cold_sweat: { - keywords: [ "face", "nervous", "sweat" ], - "char": "\ud83d\ude30", - fitzpatrick_scale: false, - category: "people" - }, - hushed: { - keywords: [ "face", "woo", "shh" ], - "char": "\ud83d\ude2f", - fitzpatrick_scale: false, - category: "people" - }, - frowning: { - keywords: [ "face", "aw", "what" ], - "char": "\ud83d\ude26", - fitzpatrick_scale: false, - category: "people" - }, - anguished: { - keywords: [ "face", "stunned", "nervous" ], - "char": "\ud83d\ude27", - fitzpatrick_scale: false, - category: "people" - }, - cry: { - keywords: [ "face", "tears", "sad", "depressed", "upset", ":'(" ], - "char": "\ud83d\ude22", - fitzpatrick_scale: false, - category: "people" - }, - disappointed_relieved: { - keywords: [ "face", "phew", "sweat", "nervous" ], - "char": "\ud83d\ude25", - fitzpatrick_scale: false, - category: "people" - }, - drooling_face: { - keywords: [ "face" ], - "char": "\ud83e\udd24", - fitzpatrick_scale: false, - category: "people" - }, - sleepy: { - keywords: [ "face", "tired", "rest", "nap" ], - "char": "\ud83d\ude2a", - fitzpatrick_scale: false, - category: "people" - }, - sweat: { - keywords: [ "face", "hot", "sad", "tired", "exercise" ], - "char": "\ud83d\ude13", - fitzpatrick_scale: false, - category: "people" - }, - hot: { - keywords: [ "face", "feverish", "heat", "red", "sweating" ], - "char": "\ud83e\udd75", - fitzpatrick_scale: false, - category: "people" - }, - cold: { - keywords: [ "face", "blue", "freezing", "frozen", "frostbite", "icicles" ], - "char": "\ud83e\udd76", - fitzpatrick_scale: false, - category: "people" - }, - sob: { - keywords: [ "face", "cry", "tears", "sad", "upset", "depressed" ], - "char": "\ud83d\ude2d", - fitzpatrick_scale: false, - category: "people" - }, - dizzy_face: { - keywords: [ "spent", "unconscious", "xox", "dizzy" ], - "char": "\ud83d\ude35", - fitzpatrick_scale: false, - category: "people" - }, - astonished: { - keywords: [ "face", "xox", "surprised", "poisoned" ], - "char": "\ud83d\ude32", - fitzpatrick_scale: false, - category: "people" - }, - zipper_mouth_face: { - keywords: [ "face", "sealed", "zipper", "secret" ], - "char": "\ud83e\udd10", - fitzpatrick_scale: false, - category: "people" - }, - nauseated_face: { - keywords: [ "face", "vomit", "gross", "green", "sick", "throw up", "ill" ], - "char": "\ud83e\udd22", - fitzpatrick_scale: false, - category: "people" - }, - sneezing_face: { - keywords: [ "face", "gesundheit", "sneeze", "sick", "allergy" ], - "char": "\ud83e\udd27", - fitzpatrick_scale: false, - category: "people" - }, - vomiting: { - keywords: [ "face", "sick" ], - "char": "\ud83e\udd2e", - fitzpatrick_scale: false, - category: "people" - }, - mask: { - keywords: [ "face", "sick", "ill", "disease" ], - "char": "\ud83d\ude37", - fitzpatrick_scale: false, - category: "people" - }, - face_with_thermometer: { - keywords: [ "sick", "temperature", "thermometer", "cold", "fever" ], - "char": "\ud83e\udd12", - fitzpatrick_scale: false, - category: "people" - }, - face_with_head_bandage: { - keywords: [ "injured", "clumsy", "bandage", "hurt" ], - "char": "\ud83e\udd15", - fitzpatrick_scale: false, - category: "people" - }, - woozy: { - keywords: [ "face", "dizzy", "intoxicated", "tipsy", "wavy" ], - "char": "\ud83e\udd74", - fitzpatrick_scale: false, - category: "people" - }, - sleeping: { - keywords: [ "face", "tired", "sleepy", "night", "zzz" ], - "char": "\ud83d\ude34", - fitzpatrick_scale: false, - category: "people" - }, - zzz: { - keywords: [ "sleepy", "tired", "dream" ], - "char": "\ud83d\udca4", - fitzpatrick_scale: false, - category: "people" - }, - poop: { - keywords: [ "hankey", "shitface", "fail", "turd", "shit" ], - "char": "\ud83d\udca9", - fitzpatrick_scale: false, - category: "people" - }, - smiling_imp: { - keywords: [ "devil", "horns" ], - "char": "\ud83d\ude08", - fitzpatrick_scale: false, - category: "people" - }, - imp: { - keywords: [ "devil", "angry", "horns" ], - "char": "\ud83d\udc7f", - fitzpatrick_scale: false, - category: "people" - }, - japanese_ogre: { - keywords: [ "monster", "red", "mask", "halloween", "scary", "creepy", "devil", "demon", "japanese", "ogre" ], - "char": "\ud83d\udc79", - fitzpatrick_scale: false, - category: "people" - }, - japanese_goblin: { - keywords: [ "red", "evil", "mask", "monster", "scary", "creepy", "japanese", "goblin" ], - "char": "\ud83d\udc7a", - fitzpatrick_scale: false, - category: "people" - }, - skull: { - keywords: [ "dead", "skeleton", "creepy", "death" ], - "char": "\ud83d\udc80", - fitzpatrick_scale: false, - category: "people" - }, - ghost: { - keywords: [ "halloween", "spooky", "scary" ], - "char": "\ud83d\udc7b", - fitzpatrick_scale: false, - category: "people" - }, - alien: { - keywords: [ "UFO", "paul", "weird", "outer_space" ], - "char": "\ud83d\udc7d", - fitzpatrick_scale: false, - category: "people" - }, - robot: { - keywords: [ "computer", "machine", "bot" ], - "char": "\ud83e\udd16", - fitzpatrick_scale: false, - category: "people" - }, - smiley_cat: { - keywords: [ "animal", "cats", "happy", "smile" ], - "char": "\ud83d\ude3a", - fitzpatrick_scale: false, - category: "people" - }, - smile_cat: { - keywords: [ "animal", "cats", "smile" ], - "char": "\ud83d\ude38", - fitzpatrick_scale: false, - category: "people" - }, - joy_cat: { - keywords: [ "animal", "cats", "haha", "happy", "tears" ], - "char": "\ud83d\ude39", - fitzpatrick_scale: false, - category: "people" - }, - heart_eyes_cat: { - keywords: [ "animal", "love", "like", "affection", "cats", "valentines", "heart" ], - "char": "\ud83d\ude3b", - fitzpatrick_scale: false, - category: "people" - }, - smirk_cat: { - keywords: [ "animal", "cats", "smirk" ], - "char": "\ud83d\ude3c", - fitzpatrick_scale: false, - category: "people" - }, - kissing_cat: { - keywords: [ "animal", "cats", "kiss" ], - "char": "\ud83d\ude3d", - fitzpatrick_scale: false, - category: "people" - }, - scream_cat: { - keywords: [ "animal", "cats", "munch", "scared", "scream" ], - "char": "\ud83d\ude40", - fitzpatrick_scale: false, - category: "people" - }, - crying_cat_face: { - keywords: [ "animal", "tears", "weep", "sad", "cats", "upset", "cry" ], - "char": "\ud83d\ude3f", - fitzpatrick_scale: false, - category: "people" - }, - pouting_cat: { - keywords: [ "animal", "cats" ], - "char": "\ud83d\ude3e", - fitzpatrick_scale: false, - category: "people" - }, - palms_up: { - keywords: [ "hands", "gesture", "cupped", "prayer" ], - "char": "\ud83e\udd32", - fitzpatrick_scale: true, - category: "people" - }, - raised_hands: { - keywords: [ "gesture", "hooray", "yea", "celebration", "hands" ], - "char": "\ud83d\ude4c", - fitzpatrick_scale: true, - category: "people" - }, - clap: { - keywords: [ "hands", "praise", "applause", "congrats", "yay" ], - "char": "\ud83d\udc4f", - fitzpatrick_scale: true, - category: "people" - }, - wave: { - keywords: [ "hands", "gesture", "goodbye", "solong", "farewell", "hello", "hi", "palm" ], - "char": "\ud83d\udc4b", - fitzpatrick_scale: true, - category: "people" - }, - call_me_hand: { - keywords: [ "hands", "gesture" ], - "char": "\ud83e\udd19", - fitzpatrick_scale: true, - category: "people" - }, - "+1": { - keywords: [ "thumbsup", "yes", "awesome", "good", "agree", "accept", "cool", "hand", "like" ], - "char": "\ud83d\udc4d", - fitzpatrick_scale: true, - category: "people" - }, - "-1": { - keywords: [ "thumbsdown", "no", "dislike", "hand" ], - "char": "\ud83d\udc4e", - fitzpatrick_scale: true, - category: "people" - }, - facepunch: { - keywords: [ "angry", "violence", "fist", "hit", "attack", "hand" ], - "char": "\ud83d\udc4a", - fitzpatrick_scale: true, - category: "people" - }, - fist: { - keywords: [ "fingers", "hand", "grasp" ], - "char": "\u270a", - fitzpatrick_scale: true, - category: "people" - }, - fist_left: { - keywords: [ "hand", "fistbump" ], - "char": "\ud83e\udd1b", - fitzpatrick_scale: true, - category: "people" - }, - fist_right: { - keywords: [ "hand", "fistbump" ], - "char": "\ud83e\udd1c", - fitzpatrick_scale: true, - category: "people" - }, - v: { - keywords: [ "fingers", "ohyeah", "hand", "peace", "victory", "two" ], - "char": "\u270c", - fitzpatrick_scale: true, - category: "people" - }, - ok_hand: { - keywords: [ "fingers", "limbs", "perfect", "ok", "okay" ], - "char": "\ud83d\udc4c", - fitzpatrick_scale: true, - category: "people" - }, - raised_hand: { - keywords: [ "fingers", "stop", "highfive", "palm", "ban" ], - "char": "\u270b", - fitzpatrick_scale: true, - category: "people" - }, - raised_back_of_hand: { - keywords: [ "fingers", "raised", "backhand" ], - "char": "\ud83e\udd1a", - fitzpatrick_scale: true, - category: "people" - }, - open_hands: { - keywords: [ "fingers", "butterfly", "hands", "open" ], - "char": "\ud83d\udc50", - fitzpatrick_scale: true, - category: "people" - }, - muscle: { - keywords: [ "arm", "flex", "hand", "summer", "strong", "biceps" ], - "char": "\ud83d\udcaa", - fitzpatrick_scale: true, - category: "people" - }, - pray: { - keywords: [ "please", "hope", "wish", "namaste", "highfive" ], - "char": "\ud83d\ude4f", - fitzpatrick_scale: true, - category: "people" - }, - foot: { - keywords: [ "kick", "stomp" ], - "char": "\ud83e\uddb6", - fitzpatrick_scale: true, - category: "people" - }, - leg: { - keywords: [ "kick", "limb" ], - "char": "\ud83e\uddb5", - fitzpatrick_scale: true, - category: "people" - }, - handshake: { - keywords: [ "agreement", "shake" ], - "char": "\ud83e\udd1d", - fitzpatrick_scale: false, - category: "people" - }, - point_up: { - keywords: [ "hand", "fingers", "direction", "up" ], - "char": "\u261d", - fitzpatrick_scale: true, - category: "people" - }, - point_up_2: { - keywords: [ "fingers", "hand", "direction", "up" ], - "char": "\ud83d\udc46", - fitzpatrick_scale: true, - category: "people" - }, - point_down: { - keywords: [ "fingers", "hand", "direction", "down" ], - "char": "\ud83d\udc47", - fitzpatrick_scale: true, - category: "people" - }, - point_left: { - keywords: [ "direction", "fingers", "hand", "left" ], - "char": "\ud83d\udc48", - fitzpatrick_scale: true, - category: "people" - }, - point_right: { - keywords: [ "fingers", "hand", "direction", "right" ], - "char": "\ud83d\udc49", - fitzpatrick_scale: true, - category: "people" - }, - fu: { - keywords: [ "hand", "fingers", "rude", "middle", "flipping" ], - "char": "\ud83d\udd95", - fitzpatrick_scale: true, - category: "people" - }, - raised_hand_with_fingers_splayed: { - keywords: [ "hand", "fingers", "palm" ], - "char": "\ud83d\udd90", - fitzpatrick_scale: true, - category: "people" - }, - love_you: { - keywords: [ "hand", "fingers", "gesture" ], - "char": "\ud83e\udd1f", - fitzpatrick_scale: true, - category: "people" - }, - metal: { - keywords: [ "hand", "fingers", "evil_eye", "sign_of_horns", "rock_on" ], - "char": "\ud83e\udd18", - fitzpatrick_scale: true, - category: "people" - }, - crossed_fingers: { - keywords: [ "good", "lucky" ], - "char": "\ud83e\udd1e", - fitzpatrick_scale: true, - category: "people" - }, - vulcan_salute: { - keywords: [ "hand", "fingers", "spock", "star trek" ], - "char": "\ud83d\udd96", - fitzpatrick_scale: true, - category: "people" - }, - writing_hand: { - keywords: [ "lower_left_ballpoint_pen", "stationery", "write", "compose" ], - "char": "\u270d", - fitzpatrick_scale: true, - category: "people" - }, - selfie: { - keywords: [ "camera", "phone" ], - "char": "\ud83e\udd33", - fitzpatrick_scale: true, - category: "people" - }, - nail_care: { - keywords: [ "beauty", "manicure", "finger", "fashion", "nail" ], - "char": "\ud83d\udc85", - fitzpatrick_scale: true, - category: "people" - }, - lips: { - keywords: [ "mouth", "kiss" ], - "char": "\ud83d\udc44", - fitzpatrick_scale: false, - category: "people" - }, - tooth: { - keywords: [ "teeth", "dentist" ], - "char": "\ud83e\uddb7", - fitzpatrick_scale: false, - category: "people" - }, - tongue: { - keywords: [ "mouth", "playful" ], - "char": "\ud83d\udc45", - fitzpatrick_scale: false, - category: "people" - }, - ear: { - keywords: [ "face", "hear", "sound", "listen" ], - "char": "\ud83d\udc42", - fitzpatrick_scale: true, - category: "people" - }, - nose: { - keywords: [ "smell", "sniff" ], - "char": "\ud83d\udc43", - fitzpatrick_scale: true, - category: "people" - }, - eye: { - keywords: [ "face", "look", "see", "watch", "stare" ], - "char": "\ud83d\udc41", - fitzpatrick_scale: false, - category: "people" - }, - eyes: { - keywords: [ "look", "watch", "stalk", "peek", "see" ], - "char": "\ud83d\udc40", - fitzpatrick_scale: false, - category: "people" - }, - brain: { - keywords: [ "smart", "intelligent" ], - "char": "\ud83e\udde0", - fitzpatrick_scale: false, - category: "people" - }, - bust_in_silhouette: { - keywords: [ "user", "person", "human" ], - "char": "\ud83d\udc64", - fitzpatrick_scale: false, - category: "people" - }, - busts_in_silhouette: { - keywords: [ "user", "person", "human", "group", "team" ], - "char": "\ud83d\udc65", - fitzpatrick_scale: false, - category: "people" - }, - speaking_head: { - keywords: [ "user", "person", "human", "sing", "say", "talk" ], - "char": "\ud83d\udde3", - fitzpatrick_scale: false, - category: "people" - }, - baby: { - keywords: [ "child", "boy", "girl", "toddler" ], - "char": "\ud83d\udc76", - fitzpatrick_scale: true, - category: "people" - }, - child: { - keywords: [ "gender-neutral", "young" ], - "char": "\ud83e\uddd2", - fitzpatrick_scale: true, - category: "people" - }, - boy: { - keywords: [ "man", "male", "guy", "teenager" ], - "char": "\ud83d\udc66", - fitzpatrick_scale: true, - category: "people" - }, - girl: { - keywords: [ "female", "woman", "teenager" ], - "char": "\ud83d\udc67", - fitzpatrick_scale: true, - category: "people" - }, - adult: { - keywords: [ "gender-neutral", "person" ], - "char": "\ud83e\uddd1", - fitzpatrick_scale: true, - category: "people" - }, - man: { - keywords: [ "mustache", "father", "dad", "guy", "classy", "sir", "moustache" ], - "char": "\ud83d\udc68", - fitzpatrick_scale: true, - category: "people" - }, - woman: { - keywords: [ "female", "girls", "lady" ], - "char": "\ud83d\udc69", - fitzpatrick_scale: true, - category: "people" - }, - blonde_woman: { - keywords: [ "woman", "female", "girl", "blonde", "person" ], - "char": "\ud83d\udc71\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - blonde_man: { - keywords: [ "man", "male", "boy", "blonde", "guy", "person" ], - "char": "\ud83d\udc71", - fitzpatrick_scale: true, - category: "people" - }, - bearded_person: { - keywords: [ "person", "bewhiskered" ], - "char": "\ud83e\uddd4", - fitzpatrick_scale: true, - category: "people" - }, - older_adult: { - keywords: [ "human", "elder", "senior", "gender-neutral" ], - "char": "\ud83e\uddd3", - fitzpatrick_scale: true, - category: "people" - }, - older_man: { - keywords: [ "human", "male", "men", "old", "elder", "senior" ], - "char": "\ud83d\udc74", - fitzpatrick_scale: true, - category: "people" - }, - older_woman: { - keywords: [ "human", "female", "women", "lady", "old", "elder", "senior" ], - "char": "\ud83d\udc75", - fitzpatrick_scale: true, - category: "people" - }, - man_with_gua_pi_mao: { - keywords: [ "male", "boy", "chinese" ], - "char": "\ud83d\udc72", - fitzpatrick_scale: true, - category: "people" - }, - woman_with_headscarf: { - keywords: [ "female", "hijab", "mantilla", "tichel" ], - "char": "\ud83e\uddd5", - fitzpatrick_scale: true, - category: "people" - }, - woman_with_turban: { - keywords: [ "female", "indian", "hinduism", "arabs", "woman" ], - "char": "\ud83d\udc73\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - man_with_turban: { - keywords: [ "male", "indian", "hinduism", "arabs" ], - "char": "\ud83d\udc73", - fitzpatrick_scale: true, - category: "people" - }, - policewoman: { - keywords: [ "woman", "police", "law", "legal", "enforcement", "arrest", "911", "female" ], - "char": "\ud83d\udc6e\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - policeman: { - keywords: [ "man", "police", "law", "legal", "enforcement", "arrest", "911" ], - "char": "\ud83d\udc6e", - fitzpatrick_scale: true, - category: "people" - }, - construction_worker_woman: { - keywords: [ "female", "human", "wip", "build", "construction", "worker", "labor", "woman" ], - "char": "\ud83d\udc77\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - construction_worker_man: { - keywords: [ "male", "human", "wip", "guy", "build", "construction", "worker", "labor" ], - "char": "\ud83d\udc77", - fitzpatrick_scale: true, - category: "people" - }, - guardswoman: { - keywords: [ "uk", "gb", "british", "female", "royal", "woman" ], - "char": "\ud83d\udc82\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - guardsman: { - keywords: [ "uk", "gb", "british", "male", "guy", "royal" ], - "char": "\ud83d\udc82", - fitzpatrick_scale: true, - category: "people" - }, - female_detective: { - keywords: [ "human", "spy", "detective", "female", "woman" ], - "char": "\ud83d\udd75\ufe0f\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - male_detective: { - keywords: [ "human", "spy", "detective" ], - "char": "\ud83d\udd75", - fitzpatrick_scale: true, - category: "people" - }, - woman_health_worker: { - keywords: [ "doctor", "nurse", "therapist", "healthcare", "woman", "human" ], - "char": "\ud83d\udc69\u200d\u2695\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - man_health_worker: { - keywords: [ "doctor", "nurse", "therapist", "healthcare", "man", "human" ], - "char": "\ud83d\udc68\u200d\u2695\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - woman_farmer: { - keywords: [ "rancher", "gardener", "woman", "human" ], - "char": "\ud83d\udc69\u200d\ud83c\udf3e", - fitzpatrick_scale: true, - category: "people" - }, - man_farmer: { - keywords: [ "rancher", "gardener", "man", "human" ], - "char": "\ud83d\udc68\u200d\ud83c\udf3e", - fitzpatrick_scale: true, - category: "people" - }, - woman_cook: { - keywords: [ "chef", "woman", "human" ], - "char": "\ud83d\udc69\u200d\ud83c\udf73", - fitzpatrick_scale: true, - category: "people" - }, - man_cook: { - keywords: [ "chef", "man", "human" ], - "char": "\ud83d\udc68\u200d\ud83c\udf73", - fitzpatrick_scale: true, - category: "people" - }, - woman_student: { - keywords: [ "graduate", "woman", "human" ], - "char": "\ud83d\udc69\u200d\ud83c\udf93", - fitzpatrick_scale: true, - category: "people" - }, - man_student: { - keywords: [ "graduate", "man", "human" ], - "char": "\ud83d\udc68\u200d\ud83c\udf93", - fitzpatrick_scale: true, - category: "people" - }, - woman_singer: { - keywords: [ "rockstar", "entertainer", "woman", "human" ], - "char": "\ud83d\udc69\u200d\ud83c\udfa4", - fitzpatrick_scale: true, - category: "people" - }, - man_singer: { - keywords: [ "rockstar", "entertainer", "man", "human" ], - "char": "\ud83d\udc68\u200d\ud83c\udfa4", - fitzpatrick_scale: true, - category: "people" - }, - woman_teacher: { - keywords: [ "instructor", "professor", "woman", "human" ], - "char": "\ud83d\udc69\u200d\ud83c\udfeb", - fitzpatrick_scale: true, - category: "people" - }, - man_teacher: { - keywords: [ "instructor", "professor", "man", "human" ], - "char": "\ud83d\udc68\u200d\ud83c\udfeb", - fitzpatrick_scale: true, - category: "people" - }, - woman_factory_worker: { - keywords: [ "assembly", "industrial", "woman", "human" ], - "char": "\ud83d\udc69\u200d\ud83c\udfed", - fitzpatrick_scale: true, - category: "people" - }, - man_factory_worker: { - keywords: [ "assembly", "industrial", "man", "human" ], - "char": "\ud83d\udc68\u200d\ud83c\udfed", - fitzpatrick_scale: true, - category: "people" - }, - woman_technologist: { - keywords: [ "coder", "developer", "engineer", "programmer", "software", "woman", "human", "laptop", "computer" ], - "char": "\ud83d\udc69\u200d\ud83d\udcbb", - fitzpatrick_scale: true, - category: "people" - }, - man_technologist: { - keywords: [ "coder", "developer", "engineer", "programmer", "software", "man", "human", "laptop", "computer" ], - "char": "\ud83d\udc68\u200d\ud83d\udcbb", - fitzpatrick_scale: true, - category: "people" - }, - woman_office_worker: { - keywords: [ "business", "manager", "woman", "human" ], - "char": "\ud83d\udc69\u200d\ud83d\udcbc", - fitzpatrick_scale: true, - category: "people" - }, - man_office_worker: { - keywords: [ "business", "manager", "man", "human" ], - "char": "\ud83d\udc68\u200d\ud83d\udcbc", - fitzpatrick_scale: true, - category: "people" - }, - woman_mechanic: { - keywords: [ "plumber", "woman", "human", "wrench" ], - "char": "\ud83d\udc69\u200d\ud83d\udd27", - fitzpatrick_scale: true, - category: "people" - }, - man_mechanic: { - keywords: [ "plumber", "man", "human", "wrench" ], - "char": "\ud83d\udc68\u200d\ud83d\udd27", - fitzpatrick_scale: true, - category: "people" - }, - woman_scientist: { - keywords: [ "biologist", "chemist", "engineer", "physicist", "woman", "human" ], - "char": "\ud83d\udc69\u200d\ud83d\udd2c", - fitzpatrick_scale: true, - category: "people" - }, - man_scientist: { - keywords: [ "biologist", "chemist", "engineer", "physicist", "man", "human" ], - "char": "\ud83d\udc68\u200d\ud83d\udd2c", - fitzpatrick_scale: true, - category: "people" - }, - woman_artist: { - keywords: [ "painter", "woman", "human" ], - "char": "\ud83d\udc69\u200d\ud83c\udfa8", - fitzpatrick_scale: true, - category: "people" - }, - man_artist: { - keywords: [ "painter", "man", "human" ], - "char": "\ud83d\udc68\u200d\ud83c\udfa8", - fitzpatrick_scale: true, - category: "people" - }, - woman_firefighter: { - keywords: [ "fireman", "woman", "human" ], - "char": "\ud83d\udc69\u200d\ud83d\ude92", - fitzpatrick_scale: true, - category: "people" - }, - man_firefighter: { - keywords: [ "fireman", "man", "human" ], - "char": "\ud83d\udc68\u200d\ud83d\ude92", - fitzpatrick_scale: true, - category: "people" - }, - woman_pilot: { - keywords: [ "aviator", "plane", "woman", "human" ], - "char": "\ud83d\udc69\u200d\u2708\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - man_pilot: { - keywords: [ "aviator", "plane", "man", "human" ], - "char": "\ud83d\udc68\u200d\u2708\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - woman_astronaut: { - keywords: [ "space", "rocket", "woman", "human" ], - "char": "\ud83d\udc69\u200d\ud83d\ude80", - fitzpatrick_scale: true, - category: "people" - }, - man_astronaut: { - keywords: [ "space", "rocket", "man", "human" ], - "char": "\ud83d\udc68\u200d\ud83d\ude80", - fitzpatrick_scale: true, - category: "people" - }, - woman_judge: { - keywords: [ "justice", "court", "woman", "human" ], - "char": "\ud83d\udc69\u200d\u2696\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - man_judge: { - keywords: [ "justice", "court", "man", "human" ], - "char": "\ud83d\udc68\u200d\u2696\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - woman_superhero: { - keywords: [ "woman", "female", "good", "heroine", "superpowers" ], - "char": "\ud83e\uddb8\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - man_superhero: { - keywords: [ "man", "male", "good", "hero", "superpowers" ], - "char": "\ud83e\uddb8\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - woman_supervillain: { - keywords: [ "woman", "female", "evil", "bad", "criminal", "heroine", "superpowers" ], - "char": "\ud83e\uddb9\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - man_supervillain: { - keywords: [ "man", "male", "evil", "bad", "criminal", "hero", "superpowers" ], - "char": "\ud83e\uddb9\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - mrs_claus: { - keywords: [ "woman", "female", "xmas", "mother christmas" ], - "char": "\ud83e\udd36", - fitzpatrick_scale: true, - category: "people" - }, - santa: { - keywords: [ "festival", "man", "male", "xmas", "father christmas" ], - "char": "\ud83c\udf85", - fitzpatrick_scale: true, - category: "people" - }, - sorceress: { - keywords: [ "woman", "female", "mage", "witch" ], - "char": "\ud83e\uddd9\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - wizard: { - keywords: [ "man", "male", "mage", "sorcerer" ], - "char": "\ud83e\uddd9\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - woman_elf: { - keywords: [ "woman", "female" ], - "char": "\ud83e\udddd\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - man_elf: { - keywords: [ "man", "male" ], - "char": "\ud83e\udddd\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - woman_vampire: { - keywords: [ "woman", "female" ], - "char": "\ud83e\udddb\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - man_vampire: { - keywords: [ "man", "male", "dracula" ], - "char": "\ud83e\udddb\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - woman_zombie: { - keywords: [ "woman", "female", "undead", "walking dead" ], - "char": "\ud83e\udddf\u200d\u2640\ufe0f", - fitzpatrick_scale: false, - category: "people" - }, - man_zombie: { - keywords: [ "man", "male", "dracula", "undead", "walking dead" ], - "char": "\ud83e\udddf\u200d\u2642\ufe0f", - fitzpatrick_scale: false, - category: "people" - }, - woman_genie: { - keywords: [ "woman", "female" ], - "char": "\ud83e\uddde\u200d\u2640\ufe0f", - fitzpatrick_scale: false, - category: "people" - }, - man_genie: { - keywords: [ "man", "male" ], - "char": "\ud83e\uddde\u200d\u2642\ufe0f", - fitzpatrick_scale: false, - category: "people" - }, - mermaid: { - keywords: [ "woman", "female", "merwoman", "ariel" ], - "char": "\ud83e\udddc\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - merman: { - keywords: [ "man", "male", "triton" ], - "char": "\ud83e\udddc\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - woman_fairy: { - keywords: [ "woman", "female" ], - "char": "\ud83e\uddda\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - man_fairy: { - keywords: [ "man", "male" ], - "char": "\ud83e\uddda\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - angel: { - keywords: [ "heaven", "wings", "halo" ], - "char": "\ud83d\udc7c", - fitzpatrick_scale: true, - category: "people" - }, - pregnant_woman: { - keywords: [ "baby" ], - "char": "\ud83e\udd30", - fitzpatrick_scale: true, - category: "people" - }, - breastfeeding: { - keywords: [ "nursing", "baby" ], - "char": "\ud83e\udd31", - fitzpatrick_scale: true, - category: "people" - }, - princess: { - keywords: [ "girl", "woman", "female", "blond", "crown", "royal", "queen" ], - "char": "\ud83d\udc78", - fitzpatrick_scale: true, - category: "people" - }, - prince: { - keywords: [ "boy", "man", "male", "crown", "royal", "king" ], - "char": "\ud83e\udd34", - fitzpatrick_scale: true, - category: "people" - }, - bride_with_veil: { - keywords: [ "couple", "marriage", "wedding", "woman", "bride" ], - "char": "\ud83d\udc70", - fitzpatrick_scale: true, - category: "people" - }, - man_in_tuxedo: { - keywords: [ "couple", "marriage", "wedding", "groom" ], - "char": "\ud83e\udd35", - fitzpatrick_scale: true, - category: "people" - }, - running_woman: { - keywords: [ "woman", "walking", "exercise", "race", "running", "female" ], - "char": "\ud83c\udfc3\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - running_man: { - keywords: [ "man", "walking", "exercise", "race", "running" ], - "char": "\ud83c\udfc3", - fitzpatrick_scale: true, - category: "people" - }, - walking_woman: { - keywords: [ "human", "feet", "steps", "woman", "female" ], - "char": "\ud83d\udeb6\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - walking_man: { - keywords: [ "human", "feet", "steps" ], - "char": "\ud83d\udeb6", - fitzpatrick_scale: true, - category: "people" - }, - dancer: { - keywords: [ "female", "girl", "woman", "fun" ], - "char": "\ud83d\udc83", - fitzpatrick_scale: true, - category: "people" - }, - man_dancing: { - keywords: [ "male", "boy", "fun", "dancer" ], - "char": "\ud83d\udd7a", - fitzpatrick_scale: true, - category: "people" - }, - dancing_women: { - keywords: [ "female", "bunny", "women", "girls" ], - "char": "\ud83d\udc6f", - fitzpatrick_scale: false, - category: "people" - }, - dancing_men: { - keywords: [ "male", "bunny", "men", "boys" ], - "char": "\ud83d\udc6f\u200d\u2642\ufe0f", - fitzpatrick_scale: false, - category: "people" - }, - couple: { - keywords: [ "pair", "people", "human", "love", "date", "dating", "like", "affection", "valentines", "marriage" ], - "char": "\ud83d\udc6b", - fitzpatrick_scale: false, - category: "people" - }, - two_men_holding_hands: { - keywords: [ "pair", "couple", "love", "like", "bromance", "friendship", "people", "human" ], - "char": "\ud83d\udc6c", - fitzpatrick_scale: false, - category: "people" - }, - two_women_holding_hands: { - keywords: [ "pair", "friendship", "couple", "love", "like", "female", "people", "human" ], - "char": "\ud83d\udc6d", - fitzpatrick_scale: false, - category: "people" - }, - bowing_woman: { - keywords: [ "woman", "female", "girl" ], - "char": "\ud83d\ude47\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - bowing_man: { - keywords: [ "man", "male", "boy" ], - "char": "\ud83d\ude47", - fitzpatrick_scale: true, - category: "people" - }, - man_facepalming: { - keywords: [ "man", "male", "boy", "disbelief" ], - "char": "\ud83e\udd26\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - woman_facepalming: { - keywords: [ "woman", "female", "girl", "disbelief" ], - "char": "\ud83e\udd26\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - woman_shrugging: { - keywords: [ "woman", "female", "girl", "confused", "indifferent", "doubt" ], - "char": "\ud83e\udd37", - fitzpatrick_scale: true, - category: "people" - }, - man_shrugging: { - keywords: [ "man", "male", "boy", "confused", "indifferent", "doubt" ], - "char": "\ud83e\udd37\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - tipping_hand_woman: { - keywords: [ "female", "girl", "woman", "human", "information" ], - "char": "\ud83d\udc81", - fitzpatrick_scale: true, - category: "people" - }, - tipping_hand_man: { - keywords: [ "male", "boy", "man", "human", "information" ], - "char": "\ud83d\udc81\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - no_good_woman: { - keywords: [ "female", "girl", "woman", "nope" ], - "char": "\ud83d\ude45", - fitzpatrick_scale: true, - category: "people" - }, - no_good_man: { - keywords: [ "male", "boy", "man", "nope" ], - "char": "\ud83d\ude45\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - ok_woman: { - keywords: [ "women", "girl", "female", "pink", "human", "woman" ], - "char": "\ud83d\ude46", - fitzpatrick_scale: true, - category: "people" - }, - ok_man: { - keywords: [ "men", "boy", "male", "blue", "human", "man" ], - "char": "\ud83d\ude46\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - raising_hand_woman: { - keywords: [ "female", "girl", "woman" ], - "char": "\ud83d\ude4b", - fitzpatrick_scale: true, - category: "people" - }, - raising_hand_man: { - keywords: [ "male", "boy", "man" ], - "char": "\ud83d\ude4b\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - pouting_woman: { - keywords: [ "female", "girl", "woman" ], - "char": "\ud83d\ude4e", - fitzpatrick_scale: true, - category: "people" - }, - pouting_man: { - keywords: [ "male", "boy", "man" ], - "char": "\ud83d\ude4e\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - frowning_woman: { - keywords: [ "female", "girl", "woman", "sad", "depressed", "discouraged", "unhappy" ], - "char": "\ud83d\ude4d", - fitzpatrick_scale: true, - category: "people" - }, - frowning_man: { - keywords: [ "male", "boy", "man", "sad", "depressed", "discouraged", "unhappy" ], - "char": "\ud83d\ude4d\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - haircut_woman: { - keywords: [ "female", "girl", "woman" ], - "char": "\ud83d\udc87", - fitzpatrick_scale: true, - category: "people" - }, - haircut_man: { - keywords: [ "male", "boy", "man" ], - "char": "\ud83d\udc87\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - massage_woman: { - keywords: [ "female", "girl", "woman", "head" ], - "char": "\ud83d\udc86", - fitzpatrick_scale: true, - category: "people" - }, - massage_man: { - keywords: [ "male", "boy", "man", "head" ], - "char": "\ud83d\udc86\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - woman_in_steamy_room: { - keywords: [ "female", "woman", "spa", "steamroom", "sauna" ], - "char": "\ud83e\uddd6\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - man_in_steamy_room: { - keywords: [ "male", "man", "spa", "steamroom", "sauna" ], - "char": "\ud83e\uddd6\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "people" - }, - couple_with_heart_woman_man: { - keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ], - "char": "\ud83d\udc91", - fitzpatrick_scale: false, - category: "people" - }, - couple_with_heart_woman_woman: { - keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ], - "char": "\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69", - fitzpatrick_scale: false, - category: "people" - }, - couple_with_heart_man_man: { - keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ], - "char": "\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68", - fitzpatrick_scale: false, - category: "people" - }, - couplekiss_man_woman: { - keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ], - "char": "\ud83d\udc8f", - fitzpatrick_scale: false, - category: "people" - }, - couplekiss_woman_woman: { - keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ], - "char": "\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69", - fitzpatrick_scale: false, - category: "people" - }, - couplekiss_man_man: { - keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ], - "char": "\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68", - fitzpatrick_scale: false, - category: "people" - }, - family_man_woman_boy: { - keywords: [ "home", "parents", "child", "mom", "dad", "father", "mother", "people", "human" ], - "char": "\ud83d\udc6a", - fitzpatrick_scale: false, - category: "people" - }, - family_man_woman_girl: { - keywords: [ "home", "parents", "people", "human", "child" ], - "char": "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67", - fitzpatrick_scale: false, - category: "people" - }, - family_man_woman_girl_boy: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66", - fitzpatrick_scale: false, - category: "people" - }, - family_man_woman_boy_boy: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66", - fitzpatrick_scale: false, - category: "people" - }, - family_man_woman_girl_girl: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67", - fitzpatrick_scale: false, - category: "people" - }, - family_woman_woman_boy: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66", - fitzpatrick_scale: false, - category: "people" - }, - family_woman_woman_girl: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67", - fitzpatrick_scale: false, - category: "people" - }, - family_woman_woman_girl_boy: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66", - fitzpatrick_scale: false, - category: "people" - }, - family_woman_woman_boy_boy: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66", - fitzpatrick_scale: false, - category: "people" - }, - family_woman_woman_girl_girl: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67", - fitzpatrick_scale: false, - category: "people" - }, - family_man_man_boy: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66", - fitzpatrick_scale: false, - category: "people" - }, - family_man_man_girl: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67", - fitzpatrick_scale: false, - category: "people" - }, - family_man_man_girl_boy: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66", - fitzpatrick_scale: false, - category: "people" - }, - family_man_man_boy_boy: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66", - fitzpatrick_scale: false, - category: "people" - }, - family_man_man_girl_girl: { - keywords: [ "home", "parents", "people", "human", "children" ], - "char": "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67", - fitzpatrick_scale: false, - category: "people" - }, - family_woman_boy: { - keywords: [ "home", "parent", "people", "human", "child" ], - "char": "\ud83d\udc69\u200d\ud83d\udc66", - fitzpatrick_scale: false, - category: "people" - }, - family_woman_girl: { - keywords: [ "home", "parent", "people", "human", "child" ], - "char": "\ud83d\udc69\u200d\ud83d\udc67", - fitzpatrick_scale: false, - category: "people" - }, - family_woman_girl_boy: { - keywords: [ "home", "parent", "people", "human", "children" ], - "char": "\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66", - fitzpatrick_scale: false, - category: "people" - }, - family_woman_boy_boy: { - keywords: [ "home", "parent", "people", "human", "children" ], - "char": "\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66", - fitzpatrick_scale: false, - category: "people" - }, - family_woman_girl_girl: { - keywords: [ "home", "parent", "people", "human", "children" ], - "char": "\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67", - fitzpatrick_scale: false, - category: "people" - }, - family_man_boy: { - keywords: [ "home", "parent", "people", "human", "child" ], - "char": "\ud83d\udc68\u200d\ud83d\udc66", - fitzpatrick_scale: false, - category: "people" - }, - family_man_girl: { - keywords: [ "home", "parent", "people", "human", "child" ], - "char": "\ud83d\udc68\u200d\ud83d\udc67", - fitzpatrick_scale: false, - category: "people" - }, - family_man_girl_boy: { - keywords: [ "home", "parent", "people", "human", "children" ], - "char": "\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66", - fitzpatrick_scale: false, - category: "people" - }, - family_man_boy_boy: { - keywords: [ "home", "parent", "people", "human", "children" ], - "char": "\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66", - fitzpatrick_scale: false, - category: "people" - }, - family_man_girl_girl: { - keywords: [ "home", "parent", "people", "human", "children" ], - "char": "\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67", - fitzpatrick_scale: false, - category: "people" - }, - yarn: { - keywords: [ "ball", "crochet", "knit" ], - "char": "\ud83e\uddf6", - fitzpatrick_scale: false, - category: "people" - }, - thread: { - keywords: [ "needle", "sewing", "spool", "string" ], - "char": "\ud83e\uddf5", - fitzpatrick_scale: false, - category: "people" - }, - coat: { - keywords: [ "jacket" ], - "char": "\ud83e\udde5", - fitzpatrick_scale: false, - category: "people" - }, - labcoat: { - keywords: [ "doctor", "experiment", "scientist", "chemist" ], - "char": "\ud83e\udd7c", - fitzpatrick_scale: false, - category: "people" - }, - womans_clothes: { - keywords: [ "fashion", "shopping_bags", "female" ], - "char": "\ud83d\udc5a", - fitzpatrick_scale: false, - category: "people" - }, - tshirt: { - keywords: [ "fashion", "cloth", "casual", "shirt", "tee" ], - "char": "\ud83d\udc55", - fitzpatrick_scale: false, - category: "people" - }, - jeans: { - keywords: [ "fashion", "shopping" ], - "char": "\ud83d\udc56", - fitzpatrick_scale: false, - category: "people" - }, - necktie: { - keywords: [ "shirt", "suitup", "formal", "fashion", "cloth", "business" ], - "char": "\ud83d\udc54", - fitzpatrick_scale: false, - category: "people" - }, - dress: { - keywords: [ "clothes", "fashion", "shopping" ], - "char": "\ud83d\udc57", - fitzpatrick_scale: false, - category: "people" - }, - bikini: { - keywords: [ "swimming", "female", "woman", "girl", "fashion", "beach", "summer" ], - "char": "\ud83d\udc59", - fitzpatrick_scale: false, - category: "people" - }, - kimono: { - keywords: [ "dress", "fashion", "women", "female", "japanese" ], - "char": "\ud83d\udc58", - fitzpatrick_scale: false, - category: "people" - }, - lipstick: { - keywords: [ "female", "girl", "fashion", "woman" ], - "char": "\ud83d\udc84", - fitzpatrick_scale: false, - category: "people" - }, - kiss: { - keywords: [ "face", "lips", "love", "like", "affection", "valentines" ], - "char": "\ud83d\udc8b", - fitzpatrick_scale: false, - category: "people" - }, - footprints: { - keywords: [ "feet", "tracking", "walking", "beach" ], - "char": "\ud83d\udc63", - fitzpatrick_scale: false, - category: "people" - }, - flat_shoe: { - keywords: [ "ballet", "slip-on", "slipper" ], - "char": "\ud83e\udd7f", - fitzpatrick_scale: false, - category: "people" - }, - high_heel: { - keywords: [ "fashion", "shoes", "female", "pumps", "stiletto" ], - "char": "\ud83d\udc60", - fitzpatrick_scale: false, - category: "people" - }, - sandal: { - keywords: [ "shoes", "fashion", "flip flops" ], - "char": "\ud83d\udc61", - fitzpatrick_scale: false, - category: "people" - }, - boot: { - keywords: [ "shoes", "fashion" ], - "char": "\ud83d\udc62", - fitzpatrick_scale: false, - category: "people" - }, - mans_shoe: { - keywords: [ "fashion", "male" ], - "char": "\ud83d\udc5e", - fitzpatrick_scale: false, - category: "people" - }, - athletic_shoe: { - keywords: [ "shoes", "sports", "sneakers" ], - "char": "\ud83d\udc5f", - fitzpatrick_scale: false, - category: "people" - }, - hiking_boot: { - keywords: [ "backpacking", "camping", "hiking" ], - "char": "\ud83e\udd7e", - fitzpatrick_scale: false, - category: "people" - }, - socks: { - keywords: [ "stockings", "clothes" ], - "char": "\ud83e\udde6", - fitzpatrick_scale: false, - category: "people" - }, - gloves: { - keywords: [ "hands", "winter", "clothes" ], - "char": "\ud83e\udde4", - fitzpatrick_scale: false, - category: "people" - }, - scarf: { - keywords: [ "neck", "winter", "clothes" ], - "char": "\ud83e\udde3", - fitzpatrick_scale: false, - category: "people" - }, - womans_hat: { - keywords: [ "fashion", "accessories", "female", "lady", "spring" ], - "char": "\ud83d\udc52", - fitzpatrick_scale: false, - category: "people" - }, - tophat: { - keywords: [ "magic", "gentleman", "classy", "circus" ], - "char": "\ud83c\udfa9", - fitzpatrick_scale: false, - category: "people" - }, - billed_hat: { - keywords: [ "cap", "baseball" ], - "char": "\ud83e\udde2", - fitzpatrick_scale: false, - category: "people" - }, - rescue_worker_helmet: { - keywords: [ "construction", "build" ], - "char": "\u26d1", - fitzpatrick_scale: false, - category: "people" - }, - mortar_board: { - keywords: [ "school", "college", "degree", "university", "graduation", "cap", "hat", "legal", "learn", "education" ], - "char": "\ud83c\udf93", - fitzpatrick_scale: false, - category: "people" - }, - crown: { - keywords: [ "king", "kod", "leader", "royalty", "lord" ], - "char": "\ud83d\udc51", - fitzpatrick_scale: false, - category: "people" - }, - school_satchel: { - keywords: [ "student", "education", "bag", "backpack" ], - "char": "\ud83c\udf92", - fitzpatrick_scale: false, - category: "people" - }, - luggage: { - keywords: [ "packing", "travel" ], - "char": "\ud83e\uddf3", - fitzpatrick_scale: false, - category: "people" - }, - pouch: { - keywords: [ "bag", "accessories", "shopping" ], - "char": "\ud83d\udc5d", - fitzpatrick_scale: false, - category: "people" - }, - purse: { - keywords: [ "fashion", "accessories", "money", "sales", "shopping" ], - "char": "\ud83d\udc5b", - fitzpatrick_scale: false, - category: "people" - }, - handbag: { - keywords: [ "fashion", "accessory", "accessories", "shopping" ], - "char": "\ud83d\udc5c", - fitzpatrick_scale: false, - category: "people" - }, - briefcase: { - keywords: [ "business", "documents", "work", "law", "legal", "job", "career" ], - "char": "\ud83d\udcbc", - fitzpatrick_scale: false, - category: "people" - }, - eyeglasses: { - keywords: [ "fashion", "accessories", "eyesight", "nerdy", "dork", "geek" ], - "char": "\ud83d\udc53", - fitzpatrick_scale: false, - category: "people" - }, - dark_sunglasses: { - keywords: [ "face", "cool", "accessories" ], - "char": "\ud83d\udd76", - fitzpatrick_scale: false, - category: "people" - }, - goggles: { - keywords: [ "eyes", "protection", "safety" ], - "char": "\ud83e\udd7d", - fitzpatrick_scale: false, - category: "people" - }, - ring: { - keywords: [ "wedding", "propose", "marriage", "valentines", "diamond", "fashion", "jewelry", "gem", "engagement" ], - "char": "\ud83d\udc8d", - fitzpatrick_scale: false, - category: "people" - }, - closed_umbrella: { - keywords: [ "weather", "rain", "drizzle" ], - "char": "\ud83c\udf02", - fitzpatrick_scale: false, - category: "people" - }, - dog: { - keywords: [ "animal", "friend", "nature", "woof", "puppy", "pet", "faithful" ], - "char": "\ud83d\udc36", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cat: { - keywords: [ "animal", "meow", "nature", "pet", "kitten" ], - "char": "\ud83d\udc31", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - mouse: { - keywords: [ "animal", "nature", "cheese_wedge", "rodent" ], - "char": "\ud83d\udc2d", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - hamster: { - keywords: [ "animal", "nature" ], - "char": "\ud83d\udc39", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - rabbit: { - keywords: [ "animal", "nature", "pet", "spring", "magic", "bunny" ], - "char": "\ud83d\udc30", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - fox_face: { - keywords: [ "animal", "nature", "face" ], - "char": "\ud83e\udd8a", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - bear: { - keywords: [ "animal", "nature", "wild" ], - "char": "\ud83d\udc3b", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - panda_face: { - keywords: [ "animal", "nature", "panda" ], - "char": "\ud83d\udc3c", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - koala: { - keywords: [ "animal", "nature" ], - "char": "\ud83d\udc28", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - tiger: { - keywords: [ "animal", "cat", "danger", "wild", "nature", "roar" ], - "char": "\ud83d\udc2f", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - lion: { - keywords: [ "animal", "nature" ], - "char": "\ud83e\udd81", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cow: { - keywords: [ "beef", "ox", "animal", "nature", "moo", "milk" ], - "char": "\ud83d\udc2e", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - pig: { - keywords: [ "animal", "oink", "nature" ], - "char": "\ud83d\udc37", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - pig_nose: { - keywords: [ "animal", "oink" ], - "char": "\ud83d\udc3d", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - frog: { - keywords: [ "animal", "nature", "croak", "toad" ], - "char": "\ud83d\udc38", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - squid: { - keywords: [ "animal", "nature", "ocean", "sea" ], - "char": "\ud83e\udd91", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - octopus: { - keywords: [ "animal", "creature", "ocean", "sea", "nature", "beach" ], - "char": "\ud83d\udc19", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - shrimp: { - keywords: [ "animal", "ocean", "nature", "seafood" ], - "char": "\ud83e\udd90", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - monkey_face: { - keywords: [ "animal", "nature", "circus" ], - "char": "\ud83d\udc35", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - gorilla: { - keywords: [ "animal", "nature", "circus" ], - "char": "\ud83e\udd8d", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - see_no_evil: { - keywords: [ "monkey", "animal", "nature", "haha" ], - "char": "\ud83d\ude48", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - hear_no_evil: { - keywords: [ "animal", "monkey", "nature" ], - "char": "\ud83d\ude49", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - speak_no_evil: { - keywords: [ "monkey", "animal", "nature", "omg" ], - "char": "\ud83d\ude4a", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - monkey: { - keywords: [ "animal", "nature", "banana", "circus" ], - "char": "\ud83d\udc12", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - chicken: { - keywords: [ "animal", "cluck", "nature", "bird" ], - "char": "\ud83d\udc14", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - penguin: { - keywords: [ "animal", "nature" ], - "char": "\ud83d\udc27", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - bird: { - keywords: [ "animal", "nature", "fly", "tweet", "spring" ], - "char": "\ud83d\udc26", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - baby_chick: { - keywords: [ "animal", "chicken", "bird" ], - "char": "\ud83d\udc24", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - hatching_chick: { - keywords: [ "animal", "chicken", "egg", "born", "baby", "bird" ], - "char": "\ud83d\udc23", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - hatched_chick: { - keywords: [ "animal", "chicken", "baby", "bird" ], - "char": "\ud83d\udc25", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - duck: { - keywords: [ "animal", "nature", "bird", "mallard" ], - "char": "\ud83e\udd86", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - eagle: { - keywords: [ "animal", "nature", "bird" ], - "char": "\ud83e\udd85", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - owl: { - keywords: [ "animal", "nature", "bird", "hoot" ], - "char": "\ud83e\udd89", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - bat: { - keywords: [ "animal", "nature", "blind", "vampire" ], - "char": "\ud83e\udd87", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - wolf: { - keywords: [ "animal", "nature", "wild" ], - "char": "\ud83d\udc3a", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - boar: { - keywords: [ "animal", "nature" ], - "char": "\ud83d\udc17", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - horse: { - keywords: [ "animal", "brown", "nature" ], - "char": "\ud83d\udc34", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - unicorn: { - keywords: [ "animal", "nature", "mystical" ], - "char": "\ud83e\udd84", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - honeybee: { - keywords: [ "animal", "insect", "nature", "bug", "spring", "honey" ], - "char": "\ud83d\udc1d", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - bug: { - keywords: [ "animal", "insect", "nature", "worm" ], - "char": "\ud83d\udc1b", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - butterfly: { - keywords: [ "animal", "insect", "nature", "caterpillar" ], - "char": "\ud83e\udd8b", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - snail: { - keywords: [ "slow", "animal", "shell" ], - "char": "\ud83d\udc0c", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - beetle: { - keywords: [ "animal", "insect", "nature", "ladybug" ], - "char": "\ud83d\udc1e", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - ant: { - keywords: [ "animal", "insect", "nature", "bug" ], - "char": "\ud83d\udc1c", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - grasshopper: { - keywords: [ "animal", "cricket", "chirp" ], - "char": "\ud83e\udd97", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - spider: { - keywords: [ "animal", "arachnid" ], - "char": "\ud83d\udd77", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - scorpion: { - keywords: [ "animal", "arachnid" ], - "char": "\ud83e\udd82", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - crab: { - keywords: [ "animal", "crustacean" ], - "char": "\ud83e\udd80", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - snake: { - keywords: [ "animal", "evil", "nature", "hiss", "python" ], - "char": "\ud83d\udc0d", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - lizard: { - keywords: [ "animal", "nature", "reptile" ], - "char": "\ud83e\udd8e", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - "t-rex": { - keywords: [ "animal", "nature", "dinosaur", "tyrannosaurus", "extinct" ], - "char": "\ud83e\udd96", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sauropod: { - keywords: [ "animal", "nature", "dinosaur", "brachiosaurus", "brontosaurus", "diplodocus", "extinct" ], - "char": "\ud83e\udd95", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - turtle: { - keywords: [ "animal", "slow", "nature", "tortoise" ], - "char": "\ud83d\udc22", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - tropical_fish: { - keywords: [ "animal", "swim", "ocean", "beach", "nemo" ], - "char": "\ud83d\udc20", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - fish: { - keywords: [ "animal", "food", "nature" ], - "char": "\ud83d\udc1f", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - blowfish: { - keywords: [ "animal", "nature", "food", "sea", "ocean" ], - "char": "\ud83d\udc21", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - dolphin: { - keywords: [ "animal", "nature", "fish", "sea", "ocean", "flipper", "fins", "beach" ], - "char": "\ud83d\udc2c", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - shark: { - keywords: [ "animal", "nature", "fish", "sea", "ocean", "jaws", "fins", "beach" ], - "char": "\ud83e\udd88", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - whale: { - keywords: [ "animal", "nature", "sea", "ocean" ], - "char": "\ud83d\udc33", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - whale2: { - keywords: [ "animal", "nature", "sea", "ocean" ], - "char": "\ud83d\udc0b", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - crocodile: { - keywords: [ "animal", "nature", "reptile", "lizard", "alligator" ], - "char": "\ud83d\udc0a", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - leopard: { - keywords: [ "animal", "nature" ], - "char": "\ud83d\udc06", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - zebra: { - keywords: [ "animal", "nature", "stripes", "safari" ], - "char": "\ud83e\udd93", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - tiger2: { - keywords: [ "animal", "nature", "roar" ], - "char": "\ud83d\udc05", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - water_buffalo: { - keywords: [ "animal", "nature", "ox", "cow" ], - "char": "\ud83d\udc03", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - ox: { - keywords: [ "animal", "cow", "beef" ], - "char": "\ud83d\udc02", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cow2: { - keywords: [ "beef", "ox", "animal", "nature", "moo", "milk" ], - "char": "\ud83d\udc04", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - deer: { - keywords: [ "animal", "nature", "horns", "venison" ], - "char": "\ud83e\udd8c", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - dromedary_camel: { - keywords: [ "animal", "hot", "desert", "hump" ], - "char": "\ud83d\udc2a", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - camel: { - keywords: [ "animal", "nature", "hot", "desert", "hump" ], - "char": "\ud83d\udc2b", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - giraffe: { - keywords: [ "animal", "nature", "spots", "safari" ], - "char": "\ud83e\udd92", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - elephant: { - keywords: [ "animal", "nature", "nose", "th", "circus" ], - "char": "\ud83d\udc18", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - rhinoceros: { - keywords: [ "animal", "nature", "horn" ], - "char": "\ud83e\udd8f", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - goat: { - keywords: [ "animal", "nature" ], - "char": "\ud83d\udc10", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - ram: { - keywords: [ "animal", "sheep", "nature" ], - "char": "\ud83d\udc0f", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sheep: { - keywords: [ "animal", "nature", "wool", "shipit" ], - "char": "\ud83d\udc11", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - racehorse: { - keywords: [ "animal", "gamble", "luck" ], - "char": "\ud83d\udc0e", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - pig2: { - keywords: [ "animal", "nature" ], - "char": "\ud83d\udc16", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - rat: { - keywords: [ "animal", "mouse", "rodent" ], - "char": "\ud83d\udc00", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - mouse2: { - keywords: [ "animal", "nature", "rodent" ], - "char": "\ud83d\udc01", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - rooster: { - keywords: [ "animal", "nature", "chicken" ], - "char": "\ud83d\udc13", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - turkey: { - keywords: [ "animal", "bird" ], - "char": "\ud83e\udd83", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - dove: { - keywords: [ "animal", "bird" ], - "char": "\ud83d\udd4a", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - dog2: { - keywords: [ "animal", "nature", "friend", "doge", "pet", "faithful" ], - "char": "\ud83d\udc15", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - poodle: { - keywords: [ "dog", "animal", "101", "nature", "pet" ], - "char": "\ud83d\udc29", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cat2: { - keywords: [ "animal", "meow", "pet", "cats" ], - "char": "\ud83d\udc08", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - rabbit2: { - keywords: [ "animal", "nature", "pet", "magic", "spring" ], - "char": "\ud83d\udc07", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - chipmunk: { - keywords: [ "animal", "nature", "rodent", "squirrel" ], - "char": "\ud83d\udc3f", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - hedgehog: { - keywords: [ "animal", "nature", "spiny" ], - "char": "\ud83e\udd94", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - raccoon: { - keywords: [ "animal", "nature" ], - "char": "\ud83e\udd9d", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - llama: { - keywords: [ "animal", "nature", "alpaca" ], - "char": "\ud83e\udd99", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - hippopotamus: { - keywords: [ "animal", "nature" ], - "char": "\ud83e\udd9b", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - kangaroo: { - keywords: [ "animal", "nature", "australia", "joey", "hop", "marsupial" ], - "char": "\ud83e\udd98", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - badger: { - keywords: [ "animal", "nature", "honey" ], - "char": "\ud83e\udda1", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - swan: { - keywords: [ "animal", "nature", "bird" ], - "char": "\ud83e\udda2", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - peacock: { - keywords: [ "animal", "nature", "peahen", "bird" ], - "char": "\ud83e\udd9a", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - parrot: { - keywords: [ "animal", "nature", "bird", "pirate", "talk" ], - "char": "\ud83e\udd9c", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - lobster: { - keywords: [ "animal", "nature", "bisque", "claws", "seafood" ], - "char": "\ud83e\udd9e", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - mosquito: { - keywords: [ "animal", "nature", "insect", "malaria" ], - "char": "\ud83e\udd9f", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - paw_prints: { - keywords: [ "animal", "tracking", "footprints", "dog", "cat", "pet", "feet" ], - "char": "\ud83d\udc3e", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - dragon: { - keywords: [ "animal", "myth", "nature", "chinese", "green" ], - "char": "\ud83d\udc09", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - dragon_face: { - keywords: [ "animal", "myth", "nature", "chinese", "green" ], - "char": "\ud83d\udc32", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cactus: { - keywords: [ "vegetable", "plant", "nature" ], - "char": "\ud83c\udf35", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - christmas_tree: { - keywords: [ "festival", "vacation", "december", "xmas", "celebration" ], - "char": "\ud83c\udf84", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - evergreen_tree: { - keywords: [ "plant", "nature" ], - "char": "\ud83c\udf32", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - deciduous_tree: { - keywords: [ "plant", "nature" ], - "char": "\ud83c\udf33", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - palm_tree: { - keywords: [ "plant", "vegetable", "nature", "summer", "beach", "mojito", "tropical" ], - "char": "\ud83c\udf34", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - seedling: { - keywords: [ "plant", "nature", "grass", "lawn", "spring" ], - "char": "\ud83c\udf31", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - herb: { - keywords: [ "vegetable", "plant", "medicine", "weed", "grass", "lawn" ], - "char": "\ud83c\udf3f", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - shamrock: { - keywords: [ "vegetable", "plant", "nature", "irish", "clover" ], - "char": "\u2618", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - four_leaf_clover: { - keywords: [ "vegetable", "plant", "nature", "lucky", "irish" ], - "char": "\ud83c\udf40", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - bamboo: { - keywords: [ "plant", "nature", "vegetable", "panda", "pine_decoration" ], - "char": "\ud83c\udf8d", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - tanabata_tree: { - keywords: [ "plant", "nature", "branch", "summer" ], - "char": "\ud83c\udf8b", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - leaves: { - keywords: [ "nature", "plant", "tree", "vegetable", "grass", "lawn", "spring" ], - "char": "\ud83c\udf43", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - fallen_leaf: { - keywords: [ "nature", "plant", "vegetable", "leaves" ], - "char": "\ud83c\udf42", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - maple_leaf: { - keywords: [ "nature", "plant", "vegetable", "ca", "fall" ], - "char": "\ud83c\udf41", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - ear_of_rice: { - keywords: [ "nature", "plant" ], - "char": "\ud83c\udf3e", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - hibiscus: { - keywords: [ "plant", "vegetable", "flowers", "beach" ], - "char": "\ud83c\udf3a", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sunflower: { - keywords: [ "nature", "plant", "fall" ], - "char": "\ud83c\udf3b", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - rose: { - keywords: [ "flowers", "valentines", "love", "spring" ], - "char": "\ud83c\udf39", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - wilted_flower: { - keywords: [ "plant", "nature", "flower" ], - "char": "\ud83e\udd40", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - tulip: { - keywords: [ "flowers", "plant", "nature", "summer", "spring" ], - "char": "\ud83c\udf37", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - blossom: { - keywords: [ "nature", "flowers", "yellow" ], - "char": "\ud83c\udf3c", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cherry_blossom: { - keywords: [ "nature", "plant", "spring", "flower" ], - "char": "\ud83c\udf38", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - bouquet: { - keywords: [ "flowers", "nature", "spring" ], - "char": "\ud83d\udc90", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - mushroom: { - keywords: [ "plant", "vegetable" ], - "char": "\ud83c\udf44", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - chestnut: { - keywords: [ "food", "squirrel" ], - "char": "\ud83c\udf30", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - jack_o_lantern: { - keywords: [ "halloween", "light", "pumpkin", "creepy", "fall" ], - "char": "\ud83c\udf83", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - shell: { - keywords: [ "nature", "sea", "beach" ], - "char": "\ud83d\udc1a", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - spider_web: { - keywords: [ "animal", "insect", "arachnid", "silk" ], - "char": "\ud83d\udd78", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - earth_americas: { - keywords: [ "globe", "world", "USA", "international" ], - "char": "\ud83c\udf0e", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - earth_africa: { - keywords: [ "globe", "world", "international" ], - "char": "\ud83c\udf0d", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - earth_asia: { - keywords: [ "globe", "world", "east", "international" ], - "char": "\ud83c\udf0f", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - full_moon: { - keywords: [ "nature", "yellow", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": "\ud83c\udf15", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - waning_gibbous_moon: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep", "waxing_gibbous_moon" ], - "char": "\ud83c\udf16", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - last_quarter_moon: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": "\ud83c\udf17", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - waning_crescent_moon: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": "\ud83c\udf18", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - new_moon: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": "\ud83c\udf11", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - waxing_crescent_moon: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": "\ud83c\udf12", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - first_quarter_moon: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": "\ud83c\udf13", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - waxing_gibbous_moon: { - keywords: [ "nature", "night", "sky", "gray", "twilight", "planet", "space", "evening", "sleep" ], - "char": "\ud83c\udf14", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - new_moon_with_face: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": "\ud83c\udf1a", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - full_moon_with_face: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": "\ud83c\udf1d", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - first_quarter_moon_with_face: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": "\ud83c\udf1b", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - last_quarter_moon_with_face: { - keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], - "char": "\ud83c\udf1c", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sun_with_face: { - keywords: [ "nature", "morning", "sky" ], - "char": "\ud83c\udf1e", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - crescent_moon: { - keywords: [ "night", "sleep", "sky", "evening", "magic" ], - "char": "\ud83c\udf19", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - star: { - keywords: [ "night", "yellow" ], - "char": "\u2b50", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - star2: { - keywords: [ "night", "sparkle", "awesome", "good", "magic" ], - "char": "\ud83c\udf1f", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - dizzy: { - keywords: [ "star", "sparkle", "shoot", "magic" ], - "char": "\ud83d\udcab", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sparkles: { - keywords: [ "stars", "shine", "shiny", "cool", "awesome", "good", "magic" ], - "char": "\u2728", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - comet: { - keywords: [ "space" ], - "char": "\u2604", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sunny: { - keywords: [ "weather", "nature", "brightness", "summer", "beach", "spring" ], - "char": "\u2600\ufe0f", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sun_behind_small_cloud: { - keywords: [ "weather" ], - "char": "\ud83c\udf24", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - partly_sunny: { - keywords: [ "weather", "nature", "cloudy", "morning", "fall", "spring" ], - "char": "\u26c5", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sun_behind_large_cloud: { - keywords: [ "weather" ], - "char": "\ud83c\udf25", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sun_behind_rain_cloud: { - keywords: [ "weather" ], - "char": "\ud83c\udf26", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cloud: { - keywords: [ "weather", "sky" ], - "char": "\u2601\ufe0f", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cloud_with_rain: { - keywords: [ "weather" ], - "char": "\ud83c\udf27", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cloud_with_lightning_and_rain: { - keywords: [ "weather", "lightning" ], - "char": "\u26c8", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cloud_with_lightning: { - keywords: [ "weather", "thunder" ], - "char": "\ud83c\udf29", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - zap: { - keywords: [ "thunder", "weather", "lightning bolt", "fast" ], - "char": "\u26a1", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - fire: { - keywords: [ "hot", "cook", "flame" ], - "char": "\ud83d\udd25", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - boom: { - keywords: [ "bomb", "explode", "explosion", "collision", "blown" ], - "char": "\ud83d\udca5", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - snowflake: { - keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas" ], - "char": "\u2744\ufe0f", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - cloud_with_snow: { - keywords: [ "weather" ], - "char": "\ud83c\udf28", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - snowman: { - keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas", "frozen", "without_snow" ], - "char": "\u26c4", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - snowman_with_snow: { - keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas", "frozen" ], - "char": "\u2603", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - wind_face: { - keywords: [ "gust", "air" ], - "char": "\ud83c\udf2c", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - dash: { - keywords: [ "wind", "air", "fast", "shoo", "fart", "smoke", "puff" ], - "char": "\ud83d\udca8", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - tornado: { - keywords: [ "weather", "cyclone", "twister" ], - "char": "\ud83c\udf2a", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - fog: { - keywords: [ "weather" ], - "char": "\ud83c\udf2b", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - open_umbrella: { - keywords: [ "weather", "spring" ], - "char": "\u2602", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - umbrella: { - keywords: [ "rainy", "weather", "spring" ], - "char": "\u2614", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - droplet: { - keywords: [ "water", "drip", "faucet", "spring" ], - "char": "\ud83d\udca7", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - sweat_drops: { - keywords: [ "water", "drip", "oops" ], - "char": "\ud83d\udca6", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - ocean: { - keywords: [ "sea", "water", "wave", "nature", "tsunami", "disaster" ], - "char": "\ud83c\udf0a", - fitzpatrick_scale: false, - category: "animals_and_nature" - }, - green_apple: { - keywords: [ "fruit", "nature" ], - "char": "\ud83c\udf4f", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - apple: { - keywords: [ "fruit", "mac", "school" ], - "char": "\ud83c\udf4e", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - pear: { - keywords: [ "fruit", "nature", "food" ], - "char": "\ud83c\udf50", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - tangerine: { - keywords: [ "food", "fruit", "nature", "orange" ], - "char": "\ud83c\udf4a", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - lemon: { - keywords: [ "fruit", "nature" ], - "char": "\ud83c\udf4b", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - banana: { - keywords: [ "fruit", "food", "monkey" ], - "char": "\ud83c\udf4c", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - watermelon: { - keywords: [ "fruit", "food", "picnic", "summer" ], - "char": "\ud83c\udf49", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - grapes: { - keywords: [ "fruit", "food", "wine" ], - "char": "\ud83c\udf47", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - strawberry: { - keywords: [ "fruit", "food", "nature" ], - "char": "\ud83c\udf53", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - melon: { - keywords: [ "fruit", "nature", "food" ], - "char": "\ud83c\udf48", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - cherries: { - keywords: [ "food", "fruit" ], - "char": "\ud83c\udf52", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - peach: { - keywords: [ "fruit", "nature", "food" ], - "char": "\ud83c\udf51", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - pineapple: { - keywords: [ "fruit", "nature", "food" ], - "char": "\ud83c\udf4d", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - coconut: { - keywords: [ "fruit", "nature", "food", "palm" ], - "char": "\ud83e\udd65", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - kiwi_fruit: { - keywords: [ "fruit", "food" ], - "char": "\ud83e\udd5d", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - mango: { - keywords: [ "fruit", "food", "tropical" ], - "char": "\ud83e\udd6d", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - avocado: { - keywords: [ "fruit", "food" ], - "char": "\ud83e\udd51", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - broccoli: { - keywords: [ "fruit", "food", "vegetable" ], - "char": "\ud83e\udd66", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - tomato: { - keywords: [ "fruit", "vegetable", "nature", "food" ], - "char": "\ud83c\udf45", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - eggplant: { - keywords: [ "vegetable", "nature", "food", "aubergine" ], - "char": "\ud83c\udf46", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - cucumber: { - keywords: [ "fruit", "food", "pickle" ], - "char": "\ud83e\udd52", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - carrot: { - keywords: [ "vegetable", "food", "orange" ], - "char": "\ud83e\udd55", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - hot_pepper: { - keywords: [ "food", "spicy", "chilli", "chili" ], - "char": "\ud83c\udf36", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - potato: { - keywords: [ "food", "tuber", "vegatable", "starch" ], - "char": "\ud83e\udd54", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - corn: { - keywords: [ "food", "vegetable", "plant" ], - "char": "\ud83c\udf3d", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - leafy_greens: { - keywords: [ "food", "vegetable", "plant", "bok choy", "cabbage", "kale", "lettuce" ], - "char": "\ud83e\udd6c", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - sweet_potato: { - keywords: [ "food", "nature" ], - "char": "\ud83c\udf60", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - peanuts: { - keywords: [ "food", "nut" ], - "char": "\ud83e\udd5c", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - honey_pot: { - keywords: [ "bees", "sweet", "kitchen" ], - "char": "\ud83c\udf6f", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - croissant: { - keywords: [ "food", "bread", "french" ], - "char": "\ud83e\udd50", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - bread: { - keywords: [ "food", "wheat", "breakfast", "toast" ], - "char": "\ud83c\udf5e", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - baguette_bread: { - keywords: [ "food", "bread", "french" ], - "char": "\ud83e\udd56", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - bagel: { - keywords: [ "food", "bread", "bakery", "schmear" ], - "char": "\ud83e\udd6f", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - pretzel: { - keywords: [ "food", "bread", "twisted" ], - "char": "\ud83e\udd68", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - cheese: { - keywords: [ "food", "chadder" ], - "char": "\ud83e\uddc0", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - egg: { - keywords: [ "food", "chicken", "breakfast" ], - "char": "\ud83e\udd5a", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - bacon: { - keywords: [ "food", "breakfast", "pork", "pig", "meat" ], - "char": "\ud83e\udd53", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - steak: { - keywords: [ "food", "cow", "meat", "cut", "chop", "lambchop", "porkchop" ], - "char": "\ud83e\udd69", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - pancakes: { - keywords: [ "food", "breakfast", "flapjacks", "hotcakes" ], - "char": "\ud83e\udd5e", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - poultry_leg: { - keywords: [ "food", "meat", "drumstick", "bird", "chicken", "turkey" ], - "char": "\ud83c\udf57", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - meat_on_bone: { - keywords: [ "good", "food", "drumstick" ], - "char": "\ud83c\udf56", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - bone: { - keywords: [ "skeleton" ], - "char": "\ud83e\uddb4", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - fried_shrimp: { - keywords: [ "food", "animal", "appetizer", "summer" ], - "char": "\ud83c\udf64", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - fried_egg: { - keywords: [ "food", "breakfast", "kitchen", "egg" ], - "char": "\ud83c\udf73", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - hamburger: { - keywords: [ "meat", "fast food", "beef", "cheeseburger", "mcdonalds", "burger king" ], - "char": "\ud83c\udf54", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - fries: { - keywords: [ "chips", "snack", "fast food" ], - "char": "\ud83c\udf5f", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - stuffed_flatbread: { - keywords: [ "food", "flatbread", "stuffed", "gyro" ], - "char": "\ud83e\udd59", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - hotdog: { - keywords: [ "food", "frankfurter" ], - "char": "\ud83c\udf2d", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - pizza: { - keywords: [ "food", "party" ], - "char": "\ud83c\udf55", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - sandwich: { - keywords: [ "food", "lunch", "bread" ], - "char": "\ud83e\udd6a", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - canned_food: { - keywords: [ "food", "soup" ], - "char": "\ud83e\udd6b", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - spaghetti: { - keywords: [ "food", "italian", "noodle" ], - "char": "\ud83c\udf5d", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - taco: { - keywords: [ "food", "mexican" ], - "char": "\ud83c\udf2e", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - burrito: { - keywords: [ "food", "mexican" ], - "char": "\ud83c\udf2f", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - green_salad: { - keywords: [ "food", "healthy", "lettuce" ], - "char": "\ud83e\udd57", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - shallow_pan_of_food: { - keywords: [ "food", "cooking", "casserole", "paella" ], - "char": "\ud83e\udd58", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - ramen: { - keywords: [ "food", "japanese", "noodle", "chopsticks" ], - "char": "\ud83c\udf5c", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - stew: { - keywords: [ "food", "meat", "soup" ], - "char": "\ud83c\udf72", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - fish_cake: { - keywords: [ "food", "japan", "sea", "beach", "narutomaki", "pink", "swirl", "kamaboko", "surimi", "ramen" ], - "char": "\ud83c\udf65", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - fortune_cookie: { - keywords: [ "food", "prophecy" ], - "char": "\ud83e\udd60", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - sushi: { - keywords: [ "food", "fish", "japanese", "rice" ], - "char": "\ud83c\udf63", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - bento: { - keywords: [ "food", "japanese", "box" ], - "char": "\ud83c\udf71", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - curry: { - keywords: [ "food", "spicy", "hot", "indian" ], - "char": "\ud83c\udf5b", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - rice_ball: { - keywords: [ "food", "japanese" ], - "char": "\ud83c\udf59", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - rice: { - keywords: [ "food", "china", "asian" ], - "char": "\ud83c\udf5a", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - rice_cracker: { - keywords: [ "food", "japanese" ], - "char": "\ud83c\udf58", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - oden: { - keywords: [ "food", "japanese" ], - "char": "\ud83c\udf62", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - dango: { - keywords: [ "food", "dessert", "sweet", "japanese", "barbecue", "meat" ], - "char": "\ud83c\udf61", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - shaved_ice: { - keywords: [ "hot", "dessert", "summer" ], - "char": "\ud83c\udf67", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - ice_cream: { - keywords: [ "food", "hot", "dessert" ], - "char": "\ud83c\udf68", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - icecream: { - keywords: [ "food", "hot", "dessert", "summer" ], - "char": "\ud83c\udf66", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - pie: { - keywords: [ "food", "dessert", "pastry" ], - "char": "\ud83e\udd67", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - cake: { - keywords: [ "food", "dessert" ], - "char": "\ud83c\udf70", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - cupcake: { - keywords: [ "food", "dessert", "bakery", "sweet" ], - "char": "\ud83e\uddc1", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - moon_cake: { - keywords: [ "food", "autumn" ], - "char": "\ud83e\udd6e", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - birthday: { - keywords: [ "food", "dessert", "cake" ], - "char": "\ud83c\udf82", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - custard: { - keywords: [ "dessert", "food" ], - "char": "\ud83c\udf6e", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - candy: { - keywords: [ "snack", "dessert", "sweet", "lolly" ], - "char": "\ud83c\udf6c", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - lollipop: { - keywords: [ "food", "snack", "candy", "sweet" ], - "char": "\ud83c\udf6d", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - chocolate_bar: { - keywords: [ "food", "snack", "dessert", "sweet" ], - "char": "\ud83c\udf6b", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - popcorn: { - keywords: [ "food", "movie theater", "films", "snack" ], - "char": "\ud83c\udf7f", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - dumpling: { - keywords: [ "food", "empanada", "pierogi", "potsticker" ], - "char": "\ud83e\udd5f", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - doughnut: { - keywords: [ "food", "dessert", "snack", "sweet", "donut" ], - "char": "\ud83c\udf69", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - cookie: { - keywords: [ "food", "snack", "oreo", "chocolate", "sweet", "dessert" ], - "char": "\ud83c\udf6a", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - milk_glass: { - keywords: [ "beverage", "drink", "cow" ], - "char": "\ud83e\udd5b", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - beer: { - keywords: [ "relax", "beverage", "drink", "drunk", "party", "pub", "summer", "alcohol", "booze" ], - "char": "\ud83c\udf7a", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - beers: { - keywords: [ "relax", "beverage", "drink", "drunk", "party", "pub", "summer", "alcohol", "booze" ], - "char": "\ud83c\udf7b", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - clinking_glasses: { - keywords: [ "beverage", "drink", "party", "alcohol", "celebrate", "cheers", "wine", "champagne", "toast" ], - "char": "\ud83e\udd42", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - wine_glass: { - keywords: [ "drink", "beverage", "drunk", "alcohol", "booze" ], - "char": "\ud83c\udf77", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - tumbler_glass: { - keywords: [ "drink", "beverage", "drunk", "alcohol", "liquor", "booze", "bourbon", "scotch", "whisky", "glass", "shot" ], - "char": "\ud83e\udd43", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - cocktail: { - keywords: [ "drink", "drunk", "alcohol", "beverage", "booze", "mojito" ], - "char": "\ud83c\udf78", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - tropical_drink: { - keywords: [ "beverage", "cocktail", "summer", "beach", "alcohol", "booze", "mojito" ], - "char": "\ud83c\udf79", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - champagne: { - keywords: [ "drink", "wine", "bottle", "celebration" ], - "char": "\ud83c\udf7e", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - sake: { - keywords: [ "wine", "drink", "drunk", "beverage", "japanese", "alcohol", "booze" ], - "char": "\ud83c\udf76", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - tea: { - keywords: [ "drink", "bowl", "breakfast", "green", "british" ], - "char": "\ud83c\udf75", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - cup_with_straw: { - keywords: [ "drink", "soda" ], - "char": "\ud83e\udd64", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - coffee: { - keywords: [ "beverage", "caffeine", "latte", "espresso" ], - "char": "\u2615", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - baby_bottle: { - keywords: [ "food", "container", "milk" ], - "char": "\ud83c\udf7c", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - salt: { - keywords: [ "condiment", "shaker" ], - "char": "\ud83e\uddc2", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - spoon: { - keywords: [ "cutlery", "kitchen", "tableware" ], - "char": "\ud83e\udd44", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - fork_and_knife: { - keywords: [ "cutlery", "kitchen" ], - "char": "\ud83c\udf74", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - plate_with_cutlery: { - keywords: [ "food", "eat", "meal", "lunch", "dinner", "restaurant" ], - "char": "\ud83c\udf7d", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - bowl_with_spoon: { - keywords: [ "food", "breakfast", "cereal", "oatmeal", "porridge" ], - "char": "\ud83e\udd63", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - takeout_box: { - keywords: [ "food", "leftovers" ], - "char": "\ud83e\udd61", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - chopsticks: { - keywords: [ "food" ], - "char": "\ud83e\udd62", - fitzpatrick_scale: false, - category: "food_and_drink" - }, - soccer: { - keywords: [ "sports", "football" ], - "char": "\u26bd", - fitzpatrick_scale: false, - category: "activity" - }, - basketball: { - keywords: [ "sports", "balls", "NBA" ], - "char": "\ud83c\udfc0", - fitzpatrick_scale: false, - category: "activity" - }, - football: { - keywords: [ "sports", "balls", "NFL" ], - "char": "\ud83c\udfc8", - fitzpatrick_scale: false, - category: "activity" - }, - baseball: { - keywords: [ "sports", "balls" ], - "char": "\u26be", - fitzpatrick_scale: false, - category: "activity" - }, - softball: { - keywords: [ "sports", "balls" ], - "char": "\ud83e\udd4e", - fitzpatrick_scale: false, - category: "activity" - }, - tennis: { - keywords: [ "sports", "balls", "green" ], - "char": "\ud83c\udfbe", - fitzpatrick_scale: false, - category: "activity" - }, - volleyball: { - keywords: [ "sports", "balls" ], - "char": "\ud83c\udfd0", - fitzpatrick_scale: false, - category: "activity" - }, - rugby_football: { - keywords: [ "sports", "team" ], - "char": "\ud83c\udfc9", - fitzpatrick_scale: false, - category: "activity" - }, - flying_disc: { - keywords: [ "sports", "frisbee", "ultimate" ], - "char": "\ud83e\udd4f", - fitzpatrick_scale: false, - category: "activity" - }, - "8ball": { - keywords: [ "pool", "hobby", "game", "luck", "magic" ], - "char": "\ud83c\udfb1", - fitzpatrick_scale: false, - category: "activity" - }, - golf: { - keywords: [ "sports", "business", "flag", "hole", "summer" ], - "char": "\u26f3", - fitzpatrick_scale: false, - category: "activity" - }, - golfing_woman: { - keywords: [ "sports", "business", "woman", "female" ], - "char": "\ud83c\udfcc\ufe0f\u200d\u2640\ufe0f", - fitzpatrick_scale: false, - category: "activity" - }, - golfing_man: { - keywords: [ "sports", "business" ], - "char": "\ud83c\udfcc", - fitzpatrick_scale: true, - category: "activity" - }, - ping_pong: { - keywords: [ "sports", "pingpong" ], - "char": "\ud83c\udfd3", - fitzpatrick_scale: false, - category: "activity" - }, - badminton: { - keywords: [ "sports" ], - "char": "\ud83c\udff8", - fitzpatrick_scale: false, - category: "activity" - }, - goal_net: { - keywords: [ "sports" ], - "char": "\ud83e\udd45", - fitzpatrick_scale: false, - category: "activity" - }, - ice_hockey: { - keywords: [ "sports" ], - "char": "\ud83c\udfd2", - fitzpatrick_scale: false, - category: "activity" - }, - field_hockey: { - keywords: [ "sports" ], - "char": "\ud83c\udfd1", - fitzpatrick_scale: false, - category: "activity" - }, - lacrosse: { - keywords: [ "sports", "ball", "stick" ], - "char": "\ud83e\udd4d", - fitzpatrick_scale: false, - category: "activity" - }, - cricket: { - keywords: [ "sports" ], - "char": "\ud83c\udfcf", - fitzpatrick_scale: false, - category: "activity" - }, - ski: { - keywords: [ "sports", "winter", "cold", "snow" ], - "char": "\ud83c\udfbf", - fitzpatrick_scale: false, - category: "activity" - }, - skier: { - keywords: [ "sports", "winter", "snow" ], - "char": "\u26f7", - fitzpatrick_scale: false, - category: "activity" - }, - snowboarder: { - keywords: [ "sports", "winter" ], - "char": "\ud83c\udfc2", - fitzpatrick_scale: true, - category: "activity" - }, - person_fencing: { - keywords: [ "sports", "fencing", "sword" ], - "char": "\ud83e\udd3a", - fitzpatrick_scale: false, - category: "activity" - }, - women_wrestling: { - keywords: [ "sports", "wrestlers" ], - "char": "\ud83e\udd3c\u200d\u2640\ufe0f", - fitzpatrick_scale: false, - category: "activity" - }, - men_wrestling: { - keywords: [ "sports", "wrestlers" ], - "char": "\ud83e\udd3c\u200d\u2642\ufe0f", - fitzpatrick_scale: false, - category: "activity" - }, - woman_cartwheeling: { - keywords: [ "gymnastics" ], - "char": "\ud83e\udd38\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - man_cartwheeling: { - keywords: [ "gymnastics" ], - "char": "\ud83e\udd38\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - woman_playing_handball: { - keywords: [ "sports" ], - "char": "\ud83e\udd3e\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - man_playing_handball: { - keywords: [ "sports" ], - "char": "\ud83e\udd3e\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - ice_skate: { - keywords: [ "sports" ], - "char": "\u26f8", - fitzpatrick_scale: false, - category: "activity" - }, - curling_stone: { - keywords: [ "sports" ], - "char": "\ud83e\udd4c", - fitzpatrick_scale: false, - category: "activity" - }, - skateboard: { - keywords: [ "board" ], - "char": "\ud83d\udef9", - fitzpatrick_scale: false, - category: "activity" - }, - sled: { - keywords: [ "sleigh", "luge", "toboggan" ], - "char": "\ud83d\udef7", - fitzpatrick_scale: false, - category: "activity" - }, - bow_and_arrow: { - keywords: [ "sports" ], - "char": "\ud83c\udff9", - fitzpatrick_scale: false, - category: "activity" - }, - fishing_pole_and_fish: { - keywords: [ "food", "hobby", "summer" ], - "char": "\ud83c\udfa3", - fitzpatrick_scale: false, - category: "activity" - }, - boxing_glove: { - keywords: [ "sports", "fighting" ], - "char": "\ud83e\udd4a", - fitzpatrick_scale: false, - category: "activity" - }, - martial_arts_uniform: { - keywords: [ "judo", "karate", "taekwondo" ], - "char": "\ud83e\udd4b", - fitzpatrick_scale: false, - category: "activity" - }, - rowing_woman: { - keywords: [ "sports", "hobby", "water", "ship", "woman", "female" ], - "char": "\ud83d\udea3\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - rowing_man: { - keywords: [ "sports", "hobby", "water", "ship" ], - "char": "\ud83d\udea3", - fitzpatrick_scale: true, - category: "activity" - }, - climbing_woman: { - keywords: [ "sports", "hobby", "woman", "female", "rock" ], - "char": "\ud83e\uddd7\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - climbing_man: { - keywords: [ "sports", "hobby", "man", "male", "rock" ], - "char": "\ud83e\uddd7\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - swimming_woman: { - keywords: [ "sports", "exercise", "human", "athlete", "water", "summer", "woman", "female" ], - "char": "\ud83c\udfca\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - swimming_man: { - keywords: [ "sports", "exercise", "human", "athlete", "water", "summer" ], - "char": "\ud83c\udfca", - fitzpatrick_scale: true, - category: "activity" - }, - woman_playing_water_polo: { - keywords: [ "sports", "pool" ], - "char": "\ud83e\udd3d\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - man_playing_water_polo: { - keywords: [ "sports", "pool" ], - "char": "\ud83e\udd3d\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - woman_in_lotus_position: { - keywords: [ "woman", "female", "meditation", "yoga", "serenity", "zen", "mindfulness" ], - "char": "\ud83e\uddd8\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - man_in_lotus_position: { - keywords: [ "man", "male", "meditation", "yoga", "serenity", "zen", "mindfulness" ], - "char": "\ud83e\uddd8\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - surfing_woman: { - keywords: [ "sports", "ocean", "sea", "summer", "beach", "woman", "female" ], - "char": "\ud83c\udfc4\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - surfing_man: { - keywords: [ "sports", "ocean", "sea", "summer", "beach" ], - "char": "\ud83c\udfc4", - fitzpatrick_scale: true, - category: "activity" - }, - bath: { - keywords: [ "clean", "shower", "bathroom" ], - "char": "\ud83d\udec0", - fitzpatrick_scale: true, - category: "activity" - }, - basketball_woman: { - keywords: [ "sports", "human", "woman", "female" ], - "char": "\u26f9\ufe0f\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - basketball_man: { - keywords: [ "sports", "human" ], - "char": "\u26f9", - fitzpatrick_scale: true, - category: "activity" - }, - weight_lifting_woman: { - keywords: [ "sports", "training", "exercise", "woman", "female" ], - "char": "\ud83c\udfcb\ufe0f\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - weight_lifting_man: { - keywords: [ "sports", "training", "exercise" ], - "char": "\ud83c\udfcb", - fitzpatrick_scale: true, - category: "activity" - }, - biking_woman: { - keywords: [ "sports", "bike", "exercise", "hipster", "woman", "female" ], - "char": "\ud83d\udeb4\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - biking_man: { - keywords: [ "sports", "bike", "exercise", "hipster" ], - "char": "\ud83d\udeb4", - fitzpatrick_scale: true, - category: "activity" - }, - mountain_biking_woman: { - keywords: [ "transportation", "sports", "human", "race", "bike", "woman", "female" ], - "char": "\ud83d\udeb5\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - mountain_biking_man: { - keywords: [ "transportation", "sports", "human", "race", "bike" ], - "char": "\ud83d\udeb5", - fitzpatrick_scale: true, - category: "activity" - }, - horse_racing: { - keywords: [ "animal", "betting", "competition", "gambling", "luck" ], - "char": "\ud83c\udfc7", - fitzpatrick_scale: true, - category: "activity" - }, - business_suit_levitating: { - keywords: [ "suit", "business", "levitate", "hover", "jump" ], - "char": "\ud83d\udd74", - fitzpatrick_scale: true, - category: "activity" - }, - trophy: { - keywords: [ "win", "award", "contest", "place", "ftw", "ceremony" ], - "char": "\ud83c\udfc6", - fitzpatrick_scale: false, - category: "activity" - }, - running_shirt_with_sash: { - keywords: [ "play", "pageant" ], - "char": "\ud83c\udfbd", - fitzpatrick_scale: false, - category: "activity" - }, - medal_sports: { - keywords: [ "award", "winning" ], - "char": "\ud83c\udfc5", - fitzpatrick_scale: false, - category: "activity" - }, - medal_military: { - keywords: [ "award", "winning", "army" ], - "char": "\ud83c\udf96", - fitzpatrick_scale: false, - category: "activity" - }, - "1st_place_medal": { - keywords: [ "award", "winning", "first" ], - "char": "\ud83e\udd47", - fitzpatrick_scale: false, - category: "activity" - }, - "2nd_place_medal": { - keywords: [ "award", "second" ], - "char": "\ud83e\udd48", - fitzpatrick_scale: false, - category: "activity" - }, - "3rd_place_medal": { - keywords: [ "award", "third" ], - "char": "\ud83e\udd49", - fitzpatrick_scale: false, - category: "activity" - }, - reminder_ribbon: { - keywords: [ "sports", "cause", "support", "awareness" ], - "char": "\ud83c\udf97", - fitzpatrick_scale: false, - category: "activity" - }, - rosette: { - keywords: [ "flower", "decoration", "military" ], - "char": "\ud83c\udff5", - fitzpatrick_scale: false, - category: "activity" - }, - ticket: { - keywords: [ "event", "concert", "pass" ], - "char": "\ud83c\udfab", - fitzpatrick_scale: false, - category: "activity" - }, - tickets: { - keywords: [ "sports", "concert", "entrance" ], - "char": "\ud83c\udf9f", - fitzpatrick_scale: false, - category: "activity" - }, - performing_arts: { - keywords: [ "acting", "theater", "drama" ], - "char": "\ud83c\udfad", - fitzpatrick_scale: false, - category: "activity" - }, - art: { - keywords: [ "design", "paint", "draw", "colors" ], - "char": "\ud83c\udfa8", - fitzpatrick_scale: false, - category: "activity" - }, - circus_tent: { - keywords: [ "festival", "carnival", "party" ], - "char": "\ud83c\udfaa", - fitzpatrick_scale: false, - category: "activity" - }, - woman_juggling: { - keywords: [ "juggle", "balance", "skill", "multitask" ], - "char": "\ud83e\udd39\u200d\u2640\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - man_juggling: { - keywords: [ "juggle", "balance", "skill", "multitask" ], - "char": "\ud83e\udd39\u200d\u2642\ufe0f", - fitzpatrick_scale: true, - category: "activity" - }, - microphone: { - keywords: [ "sound", "music", "PA", "sing", "talkshow" ], - "char": "\ud83c\udfa4", - fitzpatrick_scale: false, - category: "activity" - }, - headphones: { - keywords: [ "music", "score", "gadgets" ], - "char": "\ud83c\udfa7", - fitzpatrick_scale: false, - category: "activity" - }, - musical_score: { - keywords: [ "treble", "clef", "compose" ], - "char": "\ud83c\udfbc", - fitzpatrick_scale: false, - category: "activity" - }, - musical_keyboard: { - keywords: [ "piano", "instrument", "compose" ], - "char": "\ud83c\udfb9", - fitzpatrick_scale: false, - category: "activity" - }, - drum: { - keywords: [ "music", "instrument", "drumsticks", "snare" ], - "char": "\ud83e\udd41", - fitzpatrick_scale: false, - category: "activity" - }, - saxophone: { - keywords: [ "music", "instrument", "jazz", "blues" ], - "char": "\ud83c\udfb7", - fitzpatrick_scale: false, - category: "activity" - }, - trumpet: { - keywords: [ "music", "brass" ], - "char": "\ud83c\udfba", - fitzpatrick_scale: false, - category: "activity" - }, - guitar: { - keywords: [ "music", "instrument" ], - "char": "\ud83c\udfb8", - fitzpatrick_scale: false, - category: "activity" - }, - violin: { - keywords: [ "music", "instrument", "orchestra", "symphony" ], - "char": "\ud83c\udfbb", - fitzpatrick_scale: false, - category: "activity" - }, - clapper: { - keywords: [ "movie", "film", "record" ], - "char": "\ud83c\udfac", - fitzpatrick_scale: false, - category: "activity" - }, - video_game: { - keywords: [ "play", "console", "PS4", "controller" ], - "char": "\ud83c\udfae", - fitzpatrick_scale: false, - category: "activity" - }, - space_invader: { - keywords: [ "game", "arcade", "play" ], - "char": "\ud83d\udc7e", - fitzpatrick_scale: false, - category: "activity" - }, - dart: { - keywords: [ "game", "play", "bar", "target", "bullseye" ], - "char": "\ud83c\udfaf", - fitzpatrick_scale: false, - category: "activity" - }, - game_die: { - keywords: [ "dice", "random", "tabletop", "play", "luck" ], - "char": "\ud83c\udfb2", - fitzpatrick_scale: false, - category: "activity" - }, - chess_pawn: { - keywords: [ "expendable" ], - "char": "\u265f", - fitzpatrick_scale: false, - category: "activity" - }, - slot_machine: { - keywords: [ "bet", "gamble", "vegas", "fruit machine", "luck", "casino" ], - "char": "\ud83c\udfb0", - fitzpatrick_scale: false, - category: "activity" - }, - jigsaw: { - keywords: [ "interlocking", "puzzle", "piece" ], - "char": "\ud83e\udde9", - fitzpatrick_scale: false, - category: "activity" - }, - bowling: { - keywords: [ "sports", "fun", "play" ], - "char": "\ud83c\udfb3", - fitzpatrick_scale: false, - category: "activity" - }, - red_car: { - keywords: [ "red", "transportation", "vehicle" ], - "char": "\ud83d\ude97", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - taxi: { - keywords: [ "uber", "vehicle", "cars", "transportation" ], - "char": "\ud83d\ude95", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - blue_car: { - keywords: [ "transportation", "vehicle" ], - "char": "\ud83d\ude99", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - bus: { - keywords: [ "car", "vehicle", "transportation" ], - "char": "\ud83d\ude8c", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - trolleybus: { - keywords: [ "bart", "transportation", "vehicle" ], - "char": "\ud83d\ude8e", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - racing_car: { - keywords: [ "sports", "race", "fast", "formula", "f1" ], - "char": "\ud83c\udfce", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - police_car: { - keywords: [ "vehicle", "cars", "transportation", "law", "legal", "enforcement" ], - "char": "\ud83d\ude93", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - ambulance: { - keywords: [ "health", "911", "hospital" ], - "char": "\ud83d\ude91", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - fire_engine: { - keywords: [ "transportation", "cars", "vehicle" ], - "char": "\ud83d\ude92", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - minibus: { - keywords: [ "vehicle", "car", "transportation" ], - "char": "\ud83d\ude90", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - truck: { - keywords: [ "cars", "transportation" ], - "char": "\ud83d\ude9a", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - articulated_lorry: { - keywords: [ "vehicle", "cars", "transportation", "express" ], - "char": "\ud83d\ude9b", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - tractor: { - keywords: [ "vehicle", "car", "farming", "agriculture" ], - "char": "\ud83d\ude9c", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - kick_scooter: { - keywords: [ "vehicle", "kick", "razor" ], - "char": "\ud83d\udef4", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - motorcycle: { - keywords: [ "race", "sports", "fast" ], - "char": "\ud83c\udfcd", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - bike: { - keywords: [ "sports", "bicycle", "exercise", "hipster" ], - "char": "\ud83d\udeb2", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - motor_scooter: { - keywords: [ "vehicle", "vespa", "sasha" ], - "char": "\ud83d\udef5", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - rotating_light: { - keywords: [ "police", "ambulance", "911", "emergency", "alert", "error", "pinged", "law", "legal" ], - "char": "\ud83d\udea8", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - oncoming_police_car: { - keywords: [ "vehicle", "law", "legal", "enforcement", "911" ], - "char": "\ud83d\ude94", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - oncoming_bus: { - keywords: [ "vehicle", "transportation" ], - "char": "\ud83d\ude8d", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - oncoming_automobile: { - keywords: [ "car", "vehicle", "transportation" ], - "char": "\ud83d\ude98", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - oncoming_taxi: { - keywords: [ "vehicle", "cars", "uber" ], - "char": "\ud83d\ude96", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - aerial_tramway: { - keywords: [ "transportation", "vehicle", "ski" ], - "char": "\ud83d\udea1", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - mountain_cableway: { - keywords: [ "transportation", "vehicle", "ski" ], - "char": "\ud83d\udea0", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - suspension_railway: { - keywords: [ "vehicle", "transportation" ], - "char": "\ud83d\ude9f", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - railway_car: { - keywords: [ "transportation", "vehicle" ], - "char": "\ud83d\ude83", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - train: { - keywords: [ "transportation", "vehicle", "carriage", "public", "travel" ], - "char": "\ud83d\ude8b", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - monorail: { - keywords: [ "transportation", "vehicle" ], - "char": "\ud83d\ude9d", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - bullettrain_side: { - keywords: [ "transportation", "vehicle" ], - "char": "\ud83d\ude84", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - bullettrain_front: { - keywords: [ "transportation", "vehicle", "speed", "fast", "public", "travel" ], - "char": "\ud83d\ude85", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - light_rail: { - keywords: [ "transportation", "vehicle" ], - "char": "\ud83d\ude88", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - mountain_railway: { - keywords: [ "transportation", "vehicle" ], - "char": "\ud83d\ude9e", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - steam_locomotive: { - keywords: [ "transportation", "vehicle", "train" ], - "char": "\ud83d\ude82", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - train2: { - keywords: [ "transportation", "vehicle" ], - "char": "\ud83d\ude86", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - metro: { - keywords: [ "transportation", "blue-square", "mrt", "underground", "tube" ], - "char": "\ud83d\ude87", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - tram: { - keywords: [ "transportation", "vehicle" ], - "char": "\ud83d\ude8a", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - station: { - keywords: [ "transportation", "vehicle", "public" ], - "char": "\ud83d\ude89", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - flying_saucer: { - keywords: [ "transportation", "vehicle", "ufo" ], - "char": "\ud83d\udef8", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - helicopter: { - keywords: [ "transportation", "vehicle", "fly" ], - "char": "\ud83d\ude81", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - small_airplane: { - keywords: [ "flight", "transportation", "fly", "vehicle" ], - "char": "\ud83d\udee9", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - airplane: { - keywords: [ "vehicle", "transportation", "flight", "fly" ], - "char": "\u2708\ufe0f", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - flight_departure: { - keywords: [ "airport", "flight", "landing" ], - "char": "\ud83d\udeeb", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - flight_arrival: { - keywords: [ "airport", "flight", "boarding" ], - "char": "\ud83d\udeec", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - sailboat: { - keywords: [ "ship", "summer", "transportation", "water", "sailing" ], - "char": "\u26f5", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - motor_boat: { - keywords: [ "ship" ], - "char": "\ud83d\udee5", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - speedboat: { - keywords: [ "ship", "transportation", "vehicle", "summer" ], - "char": "\ud83d\udea4", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - ferry: { - keywords: [ "boat", "ship", "yacht" ], - "char": "\u26f4", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - passenger_ship: { - keywords: [ "yacht", "cruise", "ferry" ], - "char": "\ud83d\udef3", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - rocket: { - keywords: [ "launch", "ship", "staffmode", "NASA", "outer space", "outer_space", "fly" ], - "char": "\ud83d\ude80", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - artificial_satellite: { - keywords: [ "communication", "gps", "orbit", "spaceflight", "NASA", "ISS" ], - "char": "\ud83d\udef0", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - seat: { - keywords: [ "sit", "airplane", "transport", "bus", "flight", "fly" ], - "char": "\ud83d\udcba", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - canoe: { - keywords: [ "boat", "paddle", "water", "ship" ], - "char": "\ud83d\udef6", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - anchor: { - keywords: [ "ship", "ferry", "sea", "boat" ], - "char": "\u2693", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - construction: { - keywords: [ "wip", "progress", "caution", "warning" ], - "char": "\ud83d\udea7", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - fuelpump: { - keywords: [ "gas station", "petroleum" ], - "char": "\u26fd", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - busstop: { - keywords: [ "transportation", "wait" ], - "char": "\ud83d\ude8f", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - vertical_traffic_light: { - keywords: [ "transportation", "driving" ], - "char": "\ud83d\udea6", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - traffic_light: { - keywords: [ "transportation", "signal" ], - "char": "\ud83d\udea5", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - checkered_flag: { - keywords: [ "contest", "finishline", "race", "gokart" ], - "char": "\ud83c\udfc1", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - ship: { - keywords: [ "transportation", "titanic", "deploy" ], - "char": "\ud83d\udea2", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - ferris_wheel: { - keywords: [ "photo", "carnival", "londoneye" ], - "char": "\ud83c\udfa1", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - roller_coaster: { - keywords: [ "carnival", "playground", "photo", "fun" ], - "char": "\ud83c\udfa2", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - carousel_horse: { - keywords: [ "photo", "carnival" ], - "char": "\ud83c\udfa0", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - building_construction: { - keywords: [ "wip", "working", "progress" ], - "char": "\ud83c\udfd7", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - foggy: { - keywords: [ "photo", "mountain" ], - "char": "\ud83c\udf01", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - tokyo_tower: { - keywords: [ "photo", "japanese" ], - "char": "\ud83d\uddfc", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - factory: { - keywords: [ "building", "industry", "pollution", "smoke" ], - "char": "\ud83c\udfed", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - fountain: { - keywords: [ "photo", "summer", "water", "fresh" ], - "char": "\u26f2", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - rice_scene: { - keywords: [ "photo", "japan", "asia", "tsukimi" ], - "char": "\ud83c\udf91", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - mountain: { - keywords: [ "photo", "nature", "environment" ], - "char": "\u26f0", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - mountain_snow: { - keywords: [ "photo", "nature", "environment", "winter", "cold" ], - "char": "\ud83c\udfd4", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - mount_fuji: { - keywords: [ "photo", "mountain", "nature", "japanese" ], - "char": "\ud83d\uddfb", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - volcano: { - keywords: [ "photo", "nature", "disaster" ], - "char": "\ud83c\udf0b", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - japan: { - keywords: [ "nation", "country", "japanese", "asia" ], - "char": "\ud83d\uddfe", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - camping: { - keywords: [ "photo", "outdoors", "tent" ], - "char": "\ud83c\udfd5", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - tent: { - keywords: [ "photo", "camping", "outdoors" ], - "char": "\u26fa", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - national_park: { - keywords: [ "photo", "environment", "nature" ], - "char": "\ud83c\udfde", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - motorway: { - keywords: [ "road", "cupertino", "interstate", "highway" ], - "char": "\ud83d\udee3", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - railway_track: { - keywords: [ "train", "transportation" ], - "char": "\ud83d\udee4", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - sunrise: { - keywords: [ "morning", "view", "vacation", "photo" ], - "char": "\ud83c\udf05", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - sunrise_over_mountains: { - keywords: [ "view", "vacation", "photo" ], - "char": "\ud83c\udf04", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - desert: { - keywords: [ "photo", "warm", "saharah" ], - "char": "\ud83c\udfdc", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - beach_umbrella: { - keywords: [ "weather", "summer", "sunny", "sand", "mojito" ], - "char": "\ud83c\udfd6", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - desert_island: { - keywords: [ "photo", "tropical", "mojito" ], - "char": "\ud83c\udfdd", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - city_sunrise: { - keywords: [ "photo", "good morning", "dawn" ], - "char": "\ud83c\udf07", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - city_sunset: { - keywords: [ "photo", "evening", "sky", "buildings" ], - "char": "\ud83c\udf06", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - cityscape: { - keywords: [ "photo", "night life", "urban" ], - "char": "\ud83c\udfd9", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - night_with_stars: { - keywords: [ "evening", "city", "downtown" ], - "char": "\ud83c\udf03", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - bridge_at_night: { - keywords: [ "photo", "sanfrancisco" ], - "char": "\ud83c\udf09", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - milky_way: { - keywords: [ "photo", "space", "stars" ], - "char": "\ud83c\udf0c", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - stars: { - keywords: [ "night", "photo" ], - "char": "\ud83c\udf20", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - sparkler: { - keywords: [ "stars", "night", "shine" ], - "char": "\ud83c\udf87", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - fireworks: { - keywords: [ "photo", "festival", "carnival", "congratulations" ], - "char": "\ud83c\udf86", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - rainbow: { - keywords: [ "nature", "happy", "unicorn_face", "photo", "sky", "spring" ], - "char": "\ud83c\udf08", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - houses: { - keywords: [ "buildings", "photo" ], - "char": "\ud83c\udfd8", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - european_castle: { - keywords: [ "building", "royalty", "history" ], - "char": "\ud83c\udff0", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - japanese_castle: { - keywords: [ "photo", "building" ], - "char": "\ud83c\udfef", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - stadium: { - keywords: [ "photo", "place", "sports", "concert", "venue" ], - "char": "\ud83c\udfdf", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - statue_of_liberty: { - keywords: [ "american", "newyork" ], - "char": "\ud83d\uddfd", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - house: { - keywords: [ "building", "home" ], - "char": "\ud83c\udfe0", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - house_with_garden: { - keywords: [ "home", "plant", "nature" ], - "char": "\ud83c\udfe1", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - derelict_house: { - keywords: [ "abandon", "evict", "broken", "building" ], - "char": "\ud83c\udfda", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - office: { - keywords: [ "building", "bureau", "work" ], - "char": "\ud83c\udfe2", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - department_store: { - keywords: [ "building", "shopping", "mall" ], - "char": "\ud83c\udfec", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - post_office: { - keywords: [ "building", "envelope", "communication" ], - "char": "\ud83c\udfe3", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - european_post_office: { - keywords: [ "building", "email" ], - "char": "\ud83c\udfe4", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - hospital: { - keywords: [ "building", "health", "surgery", "doctor" ], - "char": "\ud83c\udfe5", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - bank: { - keywords: [ "building", "money", "sales", "cash", "business", "enterprise" ], - "char": "\ud83c\udfe6", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - hotel: { - keywords: [ "building", "accomodation", "checkin" ], - "char": "\ud83c\udfe8", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - convenience_store: { - keywords: [ "building", "shopping", "groceries" ], - "char": "\ud83c\udfea", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - school: { - keywords: [ "building", "student", "education", "learn", "teach" ], - "char": "\ud83c\udfeb", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - love_hotel: { - keywords: [ "like", "affection", "dating" ], - "char": "\ud83c\udfe9", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - wedding: { - keywords: [ "love", "like", "affection", "couple", "marriage", "bride", "groom" ], - "char": "\ud83d\udc92", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - classical_building: { - keywords: [ "art", "culture", "history" ], - "char": "\ud83c\udfdb", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - church: { - keywords: [ "building", "religion", "christ" ], - "char": "\u26ea", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - mosque: { - keywords: [ "islam", "worship", "minaret" ], - "char": "\ud83d\udd4c", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - synagogue: { - keywords: [ "judaism", "worship", "temple", "jewish" ], - "char": "\ud83d\udd4d", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - kaaba: { - keywords: [ "mecca", "mosque", "islam" ], - "char": "\ud83d\udd4b", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - shinto_shrine: { - keywords: [ "temple", "japan", "kyoto" ], - "char": "\u26e9", - fitzpatrick_scale: false, - category: "travel_and_places" - }, - watch: { - keywords: [ "time", "accessories" ], - "char": "\u231a", - fitzpatrick_scale: false, - category: "objects" - }, - iphone: { - keywords: [ "technology", "apple", "gadgets", "dial" ], - "char": "\ud83d\udcf1", - fitzpatrick_scale: false, - category: "objects" - }, - calling: { - keywords: [ "iphone", "incoming" ], - "char": "\ud83d\udcf2", - fitzpatrick_scale: false, - category: "objects" - }, - computer: { - keywords: [ "technology", "laptop", "screen", "display", "monitor" ], - "char": "\ud83d\udcbb", - fitzpatrick_scale: false, - category: "objects" - }, - keyboard: { - keywords: [ "technology", "computer", "type", "input", "text" ], - "char": "\u2328", - fitzpatrick_scale: false, - category: "objects" - }, - desktop_computer: { - keywords: [ "technology", "computing", "screen" ], - "char": "\ud83d\udda5", - fitzpatrick_scale: false, - category: "objects" - }, - printer: { - keywords: [ "paper", "ink" ], - "char": "\ud83d\udda8", - fitzpatrick_scale: false, - category: "objects" - }, - computer_mouse: { - keywords: [ "click" ], - "char": "\ud83d\uddb1", - fitzpatrick_scale: false, - category: "objects" - }, - trackball: { - keywords: [ "technology", "trackpad" ], - "char": "\ud83d\uddb2", - fitzpatrick_scale: false, - category: "objects" - }, - joystick: { - keywords: [ "game", "play" ], - "char": "\ud83d\udd79", - fitzpatrick_scale: false, - category: "objects" - }, - clamp: { - keywords: [ "tool" ], - "char": "\ud83d\udddc", - fitzpatrick_scale: false, - category: "objects" - }, - minidisc: { - keywords: [ "technology", "record", "data", "disk", "90s" ], - "char": "\ud83d\udcbd", - fitzpatrick_scale: false, - category: "objects" - }, - floppy_disk: { - keywords: [ "oldschool", "technology", "save", "90s", "80s" ], - "char": "\ud83d\udcbe", - fitzpatrick_scale: false, - category: "objects" - }, - cd: { - keywords: [ "technology", "dvd", "disk", "disc", "90s" ], - "char": "\ud83d\udcbf", - fitzpatrick_scale: false, - category: "objects" - }, - dvd: { - keywords: [ "cd", "disk", "disc" ], - "char": "\ud83d\udcc0", - fitzpatrick_scale: false, - category: "objects" - }, - vhs: { - keywords: [ "record", "video", "oldschool", "90s", "80s" ], - "char": "\ud83d\udcfc", - fitzpatrick_scale: false, - category: "objects" - }, - camera: { - keywords: [ "gadgets", "photography" ], - "char": "\ud83d\udcf7", - fitzpatrick_scale: false, - category: "objects" - }, - camera_flash: { - keywords: [ "photography", "gadgets" ], - "char": "\ud83d\udcf8", - fitzpatrick_scale: false, - category: "objects" - }, - video_camera: { - keywords: [ "film", "record" ], - "char": "\ud83d\udcf9", - fitzpatrick_scale: false, - category: "objects" - }, - movie_camera: { - keywords: [ "film", "record" ], - "char": "\ud83c\udfa5", - fitzpatrick_scale: false, - category: "objects" - }, - film_projector: { - keywords: [ "video", "tape", "record", "movie" ], - "char": "\ud83d\udcfd", - fitzpatrick_scale: false, - category: "objects" - }, - film_strip: { - keywords: [ "movie" ], - "char": "\ud83c\udf9e", - fitzpatrick_scale: false, - category: "objects" - }, - telephone_receiver: { - keywords: [ "technology", "communication", "dial" ], - "char": "\ud83d\udcde", - fitzpatrick_scale: false, - category: "objects" - }, - phone: { - keywords: [ "technology", "communication", "dial", "telephone" ], - "char": "\u260e\ufe0f", - fitzpatrick_scale: false, - category: "objects" - }, - pager: { - keywords: [ "bbcall", "oldschool", "90s" ], - "char": "\ud83d\udcdf", - fitzpatrick_scale: false, - category: "objects" - }, - fax: { - keywords: [ "communication", "technology" ], - "char": "\ud83d\udce0", - fitzpatrick_scale: false, - category: "objects" - }, - tv: { - keywords: [ "technology", "program", "oldschool", "show", "television" ], - "char": "\ud83d\udcfa", - fitzpatrick_scale: false, - category: "objects" - }, - radio: { - keywords: [ "communication", "music", "podcast", "program" ], - "char": "\ud83d\udcfb", - fitzpatrick_scale: false, - category: "objects" - }, - studio_microphone: { - keywords: [ "sing", "recording", "artist", "talkshow" ], - "char": "\ud83c\udf99", - fitzpatrick_scale: false, - category: "objects" - }, - level_slider: { - keywords: [ "scale" ], - "char": "\ud83c\udf9a", - fitzpatrick_scale: false, - category: "objects" - }, - control_knobs: { - keywords: [ "dial" ], - "char": "\ud83c\udf9b", - fitzpatrick_scale: false, - category: "objects" - }, - compass: { - keywords: [ "magnetic", "navigation", "orienteering" ], - "char": "\ud83e\udded", - fitzpatrick_scale: false, - category: "objects" - }, - stopwatch: { - keywords: [ "time", "deadline" ], - "char": "\u23f1", - fitzpatrick_scale: false, - category: "objects" - }, - timer_clock: { - keywords: [ "alarm" ], - "char": "\u23f2", - fitzpatrick_scale: false, - category: "objects" - }, - alarm_clock: { - keywords: [ "time", "wake" ], - "char": "\u23f0", - fitzpatrick_scale: false, - category: "objects" - }, - mantelpiece_clock: { - keywords: [ "time" ], - "char": "\ud83d\udd70", - fitzpatrick_scale: false, - category: "objects" - }, - hourglass_flowing_sand: { - keywords: [ "oldschool", "time", "countdown" ], - "char": "\u23f3", - fitzpatrick_scale: false, - category: "objects" - }, - hourglass: { - keywords: [ "time", "clock", "oldschool", "limit", "exam", "quiz", "test" ], - "char": "\u231b", - fitzpatrick_scale: false, - category: "objects" - }, - satellite: { - keywords: [ "communication", "future", "radio", "space" ], - "char": "\ud83d\udce1", - fitzpatrick_scale: false, - category: "objects" - }, - battery: { - keywords: [ "power", "energy", "sustain" ], - "char": "\ud83d\udd0b", - fitzpatrick_scale: false, - category: "objects" - }, - electric_plug: { - keywords: [ "charger", "power" ], - "char": "\ud83d\udd0c", - fitzpatrick_scale: false, - category: "objects" - }, - bulb: { - keywords: [ "light", "electricity", "idea" ], - "char": "\ud83d\udca1", - fitzpatrick_scale: false, - category: "objects" - }, - flashlight: { - keywords: [ "dark", "camping", "sight", "night" ], - "char": "\ud83d\udd26", - fitzpatrick_scale: false, - category: "objects" - }, - candle: { - keywords: [ "fire", "wax" ], - "char": "\ud83d\udd6f", - fitzpatrick_scale: false, - category: "objects" - }, - fire_extinguisher: { - keywords: [ "quench" ], - "char": "\ud83e\uddef", - fitzpatrick_scale: false, - category: "objects" - }, - wastebasket: { - keywords: [ "bin", "trash", "rubbish", "garbage", "toss" ], - "char": "\ud83d\uddd1", - fitzpatrick_scale: false, - category: "objects" - }, - oil_drum: { - keywords: [ "barrell" ], - "char": "\ud83d\udee2", - fitzpatrick_scale: false, - category: "objects" - }, - money_with_wings: { - keywords: [ "dollar", "bills", "payment", "sale" ], - "char": "\ud83d\udcb8", - fitzpatrick_scale: false, - category: "objects" - }, - dollar: { - keywords: [ "money", "sales", "bill", "currency" ], - "char": "\ud83d\udcb5", - fitzpatrick_scale: false, - category: "objects" - }, - yen: { - keywords: [ "money", "sales", "japanese", "dollar", "currency" ], - "char": "\ud83d\udcb4", - fitzpatrick_scale: false, - category: "objects" - }, - euro: { - keywords: [ "money", "sales", "dollar", "currency" ], - "char": "\ud83d\udcb6", - fitzpatrick_scale: false, - category: "objects" - }, - pound: { - keywords: [ "british", "sterling", "money", "sales", "bills", "uk", "england", "currency" ], - "char": "\ud83d\udcb7", - fitzpatrick_scale: false, - category: "objects" - }, - moneybag: { - keywords: [ "dollar", "payment", "coins", "sale" ], - "char": "\ud83d\udcb0", - fitzpatrick_scale: false, - category: "objects" - }, - credit_card: { - keywords: [ "money", "sales", "dollar", "bill", "payment", "shopping" ], - "char": "\ud83d\udcb3", - fitzpatrick_scale: false, - category: "objects" - }, - gem: { - keywords: [ "blue", "ruby", "diamond", "jewelry" ], - "char": "\ud83d\udc8e", - fitzpatrick_scale: false, - category: "objects" - }, - balance_scale: { - keywords: [ "law", "fairness", "weight" ], - "char": "\u2696", - fitzpatrick_scale: false, - category: "objects" - }, - toolbox: { - keywords: [ "tools", "diy", "fix", "maintainer", "mechanic" ], - "char": "\ud83e\uddf0", - fitzpatrick_scale: false, - category: "objects" - }, - wrench: { - keywords: [ "tools", "diy", "ikea", "fix", "maintainer" ], - "char": "\ud83d\udd27", - fitzpatrick_scale: false, - category: "objects" - }, - hammer: { - keywords: [ "tools", "build", "create" ], - "char": "\ud83d\udd28", - fitzpatrick_scale: false, - category: "objects" - }, - hammer_and_pick: { - keywords: [ "tools", "build", "create" ], - "char": "\u2692", - fitzpatrick_scale: false, - category: "objects" - }, - hammer_and_wrench: { - keywords: [ "tools", "build", "create" ], - "char": "\ud83d\udee0", - fitzpatrick_scale: false, - category: "objects" - }, - pick: { - keywords: [ "tools", "dig" ], - "char": "\u26cf", - fitzpatrick_scale: false, - category: "objects" - }, - nut_and_bolt: { - keywords: [ "handy", "tools", "fix" ], - "char": "\ud83d\udd29", - fitzpatrick_scale: false, - category: "objects" - }, - gear: { - keywords: [ "cog" ], - "char": "\u2699", - fitzpatrick_scale: false, - category: "objects" - }, - brick: { - keywords: [ "bricks" ], - "char": "\ud83e\uddf1", - fitzpatrick_scale: false, - category: "objects" - }, - chains: { - keywords: [ "lock", "arrest" ], - "char": "\u26d3", - fitzpatrick_scale: false, - category: "objects" - }, - magnet: { - keywords: [ "attraction", "magnetic" ], - "char": "\ud83e\uddf2", - fitzpatrick_scale: false, - category: "objects" - }, - gun: { - keywords: [ "violence", "weapon", "pistol", "revolver" ], - "char": "\ud83d\udd2b", - fitzpatrick_scale: false, - category: "objects" - }, - bomb: { - keywords: [ "boom", "explode", "explosion", "terrorism" ], - "char": "\ud83d\udca3", - fitzpatrick_scale: false, - category: "objects" - }, - firecracker: { - keywords: [ "dynamite", "boom", "explode", "explosion", "explosive" ], - "char": "\ud83e\udde8", - fitzpatrick_scale: false, - category: "objects" - }, - hocho: { - keywords: [ "knife", "blade", "cutlery", "kitchen", "weapon" ], - "char": "\ud83d\udd2a", - fitzpatrick_scale: false, - category: "objects" - }, - dagger: { - keywords: [ "weapon" ], - "char": "\ud83d\udde1", - fitzpatrick_scale: false, - category: "objects" - }, - crossed_swords: { - keywords: [ "weapon" ], - "char": "\u2694", - fitzpatrick_scale: false, - category: "objects" - }, - shield: { - keywords: [ "protection", "security" ], - "char": "\ud83d\udee1", - fitzpatrick_scale: false, - category: "objects" - }, - smoking: { - keywords: [ "kills", "tobacco", "cigarette", "joint", "smoke" ], - "char": "\ud83d\udeac", - fitzpatrick_scale: false, - category: "objects" - }, - skull_and_crossbones: { - keywords: [ "poison", "danger", "deadly", "scary", "death", "pirate", "evil" ], - "char": "\u2620", - fitzpatrick_scale: false, - category: "objects" - }, - coffin: { - keywords: [ "vampire", "dead", "die", "death", "rip", "graveyard", "cemetery", "casket", "funeral", "box" ], - "char": "\u26b0", - fitzpatrick_scale: false, - category: "objects" - }, - funeral_urn: { - keywords: [ "dead", "die", "death", "rip", "ashes" ], - "char": "\u26b1", - fitzpatrick_scale: false, - category: "objects" - }, - amphora: { - keywords: [ "vase", "jar" ], - "char": "\ud83c\udffa", - fitzpatrick_scale: false, - category: "objects" - }, - crystal_ball: { - keywords: [ "disco", "party", "magic", "circus", "fortune_teller" ], - "char": "\ud83d\udd2e", - fitzpatrick_scale: false, - category: "objects" - }, - prayer_beads: { - keywords: [ "dhikr", "religious" ], - "char": "\ud83d\udcff", - fitzpatrick_scale: false, - category: "objects" - }, - nazar_amulet: { - keywords: [ "bead", "charm" ], - "char": "\ud83e\uddff", - fitzpatrick_scale: false, - category: "objects" - }, - barber: { - keywords: [ "hair", "salon", "style" ], - "char": "\ud83d\udc88", - fitzpatrick_scale: false, - category: "objects" - }, - alembic: { - keywords: [ "distilling", "science", "experiment", "chemistry" ], - "char": "\u2697", - fitzpatrick_scale: false, - category: "objects" - }, - telescope: { - keywords: [ "stars", "space", "zoom", "science", "astronomy" ], - "char": "\ud83d\udd2d", - fitzpatrick_scale: false, - category: "objects" - }, - microscope: { - keywords: [ "laboratory", "experiment", "zoomin", "science", "study" ], - "char": "\ud83d\udd2c", - fitzpatrick_scale: false, - category: "objects" - }, - hole: { - keywords: [ "embarrassing" ], - "char": "\ud83d\udd73", - fitzpatrick_scale: false, - category: "objects" - }, - pill: { - keywords: [ "health", "medicine", "doctor", "pharmacy", "drug" ], - "char": "\ud83d\udc8a", - fitzpatrick_scale: false, - category: "objects" - }, - syringe: { - keywords: [ "health", "hospital", "drugs", "blood", "medicine", "needle", "doctor", "nurse" ], - "char": "\ud83d\udc89", - fitzpatrick_scale: false, - category: "objects" - }, - dna: { - keywords: [ "biologist", "genetics", "life" ], - "char": "\ud83e\uddec", - fitzpatrick_scale: false, - category: "objects" - }, - microbe: { - keywords: [ "amoeba", "bacteria", "germs" ], - "char": "\ud83e\udda0", - fitzpatrick_scale: false, - category: "objects" - }, - petri_dish: { - keywords: [ "bacteria", "biology", "culture", "lab" ], - "char": "\ud83e\uddeb", - fitzpatrick_scale: false, - category: "objects" - }, - test_tube: { - keywords: [ "chemistry", "experiment", "lab", "science" ], - "char": "\ud83e\uddea", - fitzpatrick_scale: false, - category: "objects" - }, - thermometer: { - keywords: [ "weather", "temperature", "hot", "cold" ], - "char": "\ud83c\udf21", - fitzpatrick_scale: false, - category: "objects" - }, - broom: { - keywords: [ "cleaning", "sweeping", "witch" ], - "char": "\ud83e\uddf9", - fitzpatrick_scale: false, - category: "objects" - }, - basket: { - keywords: [ "laundry" ], - "char": "\ud83e\uddfa", - fitzpatrick_scale: false, - category: "objects" - }, - toilet_paper: { - keywords: [ "roll" ], - "char": "\ud83e\uddfb", - fitzpatrick_scale: false, - category: "objects" - }, - label: { - keywords: [ "sale", "tag" ], - "char": "\ud83c\udff7", - fitzpatrick_scale: false, - category: "objects" - }, - bookmark: { - keywords: [ "favorite", "label", "save" ], - "char": "\ud83d\udd16", - fitzpatrick_scale: false, - category: "objects" - }, - toilet: { - keywords: [ "restroom", "wc", "washroom", "bathroom", "potty" ], - "char": "\ud83d\udebd", - fitzpatrick_scale: false, - category: "objects" - }, - shower: { - keywords: [ "clean", "water", "bathroom" ], - "char": "\ud83d\udebf", - fitzpatrick_scale: false, - category: "objects" - }, - bathtub: { - keywords: [ "clean", "shower", "bathroom" ], - "char": "\ud83d\udec1", - fitzpatrick_scale: false, - category: "objects" - }, - soap: { - keywords: [ "bar", "bathing", "cleaning", "lather" ], - "char": "\ud83e\uddfc", - fitzpatrick_scale: false, - category: "objects" - }, - sponge: { - keywords: [ "absorbing", "cleaning", "porous" ], - "char": "\ud83e\uddfd", - fitzpatrick_scale: false, - category: "objects" - }, - lotion_bottle: { - keywords: [ "moisturizer", "sunscreen" ], - "char": "\ud83e\uddf4", - fitzpatrick_scale: false, - category: "objects" - }, - key: { - keywords: [ "lock", "door", "password" ], - "char": "\ud83d\udd11", - fitzpatrick_scale: false, - category: "objects" - }, - old_key: { - keywords: [ "lock", "door", "password" ], - "char": "\ud83d\udddd", - fitzpatrick_scale: false, - category: "objects" - }, - couch_and_lamp: { - keywords: [ "read", "chill" ], - "char": "\ud83d\udecb", - fitzpatrick_scale: false, - category: "objects" - }, - sleeping_bed: { - keywords: [ "bed", "rest" ], - "char": "\ud83d\udecc", - fitzpatrick_scale: true, - category: "objects" - }, - bed: { - keywords: [ "sleep", "rest" ], - "char": "\ud83d\udecf", - fitzpatrick_scale: false, - category: "objects" - }, - door: { - keywords: [ "house", "entry", "exit" ], - "char": "\ud83d\udeaa", - fitzpatrick_scale: false, - category: "objects" - }, - bellhop_bell: { - keywords: [ "service" ], - "char": "\ud83d\udece", - fitzpatrick_scale: false, - category: "objects" - }, - teddy_bear: { - keywords: [ "plush", "stuffed" ], - "char": "\ud83e\uddf8", - fitzpatrick_scale: false, - category: "objects" - }, - framed_picture: { - keywords: [ "photography" ], - "char": "\ud83d\uddbc", - fitzpatrick_scale: false, - category: "objects" - }, - world_map: { - keywords: [ "location", "direction" ], - "char": "\ud83d\uddfa", - fitzpatrick_scale: false, - category: "objects" - }, - parasol_on_ground: { - keywords: [ "weather", "summer" ], - "char": "\u26f1", - fitzpatrick_scale: false, - category: "objects" - }, - moyai: { - keywords: [ "rock", "easter island", "moai" ], - "char": "\ud83d\uddff", - fitzpatrick_scale: false, - category: "objects" - }, - shopping: { - keywords: [ "mall", "buy", "purchase" ], - "char": "\ud83d\udecd", - fitzpatrick_scale: false, - category: "objects" - }, - shopping_cart: { - keywords: [ "trolley" ], - "char": "\ud83d\uded2", - fitzpatrick_scale: false, - category: "objects" - }, - balloon: { - keywords: [ "party", "celebration", "birthday", "circus" ], - "char": "\ud83c\udf88", - fitzpatrick_scale: false, - category: "objects" - }, - flags: { - keywords: [ "fish", "japanese", "koinobori", "carp", "banner" ], - "char": "\ud83c\udf8f", - fitzpatrick_scale: false, - category: "objects" - }, - ribbon: { - keywords: [ "decoration", "pink", "girl", "bowtie" ], - "char": "\ud83c\udf80", - fitzpatrick_scale: false, - category: "objects" - }, - gift: { - keywords: [ "present", "birthday", "christmas", "xmas" ], - "char": "\ud83c\udf81", - fitzpatrick_scale: false, - category: "objects" - }, - confetti_ball: { - keywords: [ "festival", "party", "birthday", "circus" ], - "char": "\ud83c\udf8a", - fitzpatrick_scale: false, - category: "objects" - }, - tada: { - keywords: [ "party", "congratulations", "birthday", "magic", "circus", "celebration" ], - "char": "\ud83c\udf89", - fitzpatrick_scale: false, - category: "objects" - }, - dolls: { - keywords: [ "japanese", "toy", "kimono" ], - "char": "\ud83c\udf8e", - fitzpatrick_scale: false, - category: "objects" - }, - wind_chime: { - keywords: [ "nature", "ding", "spring", "bell" ], - "char": "\ud83c\udf90", - fitzpatrick_scale: false, - category: "objects" - }, - crossed_flags: { - keywords: [ "japanese", "nation", "country", "border" ], - "char": "\ud83c\udf8c", - fitzpatrick_scale: false, - category: "objects" - }, - izakaya_lantern: { - keywords: [ "light", "paper", "halloween", "spooky" ], - "char": "\ud83c\udfee", - fitzpatrick_scale: false, - category: "objects" - }, - red_envelope: { - keywords: [ "gift" ], - "char": "\ud83e\udde7", - fitzpatrick_scale: false, - category: "objects" - }, - email: { - keywords: [ "letter", "postal", "inbox", "communication" ], - "char": "\u2709\ufe0f", - fitzpatrick_scale: false, - category: "objects" - }, - envelope_with_arrow: { - keywords: [ "email", "communication" ], - "char": "\ud83d\udce9", - fitzpatrick_scale: false, - category: "objects" - }, - incoming_envelope: { - keywords: [ "email", "inbox" ], - "char": "\ud83d\udce8", - fitzpatrick_scale: false, - category: "objects" - }, - "e-mail": { - keywords: [ "communication", "inbox" ], - "char": "\ud83d\udce7", - fitzpatrick_scale: false, - category: "objects" - }, - love_letter: { - keywords: [ "email", "like", "affection", "envelope", "valentines" ], - "char": "\ud83d\udc8c", - fitzpatrick_scale: false, - category: "objects" - }, - postbox: { - keywords: [ "email", "letter", "envelope" ], - "char": "\ud83d\udcee", - fitzpatrick_scale: false, - category: "objects" - }, - mailbox_closed: { - keywords: [ "email", "communication", "inbox" ], - "char": "\ud83d\udcea", - fitzpatrick_scale: false, - category: "objects" - }, - mailbox: { - keywords: [ "email", "inbox", "communication" ], - "char": "\ud83d\udceb", - fitzpatrick_scale: false, - category: "objects" - }, - mailbox_with_mail: { - keywords: [ "email", "inbox", "communication" ], - "char": "\ud83d\udcec", - fitzpatrick_scale: false, - category: "objects" - }, - mailbox_with_no_mail: { - keywords: [ "email", "inbox" ], - "char": "\ud83d\udced", - fitzpatrick_scale: false, - category: "objects" - }, - "package": { - keywords: [ "mail", "gift", "cardboard", "box", "moving" ], - "char": "\ud83d\udce6", - fitzpatrick_scale: false, - category: "objects" - }, - postal_horn: { - keywords: [ "instrument", "music" ], - "char": "\ud83d\udcef", - fitzpatrick_scale: false, - category: "objects" - }, - inbox_tray: { - keywords: [ "email", "documents" ], - "char": "\ud83d\udce5", - fitzpatrick_scale: false, - category: "objects" - }, - outbox_tray: { - keywords: [ "inbox", "email" ], - "char": "\ud83d\udce4", - fitzpatrick_scale: false, - category: "objects" - }, - scroll: { - keywords: [ "documents", "ancient", "history", "paper" ], - "char": "\ud83d\udcdc", - fitzpatrick_scale: false, - category: "objects" - }, - page_with_curl: { - keywords: [ "documents", "office", "paper" ], - "char": "\ud83d\udcc3", - fitzpatrick_scale: false, - category: "objects" - }, - bookmark_tabs: { - keywords: [ "favorite", "save", "order", "tidy" ], - "char": "\ud83d\udcd1", - fitzpatrick_scale: false, - category: "objects" - }, - receipt: { - keywords: [ "accounting", "expenses" ], - "char": "\ud83e\uddfe", - fitzpatrick_scale: false, - category: "objects" - }, - bar_chart: { - keywords: [ "graph", "presentation", "stats" ], - "char": "\ud83d\udcca", - fitzpatrick_scale: false, - category: "objects" - }, - chart_with_upwards_trend: { - keywords: [ "graph", "presentation", "stats", "recovery", "business", "economics", "money", "sales", "good", "success" ], - "char": "\ud83d\udcc8", - fitzpatrick_scale: false, - category: "objects" - }, - chart_with_downwards_trend: { - keywords: [ "graph", "presentation", "stats", "recession", "business", "economics", "money", "sales", "bad", "failure" ], - "char": "\ud83d\udcc9", - fitzpatrick_scale: false, - category: "objects" - }, - page_facing_up: { - keywords: [ "documents", "office", "paper", "information" ], - "char": "\ud83d\udcc4", - fitzpatrick_scale: false, - category: "objects" - }, - date: { - keywords: [ "calendar", "schedule" ], - "char": "\ud83d\udcc5", - fitzpatrick_scale: false, - category: "objects" - }, - calendar: { - keywords: [ "schedule", "date", "planning" ], - "char": "\ud83d\udcc6", - fitzpatrick_scale: false, - category: "objects" - }, - spiral_calendar: { - keywords: [ "date", "schedule", "planning" ], - "char": "\ud83d\uddd3", - fitzpatrick_scale: false, - category: "objects" - }, - card_index: { - keywords: [ "business", "stationery" ], - "char": "\ud83d\udcc7", - fitzpatrick_scale: false, - category: "objects" - }, - card_file_box: { - keywords: [ "business", "stationery" ], - "char": "\ud83d\uddc3", - fitzpatrick_scale: false, - category: "objects" - }, - ballot_box: { - keywords: [ "election", "vote" ], - "char": "\ud83d\uddf3", - fitzpatrick_scale: false, - category: "objects" - }, - file_cabinet: { - keywords: [ "filing", "organizing" ], - "char": "\ud83d\uddc4", - fitzpatrick_scale: false, - category: "objects" - }, - clipboard: { - keywords: [ "stationery", "documents" ], - "char": "\ud83d\udccb", - fitzpatrick_scale: false, - category: "objects" - }, - spiral_notepad: { - keywords: [ "memo", "stationery" ], - "char": "\ud83d\uddd2", - fitzpatrick_scale: false, - category: "objects" - }, - file_folder: { - keywords: [ "documents", "business", "office" ], - "char": "\ud83d\udcc1", - fitzpatrick_scale: false, - category: "objects" - }, - open_file_folder: { - keywords: [ "documents", "load" ], - "char": "\ud83d\udcc2", - fitzpatrick_scale: false, - category: "objects" - }, - card_index_dividers: { - keywords: [ "organizing", "business", "stationery" ], - "char": "\ud83d\uddc2", - fitzpatrick_scale: false, - category: "objects" - }, - newspaper_roll: { - keywords: [ "press", "headline" ], - "char": "\ud83d\uddde", - fitzpatrick_scale: false, - category: "objects" - }, - newspaper: { - keywords: [ "press", "headline" ], - "char": "\ud83d\udcf0", - fitzpatrick_scale: false, - category: "objects" - }, - notebook: { - keywords: [ "stationery", "record", "notes", "paper", "study" ], - "char": "\ud83d\udcd3", - fitzpatrick_scale: false, - category: "objects" - }, - closed_book: { - keywords: [ "read", "library", "knowledge", "textbook", "learn" ], - "char": "\ud83d\udcd5", - fitzpatrick_scale: false, - category: "objects" - }, - green_book: { - keywords: [ "read", "library", "knowledge", "study" ], - "char": "\ud83d\udcd7", - fitzpatrick_scale: false, - category: "objects" - }, - blue_book: { - keywords: [ "read", "library", "knowledge", "learn", "study" ], - "char": "\ud83d\udcd8", - fitzpatrick_scale: false, - category: "objects" - }, - orange_book: { - keywords: [ "read", "library", "knowledge", "textbook", "study" ], - "char": "\ud83d\udcd9", - fitzpatrick_scale: false, - category: "objects" - }, - notebook_with_decorative_cover: { - keywords: [ "classroom", "notes", "record", "paper", "study" ], - "char": "\ud83d\udcd4", - fitzpatrick_scale: false, - category: "objects" - }, - ledger: { - keywords: [ "notes", "paper" ], - "char": "\ud83d\udcd2", - fitzpatrick_scale: false, - category: "objects" - }, - books: { - keywords: [ "literature", "library", "study" ], - "char": "\ud83d\udcda", - fitzpatrick_scale: false, - category: "objects" - }, - open_book: { - keywords: [ "book", "read", "library", "knowledge", "literature", "learn", "study" ], - "char": "\ud83d\udcd6", - fitzpatrick_scale: false, - category: "objects" - }, - safety_pin: { - keywords: [ "diaper" ], - "char": "\ud83e\uddf7", - fitzpatrick_scale: false, - category: "objects" - }, - link: { - keywords: [ "rings", "url" ], - "char": "\ud83d\udd17", - fitzpatrick_scale: false, - category: "objects" - }, - paperclip: { - keywords: [ "documents", "stationery" ], - "char": "\ud83d\udcce", - fitzpatrick_scale: false, - category: "objects" - }, - paperclips: { - keywords: [ "documents", "stationery" ], - "char": "\ud83d\udd87", - fitzpatrick_scale: false, - category: "objects" - }, - scissors: { - keywords: [ "stationery", "cut" ], - "char": "\u2702\ufe0f", - fitzpatrick_scale: false, - category: "objects" - }, - triangular_ruler: { - keywords: [ "stationery", "math", "architect", "sketch" ], - "char": "\ud83d\udcd0", - fitzpatrick_scale: false, - category: "objects" - }, - straight_ruler: { - keywords: [ "stationery", "calculate", "length", "math", "school", "drawing", "architect", "sketch" ], - "char": "\ud83d\udccf", - fitzpatrick_scale: false, - category: "objects" - }, - abacus: { - keywords: [ "calculation" ], - "char": "\ud83e\uddee", - fitzpatrick_scale: false, - category: "objects" - }, - pushpin: { - keywords: [ "stationery", "mark", "here" ], - "char": "\ud83d\udccc", - fitzpatrick_scale: false, - category: "objects" - }, - round_pushpin: { - keywords: [ "stationery", "location", "map", "here" ], - "char": "\ud83d\udccd", - fitzpatrick_scale: false, - category: "objects" - }, - triangular_flag_on_post: { - keywords: [ "mark", "milestone", "place" ], - "char": "\ud83d\udea9", - fitzpatrick_scale: false, - category: "objects" - }, - white_flag: { - keywords: [ "losing", "loser", "lost", "surrender", "give up", "fail" ], - "char": "\ud83c\udff3", - fitzpatrick_scale: false, - category: "objects" - }, - black_flag: { - keywords: [ "pirate" ], - "char": "\ud83c\udff4", - fitzpatrick_scale: false, - category: "objects" - }, - rainbow_flag: { - keywords: [ "flag", "rainbow", "pride", "gay", "lgbt", "glbt", "queer", "homosexual", "lesbian", "bisexual", "transgender" ], - "char": "\ud83c\udff3\ufe0f\u200d\ud83c\udf08", - fitzpatrick_scale: false, - category: "objects" - }, - closed_lock_with_key: { - keywords: [ "security", "privacy" ], - "char": "\ud83d\udd10", - fitzpatrick_scale: false, - category: "objects" - }, - lock: { - keywords: [ "security", "password", "padlock" ], - "char": "\ud83d\udd12", - fitzpatrick_scale: false, - category: "objects" - }, - unlock: { - keywords: [ "privacy", "security" ], - "char": "\ud83d\udd13", - fitzpatrick_scale: false, - category: "objects" - }, - lock_with_ink_pen: { - keywords: [ "security", "secret" ], - "char": "\ud83d\udd0f", - fitzpatrick_scale: false, - category: "objects" - }, - pen: { - keywords: [ "stationery", "writing", "write" ], - "char": "\ud83d\udd8a", - fitzpatrick_scale: false, - category: "objects" - }, - fountain_pen: { - keywords: [ "stationery", "writing", "write" ], - "char": "\ud83d\udd8b", - fitzpatrick_scale: false, - category: "objects" - }, - black_nib: { - keywords: [ "pen", "stationery", "writing", "write" ], - "char": "\u2712\ufe0f", - fitzpatrick_scale: false, - category: "objects" - }, - memo: { - keywords: [ "write", "documents", "stationery", "pencil", "paper", "writing", "legal", "exam", "quiz", "test", "study", "compose" ], - "char": "\ud83d\udcdd", - fitzpatrick_scale: false, - category: "objects" - }, - pencil2: { - keywords: [ "stationery", "write", "paper", "writing", "school", "study" ], - "char": "\u270f\ufe0f", - fitzpatrick_scale: false, - category: "objects" - }, - crayon: { - keywords: [ "drawing", "creativity" ], - "char": "\ud83d\udd8d", - fitzpatrick_scale: false, - category: "objects" - }, - paintbrush: { - keywords: [ "drawing", "creativity", "art" ], - "char": "\ud83d\udd8c", - fitzpatrick_scale: false, - category: "objects" - }, - mag: { - keywords: [ "search", "zoom", "find", "detective" ], - "char": "\ud83d\udd0d", - fitzpatrick_scale: false, - category: "objects" - }, - mag_right: { - keywords: [ "search", "zoom", "find", "detective" ], - "char": "\ud83d\udd0e", - fitzpatrick_scale: false, - category: "objects" - }, - heart: { - keywords: [ "love", "like", "valentines" ], - "char": "\u2764\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - orange_heart: { - keywords: [ "love", "like", "affection", "valentines" ], - "char": "\ud83e\udde1", - fitzpatrick_scale: false, - category: "symbols" - }, - yellow_heart: { - keywords: [ "love", "like", "affection", "valentines" ], - "char": "\ud83d\udc9b", - fitzpatrick_scale: false, - category: "symbols" - }, - green_heart: { - keywords: [ "love", "like", "affection", "valentines" ], - "char": "\ud83d\udc9a", - fitzpatrick_scale: false, - category: "symbols" - }, - blue_heart: { - keywords: [ "love", "like", "affection", "valentines" ], - "char": "\ud83d\udc99", - fitzpatrick_scale: false, - category: "symbols" - }, - purple_heart: { - keywords: [ "love", "like", "affection", "valentines" ], - "char": "\ud83d\udc9c", - fitzpatrick_scale: false, - category: "symbols" - }, - black_heart: { - keywords: [ "evil" ], - "char": "\ud83d\udda4", - fitzpatrick_scale: false, - category: "symbols" - }, - broken_heart: { - keywords: [ "sad", "sorry", "break", "heart", "heartbreak" ], - "char": "\ud83d\udc94", - fitzpatrick_scale: false, - category: "symbols" - }, - heavy_heart_exclamation: { - keywords: [ "decoration", "love" ], - "char": "\u2763", - fitzpatrick_scale: false, - category: "symbols" - }, - two_hearts: { - keywords: [ "love", "like", "affection", "valentines", "heart" ], - "char": "\ud83d\udc95", - fitzpatrick_scale: false, - category: "symbols" - }, - revolving_hearts: { - keywords: [ "love", "like", "affection", "valentines" ], - "char": "\ud83d\udc9e", - fitzpatrick_scale: false, - category: "symbols" - }, - heartbeat: { - keywords: [ "love", "like", "affection", "valentines", "pink", "heart" ], - "char": "\ud83d\udc93", - fitzpatrick_scale: false, - category: "symbols" - }, - heartpulse: { - keywords: [ "like", "love", "affection", "valentines", "pink" ], - "char": "\ud83d\udc97", - fitzpatrick_scale: false, - category: "symbols" - }, - sparkling_heart: { - keywords: [ "love", "like", "affection", "valentines" ], - "char": "\ud83d\udc96", - fitzpatrick_scale: false, - category: "symbols" - }, - cupid: { - keywords: [ "love", "like", "heart", "affection", "valentines" ], - "char": "\ud83d\udc98", - fitzpatrick_scale: false, - category: "symbols" - }, - gift_heart: { - keywords: [ "love", "valentines" ], - "char": "\ud83d\udc9d", - fitzpatrick_scale: false, - category: "symbols" - }, - heart_decoration: { - keywords: [ "purple-square", "love", "like" ], - "char": "\ud83d\udc9f", - fitzpatrick_scale: false, - category: "symbols" - }, - peace_symbol: { - keywords: [ "hippie" ], - "char": "\u262e", - fitzpatrick_scale: false, - category: "symbols" - }, - latin_cross: { - keywords: [ "christianity" ], - "char": "\u271d", - fitzpatrick_scale: false, - category: "symbols" - }, - star_and_crescent: { - keywords: [ "islam" ], - "char": "\u262a", - fitzpatrick_scale: false, - category: "symbols" - }, - om: { - keywords: [ "hinduism", "buddhism", "sikhism", "jainism" ], - "char": "\ud83d\udd49", - fitzpatrick_scale: false, - category: "symbols" - }, - wheel_of_dharma: { - keywords: [ "hinduism", "buddhism", "sikhism", "jainism" ], - "char": "\u2638", - fitzpatrick_scale: false, - category: "symbols" - }, - star_of_david: { - keywords: [ "judaism" ], - "char": "\u2721", - fitzpatrick_scale: false, - category: "symbols" - }, - six_pointed_star: { - keywords: [ "purple-square", "religion", "jewish", "hexagram" ], - "char": "\ud83d\udd2f", - fitzpatrick_scale: false, - category: "symbols" - }, - menorah: { - keywords: [ "hanukkah", "candles", "jewish" ], - "char": "\ud83d\udd4e", - fitzpatrick_scale: false, - category: "symbols" - }, - yin_yang: { - keywords: [ "balance" ], - "char": "\u262f", - fitzpatrick_scale: false, - category: "symbols" - }, - orthodox_cross: { - keywords: [ "suppedaneum", "religion" ], - "char": "\u2626", - fitzpatrick_scale: false, - category: "symbols" - }, - place_of_worship: { - keywords: [ "religion", "church", "temple", "prayer" ], - "char": "\ud83d\uded0", - fitzpatrick_scale: false, - category: "symbols" - }, - ophiuchus: { - keywords: [ "sign", "purple-square", "constellation", "astrology" ], - "char": "\u26ce", - fitzpatrick_scale: false, - category: "symbols" - }, - aries: { - keywords: [ "sign", "purple-square", "zodiac", "astrology" ], - "char": "\u2648", - fitzpatrick_scale: false, - category: "symbols" - }, - taurus: { - keywords: [ "purple-square", "sign", "zodiac", "astrology" ], - "char": "\u2649", - fitzpatrick_scale: false, - category: "symbols" - }, - gemini: { - keywords: [ "sign", "zodiac", "purple-square", "astrology" ], - "char": "\u264a", - fitzpatrick_scale: false, - category: "symbols" - }, - cancer: { - keywords: [ "sign", "zodiac", "purple-square", "astrology" ], - "char": "\u264b", - fitzpatrick_scale: false, - category: "symbols" - }, - leo: { - keywords: [ "sign", "purple-square", "zodiac", "astrology" ], - "char": "\u264c", - fitzpatrick_scale: false, - category: "symbols" - }, - virgo: { - keywords: [ "sign", "zodiac", "purple-square", "astrology" ], - "char": "\u264d", - fitzpatrick_scale: false, - category: "symbols" - }, - libra: { - keywords: [ "sign", "purple-square", "zodiac", "astrology" ], - "char": "\u264e", - fitzpatrick_scale: false, - category: "symbols" - }, - scorpius: { - keywords: [ "sign", "zodiac", "purple-square", "astrology", "scorpio" ], - "char": "\u264f", - fitzpatrick_scale: false, - category: "symbols" - }, - sagittarius: { - keywords: [ "sign", "zodiac", "purple-square", "astrology" ], - "char": "\u2650", - fitzpatrick_scale: false, - category: "symbols" - }, - capricorn: { - keywords: [ "sign", "zodiac", "purple-square", "astrology" ], - "char": "\u2651", - fitzpatrick_scale: false, - category: "symbols" - }, - aquarius: { - keywords: [ "sign", "purple-square", "zodiac", "astrology" ], - "char": "\u2652", - fitzpatrick_scale: false, - category: "symbols" - }, - pisces: { - keywords: [ "purple-square", "sign", "zodiac", "astrology" ], - "char": "\u2653", - fitzpatrick_scale: false, - category: "symbols" - }, - id: { - keywords: [ "purple-square", "words" ], - "char": "\ud83c\udd94", - fitzpatrick_scale: false, - category: "symbols" - }, - atom_symbol: { - keywords: [ "science", "physics", "chemistry" ], - "char": "\u269b", - fitzpatrick_scale: false, - category: "symbols" - }, - u7a7a: { - keywords: [ "kanji", "japanese", "chinese", "empty", "sky", "blue-square" ], - "char": "\ud83c\ude33", - fitzpatrick_scale: false, - category: "symbols" - }, - u5272: { - keywords: [ "cut", "divide", "chinese", "kanji", "pink-square" ], - "char": "\ud83c\ude39", - fitzpatrick_scale: false, - category: "symbols" - }, - radioactive: { - keywords: [ "nuclear", "danger" ], - "char": "\u2622", - fitzpatrick_scale: false, - category: "symbols" - }, - biohazard: { - keywords: [ "danger" ], - "char": "\u2623", - fitzpatrick_scale: false, - category: "symbols" - }, - mobile_phone_off: { - keywords: [ "mute", "orange-square", "silence", "quiet" ], - "char": "\ud83d\udcf4", - fitzpatrick_scale: false, - category: "symbols" - }, - vibration_mode: { - keywords: [ "orange-square", "phone" ], - "char": "\ud83d\udcf3", - fitzpatrick_scale: false, - category: "symbols" - }, - u6709: { - keywords: [ "orange-square", "chinese", "have", "kanji" ], - "char": "\ud83c\ude36", - fitzpatrick_scale: false, - category: "symbols" - }, - u7121: { - keywords: [ "nothing", "chinese", "kanji", "japanese", "orange-square" ], - "char": "\ud83c\ude1a", - fitzpatrick_scale: false, - category: "symbols" - }, - u7533: { - keywords: [ "chinese", "japanese", "kanji", "orange-square" ], - "char": "\ud83c\ude38", - fitzpatrick_scale: false, - category: "symbols" - }, - u55b6: { - keywords: [ "japanese", "opening hours", "orange-square" ], - "char": "\ud83c\ude3a", - fitzpatrick_scale: false, - category: "symbols" - }, - u6708: { - keywords: [ "chinese", "month", "moon", "japanese", "orange-square", "kanji" ], - "char": "\ud83c\ude37\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - eight_pointed_black_star: { - keywords: [ "orange-square", "shape", "polygon" ], - "char": "\u2734\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - vs: { - keywords: [ "words", "orange-square" ], - "char": "\ud83c\udd9a", - fitzpatrick_scale: false, - category: "symbols" - }, - accept: { - keywords: [ "ok", "good", "chinese", "kanji", "agree", "yes", "orange-circle" ], - "char": "\ud83c\ude51", - fitzpatrick_scale: false, - category: "symbols" - }, - white_flower: { - keywords: [ "japanese", "spring" ], - "char": "\ud83d\udcae", - fitzpatrick_scale: false, - category: "symbols" - }, - ideograph_advantage: { - keywords: [ "chinese", "kanji", "obtain", "get", "circle" ], - "char": "\ud83c\ude50", - fitzpatrick_scale: false, - category: "symbols" - }, - secret: { - keywords: [ "privacy", "chinese", "sshh", "kanji", "red-circle" ], - "char": "\u3299\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - congratulations: { - keywords: [ "chinese", "kanji", "japanese", "red-circle" ], - "char": "\u3297\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - u5408: { - keywords: [ "japanese", "chinese", "join", "kanji", "red-square" ], - "char": "\ud83c\ude34", - fitzpatrick_scale: false, - category: "symbols" - }, - u6e80: { - keywords: [ "full", "chinese", "japanese", "red-square", "kanji" ], - "char": "\ud83c\ude35", - fitzpatrick_scale: false, - category: "symbols" - }, - u7981: { - keywords: [ "kanji", "japanese", "chinese", "forbidden", "limit", "restricted", "red-square" ], - "char": "\ud83c\ude32", - fitzpatrick_scale: false, - category: "symbols" - }, - a: { - keywords: [ "red-square", "alphabet", "letter" ], - "char": "\ud83c\udd70\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - b: { - keywords: [ "red-square", "alphabet", "letter" ], - "char": "\ud83c\udd71\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - ab: { - keywords: [ "red-square", "alphabet" ], - "char": "\ud83c\udd8e", - fitzpatrick_scale: false, - category: "symbols" - }, - cl: { - keywords: [ "alphabet", "words", "red-square" ], - "char": "\ud83c\udd91", - fitzpatrick_scale: false, - category: "symbols" - }, - o2: { - keywords: [ "alphabet", "red-square", "letter" ], - "char": "\ud83c\udd7e\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - sos: { - keywords: [ "help", "red-square", "words", "emergency", "911" ], - "char": "\ud83c\udd98", - fitzpatrick_scale: false, - category: "symbols" - }, - no_entry: { - keywords: [ "limit", "security", "privacy", "bad", "denied", "stop", "circle" ], - "char": "\u26d4", - fitzpatrick_scale: false, - category: "symbols" - }, - name_badge: { - keywords: [ "fire", "forbid" ], - "char": "\ud83d\udcdb", - fitzpatrick_scale: false, - category: "symbols" - }, - no_entry_sign: { - keywords: [ "forbid", "stop", "limit", "denied", "disallow", "circle" ], - "char": "\ud83d\udeab", - fitzpatrick_scale: false, - category: "symbols" - }, - x: { - keywords: [ "no", "delete", "remove", "cancel", "red" ], - "char": "\u274c", - fitzpatrick_scale: false, - category: "symbols" - }, - o: { - keywords: [ "circle", "round" ], - "char": "\u2b55", - fitzpatrick_scale: false, - category: "symbols" - }, - stop_sign: { - keywords: [ "stop" ], - "char": "\ud83d\uded1", - fitzpatrick_scale: false, - category: "symbols" - }, - anger: { - keywords: [ "angry", "mad" ], - "char": "\ud83d\udca2", - fitzpatrick_scale: false, - category: "symbols" - }, - hotsprings: { - keywords: [ "bath", "warm", "relax" ], - "char": "\u2668\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - no_pedestrians: { - keywords: [ "rules", "crossing", "walking", "circle" ], - "char": "\ud83d\udeb7", - fitzpatrick_scale: false, - category: "symbols" - }, - do_not_litter: { - keywords: [ "trash", "bin", "garbage", "circle" ], - "char": "\ud83d\udeaf", - fitzpatrick_scale: false, - category: "symbols" - }, - no_bicycles: { - keywords: [ "cyclist", "prohibited", "circle" ], - "char": "\ud83d\udeb3", - fitzpatrick_scale: false, - category: "symbols" - }, - "non-potable_water": { - keywords: [ "drink", "faucet", "tap", "circle" ], - "char": "\ud83d\udeb1", - fitzpatrick_scale: false, - category: "symbols" - }, - underage: { - keywords: [ "18", "drink", "pub", "night", "minor", "circle" ], - "char": "\ud83d\udd1e", - fitzpatrick_scale: false, - category: "symbols" - }, - no_mobile_phones: { - keywords: [ "iphone", "mute", "circle" ], - "char": "\ud83d\udcf5", - fitzpatrick_scale: false, - category: "symbols" - }, - exclamation: { - keywords: [ "heavy_exclamation_mark", "danger", "surprise", "punctuation", "wow", "warning" ], - "char": "\u2757", - fitzpatrick_scale: false, - category: "symbols" - }, - grey_exclamation: { - keywords: [ "surprise", "punctuation", "gray", "wow", "warning" ], - "char": "\u2755", - fitzpatrick_scale: false, - category: "symbols" - }, - question: { - keywords: [ "doubt", "confused" ], - "char": "\u2753", - fitzpatrick_scale: false, - category: "symbols" - }, - grey_question: { - keywords: [ "doubts", "gray", "huh", "confused" ], - "char": "\u2754", - fitzpatrick_scale: false, - category: "symbols" - }, - bangbang: { - keywords: [ "exclamation", "surprise" ], - "char": "\u203c\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - interrobang: { - keywords: [ "wat", "punctuation", "surprise" ], - "char": "\u2049\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - 100: { - keywords: [ "score", "perfect", "numbers", "century", "exam", "quiz", "test", "pass", "hundred" ], - "char": "\ud83d\udcaf", - fitzpatrick_scale: false, - category: "symbols" - }, - low_brightness: { - keywords: [ "sun", "afternoon", "warm", "summer" ], - "char": "\ud83d\udd05", - fitzpatrick_scale: false, - category: "symbols" - }, - high_brightness: { - keywords: [ "sun", "light" ], - "char": "\ud83d\udd06", - fitzpatrick_scale: false, - category: "symbols" - }, - trident: { - keywords: [ "weapon", "spear" ], - "char": "\ud83d\udd31", - fitzpatrick_scale: false, - category: "symbols" - }, - fleur_de_lis: { - keywords: [ "decorative", "scout" ], - "char": "\u269c", - fitzpatrick_scale: false, - category: "symbols" - }, - part_alternation_mark: { - keywords: [ "graph", "presentation", "stats", "business", "economics", "bad" ], - "char": "\u303d\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - warning: { - keywords: [ "exclamation", "wip", "alert", "error", "problem", "issue" ], - "char": "\u26a0\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - children_crossing: { - keywords: [ "school", "warning", "danger", "sign", "driving", "yellow-diamond" ], - "char": "\ud83d\udeb8", - fitzpatrick_scale: false, - category: "symbols" - }, - beginner: { - keywords: [ "badge", "shield" ], - "char": "\ud83d\udd30", - fitzpatrick_scale: false, - category: "symbols" - }, - recycle: { - keywords: [ "arrow", "environment", "garbage", "trash" ], - "char": "\u267b\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - u6307: { - keywords: [ "chinese", "point", "green-square", "kanji" ], - "char": "\ud83c\ude2f", - fitzpatrick_scale: false, - category: "symbols" - }, - chart: { - keywords: [ "green-square", "graph", "presentation", "stats" ], - "char": "\ud83d\udcb9", - fitzpatrick_scale: false, - category: "symbols" - }, - sparkle: { - keywords: [ "stars", "green-square", "awesome", "good", "fireworks" ], - "char": "\u2747\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - eight_spoked_asterisk: { - keywords: [ "star", "sparkle", "green-square" ], - "char": "\u2733\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - negative_squared_cross_mark: { - keywords: [ "x", "green-square", "no", "deny" ], - "char": "\u274e", - fitzpatrick_scale: false, - category: "symbols" - }, - white_check_mark: { - keywords: [ "green-square", "ok", "agree", "vote", "election", "answer", "tick" ], - "char": "\u2705", - fitzpatrick_scale: false, - category: "symbols" - }, - diamond_shape_with_a_dot_inside: { - keywords: [ "jewel", "blue", "gem", "crystal", "fancy" ], - "char": "\ud83d\udca0", - fitzpatrick_scale: false, - category: "symbols" - }, - cyclone: { - keywords: [ "weather", "swirl", "blue", "cloud", "vortex", "spiral", "whirlpool", "spin", "tornado", "hurricane", "typhoon" ], - "char": "\ud83c\udf00", - fitzpatrick_scale: false, - category: "symbols" - }, - loop: { - keywords: [ "tape", "cassette" ], - "char": "\u27bf", - fitzpatrick_scale: false, - category: "symbols" - }, - globe_with_meridians: { - keywords: [ "earth", "international", "world", "internet", "interweb", "i18n" ], - "char": "\ud83c\udf10", - fitzpatrick_scale: false, - category: "symbols" - }, - m: { - keywords: [ "alphabet", "blue-circle", "letter" ], - "char": "\u24c2\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - atm: { - keywords: [ "money", "sales", "cash", "blue-square", "payment", "bank" ], - "char": "\ud83c\udfe7", - fitzpatrick_scale: false, - category: "symbols" - }, - sa: { - keywords: [ "japanese", "blue-square", "katakana" ], - "char": "\ud83c\ude02\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - passport_control: { - keywords: [ "custom", "blue-square" ], - "char": "\ud83d\udec2", - fitzpatrick_scale: false, - category: "symbols" - }, - customs: { - keywords: [ "passport", "border", "blue-square" ], - "char": "\ud83d\udec3", - fitzpatrick_scale: false, - category: "symbols" - }, - baggage_claim: { - keywords: [ "blue-square", "airport", "transport" ], - "char": "\ud83d\udec4", - fitzpatrick_scale: false, - category: "symbols" - }, - left_luggage: { - keywords: [ "blue-square", "travel" ], - "char": "\ud83d\udec5", - fitzpatrick_scale: false, - category: "symbols" - }, - wheelchair: { - keywords: [ "blue-square", "disabled", "a11y", "accessibility" ], - "char": "\u267f", - fitzpatrick_scale: false, - category: "symbols" - }, - no_smoking: { - keywords: [ "cigarette", "blue-square", "smell", "smoke" ], - "char": "\ud83d\udead", - fitzpatrick_scale: false, - category: "symbols" - }, - wc: { - keywords: [ "toilet", "restroom", "blue-square" ], - "char": "\ud83d\udebe", - fitzpatrick_scale: false, - category: "symbols" - }, - parking: { - keywords: [ "cars", "blue-square", "alphabet", "letter" ], - "char": "\ud83c\udd7f\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - potable_water: { - keywords: [ "blue-square", "liquid", "restroom", "cleaning", "faucet" ], - "char": "\ud83d\udeb0", - fitzpatrick_scale: false, - category: "symbols" - }, - mens: { - keywords: [ "toilet", "restroom", "wc", "blue-square", "gender", "male" ], - "char": "\ud83d\udeb9", - fitzpatrick_scale: false, - category: "symbols" - }, - womens: { - keywords: [ "purple-square", "woman", "female", "toilet", "loo", "restroom", "gender" ], - "char": "\ud83d\udeba", - fitzpatrick_scale: false, - category: "symbols" - }, - baby_symbol: { - keywords: [ "orange-square", "child" ], - "char": "\ud83d\udebc", - fitzpatrick_scale: false, - category: "symbols" - }, - restroom: { - keywords: [ "blue-square", "toilet", "refresh", "wc", "gender" ], - "char": "\ud83d\udebb", - fitzpatrick_scale: false, - category: "symbols" - }, - put_litter_in_its_place: { - keywords: [ "blue-square", "sign", "human", "info" ], - "char": "\ud83d\udeae", - fitzpatrick_scale: false, - category: "symbols" - }, - cinema: { - keywords: [ "blue-square", "record", "film", "movie", "curtain", "stage", "theater" ], - "char": "\ud83c\udfa6", - fitzpatrick_scale: false, - category: "symbols" - }, - signal_strength: { - keywords: [ "blue-square", "reception", "phone", "internet", "connection", "wifi", "bluetooth", "bars" ], - "char": "\ud83d\udcf6", - fitzpatrick_scale: false, - category: "symbols" - }, - koko: { - keywords: [ "blue-square", "here", "katakana", "japanese", "destination" ], - "char": "\ud83c\ude01", - fitzpatrick_scale: false, - category: "symbols" - }, - ng: { - keywords: [ "blue-square", "words", "shape", "icon" ], - "char": "\ud83c\udd96", - fitzpatrick_scale: false, - category: "symbols" - }, - ok: { - keywords: [ "good", "agree", "yes", "blue-square" ], - "char": "\ud83c\udd97", - fitzpatrick_scale: false, - category: "symbols" - }, - up: { - keywords: [ "blue-square", "above", "high" ], - "char": "\ud83c\udd99", - fitzpatrick_scale: false, - category: "symbols" - }, - cool: { - keywords: [ "words", "blue-square" ], - "char": "\ud83c\udd92", - fitzpatrick_scale: false, - category: "symbols" - }, - "new": { - keywords: [ "blue-square", "words", "start" ], - "char": "\ud83c\udd95", - fitzpatrick_scale: false, - category: "symbols" - }, - free: { - keywords: [ "blue-square", "words" ], - "char": "\ud83c\udd93", - fitzpatrick_scale: false, - category: "symbols" - }, - zero: { - keywords: [ "0", "numbers", "blue-square", "null" ], - "char": "0\ufe0f\u20e3", - fitzpatrick_scale: false, - category: "symbols" - }, - one: { - keywords: [ "blue-square", "numbers", "1" ], - "char": "1\ufe0f\u20e3", - fitzpatrick_scale: false, - category: "symbols" - }, - two: { - keywords: [ "numbers", "2", "prime", "blue-square" ], - "char": "2\ufe0f\u20e3", - fitzpatrick_scale: false, - category: "symbols" - }, - three: { - keywords: [ "3", "numbers", "prime", "blue-square" ], - "char": "3\ufe0f\u20e3", - fitzpatrick_scale: false, - category: "symbols" - }, - four: { - keywords: [ "4", "numbers", "blue-square" ], - "char": "4\ufe0f\u20e3", - fitzpatrick_scale: false, - category: "symbols" - }, - five: { - keywords: [ "5", "numbers", "blue-square", "prime" ], - "char": "5\ufe0f\u20e3", - fitzpatrick_scale: false, - category: "symbols" - }, - six: { - keywords: [ "6", "numbers", "blue-square" ], - "char": "6\ufe0f\u20e3", - fitzpatrick_scale: false, - category: "symbols" - }, - seven: { - keywords: [ "7", "numbers", "blue-square", "prime" ], - "char": "7\ufe0f\u20e3", - fitzpatrick_scale: false, - category: "symbols" - }, - eight: { - keywords: [ "8", "blue-square", "numbers" ], - "char": "8\ufe0f\u20e3", - fitzpatrick_scale: false, - category: "symbols" - }, - nine: { - keywords: [ "blue-square", "numbers", "9" ], - "char": "9\ufe0f\u20e3", - fitzpatrick_scale: false, - category: "symbols" - }, - keycap_ten: { - keywords: [ "numbers", "10", "blue-square" ], - "char": "\ud83d\udd1f", - fitzpatrick_scale: false, - category: "symbols" - }, - asterisk: { - keywords: [ "star", "keycap" ], - "char": "*\u20e3", - fitzpatrick_scale: false, - category: "symbols" - }, - 1234: { - keywords: [ "numbers", "blue-square" ], - "char": "\ud83d\udd22", - fitzpatrick_scale: false, - category: "symbols" - }, - eject_button: { - keywords: [ "blue-square" ], - "char": "\u23cf\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_forward: { - keywords: [ "blue-square", "right", "direction", "play" ], - "char": "\u25b6\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - pause_button: { - keywords: [ "pause", "blue-square" ], - "char": "\u23f8", - fitzpatrick_scale: false, - category: "symbols" - }, - next_track_button: { - keywords: [ "forward", "next", "blue-square" ], - "char": "\u23ed", - fitzpatrick_scale: false, - category: "symbols" - }, - stop_button: { - keywords: [ "blue-square" ], - "char": "\u23f9", - fitzpatrick_scale: false, - category: "symbols" - }, - record_button: { - keywords: [ "blue-square" ], - "char": "\u23fa", - fitzpatrick_scale: false, - category: "symbols" - }, - play_or_pause_button: { - keywords: [ "blue-square", "play", "pause" ], - "char": "\u23ef", - fitzpatrick_scale: false, - category: "symbols" - }, - previous_track_button: { - keywords: [ "backward" ], - "char": "\u23ee", - fitzpatrick_scale: false, - category: "symbols" - }, - fast_forward: { - keywords: [ "blue-square", "play", "speed", "continue" ], - "char": "\u23e9", - fitzpatrick_scale: false, - category: "symbols" - }, - rewind: { - keywords: [ "play", "blue-square" ], - "char": "\u23ea", - fitzpatrick_scale: false, - category: "symbols" - }, - twisted_rightwards_arrows: { - keywords: [ "blue-square", "shuffle", "music", "random" ], - "char": "\ud83d\udd00", - fitzpatrick_scale: false, - category: "symbols" - }, - repeat: { - keywords: [ "loop", "record" ], - "char": "\ud83d\udd01", - fitzpatrick_scale: false, - category: "symbols" - }, - repeat_one: { - keywords: [ "blue-square", "loop" ], - "char": "\ud83d\udd02", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_backward: { - keywords: [ "blue-square", "left", "direction" ], - "char": "\u25c0\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_up_small: { - keywords: [ "blue-square", "triangle", "direction", "point", "forward", "top" ], - "char": "\ud83d\udd3c", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_down_small: { - keywords: [ "blue-square", "direction", "bottom" ], - "char": "\ud83d\udd3d", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_double_up: { - keywords: [ "blue-square", "direction", "top" ], - "char": "\u23eb", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_double_down: { - keywords: [ "blue-square", "direction", "bottom" ], - "char": "\u23ec", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_right: { - keywords: [ "blue-square", "next" ], - "char": "\u27a1\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_left: { - keywords: [ "blue-square", "previous", "back" ], - "char": "\u2b05\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_up: { - keywords: [ "blue-square", "continue", "top", "direction" ], - "char": "\u2b06\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_down: { - keywords: [ "blue-square", "direction", "bottom" ], - "char": "\u2b07\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_upper_right: { - keywords: [ "blue-square", "point", "direction", "diagonal", "northeast" ], - "char": "\u2197\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_lower_right: { - keywords: [ "blue-square", "direction", "diagonal", "southeast" ], - "char": "\u2198\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_lower_left: { - keywords: [ "blue-square", "direction", "diagonal", "southwest" ], - "char": "\u2199\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_upper_left: { - keywords: [ "blue-square", "point", "direction", "diagonal", "northwest" ], - "char": "\u2196\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_up_down: { - keywords: [ "blue-square", "direction", "way", "vertical" ], - "char": "\u2195\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - left_right_arrow: { - keywords: [ "shape", "direction", "horizontal", "sideways" ], - "char": "\u2194\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - arrows_counterclockwise: { - keywords: [ "blue-square", "sync", "cycle" ], - "char": "\ud83d\udd04", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_right_hook: { - keywords: [ "blue-square", "return", "rotate", "direction" ], - "char": "\u21aa\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - leftwards_arrow_with_hook: { - keywords: [ "back", "return", "blue-square", "undo", "enter" ], - "char": "\u21a9\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_heading_up: { - keywords: [ "blue-square", "direction", "top" ], - "char": "\u2934\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - arrow_heading_down: { - keywords: [ "blue-square", "direction", "bottom" ], - "char": "\u2935\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - hash: { - keywords: [ "symbol", "blue-square", "twitter" ], - "char": "#\ufe0f\u20e3", - fitzpatrick_scale: false, - category: "symbols" - }, - information_source: { - keywords: [ "blue-square", "alphabet", "letter" ], - "char": "\u2139\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - abc: { - keywords: [ "blue-square", "alphabet" ], - "char": "\ud83d\udd24", - fitzpatrick_scale: false, - category: "symbols" - }, - abcd: { - keywords: [ "blue-square", "alphabet" ], - "char": "\ud83d\udd21", - fitzpatrick_scale: false, - category: "symbols" - }, - capital_abcd: { - keywords: [ "alphabet", "words", "blue-square" ], - "char": "\ud83d\udd20", - fitzpatrick_scale: false, - category: "symbols" - }, - symbols: { - keywords: [ "blue-square", "music", "note", "ampersand", "percent", "glyphs", "characters" ], - "char": "\ud83d\udd23", - fitzpatrick_scale: false, - category: "symbols" - }, - musical_note: { - keywords: [ "score", "tone", "sound" ], - "char": "\ud83c\udfb5", - fitzpatrick_scale: false, - category: "symbols" - }, - notes: { - keywords: [ "music", "score" ], - "char": "\ud83c\udfb6", - fitzpatrick_scale: false, - category: "symbols" - }, - wavy_dash: { - keywords: [ "draw", "line", "moustache", "mustache", "squiggle", "scribble" ], - "char": "\u3030\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - curly_loop: { - keywords: [ "scribble", "draw", "shape", "squiggle" ], - "char": "\u27b0", - fitzpatrick_scale: false, - category: "symbols" - }, - heavy_check_mark: { - keywords: [ "ok", "nike", "answer", "yes", "tick" ], - "char": "\u2714\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - arrows_clockwise: { - keywords: [ "sync", "cycle", "round", "repeat" ], - "char": "\ud83d\udd03", - fitzpatrick_scale: false, - category: "symbols" - }, - heavy_plus_sign: { - keywords: [ "math", "calculation", "addition", "more", "increase" ], - "char": "\u2795", - fitzpatrick_scale: false, - category: "symbols" - }, - heavy_minus_sign: { - keywords: [ "math", "calculation", "subtract", "less" ], - "char": "\u2796", - fitzpatrick_scale: false, - category: "symbols" - }, - heavy_division_sign: { - keywords: [ "divide", "math", "calculation" ], - "char": "\u2797", - fitzpatrick_scale: false, - category: "symbols" - }, - heavy_multiplication_x: { - keywords: [ "math", "calculation" ], - "char": "\u2716\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - infinity: { - keywords: [ "forever" ], - "char": "\u267e", - fitzpatrick_scale: false, - category: "symbols" - }, - heavy_dollar_sign: { - keywords: [ "money", "sales", "payment", "currency", "buck" ], - "char": "\ud83d\udcb2", - fitzpatrick_scale: false, - category: "symbols" - }, - currency_exchange: { - keywords: [ "money", "sales", "dollar", "travel" ], - "char": "\ud83d\udcb1", - fitzpatrick_scale: false, - category: "symbols" - }, - copyright: { - keywords: [ "ip", "license", "circle", "law", "legal" ], - "char": "\xa9\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - registered: { - keywords: [ "alphabet", "circle" ], - "char": "\xae\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - tm: { - keywords: [ "trademark", "brand", "law", "legal" ], - "char": "\u2122\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - end: { - keywords: [ "words", "arrow" ], - "char": "\ud83d\udd1a", - fitzpatrick_scale: false, - category: "symbols" - }, - back: { - keywords: [ "arrow", "words", "return" ], - "char": "\ud83d\udd19", - fitzpatrick_scale: false, - category: "symbols" - }, - on: { - keywords: [ "arrow", "words" ], - "char": "\ud83d\udd1b", - fitzpatrick_scale: false, - category: "symbols" - }, - top: { - keywords: [ "words", "blue-square" ], - "char": "\ud83d\udd1d", - fitzpatrick_scale: false, - category: "symbols" - }, - soon: { - keywords: [ "arrow", "words" ], - "char": "\ud83d\udd1c", - fitzpatrick_scale: false, - category: "symbols" - }, - ballot_box_with_check: { - keywords: [ "ok", "agree", "confirm", "black-square", "vote", "election", "yes", "tick" ], - "char": "\u2611\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - radio_button: { - keywords: [ "input", "old", "music", "circle" ], - "char": "\ud83d\udd18", - fitzpatrick_scale: false, - category: "symbols" - }, - white_circle: { - keywords: [ "shape", "round" ], - "char": "\u26aa", - fitzpatrick_scale: false, - category: "symbols" - }, - black_circle: { - keywords: [ "shape", "button", "round" ], - "char": "\u26ab", - fitzpatrick_scale: false, - category: "symbols" - }, - red_circle: { - keywords: [ "shape", "error", "danger" ], - "char": "\ud83d\udd34", - fitzpatrick_scale: false, - category: "symbols" - }, - large_blue_circle: { - keywords: [ "shape", "icon", "button" ], - "char": "\ud83d\udd35", - fitzpatrick_scale: false, - category: "symbols" - }, - small_orange_diamond: { - keywords: [ "shape", "jewel", "gem" ], - "char": "\ud83d\udd38", - fitzpatrick_scale: false, - category: "symbols" - }, - small_blue_diamond: { - keywords: [ "shape", "jewel", "gem" ], - "char": "\ud83d\udd39", - fitzpatrick_scale: false, - category: "symbols" - }, - large_orange_diamond: { - keywords: [ "shape", "jewel", "gem" ], - "char": "\ud83d\udd36", - fitzpatrick_scale: false, - category: "symbols" - }, - large_blue_diamond: { - keywords: [ "shape", "jewel", "gem" ], - "char": "\ud83d\udd37", - fitzpatrick_scale: false, - category: "symbols" - }, - small_red_triangle: { - keywords: [ "shape", "direction", "up", "top" ], - "char": "\ud83d\udd3a", - fitzpatrick_scale: false, - category: "symbols" - }, - black_small_square: { - keywords: [ "shape", "icon" ], - "char": "\u25aa\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - white_small_square: { - keywords: [ "shape", "icon" ], - "char": "\u25ab\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - black_large_square: { - keywords: [ "shape", "icon", "button" ], - "char": "\u2b1b", - fitzpatrick_scale: false, - category: "symbols" - }, - white_large_square: { - keywords: [ "shape", "icon", "stone", "button" ], - "char": "\u2b1c", - fitzpatrick_scale: false, - category: "symbols" - }, - small_red_triangle_down: { - keywords: [ "shape", "direction", "bottom" ], - "char": "\ud83d\udd3b", - fitzpatrick_scale: false, - category: "symbols" - }, - black_medium_square: { - keywords: [ "shape", "button", "icon" ], - "char": "\u25fc\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - white_medium_square: { - keywords: [ "shape", "stone", "icon" ], - "char": "\u25fb\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - black_medium_small_square: { - keywords: [ "icon", "shape", "button" ], - "char": "\u25fe", - fitzpatrick_scale: false, - category: "symbols" - }, - white_medium_small_square: { - keywords: [ "shape", "stone", "icon", "button" ], - "char": "\u25fd", - fitzpatrick_scale: false, - category: "symbols" - }, - black_square_button: { - keywords: [ "shape", "input", "frame" ], - "char": "\ud83d\udd32", - fitzpatrick_scale: false, - category: "symbols" - }, - white_square_button: { - keywords: [ "shape", "input" ], - "char": "\ud83d\udd33", - fitzpatrick_scale: false, - category: "symbols" - }, - speaker: { - keywords: [ "sound", "volume", "silence", "broadcast" ], - "char": "\ud83d\udd08", - fitzpatrick_scale: false, - category: "symbols" - }, - sound: { - keywords: [ "volume", "speaker", "broadcast" ], - "char": "\ud83d\udd09", - fitzpatrick_scale: false, - category: "symbols" - }, - loud_sound: { - keywords: [ "volume", "noise", "noisy", "speaker", "broadcast" ], - "char": "\ud83d\udd0a", - fitzpatrick_scale: false, - category: "symbols" - }, - mute: { - keywords: [ "sound", "volume", "silence", "quiet" ], - "char": "\ud83d\udd07", - fitzpatrick_scale: false, - category: "symbols" - }, - mega: { - keywords: [ "sound", "speaker", "volume" ], - "char": "\ud83d\udce3", - fitzpatrick_scale: false, - category: "symbols" - }, - loudspeaker: { - keywords: [ "volume", "sound" ], - "char": "\ud83d\udce2", - fitzpatrick_scale: false, - category: "symbols" - }, - bell: { - keywords: [ "sound", "notification", "christmas", "xmas", "chime" ], - "char": "\ud83d\udd14", - fitzpatrick_scale: false, - category: "symbols" - }, - no_bell: { - keywords: [ "sound", "volume", "mute", "quiet", "silent" ], - "char": "\ud83d\udd15", - fitzpatrick_scale: false, - category: "symbols" - }, - black_joker: { - keywords: [ "poker", "cards", "game", "play", "magic" ], - "char": "\ud83c\udccf", - fitzpatrick_scale: false, - category: "symbols" - }, - mahjong: { - keywords: [ "game", "play", "chinese", "kanji" ], - "char": "\ud83c\udc04", - fitzpatrick_scale: false, - category: "symbols" - }, - spades: { - keywords: [ "poker", "cards", "suits", "magic" ], - "char": "\u2660\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - clubs: { - keywords: [ "poker", "cards", "magic", "suits" ], - "char": "\u2663\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - hearts: { - keywords: [ "poker", "cards", "magic", "suits" ], - "char": "\u2665\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - diamonds: { - keywords: [ "poker", "cards", "magic", "suits" ], - "char": "\u2666\ufe0f", - fitzpatrick_scale: false, - category: "symbols" - }, - flower_playing_cards: { - keywords: [ "game", "sunset", "red" ], - "char": "\ud83c\udfb4", - fitzpatrick_scale: false, - category: "symbols" - }, - thought_balloon: { - keywords: [ "bubble", "cloud", "speech", "thinking", "dream" ], - "char": "\ud83d\udcad", - fitzpatrick_scale: false, - category: "symbols" - }, - right_anger_bubble: { - keywords: [ "caption", "speech", "thinking", "mad" ], - "char": "\ud83d\uddef", - fitzpatrick_scale: false, - category: "symbols" - }, - speech_balloon: { - keywords: [ "bubble", "words", "message", "talk", "chatting" ], - "char": "\ud83d\udcac", - fitzpatrick_scale: false, - category: "symbols" - }, - left_speech_bubble: { - keywords: [ "words", "message", "talk", "chatting" ], - "char": "\ud83d\udde8", - fitzpatrick_scale: false, - category: "symbols" - }, - clock1: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd50", - fitzpatrick_scale: false, - category: "symbols" - }, - clock2: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd51", - fitzpatrick_scale: false, - category: "symbols" - }, - clock3: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd52", - fitzpatrick_scale: false, - category: "symbols" - }, - clock4: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd53", - fitzpatrick_scale: false, - category: "symbols" - }, - clock5: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd54", - fitzpatrick_scale: false, - category: "symbols" - }, - clock6: { - keywords: [ "time", "late", "early", "schedule", "dawn", "dusk" ], - "char": "\ud83d\udd55", - fitzpatrick_scale: false, - category: "symbols" - }, - clock7: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd56", - fitzpatrick_scale: false, - category: "symbols" - }, - clock8: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd57", - fitzpatrick_scale: false, - category: "symbols" - }, - clock9: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd58", - fitzpatrick_scale: false, - category: "symbols" - }, - clock10: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd59", - fitzpatrick_scale: false, - category: "symbols" - }, - clock11: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd5a", - fitzpatrick_scale: false, - category: "symbols" - }, - clock12: { - keywords: [ "time", "noon", "midnight", "midday", "late", "early", "schedule" ], - "char": "\ud83d\udd5b", - fitzpatrick_scale: false, - category: "symbols" - }, - clock130: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd5c", - fitzpatrick_scale: false, - category: "symbols" - }, - clock230: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd5d", - fitzpatrick_scale: false, - category: "symbols" - }, - clock330: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd5e", - fitzpatrick_scale: false, - category: "symbols" - }, - clock430: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd5f", - fitzpatrick_scale: false, - category: "symbols" - }, - clock530: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd60", - fitzpatrick_scale: false, - category: "symbols" - }, - clock630: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd61", - fitzpatrick_scale: false, - category: "symbols" - }, - clock730: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd62", - fitzpatrick_scale: false, - category: "symbols" - }, - clock830: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd63", - fitzpatrick_scale: false, - category: "symbols" - }, - clock930: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd64", - fitzpatrick_scale: false, - category: "symbols" - }, - clock1030: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd65", - fitzpatrick_scale: false, - category: "symbols" - }, - clock1130: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd66", - fitzpatrick_scale: false, - category: "symbols" - }, - clock1230: { - keywords: [ "time", "late", "early", "schedule" ], - "char": "\ud83d\udd67", - fitzpatrick_scale: false, - category: "symbols" - }, - afghanistan: { - keywords: [ "af", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde6\ud83c\uddeb", - fitzpatrick_scale: false, - category: "flags" - }, - aland_islands: { - keywords: [ "\xc5land", "islands", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde6\ud83c\uddfd", - fitzpatrick_scale: false, - category: "flags" - }, - albania: { - keywords: [ "al", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde6\ud83c\uddf1", - fitzpatrick_scale: false, - category: "flags" - }, - algeria: { - keywords: [ "dz", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde9\ud83c\uddff", - fitzpatrick_scale: false, - category: "flags" - }, - american_samoa: { - keywords: [ "american", "ws", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde6\ud83c\uddf8", - fitzpatrick_scale: false, - category: "flags" - }, - andorra: { - keywords: [ "ad", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde6\ud83c\udde9", - fitzpatrick_scale: false, - category: "flags" - }, - angola: { - keywords: [ "ao", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde6\ud83c\uddf4", - fitzpatrick_scale: false, - category: "flags" - }, - anguilla: { - keywords: [ "ai", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde6\ud83c\uddee", - fitzpatrick_scale: false, - category: "flags" - }, - antarctica: { - keywords: [ "aq", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde6\ud83c\uddf6", - fitzpatrick_scale: false, - category: "flags" - }, - antigua_barbuda: { - keywords: [ "antigua", "barbuda", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde6\ud83c\uddec", - fitzpatrick_scale: false, - category: "flags" - }, - argentina: { - keywords: [ "ar", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde6\ud83c\uddf7", - fitzpatrick_scale: false, - category: "flags" - }, - armenia: { - keywords: [ "am", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde6\ud83c\uddf2", - fitzpatrick_scale: false, - category: "flags" - }, - aruba: { - keywords: [ "aw", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde6\ud83c\uddfc", - fitzpatrick_scale: false, - category: "flags" - }, - australia: { - keywords: [ "au", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde6\ud83c\uddfa", - fitzpatrick_scale: false, - category: "flags" - }, - austria: { - keywords: [ "at", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde6\ud83c\uddf9", - fitzpatrick_scale: false, - category: "flags" - }, - azerbaijan: { - keywords: [ "az", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde6\ud83c\uddff", - fitzpatrick_scale: false, - category: "flags" - }, - bahamas: { - keywords: [ "bs", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\uddf8", - fitzpatrick_scale: false, - category: "flags" - }, - bahrain: { - keywords: [ "bh", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\udded", - fitzpatrick_scale: false, - category: "flags" - }, - bangladesh: { - keywords: [ "bd", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\udde9", - fitzpatrick_scale: false, - category: "flags" - }, - barbados: { - keywords: [ "bb", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\udde7", - fitzpatrick_scale: false, - category: "flags" - }, - belarus: { - keywords: [ "by", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\uddfe", - fitzpatrick_scale: false, - category: "flags" - }, - belgium: { - keywords: [ "be", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\uddea", - fitzpatrick_scale: false, - category: "flags" - }, - belize: { - keywords: [ "bz", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\uddff", - fitzpatrick_scale: false, - category: "flags" - }, - benin: { - keywords: [ "bj", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\uddef", - fitzpatrick_scale: false, - category: "flags" - }, - bermuda: { - keywords: [ "bm", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\uddf2", - fitzpatrick_scale: false, - category: "flags" - }, - bhutan: { - keywords: [ "bt", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\uddf9", - fitzpatrick_scale: false, - category: "flags" - }, - bolivia: { - keywords: [ "bo", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\uddf4", - fitzpatrick_scale: false, - category: "flags" - }, - caribbean_netherlands: { - keywords: [ "bonaire", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\uddf6", - fitzpatrick_scale: false, - category: "flags" - }, - bosnia_herzegovina: { - keywords: [ "bosnia", "herzegovina", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\udde6", - fitzpatrick_scale: false, - category: "flags" - }, - botswana: { - keywords: [ "bw", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\uddfc", - fitzpatrick_scale: false, - category: "flags" - }, - brazil: { - keywords: [ "br", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\uddf7", - fitzpatrick_scale: false, - category: "flags" - }, - british_indian_ocean_territory: { - keywords: [ "british", "indian", "ocean", "territory", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddee\ud83c\uddf4", - fitzpatrick_scale: false, - category: "flags" - }, - british_virgin_islands: { - keywords: [ "british", "virgin", "islands", "bvi", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddfb\ud83c\uddec", - fitzpatrick_scale: false, - category: "flags" - }, - brunei: { - keywords: [ "bn", "darussalam", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\uddf3", - fitzpatrick_scale: false, - category: "flags" - }, - bulgaria: { - keywords: [ "bg", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\uddec", - fitzpatrick_scale: false, - category: "flags" - }, - burkina_faso: { - keywords: [ "burkina", "faso", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\uddeb", - fitzpatrick_scale: false, - category: "flags" - }, - burundi: { - keywords: [ "bi", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\uddee", - fitzpatrick_scale: false, - category: "flags" - }, - cape_verde: { - keywords: [ "cabo", "verde", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\uddfb", - fitzpatrick_scale: false, - category: "flags" - }, - cambodia: { - keywords: [ "kh", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf0\ud83c\udded", - fitzpatrick_scale: false, - category: "flags" - }, - cameroon: { - keywords: [ "cm", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\uddf2", - fitzpatrick_scale: false, - category: "flags" - }, - canada: { - keywords: [ "ca", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\udde6", - fitzpatrick_scale: false, - category: "flags" - }, - canary_islands: { - keywords: [ "canary", "islands", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddee\ud83c\udde8", - fitzpatrick_scale: false, - category: "flags" - }, - cayman_islands: { - keywords: [ "cayman", "islands", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf0\ud83c\uddfe", - fitzpatrick_scale: false, - category: "flags" - }, - central_african_republic: { - keywords: [ "central", "african", "republic", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\uddeb", - fitzpatrick_scale: false, - category: "flags" - }, - chad: { - keywords: [ "td", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf9\ud83c\udde9", - fitzpatrick_scale: false, - category: "flags" - }, - chile: { - keywords: [ "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\uddf1", - fitzpatrick_scale: false, - category: "flags" - }, - cn: { - keywords: [ "china", "chinese", "prc", "flag", "country", "nation", "banner" ], - "char": "\ud83c\udde8\ud83c\uddf3", - fitzpatrick_scale: false, - category: "flags" - }, - christmas_island: { - keywords: [ "christmas", "island", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\uddfd", - fitzpatrick_scale: false, - category: "flags" - }, - cocos_islands: { - keywords: [ "cocos", "keeling", "islands", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\udde8", - fitzpatrick_scale: false, - category: "flags" - }, - colombia: { - keywords: [ "co", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\uddf4", - fitzpatrick_scale: false, - category: "flags" - }, - comoros: { - keywords: [ "km", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf0\ud83c\uddf2", - fitzpatrick_scale: false, - category: "flags" - }, - congo_brazzaville: { - keywords: [ "congo", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\uddec", - fitzpatrick_scale: false, - category: "flags" - }, - congo_kinshasa: { - keywords: [ "congo", "democratic", "republic", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\udde9", - fitzpatrick_scale: false, - category: "flags" - }, - cook_islands: { - keywords: [ "cook", "islands", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\uddf0", - fitzpatrick_scale: false, - category: "flags" - }, - costa_rica: { - keywords: [ "costa", "rica", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\uddf7", - fitzpatrick_scale: false, - category: "flags" - }, - croatia: { - keywords: [ "hr", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udded\ud83c\uddf7", - fitzpatrick_scale: false, - category: "flags" - }, - cuba: { - keywords: [ "cu", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\uddfa", - fitzpatrick_scale: false, - category: "flags" - }, - curacao: { - keywords: [ "cura\xe7ao", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\uddfc", - fitzpatrick_scale: false, - category: "flags" - }, - cyprus: { - keywords: [ "cy", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\uddfe", - fitzpatrick_scale: false, - category: "flags" - }, - czech_republic: { - keywords: [ "cz", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\uddff", - fitzpatrick_scale: false, - category: "flags" - }, - denmark: { - keywords: [ "dk", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde9\ud83c\uddf0", - fitzpatrick_scale: false, - category: "flags" - }, - djibouti: { - keywords: [ "dj", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde9\ud83c\uddef", - fitzpatrick_scale: false, - category: "flags" - }, - dominica: { - keywords: [ "dm", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde9\ud83c\uddf2", - fitzpatrick_scale: false, - category: "flags" - }, - dominican_republic: { - keywords: [ "dominican", "republic", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde9\ud83c\uddf4", - fitzpatrick_scale: false, - category: "flags" - }, - ecuador: { - keywords: [ "ec", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddea\ud83c\udde8", - fitzpatrick_scale: false, - category: "flags" - }, - egypt: { - keywords: [ "eg", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddea\ud83c\uddec", - fitzpatrick_scale: false, - category: "flags" - }, - el_salvador: { - keywords: [ "el", "salvador", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\uddfb", - fitzpatrick_scale: false, - category: "flags" - }, - equatorial_guinea: { - keywords: [ "equatorial", "gn", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\uddf6", - fitzpatrick_scale: false, - category: "flags" - }, - eritrea: { - keywords: [ "er", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddea\ud83c\uddf7", - fitzpatrick_scale: false, - category: "flags" - }, - estonia: { - keywords: [ "ee", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddea\ud83c\uddea", - fitzpatrick_scale: false, - category: "flags" - }, - ethiopia: { - keywords: [ "et", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddea\ud83c\uddf9", - fitzpatrick_scale: false, - category: "flags" - }, - eu: { - keywords: [ "european", "union", "flag", "banner" ], - "char": "\ud83c\uddea\ud83c\uddfa", - fitzpatrick_scale: false, - category: "flags" - }, - falkland_islands: { - keywords: [ "falkland", "islands", "malvinas", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddeb\ud83c\uddf0", - fitzpatrick_scale: false, - category: "flags" - }, - faroe_islands: { - keywords: [ "faroe", "islands", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddeb\ud83c\uddf4", - fitzpatrick_scale: false, - category: "flags" - }, - fiji: { - keywords: [ "fj", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddeb\ud83c\uddef", - fitzpatrick_scale: false, - category: "flags" - }, - finland: { - keywords: [ "fi", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddeb\ud83c\uddee", - fitzpatrick_scale: false, - category: "flags" - }, - fr: { - keywords: [ "banner", "flag", "nation", "france", "french", "country" ], - "char": "\ud83c\uddeb\ud83c\uddf7", - fitzpatrick_scale: false, - category: "flags" - }, - french_guiana: { - keywords: [ "french", "guiana", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\uddeb", - fitzpatrick_scale: false, - category: "flags" - }, - french_polynesia: { - keywords: [ "french", "polynesia", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf5\ud83c\uddeb", - fitzpatrick_scale: false, - category: "flags" - }, - french_southern_territories: { - keywords: [ "french", "southern", "territories", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf9\ud83c\uddeb", - fitzpatrick_scale: false, - category: "flags" - }, - gabon: { - keywords: [ "ga", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\udde6", - fitzpatrick_scale: false, - category: "flags" - }, - gambia: { - keywords: [ "gm", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\uddf2", - fitzpatrick_scale: false, - category: "flags" - }, - georgia: { - keywords: [ "ge", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\uddea", - fitzpatrick_scale: false, - category: "flags" - }, - de: { - keywords: [ "german", "nation", "flag", "country", "banner" ], - "char": "\ud83c\udde9\ud83c\uddea", - fitzpatrick_scale: false, - category: "flags" - }, - ghana: { - keywords: [ "gh", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\udded", - fitzpatrick_scale: false, - category: "flags" - }, - gibraltar: { - keywords: [ "gi", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\uddee", - fitzpatrick_scale: false, - category: "flags" - }, - greece: { - keywords: [ "gr", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\uddf7", - fitzpatrick_scale: false, - category: "flags" - }, - greenland: { - keywords: [ "gl", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\uddf1", - fitzpatrick_scale: false, - category: "flags" - }, - grenada: { - keywords: [ "gd", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\udde9", - fitzpatrick_scale: false, - category: "flags" - }, - guadeloupe: { - keywords: [ "gp", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\uddf5", - fitzpatrick_scale: false, - category: "flags" - }, - guam: { - keywords: [ "gu", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\uddfa", - fitzpatrick_scale: false, - category: "flags" - }, - guatemala: { - keywords: [ "gt", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\uddf9", - fitzpatrick_scale: false, - category: "flags" - }, - guernsey: { - keywords: [ "gg", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\uddec", - fitzpatrick_scale: false, - category: "flags" - }, - guinea: { - keywords: [ "gn", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\uddf3", - fitzpatrick_scale: false, - category: "flags" - }, - guinea_bissau: { - keywords: [ "gw", "bissau", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\uddfc", - fitzpatrick_scale: false, - category: "flags" - }, - guyana: { - keywords: [ "gy", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\uddfe", - fitzpatrick_scale: false, - category: "flags" - }, - haiti: { - keywords: [ "ht", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udded\ud83c\uddf9", - fitzpatrick_scale: false, - category: "flags" - }, - honduras: { - keywords: [ "hn", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udded\ud83c\uddf3", - fitzpatrick_scale: false, - category: "flags" - }, - hong_kong: { - keywords: [ "hong", "kong", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udded\ud83c\uddf0", - fitzpatrick_scale: false, - category: "flags" - }, - hungary: { - keywords: [ "hu", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udded\ud83c\uddfa", - fitzpatrick_scale: false, - category: "flags" - }, - iceland: { - keywords: [ "is", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddee\ud83c\uddf8", - fitzpatrick_scale: false, - category: "flags" - }, - india: { - keywords: [ "in", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddee\ud83c\uddf3", - fitzpatrick_scale: false, - category: "flags" - }, - indonesia: { - keywords: [ "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddee\ud83c\udde9", - fitzpatrick_scale: false, - category: "flags" - }, - iran: { - keywords: [ "iran,", "islamic", "republic", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddee\ud83c\uddf7", - fitzpatrick_scale: false, - category: "flags" - }, - iraq: { - keywords: [ "iq", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddee\ud83c\uddf6", - fitzpatrick_scale: false, - category: "flags" - }, - ireland: { - keywords: [ "ie", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddee\ud83c\uddea", - fitzpatrick_scale: false, - category: "flags" - }, - isle_of_man: { - keywords: [ "isle", "man", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddee\ud83c\uddf2", - fitzpatrick_scale: false, - category: "flags" - }, - israel: { - keywords: [ "il", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddee\ud83c\uddf1", - fitzpatrick_scale: false, - category: "flags" - }, - it: { - keywords: [ "italy", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddee\ud83c\uddf9", - fitzpatrick_scale: false, - category: "flags" - }, - cote_divoire: { - keywords: [ "ivory", "coast", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\uddee", - fitzpatrick_scale: false, - category: "flags" - }, - jamaica: { - keywords: [ "jm", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddef\ud83c\uddf2", - fitzpatrick_scale: false, - category: "flags" - }, - jp: { - keywords: [ "japanese", "nation", "flag", "country", "banner" ], - "char": "\ud83c\uddef\ud83c\uddf5", - fitzpatrick_scale: false, - category: "flags" - }, - jersey: { - keywords: [ "je", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddef\ud83c\uddea", - fitzpatrick_scale: false, - category: "flags" - }, - jordan: { - keywords: [ "jo", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddef\ud83c\uddf4", - fitzpatrick_scale: false, - category: "flags" - }, - kazakhstan: { - keywords: [ "kz", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf0\ud83c\uddff", - fitzpatrick_scale: false, - category: "flags" - }, - kenya: { - keywords: [ "ke", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf0\ud83c\uddea", - fitzpatrick_scale: false, - category: "flags" - }, - kiribati: { - keywords: [ "ki", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf0\ud83c\uddee", - fitzpatrick_scale: false, - category: "flags" - }, - kosovo: { - keywords: [ "xk", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddfd\ud83c\uddf0", - fitzpatrick_scale: false, - category: "flags" - }, - kuwait: { - keywords: [ "kw", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf0\ud83c\uddfc", - fitzpatrick_scale: false, - category: "flags" - }, - kyrgyzstan: { - keywords: [ "kg", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf0\ud83c\uddec", - fitzpatrick_scale: false, - category: "flags" - }, - laos: { - keywords: [ "lao", "democratic", "republic", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf1\ud83c\udde6", - fitzpatrick_scale: false, - category: "flags" - }, - latvia: { - keywords: [ "lv", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf1\ud83c\uddfb", - fitzpatrick_scale: false, - category: "flags" - }, - lebanon: { - keywords: [ "lb", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf1\ud83c\udde7", - fitzpatrick_scale: false, - category: "flags" - }, - lesotho: { - keywords: [ "ls", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf1\ud83c\uddf8", - fitzpatrick_scale: false, - category: "flags" - }, - liberia: { - keywords: [ "lr", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf1\ud83c\uddf7", - fitzpatrick_scale: false, - category: "flags" - }, - libya: { - keywords: [ "ly", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf1\ud83c\uddfe", - fitzpatrick_scale: false, - category: "flags" - }, - liechtenstein: { - keywords: [ "li", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf1\ud83c\uddee", - fitzpatrick_scale: false, - category: "flags" - }, - lithuania: { - keywords: [ "lt", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf1\ud83c\uddf9", - fitzpatrick_scale: false, - category: "flags" - }, - luxembourg: { - keywords: [ "lu", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf1\ud83c\uddfa", - fitzpatrick_scale: false, - category: "flags" - }, - macau: { - keywords: [ "macao", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddf4", - fitzpatrick_scale: false, - category: "flags" - }, - macedonia: { - keywords: [ "macedonia,", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddf0", - fitzpatrick_scale: false, - category: "flags" - }, - madagascar: { - keywords: [ "mg", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddec", - fitzpatrick_scale: false, - category: "flags" - }, - malawi: { - keywords: [ "mw", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddfc", - fitzpatrick_scale: false, - category: "flags" - }, - malaysia: { - keywords: [ "my", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddfe", - fitzpatrick_scale: false, - category: "flags" - }, - maldives: { - keywords: [ "mv", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddfb", - fitzpatrick_scale: false, - category: "flags" - }, - mali: { - keywords: [ "ml", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddf1", - fitzpatrick_scale: false, - category: "flags" - }, - malta: { - keywords: [ "mt", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddf9", - fitzpatrick_scale: false, - category: "flags" - }, - marshall_islands: { - keywords: [ "marshall", "islands", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\udded", - fitzpatrick_scale: false, - category: "flags" - }, - martinique: { - keywords: [ "mq", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddf6", - fitzpatrick_scale: false, - category: "flags" - }, - mauritania: { - keywords: [ "mr", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddf7", - fitzpatrick_scale: false, - category: "flags" - }, - mauritius: { - keywords: [ "mu", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddfa", - fitzpatrick_scale: false, - category: "flags" - }, - mayotte: { - keywords: [ "yt", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddfe\ud83c\uddf9", - fitzpatrick_scale: false, - category: "flags" - }, - mexico: { - keywords: [ "mx", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddfd", - fitzpatrick_scale: false, - category: "flags" - }, - micronesia: { - keywords: [ "micronesia,", "federated", "states", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddeb\ud83c\uddf2", - fitzpatrick_scale: false, - category: "flags" - }, - moldova: { - keywords: [ "moldova,", "republic", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\udde9", - fitzpatrick_scale: false, - category: "flags" - }, - monaco: { - keywords: [ "mc", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\udde8", - fitzpatrick_scale: false, - category: "flags" - }, - mongolia: { - keywords: [ "mn", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddf3", - fitzpatrick_scale: false, - category: "flags" - }, - montenegro: { - keywords: [ "me", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddea", - fitzpatrick_scale: false, - category: "flags" - }, - montserrat: { - keywords: [ "ms", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddf8", - fitzpatrick_scale: false, - category: "flags" - }, - morocco: { - keywords: [ "ma", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\udde6", - fitzpatrick_scale: false, - category: "flags" - }, - mozambique: { - keywords: [ "mz", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddff", - fitzpatrick_scale: false, - category: "flags" - }, - myanmar: { - keywords: [ "mm", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddf2", - fitzpatrick_scale: false, - category: "flags" - }, - namibia: { - keywords: [ "na", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf3\ud83c\udde6", - fitzpatrick_scale: false, - category: "flags" - }, - nauru: { - keywords: [ "nr", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf3\ud83c\uddf7", - fitzpatrick_scale: false, - category: "flags" - }, - nepal: { - keywords: [ "np", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf3\ud83c\uddf5", - fitzpatrick_scale: false, - category: "flags" - }, - netherlands: { - keywords: [ "nl", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf3\ud83c\uddf1", - fitzpatrick_scale: false, - category: "flags" - }, - new_caledonia: { - keywords: [ "new", "caledonia", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf3\ud83c\udde8", - fitzpatrick_scale: false, - category: "flags" - }, - new_zealand: { - keywords: [ "new", "zealand", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf3\ud83c\uddff", - fitzpatrick_scale: false, - category: "flags" - }, - nicaragua: { - keywords: [ "ni", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf3\ud83c\uddee", - fitzpatrick_scale: false, - category: "flags" - }, - niger: { - keywords: [ "ne", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf3\ud83c\uddea", - fitzpatrick_scale: false, - category: "flags" - }, - nigeria: { - keywords: [ "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf3\ud83c\uddec", - fitzpatrick_scale: false, - category: "flags" - }, - niue: { - keywords: [ "nu", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf3\ud83c\uddfa", - fitzpatrick_scale: false, - category: "flags" - }, - norfolk_island: { - keywords: [ "norfolk", "island", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf3\ud83c\uddeb", - fitzpatrick_scale: false, - category: "flags" - }, - northern_mariana_islands: { - keywords: [ "northern", "mariana", "islands", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf2\ud83c\uddf5", - fitzpatrick_scale: false, - category: "flags" - }, - north_korea: { - keywords: [ "north", "korea", "nation", "flag", "country", "banner" ], - "char": "\ud83c\uddf0\ud83c\uddf5", - fitzpatrick_scale: false, - category: "flags" - }, - norway: { - keywords: [ "no", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf3\ud83c\uddf4", - fitzpatrick_scale: false, - category: "flags" - }, - oman: { - keywords: [ "om_symbol", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf4\ud83c\uddf2", - fitzpatrick_scale: false, - category: "flags" - }, - pakistan: { - keywords: [ "pk", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf5\ud83c\uddf0", - fitzpatrick_scale: false, - category: "flags" - }, - palau: { - keywords: [ "pw", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf5\ud83c\uddfc", - fitzpatrick_scale: false, - category: "flags" - }, - palestinian_territories: { - keywords: [ "palestine", "palestinian", "territories", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf5\ud83c\uddf8", - fitzpatrick_scale: false, - category: "flags" - }, - panama: { - keywords: [ "pa", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf5\ud83c\udde6", - fitzpatrick_scale: false, - category: "flags" - }, - papua_new_guinea: { - keywords: [ "papua", "new", "guinea", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf5\ud83c\uddec", - fitzpatrick_scale: false, - category: "flags" - }, - paraguay: { - keywords: [ "py", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf5\ud83c\uddfe", - fitzpatrick_scale: false, - category: "flags" - }, - peru: { - keywords: [ "pe", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf5\ud83c\uddea", - fitzpatrick_scale: false, - category: "flags" - }, - philippines: { - keywords: [ "ph", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf5\ud83c\udded", - fitzpatrick_scale: false, - category: "flags" - }, - pitcairn_islands: { - keywords: [ "pitcairn", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf5\ud83c\uddf3", - fitzpatrick_scale: false, - category: "flags" - }, - poland: { - keywords: [ "pl", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf5\ud83c\uddf1", - fitzpatrick_scale: false, - category: "flags" - }, - portugal: { - keywords: [ "pt", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf5\ud83c\uddf9", - fitzpatrick_scale: false, - category: "flags" - }, - puerto_rico: { - keywords: [ "puerto", "rico", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf5\ud83c\uddf7", - fitzpatrick_scale: false, - category: "flags" - }, - qatar: { - keywords: [ "qa", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf6\ud83c\udde6", - fitzpatrick_scale: false, - category: "flags" - }, - reunion: { - keywords: [ "r\xe9union", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf7\ud83c\uddea", - fitzpatrick_scale: false, - category: "flags" - }, - romania: { - keywords: [ "ro", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf7\ud83c\uddf4", - fitzpatrick_scale: false, - category: "flags" - }, - ru: { - keywords: [ "russian", "federation", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf7\ud83c\uddfa", - fitzpatrick_scale: false, - category: "flags" - }, - rwanda: { - keywords: [ "rw", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf7\ud83c\uddfc", - fitzpatrick_scale: false, - category: "flags" - }, - st_barthelemy: { - keywords: [ "saint", "barth\xe9lemy", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde7\ud83c\uddf1", - fitzpatrick_scale: false, - category: "flags" - }, - st_helena: { - keywords: [ "saint", "helena", "ascension", "tristan", "cunha", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\udded", - fitzpatrick_scale: false, - category: "flags" - }, - st_kitts_nevis: { - keywords: [ "saint", "kitts", "nevis", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf0\ud83c\uddf3", - fitzpatrick_scale: false, - category: "flags" - }, - st_lucia: { - keywords: [ "saint", "lucia", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf1\ud83c\udde8", - fitzpatrick_scale: false, - category: "flags" - }, - st_pierre_miquelon: { - keywords: [ "saint", "pierre", "miquelon", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf5\ud83c\uddf2", - fitzpatrick_scale: false, - category: "flags" - }, - st_vincent_grenadines: { - keywords: [ "saint", "vincent", "grenadines", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddfb\ud83c\udde8", - fitzpatrick_scale: false, - category: "flags" - }, - samoa: { - keywords: [ "ws", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddfc\ud83c\uddf8", - fitzpatrick_scale: false, - category: "flags" - }, - san_marino: { - keywords: [ "san", "marino", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\uddf2", - fitzpatrick_scale: false, - category: "flags" - }, - sao_tome_principe: { - keywords: [ "sao", "tome", "principe", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\uddf9", - fitzpatrick_scale: false, - category: "flags" - }, - saudi_arabia: { - keywords: [ "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\udde6", - fitzpatrick_scale: false, - category: "flags" - }, - senegal: { - keywords: [ "sn", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\uddf3", - fitzpatrick_scale: false, - category: "flags" - }, - serbia: { - keywords: [ "rs", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf7\ud83c\uddf8", - fitzpatrick_scale: false, - category: "flags" - }, - seychelles: { - keywords: [ "sc", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\udde8", - fitzpatrick_scale: false, - category: "flags" - }, - sierra_leone: { - keywords: [ "sierra", "leone", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\uddf1", - fitzpatrick_scale: false, - category: "flags" - }, - singapore: { - keywords: [ "sg", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\uddec", - fitzpatrick_scale: false, - category: "flags" - }, - sint_maarten: { - keywords: [ "sint", "maarten", "dutch", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\uddfd", - fitzpatrick_scale: false, - category: "flags" - }, - slovakia: { - keywords: [ "sk", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\uddf0", - fitzpatrick_scale: false, - category: "flags" - }, - slovenia: { - keywords: [ "si", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\uddee", - fitzpatrick_scale: false, - category: "flags" - }, - solomon_islands: { - keywords: [ "solomon", "islands", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\udde7", - fitzpatrick_scale: false, - category: "flags" - }, - somalia: { - keywords: [ "so", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\uddf4", - fitzpatrick_scale: false, - category: "flags" - }, - south_africa: { - keywords: [ "south", "africa", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddff\ud83c\udde6", - fitzpatrick_scale: false, - category: "flags" - }, - south_georgia_south_sandwich_islands: { - keywords: [ "south", "georgia", "sandwich", "islands", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddec\ud83c\uddf8", - fitzpatrick_scale: false, - category: "flags" - }, - kr: { - keywords: [ "south", "korea", "nation", "flag", "country", "banner" ], - "char": "\ud83c\uddf0\ud83c\uddf7", - fitzpatrick_scale: false, - category: "flags" - }, - south_sudan: { - keywords: [ "south", "sd", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\uddf8", - fitzpatrick_scale: false, - category: "flags" - }, - es: { - keywords: [ "spain", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddea\ud83c\uddf8", - fitzpatrick_scale: false, - category: "flags" - }, - sri_lanka: { - keywords: [ "sri", "lanka", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf1\ud83c\uddf0", - fitzpatrick_scale: false, - category: "flags" - }, - sudan: { - keywords: [ "sd", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\udde9", - fitzpatrick_scale: false, - category: "flags" - }, - suriname: { - keywords: [ "sr", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\uddf7", - fitzpatrick_scale: false, - category: "flags" - }, - swaziland: { - keywords: [ "sz", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\uddff", - fitzpatrick_scale: false, - category: "flags" - }, - sweden: { - keywords: [ "se", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\uddea", - fitzpatrick_scale: false, - category: "flags" - }, - switzerland: { - keywords: [ "ch", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde8\ud83c\udded", - fitzpatrick_scale: false, - category: "flags" - }, - syria: { - keywords: [ "syrian", "arab", "republic", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf8\ud83c\uddfe", - fitzpatrick_scale: false, - category: "flags" - }, - taiwan: { - keywords: [ "tw", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf9\ud83c\uddfc", - fitzpatrick_scale: false, - category: "flags" - }, - tajikistan: { - keywords: [ "tj", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf9\ud83c\uddef", - fitzpatrick_scale: false, - category: "flags" - }, - tanzania: { - keywords: [ "tanzania,", "united", "republic", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf9\ud83c\uddff", - fitzpatrick_scale: false, - category: "flags" - }, - thailand: { - keywords: [ "th", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf9\ud83c\udded", - fitzpatrick_scale: false, - category: "flags" - }, - timor_leste: { - keywords: [ "timor", "leste", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf9\ud83c\uddf1", - fitzpatrick_scale: false, - category: "flags" - }, - togo: { - keywords: [ "tg", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf9\ud83c\uddec", - fitzpatrick_scale: false, - category: "flags" - }, - tokelau: { - keywords: [ "tk", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf9\ud83c\uddf0", - fitzpatrick_scale: false, - category: "flags" - }, - tonga: { - keywords: [ "to", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf9\ud83c\uddf4", - fitzpatrick_scale: false, - category: "flags" - }, - trinidad_tobago: { - keywords: [ "trinidad", "tobago", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf9\ud83c\uddf9", - fitzpatrick_scale: false, - category: "flags" - }, - tunisia: { - keywords: [ "tn", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf9\ud83c\uddf3", - fitzpatrick_scale: false, - category: "flags" - }, - tr: { - keywords: [ "turkey", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf9\ud83c\uddf7", - fitzpatrick_scale: false, - category: "flags" - }, - turkmenistan: { - keywords: [ "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf9\ud83c\uddf2", - fitzpatrick_scale: false, - category: "flags" - }, - turks_caicos_islands: { - keywords: [ "turks", "caicos", "islands", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf9\ud83c\udde8", - fitzpatrick_scale: false, - category: "flags" - }, - tuvalu: { - keywords: [ "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddf9\ud83c\uddfb", - fitzpatrick_scale: false, - category: "flags" - }, - uganda: { - keywords: [ "ug", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddfa\ud83c\uddec", - fitzpatrick_scale: false, - category: "flags" - }, - ukraine: { - keywords: [ "ua", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddfa\ud83c\udde6", - fitzpatrick_scale: false, - category: "flags" - }, - united_arab_emirates: { - keywords: [ "united", "arab", "emirates", "flag", "nation", "country", "banner" ], - "char": "\ud83c\udde6\ud83c\uddea", - fitzpatrick_scale: false, - category: "flags" - }, - uk: { - keywords: [ "united", "kingdom", "great", "britain", "northern", "ireland", "flag", "nation", "country", "banner", "british", "UK", "english", "england", "union jack" ], - "char": "\ud83c\uddec\ud83c\udde7", - fitzpatrick_scale: false, - category: "flags" - }, - england: { - keywords: [ "flag", "english" ], - "char": "\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f", - fitzpatrick_scale: false, - category: "flags" - }, - scotland: { - keywords: [ "flag", "scottish" ], - "char": "\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f", - fitzpatrick_scale: false, - category: "flags" - }, - wales: { - keywords: [ "flag", "welsh" ], - "char": "\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f", - fitzpatrick_scale: false, - category: "flags" - }, - us: { - keywords: [ "united", "states", "america", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddfa\ud83c\uddf8", - fitzpatrick_scale: false, - category: "flags" - }, - us_virgin_islands: { - keywords: [ "virgin", "islands", "us", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddfb\ud83c\uddee", - fitzpatrick_scale: false, - category: "flags" - }, - uruguay: { - keywords: [ "uy", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddfa\ud83c\uddfe", - fitzpatrick_scale: false, - category: "flags" - }, - uzbekistan: { - keywords: [ "uz", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddfa\ud83c\uddff", - fitzpatrick_scale: false, - category: "flags" - }, - vanuatu: { - keywords: [ "vu", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddfb\ud83c\uddfa", - fitzpatrick_scale: false, - category: "flags" - }, - vatican_city: { - keywords: [ "vatican", "city", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddfb\ud83c\udde6", - fitzpatrick_scale: false, - category: "flags" - }, - venezuela: { - keywords: [ "ve", "bolivarian", "republic", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddfb\ud83c\uddea", - fitzpatrick_scale: false, - category: "flags" - }, - vietnam: { - keywords: [ "viet", "nam", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddfb\ud83c\uddf3", - fitzpatrick_scale: false, - category: "flags" - }, - wallis_futuna: { - keywords: [ "wallis", "futuna", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddfc\ud83c\uddeb", - fitzpatrick_scale: false, - category: "flags" - }, - western_sahara: { - keywords: [ "western", "sahara", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddea\ud83c\udded", - fitzpatrick_scale: false, - category: "flags" - }, - yemen: { - keywords: [ "ye", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddfe\ud83c\uddea", - fitzpatrick_scale: false, - category: "flags" - }, - zambia: { - keywords: [ "zm", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddff\ud83c\uddf2", - fitzpatrick_scale: false, - category: "flags" - }, - zimbabwe: { - keywords: [ "zw", "flag", "nation", "country", "banner" ], - "char": "\ud83c\uddff\ud83c\uddfc", - fitzpatrick_scale: false, - category: "flags" - }, - united_nations: { - keywords: [ "un", "flag", "banner" ], - "char": "\ud83c\uddfa\ud83c\uddf3", - fitzpatrick_scale: false, - category: "flags" - }, - pirate_flag: { - keywords: [ "skull", "crossbones", "flag", "banner" ], - "char": "\ud83c\udff4\u200d\u2620\ufe0f", - fitzpatrick_scale: false, - category: "flags" - } -}); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/emoticons/js/emojis.min.js b/component/pear/module/tinymce/tinymce/plugins/emoticons/js/emojis.min.js deleted file mode 100644 index 8295d5a5c94225301212eb5078236cc7000ac2b9..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/emoticons/js/emojis.min.js +++ /dev/null @@ -1,2 +0,0 @@ -// Source: npm package: emojilib, file:emojis.json -window.tinymce.Resource.add("tinymce.plugins.emoticons",{grinning:{keywords:["face","smile","happy","joy",":D","grin"],"char":"\ud83d\ude00",fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],"char":"\ud83d\ude2c",fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],"char":"\ud83d\ude01",fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],"char":"\ud83d\ude02",fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],"char":"\ud83e\udd23",fitzpatrick_scale:!1,category:"people"},partying:{keywords:["face","celebration","woohoo"],"char":"\ud83e\udd73",fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],"char":"\ud83d\ude03",fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],"char":"\ud83d\ude04",fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],"char":"\ud83d\ude05",fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],"char":"\ud83d\ude06",fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],"char":"\ud83d\ude07",fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],"char":"\ud83d\ude09",fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],"char":"\ud83d\ude0a",fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],"char":"\ud83d\ude42",fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],"char":"\ud83d\ude43",fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],"char":"\u263a\ufe0f",fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],"char":"\ud83d\ude0b",fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],"char":"\ud83d\ude0c",fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],"char":"\ud83d\ude0d",fitzpatrick_scale:!1,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],"char":"\ud83e\udd70",fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],"char":"\ud83d\ude18",fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],"char":"\ud83d\ude17",fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],"char":"\ud83d\ude19",fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],"char":"\ud83d\ude1a",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],"char":"\ud83d\ude1c",fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],"char":"\ud83e\udd2a",fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],"char":"\ud83e\udd28",fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],"char":"\ud83e\uddd0",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],"char":"\ud83d\ude1d",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],"char":"\ud83d\ude1b",fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],"char":"\ud83e\udd11",fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],"char":"\ud83e\udd13",fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],"char":"\ud83d\ude0e",fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],"char":"\ud83e\udd29",fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],"char":"\ud83e\udd21",fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],"char":"\ud83e\udd20",fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],"char":"\ud83e\udd17",fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],"char":"\ud83d\ude0f",fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],"char":"\ud83d\ude36",fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],"char":"\ud83d\ude10",fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],"char":"\ud83d\ude11",fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],"char":"\ud83d\ude12",fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],"char":"\ud83d\ude44",fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],"char":"\ud83e\udd14",fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],"char":"\ud83e\udd25",fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],"char":"\ud83e\udd2d",fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],"char":"\ud83e\udd2b",fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],"char":"\ud83e\udd2c",fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],"char":"\ud83e\udd2f",fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],"char":"\ud83d\ude33",fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],"char":"\ud83d\ude1e",fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],"char":"\ud83d\ude1f",fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],"char":"\ud83d\ude20",fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],"char":"\ud83d\ude21",fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],"char":"\ud83d\ude14",fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],"char":"\ud83d\ude15",fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],"char":"\ud83d\ude41",fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],"char":"\u2639",fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],"char":"\ud83d\ude23",fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],"char":"\ud83d\ude16",fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],"char":"\ud83d\ude2b",fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],"char":"\ud83d\ude29",fitzpatrick_scale:!1,category:"people"},pleading:{keywords:["face","begging","mercy"],"char":"\ud83e\udd7a",fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],"char":"\ud83d\ude24",fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],"char":"\ud83d\ude2e",fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],"char":"\ud83d\ude31",fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],"char":"\ud83d\ude28",fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],"char":"\ud83d\ude30",fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],"char":"\ud83d\ude2f",fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],"char":"\ud83d\ude26",fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],"char":"\ud83d\ude27",fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],"char":"\ud83d\ude22",fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],"char":"\ud83d\ude25",fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],"char":"\ud83e\udd24",fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],"char":"\ud83d\ude2a",fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],"char":"\ud83d\ude13",fitzpatrick_scale:!1,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],"char":"\ud83e\udd75",fitzpatrick_scale:!1,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],"char":"\ud83e\udd76",fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],"char":"\ud83d\ude2d",fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],"char":"\ud83d\ude35",fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],"char":"\ud83d\ude32",fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],"char":"\ud83e\udd10",fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],"char":"\ud83e\udd22",fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],"char":"\ud83e\udd27",fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],"char":"\ud83e\udd2e",fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],"char":"\ud83d\ude37",fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],"char":"\ud83e\udd12",fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],"char":"\ud83e\udd15",fitzpatrick_scale:!1,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],"char":"\ud83e\udd74",fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],"char":"\ud83d\ude34",fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],"char":"\ud83d\udca4",fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],"char":"\ud83d\udca9",fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],"char":"\ud83d\ude08",fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],"char":"\ud83d\udc7f",fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],"char":"\ud83d\udc79",fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],"char":"\ud83d\udc7a",fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],"char":"\ud83d\udc80",fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],"char":"\ud83d\udc7b",fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],"char":"\ud83d\udc7d",fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],"char":"\ud83e\udd16",fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],"char":"\ud83d\ude3a",fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],"char":"\ud83d\ude38",fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],"char":"\ud83d\ude39",fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],"char":"\ud83d\ude3b",fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],"char":"\ud83d\ude3c",fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],"char":"\ud83d\ude3d",fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],"char":"\ud83d\ude40",fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],"char":"\ud83d\ude3f",fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],"char":"\ud83d\ude3e",fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],"char":"\ud83e\udd32",fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],"char":"\ud83d\ude4c",fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],"char":"\ud83d\udc4f",fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],"char":"\ud83d\udc4b",fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],"char":"\ud83e\udd19",fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],"char":"\ud83d\udc4d",fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],"char":"\ud83d\udc4e",fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],"char":"\ud83d\udc4a",fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],"char":"\u270a",fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],"char":"\ud83e\udd1b",fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],"char":"\ud83e\udd1c",fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],"char":"\u270c",fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],"char":"\ud83d\udc4c",fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],"char":"\u270b",fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],"char":"\ud83e\udd1a",fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],"char":"\ud83d\udc50",fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],"char":"\ud83d\udcaa",fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],"char":"\ud83d\ude4f",fitzpatrick_scale:!0,category:"people"},foot:{keywords:["kick","stomp"],"char":"\ud83e\uddb6",fitzpatrick_scale:!0,category:"people"},leg:{keywords:["kick","limb"],"char":"\ud83e\uddb5",fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],"char":"\ud83e\udd1d",fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],"char":"\u261d",fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],"char":"\ud83d\udc46",fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],"char":"\ud83d\udc47",fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],"char":"\ud83d\udc48",fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],"char":"\ud83d\udc49",fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],"char":"\ud83d\udd95",fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],"char":"\ud83d\udd90",fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],"char":"\ud83e\udd1f",fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],"char":"\ud83e\udd18",fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],"char":"\ud83e\udd1e",fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],"char":"\ud83d\udd96",fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],"char":"\u270d",fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],"char":"\ud83e\udd33",fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],"char":"\ud83d\udc85",fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],"char":"\ud83d\udc44",fitzpatrick_scale:!1,category:"people"},tooth:{keywords:["teeth","dentist"],"char":"\ud83e\uddb7",fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],"char":"\ud83d\udc45",fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],"char":"\ud83d\udc42",fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],"char":"\ud83d\udc43",fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],"char":"\ud83d\udc41",fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],"char":"\ud83d\udc40",fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],"char":"\ud83e\udde0",fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],"char":"\ud83d\udc64",fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],"char":"\ud83d\udc65",fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],"char":"\ud83d\udde3",fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],"char":"\ud83d\udc76",fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],"char":"\ud83e\uddd2",fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],"char":"\ud83d\udc66",fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],"char":"\ud83d\udc67",fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],"char":"\ud83e\uddd1",fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],"char":"\ud83d\udc68",fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],"char":"\ud83d\udc69",fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],"char":"\ud83d\udc71\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],"char":"\ud83d\udc71",fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],"char":"\ud83e\uddd4",fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],"char":"\ud83e\uddd3",fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],"char":"\ud83d\udc74",fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],"char":"\ud83d\udc75",fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],"char":"\ud83d\udc72",fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],"char":"\ud83e\uddd5",fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],"char":"\ud83d\udc73\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],"char":"\ud83d\udc73",fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],"char":"\ud83d\udc6e\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],"char":"\ud83d\udc6e",fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],"char":"\ud83d\udc77\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],"char":"\ud83d\udc77",fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],"char":"\ud83d\udc82\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],"char":"\ud83d\udc82",fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],"char":"\ud83d\udd75\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],"char":"\ud83d\udd75",fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],"char":"\ud83d\udc69\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],"char":"\ud83d\udc68\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udf3e",fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udf3e",fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udf73",fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udf73",fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udf93",fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udf93",fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udfa4",fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udfa4",fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udfeb",fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udfeb",fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udfed",fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udfed",fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],"char":"\ud83d\udc69\u200d\ud83d\udcbb",fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],"char":"\ud83d\udc68\u200d\ud83d\udcbb",fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],"char":"\ud83d\udc69\u200d\ud83d\udcbc",fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],"char":"\ud83d\udc68\u200d\ud83d\udcbc",fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],"char":"\ud83d\udc69\u200d\ud83d\udd27",fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],"char":"\ud83d\udc68\u200d\ud83d\udd27",fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],"char":"\ud83d\udc69\u200d\ud83d\udd2c",fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],"char":"\ud83d\udc68\u200d\ud83d\udd2c",fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],"char":"\ud83d\udc69\u200d\ud83c\udfa8",fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],"char":"\ud83d\udc68\u200d\ud83c\udfa8",fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],"char":"\ud83d\udc69\u200d\ud83d\ude92",fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],"char":"\ud83d\udc68\u200d\ud83d\ude92",fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],"char":"\ud83d\udc69\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],"char":"\ud83d\udc68\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],"char":"\ud83d\udc69\u200d\ud83d\ude80",fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],"char":"\ud83d\udc68\u200d\ud83d\ude80",fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],"char":"\ud83d\udc69\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],"char":"\ud83d\udc68\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],"char":"\ud83e\uddb8\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],"char":"\ud83e\uddb8\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],"char":"\ud83e\uddb9\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],"char":"\ud83e\uddb9\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],"char":"\ud83e\udd36",fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],"char":"\ud83c\udf85",fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],"char":"\ud83e\uddd9\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],"char":"\ud83e\uddd9\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],"char":"\ud83e\udddd\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],"char":"\ud83e\udddd\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],"char":"\ud83e\udddb\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],"char":"\ud83e\udddb\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],"char":"\ud83e\udddf\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],"char":"\ud83e\udddf\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],"char":"\ud83e\uddde\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],"char":"\ud83e\uddde\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],"char":"\ud83e\udddc\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],"char":"\ud83e\udddc\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],"char":"\ud83e\uddda\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],"char":"\ud83e\uddda\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],"char":"\ud83d\udc7c",fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],"char":"\ud83e\udd30",fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],"char":"\ud83e\udd31",fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],"char":"\ud83d\udc78",fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],"char":"\ud83e\udd34",fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],"char":"\ud83d\udc70",fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],"char":"\ud83e\udd35",fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],"char":"\ud83c\udfc3\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],"char":"\ud83c\udfc3",fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],"char":"\ud83d\udeb6\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],"char":"\ud83d\udeb6",fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],"char":"\ud83d\udc83",fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],"char":"\ud83d\udd7a",fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],"char":"\ud83d\udc6f",fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],"char":"\ud83d\udc6f\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],"char":"\ud83d\udc6b",fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],"char":"\ud83d\udc6c",fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],"char":"\ud83d\udc6d",fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],"char":"\ud83d\ude47\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],"char":"\ud83d\ude47",fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],"char":"\ud83e\udd26\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],"char":"\ud83e\udd26\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],"char":"\ud83e\udd37",fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],"char":"\ud83e\udd37\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],"char":"\ud83d\udc81",fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],"char":"\ud83d\udc81\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],"char":"\ud83d\ude45",fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],"char":"\ud83d\ude45\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],"char":"\ud83d\ude46",fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],"char":"\ud83d\ude46\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],"char":"\ud83d\ude4b",fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],"char":"\ud83d\ude4b\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],"char":"\ud83d\ude4e",fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],"char":"\ud83d\ude4e\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],"char":"\ud83d\ude4d",fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],"char":"\ud83d\ude4d\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],"char":"\ud83d\udc87",fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],"char":"\ud83d\udc87\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],"char":"\ud83d\udc86",fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],"char":"\ud83d\udc86\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],"char":"\ud83e\uddd6\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],"char":"\ud83e\uddd6\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":"\ud83d\udc91",fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69",fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],"char":"\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68",fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],"char":"\ud83d\udc8f",fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],"char":"\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69",fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],"char":"\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],"char":"\ud83d\udc6a",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],"char":"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],"char":"\ud83d\udc69\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],"char":"\ud83d\udc69\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],"char":"\ud83d\udc68\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],"char":"\ud83d\udc68\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66",fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],"char":"\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67",fitzpatrick_scale:!1,category:"people"},yarn:{keywords:["ball","crochet","knit"],"char":"\ud83e\uddf6",fitzpatrick_scale:!1,category:"people"},thread:{keywords:["needle","sewing","spool","string"],"char":"\ud83e\uddf5",fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],"char":"\ud83e\udde5",fitzpatrick_scale:!1,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],"char":"\ud83e\udd7c",fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],"char":"\ud83d\udc5a",fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],"char":"\ud83d\udc55",fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],"char":"\ud83d\udc56",fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],"char":"\ud83d\udc54",fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],"char":"\ud83d\udc57",fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],"char":"\ud83d\udc59",fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],"char":"\ud83d\udc58",fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],"char":"\ud83d\udc84",fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],"char":"\ud83d\udc8b",fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],"char":"\ud83d\udc63",fitzpatrick_scale:!1,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],"char":"\ud83e\udd7f",fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],"char":"\ud83d\udc60",fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],"char":"\ud83d\udc61",fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],"char":"\ud83d\udc62",fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],"char":"\ud83d\udc5e",fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],"char":"\ud83d\udc5f",fitzpatrick_scale:!1,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],"char":"\ud83e\udd7e",fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],"char":"\ud83e\udde6",fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],"char":"\ud83e\udde4",fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],"char":"\ud83e\udde3",fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],"char":"\ud83d\udc52",fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],"char":"\ud83c\udfa9",fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],"char":"\ud83e\udde2",fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],"char":"\u26d1",fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],"char":"\ud83c\udf93",fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],"char":"\ud83d\udc51",fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],"char":"\ud83c\udf92",fitzpatrick_scale:!1,category:"people"},luggage:{keywords:["packing","travel"],"char":"\ud83e\uddf3",fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],"char":"\ud83d\udc5d",fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],"char":"\ud83d\udc5b",fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],"char":"\ud83d\udc5c",fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],"char":"\ud83d\udcbc",fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],"char":"\ud83d\udc53",fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],"char":"\ud83d\udd76",fitzpatrick_scale:!1,category:"people"},goggles:{keywords:["eyes","protection","safety"],"char":"\ud83e\udd7d",fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],"char":"\ud83d\udc8d",fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],"char":"\ud83c\udf02",fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],"char":"\ud83d\udc36",fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],"char":"\ud83d\udc31",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],"char":"\ud83d\udc2d",fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],"char":"\ud83d\udc39",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],"char":"\ud83d\udc30",fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],"char":"\ud83e\udd8a",fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],"char":"\ud83d\udc3b",fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],"char":"\ud83d\udc3c",fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],"char":"\ud83d\udc28",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],"char":"\ud83d\udc2f",fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],"char":"\ud83e\udd81",fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],"char":"\ud83d\udc2e",fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],"char":"\ud83d\udc37",fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],"char":"\ud83d\udc3d",fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],"char":"\ud83d\udc38",fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],"char":"\ud83e\udd91",fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],"char":"\ud83d\udc19",fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],"char":"\ud83e\udd90",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],"char":"\ud83d\udc35",fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],"char":"\ud83e\udd8d",fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],"char":"\ud83d\ude48",fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],"char":"\ud83d\ude49",fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],"char":"\ud83d\ude4a",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],"char":"\ud83d\udc12",fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],"char":"\ud83d\udc14",fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],"char":"\ud83d\udc27",fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],"char":"\ud83d\udc26",fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],"char":"\ud83d\udc24",fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],"char":"\ud83d\udc23",fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],"char":"\ud83d\udc25",fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],"char":"\ud83e\udd86",fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],"char":"\ud83e\udd85",fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],"char":"\ud83e\udd89",fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],"char":"\ud83e\udd87",fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],"char":"\ud83d\udc3a",fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],"char":"\ud83d\udc17",fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],"char":"\ud83d\udc34",fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],"char":"\ud83e\udd84",fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],"char":"\ud83d\udc1d",fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],"char":"\ud83d\udc1b",fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],"char":"\ud83e\udd8b",fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],"char":"\ud83d\udc0c",fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],"char":"\ud83d\udc1e",fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],"char":"\ud83d\udc1c",fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],"char":"\ud83e\udd97",fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],"char":"\ud83d\udd77",fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],"char":"\ud83e\udd82",fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],"char":"\ud83e\udd80",fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],"char":"\ud83d\udc0d",fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],"char":"\ud83e\udd8e",fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],"char":"\ud83e\udd96",fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],"char":"\ud83e\udd95",fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],"char":"\ud83d\udc22",fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],"char":"\ud83d\udc20",fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],"char":"\ud83d\udc1f",fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],"char":"\ud83d\udc21",fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],"char":"\ud83d\udc2c",fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],"char":"\ud83e\udd88",fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],"char":"\ud83d\udc33",fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],"char":"\ud83d\udc0b",fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],"char":"\ud83d\udc0a",fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],"char":"\ud83d\udc06",fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],"char":"\ud83e\udd93",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],"char":"\ud83d\udc05",fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],"char":"\ud83d\udc03",fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],"char":"\ud83d\udc02",fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],"char":"\ud83d\udc04",fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],"char":"\ud83e\udd8c",fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],"char":"\ud83d\udc2a",fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],"char":"\ud83d\udc2b",fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],"char":"\ud83e\udd92",fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],"char":"\ud83d\udc18",fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],"char":"\ud83e\udd8f",fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],"char":"\ud83d\udc10",fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],"char":"\ud83d\udc0f",fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],"char":"\ud83d\udc11",fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],"char":"\ud83d\udc0e",fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],"char":"\ud83d\udc16",fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],"char":"\ud83d\udc00",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],"char":"\ud83d\udc01",fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],"char":"\ud83d\udc13",fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],"char":"\ud83e\udd83",fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],"char":"\ud83d\udd4a",fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],"char":"\ud83d\udc15",fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],"char":"\ud83d\udc29",fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],"char":"\ud83d\udc08",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],"char":"\ud83d\udc07",fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],"char":"\ud83d\udc3f",fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],"char":"\ud83e\udd94",fitzpatrick_scale:!1,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],"char":"\ud83e\udd9d",fitzpatrick_scale:!1,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],"char":"\ud83e\udd99",fitzpatrick_scale:!1,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],"char":"\ud83e\udd9b",fitzpatrick_scale:!1,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],"char":"\ud83e\udd98",fitzpatrick_scale:!1,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],"char":"\ud83e\udda1",fitzpatrick_scale:!1,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],"char":"\ud83e\udda2",fitzpatrick_scale:!1,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],"char":"\ud83e\udd9a",fitzpatrick_scale:!1,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],"char":"\ud83e\udd9c",fitzpatrick_scale:!1,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],"char":"\ud83e\udd9e",fitzpatrick_scale:!1,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],"char":"\ud83e\udd9f",fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],"char":"\ud83d\udc3e",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],"char":"\ud83d\udc09",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],"char":"\ud83d\udc32",fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],"char":"\ud83c\udf35",fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],"char":"\ud83c\udf84",fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],"char":"\ud83c\udf32",fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],"char":"\ud83c\udf33",fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],"char":"\ud83c\udf34",fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],"char":"\ud83c\udf31",fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],"char":"\ud83c\udf3f",fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],"char":"\u2618",fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],"char":"\ud83c\udf40",fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],"char":"\ud83c\udf8d",fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],"char":"\ud83c\udf8b",fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],"char":"\ud83c\udf43",fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],"char":"\ud83c\udf42",fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],"char":"\ud83c\udf41",fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],"char":"\ud83c\udf3e",fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],"char":"\ud83c\udf3a",fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],"char":"\ud83c\udf3b",fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],"char":"\ud83c\udf39",fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],"char":"\ud83e\udd40",fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],"char":"\ud83c\udf37",fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],"char":"\ud83c\udf3c",fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],"char":"\ud83c\udf38",fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],"char":"\ud83d\udc90",fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],"char":"\ud83c\udf44",fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],"char":"\ud83c\udf30",fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],"char":"\ud83c\udf83",fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],"char":"\ud83d\udc1a",fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],"char":"\ud83d\udd78",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],"char":"\ud83c\udf0e",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],"char":"\ud83c\udf0d",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],"char":"\ud83c\udf0f",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf15",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],"char":"\ud83c\udf16",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf17",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf18",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf11",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf12",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf13",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],"char":"\ud83c\udf14",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf1a",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf1d",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf1b",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],"char":"\ud83c\udf1c",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],"char":"\ud83c\udf1e",fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],"char":"\ud83c\udf19",fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],"char":"\u2b50",fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],"char":"\ud83c\udf1f",fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],"char":"\ud83d\udcab",fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],"char":"\u2728",fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],"char":"\u2604",fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],"char":"\u2600\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],"char":"\ud83c\udf24",fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],"char":"\u26c5",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],"char":"\ud83c\udf25",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],"char":"\ud83c\udf26",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],"char":"\u2601\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],"char":"\ud83c\udf27",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],"char":"\u26c8",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],"char":"\ud83c\udf29",fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],"char":"\u26a1",fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],"char":"\ud83d\udd25",fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],"char":"\ud83d\udca5",fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],"char":"\u2744\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],"char":"\ud83c\udf28",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],"char":"\u26c4",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],"char":"\u2603",fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],"char":"\ud83c\udf2c",fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],"char":"\ud83d\udca8",fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],"char":"\ud83c\udf2a",fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],"char":"\ud83c\udf2b",fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],"char":"\u2602",fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],"char":"\u2614",fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],"char":"\ud83d\udca7",fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],"char":"\ud83d\udca6",fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],"char":"\ud83c\udf0a",fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],"char":"\ud83c\udf4f",fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],"char":"\ud83c\udf4e",fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],"char":"\ud83c\udf50",fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],"char":"\ud83c\udf4a",fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],"char":"\ud83c\udf4b",fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],"char":"\ud83c\udf4c",fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],"char":"\ud83c\udf49",fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],"char":"\ud83c\udf47",fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],"char":"\ud83c\udf53",fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],"char":"\ud83c\udf48",fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],"char":"\ud83c\udf52",fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],"char":"\ud83c\udf51",fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],"char":"\ud83c\udf4d",fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],"char":"\ud83e\udd65",fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],"char":"\ud83e\udd5d",fitzpatrick_scale:!1,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],"char":"\ud83e\udd6d",fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],"char":"\ud83e\udd51",fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],"char":"\ud83e\udd66",fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],"char":"\ud83c\udf45",fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],"char":"\ud83c\udf46",fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],"char":"\ud83e\udd52",fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],"char":"\ud83e\udd55",fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],"char":"\ud83c\udf36",fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],"char":"\ud83e\udd54",fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],"char":"\ud83c\udf3d",fitzpatrick_scale:!1,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],"char":"\ud83e\udd6c",fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],"char":"\ud83c\udf60",fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],"char":"\ud83e\udd5c",fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],"char":"\ud83c\udf6f",fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],"char":"\ud83e\udd50",fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],"char":"\ud83c\udf5e",fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],"char":"\ud83e\udd56",fitzpatrick_scale:!1,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],"char":"\ud83e\udd6f",fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],"char":"\ud83e\udd68",fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],"char":"\ud83e\uddc0",fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],"char":"\ud83e\udd5a",fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],"char":"\ud83e\udd53",fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],"char":"\ud83e\udd69",fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],"char":"\ud83e\udd5e",fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],"char":"\ud83c\udf57",fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],"char":"\ud83c\udf56",fitzpatrick_scale:!1,category:"food_and_drink"},bone:{keywords:["skeleton"],"char":"\ud83e\uddb4",fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],"char":"\ud83c\udf64",fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],"char":"\ud83c\udf73",fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],"char":"\ud83c\udf54",fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],"char":"\ud83c\udf5f",fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],"char":"\ud83e\udd59",fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],"char":"\ud83c\udf2d",fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],"char":"\ud83c\udf55",fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],"char":"\ud83e\udd6a",fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],"char":"\ud83e\udd6b",fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],"char":"\ud83c\udf5d",fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],"char":"\ud83c\udf2e",fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],"char":"\ud83c\udf2f",fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],"char":"\ud83e\udd57",fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],"char":"\ud83e\udd58",fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],"char":"\ud83c\udf5c",fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],"char":"\ud83c\udf72",fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],"char":"\ud83c\udf65",fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],"char":"\ud83e\udd60",fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],"char":"\ud83c\udf63",fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],"char":"\ud83c\udf71",fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],"char":"\ud83c\udf5b",fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],"char":"\ud83c\udf59",fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],"char":"\ud83c\udf5a",fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],"char":"\ud83c\udf58",fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],"char":"\ud83c\udf62",fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],"char":"\ud83c\udf61",fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],"char":"\ud83c\udf67",fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],"char":"\ud83c\udf68",fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],"char":"\ud83c\udf66",fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],"char":"\ud83e\udd67",fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],"char":"\ud83c\udf70",fitzpatrick_scale:!1,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],"char":"\ud83e\uddc1",fitzpatrick_scale:!1,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],"char":"\ud83e\udd6e",fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],"char":"\ud83c\udf82",fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],"char":"\ud83c\udf6e",fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],"char":"\ud83c\udf6c",fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],"char":"\ud83c\udf6d",fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],"char":"\ud83c\udf6b",fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],"char":"\ud83c\udf7f",fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],"char":"\ud83e\udd5f",fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],"char":"\ud83c\udf69",fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],"char":"\ud83c\udf6a",fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],"char":"\ud83e\udd5b",fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],"char":"\ud83c\udf7a",fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],"char":"\ud83c\udf7b",fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],"char":"\ud83e\udd42",fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],"char":"\ud83c\udf77",fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],"char":"\ud83e\udd43",fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],"char":"\ud83c\udf78",fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],"char":"\ud83c\udf79",fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],"char":"\ud83c\udf7e",fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],"char":"\ud83c\udf76",fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],"char":"\ud83c\udf75",fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],"char":"\ud83e\udd64",fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],"char":"\u2615",fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],"char":"\ud83c\udf7c",fitzpatrick_scale:!1,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],"char":"\ud83e\uddc2",fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],"char":"\ud83e\udd44",fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],"char":"\ud83c\udf74",fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],"char":"\ud83c\udf7d",fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],"char":"\ud83e\udd63",fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],"char":"\ud83e\udd61",fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],"char":"\ud83e\udd62",fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],"char":"\u26bd",fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],"char":"\ud83c\udfc0",fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],"char":"\ud83c\udfc8",fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],"char":"\u26be",fitzpatrick_scale:!1,category:"activity"},softball:{keywords:["sports","balls"],"char":"\ud83e\udd4e",fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],"char":"\ud83c\udfbe",fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],"char":"\ud83c\udfd0",fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],"char":"\ud83c\udfc9",fitzpatrick_scale:!1,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],"char":"\ud83e\udd4f",fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],"char":"\ud83c\udfb1",fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],"char":"\u26f3",fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],"char":"\ud83c\udfcc\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],"char":"\ud83c\udfcc",fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],"char":"\ud83c\udfd3",fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],"char":"\ud83c\udff8",fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],"char":"\ud83e\udd45",fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],"char":"\ud83c\udfd2",fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],"char":"\ud83c\udfd1",fitzpatrick_scale:!1,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],"char":"\ud83e\udd4d",fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],"char":"\ud83c\udfcf",fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],"char":"\ud83c\udfbf",fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],"char":"\u26f7",fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],"char":"\ud83c\udfc2",fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],"char":"\ud83e\udd3a",fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],"char":"\ud83e\udd3c\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],"char":"\ud83e\udd3c\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],"char":"\ud83e\udd38\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],"char":"\ud83e\udd38\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],"char":"\ud83e\udd3e\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],"char":"\ud83e\udd3e\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],"char":"\u26f8",fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],"char":"\ud83e\udd4c",fitzpatrick_scale:!1,category:"activity"},skateboard:{keywords:["board"],"char":"\ud83d\udef9",fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],"char":"\ud83d\udef7",fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],"char":"\ud83c\udff9",fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],"char":"\ud83c\udfa3",fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],"char":"\ud83e\udd4a",fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],"char":"\ud83e\udd4b",fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],"char":"\ud83d\udea3\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],"char":"\ud83d\udea3",fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],"char":"\ud83e\uddd7\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],"char":"\ud83e\uddd7\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],"char":"\ud83c\udfca\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],"char":"\ud83c\udfca",fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],"char":"\ud83e\udd3d\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],"char":"\ud83e\udd3d\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],"char":"\ud83e\uddd8\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],"char":"\ud83e\uddd8\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],"char":"\ud83c\udfc4\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],"char":"\ud83c\udfc4",fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],"char":"\ud83d\udec0",fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],"char":"\u26f9\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],"char":"\u26f9",fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],"char":"\ud83c\udfcb\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],"char":"\ud83c\udfcb",fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],"char":"\ud83d\udeb4\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],"char":"\ud83d\udeb4",fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],"char":"\ud83d\udeb5\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],"char":"\ud83d\udeb5",fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],"char":"\ud83c\udfc7",fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],"char":"\ud83d\udd74",fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],"char":"\ud83c\udfc6",fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],"char":"\ud83c\udfbd",fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],"char":"\ud83c\udfc5",fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],"char":"\ud83c\udf96",fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],"char":"\ud83e\udd47",fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],"char":"\ud83e\udd48",fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],"char":"\ud83e\udd49",fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],"char":"\ud83c\udf97",fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],"char":"\ud83c\udff5",fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],"char":"\ud83c\udfab",fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],"char":"\ud83c\udf9f",fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],"char":"\ud83c\udfad",fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],"char":"\ud83c\udfa8",fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],"char":"\ud83c\udfaa",fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],"char":"\ud83e\udd39\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],"char":"\ud83e\udd39\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],"char":"\ud83c\udfa4",fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],"char":"\ud83c\udfa7",fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],"char":"\ud83c\udfbc",fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],"char":"\ud83c\udfb9",fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],"char":"\ud83e\udd41",fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],"char":"\ud83c\udfb7",fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],"char":"\ud83c\udfba",fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],"char":"\ud83c\udfb8",fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],"char":"\ud83c\udfbb",fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],"char":"\ud83c\udfac",fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],"char":"\ud83c\udfae",fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],"char":"\ud83d\udc7e",fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],"char":"\ud83c\udfaf",fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],"char":"\ud83c\udfb2",fitzpatrick_scale:!1,category:"activity"},chess_pawn:{keywords:["expendable"],"char":"\u265f",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],"char":"\ud83c\udfb0",fitzpatrick_scale:!1,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],"char":"\ud83e\udde9",fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],"char":"\ud83c\udfb3",fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],"char":"\ud83d\ude97",fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],"char":"\ud83d\ude95",fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],"char":"\ud83d\ude99",fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],"char":"\ud83d\ude8c",fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],"char":"\ud83d\ude8e",fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],"char":"\ud83c\udfce",fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],"char":"\ud83d\ude93",fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],"char":"\ud83d\ude91",fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],"char":"\ud83d\ude92",fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],"char":"\ud83d\ude90",fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],"char":"\ud83d\ude9a",fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],"char":"\ud83d\ude9b",fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],"char":"\ud83d\ude9c",fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],"char":"\ud83d\udef4",fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],"char":"\ud83c\udfcd",fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],"char":"\ud83d\udeb2",fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],"char":"\ud83d\udef5",fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],"char":"\ud83d\udea8",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],"char":"\ud83d\ude94",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],"char":"\ud83d\ude8d",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],"char":"\ud83d\ude98",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],"char":"\ud83d\ude96",fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],"char":"\ud83d\udea1",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],"char":"\ud83d\udea0",fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],"char":"\ud83d\ude9f",fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],"char":"\ud83d\ude83",fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],"char":"\ud83d\ude8b",fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],"char":"\ud83d\ude9d",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],"char":"\ud83d\ude84",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],"char":"\ud83d\ude85",fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],"char":"\ud83d\ude88",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],"char":"\ud83d\ude9e",fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],"char":"\ud83d\ude82",fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],"char":"\ud83d\ude86",fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],"char":"\ud83d\ude87",fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],"char":"\ud83d\ude8a",fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],"char":"\ud83d\ude89",fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],"char":"\ud83d\udef8",fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],"char":"\ud83d\ude81",fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],"char":"\ud83d\udee9",fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],"char":"\u2708\ufe0f",fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],"char":"\ud83d\udeeb",fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],"char":"\ud83d\udeec",fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],"char":"\u26f5",fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],"char":"\ud83d\udee5",fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],"char":"\ud83d\udea4",fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],"char":"\u26f4",fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],"char":"\ud83d\udef3",fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],"char":"\ud83d\ude80",fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],"char":"\ud83d\udef0",fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],"char":"\ud83d\udcba",fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],"char":"\ud83d\udef6",fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],"char":"\u2693",fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],"char":"\ud83d\udea7",fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],"char":"\u26fd",fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],"char":"\ud83d\ude8f",fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],"char":"\ud83d\udea6",fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],"char":"\ud83d\udea5",fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],"char":"\ud83c\udfc1",fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],"char":"\ud83d\udea2",fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],"char":"\ud83c\udfa1",fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],"char":"\ud83c\udfa2",fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],"char":"\ud83c\udfa0",fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],"char":"\ud83c\udfd7",fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],"char":"\ud83c\udf01",fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],"char":"\ud83d\uddfc",fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],"char":"\ud83c\udfed",fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],"char":"\u26f2",fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],"char":"\ud83c\udf91",fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],"char":"\u26f0",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],"char":"\ud83c\udfd4",fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],"char":"\ud83d\uddfb",fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],"char":"\ud83c\udf0b",fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],"char":"\ud83d\uddfe",fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],"char":"\ud83c\udfd5",fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],"char":"\u26fa",fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],"char":"\ud83c\udfde",fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],"char":"\ud83d\udee3",fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],"char":"\ud83d\udee4",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],"char":"\ud83c\udf05",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],"char":"\ud83c\udf04",fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],"char":"\ud83c\udfdc",fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],"char":"\ud83c\udfd6",fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],"char":"\ud83c\udfdd",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],"char":"\ud83c\udf07",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],"char":"\ud83c\udf06",fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],"char":"\ud83c\udfd9",fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],"char":"\ud83c\udf03",fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],"char":"\ud83c\udf09",fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],"char":"\ud83c\udf0c",fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],"char":"\ud83c\udf20",fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],"char":"\ud83c\udf87",fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],"char":"\ud83c\udf86",fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],"char":"\ud83c\udf08",fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],"char":"\ud83c\udfd8",fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],"char":"\ud83c\udff0",fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],"char":"\ud83c\udfef",fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],"char":"\ud83c\udfdf",fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],"char":"\ud83d\uddfd",fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],"char":"\ud83c\udfe0",fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],"char":"\ud83c\udfe1",fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],"char":"\ud83c\udfda",fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],"char":"\ud83c\udfe2",fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],"char":"\ud83c\udfec",fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],"char":"\ud83c\udfe3",fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],"char":"\ud83c\udfe4",fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],"char":"\ud83c\udfe5",fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],"char":"\ud83c\udfe6",fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],"char":"\ud83c\udfe8",fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],"char":"\ud83c\udfea",fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],"char":"\ud83c\udfeb",fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],"char":"\ud83c\udfe9",fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],"char":"\ud83d\udc92",fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],"char":"\ud83c\udfdb",fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],"char":"\u26ea",fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],"char":"\ud83d\udd4c",fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],"char":"\ud83d\udd4d",fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],"char":"\ud83d\udd4b",fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],"char":"\u26e9",fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],"char":"\u231a",fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],"char":"\ud83d\udcf1",fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],"char":"\ud83d\udcf2",fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],"char":"\ud83d\udcbb",fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],"char":"\u2328",fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],"char":"\ud83d\udda5",fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],"char":"\ud83d\udda8",fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],"char":"\ud83d\uddb1",fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],"char":"\ud83d\uddb2",fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],"char":"\ud83d\udd79",fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],"char":"\ud83d\udddc",fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],"char":"\ud83d\udcbd",fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],"char":"\ud83d\udcbe",fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],"char":"\ud83d\udcbf",fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],"char":"\ud83d\udcc0",fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],"char":"\ud83d\udcfc",fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],"char":"\ud83d\udcf7",fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],"char":"\ud83d\udcf8",fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],"char":"\ud83d\udcf9",fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],"char":"\ud83c\udfa5",fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],"char":"\ud83d\udcfd",fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],"char":"\ud83c\udf9e",fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],"char":"\ud83d\udcde",fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],"char":"\u260e\ufe0f",fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],"char":"\ud83d\udcdf",fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],"char":"\ud83d\udce0",fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],"char":"\ud83d\udcfa",fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],"char":"\ud83d\udcfb",fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],"char":"\ud83c\udf99",fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],"char":"\ud83c\udf9a",fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],"char":"\ud83c\udf9b",fitzpatrick_scale:!1,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],"char":"\ud83e\udded",fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],"char":"\u23f1",fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],"char":"\u23f2",fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],"char":"\u23f0",fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],"char":"\ud83d\udd70",fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],"char":"\u23f3",fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],"char":"\u231b",fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],"char":"\ud83d\udce1",fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],"char":"\ud83d\udd0b",fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],"char":"\ud83d\udd0c",fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],"char":"\ud83d\udca1",fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],"char":"\ud83d\udd26",fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],"char":"\ud83d\udd6f",fitzpatrick_scale:!1,category:"objects"},fire_extinguisher:{keywords:["quench"],"char":"\ud83e\uddef",fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],"char":"\ud83d\uddd1",fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],"char":"\ud83d\udee2",fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],"char":"\ud83d\udcb8",fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],"char":"\ud83d\udcb5",fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],"char":"\ud83d\udcb4",fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],"char":"\ud83d\udcb6",fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],"char":"\ud83d\udcb7",fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],"char":"\ud83d\udcb0",fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],"char":"\ud83d\udcb3",fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],"char":"\ud83d\udc8e",fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],"char":"\u2696",fitzpatrick_scale:!1,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],"char":"\ud83e\uddf0",fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],"char":"\ud83d\udd27",fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],"char":"\ud83d\udd28",fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],"char":"\u2692",fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],"char":"\ud83d\udee0",fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],"char":"\u26cf",fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],"char":"\ud83d\udd29",fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],"char":"\u2699",fitzpatrick_scale:!1,category:"objects"},brick:{keywords:["bricks"],"char":"\ud83e\uddf1",fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],"char":"\u26d3",fitzpatrick_scale:!1,category:"objects"},magnet:{keywords:["attraction","magnetic"],"char":"\ud83e\uddf2",fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],"char":"\ud83d\udd2b",fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],"char":"\ud83d\udca3",fitzpatrick_scale:!1,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],"char":"\ud83e\udde8",fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],"char":"\ud83d\udd2a",fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],"char":"\ud83d\udde1",fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],"char":"\u2694",fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],"char":"\ud83d\udee1",fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],"char":"\ud83d\udeac",fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],"char":"\u2620",fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],"char":"\u26b0",fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],"char":"\u26b1",fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],"char":"\ud83c\udffa",fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],"char":"\ud83d\udd2e",fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],"char":"\ud83d\udcff",fitzpatrick_scale:!1,category:"objects"},nazar_amulet:{keywords:["bead","charm"],"char":"\ud83e\uddff",fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],"char":"\ud83d\udc88",fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],"char":"\u2697",fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],"char":"\ud83d\udd2d",fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],"char":"\ud83d\udd2c",fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],"char":"\ud83d\udd73",fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],"char":"\ud83d\udc8a",fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],"char":"\ud83d\udc89",fitzpatrick_scale:!1,category:"objects"},dna:{keywords:["biologist","genetics","life"],"char":"\ud83e\uddec",fitzpatrick_scale:!1,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],"char":"\ud83e\udda0",fitzpatrick_scale:!1,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],"char":"\ud83e\uddeb",fitzpatrick_scale:!1,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],"char":"\ud83e\uddea",fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],"char":"\ud83c\udf21",fitzpatrick_scale:!1,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],"char":"\ud83e\uddf9",fitzpatrick_scale:!1,category:"objects"},basket:{keywords:["laundry"],"char":"\ud83e\uddfa",fitzpatrick_scale:!1,category:"objects"},toilet_paper:{keywords:["roll"],"char":"\ud83e\uddfb",fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],"char":"\ud83c\udff7",fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],"char":"\ud83d\udd16",fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],"char":"\ud83d\udebd",fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],"char":"\ud83d\udebf",fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],"char":"\ud83d\udec1",fitzpatrick_scale:!1,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],"char":"\ud83e\uddfc",fitzpatrick_scale:!1,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],"char":"\ud83e\uddfd",fitzpatrick_scale:!1,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],"char":"\ud83e\uddf4",fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],"char":"\ud83d\udd11",fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],"char":"\ud83d\udddd",fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],"char":"\ud83d\udecb",fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],"char":"\ud83d\udecc",fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],"char":"\ud83d\udecf",fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],"char":"\ud83d\udeaa",fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],"char":"\ud83d\udece",fitzpatrick_scale:!1,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],"char":"\ud83e\uddf8",fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],"char":"\ud83d\uddbc",fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],"char":"\ud83d\uddfa",fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],"char":"\u26f1",fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],"char":"\ud83d\uddff",fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],"char":"\ud83d\udecd",fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],"char":"\ud83d\uded2",fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],"char":"\ud83c\udf88",fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],"char":"\ud83c\udf8f",fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],"char":"\ud83c\udf80",fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],"char":"\ud83c\udf81",fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],"char":"\ud83c\udf8a",fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],"char":"\ud83c\udf89",fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],"char":"\ud83c\udf8e",fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],"char":"\ud83c\udf90",fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],"char":"\ud83c\udf8c",fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],"char":"\ud83c\udfee",fitzpatrick_scale:!1,category:"objects"},red_envelope:{keywords:["gift"],"char":"\ud83e\udde7",fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],"char":"\u2709\ufe0f",fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],"char":"\ud83d\udce9",fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],"char":"\ud83d\udce8",fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],"char":"\ud83d\udce7",fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],"char":"\ud83d\udc8c",fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],"char":"\ud83d\udcee",fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],"char":"\ud83d\udcea",fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],"char":"\ud83d\udceb",fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],"char":"\ud83d\udcec",fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],"char":"\ud83d\udced",fitzpatrick_scale:!1,category:"objects"},"package":{keywords:["mail","gift","cardboard","box","moving"],"char":"\ud83d\udce6",fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],"char":"\ud83d\udcef",fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],"char":"\ud83d\udce5",fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],"char":"\ud83d\udce4",fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],"char":"\ud83d\udcdc",fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],"char":"\ud83d\udcc3",fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],"char":"\ud83d\udcd1",fitzpatrick_scale:!1,category:"objects"},receipt:{keywords:["accounting","expenses"],"char":"\ud83e\uddfe",fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],"char":"\ud83d\udcca",fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],"char":"\ud83d\udcc8",fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],"char":"\ud83d\udcc9",fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],"char":"\ud83d\udcc4",fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],"char":"\ud83d\udcc5",fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],"char":"\ud83d\udcc6",fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],"char":"\ud83d\uddd3",fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],"char":"\ud83d\udcc7",fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],"char":"\ud83d\uddc3",fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],"char":"\ud83d\uddf3",fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],"char":"\ud83d\uddc4",fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],"char":"\ud83d\udccb",fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],"char":"\ud83d\uddd2",fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],"char":"\ud83d\udcc1",fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],"char":"\ud83d\udcc2",fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],"char":"\ud83d\uddc2",fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],"char":"\ud83d\uddde",fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],"char":"\ud83d\udcf0",fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],"char":"\ud83d\udcd3",fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],"char":"\ud83d\udcd5",fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],"char":"\ud83d\udcd7",fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],"char":"\ud83d\udcd8",fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],"char":"\ud83d\udcd9",fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],"char":"\ud83d\udcd4",fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],"char":"\ud83d\udcd2",fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],"char":"\ud83d\udcda",fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],"char":"\ud83d\udcd6",fitzpatrick_scale:!1,category:"objects"},safety_pin:{keywords:["diaper"],"char":"\ud83e\uddf7",fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],"char":"\ud83d\udd17",fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],"char":"\ud83d\udcce",fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],"char":"\ud83d\udd87",fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],"char":"\u2702\ufe0f",fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],"char":"\ud83d\udcd0",fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],"char":"\ud83d\udccf",fitzpatrick_scale:!1,category:"objects"},abacus:{keywords:["calculation"],"char":"\ud83e\uddee",fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],"char":"\ud83d\udccc",fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],"char":"\ud83d\udccd",fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],"char":"\ud83d\udea9",fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],"char":"\ud83c\udff3",fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],"char":"\ud83c\udff4",fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],"char":"\ud83c\udff3\ufe0f\u200d\ud83c\udf08",fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],"char":"\ud83d\udd10",fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],"char":"\ud83d\udd12",fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],"char":"\ud83d\udd13",fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],"char":"\ud83d\udd0f",fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],"char":"\ud83d\udd8a",fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],"char":"\ud83d\udd8b",fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],"char":"\u2712\ufe0f",fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],"char":"\ud83d\udcdd",fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],"char":"\u270f\ufe0f",fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],"char":"\ud83d\udd8d",fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],"char":"\ud83d\udd8c",fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],"char":"\ud83d\udd0d",fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],"char":"\ud83d\udd0e",fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],"char":"\u2764\ufe0f",fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83e\udde1",fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc9b",fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc9a",fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc99",fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc9c",fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],"char":"\ud83d\udda4",fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],"char":"\ud83d\udc94",fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],"char":"\u2763",fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],"char":"\ud83d\udc95",fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc9e",fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],"char":"\ud83d\udc93",fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],"char":"\ud83d\udc97",fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],"char":"\ud83d\udc96",fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],"char":"\ud83d\udc98",fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],"char":"\ud83d\udc9d",fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],"char":"\ud83d\udc9f",fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],"char":"\u262e",fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],"char":"\u271d",fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],"char":"\u262a",fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],"char":"\ud83d\udd49",fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],"char":"\u2638",fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],"char":"\u2721",fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],"char":"\ud83d\udd2f",fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],"char":"\ud83d\udd4e",fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],"char":"\u262f",fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],"char":"\u2626",fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],"char":"\ud83d\uded0",fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],"char":"\u26ce",fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],"char":"\u2648",fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],"char":"\u2649",fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u264a",fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u264b",fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],"char":"\u264c",fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u264d",fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],"char":"\u264e",fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],"char":"\u264f",fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u2650",fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],"char":"\u2651",fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],"char":"\u2652",fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],"char":"\u2653",fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],"char":"\ud83c\udd94",fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],"char":"\u269b",fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],"char":"\ud83c\ude33",fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],"char":"\ud83c\ude39",fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],"char":"\u2622",fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],"char":"\u2623",fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],"char":"\ud83d\udcf4",fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],"char":"\ud83d\udcf3",fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],"char":"\ud83c\ude36",fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],"char":"\ud83c\ude1a",fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],"char":"\ud83c\ude38",fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],"char":"\ud83c\ude3a",fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],"char":"\ud83c\ude37\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],"char":"\u2734\ufe0f",fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],"char":"\ud83c\udd9a",fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],"char":"\ud83c\ude51",fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],"char":"\ud83d\udcae",fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],"char":"\ud83c\ude50",fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],"char":"\u3299\ufe0f",fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],"char":"\u3297\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],"char":"\ud83c\ude34",fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],"char":"\ud83c\ude35",fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],"char":"\ud83c\ude32",fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],"char":"\ud83c\udd70\ufe0f",fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],"char":"\ud83c\udd71\ufe0f",fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],"char":"\ud83c\udd8e",fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],"char":"\ud83c\udd91",fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],"char":"\ud83c\udd7e\ufe0f",fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],"char":"\ud83c\udd98",fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],"char":"\u26d4",fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],"char":"\ud83d\udcdb",fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],"char":"\ud83d\udeab",fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],"char":"\u274c",fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],"char":"\u2b55",fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],"char":"\ud83d\uded1",fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],"char":"\ud83d\udca2",fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],"char":"\u2668\ufe0f",fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],"char":"\ud83d\udeb7",fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],"char":"\ud83d\udeaf",fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],"char":"\ud83d\udeb3",fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],"char":"\ud83d\udeb1",fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],"char":"\ud83d\udd1e",fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],"char":"\ud83d\udcf5",fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],"char":"\u2757",fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],"char":"\u2755",fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],"char":"\u2753",fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],"char":"\u2754",fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],"char":"\u203c\ufe0f",fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],"char":"\u2049\ufe0f",fitzpatrick_scale:!1,category:"symbols"},100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],"char":"\ud83d\udcaf",fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],"char":"\ud83d\udd05",fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],"char":"\ud83d\udd06",fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],"char":"\ud83d\udd31",fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],"char":"\u269c",fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],"char":"\u303d\ufe0f",fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],"char":"\u26a0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],"char":"\ud83d\udeb8",fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],"char":"\ud83d\udd30",fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],"char":"\u267b\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],"char":"\ud83c\ude2f",fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],"char":"\ud83d\udcb9",fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],"char":"\u2747\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],"char":"\u2733\ufe0f",fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],"char":"\u274e",fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],"char":"\u2705",fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],"char":"\ud83d\udca0",fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],"char":"\ud83c\udf00",fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],"char":"\u27bf",fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],"char":"\ud83c\udf10",fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],"char":"\u24c2\ufe0f",fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],"char":"\ud83c\udfe7",fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],"char":"\ud83c\ude02\ufe0f",fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],"char":"\ud83d\udec2",fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],"char":"\ud83d\udec3",fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],"char":"\ud83d\udec4",fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],"char":"\ud83d\udec5",fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],"char":"\u267f",fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],"char":"\ud83d\udead",fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],"char":"\ud83d\udebe",fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],"char":"\ud83c\udd7f\ufe0f",fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],"char":"\ud83d\udeb0",fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],"char":"\ud83d\udeb9",fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],"char":"\ud83d\udeba",fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],"char":"\ud83d\udebc",fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],"char":"\ud83d\udebb",fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],"char":"\ud83d\udeae",fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],"char":"\ud83c\udfa6",fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],"char":"\ud83d\udcf6",fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],"char":"\ud83c\ude01",fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],"char":"\ud83c\udd96",fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],"char":"\ud83c\udd97",fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],"char":"\ud83c\udd99",fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],"char":"\ud83c\udd92",fitzpatrick_scale:!1,category:"symbols"},"new":{keywords:["blue-square","words","start"],"char":"\ud83c\udd95",fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],"char":"\ud83c\udd93",fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],"char":"0\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],"char":"1\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],"char":"2\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],"char":"3\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],"char":"4\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],"char":"5\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],"char":"6\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],"char":"7\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],"char":"8\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],"char":"9\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],"char":"\ud83d\udd1f",fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],"char":"*\u20e3",fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],"char":"\ud83d\udd22",fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],"char":"\u23cf\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],"char":"\u25b6\ufe0f",fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],"char":"\u23f8",fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],"char":"\u23ed",fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],"char":"\u23f9",fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],"char":"\u23fa",fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],"char":"\u23ef",fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],"char":"\u23ee",fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],"char":"\u23e9",fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],"char":"\u23ea",fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],"char":"\ud83d\udd00",fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],"char":"\ud83d\udd01",fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],"char":"\ud83d\udd02",fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],"char":"\u25c0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],"char":"\ud83d\udd3c",fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],"char":"\ud83d\udd3d",fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],"char":"\u23eb",fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],"char":"\u23ec",fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],"char":"\u27a1\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],"char":"\u2b05\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],"char":"\u2b06\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],"char":"\u2b07\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],"char":"\u2197\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],"char":"\u2198\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],"char":"\u2199\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],"char":"\u2196\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],"char":"\u2195\ufe0f",fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],"char":"\u2194\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],"char":"\ud83d\udd04",fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],"char":"\u21aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],"char":"\u21a9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],"char":"\u2934\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],"char":"\u2935\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],"char":"#\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],"char":"\u2139\ufe0f",fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],"char":"\ud83d\udd24",fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],"char":"\ud83d\udd21",fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],"char":"\ud83d\udd20",fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],"char":"\ud83d\udd23",fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],"char":"\ud83c\udfb5",fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],"char":"\ud83c\udfb6",fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],"char":"\u3030\ufe0f",fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],"char":"\u27b0",fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],"char":"\u2714\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],"char":"\ud83d\udd03",fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],"char":"\u2795",fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],"char":"\u2796",fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],"char":"\u2797",fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],"char":"\u2716\ufe0f",fitzpatrick_scale:!1,category:"symbols"},infinity:{keywords:["forever"],"char":"\u267e",fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],"char":"\ud83d\udcb2",fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],"char":"\ud83d\udcb1",fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],"char":"\xa9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],"char":"\xae\ufe0f",fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],"char":"\u2122\ufe0f",fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],"char":"\ud83d\udd1a",fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],"char":"\ud83d\udd19",fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],"char":"\ud83d\udd1b",fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],"char":"\ud83d\udd1d",fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],"char":"\ud83d\udd1c",fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],"char":"\u2611\ufe0f",fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],"char":"\ud83d\udd18",fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],"char":"\u26aa",fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],"char":"\u26ab",fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],"char":"\ud83d\udd34",fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],"char":"\ud83d\udd35",fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],"char":"\ud83d\udd38",fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],"char":"\ud83d\udd39",fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],"char":"\ud83d\udd36",fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],"char":"\ud83d\udd37",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],"char":"\ud83d\udd3a",fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],"char":"\u25aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],"char":"\u25ab\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],"char":"\u2b1b",fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],"char":"\u2b1c",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],"char":"\ud83d\udd3b",fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],"char":"\u25fc\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],"char":"\u25fb\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],"char":"\u25fe",fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],"char":"\u25fd",fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],"char":"\ud83d\udd32",fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],"char":"\ud83d\udd33",fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],"char":"\ud83d\udd08",fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],"char":"\ud83d\udd09",fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],"char":"\ud83d\udd0a",fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],"char":"\ud83d\udd07",fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],"char":"\ud83d\udce3",fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],"char":"\ud83d\udce2",fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],"char":"\ud83d\udd14",fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],"char":"\ud83d\udd15",fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],"char":"\ud83c\udccf",fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],"char":"\ud83c\udc04",fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],"char":"\u2660\ufe0f",fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],"char":"\u2663\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],"char":"\u2665\ufe0f",fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],"char":"\u2666\ufe0f",fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],"char":"\ud83c\udfb4",fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],"char":"\ud83d\udcad",fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],"char":"\ud83d\uddef",fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],"char":"\ud83d\udcac",fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],"char":"\ud83d\udde8",fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd50",fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd51",fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd52",fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd53",fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd54",fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],"char":"\ud83d\udd55",fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd56",fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd57",fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd58",fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd59",fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5a",fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],"char":"\ud83d\udd5b",fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5c",fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5d",fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5e",fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd5f",fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd60",fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd61",fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd62",fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd63",fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd64",fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd65",fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd66",fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],"char":"\ud83d\udd67",fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],"char":"\ud83c\udde8\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],"char":"\ud83c\udde9\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],"char":"\ud83c\uddea\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],"char":"\ud83c\uddeb\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],"char":"\ud83c\udde9\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],"char":"\ud83c\udded\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],"char":"\ud83c\uddee\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],"char":"\ud83c\uddef\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],"char":"\ud83c\uddef\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],"char":"\ud83c\uddef\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],"char":"\ud83c\uddef\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],"char":"\ud83c\uddfd\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf6",fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],"char":"\ud83c\uddfe\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],"char":"\ud83c\uddeb\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],"char":"\ud83c\uddf2\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],"char":"\ud83c\uddf0\ud83c\uddf5",fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],"char":"\ud83c\uddf3\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],"char":"\ud83c\uddf4\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],"char":"\ud83c\uddf6\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],"char":"\ud83c\udde7\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],"char":"\ud83c\uddf0\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],"char":"\ud83c\uddf5\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],"char":"\ud83c\uddfc\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],"char":"\ud83c\uddf7\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddfd",fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],"char":"\ud83c\uddff\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],"char":"\ud83c\uddec\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],"char":"\ud83c\uddf0\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],"char":"\ud83c\uddf1\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\udde9",fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],"char":"\ud83c\udde8\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],"char":"\ud83c\uddf8\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddef",fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf1",fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf0",fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf4",fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf9",fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf7",fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\udde8",fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],"char":"\ud83c\uddf9\ud83c\uddfb",fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\uddec",fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],"char":"\ud83c\udde6\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],"char":"\ud83c\uddec\ud83c\udde7",fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],"char":"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f",fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],"char":"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f",fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],"char":"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f",fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\uddf8",fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddee",fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\uddfe",fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],"char":"\ud83c\uddfa\ud83c\uddff",fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddfa",fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\udde6",fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],"char":"\ud83c\uddfb\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],"char":"\ud83c\uddfc\ud83c\uddeb",fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],"char":"\ud83c\uddea\ud83c\udded",fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],"char":"\ud83c\uddfe\ud83c\uddea",fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],"char":"\ud83c\uddff\ud83c\uddf2",fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],"char":"\ud83c\uddff\ud83c\uddfc",fitzpatrick_scale:!1,category:"flags"},united_nations:{keywords:["un","flag","banner"],"char":"\ud83c\uddfa\ud83c\uddf3",fitzpatrick_scale:!1,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],"char":"\ud83c\udff4\u200d\u2620\ufe0f",fitzpatrick_scale:!1,category:"flags"}}); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/emoticons/plugin.js b/component/pear/module/tinymce/tinymce/plugins/emoticons/plugin.js deleted file mode 100644 index e939611e2eb8f80c0244498e8c0ee911f71c24c5..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/emoticons/plugin.js +++ /dev/null @@ -1,605 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -(function () { - 'use strict'; - - var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); - - var DEFAULT_ID = 'tinymce.plugins.emoticons'; - var getEmoticonDatabase = function (editor) { - return editor.getParam('emoticons_database', 'emojis', 'string'); - }; - var getEmoticonDatabaseUrl = function (editor, pluginUrl) { - var database = getEmoticonDatabase(editor); - return editor.getParam('emoticons_database_url', pluginUrl + '/js/' + database + editor.suffix + '.js', 'string'); - }; - var getEmoticonDatabaseId = function (editor) { - return editor.getParam('emoticons_database_id', DEFAULT_ID, 'string'); - }; - var getAppendedEmoticons = function (editor) { - return editor.getParam('emoticons_append', {}, 'object'); - }; - var getEmotionsImageUrl = function (editor) { - return editor.getParam('emoticons_images_url', 'https://twemoji.maxcdn.com/v/13.0.1/72x72/', 'string'); - }; - - var __assign = function () { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) - if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - - var Cell = function (initial) { - var value = initial; - var get = function () { - return value; - }; - var set = function (v) { - value = v; - }; - return { - get: get, - set: set - }; - }; - - var hasOwnProperty = Object.prototype.hasOwnProperty; - var shallow = function (old, nu) { - return nu; - }; - var baseMerge = function (merger) { - return function () { - var objects = new Array(arguments.length); - for (var i = 0; i < objects.length; i++) { - objects[i] = arguments[i]; - } - if (objects.length === 0) { - throw new Error('Can\'t merge zero objects'); - } - var ret = {}; - for (var j = 0; j < objects.length; j++) { - var curObject = objects[j]; - for (var key in curObject) { - if (hasOwnProperty.call(curObject, key)) { - ret[key] = merger(ret[key], curObject[key]); - } - } - } - return ret; - }; - }; - var merge = baseMerge(shallow); - - var noop = function () { - }; - var constant = function (value) { - return function () { - return value; - }; - }; - var never = constant(false); - var always = constant(true); - - var none = function () { - return NONE; - }; - var NONE = function () { - var eq = function (o) { - return o.isNone(); - }; - var call = function (thunk) { - return thunk(); - }; - var id = function (n) { - return n; - }; - var me = { - fold: function (n, _s) { - return n(); - }, - is: never, - isSome: never, - isNone: always, - getOr: id, - getOrThunk: call, - getOrDie: function (msg) { - throw new Error(msg || 'error: getOrDie called on none.'); - }, - getOrNull: constant(null), - getOrUndefined: constant(undefined), - or: id, - orThunk: call, - map: none, - each: noop, - bind: none, - exists: never, - forall: always, - filter: none, - equals: eq, - equals_: eq, - toArray: function () { - return []; - }, - toString: constant('none()') - }; - return me; - }(); - var some = function (a) { - var constant_a = constant(a); - var self = function () { - return me; - }; - var bind = function (f) { - return f(a); - }; - var me = { - fold: function (n, s) { - return s(a); - }, - is: function (v) { - return a === v; - }, - isSome: always, - isNone: never, - getOr: constant_a, - getOrThunk: constant_a, - getOrDie: constant_a, - getOrNull: constant_a, - getOrUndefined: constant_a, - or: self, - orThunk: self, - map: function (f) { - return some(f(a)); - }, - each: function (f) { - f(a); - }, - bind: bind, - exists: bind, - forall: bind, - filter: function (f) { - return f(a) ? me : NONE; - }, - toArray: function () { - return [a]; - }, - toString: function () { - return 'some(' + a + ')'; - }, - equals: function (o) { - return o.is(a); - }, - equals_: function (o, elementEq) { - return o.fold(never, function (b) { - return elementEq(a, b); - }); - } - }; - return me; - }; - var from = function (value) { - return value === null || value === undefined ? NONE : some(value); - }; - var Optional = { - some: some, - none: none, - from: from - }; - - var keys = Object.keys; - var hasOwnProperty$1 = Object.hasOwnProperty; - var each = function (obj, f) { - var props = keys(obj); - for (var k = 0, len = props.length; k < len; k++) { - var i = props[k]; - var x = obj[i]; - f(x, i); - } - }; - var map = function (obj, f) { - return tupleMap(obj, function (x, i) { - return { - k: i, - v: f(x, i) - }; - }); - }; - var tupleMap = function (obj, f) { - var r = {}; - each(obj, function (x, i) { - var tuple = f(x, i); - r[tuple.k] = tuple.v; - }); - return r; - }; - var has = function (obj, key) { - return hasOwnProperty$1.call(obj, key); - }; - - var checkRange = function (str, substr, start) { - return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr; - }; - var contains = function (str, substr) { - return str.indexOf(substr) !== -1; - }; - var startsWith = function (str, prefix) { - return checkRange(str, prefix, 0); - }; - - var global$1 = tinymce.util.Tools.resolve('tinymce.Resource'); - - var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay'); - - var global$3 = tinymce.util.Tools.resolve('tinymce.util.Promise'); - - var ALL_CATEGORY = 'All'; - var categoryNameMap = { - symbols: 'Symbols', - people: 'People', - animals_and_nature: 'Animals and Nature', - food_and_drink: 'Food and Drink', - activity: 'Activity', - travel_and_places: 'Travel and Places', - objects: 'Objects', - flags: 'Flags', - user: 'User Defined' - }; - var translateCategory = function (categories, name) { - return has(categories, name) ? categories[name] : name; - }; - var getUserDefinedEmoticons = function (editor) { - var userDefinedEmoticons = getAppendedEmoticons(editor); - return map(userDefinedEmoticons, function (value) { - return __assign({ - keywords: [], - category: 'user' - }, value); - }); - }; - var initDatabase = function (editor, databaseUrl, databaseId) { - var categories = Cell(Optional.none()); - var all = Cell(Optional.none()); - var emojiImagesUrl = getEmotionsImageUrl(editor); - var getEmoji = function (lib) { - if (startsWith(lib.char, '= max; - }; - }); - for (var i = 0; i < list.length; i++) { - if (pattern.length === 0 || emojiMatches(list[i], lowerCasePattern)) { - matches.push({ - value: list[i].char, - text: list[i].title, - icon: list[i].char - }); - if (reachedLimit(matches.length)) { - break; - } - } - } - return matches; - }; - - var init = function (editor, database) { - editor.ui.registry.addAutocompleter('emoticons', { - ch: ':', - columns: 'auto', - minChars: 2, - fetch: function (pattern, maxResults) { - return database.waitForLoad().then(function () { - var candidates = database.listAll(); - return emojisFrom(candidates, pattern, Optional.some(maxResults)); - }); - }, - onAction: function (autocompleteApi, rng, value) { - editor.selection.setRng(rng); - editor.insertContent(value); - autocompleteApi.hide(); - } - }); - }; - - var last = function (fn, rate) { - var timer = null; - var cancel = function () { - if (timer !== null) { - clearTimeout(timer); - timer = null; - } - }; - var throttle = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - if (timer !== null) { - clearTimeout(timer); - } - timer = setTimeout(function () { - fn.apply(null, args); - timer = null; - }, rate); - }; - return { - cancel: cancel, - throttle: throttle - }; - }; - - var insertEmoticon = function (editor, ch) { - editor.insertContent(ch); - }; - - var patternName = 'pattern'; - var open = function (editor, database) { - var initialState = { - pattern: '', - results: emojisFrom(database.listAll(), '', Optional.some(300)) - }; - var currentTab = Cell(ALL_CATEGORY); - var scan = function (dialogApi) { - var dialogData = dialogApi.getData(); - var category = currentTab.get(); - var candidates = database.listCategory(category); - var results = emojisFrom(candidates, dialogData[patternName], category === ALL_CATEGORY ? Optional.some(300) : Optional.none()); - dialogApi.setData({ results: results }); - }; - var updateFilter = last(function (dialogApi) { - scan(dialogApi); - }, 200); - var searchField = { - label: 'Search', - type: 'input', - name: patternName - }; - var resultsField = { - type: 'collection', - name: 'results' - }; - var getInitialState = function () { - var body = { - type: 'tabpanel', - tabs: map$1(database.listCategories(), function (cat) { - return { - title: cat, - name: cat, - items: [ - searchField, - resultsField - ] - }; - }) - }; - return { - title: 'Emoticons', - size: 'normal', - body: body, - initialData: initialState, - onTabChange: function (dialogApi, details) { - currentTab.set(details.newTabName); - updateFilter.throttle(dialogApi); - }, - onChange: updateFilter.throttle, - onAction: function (dialogApi, actionData) { - if (actionData.name === 'results') { - insertEmoticon(editor, actionData.value); - dialogApi.close(); - } - }, - buttons: [{ - type: 'cancel', - text: 'Close', - primary: true - }] - }; - }; - var dialogApi = editor.windowManager.open(getInitialState()); - dialogApi.focus(patternName); - if (!database.hasLoaded()) { - dialogApi.block('Loading emoticons...'); - database.waitForLoad().then(function () { - dialogApi.redial(getInitialState()); - updateFilter.throttle(dialogApi); - dialogApi.focus(patternName); - dialogApi.unblock(); - }).catch(function (_err) { - dialogApi.redial({ - title: 'Emoticons', - body: { - type: 'panel', - items: [{ - type: 'alertbanner', - level: 'error', - icon: 'warning', - text: '

                Could not load emoticons

                ' - }] - }, - buttons: [{ - type: 'cancel', - text: 'Close', - primary: true - }], - initialData: { - pattern: '', - results: [] - } - }); - dialogApi.focus(patternName); - dialogApi.unblock(); - }); - } - }; - - var register = function (editor, database) { - var onAction = function () { - return open(editor, database); - }; - editor.ui.registry.addButton('emoticons', { - tooltip: 'Emoticons', - icon: 'emoji', - onAction: onAction - }); - editor.ui.registry.addMenuItem('emoticons', { - text: 'Emoticons...', - icon: 'emoji', - onAction: onAction - }); - }; - - function Plugin () { - global.add('emoticons', function (editor, pluginUrl) { - var databaseUrl = getEmoticonDatabaseUrl(editor, pluginUrl); - var databaseId = getEmoticonDatabaseId(editor); - var database = initDatabase(editor, databaseUrl, databaseId); - register(editor, database); - init(editor, database); - setup(editor); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/emoticons/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/emoticons/plugin.min.js deleted file mode 100644 index 250d78655840f3c41d07243eed6ca3514c17a54b..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/emoticons/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var u,t,n,e,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=function(){return(o=Object.assign||function(t){for(var n,e=1,r=arguments.length;e=i.length&&o.substr(u,u+i.length)===i?e["char"].replace(/src="([^"]+)"/,function(t,n){return'src="'+f+n+'"'}):e["char"]),category:_(A,t.category)},c=l[a.category]!==undefined?l[a.category]:[];l[a.category]=c.concat([a]),s.push(a)}),r.set(h.some(l)),n.set(h.some(s))};e.on("init",function(){O.load(t,o).then(function(t){var n=T(e);i(c(t,n))},function(t){console.log("Failed to load emoticons: "+t),r.set(h.some({})),n.set(h.some([]))})});var u=function(){return n.get().getOr([])},a=function(){return r.get().isSome()&&n.get().isSome()};return{listCategories:function(){return[k].concat(y(r.get().getOr({})))},hasLoaded:a,waitForLoad:function(){return a()?j.resolve(!0):new j(function(t,n){var e=15,r=C.setInterval(function(){a()?(C.clearInterval(r),t(!0)):--e<0&&(console.log("Could not load emojis from url: "+o),C.clearInterval(r),n(!1))},100)})},listAll:u,listCategory:function(n){return n===k?u():r.get().bind(function(t){return h.from(t[n])}).getOr([])}}},x=function(t,n,e){for(var r=[],o=n.toLowerCase(),i=e.fold(function(){return l},function(n){return function(t){return n<=t}}),u=0;uCould not load emoticons

                "}]},buttons:[{type:"cancel",text:"Close",primary:!0}],initialData:{pattern:"",results:[]}}),f.focus(D),f.unblock()}))};r.add("emoticons",function(t,n){var e,r,o,i,u,a,c,l,s,f=(r=n,o=(e=t).getParam("emoticons_database","emojis","string"),e.getParam("emoticons_database_url",r+"/js/"+o+e.suffix+".js","string")),m=t.getParam("emoticons_database_id","tinymce.plugins.emoticons","string"),g=P(t,f,m);u=g,a=function(){return L(i,u)},(i=t).ui.registry.addButton("emoticons",{tooltip:"Emoticons",icon:"emoji",onAction:a}),i.ui.registry.addMenuItem("emoticons",{text:"Emoticons...",icon:"emoji",onAction:a}),l=g,(c=t).ui.registry.addAutocompleter("emoticons",{ch:":",columns:"auto",minChars:2,fetch:function(n,e){return l.waitForLoad().then(function(){var t=l.listAll();return x(t,n,h.some(e))})},onAction:function(t,n,e){c.selection.setRng(n),c.insertContent(e),t.hide()}}),(s=t).on("PreInit",function(){s.parser.addAttributeFilter("data-emoticon",function(t){!function(t,n){for(var e=0,r=t.length;e'); - }; - var getProtect = function (editor) { - return editor.getParam('protect'); - }; - - var parseHeader = function (head) { - return global$2({ - validate: false, - root_name: '#document' - }).parse(head, { format: 'xhtml' }); - }; - var htmlToData = function (editor, head) { - var headerFragment = parseHeader(head); - var data = {}; - var elm, matches; - function getAttr(elm, name) { - var value = elm.attr(name); - return value || ''; - } - data.fontface = getDefaultFontFamily(editor); - data.fontsize = getDefaultFontSize(editor); - elm = headerFragment.firstChild; - if (elm.type === 7) { - data.xml_pi = true; - matches = /encoding="([^"]+)"/.exec(elm.value); - if (matches) { - data.docencoding = matches[1]; - } - } - elm = headerFragment.getAll('#doctype')[0]; - if (elm) { - data.doctype = ''; - } - elm = headerFragment.getAll('title')[0]; - if (elm && elm.firstChild) { - data.title = elm.firstChild.value; - } - global$1.each(headerFragment.getAll('meta'), function (meta) { - var name = meta.attr('name'); - var httpEquiv = meta.attr('http-equiv'); - var matches; - if (name) { - data[name.toLowerCase()] = meta.attr('content'); - } else if (httpEquiv === 'Content-Type') { - matches = /charset\s*=\s*(.*)\s*/gi.exec(meta.attr('content')); - if (matches) { - data.docencoding = matches[1]; - } - } - }); - elm = headerFragment.getAll('html')[0]; - if (elm) { - data.langcode = getAttr(elm, 'lang') || getAttr(elm, 'xml:lang'); - } - data.stylesheets = []; - global$1.each(headerFragment.getAll('link'), function (link) { - if (link.attr('rel') === 'stylesheet') { - data.stylesheets.push(link.attr('href')); - } - }); - elm = headerFragment.getAll('body')[0]; - if (elm) { - data.langdir = getAttr(elm, 'dir'); - data.style = getAttr(elm, 'style'); - data.visited_color = getAttr(elm, 'vlink'); - data.link_color = getAttr(elm, 'link'); - data.active_color = getAttr(elm, 'alink'); - } - return data; - }; - var dataToHtml = function (editor, data, head) { - var headElement, elm, value; - var dom = editor.dom; - function setAttr(elm, name, value) { - elm.attr(name, value ? value : undefined); - } - function addHeadNode(node) { - if (headElement.firstChild) { - headElement.insert(node, headElement.firstChild); - } else { - headElement.append(node); - } - } - var headerFragment = parseHeader(head); - headElement = headerFragment.getAll('head')[0]; - if (!headElement) { - elm = headerFragment.getAll('html')[0]; - headElement = new global$3('head', 1); - if (elm.firstChild) { - elm.insert(headElement, elm.firstChild, true); - } else { - elm.append(headElement); - } - } - elm = headerFragment.firstChild; - if (data.xml_pi) { - value = 'version="1.0"'; - if (data.docencoding) { - value += ' encoding="' + data.docencoding + '"'; - } - if (elm.type !== 7) { - elm = new global$3('xml', 7); - headerFragment.insert(elm, headerFragment.firstChild, true); - } - elm.value = value; - } else if (elm && elm.type === 7) { - elm.remove(); - } - elm = headerFragment.getAll('#doctype')[0]; - if (data.doctype) { - if (!elm) { - elm = new global$3('#doctype', 10); - if (data.xml_pi) { - headerFragment.insert(elm, headerFragment.firstChild); - } else { - addHeadNode(elm); - } - } - elm.value = data.doctype.substring(9, data.doctype.length - 1); - } else if (elm) { - elm.remove(); - } - elm = null; - global$1.each(headerFragment.getAll('meta'), function (meta) { - if (meta.attr('http-equiv') === 'Content-Type') { - elm = meta; - } - }); - if (data.docencoding) { - if (!elm) { - elm = new global$3('meta', 1); - elm.attr('http-equiv', 'Content-Type'); - elm.shortEnded = true; - addHeadNode(elm); - } - elm.attr('content', 'text/html; charset=' + data.docencoding); - } else if (elm) { - elm.remove(); - } - elm = headerFragment.getAll('title')[0]; - if (data.title) { - if (!elm) { - elm = new global$3('title', 1); - addHeadNode(elm); - } else { - elm.empty(); - } - elm.append(new global$3('#text', 3)).value = data.title; - } else if (elm) { - elm.remove(); - } - global$1.each('keywords,description,author,copyright,robots'.split(','), function (name) { - var nodes = headerFragment.getAll('meta'); - var i, meta; - var value = data[name]; - for (i = 0; i < nodes.length; i++) { - meta = nodes[i]; - if (meta.attr('name') === name) { - if (value) { - meta.attr('content', value); - } else { - meta.remove(); - } - return; - } - } - if (value) { - elm = new global$3('meta', 1); - elm.attr('name', name); - elm.attr('content', value); - elm.shortEnded = true; - addHeadNode(elm); - } - }); - var currentStyleSheetsMap = {}; - global$1.each(headerFragment.getAll('link'), function (stylesheet) { - if (stylesheet.attr('rel') === 'stylesheet') { - currentStyleSheetsMap[stylesheet.attr('href')] = stylesheet; - } - }); - global$1.each(data.stylesheets, function (stylesheet) { - if (!currentStyleSheetsMap[stylesheet]) { - elm = new global$3('link', 1); - elm.attr({ - rel: 'stylesheet', - text: 'text/css', - href: stylesheet - }); - elm.shortEnded = true; - addHeadNode(elm); - } - delete currentStyleSheetsMap[stylesheet]; - }); - global$1.each(currentStyleSheetsMap, function (stylesheet) { - stylesheet.remove(); - }); - elm = headerFragment.getAll('body')[0]; - if (elm) { - setAttr(elm, 'dir', data.langdir); - setAttr(elm, 'style', data.style); - setAttr(elm, 'vlink', data.visited_color); - setAttr(elm, 'link', data.link_color); - setAttr(elm, 'alink', data.active_color); - dom.setAttribs(editor.getBody(), { - style: data.style, - dir: data.dir, - vLink: data.visited_color, - link: data.link_color, - aLink: data.active_color - }); - } - elm = headerFragment.getAll('html')[0]; - if (elm) { - setAttr(elm, 'lang', data.langcode); - setAttr(elm, 'xml:lang', data.langcode); - } - if (!headElement.firstChild) { - headElement.remove(); - } - var html = global$4({ - validate: false, - indent: true, - indent_before: 'head,html,body,meta,title,script,link,style', - indent_after: 'head,html,body,meta,title,script,link,style' - }).serialize(headerFragment); - return html.substring(0, html.indexOf('')); - }; - - var open = function (editor, headState) { - var data = htmlToData(editor, headState.get()); - var defaultData = { - title: '', - keywords: '', - description: '', - robots: '', - author: '', - docencoding: '' - }; - var initialData = __assign(__assign({}, defaultData), data); - editor.windowManager.open({ - title: 'Metadata and Document Properties', - size: 'normal', - body: { - type: 'panel', - items: [ - { - name: 'title', - type: 'input', - label: 'Title' - }, - { - name: 'keywords', - type: 'input', - label: 'Keywords' - }, - { - name: 'description', - type: 'input', - label: 'Description' - }, - { - name: 'robots', - type: 'input', - label: 'Robots' - }, - { - name: 'author', - type: 'input', - label: 'Author' - }, - { - name: 'docencoding', - type: 'input', - label: 'Encoding' - } - ] - }, - buttons: [ - { - type: 'cancel', - name: 'cancel', - text: 'Cancel' - }, - { - type: 'submit', - name: 'save', - text: 'Save', - primary: true - } - ], - initialData: initialData, - onSubmit: function (api) { - var nuData = api.getData(); - var headHtml = dataToHtml(editor, global$1.extend(data, nuData), headState.get()); - headState.set(headHtml); - api.close(); - } - }); - }; - - var register = function (editor, headState) { - editor.addCommand('mceFullPageProperties', function () { - open(editor, headState); - }); - }; - - var protectHtml = function (protect, html) { - global$1.each(protect, function (pattern) { - html = html.replace(pattern, function (str) { - return ''; - }); - }); - return html; - }; - var unprotectHtml = function (html) { - return html.replace(//g, function (a, m) { - return unescape(m); - }); - }; - - var each = global$1.each; - var low = function (s) { - return s.replace(/<\/?[A-Z]+/g, function (a) { - return a.toLowerCase(); - }); - }; - var handleSetContent = function (editor, headState, footState, evt) { - var startPos, endPos, content, styles = ''; - var dom = editor.dom; - if (evt.selection) { - return; - } - content = protectHtml(getProtect(editor), evt.content); - if (evt.format === 'raw' && headState.get()) { - return; - } - if (evt.source_view && shouldHideInSourceView(editor)) { - return; - } - if (content.length === 0 && !evt.source_view) { - content = global$1.trim(headState.get()) + '\n' + global$1.trim(content) + '\n' + global$1.trim(footState.get()); - } - content = content.replace(/<(\/?)BODY/gi, '<$1body'); - startPos = content.indexOf('', startPos); - headState.set(low(content.substring(0, startPos + 1))); - endPos = content.indexOf('\n'); - } - var headerFragment = parseHeader(headState.get()); - each(headerFragment.getAll('style'), function (node) { - if (node.firstChild) { - styles += node.firstChild.value; - } - }); - var bodyElm = headerFragment.getAll('body')[0]; - if (bodyElm) { - dom.setAttribs(editor.getBody(), { - style: bodyElm.attr('style') || '', - dir: bodyElm.attr('dir') || '', - vLink: bodyElm.attr('vlink') || '', - link: bodyElm.attr('link') || '', - aLink: bodyElm.attr('alink') || '' - }); - } - dom.remove('fullpage_styles'); - var headElm = editor.getDoc().getElementsByTagName('head')[0]; - if (styles) { - var styleElm = dom.add(headElm, 'style', { id: 'fullpage_styles' }); - styleElm.appendChild(document.createTextNode(styles)); - } - var currentStyleSheetsMap = {}; - global$1.each(headElm.getElementsByTagName('link'), function (stylesheet) { - if (stylesheet.rel === 'stylesheet' && stylesheet.getAttribute('data-mce-fullpage')) { - currentStyleSheetsMap[stylesheet.href] = stylesheet; - } - }); - global$1.each(headerFragment.getAll('link'), function (stylesheet) { - var href = stylesheet.attr('href'); - if (!href) { - return true; - } - if (!currentStyleSheetsMap[href] && stylesheet.attr('rel') === 'stylesheet') { - dom.add(headElm, 'link', { - 'rel': 'stylesheet', - 'text': 'text/css', - href: href, - 'data-mce-fullpage': '1' - }); - } - delete currentStyleSheetsMap[href]; - }); - global$1.each(currentStyleSheetsMap, function (stylesheet) { - stylesheet.parentNode.removeChild(stylesheet); - }); - }; - var getDefaultHeader = function (editor) { - var header = '', value, styles = ''; - if (getDefaultXmlPi(editor)) { - var piEncoding = getDefaultEncoding(editor); - header += '\n'; - } - header += getDefaultDocType(editor); - header += '\n\n\n'; - if (value = getDefaultTitle(editor)) { - header += '' + value + '\n'; - } - if (value = getDefaultEncoding(editor)) { - header += '\n'; - } - if (value = getDefaultFontFamily(editor)) { - styles += 'font-family: ' + value + ';'; - } - if (value = getDefaultFontSize(editor)) { - styles += 'font-size: ' + value + ';'; - } - if (value = getDefaultTextColor(editor)) { - styles += 'color: ' + value + ';'; - } - header += '\n\n'; - return header; - }; - var handleGetContent = function (editor, head, foot, evt) { - if (evt.format === 'html' && !evt.selection && (!evt.source_view || !shouldHideInSourceView(editor))) { - evt.content = unprotectHtml(global$1.trim(head) + '\n' + global$1.trim(evt.content) + '\n' + global$1.trim(foot)); - } - }; - var setup = function (editor, headState, footState) { - editor.on('BeforeSetContent', function (evt) { - handleSetContent(editor, headState, footState, evt); - }); - editor.on('GetContent', function (evt) { - handleGetContent(editor, headState.get(), footState.get(), evt); - }); - }; - - var register$1 = function (editor) { - editor.ui.registry.addButton('fullpage', { - tooltip: 'Metadata and document properties', - icon: 'document-properties', - onAction: function () { - editor.execCommand('mceFullPageProperties'); - } - }); - editor.ui.registry.addMenuItem('fullpage', { - text: 'Metadata and document properties', - icon: 'document-properties', - onAction: function () { - editor.execCommand('mceFullPageProperties'); - } - }); - }; - - function Plugin () { - global.add('fullpage', function (editor) { - var headState = Cell(''), footState = Cell(''); - register(editor, headState); - register$1(editor); - setup(editor, headState, footState); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/fullpage/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/fullpage/plugin.min.js deleted file mode 100644 index 2592f73cf86618453a95b62b7d29e38d2ebbfb02..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/fullpage/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var s=function(e){var t=e;return{get:function(){return t},set:function(e){t=e}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=function(){return(u=Object.assign||function(e){for(var t,n=1,l=arguments.length;n"),(n=r.getAll("title")[0])&&n.firstChild&&(a.title=n.firstChild.value),p.each(r.getAll("meta"),function(e){var t,n=e.attr("name"),l=e.attr("http-equiv");n?a[n.toLowerCase()]=e.attr("content"):"Content-Type"===l&&(t=/charset\s*=\s*(.*)\s*/gi.exec(e.attr("content")))&&(a.docencoding=t[1])}),(n=r.getAll("html")[0])&&(a.langcode=s(n,"lang")||s(n,"xml:lang")),a.stylesheets=[],p.each(r.getAll("link"),function(e){"stylesheet"===e.attr("rel")&&a.stylesheets.push(e.attr("href"))}),(n=r.getAll("body")[0])&&(a.langdir=s(n,"dir"),a.style=s(n,"style"),a.visited_color=s(n,"vlink"),a.link_color=s(n,"link"),a.active_color=s(n,"alink")),a);function s(e,t){return e.attr(t)||""}var d=u(u({},{title:"",keywords:"",description:"",robots:"",author:"",docencoding:""}),c);l.windowManager.open({title:"Metadata and Document Properties",size:"normal",body:{type:"panel",items:[{name:"title",type:"input",label:"Title"},{name:"keywords",type:"input",label:"Keywords"},{name:"description",type:"input",label:"Description"},{name:"robots",type:"input",label:"Robots"},{name:"author",type:"input",label:"Author"},{name:"docencoding",type:"input",label:"Encoding"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:d,onSubmit:function(e){var t=e.getData(),n=function(e,o,t){var r,n,l=e.dom;function i(e,t,n){e.attr(t,n||undefined)}function a(e){c.firstChild?c.insert(e,c.firstChild):c.append(e)}var c,s=v(t);(c=s.getAll("head")[0])||(r=s.getAll("html")[0],c=new m("head",1),r.firstChild?r.insert(c,r.firstChild,!0):r.append(c)),r=s.firstChild,o.xml_pi?(n='version="1.0"',o.docencoding&&(n+=' encoding="'+o.docencoding+'"'),7!==r.type&&(r=new m("xml",7),s.insert(r,s.firstChild,!0)),r.value=n):r&&7===r.type&&r.remove(),r=s.getAll("#doctype")[0],o.doctype?(r||(r=new m("#doctype",10),o.xml_pi?s.insert(r,s.firstChild):a(r)),r.value=o.doctype.substring(9,o.doctype.length-1)):r&&r.remove(),r=null,p.each(s.getAll("meta"),function(e){"Content-Type"===e.attr("http-equiv")&&(r=e)}),o.docencoding?(r||((r=new m("meta",1)).attr("http-equiv","Content-Type"),r.shortEnded=!0,a(r)),r.attr("content","text/html; charset="+o.docencoding)):r&&r.remove(),r=s.getAll("title")[0],o.title?(r?r.empty():a(r=new m("title",1)),r.append(new m("#text",3)).value=o.title):r&&r.remove(),p.each("keywords,description,author,copyright,robots".split(","),function(e){for(var t,n=s.getAll("meta"),l=o[e],i=0;i"))}(l,p.extend(c,t),i.get());i.set(n),e.close()}})},_=p.each,b=function(e){return e.replace(/<\/?[A-Z]+/g,function(e){return e.toLowerCase()})},x=function(e,t,n,l){var i,o,r,a,c,s,d,u,m,f="",g=e.dom;l.selection||(a=e.getParam("protect"),c=l.content,p.each(a,function(e){c=c.replace(e,function(e){return"\x3c!--mce:protected "+escape(e)+"--\x3e"})}),r=c,"raw"===l.format&&t.get()||l.source_view&&h(e)||(0!==r.length||l.source_view||(r=p.trim(t.get())+"\n"+p.trim(r)+"\n"+p.trim(n.get())),-1!==(i=(r=r.replace(/<(\/?)BODY/gi,"<$1body")).indexOf("",i),t.set(b(r.substring(0,i+1))),-1===(o=r.indexOf("\n")),s=v(t.get()),_(s.getAll("style"),function(e){e.firstChild&&(f+=e.firstChild.value)}),(d=s.getAll("body")[0])&&g.setAttribs(e.getBody(),{style:d.attr("style")||"",dir:d.attr("dir")||"",vLink:d.attr("vlink")||"",link:d.attr("link")||"",aLink:d.attr("alink")||""}),g.remove("fullpage_styles"),u=e.getDoc().getElementsByTagName("head")[0],f&&g.add(u,"style",{id:"fullpage_styles"}).appendChild(document.createTextNode(f)),m={},p.each(u.getElementsByTagName("link"),function(e){"stylesheet"===e.rel&&e.getAttribute("data-mce-fullpage")&&(m[e.href]=e)}),p.each(s.getAll("link"),function(e){var t=e.attr("href");if(!t)return!0;m[t]||"stylesheet"!==e.attr("rel")||g.add(u,"link",{rel:"stylesheet",text:"text/css",href:t,"data-mce-fullpage":"1"}),delete m[t]}),p.each(m,function(e){e.parentNode.removeChild(e)})))},k=function(e){var t,n="",l="";return e.getParam("fullpage_default_xml_pi")&&(n+='\n'),n+=e.getParam("fullpage_default_doctype",""),n+="\n\n\n",(t=e.getParam("fullpage_default_title"))&&(n+=""+t+"\n"),(t=i(e))&&(n+='\n'),(t=g(e))&&(l+="font-family: "+t+";"),(t=y(e))&&(l+="font-size: "+t+";"),(t=e.getParam("fullpage_default_text_color"))&&(l+="color: "+t+";"),n+="\n\n"},C=function(e,t,n,l){"html"!==l.format||l.selection||l.source_view&&h(e)||(l.content=(p.trim(t)+"\n"+p.trim(l.content)+"\n"+p.trim(n)).replace(//g,function(e,t){return unescape(t)}))};e.add("fullpage",function(e){var t,n,l,i,o,r,a=s(""),c=s("");n=a,(t=e).addCommand("mceFullPageProperties",function(){d(t,n)}),(l=e).ui.registry.addButton("fullpage",{tooltip:"Metadata and document properties",icon:"document-properties",onAction:function(){l.execCommand("mceFullPageProperties")}}),l.ui.registry.addMenuItem("fullpage",{text:"Metadata and document properties",icon:"document-properties",onAction:function(){l.execCommand("mceFullPageProperties")}}),o=a,r=c,(i=e).on("BeforeSetContent",function(e){x(i,o,r,e)}),i.on("GetContent",function(e){C(i,o.get(),r.get(),e)})})}(); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/fullscreen/plugin.js b/component/pear/module/tinymce/tinymce/plugins/fullscreen/plugin.js deleted file mode 100644 index deb9dde6471bdbdf50b70f79b2d787acd741ee2f..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/fullscreen/plugin.js +++ /dev/null @@ -1,979 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -(function () { - 'use strict'; - - var Cell = function (initial) { - var value = initial; - var get = function () { - return value; - }; - var set = function (v) { - value = v; - }; - return { - get: get, - set: set - }; - }; - - var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); - - var get = function (fullscreenState) { - return { - isFullscreen: function () { - return fullscreenState.get() !== null; - } - }; - }; - - var noop = function () { - }; - var compose = function (fa, fb) { - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return fa(fb.apply(null, args)); - }; - }; - var compose1 = function (fbc, fab) { - return function (a) { - return fbc(fab(a)); - }; - }; - var constant = function (value) { - return function () { - return value; - }; - }; - function curry(fn) { - var initialArgs = []; - for (var _i = 1; _i < arguments.length; _i++) { - initialArgs[_i - 1] = arguments[_i]; - } - return function () { - var restArgs = []; - for (var _i = 0; _i < arguments.length; _i++) { - restArgs[_i] = arguments[_i]; - } - var all = initialArgs.concat(restArgs); - return fn.apply(null, all); - }; - } - var never = constant(false); - var always = constant(true); - - var none = function () { - return NONE; - }; - var NONE = function () { - var eq = function (o) { - return o.isNone(); - }; - var call = function (thunk) { - return thunk(); - }; - var id = function (n) { - return n; - }; - var me = { - fold: function (n, _s) { - return n(); - }, - is: never, - isSome: never, - isNone: always, - getOr: id, - getOrThunk: call, - getOrDie: function (msg) { - throw new Error(msg || 'error: getOrDie called on none.'); - }, - getOrNull: constant(null), - getOrUndefined: constant(undefined), - or: id, - orThunk: call, - map: none, - each: noop, - bind: none, - exists: never, - forall: always, - filter: none, - equals: eq, - equals_: eq, - toArray: function () { - return []; - }, - toString: constant('none()') - }; - return me; - }(); - var some = function (a) { - var constant_a = constant(a); - var self = function () { - return me; - }; - var bind = function (f) { - return f(a); - }; - var me = { - fold: function (n, s) { - return s(a); - }, - is: function (v) { - return a === v; - }, - isSome: always, - isNone: never, - getOr: constant_a, - getOrThunk: constant_a, - getOrDie: constant_a, - getOrNull: constant_a, - getOrUndefined: constant_a, - or: self, - orThunk: self, - map: function (f) { - return some(f(a)); - }, - each: function (f) { - f(a); - }, - bind: bind, - exists: bind, - forall: bind, - filter: function (f) { - return f(a) ? me : NONE; - }, - toArray: function () { - return [a]; - }, - toString: function () { - return 'some(' + a + ')'; - }, - equals: function (o) { - return o.is(a); - }, - equals_: function (o, elementEq) { - return o.fold(never, function (b) { - return elementEq(a, b); - }); - } - }; - return me; - }; - var from = function (value) { - return value === null || value === undefined ? NONE : some(value); - }; - var Optional = { - some: some, - none: none, - from: from - }; - - var revocable = function (doRevoke) { - var subject = Cell(Optional.none()); - var revoke = function () { - return subject.get().each(doRevoke); - }; - var clear = function () { - revoke(); - subject.set(Optional.none()); - }; - var isSet = function () { - return subject.get().isSome(); - }; - var set = function (s) { - revoke(); - subject.set(Optional.some(s)); - }; - return { - clear: clear, - isSet: isSet, - set: set - }; - }; - var unbindable = function () { - return revocable(function (s) { - return s.unbind(); - }); - }; - var value = function () { - var subject = Cell(Optional.none()); - var clear = function () { - return subject.set(Optional.none()); - }; - var set = function (s) { - return subject.set(Optional.some(s)); - }; - var isSet = function () { - return subject.get().isSome(); - }; - var on = function (f) { - return subject.get().each(f); - }; - return { - clear: clear, - set: set, - isSet: isSet, - on: on - }; - }; - - var typeOf = function (x) { - var t = typeof x; - if (x === null) { - return 'null'; - } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) { - return 'array'; - } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) { - return 'string'; - } else { - return t; - } - }; - var isType = function (type) { - return function (value) { - return typeOf(value) === type; - }; - }; - var isSimpleType = function (type) { - return function (value) { - return typeof value === type; - }; - }; - var isString = isType('string'); - var isArray = isType('array'); - var isBoolean = isSimpleType('boolean'); - var isNullable = function (a) { - return a === null || a === undefined; - }; - var isNonNullable = function (a) { - return !isNullable(a); - }; - var isFunction = isSimpleType('function'); - var isNumber = isSimpleType('number'); - - var nativePush = Array.prototype.push; - var map = function (xs, f) { - var len = xs.length; - var r = new Array(len); - for (var i = 0; i < len; i++) { - var x = xs[i]; - r[i] = f(x, i); - } - return r; - }; - var each = function (xs, f) { - for (var i = 0, len = xs.length; i < len; i++) { - var x = xs[i]; - f(x, i); - } - }; - var filter = function (xs, pred) { - var r = []; - for (var i = 0, len = xs.length; i < len; i++) { - var x = xs[i]; - if (pred(x, i)) { - r.push(x); - } - } - return r; - }; - var flatten = function (xs) { - var r = []; - for (var i = 0, len = xs.length; i < len; ++i) { - if (!isArray(xs[i])) { - throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs); - } - nativePush.apply(r, xs[i]); - } - return r; - }; - var bind = function (xs, f) { - return flatten(map(xs, f)); - }; - var get$1 = function (xs, i) { - return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none(); - }; - var head = function (xs) { - return get$1(xs, 0); - }; - - var keys = Object.keys; - var each$1 = function (obj, f) { - var props = keys(obj); - for (var k = 0, len = props.length; k < len; k++) { - var i = props[k]; - var x = obj[i]; - f(x, i); - } - }; - - var isSupported = function (dom) { - return dom.style !== undefined && isFunction(dom.style.getPropertyValue); - }; - - var fromHtml = function (html, scope) { - var doc = scope || document; - var div = doc.createElement('div'); - div.innerHTML = html; - if (!div.hasChildNodes() || div.childNodes.length > 1) { - console.error('HTML does not have a single root node', html); - throw new Error('HTML must have a single root node'); - } - return fromDom(div.childNodes[0]); - }; - var fromTag = function (tag, scope) { - var doc = scope || document; - var node = doc.createElement(tag); - return fromDom(node); - }; - var fromText = function (text, scope) { - var doc = scope || document; - var node = doc.createTextNode(text); - return fromDom(node); - }; - var fromDom = function (node) { - if (node === null || node === undefined) { - throw new Error('Node cannot be null or undefined'); - } - return { dom: node }; - }; - var fromPoint = function (docElm, x, y) { - return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom); - }; - var SugarElement = { - fromHtml: fromHtml, - fromTag: fromTag, - fromText: fromText, - fromDom: fromDom, - fromPoint: fromPoint - }; - - var Global = typeof window !== 'undefined' ? window : Function('return this;')(); - - var DOCUMENT = 9; - var DOCUMENT_FRAGMENT = 11; - var ELEMENT = 1; - var TEXT = 3; - - var type = function (element) { - return element.dom.nodeType; - }; - var isType$1 = function (t) { - return function (element) { - return type(element) === t; - }; - }; - var isElement = isType$1(ELEMENT); - var isText = isType$1(TEXT); - var isDocument = isType$1(DOCUMENT); - var isDocumentFragment = isType$1(DOCUMENT_FRAGMENT); - - var is = function (element, selector) { - var dom = element.dom; - if (dom.nodeType !== ELEMENT) { - return false; - } else { - var elem = dom; - if (elem.matches !== undefined) { - return elem.matches(selector); - } else if (elem.msMatchesSelector !== undefined) { - return elem.msMatchesSelector(selector); - } else if (elem.webkitMatchesSelector !== undefined) { - return elem.webkitMatchesSelector(selector); - } else if (elem.mozMatchesSelector !== undefined) { - return elem.mozMatchesSelector(selector); - } else { - throw new Error('Browser lacks native selectors'); - } - } - }; - var bypassSelector = function (dom) { - return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0; - }; - var all = function (selector, scope) { - var base = scope === undefined ? document : scope.dom; - return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), SugarElement.fromDom); - }; - - var eq = function (e1, e2) { - return e1.dom === e2.dom; - }; - - var owner = function (element) { - return SugarElement.fromDom(element.dom.ownerDocument); - }; - var documentOrOwner = function (dos) { - return isDocument(dos) ? dos : owner(dos); - }; - var parent = function (element) { - return Optional.from(element.dom.parentNode).map(SugarElement.fromDom); - }; - var parents = function (element, isRoot) { - var stop = isFunction(isRoot) ? isRoot : never; - var dom = element.dom; - var ret = []; - while (dom.parentNode !== null && dom.parentNode !== undefined) { - var rawParent = dom.parentNode; - var p = SugarElement.fromDom(rawParent); - ret.push(p); - if (stop(p) === true) { - break; - } else { - dom = rawParent; - } - } - return ret; - }; - var siblings = function (element) { - var filterSelf = function (elements) { - return filter(elements, function (x) { - return !eq(element, x); - }); - }; - return parent(element).map(children).map(filterSelf).getOr([]); - }; - var children = function (element) { - return map(element.dom.childNodes, SugarElement.fromDom); - }; - - var isShadowRoot = function (dos) { - return isDocumentFragment(dos); - }; - var supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode); - var isSupported$1 = constant(supported); - var getRootNode = supported ? function (e) { - return SugarElement.fromDom(e.dom.getRootNode()); - } : documentOrOwner; - var getShadowRoot = function (e) { - var r = getRootNode(e); - return isShadowRoot(r) ? Optional.some(r) : Optional.none(); - }; - var getShadowHost = function (e) { - return SugarElement.fromDom(e.dom.host); - }; - var getOriginalEventTarget = function (event) { - if (isSupported$1() && isNonNullable(event.target)) { - var el = SugarElement.fromDom(event.target); - if (isElement(el) && isOpenShadowHost(el)) { - if (event.composed && event.composedPath) { - var composedPath = event.composedPath(); - if (composedPath) { - return head(composedPath); - } - } - } - } - return Optional.from(event.target); - }; - var isOpenShadowHost = function (element) { - return isNonNullable(element.dom.shadowRoot); - }; - - var inBody = function (element) { - var dom = isText(element) ? element.dom.parentNode : element.dom; - if (dom === undefined || dom === null || dom.ownerDocument === null) { - return false; - } - var doc = dom.ownerDocument; - return getShadowRoot(SugarElement.fromDom(dom)).fold(function () { - return doc.body.contains(dom); - }, compose1(inBody, getShadowHost)); - }; - var getBody = function (doc) { - var b = doc.dom.body; - if (b === null || b === undefined) { - throw new Error('Body is not available yet'); - } - return SugarElement.fromDom(b); - }; - - var rawSet = function (dom, key, value) { - if (isString(value) || isBoolean(value) || isNumber(value)) { - dom.setAttribute(key, value + ''); - } else { - console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom); - throw new Error('Attribute value was not simple'); - } - }; - var set = function (element, key, value) { - rawSet(element.dom, key, value); - }; - var get$2 = function (element, key) { - var v = element.dom.getAttribute(key); - return v === null ? undefined : v; - }; - var remove = function (element, key) { - element.dom.removeAttribute(key); - }; - - var internalSet = function (dom, property, value) { - if (!isString(value)) { - console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom); - throw new Error('CSS value must be a string: ' + value); - } - if (isSupported(dom)) { - dom.style.setProperty(property, value); - } - }; - var setAll = function (element, css) { - var dom = element.dom; - each$1(css, function (v, k) { - internalSet(dom, k, v); - }); - }; - var get$3 = function (element, property) { - var dom = element.dom; - var styles = window.getComputedStyle(dom); - var r = styles.getPropertyValue(property); - return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r; - }; - var getUnsafeProperty = function (dom, property) { - return isSupported(dom) ? dom.style.getPropertyValue(property) : ''; - }; - - var mkEvent = function (target, x, y, stop, prevent, kill, raw) { - return { - target: target, - x: x, - y: y, - stop: stop, - prevent: prevent, - kill: kill, - raw: raw - }; - }; - var fromRawEvent = function (rawEvent) { - var target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target)); - var stop = function () { - return rawEvent.stopPropagation(); - }; - var prevent = function () { - return rawEvent.preventDefault(); - }; - var kill = compose(prevent, stop); - return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent); - }; - var handle = function (filter, handler) { - return function (rawEvent) { - if (filter(rawEvent)) { - handler(fromRawEvent(rawEvent)); - } - }; - }; - var binder = function (element, event, filter, handler, useCapture) { - var wrapped = handle(filter, handler); - element.dom.addEventListener(event, wrapped, useCapture); - return { unbind: curry(unbind, element, event, wrapped, useCapture) }; - }; - var bind$1 = function (element, event, filter, handler) { - return binder(element, event, filter, handler, false); - }; - var unbind = function (element, event, handler, useCapture) { - element.dom.removeEventListener(event, handler, useCapture); - }; - - var filter$1 = always; - var bind$2 = function (element, event, handler) { - return bind$1(element, event, filter$1, handler); - }; - - var r = function (left, top) { - var translate = function (x, y) { - return r(left + x, top + y); - }; - return { - left: left, - top: top, - translate: translate - }; - }; - var SugarPosition = r; - - var get$4 = function (_DOC) { - var doc = _DOC !== undefined ? _DOC.dom : document; - var x = doc.body.scrollLeft || doc.documentElement.scrollLeft; - var y = doc.body.scrollTop || doc.documentElement.scrollTop; - return SugarPosition(x, y); - }; - - var get$5 = function (_win) { - var win = _win === undefined ? window : _win; - return Optional.from(win['visualViewport']); - }; - var bounds = function (x, y, width, height) { - return { - x: x, - y: y, - width: width, - height: height, - right: x + width, - bottom: y + height - }; - }; - var getBounds = function (_win) { - var win = _win === undefined ? window : _win; - var doc = win.document; - var scroll = get$4(SugarElement.fromDom(doc)); - return get$5(win).fold(function () { - var html = win.document.documentElement; - var width = html.clientWidth; - var height = html.clientHeight; - return bounds(scroll.left, scroll.top, width, height); - }, function (visualViewport) { - return bounds(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height); - }); - }; - var bind$3 = function (name, callback, _win) { - return get$5(_win).map(function (visualViewport) { - var handler = function (e) { - return callback(fromRawEvent(e)); - }; - visualViewport.addEventListener(name, handler); - return { - unbind: function () { - return visualViewport.removeEventListener(name, handler); - } - }; - }).getOrThunk(function () { - return { unbind: noop }; - }); - }; - - var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); - - var global$2 = tinymce.util.Tools.resolve('tinymce.Env'); - - var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay'); - - var fireFullscreenStateChanged = function (editor, state) { - editor.fire('FullscreenStateChanged', { state: state }); - }; - - var getFullscreenNative = function (editor) { - return editor.getParam('fullscreen_native', false, 'boolean'); - }; - - var getFullscreenRoot = function (editor) { - var elem = SugarElement.fromDom(editor.getElement()); - return getShadowRoot(elem).map(getShadowHost).getOrThunk(function () { - return getBody(owner(elem)); - }); - }; - var getFullscreenElement = function (root) { - if (root.fullscreenElement !== undefined) { - return root.fullscreenElement; - } else if (root.msFullscreenElement !== undefined) { - return root.msFullscreenElement; - } else if (root.webkitFullscreenElement !== undefined) { - return root.webkitFullscreenElement; - } else { - return null; - } - }; - var getFullscreenchangeEventName = function () { - if (document.fullscreenElement !== undefined) { - return 'fullscreenchange'; - } else if (document.msFullscreenElement !== undefined) { - return 'MSFullscreenChange'; - } else if (document.webkitFullscreenElement !== undefined) { - return 'webkitfullscreenchange'; - } else { - return 'fullscreenchange'; - } - }; - var requestFullscreen = function (sugarElem) { - var elem = sugarElem.dom; - if (elem.requestFullscreen) { - elem.requestFullscreen(); - } else if (elem.msRequestFullscreen) { - elem.msRequestFullscreen(); - } else if (elem.webkitRequestFullScreen) { - elem.webkitRequestFullScreen(); - } - }; - var exitFullscreen = function (sugarDoc) { - var doc = sugarDoc.dom; - if (doc.exitFullscreen) { - doc.exitFullscreen(); - } else if (doc.msExitFullscreen) { - doc.msExitFullscreen(); - } else if (doc.webkitCancelFullScreen) { - doc.webkitCancelFullScreen(); - } - }; - var isFullscreenElement = function (elem) { - return elem.dom === getFullscreenElement(owner(elem).dom); - }; - - var ancestors = function (scope, predicate, isRoot) { - return filter(parents(scope, isRoot), predicate); - }; - var siblings$1 = function (scope, predicate) { - return filter(siblings(scope), predicate); - }; - - var all$1 = function (selector) { - return all(selector); - }; - var ancestors$1 = function (scope, selector, isRoot) { - return ancestors(scope, function (e) { - return is(e, selector); - }, isRoot); - }; - var siblings$2 = function (scope, selector) { - return siblings$1(scope, function (e) { - return is(e, selector); - }); - }; - - var attr = 'data-ephox-mobile-fullscreen-style'; - var siblingStyles = 'display:none!important;'; - var ancestorPosition = 'position:absolute!important;'; - var ancestorStyles = 'top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;height:100%!important;overflow:visible!important;'; - var bgFallback = 'background-color:rgb(255,255,255)!important;'; - var isAndroid = global$2.os.isAndroid(); - var matchColor = function (editorBody) { - var color = get$3(editorBody, 'background-color'); - return color !== undefined && color !== '' ? 'background-color:' + color + '!important' : bgFallback; - }; - var clobberStyles = function (dom, container, editorBody) { - var gatherSiblings = function (element) { - return siblings$2(element, '*:not(.tox-silver-sink)'); - }; - var clobber = function (clobberStyle) { - return function (element) { - var styles = get$2(element, 'style'); - var backup = styles === undefined ? 'no-styles' : styles.trim(); - if (backup === clobberStyle) { - return; - } else { - set(element, attr, backup); - setAll(element, dom.parseStyle(clobberStyle)); - } - }; - }; - var ancestors = ancestors$1(container, '*'); - var siblings = bind(ancestors, gatherSiblings); - var bgColor = matchColor(editorBody); - each(siblings, clobber(siblingStyles)); - each(ancestors, clobber(ancestorPosition + ancestorStyles + bgColor)); - var containerStyles = isAndroid === true ? '' : ancestorPosition; - clobber(containerStyles + ancestorStyles + bgColor)(container); - }; - var restoreStyles = function (dom) { - var clobberedEls = all$1('[' + attr + ']'); - each(clobberedEls, function (element) { - var restore = get$2(element, attr); - if (restore !== 'no-styles') { - setAll(element, dom.parseStyle(restore)); - } else { - remove(element, 'style'); - } - remove(element, attr); - }); - }; - - var DOM = global$1.DOM; - var getScrollPos = function () { - var vp = getBounds(window); - return { - x: vp.x, - y: vp.y - }; - }; - var setScrollPos = function (pos) { - window.scrollTo(pos.x, pos.y); - }; - var viewportUpdate = get$5().fold(function () { - return { - bind: noop, - unbind: noop - }; - }, function (visualViewport) { - var editorContainer = value(); - var resizeBinder = unbindable(); - var scrollBinder = unbindable(); - var refreshScroll = function () { - document.body.scrollTop = 0; - document.documentElement.scrollTop = 0; - }; - var refreshVisualViewport = function () { - window.requestAnimationFrame(function () { - editorContainer.on(function (container) { - return setAll(container, { - top: visualViewport.offsetTop + 'px', - left: visualViewport.offsetLeft + 'px', - height: visualViewport.height + 'px', - width: visualViewport.width + 'px' - }); - }); - }); - }; - var update = global$3.throttle(function () { - refreshScroll(); - refreshVisualViewport(); - }, 50); - var bind = function (element) { - editorContainer.set(element); - update(); - resizeBinder.set(bind$3('resize', update)); - scrollBinder.set(bind$3('scroll', update)); - }; - var unbind = function () { - editorContainer.on(function () { - resizeBinder.clear(); - scrollBinder.clear(); - }); - editorContainer.clear(); - }; - return { - bind: bind, - unbind: unbind - }; - }); - var toggleFullscreen = function (editor, fullscreenState) { - var body = document.body; - var documentElement = document.documentElement; - var editorContainer = editor.getContainer(); - var editorContainerS = SugarElement.fromDom(editorContainer); - var fullscreenRoot = getFullscreenRoot(editor); - var fullscreenInfo = fullscreenState.get(); - var editorBody = SugarElement.fromDom(editor.getBody()); - var isTouch = global$2.deviceType.isTouch(); - var editorContainerStyle = editorContainer.style; - var iframe = editor.iframeElement; - var iframeStyle = iframe.style; - var handleClasses = function (handler) { - handler(body, 'tox-fullscreen'); - handler(documentElement, 'tox-fullscreen'); - handler(editorContainer, 'tox-fullscreen'); - getShadowRoot(editorContainerS).map(function (root) { - return getShadowHost(root).dom; - }).each(function (host) { - handler(host, 'tox-fullscreen'); - handler(host, 'tox-shadowhost'); - }); - }; - var cleanup = function () { - if (isTouch) { - restoreStyles(editor.dom); - } - handleClasses(DOM.removeClass); - viewportUpdate.unbind(); - Optional.from(fullscreenState.get()).each(function (info) { - return info.fullscreenChangeHandler.unbind(); - }); - }; - if (!fullscreenInfo) { - var fullscreenChangeHandler = bind$2(owner(fullscreenRoot), getFullscreenchangeEventName(), function (_evt) { - if (getFullscreenNative(editor)) { - if (!isFullscreenElement(fullscreenRoot) && fullscreenState.get() !== null) { - toggleFullscreen(editor, fullscreenState); - } - } - }); - var newFullScreenInfo = { - scrollPos: getScrollPos(), - containerWidth: editorContainerStyle.width, - containerHeight: editorContainerStyle.height, - containerTop: editorContainerStyle.top, - containerLeft: editorContainerStyle.left, - iframeWidth: iframeStyle.width, - iframeHeight: iframeStyle.height, - fullscreenChangeHandler: fullscreenChangeHandler - }; - if (isTouch) { - clobberStyles(editor.dom, editorContainerS, editorBody); - } - iframeStyle.width = iframeStyle.height = '100%'; - editorContainerStyle.width = editorContainerStyle.height = ''; - handleClasses(DOM.addClass); - viewportUpdate.bind(editorContainerS); - editor.on('remove', cleanup); - fullscreenState.set(newFullScreenInfo); - if (getFullscreenNative(editor)) { - requestFullscreen(fullscreenRoot); - } - fireFullscreenStateChanged(editor, true); - } else { - fullscreenInfo.fullscreenChangeHandler.unbind(); - if (getFullscreenNative(editor) && isFullscreenElement(fullscreenRoot)) { - exitFullscreen(owner(fullscreenRoot)); - } - iframeStyle.width = fullscreenInfo.iframeWidth; - iframeStyle.height = fullscreenInfo.iframeHeight; - editorContainerStyle.width = fullscreenInfo.containerWidth; - editorContainerStyle.height = fullscreenInfo.containerHeight; - editorContainerStyle.top = fullscreenInfo.containerTop; - editorContainerStyle.left = fullscreenInfo.containerLeft; - setScrollPos(fullscreenInfo.scrollPos); - fullscreenState.set(null); - fireFullscreenStateChanged(editor, false); - cleanup(); - editor.off('remove', cleanup); - } - }; - - var register = function (editor, fullscreenState) { - editor.addCommand('mceFullScreen', function () { - toggleFullscreen(editor, fullscreenState); - }); - }; - - var makeSetupHandler = function (editor, fullscreenState) { - return function (api) { - api.setActive(fullscreenState.get() !== null); - var editorEventCallback = function (e) { - return api.setActive(e.state); - }; - editor.on('FullscreenStateChanged', editorEventCallback); - return function () { - return editor.off('FullscreenStateChanged', editorEventCallback); - }; - }; - }; - var register$1 = function (editor, fullscreenState) { - editor.ui.registry.addToggleMenuItem('fullscreen', { - text: 'Fullscreen', - icon: 'fullscreen', - shortcut: 'Meta+Shift+F', - onAction: function () { - return editor.execCommand('mceFullScreen'); - }, - onSetup: makeSetupHandler(editor, fullscreenState) - }); - editor.ui.registry.addToggleButton('fullscreen', { - tooltip: 'Fullscreen', - icon: 'fullscreen', - onAction: function () { - return editor.execCommand('mceFullScreen'); - }, - onSetup: makeSetupHandler(editor, fullscreenState) - }); - }; - - function Plugin () { - global.add('fullscreen', function (editor) { - var fullscreenState = Cell(null); - if (editor.inline) { - return get(fullscreenState); - } - register(editor, fullscreenState); - register$1(editor, fullscreenState); - editor.addShortcut('Meta+Shift+F', '', 'mceFullScreen'); - return get(fullscreenState); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/fullscreen/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/fullscreen/plugin.min.js deleted file mode 100644 index 7dee35d74320d20e26a1be372c74fe0a25080e30..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/fullscreen/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var c=function(n){var e=n;return{get:function(){return e},set:function(n){e=n}}},n=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(n){return{isFullscreen:function(){return null!==n.get()}}},e=function(){},u=function(n){return function(){return n}};var t,r,o,l=u(!1),f=u(!0),a=function(){return d},d=(t=function(n){return n.isNone()},{fold:function(n,e){return n()},is:l,isSome:l,isNone:f,getOr:o=function(n){return n},getOrThunk:r=function(n){return n()},getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:u(null),getOrUndefined:u(undefined),or:o,orThunk:r,map:a,each:e,bind:a,exists:l,forall:f,filter:a,equals:t,equals_:t,toArray:function(){return[]},toString:u("none()")}),s=function(t){var n=u(t),e=function(){return o},r=function(n){return n(t)},o={fold:function(n,e){return e(t)},is:function(n){return t===n},isSome:f,isNone:l,getOr:n,getOrThunk:n,getOrDie:n,getOrNull:n,getOrUndefined:n,or:e,orThunk:e,map:function(n){return s(n(t))},each:function(n){n(t)},bind:r,exists:r,forall:r,filter:function(n){return n(t)?o:d},toArray:function(){return[t]},toString:function(){return"some("+t+")"},equals:function(n){return n.is(t)},equals_:function(n,e){return n.fold(l,function(n){return e(t,n)})}};return o},S={some:s,none:a,from:function(n){return null===n||n===undefined?d:s(n)}},m=function(){return n=function(n){return n.unbind()},e=c(S.none()),t=function(){return e.get().each(n)},{clear:function(){t(),e.set(S.none())},isSet:function(){return e.get().isSome()},set:function(n){t(),e.set(S.some(n))}};var n,e,t},h=function(r){return function(n){return t=typeof(e=n),(null===e?"null":"object"==t&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":t)===r;var e,t}},g=function(e){return function(n){return typeof n===e}},p=h("string"),v=h("array"),y=g("boolean"),w=function(n){return!(null===(e=n)||e===undefined);var e},b=g("function"),E=g("number"),F=Array.prototype.push,T=function(n,e){for(var t=n.length,r=new Array(t),o=0;o -1; - }; - var map = function (xs, f) { - var len = xs.length; - var r = new Array(len); - for (var i = 0; i < len; i++) { - var x = xs[i]; - r[i] = f(x, i); - } - return r; - }; - var filter = function (xs, pred) { - var r = []; - for (var i = 0, len = xs.length; i < len; i++) { - var x = xs[i]; - if (pred(x, i)) { - r.push(x); - } - } - return r; - }; - var findUntil = function (xs, pred, until) { - for (var i = 0, len = xs.length; i < len; i++) { - var x = xs[i]; - if (pred(x, i)) { - return Optional.some(x); - } else if (until(x, i)) { - break; - } - } - return Optional.none(); - }; - var find = function (xs, pred) { - return findUntil(xs, pred, never); - }; - - var keys = Object.keys; - var hasOwnProperty = Object.hasOwnProperty; - var get$1 = function (obj, key) { - return has(obj, key) ? Optional.from(obj[key]) : Optional.none(); - }; - var has = function (obj, key) { - return hasOwnProperty.call(obj, key); - }; - - var cat = function (arr) { - var r = []; - var push = function (x) { - r.push(x); - }; - for (var i = 0; i < arr.length; i++) { - arr[i].each(push); - } - return r; - }; - - var getHelpTabs = function (editor) { - return Optional.from(editor.getParam('help_tabs')); - }; - var getForcedPlugins = function (editor) { - return editor.getParam('forced_plugins'); - }; - - var description = '

                Editor UI keyboard navigation

                \n\n

                Activating keyboard navigation

                \n\n

                The sections of the outer UI of the editor - the menubar, toolbar, sidebar and footer - are all keyboard navigable. As such, there are multiple ways to activate keyboard navigation:

                \n
                  \n
                • Focus the menubar: Alt + F9 (Windows) or ⌥F9 (MacOS)
                • \n
                • Focus the toolbar: Alt + F10 (Windows) or ⌥F10 (MacOS)
                • \n
                • Focus the footer: Alt + F11 (Windows) or ⌥F11 (MacOS)
                • \n
                \n\n

                Focusing the menubar or toolbar will start keyboard navigation at the first item in the menubar or toolbar, which will be highlighted with a gray background. Focusing the footer will start keyboard navigation at the first item in the element path, which will be highlighted with an underline.

                \n\n

                Moving between UI sections

                \n\n

                When keyboard navigation is active, pressing tab will move the focus to the next major section of the UI, where applicable. These sections are:

                \n
                  \n
                • the menubar
                • \n
                • each group of the toolbar
                • \n
                • the sidebar
                • \n
                • the element path in the footer
                • \n
                • the wordcount toggle button in the footer
                • \n
                • the branding link in the footer
                • \n
                \n\n

                Pressing shift + tab will move backwards through the same sections, except when moving from the footer to the toolbar. Focusing the element path then pressing shift + tab will move focus to the first toolbar group, not the last.

                \n\n

                Moving within UI sections

                \n\n

                Keyboard navigation within UI sections can usually be achieved using the left and right arrow keys. This includes:

                \n
                  \n
                • moving between menus in the menubar
                • \n
                • moving between buttons in a toolbar group
                • \n
                • moving between items in the element path
                • \n
                \n\n

                In all these UI sections, keyboard navigation will cycle within the section. For example, focusing the last button in a toolbar group then pressing right arrow will move focus to the first item in the same toolbar group.

                \n\n

                Executing buttons

                \n\n

                To execute a button, navigate the selection to the desired button and hit space or enter.

                \n\n

                Opening, navigating and closing menus

                \n\n

                When focusing a menubar button or a toolbar button with a menu, pressing space, enter or down arrow will open the menu. When the menu opens the first item will be selected. To move up or down the menu, press the up or down arrow key respectively. This is the same for submenus, which can also be opened and closed using the left and right arrow keys.

                \n\n

                To close any active menu, hit the escape key. When a menu is closed the selection will be restored to its previous selection. This also works for closing submenus.

                \n\n

                Context toolbars and menus

                \n\n

                To focus an open context toolbar such as the table context toolbar, press Ctrl + F9 (Windows) or ⌃F9 (MacOS).

                \n\n

                Context toolbar navigation is the same as toolbar navigation, and context menu navigation is the same as standard menu navigation.

                \n\n

                Dialog navigation

                \n\n

                There are two types of dialog UIs in TinyMCE: tabbed dialogs and non-tabbed dialogs.

                \n\n

                When a non-tabbed dialog is opened, the first interactive component in the dialog will be focused. Users can navigate between interactive components by pressing tab. This includes any footer buttons. Navigation will cycle back to the first dialog component if tab is pressed while focusing the last component in the dialog. Pressing shift + tab will navigate backwards.

                \n\n

                When a tabbed dialog is opened, the first button in the tab menu is focused. Pressing tab will navigate to the first interactive component in that tab, and will cycle through the tab\u2019s components, the footer buttons, then back to the tab button. To switch to another tab, focus the tab button for the current tab, then use the arrow keys to cycle through the tab buttons.

                '; - var tab = function () { - var body = { - type: 'htmlpanel', - presets: 'document', - html: description - }; - return { - name: 'keyboardnav', - title: 'Keyboard Navigation', - items: [body] - }; - }; - - var global$1 = tinymce.util.Tools.resolve('tinymce.Env'); - - var convertText = function (source) { - var mac = { - alt: '⌥', - ctrl: '⌃', - shift: '⇧', - meta: '⌘', - access: '⌃⌥' - }; - var other = { - meta: 'Ctrl ', - access: 'Shift + Alt ' - }; - var replace = global$1.mac ? mac : other; - var shortcut = source.split('+'); - var updated = map(shortcut, function (segment) { - var search = segment.toLowerCase().trim(); - return has(replace, search) ? replace[search] : segment; - }); - return global$1.mac ? updated.join('').replace(/\s/, '') : updated.join('+'); - }; - - var shortcuts = [ - { - shortcuts: ['Meta + B'], - action: 'Bold' - }, - { - shortcuts: ['Meta + I'], - action: 'Italic' - }, - { - shortcuts: ['Meta + U'], - action: 'Underline' - }, - { - shortcuts: ['Meta + A'], - action: 'Select all' - }, - { - shortcuts: [ - 'Meta + Y', - 'Meta + Shift + Z' - ], - action: 'Redo' - }, - { - shortcuts: ['Meta + Z'], - action: 'Undo' - }, - { - shortcuts: ['Access + 1'], - action: 'Heading 1' - }, - { - shortcuts: ['Access + 2'], - action: 'Heading 2' - }, - { - shortcuts: ['Access + 3'], - action: 'Heading 3' - }, - { - shortcuts: ['Access + 4'], - action: 'Heading 4' - }, - { - shortcuts: ['Access + 5'], - action: 'Heading 5' - }, - { - shortcuts: ['Access + 6'], - action: 'Heading 6' - }, - { - shortcuts: ['Access + 7'], - action: 'Paragraph' - }, - { - shortcuts: ['Access + 8'], - action: 'Div' - }, - { - shortcuts: ['Access + 9'], - action: 'Address' - }, - { - shortcuts: ['Alt + 0'], - action: 'Open help dialog' - }, - { - shortcuts: ['Alt + F9'], - action: 'Focus to menubar' - }, - { - shortcuts: ['Alt + F10'], - action: 'Focus to toolbar' - }, - { - shortcuts: ['Alt + F11'], - action: 'Focus to element path' - }, - { - shortcuts: ['Ctrl + F9'], - action: 'Focus to contextual toolbar' - }, - { - shortcuts: ['Shift + Enter'], - action: 'Open popup menu for split buttons' - }, - { - shortcuts: ['Meta + K'], - action: 'Insert link (if link plugin activated)' - }, - { - shortcuts: ['Meta + S'], - action: 'Save (if save plugin activated)' - }, - { - shortcuts: ['Meta + F'], - action: 'Find (if searchreplace plugin activated)' - }, - { - shortcuts: ['Meta + Shift + F'], - action: 'Switch to or from fullscreen mode' - } - ]; - - var tab$1 = function () { - var shortcutList = map(shortcuts, function (shortcut) { - var shortcutText = map(shortcut.shortcuts, convertText).join(' or '); - return [ - shortcut.action, - shortcutText - ]; - }); - var tablePanel = { - type: 'table', - header: [ - 'Action', - 'Shortcut' - ], - cells: shortcutList - }; - return { - name: 'shortcuts', - title: 'Handy Shortcuts', - items: [tablePanel] - }; - }; - - var global$2 = tinymce.util.Tools.resolve('tinymce.util.I18n'); - - var urls = [ - { - key: 'advlist', - name: 'Advanced List' - }, - { - key: 'anchor', - name: 'Anchor' - }, - { - key: 'autolink', - name: 'Autolink' - }, - { - key: 'autoresize', - name: 'Autoresize' - }, - { - key: 'autosave', - name: 'Autosave' - }, - { - key: 'bbcode', - name: 'BBCode' - }, - { - key: 'charmap', - name: 'Character Map' - }, - { - key: 'code', - name: 'Code' - }, - { - key: 'codesample', - name: 'Code Sample' - }, - { - key: 'colorpicker', - name: 'Color Picker' - }, - { - key: 'directionality', - name: 'Directionality' - }, - { - key: 'emoticons', - name: 'Emoticons' - }, - { - key: 'fullpage', - name: 'Full Page' - }, - { - key: 'fullscreen', - name: 'Full Screen' - }, - { - key: 'help', - name: 'Help' - }, - { - key: 'hr', - name: 'Horizontal Rule' - }, - { - key: 'image', - name: 'Image' - }, - { - key: 'imagetools', - name: 'Image Tools' - }, - { - key: 'importcss', - name: 'Import CSS' - }, - { - key: 'insertdatetime', - name: 'Insert Date/Time' - }, - { - key: 'legacyoutput', - name: 'Legacy Output' - }, - { - key: 'link', - name: 'Link' - }, - { - key: 'lists', - name: 'Lists' - }, - { - key: 'media', - name: 'Media' - }, - { - key: 'nonbreaking', - name: 'Nonbreaking' - }, - { - key: 'noneditable', - name: 'Noneditable' - }, - { - key: 'pagebreak', - name: 'Page Break' - }, - { - key: 'paste', - name: 'Paste' - }, - { - key: 'preview', - name: 'Preview' - }, - { - key: 'print', - name: 'Print' - }, - { - key: 'save', - name: 'Save' - }, - { - key: 'searchreplace', - name: 'Search and Replace' - }, - { - key: 'spellchecker', - name: 'Spell Checker' - }, - { - key: 'tabfocus', - name: 'Tab Focus' - }, - { - key: 'table', - name: 'Table' - }, - { - key: 'template', - name: 'Template' - }, - { - key: 'textcolor', - name: 'Text Color' - }, - { - key: 'textpattern', - name: 'Text Pattern' - }, - { - key: 'toc', - name: 'Table of Contents' - }, - { - key: 'visualblocks', - name: 'Visual Blocks' - }, - { - key: 'visualchars', - name: 'Visual Characters' - }, - { - key: 'wordcount', - name: 'Word Count' - }, - { - key: 'advcode', - name: 'Advanced Code Editor*' - }, - { - key: 'formatpainter', - name: 'Format Painter*' - }, - { - key: 'powerpaste', - name: 'PowerPaste*' - }, - { - key: 'tinydrive', - name: 'Tiny Drive*', - slug: 'drive' - }, - { - key: 'tinymcespellchecker', - name: 'Spell Checker Pro*' - }, - { - key: 'a11ychecker', - name: 'Accessibility Checker*' - }, - { - key: 'linkchecker', - name: 'Link Checker*' - }, - { - key: 'mentions', - name: 'Mentions*' - }, - { - key: 'mediaembed', - name: 'Enhanced Media Embed*' - }, - { - key: 'checklist', - name: 'Checklist*' - }, - { - key: 'casechange', - name: 'Case Change*' - }, - { - key: 'permanentpen', - name: 'Permanent Pen*' - }, - { - key: 'pageembed', - name: 'Page Embed*' - }, - { - key: 'tinycomments', - name: 'Tiny Comments*', - slug: 'comments' - }, - { - key: 'advtable', - name: 'Advanced Tables*' - }, - { - key: 'autocorrect', - name: 'Autocorrect*' - } - ]; - - var tab$2 = function (editor) { - var availablePlugins = function () { - var premiumPlugins = [ - 'Accessibility Checker', - 'Advanced Code Editor', - 'Advanced Tables', - 'Case Change', - 'Checklist', - 'Tiny Comments', - 'Tiny Drive', - 'Enhanced Media Embed', - 'Format Painter', - 'Link Checker', - 'Mentions', - 'MoxieManager', - 'Page Embed', - 'Permanent Pen', - 'PowerPaste', - 'Spell Checker Pro' - ]; - var premiumPluginList = map(premiumPlugins, function (plugin) { - return '
              • ' + global$2.translate(plugin) + '
              • '; - }).join(''); - return '
                ' + '

                ' + global$2.translate('Premium plugins:') + '

                ' + '' + '
                '; - }; - var makeLink = function (p) { - return '' + p.name + ''; - }; - var maybeUrlize = function (editor, key) { - return find(urls, function (x) { - return x.key === key; - }).fold(function () { - var getMetadata = editor.plugins[key].getMetadata; - return typeof getMetadata === 'function' ? makeLink(getMetadata()) : key; - }, function (x) { - var urlSlug = x.slug || x.key; - return makeLink({ - name: x.name, - url: 'https://www.tiny.cloud/docs/plugins/' + urlSlug - }); - }); - }; - var getPluginKeys = function (editor) { - var keys$1 = keys(editor.plugins); - var forced_plugins = getForcedPlugins(editor); - return forced_plugins === undefined ? keys$1 : filter(keys$1, function (k) { - return !contains(forced_plugins, k); - }); - }; - var pluginLister = function (editor) { - var pluginKeys = getPluginKeys(editor); - var pluginLis = map(pluginKeys, function (key) { - return '
              • ' + maybeUrlize(editor, key) + '
              • '; - }); - var count = pluginLis.length; - var pluginsString = pluginLis.join(''); - var html = '

                ' + global$2.translate([ - 'Plugins installed ({0}):', - count - ]) + '

                ' + '
                  ' + pluginsString + '
                '; - return html; - }; - var installedPlugins = function (editor) { - if (editor == null) { - return ''; - } - return '
                ' + pluginLister(editor) + '
                '; - }; - var htmlPanel = { - type: 'htmlpanel', - presets: 'document', - html: [ - installedPlugins(editor), - availablePlugins() - ].join('') - }; - return { - name: 'plugins', - title: 'Plugins', - items: [htmlPanel] - }; - }; - - var global$3 = tinymce.util.Tools.resolve('tinymce.EditorManager'); - - var tab$3 = function () { - var getVersion = function (major, minor) { - return major.indexOf('@') === 0 ? 'X.X.X' : major + '.' + minor; - }; - var version = getVersion(global$3.majorVersion, global$3.minorVersion); - var changeLogLink = 'TinyMCE ' + version + ''; - var htmlPanel = { - type: 'htmlpanel', - html: '

                ' + global$2.translate([ - 'You are using {0}', - changeLogLink - ]) + '

                ', - presets: 'document' - }; - return { - name: 'versions', - title: 'Version', - items: [htmlPanel] - }; - }; - - var parseHelpTabsSetting = function (tabsFromSettings, tabs) { - var newTabs = {}; - var names = map(tabsFromSettings, function (t) { - if (typeof t === 'string') { - if (has(tabs, t)) { - newTabs[t] = tabs[t]; - } - return t; - } else { - newTabs[t.name] = t; - return t.name; - } - }); - return { - tabs: newTabs, - names: names - }; - }; - var getNamesFromTabs = function (tabs) { - var names = keys(tabs); - var idx = names.indexOf('versions'); - if (idx !== -1) { - names.splice(idx, 1); - names.push('versions'); - } - return { - tabs: tabs, - names: names - }; - }; - var parseCustomTabs = function (editor, customTabs) { - var _a; - var shortcuts = tab$1(); - var nav = tab(); - var plugins = tab$2(editor); - var versions = tab$3(); - var tabs = __assign((_a = {}, _a[shortcuts.name] = shortcuts, _a[nav.name] = nav, _a[plugins.name] = plugins, _a[versions.name] = versions, _a), customTabs.get()); - return getHelpTabs(editor).fold(function () { - return getNamesFromTabs(tabs); - }, function (tabsFromSettings) { - return parseHelpTabsSetting(tabsFromSettings, tabs); - }); - }; - var init = function (editor, customTabs) { - return function () { - var _a = parseCustomTabs(editor, customTabs), tabs = _a.tabs, names = _a.names; - var foundTabs = map(names, function (name) { - return get$1(tabs, name); - }); - var dialogTabs = cat(foundTabs); - var body = { - type: 'tabpanel', - tabs: dialogTabs - }; - editor.windowManager.open({ - title: 'Help', - size: 'medium', - body: body, - buttons: [{ - type: 'cancel', - name: 'close', - text: 'Close', - primary: true - }], - initialData: {} - }); - }; - }; - - function Plugin () { - global.add('help', function (editor) { - var customTabs = Cell({}); - var api = get(customTabs); - var dialogOpener = init(editor, customTabs); - register$1(editor, dialogOpener); - register(editor, dialogOpener); - editor.shortcuts.add('Alt+0', 'Open help dialog', 'mceHelp'); - return api; - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/help/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/help/plugin.min.js deleted file mode 100644 index 6b4b4143ca6f322f8b37f685f084da1e453e1325..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/help/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var e,t,n,a=tinymce.util.Tools.resolve("tinymce.PluginManager"),m=function(){return(m=Object.assign||function(e){for(var t,n=1,a=arguments.length;n'+e.name+""};return{name:"plugins",title:"Plugins",items:[{type:"htmlpanel",presets:"document",html:[null==(n=e)?"":'
                '+function(a){var e,t,n,o=(t=f((e=a).plugins),(n=e.getParam("forced_plugins"))===undefined?t:function(e,t){for(var n=[],a=0,o=e.length;a"+(t=a,n=e,g(C,function(e){return e.key===n}).fold(function(){var e=t.plugins[n].getMetadata;return"function"==typeof e?l(e()):n},function(e){var t=e.slug||e.key;return l({name:e.name,url:"https://www.tiny.cloud/docs/plugins/"+t})}))+"";var t,n}),r=i.length,s=i.join("");return"

                "+A.translate(["Plugins installed ({0}):",r])+"

                  "+s+"
                "}(n)+"
                ",(t=p(["Accessibility Checker","Advanced Code Editor","Advanced Tables","Case Change","Checklist","Tiny Comments","Tiny Drive","Enhanced Media Embed","Format Painter","Link Checker","Mentions","MoxieManager","Page Embed","Permanent Pen","PowerPaste","Spell Checker Pro"],function(e){return"
              • "+A.translate(e)+"
              • "}).join(""),'

                '+A.translate("Premium plugins:")+"

                ")].join("")}]}},x=tinymce.util.Tools.resolve("tinymce.EditorManager"),P=function(e,t){var n,a,o,i,r,s={name:"shortcuts",title:"Handy Shortcuts",items:[{type:"table",header:["Action","Shortcut"],cells:p(w,function(e){var t=p(e.shortcuts,v).join(" or ");return[e.action,t]})}]},l={name:"keyboardnav",title:"Keyboard Navigation",items:[{type:"htmlpanel",presets:"document",html:"

                Editor UI keyboard navigation

                \n\n

                Activating keyboard navigation

                \n\n

                The sections of the outer UI of the editor - the menubar, toolbar, sidebar and footer - are all keyboard navigable. As such, there are multiple ways to activate keyboard navigation:

                \n
                  \n
                • Focus the menubar: Alt + F9 (Windows) or ⌥F9 (MacOS)
                • \n
                • Focus the toolbar: Alt + F10 (Windows) or ⌥F10 (MacOS)
                • \n
                • Focus the footer: Alt + F11 (Windows) or ⌥F11 (MacOS)
                • \n
                \n\n

                Focusing the menubar or toolbar will start keyboard navigation at the first item in the menubar or toolbar, which will be highlighted with a gray background. Focusing the footer will start keyboard navigation at the first item in the element path, which will be highlighted with an underline.

                \n\n

                Moving between UI sections

                \n\n

                When keyboard navigation is active, pressing tab will move the focus to the next major section of the UI, where applicable. These sections are:

                \n
                  \n
                • the menubar
                • \n
                • each group of the toolbar
                • \n
                • the sidebar
                • \n
                • the element path in the footer
                • \n
                • the wordcount toggle button in the footer
                • \n
                • the branding link in the footer
                • \n
                \n\n

                Pressing shift + tab will move backwards through the same sections, except when moving from the footer to the toolbar. Focusing the element path then pressing shift + tab will move focus to the first toolbar group, not the last.

                \n\n

                Moving within UI sections

                \n\n

                Keyboard navigation within UI sections can usually be achieved using the left and right arrow keys. This includes:

                \n
                  \n
                • moving between menus in the menubar
                • \n
                • moving between buttons in a toolbar group
                • \n
                • moving between items in the element path
                • \n
                \n\n

                In all these UI sections, keyboard navigation will cycle within the section. For example, focusing the last button in a toolbar group then pressing right arrow will move focus to the first item in the same toolbar group.

                \n\n

                Executing buttons

                \n\n

                To execute a button, navigate the selection to the desired button and hit space or enter.

                \n\n

                Opening, navigating and closing menus

                \n\n

                When focusing a menubar button or a toolbar button with a menu, pressing space, enter or down arrow will open the menu. When the menu opens the first item will be selected. To move up or down the menu, press the up or down arrow key respectively. This is the same for submenus, which can also be opened and closed using the left and right arrow keys.

                \n\n

                To close any active menu, hit the escape key. When a menu is closed the selection will be restored to its previous selection. This also works for closing submenus.

                \n\n

                Context toolbars and menus

                \n\n

                To focus an open context toolbar such as the table context toolbar, press Ctrl + F9 (Windows) or ⌃F9 (MacOS).

                \n\n

                Context toolbar navigation is the same as toolbar navigation, and context menu navigation is the same as standard menu navigation.

                \n\n

                Dialog navigation

                \n\n

                There are two types of dialog UIs in TinyMCE: tabbed dialogs and non-tabbed dialogs.

                \n\n

                When a non-tabbed dialog is opened, the first interactive component in the dialog will be focused. Users can navigate between interactive components by pressing tab. This includes any footer buttons. Navigation will cycle back to the first dialog component if tab is pressed while focusing the last component in the dialog. Pressing shift + tab will navigate backwards.

                \n\n

                When a tabbed dialog is opened, the first button in the tab menu is focused. Pressing tab will navigate to the first interactive component in that tab, and will cycle through the tab\u2019s components, the footer buttons, then back to the tab button. To switch to another tab, focus the tab button for the current tab, then use the arrow keys to cycle through the tab buttons.

                "}]},c=T(e),u=(i='TinyMCE '+(a=x.majorVersion,o=x.minorVersion,0===a.indexOf("@")?"X.X.X":a+"."+o)+"",{name:"versions",title:"Version",items:[{type:"htmlpanel",html:"

                "+A.translate(["You are using {0}",i])+"

                ",presets:"document"}]}),h=m(((n={})[s.name]=s,n[l.name]=l,n[c.name]=c,n[u.name]=u,n),t.get());return r=e,d.from(r.getParam("help_tabs")).fold(function(){return t=f(e=h),-1!==(n=t.indexOf("versions"))&&(t.splice(n,1),t.push("versions")),{tabs:e,names:t};var e,t,n},function(e){return t=h,n={},a=p(e,function(e){return"string"==typeof e?(y(t,e)&&(n[e]=t[e]),e):(n[e.name]=e).name}),{tabs:n,names:a};var t,n,a})},M=function(o,i){return function(){var e=P(o,i),a=e.tabs,t=e.names,n={type:"tabpanel",tabs:function(e){for(var t=[],n=function(e){t.push(e)},a=0;a'); - }); - }; - - var register$1 = function (editor) { - editor.ui.registry.addButton('hr', { - icon: 'horizontal-rule', - tooltip: 'Horizontal line', - onAction: function () { - return editor.execCommand('InsertHorizontalRule'); - } - }); - editor.ui.registry.addMenuItem('hr', { - icon: 'horizontal-rule', - text: 'Horizontal line', - onAction: function () { - return editor.execCommand('InsertHorizontalRule'); - } - }); - }; - - function Plugin () { - global.add('hr', function (editor) { - register(editor); - register$1(editor); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/hr/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/hr/plugin.min.js deleted file mode 100644 index dfeca9e08f3d98834e6766dcfc4eccdd3f34d5fb..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/hr/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager");n.add("hr",function(n){var o,t;(o=n).addCommand("InsertHorizontalRule",function(){o.execCommand("mceInsertContent",!1,"
                ")}),(t=n).ui.registry.addButton("hr",{icon:"horizontal-rule",tooltip:"Horizontal line",onAction:function(){return t.execCommand("InsertHorizontalRule")}}),t.ui.registry.addMenuItem("hr",{icon:"horizontal-rule",text:"Horizontal line",onAction:function(){return t.execCommand("InsertHorizontalRule")}})})}(); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/image/plugin.js b/component/pear/module/tinymce/tinymce/plugins/image/plugin.js deleted file mode 100644 index d7b1cf18bcf44ec44417f54fca44fd00ae49e857..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/image/plugin.js +++ /dev/null @@ -1,1664 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -(function () { - 'use strict'; - - var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); - - var __assign = function () { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) - if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - - var typeOf = function (x) { - var t = typeof x; - if (x === null) { - return 'null'; - } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) { - return 'array'; - } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) { - return 'string'; - } else { - return t; - } - }; - var isType = function (type) { - return function (value) { - return typeOf(value) === type; - }; - }; - var isSimpleType = function (type) { - return function (value) { - return typeof value === type; - }; - }; - var eq = function (t) { - return function (a) { - return t === a; - }; - }; - var isString = isType('string'); - var isObject = isType('object'); - var isArray = isType('array'); - var isNull = eq(null); - var isBoolean = isSimpleType('boolean'); - var isNumber = isSimpleType('number'); - - var noop = function () { - }; - var constant = function (value) { - return function () { - return value; - }; - }; - var never = constant(false); - var always = constant(true); - - var none = function () { - return NONE; - }; - var NONE = function () { - var eq = function (o) { - return o.isNone(); - }; - var call = function (thunk) { - return thunk(); - }; - var id = function (n) { - return n; - }; - var me = { - fold: function (n, _s) { - return n(); - }, - is: never, - isSome: never, - isNone: always, - getOr: id, - getOrThunk: call, - getOrDie: function (msg) { - throw new Error(msg || 'error: getOrDie called on none.'); - }, - getOrNull: constant(null), - getOrUndefined: constant(undefined), - or: id, - orThunk: call, - map: none, - each: noop, - bind: none, - exists: never, - forall: always, - filter: none, - equals: eq, - equals_: eq, - toArray: function () { - return []; - }, - toString: constant('none()') - }; - return me; - }(); - var some = function (a) { - var constant_a = constant(a); - var self = function () { - return me; - }; - var bind = function (f) { - return f(a); - }; - var me = { - fold: function (n, s) { - return s(a); - }, - is: function (v) { - return a === v; - }, - isSome: always, - isNone: never, - getOr: constant_a, - getOrThunk: constant_a, - getOrDie: constant_a, - getOrNull: constant_a, - getOrUndefined: constant_a, - or: self, - orThunk: self, - map: function (f) { - return some(f(a)); - }, - each: function (f) { - f(a); - }, - bind: bind, - exists: bind, - forall: bind, - filter: function (f) { - return f(a) ? me : NONE; - }, - toArray: function () { - return [a]; - }, - toString: function () { - return 'some(' + a + ')'; - }, - equals: function (o) { - return o.is(a); - }, - equals_: function (o, elementEq) { - return o.fold(never, function (b) { - return elementEq(a, b); - }); - } - }; - return me; - }; - var from = function (value) { - return value === null || value === undefined ? NONE : some(value); - }; - var Optional = { - some: some, - none: none, - from: from - }; - - var nativePush = Array.prototype.push; - var flatten = function (xs) { - var r = []; - for (var i = 0, len = xs.length; i < len; ++i) { - if (!isArray(xs[i])) { - throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs); - } - nativePush.apply(r, xs[i]); - } - return r; - }; - var get = function (xs, i) { - return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none(); - }; - var head = function (xs) { - return get(xs, 0); - }; - var findMap = function (arr, f) { - for (var i = 0; i < arr.length; i++) { - var r = f(arr[i], i); - if (r.isSome()) { - return r; - } - } - return Optional.none(); - }; - - var Global = typeof window !== 'undefined' ? window : Function('return this;')(); - - var rawSet = function (dom, key, value) { - if (isString(value) || isBoolean(value) || isNumber(value)) { - dom.setAttribute(key, value + ''); - } else { - console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom); - throw new Error('Attribute value was not simple'); - } - }; - var set = function (element, key, value) { - rawSet(element.dom, key, value); - }; - var remove = function (element, key) { - element.dom.removeAttribute(key); - }; - - var fromHtml = function (html, scope) { - var doc = scope || document; - var div = doc.createElement('div'); - div.innerHTML = html; - if (!div.hasChildNodes() || div.childNodes.length > 1) { - console.error('HTML does not have a single root node', html); - throw new Error('HTML must have a single root node'); - } - return fromDom(div.childNodes[0]); - }; - var fromTag = function (tag, scope) { - var doc = scope || document; - var node = doc.createElement(tag); - return fromDom(node); - }; - var fromText = function (text, scope) { - var doc = scope || document; - var node = doc.createTextNode(text); - return fromDom(node); - }; - var fromDom = function (node) { - if (node === null || node === undefined) { - throw new Error('Node cannot be null or undefined'); - } - return { dom: node }; - }; - var fromPoint = function (docElm, x, y) { - return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom); - }; - var SugarElement = { - fromHtml: fromHtml, - fromTag: fromTag, - fromText: fromText, - fromDom: fromDom, - fromPoint: fromPoint - }; - - var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); - - var global$2 = tinymce.util.Tools.resolve('tinymce.util.Promise'); - - var global$3 = tinymce.util.Tools.resolve('tinymce.util.XHR'); - - var hasDimensions = function (editor) { - return editor.getParam('image_dimensions', true, 'boolean'); - }; - var hasAdvTab = function (editor) { - return editor.getParam('image_advtab', false, 'boolean'); - }; - var hasUploadTab = function (editor) { - return editor.getParam('image_uploadtab', true, 'boolean'); - }; - var getPrependUrl = function (editor) { - return editor.getParam('image_prepend_url', '', 'string'); - }; - var getClassList = function (editor) { - return editor.getParam('image_class_list'); - }; - var hasDescription = function (editor) { - return editor.getParam('image_description', true, 'boolean'); - }; - var hasImageTitle = function (editor) { - return editor.getParam('image_title', false, 'boolean'); - }; - var hasImageCaption = function (editor) { - return editor.getParam('image_caption', false, 'boolean'); - }; - var getImageList = function (editor) { - return editor.getParam('image_list', false); - }; - var hasUploadUrl = function (editor) { - return !!getUploadUrl(editor); - }; - var hasUploadHandler = function (editor) { - return !!getUploadHandler(editor); - }; - var getUploadUrl = function (editor) { - return editor.getParam('images_upload_url', '', 'string'); - }; - var getUploadHandler = function (editor) { - return editor.getParam('images_upload_handler', undefined, 'function'); - }; - var getUploadBasePath = function (editor) { - return editor.getParam('images_upload_base_path', undefined, 'string'); - }; - var getUploadCredentials = function (editor) { - return editor.getParam('images_upload_credentials', false, 'boolean'); - }; - var showAccessibilityOptions = function (editor) { - return editor.getParam('a11y_advanced_options', false, 'boolean'); - }; - var isAutomaticUploadsEnabled = function (editor) { - return editor.getParam('automatic_uploads', true, 'boolean'); - }; - - var parseIntAndGetMax = function (val1, val2) { - return Math.max(parseInt(val1, 10), parseInt(val2, 10)); - }; - var getImageSize = function (url) { - return new global$2(function (callback) { - var img = document.createElement('img'); - var done = function (dimensions) { - if (img.parentNode) { - img.parentNode.removeChild(img); - } - callback(dimensions); - }; - img.onload = function () { - var width = parseIntAndGetMax(img.width, img.clientWidth); - var height = parseIntAndGetMax(img.height, img.clientHeight); - var dimensions = { - width: width, - height: height - }; - done(global$2.resolve(dimensions)); - }; - img.onerror = function () { - done(global$2.reject('Failed to get image dimensions for: ' + url)); - }; - var style = img.style; - style.visibility = 'hidden'; - style.position = 'fixed'; - style.bottom = style.left = '0px'; - style.width = style.height = 'auto'; - document.body.appendChild(img); - img.src = url; - }); - }; - var removePixelSuffix = function (value) { - if (value) { - value = value.replace(/px$/, ''); - } - return value; - }; - var addPixelSuffix = function (value) { - if (value.length > 0 && /^[0-9]+$/.test(value)) { - value += 'px'; - } - return value; - }; - var mergeMargins = function (css) { - if (css.margin) { - var splitMargin = String(css.margin).split(' '); - switch (splitMargin.length) { - case 1: - css['margin-top'] = css['margin-top'] || splitMargin[0]; - css['margin-right'] = css['margin-right'] || splitMargin[0]; - css['margin-bottom'] = css['margin-bottom'] || splitMargin[0]; - css['margin-left'] = css['margin-left'] || splitMargin[0]; - break; - case 2: - css['margin-top'] = css['margin-top'] || splitMargin[0]; - css['margin-right'] = css['margin-right'] || splitMargin[1]; - css['margin-bottom'] = css['margin-bottom'] || splitMargin[0]; - css['margin-left'] = css['margin-left'] || splitMargin[1]; - break; - case 3: - css['margin-top'] = css['margin-top'] || splitMargin[0]; - css['margin-right'] = css['margin-right'] || splitMargin[1]; - css['margin-bottom'] = css['margin-bottom'] || splitMargin[2]; - css['margin-left'] = css['margin-left'] || splitMargin[1]; - break; - case 4: - css['margin-top'] = css['margin-top'] || splitMargin[0]; - css['margin-right'] = css['margin-right'] || splitMargin[1]; - css['margin-bottom'] = css['margin-bottom'] || splitMargin[2]; - css['margin-left'] = css['margin-left'] || splitMargin[3]; - } - delete css.margin; - } - return css; - }; - var createImageList = function (editor, callback) { - var imageList = getImageList(editor); - if (typeof imageList === 'string') { - global$3.send({ - url: imageList, - success: function (text) { - callback(JSON.parse(text)); - } - }); - } else if (typeof imageList === 'function') { - imageList(callback); - } else { - callback(imageList); - } - }; - var waitLoadImage = function (editor, data, imgElm) { - var selectImage = function () { - imgElm.onload = imgElm.onerror = null; - if (editor.selection) { - editor.selection.select(imgElm); - editor.nodeChanged(); - } - }; - imgElm.onload = function () { - if (!data.width && !data.height && hasDimensions(editor)) { - editor.dom.setAttribs(imgElm, { - width: String(imgElm.clientWidth), - height: String(imgElm.clientHeight) - }); - } - selectImage(); - }; - imgElm.onerror = selectImage; - }; - var blobToDataUri = function (blob) { - return new global$2(function (resolve, reject) { - var reader = new FileReader(); - reader.onload = function () { - resolve(reader.result); - }; - reader.onerror = function () { - reject(reader.error.message); - }; - reader.readAsDataURL(blob); - }); - }; - var isPlaceholderImage = function (imgElm) { - return imgElm.nodeName === 'IMG' && (imgElm.hasAttribute('data-mce-object') || imgElm.hasAttribute('data-mce-placeholder')); - }; - - var DOM = global$1.DOM; - var getHspace = function (image) { - if (image.style.marginLeft && image.style.marginRight && image.style.marginLeft === image.style.marginRight) { - return removePixelSuffix(image.style.marginLeft); - } else { - return ''; - } - }; - var getVspace = function (image) { - if (image.style.marginTop && image.style.marginBottom && image.style.marginTop === image.style.marginBottom) { - return removePixelSuffix(image.style.marginTop); - } else { - return ''; - } - }; - var getBorder = function (image) { - if (image.style.borderWidth) { - return removePixelSuffix(image.style.borderWidth); - } else { - return ''; - } - }; - var getAttrib = function (image, name) { - if (image.hasAttribute(name)) { - return image.getAttribute(name); - } else { - return ''; - } - }; - var getStyle = function (image, name) { - return image.style[name] ? image.style[name] : ''; - }; - var hasCaption = function (image) { - return image.parentNode !== null && image.parentNode.nodeName === 'FIGURE'; - }; - var updateAttrib = function (image, name, value) { - if (value === '') { - image.removeAttribute(name); - } else { - image.setAttribute(name, value); - } - }; - var wrapInFigure = function (image) { - var figureElm = DOM.create('figure', { class: 'image' }); - DOM.insertAfter(figureElm, image); - figureElm.appendChild(image); - figureElm.appendChild(DOM.create('figcaption', { contentEditable: 'true' }, 'Caption')); - figureElm.contentEditable = 'false'; - }; - var removeFigure = function (image) { - var figureElm = image.parentNode; - DOM.insertAfter(image, figureElm); - DOM.remove(figureElm); - }; - var toggleCaption = function (image) { - if (hasCaption(image)) { - removeFigure(image); - } else { - wrapInFigure(image); - } - }; - var normalizeStyle = function (image, normalizeCss) { - var attrValue = image.getAttribute('style'); - var value = normalizeCss(attrValue !== null ? attrValue : ''); - if (value.length > 0) { - image.setAttribute('style', value); - image.setAttribute('data-mce-style', value); - } else { - image.removeAttribute('style'); - } - }; - var setSize = function (name, normalizeCss) { - return function (image, name, value) { - if (image.style[name]) { - image.style[name] = addPixelSuffix(value); - normalizeStyle(image, normalizeCss); - } else { - updateAttrib(image, name, value); - } - }; - }; - var getSize = function (image, name) { - if (image.style[name]) { - return removePixelSuffix(image.style[name]); - } else { - return getAttrib(image, name); - } - }; - var setHspace = function (image, value) { - var pxValue = addPixelSuffix(value); - image.style.marginLeft = pxValue; - image.style.marginRight = pxValue; - }; - var setVspace = function (image, value) { - var pxValue = addPixelSuffix(value); - image.style.marginTop = pxValue; - image.style.marginBottom = pxValue; - }; - var setBorder = function (image, value) { - var pxValue = addPixelSuffix(value); - image.style.borderWidth = pxValue; - }; - var setBorderStyle = function (image, value) { - image.style.borderStyle = value; - }; - var getBorderStyle = function (image) { - return getStyle(image, 'borderStyle'); - }; - var isFigure = function (elm) { - return elm.nodeName === 'FIGURE'; - }; - var isImage = function (elm) { - return elm.nodeName === 'IMG'; - }; - var getIsDecorative = function (image) { - return DOM.getAttrib(image, 'alt').length === 0 && DOM.getAttrib(image, 'role') === 'presentation'; - }; - var getAlt = function (image) { - if (getIsDecorative(image)) { - return ''; - } else { - return getAttrib(image, 'alt'); - } - }; - var defaultData = function () { - return { - src: '', - alt: '', - title: '', - width: '', - height: '', - class: '', - style: '', - caption: false, - hspace: '', - vspace: '', - border: '', - borderStyle: '', - isDecorative: false - }; - }; - var getStyleValue = function (normalizeCss, data) { - var image = document.createElement('img'); - updateAttrib(image, 'style', data.style); - if (getHspace(image) || data.hspace !== '') { - setHspace(image, data.hspace); - } - if (getVspace(image) || data.vspace !== '') { - setVspace(image, data.vspace); - } - if (getBorder(image) || data.border !== '') { - setBorder(image, data.border); - } - if (getBorderStyle(image) || data.borderStyle !== '') { - setBorderStyle(image, data.borderStyle); - } - return normalizeCss(image.getAttribute('style')); - }; - var create = function (normalizeCss, data) { - var image = document.createElement('img'); - write(normalizeCss, __assign(__assign({}, data), { caption: false }), image); - setAlt(image, data.alt, data.isDecorative); - if (data.caption) { - var figure = DOM.create('figure', { class: 'image' }); - figure.appendChild(image); - figure.appendChild(DOM.create('figcaption', { contentEditable: 'true' }, 'Caption')); - figure.contentEditable = 'false'; - return figure; - } else { - return image; - } - }; - var read = function (normalizeCss, image) { - return { - src: getAttrib(image, 'src'), - alt: getAlt(image), - title: getAttrib(image, 'title'), - width: getSize(image, 'width'), - height: getSize(image, 'height'), - class: getAttrib(image, 'class'), - style: normalizeCss(getAttrib(image, 'style')), - caption: hasCaption(image), - hspace: getHspace(image), - vspace: getVspace(image), - border: getBorder(image), - borderStyle: getStyle(image, 'borderStyle'), - isDecorative: getIsDecorative(image) - }; - }; - var updateProp = function (image, oldData, newData, name, set) { - if (newData[name] !== oldData[name]) { - set(image, name, newData[name]); - } - }; - var setAlt = function (image, alt, isDecorative) { - if (isDecorative) { - DOM.setAttrib(image, 'role', 'presentation'); - var sugarImage = SugarElement.fromDom(image); - set(sugarImage, 'alt', ''); - } else { - if (isNull(alt)) { - var sugarImage = SugarElement.fromDom(image); - remove(sugarImage, 'alt'); - } else { - var sugarImage = SugarElement.fromDom(image); - set(sugarImage, 'alt', alt); - } - if (DOM.getAttrib(image, 'role') === 'presentation') { - DOM.setAttrib(image, 'role', ''); - } - } - }; - var updateAlt = function (image, oldData, newData) { - if (newData.alt !== oldData.alt || newData.isDecorative !== oldData.isDecorative) { - setAlt(image, newData.alt, newData.isDecorative); - } - }; - var normalized = function (set, normalizeCss) { - return function (image, name, value) { - set(image, value); - normalizeStyle(image, normalizeCss); - }; - }; - var write = function (normalizeCss, newData, image) { - var oldData = read(normalizeCss, image); - updateProp(image, oldData, newData, 'caption', function (image, _name, _value) { - return toggleCaption(image); - }); - updateProp(image, oldData, newData, 'src', updateAttrib); - updateProp(image, oldData, newData, 'title', updateAttrib); - updateProp(image, oldData, newData, 'width', setSize('width', normalizeCss)); - updateProp(image, oldData, newData, 'height', setSize('height', normalizeCss)); - updateProp(image, oldData, newData, 'class', updateAttrib); - updateProp(image, oldData, newData, 'style', normalized(function (image, value) { - return updateAttrib(image, 'style', value); - }, normalizeCss)); - updateProp(image, oldData, newData, 'hspace', normalized(setHspace, normalizeCss)); - updateProp(image, oldData, newData, 'vspace', normalized(setVspace, normalizeCss)); - updateProp(image, oldData, newData, 'border', normalized(setBorder, normalizeCss)); - updateProp(image, oldData, newData, 'borderStyle', normalized(setBorderStyle, normalizeCss)); - updateAlt(image, oldData, newData); - }; - - var normalizeCss = function (editor, cssText) { - var css = editor.dom.styles.parse(cssText); - var mergedCss = mergeMargins(css); - var compressed = editor.dom.styles.parse(editor.dom.styles.serialize(mergedCss)); - return editor.dom.styles.serialize(compressed); - }; - var getSelectedImage = function (editor) { - var imgElm = editor.selection.getNode(); - var figureElm = editor.dom.getParent(imgElm, 'figure.image'); - if (figureElm) { - return editor.dom.select('img', figureElm)[0]; - } - if (imgElm && (imgElm.nodeName !== 'IMG' || isPlaceholderImage(imgElm))) { - return null; - } - return imgElm; - }; - var splitTextBlock = function (editor, figure) { - var dom = editor.dom; - var textBlock = dom.getParent(figure.parentNode, function (node) { - return !!editor.schema.getTextBlockElements()[node.nodeName]; - }, editor.getBody()); - if (textBlock) { - return dom.split(textBlock, figure); - } else { - return figure; - } - }; - var readImageDataFromSelection = function (editor) { - var image = getSelectedImage(editor); - return image ? read(function (css) { - return normalizeCss(editor, css); - }, image) : defaultData(); - }; - var insertImageAtCaret = function (editor, data) { - var elm = create(function (css) { - return normalizeCss(editor, css); - }, data); - editor.dom.setAttrib(elm, 'data-mce-id', '__mcenew'); - editor.focus(); - editor.selection.setContent(elm.outerHTML); - var insertedElm = editor.dom.select('*[data-mce-id="__mcenew"]')[0]; - editor.dom.setAttrib(insertedElm, 'data-mce-id', null); - if (isFigure(insertedElm)) { - var figure = splitTextBlock(editor, insertedElm); - editor.selection.select(figure); - } else { - editor.selection.select(insertedElm); - } - }; - var syncSrcAttr = function (editor, image) { - editor.dom.setAttrib(image, 'src', image.getAttribute('src')); - }; - var deleteImage = function (editor, image) { - if (image) { - var elm = editor.dom.is(image.parentNode, 'figure.image') ? image.parentNode : image; - editor.dom.remove(elm); - editor.focus(); - editor.nodeChanged(); - if (editor.dom.isEmpty(editor.getBody())) { - editor.setContent(''); - editor.selection.setCursorLocation(); - } - } - }; - var writeImageDataToSelection = function (editor, data) { - var image = getSelectedImage(editor); - write(function (css) { - return normalizeCss(editor, css); - }, data, image); - syncSrcAttr(editor, image); - if (isFigure(image.parentNode)) { - var figure = image.parentNode; - splitTextBlock(editor, figure); - editor.selection.select(image.parentNode); - } else { - editor.selection.select(image); - waitLoadImage(editor, data, image); - } - }; - var insertOrUpdateImage = function (editor, partialData) { - var image = getSelectedImage(editor); - if (image) { - var selectedImageData = read(function (css) { - return normalizeCss(editor, css); - }, image); - var data = __assign(__assign({}, selectedImageData), partialData); - if (data.src) { - writeImageDataToSelection(editor, data); - } else { - deleteImage(editor, image); - } - } else if (partialData.src) { - insertImageAtCaret(editor, __assign(__assign({}, defaultData()), partialData)); - } - }; - - var hasOwnProperty = Object.prototype.hasOwnProperty; - var deep = function (old, nu) { - var bothObjects = isObject(old) && isObject(nu); - return bothObjects ? deepMerge(old, nu) : nu; - }; - var baseMerge = function (merger) { - return function () { - var objects = new Array(arguments.length); - for (var i = 0; i < objects.length; i++) { - objects[i] = arguments[i]; - } - if (objects.length === 0) { - throw new Error('Can\'t merge zero objects'); - } - var ret = {}; - for (var j = 0; j < objects.length; j++) { - var curObject = objects[j]; - for (var key in curObject) { - if (hasOwnProperty.call(curObject, key)) { - ret[key] = merger(ret[key], curObject[key]); - } - } - } - return ret; - }; - }; - var deepMerge = baseMerge(deep); - - var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools'); - - var getValue = function (item) { - return isString(item.value) ? item.value : ''; - }; - var getText = function (item) { - if (isString(item.text)) { - return item.text; - } else if (isString(item.title)) { - return item.title; - } else { - return ''; - } - }; - var sanitizeList = function (list, extractValue) { - var out = []; - global$4.each(list, function (item) { - var text = getText(item); - if (item.menu !== undefined) { - var items = sanitizeList(item.menu, extractValue); - out.push({ - text: text, - items: items - }); - } else { - var value = extractValue(item); - out.push({ - text: text, - value: value - }); - } - }); - return out; - }; - var sanitizer = function (extracter) { - if (extracter === void 0) { - extracter = getValue; - } - return function (list) { - if (list) { - return Optional.from(list).map(function (list) { - return sanitizeList(list, extracter); - }); - } else { - return Optional.none(); - } - }; - }; - var sanitize = function (list) { - return sanitizer(getValue)(list); - }; - var isGroup = function (item) { - return Object.prototype.hasOwnProperty.call(item, 'items'); - }; - var findEntryDelegate = function (list, value) { - return findMap(list, function (item) { - if (isGroup(item)) { - return findEntryDelegate(item.items, value); - } else if (item.value === value) { - return Optional.some(item); - } else { - return Optional.none(); - } - }); - }; - var findEntry = function (optList, value) { - return optList.bind(function (list) { - return findEntryDelegate(list, value); - }); - }; - var ListUtils = { - sanitizer: sanitizer, - sanitize: sanitize, - findEntry: findEntry - }; - - var pathJoin = function (path1, path2) { - if (path1) { - return path1.replace(/\/$/, '') + '/' + path2.replace(/^\//, ''); - } - return path2; - }; - function Uploader (settings) { - var defaultHandler = function (blobInfo, success, failure, progress) { - var xhr = new XMLHttpRequest(); - xhr.open('POST', settings.url); - xhr.withCredentials = settings.credentials; - xhr.upload.onprogress = function (e) { - progress(e.loaded / e.total * 100); - }; - xhr.onerror = function () { - failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status); - }; - xhr.onload = function () { - if (xhr.status < 200 || xhr.status >= 300) { - failure('HTTP Error: ' + xhr.status); - return; - } - var json = JSON.parse(xhr.responseText); - if (!json || typeof json.location !== 'string') { - failure('Invalid JSON: ' + xhr.responseText); - return; - } - success(pathJoin(settings.basePath, json.location)); - }; - var formData = new FormData(); - formData.append('file', blobInfo.blob(), blobInfo.filename()); - xhr.send(formData); - }; - var uploadBlob = function (blobInfo, handler) { - return new global$2(function (resolve, reject) { - try { - handler(blobInfo, resolve, reject, noop); - } catch (ex) { - reject(ex.message); - } - }); - }; - var isDefaultHandler = function (handler) { - return handler === defaultHandler; - }; - var upload = function (blobInfo) { - return !settings.url && isDefaultHandler(settings.handler) ? global$2.reject('Upload url missing from the settings.') : uploadBlob(blobInfo, settings.handler); - }; - settings = global$4.extend({ - credentials: false, - handler: defaultHandler - }, settings); - return { upload: upload }; - } - - var makeTab = function (_info) { - return { - title: 'Advanced', - name: 'advanced', - items: [ - { - type: 'input', - label: 'Style', - name: 'style' - }, - { - type: 'grid', - columns: 2, - items: [ - { - type: 'input', - label: 'Vertical space', - name: 'vspace', - inputMode: 'numeric' - }, - { - type: 'input', - label: 'Horizontal space', - name: 'hspace', - inputMode: 'numeric' - }, - { - type: 'input', - label: 'Border width', - name: 'border', - inputMode: 'numeric' - }, - { - type: 'listbox', - name: 'borderstyle', - label: 'Border style', - items: [ - { - text: 'Select...', - value: '' - }, - { - text: 'Solid', - value: 'solid' - }, - { - text: 'Dotted', - value: 'dotted' - }, - { - text: 'Dashed', - value: 'dashed' - }, - { - text: 'Double', - value: 'double' - }, - { - text: 'Groove', - value: 'groove' - }, - { - text: 'Ridge', - value: 'ridge' - }, - { - text: 'Inset', - value: 'inset' - }, - { - text: 'Outset', - value: 'outset' - }, - { - text: 'None', - value: 'none' - }, - { - text: 'Hidden', - value: 'hidden' - } - ] - } - ] - } - ] - }; - }; - var AdvTab = { makeTab: makeTab }; - - var collect = function (editor) { - var urlListSanitizer = ListUtils.sanitizer(function (item) { - return editor.convertURL(item.value || item.url, 'src'); - }); - var futureImageList = new global$2(function (completer) { - createImageList(editor, function (imageList) { - completer(urlListSanitizer(imageList).map(function (items) { - return flatten([ - [{ - text: 'None', - value: '' - }], - items - ]); - })); - }); - }); - var classList = ListUtils.sanitize(getClassList(editor)); - var hasAdvTab$1 = hasAdvTab(editor); - var hasUploadTab$1 = hasUploadTab(editor); - var hasUploadUrl$1 = hasUploadUrl(editor); - var hasUploadHandler$1 = hasUploadHandler(editor); - var image = readImageDataFromSelection(editor); - var hasDescription$1 = hasDescription(editor); - var hasImageTitle$1 = hasImageTitle(editor); - var hasDimensions$1 = hasDimensions(editor); - var hasImageCaption$1 = hasImageCaption(editor); - var hasAccessibilityOptions = showAccessibilityOptions(editor); - var url = getUploadUrl(editor); - var basePath = getUploadBasePath(editor); - var credentials = getUploadCredentials(editor); - var handler = getUploadHandler(editor); - var automaticUploads = isAutomaticUploadsEnabled(editor); - var prependURL = Optional.some(getPrependUrl(editor)).filter(function (preUrl) { - return isString(preUrl) && preUrl.length > 0; - }); - return futureImageList.then(function (imageList) { - return { - image: image, - imageList: imageList, - classList: classList, - hasAdvTab: hasAdvTab$1, - hasUploadTab: hasUploadTab$1, - hasUploadUrl: hasUploadUrl$1, - hasUploadHandler: hasUploadHandler$1, - hasDescription: hasDescription$1, - hasImageTitle: hasImageTitle$1, - hasDimensions: hasDimensions$1, - hasImageCaption: hasImageCaption$1, - url: url, - basePath: basePath, - credentials: credentials, - handler: handler, - prependURL: prependURL, - hasAccessibilityOptions: hasAccessibilityOptions, - automaticUploads: automaticUploads - }; - }); - }; - - var makeItems = function (info) { - var imageUrl = { - name: 'src', - type: 'urlinput', - filetype: 'image', - label: 'Source' - }; - var imageList = info.imageList.map(function (items) { - return { - name: 'images', - type: 'listbox', - label: 'Image list', - items: items - }; - }); - var imageDescription = { - name: 'alt', - type: 'input', - label: 'Alternative description', - disabled: info.hasAccessibilityOptions && info.image.isDecorative - }; - var imageTitle = { - name: 'title', - type: 'input', - label: 'Image title' - }; - var imageDimensions = { - name: 'dimensions', - type: 'sizeinput' - }; - var isDecorative = { - type: 'label', - label: 'Accessibility', - items: [{ - name: 'isDecorative', - type: 'checkbox', - label: 'Image is decorative' - }] - }; - var classList = info.classList.map(function (items) { - return { - name: 'classes', - type: 'listbox', - label: 'Class', - items: items - }; - }); - var caption = { - type: 'label', - label: 'Caption', - items: [{ - type: 'checkbox', - name: 'caption', - label: 'Show caption' - }] - }; - return flatten([ - [imageUrl], - imageList.toArray(), - info.hasAccessibilityOptions && info.hasDescription ? [isDecorative] : [], - info.hasDescription ? [imageDescription] : [], - info.hasImageTitle ? [imageTitle] : [], - info.hasDimensions ? [imageDimensions] : [], - [{ - type: 'grid', - columns: 2, - items: flatten([ - classList.toArray(), - info.hasImageCaption ? [caption] : [] - ]) - }] - ]); - }; - var makeTab$1 = function (info) { - return { - title: 'General', - name: 'general', - items: makeItems(info) - }; - }; - var MainTab = { - makeTab: makeTab$1, - makeItems: makeItems - }; - - var makeTab$2 = function (_info) { - var items = [{ - type: 'dropzone', - name: 'fileinput' - }]; - return { - title: 'Upload', - name: 'upload', - items: items - }; - }; - var UploadTab = { makeTab: makeTab$2 }; - - var createState = function (info) { - return { - prevImage: ListUtils.findEntry(info.imageList, info.image.src), - prevAlt: info.image.alt, - open: true - }; - }; - var fromImageData = function (image) { - return { - src: { - value: image.src, - meta: {} - }, - images: image.src, - alt: image.alt, - title: image.title, - dimensions: { - width: image.width, - height: image.height - }, - classes: image.class, - caption: image.caption, - style: image.style, - vspace: image.vspace, - border: image.border, - hspace: image.hspace, - borderstyle: image.borderStyle, - fileinput: [], - isDecorative: image.isDecorative - }; - }; - var toImageData = function (data, removeEmptyAlt) { - return { - src: data.src.value, - alt: data.alt.length === 0 && removeEmptyAlt ? null : data.alt, - title: data.title, - width: data.dimensions.width, - height: data.dimensions.height, - class: data.classes, - style: data.style, - caption: data.caption, - hspace: data.hspace, - vspace: data.vspace, - border: data.border, - borderStyle: data.borderstyle, - isDecorative: data.isDecorative - }; - }; - var addPrependUrl2 = function (info, srcURL) { - if (!/^(?:[a-zA-Z]+:)?\/\//.test(srcURL)) { - return info.prependURL.bind(function (prependUrl) { - if (srcURL.substring(0, prependUrl.length) !== prependUrl) { - return Optional.some(prependUrl + srcURL); - } - return Optional.none(); - }); - } - return Optional.none(); - }; - var addPrependUrl = function (info, api) { - var data = api.getData(); - addPrependUrl2(info, data.src.value).each(function (srcURL) { - api.setData({ - src: { - value: srcURL, - meta: data.src.meta - } - }); - }); - }; - var formFillFromMeta2 = function (info, data, meta) { - if (info.hasDescription && isString(meta.alt)) { - data.alt = meta.alt; - } - if (info.hasAccessibilityOptions) { - data.isDecorative = meta.isDecorative || data.isDecorative || false; - } - if (info.hasImageTitle && isString(meta.title)) { - data.title = meta.title; - } - if (info.hasDimensions) { - if (isString(meta.width)) { - data.dimensions.width = meta.width; - } - if (isString(meta.height)) { - data.dimensions.height = meta.height; - } - } - if (isString(meta.class)) { - ListUtils.findEntry(info.classList, meta.class).each(function (entry) { - data.classes = entry.value; - }); - } - if (info.hasImageCaption) { - if (isBoolean(meta.caption)) { - data.caption = meta.caption; - } - } - if (info.hasAdvTab) { - if (isString(meta.style)) { - data.style = meta.style; - } - if (isString(meta.vspace)) { - data.vspace = meta.vspace; - } - if (isString(meta.border)) { - data.border = meta.border; - } - if (isString(meta.hspace)) { - data.hspace = meta.hspace; - } - if (isString(meta.borderstyle)) { - data.borderstyle = meta.borderstyle; - } - } - }; - var formFillFromMeta = function (info, api) { - var data = api.getData(); - var meta = data.src.meta; - if (meta !== undefined) { - var newData = deepMerge({}, data); - formFillFromMeta2(info, newData, meta); - api.setData(newData); - } - }; - var calculateImageSize = function (helpers, info, state, api) { - var data = api.getData(); - var url = data.src.value; - var meta = data.src.meta || {}; - if (!meta.width && !meta.height && info.hasDimensions) { - helpers.imageSize(url).then(function (size) { - if (state.open) { - api.setData({ dimensions: size }); - } - }); - } - }; - var updateImagesDropdown = function (info, state, api) { - var data = api.getData(); - var image = ListUtils.findEntry(info.imageList, data.src.value); - state.prevImage = image; - api.setData({ - images: image.map(function (entry) { - return entry.value; - }).getOr('') - }); - }; - var changeSrc = function (helpers, info, state, api) { - addPrependUrl(info, api); - formFillFromMeta(info, api); - calculateImageSize(helpers, info, state, api); - updateImagesDropdown(info, state, api); - }; - var changeImages = function (helpers, info, state, api) { - var data = api.getData(); - var image = ListUtils.findEntry(info.imageList, data.images); - image.each(function (img) { - var updateAlt = data.alt === '' || state.prevImage.map(function (image) { - return image.text === data.alt; - }).getOr(false); - if (updateAlt) { - if (img.value === '') { - api.setData({ - src: img, - alt: state.prevAlt - }); - } else { - api.setData({ - src: img, - alt: img.text - }); - } - } else { - api.setData({ src: img }); - } - }); - state.prevImage = image; - changeSrc(helpers, info, state, api); - }; - var calcVSpace = function (css) { - var matchingTopBottom = css['margin-top'] && css['margin-bottom'] && css['margin-top'] === css['margin-bottom']; - return matchingTopBottom ? removePixelSuffix(String(css['margin-top'])) : ''; - }; - var calcHSpace = function (css) { - var matchingLeftRight = css['margin-right'] && css['margin-left'] && css['margin-right'] === css['margin-left']; - return matchingLeftRight ? removePixelSuffix(String(css['margin-right'])) : ''; - }; - var calcBorderWidth = function (css) { - return css['border-width'] ? removePixelSuffix(String(css['border-width'])) : ''; - }; - var calcBorderStyle = function (css) { - return css['border-style'] ? String(css['border-style']) : ''; - }; - var calcStyle = function (parseStyle, serializeStyle, css) { - return serializeStyle(parseStyle(serializeStyle(css))); - }; - var changeStyle2 = function (parseStyle, serializeStyle, data) { - var css = mergeMargins(parseStyle(data.style)); - var dataCopy = deepMerge({}, data); - dataCopy.vspace = calcVSpace(css); - dataCopy.hspace = calcHSpace(css); - dataCopy.border = calcBorderWidth(css); - dataCopy.borderstyle = calcBorderStyle(css); - dataCopy.style = calcStyle(parseStyle, serializeStyle, css); - return dataCopy; - }; - var changeStyle = function (helpers, api) { - var data = api.getData(); - var newData = changeStyle2(helpers.parseStyle, helpers.serializeStyle, data); - api.setData(newData); - }; - var changeAStyle = function (helpers, info, api) { - var data = deepMerge(fromImageData(info.image), api.getData()); - var style = getStyleValue(helpers.normalizeCss, toImageData(data, false)); - api.setData({ style: style }); - }; - var changeFileInput = function (helpers, info, state, api) { - var data = api.getData(); - api.block('Uploading image'); - head(data.fileinput).fold(function () { - api.unblock(); - }, function (file) { - var blobUri = URL.createObjectURL(file); - var uploader = Uploader({ - url: info.url, - basePath: info.basePath, - credentials: info.credentials, - handler: info.handler - }); - var finalize = function () { - api.unblock(); - URL.revokeObjectURL(blobUri); - }; - var updateSrcAndSwitchTab = function (url) { - api.setData({ - src: { - value: url, - meta: {} - } - }); - api.showTab('general'); - changeSrc(helpers, info, state, api); - }; - blobToDataUri(file).then(function (dataUrl) { - var blobInfo = helpers.createBlobCache(file, blobUri, dataUrl); - if (info.automaticUploads) { - uploader.upload(blobInfo).then(function (url) { - updateSrcAndSwitchTab(url); - finalize(); - }).catch(function (err) { - finalize(); - helpers.alertErr(err); - }); - } else { - helpers.addToBlobCache(blobInfo); - updateSrcAndSwitchTab(blobInfo.blobUri()); - api.unblock(); - } - }); - }); - }; - var changeHandler = function (helpers, info, state) { - return function (api, evt) { - if (evt.name === 'src') { - changeSrc(helpers, info, state, api); - } else if (evt.name === 'images') { - changeImages(helpers, info, state, api); - } else if (evt.name === 'alt') { - state.prevAlt = api.getData().alt; - } else if (evt.name === 'style') { - changeStyle(helpers, api); - } else if (evt.name === 'vspace' || evt.name === 'hspace' || evt.name === 'border' || evt.name === 'borderstyle') { - changeAStyle(helpers, info, api); - } else if (evt.name === 'fileinput') { - changeFileInput(helpers, info, state, api); - } else if (evt.name === 'isDecorative') { - if (api.getData().isDecorative) { - api.disable('alt'); - } else { - api.enable('alt'); - } - } - }; - }; - var closeHandler = function (state) { - return function () { - state.open = false; - }; - }; - var makeDialogBody = function (info) { - if (info.hasAdvTab || info.hasUploadUrl || info.hasUploadHandler) { - var tabPanel = { - type: 'tabpanel', - tabs: flatten([ - [MainTab.makeTab(info)], - info.hasAdvTab ? [AdvTab.makeTab(info)] : [], - info.hasUploadTab && (info.hasUploadUrl || info.hasUploadHandler) ? [UploadTab.makeTab(info)] : [] - ]) - }; - return tabPanel; - } else { - var panel = { - type: 'panel', - items: MainTab.makeItems(info) - }; - return panel; - } - }; - var makeDialog = function (helpers) { - return function (info) { - var state = createState(info); - return { - title: 'Insert/Edit Image', - size: 'normal', - body: makeDialogBody(info), - buttons: [ - { - type: 'cancel', - name: 'cancel', - text: 'Cancel' - }, - { - type: 'submit', - name: 'save', - text: 'Save', - primary: true - } - ], - initialData: fromImageData(info.image), - onSubmit: helpers.onSubmit(info), - onChange: changeHandler(helpers, info, state), - onClose: closeHandler(state) - }; - }; - }; - var submitHandler = function (editor) { - return function (info) { - return function (api) { - var data = deepMerge(fromImageData(info.image), api.getData()); - editor.execCommand('mceUpdateImage', false, toImageData(data, info.hasAccessibilityOptions)); - editor.editorUpload.uploadImagesAuto(); - api.close(); - }; - }; - }; - var imageSize = function (editor) { - return function (url) { - return getImageSize(editor.documentBaseURI.toAbsolute(url)).then(function (dimensions) { - return { - width: String(dimensions.width), - height: String(dimensions.height) - }; - }); - }; - }; - var createBlobCache = function (editor) { - return function (file, blobUri, dataUrl) { - return editor.editorUpload.blobCache.create({ - blob: file, - blobUri: blobUri, - name: file.name ? file.name.replace(/\.[^\.]+$/, '') : null, - filename: file.name, - base64: dataUrl.split(',')[1] - }); - }; - }; - var addToBlobCache = function (editor) { - return function (blobInfo) { - editor.editorUpload.blobCache.add(blobInfo); - }; - }; - var alertErr = function (editor) { - return function (message) { - editor.windowManager.alert(message); - }; - }; - var normalizeCss$1 = function (editor) { - return function (cssText) { - return normalizeCss(editor, cssText); - }; - }; - var parseStyle = function (editor) { - return function (cssText) { - return editor.dom.parseStyle(cssText); - }; - }; - var serializeStyle = function (editor) { - return function (stylesArg, name) { - return editor.dom.serializeStyle(stylesArg, name); - }; - }; - var Dialog = function (editor) { - var helpers = { - onSubmit: submitHandler(editor), - imageSize: imageSize(editor), - addToBlobCache: addToBlobCache(editor), - createBlobCache: createBlobCache(editor), - alertErr: alertErr(editor), - normalizeCss: normalizeCss$1(editor), - parseStyle: parseStyle(editor), - serializeStyle: serializeStyle(editor) - }; - var open = function () { - collect(editor).then(makeDialog(helpers)).then(editor.windowManager.open); - }; - return { open: open }; - }; - - var register = function (editor) { - editor.addCommand('mceImage', Dialog(editor).open); - editor.addCommand('mceUpdateImage', function (_ui, data) { - editor.undoManager.transact(function () { - return insertOrUpdateImage(editor, data); - }); - }); - }; - - var hasImageClass = function (node) { - var className = node.attr('class'); - return className && /\bimage\b/.test(className); - }; - var toggleContentEditableState = function (state) { - return function (nodes) { - var i = nodes.length; - var toggleContentEditable = function (node) { - node.attr('contenteditable', state ? 'true' : null); - }; - while (i--) { - var node = nodes[i]; - if (hasImageClass(node)) { - node.attr('contenteditable', state ? 'false' : null); - global$4.each(node.getAll('figcaption'), toggleContentEditable); - } - } - }; - }; - var setup = function (editor) { - editor.on('PreInit', function () { - editor.parser.addNodeFilter('figure', toggleContentEditableState(true)); - editor.serializer.addNodeFilter('figure', toggleContentEditableState(false)); - }); - }; - - var register$1 = function (editor) { - editor.ui.registry.addToggleButton('image', { - icon: 'image', - tooltip: 'Insert/edit image', - onAction: Dialog(editor).open, - onSetup: function (buttonApi) { - return editor.selection.selectorChangedWithUnbind('img:not([data-mce-object],[data-mce-placeholder]),figure.image', buttonApi.setActive).unbind; - } - }); - editor.ui.registry.addMenuItem('image', { - icon: 'image', - text: 'Image...', - onAction: Dialog(editor).open - }); - editor.ui.registry.addContextMenu('image', { - update: function (element) { - return isFigure(element) || isImage(element) && !isPlaceholderImage(element) ? ['image'] : []; - } - }); - }; - - function Plugin () { - global.add('image', function (editor) { - setup(editor); - register$1(editor); - register(editor); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/image/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/image/plugin.min.js deleted file mode 100644 index 7b454364ab5f282caedd5935be003b1d99c8dfe9..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/image/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var t,e,n,r,o,a=tinymce.util.Tools.resolve("tinymce.PluginManager"),c=function(){return(c=Object.assign||function(e){for(var t,n=1,r=arguments.length;n 1) { - console.error('HTML does not have a single root node', html); - throw new Error('HTML must have a single root node'); - } - return fromDom(div.childNodes[0]); - }; - var fromTag = function (tag, scope) { - var doc = scope || document; - var node = doc.createElement(tag); - return fromDom(node); - }; - var fromText = function (text, scope) { - var doc = scope || document; - var node = doc.createTextNode(text); - return fromDom(node); - }; - var fromDom = function (node) { - if (node === null || node === undefined) { - throw new Error('Node cannot be null or undefined'); - } - return { dom: node }; - }; - var fromPoint = function (docElm, x, y) { - return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom); - }; - var SugarElement = { - fromHtml: fromHtml, - fromTag: fromTag, - fromText: fromText, - fromDom: fromDom, - fromPoint: fromPoint - }; - - var is = function (element, selector) { - var dom = element.dom; - if (dom.nodeType !== ELEMENT) { - return false; - } else { - var elem = dom; - if (elem.matches !== undefined) { - return elem.matches(selector); - } else if (elem.msMatchesSelector !== undefined) { - return elem.msMatchesSelector(selector); - } else if (elem.webkitMatchesSelector !== undefined) { - return elem.webkitMatchesSelector(selector); - } else if (elem.mozMatchesSelector !== undefined) { - return elem.mozMatchesSelector(selector); - } else { - throw new Error('Browser lacks native selectors'); - } - } - }; - - var Global = typeof window !== 'undefined' ? window : Function('return this;')(); - - var child = function (scope, predicate) { - var pred = function (node) { - return predicate(SugarElement.fromDom(node)); - }; - var result = find(scope.dom.childNodes, pred); - return result.map(SugarElement.fromDom); - }; - - var child$1 = function (scope, selector) { - return child(scope, function (e) { - return is(e, selector); - }); - }; - - var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay'); - - var global$3 = tinymce.util.Tools.resolve('tinymce.util.Promise'); - - var global$4 = tinymce.util.Tools.resolve('tinymce.util.URI'); - - var getToolbarItems = function (editor) { - return editor.getParam('imagetools_toolbar', 'rotateleft rotateright flipv fliph editimage imageoptions'); - }; - var getProxyUrl = function (editor) { - return editor.getParam('imagetools_proxy'); - }; - var getCorsHosts = function (editor) { - return editor.getParam('imagetools_cors_hosts', [], 'string[]'); - }; - var getCredentialsHosts = function (editor) { - return editor.getParam('imagetools_credentials_hosts', [], 'string[]'); - }; - var getFetchImage = function (editor) { - return Optional.from(editor.getParam('imagetools_fetch_image', null, 'function')); - }; - var getApiKey = function (editor) { - return editor.getParam('api_key', editor.getParam('imagetools_api_key', '', 'string'), 'string'); - }; - var getUploadTimeout = function (editor) { - return editor.getParam('images_upload_timeout', 30000, 'number'); - }; - var shouldReuseFilename = function (editor) { - return editor.getParam('images_reuse_filename', false, 'boolean'); - }; - - function getImageSize(img) { - var width, height; - function isPxValue(value) { - return /^[0-9\.]+px$/.test(value); - } - width = img.style.width; - height = img.style.height; - if (width || height) { - if (isPxValue(width) && isPxValue(height)) { - return { - w: parseInt(width, 10), - h: parseInt(height, 10) - }; - } - return null; - } - width = img.width; - height = img.height; - if (width && height) { - return { - w: parseInt(width, 10), - h: parseInt(height, 10) - }; - } - return null; - } - function setImageSize(img, size) { - var width, height; - if (size) { - width = img.style.width; - height = img.style.height; - if (width || height) { - img.style.width = size.w + 'px'; - img.style.height = size.h + 'px'; - img.removeAttribute('data-mce-style'); - } - width = img.width; - height = img.height; - if (width || height) { - img.setAttribute('width', String(size.w)); - img.setAttribute('height', String(size.h)); - } - } - } - function getNaturalImageSize(img) { - return { - w: img.naturalWidth, - h: img.naturalHeight - }; - } - - var count = 0; - var getFigureImg = function (elem) { - return child$1(SugarElement.fromDom(elem), 'img'); - }; - var isFigure = function (editor, elem) { - return editor.dom.is(elem, 'figure'); - }; - var isImage = function (editor, imgNode) { - return editor.dom.is(imgNode, 'img:not([data-mce-object],[data-mce-placeholder])'); - }; - var getEditableImage = function (editor, node) { - var isEditable = function (imgNode) { - return isImage(editor, imgNode) && (isLocalImage(editor, imgNode) || isCorsImage(editor, imgNode) || isNonNullable(getProxyUrl(editor))); - }; - if (isFigure(editor, node)) { - return getFigureImg(node).bind(function (img) { - return isEditable(img.dom) ? Optional.some(img.dom) : Optional.none(); - }); - } else { - return isEditable(node) ? Optional.some(node) : Optional.none(); - } - }; - var displayError = function (editor, error) { - editor.notificationManager.open({ - text: error, - type: 'error' - }); - }; - var getSelectedImage = function (editor) { - var elem = editor.selection.getNode(); - var figureElm = editor.dom.getParent(elem, 'figure.image'); - if (figureElm !== null && isFigure(editor, figureElm)) { - return getFigureImg(figureElm); - } else if (isImage(editor, elem)) { - return Optional.some(SugarElement.fromDom(elem)); - } else { - return Optional.none(); - } - }; - var extractFilename = function (editor, url, group) { - var m = url.match(/(?:\/|^)(([^\/\?]+)\.(?:[a-z0-9.]+))(?:\?|$)/i); - return isNonNullable(m) ? editor.dom.encode(m[group]) : null; - }; - var createId = function () { - return 'imagetools' + count++; - }; - var isLocalImage = function (editor, img) { - var url = img.src; - return url.indexOf('data:') === 0 || url.indexOf('blob:') === 0 || new global$4(url).host === editor.documentBaseURI.host; - }; - var isCorsImage = function (editor, img) { - return global$1.inArray(getCorsHosts(editor), new global$4(img.src).host) !== -1; - }; - var isCorsWithCredentialsImage = function (editor, img) { - return global$1.inArray(getCredentialsHosts(editor), new global$4(img.src).host) !== -1; - }; - var defaultFetchImage = function (editor, img) { - if (isCorsImage(editor, img)) { - return getUrl(img.src, null, isCorsWithCredentialsImage(editor, img)); - } - if (!isLocalImage(editor, img)) { - var proxyUrl = getProxyUrl(editor); - var src = proxyUrl + (proxyUrl.indexOf('?') === -1 ? '?' : '&') + 'url=' + encodeURIComponent(img.src); - var apiKey = getApiKey(editor); - return getUrl(src, apiKey, false); - } - return imageToBlob$1(img); - }; - var imageToBlob$2 = function (editor, img) { - return getFetchImage(editor).fold(function () { - return defaultFetchImage(editor, img); - }, function (customFetchImage) { - return customFetchImage(img); - }); - }; - var findBlob = function (editor, img) { - var blobInfo = editor.editorUpload.blobCache.getByUri(img.src); - if (blobInfo) { - return global$3.resolve(blobInfo.blob()); - } - return imageToBlob$2(editor, img); - }; - var startTimedUpload = function (editor, imageUploadTimerState) { - var imageUploadTimer = global$2.setEditorTimeout(editor, function () { - editor.editorUpload.uploadImagesAuto(); - }, getUploadTimeout(editor)); - imageUploadTimerState.set(imageUploadTimer); - }; - var cancelTimedUpload = function (imageUploadTimerState) { - global$2.clearTimeout(imageUploadTimerState.get()); - }; - var updateSelectedImage = function (editor, origBlob, ir, uploadImmediately, imageUploadTimerState, selectedImage, size) { - return ir.toBlob().then(function (blob) { - var uri, name, filename, blobInfo; - var blobCache = editor.editorUpload.blobCache; - uri = selectedImage.src; - var useFilename = origBlob.type === blob.type; - if (shouldReuseFilename(editor)) { - blobInfo = blobCache.getByUri(uri); - if (isNonNullable(blobInfo)) { - uri = blobInfo.uri(); - name = blobInfo.name(); - filename = blobInfo.filename(); - } else { - name = extractFilename(editor, uri, 2); - filename = extractFilename(editor, uri, 1); - } - } - blobInfo = blobCache.create({ - id: createId(), - blob: blob, - base64: ir.toBase64(), - uri: uri, - name: name, - filename: useFilename ? filename : undefined - }); - blobCache.add(blobInfo); - editor.undoManager.transact(function () { - function imageLoadedHandler() { - editor.$(selectedImage).off('load', imageLoadedHandler); - editor.nodeChanged(); - if (uploadImmediately) { - editor.editorUpload.uploadImagesAuto(); - } else { - cancelTimedUpload(imageUploadTimerState); - startTimedUpload(editor, imageUploadTimerState); - } - } - editor.$(selectedImage).on('load', imageLoadedHandler); - if (size) { - editor.$(selectedImage).attr({ - width: size.w, - height: size.h - }); - } - editor.$(selectedImage).attr({ src: blobInfo.blobUri() }).removeAttr('data-mce-src'); - }); - return blobInfo; - }); - }; - var selectedImageOperation = function (editor, imageUploadTimerState, fn, size) { - return function () { - var imgOpt = getSelectedImage(editor); - return imgOpt.fold(function () { - displayError(editor, 'Could not find selected image'); - }, function (img) { - return editor._scanForImages().then(function () { - return findBlob(editor, img.dom); - }).then(function (blob) { - return blobToImageResult(blob).then(fn).then(function (imageResult) { - return updateSelectedImage(editor, blob, imageResult, false, imageUploadTimerState, img.dom, size); - }); - }).catch(function (error) { - displayError(editor, error); - }); - }); - }; - }; - var rotate$2 = function (editor, imageUploadTimerState, angle) { - return function () { - var imgOpt = getSelectedImage(editor); - var flippedSize = imgOpt.fold(function () { - return null; - }, function (img) { - var size = getImageSize(img.dom); - return size ? { - w: size.h, - h: size.w - } : null; - }); - return selectedImageOperation(editor, imageUploadTimerState, function (imageResult) { - return rotate$1(imageResult, angle); - }, flippedSize)(); - }; - }; - var flip$2 = function (editor, imageUploadTimerState, axis) { - return function () { - return selectedImageOperation(editor, imageUploadTimerState, function (imageResult) { - return flip$1(imageResult, axis); - })(); - }; - }; - var handleDialogBlob = function (editor, imageUploadTimerState, img, originalSize, blob) { - return blobToImage$1(blob).then(function (newImage) { - var newSize = getNaturalImageSize(newImage); - if (originalSize.w !== newSize.w || originalSize.h !== newSize.h) { - if (getImageSize(img)) { - setImageSize(img, newSize); - } - } - URL.revokeObjectURL(newImage.src); - return blob; - }).then(blobToImageResult).then(function (imageResult) { - return updateSelectedImage(editor, blob, imageResult, true, imageUploadTimerState, img); - }).catch(function () { - }); - }; - - var saveState = 'save-state'; - var disable = 'disable'; - var enable = 'enable'; - - var createState = function (blob) { - return { - blob: blob, - url: URL.createObjectURL(blob) - }; - }; - var makeOpen = function (editor, imageUploadTimerState) { - return function () { - var getLoadedSpec = function (currentState) { - return { - title: 'Edit Image', - size: 'large', - body: { - type: 'panel', - items: [{ - type: 'imagetools', - name: 'imagetools', - label: 'Edit Image', - currentState: currentState - }] - }, - buttons: [ - { - type: 'cancel', - name: 'cancel', - text: 'Cancel' - }, - { - type: 'submit', - name: 'save', - text: 'Save', - primary: true, - disabled: true - } - ], - onSubmit: function (api) { - var blob = api.getData().imagetools.blob; - originalImgOpt.each(function (originalImg) { - originalSizeOpt.each(function (originalSize) { - handleDialogBlob(editor, imageUploadTimerState, originalImg.dom, originalSize, blob); - }); - }); - api.close(); - }, - onCancel: function () { - }, - onAction: function (api, details) { - switch (details.name) { - case saveState: - if (details.value) { - api.enable('save'); - } else { - api.disable('save'); - } - break; - case disable: - api.disable('save'); - api.disable('cancel'); - break; - case enable: - api.enable('cancel'); - break; - } - } - }; - }; - var originalImgOpt = getSelectedImage(editor); - var originalSizeOpt = originalImgOpt.map(function (origImg) { - return getNaturalImageSize(origImg.dom); - }); - originalImgOpt.each(function (img) { - getEditableImage(editor, img.dom).each(function (_) { - findBlob(editor, img.dom).then(function (blob) { - var state = createState(blob); - editor.windowManager.open(getLoadedSpec(state)); - }); - }); - }); - }; - }; - - var register = function (editor, imageUploadTimerState) { - global$1.each({ - mceImageRotateLeft: rotate$2(editor, imageUploadTimerState, -90), - mceImageRotateRight: rotate$2(editor, imageUploadTimerState, 90), - mceImageFlipVertical: flip$2(editor, imageUploadTimerState, 'v'), - mceImageFlipHorizontal: flip$2(editor, imageUploadTimerState, 'h'), - mceEditImage: makeOpen(editor, imageUploadTimerState) - }, function (fn, cmd) { - editor.addCommand(cmd, fn); - }); - }; - - var setup = function (editor, imageUploadTimerState, lastSelectedImageState) { - editor.on('NodeChange', function (e) { - var lastSelectedImage = lastSelectedImageState.get(); - var selectedImage = getEditableImage(editor, e.element); - if (lastSelectedImage && !selectedImage.exists(function (img) { - return lastSelectedImage.src === img.src; - })) { - cancelTimedUpload(imageUploadTimerState); - editor.editorUpload.uploadImagesAuto(); - lastSelectedImageState.set(null); - } - selectedImage.each(lastSelectedImageState.set); - }); - }; - - var register$1 = function (editor) { - var cmd = function (command) { - return function () { - return editor.execCommand(command); - }; - }; - editor.ui.registry.addButton('rotateleft', { - tooltip: 'Rotate counterclockwise', - icon: 'rotate-left', - onAction: cmd('mceImageRotateLeft') - }); - editor.ui.registry.addButton('rotateright', { - tooltip: 'Rotate clockwise', - icon: 'rotate-right', - onAction: cmd('mceImageRotateRight') - }); - editor.ui.registry.addButton('flipv', { - tooltip: 'Flip vertically', - icon: 'flip-vertically', - onAction: cmd('mceImageFlipVertical') - }); - editor.ui.registry.addButton('fliph', { - tooltip: 'Flip horizontally', - icon: 'flip-horizontally', - onAction: cmd('mceImageFlipHorizontal') - }); - editor.ui.registry.addButton('editimage', { - tooltip: 'Edit image', - icon: 'edit-image', - onAction: cmd('mceEditImage'), - onSetup: function (buttonApi) { - var setDisabled = function () { - var disabled = getSelectedImage(editor).forall(function (element) { - return getEditableImage(editor, element.dom).isNone(); - }); - buttonApi.setDisabled(disabled); - }; - editor.on('NodeChange', setDisabled); - return function () { - editor.off('NodeChange', setDisabled); - }; - } - }); - editor.ui.registry.addButton('imageoptions', { - tooltip: 'Image options', - icon: 'image', - onAction: cmd('mceImage') - }); - editor.ui.registry.addContextMenu('imagetools', { - update: function (element) { - return getEditableImage(editor, element).fold(function () { - return []; - }, function (_) { - return [{ - text: 'Edit image', - icon: 'edit-image', - onAction: cmd('mceEditImage') - }]; - }); - } - }); - }; - - var register$2 = function (editor) { - editor.ui.registry.addContextToolbar('imagetools', { - items: getToolbarItems(editor), - predicate: function (elem) { - return getEditableImage(editor, elem).isSome(); - }, - position: 'node', - scope: 'node' - }); - }; - - function Plugin () { - global.add('imagetools', function (editor) { - var imageUploadTimerState = Cell(0); - var lastSelectedImageState = Cell(null); - register(editor, imageUploadTimerState); - register$1(editor); - register$2(editor); - setup(editor, imageUploadTimerState, lastSelectedImageState); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/imagetools/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/imagetools/plugin.min.js deleted file mode 100644 index 8e4fb2535046f51e858e147941b114f19d36a8f2..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/imagetools/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var t,e,n,r,l=function(t){var e=t;return{get:function(){return e},set:function(t){e=t}}},o=tinymce.util.Tools.resolve("tinymce.PluginManager"),d=tinymce.util.Tools.resolve("tinymce.util.Tools"),i=function(){},u=function(t){return function(){return t}},a=u(!1),c=u(!0),f=function(){return s},s=(t=function(t){return t.isNone()},{fold:function(t,e){return t()},is:a,isSome:a,isNone:c,getOr:n=function(t){return t},getOrThunk:e=function(t){return t()},getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:u(null),getOrUndefined:u(undefined),or:n,orThunk:e,map:f,each:i,bind:f,exists:a,forall:c,filter:f,equals:t,equals_:t,toArray:function(){return[]},toString:u("none()")}),m=function(n){var t=u(n),e=function(){return o},r=function(t){return t(n)},o={fold:function(t,e){return e(n)},is:function(t){return n===t},isSome:c,isNone:a,getOr:t,getOrThunk:t,getOrDie:t,getOrNull:t,getOrUndefined:t,or:e,orThunk:e,map:function(t){return m(t(n))},each:function(t){t(n)},bind:r,exists:r,forall:r,filter:function(t){return t(n)?o:s},toArray:function(){return[n]},toString:function(){return"some("+n+")"},equals:function(t){return t.is(n)},equals_:function(t,e){return t.fold(a,function(t){return e(n,t)})}};return o},g={some:m,none:f,from:function(t){return null===t||t===undefined?s:m(t)}},h=function(t){return!(null===(e=t)||e===undefined);var e},v=(r="function",function(t){return typeof t===r});function p(t,e){return b(document.createElement("canvas"),t,e)}function y(t){var e=p(t.width,t.height);return w(e).drawImage(t,0,0),e}function w(t){return t.getContext("2d")}function b(t,e,n){return t.width=e,t.height=n,t}var I,T,_,R,U=window.Promise?window.Promise:(I=function(t){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],C(t,A(E,this),A(L,this))},T=window,_=I.immediateFn||"function"==typeof T.setImmediate&&T.setImmediate||function(t){setTimeout(t,1)},R=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},I.prototype["catch"]=function(t){return this.then(null,t)},I.prototype.then=function(n,r){var o=this;return new I(function(t,e){x.call(o,new k(n,r,t,e))})},I.all=function(){for(var t=[],e=0;e 0) { - global$4.each(selectorGroups, function (group) { - var menuItem = processSelector(selector, group); - if (menuItem) { - model.addItemToGroup(group.title, menuItem); - } - }); - } else { - var menuItem = processSelector(selector, null); - if (menuItem) { - model.addItem(menuItem); - } - } - } - } - }); - var items = model.toFormats(); - editor.fire('addStyleModifications', { - items: items, - replace: !shouldAppend(editor) - }); - }); - }; - - var get = function (editor) { - var convertSelectorToFormat = function (selectorText) { - return defaultConvertSelectorToFormat(editor, selectorText); - }; - return { convertSelectorToFormat: convertSelectorToFormat }; - }; - - function Plugin () { - global.add('importcss', function (editor) { - setup(editor); - return get(editor); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/importcss/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/importcss/plugin.min.js deleted file mode 100644 index 1c9dab9316c12688ee69b954a7354df5d3965341..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/importcss/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var n,t=tinymce.util.Tools.resolve("tinymce.PluginManager"),v=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),f=tinymce.util.Tools.resolve("tinymce.EditorManager"),m=tinymce.util.Tools.resolve("tinymce.Env"),h=tinymce.util.Tools.resolve("tinymce.util.Tools"),d=function(t){return t.getParam("importcss_selector_converter")},o=(n="array",function(t){return r=typeof(e=t),(null===e?"null":"object"==r&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"==r&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":r)===n;var e,r}),i=Array.prototype.push,l=function(t,e){return function(t){for(var e=[],r=0,n=t.length;r'); - - var stateSelectorAdapter = function (editor, selector) { - return function (buttonApi) { - return editor.selection.selectorChangedWithUnbind(selector.join(','), buttonApi.setActive).unbind; - }; - }; - - editor.ui.registry.addToggleButton('indent2em', { - icon: 'indent2em', - tooltip: pluginName, - onAction: function () { - doAct(); - }, - onSetup: stateSelectorAdapter(editor, [ - '*[style*="text-indent"]', - '*[data-mce-style*="text-indent"]', - ]) - }); - - editor.ui.registry.addMenuItem('indent2em', { - text: pluginName, - onAction: function() { - doAct(); - } - }); - - editor.addCommand('indent2em', doAct ); - - return { - getMetadata: function () { - return { - name: pluginName, - url: "http://tinymce.ax-z.cn/more-plugins/indent2em.php", - }; - } - }; -}); diff --git a/component/pear/module/tinymce/tinymce/plugins/indent2em/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/indent2em/plugin.min.js deleted file mode 100644 index b9d8382587e2851bef1a0ef0ae2866ae5b779011..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/indent2em/plugin.min.js +++ /dev/null @@ -1,62 +0,0 @@ -tinymce.PluginManager.add('indent2em', function(editor, url) { - var pluginName='首行缩进'; - var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools'); - var indent2em_val = editor.getParam('indent2em_val', '2em'); - var doAct = function () { - var dom = editor.dom; - var blocks = editor.selection.getSelectedBlocks(); - var act = ''; - global$1.each(blocks, function (block) { - if(act==''){ - act = dom.getStyle(block,'text-indent')==indent2em_val ? 'remove' : 'add'; - } - if( act=='add' ){ - dom.setStyle(block, 'text-indent', indent2em_val); - }else{ - var style=dom.getAttrib(block,'style'); - var reg = new RegExp('text-indent:[\\s]*' + indent2em_val + ';', 'ig'); - style = style.replace(reg, ''); - dom.setAttrib(block,'style',style); - } - - }); - }; - - editor.ui.registry.getAll().icons.indent2em || editor.ui.registry.addIcon('indent2em',''); - - var stateSelectorAdapter = function (editor, selector) { - return function (buttonApi) { - return editor.selection.selectorChangedWithUnbind(selector.join(','), buttonApi.setActive).unbind; - }; - }; - - editor.ui.registry.addToggleButton('indent2em', { - icon: 'indent2em', - tooltip: pluginName, - onAction: function () { - doAct(); - }, - onSetup: stateSelectorAdapter(editor, [ - '*[style*="text-indent"]', - '*[data-mce-style*="text-indent"]', - ]) - }); - - editor.ui.registry.addMenuItem('indent2em', { - text: pluginName, - onAction: function() { - doAct(); - } - }); - - editor.addCommand('indent2em', doAct ); - - return { - getMetadata: function () { - return { - name: pluginName, - url: "http://tinymce.ax-z.cn/more-plugins/indent2em.php", - }; - } - }; -}); diff --git a/component/pear/module/tinymce/tinymce/plugins/insertdatetime/plugin.js b/component/pear/module/tinymce/tinymce/plugins/insertdatetime/plugin.js deleted file mode 100644 index b8ae4bc4921ff4803eb76abb2906540b0d4b3cdd..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/insertdatetime/plugin.js +++ /dev/null @@ -1,177 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -(function () { - 'use strict'; - - var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); - - var getDateFormat = function (editor) { - return editor.getParam('insertdatetime_dateformat', editor.translate('%Y-%m-%d')); - }; - var getTimeFormat = function (editor) { - return editor.getParam('insertdatetime_timeformat', editor.translate('%H:%M:%S')); - }; - var getFormats = function (editor) { - return editor.getParam('insertdatetime_formats', [ - '%H:%M:%S', - '%Y-%m-%d', - '%I:%M:%S %p', - '%D' - ]); - }; - var getDefaultDateTime = function (editor) { - var formats = getFormats(editor); - return formats.length > 0 ? formats[0] : getTimeFormat(editor); - }; - var shouldInsertTimeElement = function (editor) { - return editor.getParam('insertdatetime_element', false); - }; - - var daysShort = 'Sun Mon Tue Wed Thu Fri Sat Sun'.split(' '); - var daysLong = 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' '); - var monthsShort = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' '); - var monthsLong = 'January February March April May June July August September October November December'.split(' '); - var addZeros = function (value, len) { - value = '' + value; - if (value.length < len) { - for (var i = 0; i < len - value.length; i++) { - value = '0' + value; - } - } - return value; - }; - var getDateTime = function (editor, fmt, date) { - date = date || new Date(); - fmt = fmt.replace('%D', '%m/%d/%Y'); - fmt = fmt.replace('%r', '%I:%M:%S %p'); - fmt = fmt.replace('%Y', '' + date.getFullYear()); - fmt = fmt.replace('%y', '' + date.getYear()); - fmt = fmt.replace('%m', addZeros(date.getMonth() + 1, 2)); - fmt = fmt.replace('%d', addZeros(date.getDate(), 2)); - fmt = fmt.replace('%H', '' + addZeros(date.getHours(), 2)); - fmt = fmt.replace('%M', '' + addZeros(date.getMinutes(), 2)); - fmt = fmt.replace('%S', '' + addZeros(date.getSeconds(), 2)); - fmt = fmt.replace('%I', '' + ((date.getHours() + 11) % 12 + 1)); - fmt = fmt.replace('%p', '' + (date.getHours() < 12 ? 'AM' : 'PM')); - fmt = fmt.replace('%B', '' + editor.translate(monthsLong[date.getMonth()])); - fmt = fmt.replace('%b', '' + editor.translate(monthsShort[date.getMonth()])); - fmt = fmt.replace('%A', '' + editor.translate(daysLong[date.getDay()])); - fmt = fmt.replace('%a', '' + editor.translate(daysShort[date.getDay()])); - fmt = fmt.replace('%%', '%'); - return fmt; - }; - var updateElement = function (editor, timeElm, computerTime, userTime) { - var newTimeElm = editor.dom.create('time', { datetime: computerTime }, userTime); - timeElm.parentNode.insertBefore(newTimeElm, timeElm); - editor.dom.remove(timeElm); - editor.selection.select(newTimeElm, true); - editor.selection.collapse(false); - }; - var insertDateTime = function (editor, format) { - if (shouldInsertTimeElement(editor)) { - var userTime = getDateTime(editor, format); - var computerTime = void 0; - if (/%[HMSIp]/.test(format)) { - computerTime = getDateTime(editor, '%Y-%m-%dT%H:%M'); - } else { - computerTime = getDateTime(editor, '%Y-%m-%d'); - } - var timeElm = editor.dom.getParent(editor.selection.getStart(), 'time'); - if (timeElm) { - updateElement(editor, timeElm, computerTime, userTime); - } else { - editor.insertContent(''); - } - } else { - editor.insertContent(getDateTime(editor, format)); - } - }; - - var register = function (editor) { - editor.addCommand('mceInsertDate', function () { - insertDateTime(editor, getDateFormat(editor)); - }); - editor.addCommand('mceInsertTime', function () { - insertDateTime(editor, getTimeFormat(editor)); - }); - }; - - var Cell = function (initial) { - var value = initial; - var get = function () { - return value; - }; - var set = function (v) { - value = v; - }; - return { - get: get, - set: set - }; - }; - - var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools'); - - var register$1 = function (editor) { - var formats = getFormats(editor); - var defaultFormat = Cell(getDefaultDateTime(editor)); - editor.ui.registry.addSplitButton('insertdatetime', { - icon: 'insert-time', - tooltip: 'Insert date/time', - select: function (value) { - return value === defaultFormat.get(); - }, - fetch: function (done) { - done(global$1.map(formats, function (format) { - return { - type: 'choiceitem', - text: getDateTime(editor, format), - value: format - }; - })); - }, - onAction: function (_api) { - insertDateTime(editor, defaultFormat.get()); - }, - onItemAction: function (_api, value) { - defaultFormat.set(value); - insertDateTime(editor, value); - } - }); - var makeMenuItemHandler = function (format) { - return function () { - defaultFormat.set(format); - insertDateTime(editor, format); - }; - }; - editor.ui.registry.addNestedMenuItem('insertdatetime', { - icon: 'insert-time', - text: 'Date/time', - getSubmenuItems: function () { - return global$1.map(formats, function (format) { - return { - type: 'menuitem', - text: getDateTime(editor, format), - onAction: makeMenuItemHandler(format) - }; - }); - } - }); - }; - - function Plugin () { - global.add('insertdatetime', function (editor) { - register(editor); - register$1(editor); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/insertdatetime/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/insertdatetime/plugin.min.js deleted file mode 100644 index 478f4a309121936e8bb3a3e53cb4d10c69d37fa7..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/insertdatetime/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=function(e){return e.getParam("insertdatetime_timeformat",e.translate("%H:%M:%S"))},c=function(e){return e.getParam("insertdatetime_formats",["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"])},r="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),a="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),i="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),o="January February March April May June July August September October November December".split(" "),m=function(e,t){if((e=""+e).length'+n+"")):e.insertContent(s(e,t))},t=function(t){t.addCommand("mceInsertDate",function(){var e;l(t,(e=t).getParam("insertdatetime_dateformat",e.translate("%Y-%m-%d")))}),t.addCommand("mceInsertTime",function(){l(t,u(t))})},d=tinymce.util.Tools.resolve("tinymce.util.Tools"),n=function(n){var e,t,r,a,i=c(n),o=(a=c(r=n),e=0 - - \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityFormula.html b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityFormula.html deleted file mode 100644 index f5f25b560a4d076027a07be06152f9fab3c156a6..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityFormula.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - -
                -
                - sorry! Beta版本仅支持IE9及以上版本的浏览器,正式版本将会支持低版本浏览器,谢谢您的关注! -
                -
                - - - - - - - - - \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bar-bg.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bar-bg.png deleted file mode 100644 index 9dedcc678245832448f459c712e72039d36a2d03..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bar-bg.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bar.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bar.png deleted file mode 100644 index f98ded737e1ec99b2daf3b72dd53012f84a6439d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bar.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bg.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bg.png deleted file mode 100644 index 214744181ce35a8679e439448df4467814013368..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bg.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bottom.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bottom.png deleted file mode 100644 index e3df3d1c4a4291c9f812ac4a35ad4592e1cc671e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bottom.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/btn.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/btn.png deleted file mode 100644 index 31c0b52f0662a08b3265963960c222f5e72ddda5..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/btn.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/down.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/down.png deleted file mode 100644 index 31c0b52f0662a08b3265963960c222f5e72ddda5..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/down.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/top.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/top.png deleted file mode 100644 index ecda0704e84186b1f8088cc3a81f0050780b663f..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/top.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/up.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/up.png deleted file mode 100644 index 31c0b52f0662a08b3265963960c222f5e72ddda5..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/up.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-bg.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-bg.png deleted file mode 100644 index 4f9db6bee66f6ae920fbb433cc772c840a723437..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-bg.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-left.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-left.png deleted file mode 100644 index 2f8c46ee09d0ff24cf64b524f9ad08792278bfa1..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-left.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-right.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-right.png deleted file mode 100644 index 9772c54a68519446ef3c4a307c7c6477f390086c..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-right.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-bg.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-bg.png deleted file mode 100644 index 450faa2763dc0392583e797081f2ddb2be0c94c3..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-bg.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-left.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-left.png deleted file mode 100644 index 01b9255a2b102faaf4f70ff8a54aad65b71bcfae..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-left.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-right.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-right.png deleted file mode 100644 index f74673a3a57b3b421d8c0310a992e3f73e804980..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-right.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/aleph.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/aleph.png deleted file mode 100644 index fa895d86ab81cf79137307c0eeadbedc1d9ba68c..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/aleph.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/bbbk.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/bbbk.png deleted file mode 100644 index a793366065a08f1d8e1e50ff1f2a7b20e3e8d94f..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/bbbk.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/beth.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/beth.png deleted file mode 100644 index c8cb723c1e99bf47ec8a70199d56edb36971323d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/beth.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/circleds.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/circleds.png deleted file mode 100644 index 7f455e85c607d3634d43780d2c1ef6f6789364f9..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/circleds.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/complement.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/complement.png deleted file mode 100644 index f128598ff8f0639f3822e65341c95d85c8f5dd9e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/complement.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/daleth.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/daleth.png deleted file mode 100644 index ac705c36d25fcf682b8c89de7e79535b0d49978b..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/daleth.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/ell.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/ell.png deleted file mode 100644 index ccc6ee32611d8493acdfe134a360c176a6de43be..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/ell.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/eth.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/eth.png deleted file mode 100644 index 501dbb12992d6d920f7c99a497cb833d3b23eaa7..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/eth.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/finv.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/finv.png deleted file mode 100644 index a838bc049826494997d266f6417389f4a697dcfb..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/finv.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/game.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/game.png deleted file mode 100644 index c0a5edcdb84ada370a68a3699306b9627d7c0df6..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/game.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/gimel.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/gimel.png deleted file mode 100644 index e4fd84081e800c0d18b57e4efe8b2b0fa8aa7094..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/gimel.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/hbar.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/hbar.png deleted file mode 100644 index 8809ef3681740ad6cba9eaf95f4746247111061c..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/hbar.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/hslash.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/hslash.png deleted file mode 100644 index a1e4e681936236c08d3dab451778423e36b5f1c4..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/hslash.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/im.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/im.png deleted file mode 100644 index 201ec05e4bb3069cfc4cfb6853f389e5bb63bdbe..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/im.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/mho.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/mho.png deleted file mode 100644 index 291f75054e0feea3b0bdb119589c534eca78aec0..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/mho.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/partial.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/partial.png deleted file mode 100644 index f3b46a06892fd6ca547725867240e12702685e63..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/partial.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/re.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/re.png deleted file mode 100644 index 9c96096c5e0246b5dc274ebc7f01ab69c1422be1..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/re.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/wp.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/wp.png deleted file mode 100644 index 23f6541296fc04941c3eb652a55349b9b7cd8a70..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/wp.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/circlearrowleft.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/circlearrowleft.png deleted file mode 100644 index 26a9213f79e6eb81dd4cf505f602d9e839ff835b..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/circlearrowleft.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/circlearrowright.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/circlearrowright.png deleted file mode 100644 index d29116286697f520bbbecf48c4710b0ef7a81164..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/circlearrowright.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/curvearrowleft.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/curvearrowleft.png deleted file mode 100644 index 3cc06b90832d9ed31ee65827e1f8ff1a56a7ed4a..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/curvearrowleft.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/curvearrowright.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/curvearrowright.png deleted file mode 100644 index 265e1e018eba5388b2fce042a9b5ae1b271b7d9e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/curvearrowright.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downarrow.png deleted file mode 100644 index 1b5c375b66c0c741fbe0ed352e8a954f28c352f1..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downdownarrows.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downdownarrows.png deleted file mode 100644 index 457598cdfa6d802453d64fe782bd0d52ec574524..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downdownarrows.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downharpoonleft.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downharpoonleft.png deleted file mode 100644 index f1de8a25bcc216fa1f6ad507e3ec99e304071537..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downharpoonleft.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downharpoonright.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downharpoonright.png deleted file mode 100644 index b94a0b8643e221b70bf529188b36e5df8afd79be..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downharpoonright.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/gets.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/gets.png deleted file mode 100644 index 8d659f01a2c3ecc6e43c8a15337b137d15785a00..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/gets.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftarrowtail.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftarrowtail.png deleted file mode 100644 index d36a75aaa41615c556991242053ac2fdcb60086f..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftarrowtail.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftharpoondown.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftharpoondown.png deleted file mode 100644 index 882f6e0307b8a657fbe3881d8487da76471ef3b7..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftharpoondown.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftharpoonup.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftharpoonup.png deleted file mode 100644 index d9fd9f2d0636c9af03a1c431494c0e13c2283411..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftharpoonup.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftleftarrows.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftleftarrows.png deleted file mode 100644 index f4cd7c07b31aee31c45fe8438fdcea03acb4c3ed..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftleftarrows.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightarrow.png deleted file mode 100644 index 4d8d86b40de8628cb7e90267bc2d6a2c529edab7..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightarrows.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightarrows.png deleted file mode 100644 index 6f0717c7237f5b2bec9a988fbfb65d0e326b2586..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightarrows.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightharpoons.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightharpoons.png deleted file mode 100644 index 10a057fd01d2a79f6b691eabe4126aeeac1bd24a..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightharpoons.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightsquigarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightsquigarrow.png deleted file mode 100644 index d515001e032b759a11508f71ca4c26085d3e2ac3..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightsquigarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longleftarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longleftarrow.png deleted file mode 100644 index ab5a64e957fec6d9d670341d2304f1c468d9b766..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longleftarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longleftrightarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longleftrightarrow.png deleted file mode 100644 index fe3141daa36519f3ffeec6c0adb5b1e11997cc2e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longleftrightarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longrightarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longrightarrow.png deleted file mode 100644 index ec988e1dfdb85a9d4fbcd926301d305a6f431d43..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longrightarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/looparrowleft.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/looparrowleft.png deleted file mode 100644 index a4dee7a11c8ba76a032b0480645e8d5948e0a346..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/looparrowleft.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/looparrowright.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/looparrowright.png deleted file mode 100644 index 67885fb9851c3963d4235fbb5c73ee510078843e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/looparrowright.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/multimap.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/multimap.png deleted file mode 100644 index c7a0bb8acf9fd2ddd635b1fe25894f80cb369d41..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/multimap.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nearrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nearrow.png deleted file mode 100644 index d5891e0d994071f14b583737d60013e4f2777e0c..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nearrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nleftarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nleftarrow.png deleted file mode 100644 index df714e174f027fa32dd9eefda881425fda6fc707..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nleftarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nrightarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nrightarrow.png deleted file mode 100644 index b29d923b4ade77c41efefd6922a9355a89b6c4f6..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nrightarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nwarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nwarrow.png deleted file mode 100644 index bf7b7d23d8897a32cec3900c15a438c4a85ced3b..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nwarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightarrowtail.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightarrowtail.png deleted file mode 100644 index 27cdc5bf6850ee18e46d9717e72d5e82ba6d21b2..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightarrowtail.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightharpoondown.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightharpoondown.png deleted file mode 100644 index e384cf845a1a22e8d2297cc59074f3fd7091f31f..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightharpoondown.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightharpoonup.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightharpoonup.png deleted file mode 100644 index 187e1eb24d08e9fdcf342cc78cd033850ce7741a..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightharpoonup.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightleftarrows.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightleftarrows.png deleted file mode 100644 index cdec5d9e416f3e0e851b00cefcd52a767e51e9b8..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightleftarrows.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightleftharpoons.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightleftharpoons.png deleted file mode 100644 index 73385cbbc4c92635d026d5a9125752ee508c2d66..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightleftharpoons.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightrightarrows.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightrightarrows.png deleted file mode 100644 index 52a7f0f0f1769315be59ac067bd19238f51e4431..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightrightarrows.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightsquigarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightsquigarrow.png deleted file mode 100644 index f471054f45716f22ed94250302c27b14d2c2f3f1..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightsquigarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/searrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/searrow.png deleted file mode 100644 index 7d887fb787e144b0d3db54d5e63d2c5f50733961..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/searrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/swarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/swarrow.png deleted file mode 100644 index 448b686517a2fb7fa1c6609c7bc43041e10ffc59..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/swarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/to.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/to.png deleted file mode 100644 index 0053655d6189dce30b9d45e78bd37680f8562d4e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/to.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/twoheadleftarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/twoheadleftarrow.png deleted file mode 100644 index 17bcb5495654a163529f8e598d950b3e52032cda..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/twoheadleftarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/twoheadrightarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/twoheadrightarrow.png deleted file mode 100644 index 9242bc210394005cb0fe00eedc55db71bc428cbe..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/twoheadrightarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-downarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-downarrow.png deleted file mode 100644 index b2264cbfb669bc614780abe35eb65829ba425b92..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-downarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-leftarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-leftarrow.png deleted file mode 100644 index 84bf7a58fb6cc1cc6f59a0827af43366679da6f7..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-leftarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-leftrightarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-leftrightarrow.png deleted file mode 100644 index 288dcc11f9b080ae207cc642d315848fb0e14d9e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-leftrightarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-lftarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-lftarrow.png deleted file mode 100644 index 8ecff745b8aab6129ddabd489df0de188a4271c4..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-lftarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-lleftarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-lleftarrow.png deleted file mode 100644 index 6bed12114c738d03186804fb5a466c7e6d4ffb67..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-lleftarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-longleftarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-longleftarrow.png deleted file mode 100644 index 1cdf790c4c7db1e59dc59b0764293b86d6c5d0cd..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-longleftarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-longleftrightarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-longleftrightarrow.png deleted file mode 100644 index def0c9ee946544160a53d1c1e7984b11d7f6fa3b..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-longleftrightarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-longrightarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-longrightarrow.png deleted file mode 100644 index c21e68ce4b92ad1f166e694a9f172c4ae8517ad9..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-longrightarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-lsh.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-lsh.png deleted file mode 100644 index 1f617890d2c94223581a9ad9e70457c42235ce68..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-lsh.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-nleftarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-nleftarrow.png deleted file mode 100644 index 07657c0f378bdf9fe9b282e035d94323d66ab8ce..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-nleftarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-nleftrightarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-nleftrightarrow.png deleted file mode 100644 index daf4e65b22b699befa850064fcfce8aeda24aee9..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-nleftrightarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-nrightarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-nrightarrow.png deleted file mode 100644 index 902826c0bd0090b49cc1792b3185e315d27e0c7c..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-nrightarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-rightarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-rightarrow.png deleted file mode 100644 index 39bc77715838468777d2b722ca21bc664848832f..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-rightarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-rrightarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-rrightarrow.png deleted file mode 100644 index 7aed67df499ddf7aae2fc1e4a47eca71b7ff0a1e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-rrightarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-rsh.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-rsh.png deleted file mode 100644 index 05e8974d689ec6b008136cc9ad3d43c6309be6d0..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-rsh.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-uparrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-uparrow.png deleted file mode 100644 index e539f6517c5518046effd7267c2912b3faf608fe..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-uparrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-updownarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-updownarrow.png deleted file mode 100644 index 4aa9faa2793f21f080054d1849dc7574deda8119..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-updownarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/uparrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/uparrow.png deleted file mode 100644 index aa8f571aed79db6f7609092ff43a3117d91d4f45..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/uparrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/updownarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/updownarrow.png deleted file mode 100644 index 2235860bb71ee75eb2166239c686a50ab9f0abe4..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/updownarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upharpoonleft.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upharpoonleft.png deleted file mode 100644 index 72d093d219db4183e4f06a8ac1ff25b5476f00a8..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upharpoonleft.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upharpoonright.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upharpoonright.png deleted file mode 100644 index 76c7335543e8cbc93d1e41d6c4ea90941c510d07..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upharpoonright.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upuparrows.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upuparrows.png deleted file mode 100644 index 129a3383587a640f46949c70667330b9abfc7c52..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upuparrows.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/1.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/1.png deleted file mode 100644 index 3b1ed2604fd80a290eb50c70dd88ab817998ba27..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/1.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/2.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/2.png deleted file mode 100644 index 07cf41b7a0c64153f42702045dac32007b435d3e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/2.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/3.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/3.png deleted file mode 100644 index 8abe1967dd22b51f7d729b9bca875f27b29be623..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/3.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/4.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/4.png deleted file mode 100644 index 31ad7f74479356eabf76a76e8bb97454a87d3834..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/4.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/btn.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/btn.png deleted file mode 100644 index 77d7c10b296c249d3d557fc6a29a5221b4173d9a..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/btn.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/brackets.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/brackets.png deleted file mode 100644 index b05c1ca3d45749e57e57dd786989f3e37b3ba8ce..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/brackets.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/down.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/down.png deleted file mode 100644 index 00a8a3ab0c9dd89b1d6228c27709a09955e4bedb..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/down.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/frac.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/frac.png deleted file mode 100644 index 104818284c7626883b9ecec14fc55cf4308c5916..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/frac.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/fx.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/fx.png deleted file mode 100644 index 2482b867f306766d743cfd68e698692ac36fcc1b..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/fx.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/int.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/int.png deleted file mode 100644 index baafcaa48d1b86a83698d37ea534e95b9c11ccce..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/int.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/lim.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/lim.png deleted file mode 100644 index 4547302d62d33498160d342759158c324fe1b37c..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/lim.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/open.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/open.png deleted file mode 100644 index 24026c9babf871c94d4a6382bf45787b942ebd12..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/open.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/script.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/script.png deleted file mode 100644 index e29e594005eca1fc12b32117e9da1e6d277f8f7c..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/script.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/sin.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/sin.png deleted file mode 100644 index e5b8295752eb2fd13f19d4f576b9c83ac3dc0f4d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/sin.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/sqrt.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/sqrt.png deleted file mode 100644 index 782a0daaf169f6983552d82fbe6215c45dc7866e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/sqrt.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/sum.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/sum.png deleted file mode 100644 index 8c663e2bc0b315ae98a5892227b9bd27c4a393a9..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/sum.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/tick.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/tick.png deleted file mode 100644 index 6e874f43bfe31eb8b342b26aef70d25f08a33404..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/tick.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/up.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/up.png deleted file mode 100644 index 6eabcad30a9da3cf55745b7ffccd68203be26105..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/up.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char.png deleted file mode 100644 index 4eef3c380b0f322363f83f032d27ff8367f54a71..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/a.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/a.png deleted file mode 100644 index 1fc074ebd4a0099359ec951ad1cb485eca93ef8e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/a.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/b.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/b.png deleted file mode 100644 index cc75c7d20cc48c337e251efffd52093c306f721b..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/b.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/c.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/c.png deleted file mode 100644 index b407a1b2873f2d0cf871c0e2ec6285638e107907..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/c.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/d.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/d.png deleted file mode 100644 index 66e23a897c4a97b2da18e9c2db42d91b51ec0ce3..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/d.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/e.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/e.png deleted file mode 100644 index 0ef98d17dae047821e027d2e282daf0e042a861d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/e.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/f.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/f.png deleted file mode 100644 index e0f76fc95c9bef8111333e5973497f492d23bdd6..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/f.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/g.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/g.png deleted file mode 100644 index bbf855fd3bb8a87c3856ef1288cc408c467314d6..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/g.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/h.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/h.png deleted file mode 100644 index 0347c9327748445a525e29c28e8a6698f30bcee9..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/h.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/i.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/i.png deleted file mode 100644 index cfb5814f9dbb7f3899168e5c54dfbbbbeab42d65..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/i.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/j.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/j.png deleted file mode 100644 index c9ad651dd102a424bfe686e6c5eeedde9b72d871..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/j.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/k.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/k.png deleted file mode 100644 index 032f29d812212e649f5a830f51e0b7d81fd90e6d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/k.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/l.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/l.png deleted file mode 100644 index 72015ab4143687e0e4434d81ba4ea3b25e7dcc94..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/l.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/m.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/m.png deleted file mode 100644 index d9c072c81af28d766fd33f93a08bf27c0af82f77..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/m.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/n.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/n.png deleted file mode 100644 index a39869801dd4c129abac0fe9e3044f046103acf9..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/n.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/o.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/o.png deleted file mode 100644 index 9acb05bca0176f38e7d5c05289467fc080e64f98..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/o.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/p.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/p.png deleted file mode 100644 index 8c11f94f87e425abae2a4e8be63b2e5372b530c8..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/p.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/q.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/q.png deleted file mode 100644 index e47c32ea6b18aa30d7b9285a958a28dcb5bdb234..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/q.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/r.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/r.png deleted file mode 100644 index 44ae3c0d6484ff0336f451432bd3a86bc819ed40..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/r.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/s.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/s.png deleted file mode 100644 index 93dd1c61d6ac04beca23465cf78704952acf934f..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/s.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/t.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/t.png deleted file mode 100644 index c359ccd2717878d307dc9f28b9f42a92dd293680..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/t.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/u.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/u.png deleted file mode 100644 index c5b6158764cb8ea6a945f7070168e088c40f153d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/u.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/v.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/v.png deleted file mode 100644 index 2bba8a820679c3ea7416e32326b42b0d35980257..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/v.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/w.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/w.png deleted file mode 100644 index 82518bb6ae0db6619a0c750c69741fb775fdee2a..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/w.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/x.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/x.png deleted file mode 100644 index 58bb03c3431bdd878a0ab1046675c9d034864ebc..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/x.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/y.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/y.png deleted file mode 100644 index 7b1ecf62a2ea93f55a5b60180258324b5b9e1b5f..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/y.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/z.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/z.png deleted file mode 100644 index d8ad9de74b774ab71dd0721fb7be2f203019ea31..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/z.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/a.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/a.png deleted file mode 100644 index bbbc10267ecf51ec4f06128c516b65cd9d887fe5..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/a.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/b.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/b.png deleted file mode 100644 index 1f2d08ac31c91b8c8f480920fd8fe6eb1c54e709..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/b.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/c.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/c.png deleted file mode 100644 index 21c7817937be4194eb1cf59379c7c1103ba347bb..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/c.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/d.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/d.png deleted file mode 100644 index b6cd5a38fb8db6ffaaf83d60e919c17b509bc190..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/d.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/e.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/e.png deleted file mode 100644 index 5b6d59db9cbfcbfcf2e31a21b214a54a357445e3..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/e.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/f.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/f.png deleted file mode 100644 index 28a6cffc0febaf5fd4e7a82b7abb382242902dca..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/f.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/g.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/g.png deleted file mode 100644 index a8f1999bdd520beec47c4aa1e5d9b06e4641ad8a..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/g.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/h.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/h.png deleted file mode 100644 index 8592859be72c6614e3c1712b4b6dcdb784774139..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/h.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/i.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/i.png deleted file mode 100644 index a149116cbd55f5ad964efc2d6aab15facc6967ba..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/i.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/j.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/j.png deleted file mode 100644 index cf94ff276a68cbaedf599779e91267d3e4780547..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/j.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/k.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/k.png deleted file mode 100644 index 35b3656538e97e81fb3cc14c9e074af7a5742a5a..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/k.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/l.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/l.png deleted file mode 100644 index 058d85db7d17728e115ee7288ca4be1d7a3c0c21..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/l.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/m.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/m.png deleted file mode 100644 index 08eccac594fe14fe65d7acb9fe63d5d9768ad626..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/m.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/n.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/n.png deleted file mode 100644 index f8c62c3ba1edaa30681f8cac0418e10156134a30..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/n.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/o.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/o.png deleted file mode 100644 index a6568588bc3bbbc1fce0a8fb0be937f6745ca252..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/o.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/p.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/p.png deleted file mode 100644 index fc24a272aa555adf2dcf027c43951fa314447876..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/p.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/q.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/q.png deleted file mode 100644 index 44ebb8de0dd2921149e440d6ab387fbc5b272093..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/q.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/r.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/r.png deleted file mode 100644 index be3017a4a29fdcc6487596b1e22941f08da6e039..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/r.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/s.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/s.png deleted file mode 100644 index 3942b715626334385c37dd00a9a72a466d33a71e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/s.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/t.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/t.png deleted file mode 100644 index 5d41fd071db99a0232ea1054c18afda2274ab9ed..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/t.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/u.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/u.png deleted file mode 100644 index 8ebf4439dbdf74c3ef30326542cc124b71cc0299..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/u.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/v.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/v.png deleted file mode 100644 index 2c51c10dfa13fca1efc357fb580242dcd2710820..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/v.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/w.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/w.png deleted file mode 100644 index 33ef1d5ba0ecab821e74c787481d80fcebfb5df7..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/w.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/x.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/x.png deleted file mode 100644 index fc7dd0b79ea122973e7b93d7165a51e5187e5444..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/x.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/y.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/y.png deleted file mode 100644 index 6670417a7b73caadb525e084ca2ae229364529fb..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/y.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/z.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/z.png deleted file mode 100644 index 2489eda0e59883c60371ad2540319227c3d509e9..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/z.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/a.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/a.png deleted file mode 100644 index e8a6950a011de8bed9b29907242982b6529a26bd..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/a.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/b.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/b.png deleted file mode 100644 index 5bc50aae08765dc121272b26a13ecc81308f0a44..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/b.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/c.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/c.png deleted file mode 100644 index e0417c53e7b25ceec69b85978b9d0101db7e512a..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/c.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/d.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/d.png deleted file mode 100644 index a267b36f09f3e6c909e071a0cf3f2c342626adb5..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/d.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/e.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/e.png deleted file mode 100644 index be71bf646121f468a6d5bd4b406be5af33d9bd8a..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/e.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/f.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/f.png deleted file mode 100644 index 2c170114f02e55bf06e6e8f08c5d74578c961aef..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/f.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/g.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/g.png deleted file mode 100644 index d05843d601fd4bcfa5e37c9c3a86cfccedf5e640..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/g.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/h.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/h.png deleted file mode 100644 index 41d958e53c772d9fff56fd14e053d559d3027f8d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/h.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/i.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/i.png deleted file mode 100644 index 1e9bd348a4c199913a67c4a1081c61a42591c12b..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/i.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/j.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/j.png deleted file mode 100644 index fc66b892b3fd754a8afcb4a3257a4f7a982de5cc..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/j.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/k.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/k.png deleted file mode 100644 index 49dbc27324937a64387bca7d9b7e093fd91faac0..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/k.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/l.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/l.png deleted file mode 100644 index 8e23844bd2d6ffcb64423967ffbd83b1959c9e38..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/l.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/m.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/m.png deleted file mode 100644 index f5a79ce813b0201e6d0d42c8f5f95f54cb233065..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/m.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/n.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/n.png deleted file mode 100644 index e9b7491a7bd9b8187349d4e03009094b6a941a73..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/n.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/o.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/o.png deleted file mode 100644 index f386683e561d8ac0d040377c8b1202885217a541..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/o.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/p.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/p.png deleted file mode 100644 index 334a11890098e231dbe0f3f9177f05d084a231a0..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/p.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/q.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/q.png deleted file mode 100644 index 205df6aa1f8e3dec251846aa059302cd22e353bb..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/q.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/r.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/r.png deleted file mode 100644 index fc8bc8b0ae880e53cfe630bc7e2ccfd49d80129a..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/r.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/s.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/s.png deleted file mode 100644 index bd6c50c094f3539b1a895fe0d07706d20fab5f25..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/s.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/t.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/t.png deleted file mode 100644 index 76de18523f78d27246445583f39c8aef36342770..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/t.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/u.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/u.png deleted file mode 100644 index 8c1dfbcf105e9f02883f4d6a0f9a286af94a0fbf..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/u.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ua.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ua.png deleted file mode 100644 index cc049efe2a4f36ffb323bb03540b0987ac409e90..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ua.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ub.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ub.png deleted file mode 100644 index 841e8cc19703f08479e5897f3d0129f7312f0db0..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ub.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uc.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uc.png deleted file mode 100644 index f15063d45aaf4fe710097b2fa36bd19e6631da92..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uc.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ud.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ud.png deleted file mode 100644 index 8671415ea5d457b8788e00e5eb19d5b50416ead5..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ud.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ue.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ue.png deleted file mode 100644 index 69b1f086851cfdf496a42485fd301fa1e05a1599..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ue.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uf.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uf.png deleted file mode 100644 index 9fd1e6a1f73ad2c54f5e4f9c399f48732dc3052e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uf.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ug.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ug.png deleted file mode 100644 index 3fc5ede03722c1e920df918ce88c83f06371a38a..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ug.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uh.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uh.png deleted file mode 100644 index 45e18a9a41382a6e6fdec8cf200822da78e6d809..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uh.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ui.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ui.png deleted file mode 100644 index 6e9a03a702e4947c62449f691beb54825722bf48..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ui.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uj.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uj.png deleted file mode 100644 index 855aaa921d0986ea68c25a0284e044f6521bfcc9..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uj.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uk.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uk.png deleted file mode 100644 index adb3b00ae8019b75416edd3e0f2028ec1cf1f47d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uk.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ul.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ul.png deleted file mode 100644 index 9f138ee71d6febb585fc3233651a826de42a1c6c..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ul.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/um.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/um.png deleted file mode 100644 index 64d7bd4607f03b4ef9576f58a27fea89c4bebe90..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/um.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/un.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/un.png deleted file mode 100644 index 37c4bfd665a5014d1e2e440d1ef60686805abe21..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/un.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uo.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uo.png deleted file mode 100644 index 0340b6d03416fa966c0b2e8970395e09e140558d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uo.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/up.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/up.png deleted file mode 100644 index f5a1d38d7583f7516237fe38ebb33ecf0a919c43..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/up.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uq.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uq.png deleted file mode 100644 index bfb7f505109971e0bd98e5fcdc2f59c943f658d4..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uq.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ur.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ur.png deleted file mode 100644 index 959804cd94498599d5e680a83343f22cf101af42..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ur.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/us.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/us.png deleted file mode 100644 index 1d77b1d70537a413d909b19e7f4c6b201bc15c9d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/us.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ut.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ut.png deleted file mode 100644 index 5ebab869a308986ae6e5719d98a3ba1714a01eff..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ut.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uu.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uu.png deleted file mode 100644 index fa9d8554db087962b15efa577321e38d958c0714..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uu.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uv.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uv.png deleted file mode 100644 index 8c346f1602eb24b5eff1473edb57aa3872249e4d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uv.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uw.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uw.png deleted file mode 100644 index 223543dd561bef2af966294430c9bdd9bc92ecc1..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uw.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ux.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ux.png deleted file mode 100644 index e87b75546c5db940206bcf3b68534f1875d8b56b..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ux.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uy.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uy.png deleted file mode 100644 index b51e8ee870f14ae9c5f76bc8060982c49f44225f..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uy.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uz.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uz.png deleted file mode 100644 index 58ee470185ca5a4a093d49efdd61cb7a1aeda038..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uz.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/v.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/v.png deleted file mode 100644 index 3aed0031cacf3ad6303d9435a42333a56835ca9d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/v.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/w.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/w.png deleted file mode 100644 index 008b3613484ed1bbb12f6f0be6630cdcced5fe67..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/w.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/x.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/x.png deleted file mode 100644 index b73a3c3a230cdfd39813eed77f6214388df24571..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/x.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/y.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/y.png deleted file mode 100644 index 158863bafe50962c5d267285da77924d6711dd6a..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/y.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/z.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/z.png deleted file mode 100644 index d3907d2aeb3a77e501d597ec4937d654acba6cfc..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/z.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/alpha.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/alpha.png deleted file mode 100644 index 91907f256e28c86774b8ce4260234f5ca0cdac6d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/alpha.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/beta.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/beta.png deleted file mode 100644 index 95edb82f59d4cda867805b03112ad4ba60a4a6a5..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/beta.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/chi.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/chi.png deleted file mode 100644 index 2c5f2f28f499555ec79523d8adf36a3b5c09f88d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/chi.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/delta.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/delta.png deleted file mode 100644 index 847f5c1469dbb348de397f17e25dd88cfaaf9779..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/delta.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/epsilon.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/epsilon.png deleted file mode 100644 index d9fa6c2c997df92549fabf1e78560c036ca55d18..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/epsilon.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/eta.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/eta.png deleted file mode 100644 index 206d0142761401395213686294b78561c25d17ae..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/eta.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/gamma.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/gamma.png deleted file mode 100644 index 97a09a08c45a6c7f9ce729f9de7844ed8af47eb0..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/gamma.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/iota.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/iota.png deleted file mode 100644 index 7eaad513fc19cbcd72ad8edcdffa50a1fce7c37e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/iota.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/kappa.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/kappa.png deleted file mode 100644 index 7a8571dd2749b7e6bbc3c1969576a2e0aff20a03..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/kappa.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/lambda.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/lambda.png deleted file mode 100644 index b619ecd3dcc1a19882a61eb13d65f76104b3f25b..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/lambda.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/mu.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/mu.png deleted file mode 100644 index 016d4642008c5a2eea36b59f2d63c38f85160b10..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/mu.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/nu.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/nu.png deleted file mode 100644 index 0f00fc4117d938236eb5eb6c32ba21c43106016f..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/nu.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/omega.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/omega.png deleted file mode 100644 index 3c0220f4d0cd21495d0de45a33d6a0f5b87e0024..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/omega.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/omicron.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/omicron.png deleted file mode 100644 index c5511b285f5cefc0e743e35554de62cae7e35aec..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/omicron.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/phi.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/phi.png deleted file mode 100644 index 5b6fc9e50b7ea1a2a986346a8321bca119f08884..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/phi.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/pi.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/pi.png deleted file mode 100644 index 30bc20c1797cdc284d2359a2614ac7feeb562fe3..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/pi.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/psi.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/psi.png deleted file mode 100644 index 92054d2b8e0b687eed39d9c0ff6a64c4813f7fc1..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/psi.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/rho.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/rho.png deleted file mode 100644 index 48cc456e69b154f92b63299cd8a3ed8376448c3a..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/rho.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/sigma.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/sigma.png deleted file mode 100644 index 349fb3bfc1e127122383fa23e9eec33fd9cace35..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/sigma.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/tau.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/tau.png deleted file mode 100644 index 235468fccbef6f8780486a6e0b4c8f40f9d838bc..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/tau.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/theta.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/theta.png deleted file mode 100644 index 6540af2531f6ba74fed6564a54a8410f966ecb7d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/theta.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/upsilon.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/upsilon.png deleted file mode 100644 index 0d88ee0efbc54626066dee63d2d47a9f7be5f6b2..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/upsilon.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/xi.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/xi.png deleted file mode 100644 index a00c3829d177de5ea599de8145998680341975ce..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/xi.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/zeta.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/zeta.png deleted file mode 100644 index 683d9bca83ea455961ba22637f470c94fb8b68c7..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/zeta.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/digamma.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/digamma.png deleted file mode 100644 index b9ab6f1448fe0eba3714206132e00a1b3ce0d9ed..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/digamma.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varepsilon.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varepsilon.png deleted file mode 100644 index 2f3ae9c94835bd79f04304c5b68e39be5c712940..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varepsilon.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varkappa.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varkappa.png deleted file mode 100644 index ddc85a22758f76099117875787aeeacbbb86e3b3..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varkappa.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varphi.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varphi.png deleted file mode 100644 index a198b26921f9af5f8e825491313443f073105e4c..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varphi.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varpi.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varpi.png deleted file mode 100644 index 788c350bf8b7cb29fd5db4649b73653d66ab3626..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varpi.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varrho.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varrho.png deleted file mode 100644 index d88476754e0729f925a8344009c56fb42cdc8f4d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varrho.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varsigma.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varsigma.png deleted file mode 100644 index a5409dd4b923662dd2b59335466910ad94a801dc..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varsigma.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/vartheta.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/vartheta.png deleted file mode 100644 index 4729b1537572a0c744dcc280aa45ecb92e87830d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/vartheta.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/alpha.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/alpha.png deleted file mode 100644 index 22dfae19bbed0a26772f9e1ce3bc006491a9e9b7..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/alpha.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/beta.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/beta.png deleted file mode 100644 index c95d79be594db75c538dc9a004e1b1d53f99b4b6..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/beta.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/chi.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/chi.png deleted file mode 100644 index 774804af196fa73fe550b41b349f228a05914a47..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/chi.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/delta.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/delta.png deleted file mode 100644 index c3baf6253586ab872c62ccae51d725760af5ec11..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/delta.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/epsilon.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/epsilon.png deleted file mode 100644 index c8f85ef3fbef563dd92dd43417f489a61ac84ecb..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/epsilon.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/eta.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/eta.png deleted file mode 100644 index c02a78af3eeba4366aa30e51fb4c7732fd6d6e76..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/eta.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/gamma.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/gamma.png deleted file mode 100644 index 1f6ccb0e2f559fce512a5ac6245cb44c64484031..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/gamma.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/iota.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/iota.png deleted file mode 100644 index 10777c943bb658ccf9fc1afb5e183bb832e77bc8..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/iota.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/kappa.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/kappa.png deleted file mode 100644 index 44aa91f3c746c532ba9456a24e136b884d30a70d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/kappa.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/lambda.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/lambda.png deleted file mode 100644 index cf67ea5de45ba58bbf2a9fc0fbcfc1b490b9ed33..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/lambda.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/mu.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/mu.png deleted file mode 100644 index 7284125d1d9b94b23b811982b93e41cb8e463bdd..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/mu.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/nu.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/nu.png deleted file mode 100644 index 2dcc1c3af3c892912b65f4245f5a8c70fbe4b8d6..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/nu.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/omega.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/omega.png deleted file mode 100644 index 3b9466db6b0cf618d1ba1359d750ae3afc6535c1..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/omega.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/omicron.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/omicron.png deleted file mode 100644 index 6d31fbd95e6ace84ef6f1b317ac700c9da502a09..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/omicron.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/phi.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/phi.png deleted file mode 100644 index 1a928d65d4f45299b2b7bd405b61624d49db8367..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/phi.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/pi.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/pi.png deleted file mode 100644 index a1e1314b03fe7c4c585d9699e614dfce48f123ac..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/pi.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/psi.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/psi.png deleted file mode 100644 index fdc032186025b8d7673d7ddc473eeba49cfb5b69..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/psi.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/rho.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/rho.png deleted file mode 100644 index 27d8c36656595da765c24f0d5c8808a3985add35..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/rho.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/sigma.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/sigma.png deleted file mode 100644 index dd4ad4bbc33601964aa78551b2123e7fe08beda0..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/sigma.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/tau.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/tau.png deleted file mode 100644 index 7ad430550b442ecdcc55b7995c1e2fac5f05729a..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/tau.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/theta.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/theta.png deleted file mode 100644 index b5d78300c31402f09f77c5ca91245b8ebf36b22c..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/theta.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/upsilon.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/upsilon.png deleted file mode 100644 index ff1fd88c4476f89ce0e9885e66bdec498aeda966..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/upsilon.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/xi.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/xi.png deleted file mode 100644 index a478d75912ca67133ab024ee8ea449bb68968c23..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/xi.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/zeta.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/zeta.png deleted file mode 100644 index 4052d0963220f8a3f3f63c2a1e054691cff7fe19..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/zeta.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/aleph.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/aleph.png deleted file mode 100644 index 49631118f59fd251f779372b8e2f21de2a6e3025..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/aleph.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/approx.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/approx.png deleted file mode 100644 index 7ef6f5dab254b82b474171509f3743e7f5995ac3..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/approx.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ast.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ast.png deleted file mode 100644 index 8b4deaddc3712ad96808f24c5b6a00e82257fcff..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ast.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/baifenhao.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/baifenhao.png deleted file mode 100644 index 624539c19693627bc2a55f333ef657a165abf1db..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/baifenhao.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/because.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/because.png deleted file mode 100644 index 51070efc10f886dc762a36d25e73749c6655b905..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/because.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/beth.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/beth.png deleted file mode 100644 index 90fa4e238647069acc3eb58f22de6019e653eeb6..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/beth.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/blacksquare.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/blacksquare.png deleted file mode 100644 index 4221d79b3c7cd50c80833135f2fd9bea9bd795bd..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/blacksquare.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cap.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cap.png deleted file mode 100644 index 59d6a754347ad2e7fb94068e40e71eade8447ce1..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cap.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cdot.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cdot.png deleted file mode 100644 index 4f923c17780c032655a7aa14dc94f1a709565e07..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cdot.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/circ.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/circ.png deleted file mode 100644 index a27d47748e475c55a752c387bcb6a86bcf633a81..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/circ.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cong.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cong.png deleted file mode 100644 index 46abcf09ee215e3330208cf5a3f4597126338b86..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cong.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cup.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cup.png deleted file mode 100644 index f321d24a12644d883b23ed53560ee41d9c51ab1c..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cup.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ddots.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ddots.png deleted file mode 100644 index c609835e5a42f761cd4139dfc7b6e93904c4a017..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ddots.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/div.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/div.png deleted file mode 100644 index 8c11435ce09d150956788d8ab1a34cbc4c8de62d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/div.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/downarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/downarrow.png deleted file mode 100644 index fe285ddba4ab2b6092b93113f114fb899d96f899..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/downarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/eq.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/eq.png deleted file mode 100644 index 21820cadf2fc50656cc6abac4a4f3b6e0f357db3..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/eq.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/equiv.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/equiv.png deleted file mode 100644 index d21d2b61212da0b32bdcab2da57b12019866d3fd..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/equiv.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/exists.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/exists.png deleted file mode 100644 index 291cead95d512541f4af49eca3e945b64245c961..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/exists.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/forall.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/forall.png deleted file mode 100644 index c2a01c859c410ff2d669a4cd0c8c09283079ca79..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/forall.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/geq.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/geq.png deleted file mode 100644 index 0ccd75280bdd57359521ad6492661adac15d4a35..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/geq.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/gets.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/gets.png deleted file mode 100644 index 702b6da64d3590519fd342b1d443265210f123a3..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/gets.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/gg.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/gg.png deleted file mode 100644 index 7dcdea84ec5ac33f3bbd86839a5743962e35db81..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/gg.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/gt.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/gt.png deleted file mode 100644 index cc057299b059410e746a74bb14d7ddd63bbbcb17..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/gt.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/in.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/in.png deleted file mode 100644 index 271d61905f992c930cbf76769743ffdf71b501dc..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/in.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/infty.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/infty.png deleted file mode 100644 index 8db988c4facc90b7c6be1fcba251e4d802263220..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/infty.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/leftrightarrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/leftrightarrow.png deleted file mode 100644 index 989a47dc39a40d1cfceb4012d77213382f9eb980..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/leftrightarrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/leq.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/leq.png deleted file mode 100644 index 01255b2933529b50d78392405d552e18061c909e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/leq.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ll.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ll.png deleted file mode 100644 index d0cc99f3daaeaead992b145969645ce4d285359b..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ll.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/lt.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/lt.png deleted file mode 100644 index f11edc8f5649bf37a673dcc5e9cc97342c6d9bf4..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/lt.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/minus.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/minus.png deleted file mode 100644 index 0f845a285ad36f358cdf60c3f31b0649233777ab..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/minus.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/mp.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/mp.png deleted file mode 100644 index 1cf38f07dfd3c65dbe6ff39df2544ececf077b09..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/mp.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/neg.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/neg.png deleted file mode 100644 index 164bfa842c13b5e45098b4c1d81ab2a7ec846d03..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/neg.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/nexists.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/nexists.png deleted file mode 100644 index e4523e1cc595f3897d635b81d26ece4596a589ab..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/nexists.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ni.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ni.png deleted file mode 100644 index 5b3da5768f191d8597f6a19a25048d96073c923c..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ni.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/partial.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/partial.png deleted file mode 100644 index 28253fa6e7366d2dcc4d146727dd16b3f2839a7f..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/partial.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/plus.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/plus.png deleted file mode 100644 index 7055190c44bfa7f28cd4ee6f59f8c92199efd112..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/plus.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/pm.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/pm.png deleted file mode 100644 index 881665584f034bad863d2caa9dbaa10983e4cf5f..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/pm.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/propto.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/propto.png deleted file mode 100644 index 4ba04fdc5516d8fffa7b66116b65839fe96c8162..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/propto.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/sim.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/sim.png deleted file mode 100644 index 4a5264bcc2e773fab9d7fb0966a1e60be9f40d48..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/sim.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/simeq.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/simeq.png deleted file mode 100644 index ac4b64b65c6a1e93dea9b3d3f317f0676fdcbbef..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/simeq.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/surd.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/surd.png deleted file mode 100644 index 9ddfd4db77f349593e7d2eee602b0f83acfa7fcf..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/surd.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/tanhao.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/tanhao.png deleted file mode 100644 index 35a33468a1c630b4984ffde5cac4f5b816966f40..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/tanhao.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/therefore.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/therefore.png deleted file mode 100644 index 7fd47cf7f8c60d97f3fdeb2ee00d85886a46dc76..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/therefore.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/times.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/times.png deleted file mode 100644 index 1018224ef25c23424f7d958d0f00c3de03607cea..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/times.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/to.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/to.png deleted file mode 100644 index 12609e4f4619c06a6a6893da2a479b091c26fc02..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/to.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/uparrow.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/uparrow.png deleted file mode 100644 index 0c619451ae4cf406ac66c39ca6662f3cfd395802..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/uparrow.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/varnothing.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/varnothing.png deleted file mode 100644 index ea1b6c1d9e5035dee7006127814bf632eb5bd878..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/varnothing.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/vdots.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/vdots.png deleted file mode 100644 index 0ce84f2ce5101f555f01cc11f3f9bbc1e6ccdf6d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/vdots.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/gneqq.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/gneqq.png deleted file mode 100644 index b299d23031ec9249af036beb8a18214c36b3fb28..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/gneqq.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/gnsim.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/gnsim.png deleted file mode 100644 index 683af6bf93b6f1e8230dc1f4f8f831b52616effe..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/gnsim.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/lneqq.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/lneqq.png deleted file mode 100644 index 56440637b9b06b7fdc90c63f00b29e8647d0de61..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/lneqq.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/lnsim.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/lnsim.png deleted file mode 100644 index 1365188a04e6085031a6046ccf2e296cf6d7aa3e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/lnsim.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nbdash-1.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nbdash-1.png deleted file mode 100644 index 07cce702f4abfb4d7d235f5e19449aea32fa5672..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nbdash-1.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ncong.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ncong.png deleted file mode 100644 index 156f8befa8d5ef018742db4fc93b14c26f415f81..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ncong.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/neq.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/neq.png deleted file mode 100644 index feb442f4ce94122870baa66edf89d51978be6aab..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/neq.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nequiv.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nequiv.png deleted file mode 100644 index 83427dc84ec60897226f5ac9be13a5a6a0f8086c..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nequiv.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nexists.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nexists.png deleted file mode 100644 index c5e3e583c6d81cdb274f5d83ad06160c578d37e7..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nexists.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ngeq.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ngeq.png deleted file mode 100644 index d3385e4cd6dce61f029f9b76541095347ec01231..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ngeq.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ngtr.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ngtr.png deleted file mode 100644 index 033a1d168126cf8e29d8b725a10ba0434d57e7ef..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ngtr.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nleq.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nleq.png deleted file mode 100644 index 16347a168a6df4b47d5b8bf28e61d9c781269560..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nleq.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nless.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nless.png deleted file mode 100644 index 11c947238910fb33a64c4f61f86f48e32f0de0f5..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nless.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nmid.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nmid.png deleted file mode 100644 index c63688e23115612366fb96f2ad264688591fee8d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nmid.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/notin.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/notin.png deleted file mode 100644 index d0012918e033082e4f727ec48169322da7fa3c5c..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/notin.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nparallel.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nparallel.png deleted file mode 100644 index 76887ca0c8135247c6c345b0a1b88c2bcbb8fa1d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nparallel.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nprec.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nprec.png deleted file mode 100644 index a929e3b024b53f8a690da1c901403673d44d83ae..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nprec.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsim.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsim.png deleted file mode 100644 index 45cf001ba2db9f9eb517fd43489e89288706377e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsim.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsubseteq.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsubseteq.png deleted file mode 100644 index 9e530e2767f3d70ea8ca7dbf8c2324b50852367f..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsubseteq.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsucc.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsucc.png deleted file mode 100644 index b975eaf8b9c96e897b9e5802514238c982e9b297..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsucc.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsupseteq.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsupseteq.png deleted file mode 100644 index 4c1866b401e2fa89deb23d995a79a4f8e04cc3f5..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsupseteq.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntriangleleft.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntriangleleft.png deleted file mode 100644 index 39ecc4dd30744d35fefdb457437b512aee853911..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntriangleleft.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntrianglelefteq.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntrianglelefteq.png deleted file mode 100644 index 9b8f737d1a182b5876875a60dfd6fc2ede3480fc..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntrianglelefteq.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntriangleright.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntriangleright.png deleted file mode 100644 index 751acf0d12d70bc4551f3ca0c85a872c45520072..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntriangleright.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntrianglerighteq.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntrianglerighteq.png deleted file mode 100644 index abff3af7dcdb933014f0be241e50dba2a5827422..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntrianglerighteq.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash-1.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash-1.png deleted file mode 100644 index dc641d92e2266751d8510ea780529bd01394079d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash-1.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash-2.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash-2.png deleted file mode 100644 index 4079f6fba03da755909ea184176debbd6bfe8b31..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash-2.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash-3.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash-3.png deleted file mode 100644 index 3d872b42e1f3d1b8c0e098c8069eeb50ac7c2506..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash-3.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash.png deleted file mode 100644 index 4f4fb1f2e91b0d3c523f84f4e909e1f85fea3cd2..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/precnsim.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/precnsim.png deleted file mode 100644 index e6c148b2e06a11adccdad29045fab4d65f65c57b..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/precnsim.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/subsetneq.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/subsetneq.png deleted file mode 100644 index cc3383553606f6561afd9394131fb04707d5b573..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/subsetneq.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/succnsim.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/succnsim.png deleted file mode 100644 index 7eafb5bd473d4db551059509427c895ec984db19..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/succnsim.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/supsetneq.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/supsetneq.png deleted file mode 100644 index b43f091926deaaf19d55f0a596f49a512a1c6a61..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/supsetneq.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/a.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/a.png deleted file mode 100644 index 9da4fafe5aeab01be22acaaf52aa64c6229129c0..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/a.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/b.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/b.png deleted file mode 100644 index c14fe4f1dac6ab7d710dc32043867d2824a980b0..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/b.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/c.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/c.png deleted file mode 100644 index 08015b74a0f4222ae88d4540435052509280ad93..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/c.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/d.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/d.png deleted file mode 100644 index 2c9a95d8df8530ebcb7a5893e59960da4a457e46..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/d.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/e.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/e.png deleted file mode 100644 index e966a241d3205884ad9a719c9fc4b5a292ec6761..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/e.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/f.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/f.png deleted file mode 100644 index 76d3d370acb70576be0f112e993dc7c3d95fde31..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/f.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/g.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/g.png deleted file mode 100644 index 8ea577546586ec3619015e3cc53c2b04486f94fd..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/g.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/h.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/h.png deleted file mode 100644 index fa3c006d3324d8d6e96bde3eb5431e84a6b9be44..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/h.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/i.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/i.png deleted file mode 100644 index 58e2a69325c503ece628a44281d8f3f31322f4ce..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/i.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/j.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/j.png deleted file mode 100644 index 592148aa81b4deca5fe1021338f129399c805f1d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/j.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/k.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/k.png deleted file mode 100644 index e2daf2e56154174a51fef2078d029b1093729bab..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/k.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/l.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/l.png deleted file mode 100644 index 691a92fbf73b9fb239adc9692bd43bb1e1c0a232..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/l.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/m.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/m.png deleted file mode 100644 index 9f020cc1b7d489578334cee644e972473ff7ab32..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/m.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/n.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/n.png deleted file mode 100644 index 30be2cc6829882f14dad932854787a127b3e1c52..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/n.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/o.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/o.png deleted file mode 100644 index 16c83a08f7f9251333f8595d8ed78c2ed5fc98f1..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/o.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/p.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/p.png deleted file mode 100644 index b3e837cd82eb88546ceb17b73624dbff1683e838..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/p.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/q.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/q.png deleted file mode 100644 index 203bb204fb3c4a81e01b9b4fd4894e30179764c1..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/q.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/r.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/r.png deleted file mode 100644 index 763f81e9976985858b771a9318b68c4b31b98397..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/r.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/s.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/s.png deleted file mode 100644 index 7510702eee0b636d2b783a3b207df8476ca37a2c..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/s.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/t.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/t.png deleted file mode 100644 index 00432047f5efe9ce1711d81a8f11162336eba2bf..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/t.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/u.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/u.png deleted file mode 100644 index f495f3d116181db5956ca2ea815227d569f2bf37..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/u.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ua.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ua.png deleted file mode 100644 index 7d36a0e98a63a6fd1968e086ae446731a4585e2f..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ua.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ub.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ub.png deleted file mode 100644 index d1eacb7ef8cd2dcb0d0c6fb4d7f2ad23e18424fc..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ub.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uc.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uc.png deleted file mode 100644 index e1f8bb9e0e7e3950f920b95f633e496466f4f1f0..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uc.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ud.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ud.png deleted file mode 100644 index a5d2343dcfe16517550e55bbc0f8feee106bbb29..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ud.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ue.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ue.png deleted file mode 100644 index 974322c69f5280bd2b88512e5d688b18474f9938..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ue.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uf.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uf.png deleted file mode 100644 index 253244e6002ffc49dd28a84f6a071cca1a7136aa..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uf.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ug.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ug.png deleted file mode 100644 index 3fd2e08a28a94f8cb8d94bf83e013c5a34c06f4e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ug.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uh.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uh.png deleted file mode 100644 index c72d3192c1a469d87ca568bf86cc2a3ed012a441..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uh.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ui.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ui.png deleted file mode 100644 index f69e3f857e6a7c7e11ecaed284b3bd53d33a5e8e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ui.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uj.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uj.png deleted file mode 100644 index ffefb31042c96f3fdd04d151cfe32eb1f9007674..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uj.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uk.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uk.png deleted file mode 100644 index 07a569dc9ceda3da096ef09ab21bbb363fe85cc2..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uk.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ul.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ul.png deleted file mode 100644 index 47d868a0cbacd1e3148c7fca84eb9a9f820e9b73..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ul.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/um.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/um.png deleted file mode 100644 index c45333e6034076b8fabc626ab19d9e2314ee5655..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/um.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/un.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/un.png deleted file mode 100644 index c3ba37c37f26ccdcd0c20722c65f4a7448b970fe..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/un.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uo.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uo.png deleted file mode 100644 index cac7b4ff2079b8d9954b83675da302bd1d6f75e0..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uo.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/up.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/up.png deleted file mode 100644 index d48be7b8cfb41d25ad1e53532bd9c29a7dc776bc..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/up.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uq.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uq.png deleted file mode 100644 index d20612bf0e3f1f77cf23b2f812d1e18c0b5b66d6..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uq.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ur.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ur.png deleted file mode 100644 index e812c3186f8143411f9e41e603b163045099ea97..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ur.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/us.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/us.png deleted file mode 100644 index 32042572115e3aa5bcd62cfd0e211660a6547f20..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/us.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ut.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ut.png deleted file mode 100644 index d897d27c64780aa6b2917b04be971d4991fb5c21..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ut.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uu.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uu.png deleted file mode 100644 index 87ca6cec4eee8eddfcae7680b87d5691448dabba..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uu.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uv.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uv.png deleted file mode 100644 index 8d6cd3bbdea1f593e8b09140f47ea859542679af..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uv.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uw.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uw.png deleted file mode 100644 index 0d5f3890cb01ceade5bb9d1b17eb32a5feb383ae..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uw.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ux.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ux.png deleted file mode 100644 index 024bade9b32aa3d20452de9f458bc00beba8f155..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ux.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uy.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uy.png deleted file mode 100644 index cfa70de56d26d1a4158a9fb9759877fd01d17a68..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uy.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uz.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uz.png deleted file mode 100644 index 8d1fcc83fe1d05564a170ac03ede1fc843b345e8..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uz.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/v.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/v.png deleted file mode 100644 index 0ad4cd8a334f33a21d9548486e4f6c2a2129e8bf..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/v.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/w.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/w.png deleted file mode 100644 index c6edcb49b5f460c2664587157b62cd46b45ed5ba..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/w.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/x.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/x.png deleted file mode 100644 index f299eeb12ce136b0b1ea8e07e023adf0085dd982..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/x.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/y.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/y.png deleted file mode 100644 index 98c8626b14f31920ca63cb8c34911db9b173174d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/y.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/z.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/z.png deleted file mode 100644 index 644a5b3158bab6d2441751b15836855112cc0d58..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/z.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/1.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/1.png deleted file mode 100644 index 3894249db8e513cde9912875bba551de948fdb46..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/1.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/2.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/2.png deleted file mode 100644 index c378fdce0806e48e96b716fbe655d93081f29af6..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/2.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/3.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/3.png deleted file mode 100644 index fad9d20cfe5e5b62a221a7ce9847dca79eae0e80..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/3.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c1.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c1.png deleted file mode 100644 index a032d706d31c6cd9c38da923113a8345826ed9bd..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c1.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c2.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c2.png deleted file mode 100644 index a8c95a87123b926713695f00e1ccf64b5821debb..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c2.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c4.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c4.png deleted file mode 100644 index 74c5cdfe2e677593d0fd24cc0f6d506a0a9ca6f5..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c4.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c5.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c5.png deleted file mode 100644 index 05e6adfc38355d71e977905dfd661c4d8a9c5f8c..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c5.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/1.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/1.png deleted file mode 100644 index 3654ff91c867daf6eabdb97f02ee3ac19116b676..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/1.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/2.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/2.png deleted file mode 100644 index a33c1dc13bdc3fcfbbbbc65422fe4e01fab424cf..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/2.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/3.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/3.png deleted file mode 100644 index 3fc2186ac8cbb7ae187e6b1f41a990feb3a1dc60..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/3.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/4.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/4.png deleted file mode 100644 index 6f528dbf975e917eadde81809ad3ab663a78e272..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/4.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/5.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/5.png deleted file mode 100644 index e22d59278cf4d3e295d481848a2ec245d5281ecd..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/5.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/6.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/6.png deleted file mode 100644 index 2eed1bcd0533a3b6ecfc54f6f9d1cab3ef4c81f7..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/6.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c1.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c1.png deleted file mode 100644 index d797cb8341215b0d5ec100495ae914f7f342f376..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c1.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c2.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c2.png deleted file mode 100644 index 4eb6c8f97db9305afdeca4956f320563a9e40e30..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c2.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c3.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c3.png deleted file mode 100644 index 0f55b7e17fa552ec9a97f0624582e5c8ab9c1c74..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c3.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/1.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/1.png deleted file mode 100644 index a08ab60d21cb2294337efc5017eec95d180b13a5..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/1.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/2.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/2.png deleted file mode 100644 index 09cb7f882c266d4f44fa14fd9e9d01009ded3ffd..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/2.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/3.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/3.png deleted file mode 100644 index 8898b845cadbea6308e115d76820120cefce16de..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/3.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/4.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/4.png deleted file mode 100644 index 483092e69a6bd7acc836a05ef1cfd97870c578c6..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/4.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/5.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/5.png deleted file mode 100644 index 604128ceda81954571b399706eec20a83e427dbe..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/5.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/6.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/6.png deleted file mode 100644 index 287b6ca3da36e44daef8c3baa8ed58678a40ded8..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/6.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/large/1.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/large/1.png deleted file mode 100644 index a83bf8ecbe0b70c109d0b01c91d01e848127eaf0..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/large/1.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/large/2.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/large/2.png deleted file mode 100644 index 705255335169d5d135e41a155067ac3caaf57cc2..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/large/2.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/large/3.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/large/3.png deleted file mode 100644 index 70b0f3e1d0603800b7411651fb2172f01955bb46..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/large/3.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/other.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/other.png deleted file mode 100644 index a5796aa82861db92a8d248df72c151f187032dd9..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/other.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/1.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/1.png deleted file mode 100644 index a40b79a60db45bd8ae0cf019f75f56612bab70bf..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/1.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/2.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/2.png deleted file mode 100644 index 1eac155aae83d21adcf8317a8dcf8f80d0d964bd..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/2.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/3.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/3.png deleted file mode 100644 index 3425abeb66f4ba54251eccc115ab990994e38888..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/3.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/4.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/4.png deleted file mode 100644 index fad9d20cfe5e5b62a221a7ce9847dca79eae0e80..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/4.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/c1.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/c1.png deleted file mode 100644 index 24cbd1bed5c5a1b6d637cd2779d580ebe44edf1a..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/c1.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/c2.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/c2.png deleted file mode 100644 index 572ad1ffba49478afcee3e46fee8198be363a0f6..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/c2.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/c3.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/c3.png deleted file mode 100644 index d557b777e3a805de5d8a60b06cd6dae8752529ba..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/c3.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/1.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/1.png deleted file mode 100644 index f6d0f2e56f9112404f1e0371b7c6de48d3056e20..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/1.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/2.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/2.png deleted file mode 100644 index 0ffbabb3fa71bdd73b484cd258268b3d294b4e75..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/2.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/3.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/3.png deleted file mode 100644 index 1f1015648fed0dd3895cf3ccf8b84cacac2f3f9f..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/3.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/4.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/4.png deleted file mode 100644 index 66470a6b0d6767dbe7e4b9d716d09a6e32ee3256..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/4.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/c1.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/c1.png deleted file mode 100644 index cf7beba696997e7c85b3a8883f5e0c4570d1c320..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/c1.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/c2.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/c2.png deleted file mode 100644 index 35a5baeebbbd4bb8e941beb61d3b58724328b437..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/c2.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/ys/1.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/ys/1.png deleted file mode 100644 index f7c7d178e4c8187206da6934633424132e721cd0..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/ys/1.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/ys/2.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/ys/2.png deleted file mode 100644 index ee9586da60a286df2d113884f3c6b2dbc66201a4..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/ys/2.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/ys/3.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/ys/3.png deleted file mode 100644 index 93f7d9c8a6d9e97b545fae0a2c91da23ee560767..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/ys/3.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/styles/base.css b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/styles/base.css deleted file mode 100644 index 355d9b0b8cfffb39715927b8783f3bf3c52659b0..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/styles/base.css +++ /dev/null @@ -1,40 +0,0 @@ - -.kf-editor { - width: 100%; - height: 100%; - border: 1px solid #e0e0e0; - position: relative; - top: 0; - left: 0; - - overflow: hidden; - z-index: 2; - background-color: #f6f5ee; -} - -.kf-editor-edit-area { - position: relative; - top: 0; - left: 0; - - z-index: 1; - height: 0; - background-color: white; - /*background-color: white;*/ - /*background-size: 21px 21px;*/ - /*background-position: 0 0,10px 10px;*/ - /*background-image: -webkit-linear-gradient(45deg,#efefef 25%,transparent 25%,transparent 75%,#efefef 75%,#efefef),-webkit-linear-gradient(45deg,#efefef 25%,transparent 25%,transparent 75%,#efefef 75%,#efefef);*/ - /*background-image: linear-gradient(45deg,#efefef 25%,transparent 25%,transparent 75%,#efefef 75%,#efefef),linear-gradient(45deg,#efefef 25%,transparent 25%,transparent 75%,#efefef 75%,#efefef);*/ -} - -.kf-editor-canvas-container { - width: 100%; - height: 100%; -} - -.kf-editor-input-box { - position: fixed; - top: 0; - left: -99999999px; - z-index: 999999; -} \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/styles/page.css b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/styles/page.css deleted file mode 100644 index 8026403bb234793eb236712ac181b4e3c6393aac..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/styles/page.css +++ /dev/null @@ -1,12 +0,0 @@ - -html, body { - width: 100%; - height: 100%; - padding: 0; - margin: 0; - background: rgba( 48, 48, 48, 0.5 ); -} - -body { - height: 1000px; -} diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/styles/scrollbar.css b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/styles/scrollbar.css deleted file mode 100644 index b8254b0c9d9abb0a875f5ce7b5ac04070380fe8b..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/styles/scrollbar.css +++ /dev/null @@ -1,78 +0,0 @@ -/*! - * 滚动条 - **/ - -.kf-editor-edit-scrollbar { - width: 100%; - height: 16px; - position: absolute; - bottom: 0; - left: 0; - z-index: 994; - border-top: 1px solid #ddd; -} - -.kf-editor-ui-left-button { - position: absolute; - top: 0; - left: 0; - width: 5px; - height: 100%; - background: white; -} - -.kf-editor-ui-right-button { - position: absolute; - top: 0; - right: 0; - width: 5px; - height: 100%; - background: white; -} - -.kf-editor-ui-track { - position: absolute; - top: 0; - left: 5px; - width: 0; - height: 100%; - background-image: url(../images/scrollbar/edit/bar-left.png), url(../images/scrollbar/edit/bar-right.png), url(../images/scrollbar/edit/bar-bg.png); - background-repeat: no-repeat, no-repeat, repeat-x; - background-position: 0 0, right 0, 0 0; -} - -.kf-editor-ui-thumb { - position: absolute; - top: 0; - left: 0; - width: 0; - height: 100%; -} - -.kf-editor-ui-thumb-left { - width: 5px; - height: 100%; - position: absolute; - top: 0; - left: 0; - background: url(../images/scrollbar/edit/thumb-left.png) no-repeat 0 0; - z-index: 1; -} - -.kf-editor-ui-thumb-right { - width: 5px; - height: 100%; - position: absolute; - top: 0; - right: 0; - background: url(../images/scrollbar/edit/thumb-right.png) no-repeat 0 0; -} - -.kf-editor-ui-thumb-body { - position: absolute; - top: 0; - left: 5px; - width: 0; - height: 100%; - background: url(../images/scrollbar/edit/thumb-bg.png) repeat-x 0 0; -} \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/styles/ui.css b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/styles/ui.css deleted file mode 100644 index e8ac47083a99743511bc8f21e9d4e719ecf19885..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/styles/ui.css +++ /dev/null @@ -1,536 +0,0 @@ -/* 工具栏 */ -.kf-editor-toolbar { - width: 100%; - padding: 1px 10px; - position: relative; - top: 0; - left: 0; - z-index: 2; - background-color: #f6f5ee; - border-bottom: 1px solid #ccc; - -moz-box-shadow:1px 1px 1px rgba( 0, 0, 0, 0.1 ); - -webkit-box-shadow:1px 1px 1px rgba( 0, 0, 0, 0.1 ); - box-shadow:1px 1px 1px rgba( 0, 0, 0, 0.1 ); - color: #000; - font-family: Helvetica, Arial, "微软雅黑", "Microsoft YaHei", "宋体", sans-serif; -} - -/* 按钮 */ -.kf-editor-ui-button { - padding: 8px 6px; - height: 79px; - font-size: 12px; - display: inline-block; - border: 1px solid transparent; - border-radius: 3px; - cursor: default; - position: relative; - top: 0; - left: 0; - z-index: 3; - vertical-align: top; - opacity: 0.5; - margin-right: 1px; -} - -.kf-editor-toolbar .kf-editor-ui-overlap-button { - width: 100%; - height: 25px; - background: #53b856; - border-radius: 0; -} - -.kf-editor-ui-button-icon { - width: 32px; - height: 32px; - margin: 2px auto; -} - -.kf-editor-ui-button-label { - color: #666; - text-align: center; - display: block; - font-size: 12px; - line-height: 20px; -} - -.kf-editor-ui-overlap-button .kf-editor-ui-button-label { - padding: 3px 5px; - text-align: left; - color: white; - font-size: 12px; -} - -.kf-editor-ui-button-sign { - border: 4px solid transparent; - border-top-color: #2d2d2d; - width: 0; - height: 0; - display: inline-block; - margin: 8px auto; - vertical-align: top; -} - -.kf-editor-ui-button-mount-point { - display: none; - position: absolute; - bottom: -2px; - left: -1px; -} - -.kf-editor-ui-overlap-button .kf-editor-ui-button-mount-point { - width: 100%; - height: 10000px; -} - -.kf-editor-ui-wrap-group { - overflow-x: hidden; - overflow-y: auto; -} - -.kf-editor-ui-overlap-button .kf-editor-ui-button-mount-point { - top: 27px; -} - -.kf-editor-toolbar .kf-editor-ui-button-in { - border-color: #8fcc91!important; - background: #e0f0dd!important; -} - -.kf-editor-toolbar .kf-editor-ui-overlap-button { - padding-top: 0; - padding-bottom: 0; - border-color: #61b864!important; - background: #61b864!important; -} - -/* 分割符 */ -.kf-editor-ui-delimiter { - width: 11px; - height: 100%; - display: none; -} - -.kf-editor-ui-enabled.kf-editor-ui-button:HOVER { - border: 1px solid #a9d9ab; - background: #ebf7e6; -} - -.kf-editor-ui-enabled.kf-editor-ui-overlap-button:HOVER { - border: 1px solid #53b856; - background: #53b856; -} - -.kf-editor-ui-delimiter-line { - width: 1px; - height: 100%; - margin: 0 auto; - background: -webkit-linear-gradient(top, rgba(233, 233, 233, 0.11), rgba(92, 92, 92, 0.20) 60%, rgba(92, 92, 92, 0.41) 80%, rgba(123, 123, 123, 0.50)); -} - -/* box */ -.kf-editor-ui-box { - border: 1px solid #b3aead; - border-radius: 3px; - box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.11); - background: white; - position: absolute; - top: 0; - left: -1px; - overflow-x: hidden; - overflow-y: auto; -} - -.kf-editor-ui-area .kf-editor-ui-box { - border-color: #61b864; -} - -.kf-editor-ui-box-container { - font-size: 12px; -} - -.kf-editor-ui-box-group-title { - background-color: #f7f6f0; - height: 23px; - line-height: 23px; - font-size: 12px; - border: 1px solid #ebeae4; - border-width: 1px 0; - padding-left: 12px; -} - -.kf-editor-ui-box-group-item-container { - padding: 7px 9px 17px 9px; -} - -.kf-editor-ui-overlap-container { - overflow: hidden; -} - -.kf-editor-ui-area .kf-editor-ui-box { - top: -1px; -} - -.kf-editor-ui-overlap-container .kf-editor-ui-button-sign { - border-top-color: white; - border-width: 4px; - margin-left: 10px; - margin-top: 8px; -} - -.kf-editor-ui-yushe-btn .kf-editor-ui-box-item { - border: 1px solid transparent; - padding: 5px; -} - -.kf-editor-ui-box-item { - display: inline-block; - margin: 4px; -} - -.kf-editor-ui-box-item-content:HOVER { - border-color: #dff3df; -} - -.kf-editor-ui-box-item-content:HOVER .kf-editor-ui-box-item-val { - border-color: #6eb864; -} - -.kf-editor-ui-area .kf-editor-ui-box-item { - position: relative; - top: 0; - left: 0; - width: 32px; - height: 32px; - border: 0; - margin: 3px; - padding: 0; - z-index: 1; -} - -.kf-editor-ui-area .kf-editor-ui-box-item img { - width: 32px; - height: 32px; -} - - -.kf-editor-ui-box-item-label { - margin-bottom: 5px; -} - -.kf-editor-ui-box-item-content { - background: white; - border: 1px solid white; -} - -.kf-editor-ui-area .kf-editor-ui-box-item-content { - position: absolute; - top: 0; - left: 0; -} - -.kf-editor-ui-area .kf-editor-ui-box-item-content:HOVER { - border: 1px solid #dff3df; -} - -.kf-editor-ui-box-item-val { - padding: 5px; - line-height: 0; - border: 1px solid #808080; -} - -.kf-editor-ui-area .kf-editor-ui-box-item-val { - padding: 0; - margin: 0; -} - -/* area */ -.kf-editor-ui-area { - height: 79px; - display: inline-block; - cursor: default; - position: relative; - top: 0; - left: 0; - vertical-align: top; - opacity: 0.5; - z-index: 4; - border: 1px solid #e0dfd5; - border-radius: 4px; - background: white; - margin: 8px 10px; -} - -.kf-editor-ui-area-container { - width: 293px; - height: 70px; - /*margin: 7px 5px 5px 5px;*/ - margin: 5px; - display: inline-block; - border-right: 0; - vertical-align: top; - position: relative; - top: 0; - left: 0; - overflow: hidden; -} - -.kf-editor-ui-area-panel { - position: absolute; - top: 0; - left: 0; - line-height: 0; - background: white; - -webkit-transition: top 0.5s linear; - -moz-transition: top 0.5s linear; - transition: top 0.5s linear; -} - -.kf-editor-ui-area-button-container { - display: inline-block; - width: 16px; - height: 100%; - overflow: hidden; - text-align: center; - border: 0 solid #D3D3D3; - border-left-width: 1px; - background-color: #f2f0e6; -} - -.kf-editor-ui-moveup-button, .kf-editor-ui-movedown-button { - line-height: 25px; - height: 30px; -} - -.kf-editor-ui-moveup-button { - background: url("../images/toolbar/btn.png") -304px 9px no-repeat; -} - -.kf-editor-ui-movedown-button { - border: 1px solid #D3D3D3; - border-width: 1px 0; - background: url("../images/toolbar/btn.png") -325px 9px no-repeat; -} - -.kf-editor-ui-area-button { - width: 100%; - height: 50px; - line-height: 26px; - background: url("../images/toolbar/btn.png") -346px 0 no-repeat; -} - -.kf-editor-ui-enabled .kf-editor-ui-area-button:HOVER { - background-color: #e5e4e1; -} - -.kf-editor-ui-enabled .kf-editor-ui-moveup-button:HOVER { - background-color: #e5e4e1; -} - -.kf-editor-ui-enabled .kf-editor-ui-movedown-button:HOVER { - background-color: #e5e4e1; -} - -.kf-editor-ui-area-button-container .kf-editor-ui-disabled { - opacity: 0.25; - background-color: transparent!important; -} - -.kf-editor-ui-area-mount { - position: absolute; - top: 0; - left: 0; - display: none; -} - -.kf-editor-ui-overlap-title { - width: 100%; - line-height: 1.5; -} - -/* list */ -.kf-editor-ui-list { - background: #f9f8f5; - border: 1px solid #b3aead; - border-radius: 3px; - position: fixed; - top: 0; - left: 0; - box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.11); -} - -.kf-editor-ui-list-bg { - display: none; -} - -.kf-editor-ui-list-item-container { - position: relative; - top: 0; - left: 0; - z-index: 2; -} - -.kf-editor-ui-list-item { - line-height: 24px; - padding: 2px 6px; - border: 1px solid transparent; - border-width: 1px 0; -} - -.kf-editor-ui-list-item-select { - color: #61b864; - font-weight: bold; -} - -.kf-editor-ui-list-item-select .kf-editor-ui-list-item-icon { - visibility: visible; - width: 16px; - height: 16px; - background: url(../images/toolbar/btn.png) no-repeat -367px 0; -} - -.kf-editor-ui-list-item:HOVER { - border-color: #beddbf; - background-color: #ecf3e9; -} - -.kf-editor-ui-list-item-icon { - width: 16px; - height: 16px; - display: inline-block; - vertical-align: middle; - margin-top: -2px; - margin-right: 4px; - visibility: hidden; -} - -/* area 内容区 */ -.kf-editor-ui-area-item { - width: 26px; - height: 26px; - position: absolute; - top: 0; - left: 0; -} - -.kf-editor-ui-area-item-inner { - width: 34px; - height: 34px; - border: 1px solid white; - position: absolute; - top: -4px; - left: -4px; - -webkit-transition: all 0.1s linear; - -moz-transition: all 0.1s linear; - transition: all 0.1s linear; - - -webkit-transform: scale( 0.76 ); - -moz-transform: scale( 0.76 ); - transform: scale( 0.76 ); -} - -.kf-editor-ui-enabled .kf-editor-ui-area-item-inner:HOVER { - border-color: #dff3df; - - -webkit-transform: scale( 1 ); - -moz-transform: scale( 1 ); - transform: scale( 1 ); -} - -.kf-editor-ui-area-item-img { - width: 32px; - height: 32px; - border: 1px solid #808080; - -webkit-transition: all 0.1s linear; - -moz-transition: all 0.1s linear; - transition: all 0.1s linear; -} - -.kf-editor-ui-enabled .kf-editor-ui-area-item-inner:HOVER .kf-editor-ui-area-item-img { - border-color: #6eb864; -} - -.kf-editor-ui-enabled { - opacity: 1; -} - -.kf-editor-ui-overlap-container .kf-editor-ui-box-item { - width: 34px; - height: 34px; - border: 1px solid white; -} - -.kf-editor-ui-overlap-container .kf-editor-ui-box-item-content:HOVER { -} - -.kf-editor-ui-overlap-container .kf-editor-ui-box-item-val { - width: 32px; - height: 32px; -} - -/* scrollbar */ -.kf-editor-ui-box::-webkit-scrollbar { - width: 17px; - background: url(../images/scrollbar/custom/bg.png) 0 0 repeat-y white; -} - -.kf-editor-ui-box::-webkit-scrollbar-button:end:increment { - height: 5px; - background: url(../images/scrollbar/custom/down.png) 0 0 repeat-y white; -} -/*定义滚动条渐减按扭的样式 */ -.kf-editor-ui-box::-webkit-scrollbar-button:start:decrement { - height: 5px; - background: url(../images/scrollbar/custom/up.png) 0 0 repeat-y white; -} - -/* 垂直滚动条的第三层轨道的上段 */ -.kf-editor-ui-box::-webkit-scrollbar-track-piece:vertical:start { - background-image: url(../images/scrollbar/custom/top.png), url(../images/scrollbar/custom/bg.png); - background-repeat: no-repeat, repeat-y; -} -/* 垂直滚动条的第三层轨道的下段 */ -.kf-editor-ui-box::-webkit-scrollbar-track-piece:vertical:end { - background-image: url(../images/scrollbar/custom/bottom.png), url(../images/scrollbar/custom/bg.png); - background-repeat: no-repeat, repeat-y; - background-position: 0 bottom, 0 0; -} -/* 垂直滚动条的滑动块 */ -.kf-editor-ui-box::-webkit-scrollbar-thumb:vertical { - /*background: url(./images2/bar.png) 6px 0 no-repeat;*/ - /*background-size: 6px;*/ - -webkit-border-image: url(../images/scrollbar/custom/bar.png) 8; - border-width: 10px; -} - -.kf-editor-ui-wrap-group::-webkit-scrollbar { - width: 17px; - background: url(../images/scrollbar/custom/bg.png) 0 0 repeat-y white; -} - -.kf-editor-ui-wrap-group::-webkit-scrollbar-button:end:increment { - height: 5px; - background: url(../images/scrollbar/custom/down.png) 0 0 repeat-y white; -} -/*定义滚动条渐减按扭的样式 */ -.kf-editor-ui-wrap-group::-webkit-scrollbar-button:start:decrement { - height: 5px; - background: url(../images/scrollbar/custom/up.png) 0 0 repeat-y white; -} - -/* 垂直滚动条的第三层轨道的上段 */ -.kf-editor-ui-wrap-group::-webkit-scrollbar-track-piece:vertical:start { - background-image: url(../images/scrollbar/custom/top.png), url(../images/scrollbar/custom/bg.png); - background-repeat: no-repeat, repeat-y; -} -/* 垂直滚动条的第三层轨道的下段 */ -.kf-editor-ui-wrap-group::-webkit-scrollbar-track-piece:vertical:end { - background-image: url(../images/scrollbar/custom/bottom.png), url(../images/scrollbar/custom/bg.png); - background-repeat: no-repeat, repeat-y; - background-position: 0 bottom, 0 0; -} -/* 垂直滚动条的滑动块 */ -.kf-editor-ui-wrap-group::-webkit-scrollbar-thumb:vertical { - -webkit-border-image: url(../images/scrollbar/custom/bar.png) 8; - border-width: 10px; -} \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/fui.css b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/fui.css deleted file mode 100644 index de07bba550fb8ebfbf732e4a1990cb6c19f7854b..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/fui.css +++ /dev/null @@ -1,540 +0,0 @@ -/** - * 所有构件样式规则 - **/ -/** - * FUI 通用样式定义 - */ -/*------------ var*/ -/*------------ mixin*/ -.fui-widget { - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-user-drag: none; - color: #000000; - line-height: 1.5; - font-size: 12px; - font-family: "ff-tisa-web-pro-1", "ff-tisa-web-pro-2", "Lucida Grande", "Hiragino Sans GB", "Hiragino Sans GB W3", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif; - -webkit-font-smoothing: antialiased; - outline: none; - display: inline-block; - vertical-align: top; - position: relative; - top: 0; - left: 0; -} -.fui-widget.fui-selectable { - -webkit-user-select: text; - -khtml-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - -webkit-user-drag: text; -} -.fui-widget * { - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-user-drag: none; -} -.fui-widget.fui-disabled { - opacity: 0.3!important; -} -.fui-widget.fui-hide { - display: none!important; -} -.fui-widget.fui-mask-animate { - -webkit-transition: all 0.2s; -} -.fui-widget.fui-mask-hint { - -webkit-transform: perspective(600px) translateZ(30px); -} - -/** - * 容器类通用样式 - **/ -/** - * FUI 通用样式定义 - */ -/*------------ var*/ -/*------------ mixin*/ -.fui-container { - overflow: hidden; - position: relative; - top: 0; - left: 0; -} -.fui-container.fui-disabled { - opacity: 1!important; -} - -/** - * FUI 通用样式定义 - */ -/*------------ var*/ -/*------------ mixin*/ -.fui-button-menu { - border: 1px solid white; -} -.fui-button-menu:HOVER { - border-color: #d5e1f2; -} -.fui-button-menu.fui-button-active { - border-color: #d5e1f2; - background: #d5e1f2; -} -.fui-button-menu.fui-button-active .fui-button { - background: #d5e1f2; -} -.fui-button-menu.fui-layout-top, -.fui-button-menu.fui-layout-bottom { - text-align: center; -} -.fui-button-menu.fui-layout-top .fui-open-btn, -.fui-button-menu.fui-layout-bottom .fui-open-btn { - display: block; -} - -/** - * 通用button - */ -/** - * FUI 通用样式定义 - */ -/*------------ var*/ -/*------------ mixin*/ -.fui-button { - overflow: hidden; - cursor: default; - font-size: 0; -} -.fui-button ._layout .fui-label { - display: block; -} -.fui-button ._layout .fui-icon { - display: block; -} -.fui-button .fui-icon { - display: inline-block; - vertical-align: middle; -} -.fui-button .fui-label { - display: inline-block; - vertical-align: middle; -} -.fui-button.fui-button-layout-top .fui-label { - display: block; -} -.fui-button.fui-button-layout-top .fui-icon { - display: block; -} -.fui-button.fui-button-layout-bottom .fui-label { - display: block; -} -.fui-button.fui-button-layout-bottom .fui-icon { - display: block; -} -.fui-button:HOVER { - background-color: #d5e1f2 !important; - color: #000000 !important; -} -.fui-button:ACTIVE { - background-color: #87a9da !important; - color: #000000 !important; -} -.fui-button.fui-disabled:HOVER { - background-color: #ffffff !important; - color: #000000 !important; -} -.fui-button.fui-disabled:ACTIVE { - background-color: #ffffff !important; - color: #000000 !important; -} - -/** - * FUI 通用样式定义 - */ -/*------------ var*/ -/*------------ mixin*/ -.fui-colorpicker { - background-color: #fff; -} -.fui-colorpicker-container { - border: 1px solid #d3d3d3; -} -.fui-colorpicker-container .fui-colorpicker-title { - background: #eee; - padding: 2px 4px; -} -.fui-colorpicker-container .fui-colorpicker-colors { - margin: 0; - padding: 0; - font-size: 0; - line-height: 0; -} -.fui-colorpicker-container .fui-colorpicker-colors-line0 { - margin-bottom: 3px; -} -.fui-colorpicker-container .fui-colorpicker-item { - display: inline-block; - margin: 0 2px; - width: 13px; - height: 13px; - border-style: solid; - border-width: 1px; -} -.fui-colorpicker-container .fui-colorpicker-commoncolor, -.fui-colorpicker-container .fui-colorpicker-standardcolor { - margin: 4px 3px; - white-space: nowrap; -} -.fui-colorpicker-container .fui-colorpicker-toolbar { - margin: 4px; - height: 27px; -} -.fui-colorpicker-container .fui-colorpicker-toolbar .fui-colorpicker-preview { - display: inline-block; - height: 25px; - line-height: 25px; - width: 120px; - border: 1px solid #d3d3d3; -} -.fui-colorpicker-container .fui-colorpicker-toolbar .fui-colorpicker-clear { - display: inline-block; - height: 25px; - line-height: 25px; - width: 60px; - border: 1px solid #d3d3d3; - font-size: 12px; - text-align: center; - position: absolute; - right: 5px; - cursor: pointer; -} - -/** - * FUI 通用样式定义 - */ -/*------------ var*/ -/*------------ mixin*/ - -/** - * 通用button - */ -/** - * FUI 通用样式定义 - */ -/*------------ var*/ -/*------------ mixin*/ -.fui-dialog { - position: fixed; - top: -1000000px; - left: -100000px; - border: 1px solid #B1B1B1; - background: #fff; -} -.fui-dialog .fui-panel-content { - width: auto!important; - height: auto!important; - padding: 2px; -} -.fui-dialog .fui-dialog-caption { - margin: 0; - padding: 5px; - font-size: 16px; - font-weight: normal; - line-height: 1; - display: inline-block; -} -.fui-dialog .fui-dialog-head .fui-close-button { - float: right; -} -.fui-dialog .fui-dialog-head .fui-close-button .fui-close-button-icon { - width: 16px; - height: 16px; - background: url("images/close.png") no-repeat 0 0; -} - -/** - * FUI 通用样式定义 - */ -/*------------ var*/ -/*------------ mixin*/ -.fui-drop-panel { - border: 1px solid #d3d3d3; - overflow: hidden; - position: relative; -} -.fui-drop-panel .fui-drop-panel-content { - display: inline-block; -} -.fui-drop-panel .fui-drop-panel-placeholder { - display: none; -} -.fui-drop-panel .fui-drop-panel-button { - border-left: 1px solid #d3d3d3; - visibility: visible; -} -.fui-drop-panel .fui-drop-panel-button:HOVER { - border-color: #d5e1f2; -} -.fui-drop-panel .fui-drop-panel-button:ACTIVE { - border-color: #87a9da; -} -.fui-drop-panel:HOVER { - border-color: #d5e1f2; -} -.fui-drop-panel:HOVER .fui-drop-panel-button { - border-left-color: #d5e1f2; -} -.fui-drop-panel:ACTIVE { - border-color: #87a9da; -} -.fui-drop-panel:ACTIVE .fui-drop-panel-button { - border-left-color: #d5e1f2; -} -.fui-drop-panel.fui-drop-panel-open { - overflow: visible; -} -.fui-drop-panel.fui-drop-panel-open .fui-drop-panel-content { - border: 1px solid #d3d3d3; - position: absolute; - top: -1px; - left: -1px; -} -.fui-drop-panel.fui-drop-panel-open .fui-drop-panel-button { - visibility: hidden; -} -.fui-drop-panel.fui-drop-panel-open .fui-drop-panel-placeholder { - display: inline-block; -} -.fui-drop-panel-popup { - border: 1px solid #d3d3d3; -} -.fui-drop-panel-popup:HOVER { - border-color: #d5e1f2; -} -.fui-drop-panel-popup:HOVER .fui-drop-panel-button { - border-left-color: #d5e1f2; -} -.fui-drop-panel-popup:ACTIVE { - border-color: #87a9da; -} -.fui-drop-panel-popup:ACTIVE .fui-drop-panel-button { - border-left-color: #d5e1f2; -} - -.fui-icon { - text-align: center; - font-size: 0; -} -.fui-icon img { - display: inline-block; -} - -/** - * FUI 通用样式定义 - */ -/*------------ var*/ -/*------------ mixin*/ -.fui-input-button { - border: 1px solid #ababab; -} -.fui-input-button .fui-input { - vertical-align: middle; - border: none!important; -} -.fui-input-button .fui-button { - vertical-align: middle; -} -.fui-input-button:HOVER { - border-color: #87a9da; -} -.fui-input-button:ACTIVE { - border-color: #87a9da; -} - -/** - * FUI 通用样式定义 - */ -/*------------ var*/ -/*------------ mixin*/ -.fui-input { - border: 1px solid #d3d3d3; - padding: 1px; - margin: 0; -} -.fui-input:HOVER, -.fui-input:FOCUS { - border-color: #4d90fe!important; -} - -/** - * FUI 通用样式定义 - */ -/*------------ var*/ -/*------------ mixin*/ -.fui-item { - font-size: 0; -} -.fui-item .fui-icon { - vertical-align: middle; -} -.fui-item .fui-label { - vertical-align: middle; -} -.fui-item.fui-item-selected { - background: #87a9da; -} - -/** - * FUI 通用样式定义 - */ -/*------------ var*/ -/*------------ mixin*/ -.fui-label-panel .fui-label-panel-label { - width: 100%; - color: #666; -} -.fui-label-panel.fui-no-position .fui-label-panel-label { - position: static!important; -} -.fui-label-panel.fui-layout-bottom .fui-label-panel-label { - position: absolute; - bottom: 0; - left: 0; - top: auto; - z-index: 2; -} - -.fui-label { - cursor: default; - display: inline-block; - white-space: nowrap; -} - -/** - * 通用button - */ -.fui-mask { - position: fixed; - z-index: 99998; -} - -/** - * FUI 通用样式定义 - */ -/*------------ var*/ -/*------------ mixin*/ -.fui-menu { - background-color: #fff; - border: 1px solid #d3d3d3; -} -.fui-menu .fui-item { - padding: 2px 5px; - display: block!important; -} -.fui-menu .fui-item:HOVER { - background: #d5e1f2; -} - -/** - * 通用button - */ -/** - * FUI 通用样式定义 - */ -/*------------ var*/ -/*------------ mixin*/ -.fui-panel { - display: inline-block; - vertical-align: top; - overflow-y: auto; - overflow-x: hidden; -} -.fui-panel .fui-panel-content { - position: relative; - top: 0; - left: 0; -} -.fui-panel .fui-panel-content { - width: 100%; - height: 100%; -} -.fui-panel.fui-container-column { - font-size: 0; -} -.fui-panel.fui-container-column .fui-column { - display: block; -} - -/** - * 通用button - */ -.fui-ppanel::-webkit-scrollbar { - width: 15px; -} -.fui-ppanel::-webkit-scrollbar-button:start:decrement, -.fui-ppanel::-webkit-scrollbar-button:end:decrement, -.fui-ppanel::-webkit-scrollbar-button:start:increment, -.fui-ppanel::-webkit-scrollbar-button:end:increment, -.fui-ppanel::-webkit-scrollbar-thumb { - border: 1px solid #e7e7e7; -} -.fui-ppanel.fui-ppanel-position { - position: fixed; - z-index: 99999; -} - -/** - * FUI 通用样式定义 - */ -/*------------ var*/ -/*------------ mixin*/ -.fui-separator { - background: #6d6d6d; -} - -/** - * Spin-button - */ -.fui-spin-button .fui-spin-up-btn .fui-icon, -.fui-spin-button .fui-spin-down-btn .fui-icon { - width: 16px; - height: 9px; - background: url("images/up.png") no-repeat 3px 1.5px; -} -.fui-spin-button .fui-spin-down-btn .fui-icon { - background-image: url("images/down.png"); -} - -/** - * 通用button - */ -/** - * FUI 通用样式定义 - */ -/*------------ var*/ -/*------------ mixin*/ -.fui-tabs .fui-selected { - background-color: #d5e1f2; -} - -/** - * 可切换Button (ToggleButton) - */ -/** - * FUI 通用样式定义 - */ -/*------------ var*/ -/*------------ mixin*/ -.fui-toggle-button.fui-button-pressed { - background-color: #aec5e6; -} -.fui-toggle-button.fui-button-pressed.fui-disabled { - background-color: #aec5e6 !important; -} diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/fui.min.css b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/fui.min.css deleted file mode 100644 index 3faab2ac1ea32991c667e6ff208385bbb4f6a06b..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/fui.min.css +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * ==================================================== - * Themes file * Flex UI - v1.0.0 - 2014-07-28 - * https://github.com/fex-team/fui - * GitHub: https://github.com/fex-team/fui.git - * Copyright (c) 2014 Baidu Kity Group; Licensed MIT - * ==================================================== - */ - -.fui-widget{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-drag:none;color:#000;line-height:1.5;font-size:12px;font-family:ff-tisa-web-pro-1,ff-tisa-web-pro-2,"Lucida Grande","Hiragino Sans GB","Hiragino Sans GB W3","Microsoft YaHei","WenQuanYi Micro Hei",sans-serif;-webkit-font-smoothing:antialiased;outline:0;display:inline-block;vertical-align:top;position:relative;top:0;left:0}.fui-widget.fui-selectable{-webkit-user-select:text;-khtml-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;-webkit-user-drag:text}.fui-widget *{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-drag:none}.fui-widget.fui-disabled{opacity:.3!important}.fui-widget.fui-hide{display:none!important}.fui-widget.fui-mask-animate{-webkit-transition:all .2s}.fui-widget.fui-mask-hint{-webkit-transform:perspective(600px) translateZ(30px)}.fui-container{overflow:hidden;position:relative;top:0;left:0}.fui-container.fui-disabled{opacity:1!important}.fui-button-menu{border:1px solid #fff}.fui-button-menu:HOVER{border-color:#d5e1f2}.fui-button-menu.fui-button-active{border-color:#d5e1f2;background:#d5e1f2}.fui-button-menu.fui-button-active .fui-button{background:#d5e1f2}.fui-button-menu.fui-layout-bottom,.fui-button-menu.fui-layout-top{text-align:center}.fui-button-menu.fui-layout-bottom .fui-open-btn,.fui-button-menu.fui-layout-top .fui-open-btn{display:block}.fui-button{overflow:hidden;cursor:default;font-size:0}.fui-button ._layout .fui-icon,.fui-button ._layout .fui-label{display:block}.fui-button .fui-icon,.fui-button .fui-label{display:inline-block;vertical-align:middle}.fui-button.fui-button-layout-bottom .fui-icon,.fui-button.fui-button-layout-bottom .fui-label,.fui-button.fui-button-layout-top .fui-icon,.fui-button.fui-button-layout-top .fui-label{display:block}.fui-button:HOVER{background-color:#d5e1f2!important;color:#000!important}.fui-button:ACTIVE{background-color:#87a9da!important;color:#000!important}.fui-button.fui-disabled:ACTIVE,.fui-button.fui-disabled:HOVER{background-color:#fff!important;color:#000!important}.fui-colorpicker{background-color:#fff}.fui-colorpicker-container{border:1px solid #d3d3d3}.fui-colorpicker-container .fui-colorpicker-title{background:#eee;padding:2px 4px}.fui-colorpicker-container .fui-colorpicker-colors{margin:0;padding:0;font-size:0;line-height:0}.fui-colorpicker-container .fui-colorpicker-colors-line0{margin-bottom:3px}.fui-colorpicker-container .fui-colorpicker-item{display:inline-block;margin:0 2px;width:13px;height:13px;border-style:solid;border-width:1px}.fui-colorpicker-container .fui-colorpicker-commoncolor,.fui-colorpicker-container .fui-colorpicker-standardcolor{margin:4px 3px;white-space:nowrap}.fui-colorpicker-container .fui-colorpicker-toolbar{margin:4px;height:27px}.fui-colorpicker-container .fui-colorpicker-toolbar .fui-colorpicker-preview{display:inline-block;height:25px;line-height:25px;width:120px;border:1px solid #d3d3d3}.fui-colorpicker-container .fui-colorpicker-toolbar .fui-colorpicker-clear{display:inline-block;height:25px;line-height:25px;width:60px;border:1px solid #d3d3d3;font-size:12px;text-align:center;position:absolute;right:5px;cursor:pointer}.fui-dialog{position:fixed;top:-1000000px;left:-100000px;border:1px solid #B1B1B1;background:#fff}.fui-dialog .fui-panel-content{width:auto!important;height:auto!important;padding:2px}.fui-dialog .fui-dialog-caption{margin:0;padding:5px;font-size:16px;font-weight:400;line-height:1;display:inline-block}.fui-dialog .fui-dialog-head .fui-close-button{float:right}.fui-dialog .fui-dialog-head .fui-close-button .fui-close-button-icon{width:16px;height:16px;background:url(images/close.png) no-repeat}.fui-drop-panel{border:1px solid #d3d3d3;overflow:hidden;position:relative}.fui-drop-panel .fui-drop-panel-content{display:inline-block}.fui-drop-panel .fui-drop-panel-placeholder{display:none}.fui-drop-panel .fui-drop-panel-button{border-left:1px solid #d3d3d3;visibility:visible}.fui-drop-panel .fui-drop-panel-button:HOVER{border-color:#d5e1f2}.fui-drop-panel .fui-drop-panel-button:ACTIVE{border-color:#87a9da}.fui-drop-panel:HOVER{border-color:#d5e1f2}.fui-drop-panel:HOVER .fui-drop-panel-button{border-left-color:#d5e1f2}.fui-drop-panel:ACTIVE{border-color:#87a9da}.fui-drop-panel:ACTIVE .fui-drop-panel-button{border-left-color:#d5e1f2}.fui-drop-panel.fui-drop-panel-open{overflow:visible}.fui-drop-panel.fui-drop-panel-open .fui-drop-panel-content{border:1px solid #d3d3d3;position:absolute;top:-1px;left:-1px}.fui-drop-panel.fui-drop-panel-open .fui-drop-panel-button{visibility:hidden}.fui-drop-panel.fui-drop-panel-open .fui-drop-panel-placeholder{display:inline-block}.fui-drop-panel-popup{border:1px solid #d3d3d3}.fui-drop-panel-popup:HOVER{border-color:#d5e1f2}.fui-drop-panel-popup:HOVER .fui-drop-panel-button{border-left-color:#d5e1f2}.fui-drop-panel-popup:ACTIVE{border-color:#87a9da}.fui-drop-panel-popup:ACTIVE .fui-drop-panel-button{border-left-color:#d5e1f2}.fui-icon{text-align:center;font-size:0}.fui-icon img{display:inline-block}.fui-input-button{border:1px solid #ababab}.fui-input-button .fui-input{vertical-align:middle;border:none!important}.fui-input-button .fui-button{vertical-align:middle}.fui-input-button:ACTIVE,.fui-input-button:HOVER{border-color:#87a9da}.fui-input{border:1px solid #d3d3d3;padding:1px;margin:0}.fui-input:FOCUS,.fui-input:HOVER{border-color:#4d90fe!important}.fui-item{font-size:0}.fui-item .fui-icon,.fui-item .fui-label{vertical-align:middle}.fui-item.fui-item-selected{background:#87a9da}.fui-label-panel .fui-label-panel-label{width:100%;color:#666}.fui-label-panel.fui-no-position .fui-label-panel-label{position:static!important}.fui-label-panel.fui-layout-bottom .fui-label-panel-label{position:absolute;bottom:0;left:0;top:auto;z-index:2}.fui-label{cursor:default;display:inline-block;white-space:nowrap}.fui-mask{position:fixed;z-index:99998}.fui-menu{background-color:#fff;border:1px solid #d3d3d3}.fui-menu .fui-item{padding:2px 5px;display:block!important}.fui-menu .fui-item:HOVER{background:#d5e1f2}.fui-panel{display:inline-block;vertical-align:top;overflow-y:auto;overflow-x:hidden}.fui-panel .fui-panel-content{position:relative;top:0;left:0;width:100%;height:100%}.fui-panel.fui-container-column{font-size:0}.fui-panel.fui-container-column .fui-column{display:block}.fui-ppanel::-webkit-scrollbar{width:15px}.fui-ppanel::-webkit-scrollbar-button:end:decrement,.fui-ppanel::-webkit-scrollbar-button:end:increment,.fui-ppanel::-webkit-scrollbar-button:start:decrement,.fui-ppanel::-webkit-scrollbar-button:start:increment,.fui-ppanel::-webkit-scrollbar-thumb{border:1px solid #e7e7e7}.fui-ppanel.fui-ppanel-position{position:fixed;z-index:99999}.fui-separator{background:#6d6d6d}.fui-spin-button .fui-spin-down-btn .fui-icon,.fui-spin-button .fui-spin-up-btn .fui-icon{width:16px;height:9px;background:url(images/up.png) 3px 1.5px no-repeat}.fui-spin-button .fui-spin-down-btn .fui-icon{background-image:url(images/down.png)}.fui-tabs .fui-selected{background-color:#d5e1f2}.fui-toggle-button.fui-button-pressed{background-color:#aec5e6}.fui-toggle-button.fui-button-pressed.fui-disabled{background-color:#aec5e6!important} \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/close.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/close.png deleted file mode 100644 index 4f8885f47e0ce084c2a963bad9a3d9998e4c292d..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/close.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/down.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/down.png deleted file mode 100644 index cf92db68069cad3c42ef007f543f905fe00fb2b3..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/down.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/open.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/open.png deleted file mode 100644 index 861a04e883c7eeabda06bf1ea385218b2c34ff3e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/open.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/up.png b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/up.png deleted file mode 100644 index 4e4a6d1f9831b280fc99774f19b835ae0ff96c7e..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/up.png and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/js/jquery-3.6.0.min.js b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/js/jquery-3.6.0.min.js deleted file mode 100644 index c4c6022f2982e8dae64cebd6b9a2b59f2547faad..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/js/jquery-3.6.0.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.6.0 | (c) OpenJS 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=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},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&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,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.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(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(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),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-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|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(p.childNodes),p.childNodes),t[p.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&&(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&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$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[S]=!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&&e.namespaceURI,n=e&&(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:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),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=S,!C.getElementsByName||!C.getElementsByName(S).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){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),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("!=",F)}),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},j=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==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,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]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[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){N(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=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(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)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.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 S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.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(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(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;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={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)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").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 _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.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(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.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?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
                ",2===_t.childNodes.length),S.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=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.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,S.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)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.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"===S.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"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.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)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.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?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.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){S.fn[n]=function(e,t){return 0p;p++)k=n[p],k!==h?k?"string"==typeof k?(n[p]="brackets"===e.name&&2>p?k:"function"===e.name&&0===p?k:c("text",k),f.operand.push(n[p])):(f.operand.push({}),n[p]=b(a.operand[p],k,f.operand[f.operand.length-1],g,i)):(n[p]=c("empty"),f.operand.push(n[p])):(m.push(p),i.hasOwnProperty("startOffset")||(i.startOffset=p),i.endOffset=p,e.attr&&e.attr.id&&(i.groupId=e.attr.id));for(2===m.length&&(i.endOffset-=1);p=m.length;)p=m[p-1],n.splice(p,1),m.length--,a.operand.splice(p,1)}if(o=d(e.name),!o)throw new Error("operator type error: not found "+e.operator);j=function(){},j.prototype=o.prototype,l=new j,o.apply(l,n),f.func=l;for(var r in e.callFn)e.callFn.hasOwnProperty(r)&&l[r]&&l[r].apply(l,e.callFn[r]);return e.attr&&(e.attr.id&&(g[e.attr.id]={objGroup:l,strGroup:a}),e.attr["data-root"]&&(g.root={objGroup:l,strGroup:a}),l.setAttr(e.attr)),l}function c(a,b){switch(a){case"empty":return new kf.EmptyExpression;case"text":return new kf.TextExpression(b)}}function d(a){return g[a]||kf[a.replace(/^[a-z]/i,function(a){return a.toUpperCase()}).replace(/-([a-z])/gi,function(a,b){return b.toUpperCase()})+"Expression"]}function e(a){var b={};if("[object Array]"==={}.toString.call(a)){b=[];for(var c=0,d=a.length;d>c;c++)b[c]=f(a[c])}else for(var e in a)a.hasOwnProperty(e)&&(b[e]=f(a[e]));return b}function f(a){return a?"object"!=typeof a?a:e(a):a}var g={},h="\uf155";return a.prototype.generateBy=function(a){var c=a.tree,d={},f={},g={};if("string"==typeof c)throw new Error("Unhandled error");return this.formula.appendExpression(b(c,e(c),d,g,f)),{select:f,parsedTree:c,tree:d,mapping:g}},a.prototype.regenerateBy=function(a){return this.formula.clearExpressions(),this.generateBy(a)},a}},b[1]={value:function(){return{toRPNExpression:b.r(2),generateTree:b.r(3)}}},b[2]={value:function(){function a(b){var e=[],f=null;for(b=c(b);f=b.shift();)"combination"===f.name&&1===f.operand.length&&"brackets"===f.operand[0].name&&(f=f.operand[0]),e.push(d.isArray(f)?a(f):f);return e}function c(a){for(var b=[],c=null;void 0!==(c=a.pop());)if(!c||"object"!=typeof c||c.sign!==!1&&"function"!==c.name)b.push(c);else{var d=c.handler(c,[],b.reverse());b.unshift(d),b.reverse()}return b.reverse()}var d=b.r(4);return a}},b[3]={value:function(){function a(b){for(var e=null,f=[],g=0,h=b.length;h>g;g++)d.isArray(b[g])&&(b[g]=a(b[g]));for(;e=b.shift();)f.push("object"==typeof e&&e.handler?e.handler(e,f,b):e);return c(f)}var c=b.r(13),d=b.r(4);return a}},b[4]={value:function(){var a=b.r(7),c=b.r(6),d=b.r(15),e={getLatexType:function(b){return b=b.replace(/^\\/,""),a[b]?"operator":c[b]?"function":"text"},isArray:function(a){return a&&"[object Array]"===Object.prototype.toString.call(a)},getDefine:function(b){return e.extend({},a[b.replace("\\","")])},getFuncDefine:function(a){return{name:"function",params:a.replace(/^\\/,""),handler:d}},getBracketsDefine:function(b,c){return e.extend({params:[b,c]},a.brackets)},extend:function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}};return e}},b[5]={value:function(){var a=!0;return{".":a,"{":a,"}":a,"[":a,"]":a,"(":a,")":a,"|":a}}},b[6]={value:function(){return{sin:1,cos:1,arccos:1,cosh:1,det:1,inf:1,limsup:1,Pr:1,tan:1,arcsin:1,cot:1,dim:1,ker:1,ln:1,sec:1,tanh:1,arctan:1,coth:1,exp:1,lg:1,log:1,arg:1,csc:1,gcd:1,lim:1,max:1,sinh:1,deg:1,hom:1,liminf:1,min:1,sup:1}}},b[7]={value:function(){var a=b.r(22),c=b.r(11);return{"^":{name:"superscript",type:c.OP,handler:a},_:{name:"subscript",type:c.OP,handler:a},frac:{name:"fraction",type:c.FN,sign:!1,handler:b.r(14)},sqrt:{name:"radical",type:c.FN,sign:!1,handler:b.r(23)},sum:{name:"summation",type:c.FN,traversal:"rtl",handler:b.r(24)},"int":{name:"integration",type:c.FN,traversal:"rtl",handler:b.r(16)},brackets:{name:"brackets",type:c.FN,handler:b.r(12)},mathcal:{name:"mathcal",type:c.FN,sign:!1,handler:b.r(19)},mathfrak:{name:"mathfrak",type:c.FN,sign:!1,handler:b.r(20)},mathbb:{name:"mathbb",type:c.FN,sign:!1,handler:b.r(18)},mathrm:{name:"mathrm",type:c.FN,sign:!1,handler:b.r(21)}}}},b[8]={value:function(){return{"int":b.r(26),quot:b.r(27)}}},b[9]={value:function(){return{combination:b.r(29),fraction:b.r(30),"function":b.r(31),integration:b.r(32),subscript:b.r(39),superscript:b.r(41),script:b.r(37),radical:b.r(38),summation:b.r(40),brackets:b.r(28),mathcal:b.r(34),mathfrak:b.r(35),mathbb:b.r(33),mathrm:b.r(36)}}},b[10]={value:function(){return{"#":1,$:1,"%":1,_:1,"&":1,"{":1,"}":1,"^":1,"~":1}}},b[11]={value:function(){return{OP:1,FN:2}}},b[12]={value:function(){var a=b.r(5);return function(b,c,d){for(var e=0,f=b.params.length;f>e;e++)if(!(b.params[e]in a))throw new Error("Brackets: invalid params");return b.operand=b.params,b.params[2]=d.shift(),delete b.handler,delete b.params,b}}},b[13]={value:function(){return function(){return{name:"combination",operand:arguments[0]||[]}}}},b[14]={value:function(){return function(a,b,c){var d=c.shift(),e=c.shift();if(void 0===d||void 0===e)throw new Error("Frac: Syntax Error");return d.handler&&"integration"===d.name?(d=d.handler(d,b,[e]),e=c.shift()):e.handler&&"integration"===e.name&&(e=e.handler(e,b,[c.shift()])),a.operand=[d,e],delete a.handler,a}}},b[15]={value:function(){var a=b.r(17);return function(b,c,d){var e=a.exec(d);return e.expr&&e.expr.handler&&"integration"===e.expr.name&&(e.expr=e.expr.handler(e.expr,c,[d.shift()])),b.operand=[b.params,e.expr,e.superscript,e.subscript],delete b.params,delete b.handler,b}}},b[16]={value:function(){var a=b.r(17),c=b.r(11).FN;return function(b,d,e){var f=e.shift(),g=a.exec(e);return g.expr&&g.expr.type===c&&g.expr.handler&&"integration"===g.expr.name&&(g.expr=g.expr.handler(g.expr,d,[e.shift()])),b.operand=[g.expr,g.superscript,g.subscript],b.callFn={setType:[0|f]},delete b.handler,b}}},b[17]={value:function(){function a(a){var c=b(a),d=null,e={superscript:null,subscript:null};if(!c)return e;if(d=b(a),e[c.type]=c.value||null,d){if(d.type===c.type)throw new Error("Script: syntax error!");e[d.type]=d.value||null}return e}function b(a){var b=a.shift();return b?"subscript"===b.name||"superscript"===b.name?{type:b.name,value:a.shift()}:(a.unshift(b),null):null}return{exec:function(b){var c=a(b),d=b.shift();if(d&&d.name&&-1!==d.name.indexOf("script"))throw new Error("Script: syntax error!");return c.expr=d||null,c}}}},b[18]={value:function(){return function(a,b,c){var d=c.shift();return"object"==typeof d&&"combination"===d.name&&(d=d.operand.join("")),a.name="text",a.attr={_reverse:"mathbb"},a.callFn={setFamily:["KF AMS BB"]},a.operand=[d],delete a.handler,a}}},b[19]={value:function(){return function(a,b,c){var d=c.shift();return"object"==typeof d&&"combination"===d.name&&(d=d.operand.join("")),a.name="text",a.attr={_reverse:"mathcal"},a.callFn={setFamily:["KF AMS CAL"]},a.operand=[d],delete a.handler,a}}},b[20]={value:function(){return function(a,b,c){var d=c.shift();return"object"==typeof d&&"combination"===d.name&&(d=d.operand.join("")),a.name="text",a.attr={_reverse:"mathfrak"},a.callFn={setFamily:["KF AMS FRAK"]},a.operand=[d],delete a.handler,a}}},b[21]={value:function(){return function(a,b,c){var d=c.shift();return"object"==typeof d&&"combination"===d.name&&(d=d.operand.join("")),a.name="text",a.attr={_reverse:"mathrm"},a.callFn={setFamily:["KF AMS ROMAN"]},a.operand=[d],delete a.handler,a}}},b[22]={value:function(){return function(a,b,c){var d=b.pop(),e=c.shift()||null;if(!e)throw new Error("Missing script");if(d=d||"",d.name===a.name||"script"===d.name)throw new Error("script error");return"subscript"===d.name?(d.name="script",d.operand[2]=d.operand[1],d.operand[1]=e,d):"superscript"===d.name?(d.name="script",d.operand[2]=e,d):(a.operand=[d,e],delete a.handler,a)}}},b[23]={value:function(){var a=b.r(13);return function(b,c,d){var e=d.shift(),f=null,g=null;if("["===e){for(e=[];(f=d.shift())&&"]"!==f;)e.push(f);e=0===e.length?null:a(e),g=d.shift()}else g=e,e=null;return b.operand=[g,e],delete b.handler,b}}},b[24]={value:function(){var a=b.r(17),c=b.r(11).FN;return function(b,d,e){var f=a.exec(e);return f.expr&&f.expr.type===c&&f.expr.handler&&"integration"===f.expr.name&&(f.expr=f.expr.handler(f.expr,d,[e.shift()])),b.operand=[f.expr,f.superscript,f.subscript],delete b.handler,b}}},b[25]={value:function(){function a(a){if(d(a))return a.substring(1);switch(m.getLatexType(a)){case"operator":return m.getDefine(a);case"function":return m.getFuncDefine(a);default:return c(a)}}function c(a){return 0===a.indexOf("\\")?a+"\\":a}function d(a){return 0===a.indexOf("\\")?!!l[a.substring(1)]:!1}function e(a){return a.replace(/\\\s+/,"").replace(/\s*([^a-z0-9\s])\s*/gi,function(a,b){return b})}var f=b.r(43).Parser,g=b.r(1),h=b.r(8),i=b.r(42),j=b.r(7),k=b.r(9),l=b.r(10),m=b.r(4),n="\ufff8",o="\ufffc",p=new RegExp(n+"|"+o,"g"),q=new RegExp(n,"g"),r=new RegExp(o,"g");f.register("latex",f.implement({parse:function(a){var b=this.split(this.format(a));return b=this.parseToGroup(b),b=this.parseToStruct(b),this.generateTree(b)},serialization:function(a,b){return i(a,b)},expand:function(a){var b=a.parse,c=null,d=a.pre,e=a.reverse;for(var f in b)b.hasOwnProperty(f)&&(c=f.replace(/\\/g,""),j[c]=b[f]);for(var f in e)e.hasOwnProperty(f)&&(k[f.replace(/\\/g,"")]=e[f]);if(d)for(var f in d)d.hasOwnProperty(f)&&(h[f.replace(/\\/g,"")]=d[f])},format:function(a){a=e(a),a=a.replace(p,"").replace(/\\{/gi,n).replace(/\\}/gi,o);for(var b in h)h.hasOwnProperty(b)&&(a=h[b](a));return a},split:function(a){var b=[],c=/(?:\\[^a-z]\s*)|(?:\\[a-z]+\s*)|(?:[{}]\s*)|(?:[^\\{}]\s*)/gi,d=/^\s+|\s+$/g,e=null;for(a=a.replace(d,"");e=c.exec(a);)e=e[0].replace(d,""),e&&b.push(e);return b},generateTree:function(a){for(var b=[],c=null;c=a.shift();)b.push(m.isArray(c)?this.generateTree(c):c);return b=g.toRPNExpression(b),g.generateTree(b)},parseToGroup:function(a){for(var b=[],c=[b],d=0,e=0,f=0,g=a.length;g>f;f++)switch(a[f]){case"{":d++,c.push(b),b.push([]),b=b[b.length-1];break;case"}":d--,b=c.pop();break;case"\\left":e++,c.push(b),b.push([[]]),b=b[b.length-1][0],b.type="brackets",f++,b.leftBrackets=a[f].replace(q,"{").replace(r,"}");break;case"\\right":e--,f++,b.rightBrackets=a[f].replace(q,"{").replace(r,"}"),b=c.pop();break;default:b.push(a[f].replace(q,"\\{").replace(r,"\\}"))}if(0!==d)throw new Error("Group Error!");if(0!==e)throw new Error("Brackets Error!");return c[0]},parseToStruct:function(b){for(var c=[],d=0,e=b.length;e>d;d++)m.isArray(b[d])?"brackets"===b[d].type?(c.push(m.getBracketsDefine(b[d].leftBrackets,b[d].rightBrackets)),c.push(this.parseToStruct(b[d]))):c.push(this.parseToStruct(b[d])):c.push(a(b[d]));return c}}))}},b[26]={value:function(){return function(a){return a.replace(/\\(i+)nt(\b|[^a-zA-Z])/g,function(a,b,c){return"\\int "+b.length+c})}}},b[27]={value:function(){return function(a){return a.replace(/``/g,"\u201c")}}},b[28]={value:function(){return function(a){return("{"===a[0]||"}"===a[0])&&(a[0]="\\"+a[0]),("{"===a[1]||"}"===a[1])&&(a[1]="\\"+a[1]),["\\left",a[0],a[2],"\\right",a[1]].join(" ")}}},b[29]={value:function(){return function(a){return this.attr["data-root"]||this.attr["data-placeholder"]?a.join(""):"{"+a.join("")+"}"}}},b[30]={value:function(){return function(a){return"\\frac "+a[0]+" "+a[1]}}},b[31]={value:function(){return function(a){var b=["\\"+a[0]];return a[2]&&b.push("^"+a[2]),a[3]&&b.push("_"+a[3]),a[1]&&b.push(" "+a[1]),b.join("")}}},b[32]={value:function(){return function(a){var b=["\\int "];if(this.callFn&&this.callFn.setType){b=["\\"];for(var c=0,d=this.callFn.setType;d>c;c++)b.push("i");b.push("nt ")}return a[1]&&b.push("^"+a[1]),a[2]&&b.push("_"+a[2]),a[0]&&b.push(" "+a[0]),b.join("")}}},b[33]={value:function(){return function(a){return"\\mathbb{"+a[0]+"}"}}},b[34]={value:function(){return function(a){return"\\mathcal{"+a[0]+"}"}}},b[35]={value:function(){return function(a){return"\\mathfrak{"+a[0]+"}"}}},b[36]={value:function(){return function(a){return"\\mathrm{"+a[0]+"}"}}},b[37]={value:function(){return function(a){return a[0]+"^"+a[1]+"_"+a[2]}}},b[38]={value:function(){return function(a){var b=["\\sqrt"];return a[1]&&b.push("["+a[1]+"]"),b.push(" "+a[0]),b.join("")}}},b[39]={value:function(){return function(a){return a[0]+"_"+a[1]}}},b[40]={value:function(){return function(a){var b=["\\sum "];return a[1]&&b.push("^"+a[1]),a[2]&&b.push("_"+a[2]),a[0]&&b.push(" "+a[0]),b.join("")}}},b[41]={value:function(){return function(a){return a[0]+"^"+a[1]}}},b[42]={value:function(){function a(b,e){var g=[],h=null,i=null;if("object"!=typeof b)return c(b)?"\\"+b+" ":b.replace(f,function(a,b){return b+" "});"combination"===b.name&&1===b.operand.length&&"combination"===b.operand[0].name&&(b=b.operand[0]),i=b.operand;for(var j=0,k=i.length;k>j;j++)g.push(i[j]?a(i[j]):i[j]);return h=b.attr&&b.attr._reverse?b.attr._reverse:b.name,d[h].call(b,g,e)}function c(a){return!!e[a]}var d=b.r(9),e=b.r(10),f=/(\\(?:[\w]+)|(?:[^a-z]))\\/gi;return function(b,c){return a(b,c)}}},b[43]={value:function(a,b,c){function d(a){this.impl=new a,this.conf={}}function e(){this.conf={}}var f={},g={},h={extend:function(a,b){var c=null;b=[].slice.call(arguments,1);for(var d=0,e=b.length;e>d;d++){c=b[d];for(var f in c)c.hasOwnProperty(f)&&(a[f]=c[f])}},setData:function(a,b,c){if("string"==typeof b)a[b]=c;else{if("object"!=typeof b)throw new Error("invalid option");for(c in b)b.hasOwnProperty(c)&&(a[c]=b[c])}}},i={use:function(a){if(!g[a])throw new Error("unknown parser type");return this.proxy(g[a])},config:function(a,b){return h.setData(f,a,b),this},register:function(a,b){return g[a.toLowerCase()]=b,this},implement:function(a){var b=function(){},c=a.constructor||function(){},d=function(){e.call(this),c.call(this)};b.prototype=e.prototype,d.prototype=new b,delete a.constructor;for(var f in a)"constructor"!==f&&a.hasOwnProperty(f)&&(d.prototype[f]=a[f]);return d},proxy:function(a){return new d(a)}};h.extend(d.prototype,{config:function(a,b){h.setData(this.conf,a,b)},set:function(a,b){this.impl.set(a,b)},parse:function(a){var b={config:{},tree:this.impl.parse(a)};return h.extend(b.config,f,this.conf),b},serialization:function(a,b){return this.impl.serialization(a,b)},expand:function(a){this.impl.expand(a)}}),h.extend(e.prototype,{set:function(a,b){h.extend(this.conf,a,b)},parse:function(){throw new Error("Abstract function")}}),c.exports={Parser:i,ParserInterface:e}}},b[44]={value:function(){var a=b.r(43).Parser;b.r(25),window.kf.Parser=a,window.kf.Assembly=b.r(0)}};var c={"kf.start":44};!function(){try{a("kf.start")}catch(b){}}(this)}(); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/js/kity-formula-render.all.js b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/js/kity-formula-render.all.js deleted file mode 100644 index 80665993b6bfe5d26925a5599cecac437f88a1e7..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/js/kity-formula-render.all.js +++ /dev/null @@ -1,5757 +0,0 @@ -/*! - * ==================================================== - * Kity Formula Render - v1.0.0 - 2014-07-30 - * https://github.com/kitygraph/formula - * GitHub: https://github.com/kitygraph/formula.git - * Copyright (c) 2014 Baidu Kity Group; Licensed MIT - * ==================================================== - */ - -(function () { -var _p = { - r: function(index) { - if (_p[index].inited) { - return _p[index].value; - } - if (typeof _p[index].value === "function") { - var module = { - exports: {} - }, returnValue = _p[index].value(null, module.exports, module); - _p[index].inited = true; - _p[index].value = returnValue; - if (returnValue !== undefined) { - return returnValue; - } else { - for (var key in module.exports) { - if (module.exports.hasOwnProperty(key)) { - _p[index].inited = true; - _p[index].value = module.exports; - return module.exports; - } - } - } - } else { - _p[index].inited = true; - return _p[index].value; - } - } -}; - -/*! - * canvg库封装 - * canvg官网: https://code.google.com/p/canvg/ - */ -_p[0] = { - value: function(require) { - /** - * A class to parse color values - * @author Stoyan Stefanov - * @link http://www.phpied.com/rgb-color-parser-in-javascript/ - * @license Use it if you like it - */ - function RGBColor(color_string) { - this.ok = false; - // strip any leading # - if (color_string.charAt(0) == "#") { - // remove # if any - color_string = color_string.substr(1, 6); - } - color_string = color_string.replace(/ /g, ""); - color_string = color_string.toLowerCase(); - // before getting into regexps, try simple matches - // and overwrite the input - var simple_colors = { - aliceblue: "f0f8ff", - antiquewhite: "faebd7", - aqua: "00ffff", - aquamarine: "7fffd4", - azure: "f0ffff", - beige: "f5f5dc", - bisque: "ffe4c4", - black: "000000", - blanchedalmond: "ffebcd", - blue: "0000ff", - blueviolet: "8a2be2", - brown: "a52a2a", - burlywood: "deb887", - cadetblue: "5f9ea0", - chartreuse: "7fff00", - chocolate: "d2691e", - coral: "ff7f50", - cornflowerblue: "6495ed", - cornsilk: "fff8dc", - crimson: "dc143c", - cyan: "00ffff", - darkblue: "00008b", - darkcyan: "008b8b", - darkgoldenrod: "b8860b", - darkgray: "a9a9a9", - darkgreen: "006400", - darkkhaki: "bdb76b", - darkmagenta: "8b008b", - darkolivegreen: "556b2f", - darkorange: "ff8c00", - darkorchid: "9932cc", - darkred: "8b0000", - darksalmon: "e9967a", - darkseagreen: "8fbc8f", - darkslateblue: "483d8b", - darkslategray: "2f4f4f", - darkturquoise: "00ced1", - darkviolet: "9400d3", - deeppink: "ff1493", - deepskyblue: "00bfff", - dimgray: "696969", - dodgerblue: "1e90ff", - feldspar: "d19275", - firebrick: "b22222", - floralwhite: "fffaf0", - forestgreen: "228b22", - fuchsia: "ff00ff", - gainsboro: "dcdcdc", - ghostwhite: "f8f8ff", - gold: "ffd700", - goldenrod: "daa520", - gray: "808080", - green: "008000", - greenyellow: "adff2f", - honeydew: "f0fff0", - hotpink: "ff69b4", - indianred: "cd5c5c", - indigo: "4b0082", - ivory: "fffff0", - khaki: "f0e68c", - lavender: "e6e6fa", - lavenderblush: "fff0f5", - lawngreen: "7cfc00", - lemonchiffon: "fffacd", - lightblue: "add8e6", - lightcoral: "f08080", - lightcyan: "e0ffff", - lightgoldenrodyellow: "fafad2", - lightgrey: "d3d3d3", - lightgreen: "90ee90", - lightpink: "ffb6c1", - lightsalmon: "ffa07a", - lightseagreen: "20b2aa", - lightskyblue: "87cefa", - lightslateblue: "8470ff", - lightslategray: "778899", - lightsteelblue: "b0c4de", - lightyellow: "ffffe0", - lime: "00ff00", - limegreen: "32cd32", - linen: "faf0e6", - magenta: "ff00ff", - maroon: "800000", - mediumaquamarine: "66cdaa", - mediumblue: "0000cd", - mediumorchid: "ba55d3", - mediumpurple: "9370d8", - mediumseagreen: "3cb371", - mediumslateblue: "7b68ee", - mediumspringgreen: "00fa9a", - mediumturquoise: "48d1cc", - mediumvioletred: "c71585", - midnightblue: "191970", - mintcream: "f5fffa", - mistyrose: "ffe4e1", - moccasin: "ffe4b5", - navajowhite: "ffdead", - navy: "000080", - oldlace: "fdf5e6", - olive: "808000", - olivedrab: "6b8e23", - orange: "ffa500", - orangered: "ff4500", - orchid: "da70d6", - palegoldenrod: "eee8aa", - palegreen: "98fb98", - paleturquoise: "afeeee", - palevioletred: "d87093", - papayawhip: "ffefd5", - peachpuff: "ffdab9", - peru: "cd853f", - pink: "ffc0cb", - plum: "dda0dd", - powderblue: "b0e0e6", - purple: "800080", - red: "ff0000", - rosybrown: "bc8f8f", - royalblue: "4169e1", - saddlebrown: "8b4513", - salmon: "fa8072", - sandybrown: "f4a460", - seagreen: "2e8b57", - seashell: "fff5ee", - sienna: "a0522d", - silver: "c0c0c0", - skyblue: "87ceeb", - slateblue: "6a5acd", - slategray: "708090", - snow: "fffafa", - springgreen: "00ff7f", - steelblue: "4682b4", - tan: "d2b48c", - teal: "008080", - thistle: "d8bfd8", - tomato: "ff6347", - turquoise: "40e0d0", - violet: "ee82ee", - violetred: "d02090", - wheat: "f5deb3", - white: "ffffff", - whitesmoke: "f5f5f5", - yellow: "ffff00", - yellowgreen: "9acd32" - }; - for (var key in simple_colors) { - if (color_string == key) { - color_string = simple_colors[key]; - } - } - // emd of simple type-in colors - // array of color definition objects - var color_defs = [ { - re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/, - example: [ "rgb(123, 234, 45)", "rgb(255,234,245)" ], - process: function(bits) { - return [ parseInt(bits[1]), parseInt(bits[2]), parseInt(bits[3]) ]; - } - }, { - re: /^(\w{2})(\w{2})(\w{2})$/, - example: [ "#00ff00", "336699" ], - process: function(bits) { - return [ parseInt(bits[1], 16), parseInt(bits[2], 16), parseInt(bits[3], 16) ]; - } - }, { - re: /^(\w{1})(\w{1})(\w{1})$/, - example: [ "#fb0", "f0f" ], - process: function(bits) { - return [ parseInt(bits[1] + bits[1], 16), parseInt(bits[2] + bits[2], 16), parseInt(bits[3] + bits[3], 16) ]; - } - } ]; - // search through the definitions to find a match - for (var i = 0; i < color_defs.length; i++) { - var re = color_defs[i].re; - var processor = color_defs[i].process; - var bits = re.exec(color_string); - if (bits) { - channels = processor(bits); - this.r = channels[0]; - this.g = channels[1]; - this.b = channels[2]; - this.ok = true; - } - } - // validate/cleanup values - this.r = this.r < 0 || isNaN(this.r) ? 0 : this.r > 255 ? 255 : this.r; - this.g = this.g < 0 || isNaN(this.g) ? 0 : this.g > 255 ? 255 : this.g; - this.b = this.b < 0 || isNaN(this.b) ? 0 : this.b > 255 ? 255 : this.b; - // some getters - this.toRGB = function() { - return "rgb(" + this.r + ", " + this.g + ", " + this.b + ")"; - }; - this.toHex = function() { - var r = this.r.toString(16); - var g = this.g.toString(16); - var b = this.b.toString(16); - if (r.length == 1) r = "0" + r; - if (g.length == 1) g = "0" + g; - if (b.length == 1) b = "0" + b; - return "#" + r + g + b; - }; - // help - this.getHelpXML = function() { - var examples = new Array(); - // add regexps - for (var i = 0; i < color_defs.length; i++) { - var example = color_defs[i].example; - for (var j = 0; j < example.length; j++) { - examples[examples.length] = example[j]; - } - } - // add type-in colors - for (var sc in simple_colors) { - examples[examples.length] = sc; - } - var xml = document.createElement("ul"); - xml.setAttribute("id", "rgbcolor-examples"); - for (var i = 0; i < examples.length; i++) { - try { - var list_item = document.createElement("li"); - var list_color = new RGBColor(examples[i]); - var example_div = document.createElement("div"); - example_div.style.cssText = "margin: 3px; " + "border: 1px solid black; " + "background:" + list_color.toHex() + "; " + "color:" + list_color.toHex(); - example_div.appendChild(document.createTextNode("test")); - var list_item_value = document.createTextNode(" " + examples[i] + " -> " + list_color.toRGB() + " -> " + list_color.toHex()); - list_item.appendChild(example_div); - list_item.appendChild(list_item_value); - xml.appendChild(list_item); - } catch (e) {} - } - return xml; - }; - } - /* - - StackBlur - a fast almost Gaussian Blur For Canvas - - Version: 0.5 - Author: Mario Klingemann - Contact: mario@quasimondo.com - Website: http://www.quasimondo.com/StackBlurForCanvas - Twitter: @quasimondo - - In case you find this class useful - especially in commercial projects - - I am not totally unhappy for a small donation to my PayPal account - mario@quasimondo.de - - Or support me on flattr: - https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript - - Copyright (c) 2010 Mario Klingemann - - 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. - */ - var mul_table = [ 512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292, 512, 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292, 273, 512, 482, 454, 428, 405, 383, 364, 345, 328, 312, 298, 284, 271, 259, 496, 475, 456, 437, 420, 404, 388, 374, 360, 347, 335, 323, 312, 302, 292, 282, 273, 265, 512, 497, 482, 468, 454, 441, 428, 417, 405, 394, 383, 373, 364, 354, 345, 337, 328, 320, 312, 305, 298, 291, 284, 278, 271, 265, 259, 507, 496, 485, 475, 465, 456, 446, 437, 428, 420, 412, 404, 396, 388, 381, 374, 367, 360, 354, 347, 341, 335, 329, 323, 318, 312, 307, 302, 297, 292, 287, 282, 278, 273, 269, 265, 261, 512, 505, 497, 489, 482, 475, 468, 461, 454, 447, 441, 435, 428, 422, 417, 411, 405, 399, 394, 389, 383, 378, 373, 368, 364, 359, 354, 350, 345, 341, 337, 332, 328, 324, 320, 316, 312, 309, 305, 301, 298, 294, 291, 287, 284, 281, 278, 274, 271, 268, 265, 262, 259, 257, 507, 501, 496, 491, 485, 480, 475, 470, 465, 460, 456, 451, 446, 442, 437, 433, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 388, 385, 381, 377, 374, 370, 367, 363, 360, 357, 354, 350, 347, 344, 341, 338, 335, 332, 329, 326, 323, 320, 318, 315, 312, 310, 307, 304, 302, 299, 297, 294, 292, 289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259 ]; - var shg_table = [ 9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24 ]; - function stackBlurImage(imageID, canvasID, radius, blurAlphaChannel) { - var img = document.getElementById(imageID); - var w = img.naturalWidth; - var h = img.naturalHeight; - var canvas = document.getElementById(canvasID); - canvas.style.width = w + "px"; - canvas.style.height = h + "px"; - canvas.width = w; - canvas.height = h; - var context = canvas.getContext("2d"); - context.clearRect(0, 0, w, h); - context.drawImage(img, 0, 0); - if (isNaN(radius) || radius < 1) return; - if (blurAlphaChannel) stackBlurCanvasRGBA(canvasID, 0, 0, w, h, radius); else stackBlurCanvasRGB(canvasID, 0, 0, w, h, radius); - } - function stackBlurCanvasRGBA(id, top_x, top_y, width, height, radius) { - if (isNaN(radius) || radius < 1) return; - radius |= 0; - var canvas = document.getElementById(id); - var context = canvas.getContext("2d"); - var imageData; - try { - try { - imageData = context.getImageData(top_x, top_y, width, height); - } catch (e) { - // NOTE: this part is supposedly only needed if you want to work with local files - // so it might be okay to remove the whole try/catch block and just use - // imageData = context.getImageData( top_x, top_y, width, height ); - try { - netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); - imageData = context.getImageData(top_x, top_y, width, height); - } catch (e) { - alert("Cannot access local image"); - throw new Error("unable to access local image data: " + e); - return; - } - } - } catch (e) { - alert("Cannot access image"); - throw new Error("unable to access image data: " + e); - } - var pixels = imageData.data; - var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, a_sum, r_out_sum, g_out_sum, b_out_sum, a_out_sum, r_in_sum, g_in_sum, b_in_sum, a_in_sum, pr, pg, pb, pa, rbs; - var div = radius + radius + 1; - var w4 = width << 2; - var widthMinus1 = width - 1; - var heightMinus1 = height - 1; - var radiusPlus1 = radius + 1; - var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2; - var stackStart = new BlurStack(); - var stack = stackStart; - for (i = 1; i < div; i++) { - stack = stack.next = new BlurStack(); - if (i == radiusPlus1) var stackEnd = stack; - } - stack.next = stackStart; - var stackIn = null; - var stackOut = null; - yw = yi = 0; - var mul_sum = mul_table[radius]; - var shg_sum = shg_table[radius]; - for (y = 0; y < height; y++) { - r_in_sum = g_in_sum = b_in_sum = a_in_sum = r_sum = g_sum = b_sum = a_sum = 0; - r_out_sum = radiusPlus1 * (pr = pixels[yi]); - g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]); - b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]); - a_out_sum = radiusPlus1 * (pa = pixels[yi + 3]); - r_sum += sumFactor * pr; - g_sum += sumFactor * pg; - b_sum += sumFactor * pb; - a_sum += sumFactor * pa; - stack = stackStart; - for (i = 0; i < radiusPlus1; i++) { - stack.r = pr; - stack.g = pg; - stack.b = pb; - stack.a = pa; - stack = stack.next; - } - for (i = 1; i < radiusPlus1; i++) { - p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2); - r_sum += (stack.r = pr = pixels[p]) * (rbs = radiusPlus1 - i); - g_sum += (stack.g = pg = pixels[p + 1]) * rbs; - b_sum += (stack.b = pb = pixels[p + 2]) * rbs; - a_sum += (stack.a = pa = pixels[p + 3]) * rbs; - r_in_sum += pr; - g_in_sum += pg; - b_in_sum += pb; - a_in_sum += pa; - stack = stack.next; - } - stackIn = stackStart; - stackOut = stackEnd; - for (x = 0; x < width; x++) { - pixels[yi + 3] = pa = a_sum * mul_sum >> shg_sum; - if (pa != 0) { - pa = 255 / pa; - pixels[yi] = (r_sum * mul_sum >> shg_sum) * pa; - pixels[yi + 1] = (g_sum * mul_sum >> shg_sum) * pa; - pixels[yi + 2] = (b_sum * mul_sum >> shg_sum) * pa; - } else { - pixels[yi] = pixels[yi + 1] = pixels[yi + 2] = 0; - } - r_sum -= r_out_sum; - g_sum -= g_out_sum; - b_sum -= b_out_sum; - a_sum -= a_out_sum; - r_out_sum -= stackIn.r; - g_out_sum -= stackIn.g; - b_out_sum -= stackIn.b; - a_out_sum -= stackIn.a; - p = yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1) << 2; - r_in_sum += stackIn.r = pixels[p]; - g_in_sum += stackIn.g = pixels[p + 1]; - b_in_sum += stackIn.b = pixels[p + 2]; - a_in_sum += stackIn.a = pixels[p + 3]; - r_sum += r_in_sum; - g_sum += g_in_sum; - b_sum += b_in_sum; - a_sum += a_in_sum; - stackIn = stackIn.next; - r_out_sum += pr = stackOut.r; - g_out_sum += pg = stackOut.g; - b_out_sum += pb = stackOut.b; - a_out_sum += pa = stackOut.a; - r_in_sum -= pr; - g_in_sum -= pg; - b_in_sum -= pb; - a_in_sum -= pa; - stackOut = stackOut.next; - yi += 4; - } - yw += width; - } - for (x = 0; x < width; x++) { - g_in_sum = b_in_sum = a_in_sum = r_in_sum = g_sum = b_sum = a_sum = r_sum = 0; - yi = x << 2; - r_out_sum = radiusPlus1 * (pr = pixels[yi]); - g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]); - b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]); - a_out_sum = radiusPlus1 * (pa = pixels[yi + 3]); - r_sum += sumFactor * pr; - g_sum += sumFactor * pg; - b_sum += sumFactor * pb; - a_sum += sumFactor * pa; - stack = stackStart; - for (i = 0; i < radiusPlus1; i++) { - stack.r = pr; - stack.g = pg; - stack.b = pb; - stack.a = pa; - stack = stack.next; - } - yp = width; - for (i = 1; i <= radius; i++) { - yi = yp + x << 2; - r_sum += (stack.r = pr = pixels[yi]) * (rbs = radiusPlus1 - i); - g_sum += (stack.g = pg = pixels[yi + 1]) * rbs; - b_sum += (stack.b = pb = pixels[yi + 2]) * rbs; - a_sum += (stack.a = pa = pixels[yi + 3]) * rbs; - r_in_sum += pr; - g_in_sum += pg; - b_in_sum += pb; - a_in_sum += pa; - stack = stack.next; - if (i < heightMinus1) { - yp += width; - } - } - yi = x; - stackIn = stackStart; - stackOut = stackEnd; - for (y = 0; y < height; y++) { - p = yi << 2; - pixels[p + 3] = pa = a_sum * mul_sum >> shg_sum; - if (pa > 0) { - pa = 255 / pa; - pixels[p] = (r_sum * mul_sum >> shg_sum) * pa; - pixels[p + 1] = (g_sum * mul_sum >> shg_sum) * pa; - pixels[p + 2] = (b_sum * mul_sum >> shg_sum) * pa; - } else { - pixels[p] = pixels[p + 1] = pixels[p + 2] = 0; - } - r_sum -= r_out_sum; - g_sum -= g_out_sum; - b_sum -= b_out_sum; - a_sum -= a_out_sum; - r_out_sum -= stackIn.r; - g_out_sum -= stackIn.g; - b_out_sum -= stackIn.b; - a_out_sum -= stackIn.a; - p = x + ((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width << 2; - r_sum += r_in_sum += stackIn.r = pixels[p]; - g_sum += g_in_sum += stackIn.g = pixels[p + 1]; - b_sum += b_in_sum += stackIn.b = pixels[p + 2]; - a_sum += a_in_sum += stackIn.a = pixels[p + 3]; - stackIn = stackIn.next; - r_out_sum += pr = stackOut.r; - g_out_sum += pg = stackOut.g; - b_out_sum += pb = stackOut.b; - a_out_sum += pa = stackOut.a; - r_in_sum -= pr; - g_in_sum -= pg; - b_in_sum -= pb; - a_in_sum -= pa; - stackOut = stackOut.next; - yi += width; - } - } - context.putImageData(imageData, top_x, top_y); - } - function stackBlurCanvasRGB(id, top_x, top_y, width, height, radius) { - if (isNaN(radius) || radius < 1) return; - radius |= 0; - var canvas = document.getElementById(id); - var context = canvas.getContext("2d"); - var imageData; - try { - try { - imageData = context.getImageData(top_x, top_y, width, height); - } catch (e) { - // NOTE: this part is supposedly only needed if you want to work with local files - // so it might be okay to remove the whole try/catch block and just use - // imageData = context.getImageData( top_x, top_y, width, height ); - try { - netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); - imageData = context.getImageData(top_x, top_y, width, height); - } catch (e) { - alert("Cannot access local image"); - throw new Error("unable to access local image data: " + e); - return; - } - } - } catch (e) { - alert("Cannot access image"); - throw new Error("unable to access image data: " + e); - } - var pixels = imageData.data; - var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, r_out_sum, g_out_sum, b_out_sum, r_in_sum, g_in_sum, b_in_sum, pr, pg, pb, rbs; - var div = radius + radius + 1; - var w4 = width << 2; - var widthMinus1 = width - 1; - var heightMinus1 = height - 1; - var radiusPlus1 = radius + 1; - var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2; - var stackStart = new BlurStack(); - var stack = stackStart; - for (i = 1; i < div; i++) { - stack = stack.next = new BlurStack(); - if (i == radiusPlus1) var stackEnd = stack; - } - stack.next = stackStart; - var stackIn = null; - var stackOut = null; - yw = yi = 0; - var mul_sum = mul_table[radius]; - var shg_sum = shg_table[radius]; - for (y = 0; y < height; y++) { - r_in_sum = g_in_sum = b_in_sum = r_sum = g_sum = b_sum = 0; - r_out_sum = radiusPlus1 * (pr = pixels[yi]); - g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]); - b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]); - r_sum += sumFactor * pr; - g_sum += sumFactor * pg; - b_sum += sumFactor * pb; - stack = stackStart; - for (i = 0; i < radiusPlus1; i++) { - stack.r = pr; - stack.g = pg; - stack.b = pb; - stack = stack.next; - } - for (i = 1; i < radiusPlus1; i++) { - p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2); - r_sum += (stack.r = pr = pixels[p]) * (rbs = radiusPlus1 - i); - g_sum += (stack.g = pg = pixels[p + 1]) * rbs; - b_sum += (stack.b = pb = pixels[p + 2]) * rbs; - r_in_sum += pr; - g_in_sum += pg; - b_in_sum += pb; - stack = stack.next; - } - stackIn = stackStart; - stackOut = stackEnd; - for (x = 0; x < width; x++) { - pixels[yi] = r_sum * mul_sum >> shg_sum; - pixels[yi + 1] = g_sum * mul_sum >> shg_sum; - pixels[yi + 2] = b_sum * mul_sum >> shg_sum; - r_sum -= r_out_sum; - g_sum -= g_out_sum; - b_sum -= b_out_sum; - r_out_sum -= stackIn.r; - g_out_sum -= stackIn.g; - b_out_sum -= stackIn.b; - p = yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1) << 2; - r_in_sum += stackIn.r = pixels[p]; - g_in_sum += stackIn.g = pixels[p + 1]; - b_in_sum += stackIn.b = pixels[p + 2]; - r_sum += r_in_sum; - g_sum += g_in_sum; - b_sum += b_in_sum; - stackIn = stackIn.next; - r_out_sum += pr = stackOut.r; - g_out_sum += pg = stackOut.g; - b_out_sum += pb = stackOut.b; - r_in_sum -= pr; - g_in_sum -= pg; - b_in_sum -= pb; - stackOut = stackOut.next; - yi += 4; - } - yw += width; - } - for (x = 0; x < width; x++) { - g_in_sum = b_in_sum = r_in_sum = g_sum = b_sum = r_sum = 0; - yi = x << 2; - r_out_sum = radiusPlus1 * (pr = pixels[yi]); - g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]); - b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]); - r_sum += sumFactor * pr; - g_sum += sumFactor * pg; - b_sum += sumFactor * pb; - stack = stackStart; - for (i = 0; i < radiusPlus1; i++) { - stack.r = pr; - stack.g = pg; - stack.b = pb; - stack = stack.next; - } - yp = width; - for (i = 1; i <= radius; i++) { - yi = yp + x << 2; - r_sum += (stack.r = pr = pixels[yi]) * (rbs = radiusPlus1 - i); - g_sum += (stack.g = pg = pixels[yi + 1]) * rbs; - b_sum += (stack.b = pb = pixels[yi + 2]) * rbs; - r_in_sum += pr; - g_in_sum += pg; - b_in_sum += pb; - stack = stack.next; - if (i < heightMinus1) { - yp += width; - } - } - yi = x; - stackIn = stackStart; - stackOut = stackEnd; - for (y = 0; y < height; y++) { - p = yi << 2; - pixels[p] = r_sum * mul_sum >> shg_sum; - pixels[p + 1] = g_sum * mul_sum >> shg_sum; - pixels[p + 2] = b_sum * mul_sum >> shg_sum; - r_sum -= r_out_sum; - g_sum -= g_out_sum; - b_sum -= b_out_sum; - r_out_sum -= stackIn.r; - g_out_sum -= stackIn.g; - b_out_sum -= stackIn.b; - p = x + ((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width << 2; - r_sum += r_in_sum += stackIn.r = pixels[p]; - g_sum += g_in_sum += stackIn.g = pixels[p + 1]; - b_sum += b_in_sum += stackIn.b = pixels[p + 2]; - stackIn = stackIn.next; - r_out_sum += pr = stackOut.r; - g_out_sum += pg = stackOut.g; - b_out_sum += pb = stackOut.b; - r_in_sum -= pr; - g_in_sum -= pg; - b_in_sum -= pb; - stackOut = stackOut.next; - yi += width; - } - } - context.putImageData(imageData, top_x, top_y); - } - function BlurStack() { - this.r = 0; - this.g = 0; - this.b = 0; - this.a = 0; - this.next = null; - } - /* - * canvg.js - Javascript SVG parser and renderer on Canvas - * MIT Licensed - * Gabe Lerner (gabelerner@gmail.com) - * http://code.google.com/p/canvg/ - * - * Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/ - */ - (function() { - // canvg(target, s) - // empty parameters: replace all 'svg' elements on page with 'canvas' elements - // target: canvas element or the id of a canvas element - // s: svg string, url to svg file, or xml document - // opts: optional hash of options - // ignoreMouse: true => ignore mouse events - // ignoreAnimation: true => ignore animations - // ignoreDimensions: true => does not try to resize canvas - // ignoreClear: true => does not clear canvas - // offsetX: int => draws at a x offset - // offsetY: int => draws at a y offset - // scaleWidth: int => scales horizontally to width - // scaleHeight: int => scales vertically to height - // renderCallback: function => will call the function after the first render is completed - // forceRedraw: function => will call the function on every frame, if it returns true, will redraw - this.canvg = function(target, s, opts) { - // no parameters - if (target == null && s == null && opts == null) { - var svgTags = document.getElementsByTagName("svg"); - for (var i = 0; i < svgTags.length; i++) { - var svgTag = svgTags[i]; - var c = document.createElement("canvas"); - c.width = svgTag.clientWidth; - c.height = svgTag.clientHeight; - svgTag.parentNode.insertBefore(c, svgTag); - svgTag.parentNode.removeChild(svgTag); - var div = document.createElement("div"); - div.appendChild(svgTag); - canvg(c, div.innerHTML); - } - return; - } - opts = opts || {}; - if (typeof target == "string") { - target = document.getElementById(target); - } - // store class on canvas - if (target.svg != null) target.svg.stop(); - var svg = build(); - // on i.e. 8 for flash canvas, we can't assign the property so check for it - if (!(target.childNodes.length == 1 && target.childNodes[0].nodeName == "OBJECT")) target.svg = svg; - svg.opts = opts; - var ctx = target.getContext("2d"); - if (typeof s.documentElement != "undefined") { - // load from xml doc - svg.loadXmlDoc(ctx, s); - } else if (s.substr(0, 1) == "<") { - // load from xml string - svg.loadXml(ctx, s); - } else { - // load from url - svg.load(ctx, s); - } - }; - function build() { - var svg = {}; - svg.FRAMERATE = 30; - svg.MAX_VIRTUAL_PIXELS = 3e4; - // globals - svg.init = function(ctx) { - var uniqueId = 0; - svg.UniqueId = function() { - uniqueId++; - return "canvg" + uniqueId; - }; - svg.Definitions = {}; - svg.Styles = {}; - svg.Animations = []; - svg.Images = []; - svg.ctx = ctx; - svg.ViewPort = new function() { - this.viewPorts = []; - this.Clear = function() { - this.viewPorts = []; - }; - this.SetCurrent = function(width, height) { - this.viewPorts.push({ - width: width, - height: height - }); - }; - this.RemoveCurrent = function() { - this.viewPorts.pop(); - }; - this.Current = function() { - return this.viewPorts[this.viewPorts.length - 1]; - }; - this.width = function() { - return this.Current().width; - }; - this.height = function() { - return this.Current().height; - }; - this.ComputeSize = function(d) { - if (d != null && typeof d == "number") return d; - if (d == "x") return this.width(); - if (d == "y") return this.height(); - return Math.sqrt(Math.pow(this.width(), 2) + Math.pow(this.height(), 2)) / Math.sqrt(2); - }; - }(); - }; - svg.init(); - // images loaded - svg.ImagesLoaded = function() { - for (var i = 0; i < svg.Images.length; i++) { - if (!svg.Images[i].loaded) return false; - } - return true; - }; - // trim - svg.trim = function(s) { - return s.replace(/^\s+|\s+$/g, ""); - }; - // compress spaces - svg.compressSpaces = function(s) { - return s.replace(/[\s\r\t\n]+/gm, " "); - }; - // ajax - svg.ajax = function(url) { - var AJAX; - if (window.XMLHttpRequest) { - AJAX = new XMLHttpRequest(); - } else { - AJAX = new ActiveXObject("Microsoft.XMLHTTP"); - } - if (AJAX) { - AJAX.open("GET", url, false); - AJAX.send(null); - return AJAX.responseText; - } - return null; - }; - // parse xml - svg.parseXml = function(xml) { - if (window.DOMParser) { - var parser = new DOMParser(); - return parser.parseFromString(xml, "text/xml"); - } else { - xml = xml.replace(/]*>/, ""); - var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(xml); - return xmlDoc; - } - }; - svg.Property = function(name, value) { - this.name = name; - this.value = value; - }; - svg.Property.prototype.getValue = function() { - return this.value; - }; - svg.Property.prototype.hasValue = function() { - return this.value != null && this.value !== ""; - }; - // return the numerical value of the property - svg.Property.prototype.numValue = function() { - if (!this.hasValue()) return 0; - var n = parseFloat(this.value); - if ((this.value + "").match(/%$/)) { - n = n / 100; - } - return n; - }; - svg.Property.prototype.valueOrDefault = function(def) { - if (this.hasValue()) return this.value; - return def; - }; - svg.Property.prototype.numValueOrDefault = function(def) { - if (this.hasValue()) return this.numValue(); - return def; - }; - // color extensions - // augment the current color value with the opacity - svg.Property.prototype.addOpacity = function(opacity) { - var newValue = this.value; - if (opacity != null && opacity != "" && typeof this.value == "string") { - // can only add opacity to colors, not patterns - var color = new RGBColor(this.value); - if (color.ok) { - newValue = "rgba(" + color.r + ", " + color.g + ", " + color.b + ", " + opacity + ")"; - } - } - return new svg.Property(this.name, newValue); - }; - // definition extensions - // get the definition from the definitions table - svg.Property.prototype.getDefinition = function() { - var name = this.value.match(/#([^\)'"]+)/); - if (name) { - name = name[1]; - } - if (!name) { - name = this.value; - } - return svg.Definitions[name]; - }; - svg.Property.prototype.isUrlDefinition = function() { - return this.value.indexOf("url(") == 0; - }; - svg.Property.prototype.getFillStyleDefinition = function(e, opacityProp) { - var def = this.getDefinition(); - // gradient - if (def != null && def.createGradient) { - return def.createGradient(svg.ctx, e, opacityProp); - } - // pattern - if (def != null && def.createPattern) { - if (def.getHrefAttribute().hasValue()) { - var pt = def.attribute("patternTransform"); - def = def.getHrefAttribute().getDefinition(); - if (pt.hasValue()) { - def.attribute("patternTransform", true).value = pt.value; - } - } - return def.createPattern(svg.ctx, e); - } - return null; - }; - // length extensions - svg.Property.prototype.getDPI = function(viewPort) { - return 96; - }; - svg.Property.prototype.getEM = function(viewPort) { - var em = 12; - var fontSize = new svg.Property("fontSize", svg.Font.Parse(svg.ctx.font).fontSize); - if (fontSize.hasValue()) em = fontSize.toPixels(viewPort); - return em; - }; - svg.Property.prototype.getUnits = function() { - var s = this.value + ""; - return s.replace(/[0-9\.\-]/g, ""); - }; - // get the length as pixels - svg.Property.prototype.toPixels = function(viewPort, processPercent) { - if (!this.hasValue()) return 0; - var s = this.value + ""; - if (s.match(/em$/)) return this.numValue() * this.getEM(viewPort); - if (s.match(/ex$/)) return this.numValue() * this.getEM(viewPort) / 2; - if (s.match(/px$/)) return this.numValue(); - if (s.match(/pt$/)) return this.numValue() * this.getDPI(viewPort) * (1 / 72); - if (s.match(/pc$/)) return this.numValue() * 15; - if (s.match(/cm$/)) return this.numValue() * this.getDPI(viewPort) / 2.54; - if (s.match(/mm$/)) return this.numValue() * this.getDPI(viewPort) / 25.4; - if (s.match(/in$/)) return this.numValue() * this.getDPI(viewPort); - if (s.match(/%$/)) return this.numValue() * svg.ViewPort.ComputeSize(viewPort); - var n = this.numValue(); - if (processPercent && n < 1) return n * svg.ViewPort.ComputeSize(viewPort); - return n; - }; - // time extensions - // get the time as milliseconds - svg.Property.prototype.toMilliseconds = function() { - if (!this.hasValue()) return 0; - var s = this.value + ""; - if (s.match(/s$/)) return this.numValue() * 1e3; - if (s.match(/ms$/)) return this.numValue(); - return this.numValue(); - }; - // angle extensions - // get the angle as radians - svg.Property.prototype.toRadians = function() { - if (!this.hasValue()) return 0; - var s = this.value + ""; - if (s.match(/deg$/)) return this.numValue() * (Math.PI / 180); - if (s.match(/grad$/)) return this.numValue() * (Math.PI / 200); - if (s.match(/rad$/)) return this.numValue(); - return this.numValue() * (Math.PI / 180); - }; - // fonts - svg.Font = new function() { - this.Styles = "normal|italic|oblique|inherit"; - this.Variants = "normal|small-caps|inherit"; - this.Weights = "normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit"; - this.CreateFont = function(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit) { - var f = inherit != null ? this.Parse(inherit) : this.CreateFont("", "", "", "", "", svg.ctx.font); - return { - fontFamily: fontFamily || f.fontFamily, - fontSize: fontSize || f.fontSize, - fontStyle: fontStyle || f.fontStyle, - fontWeight: fontWeight || f.fontWeight, - fontVariant: fontVariant || f.fontVariant, - toString: function() { - return [ this.fontStyle, this.fontVariant, this.fontWeight, this.fontSize, this.fontFamily ].join(" "); - } - }; - }; - var that = this; - this.Parse = function(s) { - var f = {}; - var d = svg.trim(svg.compressSpaces(s || "")).split(" "); - var set = { - fontSize: false, - fontStyle: false, - fontWeight: false, - fontVariant: false - }; - var ff = ""; - for (var i = 0; i < d.length; i++) { - if (!set.fontStyle && that.Styles.indexOf(d[i]) != -1) { - if (d[i] != "inherit") f.fontStyle = d[i]; - set.fontStyle = true; - } else if (!set.fontVariant && that.Variants.indexOf(d[i]) != -1) { - if (d[i] != "inherit") f.fontVariant = d[i]; - set.fontStyle = set.fontVariant = true; - } else if (!set.fontWeight && that.Weights.indexOf(d[i]) != -1) { - if (d[i] != "inherit") f.fontWeight = d[i]; - set.fontStyle = set.fontVariant = set.fontWeight = true; - } else if (!set.fontSize) { - if (d[i] != "inherit") f.fontSize = d[i].split("/")[0]; - set.fontStyle = set.fontVariant = set.fontWeight = set.fontSize = true; - } else { - if (d[i] != "inherit") ff += d[i]; - } - } - if (ff != "") f.fontFamily = ff; - return f; - }; - }(); - // points and paths - svg.ToNumberArray = function(s) { - var a = svg.trim(svg.compressSpaces((s || "").replace(/,/g, " "))).split(" "); - for (var i = 0; i < a.length; i++) { - a[i] = parseFloat(a[i]); - } - return a; - }; - svg.Point = function(x, y) { - this.x = x; - this.y = y; - }; - svg.Point.prototype.angleTo = function(p) { - return Math.atan2(p.y - this.y, p.x - this.x); - }; - svg.Point.prototype.applyTransform = function(v) { - var xp = this.x * v[0] + this.y * v[2] + v[4]; - var yp = this.x * v[1] + this.y * v[3] + v[5]; - this.x = xp; - this.y = yp; - }; - svg.CreatePoint = function(s) { - var a = svg.ToNumberArray(s); - return new svg.Point(a[0], a[1]); - }; - svg.CreatePath = function(s) { - var a = svg.ToNumberArray(s); - var path = []; - for (var i = 0; i < a.length; i += 2) { - path.push(new svg.Point(a[i], a[i + 1])); - } - return path; - }; - // bounding box - svg.BoundingBox = function(x1, y1, x2, y2) { - // pass in initial points if you want - this.x1 = Number.NaN; - this.y1 = Number.NaN; - this.x2 = Number.NaN; - this.y2 = Number.NaN; - this.x = function() { - return this.x1; - }; - this.y = function() { - return this.y1; - }; - this.width = function() { - return this.x2 - this.x1; - }; - this.height = function() { - return this.y2 - this.y1; - }; - this.addPoint = function(x, y) { - if (x != null) { - if (isNaN(this.x1) || isNaN(this.x2)) { - this.x1 = x; - this.x2 = x; - } - if (x < this.x1) this.x1 = x; - if (x > this.x2) this.x2 = x; - } - if (y != null) { - if (isNaN(this.y1) || isNaN(this.y2)) { - this.y1 = y; - this.y2 = y; - } - if (y < this.y1) this.y1 = y; - if (y > this.y2) this.y2 = y; - } - }; - this.addX = function(x) { - this.addPoint(x, null); - }; - this.addY = function(y) { - this.addPoint(null, y); - }; - this.addBoundingBox = function(bb) { - this.addPoint(bb.x1, bb.y1); - this.addPoint(bb.x2, bb.y2); - }; - this.addQuadraticCurve = function(p0x, p0y, p1x, p1y, p2x, p2y) { - var cp1x = p0x + 2 / 3 * (p1x - p0x); - // CP1 = QP0 + 2/3 *(QP1-QP0) - var cp1y = p0y + 2 / 3 * (p1y - p0y); - // CP1 = QP0 + 2/3 *(QP1-QP0) - var cp2x = cp1x + 1 / 3 * (p2x - p0x); - // CP2 = CP1 + 1/3 *(QP2-QP0) - var cp2y = cp1y + 1 / 3 * (p2y - p0y); - // CP2 = CP1 + 1/3 *(QP2-QP0) - this.addBezierCurve(p0x, p0y, cp1x, cp2x, cp1y, cp2y, p2x, p2y); - }; - this.addBezierCurve = function(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) { - // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html - var p0 = [ p0x, p0y ], p1 = [ p1x, p1y ], p2 = [ p2x, p2y ], p3 = [ p3x, p3y ]; - this.addPoint(p0[0], p0[1]); - this.addPoint(p3[0], p3[1]); - for (i = 0; i <= 1; i++) { - var f = function(t) { - return Math.pow(1 - t, 3) * p0[i] + 3 * Math.pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + Math.pow(t, 3) * p3[i]; - }; - var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; - var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; - var c = 3 * p1[i] - 3 * p0[i]; - if (a == 0) { - if (b == 0) continue; - var t = -c / b; - if (0 < t && t < 1) { - if (i == 0) this.addX(f(t)); - if (i == 1) this.addY(f(t)); - } - continue; - } - var b2ac = Math.pow(b, 2) - 4 * c * a; - if (b2ac < 0) continue; - var t1 = (-b + Math.sqrt(b2ac)) / (2 * a); - if (0 < t1 && t1 < 1) { - if (i == 0) this.addX(f(t1)); - if (i == 1) this.addY(f(t1)); - } - var t2 = (-b - Math.sqrt(b2ac)) / (2 * a); - if (0 < t2 && t2 < 1) { - if (i == 0) this.addX(f(t2)); - if (i == 1) this.addY(f(t2)); - } - } - }; - this.isPointInBox = function(x, y) { - return this.x1 <= x && x <= this.x2 && this.y1 <= y && y <= this.y2; - }; - this.addPoint(x1, y1); - this.addPoint(x2, y2); - }; - // transforms - svg.Transform = function(v) { - var that = this; - this.Type = {}; - // translate - this.Type.translate = function(s) { - this.p = svg.CreatePoint(s); - this.apply = function(ctx) { - ctx.translate(this.p.x || 0, this.p.y || 0); - }; - this.unapply = function(ctx) { - ctx.translate(-1 * this.p.x || 0, -1 * this.p.y || 0); - }; - this.applyToPoint = function(p) { - p.applyTransform([ 1, 0, 0, 1, this.p.x || 0, this.p.y || 0 ]); - }; - }; - // rotate - this.Type.rotate = function(s) { - var a = svg.ToNumberArray(s); - this.angle = new svg.Property("angle", a[0]); - this.cx = a[1] || 0; - this.cy = a[2] || 0; - this.apply = function(ctx) { - ctx.translate(this.cx, this.cy); - ctx.rotate(this.angle.toRadians()); - ctx.translate(-this.cx, -this.cy); - }; - this.unapply = function(ctx) { - ctx.translate(this.cx, this.cy); - ctx.rotate(-1 * this.angle.toRadians()); - ctx.translate(-this.cx, -this.cy); - }; - this.applyToPoint = function(p) { - var a = this.angle.toRadians(); - p.applyTransform([ 1, 0, 0, 1, this.p.x || 0, this.p.y || 0 ]); - p.applyTransform([ Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0 ]); - p.applyTransform([ 1, 0, 0, 1, -this.p.x || 0, -this.p.y || 0 ]); - }; - }; - this.Type.scale = function(s) { - this.p = svg.CreatePoint(s); - this.apply = function(ctx) { - ctx.scale(this.p.x || 1, this.p.y || this.p.x || 1); - }; - this.unapply = function(ctx) { - ctx.scale(1 / this.p.x || 1, 1 / this.p.y || this.p.x || 1); - }; - this.applyToPoint = function(p) { - p.applyTransform([ this.p.x || 0, 0, 0, this.p.y || 0, 0, 0 ]); - }; - }; - this.Type.matrix = function(s) { - this.m = svg.ToNumberArray(s); - this.apply = function(ctx) { - ctx.transform(this.m[0], this.m[1], this.m[2], this.m[3], this.m[4], this.m[5]); - }; - this.applyToPoint = function(p) { - p.applyTransform(this.m); - }; - }; - this.Type.SkewBase = function(s) { - this.base = that.Type.matrix; - this.base(s); - this.angle = new svg.Property("angle", s); - }; - this.Type.SkewBase.prototype = new this.Type.matrix(); - this.Type.skewX = function(s) { - this.base = that.Type.SkewBase; - this.base(s); - this.m = [ 1, 0, Math.tan(this.angle.toRadians()), 1, 0, 0 ]; - }; - this.Type.skewX.prototype = new this.Type.SkewBase(); - this.Type.skewY = function(s) { - this.base = that.Type.SkewBase; - this.base(s); - this.m = [ 1, Math.tan(this.angle.toRadians()), 0, 1, 0, 0 ]; - }; - this.Type.skewY.prototype = new this.Type.SkewBase(); - this.transforms = []; - this.apply = function(ctx) { - for (var i = 0; i < this.transforms.length; i++) { - this.transforms[i].apply(ctx); - } - }; - this.unapply = function(ctx) { - for (var i = this.transforms.length - 1; i >= 0; i--) { - this.transforms[i].unapply(ctx); - } - }; - this.applyToPoint = function(p) { - for (var i = 0; i < this.transforms.length; i++) { - this.transforms[i].applyToPoint(p); - } - }; - var data = svg.trim(svg.compressSpaces(v)).replace(/\)(\s?,\s?)/g, ") ").split(/\s(?=[a-z])/); - for (var i = 0; i < data.length; i++) { - var type = svg.trim(data[i].split("(")[0]); - var s = data[i].split("(")[1].replace(")", ""); - var transform = new this.Type[type](s); - transform.type = type; - this.transforms.push(transform); - } - }; - // aspect ratio - svg.AspectRatio = function(ctx, aspectRatio, width, desiredWidth, height, desiredHeight, minX, minY, refX, refY) { - // aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute - aspectRatio = svg.compressSpaces(aspectRatio); - aspectRatio = aspectRatio.replace(/^defer\s/, ""); - // ignore defer - var align = aspectRatio.split(" ")[0] || "xMidYMid"; - var meetOrSlice = aspectRatio.split(" ")[1] || "meet"; - // calculate scale - var scaleX = width / desiredWidth; - var scaleY = height / desiredHeight; - var scaleMin = Math.min(scaleX, scaleY); - var scaleMax = Math.max(scaleX, scaleY); - if (meetOrSlice == "meet") { - desiredWidth *= scaleMin; - desiredHeight *= scaleMin; - } - if (meetOrSlice == "slice") { - desiredWidth *= scaleMax; - desiredHeight *= scaleMax; - } - refX = new svg.Property("refX", refX); - refY = new svg.Property("refY", refY); - if (refX.hasValue() && refY.hasValue()) { - ctx.translate(-scaleMin * refX.toPixels("x"), -scaleMin * refY.toPixels("y")); - } else { - // align - if (align.match(/^xMid/) && (meetOrSlice == "meet" && scaleMin == scaleY || meetOrSlice == "slice" && scaleMax == scaleY)) ctx.translate(width / 2 - desiredWidth / 2, 0); - if (align.match(/YMid$/) && (meetOrSlice == "meet" && scaleMin == scaleX || meetOrSlice == "slice" && scaleMax == scaleX)) ctx.translate(0, height / 2 - desiredHeight / 2); - if (align.match(/^xMax/) && (meetOrSlice == "meet" && scaleMin == scaleY || meetOrSlice == "slice" && scaleMax == scaleY)) ctx.translate(width - desiredWidth, 0); - if (align.match(/YMax$/) && (meetOrSlice == "meet" && scaleMin == scaleX || meetOrSlice == "slice" && scaleMax == scaleX)) ctx.translate(0, height - desiredHeight); - } - // scale - if (align == "none") ctx.scale(scaleX, scaleY); else if (meetOrSlice == "meet") ctx.scale(scaleMin, scaleMin); else if (meetOrSlice == "slice") ctx.scale(scaleMax, scaleMax); - // translate - ctx.translate(minX == null ? 0 : -minX, minY == null ? 0 : -minY); - }; - // elements - svg.Element = {}; - svg.EmptyProperty = new svg.Property("EMPTY", ""); - svg.Element.ElementBase = function(node) { - this.attributes = {}; - this.styles = {}; - this.children = []; - // get or create attribute - this.attribute = function(name, createIfNotExists) { - var a = this.attributes[name]; - if (a != null) return a; - if (createIfNotExists == true) { - a = new svg.Property(name, ""); - this.attributes[name] = a; - } - return a || svg.EmptyProperty; - }; - this.getHrefAttribute = function() { - for (var a in this.attributes) { - if (a.match(/:href$/)) { - return this.attributes[a]; - } - } - return svg.EmptyProperty; - }; - // get or create style, crawls up node tree - this.style = function(name, createIfNotExists) { - var s = this.styles[name]; - if (s != null) return s; - var a = this.attribute(name); - if (a != null && a.hasValue()) { - this.styles[name] = a; - // move up to me to cache - return a; - } - var p = this.parent; - if (p != null) { - var ps = p.style(name); - if (ps != null && ps.hasValue()) { - return ps; - } - } - if (createIfNotExists == true) { - s = new svg.Property(name, ""); - this.styles[name] = s; - } - return s || svg.EmptyProperty; - }; - // base render - this.render = function(ctx) { - // don't render display=none - if (this.style("display").value == "none") return; - // don't render visibility=hidden - if (this.attribute("visibility").value == "hidden") return; - ctx.save(); - if (this.attribute("mask").hasValue()) { - // mask - var mask = this.attribute("mask").getDefinition(); - if (mask != null) mask.apply(ctx, this); - } else if (this.style("filter").hasValue()) { - // filter - var filter = this.style("filter").getDefinition(); - if (filter != null) filter.apply(ctx, this); - } else { - this.setContext(ctx); - this.renderChildren(ctx); - this.clearContext(ctx); - } - ctx.restore(); - }; - // base set context - this.setContext = function(ctx) {}; - // base clear context - this.clearContext = function(ctx) {}; - // base render children - this.renderChildren = function(ctx) { - for (var i = 0; i < this.children.length; i++) { - this.children[i].render(ctx); - } - }; - this.addChild = function(childNode, create) { - var child = childNode; - if (create) child = svg.CreateElement(childNode); - child.parent = this; - this.children.push(child); - }; - if (node != null && node.nodeType == 1) { - //ELEMENT_NODE - // add children - for (var i = 0; i < node.childNodes.length; i++) { - var childNode = node.childNodes[i]; - if (childNode.nodeType == 1) this.addChild(childNode, true); - //ELEMENT_NODE - if (this.captureTextNodes && childNode.nodeType == 3) { - var text = childNode.nodeValue || childNode.text || ""; - if (svg.trim(svg.compressSpaces(text)) != "") { - this.addChild(new svg.Element.tspan(childNode), false); - } - } - } - // add attributes - for (var i = 0; i < node.attributes.length; i++) { - var attribute = node.attributes[i]; - this.attributes[attribute.nodeName] = new svg.Property(attribute.nodeName, attribute.nodeValue); - } - // add tag styles - var styles = svg.Styles[node.nodeName]; - if (styles != null) { - for (var name in styles) { - this.styles[name] = styles[name]; - } - } - // add class styles - if (this.attribute("class").hasValue()) { - var classes = svg.compressSpaces(this.attribute("class").value).split(" "); - for (var j = 0; j < classes.length; j++) { - styles = svg.Styles["." + classes[j]]; - if (styles != null) { - for (var name in styles) { - this.styles[name] = styles[name]; - } - } - styles = svg.Styles[node.nodeName + "." + classes[j]]; - if (styles != null) { - for (var name in styles) { - this.styles[name] = styles[name]; - } - } - } - } - // add id styles - if (this.attribute("id").hasValue()) { - var styles = svg.Styles["#" + this.attribute("id").value]; - if (styles != null) { - for (var name in styles) { - this.styles[name] = styles[name]; - } - } - } - // add inline styles - if (this.attribute("style").hasValue()) { - var styles = this.attribute("style").value.split(";"); - for (var i = 0; i < styles.length; i++) { - if (svg.trim(styles[i]) != "") { - var style = styles[i].split(":"); - var name = svg.trim(style[0]); - var value = svg.trim(style[1]); - this.styles[name] = new svg.Property(name, value); - } - } - } - // add id - if (this.attribute("id").hasValue()) { - if (svg.Definitions[this.attribute("id").value] == null) { - svg.Definitions[this.attribute("id").value] = this; - } - } - } - }; - svg.Element.RenderedElementBase = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - this.setContext = function(ctx) { - // fill - if (this.style("fill").isUrlDefinition()) { - var fs = this.style("fill").getFillStyleDefinition(this, this.style("fill-opacity")); - if (fs != null) ctx.fillStyle = fs; - } else if (this.style("fill").hasValue()) { - var fillStyle = this.style("fill"); - if (fillStyle.value == "currentColor") fillStyle.value = this.style("color").value; - ctx.fillStyle = fillStyle.value == "none" ? "rgba(0,0,0,0)" : fillStyle.value; - } - if (this.style("fill-opacity").hasValue()) { - var fillStyle = new svg.Property("fill", ctx.fillStyle); - fillStyle = fillStyle.addOpacity(this.style("fill-opacity").value); - ctx.fillStyle = fillStyle.value; - } - // stroke - if (this.style("stroke").isUrlDefinition()) { - var fs = this.style("stroke").getFillStyleDefinition(this, this.style("stroke-opacity")); - if (fs != null) ctx.strokeStyle = fs; - } else if (this.style("stroke").hasValue()) { - var strokeStyle = this.style("stroke"); - if (strokeStyle.value == "currentColor") strokeStyle.value = this.style("color").value; - ctx.strokeStyle = strokeStyle.value == "none" ? "rgba(0,0,0,0)" : strokeStyle.value; - } - if (this.style("stroke-opacity").hasValue()) { - var strokeStyle = new svg.Property("stroke", ctx.strokeStyle); - strokeStyle = strokeStyle.addOpacity(this.style("stroke-opacity").value); - ctx.strokeStyle = strokeStyle.value; - } - if (this.style("stroke-width").hasValue()) { - var newLineWidth = this.style("stroke-width").toPixels(); - ctx.lineWidth = newLineWidth == 0 ? .001 : newLineWidth; - } - if (this.style("stroke-linecap").hasValue()) ctx.lineCap = this.style("stroke-linecap").value; - if (this.style("stroke-linejoin").hasValue()) ctx.lineJoin = this.style("stroke-linejoin").value; - if (this.style("stroke-miterlimit").hasValue()) ctx.miterLimit = this.style("stroke-miterlimit").value; - if (this.style("stroke-dasharray").hasValue()) { - var gaps = svg.ToNumberArray(this.style("stroke-dasharray").value); - if (typeof ctx.setLineDash != "undefined") { - ctx.setLineDash(gaps); - } else if (typeof ctx.webkitLineDash != "undefined") { - ctx.webkitLineDash = gaps; - } else if (typeof ctx.mozDash != "undefined") { - ctx.mozDash = gaps; - } - var offset = this.style("stroke-dashoffset").numValueOrDefault(1); - if (typeof ctx.lineDashOffset != "undefined") { - ctx.lineDashOffset = offset; - } else if (typeof ctx.webkitLineDashOffset != "undefined") { - ctx.webkitLineDashOffset = offset; - } else if (typeof ctx.mozDashOffset != "undefined") { - ctx.mozDashOffset = offset; - } - } - // font - if (typeof ctx.font != "undefined") { - ctx.font = svg.Font.CreateFont(this.style("font-style").value, this.style("font-variant").value, this.style("font-weight").value, this.style("font-size").hasValue() ? this.style("font-size").toPixels() + "px" : "", this.style("font-family").value).toString(); - } - // transform - if (this.attribute("transform").hasValue()) { - var transform = new svg.Transform(this.attribute("transform").value); - transform.apply(ctx); - } - // clip - if (this.style("clip-path").hasValue()) { - var clip = this.style("clip-path").getDefinition(); - if (clip != null) clip.apply(ctx); - } - // opacity - if (this.style("opacity").hasValue()) { - ctx.globalAlpha = this.style("opacity").numValue(); - } - }; - }; - svg.Element.RenderedElementBase.prototype = new svg.Element.ElementBase(); - svg.Element.PathElementBase = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - this.path = function(ctx) { - if (ctx != null) ctx.beginPath(); - return new svg.BoundingBox(); - }; - this.renderChildren = function(ctx) { - this.path(ctx); - svg.Mouse.checkPath(this, ctx); - if (ctx.fillStyle != "") { - if (this.attribute("fill-rule").hasValue()) { - ctx.fill(this.attribute("fill-rule").value); - } else { - ctx.fill(); - } - } - if (ctx.strokeStyle != "") ctx.stroke(); - var markers = this.getMarkers(); - if (markers != null) { - if (this.style("marker-start").isUrlDefinition()) { - var marker = this.style("marker-start").getDefinition(); - marker.render(ctx, markers[0][0], markers[0][1]); - } - if (this.style("marker-mid").isUrlDefinition()) { - var marker = this.style("marker-mid").getDefinition(); - for (var i = 1; i < markers.length - 1; i++) { - marker.render(ctx, markers[i][0], markers[i][1]); - } - } - if (this.style("marker-end").isUrlDefinition()) { - var marker = this.style("marker-end").getDefinition(); - marker.render(ctx, markers[markers.length - 1][0], markers[markers.length - 1][1]); - } - } - }; - this.getBoundingBox = function() { - return this.path(); - }; - this.getMarkers = function() { - return null; - }; - }; - svg.Element.PathElementBase.prototype = new svg.Element.RenderedElementBase(); - // svg element - svg.Element.svg = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - this.baseClearContext = this.clearContext; - this.clearContext = function(ctx) { - this.baseClearContext(ctx); - svg.ViewPort.RemoveCurrent(); - }; - this.baseSetContext = this.setContext; - this.setContext = function(ctx) { - // initial values - ctx.strokeStyle = "rgba(0,0,0,0)"; - ctx.lineCap = "butt"; - ctx.lineJoin = "miter"; - ctx.miterLimit = 4; - this.baseSetContext(ctx); - // create new view port - if (!this.attribute("x").hasValue()) this.attribute("x", true).value = 0; - if (!this.attribute("y").hasValue()) this.attribute("y", true).value = 0; - ctx.translate(this.attribute("x").toPixels("x"), this.attribute("y").toPixels("y")); - var width = svg.ViewPort.width(); - var height = svg.ViewPort.height(); - if (!this.attribute("width").hasValue()) this.attribute("width", true).value = "100%"; - if (!this.attribute("height").hasValue()) this.attribute("height", true).value = "100%"; - if (typeof this.root == "undefined") { - width = this.attribute("width").toPixels("x"); - height = this.attribute("height").toPixels("y"); - var x = 0; - var y = 0; - if (this.attribute("refX").hasValue() && this.attribute("refY").hasValue()) { - x = -this.attribute("refX").toPixels("x"); - y = -this.attribute("refY").toPixels("y"); - } - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(width, y); - ctx.lineTo(width, height); - ctx.lineTo(x, height); - ctx.closePath(); - ctx.clip(); - } - svg.ViewPort.SetCurrent(width, height); - // viewbox - if (this.attribute("viewBox").hasValue()) { - var viewBox = svg.ToNumberArray(this.attribute("viewBox").value); - var minX = viewBox[0]; - var minY = viewBox[1]; - width = viewBox[2]; - height = viewBox[3]; - svg.AspectRatio(ctx, this.attribute("preserveAspectRatio").value, svg.ViewPort.width(), width, svg.ViewPort.height(), height, minX, minY, this.attribute("refX").value, this.attribute("refY").value); - svg.ViewPort.RemoveCurrent(); - svg.ViewPort.SetCurrent(viewBox[2], viewBox[3]); - } - }; - }; - svg.Element.svg.prototype = new svg.Element.RenderedElementBase(); - // rect element - svg.Element.rect = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - this.path = function(ctx) { - var x = this.attribute("x").toPixels("x"); - var y = this.attribute("y").toPixels("y"); - var width = this.attribute("width").toPixels("x"); - var height = this.attribute("height").toPixels("y"); - var rx = this.attribute("rx").toPixels("x"); - var ry = this.attribute("ry").toPixels("y"); - if (this.attribute("rx").hasValue() && !this.attribute("ry").hasValue()) ry = rx; - if (this.attribute("ry").hasValue() && !this.attribute("rx").hasValue()) rx = ry; - rx = Math.min(rx, width / 2); - ry = Math.min(ry, height / 2); - if (ctx != null) { - ctx.beginPath(); - ctx.moveTo(x + rx, y); - ctx.lineTo(x + width - rx, y); - ctx.quadraticCurveTo(x + width, y, x + width, y + ry); - ctx.lineTo(x + width, y + height - ry); - ctx.quadraticCurveTo(x + width, y + height, x + width - rx, y + height); - ctx.lineTo(x + rx, y + height); - ctx.quadraticCurveTo(x, y + height, x, y + height - ry); - ctx.lineTo(x, y + ry); - ctx.quadraticCurveTo(x, y, x + rx, y); - ctx.closePath(); - } - return new svg.BoundingBox(x, y, x + width, y + height); - }; - }; - svg.Element.rect.prototype = new svg.Element.PathElementBase(); - // circle element - svg.Element.circle = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - this.path = function(ctx) { - var cx = this.attribute("cx").toPixels("x"); - var cy = this.attribute("cy").toPixels("y"); - var r = this.attribute("r").toPixels(); - if (ctx != null) { - ctx.beginPath(); - ctx.arc(cx, cy, r, 0, Math.PI * 2, true); - ctx.closePath(); - } - return new svg.BoundingBox(cx - r, cy - r, cx + r, cy + r); - }; - }; - svg.Element.circle.prototype = new svg.Element.PathElementBase(); - // ellipse element - svg.Element.ellipse = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - this.path = function(ctx) { - var KAPPA = 4 * ((Math.sqrt(2) - 1) / 3); - var rx = this.attribute("rx").toPixels("x"); - var ry = this.attribute("ry").toPixels("y"); - var cx = this.attribute("cx").toPixels("x"); - var cy = this.attribute("cy").toPixels("y"); - if (ctx != null) { - ctx.beginPath(); - ctx.moveTo(cx, cy - ry); - ctx.bezierCurveTo(cx + KAPPA * rx, cy - ry, cx + rx, cy - KAPPA * ry, cx + rx, cy); - ctx.bezierCurveTo(cx + rx, cy + KAPPA * ry, cx + KAPPA * rx, cy + ry, cx, cy + ry); - ctx.bezierCurveTo(cx - KAPPA * rx, cy + ry, cx - rx, cy + KAPPA * ry, cx - rx, cy); - ctx.bezierCurveTo(cx - rx, cy - KAPPA * ry, cx - KAPPA * rx, cy - ry, cx, cy - ry); - ctx.closePath(); - } - return new svg.BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry); - }; - }; - svg.Element.ellipse.prototype = new svg.Element.PathElementBase(); - // line element - svg.Element.line = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - this.getPoints = function() { - return [ new svg.Point(this.attribute("x1").toPixels("x"), this.attribute("y1").toPixels("y")), new svg.Point(this.attribute("x2").toPixels("x"), this.attribute("y2").toPixels("y")) ]; - }; - this.path = function(ctx) { - var points = this.getPoints(); - if (ctx != null) { - ctx.beginPath(); - ctx.moveTo(points[0].x, points[0].y); - ctx.lineTo(points[1].x, points[1].y); - } - return new svg.BoundingBox(points[0].x, points[0].y, points[1].x, points[1].y); - }; - this.getMarkers = function() { - var points = this.getPoints(); - var a = points[0].angleTo(points[1]); - return [ [ points[0], a ], [ points[1], a ] ]; - }; - }; - svg.Element.line.prototype = new svg.Element.PathElementBase(); - // polyline element - svg.Element.polyline = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - this.points = svg.CreatePath(this.attribute("points").value); - this.path = function(ctx) { - var bb = new svg.BoundingBox(this.points[0].x, this.points[0].y); - if (ctx != null) { - ctx.beginPath(); - ctx.moveTo(this.points[0].x, this.points[0].y); - } - for (var i = 1; i < this.points.length; i++) { - bb.addPoint(this.points[i].x, this.points[i].y); - if (ctx != null) ctx.lineTo(this.points[i].x, this.points[i].y); - } - return bb; - }; - this.getMarkers = function() { - var markers = []; - for (var i = 0; i < this.points.length - 1; i++) { - markers.push([ this.points[i], this.points[i].angleTo(this.points[i + 1]) ]); - } - markers.push([ this.points[this.points.length - 1], markers[markers.length - 1][1] ]); - return markers; - }; - }; - svg.Element.polyline.prototype = new svg.Element.PathElementBase(); - // polygon element - svg.Element.polygon = function(node) { - this.base = svg.Element.polyline; - this.base(node); - this.basePath = this.path; - this.path = function(ctx) { - var bb = this.basePath(ctx); - if (ctx != null) { - ctx.lineTo(this.points[0].x, this.points[0].y); - ctx.closePath(); - } - return bb; - }; - }; - svg.Element.polygon.prototype = new svg.Element.polyline(); - // path element - svg.Element.path = function(node) { - this.base = svg.Element.PathElementBase; - this.base(node); - var d = this.attribute("d").value; - // TODO: convert to real lexer based on http://www.w3.org/TR/SVG11/paths.html#PathDataBNF - d = d.replace(/,/gm, " "); - // get rid of all commas - d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm, "$1 $2"); - // separate commands from commands - d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm, "$1 $2"); - // separate commands from commands - d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\s])/gm, "$1 $2"); - // separate commands from points - d = d.replace(/([^\s])([MmZzLlHhVvCcSsQqTtAa])/gm, "$1 $2"); - // separate commands from points - d = d.replace(/([0-9])([+\-])/gm, "$1 $2"); - // separate digits when no comma - d = d.replace(/(\.[0-9]*)(\.)/gm, "$1 $2"); - // separate digits when no comma - d = d.replace(/([Aa](\s+[0-9]+){3})\s+([01])\s*([01])/gm, "$1 $3 $4 "); - // shorthand elliptical arc path syntax - d = svg.compressSpaces(d); - // compress multiple spaces - d = svg.trim(d); - this.PathParser = new function(d) { - this.tokens = d.split(" "); - this.reset = function() { - this.i = -1; - this.command = ""; - this.previousCommand = ""; - this.start = new svg.Point(0, 0); - this.control = new svg.Point(0, 0); - this.current = new svg.Point(0, 0); - this.points = []; - this.angles = []; - }; - this.isEnd = function() { - return this.i >= this.tokens.length - 1; - }; - this.isCommandOrEnd = function() { - if (this.isEnd()) return true; - return this.tokens[this.i + 1].match(/^[A-Za-z]$/) != null; - }; - this.isRelativeCommand = function() { - switch (this.command) { - case "m": - case "l": - case "h": - case "v": - case "c": - case "s": - case "q": - case "t": - case "a": - case "z": - return true; - break; - } - return false; - }; - this.getToken = function() { - this.i++; - return this.tokens[this.i]; - }; - this.getScalar = function() { - return parseFloat(this.getToken()); - }; - this.nextCommand = function() { - this.previousCommand = this.command; - this.command = this.getToken(); - }; - this.getPoint = function() { - var p = new svg.Point(this.getScalar(), this.getScalar()); - return this.makeAbsolute(p); - }; - this.getAsControlPoint = function() { - var p = this.getPoint(); - this.control = p; - return p; - }; - this.getAsCurrentPoint = function() { - var p = this.getPoint(); - this.current = p; - return p; - }; - this.getReflectedControlPoint = function() { - if (this.previousCommand.toLowerCase() != "c" && this.previousCommand.toLowerCase() != "s" && this.previousCommand.toLowerCase() != "q" && this.previousCommand.toLowerCase() != "t") { - return this.current; - } - // reflect point - var p = new svg.Point(2 * this.current.x - this.control.x, 2 * this.current.y - this.control.y); - return p; - }; - this.makeAbsolute = function(p) { - if (this.isRelativeCommand()) { - p.x += this.current.x; - p.y += this.current.y; - } - return p; - }; - this.addMarker = function(p, from, priorTo) { - // if the last angle isn't filled in because we didn't have this point yet ... - if (priorTo != null && this.angles.length > 0 && this.angles[this.angles.length - 1] == null) { - this.angles[this.angles.length - 1] = this.points[this.points.length - 1].angleTo(priorTo); - } - this.addMarkerAngle(p, from == null ? null : from.angleTo(p)); - }; - this.addMarkerAngle = function(p, a) { - this.points.push(p); - this.angles.push(a); - }; - this.getMarkerPoints = function() { - return this.points; - }; - this.getMarkerAngles = function() { - for (var i = 0; i < this.angles.length; i++) { - if (this.angles[i] == null) { - for (var j = i + 1; j < this.angles.length; j++) { - if (this.angles[j] != null) { - this.angles[i] = this.angles[j]; - break; - } - } - } - } - return this.angles; - }; - }(d); - this.path = function(ctx) { - var pp = this.PathParser; - pp.reset(); - var bb = new svg.BoundingBox(); - if (ctx != null) ctx.beginPath(); - while (!pp.isEnd()) { - pp.nextCommand(); - switch (pp.command) { - case "M": - case "m": - var p = pp.getAsCurrentPoint(); - pp.addMarker(p); - bb.addPoint(p.x, p.y); - if (ctx != null) ctx.moveTo(p.x, p.y); - pp.start = pp.current; - while (!pp.isCommandOrEnd()) { - var p = pp.getAsCurrentPoint(); - pp.addMarker(p, pp.start); - bb.addPoint(p.x, p.y); - if (ctx != null) ctx.lineTo(p.x, p.y); - } - break; - - case "L": - case "l": - while (!pp.isCommandOrEnd()) { - var c = pp.current; - var p = pp.getAsCurrentPoint(); - pp.addMarker(p, c); - bb.addPoint(p.x, p.y); - if (ctx != null) ctx.lineTo(p.x, p.y); - } - break; - - case "H": - case "h": - while (!pp.isCommandOrEnd()) { - var newP = new svg.Point((pp.isRelativeCommand() ? pp.current.x : 0) + pp.getScalar(), pp.current.y); - pp.addMarker(newP, pp.current); - pp.current = newP; - bb.addPoint(pp.current.x, pp.current.y); - if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y); - } - break; - - case "V": - case "v": - while (!pp.isCommandOrEnd()) { - var newP = new svg.Point(pp.current.x, (pp.isRelativeCommand() ? pp.current.y : 0) + pp.getScalar()); - pp.addMarker(newP, pp.current); - pp.current = newP; - bb.addPoint(pp.current.x, pp.current.y); - if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y); - } - break; - - case "C": - case "c": - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var p1 = pp.getPoint(); - var cntrl = pp.getAsControlPoint(); - var cp = pp.getAsCurrentPoint(); - pp.addMarker(cp, cntrl, p1); - bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); - if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); - } - break; - - case "S": - case "s": - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var p1 = pp.getReflectedControlPoint(); - var cntrl = pp.getAsControlPoint(); - var cp = pp.getAsCurrentPoint(); - pp.addMarker(cp, cntrl, p1); - bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); - if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); - } - break; - - case "Q": - case "q": - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var cntrl = pp.getAsControlPoint(); - var cp = pp.getAsCurrentPoint(); - pp.addMarker(cp, cntrl, cntrl); - bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y); - if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y); - } - break; - - case "T": - case "t": - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var cntrl = pp.getReflectedControlPoint(); - pp.control = cntrl; - var cp = pp.getAsCurrentPoint(); - pp.addMarker(cp, cntrl, cntrl); - bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y); - if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y); - } - break; - - case "A": - case "a": - while (!pp.isCommandOrEnd()) { - var curr = pp.current; - var rx = pp.getScalar(); - var ry = pp.getScalar(); - var xAxisRotation = pp.getScalar() * (Math.PI / 180); - var largeArcFlag = pp.getScalar(); - var sweepFlag = pp.getScalar(); - var cp = pp.getAsCurrentPoint(); - // Conversion from endpoint to center parameterization - // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes - // x1', y1' - var currp = new svg.Point(Math.cos(xAxisRotation) * (curr.x - cp.x) / 2 + Math.sin(xAxisRotation) * (curr.y - cp.y) / 2, -Math.sin(xAxisRotation) * (curr.x - cp.x) / 2 + Math.cos(xAxisRotation) * (curr.y - cp.y) / 2); - // adjust radii - var l = Math.pow(currp.x, 2) / Math.pow(rx, 2) + Math.pow(currp.y, 2) / Math.pow(ry, 2); - if (l > 1) { - rx *= Math.sqrt(l); - ry *= Math.sqrt(l); - } - // cx', cy' - var s = (largeArcFlag == sweepFlag ? -1 : 1) * Math.sqrt((Math.pow(rx, 2) * Math.pow(ry, 2) - Math.pow(rx, 2) * Math.pow(currp.y, 2) - Math.pow(ry, 2) * Math.pow(currp.x, 2)) / (Math.pow(rx, 2) * Math.pow(currp.y, 2) + Math.pow(ry, 2) * Math.pow(currp.x, 2))); - if (isNaN(s)) s = 0; - var cpp = new svg.Point(s * rx * currp.y / ry, s * -ry * currp.x / rx); - // cx, cy - var centp = new svg.Point((curr.x + cp.x) / 2 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y, (curr.y + cp.y) / 2 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y); - // vector magnitude - var m = function(v) { - return Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2)); - }; - // ratio between two vectors - var r = function(u, v) { - return (u[0] * v[0] + u[1] * v[1]) / (m(u) * m(v)); - }; - // angle between two vectors - var a = function(u, v) { - return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(r(u, v)); - }; - // initial angle - var a1 = a([ 1, 0 ], [ (currp.x - cpp.x) / rx, (currp.y - cpp.y) / ry ]); - // angle delta - var u = [ (currp.x - cpp.x) / rx, (currp.y - cpp.y) / ry ]; - var v = [ (-currp.x - cpp.x) / rx, (-currp.y - cpp.y) / ry ]; - var ad = a(u, v); - if (r(u, v) <= -1) ad = Math.PI; - if (r(u, v) >= 1) ad = 0; - // for markers - var dir = 1 - sweepFlag ? 1 : -1; - var ah = a1 + dir * (ad / 2); - var halfWay = new svg.Point(centp.x + rx * Math.cos(ah), centp.y + ry * Math.sin(ah)); - pp.addMarkerAngle(halfWay, ah - dir * Math.PI / 2); - pp.addMarkerAngle(cp, ah - dir * Math.PI); - bb.addPoint(cp.x, cp.y); - // TODO: this is too naive, make it better - if (ctx != null) { - var r = rx > ry ? rx : ry; - var sx = rx > ry ? 1 : rx / ry; - var sy = rx > ry ? ry / rx : 1; - ctx.translate(centp.x, centp.y); - ctx.rotate(xAxisRotation); - ctx.scale(sx, sy); - ctx.arc(0, 0, r, a1, a1 + ad, 1 - sweepFlag); - ctx.scale(1 / sx, 1 / sy); - ctx.rotate(-xAxisRotation); - ctx.translate(-centp.x, -centp.y); - } - } - break; - - case "Z": - case "z": - if (ctx != null) ctx.closePath(); - pp.current = pp.start; - } - } - return bb; - }; - this.getMarkers = function() { - var points = this.PathParser.getMarkerPoints(); - var angles = this.PathParser.getMarkerAngles(); - var markers = []; - for (var i = 0; i < points.length; i++) { - markers.push([ points[i], angles[i] ]); - } - return markers; - }; - }; - svg.Element.path.prototype = new svg.Element.PathElementBase(); - // pattern element - svg.Element.pattern = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - this.createPattern = function(ctx, element) { - var width = this.attribute("width").toPixels("x", true); - var height = this.attribute("height").toPixels("y", true); - // render me using a temporary svg element - var tempSvg = new svg.Element.svg(); - tempSvg.attributes["viewBox"] = new svg.Property("viewBox", this.attribute("viewBox").value); - tempSvg.attributes["width"] = new svg.Property("width", width + "px"); - tempSvg.attributes["height"] = new svg.Property("height", height + "px"); - tempSvg.attributes["transform"] = new svg.Property("transform", this.attribute("patternTransform").value); - tempSvg.children = this.children; - var c = document.createElement("canvas"); - c.width = width; - c.height = height; - var cctx = c.getContext("2d"); - if (this.attribute("x").hasValue() && this.attribute("y").hasValue()) { - cctx.translate(this.attribute("x").toPixels("x", true), this.attribute("y").toPixels("y", true)); - } - // render 3x3 grid so when we transform there's no white space on edges - for (var x = -1; x <= 1; x++) { - for (var y = -1; y <= 1; y++) { - cctx.save(); - cctx.translate(x * c.width, y * c.height); - tempSvg.render(cctx); - cctx.restore(); - } - } - var pattern = ctx.createPattern(c, "repeat"); - return pattern; - }; - }; - svg.Element.pattern.prototype = new svg.Element.ElementBase(); - // marker element - svg.Element.marker = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - this.baseRender = this.render; - this.render = function(ctx, point, angle) { - ctx.translate(point.x, point.y); - if (this.attribute("orient").valueOrDefault("auto") == "auto") ctx.rotate(angle); - if (this.attribute("markerUnits").valueOrDefault("strokeWidth") == "strokeWidth") ctx.scale(ctx.lineWidth, ctx.lineWidth); - ctx.save(); - // render me using a temporary svg element - var tempSvg = new svg.Element.svg(); - tempSvg.attributes["viewBox"] = new svg.Property("viewBox", this.attribute("viewBox").value); - tempSvg.attributes["refX"] = new svg.Property("refX", this.attribute("refX").value); - tempSvg.attributes["refY"] = new svg.Property("refY", this.attribute("refY").value); - tempSvg.attributes["width"] = new svg.Property("width", this.attribute("markerWidth").value); - tempSvg.attributes["height"] = new svg.Property("height", this.attribute("markerHeight").value); - tempSvg.attributes["fill"] = new svg.Property("fill", this.attribute("fill").valueOrDefault("black")); - tempSvg.attributes["stroke"] = new svg.Property("stroke", this.attribute("stroke").valueOrDefault("none")); - tempSvg.children = this.children; - tempSvg.render(ctx); - ctx.restore(); - if (this.attribute("markerUnits").valueOrDefault("strokeWidth") == "strokeWidth") ctx.scale(1 / ctx.lineWidth, 1 / ctx.lineWidth); - if (this.attribute("orient").valueOrDefault("auto") == "auto") ctx.rotate(-angle); - ctx.translate(-point.x, -point.y); - }; - }; - svg.Element.marker.prototype = new svg.Element.ElementBase(); - // definitions element - svg.Element.defs = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - this.render = function(ctx) {}; - }; - svg.Element.defs.prototype = new svg.Element.ElementBase(); - // base for gradients - svg.Element.GradientBase = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - this.gradientUnits = this.attribute("gradientUnits").valueOrDefault("objectBoundingBox"); - this.stops = []; - for (var i = 0; i < this.children.length; i++) { - var child = this.children[i]; - if (child.type == "stop") this.stops.push(child); - } - this.getGradient = function() {}; - this.createGradient = function(ctx, element, parentOpacityProp) { - var stopsContainer = this; - if (this.getHrefAttribute().hasValue()) { - stopsContainer = this.getHrefAttribute().getDefinition(); - } - var addParentOpacity = function(color) { - if (parentOpacityProp.hasValue()) { - var p = new svg.Property("color", color); - return p.addOpacity(parentOpacityProp.value).value; - } - return color; - }; - var g = this.getGradient(ctx, element); - if (g == null) return addParentOpacity(stopsContainer.stops[stopsContainer.stops.length - 1].color); - for (var i = 0; i < stopsContainer.stops.length; i++) { - g.addColorStop(stopsContainer.stops[i].offset, addParentOpacity(stopsContainer.stops[i].color)); - } - if (this.attribute("gradientTransform").hasValue()) { - // render as transformed pattern on temporary canvas - var rootView = svg.ViewPort.viewPorts[0]; - var rect = new svg.Element.rect(); - rect.attributes["x"] = new svg.Property("x", -svg.MAX_VIRTUAL_PIXELS / 3); - rect.attributes["y"] = new svg.Property("y", -svg.MAX_VIRTUAL_PIXELS / 3); - rect.attributes["width"] = new svg.Property("width", svg.MAX_VIRTUAL_PIXELS); - rect.attributes["height"] = new svg.Property("height", svg.MAX_VIRTUAL_PIXELS); - var group = new svg.Element.g(); - group.attributes["transform"] = new svg.Property("transform", this.attribute("gradientTransform").value); - group.children = [ rect ]; - var tempSvg = new svg.Element.svg(); - tempSvg.attributes["x"] = new svg.Property("x", 0); - tempSvg.attributes["y"] = new svg.Property("y", 0); - tempSvg.attributes["width"] = new svg.Property("width", rootView.width); - tempSvg.attributes["height"] = new svg.Property("height", rootView.height); - tempSvg.children = [ group ]; - var c = document.createElement("canvas"); - c.width = rootView.width; - c.height = rootView.height; - var tempCtx = c.getContext("2d"); - tempCtx.fillStyle = g; - tempSvg.render(tempCtx); - return tempCtx.createPattern(c, "no-repeat"); - } - return g; - }; - }; - svg.Element.GradientBase.prototype = new svg.Element.ElementBase(); - // linear gradient element - svg.Element.linearGradient = function(node) { - this.base = svg.Element.GradientBase; - this.base(node); - this.getGradient = function(ctx, element) { - var bb = element.getBoundingBox(); - if (!this.attribute("x1").hasValue() && !this.attribute("y1").hasValue() && !this.attribute("x2").hasValue() && !this.attribute("y2").hasValue()) { - this.attribute("x1", true).value = 0; - this.attribute("y1", true).value = 0; - this.attribute("x2", true).value = 1; - this.attribute("y2", true).value = 0; - } - var x1 = this.gradientUnits == "objectBoundingBox" ? bb.x() + bb.width() * this.attribute("x1").numValue() : this.attribute("x1").toPixels("x"); - var y1 = this.gradientUnits == "objectBoundingBox" ? bb.y() + bb.height() * this.attribute("y1").numValue() : this.attribute("y1").toPixels("y"); - var x2 = this.gradientUnits == "objectBoundingBox" ? bb.x() + bb.width() * this.attribute("x2").numValue() : this.attribute("x2").toPixels("x"); - var y2 = this.gradientUnits == "objectBoundingBox" ? bb.y() + bb.height() * this.attribute("y2").numValue() : this.attribute("y2").toPixels("y"); - if (x1 == x2 && y1 == y2) return null; - return ctx.createLinearGradient(x1, y1, x2, y2); - }; - }; - svg.Element.linearGradient.prototype = new svg.Element.GradientBase(); - // radial gradient element - svg.Element.radialGradient = function(node) { - this.base = svg.Element.GradientBase; - this.base(node); - this.getGradient = function(ctx, element) { - var bb = element.getBoundingBox(); - if (!this.attribute("cx").hasValue()) this.attribute("cx", true).value = "50%"; - if (!this.attribute("cy").hasValue()) this.attribute("cy", true).value = "50%"; - if (!this.attribute("r").hasValue()) this.attribute("r", true).value = "50%"; - var cx = this.gradientUnits == "objectBoundingBox" ? bb.x() + bb.width() * this.attribute("cx").numValue() : this.attribute("cx").toPixels("x"); - var cy = this.gradientUnits == "objectBoundingBox" ? bb.y() + bb.height() * this.attribute("cy").numValue() : this.attribute("cy").toPixels("y"); - var fx = cx; - var fy = cy; - if (this.attribute("fx").hasValue()) { - fx = this.gradientUnits == "objectBoundingBox" ? bb.x() + bb.width() * this.attribute("fx").numValue() : this.attribute("fx").toPixels("x"); - } - if (this.attribute("fy").hasValue()) { - fy = this.gradientUnits == "objectBoundingBox" ? bb.y() + bb.height() * this.attribute("fy").numValue() : this.attribute("fy").toPixels("y"); - } - var r = this.gradientUnits == "objectBoundingBox" ? (bb.width() + bb.height()) / 2 * this.attribute("r").numValue() : this.attribute("r").toPixels(); - return ctx.createRadialGradient(fx, fy, 0, cx, cy, r); - }; - }; - svg.Element.radialGradient.prototype = new svg.Element.GradientBase(); - // gradient stop element - svg.Element.stop = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - this.offset = this.attribute("offset").numValue(); - if (this.offset < 0) this.offset = 0; - if (this.offset > 1) this.offset = 1; - var stopColor = this.style("stop-color"); - if (this.style("stop-opacity").hasValue()) stopColor = stopColor.addOpacity(this.style("stop-opacity").value); - this.color = stopColor.value; - }; - svg.Element.stop.prototype = new svg.Element.ElementBase(); - // animation base element - svg.Element.AnimateBase = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - svg.Animations.push(this); - this.duration = 0; - this.begin = this.attribute("begin").toMilliseconds(); - this.maxDuration = this.begin + this.attribute("dur").toMilliseconds(); - this.getProperty = function() { - var attributeType = this.attribute("attributeType").value; - var attributeName = this.attribute("attributeName").value; - if (attributeType == "CSS") { - return this.parent.style(attributeName, true); - } - return this.parent.attribute(attributeName, true); - }; - this.initialValue = null; - this.initialUnits = ""; - this.removed = false; - this.calcValue = function() { - // OVERRIDE ME! - return ""; - }; - this.update = function(delta) { - // set initial value - if (this.initialValue == null) { - this.initialValue = this.getProperty().value; - this.initialUnits = this.getProperty().getUnits(); - } - // if we're past the end time - if (this.duration > this.maxDuration) { - // loop for indefinitely repeating animations - if (this.attribute("repeatCount").value == "indefinite" || this.attribute("repeatDur").value == "indefinite") { - this.duration = 0; - } else if (this.attribute("fill").valueOrDefault("remove") == "remove" && !this.removed) { - this.removed = true; - this.getProperty().value = this.initialValue; - return true; - } else { - return false; - } - } - this.duration = this.duration + delta; - // if we're past the begin time - var updated = false; - if (this.begin < this.duration) { - var newValue = this.calcValue(); - // tween - if (this.attribute("type").hasValue()) { - // for transform, etc. - var type = this.attribute("type").value; - newValue = type + "(" + newValue + ")"; - } - this.getProperty().value = newValue; - updated = true; - } - return updated; - }; - this.from = this.attribute("from"); - this.to = this.attribute("to"); - this.values = this.attribute("values"); - if (this.values.hasValue()) this.values.value = this.values.value.split(";"); - // fraction of duration we've covered - this.progress = function() { - var ret = { - progress: (this.duration - this.begin) / (this.maxDuration - this.begin) - }; - if (this.values.hasValue()) { - var p = ret.progress * (this.values.value.length - 1); - var lb = Math.floor(p), ub = Math.ceil(p); - ret.from = new svg.Property("from", parseFloat(this.values.value[lb])); - ret.to = new svg.Property("to", parseFloat(this.values.value[ub])); - ret.progress = (p - lb) / (ub - lb); - } else { - ret.from = this.from; - ret.to = this.to; - } - return ret; - }; - }; - svg.Element.AnimateBase.prototype = new svg.Element.ElementBase(); - // animate element - svg.Element.animate = function(node) { - this.base = svg.Element.AnimateBase; - this.base(node); - this.calcValue = function() { - var p = this.progress(); - // tween value linearly - var newValue = p.from.numValue() + (p.to.numValue() - p.from.numValue()) * p.progress; - return newValue + this.initialUnits; - }; - }; - svg.Element.animate.prototype = new svg.Element.AnimateBase(); - // animate color element - svg.Element.animateColor = function(node) { - this.base = svg.Element.AnimateBase; - this.base(node); - this.calcValue = function() { - var p = this.progress(); - var from = new RGBColor(p.from.value); - var to = new RGBColor(p.to.value); - if (from.ok && to.ok) { - // tween color linearly - var r = from.r + (to.r - from.r) * p.progress; - var g = from.g + (to.g - from.g) * p.progress; - var b = from.b + (to.b - from.b) * p.progress; - return "rgb(" + parseInt(r, 10) + "," + parseInt(g, 10) + "," + parseInt(b, 10) + ")"; - } - return this.attribute("from").value; - }; - }; - svg.Element.animateColor.prototype = new svg.Element.AnimateBase(); - // animate transform element - svg.Element.animateTransform = function(node) { - this.base = svg.Element.AnimateBase; - this.base(node); - this.calcValue = function() { - var p = this.progress(); - // tween value linearly - var from = svg.ToNumberArray(p.from.value); - var to = svg.ToNumberArray(p.to.value); - var newValue = ""; - for (var i = 0; i < from.length; i++) { - newValue += from[i] + (to[i] - from[i]) * p.progress + " "; - } - return newValue; - }; - }; - svg.Element.animateTransform.prototype = new svg.Element.animate(); - // font element - svg.Element.font = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - this.horizAdvX = this.attribute("horiz-adv-x").numValue(); - this.isRTL = false; - this.isArabic = false; - this.fontFace = null; - this.missingGlyph = null; - this.glyphs = []; - for (var i = 0; i < this.children.length; i++) { - var child = this.children[i]; - if (child.type == "font-face") { - this.fontFace = child; - if (child.style("font-family").hasValue()) { - svg.Definitions[child.style("font-family").value] = this; - } - } else if (child.type == "missing-glyph") this.missingGlyph = child; else if (child.type == "glyph") { - if (child.arabicForm != "") { - this.isRTL = true; - this.isArabic = true; - if (typeof this.glyphs[child.unicode] == "undefined") this.glyphs[child.unicode] = []; - this.glyphs[child.unicode][child.arabicForm] = child; - } else { - this.glyphs[child.unicode] = child; - } - } - } - }; - svg.Element.font.prototype = new svg.Element.ElementBase(); - // font-face element - svg.Element.fontface = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - this.ascent = this.attribute("ascent").value; - this.descent = this.attribute("descent").value; - this.unitsPerEm = this.attribute("units-per-em").numValue(); - }; - svg.Element.fontface.prototype = new svg.Element.ElementBase(); - // missing-glyph element - svg.Element.missingglyph = function(node) { - this.base = svg.Element.path; - this.base(node); - this.horizAdvX = 0; - }; - svg.Element.missingglyph.prototype = new svg.Element.path(); - // glyph element - svg.Element.glyph = function(node) { - this.base = svg.Element.path; - this.base(node); - this.horizAdvX = this.attribute("horiz-adv-x").numValue(); - this.unicode = this.attribute("unicode").value; - this.arabicForm = this.attribute("arabic-form").value; - }; - svg.Element.glyph.prototype = new svg.Element.path(); - // text element - svg.Element.text = function(node) { - this.captureTextNodes = true; - this.base = svg.Element.RenderedElementBase; - this.base(node); - this.baseSetContext = this.setContext; - this.setContext = function(ctx) { - this.baseSetContext(ctx); - if (this.style("dominant-baseline").hasValue()) ctx.textBaseline = this.style("dominant-baseline").value; - if (this.style("alignment-baseline").hasValue()) ctx.textBaseline = this.style("alignment-baseline").value; - }; - this.getBoundingBox = function() { - // TODO: implement - return new svg.BoundingBox(this.attribute("x").toPixels("x"), this.attribute("y").toPixels("y"), 0, 0); - }; - this.renderChildren = function(ctx) { - this.x = this.attribute("x").toPixels("x"); - this.y = this.attribute("y").toPixels("y"); - this.x += this.getAnchorDelta(ctx, this, 0); - for (var i = 0; i < this.children.length; i++) { - this.renderChild(ctx, this, i); - } - }; - this.getAnchorDelta = function(ctx, parent, startI) { - var textAnchor = this.style("text-anchor").valueOrDefault("start"); - if (textAnchor != "start") { - var width = 0; - for (var i = startI; i < parent.children.length; i++) { - var child = parent.children[i]; - if (i > startI && child.attribute("x").hasValue()) break; - // new group - width += child.measureTextRecursive(ctx); - } - return -1 * (textAnchor == "end" ? width : width / 2); - } - return 0; - }; - this.renderChild = function(ctx, parent, i) { - var child = parent.children[i]; - if (child.attribute("x").hasValue()) { - child.x = child.attribute("x").toPixels("x") + this.getAnchorDelta(ctx, parent, i); - } else { - if (this.attribute("dx").hasValue()) this.x += this.attribute("dx").toPixels("x"); - if (child.attribute("dx").hasValue()) this.x += child.attribute("dx").toPixels("x"); - child.x = this.x; - } - this.x = child.x + child.measureText(ctx); - if (child.attribute("y").hasValue()) { - child.y = child.attribute("y").toPixels("y"); - } else { - if (this.attribute("dy").hasValue()) this.y += this.attribute("dy").toPixels("y"); - if (child.attribute("dy").hasValue()) this.y += child.attribute("dy").toPixels("y"); - child.y = this.y; - } - this.y = child.y; - child.render(ctx); - for (var i = 0; i < child.children.length; i++) { - this.renderChild(ctx, child, i); - } - }; - }; - svg.Element.text.prototype = new svg.Element.RenderedElementBase(); - // text base - svg.Element.TextElementBase = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - this.getGlyph = function(font, text, i) { - var c = text[i]; - var glyph = null; - if (font.isArabic) { - var arabicForm = "isolated"; - if ((i == 0 || text[i - 1] == " ") && i < text.length - 2 && text[i + 1] != " ") arabicForm = "terminal"; - if (i > 0 && text[i - 1] != " " && i < text.length - 2 && text[i + 1] != " ") arabicForm = "medial"; - if (i > 0 && text[i - 1] != " " && (i == text.length - 1 || text[i + 1] == " ")) arabicForm = "initial"; - if (typeof font.glyphs[c] != "undefined") { - glyph = font.glyphs[c][arabicForm]; - if (glyph == null && font.glyphs[c].type == "glyph") glyph = font.glyphs[c]; - } - } else { - glyph = font.glyphs[c]; - } - if (glyph == null) glyph = font.missingGlyph; - return glyph; - }; - this.renderChildren = function(ctx) { - var customFont = this.parent.style("font-family").getDefinition(); - if (customFont != null) { - var fontSize = this.parent.style("font-size").numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize); - var fontStyle = this.parent.style("font-style").valueOrDefault(svg.Font.Parse(svg.ctx.font).fontStyle); - var text = this.getText(); - if (customFont.isRTL) text = text.split("").reverse().join(""); - var dx = svg.ToNumberArray(this.parent.attribute("dx").value); - for (var i = 0; i < text.length; i++) { - var glyph = this.getGlyph(customFont, text, i); - var scale = fontSize / customFont.fontFace.unitsPerEm; - ctx.translate(this.x, this.y); - ctx.scale(scale, -scale); - var lw = ctx.lineWidth; - ctx.lineWidth = ctx.lineWidth * customFont.fontFace.unitsPerEm / fontSize; - if (fontStyle == "italic") ctx.transform(1, 0, .4, 1, 0, 0); - glyph.render(ctx); - if (fontStyle == "italic") ctx.transform(1, 0, -.4, 1, 0, 0); - ctx.lineWidth = lw; - ctx.scale(1 / scale, -1 / scale); - ctx.translate(-this.x, -this.y); - this.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / customFont.fontFace.unitsPerEm; - if (typeof dx[i] != "undefined" && !isNaN(dx[i])) { - this.x += dx[i]; - } - } - return; - } - if (ctx.fillStyle != "") ctx.fillText(svg.compressSpaces(this.getText()), this.x, this.y); - if (ctx.strokeStyle != "") ctx.strokeText(svg.compressSpaces(this.getText()), this.x, this.y); - }; - this.getText = function() {}; - this.measureTextRecursive = function(ctx) { - var width = this.measureText(ctx); - for (var i = 0; i < this.children.length; i++) { - width += this.children[i].measureTextRecursive(ctx); - } - return width; - }; - this.measureText = function(ctx) { - var customFont = this.parent.style("font-family").getDefinition(); - if (customFont != null) { - var fontSize = this.parent.style("font-size").numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize); - var measure = 0; - var text = this.getText(); - if (customFont.isRTL) text = text.split("").reverse().join(""); - var dx = svg.ToNumberArray(this.parent.attribute("dx").value); - for (var i = 0; i < text.length; i++) { - var glyph = this.getGlyph(customFont, text, i); - measure += (glyph.horizAdvX || customFont.horizAdvX) * fontSize / customFont.fontFace.unitsPerEm; - if (typeof dx[i] != "undefined" && !isNaN(dx[i])) { - measure += dx[i]; - } - } - return measure; - } - var textToMeasure = svg.compressSpaces(this.getText()); - if (!ctx.measureText) return textToMeasure.length * 10; - ctx.save(); - this.setContext(ctx); - var width = ctx.measureText(textToMeasure).width; - ctx.restore(); - return width; - }; - }; - svg.Element.TextElementBase.prototype = new svg.Element.RenderedElementBase(); - // tspan - svg.Element.tspan = function(node) { - this.captureTextNodes = true; - this.base = svg.Element.TextElementBase; - this.base(node); - this.text = node.nodeValue || node.text || ""; - this.getText = function() { - return this.text; - }; - }; - svg.Element.tspan.prototype = new svg.Element.TextElementBase(); - // tref - svg.Element.tref = function(node) { - this.base = svg.Element.TextElementBase; - this.base(node); - this.getText = function() { - var element = this.getHrefAttribute().getDefinition(); - if (element != null) return element.children[0].getText(); - }; - }; - svg.Element.tref.prototype = new svg.Element.TextElementBase(); - // a element - svg.Element.a = function(node) { - this.base = svg.Element.TextElementBase; - this.base(node); - this.hasText = true; - for (var i = 0; i < node.childNodes.length; i++) { - if (node.childNodes[i].nodeType != 3) this.hasText = false; - } - // this might contain text - this.text = this.hasText ? node.childNodes[0].nodeValue : ""; - this.getText = function() { - return this.text; - }; - this.baseRenderChildren = this.renderChildren; - this.renderChildren = function(ctx) { - if (this.hasText) { - // render as text element - this.baseRenderChildren(ctx); - var fontSize = new svg.Property("fontSize", svg.Font.Parse(svg.ctx.font).fontSize); - svg.Mouse.checkBoundingBox(this, new svg.BoundingBox(this.x, this.y - fontSize.toPixels("y"), this.x + this.measureText(ctx), this.y)); - } else { - // render as temporary group - var g = new svg.Element.g(); - g.children = this.children; - g.parent = this; - g.render(ctx); - } - }; - this.onclick = function() { - window.open(this.getHrefAttribute().value); - }; - this.onmousemove = function() { - svg.ctx.canvas.style.cursor = "pointer"; - }; - }; - svg.Element.a.prototype = new svg.Element.TextElementBase(); - // image element - svg.Element.image = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - var href = this.getHrefAttribute().value; - var isSvg = href.match(/\.svg$/); - svg.Images.push(this); - this.loaded = false; - if (!isSvg) { - this.img = document.createElement("img"); - var self = this; - this.img.onload = function() { - self.loaded = true; - }; - this.img.onerror = function() { - if (typeof console != "undefined") { - console.log('ERROR: image "' + href + '" not found'); - self.loaded = true; - } - }; - this.img.src = href; - } else { - this.img = svg.ajax(href); - this.loaded = true; - } - this.renderChildren = function(ctx) { - var x = this.attribute("x").toPixels("x"); - var y = this.attribute("y").toPixels("y"); - var width = this.attribute("width").toPixels("x"); - var height = this.attribute("height").toPixels("y"); - if (width == 0 || height == 0) return; - ctx.save(); - if (isSvg) { - ctx.drawSvg(this.img, x, y, width, height); - } else { - ctx.translate(x, y); - svg.AspectRatio(ctx, this.attribute("preserveAspectRatio").value, width, this.img.width, height, this.img.height, 0, 0); - ctx.drawImage(this.img, 0, 0); - } - ctx.restore(); - }; - this.getBoundingBox = function() { - var x = this.attribute("x").toPixels("x"); - var y = this.attribute("y").toPixels("y"); - var width = this.attribute("width").toPixels("x"); - var height = this.attribute("height").toPixels("y"); - return new svg.BoundingBox(x, y, x + width, y + height); - }; - }; - svg.Element.image.prototype = new svg.Element.RenderedElementBase(); - // group element - svg.Element.g = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - this.getBoundingBox = function() { - var bb = new svg.BoundingBox(); - for (var i = 0; i < this.children.length; i++) { - bb.addBoundingBox(this.children[i].getBoundingBox()); - } - return bb; - }; - }; - svg.Element.g.prototype = new svg.Element.RenderedElementBase(); - // symbol element - svg.Element.symbol = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - this.baseSetContext = this.setContext; - this.setContext = function(ctx) { - this.baseSetContext(ctx); - // viewbox - if (this.attribute("viewBox").hasValue()) { - var viewBox = svg.ToNumberArray(this.attribute("viewBox").value); - var minX = viewBox[0]; - var minY = viewBox[1]; - width = viewBox[2]; - height = viewBox[3]; - svg.AspectRatio(ctx, this.attribute("preserveAspectRatio").value, this.attribute("width").toPixels("x"), width, this.attribute("height").toPixels("y"), height, minX, minY); - svg.ViewPort.SetCurrent(viewBox[2], viewBox[3]); - } - }; - }; - svg.Element.symbol.prototype = new svg.Element.RenderedElementBase(); - // style element - svg.Element.style = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - // text, or spaces then CDATA - var css = ""; - for (var i = 0; i < node.childNodes.length; i++) { - css += node.childNodes[i].nodeValue; - } - css = css.replace(/(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm, ""); - // remove comments - css = svg.compressSpaces(css); - // replace whitespace - var cssDefs = css.split("}"); - for (var i = 0; i < cssDefs.length; i++) { - if (svg.trim(cssDefs[i]) != "") { - var cssDef = cssDefs[i].split("{"); - var cssClasses = cssDef[0].split(","); - var cssProps = cssDef[1].split(";"); - for (var j = 0; j < cssClasses.length; j++) { - var cssClass = svg.trim(cssClasses[j]); - if (cssClass != "") { - var props = {}; - for (var k = 0; k < cssProps.length; k++) { - var prop = cssProps[k].indexOf(":"); - var name = cssProps[k].substr(0, prop); - var value = cssProps[k].substr(prop + 1, cssProps[k].length - prop); - if (name != null && value != null) { - props[svg.trim(name)] = new svg.Property(svg.trim(name), svg.trim(value)); - } - } - svg.Styles[cssClass] = props; - if (cssClass == "@font-face") { - var fontFamily = props["font-family"].value.replace(/"/g, ""); - var srcs = props["src"].value.split(","); - for (var s = 0; s < srcs.length; s++) { - if (srcs[s].indexOf('format("svg")') > 0) { - var urlStart = srcs[s].indexOf("url"); - var urlEnd = srcs[s].indexOf(")", urlStart); - var url = srcs[s].substr(urlStart + 5, urlEnd - urlStart - 6); - var doc = svg.parseXml(svg.ajax(url)); - var fonts = doc.getElementsByTagName("font"); - for (var f = 0; f < fonts.length; f++) { - var font = svg.CreateElement(fonts[f]); - svg.Definitions[fontFamily] = font; - } - } - } - } - } - } - } - } - }; - svg.Element.style.prototype = new svg.Element.ElementBase(); - // use element - svg.Element.use = function(node) { - this.base = svg.Element.RenderedElementBase; - this.base(node); - this.baseSetContext = this.setContext; - this.setContext = function(ctx) { - this.baseSetContext(ctx); - if (this.attribute("x").hasValue()) ctx.translate(this.attribute("x").toPixels("x"), 0); - if (this.attribute("y").hasValue()) ctx.translate(0, this.attribute("y").toPixels("y")); - }; - this.getDefinition = function() { - var element = this.getHrefAttribute().getDefinition(); - if (this.attribute("width").hasValue()) element.attribute("width", true).value = this.attribute("width").value; - if (this.attribute("height").hasValue()) element.attribute("height", true).value = this.attribute("height").value; - return element; - }; - this.path = function(ctx) { - var element = this.getDefinition(); - if (element != null) element.path(ctx); - }; - this.getBoundingBox = function() { - var element = this.getDefinition(); - if (element != null) return element.getBoundingBox(); - }; - this.renderChildren = function(ctx) { - var element = this.getDefinition(); - if (element != null) { - // temporarily detach from parent and render - var oldParent = element.parent; - element.parent = null; - element.render(ctx); - element.parent = oldParent; - } - }; - }; - svg.Element.use.prototype = new svg.Element.RenderedElementBase(); - // mask element - svg.Element.mask = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - this.apply = function(ctx, element) { - // render as temp svg - var x = this.attribute("x").toPixels("x"); - var y = this.attribute("y").toPixels("y"); - var width = this.attribute("width").toPixels("x"); - var height = this.attribute("height").toPixels("y"); - if (width == 0 && height == 0) { - var bb = new svg.BoundingBox(); - for (var i = 0; i < this.children.length; i++) { - bb.addBoundingBox(this.children[i].getBoundingBox()); - } - var x = Math.floor(bb.x1); - var y = Math.floor(bb.y1); - var width = Math.floor(bb.width()); - var height = Math.floor(bb.height()); - } - // temporarily remove mask to avoid recursion - var mask = element.attribute("mask").value; - element.attribute("mask").value = ""; - var cMask = document.createElement("canvas"); - cMask.width = x + width; - cMask.height = y + height; - var maskCtx = cMask.getContext("2d"); - this.renderChildren(maskCtx); - var c = document.createElement("canvas"); - c.width = x + width; - c.height = y + height; - var tempCtx = c.getContext("2d"); - element.render(tempCtx); - tempCtx.globalCompositeOperation = "destination-in"; - tempCtx.fillStyle = maskCtx.createPattern(cMask, "no-repeat"); - tempCtx.fillRect(0, 0, x + width, y + height); - ctx.fillStyle = tempCtx.createPattern(c, "no-repeat"); - ctx.fillRect(0, 0, x + width, y + height); - // reassign mask - element.attribute("mask").value = mask; - }; - this.render = function(ctx) {}; - }; - svg.Element.mask.prototype = new svg.Element.ElementBase(); - // clip element - svg.Element.clipPath = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - this.apply = function(ctx) { - for (var i = 0; i < this.children.length; i++) { - var child = this.children[i]; - if (typeof child.path != "undefined") { - var transform = null; - if (child.attribute("transform").hasValue()) { - transform = new svg.Transform(child.attribute("transform").value); - transform.apply(ctx); - } - child.path(ctx); - ctx.clip(); - if (transform) { - transform.unapply(ctx); - } - } - } - }; - this.render = function(ctx) {}; - }; - svg.Element.clipPath.prototype = new svg.Element.ElementBase(); - // filters - svg.Element.filter = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - this.apply = function(ctx, element) { - // render as temp svg - var bb = element.getBoundingBox(); - var x = Math.floor(bb.x1); - var y = Math.floor(bb.y1); - var width = Math.floor(bb.width()); - var height = Math.floor(bb.height()); - // temporarily remove filter to avoid recursion - var filter = element.style("filter").value; - element.style("filter").value = ""; - var px = 0, py = 0; - for (var i = 0; i < this.children.length; i++) { - var efd = this.children[i].extraFilterDistance || 0; - px = Math.max(px, efd); - py = Math.max(py, efd); - } - var c = document.createElement("canvas"); - c.width = width + 2 * px; - c.height = height + 2 * py; - var tempCtx = c.getContext("2d"); - tempCtx.translate(-x + px, -y + py); - element.render(tempCtx); - // apply filters - for (var i = 0; i < this.children.length; i++) { - this.children[i].apply(tempCtx, 0, 0, width + 2 * px, height + 2 * py); - } - // render on me - ctx.drawImage(c, 0, 0, width + 2 * px, height + 2 * py, x - px, y - py, width + 2 * px, height + 2 * py); - // reassign filter - element.style("filter", true).value = filter; - }; - this.render = function(ctx) {}; - }; - svg.Element.filter.prototype = new svg.Element.ElementBase(); - svg.Element.feMorphology = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - this.apply = function(ctx, x, y, width, height) {}; - }; - svg.Element.feMorphology.prototype = new svg.Element.ElementBase(); - svg.Element.feColorMatrix = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - function imGet(img, x, y, width, height, rgba) { - return img[y * width * 4 + x * 4 + rgba]; - } - function imSet(img, x, y, width, height, rgba, val) { - img[y * width * 4 + x * 4 + rgba] = val; - } - this.apply = function(ctx, x, y, width, height) { - // only supporting grayscale for now per Issue 195, need to extend to all matrix - // assuming x==0 && y==0 for now - var srcData = ctx.getImageData(0, 0, width, height); - for (var y = 0; y < height; y++) { - for (var x = 0; x < width; x++) { - var r = imGet(srcData.data, x, y, width, height, 0); - var g = imGet(srcData.data, x, y, width, height, 1); - var b = imGet(srcData.data, x, y, width, height, 2); - var gray = (r + g + b) / 3; - imSet(srcData.data, x, y, width, height, 0, gray); - imSet(srcData.data, x, y, width, height, 1, gray); - imSet(srcData.data, x, y, width, height, 2, gray); - } - } - ctx.clearRect(0, 0, width, height); - ctx.putImageData(srcData, 0, 0); - }; - }; - svg.Element.feColorMatrix.prototype = new svg.Element.ElementBase(); - svg.Element.feGaussianBlur = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - this.blurRadius = Math.floor(this.attribute("stdDeviation").numValue()); - this.extraFilterDistance = this.blurRadius; - this.apply = function(ctx, x, y, width, height) { - if (typeof stackBlurCanvasRGBA == "undefined") { - if (typeof console != "undefined") { - console.log("ERROR: StackBlur.js must be included for blur to work"); - } - return; - } - // StackBlur requires canvas be on document - ctx.canvas.id = svg.UniqueId(); - ctx.canvas.style.display = "none"; - document.body.appendChild(ctx.canvas); - stackBlurCanvasRGBA(ctx.canvas.id, x, y, width, height, this.blurRadius); - document.body.removeChild(ctx.canvas); - }; - }; - svg.Element.feGaussianBlur.prototype = new svg.Element.ElementBase(); - // title element, do nothing - svg.Element.title = function(node) {}; - svg.Element.title.prototype = new svg.Element.ElementBase(); - // desc element, do nothing - svg.Element.desc = function(node) {}; - svg.Element.desc.prototype = new svg.Element.ElementBase(); - svg.Element.MISSING = function(node) { - if (typeof console != "undefined") { - console.log("ERROR: Element '" + node.nodeName + "' not yet implemented."); - } - }; - svg.Element.MISSING.prototype = new svg.Element.ElementBase(); - // element factory - svg.CreateElement = function(node) { - var className = node.nodeName.replace(/^[^:]+:/, ""); - // remove namespace - className = className.replace(/\-/g, ""); - // remove dashes - var e = null; - if (typeof svg.Element[className] != "undefined") { - e = new svg.Element[className](node); - } else { - e = new svg.Element.MISSING(node); - } - e.type = node.nodeName; - return e; - }; - // load from url - svg.load = function(ctx, url) { - svg.loadXml(ctx, svg.ajax(url)); - }; - // load from xml - svg.loadXml = function(ctx, xml) { - svg.loadXmlDoc(ctx, svg.parseXml(xml)); - }; - svg.loadXmlDoc = function(ctx, dom) { - svg.init(ctx); - var mapXY = function(p) { - var e = ctx.canvas; - while (e) { - p.x -= e.offsetLeft; - p.y -= e.offsetTop; - e = e.offsetParent; - } - if (window.scrollX) p.x += window.scrollX; - if (window.scrollY) p.y += window.scrollY; - return p; - }; - // bind mouse - if (svg.opts["ignoreMouse"] != true) { - ctx.canvas.onclick = function(e) { - var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY)); - svg.Mouse.onclick(p.x, p.y); - }; - ctx.canvas.onmousemove = function(e) { - var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY)); - svg.Mouse.onmousemove(p.x, p.y); - }; - } - var e = svg.CreateElement(dom.documentElement); - e.root = true; - // render loop - var isFirstRender = true; - var draw = function() { - svg.ViewPort.Clear(); - if (ctx.canvas.parentNode) svg.ViewPort.SetCurrent(ctx.canvas.parentNode.clientWidth, ctx.canvas.parentNode.clientHeight); - if (svg.opts["ignoreDimensions"] != true) { - // set canvas size - if (e.style("width").hasValue()) { - ctx.canvas.width = e.style("width").toPixels("x"); - ctx.canvas.style.width = ctx.canvas.width + "px"; - } - if (e.style("height").hasValue()) { - ctx.canvas.height = e.style("height").toPixels("y"); - ctx.canvas.style.height = ctx.canvas.height + "px"; - } - } - var cWidth = ctx.canvas.clientWidth || ctx.canvas.width; - var cHeight = ctx.canvas.clientHeight || ctx.canvas.height; - if (svg.opts["ignoreDimensions"] == true && e.style("width").hasValue() && e.style("height").hasValue()) { - cWidth = e.style("width").toPixels("x"); - cHeight = e.style("height").toPixels("y"); - } - svg.ViewPort.SetCurrent(cWidth, cHeight); - if (svg.opts["offsetX"] != null) e.attribute("x", true).value = svg.opts["offsetX"]; - if (svg.opts["offsetY"] != null) e.attribute("y", true).value = svg.opts["offsetY"]; - if (svg.opts["scaleWidth"] != null && svg.opts["scaleHeight"] != null) { - var xRatio = 1, yRatio = 1, viewBox = svg.ToNumberArray(e.attribute("viewBox").value); - if (e.attribute("width").hasValue()) xRatio = e.attribute("width").toPixels("x") / svg.opts["scaleWidth"]; else if (!isNaN(viewBox[2])) xRatio = viewBox[2] / svg.opts["scaleWidth"]; - if (e.attribute("height").hasValue()) yRatio = e.attribute("height").toPixels("y") / svg.opts["scaleHeight"]; else if (!isNaN(viewBox[3])) yRatio = viewBox[3] / svg.opts["scaleHeight"]; - e.attribute("width", true).value = svg.opts["scaleWidth"]; - e.attribute("height", true).value = svg.opts["scaleHeight"]; - e.attribute("viewBox", true).value = "0 0 " + cWidth * xRatio + " " + cHeight * yRatio; - e.attribute("preserveAspectRatio", true).value = "none"; - } - // clear and render - if (svg.opts["ignoreClear"] != true) { - ctx.clearRect(0, 0, cWidth, cHeight); - } - e.render(ctx); - if (isFirstRender) { - isFirstRender = false; - if (typeof svg.opts["renderCallback"] == "function") svg.opts["renderCallback"](dom); - } - }; - var waitingForImages = true; - if (svg.ImagesLoaded()) { - waitingForImages = false; - draw(); - } - svg.intervalID = setInterval(function() { - var needUpdate = false; - if (waitingForImages && svg.ImagesLoaded()) { - waitingForImages = false; - needUpdate = true; - } - // need update from mouse events? - if (svg.opts["ignoreMouse"] != true) { - needUpdate = needUpdate | svg.Mouse.hasEvents(); - } - // need update from animations? - if (svg.opts["ignoreAnimation"] != true) { - for (var i = 0; i < svg.Animations.length; i++) { - needUpdate = needUpdate | svg.Animations[i].update(1e3 / svg.FRAMERATE); - } - } - // need update from redraw? - if (typeof svg.opts["forceRedraw"] == "function") { - if (svg.opts["forceRedraw"]() == true) needUpdate = true; - } - // render if needed - if (needUpdate) { - draw(); - svg.Mouse.runEvents(); - } - }, 1e3 / svg.FRAMERATE); - }; - svg.stop = function() { - if (svg.intervalID) { - clearInterval(svg.intervalID); - } - }; - svg.Mouse = new function() { - this.events = []; - this.hasEvents = function() { - return this.events.length != 0; - }; - this.onclick = function(x, y) { - this.events.push({ - type: "onclick", - x: x, - y: y, - run: function(e) { - if (e.onclick) e.onclick(); - } - }); - }; - this.onmousemove = function(x, y) { - this.events.push({ - type: "onmousemove", - x: x, - y: y, - run: function(e) { - if (e.onmousemove) e.onmousemove(); - } - }); - }; - this.eventElements = []; - this.checkPath = function(element, ctx) { - for (var i = 0; i < this.events.length; i++) { - var e = this.events[i]; - if (ctx.isPointInPath && ctx.isPointInPath(e.x, e.y)) this.eventElements[i] = element; - } - }; - this.checkBoundingBox = function(element, bb) { - for (var i = 0; i < this.events.length; i++) { - var e = this.events[i]; - if (bb.isPointInBox(e.x, e.y)) this.eventElements[i] = element; - } - }; - this.runEvents = function() { - svg.ctx.canvas.style.cursor = ""; - for (var i = 0; i < this.events.length; i++) { - var e = this.events[i]; - var element = this.eventElements[i]; - while (element) { - e.run(element); - element = element.parent; - } - } - // done running, clear - this.events = []; - this.eventElements = []; - }; - }(); - return svg; - } - })(); - if (typeof CanvasRenderingContext2D != "undefined") { - CanvasRenderingContext2D.prototype.drawSvg = function(s, dx, dy, dw, dh) { - canvg(this.canvas, s, { - ignoreMouse: true, - ignoreAnimation: true, - ignoreDimensions: true, - ignoreClear: true, - offsetX: dx, - offsetY: dy, - scaleWidth: dw, - scaleHeight: dh - }); - }; - } - return canvg; - } -}; - -/*! - * 输出转换器,提供输出支持 - */ -_p[1] = { - value: function(require) { - var kity = _p.r(34), canvg = _p.r(0); - return kity.createClass("Output", { - constructor: function(formula) { - this.formula = formula; - }, - toJPG: function(cb) { - toImage(this.formula, "image/jpeg", cb); - }, - toPNG: function(cb) { - toImage(this.formula, "image/png", cb); - } - }); - function toImage(formula, type, cb) { - var rectSpace = formula.container.getRenderBox(); - return getBase64DataURL(formula.node.ownerDocument, { - width: rectSpace.width, - height: rectSpace.height, - content: getSVGContent(formula.node) - }, type, cb); - } - function getBase64DataURL(doc, data, type, cb) { - var canvas = null, args = arguments, ctx = null; - if (true) { - drawToCanvas.apply(null, args); - } else { - canvas = getImageCanvas(doc, data.width, data.height, type); - ctx = canvas.getContext("2d"); - var image = new Image(); - image.onload = function() { - try { - ctx.drawImage(image, 0, 0); - cb(canvas.toDataURL(type)); - } catch (e) { - drawToCanvas.apply(null, args); - } - }; - image.src = getSVGDataURL(data.content); - } - } - function getSVGContent(svgNode) { - var tmp = svgNode.ownerDocument.createElement("div"), start = [ '' ]; - tmp.appendChild(svgNode.cloneNode(true)); - return tmp.innerHTML.replace(/]+?>/i, start.join("")).replace(/ /g, ""); - } - function getSVGDataURL(data) { - return "data:image/svg+xml;base64," + window.btoa(unescape(encodeURIComponent(data))); - } - function getImageCanvas(doc, width, height, type) { - var canvas = doc.createElement("canvas"), ctx = canvas.getContext("2d"); - canvas.width = width; - canvas.height = height; - if (type !== "image/png") { - ctx.fillStyle = "white"; - ctx.fillRect(0, 0, canvas.width, canvas.height); - } - return canvas; - } - function drawToCanvas(doc, data, type, cb) { - var canvas = getImageCanvas(doc, data.width, data.height, type); - canvas.style.cssText = "position: absolute; top: 0; left: 100000px; z-index: -1;"; - window.setTimeout(function() { - doc.body.appendChild(canvas); - canvg(canvas, data.content); - doc.body.removeChild(canvas); - cb(canvas.toDataURL(type)); - }, 0); - } - } -}; - -/*! - * 所有字符的列表 - */ -_p[2] = { - value: function() { - return [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "ȷ", "ı", "α", "β", "γ", "δ", "ε", "ζ", "η", "θ", "ι", "κ", "λ", "μ", "ν", "ξ", "ο", "π", "ρ", "ς", "σ", "τ", "υ", "φ", "χ", "ψ", "ω", "ϑ", "ϕ", "ϖ", "Ϟ", "Ϝ", "ϵ", "ϱ", "Ϲ", "ℜ", "ℵ", "ℑ", "℧", "ℶ", "ℷ", "ℸ", "ð", "ℏ", "⅁", "ℎ", "∂", "℘", "⅌", "Ⅎ", "∁", "ℓ", "Ⓢ", "(", ")", "Γ", "Δ", "Ε", "Ζ", "Η", "Θ", "Ι", "Κ", "Λ", "Μ", "Ν", "Ξ", "Ο", "Π", "Ρ", "Σ", "Τ", "Υ", "Φ", "Χ", "Ψ", "Ω", "Α", "Β", "#", "!", "$", "%", "&", "∠", "′", "‵", "★", "◆", "■", "▲", "▼", "⊤", "⊥", "♣", "♠", "♢", "♡", "∃", "∄", "♭", "♮", "♯", "∀", "∞", "∡", "∇", "¬", "∢", "√", "△", "▽", "∅", "ø", "◇", "◀", "▸", "[", "]", "{", "}", "〈", "〉", "ϰ", ",", ".", "/", ":", ";", "?", "\\", "⋮", "⋯", "⋰", "…", "@", """, "'", "|", "^", "`", "“", "_", "*", "+", "-", "∐", "⊼", "⊻", "◯", "⊡", "⊟", "⊞", "⊠", "•", "∩", "∪", "⋒", "⋓", "⋐", "⋑", "·", "▪", "◦", "⊛", "⊚", "⊖", "⊙", "⊝", "⊕", "⊗", "⊘", "±", "∓", "⋏", "⋎", "†", "‡", "⋄", "÷", "⋇", "∔", "⌭", "⋗", "⋖", "⋉", "⋊", "⋋", "⋌", "⊓", "⊔", "⊑", "⊒", "⊏", "⊐", "⋆", "×", "⊳", "⊲", "⊵", "⊴", "⊎", "∨", "∧", "≀", "<", "=", ">", "≈", "≇", "≍", "≒", "≓", "≊", "∽", "≁", "≂", "≃", "⋍", "≏", "≎", "≗", "≅", "⋞", "⋟", "≐", "≑", "≖", "⪖", "⪕", "≡", "≥", "≤", "≦", "≧", "⩾", "⩽", "≫", "≪", "≨", "≩", "⋘", "⋙", "⪇", "⪈", "⪉", "⪊", "⋧", "⋦", "⪆", "⪅", "⋛", "⋚", "⪋", "⪌", "≷", "≶", "≳", "≲", "⌮", "⌯", "≯", "≱", "≰", "≮", "⌱", "⌰", "⌲", "⌳", "≬", "⊀", "⊁", "⋠", "⋡", "≺", "≻", "≼", "≽", "≾", "≿", "⊂", "⊃", "⊈", "⊉", "⊆", "⊇", "⊊", "⊋", "⪷", "⪸", "⪯", "⪰", "⪹", "⪺", "⪵", "⪶", "⋨", "⋩", "∼", "≜", "↶", "↷", "↺", "↻", "↾", "↿", "⇂", "⇃", "⇄", "⇆", "⇈", "⇊", "⇋", "⇌", "⇍", "⇎", "⇏", "⇐", "⇑", "⇒", "⇓", "⇔", "⇕", "⇚", "⇛", "⇝", "↫", "↬", "↭", "↮", "←", "↑", "→", "↓", "↔", "↕", "↖", "↗", "↘", "↙", "↞", "↠", "↢", "↣", "↰", "↱", "⊢", "⊣", "⊨", "⊩", "⊪", "⊭", "⊯", "⊸", "⊺", "⋔", "⋪", "⋫", "⋬", "⋭", "⌈", "⌉", "⌊", "⌋", "⫋", "⫌", "⫅", "⫆", "∈", "∋", "∝", "∤", "∦", "∴", "∵", "∍", "⋈", "⌢", "⌣", "∣", "∥", "⏐", "⏑", "⏒", "⏓", "⫇", "⫈", "⊮", "⊬", "⫉", "⏔", "⏕", "⏖", "⏗", "⇇", "⇉", "↼", "↽", "⇀", "⇁", "↚", "↛", "⟵", "⟶", "⟷", "⟹", "⟸", "⟺", "≢", "≠", "∉" ]; - } -}; - -/*! - * 字符配置 - */ -_p[3] = { - value: function() { - return { - // 默认字体 - defaultFont: "KF AMS MAIN" - }; - } -}; - -/*! - * 工厂方法,创建兼容各浏览器的text实现 - */ -_p[4] = { - value: function(require) { - var kity = _p.r(34), divNode = document.createElement("div"), NAMESPACE = "http://www.w3.org/XML/1998/namespace"; - function createText(content) { - var text = new kity.Text(); - // Non-IE - if ("innerHTML" in text.node) { - text.node.setAttributeNS(NAMESPACE, "xml:space", "preserve"); - } else { - if (content.indexOf(" ") != -1) { - content = convertContent(content); - } - } - text.setContent(content); - return text; - } - /** - * 构建节点来转换内容 - */ - function convertContent(content) { - divNode.innerHTML = '' + content.replace(/\s/gi, " ") + ""; - return divNode.firstChild.firstChild.textContent; - } - return { - create: function(content) { - return createText(content); - } - }; - } -}; - -/** - * 文本 - */ -_p[5] = { - value: function(require) { - var kity = _p.r(34), FONT_CONF = _p.r(47).font, FontManager = _p.r(25), TextFactory = _p.r(4); - return kity.createClass("Text", { - base: _p.r(46), - constructor: function(content, fontFamily) { - this.callBase(); - this.fontFamily = fontFamily; - this.fontSize = 50; - this.content = content || ""; - // 移除多余的节点 - this.box.remove(); - this.translationContent = this.translation(this.content); - this.contentShape = new kity.Group(); - this.contentNode = this.createContent(); - this.contentShape.addShape(this.contentNode); - this.addShape(this.contentShape); - }, - createContent: function() { - var contentNode = TextFactory.create(this.translationContent); - contentNode.setAttr({ - "font-family": this.fontFamily, - "font-size": 50, - x: 0, - y: FONT_CONF.offset - }); - return contentNode; - }, - setFamily: function(fontFamily) { - this.fontFamily = fontFamily; - this.contentNode.setAttr("font-family", fontFamily); - }, - setFontSize: function(fontSize) { - this.fontSize = fontSize; - this.contentNode.setAttr("font-size", fontSize + "px"); - this.contentNode.setAttr("y", fontSize / 50 * FONT_CONF.offset); - }, - getBaseHeight: function() { - var chars = this.contentShape.getItems(), currentChar = null, index = 0, height = 0; - while (currentChar = chars[index]) { - height = Math.max(height, currentChar.getHeight()); - index++; - } - return height; - }, - translation: function(content) { - var fontFamily = this.fontFamily; - // 首先特殊处理掉两个相连的"`"符号 - return content.replace(/``/g, "“").replace(/\\([a-zA-Z,]+)\\/g, function(match, input) { - if (input === ",") { - return " "; - } - var data = FontManager.getCharacterValue(input, fontFamily); - if (!data) { - return ""; - } - return data; - }); - } - }); - } -}; - -/** - * 定义公式中各种对象的类型 - */ -_p[6] = { - value: function() { - return { - UNKNOWN: -1, - EXP: 0, - COMPOUND_EXP: 1, - OP: 2 - }; - } -}; - -/** - * 定义公式中上下标的类型 - */ -_p[7] = { - value: function() { - return { - SIDE: "side", - FOLLOW: "follow" - }; - } -}; - -/** - * 下标表达式 - */ -_p[8] = { - value: function(require) { - var kity = _p.r(34); - return kity.createClass("SubscriptExpression", { - base: _p.r(17), - constructor: function(operand, subscript) { - this.callBase(operand, null, subscript); - this.setFlag("Subscript"); - } - }); - } -}; - -/** - * 上标表达式 - */ -_p[9] = { - value: function(require) { - var kity = _p.r(34); - return kity.createClass("SuperscriptExpression", { - base: _p.r(17), - constructor: function(operand, superscript) { - this.callBase(operand, superscript, null); - this.setFlag("Superscript"); - } - }); - } -}; - -/** - * 二元操作表达式 - */ -_p[10] = { - value: function(require) { - var kity = _p.r(34); - return kity.createClass("BinaryExpression", { - base: _p.r(19), - constructor: function(firstOperand, lastOperand) { - this.callBase(); - this.setFirstOperand(firstOperand); - this.setLastOperand(lastOperand); - }, - setFirstOperand: function(operand) { - return this.setOperand(operand, 0); - }, - getFirstOperand: function() { - return this.getOperand(0); - }, - setLastOperand: function(operand) { - return this.setOperand(operand, 1); - }, - getLastOperand: function() { - return this.getOperand(1); - } - }); - } -}; - -/** - * 自动增长括号表达式 - */ -_p[11] = { - value: function(require) { - var kity = _p.r(34), BracketsOperator = _p.r(35); - return kity.createClass("BracketsExpression", { - base: _p.r(19), - /** - * 构造函数调用方式: - * new Constructor( 左括号, 右括号, 表达式 ) - * 或者 - * new Constructor( 括号, 表达式 ), 该构造函数转换成上面的构造函数,是: new Constructor( 括号, 括号, 表达式 ) - * @param left 左括号 - * @param right 右括号 - * @param exp 表达式 - */ - constructor: function(left, right, exp) { - this.callBase(); - this.setFlag("Brackets"); - // 参数整理 - if (arguments.length === 2) { - exp = right; - right = left; - } - this.leftSymbol = left; - this.rightSymbol = right; - this.setOperator(new BracketsOperator()); - this.setOperand(exp, 0); - }, - getLeftSymbol: function() { - return this.leftSymbol; - }, - getRightSymbol: function() { - return this.rightSymbol; - } - }); - } -}; - -/** - * 组合表达式 - * 可以组合多个表达式 - */ -_p[12] = { - value: function(require) { - var kity = _p.r(34), FONT_CONF = _p.r(47).font, CombinationOperator = _p.r(36); - return kity.createClass("CombinationExpression", { - base: _p.r(19), - constructor: function() { - this.callBase(); - this.setFlag("Combination"); - this.setOperator(new CombinationOperator()); - kity.Utils.each(arguments, function(operand, index) { - this.setOperand(operand, index); - }, this); - }, - getRenderBox: function(refer) { - var rectBox = this.callBase(refer); - if (this.getOperands().length === 0) { - rectBox.height = FONT_CONF.spaceHeight; - } - return rectBox; - }, - getBaseline: function(refer) { - var maxBaseline = 0, operands = this.getOperands(); - if (operands.length === 0) { - return this.callBase(refer); - } - kity.Utils.each(operands, function(operand) { - maxBaseline = Math.max(operand.getBaseline(refer), maxBaseline); - }); - return maxBaseline; - }, - getMeanline: function(refer) { - var minMeanline = 1e7, operands = this.getOperands(); - if (operands.length === 0) { - return this.callBase(refer); - } - kity.Utils.each(operands, function(operand) { - minMeanline = Math.min(operand.getMeanline(refer), minMeanline); - }); - return minMeanline; - } - }); - } -}; - -/** - * 分数表达式 - */ -_p[13] = { - value: function(require) { - var kity = _p.r(34), FractionOperator = _p.r(38); - return kity.createClass("FractionExpression", { - base: _p.r(10), - constructor: function(upOperand, downOperand) { - this.callBase(upOperand, downOperand); - this.setFlag("Fraction"); - this.setOperator(new FractionOperator()); - }, - /*------- 重写分数结构的baseline和mealine计算方式 */ - getBaseline: function(refer) { - var downOperand = this.getOperand(1), rectBox = downOperand.getRenderBox(refer); - return rectBox.y + downOperand.getBaselineProportion() * rectBox.height; - }, - getMeanline: function(refer) { - var upOperand = this.getOperand(0), rectBox = upOperand.getRenderBox(refer); - return upOperand.getMeanlineProportion() * rectBox.height; - } - }); - } -}; - -/** - * 函数表达式 - */ -_p[14] = { - value: function(require) { - var kity = _p.r(34), FUNC_CONF = _p.r(47).func, FunctionOperator = _p.r(39); - return kity.createClass("FunctionExpression", { - base: _p.r(19), - /** - * function表达式构造函数 - * @param funcName function名称 - * @param expr 函数表达式 - * @param sup 上标 - * @param sub 下标 - */ - constructor: function(funcName, expr, sup, sub) { - this.callBase(); - this.setFlag("Func"); - this.funcName = funcName; - this.setOperator(new FunctionOperator(funcName)); - this.setExpr(expr); - this.setSuperscript(sup); - this.setSubscript(sub); - }, - // 当前函数应用的script位置是否是在侧面 - isSideScript: function() { - return !FUNC_CONF["ud-script"][this.funcName]; - }, - setExpr: function(expr) { - return this.setOperand(expr, 0); - }, - setSuperscript: function(sub) { - return this.setOperand(sub, 1); - }, - setSubscript: function(sub) { - return this.setOperand(sub, 2); - } - }); - } -}; - -/** - * 积分表达式 - */ -_p[15] = { - value: function(require) { - var kity = _p.r(34), IntegrationOperator = _p.r(40), IntegrationExpression = kity.createClass("IntegrationExpression", { - base: _p.r(19), - /** - * 构造积分表达式 - * @param integrand 被积函数 - * @param supOperand 上限 - * @param subOperand 下限 - */ - constructor: function(integrand, superscript, subscript) { - this.callBase(); - this.setFlag("Integration"); - this.setOperator(new IntegrationOperator()); - this.setIntegrand(integrand); - this.setSuperscript(superscript); - this.setSubscript(subscript); - }, - setType: function(type) { - this.getOperator().setType(type); - return this; - }, - resetType: function() { - this.getOperator().resetType(); - return this; - }, - setIntegrand: function(integrand) { - this.setOperand(integrand, 0); - }, - setSuperscript: function(sup) { - this.setOperand(sup, 1); - }, - setSubscript: function(sub) { - this.setOperand(sub, 2); - } - }); - return IntegrationExpression; - } -}; - -/** - * 方根表达式 - */ -_p[16] = { - value: function(require) { - var kity = _p.r(34), RadicalOperator = _p.r(42); - return kity.createClass("RadicalExpression", { - base: _p.r(10), - /** - * 构造开方表达式 - * @param radicand 被开方数 - * @param exponent 指数 - */ - constructor: function(radicand, exponent) { - this.callBase(radicand, exponent); - this.setFlag("Radicand"); - this.setOperator(new RadicalOperator()); - }, - setRadicand: function(operand) { - return this.setFirstOperand(operand); - }, - getRadicand: function() { - return this.getFirstOperand(); - }, - setExponent: function(operand) { - return this.setLastOperand(operand); - }, - getExponent: function() { - return this.getLastOperand(); - } - }); - } -}; - -/** - * 上标表达式 - */ -_p[17] = { - value: function(require) { - var kity = _p.r(34), ScriptOperator = _p.r(43); - return kity.createClass("ScriptExpression", { - base: _p.r(19), - constructor: function(operand, superscript, subscript) { - this.callBase(); - this.setFlag("Script"); - this.setOperator(new ScriptOperator()); - this.setOpd(operand); - this.setSuperscript(superscript); - this.setSubscript(subscript); - }, - setOpd: function(operand) { - this.setOperand(operand, 0); - }, - setSuperscript: function(sup) { - this.setOperand(sup, 1); - }, - setSubscript: function(sub) { - this.setOperand(sub, 2); - } - }); - } -}; - -/** - * 求和表达式 - */ -_p[18] = { - value: function(require) { - var kity = _p.r(34), SummationOperator = _p.r(44); - return kity.createClass("SummationExpression", { - base: _p.r(19), - /** - * 构造求和表达式 - * @param expr 求和表达式 - * @param upOperand 上标 - * @param downOperand 下标 - */ - constructor: function(expr, superscript, subscript) { - this.callBase(); - this.setFlag("Summation"); - this.setOperator(new SummationOperator()); - this.setExpr(expr); - this.setSuperscript(superscript); - this.setSubscript(subscript); - }, - setExpr: function(expr) { - this.setOperand(expr, 0); - }, - setSuperscript: function(sup) { - this.setOperand(sup, 1); - }, - setSubscript: function(sub) { - this.setOperand(sub, 2); - } - }); - } -}; - -/** - * 复合表达式 - * @abstract - */ -_p[19] = { - value: function(require) { - var kity = _p.r(34), GTYPE = _p.r(6), Expression = _p.r(21); - return kity.createClass("CompoundExpression", { - base: _p.r(21), - constructor: function() { - this.callBase(); - this.type = GTYPE.COMPOUND_EXP; - this.operands = []; - this.operator = null; - this.operatorBox = new kity.Group(); - this.operatorBox.setAttr("data-type", "kf-editor-exp-op-box"); - this.operandBox = new kity.Group(); - this.operandBox.setAttr("data-type", "kf-editor-exp-operand-box"); - this.setChildren(0, this.operatorBox); - this.setChildren(1, this.operandBox); - }, - // 操作符存储在第1位置 - setOperator: function(operator) { - if (operator === undefined) { - return this; - } - if (this.operator) { - this.operator.remove(); - } - this.operatorBox.addShape(operator); - this.operator = operator; - this.operator.setParentExpression(this); - // 表达式关联到操作符 - operator.expression = this; - return this; - }, - getOperator: function() { - return this.operator; - }, - // 操作数存储位置是从1开始 - setOperand: function(operand, index, isWrap) { - // 不包装操作数 - if (isWrap === false) { - this.operands[index] = operand; - return this; - } - operand = Expression.wrap(operand); - if (this.operands[index]) { - this.operands[index].remove(); - } - this.operands[index] = operand; - this.operandBox.addShape(operand); - return this; - }, - getOperand: function(index) { - return this.operands[index]; - }, - getOperands: function() { - return this.operands; - }, - addedCall: function() { - this.operator.applyOperand.apply(this.operator, this.operands); - return this; - } - }); - } -}; - -/** - * 空表达式 - * 该表达式主要用途是用于站位 - */ -_p[20] = { - value: function(require) { - var kity = _p.r(34), FONT_CONF = _p.r(47).font, Expression = _p.r(21), EmptyExpression = kity.createClass("EmptyExpression", { - base: Expression, - constructor: function() { - this.callBase(); - this.setFlag("Empty"); - }, - getRenderBox: function() { - return { - width: 0, - height: FONT_CONF.spaceHeight, - x: 0, - y: 0 - }; - } - }); - EmptyExpression.isEmpty = function(target) { - return target instanceof EmptyExpression; - }; - // 注册打包函数 - Expression.registerWrap("empty", function(operand) { - if (operand === null || operand === undefined) { - return new EmptyExpression(); - } - }); - return EmptyExpression; - } -}; - -/** - * 基础表达式, 该类是表达式和操作数的高层抽象 - * @abstract - */ -_p[21] = { - value: function(require) { - var kity = _p.r(34), GTYPE = _p.r(6), FONT_CONF = _p.r(47).font, // 打包函数列表 - WRAP_FN = [], // 注册的打包函数的名称与其在注册器列表中的索引之间的对应关系 - WRAP_FN_INDEX = {}, Expression = kity.createClass("Expression", { - base: _p.r(46), - constructor: function() { - this.callBase(); - this.type = GTYPE.EXP; - // 表达式的上下偏移 - this._offset = { - top: 0, - bottom: 0 - }; - this.children = []; - this.box.fill("transparent").setAttr("data-type", "kf-editor-exp-box"); - this.box.setAttr("data-type", "kf-editor-exp-bg-box"); - this.expContent = new kity.Group(); - this.expContent.setAttr("data-type", "kf-editor-exp-content-box"); - this.addShape(this.expContent); - }, - getChildren: function() { - return this.children; - }, - getChild: function(index) { - return this.children[index] || null; - }, - getTopOffset: function() { - return this._offset.top; - }, - getBottomOffset: function() { - return this._offset.bottom; - }, - getOffset: function() { - return this._offset; - }, - setTopOffset: function(val) { - this._offset.top = val; - }, - setBottomOffset: function(val) { - this._offset.bottom = val; - }, - setOffset: function(top, bottom) { - this._offset.top = top; - this._offset.bottom = bottom; - }, - setFlag: function(flag) { - this.setAttr("data-flag", flag || "Expression"); - }, - setChildren: function(index, exp) { - // 首先清理掉之前的表达式 - if (this.children[index]) { - this.children[index].remove(); - } - this.children[index] = exp; - this.expContent.addShape(exp); - }, - getBaselineProportion: function() { - return FONT_CONF.baselinePosition; - }, - getMeanlineProportion: function() { - return FONT_CONF.meanlinePosition; - }, - getBaseline: function(refer) { - // 上偏移3px - return this.getRenderBox(refer).height * FONT_CONF.baselinePosition - 3; - }, - getMeanline: function(refer) { - // 上偏移1px - return this.getRenderBox(refer).height * FONT_CONF.meanlinePosition - 1; - }, - getAscenderline: function() { - return this.getFixRenderBox().height * FONT_CONF.ascenderPosition; - }, - getDescenderline: function() { - return this.getFixRenderBox().height * FONT_CONF.descenderPosition; - }, - translateElement: function(x, y) { - this.expContent.translate(x, y); - }, - expand: function(width, height) { - var renderBox = this.getFixRenderBox(); - this.setBoxSize(renderBox.width + width, renderBox.height + height); - }, - getBaseWidth: function() { - return this.getWidth(); - }, - getBaseHeight: function() { - return this.getHeight(); - }, - updateBoxSize: function() { - var renderBox = this.expContent.getFixRenderBox(); - this.setBoxSize(renderBox.width, renderBox.height); - }, - getBox: function() { - return this.box; - } - }); - // 表达式自动打包 - kity.Utils.extend(Expression, { - registerWrap: function(name, fn) { - WRAP_FN_INDEX[name] = WRAP_FN.length; - WRAP_FN.push(fn); - }, - revokeWrap: function(name) { - var fn = null; - if (name in WRAP_FN_INDEX) { - fn = WRAP_FN[WRAP_FN_INDEX[name]]; - WRAP_FN[WRAP_FN_INDEX[name]] = null; - delete WRAP_FN_INDEX[name]; - } - return fn; - }, - // 打包函数 - wrap: function(operand) { - var result; - kity.Utils.each(WRAP_FN, function(fn) { - if (!fn) { - return; - } - result = fn(operand); - if (result) { - return false; - } - }); - return result; - } - }); - return Expression; - } -}; - -/** - * Text表达式 - */ -_p[22] = { - value: function(require) { - var Text = _p.r(5), kity = _p.r(34), FONT_CONF = _p.r(3), Expression = _p.r(21), TextExpression = kity.createClass("TextExpression", { - base: _p.r(21), - constructor: function(content, fontFamily) { - this.callBase(); - this.fontFamily = fontFamily || FONT_CONF.defaultFont; - this.setFlag("Text"); - this.content = content + ""; - this.textContent = new Text(this.content, this.fontFamily); - this.setChildren(0, this.textContent); - this.setChildren(1, new kity.Rect(0, 0, 0, 0).fill("transparent")); - }, - setFamily: function(fontFamily) { - this.textContent.setFamily(fontFamily); - }, - setFontSize: function(fontSize) { - this.textContent.setFontSize(fontSize); - }, - addedCall: function() { - var box = this.textContent.getFixRenderBox(); - this.getChild(1).setSize(box.width, box.height); - this.updateBoxSize(); - return this; - } - }); - // 注册文本表达式的打包函数 - Expression.registerWrap("text", function(operand) { - var operandType = typeof operand; - if (operandType === "number" || operandType === "string") { - operand = new TextExpression(operand); - } - return operand; - }); - return TextExpression; - } -}; - -/*! - * 字体信息检测模板,用于检测浏览器的字体信息 - */ -_p[23] = { - value: function() { - return [ '', 'x', "" ]; - } -}; - -/*! - * 字体安装器 - */ -_p[24] = { - value: function(require) { - var kity = _p.r(34), FontManager = _p.r(25), $ = _p.r(33), FONT_CONF = _p.r(47).font, CHAR_LIST = _p.r(2), NODE_LIST = []; - return kity.createClass("FontInstaller", { - constructor: function(doc, resource) { - this.callBase(); - this.resource = resource || "../src/resource/"; - this.doc = doc; - }, - // 挂载字体 - mount: function(callback) { - var fontList = FontManager.getFontList(), count = 0, _self = this; - kity.Utils.each(fontList, function(fontInfo) { - count++; - fontInfo.meta.src = _self.resource + fontInfo.meta.src; - _self.createFontStyle(fontInfo); - preload(_self.doc, fontInfo, function() { - count--; - if (count === 0) { - complete(_self.doc, callback); - } - }); - }); - }, - createFontStyle: function(fontInfo) { - var stylesheet = this.doc.createElement("style"), tpl = '@font-face{\nfont-family: "${fontFamily}";\nsrc: url("${src}");\n}'; - stylesheet.setAttribute("type", "text/css"); - stylesheet.innerHTML = tpl.replace("${fontFamily}", fontInfo.meta.fontFamily).replace("${src}", fontInfo.meta.src); - this.doc.head.appendChild(stylesheet); - } - }); - function preload(doc, fontInfo, callback) { - $.get(fontInfo.meta.src, function(data, state) { - if (state === "success") { - applyFonts(doc, fontInfo); - } - callback(); - }); - } - function complete(doc, callback) { - window.setTimeout(function() { - initFontSystemInfo(doc); - removeTmpNode(); - callback(); - }, 100); - } - function applyFonts(doc, fontInfo) { - var node = document.createElement("div"), fontFamily = fontInfo.meta.fontFamily; - node.style.cssText = "position: absolute; top: -10000px; left: -100000px;"; - node.style.fontFamily = fontFamily; - node.innerHTML = CHAR_LIST.join(""); - doc.body.appendChild(node); - NODE_LIST.push(node); - } - /** - * 计算字体系统信息 - */ - function initFontSystemInfo(doc) { - var tmpNode = doc.createElement("div"); - tmpNode.style.cssText = "position: absolute; top: 0; left: -100000px;"; - tmpNode.innerHTML = _p.r(23).join(""); - doc.body.appendChild(tmpNode); - var rectBox = tmpNode.getElementsByTagName("text")[0].getBBox(); - // text实际占用空间 - FONT_CONF.spaceHeight = rectBox.height; - // text顶部空间 - FONT_CONF.topSpace = -rectBox.y - FONT_CONF.baseline; - FONT_CONF.bottomSpace = FONT_CONF.spaceHeight - FONT_CONF.topSpace - FONT_CONF.baseHeight; - // text偏移值 - FONT_CONF.offset = FONT_CONF.baseline + FONT_CONF.topSpace; - // baseline比例 - FONT_CONF.baselinePosition = (FONT_CONF.topSpace + FONT_CONF.baseline) / FONT_CONF.spaceHeight; - // meanline比例 - FONT_CONF.meanlinePosition = (FONT_CONF.topSpace + FONT_CONF.meanline) / FONT_CONF.spaceHeight; - // 上下延伸性比例 - FONT_CONF.ascenderPosition = FONT_CONF.topSpace / FONT_CONF.spaceHeight; - FONT_CONF.descenderPosition = (FONT_CONF.topSpace + FONT_CONF.baseHeight) / FONT_CONF.spaceHeight; - doc.body.removeChild(tmpNode); - } - function removeTmpNode() { - kity.Utils.each(NODE_LIST, function(node) { - node.parentNode.removeChild(node); - }); - NODE_LIST = []; - } - } -}; - -/*! - * 字体管理器 - */ -_p[25] = { - value: function(require) { - var FONT_LIST = {}, kity = _p.r(34), CONF = _p.r(47).font.list; - // init - (function() { - kity.Utils.each(CONF, function(fontData) { - FONT_LIST[fontData.meta.fontFamily] = fontData; - }); - })(); - return { - getFontList: function() { - return FONT_LIST; - }, - getCharacterValue: function(key, fontFamily) { - if (!FONT_LIST[fontFamily]) { - return null; - } - return FONT_LIST[fontFamily].map[key] || null; - } - }; - } -}; - -/*! - * 双线字体 - */ -_p[26] = { - value: function() { - return { - meta: { - fontFamily: "KF AMS BB", - src: "KF_AMS_BB.woff" - } - }; - } -}; - -/*! - * 手写体 - */ -_p[27] = { - value: function() { - return { - meta: { - fontFamily: "KF AMS CAL", - src: "KF_AMS_CAL.woff" - } - }; - } -}; - -/*! - * 花体 - */ -_p[28] = { - value: function() { - return { - meta: { - fontFamily: "KF AMS FRAK", - src: "KF_AMS_FRAK.woff" - } - }; - } -}; - -/*! - * 字体主文件 - */ -_p[29] = { - value: function() { - return { - meta: { - fontFamily: "KF AMS MAIN", - src: "KF_AMS_MAIN.woff" - }, - map: { - // char - Alpha: "Α", - Beta: "Β", - Gamma: "Γ", - Delta: "Δ", - Epsilon: "Ε", - Zeta: "Ζ", - Eta: "Η", - Theta: "Θ", - Iota: "Ι", - Kappa: "Κ", - Lambda: "Λ", - Mu: "Μ", - Nu: "Ν", - Xi: "Ξ", - Omicron: "Ο", - Pi: "Π", - Rho: "Ρ", - Sigma: "Σ", - Tau: "Τ", - Upsilon: "Υ", - Phi: "Φ", - Chi: "Χ", - Psi: "Ψ", - Omega: "Ω", - alpha: "α", - beta: "β", - gamma: "γ", - delta: "δ", - epsilon: "ε", - zeta: "ζ", - eta: "η", - theta: "θ", - iota: "ι", - kappa: "κ", - lambda: "λ", - mu: "μ", - nu: "ν", - xi: "ξ", - omicron: "ο", - pi: "π", - rho: "ρ", - sigma: "σ", - tau: "τ", - upsilon: "υ", - phi: "φ", - varkappa: "ϰ", - chi: "χ", - psi: "ψ", - omega: "ω", - digamma: "Ϝ", - varepsilon: "ϵ", - varrho: "ϱ", - varphi: "ϕ", - vartheta: "ϑ", - varpi: "ϖ", - varsigma: "Ϲ", - aleph: "ℵ", - beth: "ℶ", - daleth: "ℸ", - gimel: "ℷ", - eth: "ð", - hbar: "ℎ", - hslash: "ℏ", - mho: "℧", - partial: "∂", - wp: "℘", - Game: "⅁", - Bbbk: "⅌", - Finv: "Ⅎ", - Im: "ℑ", - Re: "ℜ", - complement: "∁", - ell: "ℓ", - circledS: "Ⓢ", - imath: "ı", - jmath: "ȷ", - // symbol - doublecap: "⋒", - Cap: "⋒", - doublecup: "⋓", - Cup: "⋓", - ast: "*", - divideontimes: "⋇", - rightthreetimes: "⋌", - leftthreetimes: "⋋", - cdot: "·", - odot: "⊙", - dotplus: "∔", - rtimes: "⋊", - ltimes: "⋉", - centerdot: "▪", - doublebarwedge: "⌭", - setminus: "⒁", - amalg: "∐", - circ: "◦", - bigcirc: "◯", - gtrdot: "⋗", - lessdot: "⋖", - smallsetminus: "⒅", - circledast: "⊛", - circledcirc: "⊚", - sqcap: "⊓", - sqcup: "⊔", - barwedge: "⊼", - circleddash: "⊝", - star: "⋆", - bigtriangledown: "▽", - bigtriangleup: "△", - cup: "∪", - cap: "∩", - times: "×", - mp: "∓", - pm: "±", - triangleleft: "⊲", - triangleright: "⊳", - boxdot: "⊡", - curlyvee: "⋏", - curlywedge: "⋎", - boxminus: "⊟", - boxtimes: "⊠", - ominus: "⊖", - oplus: "⊕", - oslash: "⊘", - otimes: "⊗", - uplus: "⊎", - boxplus: "⊞", - dagger: "†", - ddagger: "‡", - vee: "∨", - lor: "∨", - veebar: "⊻", - bullet: "•", - diamond: "⋄", - wedge: "∧", - land: "∧", - div: "÷", - wr: "≀", - geqq: "≧", - lll: "⋘", - llless: "⋘", - ggg: "⋙", - gggtr: "⋙", - preccurlyeq: "≼", - geqslant: "⩾", - lnapprox: "⪉", - preceq: "⪯", - gg: "≫", - lneq: "⪇", - precnapprox: "⪹", - approx: "≈", - lneqq: "≨", - precneqq: "⪵", - approxeq: "≊", - gnapprox: "⪊", - lnsim: "⋦", - precnsim: "⋨", - asymp: "≍", - gneq: "⪈", - lvertneqq: "⌮", - precsim: "≾", - backsim: "∽", - gneqq: "≩", - ncong: "≇", - risingdotseq: "≓", - backsimeq: "⋍", - gnsim: "⋧", - sim: "∼", - simeq: "≃", - bumpeq: "≏", - gtrapprox: "⪆", - ngeq: "≱", - Bumpeq: "≎", - gtreqless: "⋛", - ngeqq: "⌱", - succ: "≻", - circeq: "≗", - gtreqqless: "⪌", - ngeqslant: "⌳", - succapprox: "⪸", - cong: "≅", - gtrless: "≷", - ngtr: "≯", - succcurlyeq: "≽", - curlyeqprec: "⋞", - gtrsim: "≳", - nleq: "≰", - succeq: "⪰", - curlyeqsucc: "⋟", - gvertneqq: "⌯", - neq: "≠", - ne: "≠", - nequiv: "≢", - nleqq: "⌰", - succnapprox: "⪺", - doteq: "≐", - leq: "≤", - le: "≤", - nleqslant: "⌲", - succneqq: "⪶", - doteqdot: "≑", - Doteq: "≑", - leqq: "≦", - nless: "≮", - succnsim: "⋩", - leqslant: "⩽", - nprec: "⊀", - succsim: "≿", - eqsim: "≂", - lessapprox: "⪅", - npreceq: "⋠", - eqslantgtr: "⪖", - lesseqgtr: "⋚", - nsim: "≁", - eqslantless: "⪕", - lesseqqgtr: "⪋", - nsucc: "⊁", - triangleq: "≜", - eqcirc: "≖", - equiv: "≡", - lessgtr: "≶", - nsucceq: "⋡", - fallingdotseq: "≒", - lesssim: "≲", - prec: "≺", - geq: "≥", - ge: "≥", - ll: "≪", - precapprox: "⪷", - // arrows - uparrow: "↑", - downarrow: "↓", - updownarrow: "↕", - Uparrow: "⇑", - Downarrow: "⇓", - Updownarrow: "⇕", - circlearrowleft: "↺", - circlearrowright: "↻", - curvearrowleft: "↶", - curvearrowright: "↷", - downdownarrows: "⇊", - downharpoonleft: "⇃", - downharpoonright: "⇂", - leftarrow: "←", - gets: "←", - Leftarrow: "⇐", - leftarrowtail: "↢", - leftharpoondown: "↽", - leftharpoonup: "↼", - leftleftarrows: "⇇", - leftrightarrow: "↔", - Leftrightarrow: "⇔", - leftrightarrows: "⇄", - leftrightharpoons: "⇋", - leftrightsquigarrow: "↭", - Lleftarrow: "⇚", - looparrowleft: "↫", - looparrowright: "↬", - multimap: "⊸", - nLeftarrow: "⇍", - nRightarrow: "⇏", - nLeftrightarrow: "⇎", - nearrow: "↗", - nleftarrow: "↚", - nleftrightarrow: "↮", - nrightarrow: "↛", - nwarrow: "↖", - rightarrow: "→", - to: "→", - Rightarrow: "⇒", - rightarrowtail: "↣", - rightharpoondown: "⇁", - rightharpoonup: "⇀", - rightleftarrows: "⇆", - rightleftharpoons: "⇌", - rightrightarrows: "⇉", - rightsquigarrow: "⇝", - Rrightarrow: "⇛", - searrow: "↘", - swarrow: "↙", - twoheadleftarrow: "↞", - twoheadrightarrow: "↠", - upharpoonleft: "↿", - upharpoonright: "↾", - restriction: "↾", - upuparrows: "⇈", - Lsh: "↰", - Rsh: "↱", - longleftarrow: "⟵", - longrightarrow: "⟶", - Longleftarrow: "⟸", - Longrightarrow: "⟹", - implies: "⟹", - longleftrightarrow: "⟷", - Longleftrightarrow: "⟺", - // relation - backepsilon: "∍", - because: "∵", - therefore: "∴", - between: "≬", - blacktriangleleft: "◀", - blacktriangleright: "▸", - dashv: "⊣", - bowtie: "⋈", - frown: "⌢", - "in": "∈", - notin: "∉", - mid: "∣", - parallel: "∥", - models: "⊨", - ni: "∋", - owns: "∋", - nmid: "∤", - nparallel: "∦", - nshortmid: "⏒", - nshortparallel: "⏓", - nsubseteq: "⊈", - nsubseteqq: "⫇", - nsupseteq: "⊉", - nsupseteqq: "⫈", - ntriangleleft: "⋪", - ntrianglelefteq: "⋬", - ntriangleright: "⋫", - ntrianglerighteq: "⋭", - nvdash: "⊬", - nVdash: "⊮", - nvDash: "⊭", - nVDash: "⊯", - perp: "⊥", - pitchfork: "⋔", - propto: "∝", - shortmid: "⏐", - shortparallel: "⏑", - smile: "⌣", - sqsubset: "⊏", - sqsubseteq: "⊑", - sqsupset: "⊐", - sqsupseteq: "⊒", - subset: "⊂", - Subset: "⋐", - subseteq: "⊆", - subseteqq: "⫅", - subsetneq: "⊊", - subsetneqq: "⫋", - supset: "⊃", - Supset: "⋑", - supseteq: "⊇", - supseteqq: "⫆", - supsetneq: "⊋", - supsetneqq: "⫌", - trianglelefteq: "⊴", - trianglerighteq: "⊵", - varpropto: "⫉", - varsubsetneq: "⏔", - varsubsetneqq: "⏖", - varsupsetneq: "⏕", - varsupsetneqq: "⏗", - vdash: "⊢", - Vdash: "⊩", - vDash: "⊨", - Vvdash: "⊪", - vert: "|", - Vert: "ǁ", - "|": "ǁ", - "{": "{", - "}": "}", - backslash: "\\", - langle: "〈", - rangle: "〉", - lceil: "⌈", - rceil: "⌉", - lbrace: "{", - rbrace: "}", - lfloor: "⌊", - rfloor: "⌋", - cdots: "⋯", - ddots: "⋰", - vdots: "⋮", - dots: "…", - ldots: "…", - "#": "#", - bot: "⊥", - angle: "∠", - backprime: "‵", - bigstar: "★", - blacklozenge: "◆", - blacksquare: "■", - blacktriangle: "▲", - blacktriangledown: "▼", - clubsuit: "♣", - diagdown: "⒁", - diagup: "⒂", - diamondsuit: "♢", - emptyset: "ø", - exists: "∃", - flat: "♭", - forall: "∀", - heartsuit: "♡", - infty: "∞", - lozenge: "◇", - measuredangle: "∡", - nabla: "∇", - natural: "♮", - neg: "¬", - lnot: "¬", - nexists: "∄", - prime: "′", - sharp: "♯", - spadesuit: "♠", - sphericalangle: "∢", - surd: "√", - top: "⊤", - varnothing: "∅", - triangle: "△", - triangledown: "▽" - } - }; - } -}; - -/*! - * 罗马字体 - */ -_p[30] = { - value: function() { - return { - meta: { - fontFamily: "KF AMS ROMAN", - src: "KF_AMS_ROMAN.woff" - } - }; - } -}; - -/** - * 公式对象,表达式容器 - */ -_p[31] = { - value: function(require) { - var kity = _p.r(34), GTYPE = _p.r(6), FontManager = _p.r(25), FontInstaller = _p.r(24), DEFAULT_OPTIONS = { - fontsize: 50, - autoresize: true, - padding: [ 0 ] - }, Output = _p.r(1), EXPRESSION_INTERVAL = 10, ExpressionWrap = kity.createClass("ExpressionWrap", { - constructor: function(exp, config) { - this.wrap = new kity.Group(); - this.bg = new kity.Rect(0, 0, 0, 0).fill("transparent"); - this.exp = exp; - this.config = config; - this.wrap.setAttr("data-type", "kf-exp-wrap"); - this.bg.setAttr("data-type", "kf-exp-wrap-bg"); - this.wrap.addShape(this.bg); - this.wrap.addShape(this.exp); - }, - getWrapShape: function() { - return this.wrap; - }, - getExpression: function() { - return this.exp; - }, - getBackground: function() { - return this.bg; - }, - resize: function() { - var padding = this.config.padding, expBox = this.exp.getFixRenderBox(); - if (padding.length === 1) { - padding[1] = padding[0]; - } - this.bg.setSize(padding[1] * 2 + expBox.width, padding[0] * 2 + expBox.height); - this.exp.translate(padding[1], padding[0]); - } - }), Formula = kity.createClass("Formula", { - base: _p.r(32), - constructor: function(container, config) { - this.callBase(container); - this.expressions = []; - this.fontInstaller = new FontInstaller(this); - this.config = kity.Utils.extend({}, DEFAULT_OPTIONS, config); - this.initEnvironment(); - this.initInnerFont(); - }, - getContentContainer: function() { - return this.container; - }, - initEnvironment: function() { - this.zoom = this.config.fontsize / 50; - if ("width" in this.config) { - this.setWidth(this.config.width); - } - if ("height" in this.config) { - this.setHeight(this.config.height); - } - this.node.setAttribute("font-size", DEFAULT_OPTIONS.fontsize); - }, - initInnerFont: function() { - var fontList = FontManager.getFontList(), _self = this; - kity.Utils.each(fontList, function(fontInfo) { - createFontStyle(fontInfo); - }); - function createFontStyle(fontInfo) { - var stylesheet = _self.doc.createElement("style"), tpl = '@font-face{font-family: "${fontFamily}";font-style: normal;src: url("${src}") format("woff");}'; - stylesheet.setAttribute("type", "text/css"); - stylesheet.innerHTML = tpl.replace("${fontFamily}", fontInfo.meta.fontFamily).replace("${src}", fontInfo.meta.src); - _self.resourceNode.appendChild(stylesheet); - } - }, - insertExpression: function(expression, index) { - var expWrap = this.wrap(expression); - // clear zoom - this.container.clearTransform(); - this.expressions.splice(index, 0, expWrap.getWrapShape()); - this.addShape(expWrap.getWrapShape()); - notifyExpression.call(this, expWrap.getExpression()); - expWrap.resize(); - correctOffset.call(this); - this.resetZoom(); - this.config.autoresize && this.resize(); - }, - appendExpression: function(expression) { - this.insertExpression(expression, this.expressions.length); - }, - resize: function() { - var renderBox = this.container.getRenderBox("paper"); - this.node.setAttribute("width", renderBox.width); - this.node.setAttribute("height", renderBox.height); - }, - resetZoom: function() { - var zoomLevel = this.zoom / this.getBaseZoom(); - if (zoomLevel !== 0) { - this.container.scale(zoomLevel); - } - }, - wrap: function(exp) { - return new ExpressionWrap(exp, this.config); - }, - clear: function() { - this.callBase(); - this.expressions = []; - }, - clearExpressions: function() { - kity.Utils.each(this.expressions, function(exp) { - exp.remove(); - }); - this.expressions = []; - }, - toJPG: function(cb) { - new Output(this).toJPG(cb); - }, - toPNG: function(cb) { - new Output(this).toPNG(cb); - } - }); - kity.Utils.extend(Formula, { - registerFont: function(fontData) { - FontManager.registerFont(fontData); - } - }); - // 调整表达式之间的偏移 - function correctOffset() { - var exprOffset = 0; - kity.Utils.each(this.expressions, function(expr) { - var box = null; - if (!expr) { - return; - } - expr.setMatrix(new kity.Matrix(1, 0, 0, 1, 0, 0)); - box = expr.getFixRenderBox(); - expr.translate(0 - box.x, exprOffset); - exprOffset += box.height + EXPRESSION_INTERVAL; - }); - return this; - } - // 通知表达式已接入到paper - function notifyExpression(expression) { - var len = 0; - if (!expression) { - return; - } - if (expression.getType() === GTYPE.EXP) { - for (var i = 0, len = expression.getChildren().length; i < len; i++) { - notifyExpression(expression.getChild(i)); - } - } else if (expression.getType() === GTYPE.COMPOUND_EXP) { - // 操作数处理 - for (var i = 0, len = expression.getOperands().length; i < len; i++) { - notifyExpression(expression.getOperand(i)); - } - // 处理操作符 - notifyExpression(expression.getOperator()); - } - expression.addedCall && expression.addedCall(); - } - return Formula; - } -}; - -/** - * 公式专用paper - */ -_p[32] = { - value: function(require) { - var kity = _p.r(34); - return kity.createClass("FPaper", { - base: kity.Paper, - constructor: function(container) { - this.callBase(container); - this.doc = container.ownerDocument; - this.container = new kity.Group(); - this.container.setAttr("data-type", "kf-container"); - this.background = new kity.Group(); - this.background.setAttr("data-type", "kf-bg"); - this.baseZoom = 1; - this.zoom = 1; - this.base("addShape", this.background); - this.base("addShape", this.container); - }, - getZoom: function() { - return this.zoom; - }, - getBaseZoom: function() { - return this.baseZoom; - }, - addShape: function(shape, pos) { - return this.container.addShape(shape, pos); - }, - getBackground: function() { - return this.background; - }, - removeShape: function(pos) { - return this.container.removeShape(pos); - }, - clear: function() { - return this.container.clear(); - } - }); - } -}; - -/** - * jquery - */ -_p[33] = { - value: function() { - if (!window.jQuery) { - throw new Error("Missing jQuery"); - } - return window.jQuery; - } -}; - -/** - * kity库封包 - */ -_p[34] = { - value: function() { - if (!window.kity) { - throw new Error("Missing Kity Graphic Lib"); - } - return window.kity; - } -}; - -/** - * 小括号操作符:() - */ -_p[35] = { - value: function(require) { - var kity = _p.r(34), Text = _p.r(5); - return kity.createClass("BracketsOperator", { - base: _p.r(41), - constructor: function() { - this.callBase("Brackets"); - }, - applyOperand: function(exp) { - generate.call(this, exp); - } - }); - function generate(exp) { - var left = this.getParentExpression().getLeftSymbol(), right = this.getParentExpression().getRightSymbol(), fontSize = exp.getFixRenderBox().height, group = new kity.Group(), offset = 0, leftOp = new Text(left, "KF AMS MAIN").fill("black"), rightOp = new Text(right, "KF AMS MAIN").fill("black"); - leftOp.setFontSize(fontSize); - rightOp.setFontSize(fontSize); - this.addOperatorShape(group.addShape(leftOp).addShape(rightOp)); - offset += leftOp.getFixRenderBox().width; - exp.translate(offset, 0); - offset += exp.getFixRenderBox().width; - rightOp.translate(offset, 0); - } - } -}; - -/** - * 组合操作符 - * 操作多个表达式组合在一起 - */ -_p[36] = { - value: function(require) { - var kity = _p.r(34); - return kity.createClass("CombinationOperator", { - base: _p.r(41), - constructor: function() { - this.callBase("Combination"); - }, - applyOperand: function() { - // 偏移量 - var offsetX = 0, // 操作数 - operands = arguments, // 操作对象最大高度 - maxHeight = 0, // 垂直距离最大偏移 - maxOffsetTop = 0, maxOffsetBottom = 0, cached = [], // 偏移集合 - offsets = []; - kity.Utils.each(operands, function(operand) { - var box = operand.getFixRenderBox(), offsetY = operand.getOffset(); - box.height -= offsetY.top + offsetY.bottom; - cached.push(box); - offsets.push(offsetY); - maxOffsetTop = Math.max(offsetY.top, maxOffsetTop); - maxOffsetBottom = Math.max(offsetY.bottom, maxOffsetBottom); - maxHeight = Math.max(box.height, maxHeight); - }); - kity.Utils.each(operands, function(operand, index) { - var box = cached[index]; - operand.translate(offsetX - box.x, (maxHeight - (box.y + box.height)) / 2 + maxOffsetBottom - offsets[index].bottom); - offsetX += box.width; - }); - this.parentExpression.setOffset(maxOffsetTop, maxOffsetBottom); - this.parentExpression.updateBoxSize(); - } - }); - } -}; - -/*! - * 上下标控制器 - */ -_p[37] = { - value: function(require) { - var kity = _p.r(34), EmptyExpression = _p.r(20), defaultOptions = { - subOffset: 0, - supOffset: 0, - // 上下标的默认缩放值 - zoom: .66 - }; - return kity.createClass("ScriptController", { - constructor: function(opObj, target, sup, sub, options) { - this.observer = opObj.getParentExpression(); - this.target = target; - this.sup = sup; - this.sub = sub; - this.options = kity.Utils.extend({}, defaultOptions, options); - }, - // 上下标记 - applyUpDown: function() { - var target = this.target, sup = this.sup, sub = this.sub, options = this.options; - sup.scale(options.zoom); - sub.scale(options.zoom); - var targetBox = target.getFixRenderBox(); - if (EmptyExpression.isEmpty(sup) && EmptyExpression.isEmpty(sub)) { - return { - width: targetBox.width, - height: targetBox.height, - top: 0, - bottom: 0 - }; - } else { - // 上标 - if (!EmptyExpression.isEmpty(sup) && EmptyExpression.isEmpty(sub)) { - return this.applyUp(target, sup); - } else if (EmptyExpression.isEmpty(sup) && !EmptyExpression.isEmpty(sub)) { - return this.applyDown(target, sub); - } else { - return this.applyUpDownScript(target, sup, sub); - } - } - }, - /** - * 返回应用上下标后的空间占用情况,其中的key各自的意义是: - * top: 上空间偏移 - * bottom: 下空间偏移 - * width: 当前整个图形的实际占用空间的width - * height: 当前整个图形的实际占用空间的height - * @returns {*} - */ - applySide: function() { - var target = this.target, sup = this.sup, sub = this.sub; - if (EmptyExpression.isEmpty(sup) && EmptyExpression.isEmpty(sub)) { - var targetRectBox = target.getRenderBox(this.observer); - return { - width: targetRectBox.width, - height: targetRectBox.height, - top: 0, - bottom: 0 - }; - } else { - // 下标处理 - if (EmptyExpression.isEmpty(sup) && !EmptyExpression.isEmpty(sub)) { - return this.applySideSub(target, sub); - } else if (!EmptyExpression.isEmpty(sup) && EmptyExpression.isEmpty(sub)) { - return this.applySideSuper(target, sup); - } else { - return this.applySideScript(target, sup, sub); - } - } - }, - applySideSuper: function(target, sup) { - sup.scale(this.options.zoom); - var targetRectBox = target.getRenderBox(this.observer), supRectBox = sup.getRenderBox(this.observer), targetMeanline = target.getMeanline(this.observer), supBaseline = sup.getBaseline(this.observer), positionline = targetMeanline, diff = supBaseline - positionline, space = { - top: 0, - bottom: 0, - width: targetRectBox.width + supRectBox.width, - height: targetRectBox.height - }; - sup.translate(targetRectBox.width, 0); - if (this.options.supOffset) { - sup.translate(this.options.supOffset, 0); - } - if (diff > 0) { - target.translate(0, diff); - space.bottom = diff; - space.height += diff; - } else { - sup.translate(0, -diff); - } - return space; - }, - applySideSub: function(target, sub) { - sub.scale(this.options.zoom); - var targetRectBox = target.getRenderBox(this.observer), subRectBox = sub.getRenderBox(this.observer), subOffset = sub.getOffset(), targetBaseline = target.getBaseline(this.observer), // 下标定位线 - subPosition = (subRectBox.height + subOffset.top + subOffset.bottom) / 2, diff = targetRectBox.height - targetBaseline - subPosition, space = { - top: 0, - bottom: 0, - width: targetRectBox.width + subRectBox.width, - height: targetRectBox.height - }; - // 定位下标位置 - sub.translate(targetRectBox.width, subOffset.top + targetBaseline - subPosition); - if (this.options.subOffset) { - sub.translate(this.options.subOffset, 0); - } - if (diff < 0) { - space.top = -diff; - space.height -= diff; - } - return space; - }, - applySideScript: function(target, sup, sub) { - sup.scale(this.options.zoom); - sub.scale(this.options.zoom); - var targetRectBox = target.getRenderBox(this.observer), subRectBox = sub.getRenderBox(this.observer), supRectBox = sup.getRenderBox(this.observer), targetMeanline = target.getMeanline(this.observer), targetBaseline = target.getBaseline(this.observer), supBaseline = sup.getBaseline(this.observer), // 上下标都存在时, 下标的定位以上伸线为准 - subAscenderline = sub.getAscenderline(this.observer), supPosition = targetMeanline, subPosition = targetMeanline + (targetBaseline - targetMeanline) * 2 / 3, topDiff = supPosition - supBaseline, bottomDiff = targetRectBox.height - subPosition - (subRectBox.height - subAscenderline), space = { - top: 0, - bottom: 0, - width: targetRectBox.width + Math.max(subRectBox.width, supRectBox.width), - height: targetRectBox.height - }; - sup.translate(targetRectBox.width, topDiff); - sub.translate(targetRectBox.width, subPosition - subAscenderline); - if (this.options.supOffset) { - sup.translate(this.options.supOffset, 0); - } - if (this.options.subOffset) { - sub.translate(this.options.subOffset, 0); - } - // 定位纠正 - if (topDiff > 0) { - if (bottomDiff < 0) { - targetRectBox.height -= bottomDiff; - space.top = -bottomDiff; - } - } else { - target.translate(0, -topDiff); - sup.translate(0, -topDiff); - sub.translate(0, -topDiff); - space.height -= topDiff; - if (bottomDiff > 0) { - space.bottom = -topDiff; - } else { - space.height -= bottomDiff; - // 比较上下偏移, 获取正确的偏移值 - topDiff = -topDiff; - bottomDiff = -bottomDiff; - if (topDiff > bottomDiff) { - space.bottom = topDiff - bottomDiff; - } else { - space.top = bottomDiff - topDiff; - } - } - } - return space; - }, - applyUp: function(target, sup) { - var supBox = sup.getFixRenderBox(), targetBox = target.getFixRenderBox(), space = { - width: Math.max(targetBox.width, supBox.width), - height: supBox.height + targetBox.height, - top: 0, - bottom: supBox.height - }; - sup.translate((space.width - supBox.width) / 2, 0); - target.translate((space.width - targetBox.width) / 2, supBox.height); - return space; - }, - applyDown: function(target, sub) { - var subBox = sub.getFixRenderBox(), targetBox = target.getFixRenderBox(), space = { - width: Math.max(targetBox.width, subBox.width), - height: subBox.height + targetBox.height, - top: subBox.height, - bottom: 0 - }; - sub.translate((space.width - subBox.width) / 2, targetBox.height); - target.translate((space.width - targetBox.width) / 2, 0); - return space; - }, - applyUpDownScript: function(target, sup, sub) { - var supBox = sup.getFixRenderBox(), subBox = sub.getFixRenderBox(), targetBox = target.getFixRenderBox(), space = { - width: Math.max(targetBox.width, supBox.width, subBox.width), - height: supBox.height + subBox.height + targetBox.height, - top: 0, - bottom: 0 - }; - sup.translate((space.width - supBox.width) / 2, 0); - target.translate((space.width - targetBox.width) / 2, supBox.height); - sub.translate((space.width - subBox.width) / 2, supBox.height + targetBox.height); - return space; - } - }); - } -}; - -/** - * 分数操作符 - */ -_p[38] = { - value: function(require) { - var kity = _p.r(34), ZOOM = _p.r(47).zoom; - return kity.createClass("FractionOperator", { - base: _p.r(41), - constructor: function() { - this.callBase("Fraction"); - }, - applyOperand: function(upOperand, downOperand) { - upOperand.scale(ZOOM); - downOperand.scale(ZOOM); - var upWidth = Math.ceil(upOperand.getWidth()), downWidth = Math.ceil(downOperand.getWidth()), upHeight = Math.ceil(upOperand.getHeight()), downHeight = Math.ceil(downOperand.getHeight()), // 分数线overflow值 - overflow = 3, // 整体padding - padding = 1, maxWidth = Math.max(upWidth, downWidth), maxHeight = Math.max(upHeight, downHeight), operatorShape = generateOperator(maxWidth, overflow); - this.addOperatorShape(operatorShape); - upOperand.translate((maxWidth - upWidth) / 2 + overflow, 0); - operatorShape.translate(0, upHeight + 1); - // 下部不需要偏移 - downOperand.translate((maxWidth - downWidth) / 2 + overflow, upHeight + operatorShape.getHeight() + 1 * 2); - this.parentExpression.setOffset(maxHeight - upHeight, maxHeight - downHeight); - this.parentExpression.expand(padding * 2, padding * 2); - this.parentExpression.translateElement(padding, padding); - } - }); - function generateOperator(width, overflow) { - return new kity.Rect(width + overflow * 2, 1).fill("black"); - } - } -}; - -/** - * 函数操作符 - */ -_p[39] = { - value: function(require) { - var kity = _p.r(34), Text = _p.r(5), ScriptController = _p.r(37); - return kity.createClass("FunctionOperator", { - base: _p.r(41), - constructor: function(funcName) { - this.callBase("Function: " + funcName); - this.funcName = funcName; - }, - /* - * 积分操作符应用操作数 - * @param expr 函数表达式 - * @param sup 上限 - * @param sub 下限 - */ - applyOperand: function(expr, sup, sub) { - var opShape = generateOperator.call(this), expBox = expr.getFixRenderBox(), scriptHanlder = this.parentExpression.isSideScript() ? "applySide" : "applyUpDown", space = new ScriptController(this, opShape, sup, sub, { - zoom: .5 - })[scriptHanlder](), padding = 5, diff = (space.height + space.top + space.bottom - expBox.height) / 2; - // 应用偏移, 使图形在正确的位置上 - opShape.translate(0, space.top); - sup.translate(0, space.top); - sub.translate(0, space.top); - if (diff >= 0) { - expr.translate(space.width + padding, diff); - } else { - diff = -diff; - opShape.translate(0, diff); - sup.translate(0, diff); - sub.translate(0, diff); - expr.translate(space.width + padding, 0); - } - // 只扩展左边, 不扩展右边, 所以padding不 *2 - this.parentExpression.expand(padding, padding * 2); - this.parentExpression.translateElement(padding, padding); - } - }); - /* 返回操作符对象 */ - function generateOperator() { - var opShape = new Text(this.funcName, "KF AMS ROMAN"); - this.addOperatorShape(opShape); - // 为操作符图形创建baseline和meanline方法 - opShape.getBaseline = function() { - return opShape.getFixRenderBox().height; - }; - opShape.getMeanline = function() { - return 0; - }; - return opShape; - } - } -}; - -/** - * 积分操作符:∫ - */ -_p[40] = { - value: function(require) { - var kity = _p.r(34), ScriptController = _p.r(37); - return kity.createClass("IntegrationOperator", { - base: _p.r(41), - constructor: function(type) { - this.callBase("Integration"); - // 默认是普通单重积分 - this.opType = type || 1; - }, - setType: function(type) { - this.opType = type | 0; - }, - // 重置类型 - resetType: function() { - this.opType = 1; - }, - applyOperand: function(exp, sup, sub) { - var opShape = this.getOperatorShape(), padding = 3, expBox = exp.getFixRenderBox(), space = new ScriptController(this, opShape, sup, sub, { - supOffset: 3, - subOffset: -15 - }).applySide(), diff = (space.height + space.top - expBox.height) / 2; - opShape.translate(0, space.top); - sup.translate(0, space.top); - sub.translate(0, space.top); - if (diff >= 0) { - exp.translate(space.width + padding, diff); - } else { - diff = -diff; - opShape.translate(0, diff); - sup.translate(0, diff); - sub.translate(0, diff); - exp.translate(space.width + padding, 0); - } - this.parentExpression.expand(padding, padding * 2); - this.parentExpression.translateElement(padding, padding); - }, - getOperatorShape: function() { - var pathData = "M1.318,48.226c0,0,0.044,0.066,0.134,0.134c0.292,0.313,0.626,0.447,1.006,0.447c0.246,0.022,0.358-0.044,0.604-0.268 c0.782-0.782,1.497-2.838,2.324-6.727c0.514-2.369,0.938-4.693,1.586-8.448C8.559,24.068,9.9,17.878,11.978,9.52 c0.917-3.553,1.922-7.576,3.866-8.983C16.247,0.246,16.739,0,17.274,0c1.564,0,2.503,1.162,2.592,2.57 c0,0.827-0.424,1.386-1.273,1.386c-0.671,0-1.229-0.514-1.229-1.251c0-0.805,0.514-1.095,1.185-1.274 c0.022,0-0.291-0.29-0.425-0.379c-0.201-0.134-0.514-0.224-0.737-0.224c-0.067,0-0.112,0-0.157,0.022 c-0.469,0.134-0.983,0.939-1.453,2.234c-0.537,1.475-0.961,3.174-1.631,6.548c-0.424,2.101-0.693,3.464-1.229,6.727 c-1.608,9.185-2.949,15.487-5.006,23.756c-0.514,2.034-0.849,3.24-1.207,4.335c-0.559,1.698-1.162,2.95-1.811,3.799 c-0.514,0.715-1.385,1.408-2.436,1.408c-1.363,0-2.391-1.185-2.458-2.592c0-0.804,0.447-1.363,1.273-1.363 c0.671,0,1.229,0.514,1.229,1.251C2.503,47.757,1.989,48.047,1.318,48.226z", group = new kity.Group(), opGroup = new kity.Group(), opShape = new kity.Path(pathData).fill("black"), opBox = new kity.Rect(0, 0, 0, 0).fill("transparent"), tmpShape = null; - opGroup.addShape(opShape); - group.addShape(opBox); - group.addShape(opGroup); - this.addOperatorShape(group); - for (var i = 1; i < this.opType; i++) { - tmpShape = new kity.Use(opShape).translate(opShape.getWidth() / 2 * i, 0); - opGroup.addShape(tmpShape); - } - opGroup.scale(1.6); - tmpShape = null; - // 为操作符图形创建baseline和meanline方法 - group.getBaseline = function() { - return opGroup.getFixRenderBox().height; - }; - group.getMeanline = function() { - return 10; - }; - return group; - } - }); - } -}; - -/** - * 操作符抽象类 - * @abstract - */ -_p[41] = { - value: function(require) { - var kity = _p.r(34), GTYPE = _p.r(6); - return kity.createClass("Operator", { - base: _p.r(46), - constructor: function(operatorName) { - this.callBase(); - this.type = GTYPE.OP; - // 该操作符所属的表达式 - this.parentExpression = null; - // 操作符名称 - this.operatorName = operatorName; - // 操作符图形 - this.operatorShape = new kity.Group(); - this.addShape(this.operatorShape); - }, - applyOperand: function() { - throw new Error("applyOperand is abstract"); - }, - setParentExpression: function(exp) { - this.parentExpression = exp; - }, - getParentExpression: function() { - return this.parentExpression; - }, - clearParentExpression: function() { - this.parentExpression = null; - }, - // 提供给具体实现类附加其绘制的操作符图形的接口 - addOperatorShape: function(shpae) { - return this.operatorShape.addShape(shpae); - }, - getOperatorShape: function() { - return this.operatorShape; - } - }); - } -}; - -/** - * 开方操作符 - */ -_p[42] = { - value: function(require) { - var kity = _p.r(34), // 符号图形属性 - // 线条宽度 - SHAPE_DATA_WIDTH = 1, // 计算公式 - radians = 2 * Math.PI / 360, sin15 = Math.sin(15 * radians), cos15 = Math.cos(15 * radians), tan15 = Math.tan(15 * radians); - return kity.createClass("RadicalOperator", { - base: _p.r(41), - constructor: function() { - this.callBase("Radical"); - }, - applyOperand: function(radicand, exponent) { - generateOperator.call(this, radicand, exponent); - } - }); - // 根据给定的操作数生成操作符的pathData - // radicand 表示被开方数 - // exponent 表示指数 - function generateOperator(radicand, exponent) { - var decoration = generateDecoration(radicand), vLine = generateVLine(radicand), padding = 5, hLine = generateHLine(radicand); - this.addOperatorShape(decoration); - this.addOperatorShape(vLine); - this.addOperatorShape(hLine); - adjustmentPosition.call(this, mergeShape(decoration, vLine, hLine), this.operatorShape, radicand, exponent); - this.parentExpression.expand(0, padding * 2); - this.parentExpression.translateElement(0, padding); - } - // 生成根号中的左边装饰部分 - function generateDecoration(radicand) { - var shape = new kity.Path(), // 命名为a以便于精简表达式 - a = SHAPE_DATA_WIDTH, h = radicand.getHeight() / 3, drawer = shape.getDrawer(); - // 根号尾部左上角开始 - drawer.moveTo(0, cos15 * a * 6); - drawer.lineBy(sin15 * a, cos15 * a); - drawer.lineBy(cos15 * a * 3, -sin15 * a * 3); - drawer.lineBy(tan15 * h, h); - drawer.lineBy(sin15 * a * 3, -cos15 * a * 3); - drawer.lineBy(-sin15 * h, -h); - drawer.close(); - return shape.fill("black"); - } - // 根据操作数生成根号的竖直线部分 - function generateVLine(operand) { - var shape = new kity.Path(), // * 0.9 是为了在视觉上使斜线部分不至于太高 - h = operand.getHeight() * .9, drawer = shape.getDrawer(); - drawer.moveTo(tan15 * h, 0); - drawer.lineTo(0, h); - drawer.lineBy(sin15 * SHAPE_DATA_WIDTH * 3, cos15 * SHAPE_DATA_WIDTH * 3); - drawer.lineBy(tan15 * h + sin15 * SHAPE_DATA_WIDTH * 3, -(h + 3 * SHAPE_DATA_WIDTH * cos15)); - drawer.close(); - return shape.fill("black"); - } - // 根据操作数生成根号的水平线部分 - function generateHLine(operand) { - // 表达式宽度 - var w = operand.getWidth() + 2 * SHAPE_DATA_WIDTH; - return new kity.Rect(w, 2 * SHAPE_DATA_WIDTH).fill("black"); - } - // 合并根号的各个部分, 并返回根号的关键点位置数据 - function mergeShape(decoration, vLine, hLine) { - var decoBox = decoration.getFixRenderBox(), vLineBox = vLine.getFixRenderBox(); - vLine.translate(decoBox.width - sin15 * SHAPE_DATA_WIDTH * 3, 0); - decoration.translate(0, vLineBox.height - decoBox.height); - vLineBox = vLine.getFixRenderBox(); - hLine.translate(vLineBox.x + vLineBox.width - SHAPE_DATA_WIDTH / cos15, 0); - // 返回关键点数据 - return { - x: vLineBox.x + vLineBox.width - SHAPE_DATA_WIDTH / cos15, - y: 0 - }; - } - // 调整整个根号表达式的各个部分: 位置、操作符、被开方数、指数 - function adjustmentPosition(position, operator, radicand, exponent) { - var exponentBox = null, opOffset = { - x: 0, - y: 0 - }, opBox = operator.getFixRenderBox(); - exponent.scale(.66); - exponentBox = exponent.getFixRenderBox(); - if (exponentBox.width > 0 && exponentBox.height > 0) { - opOffset.y = exponentBox.height - opBox.height / 2; - // 指数不超出根号, 则移动指数 - if (opOffset.y < 0) { - exponent.translate(0, -opOffset.y); - opOffset.y = 0; - } - opOffset.x = exponentBox.width + opBox.height / 2 * tan15 - position.x; - } - operator.translate(opOffset.x, opOffset.y); - radicand.translate(opOffset.x + position.x + SHAPE_DATA_WIDTH, opOffset.y + 2 * SHAPE_DATA_WIDTH); - } - } -}; - -/** - * 上下标操作符 - */ -_p[43] = { - value: function(require) { - var kity = _p.r(34), ScriptController = _p.r(37); - return kity.createClass("ScriptOperator", { - base: _p.r(41), - constructor: function(operatorName) { - this.callBase(operatorName || "Script"); - }, - applyOperand: function(operand, sup, sub) { - var padding = 1, parent = this.parentExpression, space = new ScriptController(this, operand, sup, sub).applySide(); - this.getOperatorShape(); - space && parent.setOffset(space.top, space.bottom); - parent.expand(4, padding * 2); - parent.translateElement(2, padding); - } - }); - } -}; - -/** - * 求和操作符:∑ - */ -_p[44] = { - value: function(require) { - var kity = _p.r(34), ScriptController = _p.r(37); - return kity.createClass("SummationOperator", { - base: _p.r(41), - constructor: function() { - this.callBase("Summation"); - this.displayType = "equation"; - }, - applyOperand: function(expr, sup, sub) { - var opShape = this.getOperatorShape(), expBox = expr.getFixRenderBox(), padding = 0, space = new ScriptController(this, opShape, sup, sub).applyUpDown(), diff = (space.height - space.top - space.bottom - expBox.height) / 2; - if (diff >= 0) { - expr.translate(space.width + padding, diff + space.bottom); - } else { - diff = -diff; - opShape.translate(0, diff); - sup.translate(0, diff); - sub.translate(0, diff); - expr.translate(space.width + padding, space.bottom); - } - this.parentExpression.setOffset(space.top, space.bottom); - this.parentExpression.expand(padding, padding * 2); - this.parentExpression.translateElement(padding, padding); - }, - getOperatorShape: function() { - var pathData = "M0.672,33.603c-0.432,0-0.648,0-0.648-0.264c0-0.024,0-0.144,0.24-0.432l12.433-14.569L0,0.96c0-0.264,0-0.72,0.024-0.792 C0.096,0.024,0.12,0,0.672,0h28.371l2.904,6.745h-0.6C30.531,4.8,28.898,3.72,28.298,3.336c-1.896-1.2-3.984-1.608-5.28-1.8 c-0.216-0.048-2.4-0.384-5.617-0.384H4.248l11.185,15.289c0.168,0.24,0.168,0.312,0.168,0.36c0,0.12-0.048,0.192-0.216,0.384 L3.168,31.515h14.474c4.608,0,6.96-0.624,7.464-0.744c2.76-0.72,5.305-2.352,6.241-4.848h0.6l-2.904,7.681H0.672z", operatorShape = new kity.Path(pathData).fill("black"), opBgShape = new kity.Rect(0, 0, 0, 0).fill("transparent"), group = new kity.Group(), opRenderBox = null; - group.addShape(opBgShape); - group.addShape(operatorShape); - operatorShape.scale(1.6); - this.addOperatorShape(group); - opRenderBox = operatorShape.getFixRenderBox(); - if (this.displayType === "inline") { - operatorShape.translate(5, 15); - opBgShape.setSize(opRenderBox.width + 10, opRenderBox.height + 25); - } else { - operatorShape.translate(2, 5); - opBgShape.setSize(opRenderBox.width + 4, opRenderBox.height + 8); - } - return group; - } - }); - } -}; - -/*! - * 资源管理器 - * 负责管理资源的加载,并在资源ready之后提供Formula构造器 - */ -_p[45] = { - value: function(require) { - var kity = _p.r(34), cbList = [], RES_CONF = _p.r(47).resource, FontInstall = _p.r(24), Formula = _p.r(31), // 资源管理器就绪状态 - __readyState = false, // 资源管理器是否已启动 - inited = false; - return { - // 初始化 - ready: function(cb, options) { - if (!inited) { - inited = true; - init(options); - } - if (__readyState) { - window.setTimeout(function() { - cb(Formula); - }, 0); - } else { - cbList.push(cb); - } - } - }; - /** - * 资源初始化 - */ - function init(options) { - options = kity.Utils.extend({}, RES_CONF, options); - if (!/^(https?:)?\/\//.test(options.path)) { - options.path = getFullPath(options.path); - } - new FontInstall(document, options.path).mount(complete); - } - function complete() { - kity.Utils.each(cbList, function(cb) { - cb(Formula); - }); - } - function getFullPath(path) { - var pathname = location.pathname.split("/"), pathPart; - pathname.length -= 1; - pathname = pathname.join("/") + "/"; - pathPart = [ location.protocol, "//", location.host, pathname, path.replace(/^\//, "") ]; - return pathPart.join(""); - } - } -}; - -/*! - * 所有符号的基类 - * @abstract - */ -_p[46] = { - value: function(require) { - var kity = _p.r(34), GTYPE = _p.r(6); - return kity.createClass("SignGroup", { - base: kity.Group, - constructor: function() { - this.callBase(); - this.box = new kity.Rect(0, 0, 0, 0); - this.type = GTYPE.UNKNOWN; - this.addShape(this.box); - this.zoom = 1; - }, - setZoom: function(zoom) { - this.zoom = zoom; - }, - getZoom: function() { - return this.zoom; - }, - setBoxSize: function(w, h) { - return this.box.setSize(w, h); - }, - setBoxWidth: function(w) { - return this.box.setWidth(w); - }, - setBoxHeight: function(h) { - return this.box.setHeight(h); - }, - getType: function() { - return this.type; - }, - getBaseHeight: function() { - return this.getHeight(); - }, - getBaseWidth: function() { - return this.getWidth(); - }, - addedCall: function() {} - }); - } -}; - -/*! - * 系统项目配置文件. - */ -_p[47] = { - value: function(require) { - return { - zoom: .66, - font: { - meanline: Math.round(380 / 1e3 * 50), - baseline: Math.round(800 / 1e3 * 50), - baseHeight: 50, - // 系统字体列表 - list: [ _p.r(29), _p.r(27), _p.r(28), _p.r(26), _p.r(30) ] - }, - /*------------------------- 资源配置*/ - resource: { - path: "src/resource/" - }, - // 函数相关配置 - func: { - // 上下标在函数名上下两侧的函数列表 - "ud-script": { - lim: true - } - } - }; - } -}; - -/*! - * 启动代码 - */ -_p[48] = { - value: function(require) { - window.kf = { - // base - ResourceManager: _p.r(45), - Operator: _p.r(41), - // expression - Expression: _p.r(21), - CompoundExpression: _p.r(19), - TextExpression: _p.r(22), - EmptyExpression: _p.r(20), - CombinationExpression: _p.r(12), - FunctionExpression: _p.r(14), - FractionExpression: _p.r(13), - IntegrationExpression: _p.r(15), - RadicalExpression: _p.r(16), - ScriptExpression: _p.r(17), - SuperscriptExpression: _p.r(9), - SubscriptExpression: _p.r(8), - SummationExpression: _p.r(18), - // Brackets expressoin - BracketsExpression: _p.r(11) - }; - } -}; - -var moduleMapping = { - "kf.start": 48 -}; - -function use(name) { - _p.r([ moduleMapping[name] ]); -} -/** - * 模块暴露 - */ - -( function ( global ) { - - var oldGetRenderBox = kity.Shape.getRenderBox; - - kity.extendClass(kity.Shape, { - getFixRenderBox: function () { - return this.getRenderBox( this.container.container ); - }, - - getTranslate: function () { - return this.transform.translate; - } - }); - - // build环境中才含有use - try { - use( 'kf.start' ); - } catch ( e ) { - } - -} )( this ); -})(); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/js/kityformula-editor.all.min.js b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/js/kityformula-editor.all.min.js deleted file mode 100644 index 332ca588656b6f81d45da1189e5e5194b57c7361..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/js/kityformula-editor.all.min.js +++ /dev/null @@ -1,12 +0,0 @@ -/*! - * ==================================================== - * Kity Formula Editor - v1.0.0 - 2014-09-03 - * https://github.com/kitygraph/formula - * GitHub: https://github.com/kitygraph/formula.git - * Copyright (c) 2014 Baidu Kity Group; Licensed MIT - * ==================================================== - */ -!function(){function a(a){b.r([c[a]])}var b={r:function(a){if(b[a].inited)return b[a].value;if("function"!=typeof b[a].value)return b[a].inited=!0,b[a].value;var c={exports:{}},d=b[a].value(null,c.exports,c);if(b[a].inited=!0,b[a].value=d,void 0!==d)return d;for(var e in c.exports)if(c.exports.hasOwnProperty(e))return b[a].inited=!0,b[a].value=c.exports,c.exports}};b[0]={value:function(){function a(d,e,f,g){return g=0|g,g>b?f:(g++,c.each(f,function(b,f){d?!b||"object"!=typeof b&&"function"!=typeof b?e[f]=b:(e[f]=e[f]||(c.isArray(b)?[]:{}),e[f]=a(d,e[f],b,g)):e[f]=b}),e)}var b=10,c={extend:function(b,d){var e=!1;if("boolean"==typeof b?(e=b,b=d,d=[].splice.call(arguments,2)):d=[].splice.call(arguments,1),!b)throw new Error("Utils: extend, target can not be empty");return c.each(d,function(c){(c&&"object"==typeof c||"function"==typeof c)&&a(e,b,c)}),b},contains:function(a,b){return a.contains?a.contains(b):a.compareDocumentPosition?!!(16&a.compareDocumentPosition(b)):void 0},getRect:function(a){return a.getBoundingClientRect()},isArray:function(a){return a&&"[object Array]"==={}.toString.call(a)},isString:function(a){return"string"==typeof a},proxy:function(a,b){return function(){return a.apply(b,arguments)}},each:function(a,b){if(a)if("length"in a&&"number"==typeof a.length)for(var c=0,d=a.length;d>c&&b.call(null,a[c],c,a)!==!1;c++);else for(var e in a)if(a.hasOwnProperty(e)&&b.call(null,a[e],e,a)===!1)break}};return c}},b[1]={value:function(){var a=b.r(20);return a.createClass("Component",{constructor:function(){}})}},b[2]={value:function(){function a(){return++d}var c={},d=0,e=!0,f=b.r(3),g=b.r(0),h=function(a){var b=a.type,d=a.target,f=this.__kfe_eid,h=/^(?:before|after)/.test(b),j=c[f][b];return h||(i.trigger(d,"before"+b),e!==!1)?(g.each(j,function(b){return b&&b.call(d,a)===!1?e=!1:void 0}),void(h||i.trigger(d,"after"+b))):(e=!0,!1)},i={addEvent:function(b,d,e){var f=!0,g=null;b.__kfe_eid||(f=!1,b.__kfe_eid=a(),c[b.__kfe_eid]={}),g=c[b.__kfe_eid],g[d]||(f=!1,g[d]=[]),g[d].push(e),f||b.addEventListener(d,h,!1)},trigger:function(a,b,c){c=c||f.createEvent(b,c),a.dispatchEvent(c)}};return i}},b[3]={value:function(){return{createEvent:function(a){var b=document.createEvent("Event");return b.initEvent(a,!0,!0),b}}}},b[4]={value:function(){var a={},c=b.r(0);return c.extend(a,c,b.r(2)),a}},b[5]={value:function(){var a=b.r(20),c=b.r(8),d=a.createClass("ControllerComponent",{constructor:function(a){this.kfEditor=a,this.components={},this.initComponents()},initComponents:function(){this.components.listener=new c(this,this.kfEditor)}});return d}},b[6]={value:function(){var a={32:"\\,","s+219":"\\{","s+221":"\\}",220:"\\backslash","s+51":"\\#","s+52":"\\$","s+53":"\\%","s+54":"\\^","s+55":"\\&","s+189":"\\_","s+192":"\\~"};return{getReplaceString:function(b){return a[b]||null}}}},b[7]={value:function(){var a=b.r(20),c=b.r(4),d=b.r(6),e={LEFT:37,RIGHT:39,DELETE:8,INPUT:229};return a.createClass("InputComponent",{constructor:function(a,b){this.parentComponent=a,this.kfEditor=b,this.inputBox=this.createInputBox(),this.initServices(),this.initCommands(),this.initEvent()},initServices:function(){this.kfEditor.registerService("control.update.input",this,{updateInput:this.updateInput}),this.kfEditor.registerService("control.insert.string",this,{insertStr:this.insertStr})},initCommands:function(){this.kfEditor.registerCommand("focus",this,this.focus)},createInputBox:function(){var a=this.kfEditor.getContainer(),b=this.kfEditor.getDocument().createElement("input");return b.className="kf-editor-input-box",b.type="text",b.isTrusted=!1,a.appendChild(b),b},focus:function(){var a=null;this.inputBox.focus(),this.kfEditor.requestService("syntax.has.cursor.info")||(a=this.kfEditor.requestService("syntax.get.root.group.info"),this.kfEditor.requestService("syntax.update.record.cursor",{groupId:a.id,startOffset:0,endOffset:a.content.length}),this.kfEditor.requestService("control.update.input")),this.kfEditor.requestService("control.reselect")},setUntrusted:function(){this.inputBox.isTrusted=!1},setTrusted:function(){this.inputBox.isTrusted=!0},updateInput:function(){var a=this.kfEditor.requestService("syntax.serialization");this.setUntrusted(),this.inputBox.value=a.str,this.inputBox.selectionStart=a.startOffset,this.inputBox.selectionEnd=a.endOffset,this.inputBox.focus(),this.setTrusted()},insertStr:function(a){var b=this.kfEditor.requestService("syntax.serialization"),c=b.str;c=c.substring(0,b.startOffset)+" "+a+" "+c.substring(b.endOffset),this.restruct(c),this.updateInput(),this.kfEditor.requestService("ui.update.canvas.view")},initEvent:function(){var a=this;c.addEvent(this.inputBox,"keydown",function(b){var c=!1;if(b.ctrlKey)return void a.processUserCtrl(b);switch(b.keyCode){case e.INPUT:return;case e.LEFT:b.preventDefault(),a.leftMove(),c=!0;break;case e.RIGHT:b.preventDefault(),a.rightMove(),c=!0;break;case e.DELETE:b.preventDefault(),a.delete(),c=!0}c&&a.kfEditor.requestService("ui.update.canvas.view"),a.pretreatmentInput(b)||b.preventDefault()}),c.addEvent(this.inputBox,"input",function(){a.processingInput()}),c.addEvent(this.inputBox,"blur",function(){a.kfEditor.requestService("ui.toolbar.disable"),a.kfEditor.requestService("ui.toolbar.close"),a.kfEditor.requestService("control.cursor.hide"),a.kfEditor.requestService("render.clear.select")}),c.addEvent(this.inputBox,"focus",function(){a.kfEditor.requestService("ui.toolbar.enable"),this.isTrusted&&a.kfEditor.requestService("control.reselect")}),c.addEvent(this.inputBox,"paste",function(a){a.preventDefault()})},hasRootplaceholder:function(){return this.kfEditor.requestService("syntax.has.root.placeholder")},leftMove:function(){this.hasRootplaceholder()||(this.kfEditor.requestService("syntax.cursor.move.left"),this.update())},rightMove:function(){this.hasRootplaceholder()||(this.kfEditor.requestService("syntax.cursor.move.right"),this.update())},"delete":function(){var a=null;this.hasRootplaceholder()||(a=this.kfEditor.requestService("syntax.delete.group"),a?(this.updateInput(),this.processingInput()):(this.updateInput(),this.kfEditor.requestService("control.reselect")))},processUserCtrl:function(a){switch(a.preventDefault(),a.keyCode){case 65:this.kfEditor.requestService("control.select.all");break;case 83:this.kfEditor.requestService("print.image")}},pretreatmentInput:function(a){var b=this.getKeyCode(a),c=d.getReplaceString(b);return null===c?!0:(this.insertStr(c),!1)},getKeyCode:function(a){return(a.shiftKey?"s+":"")+a.keyCode},processingInput:function(){this.restruct(this.inputBox.value),this.kfEditor.requestService("ui.update.canvas.view")},restruct:function(a){this.kfEditor.requestService("render.draw",a),this.kfEditor.requestService("control.reselect")},update:function(){this.updateInput(),this.kfEditor.requestService("control.reselect")}})}},b[8]={value:function(){var a=b.r(20),c=b.r(9),d=b.r(7),e=b.r(10);return a.createClass("MoveComponent",{constructor:function(a,b){this.parentComponent=a,this.kfEditor=b,this.components={},this.initComponents()},initComponents:function(){this.components.location=new c(this,this.kfEditor),this.components.selection=new e(this,this.kfEditor),this.components.input=new d(this,this.kfEditor)}})}},b[9]={value:function(){function a(a){return a.getBoundingClientRect()}var c=b.r(20);return c.createClass("LocationComponent",{constructor:function(a,b){this.parentComponent=a,this.kfEditor=b,this.paper=this.getPaper(),this.cursorShape=this.createCursor(),this.initServices(),this.initEvent()},getPaper:function(){return this.kfEditor.requestService("render.get.paper")},initServices:function(){this.kfEditor.registerService("control.cursor.relocation",this,{relocationCursor:this.updateCursor}),this.kfEditor.registerService("control.cursor.hide",this,{hideCursor:this.hideCursor}),this.kfEditor.registerService("control.reselect",this,{reselect:this.reselect}),this.kfEditor.registerService("control.get.cursor.location",this,{getCursorLocation:this.getCursorLocation})},createCursor:function(){var a=new c.Rect(1,0,0,0).fill("black");return a.setAttr("style","display: none"),this.paper.addShape(a),a},initEvent:function(){var a=this.kfEditor.request("ui.canvas.container.event"),b=this;a.on("mousedown",function(a){a.preventDefault(),b.updateCursorInfo(a),b.kfEditor.requestService("control.update.input"),b.reselect()})},updateCursorInfo:function(a){var b=null,c=null,d=-1;return this.kfEditor.requestService("syntax.has.root.placeholder")?(this.kfEditor.requestService("syntax.update.record.cursor",{groupId:this.kfEditor.requestService("syntax.get.root.group.info").id,startOffset:0,endOffset:1}),!1):(b=this.kfEditor.requestService("position.get.wrap",a.target),b&&this.kfEditor.requestService("syntax.is.placeholder.node",b.id)?(c=this.kfEditor.requestService("position.get.group.info",b),void this.kfEditor.requestService("syntax.update.record.cursor",c.group.id,c.index,c.index+1)):(c=this.kfEditor.requestService("position.get.group",a.target),null===c&&(c=this.kfEditor.requestService("syntax.get.root.group.info")),d=this.getIndex(a.clientX,c),void this.kfEditor.requestService("syntax.update.record.cursor",c.id,d)))},hideCursor:function(){this.cursorShape.setAttr("style","display: none")},reselect:function(){var a=this.kfEditor.requestService("syntax.get.record.cursor"),b=null;return this.hideCursor(),this.kfEditor.requestService("syntax.is.select.placeholder")?(b=this.kfEditor.requestService("syntax.get.group.content",a.groupId),void this.kfEditor.requestService("render.select.group",b.content[a.startOffset].id)):void(a.startOffset===a.endOffset?(this.updateCursor(),this.kfEditor.requestService("render.tint.current.cursor")):this.kfEditor.requestService("render.select.current.cursor"))},updateCursor:function(){var b=this.kfEditor.requestService("syntax.get.record.cursor");if(b.startOffset!==b.endOffset)return void this.hideCursor();var c=this.kfEditor.requestService("syntax.get.group.content",b.groupId),d=0===b.endOffset,e=d?0:b.endOffset-1,f=c.content[e],g=a(this.paper.container.node),h=0,i=a(f),j=this.cursorShape.getTransform(this.cursorShape),k=this.kfEditor.requestService("render.get.canvas.zoom"),l=this.paper.getZoom();this.cursorShape.setHeight(i.height/k/l),h=d?i.left-2:i.left+i.width-2,h-=g.left,j.m.e=Math.floor(h/k/l)+.5,j.m.f=(i.top-g.top)/k/l,this.cursorShape.setMatrix(j),this.cursorShape.setAttr("style","display: block")},getCursorLocation:function(){var a=this.cursorShape.getRenderBox("paper");return{x:a.x,y:a.y}},getIndex:function(b,c){for(var d=-1,e=c.content,f=null,g=e.length-1,h=null;g>=0;g--)if(d=g,h=e[g],f=a(h),f.leftthis.startPoint.x,e={},f=null,g=!1,h=this.startGroup,i=null,j=this.getGroupInof(b,a);j.groupInfo.id===h.groupInfo.id?(e={groupId:j.groupInfo.id,startOffset:h.offset,endOffset:j.offset},this.startGroupIsPlaceholder&&(d?e.startOffset===e.endOffset&&(e.endOffset+=1):e.startOffset+=1)):c.contains(h.groupInfo.groupObj,j.groupInfo.groupObj)?e={groupId:h.groupInfo.id,startOffset:h.offset,endOffset:this.getIndex(h.groupInfo.groupObj,a,b)}:c.contains(j.groupInfo.groupObj,h.groupInfo.groupObj)?(e={groupId:j.groupInfo.id,startOffset:this.kfEditor.requestService("position.get.index",j.groupInfo.groupObj,h.groupInfo.groupObj),endOffset:j.offset},d||(e.startOffset+=1)):(f=this.getCommunityGroup(h.groupInfo,j.groupInfo),f.startOffset===f.endOffset?f.endOffset+=1:(i=f.group.content[f.endOffset],g=this.kfEditor.requestService("position.get.area",i,b),g&&(f.endOffset+=1),d||(f.startOffset+=1)),e={groupId:f.group.id,startOffset:f.startOffset,endOffset:f.endOffset}),this.kfEditor.requestService("syntax.update.record.cursor",e.groupId,e.startOffset,e.endOffset),this.kfEditor.requestService("control.reselect")},updateSelectionByTarget:function(a){var b=this.kfEditor.requestService("position.get.parent.group",a),c=null,d={};if(null!==b){if(this.kfEditor.requestService("syntax.is.root.node",b.id))return void this.selectAll();this.kfEditor.requestService("syntax.is.virtual.node",b.id)?(c=this.kfEditor.requestService("position.get.group.info",b.groupObj),d={groupId:c.group.id,startOffset:c.index,endOffset:c.index+1}):d={groupId:b.id,startOffset:0,endOffset:b.content.length},this.kfEditor.requestService("syntax.update.record.cursor",d),this.kfEditor.requestService("control.reselect"),this.kfEditor.requestService("control.update.input")}},selectAll:function(){var a=this.kfEditor.requestService("syntax.get.root.group.info"),b={groupId:a.id,startOffset:0,endOffset:a.content.length};this.kfEditor.requestService("syntax.update.record.cursor",b),this.kfEditor.requestService("control.reselect"),this.kfEditor.requestService("control.update.input")},getGroupInof:function(a,b){var c=this.kfEditor.requestService("position.get.group",b);null===c&&(c=this.kfEditor.requestService("syntax.get.root.group.info"));var d=this.kfEditor.requestService("position.get.location.info",a,c);return{groupInfo:c,offset:d}},getIndex:function(a,b,d){var e=this.kfEditor.requestService("position.get.index",a,b),f=this.kfEditor.requestService("syntax.get.group.content",a.id),g=f.content[e],h=c.getRect(g);return h.left+h.width/2k;k++)i=b.operand[k],h(b)?e(a,k,b,i):f(a,k,b,i);return b}function c(){return q+ ++s}function d(a,b){a.isResetId?b.attr["data-root"]="true":b.attr["data-type"]=r.VIRTUAL}function e(b,c,d,e){"brackets"===d.name&&2>c||("function"!==d.name||0!==c)&&(d.attr["data-type"]=r.VIRTUAL,e?"string"==typeof e?(d.operand[c]=j(b),d.operand[c].operand[0]=e):i(e)?(d.operand[c]=j(b),d.operand[c].operand[0]=a(b,e,d.operand[c])):d.operand[c]=a(b,e,d):d.operand[c]=e)}function f(b,c,d,e){d.attr["data-type"]=r.GROUP,d.operand[c]=e&&"string"!=typeof e?"text"===e.name?e:a(b,e,d):e}function g(a){var b=1;if(a.length>3)return!1;for(var c=0,d=a.length;d>c;c++)a[c]!==m&&a[c]&&"placeholder"===a[c].name&&b--;return!b}function h(a){return!!n[a.name]}function i(a){return"placeholder"===a.name}function j(a){return{name:p,attr:{"data-type":r.GROUP,id:a.getGroupId()},operand:[]}}var k=b.r(19).Parser,l=b.r(20),m=b.r(29).cursorCharacter,n=b.r(22),o=b.r(29).rootPlaceholder.content,p="combination",q="_kf_editor_",r=b.r(11),s=0,t=l.createClass("Parser",{constructor:function(a){this.kfEditor=a,this.callBase(),this.kfParser=k.use("latex"),this.initKFormulExtension(),this.pid=c(),this.groupRecord=0,this.tree=null,this.isResetId=!0,this.initServices()},parse:function(b,c){var d=null;return this.isResetId=!!c,this.isResetId&&this.resetGroupId(),d=this.kfParser.parse(b),a(this,d.tree),d},serialization:function(a){return this.kfParser.serialization(a)},initServices:function(){this.kfEditor.registerService("parser.parse",this,{parse:this.parse}),this.kfEditor.registerService("parser.latex.serialization",this,{serialization:this.serialization})},getKFParser:function(){return this.kfParser},initKFormulExtension:function(){b.r(17).ext(this)},resetGroupId:function(){this.groupRecord=0},getGroupId:function(){return this.pid+"_"+ ++this.groupRecord}});return t}},b[22]={value:function(){return{radical:!0,fraction:!0,summation:!0,integration:!0,placeholder:!0,script:!0,superscript:!0,subscript:!0,brackets:!0,"function":!0}}},b[23]={value:function(){function a(b,c,d){var e=null;return b.ownerSVGElement?(b=b.parentNode,e=b.tagName.toLowerCase(),b&&"body"!==e&&"svg"!==e?"kf-editor-group"===b.getAttribute("data-type")?b:c&&"kf-editor-virtual-group"===b.getAttribute("data-type")?b:d&&null!==b.getAttribute("data-flag")?b:a(b,c,d):null):null}var c=b.r(20),d=b.r(4),e=c.createClass("PositionComponenet",{constructor:function(a){this.kfEditor=a,this.initServices()},initServices:function(){this.kfEditor.registerService("position.get.group",this,{getGroupByTarget:this.getGroupByTarget}),this.kfEditor.registerService("position.get.index",this,{getIndexByTargetInGroup:this.getIndexByTargetInGroup}),this.kfEditor.registerService("position.get.location.info",this,{getLocationInfo:this.getLocationInfo}),this.kfEditor.registerService("position.get.parent.group",this,{getParentGroupByTarget:this.getParentGroupByTarget}),this.kfEditor.registerService("position.get.wrap",this,{getWrap:this.getWrap}),this.kfEditor.registerService("position.get.area",this,{getAreaByCursorInGroup:this.getAreaByCursorInGroup}),this.kfEditor.registerService("position.get.group.info",this,{getGroupInfoByNode:this.getGroupInfoByNode}),this.kfEditor.registerService("position.get.parent.info",this,{getParentInfoByNode:this.getParentInfoByNode})},getGroupByTarget:function(b){var c=a(b,!1,!1);return c?this.kfEditor.requestService("syntax.get.group.content",c.id):null},getIndexByTargetInGroup:function(a,b){var e=this.kfEditor.requestService("syntax.get.group.content",a.id),f=-1;return c.Utils.each(e.content,function(a,c){return f=c,d.contains(a,b)?!1:void 0}),f},getAreaByCursorInGroup:function(a,b){var c=d.getRect(a);return c.left+c.width/2=0;g--)if(c=g,h=e[g],f=d.getRect(h),f.leftg&&(c.index=g,!d.contains(f.content[g],b));g++);return c.group=f,c},getParentInfoByNode:function(b){var c=a(b,!0,!1);return c=this.kfEditor.requestService("syntax.get.group.content",c.id),{group:c,index:c.content.indexOf(b)}}});return e}},b[24]={value:function(){var a=b.r(20);return a.createClass("Printer",{constructor:function(a){this.kfEditor=a,this.initServices(),this.initCommands()},initServices:function(){this.kfEditor.registerService("print.image",this,{printImage:this.printImage})},initCommands:function(){this.kfEditor.registerCommand("get.image.data",this,this.getImageData)},printImage:function(){var a=this.kfEditor.requestService("render.get.paper");this._formatCanvas(),a.toPNG(function(a){document.body.innerHTML=''}),this._restoreCanvas()},getImageData:function(a){var b=this.kfEditor.requestService("render.get.canvas"),c=this.kfEditor.requestService("render.get.paper");this._formatCanvas(),c.toPNG(function(c){a({width:b.width,height:b.height,img:c})}),this._restoreCanvas()},_formatCanvas:function(){var a=this.kfEditor.requestService("render.get.canvas"),b=a.container.getRenderBox();a.node.setAttribute("width",b.width),a.node.setAttribute("height",b.height),this.kfEditor.requestService("render.clear.canvas.transform"),this.kfEditor.requestService("control.cursor.hide"),this.kfEditor.requestService("render.clear.select")},_restoreCanvas:function(){var a=this.kfEditor.requestService("render.get.canvas");a.node.setAttribute("width","100%"),a.node.setAttribute("height","100%"),this.kfEditor.requestService("render.revert.canvas.transform"),this.kfEditor.requestService("control.cursor.relocation"),this.kfEditor.requestService("render.reselect")}})}},b[25]={value:function(){var a=b.r(20),c=b.r(19).Assembly,d={autoresize:!1,fontsize:50,padding:[20,50]},e=a.createClass("RenderComponent",{base:b.r(1),constructor:function(b,c){this.callBase(),this.options=a.Utils.extend({},d,c),this.kfEditor=b,this.assembly=null,this.formula=null,this.relDisabled=!1,this.canvasZoom=1,this.record={select:{},cursor:{},canvas:{}},this.initCanvas(),this.initServices(),this.initCommands()},initCanvas:function(){var a=this.kfEditor.requestService("ui.get.canvas.container"),b=this.kfEditor.getFormulaClass();this.assembly=new c(new b(a,this.options)),this.formula=this.assembly.formula,this.setCanvasToCenter()},setCanvasOffset:function(a,b){var c=this.formula.getViewBox();b=void 0!==b?b:-c.height/2,this.formula.setViewBox(a,b,c.width,c.height)},setCanvasToCenter:function(){var a=this.formula.getViewBox();this.formula.setViewBox(-a.width/2,-a.height/2,a.width,a.height)},initServices:function(){this.kfEditor.registerService("render.get.canvas",this,{getCanvas:this.getCanvas}),this.kfEditor.registerService("render.get.content.size",this,{getContentSize:this.getContentSize}),this.kfEditor.registerService("render.clear.canvas.transform",this,{clearCanvasOffset:this.clearCanvasTransform}),this.kfEditor.registerService("render.set.canvas.offset",this,{setCanvasOffset:this.setCanvasOffset}),this.kfEditor.registerService("render.set.canvas.to.center",this,{setCanvasToCenter:this.setCanvasToCenter}),this.kfEditor.registerService("render.revert.canvas.transform",this,{revertCanvasTransform:this.revertCanvasTransform}),this.kfEditor.registerService("render.relocation",this,{relocation:this.relocation}),this.kfEditor.registerService("render.disable.relocation",this,{disableRelocation:this.disableRelocation}),this.kfEditor.registerService("render.enable.relocation",this,{enableRelocation:this.enableRelocation}),this.kfEditor.registerService("render.select.group.content",this,{selectGroupContent:this.selectGroupContent}),this.kfEditor.registerService("render.select.group",this,{selectGroup:this.selectGroup}),this.kfEditor.registerService("render.select.group.all",this,{selectAllGroup:this.selectAllGroup}),this.kfEditor.registerService("render.tint.current.cursor",this,{tintCurrentGroup:this.tintCurrentGroup}),this.kfEditor.registerService("render.select.current.cursor",this,{selectCurrentCursor:this.selectCurrentCursor}),this.kfEditor.registerService("render.reselect",this,{reselect:this.reselect}),this.kfEditor.registerService("render.clear.select",this,{clearSelect:this.clearSelect}),this.kfEditor.registerService("render.set.canvas.zoom",this,{setCanvasZoom:this.setCanvasZoom}),this.kfEditor.registerService("render.get.canvas.zoom",this,{getCanvasZoom:this.getCanvasZoom}),this.kfEditor.registerService("render.get.paper.offset",this,{getPaperOffset:this.getPaperOffset}),this.kfEditor.registerService("render.draw",this,{render:this.render}),this.kfEditor.registerService("render.insert.string",this,{insertString:this.insertString}),this.kfEditor.registerService("render.insert.group",this,{insertGroup:this.insertGroup}),this.kfEditor.registerService("render.get.paper",this,{getPaper:this.getPaper})},initCommands:function(){this.kfEditor.registerCommand("render",this,function(a){this.render(a),this.kfEditor.requestService("ui.update.canvas.view")}),this.kfEditor.registerCommand("getPaper",this,this.getPaper)},relocation:function(){this.relDisabled?this.relocationToLeft():this.relocationToCenter()},relocationToCenter:function(){var a=this.formula.container.getRenderBox();this.formula.container.setTranslate(-a.width/2,-a.height/2),this.setCanvasToCenter()},relocationToLeft:function(){var a=this.formula.container.getRenderBox();this.formula.container.setTranslate(0,-a.height/2),this.setCanvasOffset(0)},selectGroup:function(a){var b=this.kfEditor.requestService("syntax.get.group.object",a);this.clearSelect(),b.node.getAttribute("data-root")||(this.record.select.lastSelect=b,b.select())},selectGroupContent:function(a){null!==a.groupObj.getAttribute("data-placeholder")&&(a={id:a.content[0].id});var b=this.kfEditor.requestService("syntax.get.group.object",a.id);this.clearSelect(),this.record.select.lastSelect=b,b.node.getAttribute("data-root")||b.select()},selectAllGroup:function(a){null!==a.groupObj.getAttribute("data-placeholder")&&(a={id:a.content[0].id});var b=this.kfEditor.requestService("syntax.get.group.object",a.id);this.clearSelect(),this.record.select.lastSelect=b,b.selectAll()},selectCurrentCursor:function(){var a=this.kfEditor.requestService("syntax.get.record.cursor"),b=this.kfEditor.requestService("syntax.get.group.object",a.groupId),c=null,d=-1,e=0,f=Math.min(a.startOffset,a.endOffset),g=Math.max(a.startOffset,a.endOffset);this.clearSelect(),this.record.select.lastSelect=b;for(var h=f,i=g;i>h;h++)c=b.getOperand(h).getRenderBox(b),-1==d&&(d=c.x),e+=c.width;b.setBoxWidth(e),b.selectAll(),b.getBox().setTranslate(d,0)},tintCurrentGroup:function(){var a=this.kfEditor.requestService("syntax.get.record.cursor").groupId,b=this.kfEditor.requestService("syntax.get.group.object",a),c=this.kfEditor.requestService("syntax.is.placeholder.node",a);this.clearSelect(),b.node.getAttribute("data-root")||(c&&(b=this.kfEditor.requestService("syntax.get.group.object",b.operands[0].node.id)),this.record.select.lastSelect=b,b.select())},reselect:function(){var a=this.kfEditor.requestService("syntax.get.record.cursor"),b=null;b=this.kfEditor.requestService("syntax.get.group.object",a.groupId),this.clearSelect(),this.record.select.lastSelect=b,b.node.getAttribute("data-root")||b.select() -},clearSelect:function(){var a=null,b=this.record.select.lastSelect;b&&b.node.ownerSVGElement&&(b.unselect(),a=b.getRenderBox(b),b.setBoxWidth(a.width),b.getBox().setTranslate(0,0))},getPaper:function(){return this.formula},render:function(a){var b=this.kfEditor.requestService("parser.parse",a,!0),c=this.assembly.regenerateBy(b);this.kfEditor.requestService("syntax.update.objtree",c)},enableRelocation:function(){this.relDisabled=!1},disableRelocation:function(){this.relDisabled=!0},setCanvasZoom:function(a){var b=this.formula.getViewPort();this.canvasZoom=a,b.zoom=a,this.formula.setViewPort(b)},getCanvas:function(){return this.formula},getContentSize:function(){return this.formula.container.getRenderBox()},clearCanvasTransform:function(){var a=this.record.canvas;a.viewBox=this.formula.getViewBox(),a.contentOffset=this.formula.container.getTranslate(),this.setCanvasToCenter(),this.formula.node.removeAttribute("viewBox"),this.formula.container.setTranslate(0,0)},revertCanvasTransform:function(){var a=this.record.canvas,b=a.viewBox;return b?(this.formula.setViewBox(b.x,b.y,b.width,b.height),this.formula.container.setTranslate(a.contentOffset),a.viewBox=null,void(a.contentOffset=null)):!1},getCanvasZoom:function(){return this.canvasZoom}});return e}},b[26]={value:function(){var a=b.r(20);return a.createClass("DeleteComponent",{constructor:function(a,b){this.parentComponent=a,this.kfEditor=b},deleteGroup:function(){var a=this.parentComponent.getCursorRecord(),b=this.parentComponent.getObjectTree(),c=b.mapping[a.groupId].strGroup;return a.startOffset!==a.endOffset?this.parentComponent.isSelectPlaceholder()?this.parentComponent.isRootTree(c)?!1:(a=this.selectParentContainer(a.groupId),this.parentComponent.updateCursor(a),!1):this.deleteSelection(c,a):0===a.startOffset?this.parentComponent.isRootTree(c)?!1:(a=this.selectParentContainer(a.groupId),this.parentComponent.updateCursor(a),!1):c.operand.length>1?(a=this.deletePrevGroup(c,a),this.parentComponent.updateCursor(a),a.startOffset===a.endOffset?!0:!1):(a.startOffset=0,a.endOffset=1,c.operand[0].attr&&this.parentComponent.isGroupNode(c.operand[0].attr.id)?(this.parentComponent.updateCursor(a),!1):(c.operand[0]={name:"placeholder",operand:[]},this.parentComponent.updateCursor(a),!0))},deletePrevGroup:function(a,b){var c=b.startOffset-1,d=a.operand[c];return this.parentComponent.isLeafTree(d)?(a.operand.splice(c,1),b.startOffset-=1,b.endOffset-=1):b.startOffset-=1,b},deleteSelection:function(a,b){return 0===b.startOffset&&b.endOffset===a.operand.length?(a.operand.length=1,a.operand[0]={name:"placeholder",operand:[]},b.endOffset=1):(a.operand.splice(b.startOffset,b.endOffset-b.startOffset),b.endOffset=b.startOffset),this.parentComponent.updateCursor(b),!0},selectParentContainer:function(a){var b=this.parentComponent.getGroupObject(a).node,c=this.kfEditor.requestService("position.get.group",b),d=this.kfEditor.requestService("position.get.index",c.groupObj,b);return{groupId:c.id,startOffset:d,endOffset:d+1}}})}},b[27]={value:function(){function a(a){var b=null,c=this.parentComponent,f=null;return f=c.getGroupContent(a.groupId),c.isSelectPlaceholder()?e(this,f.content[a.startOffset],p.LEFT):(a.startOffset===a.endOffset?a.startOffset>0?(b=f.content[a.startOffset-1],l(b)?a=d(this,b,p.LEFT):(a.startOffset-=1,m(b)||(a.endOffset=a.startOffset))):a=e(this,f.groupObj,p.LEFT):(a.startOffset=Math.min(a.startOffset,a.endOffset),a.endOffset=a.startOffset),a)}function c(a){var b=null,c=this.parentComponent,f=null;return f=c.getGroupContent(a.groupId),c.isSelectPlaceholder()?e(this,f.content[a.startOffset],p.RIGHT):(a.startOffset===a.endOffset?a.startOffset1)return{groupId:d.group.id,startOffset:0,endOffset:0};d=c.requestService("position.get.parent.info",d.group.groupObj)}return k(d.group.groupObj)?{groupId:d.group.id,startOffset:d.index,endOffset:d.index}:(b=d.group.content[d.index-1],l(b)?k(b)?f(a,b):f(a,b):n(b)?g(a,b):{groupId:d.group.id,startOffset:d.index,endOffset:d.index})}function h(a,b){var c=a.parentComponent,d=null,e=null;if(l(b)){if(d=c.getGroupContent(b.id),e=d.content[0],k(b))return k(e)?h(a,e):m(e)?{groupId:b.id,startOffset:0,endOffset:1}:{groupId:b.id,startOffset:0,endOffset:0};for(;!k(e)&&!m(e)&&!n(e);)d=c.getGroupContent(e.id),e=d.content[0];return m(e)?{groupId:e.id,startOffset:0,endOffset:0}:n(e)?i(a,e):h(a,e)}return null}function i(a,b){var c=a.kfEditor,d=a.parentComponent,e=null,f=null;if(j(b))return null;for(e=c.requestService("position.get.parent.info",b);e.index===e.group.content.length-1;){if(j(e.group.groupObj))return{groupId:e.group.id,startOffset:e.group.content.length,endOffset:e.group.content.length};if(k(e.group.groupObj)&&e.group.content.length>1)return{groupId:e.group.id,startOffset:e.group.content.length,endOffset:e.group.content.length};e=c.requestService("position.get.parent.info",e.group.groupObj)}return b=e.group.content[e.index+1],n(b)?i(a,b):k(b)?(f=d.getGroupContent(b.id),d.isPlaceholder(f.content[0].id)?{groupId:b.id,startOffset:0,endOffset:1}:{groupId:b.id,startOffset:0,endOffset:0}):{groupId:e.group.id,startOffset:e.index+1,endOffset:e.index+1}}function j(a){return!!a.getAttribute("data-root")}function k(a){return"kf-editor-group"===a.getAttribute("data-type")}function l(a){var b=a.getAttribute("data-type");return"kf-editor-group"===b||"kf-editor-virtual-group"===b}function m(a){return"Placeholder"===a.getAttribute("data-flag")}function n(a){return"Empty"===a.getAttribute("data-flag")}var o=b.r(20),p={LEFT:"left",RIGHT:"right"};return o.createClass("MoveComponent",{constructor:function(a,b){this.parentComponent=a,this.kfEditor=b},leftMove:function(){var b=this.parentComponent.getCursorRecord();b=a.call(this,b),b&&this.parentComponent.updateCursor(b)},rightMove:function(){var a=this.parentComponent.getCursorRecord();a=c.call(this,a),a&&this.parentComponent.updateCursor(a)}})}},b[28]={value:function(){var a=b.r(20),c=b.r(27),d=b.r(26),e=b.r(29).cursorCharacter,f=b.r(11),g=a.createClass("SyntaxComponenet",{constructor:function(a){this.kfEditor=a,this.record={cursor:{group:null,startOffset:-1,endOffset:-1}},this.components={},this.objTree=null,this.initComponents(),this.initServices(),this.initCommands()},initComponents:function(){this.components.move=new c(this,this.kfEditor),this.components.delete=new d(this,this.kfEditor)},initServices:function(){this.kfEditor.registerService("syntax.update.objtree",this,{updateObjTree:this.updateObjTree}),this.kfEditor.registerService("syntax.get.objtree",this,{getObjectTree:this.getObjectTree}),this.kfEditor.registerService("syntax.get.group.object",this,{getGroupObject:this.getGroupObject}),this.kfEditor.registerService("syntax.is.root.node",this,{isRootNode:this.isRootNode}),this.kfEditor.registerService("syntax.is.group.node",this,{isGroupNode:this.isGroupNode}),this.kfEditor.registerService("syntax.is.virtual.node",this,{isVirtualNode:this.isVirtualNode}),this.kfEditor.registerService("syntax.is.placeholder.node",this,{isPlaceholder:this.isPlaceholder}),this.kfEditor.registerService("syntax.is.select.placeholder",this,{isSelectPlaceholder:this.isSelectPlaceholder}),this.kfEditor.registerService("syntax.has.root.placeholder",this,{hasRootplaceholder:this.hasRootplaceholder}),this.kfEditor.registerService("syntax.valid.brackets",this,{isBrackets:this.isBrackets}),this.kfEditor.registerService("syntax.get.group.content",this,{getGroupContent:this.getGroupContent}),this.kfEditor.registerService("syntax.get.root.group.info",this,{getRootGroupInfo:this.getRootGroupInfo}),this.kfEditor.registerService("syntax.get.root",this,{getRootObject:this.getRootObject}),this.kfEditor.registerService("syntax.update.record.cursor",this,{updateCursor:this.updateCursor}),this.kfEditor.registerService("syntax.update.selection",this,{updateSelection:this.updateSelection}),this.kfEditor.registerService("syntax.get.record.cursor",this,{getCursorRecord:this.getCursorRecord}),this.kfEditor.registerService("syntax.has.cursor.info",this,{hasCursorInfo:this.hasCursorInfo}),this.kfEditor.registerService("syntax.serialization",this,{serialization:this.serialization}),this.kfEditor.registerService("syntax.cursor.move.left",this,{leftMove:this.leftMove}),this.kfEditor.registerService("syntax.cursor.move.right",this,{rightMove:this.rightMove}),this.kfEditor.registerService("syntax.delete.group",this,{deleteGroup:this.deleteGroup})},initCommands:function(){this.kfEditor.registerCommand("get.source",this,this.getSource),this.kfEditor.registerCommand("content.is.empty",this,this.isEmpty)},updateObjTree:function(a){var b=a.select;b&&b.groupId&&this.updateCursor(b.groupId,b.startOffset,b.endOffset),this.objTree=a},hasCursorInfo:function(){return null!==this.record.cursor.group},isRootNode:function(a){return this.objTree.mapping.root.strGroup.attr.id===a},isGroupNode:function(a){var b=this.objTree.mapping[a].strGroup.attr["data-type"];return b===f.GROUP||b===f.VIRTUAL},isVirtualNode:function(a){return this.objTree.mapping[a].strGroup.attr["data-type"]===f.VIRTUAL},isPlaceholder:function(a){var b=this.objTree.mapping[a];return b?(b=b.objGroup.node,"Placeholder"===b.getAttribute("data-flag")):!1},isBrackets:function(a){return!!this.objTree.mapping[a].objGroup.node.getAttribute("data-brackets")},hasRootplaceholder:function(){return"placeholder"===this.objTree.mapping.root.strGroup.operand[0].name},isSelectPlaceholder:function(){var a=this.record.cursor,b=null;return a.endOffset-a.startOffset!==1?!1:(b=this.getGroupContent(a.groupId),this.isPlaceholder(b.content[a.startOffset].id)?!0:!1)},isLeafTree:function(a){return"string"==typeof a},isRootTree:function(a){return a.attr&&a.attr["data-root"]},getObjectTree:function(){return this.objTree},getGroupObject:function(a){return this.objTree.mapping[a].objGroup||null},getCursorRecord:function(){return a.Utils.extend({},this.record.cursor)||null},getGroupContent:function(b){var c=this.objTree.mapping[b],d=[],e=c.objGroup.operands,f=e.length-1,g="rtl"!==c.strGroup.traversal;return a.Utils.each(e,function(a,b){g?d.push(a.node):d[f-b]=a.node}),{id:b,traversal:c.strGroup.traversal||"ltr",groupObj:c.objGroup.node,content:d}},getRootObject:function(){return this.objTree.mapping.root.objGroup},getRootGroupInfo:function(){var a=this.objTree.mapping.root.strGroup.attr.id;return this.getGroupContent(a)},updateSelection:function(a){var b=this.objTree.mapping[a.id],c=b.strGroup,d=null,f=null,g=null,h=-1,i=-1;if(d=a,f=b,"combination"===c.name)this.record.cursor={groupId:d.id,startOffset:0,endOffset:c.operand.length},c.operand.unshift(e),c.operand.push(e);else{for(;"combination"!==f.strGroup.name||1===d.content;)a=d,b=f,d=this.kfEditor.requestService("position.get.parent.group",b.objGroup.node),f=this.objTree.mapping[d.id];var j=[].indexOf.call(d.content,a.groupObj);this.record.cursor={groupId:d.id,startOffset:j,endOffset:j+1},f.strGroup.operand.splice(j+1,0,e),f.strGroup.operand.splice(j,0,e)}return g=this.kfEditor.requestService("parser.latex.serialization",this.objTree.parsedTree),h=g.indexOf(e),g=g.replace(e,""),i=g.indexOf(e),f.strGroup.operand.splice(this.record.cursor.startOffset,1),f.strGroup.operand.splice(this.record.cursor.endOffset,1),{str:g,startOffset:h,endOffset:i}},getSource:function(){return this.serialization().str.replace(e,"").replace(e,"")},isEmpty:function(){return this.hasRootplaceholder()},serialization:function(){var a=this.record.cursor,b=this.objTree.mapping[a.groupId],c=b.strGroup,d=null,f=-1,g=-1;return f=Math.min(a.endOffset,a.startOffset),g=Math.max(a.endOffset,a.startOffset),c.operand.splice(g,0,e),c.operand.splice(f,0,e),g+=1,d=this.kfEditor.requestService("parser.latex.serialization",this.objTree.parsedTree),c.operand.splice(g,1),c.operand.splice(f,1),f=d.indexOf(e),a.startOffset===a.endOffset&&(d=d.replace(e,"")),g=d.lastIndexOf(e),{str:d,startOffset:f,endOffset:g}},updateCursor:function(a,b,c){var d=null;1===arguments.length&&(c=a.endOffset,b=a.startOffset,a=a.groupId),void 0===c&&(c=b),b>c&&(d=c,c=b,b=d),this.record.cursor={groupId:a,startOffset:b,endOffset:c}},leftMove:function(){this.components.move.leftMove()},rightMove:function(){this.components.move.rightMove()},deleteGroup:function(){return this.components.delete.deleteGroup()},insertSubtree:function(a){var b=this.record.cursor,c=0,d=0,e=null,f=0;this.isPlaceholder(b.groupId)?this.replaceTree(a):(c=Math.min(b.startOffset,b.endOffset),d=Math.max(b.startOffset,b.endOffset),f=d-c,e=this.objTree.mapping[b.groupId].strGroup,e.operand.splice(c,f,a),b.startOffset+=1,b.endOffset=b.startOffset)},replaceTree:function(a){var b=this.record.cursor,c=this.objTree.mapping[b.groupId].objGroup.node,d=this.kfEditor.requestService("position.get.parent.info",c),e=this.objTree.mapping[d.group.id].strGroup;e.operand[d.index]=a,b.groupId=d.group.id,b.startOffset=d.index+1,b.endOffset=d.index+1}});return g}},b[29]={value:function(){return{cursorCharacter:"\uf155",rootPlaceholder:{color:"#666",content:"\u5728\u6b64\u5904\u952e\u5165\u516c\u5f0f",fontsize:16},scrollbar:{padding:5,step:150}}}},b[30]={value:function(){return{"\\pm":{x:5,y:0},"\\infty":{x:42,y:0},"=":{x:79,y:0},"\\sim":{x:116,y:0},"\\times":{x:153,y:0},"\\div":{x:190,y:0},"!":{x:227,y:0},"<":{x:264,y:0},"\\ll":{x:301,y:0},">":{x:338,y:0},"\\gg":{x:375,y:0},"\\leq":{x:412,y:0},"\\geq":{x:449,y:0},"\\mp":{x:486,y:0},"\\cong":{x:523,y:0},"\\equiv":{x:560,y:0},"\\propto":{x:597,y:0},"\\approx":{x:634,y:0},"\\forall":{x:671,y:0},"\\partial":{x:708,y:0},"\\surd":{x:745,y:0},"\\cup":{x:782,y:0},"\\cap":{x:819,y:0},"\\varnothing":{x:856,y:0},"%":{x:893,y:0},"\\circ":{x:930,y:0},"\\exists":{x:967,y:0},"\\nexists":{x:1004,y:0},"\\in":{x:1041,y:0},"\\ni":{x:1078,y:0},"\\gets":{x:5,y:37},"\\uparrow":{x:42,y:37},"\\to":{x:79,y:37},"\\downarrow":{x:116,y:37},"\\leftrightarrow":{x:153,y:37},"\\therefore":{x:190,y:37},"\\because":{x:227,y:37},"+":{x:264,y:37},"-":{x:301,y:37},"\\neg":{x:338,y:37},"\\ast":{x:375,y:37},"\\cdot":{x:412,y:37},"\\vdots":{x:449,y:37},"\\ddots":{x:486,y:37},"\\aleph":{x:523,y:37},"\\beth":{x:560,y:37},"\\blacksquare":{x:597,y:37},"\\alpha":{x:634,y:37},"\\beta":{x:671,y:37},"\\gamma":{x:708,y:37},"\\delta":{x:745,y:37},"\\epsilon":{x:782,y:37},"\\zeta":{x:819,y:37},"\\eta":{x:856,y:37},"\\theta":{x:893,y:37},"\\iota":{x:930,y:37},"\\kappa":{x:967,y:37},"\\lambda":{x:1004,y:37},"\\mu":{x:1041,y:37},"\\nu":{x:1078,y:37},"\\xi":{x:5,y:74},"\\omicron":{x:42,y:74},"\\pi":{x:79,y:74},"\\rho":{x:116,y:74},"\\sigma":{x:153,y:74},"\\tau":{x:190,y:74},"\\upsilon":{x:227,y:74},"\\phi":{x:264,y:74},"\\chi":{x:301,y:74},"\\psi":{x:338,y:74},"\\omega":{x:375,y:74},"\\Alpha":{x:412,y:74},"\\Beta":{x:449,y:74},"\\Gamma":{x:486,y:74},"\\Delta":{x:523,y:74},"\\Epsilon":{x:560,y:74},"\\Zeta":{x:597,y:74},"\\Eta":{x:634,y:74},"\\Theta":{x:671,y:74},"\\Iota":{x:708,y:74},"\\Kappa":{x:745,y:74},"\\Lambda":{x:782,y:74},"\\Mu":{x:819,y:74},"\\Nu":{x:856,y:74},"\\Xi":{x:893,y:74},"\\Omicron":{x:930,y:74},"\\Pi":{x:967,y:74},"\\Rho":{x:1004,y:74},"\\Sigma":{x:1041,y:74},"\\Tau":{x:1078,y:74},"\\Upsilon":{x:5,y:111},"\\Phi":{x:42,y:111},"\\Chi":{x:79,y:111},"\\Psi":{x:116,y:111},"\\Omega":{x:153,y:111},"\\digamma":{x:190,y:111},"\\varepsilon":{x:227,y:111},"\\varkappa":{x:264,y:111},"\\varphi":{x:301,y:111},"\\varpi":{x:338,y:111},"\\varrho":{x:375,y:111},"\\varsigma":{x:412,y:111},"\\vartheta":{x:449,y:111},"\\neq":{x:486,y:111},"\\nless":{x:523,y:111},"\\ngtr":{x:560,y:111},"\\nleq":{x:597,y:111},"\\ngeq":{x:634,y:111},"\\nsim":{x:671,y:111},"\\lneqq":{x:708,y:111},"\\gneqq":{x:745,y:111},"\\nprec":{x:782,y:111},"\\nsucc":{x:819,y:111},"\\notin":{x:856,y:111},"\\nsubseteq":{x:893,y:111},"\\nsupseteq":{x:930,y:111},"\\subsetneq":{x:967,y:111},"\\supsetneq":{x:1004,y:111},"\\lnsim":{x:1041,y:111},"\\gnsim":{x:1078,y:111},"\\precnsim":{x:5,y:148},"\\succnsim":{x:42,y:148},"\\ntriangleleft":{x:79,y:148},"\\ntriangleright":{x:116,y:148},"\\ntrianglelefteq":{x:153,y:148},"\\ntrianglerighteq":{x:190,y:148},"\\nmid":{x:227,y:148},"\\nparallel":{x:264,y:148},"\\nvdash":{x:301,y:148},"\\nVdash":{x:338,y:148},"\\nvDash":{x:375,y:148},"\\nVDash":{x:412,y:148},"\\daleth":{x:449,y:148},"\\gimel":{x:486,y:148},"\\complement":{x:523,y:148},"\\ell":{x:560,y:148},"\\eth":{x:597,y:148},"\\hbar":{x:634,y:148},"\\hslash":{x:671,y:148},"\\mho":{x:708,y:148},"\\wp":{x:745,y:148},"\\circledS":{x:782,y:148},"\\Bbbk":{x:819,y:148},"\\Finv":{x:856,y:148},"\\Game":{x:893,y:148},"\\Im":{x:930,y:148},"\\Re":{x:967,y:148},"\\updownarrow":{x:1004,y:148},"\\Leftarrow":{x:1041,y:148},"\\Rightarrow":{x:1078,y:148},"\\Uparrow":{x:5,y:185},"\\Downarrow":{x:42,y:185},"\\Leftrightarrow":{x:79,y:185},"\\Updownarrow":{x:116,y:185},"\\longleftarrow":{x:153,y:185},"\\longrightarrow":{x:190,y:185},"\\longleftrightarrow":{x:227,y:185},"\\Longleftarrow":{x:264,y:185},"\\Longrightarrow":{x:301,y:185},"\\Longleftrightarrow":{x:338,y:185},"\\nearrow":{x:375,y:185},"\\nwarrow":{x:412,y:185},"\\searrow":{x:449,y:185},"\\swarrow":{x:486,y:185},"\\nleftarrow":{x:523,y:185},"\\nrightarrow":{x:560,y:185},"\\nLeftarrow":{x:597,y:185},"\\nRightarrow":{x:634,y:185},"\\nLeftrightarrow":{x:671,y:185},"\\leftharpoonup":{x:708,y:185},"\\leftharpoondown":{x:745,y:185},"\\rightharpoonup":{x:782,y:185},"\\rightharpoondown":{x:819,y:185},"\\upharpoonleft":{x:856,y:185},"\\upharpoonright":{x:893,y:185},"\\downharpoonleft":{x:930,y:185},"\\downharpoonright":{x:967,y:185},"\\leftrightharpoons":{x:1004,y:185},"\\rightleftharpoons":{x:1041,y:185},"\\leftleftarrows":{x:1078,y:185},"\\rightrightarrows":{x:5,y:222},"\\upuparrows":{x:42,y:222},"\\downdownarrows":{x:79,y:222},"\\leftrightarrows":{x:116,y:222},"\\rightleftarrows":{x:153,y:222},"\\looparrowleft":{x:190,y:222},"\\looparrowright":{x:227,y:222},"\\leftarrowtail":{x:264,y:222},"\\rightarrowtail":{x:301,y:222},"\\Lsh":{x:338,y:222},"\\Rsh":{x:375,y:222},"\\Lleftarrow":{x:412,y:222},"\\Rrightarrow":{x:449,y:222},"\\curvearrowleft":{x:486,y:222},"\\curvearrowright":{x:523,y:222},"\\circlearrowleft":{x:560,y:222},"\\circlearrowright":{x:597,y:222},"\\multimap":{x:634,y:222},"\\leftrightsquigarrow":{x:671,y:222},"\\twoheadleftarrow":{x:708,y:222},"\\twoheadrightarrow":{x:745,y:222},"\\rightsquigarrow":{x:782,y:222},"\\mathcal{A}":{x:819,y:222},"\\mathcal{B}":{x:856,y:222},"\\mathcal{C}":{x:893,y:222},"\\mathcal{D}":{x:930,y:222},"\\mathcal{E}":{x:967,y:222},"\\mathcal{F}":{x:1004,y:222},"\\mathcal{G}":{x:1041,y:222},"\\mathcal{H}":{x:1078,y:222},"\\mathcal{I}":{x:5,y:259},"\\mathcal{J}":{x:42,y:259},"\\mathcal{K}":{x:79,y:259},"\\mathcal{L}":{x:116,y:259},"\\mathcal{M}":{x:153,y:259},"\\mathcal{N}":{x:190,y:259},"\\mathcal{O}":{x:227,y:259},"\\mathcal{P}":{x:264,y:259},"\\mathcal{Q}":{x:301,y:259},"\\mathcal{R}":{x:338,y:259},"\\mathcal{S}":{x:375,y:259},"\\mathcal{T}":{x:412,y:259},"\\mathcal{U}":{x:449,y:259},"\\mathcal{V}":{x:486,y:259},"\\mathcal{W}":{x:523,y:259},"\\mathcal{X}":{x:560,y:259},"\\mathcal{Y}":{x:597,y:259},"\\mathcal{Z}":{x:634,y:259},"\\mathfrak{A}":{x:671,y:259},"\\mathfrak{B}":{x:708,y:259},"\\mathfrak{C}":{x:745,y:259},"\\mathfrak{D}":{x:782,y:259},"\\mathfrak{E}":{x:819,y:259},"\\mathfrak{F}":{x:856,y:259},"\\mathfrak{G}":{x:893,y:259},"\\mathfrak{H}":{x:930,y:259},"\\mathfrak{I}":{x:967,y:259},"\\mathfrak{J}":{x:1004,y:259},"\\mathfrak{K}":{x:1041,y:259},"\\mathfrak{L}":{x:1078,y:259},"\\mathfrak{M}":{x:5,y:296},"\\mathfrak{N}":{x:42,y:296},"\\mathfrak{O}":{x:79,y:296},"\\mathfrak{P}":{x:116,y:296},"\\mathfrak{Q}":{x:153,y:296},"\\mathfrak{R}":{x:190,y:296},"\\mathfrak{S}":{x:227,y:296},"\\mathfrak{T}":{x:264,y:296},"\\mathfrak{U}":{x:301,y:296},"\\mathfrak{V}":{x:338,y:296},"\\mathfrak{W}":{x:375,y:296},"\\mathfrak{X}":{x:412,y:296},"\\mathfrak{Y}":{x:449,y:296},"\\mathfrak{Z}":{x:486,y:296},"\\mathfrak{a}":{x:523,y:296},"\\mathfrak{b}":{x:560,y:296},"\\mathfrak{c}":{x:597,y:296},"\\mathfrak{d}":{x:634,y:296},"\\mathfrak{e}":{x:671,y:296},"\\mathfrak{f}":{x:708,y:296},"\\mathfrak{g}":{x:745,y:296},"\\mathfrak{h}":{x:782,y:296},"\\mathfrak{i}":{x:819,y:296},"\\mathfrak{j}":{x:856,y:296},"\\mathfrak{k}":{x:893,y:296},"\\mathfrak{l}":{x:930,y:296},"\\mathfrak{m}":{x:967,y:296},"\\mathfrak{n}":{x:1004,y:296},"\\mathfrak{o}":{x:1041,y:296},"\\mathfrak{p}":{x:1078,y:296},"\\mathfrak{q}":{x:5,y:333},"\\mathfrak{r}":{x:42,y:333},"\\mathfrak{s}":{x:79,y:333},"\\mathfrak{t}":{x:116,y:333},"\\mathfrak{u}":{x:153,y:333},"\\mathfrak{v}":{x:190,y:333},"\\mathfrak{w}":{x:227,y:333},"\\mathfrak{x}":{x:264,y:333},"\\mathfrak{y}":{x:301,y:333},"\\mathfrak{z}":{x:338,y:333},"\\mathbb{A}":{x:375,y:333},"\\mathbb{B}":{x:412,y:333},"\\mathbb{C}":{x:449,y:333},"\\mathbb{D}":{x:486,y:333},"\\mathbb{E}":{x:523,y:333},"\\mathbb{F}":{x:560,y:333},"\\mathbb{G}":{x:597,y:333},"\\mathbb{H}":{x:634,y:333},"\\mathbb{I}":{x:671,y:333},"\\mathbb{J}":{x:708,y:333},"\\mathbb{K}":{x:745,y:333},"\\mathbb{L}":{x:782,y:333},"\\mathbb{M}":{x:819,y:333},"\\mathbb{N}":{x:856,y:333},"\\mathbb{O}":{x:893,y:333},"\\mathbb{P}":{x:930,y:333},"\\mathbb{Q}":{x:967,y:333},"\\mathbb{R}":{x:1004,y:333},"\\mathbb{S}":{x:1041,y:333},"\\mathbb{T}":{x:1078,y:333},"\\mathbb{U}":{x:5,y:370},"\\mathbb{V}":{x:42,y:370},"\\mathbb{W}":{x:79,y:370},"\\mathbb{X}":{x:116,y:370},"\\mathbb{Y}":{x:153,y:370},"\\mathbb{Z}":{x:190,y:370},"\\mathrm{A}":{x:227,y:370},"\\mathrm{B}":{x:264,y:370},"\\mathrm{C}":{x:301,y:370},"\\mathrm{D}":{x:338,y:370},"\\mathrm{E}":{x:375,y:370},"\\mathrm{F}":{x:412,y:370},"\\mathrm{G}":{x:449,y:370},"\\mathrm{H}":{x:486,y:370},"\\mathrm{I}":{x:523,y:370},"\\mathrm{J}":{x:560,y:370},"\\mathrm{K}":{x:597,y:370},"\\mathrm{L}":{x:634,y:370},"\\mathrm{M}":{x:671,y:370},"\\mathrm{N}":{x:708,y:370},"\\mathrm{O}":{x:745,y:370},"\\mathrm{P}":{x:782,y:370},"\\mathrm{Q}":{x:819,y:370},"\\mathrm{R}":{x:856,y:370},"\\mathrm{S}":{x:893,y:370},"\\mathrm{T}":{x:930,y:370},"\\mathrm{U}":{x:967,y:370},"\\mathrm{V}":{x:1004,y:370},"\\mathrm{W}":{x:1041,y:370},"\\mathrm{X}":{x:1078,y:370},"\\mathrm{Y}":{x:5,y:407},"\\mathrm{Z}":{x:42,y:407},"\\mathrm{a}":{x:79,y:407},"\\mathrm{b}":{x:116,y:407},"\\mathrm{c}":{x:153,y:407},"\\mathrm{d}":{x:190,y:407},"\\mathrm{e}":{x:227,y:407},"\\mathrm{f}":{x:264,y:407},"\\mathrm{g}":{x:301,y:407},"\\mathrm{h}":{x:338,y:407},"\\mathrm{i}":{x:375,y:407},"\\mathrm{j}":{x:412,y:407},"\\mathrm{k}":{x:449,y:407},"\\mathrm{l}":{x:486,y:407},"\\mathrm{m}":{x:523,y:407},"\\mathrm{n}":{x:560,y:407},"\\mathrm{o}":{x:597,y:407},"\\mathrm{p}":{x:634,y:407},"\\mathrm{q}":{x:671,y:407},"\\mathrm{r}":{x:708,y:407},"\\mathrm{s}":{x:745,y:407},"\\mathrm{t}":{x:782,y:407},"\\mathrm{u}":{x:819,y:407},"\\mathrm{v}":{x:856,y:407},"\\mathrm{w}":{x:893,y:407},"\\mathrm{x}":{x:930,y:407},"\\mathrm{y}":{x:967,y:407},"\\mathrm{z}":{x:1004,y:407}}}},b[31]={value:function(){var a=b.r(4),c=b.r(20),d={min:1,max:2},e=c.createClass("ScrollZoomController",{constructor:function(b,c,e,f){this.kfEditor=c,this.target=e,this.zoom=1,this.step=.05,this.options=a.extend({},d,f),this.initEvent()},initEvent:function(){var b=this.kfEditor,c=this,d=this.options.min,e=this.options.max,f=this.step;a.addEvent(this.target,"mousewheel",function(a){a.preventDefault(),a.wheelDelta<0?c.zoom-=c.zoom*f:c.zoom+=c.zoom*f,c.zoom=Math.max(c.zoom,d),c.zoom=Math.min(c.zoom,e),b.requestService("render.set.canvas.zoom",c.zoom)})}});return e}},b[32]={value:function(){return{VIEW_STATE:{NO_OVERFLOW:0,OVERFLOW:1},scrollbar:{step:50,thumbMinSize:50}}}},b[33]={value:function(){return{"x=\\frac {-b\\pm\\sqrt {b^2-4ac}}{2a}":{pos:{x:0,y:0},size:{width:310,height:73}},"{\\placeholder/\\placeholder}":{pos:{x:315,y:0},size:{width:56,height:75}},"\\frac \\placeholder\\placeholder":{pos:{x:376,y:0},size:{width:56,height:75}},"a^2+b^2=c^2":{pos:{x:437,y:0},size:{width:310,height:73}},"{\\left(x+a\\right)}^2=\\sum^n_{k=0}{\\left(^n_k\\right)x^ka^{n-k}}":{pos:{x:752,y:0},size:{width:310,height:73}},"\\frac {dy}{dx}":{pos:{x:1067,y:0},size:{width:56,height:75}},"\\frac {\\Delta y}{\\Delta x}":{pos:{x:1128,y:0},size:{width:56,height:75}},"\\frac {\\delta y}{\\delta x}":{pos:{x:1189,y:0},size:{width:56,height:75}},"\\frac \\pi 2":{pos:{x:1250,y:0},size:{width:56,height:75}},"\\placeholder^\\placeholder":{pos:{x:1311,y:0},size:{width:56,height:75}},"\\placeholder^\\placeholder_\\placeholder":{pos:{x:1372,y:0},size:{width:56,height:75}},"\\placeholder_\\placeholder":{pos:{x:1433,y:0},size:{width:56,height:75}},"{^\\placeholder_\\placeholder\\placeholder}":{pos:{x:1494,y:0},size:{width:56,height:75}},"e^{-i\\omega t}":{pos:{x:1555,y:0},size:{width:56,height:75}},"x^2":{pos:{x:1616,y:0},size:{width:56,height:75}},"{}^n_1Y":{pos:{x:1677,y:0},size:{width:56,height:75}},"\\sqrt \\placeholder":{pos:{x:1738,y:0},size:{width:56,height:75}},"\\sqrt [\\placeholder] \\placeholder":{pos:{x:1799,y:0},size:{width:56,height:75}},"\\sqrt [2] \\placeholder":{pos:{x:1860,y:0},size:{width:56,height:75}},"\\sqrt [3] \\placeholder":{pos:{x:1921,y:0},size:{width:56,height:75}},"\\frac {-b\\pm\\sqrt{b^2-4ac}}{2a}":{pos:{x:1982,y:0},size:{width:137,height:75}},"\\sqrt {a^2+b^2}":{pos:{x:2124,y:0},size:{width:137,height:75}},"\\int \\placeholder":{pos:{x:2266,y:0},size:{width:56,height:75}},"\\int^\\placeholder_\\placeholder\\placeholder":{pos:{x:2327,y:0},size:{width:56,height:75}},"\\iint\\placeholder":{pos:{x:2388,y:0},size:{width:56,height:75}},"\\iint^\\placeholder_\\placeholder\\placeholder":{pos:{x:2449,y:0},size:{width:56,height:75}},"\\iiint\\placeholder":{pos:{x:2510,y:0},size:{width:56,height:75}},"\\iiint^\\placeholder_\\placeholder\\placeholder":{pos:{x:2571,y:0},size:{width:56,height:75}},"\\sum\\placeholder":{pos:{x:2632,y:0},size:{width:56,height:75}},"\\sum^\\placeholder_\\placeholder\\placeholder":{pos:{x:2693,y:0},size:{width:56,height:75}},"\\sum_\\placeholder\\placeholder":{pos:{x:2754,y:0},size:{width:56,height:75}},"\\left(\\placeholder\\right)":{pos:{x:2815,y:0},size:{width:56,height:75}},"\\left[\\placeholder\\right]":{pos:{x:2876,y:0},size:{width:56,height:75}},"\\left\\{\\placeholder\\right\\}":{pos:{x:2937,y:0},size:{width:56,height:75}},"\\left|\\placeholder\\right|":{pos:{x:2998,y:0},size:{width:56,height:75}},"\\sin\\placeholder":{pos:{x:3059,y:0},size:{width:56,height:75}},"\\cos\\placeholder":{pos:{x:3120,y:0},size:{width:56,height:75}},"\\tan\\placeholder":{pos:{x:3181,y:0},size:{width:56,height:75}},"\\csc\\placeholder":{pos:{x:3242,y:0},size:{width:56,height:75}},"\\sec\\placeholder":{pos:{x:3303,y:0},size:{width:56,height:75}},"\\cot\\placeholder":{pos:{x:3364,y:0},size:{width:56,height:75}},"\\sin\\theta":{pos:{x:3425,y:0},size:{width:56,height:75}},"\\cos{2x}":{pos:{x:3486,y:0},size:{width:56,height:75}},"\\tan\\theta=\\frac {\\sin\\theta}{\\cos\\theta}":{pos:{x:3547,y:0},size:{width:137,height:75}}}}},b[34]={value:function(){function a(a){var b=[],c=a.path,d=a.values;return e.Utils.each(d,function(a){var d=a,e=a;"string"!=typeof a?(d=a.img,e=a.key):e="\\"+a,b.push({item:{show:""+c+d.toLowerCase()+".png",val:e}})}),b}var c=b.r(41),d=b.r(40),e=b.r(20),f=[{type:c.DRAPDOWN_BOX,options:{button:{label:"\u9884\u8bbe
                ",className:"yushe-btn",icon:"assets/images/toolbar/button/fx.png",iconSize:{w:40}},box:{width:367,group:[{title:"\u9884\u8bbe\u516c\u5f0f",items:[{title:"\u9884\u8bbe\u516c\u5f0f",content:[{label:"\u4e8c\u6b21\u516c\u5f0f",item:{show:"assets/images/toolbar/ys/1.png",val:"x=\\frac {-b\\pm\\sqrt {b^2-4ac}}{2a}"}},{label:"\u4e8c\u9879\u5f0f\u5b9a\u7406",item:{show:"assets/images/toolbar/ys/2.png",val:"{\\left(x+a\\right)}^2=\\sum^n_{k=0}{\\left(^n_k\\right)x^ka^{n-k}}"}},{label:"\u52fe\u80a1\u5b9a\u7406",item:{show:"assets/images/toolbar/ys/3.png",val:"a^2+b^2=c^2"}}]}]}]}}},{type:c.DELIMITER},{type:c.AREA,options:{box:{fixOffset:!0,width:527,type:d.OVERLAP,group:[{title:"\u57fa\u7840\u6570\u5b66",items:[]},{title:"\u5e0c\u814a\u5b57\u6bcd",items:[]},{title:"\u6c42\u53cd\u5173\u7cfb\u8fd0\u7b97\u7b26",items:[]},{title:"\u5b57\u6bcd\u7c7b\u7b26\u53f7",items:[]},{title:"\u7bad\u5934",items:[]},{title:"\u624b\u5199\u4f53",items:[]}]}}},{type:c.DELIMITER},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u5206\u6570
                ",icon:"assets/images/toolbar/button/frac.png"},box:{width:332,group:[{title:"\u5206\u6570",items:[{title:"\u5206\u6570",content:[{item:{show:"assets/images/toolbar/frac/1.png",val:"\\frac \\placeholder\\placeholder"}},{item:{show:"assets/images/toolbar/frac/2.png",val:"{\\placeholder/\\placeholder}"}}]},{title:"\u5e38\u7528\u5206\u6570",content:[{item:{show:"assets/images/toolbar/frac/c1.png",val:"\\frac {dy}{dx}"}},{item:{show:"assets/images/toolbar/frac/c2.png",val:"\\frac {\\Delta y}{\\Delta x}"}},{item:{show:"assets/images/toolbar/frac/c4.png",val:"\\frac {\\delta y}{\\delta x}"}},{item:{show:"assets/images/toolbar/frac/c5.png",val:"\\frac \\pi 2"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u4e0a\u4e0b\u6807
                ",icon:"assets/images/toolbar/button/script.png"},box:{width:332,group:[{title:"\u4e0a\u6807\u548c\u4e0b\u6807",items:[{title:"\u4e0a\u6807\u548c\u4e0b\u6807",content:[{item:{show:"assets/images/toolbar/script/1.png",val:"\\placeholder^\\placeholder"}},{item:{show:"assets/images/toolbar/script/2.png",val:"\\placeholder_\\placeholder"}},{item:{show:"assets/images/toolbar/script/3.png",val:"\\placeholder^\\placeholder_\\placeholder"}},{item:{show:"assets/images/toolbar/script/4.png",val:"{^\\placeholder_\\placeholder\\placeholder}"}}]},{title:"\u5e38\u7528\u7684\u4e0a\u6807\u548c\u4e0b\u6807",content:[{item:{show:"assets/images/toolbar/script/c1.png",val:"e^{-i\\omega t}"}},{item:{show:"assets/images/toolbar/script/c2.png",val:"x^2"}},{item:{show:"assets/images/toolbar/script/c3.png",val:"{}^n_1Y"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u6839\u5f0f
                ",icon:"assets/images/toolbar/button/sqrt.png"},box:{width:342,group:[{title:"\u6839\u5f0f",items:[{title:"\u6839\u5f0f",content:[{item:{show:"assets/images/toolbar/sqrt/1.png",val:"\\sqrt \\placeholder"}},{item:{show:"assets/images/toolbar/sqrt/2.png",val:"\\sqrt [\\placeholder] \\placeholder"}},{item:{show:"assets/images/toolbar/sqrt/3.png",val:"\\sqrt [2] \\placeholder"}},{item:{show:"assets/images/toolbar/sqrt/4.png",val:"\\sqrt [3] \\placeholder"}}]},{title:"\u5e38\u7528\u6839\u5f0f",content:[{item:{show:"assets/images/toolbar/sqrt/c1.png",val:"\\frac {-b\\pm\\sqrt{b^2-4ac}}{2a}"}},{item:{show:"assets/images/toolbar/sqrt/c2.png",val:"\\sqrt {a^2+b^2}"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u79ef\u5206
                ",icon:"assets/images/toolbar/button/int.png"},box:{width:332,group:[{title:"\u79ef\u5206",items:[{title:"\u79ef\u5206",content:[{item:{show:"assets/images/toolbar/int/1.png",val:"\\int \\placeholder"}},{item:{show:"assets/images/toolbar/int/2.png",val:"\\int^\\placeholder_\\placeholder\\placeholder"}},{item:{show:"assets/images/toolbar/int/3.png",val:"\\iint\\placeholder"}},{item:{show:"assets/images/toolbar/int/4.png",val:"\\iint^\\placeholder_\\placeholder\\placeholder"}},{item:{show:"assets/images/toolbar/int/5.png",val:"\\iiint\\placeholder"}},{item:{show:"assets/images/toolbar/int/6.png",val:"\\iiint^\\placeholder_\\placeholder\\placeholder"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u5927\u578b
                \u8fd0\u7b97\u7b26",icon:"assets/images/toolbar/button/sum.png"},box:{width:332,group:[{title:"\u6c42\u548c",items:[{title:"\u6c42\u548c",content:[{item:{show:"assets/images/toolbar/large/1.png",val:"\\sum\\placeholder"}},{item:{show:"assets/images/toolbar/large/2.png",val:"\\sum^\\placeholder_\\placeholder\\placeholder"}},{item:{show:"assets/images/toolbar/large/3.png",val:"\\sum_\\placeholder\\placeholder"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u62ec\u53f7
                ",icon:"assets/images/toolbar/button/brackets.png"},box:{width:332,group:[{title:"\u65b9\u62ec\u53f7",items:[{title:"\u65b9\u62ec\u53f7",content:[{item:{show:"assets/images/toolbar/brackets/1.png",val:"\\left(\\placeholder\\right)"}},{item:{show:"assets/images/toolbar/brackets/2.png",val:"\\left[\\placeholder\\right]"}},{item:{show:"assets/images/toolbar/brackets/3.png",val:"\\left\\{\\placeholder\\right\\}"}},{item:{show:"assets/images/toolbar/brackets/4.png",val:"\\left|\\placeholder\\right|"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u51fd\u6570
                ",icon:"assets/images/toolbar/button/sin.png"},box:{width:340,group:[{title:"\u51fd\u6570",items:[{title:"\u4e09\u89d2\u51fd\u6570",content:[{item:{show:"assets/images/toolbar/func/1.png",val:"\\sin\\placeholder"}},{item:{show:"assets/images/toolbar/func/2.png",val:"\\cos\\placeholder"}},{item:{show:"assets/images/toolbar/func/3.png",val:"\\tan\\placeholder"}},{item:{show:"assets/images/toolbar/func/4.png",val:"\\csc\\placeholder"}},{item:{show:"assets/images/toolbar/func/5.png",val:"\\sec\\placeholder"}},{item:{show:"assets/images/toolbar/func/6.png",val:"\\cot\\placeholder"}}]},{title:"\u5e38\u7528\u51fd\u6570",content:[{item:{show:"assets/images/toolbar/func/c1.png",val:"\\sin\\theta"}},{item:{show:"assets/images/toolbar/func/c2.png",val:"\\sin{2x}"}},{item:{show:"assets/images/toolbar/func/c3.png",val:"\\tan\\theta=\\frac {\\sin\\theta}{\\cos\\theta}"}}]}]}]}}}]; -return function(){var b=["pm","infty",{key:"=",img:"eq"},"sim","times","div",{key:"!",img:"tanhao"},{key:"<",img:"lt"},"ll",{key:">",img:"gt"},"gg","leq","geq","mp","cong","equiv","propto","approx","forall","partial","surd","cup","cap","varnothing",{key:"%",img:"baifenhao"},"circ","exists","nexists","in","ni","gets","uparrow","to","downarrow","leftrightarrow","therefore","because",{key:"+",img:"plus"},{key:"-",img:"minus"},"neg","ast","cdot","vdots","ddots","aleph","beth","blacksquare"],c=f[2].options.box.group[0].items;c.push({title:"\u57fa\u7840\u6570\u5b66",content:a({path:"assets/images/toolbar/char/math/",values:b})})}(),function(){var b=[{title:"\u5c0f\u5199",values:["alpha","beta","gamma","delta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","xi","omicron","pi","rho","sigma","tau","upsilon","phi","chi","psi","omega"]},{title:"\u5927\u5199",values:["Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega"]},{title:"\u53d8\u4f53",values:["digamma","varepsilon","varkappa","varphi","varpi","varrho","varsigma","vartheta"]}],c=f[2].options.box.group[1].items;c.push({title:b[0].title,content:a({path:"assets/images/toolbar/char/greek/lower/",values:b[0].values})}),c.push({title:b[1].title,content:a({path:"assets/images/toolbar/char/greek/upper/",values:b[1].values})}),c.push({title:b[2].title,content:a({path:"assets/images/toolbar/char/greek/misc/",values:b[2].values})})}(),function(){var b=[{title:"\u6c42\u53cd\u5173\u7cfb\u8fd0\u7b97\u7b26",values:["neq","nless","ngtr","nleq","ngeq","nsim","lneqq","gneqq","nprec","nsucc","notin","nsubseteq","nsupseteq","subsetneq","supsetneq","lnsim","gnsim","precnsim","succnsim","ntriangleleft","ntriangleright","ntrianglelefteq","ntrianglerighteq","nmid","nparallel","nvdash",{key:"\\nVdash",img:"nvdash-1"},{key:"\\nvDash",img:"nvdash-2"},{key:"\\nVDash",img:"nvdash-3"},"nexists"]}],c=f[2].options.box.group[2].items;c.push({title:b[0].title,content:a({path:"assets/images/toolbar/char/not/",values:b[0].values})})}(),function(){var b=["aleph","beth","daleth","gimel","complement","ell","eth","hbar","hslash","mho","partial","wp","circledS","Bbbk","Finv","Game","Im","Re"],c=f[2].options.box.group[3].items;c.push({title:"\u5b57\u6bcd\u7c7b\u7b26\u53f7",content:a({path:"assets/images/toolbar/alphabetic/",values:b})})}(),function(){var b=["gets","to","uparrow","downarrow","leftrightarrow","updownarrow",{key:"\\Leftarrow",img:"u-leftarrow"},{key:"\\Rightarrow",img:"u-rightarrow"},{key:"\\Uparrow",img:"u-uparrow"},{key:"\\Downarrow",img:"u-downarrow"},{key:"\\Leftrightarrow",img:"u-leftrightarrow"},{key:"\\Updownarrow",img:"u-updownarrow"},"longleftarrow","longrightarrow","longleftrightarrow",{key:"\\Longleftarrow",img:"u-longleftarrow"},{key:"\\Longrightarrow",img:"u-longrightarrow"},{key:"\\Longleftrightarrow",img:"u-longleftrightarrow"},"nearrow","nwarrow","searrow","swarrow","nleftarrow","nrightarrow",{key:"\\nLeftarrow",img:"u-nleftarrow"},{key:"\\nRightarrow",img:"u-nrightarrow"},{key:"\\nLeftrightarrow",img:"u-nleftrightarrow"},"leftharpoonup","leftharpoondown","rightharpoonup","rightharpoondown","upharpoonleft","upharpoonright","downharpoonleft","downharpoonright","leftrightharpoons","rightleftharpoons","leftleftarrows","rightrightarrows","upuparrows","downdownarrows","leftrightarrows","rightleftarrows","looparrowleft","looparrowright","leftarrowtail","rightarrowtail",{key:"\\Lsh",img:"u-lsh"},{key:"\\Rsh",img:"u-rsh"},{key:"\\Lleftarrow",img:"u-lleftarrow"},{key:"\\Rrightarrow",img:"u-rrightarrow"},"curvearrowleft","curvearrowright","circlearrowleft","circlearrowright","multimap","leftrightsquigarrow","twoheadleftarrow","twoheadrightarrow","rightsquigarrow"],c=f[2].options.box.group[4].items;c.push({title:"\u7bad\u5934",content:a({path:"assets/images/toolbar/arrow/",values:b})})}(),function(){var b=[{title:"\u624b\u5199\u4f53",values:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]},{title:"\u82b1\u4f53",values:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]},{title:"\u53cc\u7ebf",values:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]},{title:"\u7f57\u9a6c",values:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]}],c=f[2].options.box.group[5].items;e.Utils.each(b[0].values,function(a,c){b[0].values[c]={key:"\\mathcal{"+a+"}",img:a.toLowerCase()}}),e.Utils.each(b[1].values,function(a,c){b[1].values[c]={key:"\\mathfrak{"+a+"}",img:a.replace(/[A-Z]/,function(a){return"u"+a.toLowerCase()})}}),e.Utils.each(b[2].values,function(a,c){b[2].values[c]={key:"\\mathbb{"+a+"}",img:a.toLowerCase()}}),e.Utils.each(b[3].values,function(a,c){b[3].values[c]={key:"\\mathrm{"+a+"}",img:a.replace(/[A-Z]/,function(a){return"u"+a.toLowerCase()})}}),c.push({title:b[0].title,content:a({path:"assets/images/toolbar/char/cal/",values:b[0].values})}),c.push({title:b[1].title,content:a({path:"assets/images/toolbar/char/frak/",values:b[1].values})}),c.push({title:b[2].title,content:a({path:"assets/images/toolbar/char/bb/",values:b[2].values})}),c.push({title:b[3].title,content:a({path:"assets/images/toolbar/char/rm/",values:b[3].values})})}(),window.iconConfig=f,f}},b[35]={value:function(){function a(a,b){var c=[];return g.Utils.each(a,function(a){a.length>1&&(a="\\"+a),c.push({key:a,img:b,pos:e[a]})}),c}var c=b.r(41),d=b.r(40),e=b.r(30),f=b.r(33),g=b.r(20),h=[{type:c.DRAPDOWN_BOX,options:{button:{label:"\u9884\u8bbe
                ",className:"yushe-btn",icon:{src:"kityformula/assets/images/toolbar/btn.png",x:0,y:0},iconSize:{w:40}},box:{width:367,group:[{title:"\u9884\u8bbe\u516c\u5f0f",items:[{title:"\u9884\u8bbe\u516c\u5f0f",content:[{label:"\u4e8c\u6b21\u516c\u5f0f",item:{val:"x=\\frac {-b\\pm\\sqrt {b^2-4ac}}{2a}"}},{label:"\u4e8c\u9879\u5f0f\u5b9a\u7406",item:{val:"{\\left(x+a\\right)}^2=\\sum^n_{k=0}{\\left(^n_k\\right)x^ka^{n-k}}"}},{label:"\u52fe\u80a1\u5b9a\u7406",item:{val:"a^2+b^2=c^2"}}]}]}]}}},{type:c.DELIMITER},{type:c.AREA,options:{box:{fixOffset:!0,width:527,type:d.OVERLAP,group:[{title:"\u57fa\u7840\u6570\u5b66",items:[]},{title:"\u5e0c\u814a\u5b57\u6bcd",items:[]},{title:"\u6c42\u53cd\u5173\u7cfb\u8fd0\u7b97\u7b26",items:[]},{title:"\u5b57\u6bcd\u7c7b\u7b26\u53f7",items:[]},{title:"\u7bad\u5934",items:[]},{title:"\u624b\u5199\u4f53",items:[]}]}}},{type:c.DELIMITER},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u5206\u6570
                ",icon:{src:"kityformula/assets/images/toolbar/btn.png",x:45,y:0}},box:{width:332,group:[{title:"\u5206\u6570",items:[{title:"\u5206\u6570",content:[{item:{val:"\\frac \\placeholder\\placeholder"}},{item:{val:"{\\placeholder/\\placeholder}"}}]},{title:"\u5e38\u7528\u5206\u6570",content:[{item:{val:"\\frac {dy}{dx}"}},{item:{val:"\\frac {\\Delta y}{\\Delta x}"}},{item:{val:"\\frac {\\delta y}{\\delta x}"}},{item:{val:"\\frac \\pi 2"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u4e0a\u4e0b\u6807
                ",icon:{src:"kityformula/assets/images/toolbar/btn.png",x:82,y:0}},box:{width:332,group:[{title:"\u4e0a\u6807\u548c\u4e0b\u6807",items:[{title:"\u4e0a\u6807\u548c\u4e0b\u6807",content:[{item:{val:"\\placeholder^\\placeholder"}},{item:{val:"\\placeholder_\\placeholder"}},{item:{val:"\\placeholder^\\placeholder_\\placeholder"}},{item:{val:"{^\\placeholder_\\placeholder\\placeholder}"}}]},{title:"\u5e38\u7528\u7684\u4e0a\u6807\u548c\u4e0b\u6807",content:[{item:{val:"e^{-i\\omega t}"}},{item:{val:"x^2"}},{item:{val:"{}^n_1Y"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u6839\u5f0f
                ",icon:{src:"kityformula/assets/images/toolbar/btn.png",x:119,y:0}},box:{width:342,group:[{title:"\u6839\u5f0f",items:[{title:"\u6839\u5f0f",content:[{item:{val:"\\sqrt \\placeholder"}},{item:{val:"\\sqrt [\\placeholder] \\placeholder"}},{item:{val:"\\sqrt [2] \\placeholder"}},{item:{val:"\\sqrt [3] \\placeholder"}}]},{title:"\u5e38\u7528\u6839\u5f0f",content:[{item:{val:"\\frac {-b\\pm\\sqrt{b^2-4ac}}{2a}"}},{item:{val:"\\sqrt {a^2+b^2}"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u79ef\u5206
                ",icon:{src:"kityformula/assets/images/toolbar/btn.png",x:156,y:0}},box:{width:332,group:[{title:"\u79ef\u5206",items:[{title:"\u79ef\u5206",content:[{item:{val:"\\int \\placeholder"}},{item:{val:"\\int^\\placeholder_\\placeholder\\placeholder"}},{item:{val:"\\iint\\placeholder"}},{item:{val:"\\iint^\\placeholder_\\placeholder\\placeholder"}},{item:{val:"\\iiint\\placeholder"}},{item:{val:"\\iiint^\\placeholder_\\placeholder\\placeholder"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u5927\u578b
                \u8fd0\u7b97\u7b26",icon:{src:"kityformula/assets/images/toolbar/btn.png",x:193,y:0}},box:{width:332,group:[{title:"\u6c42\u548c",items:[{title:"\u6c42\u548c",content:[{item:{val:"\\sum\\placeholder"}},{item:{val:"\\sum^\\placeholder_\\placeholder\\placeholder"}},{item:{val:"\\sum_\\placeholder\\placeholder"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u62ec\u53f7
                ",icon:{src:"kityformula/assets/images/toolbar/btn.png",x:230,y:0}},box:{width:332,group:[{title:"\u65b9\u62ec\u53f7",items:[{title:"\u65b9\u62ec\u53f7",content:[{item:{val:"\\left(\\placeholder\\right)"}},{item:{val:"\\left[\\placeholder\\right]"}},{item:{val:"\\left\\{\\placeholder\\right\\}"}},{item:{val:"\\left|\\placeholder\\right|"}}]}]}]}}},{type:c.DRAPDOWN_BOX,options:{button:{label:"\u51fd\u6570
                ",icon:{src:"kityformula/assets/images/toolbar/btn.png",x:267,y:0}},box:{width:340,group:[{title:"\u51fd\u6570",items:[{title:"\u4e09\u89d2\u51fd\u6570",content:[{item:{val:"\\sin\\placeholder"}},{item:{val:"\\cos\\placeholder"}},{item:{val:"\\tan\\placeholder"}},{item:{val:"\\csc\\placeholder"}},{item:{val:"\\sec\\placeholder"}},{item:{val:"\\cot\\placeholder"}}]},{title:"\u5e38\u7528\u51fd\u6570",content:[{item:{val:"\\sin\\theta"}},{item:{val:"\\cos{2x}"}},{item:{val:"\\tan\\theta=\\frac {\\sin\\theta}{\\cos\\theta}"}}]}]}]}}}];return function(){var a=[],b="kityformula/assets/images/toolbar/other.png",d=[];g.Utils.each(h,function(b){b.type!==c.DELIMITER&&(b=b.options.box.group,a=a.concat(b))}),g.Utils.each(a,function(a){a=a.items;for(var b=0,c=a.length;c>b;b++)d=d.concat(a[b].content)}),g.Utils.each(d,function(a){var c=f[a.item.val];c&&(a.item.img=b,a.item.pos=c.pos,a.item.size=c.size)})}(),function(){var b=["pm","infty","=","sim","times","div","!","<","ll",">","gg","leq","geq","mp","cong","equiv","propto","approx","forall","partial","surd","cup","cap","varnothing","%","circ","exists","nexists","in","ni","gets","uparrow","to","downarrow","leftrightarrow","therefore","because","+","-","neg","ast","cdot","vdots","aleph","beth","blacksquare"],c=h[2].options.box.group[0].items;c.push({title:"\u57fa\u7840\u6570\u5b66",content:a(b,"kityformula/assets/images/toolbar/char.png")})}(),function(){var b=[{title:"\u5c0f\u5199",values:["alpha","beta","gamma","delta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","xi","omicron","pi","rho","sigma","tau","upsilon","phi","chi","psi","omega"]},{title:"\u5927\u5199",values:["Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega"]},{title:"\u53d8\u4f53",values:["digamma","varepsilon","varkappa","varphi","varpi","varrho","varsigma","vartheta"]}],c=h[2].options.box.group[1].items;c.push({title:b[0].title,content:a(b[0].values,"kityformula/assets/images/toolbar/char.png")}),c.push({title:b[1].title,content:a(b[1].values,"kityformula/assets/images/toolbar/char.png")}),c.push({title:b[2].title,content:a(b[2].values,"kityformula/assets/images/toolbar/char.png")})}(),function(){var b=[{title:"\u6c42\u53cd\u5173\u7cfb\u8fd0\u7b97\u7b26",values:["neq","nless","ngtr","nleq","ngeq","nsim","lneqq","gneqq","nprec","nsucc","notin","nsubseteq","nsupseteq","subsetneq","supsetneq","lnsim","gnsim","precnsim","succnsim","ntriangleleft","ntriangleright","ntrianglelefteq","ntrianglerighteq","nmid","nparallel","nvdash","nVdash","nvDash","nVDash","nexists"]}],c=h[2].options.box.group[2].items;c.push({title:b[0].title,content:a(b[0].values,"kityformula/assets/images/toolbar/char.png")})}(),function(){var b=["aleph","beth","daleth","gimel","complement","ell","eth","hbar","hslash","mho","partial","wp","circledS","Bbbk","Finv","Game","Im","Re"],c=h[2].options.box.group[3].items;c.push({title:"\u5b57\u6bcd\u7c7b\u7b26\u53f7",content:a(b,"kityformula/assets/images/toolbar/char.png")})}(),function(){var b=["gets","to","uparrow","downarrow","leftrightarrow","updownarrow","Leftarrow","Rightarrow","Uparrow","Downarrow","Leftrightarrow","Updownarrow","longleftarrow","longrightarrow","longleftrightarrow","Longleftarrow","Longrightarrow","Longleftrightarrow","nearrow","nwarrow","searrow","swarrow","nleftarrow","nrightarrow","nLeftarrow","nRightarrow","nLeftrightarrow","leftharpoonup","leftharpoondown","rightharpoonup","rightharpoondown","upharpoonleft","upharpoonright","downharpoonleft","downharpoonright","leftrightharpoons","rightleftharpoons","leftleftarrows","rightrightarrows","upuparrows","downdownarrows","leftrightarrows","rightleftarrows","looparrowleft","looparrowright","leftarrowtail","rightarrowtail","Lsh","Rsh","Lleftarrow","Rrightarrow","curvearrowleft","curvearrowright","circlearrowleft","circlearrowright","multimap","leftrightsquigarrow","twoheadleftarrow","twoheadrightarrow","rightsquigarrow"],c=h[2].options.box.group[4].items;c.push({title:"\u7bad\u5934",content:a(b,"kityformula/assets/images/toolbar/char.png")})}(),function(){var b=[{title:"\u624b\u5199\u4f53",values:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]},{title:"\u82b1\u4f53",values:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]},{title:"\u53cc\u7ebf",values:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]},{title:"\u7f57\u9a6c",values:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]}],c=h[2].options.box.group[5].items;g.Utils.each(b[0].values,function(a,c){b[0].values[c]="mathcal{"+a+"}"}),g.Utils.each(b[1].values,function(a,c){b[1].values[c]="mathfrak{"+a+"}"}),g.Utils.each(b[2].values,function(a,c){b[2].values[c]="mathbb{"+a+"}"}),g.Utils.each(b[3].values,function(a,c){b[3].values[c]="mathrm{"+a+"}"}),c.push({title:b[0].title,content:a(b[0].values,"kityformula/assets/images/toolbar/char.png")}),c.push({title:b[1].title,content:a(b[1].values,"kityformula/assets/images/toolbar/char.png")}),c.push({title:b[2].title,content:a(b[2].values,"kityformula/assets/images/toolbar/char.png")}),c.push({title:b[3].title,content:a(b[3].values,"kityformula/assets/images/toolbar/char.png")})}(),h}},b[36]={value:function(){function a(a,b,f){switch(a){case i.DRAPDOWN_BOX:return c(b,f);case i.DELIMITER:return d(b);case i.AREA:return e(b,f)}}function c(a,b){return new g.DrapdownBox(a,b)}function d(a){return new g.Delimiter(a)}function e(a,b){return new g.Area(a,b)}var f=b.r(20),g=b.r(48),h=b.r(47),i=b.r(41),j=f.createClass("Tollbar",{constructor:function(a,b,c){this.kfEditor=b,this.uiComponent=a,this.elementList=c,this.elements=[],this.initToolbarElements(),this.initServices(),this.initEvent()},initServices:function(){this.kfEditor.registerService("ui.toolbar.disable",this,{disableToolbar:this.disableToolbar}),this.kfEditor.registerService("ui.toolbar.enable",this,{enableToolbar:this.enableToolbar}),this.kfEditor.registerService("ui.toolbar.close",this,{closeToolbar:this.closeToolbar})},initEvent:function(){var a=this;h.on(this.uiComponent.toolbarContainer,"mousedown",function(a){a.preventDefault()}),h.on(this.uiComponent.toolbarContainer,"mousewheel",function(a){a.preventDefault()}),h.on(this.kfEditor.getContainer(),"mousedown",function(){a.notify("closeAll")}),h.subscribe("data.select",function(b){a.insertSource(b)})},insertSource:function(a){this.kfEditor.requestService("control.insert.string",a)},disableToolbar:function(){f.Utils.each(this.elements,function(a){a.disable&&a.disable()})},enableToolbar:function(){f.Utils.each(this.elements,function(a){a.enable&&a.enable()})},getContainer:function(){return this.kfEditor.requestService("ui.get.canvas.container")},closeToolbar:function(){this.closeElement()},notify:function(a){switch(a){case"closeAll":case"closeOther":return void this.closeElement(arguments[1])}},closeElement:function(a){f.Utils.each(this.elements,function(b){b!=a&&b.hide&&b.hide()})},initToolbarElements:function(){var b=this.elements,c=this.uiComponent.toolbarContainer.ownerDocument,d=this;f.Utils.each(this.elementList,function(e){var f=a(e.type,c,e.options);b.push(f),d.appendElement(f)})},appendElement:function(a){a.setToolbar(this),a.attachTo(this.uiComponent.toolbarContainer)}});return j}},b[37]={value:function(){var a=b.r(20),c="kf-editor-ui-",d=66,e=b.r(47),f=b.r(38),g=a.createClass("Area",{constructor:function(a,b){this.options=b,this.doc=a,this.toolbar=null,this.disabled=!0,this.panelIndex=0,this.maxPanelIndex=0,this.currentItemCount=0,this.lineMaxCount=9,this.element=this.createArea(),this.container=this.createContainer(),this.panel=this.createPanel(),this.buttonContainer=this.createButtonContainer(),this.button=this.createButton(),this.mountPoint=this.createMountPoint(),this.moveDownButton=this.createMoveDownButton(),this.moveUpButton=this.createMoveUpButton(),this.boxObject=this.createBox(),this.mergeElement(),this.mount(),this.setListener(),this.initEvent()},initEvent:function(){var a=this;e.on(this.button,"mousedown",function(b){b.preventDefault(),b.stopPropagation(),1!==b.which||a.disabled||(a.showMount(),a.toolbar.notify("closeOther",a))}),e.on(this.moveDownButton,"mousedown",function(b){b.preventDefault(),b.stopPropagation(),1!==b.which||a.disabled||(a.nextPanel(),a.toolbar.notify("closeOther",a))}),e.on(this.moveUpButton,"mousedown",function(b){b.preventDefault(),b.stopPropagation(),1!==b.which||a.disabled||(a.prevPanel(),a.toolbar.notify("closeOther",a))}),e.delegate(this.container,".kf-editor-ui-area-item","mousedown",function(b){b.preventDefault(),1!==b.which||a.disabled||e.publish("data.select",this.getAttribute("data-value"))}),this.boxObject.initEvent()},disable:function(){this.disabled=!0,this.boxObject.disable(),e.getClassList(this.element).remove(c+"enabled")},enable:function(){this.disabled=!1,this.boxObject.enable(),e.getClassList(this.element).add(c+"enabled")},setListener:function(){var a=this;this.boxObject.setSelectHandler(function(b){e.publish("data.select",b),a.hide()}),this.boxObject.setChangeHandler(function(){a.updateContent()})},createArea:function(){var a=e.ele(this.doc,"div",{className:c+"area"});return"width"in this.options&&(a.style.width=this.options.width+"px"),a},checkMaxPanelIndex:function(){this.maxPanelIndex=Math.ceil(this.currentItemCount/this.lineMaxCount/2)},updateContent:function(){var b=this.boxObject.getOverlapContent(),d=0,e=null,f=0,g=0,h=this.lineMaxCount,i=[];this.panel.innerHTML="",a.Utils.each(b,function(b){var j=b.content;a.Utils.each(j,function(a){f=Math.floor(d/h),g=d%h,d++,e="top: "+(33*f+5)+"px; left: "+(32*g+5)+"px;",i.push('
                ')})}),this.currentItemCount=d,this.panelIndex=0,this.panel.style.top=0,this.panel.innerHTML=i.join(""),this.checkMaxPanelIndex(),this.updatePanelButtonState()},mount:function(){this.boxObject.mountTo(this.mountPoint)},showMount:function(){this.mountPoint.style.display="block",this.boxObject.updateSize()},hideMount:function(){this.mountPoint.style.display="none"},hide:function(){this.hideMount(),this.boxObject.hide()},createButton:function(){return e.ele(this.doc,"div",{className:c+"area-button"})},createMoveDownButton:function(){return e.ele(this.doc,"div",{className:c+"movedown-button",content:""})},createMoveUpButton:function(){return e.ele(this.doc,"div",{className:c+"moveup-button",content:""})},createMountPoint:function(){return e.ele(this.doc,"div",{className:c+"area-mount"})},createBox:function(){return new f(this.doc,this.options.box)},createContainer:function(){return e.ele(this.doc,"div",{className:c+"area-container"})},createPanel:function(){return e.ele(this.doc,"div",{className:c+"area-panel"})},createButtonContainer:function(){return e.ele(this.doc,"div",{className:c+"area-button-container"})},mergeElement:function(){this.buttonContainer.appendChild(this.moveUpButton),this.buttonContainer.appendChild(this.moveDownButton),this.buttonContainer.appendChild(this.button),this.container.appendChild(this.panel),this.element.appendChild(this.container),this.element.appendChild(this.buttonContainer),this.element.appendChild(this.mountPoint)},disablePanelUp:function(){this.disabledUp=!0,e.getClassList(this.moveUpButton).add("kf-editor-ui-disabled")},enablePanelUp:function(){this.disabledUp=!1,e.getClassList(this.moveUpButton).remove("kf-editor-ui-disabled")},disablePanelDown:function(){this.disabledDown=!0,e.getClassList(this.moveDownButton).add("kf-editor-ui-disabled")},enablePanelDown:function(){this.disabledDown=!1,e.getClassList(this.moveDownButton).remove("kf-editor-ui-disabled")},updatePanelButtonState:function(){0===this.panelIndex?this.disablePanelUp():this.enablePanelUp(),this.panelIndex+1>=this.maxPanelIndex?this.disablePanelDown():this.enablePanelDown()},nextPanel:function(){this.disabledDown||this.panelIndex+1>=this.maxPanelIndex||(this.panelIndex++,this.panel.style.top=-this.panelIndex*d+"px",this.updatePanelButtonState())},prevPanel:function(){this.disabledUp||0!==this.panelIndex&&(this.panelIndex--,this.panel.style.top=-this.panelIndex*d+"px",this.updatePanelButtonState())},setToolbar:function(a){this.toolbar=a,this.boxObject.setToolbar(a)},attachTo:function(a){a.appendChild(this.element),this.updateContent(),this.updatePanelButtonState()}});return g}},b[38]={value:function(){function a(a,b,c){var d=[];return h.Utils.each(b,function(b){d.push(new q(c,a,b))}),d}function c(a){return j.ele(a,"div",{className:i+"overlap-container"})}function d(a,b){return new m(a,{className:"overlap-button",label:"",fixOffset:b.fixOffset})}function e(a,b){return new n(a,b)}function f(a){return a.getBoundingClientRect()}function g(a){var b="background: url( "+a.img+" ) no-repeat ";return b+=-a.pos.x+"px ",b+=-a.pos.y+"px;",b+=" width: "+a.size.width+"px;",b+=" height: "+a.size.height+"px;"}var h=b.r(20),i="kf-editor-ui-",j=b.r(47),k=b.r(40),l=b.r(42),m=b.r(39),n=b.r(45),o=20,p=h.createClass("Box",{constructor:function(a,b){this.options=b,this.toolbar=null,this.options.type=this.options.type||k.DETACHED,this.doc=a,this.itemPanels=null,this.overlapButtonObject=null,this.overlapIndex=-1,this.element=this.createBox(),this.groupContainer=this.createGroupContainer(),this.itemGroups=this.createItemGroup(),this.mergeElement()},createBox:function(){var a=j.ele(this.doc,"div",{className:i+"box"});return"width"in this.options&&(a.style.width=this.options.width+"px"),a},setToolbar:function(a){this.toolbar=a,this.overlapButtonObject&&this.overlapButtonObject.setToolbar(a)},updateSize:function(){var a=j.getRectBox(this.toolbar.getContainer()),b=30,c=j.getRectBox(this.element);if(this.options.type===k.DETACHED){if(c.bottom<=a.bottom)return void(this.element.scrollTop=0);this.element.style.height=c.height-(c.bottom-a.bottom+b)+"px"}else{var d=this.getCurrentItemPanel(),e=null;if(d.scrollTop=0,c.bottom<=a.bottom)return;e=f(d),d.style.height=a.bottom-e.top-b+"px"}},initEvent:function(){var a="."+i+"box-item",b=this;j.delegate(this.groupContainer,a,"mousedown",function(a){a.preventDefault(),1===a.which&&b.onselectHandler&&b.onselectHandler(this.getAttribute("data-value"))}),j.on(this.element,"mousedown",function(a){a.stopPropagation(),a.preventDefault()}),j.on(this.element,"mousewheel",function(a){a.preventDefault(),a.stopPropagation(),b.scroll(a.originalEvent.wheelDelta)})},getNode:function(){return this.element},setSelectHandler:function(a){this.onselectHandler=a},scroll:function(a){0>a?this.scrollDown():(this.scrollUp(),this.element.scrollTop-=20)},scrollDown:function(){this.options.type===k.DETACHED?this.element.scrollTop+=o:this.getCurrentItemPanel().scrollTop+=o},scrollUp:function(){this.options.type===k.DETACHED?this.element.scrollTop-=o:this.getCurrentItemPanel().scrollTop-=o},setChangeHandler:function(a){this.onchangeHandler=a},onchangeHandler:function(){},createGroupContainer:function(){return j.ele(this.doc,"div",{className:i+"box-container"})},getPositionInfo:function(){return j.getRectBox(this.element)},createItemGroup:function(){var a=this.createGroup();switch(this.options.type){case k.DETACHED:return a.items[0];case k.OVERLAP:return this.createOverlapGroup(a)}return null},enable:function(){this.overlapButtonObject&&this.overlapButtonObject.enable()},disable:function(){this.overlapButtonObject&&this.overlapButtonObject.disable()},hide:function(){this.overlapButtonObject&&this.overlapButtonObject.hideMount()},getOverlapContent:function(){return this.options.type!==k.OVERLAP?null:this.options.group[this.overlapIndex].items},createOverlapGroup:function(a){var b=a.title,f=this,g=c(this.doc),k=d(this.doc,{fixOffset:this.options.fixOffset}),l=e(this.doc,{width:150,items:b}),m=j.ele(this.doc,"div",{className:i+"wrap-group"});return this.overlapButtonObject=k,k.mount(l),k.initEvent(),l.initEvent(),h.Utils.each(a.items,function(b,c){var d=m.cloneNode(!1);h.Utils.each(b,function(a){d.appendChild(a)}),a.items[c]=d}),this.itemPanels=a.items,l.setSelectHandler(function(c,d){f.overlapIndex=c,k.setLabel(b[c]),k.hideMount(),a.items[d].style.display="none",a.items[c].style.display="block",c!==d&&f.updateSize(),f.onchangeHandler(c)}),g.appendChild(k.getNode()),h.Utils.each(a.items,function(a,b){b>0&&(a.style.display="none"),g.appendChild(a)}),l.select(0),[g]},getCurrentItemPanel:function(){return this.itemPanels[this.overlapIndex]},getGroupList:function(){var a=[];return h.Utils.each(this.options.group,function(b){a.push(b.title)}),{width:150,items:a}},createGroup:function(){var b=this.doc,c=[],d={title:[],items:[]},e=null,f=null,g=k.DETACHED===this.options.type?l.BIG:l.SMALL,m=null;return e=j.ele(this.doc,"div",{className:i+"box-group"}),m=e.cloneNode(!1),m.className=i+"box-group-item-container",h.Utils.each(this.options.group,function(k){d.title.push(k.title||""),c=[],h.Utils.each(k.items,function(d){e=e.cloneNode(!1),m=m.cloneNode(!1),f=j.ele(b,"div",{className:i+"box-group-title",content:d.title}),e.appendChild(f),e.appendChild(m),h.Utils.each(a(b,d.content,g),function(a){a.appendTo(m)}),c.push(e)}),d.items.push(c)}),d},mergeElement:function(){var a=this.groupContainer;this.element.appendChild(a),h.Utils.each(this.itemGroups,function(b){a.appendChild(b)})},mountTo:function(a){a.appendChild(this.element)},appendTo:function(a){a.appendChild(this.element)}}),q=h.createClass("BoxItem",{constructor:function(a,b,c){this.type=a,this.doc=b,this.options=c,this.element=this.createItem(),this.labelNode=this.createLabel(),this.contentNode=this.createContent(),this.mergeElement()},getNode:function(){return this.element},createItem:function(){var a=j.ele(this.doc,"div",{className:i+"box-item"});return a},createLabel:function(){var a=null;if("label"in this.options)return a=j.ele(this.doc,"div",{className:i+"box-item-label",content:this.options.label})},getContent:function(){},createContent:function(){switch(this.type){case l.BIG:return this.createBigContent();case l.SMALL:return this.createSmallContent()}},createBigContent:function(){var a=this.doc,b=j.ele(a,"div",{className:i+"box-item-content"}),c=i+"box-item-val",d=this.options.item,e=null,f=g(d);return e=j.ele(a,"div",{className:c}),e.innerHTML='
                ',this.element.setAttribute("data-value",d.val),b.appendChild(e),b},createSmallContent:function(){var a=this.doc,b=j.ele(a,"div",{className:i+"box-item-content"}),c=i+"box-item-val",d=this.options,e=null;return e=j.ele(a,"div",{className:c}),e.style.background="url( "+d.img+" )",e.style.backgroundPosition=-d.pos.x+"px "+-d.pos.y+"px",this.element.setAttribute("data-value",d.key),b.appendChild(e),b},mergeElement:function(){this.labelNode&&this.element.appendChild(this.labelNode),this.element.appendChild(this.contentNode)},appendTo:function(a){a.appendChild(this.element)}});return p}},b[39]={value:function(){function a(a){var b="url( "+a.src+" ) no-repeat ";return b+=-a.x+"px ",b+=-a.y+"px"}var c=b.r(20),d="kf-editor-ui-",e=7,f={iconSize:{w:32,h:32}},g=b.r(47),h=c.createClass("Button",{constructor:function(a,b){this.options=c.Utils.extend({},f,b),this.eventState=!1,this.toolbar=null,this.displayState=!1,this.fixOffset=b.fixOffset||!1,this.doc=a,this.element=this.createButton(),this.disabled=!0,this.mountElement=null,this.icon=this.createIcon(),this.label=this.createLabel(),this.sign=this.createSign(),this.mountPoint=this.createMountPoint(),this.mergeElement()},initEvent:function(){var a=this;this.eventState||(this.eventState=!0,g.on(this.element,"mousedown",function(b){b.preventDefault(),b.stopPropagation(),1===b.which&&(a.disabled||(a.toggleSelect(),a.toggleMountElement()))}))},setToolbar:function(a){this.toolbar=a},toggleMountElement:function(){this.displayState?this.hideMount():this.showMount()},setLabel:function(a){var b="";this.sign&&(b='
                '),this.label.innerHTML=a+b},toggleSelect:function(){g.getClassList(this.element).toggle(d+"button-in")},unselect:function(){g.getClassList(this.element).remove(d+"button-in")},select:function(){g.getClassList(this.element).add(d+"button-in")},show:function(){this.select(),this.showMount()},hide:function(){this.unselect(),this.hideMount()},showMount:function(){if(this.displayState=!0,this.mountPoint.style.display="block",this.fixOffset){var a=this.element.getBoundingClientRect();this.mountElement.setOffset(a.left+e,a.bottom)}var b=this.toolbar.getContainer(),c=null,d=g.getRectBox(b),f=this.mountElement.getPositionInfo();f.right>d.right&&(c=g.getRectBox(this.element),this.mountPoint.style.left=c.right-f.right-1+"px"),this.mountElement.updateSize&&this.mountElement.updateSize()},hideMount:function(){this.displayState=!1,this.mountPoint.style.display="none"},getNode:function(){return this.element},mount:function(a){this.mountElement=a,a.mountTo(this.mountPoint)},createButton:function(){var a=g.ele(this.doc,"div",{className:d+"button"});return this.options.className&&(a.className+=" "+d+this.options.className),a},createIcon:function(){if(!this.options.icon)return null;var b=g.ele(this.doc,"div",{className:d+"button-icon"});return"string"==typeof this.options.icon?b.style.backgroundImage="url("+this.options.icon+") no-repeat":b.style.background=a(this.options.icon),this.options.iconSize.w&&(b.style.width=this.options.iconSize.w+"px"),this.options.iconSize.h&&(b.style.height=this.options.iconSize.h+"px"),b},createLabel:function(){var a=g.ele(this.doc,"div",{className:d+"button-label",content:this.options.label});return a},createSign:function(){return this.options.sign===!1?null:g.ele(this.doc,"div",{className:d+"button-sign"})},createMountPoint:function(){return g.ele(this.doc,"div",{className:d+"button-mount-point"})},disable:function(){this.disabled=!0,g.getClassList(this.element).remove(d+"enabled") -},enable:function(){this.disabled=!1,g.getClassList(this.element).add(d+"enabled")},mergeElement:function(){this.icon&&this.element.appendChild(this.icon),this.element.appendChild(this.label),this.sign&&this.label.appendChild(this.sign),this.element.appendChild(this.mountPoint)}});return h}},b[40]={value:function(){return{DETACHED:1,OVERLAP:2}}},b[41]={value:function(){return{DRAPDOWN_BOX:1,AREA:2,DELIMITER:3}}},b[42]={value:function(){return{BIG:1,SMALL:2}}},b[43]={value:function(){var a=b.r(20),c="kf-editor-ui-",d=b.r(47),e=a.createClass("Delimiter",{constructor:function(a){this.doc=a,this.element=this.createDilimiter()},setToolbar:function(){},createDilimiter:function(){var a=d.ele(this.doc,"div",{className:c+"delimiter"});return a.appendChild(d.ele(this.doc,"div",{className:c+"delimiter-line"})),a},attachTo:function(a){a.appendChild(this.element)}});return e}},b[44]={value:function(){var a=b.r(20),c=b.r(47),d=b.r(39),e=b.r(38),f=a.createClass("DrapdownBox",{constructor:function(a,b){this.options=b,this.toolbar=null,this.doc=a,this.buttonElement=this.createButton(),this.element=this.buttonElement.getNode(),this.boxElement=this.createBox(),this.buttonElement.mount(this.boxElement),this.initEvent()},initEvent:function(){var a=this;c.on(this.element,"mousedown",function(b){b.preventDefault(),b.stopPropagation(),a.toolbar.notify("closeOther",a)}),this.buttonElement.initEvent(),this.boxElement.initEvent(),this.boxElement.setSelectHandler(function(b){c.publish("data.select",b),a.buttonElement.hide()})},disable:function(){this.buttonElement.disable()},enable:function(){this.buttonElement.enable()},setToolbar:function(a){this.toolbar=a,this.buttonElement.setToolbar(a),this.boxElement.setToolbar(a)},createButton:function(){return new d(this.doc,this.options.button)},show:function(){this.buttonElement.show()},hide:function(){this.buttonElement.hide()},createBox:function(){return new e(this.doc,this.options.box)},attachTo:function(a){a.appendChild(this.element)}});return f}},b[45]={value:function(){var a=b.r(20),c="kf-editor-ui-",d=b.r(47),e=a.createClass("List",{constructor:function(a,b){this.options=b,this.doc=a,this.onselectHandler=null,this.currentSelect=-1,this.element=this.createBox(),this.itemGroups=this.createItems(),this.mergeElement()},onselectHandler:function(){},setSelectHandler:function(a){this.onselectHandler=a},createBox:function(){var a=d.ele(this.doc,"div",{className:c+"list"}),b=d.ele(this.doc,"div",{className:c+"list-bg"});return"width"in this.options&&(a.style.width=this.options.width+"px"),a.appendChild(b),a},select:function(a){var b=this.currentSelect;-1===b&&(b=a),this.unselect(b),this.currentSelect=a,d.getClassList(this.itemGroups.items[a]).add(c+"list-item-select"),this.onselectHandler(a,b)},unselect:function(a){d.getClassList(this.itemGroups.items[a]).remove(c+"list-item-select")},setOffset:function(a,b){this.element.style.left=a+"px",this.element.style.top=b+"px"},initEvent:function(){var a="."+c+"list-item",b=this;d.delegate(this.itemGroups.container,a,"mousedown",function(a){a.preventDefault(),1===a.which&&b.select(this.getAttribute("data-index"))}),d.on(this.element,"mousedown",function(a){a.stopPropagation(),a.preventDefault()})},getPositionInfo:function(){return d.getRectBox(this.element)},createItems:function(){var b=this.doc,e=null,f=null,g=null,h=[],i=null;return e=d.ele(this.doc,"div",{className:c+"list-item"}),i=e.cloneNode(!1),i.className=c+"list-item-container",a.Utils.each(this.options.items,function(a,j){f=e.cloneNode(!1),g=e.cloneNode(!1),g.className=c+"list-item-icon",f.appendChild(g),f.appendChild(d.ele(b,"text",a)),f.setAttribute("data-index",j),h.push(f),i.appendChild(f)}),{container:i,items:h}},mergeElement:function(){this.element.appendChild(this.itemGroups.container)},mountTo:function(a){a.appendChild(this.element)}});return e}},b[46]={value:function(){function a(a,b,c){var d=a.createElement(b),e='
                ';return d.className=r+c,"thumb"===c&&(c=r+c,d.innerHTML=e.replace("$1",c+"-left").replace("$2",c+"-right")),d}function c(a){return a.getBoundingClientRect()}function d(a){q.addEvent(a,"mousedown",function(a){a.preventDefault()})}function d(a){q.addEvent(a.container,"mousedown",function(a){a.preventDefault()})}function e(a){q.addEvent(a.widgets.track,"mousedown",function(b){h(this,a,b)})}function f(a){q.addEvent(a.widgets.leftButton,"mousedown",function(){j(a,-p.step)}),q.addEvent(a.widgets.rightButton,"mousedown",function(){j(a,p.step)})}function g(a){var b=!1,c=0,d=0,e=a.values.trackWidth;q.addEvent(a.widgets.thumb,"mousedown",function(e){e.preventDefault(),e.stopPropagation(),b=!0,c=e.clientX,d=a.thumbLocationX}),q.addEvent(a.container.ownerDocument,"mouseup",function(){b=!1,c=0,d=0}),q.addEvent(a.container.ownerDocument,"mousemove",function(f){if(b){var g=f.clientX-c,h=d+g,j=a.values.thumbWidth;0>h?h=0:h+j>e&&(h=e-j),i(a,h)}})}function h(a,b,d){var e=c(a),f=b.values,g=f.viewWidth/(f.contentWidth-f.viewWidth)*f.trackWidth,h=d.clientX-e.left;h>f.offset?f.offset+g>f.trackWidth?k(b,f.trackWidth):k(b,f.offset+g):f.offset-g<0?k(b,0):k(b,f.offset-g)}function i(a,b){var c=a.values,d=c.trackWidth-c.thumbWidth,e=Math.floor(b/d*c.trackWidth);a.updateOffset(e),a.thumbLocationX=b,a.widgets.thumb.style.left=b+"px"}function j(a,b){var c=a.leftOverflow+b;0>c?c=0:c>a.values.scrollWidth&&(c=a.values.scrollWidth),m(a,c)}function k(a,b){var c=a.values,d=b/c.trackWidth,e=c.trackWidth-c.thumbWidth,f=0;f=Math.floor(d*e),0>b&&(b=0,f=0),a.updateOffset(b),a.widgets.thumb.style.left=f+"px",a.thumbLocationX=f}function l(a,b){var c=a.values,d=0,e=0;d=b/(c.contentWidth-c.viewWidth),e=Math.floor(d*c.trackWidth),k(a,e)}function m(a,b){var c=a.values,d=b/(c.contentWidth-c.viewWidth);k(a,d*c.trackWidth)}var n=b.r(20),o=b.r(32).scrollbar,p=b.r(29).scrollbar,q=b.r(4),r="kf-editor-ui-";return n.createClass("Scrollbar",{constructor:function(a,b){this.uiComponent=a,this.kfEditor=b,this.widgets=null,this.container=this.uiComponent.scrollbarContainer,this.state=!1,this.values={offset:0,left:0,viewWidth:0,contentWidth:0,trackWidth:0,thumbWidth:0,scrollWidth:0},this.thumbLocationX=0,this.leftOverflow=0,this.rightOverflow=0,this.isExpand=!0,this.initWidget(),this.mountWidget(),this.initSize(),this.hide(),this.initServices(),this.initEvent(),this.updateHandler=function(){}},initWidget:function(){var b=this.container.ownerDocument;this.widgets={leftButton:a(b,"div","left-button"),rightButton:a(b,"div","right-button"),track:a(b,"div","track"),thumb:a(b,"div","thumb"),thumbBody:a(b,"div","thumb-body")}},initSize:function(){var a=c(this.widgets.leftButton).width,b=c(this.widgets.rightButton).width;this.values.viewWidth=c(this.container).width,this.values.trackWidth=this.values.viewWidth-a-b,this.widgets.track.style.width=this.values.trackWidth+"px"},initServices:function(){this.kfEditor.registerService("ui.show.scrollbar",this,{showScrollbar:this.show}),this.kfEditor.registerService("ui.hide.scrollbar",this,{hideScrollbar:this.hide}),this.kfEditor.registerService("ui.update.scrollbar",this,{updateScrollbar:this.update}),this.kfEditor.registerService("ui.set.scrollbar.update.handler",this,{setUpdateHandler:this.setUpdateHandler}),this.kfEditor.registerService("ui.relocation.scrollbar",this,{relocation:this.relocation})},initEvent:function(){d(this),e(this),g(this),f(this)},mountWidget:function(){var a=this.widgets,b=this.container;for(var c in a)a.hasOwnProperty(c)&&b.appendChild(a[c]);a.thumb.appendChild(a.thumbBody),a.track.appendChild(a.thumb)},show:function(){this.state=!0,this.container.style.display="block"},hide:function(){this.state=!1,this.container.style.display="none"},update:function(a){var b=this.values.trackWidth,c=0;return this.isExpand=a>this.values.contentWidth,this.values.contentWidth=a,this.values.scrollWidth=a-this.values.viewWidth,b>=a?void this.hide():(c=Math.max(Math.ceil(b*b/a),o.thumbMinSize),this.values.thumbWidth=c,this.widgets.thumb.style.width=c+"px",void(this.widgets.thumbBody.style.width=c-10+"px"))},setUpdateHandler:function(a){this.updateHandler=a},updateOffset:function(a){var b=this.values;b.offset=a,b.left=a/b.trackWidth,this.leftOverflow=b.left*(b.contentWidth-b.viewWidth),this.rightOverflow=b.contentWidth-b.viewWidth-this.leftOverflow,this.updateHandler(b.left,b.offset,b)},relocation:function(){var a=this.kfEditor.requestService("control.get.cursor.location"),b=p.padding,c=this.values.contentWidth,d=this.values.viewWidth,e=this.values.left*(c-d),f=0;a.xe+d?(a.x+=b,a.x>c&&(a.x=c),f=a.x-d,l(this,f)):this.isExpand?m(this,this.leftOverflow):m(this,c-d-this.rightOverflow)}})}},b[47]={value:function(){function a(a){this.node=a,this.classes=a.className.replace(/^\s+|\s+$/g,"").split(/\s+/)}var c=b.r(14),d=b.r(20),e={},f={ele:function(a,b,c){var d=null;return"text"===b?a.createTextNode(c):(d=a.createElement(b),c.className&&(d.className=c.className),c.content&&(d.innerHTML=c.content),d)},getRectBox:function(a){return a.getBoundingClientRect()},on:function(a,b,d){return c(a).on(b,d),this},delegate:function(a,b,d,e){return c(a).delegate(b,d,e),this},publish:function(a,b){var c=e[a];c&&(b=[].slice.call(arguments,1),d.Utils.each(c,function(a){a.apply(null,b)}))},subscribe:function(a,b){e[a]||(e[a]=[]),e[a].push(b)},getClassList:function(b){return b.classList||new a(b)}};return a.prototype={constructor:a,contains:function(a){return-1!==this.classes.indexOf(a)},add:function(a){return-1==this.classes.indexOf(a)&&this.classes.push(a),this._update(),this},remove:function(a){var b=this.classes.indexOf(a);return-1!==b&&(this.classes.splice(b,1),this._update()),this},toggle:function(a){var b=this.contains(a)?"remove":"add";return this[b](a)},_update:function(){this.node.className=this.classes.join(" ")}},f}},b[48]={value:function(){return{DrapdownBox:b.r(44),Delimiter:b.r(43),Area:b.r(37)}}},b[49]={value:function(){function a(a){return h.ele(a,"div",{className:"kf-editor-toolbar"})}function c(a){return h.ele(a,"div",{className:"kf-editor-inner-toolbar"})}function d(a){var b=a.createElement("div");return b.className="kf-editor-edit-area",b.style.width="80%",b.style.height="800px",b}function e(a){var b=a.createElement("div");return b.className="kf-editor-canvas-container",b}function f(a){var b=a.createElement("div");return b.className="kf-editor-edit-scrollbar",b}var g=b.r(20),h=b.r(47),i=b.r(4),j=b.r(32).VIEW_STATE,k=b.r(46),l=b.r(36),m=(b.r(31),b.r(35)),n=g.createClass("UIComponent",{constructor:function(b,g){var h=null;this.options=g,this.container=b.getContainer(),h=this.container.ownerDocument,this.components={},this.canvasRect=null,this.viewState=j.NO_OVERFLOW,this.kfEditor=b,this.toolbarWrap=a(h),this.toolbarContainer=c(h),this.editArea=d(h),this.canvasContainer=e(h),this.scrollbarContainer=f(h),this.toolbarWrap.appendChild(this.toolbarContainer),this.container.appendChild(this.toolbarWrap),this.editArea.appendChild(this.canvasContainer),this.container.appendChild(this.editArea),this.container.appendChild(this.scrollbarContainer),this.initComponents(),this.initServices(),this.initEvent(),this.updateContainerSize(this.container,this.toolbarWrap,this.editArea,this.canvasContainer),this.initScrollEvent()},initComponents:function(){this.components.toolbar=new l(this,this.kfEditor,m),this.components.scrollbar=new k(this,this.kfEditor)},updateContainerSize:function(a,b,c){var d=a.getBoundingClientRect(),e=b.getBoundingClientRect();c.style.width=d.width+"px",c.style.height=d.bottom-e.bottom+"px"},initServices:function(){this.kfEditor.registerService("ui.get.canvas.container",this,{getCanvasContainer:this.getCanvasContainer}),this.kfEditor.registerService("ui.update.canvas.view",this,{updateCanvasView:this.updateCanvasView}),this.kfEditor.registerService("ui.canvas.container.event",this,{on:this.addEvent,off:this.removeEvent,trigger:this.trigger,fire:this.trigger})},initEvent:function(){},initScrollEvent:function(){var a=this;this.kfEditor.requestService("ui.set.scrollbar.update.handler",function(b,c,d){c=Math.floor(b*(d.contentWidth-d.viewWidth)),a.kfEditor.requestService("render.set.canvas.offset",c)})},getCanvasContainer:function(){return this.canvasContainer},addEvent:function(a,b){i.addEvent(this.canvasContainer,a,b)},removeEvent:function(){},trigger:function(a){i.trigger(this.canvasContainer,a)},updateCanvasView:function(){var a=this.kfEditor.requestService("render.get.canvas"),b=a.getContentContainer(),c=null;null===this.canvasRect&&(this.canvasRect=this.canvasContainer.getBoundingClientRect()),c=b.getRenderBox("paper"),c.width>this.canvasRect.width?(this.viewState===j.NO_OVERFLOW&&(this.toggleViewState(),this.kfEditor.requestService("ui.show.scrollbar"),this.kfEditor.requestService("render.disable.relocation")),this.kfEditor.requestService("render.relocation"),this.kfEditor.requestService("ui.update.scrollbar",c.width),this.kfEditor.requestService("ui.relocation.scrollbar")):(this.viewState===j.OVERFLOW&&(this.toggleViewState(),this.kfEditor.requestService("ui.hide.scrollbar"),this.kfEditor.requestService("render.enable.relocation")),this.kfEditor.requestService("render.relocation"))},toggleViewState:function(){this.viewState=this.viewState===j.NO_OVERFLOW?j.OVERFLOW:j.NO_OVERFLOW}});return n}},b[50]={value:function(){var a=b.r(12),c=b.r(13);a.registerComponents("ui",b.r(49)),a.registerComponents("parser",b.r(21)),a.registerComponents("render",b.r(25)),a.registerComponents("position",b.r(23)),a.registerComponents("syntax",b.r(28)),a.registerComponents("control",b.r(5)),a.registerComponents("print",b.r(24)),kf.EditorFactory=c}};var c={"kf.start":50};!function(){try{a("kf.start")}catch(b){}}(this)}(); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/js/kitygraph.all.js b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/js/kitygraph.all.js deleted file mode 100644 index 153d6e18047ca1f68de81fd548a842f7ec15f580..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/js/kitygraph.all.js +++ /dev/null @@ -1,8572 +0,0 @@ -/*! - * ==================================================== - * kity - v2.0.5 - 2015-11-12 - * https://github.com/fex-team/kity - * GitHub: https://github.com/fex-team/kity.git - * Copyright (c) 2015 Baidu FEX; Licensed BSD - * ==================================================== - */ - -(function () { -var _p = { - r: function(index) { - if (_p[index].inited) { - return _p[index].value; - } - if (typeof _p[index].value === "function") { - var module = { - exports: {} - }, returnValue = _p[index].value(null, module.exports, module); - _p[index].inited = true; - _p[index].value = returnValue; - if (returnValue !== undefined) { - return returnValue; - } else { - for (var key in module.exports) { - if (module.exports.hasOwnProperty(key)) { - _p[index].inited = true; - _p[index].value = module.exports; - return module.exports; - } - } - } - } else { - _p[index].inited = true; - return _p[index].value; - } - } -}; - -//src/animate/animator.js -/** - * @fileOverview - * - * 提供基本的动画支持 - */ -_p[0] = { - value: function(require) { - function parseTime(str) { - var value = parseFloat(str, 10); - if (/ms/.test(str)) { - return value; - } - if (/s/.test(str)) { - return value * 1e3; - } - if (/min/.test(str)) { - return value * 60 * 1e3; - } - return value; - } - var Timeline = _p.r(8); - var easingTable = _p.r(1); - /** - * @class kity.Animator - * @catalog animate - * @description 表示一个动画启动器,可以作用于不同的对象进行动画 - */ - var Animator = _p.r(11).createClass("Animator", { - /** - * @constructor - * @for kity.Animator - * @catalog animate - * - * @grammar new kity.Animator(beginValue, finishValue, setter) - * @grammar new kity.Animator(option) - * - * @param {any} beginValue|opt.beginValue - * 动画的起始值,允许的类型有数字、数组、字面量、kity.Point、kity.Vector、kity.Box、kity.Matrix - * - * @param {any} finishValue|opt.beginValue - * 动画的结束值,类型应于起始值相同 - * - * @param {Function} setter|opt.setter - * 值的使用函数,接受三个参数: function(target, value, timeline) - * target {object} 动画的目标 - * value {any} 动画的当前值 - * timeline {kity.Timeline} 动画当前的时间线对象 - */ - constructor: function(beginValue, finishValue, setter) { - if (arguments.length == 1) { - var opt = arguments[0]; - this.beginValue = opt.beginValue; - this.finishValue = opt.finishValue; - this.setter = opt.setter; - } else { - this.beginValue = beginValue; - this.finishValue = finishValue; - this.setter = setter; - } - }, - /** - * @method start() - * @for kity.Animator - * @description 使用当前的动画器启动在指定目标上启动动画 - * - * @grammar start(target, duration, easing, delay, callback) => {kity.Timeline} - * @grammar start(target, option) => {kity.Timeline} - * - * @param {object} target - * 启动动画的目标 - * - * @param {Number|String} duration|option.duration - * [Optional] 动画的持续时间,如 300、"300ms"、"1.5min" - * - * @param {String|Function} easing|option.easing - * [Optional] 动画使用的缓动函数,如 "ease"、"linear"、"swing" - * - * @param {Number|String} delay|option.delay - * [Optional] 动画的播放延迟时间 - * - * @param {Function} callback|option.callback - * [Optional] 动画结束后的回调函数 - * - * @example - * - * ```js - * var turnRed = new kity.Animator( - * new kity.Color('yellow'), - * new kity.Color('red'), - * function(target, value) { - * target.fill(value); - * }); - * - * turnRed.start(rect, 300, 'ease', function() { - * console.log('I am red!'); - * }); - * ``` - */ - start: function(target, duration, easing, delay, callback) { - if (arguments.length === 2 && typeof duration == "object") { - easing = duration.easing; - delay = duration.delay; - callback = duration.callback; - duration = duration.duration; - } - if (arguments.length === 4 && typeof delay == "function") { - callback = delay; - delay = 0; - } - var timeline = this.create(target, duration, easing, callback); - delay = parseTime(delay); - if (delay > 0) { - setTimeout(function() { - timeline.play(); - }, delay); - } else { - timeline.play(); - } - return timeline; - }, - /** - * @method create() - * @for kity.Animator - * @description 使用当前的动画器为指定目标创建时间线 - * - * @grammar create(target, duration, easing, callback) => {kity.Timeline} - * - * @param {object} target 要创建的时间线的目标 - * @param {Number|String} duration 要创建的时间线的长度,如 300、"5s"、"0.5min" - * @param {String|Function} easing 要创建的时间线的缓动函数,如 'ease'、'linear'、'swing' - * @param {Function} callback 时间线播放结束之后的回调函数 - * - * @example - * - * ```js - * var expand = new kity.Animator({ - * beginValue: function(target) { - * return target.getBox(); - * }, - * finishValue: function(target) { - * return target.getBox().expand(100, 100, 100, 100); - * }, - * setter: function(target, value) { - * target.setBox(value) - * } - * }); - * - * var timeline = expand.create(rect, 300); - * timeline.repeat(3).play(); - * ``` - */ - create: function(target, duration, easing, callback) { - var timeline; - duration = duration && parseTime(duration) || Animator.DEFAULT_DURATION; - easing = easing || Animator.DEFAULT_EASING; - if (typeof easing == "string") { - easing = easingTable[easing]; - } - timeline = new Timeline(this, target, duration, easing); - if (typeof callback == "function") { - timeline.on("finish", callback); - } - return timeline; - }, - /** - * @method reverse() - * @for kity.Animator - * @grammar reverse() => {kity.Animator} - * @description 创建一个与当前动画器相反的动画器 - * - * @example - * - * ```js - * var turnYellow = turnRed.reverse(); - * ``` - */ - reverse: function() { - return new Animator(this.finishValue, this.beginValue, this.setter); - } - }); - Animator.DEFAULT_DURATION = 300; - Animator.DEFAULT_EASING = "linear"; - var Shape = _p.r(60); - _p.r(11).extendClass(Shape, { - /** - * @method animate() - * @for kity.Shape - * @description 在图形上播放使用指定的动画器播放动画,如果图形当前有动画正在播放,则会加入播放队列 - * - * @grammar animate(animator, duration, easing, delay, callback) - * - * @param {object} animator 播放动画使用的动画器 - * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" - * @param {Number|String} delay 动画播放前的延时 - * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' - * @param {Function} callback 播放结束之后的回调函数 - * - * @example - * - * ```js - * rect.animate(turnRed, 300); // turnRect 是一个动画器 - * rect.animate(expand, 500); // turnRect 播放结束后播放 expand - * ``` - */ - animate: function(animator, duration, easing, delay, callback) { - var queue = this._KityAnimateQueue = this._KityAnimateQueue || []; - var timeline = animator.create(this, duration, easing, callback); - function dequeue() { - queue.shift(); - if (queue.length) { - setTimeout(queue[0].t.play.bind(queue[0].t), queue[0].d); - } - } - timeline.on("finish", dequeue); - queue.push({ - t: timeline, - d: delay - }); - if (queue.length == 1) { - setTimeout(timeline.play.bind(timeline), delay); - } - return this; - }, - /** - * @method timeline() - * @for kity.Shape - * @description 获得当前正在播放的动画的时间线 - * - * @grammar timeline() => {kity.Timeline} - * - * @example - * - * ```js - * rect.timeline().repeat(2); - * ``` - */ - timeline: function() { - return this._KityAnimateQueue[0].t; - }, - /** - * @method stop() - * @for kity.Shape - * @description 停止当前正在播放的动画 - * - * @grammar stop() => {this} - * - * @example - * - * ```js - * rect.stop(); // 停止 rect 上的动画 - * ``` - */ - stop: function() { - var queue = this._KityAnimateQueue; - if (queue) { - while (queue.length) { - queue.shift().t.stop(); - } - } - return this; - } - }); - return Animator; - } -}; - -//src/animate/easing.js -/** - * Kity Animate Easing modified from jQuery Easing - * Author: techird - * Changes: - * 1. make easing functions standalone - * 2. remove the 'x' parameter - */ -/* ============================================================ - * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ - * - * Open source under the BSD License. - * - * Copyright © 2008 George McGinley Smith - * All rights reserved. - * https://raw.github.com/danro/jquery-easing/master/LICENSE - * ======================================================== */ -_p[1] = { - value: function(require, exports, module) { - var easings = { - // t: current_time, b: begin_value, c: change_value, d: duration - linear: function(t, b, c, d) { - return c * (t / d) + b; - }, - swing: function(t, b, c, d) { - return easings.easeOutQuad(t, b, c, d); - }, - ease: function(t, b, c, d) { - return easings.easeInOutCubic(t, b, c, d); - }, - easeInQuad: function(t, b, c, d) { - return c * (t /= d) * t + b; - }, - easeOutQuad: function(t, b, c, d) { - return -c * (t /= d) * (t - 2) + b; - }, - easeInOutQuad: function(t, b, c, d) { - if ((t /= d / 2) < 1) return c / 2 * t * t + b; - return -c / 2 * (--t * (t - 2) - 1) + b; - }, - easeInCubic: function(t, b, c, d) { - return c * (t /= d) * t * t + b; - }, - easeOutCubic: function(t, b, c, d) { - return c * ((t = t / d - 1) * t * t + 1) + b; - }, - easeInOutCubic: function(t, b, c, d) { - if ((t /= d / 2) < 1) return c / 2 * t * t * t + b; - return c / 2 * ((t -= 2) * t * t + 2) + b; - }, - easeInQuart: function(t, b, c, d) { - return c * (t /= d) * t * t * t + b; - }, - easeOutQuart: function(t, b, c, d) { - return -c * ((t = t / d - 1) * t * t * t - 1) + b; - }, - easeInOutQuart: function(t, b, c, d) { - if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b; - return -c / 2 * ((t -= 2) * t * t * t - 2) + b; - }, - easeInQuint: function(t, b, c, d) { - return c * (t /= d) * t * t * t * t + b; - }, - easeOutQuint: function(t, b, c, d) { - return c * ((t = t / d - 1) * t * t * t * t + 1) + b; - }, - easeInOutQuint: function(t, b, c, d) { - if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b; - return c / 2 * ((t -= 2) * t * t * t * t + 2) + b; - }, - easeInSine: function(t, b, c, d) { - return -c * Math.cos(t / d * (Math.PI / 2)) + c + b; - }, - easeOutSine: function(t, b, c, d) { - return c * Math.sin(t / d * (Math.PI / 2)) + b; - }, - easeInOutSine: function(t, b, c, d) { - return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b; - }, - easeInExpo: function(t, b, c, d) { - return t === 0 ? b : c * Math.pow(2, 10 * (t / d - 1)) + b; - }, - easeOutExpo: function(t, b, c, d) { - return t == d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b; - }, - easeInOutExpo: function(t, b, c, d) { - if (t === 0) return b; - if (t == d) return b + c; - if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b; - return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b; - }, - easeInCirc: function(t, b, c, d) { - return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b; - }, - easeOutCirc: function(t, b, c, d) { - return c * Math.sqrt(1 - (t = t / d - 1) * t) + b; - }, - easeInOutCirc: function(t, b, c, d) { - if ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b; - return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b; - }, - easeInElastic: function(t, b, c, d) { - var s = 1.70158; - var p = 0; - var a = c; - if (t === 0) return b; - if ((t /= d) == 1) return b + c; - if (!p) p = d * .3; - if (a < Math.abs(c)) { - a = c; - s = p / 4; - } else s = p / (2 * Math.PI) * Math.asin(c / a); - return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b; - }, - easeOutElastic: function(t, b, c, d) { - var s = 1.70158; - var p = 0; - var a = c; - if (t === 0) return b; - if ((t /= d) == 1) return b + c; - if (!p) p = d * .3; - if (a < Math.abs(c)) { - a = c; - s = p / 4; - } else s = p / (2 * Math.PI) * Math.asin(c / a); - return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b; - }, - easeInOutElastic: function(t, b, c, d) { - var s = 1.70158; - var p = 0; - var a = c; - if (t === 0) return b; - if ((t /= d / 2) == 2) return b + c; - if (!p) p = d * (.3 * 1.5); - if (a < Math.abs(c)) { - a = c; - var s = p / 4; - } else var s = p / (2 * Math.PI) * Math.asin(c / a); - if (t < 1) return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b; - return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b; - }, - easeInBack: function(t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c * (t /= d) * t * ((s + 1) * t - s) + b; - }, - easeOutBack: function(t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b; - }, - easeInOutBack: function(t, b, c, d, s) { - if (s == undefined) s = 1.70158; - if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= 1.525) + 1) * t - s)) + b; - return c / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b; - }, - easeInBounce: function(t, b, c, d) { - return c - easings.easeOutBounce(d - t, 0, c, d) + b; - }, - easeOutBounce: function(t, b, c, d) { - if ((t /= d) < 1 / 2.75) { - return c * (7.5625 * t * t) + b; - } else if (t < 2 / 2.75) { - return c * (7.5625 * (t -= 1.5 / 2.75) * t + .75) + b; - } else if (t < 2.5 / 2.75) { - return c * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) + b; - } else { - return c * (7.5625 * (t -= 2.625 / 2.75) * t + .984375) + b; - } - }, - easeInOutBounce: function(t, b, c, d) { - if (t < d / 2) return easings.easeInBounce(t * 2, 0, c, d) * .5 + b; - return easings.easeOutBounce(t * 2 - d, 0, c, d) * .5 + c * .5 + b; - } - }; - return easings; - } -}; - -/* - * - * TERMS OF USE - EASING EQUATIONS - * - * Open source under the BSD License. - * - * Copyright © 2001 Robert Penner - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -//src/animate/frame.js -/** - * @fileOverview - * - * 提供动画帧的基本支持 - */ -_p[2] = { - value: function(require, exports) { - // 原生动画帧方法 polyfill - var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || function(fn) { - return setTimeout(fn, 1e3 / 60); - }; - var cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.msCancelAnimationFrame || window.clearTimeout; - // 上一个请求的原生动画帧 id - var frameRequestId; - // 等待执行的帧动作的集合,这些帧的方法将在下个原生动画帧同步执行 - var pendingFrames = []; - /** - * 添加一个帧到等待集合中 - * - * 如果添加的帧是序列的第一个,至少有一个帧需要被执行,则会请求一个原生动画帧来执行 - */ - function pushFrame(frame) { - if (pendingFrames.push(frame) === 1) { - frameRequestId = requestAnimationFrame(executePendingFrames); - } - } - /** - * 执行所有等待帧 - */ - function executePendingFrames() { - var frames = pendingFrames; - pendingFrames = []; - while (frames.length) { - executeFrame(frames.pop()); - } - frameRequestId = 0; - } - /** - * @method kity.requestFrame - * @catalog animate - * @grammar kity.requestFrame(action) => {frame} - * @description 请求一个帧,执行指定的动作。动作回调提供一些有用的信息 - * - * @param {Function} action - * - * 要执行的动作,该动作回调有一个参数 frame,其中: - * - * frame.time {Number} - * 动作执行时的时间戳(ms) - * - * frame.index {Number} - * 当前执行的帧的编号(首帧为 0) - * - * frame.dur {Number} - * 上一帧至当前帧经过的时间,单位 ms - * - * frame.elapsed {Number} - * 从首帧开始到当前帧经过的时间,单位 ms - * - * frame.action {Number} - * 指向当前的帧处理函数 - * - * frame.next() - * 表示下一帧继续执行。如果不调用该方法,将不会执行下一帧。 - * - * @example - * - * ```js - * kity.requestFrame(function(frame) { - * console.log('平均帧率:' + frame.elapsed / (frame.index + 1)); - * - * // 更新或渲染动作 - * - * frame.next(); //继续执行下一帧 - * }); - * ``` - */ - function requestFrame(action) { - var frame = initFrame(action); - pushFrame(frame); - return frame; - } - /** - * @method kity.releaseFrame - * @catalog animate - * @grammar kity.releaseFrame(frame) - * @description 释放一个已经请求过的帧,如果该帧在等待集合里,将移除,下个动画帧不会执行释放的帧 - * - * @param {frame} frame 使用 kity.requestFrame() 返回的帧 - * - * @example - * - * ```js - * var frame = kity.requestFrame(function() {....}); - * kity.releaseFrame(frame); - * ``` - */ - function releaseFrame(frame) { - var index = pendingFrames.indexOf(frame); - if (~index) { - pendingFrames.splice(index, 1); - } - if (pendingFrames.length === 0) { - cancelAnimationFrame(frameRequestId); - } - } - /** - * 初始化一个帧,主要用于后续计算 - */ - function initFrame(action) { - var frame = { - index: 0, - time: +new Date(), - elapsed: 0, - action: action, - next: function() { - pushFrame(frame); - } - }; - return frame; - } - /** - * 执行一个帧动作 - */ - function executeFrame(frame) { - // 当前帧时间错 - var time = +new Date(); - // 当上一帧到当前帧经过的时间 - var dur = time - frame.time; - // - // http://stackoverflow.com/questions/13133434/requestanimationframe-detect-stop - // 浏览器最小化或切换标签,requestAnimationFrame 不会执行。 - // 检测时间超过 200 ms(频率小于 5Hz ) 判定为计时器暂停,重置为一帧长度 - // - if (dur > 200) { - dur = 1e3 / 60; - } - frame.dur = dur; - frame.elapsed += dur; - frame.time = time; - frame.action.call(null, frame); - frame.index++; - } - // 暴露 - exports.requestFrame = requestFrame; - exports.releaseFrame = releaseFrame; - } -}; - -//src/animate/motionanimator.js -/** - * @fileOverview - * - * 路径动画器,可以让一个物体沿着某个轨迹运动 - */ -_p[3] = { - value: function(require) { - var Animator = _p.r(0); - var g = _p.r(34); - var Path = _p.r(46); - var Shape = _p.r(60); - /** - * @class kity.MotionAnimator - * @catalog animate - * @base kity.Animator - * @description 路径动画器,可以让一个物体沿着某个轨迹运动 - * - * @example - * - * ```js - * var motionAnimator = new MotionAnimator('M0,0C100,0,100,0,100,100L200,200'); - * motionAnimator.start(rect, 3000); - * ``` - */ - var MotionAnimator = _p.r(11).createClass("MotionAnimator", { - base: Animator, - /** - * @constructor - * @for kity.MotionAnimator - * @grammar new kity.MotionAnimator(path, doRotate) - * @param {kity.Path|String|PathSegment} path 运动的轨迹,或者是 kity.Path 对象 - * @param {boolean} doRotate 是否让运动的目标沿着路径的切线方向旋转 - */ - constructor: function(path, doRotate) { - var me = this; - this.callBase({ - beginValue: 0, - finishValue: 1, - setter: function(target, value) { - var path = me.motionPath instanceof Path ? me.motionPath.getPathData() : me.motionPath; - var point = g.pointAtPath(path, value); - target.setTranslate(point.x, point.y); - if (this.doRotate) target.setRotate(point.tan.getAngle()); - } - }); - /** - * @property doRotate - * @for kity.MotionAnimator - * @type {boolean} - * @description 是否让运动的目标沿着路径的切线方向旋转 - * - * @example - * - * ```js - * motionAnimator.doRotate = true; // 目标沿着切线方向旋转 - * ``` - */ - this.doRotate = doRotate; - /** - * @property motionPath - * @for kity.MotionAnimator - * @type {kity.Path|String|PathSegment} - * @description 运动沿着的路径,可以在动画过程中更新 - */ - this.motionPath = path; - } - }); - _p.r(11).extendClass(Shape, { - /** - * @method motion() - * @catalog animate - * @for kity.Shape - * @description 让图形沿着指定的路径运动 - * - * @grammar motion(path, duration, easing, delay, callback) => this - * - * @param {kity.Path|String|PathSegment} path 运动的轨迹,或者是 kity.Path 对象 - * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" - * @param {Number|String} delay 动画播放前的延时 - * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' - * @param {Function} callback 播放结束之后的回调函数 - */ - motion: function(path, duration, easing, delay, callback) { - return this.animate(new MotionAnimator(path), duration, easing, delay, callback); - } - }); - return MotionAnimator; - } -}; - -//src/animate/opacityanimator.js -/** - * @fileOverview - * - * 透明度动画器,让图形动画过度到指定的透明度。 - */ -_p[4] = { - value: function(require) { - var Animator = _p.r(0); - /** - * @class kity.OpacityAnimator - * @catalog animate - * @base kity.Animator - * @description 透明度动画器,让图形动画过度到指定的透明度 - */ - var OpacityAnimator = _p.r(11).createClass("OpacityAnimator", { - base: Animator, - /** - * @constructor - * @for kity.OpacityAnimator - * @grammar new kity.OpacityAnimator(opacity) - * - * @param {Number} opacity 目标透明度,取值范围 0 - 1 - */ - constructor: function(opacity) { - this.callBase({ - beginValue: function(target) { - return target.getOpacity(); - }, - finishValue: opacity, - setter: function(target, value) { - target.setOpacity(value); - } - }); - } - }); - var Shape = _p.r(60); - _p.r(11).extendClass(Shape, { - /** - * @method fxOpacity() - * @catalog animate - * @for kity.Shape - * @description 让图形的透明度以动画的形式过渡到指定的值 - * - * @grammar fxOpacity(opacity, duration, easing, delay, callback) => {this} - * - * @param {Number} opacity 动画的目标透明度 - * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" - * @param {Number|String} delay 动画播放前的延时 - * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' - * @param {Function} callback 播放结束之后的回调函数 - */ - fxOpacity: function(opacity, duration, easing, delay, callback) { - return this.animate(new OpacityAnimator(opacity), duration, easing, delay, callback); - }, - /** - * @method fadeTo() - * @catalog animate - * @for kity.Shape - * @description 让图形的透明度以动画的形式过渡到指定的值 - * - * @grammar fadeTo(opacity, duration, easing, delay, callback) => {this} - * - * @param {Number} opacity 动画的目标透明度 - * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" - * @param {Number|String} delay 动画播放前的延时 - * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' - * @param {Function} callback 播放结束之后的回调函数 - */ - fadeTo: function() { - return this.fxOpacity.apply(this, arguments); - }, - /** - * @method fadeIn() - * @catalog animate - * @for kity.Shape - * @description 让图形淡入 - * - * @grammar fadeIn(duration, easing, delay, callback) => {this} - * - * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" - * @param {Number|String} delay 动画播放前的延时 - * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' - * @param {Function} callback 播放结束之后的回调函数 - */ - fadeIn: function() { - return this.fxOpacity.apply(this, [ 1 ].concat([].slice.call(arguments))); - }, - /** - * @method fadeOut() - * @catalog animate - * @for kity.Shape - * @description 让图形淡出 - * - * @grammar fadeIn(duration, easing, delay, callback) => {this} - * - * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" - * @param {Number|String} delay 动画播放前的延时 - * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' - * @param {Function} callback 播放结束之后的回调函数 - */ - fadeOut: function() { - return this.fxOpacity.apply(this, [ 0 ].concat([].slice.call(arguments))); - } - }); - return OpacityAnimator; - } -}; - -//src/animate/pathanimator.js -/** - * @fileOverview - * - * 路径补间动画器,让图形从一个形状变为另一个形状 - */ -_p[5] = { - value: function(require) { - var Animator = _p.r(0); - var g = _p.r(34); - /** - * @catalog animate - * - * @class kity.PathAnimator - * @base kity.Animator - * @description 路径补间动画器,让图形从一个形状变为另一个形状 - * - * @example - * - * ```js - * var path = new kity.Path('M0,0L0,100'); - * var pa = new kity.PathAnimator('M0,0C100,0,100,0,100,100'); - * pa.start(path, 300); - * ``` - */ - var PathAnimator = _p.r(11).createClass("OpacityAnimator", { - base: Animator, - /** - * @constructor - * @for kity.PathAnimator - * - * @grammar new kity.Path.Animator(path) - * - * @param {String|PathSegment} path 目标形状的路径数据 - * - */ - constructor: function(path) { - this.callBase({ - beginValue: function(target) { - this.beginPath = target.getPathData(); - return 0; - }, - finishValue: 1, - setter: function(target, value) { - target.setPathData(g.pathTween(this.beginPath, path, value)); - } - }); - } - }); - var Path = _p.r(46); - _p.r(11).extendClass(Path, { - /** - * @catalog animate - * - * @method fxPath() - * @for kity.Shape - * @description 以动画的形式把路径变换为新路径 - * - * @grammar fxPath(path, duration, easing, delay, callback) => {this} - * - * @param {String|PathSegment} path 要变换新路径 - * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" - * @param {Number|String} delay 动画播放前的延时 - * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' - * @param {Function} callback 播放结束之后的回调函数 - */ - fxPath: function(path, duration, easing, delay, callback) { - return this.animate(new PathAnimator(path), duration, easing, delay, callback); - } - }); - return PathAnimator; - } -}; - -//src/animate/rotateanimator.js -/** - * @fileOverview - * - * 提供支持目标旋转的动画器 - */ -_p[6] = { - value: function(require) { - var Animator = _p.r(0); - /** - * @class kity.RotateAnimator - * @base Animator - * @description 提供支持目标旋转的动画器 - */ - var RotateAnimator = _p.r(11).createClass("RotateAnimator", { - base: Animator, - /** - * @constructor - * @for kity.RotateAnimator - * - * @grammar new kity.RotateAnimator(deg, ax, ay) - * - * @param {Number} deg 要旋转的角度 - */ - constructor: function(deg) { - this.callBase({ - beginValue: 0, - finishValue: deg, - setter: function(target, value, timeline) { - var delta = timeline.getDelta(); - target.rotate(delta, ax, ay); - } - }); - } - }); - var Shape = _p.r(60); - _p.r(11).extendClass(Shape, { - /** - * @method fxRotate() - * @for kity.Shape - * @description 让目标以动画旋转指定的角度 - * - * @grammar fxRotate(deg, duration, easing, delay) => {this} - * - * @param {Number} deg 要旋转的角度 - * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" - * @param {Number|String} delay 动画播放前的延时 - * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' - * @param {Function} callback 播放结束之后的回调函数 - */ - fxRotate: function(deg, duration, easing, delay, callback) { - return this.animate(new RotateAnimator(deg), duration, easing, delay, callback); - } - }); - return RotateAnimator; - } -}; - -//src/animate/scaleanimator.js -/** - * @fileOverview - * - * 提供支持目标缩放的动画器 - */ -_p[7] = { - value: function(require) { - var Animator = _p.r(0); - /** - * @class kity.ScaleAnimator - * @base kity.Animator - * @description 提供支持目标缩放的动画器 - */ - var ScaleAnimator = _p.r(11).createClass("ScaleAnimator", { - base: Animator, - /** - * @constructor - * @for kity.ScaleAnimator - * - * @grammar new kity.ScaleAnimator(sx, sy) - * @param {Number} sx x 轴的缩放比例 - * @param {Number} sy y 轴的缩放比例 - */ - constructor: function(sx, sy) { - this.callBase({ - beginValue: 0, - finishValue: 1, - setter: function(target, value, timeline) { - var delta = timeline.getDelta(); - var kx = Math.pow(sx, delta); - var ky = Math.pow(sy, delta); - target.scale(ky, kx); - } - }); - } - }); - var Shape = _p.r(60); - _p.r(11).extendClass(Shape, { - /** - * @method fxScale - * @for kity.Shape - * @description 动画缩放当前的图形 - * - * @grammar fxScale(sx, sy, duration, easing, delay, callback) => {this} - * - * @param {Number} sx x 轴的缩放比例 - * @param {Number} sy y 轴的缩放比例 - * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" - * @param {Number|String} delay 动画播放前的延时 - * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' - * @param {Function} callback 播放结束之后的回调函数 - */ - fxScale: function(sx, sy, duration, easing, delay, callback) { - return this.animate(new ScaleAnimator(sx, sy), duration, easing, delay, callback); - } - }); - return ScaleAnimator; - } -}; - -//src/animate/timeline.js -/** - * @fileOverview - * - * 动画时间线的实现 - */ -_p[8] = { - value: function(require) { - var EventHandler = _p.r(33); - var utils = _p.r(12); - var frame = _p.r(2); - function getPercentValue(b, f, p) { - return utils.paralle(b, f, function(b, f) { - return b + (f - b) * p; - }); - } - function getDelta(v1, v2) { - return utils.paralle(v1, v2, function(v1, v2) { - return v2 - v1; - }); - } - function TimelineEvent(timeline, type, param) { - this.timeline = timeline; - this.target = timeline.target; - this.type = type; - for (var name in param) { - if (param.hasOwnProperty(name)) { - this[name] = param[name]; - } - } - } - /** - * @class kity.Timeline - * @catalog animate - * @mixins EventHandler - * @description 动画时间线 - */ - var Timeline = _p.r(11).createClass("Timeline", { - mixins: [ EventHandler ], - /** - * @constructor - * @for kity.Timeline - * @private - * @description 时间线应该由动画器进行构造,不应手动创建 - * - */ - constructor: function(animator, target, duration, easing) { - this.callMixin(); - this.target = target; - this.time = 0; - this.duration = duration; - this.easing = easing; - this.animator = animator; - this.beginValue = animator.beginValue; - this.finishValue = animator.finishValue; - this.setter = animator.setter; - this.status = "ready"; - }, - /** - * @private - * - * 让时间线进入下一帧 - */ - nextFrame: function(frame) { - if (this.status != "playing") { - return; - } - this.time += frame.dur; - this.setValue(this.getValue()); - if (this.time >= this.duration) { - this.timeUp(); - } - frame.next(); - }, - /** - * @method getPlayTime() - * @for kity.Timeline - * @grammar getPlayTime() => {Number} - * @description 获得当前播放的时间,取值区间为 [0, duration] - */ - getPlayTime: function() { - return this.rollbacking ? this.duration - this.time : this.time; - }, - /** - * @method getTimeProportion() - * @for kity.Timeline - * @grammar getTimeProportion() => {Number} - * @description 获得当前播放时间的比例,取值区间为 [0, 1] - */ - getTimeProportion: function() { - return this.getPlayTime() / this.duration; - }, - /** - * @method getValueProportion() - * @for kity.Timeline - * @grammar getValueProportion() => {Number} - * @description 获得当前播放时间对应值的比例,取值区间为 [0, 1];该值实际上是时间比例值经过缓动函数计算之后的值。 - */ - getValueProportion: function() { - return this.easing(this.getPlayTime(), 0, 1, this.duration); - }, - /** - * @method getValue() - * @for kity.Timeline - * @grammar getValue() => {any} - * @description 返回当前播放时间对应的值。 - */ - getValue: function() { - var b = this.beginValue; - var f = this.finishValue; - var p = this.getValueProportion(); - return getPercentValue(b, f, p); - }, - /** - * @private - * - * 把值通过动画器的 setter 设置到目标上 - */ - setValue: function(value) { - this.lastValue = this.currentValue; - this.currentValue = value; - this.setter.call(this.target, this.target, value, this); - }, - /** - * @method getDelta() - * @for kity.Timeline - * @grammar getDelta() => {any} - * @description 返回当前值和上一帧的值的差值 - */ - getDelta: function() { - this.lastValue = this.lastValue === undefined ? this.beginValue : this.lastValue; - return getDelta(this.lastValue, this.currentValue); - }, - /** - * @method play() - * @for kity.Timeline - * @grammar play() => {this} - * @description 让时间线播放,如果时间线还没开始,或者已停止、已结束,则重头播放;如果是已暂停,从暂停的位置继续播放 - */ - play: function() { - var lastStatus = this.status; - this.status = "playing"; - switch (lastStatus) { - case "ready": - if (utils.isFunction(this.beginValue)) { - this.beginValue = this.beginValue.call(this.target, this.target); - } - if (utils.isFunction(this.finishValue)) { - this.finishValue = this.finishValue.call(this.target, this.target); - } - this.time = 0; - this.setValue(this.beginValue); - this.frame = frame.requestFrame(this.nextFrame.bind(this)); - break; - - case "finished": - case "stoped": - this.time = 0; - this.frame = frame.requestFrame(this.nextFrame.bind(this)); - break; - - case "paused": - this.frame.next(); - } - /** - * @event play - * @for kity.Timeline - * @description 在时间线播放后触发 - * - * @param {String} event.lastStatus - * 表示播放前的上一个状态,可能取值为 'ready'、'finished'、'stoped'、'paused' - */ - this.fire("play", new TimelineEvent(this, "play", { - lastStatus: lastStatus - })); - return this; - }, - /** - * @method pause() - * @for kity.Timeline - * @description 暂停当前的时间线 - * - * @grammar pause() => {this} - */ - pause: function() { - this.status = "paused"; - /** - * @event pause - * @for kity.Timeline - * @description 暂停事件,在时间线暂停时触发 - */ - this.fire("pause", new TimelineEvent(this, "pause")); - frame.releaseFrame(this.frame); - return this; - }, - /** - * @method stop() - * @for kity.Timeline - * @description 停止当前时间线 - * - * @grammar stop() => {this} - */ - stop: function() { - this.status = "stoped"; - this.setValue(this.finishValue); - this.rollbacking = false; - /** - * @event stop - * @for kity.Timeline - * @description 停止时间,在时间线停止时触发 - */ - this.fire("stop", new TimelineEvent(this, "stop")); - frame.releaseFrame(this.frame); - return this; - }, - /** - * @private - * - * 播放结束之后的处理 - */ - timeUp: function() { - if (this.repeatOption) { - this.time = 0; - if (this.rollback) { - if (this.rollbacking) { - this.decreaseRepeat(); - this.rollbacking = false; - } else { - this.rollbacking = true; - /** - * @event rollback - * @for kity.Timeline - * @description 回滚事件,在时间线回滚播放开始的时候触发 - */ - this.fire("rollback", new TimelineEvent(this, "rollback")); - } - } else { - this.decreaseRepeat(); - } - if (!this.repeatOption) { - this.finish(); - } else { - /** - * @event repeat - * @for kity.Timeline - * @description 循环事件,在时间线循环播放开始的时候触发 - */ - this.fire("repeat", new TimelineEvent(this, "repeat")); - } - } else { - this.finish(); - } - }, - /** - * @private - * - * 决定播放结束的处理 - */ - finish: function() { - this.setValue(this.finishValue); - this.status = "finished"; - /** - * @event finish - * @for kity.Timeline - * @description 结束事件,在时间线播放结束后触发(包括重复和回滚都结束) - */ - this.fire("finish", new TimelineEvent(this, "finish")); - frame.releaseFrame(this.frame); - }, - /** - * @private - * - * 循环次数递减 - */ - decreaseRepeat: function() { - if (this.repeatOption !== true) { - this.repeatOption--; - } - }, - /** - * @method repeat() - * @for kity.Timeline - * @description 设置时间线的重复选项 - * - * @grammar repeat(repeat, rollback) => {this} - * - * @param {Number|Boolean} repeat - * 是否重复播放,设置为 true 无限循环播放,设置数值则循环指定的次数 - * @param {Boolean} rollback - * 指示是否要回滚播放。 - * 如果设置为真,一次事件到 duration 则一个来回算一次循环次数,否则播放完成一次算一次循环次数 - * - */ - repeat: function(repeat, rollback) { - this.repeatOption = repeat; - this.rollback = rollback; - return this; - } - }); - Timeline.requestFrame = frame.requestFrame; - Timeline.releaseFrame = frame.releaseFrame; - return Timeline; - } -}; - -//src/animate/translateanimator.js -/** - * @fileOverview - * - * 提供让图形移动的动画器 - */ -_p[9] = { - value: function(require) { - var Animator = _p.r(0); - /** - * @class kity.TranslateAnimator - * @base kity.Animator - * @description 提供让图形移动的动画器 - */ - var TranslateAnimator = _p.r(11).createClass("TranslateAnimator", { - base: Animator, - /** - * @constructor - * @for kity.TranslateAnimator - * @grammar new kity.TranslateAnimator(x, y) - * @param {Number} x x 方向上需要移动的距离 - * @param {Number} y y 方向上需要移动的距离 - */ - constructor: function(x, y) { - this.callBase({ - x: 0, - y: 0 - }, { - x: x, - y: y - }, function(target, value, timeline) { - var delta = timeline.getDelta(); - target.translate(delta.x, delta.y); - }); - } - }); - var Shape = _p.r(60); - _p.r(11).extendClass(Shape, { - /** - * @method fxTranslate() - * @for kity.Shape - * @description 让目标以动画平移指定的距离 - * - * @grammar fxTranslate(x, y, duration, easing, delay, callback) => {this} - * - * @param {Number} x x 方向上需要移动的距离 - * @param {Number} y y 方向上需要移动的距离 - * @param {Number|String} duration 动画的播放长度,如 300、"5s"、"0.5min" - * @param {Number|String} delay 动画播放前的延时 - * @param {String|Function} easing 动画播放使用的缓动函数,如 'ease'、'linear'、'swing' - * @param {Function} callback 播放结束之后的回调函数 - */ - fxTranslate: function(x, y, duration, easing, delay, callback) { - return this.animate(new TranslateAnimator(x, y), duration, easing, delay, callback); - } - }); - return TranslateAnimator; - } -}; - -//src/core/browser.js -/** - * @fileOverview - * - * 提供浏览器判断的一些字段 - */ -_p[10] = { - value: function() { - /** - * @class kity.Browser - * @catalog core - * @static - * @description 提供浏览器信息 - */ - var browser = function() { - var agent = navigator.userAgent.toLowerCase(), opera = window.opera, browser; - // 浏览器对象 - browser = { - /** - * @property platform - * @description 获取浏览器所在系统,"Win"->Windows;"Mac"->Mac;"Lux"->Linux - * @type {String} - */ - platform: function(navigator) { - var _p = { - win32: "Win", - macintel: "Mac" - }; - return _p[navigator.platform.toLowerCase()] || "Lux"; - }(navigator), - /** - * 猎豹,区分两种不同内核 - */ - lb: function(agent) { - if (~agent.indexOf("lbbrowser")) { - return ~agent.indexOf("msie") ? "ie" : "chrome"; - } - return false; - }(agent), - /** - * 搜狗 - */ - sg: /se[\s\S]+metasr/.test(agent), - /** - * 百度 - */ - bd: !!~agent.indexOf("bidubrowser"), - /** - * edge浏览器 - */ - edge: !!~agent.indexOf("edge"), - /** - * chrome初始化为false - * @type {Boolean} - */ - chrome: false, - /** - * @property opera - * @for kity.Browser - * @description 判断是否为 Opera 浏览器 - * @type {boolean} - */ - opera: !!opera && opera.version, - /** - * @property webkit - * @for kity.Browser - * @description 判断是否为 Webkit 内核的浏览器 - * @type {boolean} - */ - webkit: agent.indexOf(" applewebkit/") > -1, - /** - * @property mac - * @for kity.Browser - * @description 判断是否为 Mac 下的浏览器 - * @type {boolean} - */ - mac: agent.indexOf("macintosh") > -1 - }; - /** - * @property ie - * @for kity.Browser - * @description 判断是否为 IE 浏览器 - * @type {boolean} - */ - browser.ie = !browser.lb && /(msie\s|trident.*rv:)([\w.]+)/.test(agent); - browser.gecko = navigator.product == "Gecko" && !browser.webkit && !browser.opera && !browser.ie; - var version = 0; - // Internet Explorer 6.0+ - if (browser.ie) { - version = (agent.match(/(msie\s|trident.*rv:)([\w.]+)/)[2] || 0) * 1; - browser.ie11Compat = document.documentMode == 11; - browser.ie9Compat = document.documentMode == 9; - } - // Gecko. - if (browser.gecko) { - var geckoRelease = agent.match(/rv:([\d\.]+)/); - if (geckoRelease) { - geckoRelease = geckoRelease[1].split("."); - version = geckoRelease[0] * 1e4 + (geckoRelease[1] || 0) * 100 + (geckoRelease[2] || 0) * 1; - } - } - // 排除其他chrome内核的浏览器的干扰 - if (/chrome\/(\d+\.\d)/i.test(agent) && !browser.bd && !browser.opera && !browser.lb && !browser.sg && !browser.edge) { - /** - * @property chrome - * @for kity.Browser - * @description 判断是否为 Chrome 浏览器 - * @type {boolean} - */ - browser.chrome = +RegExp["$1"]; - } - if (/(\d+\.\d)?(?:\.\d)?\s+safari\/?(\d+\.\d+)?/i.test(agent) && !/chrome/i.test(agent)) { - browser.safari = +(RegExp["$1"] || RegExp["$2"]); - } - // Opera 9.50+ - if (browser.opera) version = parseFloat(opera.version()); - // WebKit 522+ (Safari 3+) - if (browser.webkit) version = parseFloat(agent.match(/ applewebkit\/(\d+)/)[1]); - // 搜狗版本号无从得知 - // 猎豹版本号无从得知 - // 百度 - if (browser.bd) version = parseFloat(agent.match(/bidubrowser\/(\d+)/)[1]); - // Opera 9.50+ - if (browser.opera) version = parseFloat(agent.match(/opr\/(\d+)/)[1]); - // edge - if (browser.edge) version = parseFloat(agent.match(/edge\/(\d+)/)[1]); - /** - * @property version - * @for kity.Browser - * @description 获取当前浏览器的版本 - * @type {Number} - */ - browser.version = version; - browser.isCompatible = !browser.mobile && (browser.ie && version >= 6 || browser.gecko && version >= 10801 || browser.opera && version >= 9.5 || browser.air && version >= 1 || browser.webkit && version >= 522 || false); - return browser; - }(); - return browser; - } -}; - -//src/core/class.js -/** - * @fileOverview - * - * 提供 Kity 的 OOP 支持 - */ -_p[11] = { - value: function(require, exports) { - /** - * @class kity.Class - * @catalog core - * @description 所有 kity 类的基类 - * @abstract - */ - function Class() {} - exports.Class = Class; - Class.__KityClassName = "Class"; - /** - * @method base() - * @for kity.Class - * @protected - * @grammar base(name, args...) => {any} - * @description 调用父类指定名称的函数 - * @param {string} name 函数的名称 - * @param {parameter} args... 传递给父类函数的参数 - * - * @example - * - * ```js - * var Person = kity.createClass('Person', { - * toString: function() { - * return 'I am a person'; - * } - * }); - * - * var Male = kity.createClass('Male', { - * base: Person, - * - * toString: function() { - * return 'I am a man'; - * }, - * - * speak: function() { - * return this.base('toString') + ',' + this.toString(); - * } - * }) - * ``` - */ - Class.prototype.base = function(name) { - var caller = arguments.callee.caller; - var method = caller.__KityMethodClass.__KityBaseClass.prototype[name]; - return method.apply(this, Array.prototype.slice.call(arguments, 1)); - }; - /** - * @method callBase() - * @for kity.Class - * @protected - * @grammar callBase(args...) => {any} - * @description 调用父类同名函数 - * @param {parameter} args... 传递到父类同名函数的参数 - * - * @example - * - * ```js - * var Animal = kity.createClass('Animal', { - * constructor: function(name) { - * this.name = name; - * }, - * toString: function() { - * return 'I am an animal name ' + this.name; - * } - * }); - * - * var Dog = kity.createClass('Dog', { - * constructor: function(name) { - * this.callBase(name); - * }, - * toString: function() { - * return this.callBase() + ', a dog'; - * } - * }); - * - * var dog = new Dog('Dummy'); - * console.log(dog.toString()); // "I am an animal name Dummy, a dog"; - * ``` - */ - Class.prototype.callBase = function() { - var caller = arguments.callee.caller; - var method = caller.__KityMethodClass.__KityBaseClass.prototype[caller.__KityMethodName]; - return method.apply(this, arguments); - }; - Class.prototype.mixin = function(name) { - var caller = arguments.callee.caller; - var mixins = caller.__KityMethodClass.__KityMixins; - if (!mixins) { - return this; - } - var method = mixins[name]; - return method.apply(this, Array.prototype.slice.call(arguments, 1)); - }; - Class.prototype.callMixin = function() { - var caller = arguments.callee.caller; - var methodName = caller.__KityMethodName; - var mixins = caller.__KityMethodClass.__KityMixins; - if (!mixins) { - return this; - } - var method = mixins[methodName]; - if (methodName == "constructor") { - for (var i = 0, l = method.length; i < l; i++) { - method[i].call(this); - } - return this; - } else { - return method.apply(this, arguments); - } - }; - /** - * @method pipe() - * @for kity.Class - * @grammar pipe() => {this} - * @description 以当前对象为上线文以及管道函数的第一个参数,执行一个管道函数 - * @param {Function} fn 进行管道操作的函数 - * - * @example - * - * ```js - * var rect = new kity.Rect().pipe(function() { - * this.setWidth(500); - * this.setHeight(300); - * }); - * ``` - */ - Class.prototype.pipe = function(fn) { - if (typeof fn == "function") { - fn.call(this, this); - } - return this; - }; - /** - * @method getType() - * @for kity.Class - * @grammar getType() => {string} - * @description 获得对象的类型 - * - * @example - * - * ```js - * var rect = new kity.Rect(); - * var circle = new kity.Circle(); - * - * console.log(rect.getType()); // "Rect" - * console.log(rect.getType()); // "Circle" - * ``` - */ - Class.prototype.getType = function() { - return this.__KityClassName; - }; - /** - * @method getClass() - * @for kity.Class - * @grammar getClass() => {Class} - * @description 获得对象的类 - * - * @example - * - * ```js - * var rect = new kity.Rect(); - * - * console.log(rect.getClass() === kity.Rect); // true - * console.log(rect instanceof kity.Rect); // true - * ``` - */ - Class.prototype.getClass = function() { - return this.constructor; - }; - // 检查基类是否调用了父类的构造函数 - // 该检查是弱检查,假如调用的代码被注释了,同样能检查成功(这个特性可用于知道建议调用,但是出于某些原因不想调用的情况) - function checkBaseConstructorCall(targetClass, classname) { - var code = targetClass.toString(); - if (!/this\.callBase/.test(code)) { - throw new Error(classname + " : 类构造函数没有调用父类的构造函数!为了安全,请调用父类的构造函数"); - } - } - var KITY_INHERIT_FLAG = "__KITY_INHERIT_FLAG_" + +new Date(); - function inherit(constructor, BaseClass, classname) { - var KityClass = eval("(function " + classname + "( __inherit__flag ) {" + "if( __inherit__flag != KITY_INHERIT_FLAG ) {" + "KityClass.__KityConstructor.apply(this, arguments);" + "}" + "this.__KityClassName = KityClass.__KityClassName;" + "})"); - KityClass.__KityConstructor = constructor; - KityClass.prototype = new BaseClass(KITY_INHERIT_FLAG); - for (var methodName in BaseClass.prototype) { - if (BaseClass.prototype.hasOwnProperty(methodName) && methodName.indexOf("__Kity") !== 0) { - KityClass.prototype[methodName] = BaseClass.prototype[methodName]; - } - } - KityClass.prototype.constructor = KityClass; - return KityClass; - } - function mixin(NewClass, mixins) { - if (false === mixins instanceof Array) { - return NewClass; - } - var i, length = mixins.length, proto, method; - NewClass.__KityMixins = { - constructor: [] - }; - for (i = 0; i < length; i++) { - proto = mixins[i].prototype; - for (method in proto) { - if (false === proto.hasOwnProperty(method) || method.indexOf("__Kity") === 0) { - continue; - } - if (method === "constructor") { - // constructor 特殊处理 - NewClass.__KityMixins.constructor.push(proto[method]); - } else { - NewClass.prototype[method] = NewClass.__KityMixins[method] = proto[method]; - } - } - } - return NewClass; - } - function extend(BaseClass, extension) { - if (extension.__KityClassName) { - extension = extension.prototype; - } - for (var methodName in extension) { - if (extension.hasOwnProperty(methodName) && methodName.indexOf("__Kity") && methodName != "constructor") { - var method = BaseClass.prototype[methodName] = extension[methodName]; - method.__KityMethodClass = BaseClass; - method.__KityMethodName = methodName; - } - } - return BaseClass; - } - /** - * @method kity.createClass() - * @grammar kity.createClass(classname, defines) => {Class} - * @description 创建一个类 - * @param {string} classname 类名,用于调试的时候查看,可选 - * @param {object} defines 类定义 - * defines.base {Class} - * 定义的类的基类,如果不配置,则表示基类为 kity.Class - * defines.mixins {Class[]} - * 定义的类要融合的类列表 - * defines.constructor {Function} - * 定义类的构造函数,如果父类显式定义了构造函数,需要在构造函数中使用 callBase() 方法调用父类的构造函数 - * defines.* {Function} - * 定义类的其它函数 - * - * @example 创建一个类 - * - * ```js - * var Animal = kity.createClass('Animal', { - * constructor: function(name) { - * this.name = name; - * }, - * toString: function() { - * return this.name; - * } - * }); - * - * var a = new Animal('kity'); - * console.log(a.toString()); // "kity" - * ``` - * - * @example 继承一个类 - * - * ```js - * var Cat = kity.createClass('Cat', { - * base: Animal, - * constructor: function(name, color) { - * // 调用父类构造函数 - * this.callBase(name); - * }, - * toString: function() { - * return 'A ' + this.color + ' cat, ' + this.callBase(); - * } - * }); - * - * var cat = new Cat('kity', 'black'); - * console.log(cat.toString()); // "A black cat, kity" - * ``` - * - * @example 混合类的能力 - * ```js - * var Walkable = kity.createClass('Walkable', { - * constructor: function() { - * this.speed = 'fast'; - * }, - * walk: function() { - * console.log('I am walking ' + this.speed); - * } - * }); - * - * var Dog = kity.createClass('Dog', { - * base: Animal, - * mixins: [Walkable], - * constructor: function(name) { - * this.callBase(name); - * this.callMixins(); - * } - * }); - * - * var dog = new Dog('doggy'); - * console.log(dog.toString() + ' say:'); - * dog.walk(); - * ``` - */ - exports.createClass = function(classname, defines) { - var constructor, NewClass, BaseClass; - if (arguments.length === 1) { - defines = arguments[0]; - classname = "AnonymousClass"; - } - BaseClass = defines.base || Class; - if (defines.hasOwnProperty("constructor")) { - constructor = defines.constructor; - if (BaseClass != Class) { - checkBaseConstructorCall(constructor, classname); - } - } else { - constructor = function() { - this.callBase.apply(this, arguments); - this.callMixin.apply(this, arguments); - }; - } - NewClass = inherit(constructor, BaseClass, classname); - NewClass = mixin(NewClass, defines.mixins); - NewClass.__KityClassName = constructor.__KityClassName = classname; - NewClass.__KityBaseClass = constructor.__KityBaseClass = BaseClass; - NewClass.__KityMethodName = constructor.__KityMethodName = "constructor"; - NewClass.__KityMethodClass = constructor.__KityMethodClass = NewClass; - // 下面这些不需要拷贝到原型链上 - delete defines.mixins; - delete defines.constructor; - delete defines.base; - NewClass = extend(NewClass, defines); - return NewClass; - }; - /** - * @method kity.extendClass() - * @grammar kity.extendClass(clazz, extension) => {Class} - * @description 拓展一个已有的类 - * - * @example - * - * ```js - * kity.extendClass(Dog, { - * spark: function() { - * console.log('wao wao wao!'); - * } - * }); - * - * new Dog().spark(); // "wao wao wao!"; - * ``` - */ - exports.extendClass = extend; - } -}; - -//src/core/utils.js -/** - * @fileOverview - * - * 一些常用的工具方法 - */ -_p[12] = { - value: function() { - /** - * @class kity.Utils - * @catalog core - * @static - * @description 提供常用的工具方法 - */ - var utils = { - /** - * @method each() - * @for kity.Utils - * @grammar each(obj, interator, context) - * @param {Object|Array} obj 要迭代的对象或数组 - * @param {Function} iterator 迭代函数 - * @param {Any} context 迭代函数的上下文 - * - * @example 迭代数组 - * - * ```js - * kity.Utils.each([1, 2, 3, 4, 5], function(value, index, array) { - * console.log(value, index); - * }); - * // 1, 0 - * // 2, 1 - * // 3, 2 - * // 4, 3 - * // 5, 4 - * ``` - * - * @example 迭代对象 - * - * ```js - * var obj = { - * name: 'kity', - * version: '1.2.1' - * }; - * var param = []; - * kity.Utils.each(obj, function(value, key, obj) { - * param.push(key + '=' + value); - * }); - * console.log(param.join('&')); // "name=kity&version=1.2.1" - * ``` - */ - each: function each(obj, iterator, context) { - if (obj === null) { - return; - } - if (obj.length === +obj.length) { - for (var i = 0, l = obj.length; i < l; i++) { - if (iterator.call(context, obj[i], i, obj) === false) { - return false; - } - } - } else { - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - if (iterator.call(context, obj[key], key, obj) === false) { - return false; - } - } - } - } - }, - /** - * @method extend() - * @for kity.Utils - * @grammar extend(target, sources..., notCover) => {object} - * @description 把源对象的属性合并到目标对象上 - * @param {object} target 目标对象 - * @param {parameter} sources 源对象 - * @param {boolean} notCover 是否不要覆盖源对象已有的属性 - * - * @example - * - * ```js - * var a = { - * key1: 'a1', - * key2: 'a2' - * }; - * - * var b = { - * key2: 'b2', - * key3: 'b3' - * }; - * - * var c = { - * key4: 'c4' - * }; - * - * var d = kity.extend(a, b, c); - * - * console.log(d === a); // true - * console.log(a); // {key1: 'a1', key2: 'b2', key3: 'b3', key4: 'c4'} - * ``` - */ - extend: function extend(t) { - var a = arguments, notCover = this.isBoolean(a[a.length - 1]) ? a[a.length - 1] : false, len = this.isBoolean(a[a.length - 1]) ? a.length - 1 : a.length; - for (var i = 1; i < len; i++) { - var x = a[i]; - for (var k in x) { - if (!notCover || !t.hasOwnProperty(k)) { - t[k] = x[k]; - } - } - } - return t; - }, - /** - * @method deepExtend() - * @for kity.Utils - * @grammar deepExtend(target, sources..., notCover) - * @description 把源对象的属性合并到目标对象上,如果属性是对象,会递归合并 - * @param {object} target 目标对象 - * @param {parameter} sources 源对象 - * @param {boolean} notCover 是否不要覆盖源对象已有的属性 - */ - deepExtend: function(t, s) { - var a = arguments, notCover = this.isBoolean(a[a.length - 1]) ? a[a.length - 1] : false, len = this.isBoolean(a[a.length - 1]) ? a.length - 1 : a.length; - for (var i = 1; i < len; i++) { - var x = a[i]; - for (var k in x) { - if (!notCover || !t.hasOwnProperty(k)) { - if (this.isObject(t[k]) && this.isObject(x[k])) { - this.deepExtend(t[k], x[k], notCover); - } else { - t[k] = x[k]; - } - } - } - } - return t; - }, - /** - * @method clone() - * @for kity.Utils - * @grammar clone(obj) => {object} - * @description 返回一个对象的克隆副本(非深度复制) - * @param {object} obj 要克隆的对象 - * - * @example - * - * ```js - * var source = { - * key1: { - * key2: 'value2' - * }, - * key3: 'value3' - * }; - * - * var target = kity.Utils.clone(source); - * - * console.log(target === source); // false - * console.log(target.key1 === source.key1); // true - * console.log(target.key3 === source.key3); // true - * ``` - */ - clone: function clone(obj) { - var cloned = {}; - for (var m in obj) { - if (obj.hasOwnProperty(m)) { - cloned[m] = obj[m]; - } - } - return cloned; - }, - /** - * @method copy() - * @for kity.Utils - * @grammar copy(obj) => {object} - * @description 返回一个对象的拷贝副本(深度复制) - * @param {object} obj 要拷贝的对象 - * - * @example - * - * ```js - * var source = { - * key1: { - * key2: 'value2' - * }, - * key3: 'value3' - * }; - * - * var target = kity.Utils.copy(source); - * - * console.log(target === source); // false - * console.log(target.key1 === source.key1); // false - * console.log(target.key3 === source.key3); // true,因为是值类型 - * ``` - */ - copy: function copy(obj) { - if (typeof obj !== "object") return obj; - if (typeof obj === "function") return null; - return JSON.parse(JSON.stringify(obj)); - }, - queryPath: function(path, obj) { - var arr = path.split("."); - var i = 0, tmp = obj, l = arr.length; - while (i < l) { - if (arr[i] in tmp) { - tmp = tmp[arr[i]]; - i++; - if (i >= l || tmp === undefined) { - return tmp; - } - } else { - return undefined; - } - } - }, - getValue: function(value, defaultValue) { - return value !== undefined ? value : defaultValue; - }, - /** - * @method flatten() - * @for kity.Utils - * @grammar flatten(arr) => {Array} - * @description 返回给定数组的扁平化版本 - * @param {Array} arr 要扁平化的数组 - * - * @example - * - * ```js - * var flattened = kity.Utils.flatten([[1, 2], [2, 3], [[4, 5], [6, 7]]]); - * console.log(flattened); // [1, 2, 3, 4, 5, 6, 7]; - * ``` - */ - flatten: function flatten(arr) { - var result = [], length = arr.length, i; - for (i = 0; i < length; i++) { - if (arr[i] instanceof Array) { - result = result.concat(utils.flatten(arr[i])); - } else { - result.push(arr[i]); - } - } - return result; - }, - /** - * @method paralle() - * @for kity.Utils - * @grammar paralle() => {Any} - * - * @description 平行地对 v1 和 v2 进行指定的操作 - * - * 如果 v1 是数字,那么直接进行 op 操作 - * 如果 v1 是对象,那么返回一个对象,其元素是 v1 和 v2 同键值的每个元素平行地进行 op 操作的结果 - * 如果 v1 是数组,那么返回一个数组,其元素是 v1 和 v2 同索引的每个元素平行地进行 op 操作的结果 - * - * @param {Number|Object|Array} v1 第一个操作数 - * @param {Number|Object|Array} v2 第二个操作数 - * @param {Function} op 操作函数 - * - * - * - * @example - * - * ```js - * var a = { - * value1: 1, - * value2: 2, - * value3: [3, 4, 5] - * }; - * - * var b = { - * value1: 2, - * value2: 3, - * value3: [4, 5, 6] - * }; - * - * var c = kity.Utils.paralle(a, b, function(v1, v2) { - * return v1 + v2; - * }); - * - * console.log(c.value1); // 3 - * console.log(c.value2); // 5 - * console.log(c.value3); // [7, 9, 11] - * - * ``` - */ - paralle: function paralle(v1, v2, op) { - var Class, field, index, name, value; - // 数组 - if (v1 instanceof Array) { - value = []; - for (index = 0; index < v1.length; index++) { - value.push(utils.paralle(v1[index], v2[index], op)); - } - return value; - } - // 对象 - if (v1 instanceof Object) { - // 如果值是一个支持原始表示的实例,获取其原始表示 - Class = v1.getClass && v1.getClass(); - if (Class && Class.parse) { - v1 = v1.valueOf(); - v2 = v2.valueOf(); - value = utils.paralle(v1, v2, op); - value = Class.parse(value); - } else { - value = {}; - for (name in v1) { - if (v1.hasOwnProperty(name) && v2.hasOwnProperty(name)) { - value[name] = utils.paralle(v1[name], v2[name], op); - } - } - } - return value; - } - // 是否数字 - if (false === isNaN(parseFloat(v1))) { - return op(v1, v2); - } - return value; - }, - /** - * 创建 op 操作的一个平行化版本 - */ - parallelize: function parallelize(op) { - return function(v1, v2) { - return utils.paralle(v1, v2, op); - }; - } - }; - /** - * @method isString() - * @for kity.Utils - * @grammar isString(unknown) => {boolean} - * @description 判断一个值是否为字符串类型 - * @param {any} unknown 要判断的值 - */ - /** - * @method isFunction() - * @for kity.Utils - * @grammar isFunction(unknown) => {boolean} - * @description 判断一个值是否为函数类型 - * @param {any} unknown 要判断的值 - */ - /** - * @method isArray() - * @for kity.Utils - * @grammar isArray(unknown) => {boolean} - * @description 判断一个值是否为数组类型 - * @param {any} unknown 要判断的值 - */ - /** - * @method isNumber() - * @for kity.Utils - * @grammar isNumber(unknown) => {boolean} - * @description 判断一个值是否为数字类型 - * @param {any} unknown 要判断的值 - */ - /** - * @method isRegExp() - * @for kity.Utils - * @grammar isRegExp(unknown) => {boolean} - * @description 判断一个值是否为正则表达式类型 - * @param {any} unknown 要判断的值 - */ - /** - * @method isObject() - * @for kity.Utils - * @grammar isObject(unknown) => {boolean} - * @description 判断一个值是否为对象类型 - * @param {any} unknown 要判断的值 - */ - /** - * @method isBoolean() - * @for kity.Utils - * @grammar isBoolean(unknown) => {boolean} - * @description 判断一个值是否为布尔类型 - * @param {any} unknown 要判断的值 - */ - utils.each([ "String", "Function", "Array", "Number", "RegExp", "Object", "Boolean" ], function(v) { - utils["is" + v] = function typeCheck(obj) { - return Object.prototype.toString.apply(obj) == "[object " + v + "]"; - }; - }); - return utils; - } -}; - -//src/filter/effect/colormatrixeffect.js -/** - * 颜色矩阵运算效果封装 - */ -_p[13] = { - value: function(require, exports, module) { - var Effect = _p.r(16), Utils = _p.r(12); - var ColorMatrixEffect = _p.r(11).createClass("ColorMatrixEffect", { - base: Effect, - constructor: function(type, input) { - this.callBase(Effect.NAME_COLOR_MATRIX); - this.set("type", Utils.getValue(type, ColorMatrixEffect.TYPE_MATRIX)); - this.set("in", Utils.getValue(input, Effect.INPUT_SOURCE_GRAPHIC)); - } - }); - Utils.extend(ColorMatrixEffect, { - // 类型常量 - TYPE_MATRIX: "matrix", - TYPE_SATURATE: "saturate", - TYPE_HUE_ROTATE: "hueRotate", - TYPE_LUMINANCE_TO_ALPHA: "luminanceToAlpha", - // 矩阵常量 - MATRIX_ORIGINAL: "10000010000010000010".split("").join(" "), - MATRIX_EMPTY: "00000000000000000000".split("").join(" ") - }); - return ColorMatrixEffect; - } -}; - -//src/filter/effect/compositeeffect.js -/** - * 高斯模糊效果封装 - */ -_p[14] = { - value: function(require, exports, module) { - var Effect = _p.r(16), Utils = _p.r(12); - var CompositeEffect = _p.r(11).createClass("CompositeEffect", { - base: Effect, - constructor: function(operator, input, input2) { - this.callBase(Effect.NAME_COMPOSITE); - this.set("operator", Utils.getValue(operator, CompositeEffect.OPERATOR_OVER)); - if (input) { - this.set("in", input); - } - if (input2) { - this.set("in2", input2); - } - } - }); - Utils.extend(CompositeEffect, { - // operator 常量 - OPERATOR_OVER: "over", - OPERATOR_IN: "in", - OPERATOR_OUT: "out", - OPERATOR_ATOP: "atop", - OPERATOR_XOR: "xor", - OPERATOR_ARITHMETIC: "arithmetic" - }); - return CompositeEffect; - } -}; - -//src/filter/effect/convolvematrixeffect.js -/** - * 像素级别的矩阵卷积运算效果封装 - */ -_p[15] = { - value: function(require, exports, module) { - var Effect = _p.r(16), Utils = _p.r(12); - var ConvolveMatrixEffect = _p.r(11).createClass("ConvolveMatrixEffect", { - base: Effect, - constructor: function(edgeMode, input) { - this.callBase(Effect.NAME_CONVOLVE_MATRIX); - this.set("edgeMode", Utils.getValue(edgeMode, ConvolveMatrixEffect.MODE_DUPLICATE)); - this.set("in", Utils.getValue(input, Effect.INPUT_SOURCE_GRAPHIC)); - } - }); - Utils.extend(ConvolveMatrixEffect, { - MODE_DUPLICATE: "duplicate", - MODE_WRAP: "wrap", - MODE_NONE: "none" - }); - return ConvolveMatrixEffect; - } -}; - -//src/filter/effect/effect.js -/* - * 效果类 - * 该类型的对象不存储任何内部属性, 所有操作都是针对该类对象所维护的节点进行的 - */ -_p[16] = { - value: function(require, exports, module) { - var svg = _p.r(67), Effect = _p.r(11).createClass("Effect", { - constructor: function(type) { - this.node = svg.createNode(type); - }, - getId: function() { - return this.node.id; - }, - setId: function(id) { - this.node.id = id; - return this; - }, - set: function(key, value) { - this.node.setAttribute(key, value); - return this; - }, - get: function(key) { - return this.node.getAttribute(key); - }, - getNode: function() { - return this.node; - }, - // 返回该效果的result - toString: function() { - return this.node.getAttribute("result") || ""; - } - }); - _p.r(12).extend(Effect, { - // 特效名称常量 - NAME_GAUSSIAN_BLUR: "feGaussianBlur", - NAME_OFFSET: "feOffset", - NAME_COMPOSITE: "feComposite", - NAME_COLOR_MATRIX: "feColorMatrix", - NAME_CONVOLVE_MATRIX: "feConvolveMatrix", - // 输入常量 - INPUT_SOURCE_GRAPHIC: "SourceGraphic", - INPUT_SOURCE_ALPHA: "SourceAlpha", - INPUT_BACKGROUND_IMAGE: "BackgroundImage", - INPUT_BACKGROUND_ALPHA: "BackgroundAlpha", - INPUT_FILL_PAINT: "FillPaint", - INPUT_STROKE_PAINT: "StrokePaint" - }); - return Effect; - } -}; - -//src/filter/effect/gaussianblureffect.js -/** - * 高斯模糊效果封装 - */ -_p[17] = { - value: function(require, exports, module) { - var Effect = _p.r(16), Utils = _p.r(12); - return _p.r(11).createClass("GaussianblurEffect", { - base: Effect, - constructor: function(stdDeviation, input) { - this.callBase(Effect.NAME_GAUSSIAN_BLUR); - this.set("stdDeviation", Utils.getValue(stdDeviation, 1)); - this.set("in", Utils.getValue(input, Effect.INPUT_SOURCE_GRAPHIC)); - } - }); - } -}; - -//src/filter/effect/offseteffect.js -/** - * 偏移效果封装 - */ -_p[18] = { - value: function(require, exports, module) { - var Effect = _p.r(16), Utils = _p.r(12); - return _p.r(11).createClass("OffsetEffect", { - base: Effect, - constructor: function(dx, dy, input) { - this.callBase(Effect.NAME_OFFSET); - this.set("dx", Utils.getValue(dx, 0)); - this.set("dy", Utils.getValue(dy, 0)); - this.set("in", Utils.getValue(input, Effect.INPUT_SOURCE_GRAPHIC)); - } - }); - } -}; - -//src/filter/effectcontainer.js -/* - * Effect所用的container - */ -_p[19] = { - value: function(require) { - return _p.r(11).createClass("EffectContainer", { - base: _p.r(29), - addEffect: function(point, pos) { - return this.addItem.apply(this, arguments); - }, - prependEffect: function() { - return this.prependItem.apply(this, arguments); - }, - appendEffect: function() { - return this.appendItem.apply(this, arguments); - }, - removeEffect: function(pos) { - return this.removeItem.apply(this, arguments); - }, - addEffects: function() { - return this.addItems.apply(this, arguments); - }, - setEffects: function() { - return this.setItems.apply(this, arguments); - }, - getEffect: function() { - return this.getItem.apply(this, arguments); - }, - getEffects: function() { - return this.getItems.apply(this, arguments); - }, - getFirstEffect: function() { - return this.getFirstItem.apply(this, arguments); - }, - getLastEffect: function() { - return this.getLastItem.apply(this, arguments); - }, - handleAdd: function(effectItem, pos) { - var count = this.getEffects().length, nextEffectItem = this.getItem(pos + 1); - // 最后一个节点, 直接追加 - if (count === pos + 1) { - this.node.appendChild(effectItem.getNode()); - return; - } - this.node.insertBefore(effectItem.getNode(), nextEffectItem.getNode()); - } - }); - } -}; - -//src/filter/filter.js -/** - * Filter 基类 - */ -_p[20] = { - value: function(require, exports, module) { - var svg = _p.r(67); - var Class = _p.r(11); - var Filter = Class.createClass("Filter", { - mixins: [ _p.r(19) ], - constructor: function(x, y, width, height) { - this.node = svg.createNode("filter"); - if (x !== undefined) { - this.set("x", x); - } - if (y !== undefined) { - this.set("y", y); - } - if (width !== undefined) { - this.set("width", width); - } - if (height !== undefined) { - this.set("height", height); - } - }, - getId: function() { - return this.id; - }, - setId: function(id) { - this.node.id = id; - return this; - }, - set: function(key, value) { - this.node.setAttribute(key, value); - return this; - }, - get: function(key) { - return this.node.getAttribute(key); - }, - getNode: function() { - return this.node; - } - }); - var Shape = _p.r(60); - Class.extendClass(Shape, { - applyFilter: function(filter) { - var filterId = filter.get("id"); - if (filterId) { - this.node.setAttribute("filter", "url(#" + filterId + ")"); - } - return this; - } - }); - return Filter; - } -}; - -//src/filter/gaussianblurfilter.js -/* - * 高斯模糊滤镜 - */ -_p[21] = { - value: function(require, exports, module) { - var GaussianblurEffect = _p.r(17); - return _p.r(11).createClass("GaussianblurFilter", { - base: _p.r(20), - constructor: function(stdDeviation) { - this.callBase(); - this.addEffect(new GaussianblurEffect(stdDeviation)); - } - }); - } -}; - -//src/filter/projectionfilter.js -/* - * 投影滤镜 - */ -_p[22] = { - value: function(require, exports, module) { - var GaussianblurEffect = _p.r(17), Effect = _p.r(16), ColorMatrixEffect = _p.r(13), Color = _p.r(28), Utils = _p.r(12), CompositeEffect = _p.r(14), OffsetEffect = _p.r(18); - return _p.r(11).createClass("ProjectionFilter", { - base: _p.r(20), - constructor: function(stdDeviation, dx, dy) { - this.callBase(); - this.gaussianblurEffect = new GaussianblurEffect(stdDeviation, Effect.INPUT_SOURCE_ALPHA); - this.gaussianblurEffect.set("result", "gaussianblur"); - this.addEffect(this.gaussianblurEffect); - this.offsetEffect = new OffsetEffect(dx, dy, this.gaussianblurEffect); - this.offsetEffect.set("result", "offsetBlur"); - this.addEffect(this.offsetEffect); - this.colorMatrixEffect = new ColorMatrixEffect(ColorMatrixEffect.TYPE_MATRIX, this.offsetEffect); - this.colorMatrixEffect.set("values", ColorMatrixEffect.MATRIX_ORIGINAL); - this.colorMatrixEffect.set("result", "colorOffsetBlur"); - this.addEffect(this.colorMatrixEffect); - this.compositeEffect = new CompositeEffect(CompositeEffect.OPERATOR_OVER, Effect.INPUT_SOURCE_GRAPHIC, this.colorMatrixEffect); - this.addEffect(this.compositeEffect); - }, - // 设置投影颜色 - setColor: function(color) { - var matrix = null, originMatrix = null, colorValue = []; - if (Utils.isString(color)) { - color = Color.parse(color); - } - if (!color) { - return this; - } - matrix = ColorMatrixEffect.MATRIX_EMPTY.split(" "); - colorValue.push(color.get("r")); - colorValue.push(color.get("g")); - colorValue.push(color.get("b")); - // rgb 分量更改 - for (var i = 0, len = colorValue.length; i < len; i++) { - matrix[i * 5 + 3] = colorValue[i] / 255; - } - // alpha 分量更改 - matrix[18] = color.get("a"); - this.colorMatrixEffect.set("values", matrix.join(" ")); - return this; - }, - // 设置投影透明度 - setOpacity: function(opacity) { - var matrix = this.colorMatrixEffect.get("values").split(" "); - matrix[18] = opacity; - this.colorMatrixEffect.set("values", matrix.join(" ")); - return this; - }, - // 设置阴影偏移量 - setOffset: function(dx, dy) { - this.setOffsetX(dx); - this.setOffsetY(dy); - }, - setOffsetX: function(dx) { - this.offsetEffect.set("dx", dx); - }, - setOffsetY: function(dy) { - this.offsetEffect.set("dy", dy); - }, - setDeviation: function(deviation) { - this.gaussianblurEffect.set("stdDeviation", deviation); - } - }); - } -}; - -//src/graphic/bezier.js -/** - * @fileOverview - * - * 贝塞尔曲线 - */ -_p[23] = { - value: function(require, exports, module) { - /** - * @class kity.Bezier - * @mixins kity.PointContainer - * @base kity.Path - * @description 绘制和使用贝塞尔曲线。贝塞尔曲线作为一个贝塞尔点的容器,任何贝塞尔点的改变都会更改贝塞尔曲线的外观 - */ - return _p.r(11).createClass("Bezier", { - mixins: [ _p.r(51) ], - base: _p.r(46), - /** - * @constructor - * @for kity.Bezier - * - * @grammar new kity.Bezier(bezierPoints) - * - * @param {kity.BezierPoints[]} bezierPoints 贝塞尔点集合,每个元素应该是 {kity.BezierPoint} 类型 - * - * @example - * - * ```js - * var bezier = new kity.Bezier([ - * new kity.BezierPoint(0, 0).setForward(100, 0), - * new kity.BezierPoint(100, 100).setBackward(100, 0) - * ]); - * ``` - */ - constructor: function(bezierPoints) { - this.callBase(); - bezierPoints = bezierPoints || []; - this.changeable = true; - this.setBezierPoints(bezierPoints); - }, - /** - * @method getBezierPoints() - * @for kity.Bezier - * @description 返回当前贝塞尔曲线的贝塞尔点集合 - * - * @grammar getBezierPoints() => {kity.BezierPoints[]} - * - */ - getBezierPoints: function() { - return this.getPoints(); - }, - /** - * @method setBezierPoints() - * @for kity.Bezier - * @description 设置当前贝塞尔曲线的贝塞尔点集合 - * - * @grammar setBeizerPoints(bezierPoints) => {this} - * - * @param {kity.BezierPoint[]} bezierPoints 贝塞尔点集合 - */ - setBezierPoints: function(bezierPoints) { - return this.setPoints(bezierPoints); - }, - //当点集合发生变化时采取的动作 - onContainerChanged: function() { - if (this.changeable) { - this.update(); - } - }, - update: function() { - var drawer = null, bezierPoints = this.getBezierPoints(); - //单独的一个点不画任何图形 - if (bezierPoints.length < 2) { - return; - } - drawer = this.getDrawer(); - drawer.clear(); - var vertex = bezierPoints[0].getVertex(), forward = null, backward = null; - drawer.moveTo(vertex.x, vertex.y); - for (var i = 1, len = bezierPoints.length; i < len; i++) { - vertex = bezierPoints[i].getVertex(); - backward = bezierPoints[i].getBackward(); - forward = bezierPoints[i - 1].getForward(); - drawer.bezierTo(forward.x, forward.y, backward.x, backward.y, vertex.x, vertex.y); - } - return this; - } - }); - } -}; - -//src/graphic/bezierpoint.js -/** - * @fileOverview - * - * 表示一个贝塞尔点 - */ -_p[24] = { - value: function(require, exports, module) { - var ShapePoint = _p.r(63); - var Vector = _p.r(73); - /** - * @class kity.BezierPoint - * - * @description 表示一个贝塞尔点 - * 一个贝塞尔点由顶点坐标(曲线经过的点)、前方控制点、后方控制点表示 - */ - var BezierPoint = _p.r(11).createClass("BezierPoint", { - /** - * @constructor - * @for kity.BezierPoint - * - * @description 创建一个具有默认顶点坐标的贝塞尔点,两个控制点的坐标和顶点一致 - * - * @param {Number} x 顶点的 x 坐标 - * @param {Number} y 顶点的 y 坐标 - * @param {Boolean} isSmooth 指示当前贝塞尔点是否光滑,光滑会约束顶点和两个控制点共线 - */ - constructor: function(x, y, isSmooth) { - //顶点 - this.vertex = new ShapePoint(x, y); - //控制点 - this.forward = new ShapePoint(x, y); - this.backward = new ShapePoint(x, y); - //是否平滑 - this.setSmooth(isSmooth === undefined || isSmooth); - this.setSymReflaction(true); - }, - /** - * @method clone() - * @for kity.BezierPoint - * @description 返回贝塞尔点的一份拷贝 - * - * @grammar clone() => {kity.BezierPoint} - */ - clone: function() { - var newPoint = new BezierPoint(), tmp = null; - tmp = this.getVertex(); - newPoint.setVertex(tmp.x, tmp.y); - tmp = this.getForward(); - newPoint.setForward(tmp.x, tmp.y); - tmp = this.getBackward(); - newPoint.setBackward(tmp.x, tmp.y); - newPoint.setSymReflaction(this.isSymReflaction); - newPoint.setSmooth(this.isSmooth()); - return newPoint; - }, - /** - * @method setVertex() - * @for kity.BezierPoint - * @description 设置贝塞尔点的顶点坐标,注意,控制点的坐标不会跟着变化。希望控制点的坐标跟着变化,请用 moveTo() 方法 - * - * @grammar setVertex(x, y) => {this} - * - * @param {Number} x 顶点的 x 坐标 - * @param {Number} y 顶点的 y 坐标 - */ - setVertex: function(x, y) { - this.vertex.setPoint(x, y); - this.update(); - return this; - }, - /** - * @method moveTo() - * @for kity.BezierPoint - * @description 同步移动整个贝塞尔点,使顶点的移动到指定的坐标中。控制点的位置相对顶点坐标固定。 - * - * @grammar moveTo() => {this} - * - * @param {Number} x 顶点的目标 x 坐标 - * @param {Number} y 顶点的目标 y 坐标 - * - */ - moveTo: function(x, y) { - var oldForward = this.forward.getPoint(), oldBackward = this.backward.getPoint(), oldVertex = this.vertex.getPoint(), //移动距离 - distance = { - left: x - oldVertex.x, - top: y - oldVertex.y - }; - // 更新 - this.forward.setPoint(oldForward.x + distance.left, oldForward.y + distance.top); - this.backward.setPoint(oldBackward.x + distance.left, oldBackward.y + distance.top); - this.vertex.setPoint(x, y); - this.update(); - }, - /** - * @method setForward() - * @for kity.BezierPoint - * @description 设置前方控制点的位置,如果贝塞尔点光滑,后方控制点会跟着联动 - * - * @grammar setForward(x, y) => {this} - * - * @param {Number} x 前方控制点的 x 坐标 - * @param {Number} y 前方控制点的 y 坐标 - */ - setForward: function(x, y) { - this.forward.setPoint(x, y); - //更新后置点 - if (this.smooth) { - this.updateAnother(this.forward, this.backward); - } - this.update(); - this.lastControlPointSet = this.forward; - return this; - }, - /** - * @method setBackward() - * @for kity.BezierPoint - * @description 设置后方控制点的位置,如果贝塞尔点光滑,前方控制点会跟着联动 - * - * @grammar setBackward(x, y) => {this} - * - * @param {Number} x 后方控制点的 x 坐标 - * @param {Number} y 后方控制点的 y 坐标 - */ - setBackward: function(x, y) { - this.backward.setPoint(x, y); - //更新前置点 - if (this.smooth) { - this.updateAnother(this.backward, this.forward); - } - this.update(); - this.lastControlPointSet = this.backward; - return this; - }, - /** - * @method setSymReflaction() - * @for kity.BezierPoint - * @description 设定是否镜像两个控制点的位置 - * - * @grammar setSymReflaction(value) => {this} - * - * @param {boolean} value 如果设置为 true,且贝塞尔点光滑,两个控制点离顶点的距离相等 - */ - setSymReflaction: function(value) { - this.symReflaction = value; - if (this.smooth) this.setSmooth(true); - return this; - }, - /** - * @method isSymReflaction() - * @for kity.BezierPoint - * @description 当前贝塞尔点的两个控制点是否被镜像约束 - * - * @grammar isSymReflaction() => {boolean} - */ - isSymReflaction: function() { - return this.symReflaction; - }, - /** - * @private - * - * 根据前方控制点或后方控制点更新另一方 - */ - updateAnother: function(p, q) { - var v = this.getVertex(), pv = Vector.fromPoints(p.getPoint(), v), vq = Vector.fromPoints(v, q.getPoint()); - vq = pv.normalize(this.isSymReflaction() ? pv.length() : vq.length()); - q.setPoint(v.x + vq.x, v.y + vq.y); - return this; - }, - /** - * @method setSmooth() - * @for kity.BezierPoint - * @description 设置贝塞尔点是否光滑,光滑会约束顶点和两个控制点共线 - * - * @param {Boolean} isSmooth 设置为 true 让贝塞尔点光滑 - */ - setSmooth: function(isSmooth) { - var lc; - this.smooth = !!isSmooth; - if (this.smooth && (lc = this.lastControlPointSet)) { - this.updateAnother(lc, lc == this.forward ? this.backward : this.forward); - } - return this; - }, - /** - * @method isSmooth() - * @for kity.BezierPoint - * @description 判断贝塞尔点是否光滑 - * - * @grammar isSmooth() => {boolean} - */ - isSmooth: function() { - return this.smooth; - }, - /** - * @method getVertex() - * @for kity.BezierPoint - * @description 获得当前贝塞尔点的顶点 - * - * @grammar getVertex() => {kity.ShapePoint} - */ - getVertex: function() { - return this.vertex.getPoint(); - }, - /** - * @method getForward() - * @for kity.BezierPoint - * @description 获得当前贝塞尔点的前方控制点 - * - * @grammar getForward() => {kity.ShapePoint} - */ - getForward: function() { - return this.forward.getPoint(); - }, - /** - * @method getBackward() - * @for kity.BezierPoint - * @description 获得当前贝塞尔点的后方控制点 - * - * @grammar getBackward() => {kity.ShapePoint} - */ - getBackward: function() { - return this.backward.getPoint(); - }, - /** - * @private - * - * 联动更新相关的贝塞尔曲线 - */ - update: function() { - if (!this.container) { - return this; - } - //新增参数 this, 把当前引起变化的点传递过去, 以便有需要的地方可以获取到引起变化的源 - if (this.container.update) this.container.update(this); - } - }); - return BezierPoint; - } -}; - -//src/graphic/box.js -/** - * @fileOverview - * - * 表示一个矩形区域 - */ -_p[25] = { - value: function(require, exports, module) { - /** - * @class kity.Box - * @description 表示一个矩形区域 - */ - var Box = _p.r(11).createClass("Box", { - /** - * @constructor - * @for kity.Box - * - * @grammar new kity.Box(x, y, width, height) - * @grammar new kity.Box(box) - * - * @param {Number} x|box.x 矩形区域的 x 坐标 - * @param {Number} y|box.y 矩形区域的 y 坐标 - * @param {Number} width|box.width 矩形区域的宽度 - * @param {Number} height|box.height 矩形区域的高度 - * - * @example - * - * ```js - * var box = new kity.Box(10, 20, 50, 50); - * var box2 = new kity.Box({x: 10, y: 20, width: 50, height: 50}); - * ``` - */ - constructor: function(x, y, width, height) { - var box = arguments[0]; - if (box && typeof box === "object") { - x = box.x; - y = box.y; - width = box.width; - height = box.height; - } - if (width < 0) { - x -= width = -width; - } - if (height < 0) { - y -= height = -height; - } - /** - * @property x - * @for kity.Box - * @type {Number} - * @readOnly - * @description 矩形区域的 x 坐标 - */ - this.x = x || 0; - /** - * @property y - * @for kity.Box - * @type {Number} - * @readOnly - * @description 矩形区域的 y 坐标 - */ - this.y = y || 0; - /** - * @property width - * @for kity.Box - * @type {Number} - * @readOnly - * @description 矩形区域的宽度 - */ - this.width = width || 0; - /** - * @property height - * @for kity.Box - * @type {Number} - * @readOnly - * @description 矩形区域的高度 - */ - this.height = height || 0; - /** - * @property left - * @for kity.Box - * @type {Number} - * @readOnly - * @description 矩形区域的最左侧坐标,等价于 x 的值 - */ - this.left = this.x; - /** - * @property right - * @for kity.Box - * @type {Number} - * @readOnly - * @description 矩形区域的最右侧坐标,等价于 x + width 的值 - */ - this.right = this.x + this.width; - /** - * @property top - * @for kity.Box - * @type {Number} - * @readOnly - * @description 矩形区域的最上侧坐标,等价于 y 的值 - */ - this.top = this.y; - /** - * @property bottom - * @for kity.Box - * @type {Number} - * @readOnly - * @description 矩形区域的最下侧坐标,等价于 y + height 的值 - */ - this.bottom = this.y + this.height; - /** - * @property cx - * @for kity.Box - * @type {Number} - * @readOnly - * @description 矩形区域的中心 x 坐标 - */ - this.cx = this.x + this.width / 2; - /** - * @property cy - * @for kity.Box - * @type {Number} - * @readOnly - * @description 矩形区域的中心 y 坐标 - */ - this.cy = this.y + this.height / 2; - }, - /** - * @method getRangeX() - * @for kity.Box - * @description 获得矩形区域的 x 值域 - * - * @grammar getRangeX() => {Number[]} - * - * @example - * - * var box = new kity.Box(10, 10, 30, 50); - * console.log(box.getRangeX()); // [10, 40] - */ - getRangeX: function() { - return [ this.left, this.right ]; - }, - /** - * @method getRangeY() - * @for kity.Box - * @description 获得矩形区域的 y 值域 - * - * @grammar getRangeY() => {Number[]} - * - * @example - * - * var box = new kity.Box(10, 10, 30, 50); - * console.log(box.getRangeY()); // [10, 60] - */ - getRangeY: function() { - return [ this.top, this.bottom ]; - }, - /** - * @method merge() - * @for kity.Box - * @description 把当前矩形区域和指定的矩形区域合并,返回一个新的矩形区域(即包含两个源矩形区域的最小矩形区域) - * - * @grammar merge(another) => {kity.Box} - * @param {kity.Box} another 要合并的矩形区域 - * - * @example - * - * ```js - * var box1 = new kity.Box(10, 10, 50, 50); - * var box2 = new kity.Box(30, 30, 50, 50); - * var box3 = box1.merge(box2); - * console.log(box3.valueOf()); // [10, 10, 70, 70] - * ``` - */ - merge: function(another) { - if (this.isEmpty()) { - return new Box(another.x, another.y, another.width, another.height); - } - var left = Math.min(this.left, another.left), right = Math.max(this.right, another.right), top = Math.min(this.top, another.top), bottom = Math.max(this.bottom, another.bottom); - return new Box(left, top, right - left, bottom - top); - }, - /** - * @method intersect() - * @for kity.Box - * @description 求当前矩形区域和指定的矩形区域重叠的矩形区域 - * - * @grammar intersect(another) => {kity.Box} - * @param {kity.Box} another 要求重叠的矩形区域 - * - * @example - * - * ```js - * var box1 = new kity.Box(10, 10, 50, 50); - * var box2 = new kity.Box(30, 30, 50, 50); - * var box3 = box1.intersect(box2); - * console.log(box3.valueOf()); // [30, 30, 20, 20] - * ``` - */ - intersect: function(another) { - if (!another instanceof Box) { - another = new Box(another); - } - var left = Math.max(this.left, another.left), right = Math.min(this.right, another.right), top = Math.max(this.top, another.top), bottom = Math.min(this.bottom, another.bottom); - if (left > right || top > bottom) return new Box(); - return new Box(left, top, right - left, bottom - top); - }, - /** - * @method expand() - * @for kity.Box - * @description 扩展(或收缩)当前的盒子,返回新的盒子 - * - * @param {Number} top - * 矩形区域的上边界往上扩展的值;如果是负数,则上边界往下收缩 - * - * @param {Number} right - * [Optional] 矩形区域的右边界往右拓展的值; - * 如果是负数,则右边界往左收缩; - * 如果不设置该值,使用和 top 同样的值。 - * - * @param {Number} bottom - * [Optional] 矩形区域的下边界往下拓展的值; - * 如果是负数,则下边界往上收缩; - * 如果不设置该值,使用和 top 同样的值。 - * - * @param {Number} left - * [Optional] 矩形区域的左边界往左拓展的值; - * 如果是负数,则左边界往右收缩; - * 如果不设置该值,使用和 right 同样的值。 - * - * @example - * - * ```js - * var box = new kity.Box(10, 10, 20, 20); - * var box1 = box.expand(10); // [0, 0, 40, 40] - * var box2 = box.expand(10, 20); // [0, -10, 40, 60] - * var box3 = box.expand(1, 2, 3, 4); // [9, 8, 24, 26] - * ``` - */ - expand: function(top, right, bottom, left) { - if (arguments.length < 1) { - return new Box(this); - } - if (arguments.length < 2) { - right = top; - } - if (arguments.length < 3) { - bottom = top; - } - if (arguments.length < 4) { - left = right; - } - var x = this.left - left, y = this.top - top, width = this.width + right, height = this.height + top; - return new Box(x, y, width, height); - }, - /** - * @method valueOf() - * @for kity.Box - * @description 返回当前盒子的数组表示 - * - * @grammar valueOf() => {Number[]} - * - * @example - * - * ```js - * var box = new kity.Box(0, 0, 200, 50); - * console.log(box.valueOf()); // [0, 0, 200, 50] - * ``` - */ - valueOf: function() { - return [ this.x, this.y, this.width, this.height ]; - }, - /** - * @method toString() - * @for kity.Box - * @description 返回当前盒子的字符串表示 - * - * @grammar toString() => {String} - * - * @example - * - * ```js - * var box = new kity.Box(0, 0, 200, 50); - * console.log(box.toString()); // "0 0 200 50" - */ - toString: function() { - return this.valueOf().join(" "); - }, - /** - * @method isEmpty() - * @for kity.Box - * @description 判断当前盒子是否具有尺寸(面积大 - * - * @grammar isEmpty() => {boolean} - * - * @example - * ```js - * var box = new kity.Box(0, 0, 0, 100000); - * console.log(box.isEmpty()); // true - * ``` - */ - isEmpty: function() { - return !this.width || !this.height; - } - }); - /** - * @method parse() - * @static - * @for kity.Box - * @description 解析一个字符串或数组为 kity.Box 对象 - * - * @grammar kity.Box.parse(any) => {kity.Box} - * - * @param {Number[]|String} any 要解析的字符串或数组 - * - * @example - * - * ```js - * console.log(kity.Box.parse('0 0 100 200')); - * console.log(kity.Box.parse([0, 0, 100, 200])); - * ``` - */ - Box.parse = function(any) { - if (typeof any == "string") { - return Box.parse(any.split(/[\s,]+/).map(parseFloat)); - } - if (any instanceof Array) { - return new Box(any[0], any[1], any[2], any[3]); - } - if ("x" in any) return new Box(any); - return null; - }; - return Box; - } -}; - -//src/graphic/circle.js -/** - * @fileOverview - * - * 绘制和使用圆形 - */ -_p[26] = { - value: function(require, exports, module) { - /** - * @class kity.Circle - * @base kity.Ellipse - * @description 表示一个圆形 - */ - return _p.r(11).createClass("Circle", { - base: _p.r(32), - /** - * @constructor - * @for kity.Circle - * - * @grammar new kity.Circle(radius, cx, cy) - * - * @param {Number} radius 半径 - * @param {Number} cx 圆心 x 坐标 - * @param {Number} cy 圆心 y 坐标 - */ - constructor: function(radius, cx, cy) { - this.callBase(radius, radius, cx, cy); - }, - /** - * @method - * @for kity.Circle - * @description 获取圆形的半径 - * - * @grammar getRadius() => {Number} - */ - getRadius: function() { - return this.getRadiusX(); - }, - /** - * @method - * @for kity.Circle - * @description 设置圆形的半径 - * - * @grammar setRadius() => {this} - * - * @param {Number} radius 半径大小 - */ - setRadius: function(radius) { - return this.callBase(radius, radius); - } - }); - } -}; - -//src/graphic/clip.js -/** - * @fileOverview - * - * 支持图形裁切 - */ -_p[27] = { - value: function(require, exports, module) { - var Class = _p.r(11); - var Shape = _p.r(60); - /** - * @class kity.Clip - * @base kity.Resource - * @mixins kity.ShapeContainer - * - * @description 创建图形裁切,用于裁切目标图形 - */ - var Clip = Class.createClass("Clip", { - base: Shape, - mixins: [ _p.r(61) ], - /** - * @constructor - * @for kity.Clip - * - * @grammar new kity.Clip(paper) - * - * @param {kity.Paper} paper 资源所属的文档 - * - * @example - * - * ```js - * var circle = paper.put(new kity.Circle(100).fill('yellow')); - * var clip = new kity.Clip(paper); - * clip.addShape(new kity.Circle(100, 50, 0)); - * clip.clip(circle); - * ``` - */ - constructor: function(paper) { - this.callBase("clipPath", paper); - }, - /** - * @method clip() - * @for kity.Clip - * @description 将裁切应用到指定的图形上,应用之后,目标图形将显示与裁切形状重合的部分 - * - * @grammar clip(shape) => {this} - * - * @param {kity.Shape} shape 要应用裁切的图形 - */ - clip: function(shape) { - shape.getNode().setAttribute("clip-path", this); - return this; - } - }); - Class.extendClass(Shape, { - /** - * @method clipWidth() - * @for kity.Shape - * - * @grammar clipWidth(clip) => {this} - * - * @param {kity.Clip|kity.Shape} clip 要用于裁切当前图形的图形; - * 如果 clip 本身是一个裁切对象(kity.Clip 类型),则直接裁切; - * 否则将创建新的裁切包含给定的图形,然后对当前图形进行裁切 - * - * @example - * - * ```js - * var circle = paper.put(new kity.Circle(100)); - * var rect = paper.put(new kity.Rect(100, 100, -100, 0)); - * - * circle.clipWidth(rect); - * ``` - */ - clipWith: function(clip) { - if (clip instanceof Shape) { - clip = new Clip(clip.getPaper()).addShape(clip); - } - clip.clip(this); - return this; - } - }); - return Clip; - } -}; - -//src/graphic/color.js -/** - * @fileOverview - * - * 提供颜色支持 - */ -_p[28] = { - value: function(require, exports, module) { - var Utils = _p.r(12), StandardColor = _p.r(64), ColorUtils = {}, /** - * @class kity.Color - * @description 表示一个颜色 - */ - Color = _p.r(11).createClass("Color", { - /** - * @constructor - * @for kity.Color - * - * @grammar new kity.Color(r, g, b) - * @grammar new kity.Color(r, g, b, a) - * @grammar new kity.Color(colorString) - * - * @param {Number} r 红色分量,取值 0 - 255 - * @param {Number} g 绿色分量,取值 0 - 255 - * @param {Number} b 蓝色分量,取值 0 - 255 - * @param {Number} a 透明度(可选),取值 0 - 100 - * @param {String} colorString 一个代表颜色的字符串,可以是: - * 熟知颜色表:如 'red', 'yellow' - * HEX 表示:如 '#368', '#123456' - * RGB 表示:如 'RGB(200, 200, 0)', 'RGBA(200, 200, 200, .5)' - * HSL 表示:如 'HSL(100, 60%, 80%)', 'HSLA(100, 60%, 80%, .5)' - */ - constructor: function() { - var colorValue = null; - //parse构造 - if (typeof arguments[0] === "string") { - colorValue = ColorUtils.parseToValue(arguments[0]); - //解析失败 - if (colorValue === null) { - colorValue = { - r: 0, - g: 0, - b: 0, - h: 0, - s: 0, - l: 0, - a: 1 - }; - } - } else { - colorValue = { - r: arguments[0] | 0, - g: arguments[1] | 0, - b: arguments[2] | 0, - //alpha 默认为1 - a: arguments[3] === undefined ? 1 : parseFloat(arguments[3]) - }; - colorValue = ColorUtils.overflowFormat(colorValue); - //获取hsl分量 - colorValue = Utils.extend(colorValue, ColorUtils.rgbValueToHslValue(colorValue)); - } - this._color = colorValue; - }, - /** - * @method set() - * @for kity.Color - * - * @description 设置当前颜色某个分量的值 - * - * @grammar set(name, value) => {this} - * - * @param {string} name 要设置的颜色通道的名称 - * r: 红色(Red),取值范围 [0, 255] - * g: 绿色(Green),取值范围 [0, 255] - * b: 蓝色(Blue),取值范围 [0, 255] - * a: 透明度(Alpha),取值范围 [0, 1] - * h: 色环角度(Hue),取值范围 [0, 359] - * s: 饱和度(Saturation),取值范围 [0, 100] - * l: 亮度(Lightness),取值范围 [0, 100] - * r、g、b 值和 h、s、l 值会联动修改 - * @param {number} value 要设置的值 - */ - set: function(name, value) { - var values = null; - //设置的值非法 - if (!Color._MAX_VALUE[name]) { - throw new Error("Color set(): Illegal parameter"); - } - if (name !== "a") { - value = Math.floor(value); - } - if (name == "h") { - value = (value + 360) % 360; - } - this._color[name] = Math.max(Color._MIN_VALUE[name], Math.min(Color._MAX_VALUE[name], value)); - if ("rgb".indexOf(name) !== -1) { - this._color = Utils.extend(this._color, ColorUtils.rgbValueToHslValue(this._color)); - } else if ("hsl".indexOf(name) !== -1) { - this._color = Utils.extend(this._color, ColorUtils.hslValueToRGBValue(this._color)); - } - return this; - }, - /** - * @method inc() - * - * @description 返回新的颜色,表示当前颜色增加指定通道的值之后的颜色 - * - * @grammar inc(name, value) => {this} - * - * @param {string} name 要增加的通道的名称,具体含义请查看 set 方法 - * @param {number} value 增量值 - */ - inc: function(name, value) { - value = this.get(name) + value; - if (name == "h") { - value = (value + 360) % 360; - } else { - value = Math.min(Color._MAX_VALUE[name], value); - value = Math.max(Color._MIN_VALUE[name], value); - } - return this.clone().set(name, value); - }, - /** - * @method dec() - * @for kity.Color - * - * @description 返回新的颜色,表示当前颜色减少指定通道的值之后的颜色 - * - * @grammar dec(name, value) => {this} - * - * @param {string} name 要减少值的通道的名称,具体含义请查看 set 方法 - * @param {number} value 减量值 - */ - dec: function(name, value) { - return this.inc(name, -value); - }, - /** - * @method clone() - * @for kity.Color - * - * @description 返回当前颜色的一个拷贝 - * - * @grammar clone() => {kity.Color} - */ - clone: function() { - return new Color(this.toRGBA()); - }, - /** - * @method get() - * @for kity.Color - * - * @description 返回当前颜色指定的分量 - * - * @grammar get() => {number} - */ - get: function(name) { - if (!Color._MAX_VALUE[name]) { - return null; - } - return this._color[name]; - }, - getValues: function() { - return Utils.clone(this._color); - }, - /** - * @method valueOf() - * @for kity.Color - * - * @description 返回当前颜色的一个字面量表示 - * - * @return {plain} 颜色字面量,其结构为: - * { - * r: 0, - * g: 0, - * b: 0, - * a: 0, - * h: 0, - * s: 0, - * l: 0 - * } - */ - valueOf: function() { - return this.getValues(); - }, - /** - * @method toRGB() - * @for kity.Color - * - * @description 返回当前颜色的 RGB 表示,如果颜色有透明度,将抛弃透明度属性(想要保留请使用 toRGBA())方法。 - * - * @grammar toRGB() => {string} - */ - toRGB: function() { - return ColorUtils.toString(this._color, "rgb"); - }, - /** - * @method toRGBA() - * @for kity.Color - * - * @description 返回当前颜色的 RGBA 表示 - * - * @grammar toRGBA() => {string} - */ - toRGBA: function() { - return ColorUtils.toString(this._color, "rgba"); - }, - /** - * @method toHEX() - * @for kity.Color - * - * @description 返回当前颜色的 HEX 表示,如果颜色有透明度,将抛弃透明度属性(想要保留请使用 toRGBA())方法。 - * - * @grammar toHEX() => {string} - */ - toHEX: function() { - return ColorUtils.toString(this._color, "hex"); - }, - /** - * @method toHSL() - * @for kity.Color - * - * @description 返回当前颜色的 HSL 表示,如果颜色有透明度,将抛弃透明度属性(想要保留请使用 toHSLA())方法。 - * - * @grammar toHSL() => {string} - */ - toHSL: function() { - return ColorUtils.toString(this._color, "hsl"); - }, - /** - * @method toHSLA() - * @for kity.Color - * - * @description 返回当前颜色的 HSLA 表示 - * - * @grammar toHSLA() => {string} - */ - toHSLA: function() { - return ColorUtils.toString(this._color, "hsla"); - }, - /** - * @method toString() - * @for kity.Color - * - * @description 返回当前颜色的 RGB 或 RGBA 表示,如果颜色有透明度,将使用 RGBA 形式,否则是 RGB 形式 - * @grammar toString() => {string} - */ - toString: function() { - if (this._color.a === 1) { - return this.toRGB(); - } - return this.toRGBA(); - } - }); - //Color 静态方法 - Utils.extend(Color, { - //各分量可表示的最大值 - _MAX_VALUE: { - r: 255, - g: 255, - b: 255, - h: 360, - s: 100, - l: 100, - a: 1 - }, - //各分量最小值 - _MIN_VALUE: { - r: 0, - g: 0, - b: 0, - h: 0, - s: 0, - l: 0, - a: 0 - }, - //分量常量 - R: "r", - G: "g", - B: "b", - H: "h", - S: "s", - L: "l", - A: "a", - /** - * @method parse() - * @static - * @for kity.Color - * - * @description 解析一个颜色字符串为 kity.Color 对象 - * - * @grammar kity.Color.parse(valStr) - * - * @param {string} valStr 一个代表颜色的字符串,可以是: - * 熟知颜色表:如 'red', 'yellow' - * HEX 表示:如 '#368', '#123456' - * RGB 表示:如 'RGB(200, 200, 0)', 'RGBA(200, 200, 200, .5)' - * HSL 表示:如 'HSL(100, 60%, 80%)', 'HSLA(100, 60%, 80%, .5)' - */ - parse: function(valStr) { - var rgbValue; - if (Utils.isString(valStr)) { - rgbValue = ColorUtils.parseToValue(valStr); - } - if (Utils.isObject(valStr) && "r" in valStr) { - rgbValue = valStr; - } - //解析失败, 返回一个默认color实例 - if (rgbValue === null) { - return new Color(); - } - return new Color(rgbValue.r, rgbValue.g, rgbValue.b, rgbValue.a); - }, - /** - * @method createHSL() - * @for kity.Color - * @static - * - * @description 创建一个 HSL 颜色 - * - * @grammar kity.Color.createHSL(h, s, l) => {kity.Color} - * - * @param {number} h 色环(Hue)分量值,取值范围 [0, 359] - * @param {number} s 饱和度(Saturation)分量值,取值范围 [0, 100] - * @param {number} l 亮度(Lighteness)分量值,取值范围 [0, 100] - */ - createHSL: function(h, s, l) { - return Color.createHSLA(h, s, l, 1); - }, - /** - * @method createHSLA() - * @for kity.Color - * @static - * - * @description 创建一个 HSLA 颜色 - * - * @grammar kity.Color.createHSLA(h, s, l, a) => {kity.Color} - * - * @param {number} h 色环(Hue)分量值,取值范围 [0, 359] - * @param {number} s 饱和度(Saturation)分量值,取值范围 [0, 100] - * @param {number} l 亮度(Lighteness)分量值,取值范围 [0, 100] - * @param {number} a 透明度(Alpha)分量值,取值范围 [0, 1] - */ - createHSLA: function(h, s, l, a) { - var colorValue = null; - s += "%"; - l += "%"; - colorValue = [ "hsla(" + h, s, l, a + ")" ]; - return Color.parse(colorValue.join(", ")); - }, - /** - * @method createRGB() - * @for kity.Color - * @static - * - * @description 创建一个 RGB 颜色 - * - * @grammar kity.Color.createRGB(r, g, b) => {kity.Color} - * - * @param {number} r 红色(Red)分量值,取值范围 [0, 255] - * @param {number} g 绿色(Green)分量值,取值范围 [0, 255] - * @param {number} b 蓝色(Blue)分量值,取值范围 [0, 255] - */ - createRGB: function(r, g, b) { - return Color.createRGBA(r, g, b, 1); - }, - /** - * @method createRGBA() - * @for kity.Color - * @static - * - * @description 创建一个 RGBA 颜色 - * - * @grammar kity.Color.createRGBA(r, g, b, a) => {kity.Color} - * - * @param {number} r 红色(Red)分量值,取值范围 [0, 255] - * @param {number} g 绿色(Green)分量值,取值范围 [0, 255] - * @param {number} b 蓝色(Blue)分量值,取值范围 [0, 255] - * @param {number} a 透明度(Alpha)分量值,取值范围 [0, 1] - */ - createRGBA: function(r, g, b, a) { - return new Color(r, g, b, a); - } - }); - //内部工具对象 - Utils.extend(ColorUtils, { - parseToValue: function(valStr) { - var rgbaValue = {}; - /* 优先检测在调色板中是否有对应的颜色 */ - valStr = StandardColor.EXTEND_STANDARD[valStr] || StandardColor.COLOR_STANDARD[valStr] || valStr; - /* 颜色转换 */ - //hex格式 - if (/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(valStr)) { - rgbaValue = ColorUtils.hexToValue(valStr); - } else if (/^(rgba?)/i.test(valStr)) { - rgbaValue = ColorUtils.rgbaToValue(valStr); - } else if (/^(hsla?)/i.test(valStr)) { - rgbaValue = ColorUtils.hslaToValue(valStr); - } else { - return null; - } - return ColorUtils.overflowFormat(rgbaValue); - }, - hexToValue: function(hexStr) { - var result = {}, keys = [ "r", "g", "b" ]; - if (/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(hexStr)) { - hexStr = RegExp.$1.split(""); - Utils.each(keys, function(key, index) { - if (hexStr.length === 3) { - result[key] = ColorUtils.toNumber(hexStr[index] + hexStr[index]); - } else { - result[key] = ColorUtils.toNumber(hexStr[index * 2] + hexStr[index * 2 + 1]); - } - }); - //转换出hsl值 - result = Utils.extend(result, ColorUtils.rgbValueToHslValue(result)); - result.a = 1; - return result; - } - return null; - }, - rgbaToValue: function(rgbaStr) { - var result = {}, hasAlpha = false, keys = [ "r", "g", "b" ]; - if (/^(rgba?)/i.test(rgbaStr)) { - hasAlpha = RegExp.$1.length === 4; - rgbaStr = rgbaStr.replace(/^rgba?/i, "").replace(/\s+/g, "").replace(/[^0-9,.]/g, "").split(","); - Utils.each(keys, function(key, index) { - result[key] = rgbaStr[index] | 0; - }); - //转换出hsl值 - result = Utils.extend(result, ColorUtils.rgbValueToHslValue(result)); - result.a = hasAlpha ? parseFloat(rgbaStr[3]) : 1; - return result; - } - return null; - }, - hslaToValue: function(hslaStr) { - var result = {}, hasAlpha = false; - if (/^(hsla?)/i.test(hslaStr)) { - hasAlpha = RegExp.$1.length === 4; - hslaStr = hslaStr.replace(/^hsla?/i, "").replace(/\s+/g, "").replace(/[^0-9,.]/g, "").split(","); - //记录hsl值 - result.h = hslaStr[0] | 0; - result.s = hslaStr[1] | 0; - result.l = hslaStr[2] | 0; - //转换出rgb值 - result = Utils.extend(result, ColorUtils.hslValueToRGBValue(result)); - //hsl值转换为rgb值 - result = ColorUtils.hslValueToRGBValue(result); - result.a = hasAlpha ? parseFloat(hslaStr[3]) : 1; - return result; - } - return null; - }, - //hsl值对象转换为rgb值对象 - hslValueToRGBValue: function(hslValue) { - function trans(v1, v2, vH) { - if (vH < 0) { - vH += 1; - } else if (vH > 1) { - vH -= 1; - } - if (6 * vH < 1) { - return v1 + (v2 - v1) * 6 * vH; - } else if (2 * vH < 1) { - return v2; - } else if (3 * vH < 2) { - return v1 + (v2 - v1) * ((2 / 3 - vH) * 6); - } - return v1; - } - var q = null, p = null, result = {}; - hslValue = Utils.extend({}, hslValue); - hslValue.h = hslValue.h / 360; - hslValue.s = hslValue.s / 100; - hslValue.l = hslValue.l / 100; - //分量计算 - if (hslValue.s === 0) { - result.r = result.g = result.b = hslValue.l; - } else { - if (hslValue.l < .5) { - q = hslValue.l * (1 + hslValue.s); - } else { - q = hslValue.l + hslValue.s - hslValue.l * hslValue.s; - } - p = 2 * hslValue.l - q; - result.r = trans(p, q, hslValue.h + 1 / 3); - result.g = trans(p, q, hslValue.h); - result.b = trans(p, q, hslValue.h - 1 / 3); - } - result.r = Math.min(Math.round(result.r * 255), 255); - result.g = Math.min(Math.round(result.g * 255), 255); - result.b = Math.min(Math.round(result.b * 255), 255); - return result; - }, - //rgb值对象转换为hsl值对象 - rgbValueToHslValue: function(rgbValue) { - var max = null, min = null, result = {}; - rgbValue = Utils.extend({}, rgbValue); - rgbValue.r = rgbValue.r / 255; - rgbValue.g = rgbValue.g / 255; - rgbValue.b = rgbValue.b / 255; - max = Math.max(rgbValue.r, rgbValue.g, rgbValue.b); - min = Math.min(rgbValue.r, rgbValue.g, rgbValue.b); - //h分量计算 - if (max === min) { - result.h = 0; - } else if (max === rgbValue.r) { - if (rgbValue.g >= rgbValue.b) { - result.h = 60 * (rgbValue.g - rgbValue.b) / (max - min); - } else { - result.h = 60 * (rgbValue.g - rgbValue.b) / (max - min) + 360; - } - } else if (max === rgbValue.g) { - result.h = 60 * (rgbValue.b - rgbValue.r) / (max - min) + 120; - } else if (max === rgbValue.b) { - result.h = 60 * (rgbValue.r - rgbValue.g) / (max - min) + 240; - } - //l分量计算 - result.l = (max + min) / 2; - //s分量计算 - if (result.l === 0 || max === min) { - result.s = 0; - } else if (result.l > 0 && result.l <= .5) { - result.s = (max - min) / (max + min); - } else { - result.s = (max - min) / (2 - max - min); - } - //格式化hsl结果 - result.h = Math.round(result.h); - result.s = Math.round(result.s * 100); - result.l = Math.round(result.l * 100); - return result; - }, - toString: function(colorValue, type) { - var vals = []; - colorValue = Utils.extend({}, colorValue); - if (type.indexOf("hsl") !== -1) { - colorValue.s += "%"; - colorValue.l += "%"; - } - if (type !== "hex") { - Utils.each(type.split(""), function(key) { - vals.push(colorValue[key]); - }); - return (type + "(" + vals.join(", ") + ")").toLowerCase(); - } else { - vals.push(ColorUtils.toHexValue(+colorValue.r)); - vals.push(ColorUtils.toHexValue(+colorValue.g)); - vals.push(ColorUtils.toHexValue(+colorValue.b)); - return ("#" + vals.join("")).toLowerCase(); - } - }, - //16进制的2个数字转化为10进制, 如果转化失败, 返回0 - toNumber: function(value) { - return Number("0x" + value) | 0; - }, - toHexValue: function(value) { - var result = value.toString(16); - return result.length === 1 ? "0" + result : result; - }, - //溢出控制 - overflowFormat: function(value) { - var tmpValue = Utils.extend({}, value), keys = "rgba"; - Utils.each(keys.split(""), function(key) { - if (!tmpValue.hasOwnProperty(key)) { - return; - } - //上溢出 - tmpValue[key] = Math.min(Color._MAX_VALUE[key], tmpValue[key]); - //下溢出 - tmpValue[key] = Math.max(Color._MIN_VALUE[key], tmpValue[key]); - }); - return tmpValue; - } - }); - return Color; - } -}; - -//src/graphic/container.js -_p[29] = { - value: function(require, exports, module) { - function itemRemove() { - this.container.removeItem(this); - return this; - } - return _p.r(11).createClass("Container", { - getItems: function() { - return this.items || (this.items = []); - }, - getItem: function(index) { - return this.getItems()[index]; - }, - getFirstItem: function() { - return this.getItem(0); - }, - getLastItem: function() { - return this.getItem(this.getItems().length - 1); - }, - indexOf: function(item) { - return this.getItems().indexOf(item); - }, - eachItem: function(fn) { - var items = this.getItems(), length = items.length, i; - for (i = 0; i < length; i++) { - fn.call(this, i, items[i]); - } - return this; - }, - addItem: function(item, pos, noEvent) { - var items = this.getItems(), length = items.length; - if (~items.indexOf(item)) { - return this; - } - if (!(pos >= 0 && pos < length)) { - pos = length; - } - items.splice(pos, 0, item); - if (typeof item === "object") { - item.container = this; - item.remove = itemRemove; - } - this.handleAdd(item, pos); - if (!noEvent) { - this.onContainerChanged("add", [ item ]); - } - return this; - }, - addItems: function(items) { - for (var i = 0, l = items.length; i < l; i++) { - this.addItem(items[i], -1, true); - } - this.onContainerChanged("add", items); - return this; - }, - setItems: function(items) { - return this.clear().addItems(items); - }, - appendItem: function(item) { - return this.addItem(item); - }, - prependItem: function(item) { - return this.addItem(item, 0); - }, - removeItem: function(pos, noEvent) { - if (typeof pos !== "number") { - return this.removeItem(this.indexOf(pos)); - } - var items = this.getItems(), length = items.length, item = items[pos]; - if (item === undefined) { - return this; - } - items.splice(pos, 1); - if (item.container) { - delete item.container; - } - if (item.remove) { - delete item.remove; - } - this.handleRemove(item, pos); - if (!noEvent) { - this.onContainerChanged("remove", [ item ]); - } - return this; - }, - clear: function() { - var removed = []; - var item; - while (item = this.getFirstItem()) { - removed.push(item); - this.removeItem(0, true); - } - this.onContainerChanged("remove", removed); - return this; - }, - onContainerChanged: function(type, items) {}, - handleAdd: function(item, index) {}, - handleRemove: function(item, index) {} - }); - } -}; - -//src/graphic/curve.js -/* - * 曲线 - * */ -_p[30] = { - value: function(require, exports, module) { - var Utils = _p.r(12), CurveUtil = { - /* - * 获取由两个以上的点组成的曲线的平移线 - * @param points 曲线上的点的集合, 集合中的点的数量必须大于2 - * @return 平移线数组 - */ - getCurvePanLines: function(points, smoothFactor) { - //计算原始点的中点坐标 - var centerPoints = CurveUtil.getCenterPoints(points), //注意:计算中点连线的中点坐标, 得出平移线 - panLines = CurveUtil.getPanLine(points.length, centerPoints); - //平移线移动到顶点 - return CurveUtil.getMovedPanLines(points, panLines, smoothFactor); - }, - /* - * 计算给定点集合的连线的中点 - * @param points - */ - getCenterPoints: function(points) { - var centerPoints = {}, key = null; - for (var i = 0, j = 0, len = points.length; i < len; i++) { - //j是下一个点的索引 - j = i === len - 1 ? 0 : i + 1; - key = i + "," + j; - //计算中点坐标 - centerPoints[key] = { - x: (points[i].x + points[j].y) / 2, - y: (points[i].x + points[j].y) / 2 - }; - } - return centerPoints; - }, - /* - * 对getCenterPoints()接口获取到的数据做处理, 计算出各个顶点对应的平移线数据 - * @param length 集合中点的个数 - * @param points 点集合, 该集合应该是getCenterPoints()接口返回的数据 - */ - getPanLine: function(length, points) { - var result = {}, //顶点索引 - pointIndex = null; - for (var i = 0, j; i < length; i++) { - var point1 = null, point2 = null; - //计算当前点 - j = (i + 1) % length; - //保存当前处理的顶点索引 - pointIndex = j; - point1 = points[i + "," + j]; - //计算下一个点 - i = j; - j = (i + 1) % length; - point2 = points[i + "," + j]; - result[pointIndex] = { - points: [ { - x: point1.x, - y: point1.y - }, { - x: point2.x, - y: point2.y - } ], - center: { - x: (point1.x + point2.x) / 2, - y: (point1.y + point2.y) / 2 - } - }; - //还原i值 - i = (pointIndex + length - 1) % length; - } - return result; - }, - /* - * 计算平移线移动到顶点后的位置 - * @param points 顶点集合 - * @param panLines 平移线集合 - */ - getMovedPanLines: function(points, panLines, smoothFactor) { - var result = {}; - Utils.each(points, function(point, index) { - //当前平移线 - var currentPanLine = panLines[index], //平移线中点 - center = currentPanLine.center, //移动距离 - distance = { - x: center.x - point.x, - y: center.y - point.y - }; - var currentResult = result[index] = { - points: [], - center: { - x: point.x, - y: point.y - } - }; - //计算控制点到顶点的距离, 并且应用平滑系数到距离上 - Utils.each(currentPanLine.points, function(controlPoint, index) { - var moved = { - x: controlPoint.x - distance.x, - y: controlPoint.y - distance.y - }; - var vertex = currentResult.center; - var dx = moved.x - vertex.x; - var dy = moved.y - vertex.y; - moved.x = vertex.x + smoothFactor * dx; - moved.y = vertex.y + smoothFactor * dy; - currentResult.points.push(moved); - }); - }); - return result; - } - }; - return _p.r(11).createClass("Curve", { - base: _p.r(46), - mixins: [ _p.r(51) ], - constructor: function(points, isColse) { - this.callBase(); - this.setPoints(points || []); - this.closeState = !!isColse; - this.changeable = true; - this.smoothFactor = 1; - this.update(); - }, - //当点集合发生变化时采取的动作 - onContainerChanged: function() { - if (this.changeable) { - this.update(); - } - }, - setSmoothFactor: function(factor) { - this.smoothFactor = factor < 0 ? 0 : factor; - this.update(); - return this; - }, - getSmoothFactor: function() { - return this.smoothFactor; - }, - update: function() { - var points = this.getPoints(), withControlPoints = null, drawer = this.getDrawer(), curPoint = null, curControlPoint = null, prevControlPoint = null; - drawer.clear(); - if (points.length === 0) { - return this; - } else { - drawer.moveTo(points[0]); - } - if (points.length === 1) { - return this; - } - if (points.length === 2) { - drawer.lineTo(points[1]); - return this; - } - //获取已转换过后的带控制点的所有点 - withControlPoints = CurveUtil.getCurvePanLines(points, this.getSmoothFactor()); - for (var i = 1, len = points.length; i < len; i++) { - //当前顶点 - curPoint = withControlPoints[i].center; - //当前控制点 - if (this.closeState || i != len - 1) { - curControlPoint = withControlPoints[i].points[0]; - } else { - //非闭合状态下最后一个点的处理 - curControlPoint = withControlPoints[i].center; - } - if (this.closeState || i != 1) { - prevControlPoint = withControlPoints[i - 1].points[1]; - } else { - //非闭合状态下第一个点的处理 - prevControlPoint = withControlPoints[i - 1].center; - } - drawer.bezierTo(prevControlPoint.x, prevControlPoint.y, curControlPoint.x, curControlPoint.y, curPoint.x, curPoint.y); - } - //处理闭合 - if (this.closeState) { - curPoint = withControlPoints[0].center; - curControlPoint = withControlPoints[0].points[0]; - prevControlPoint = withControlPoints[points.length - 1].points[1]; - drawer.bezierTo(prevControlPoint.x, prevControlPoint.y, curControlPoint.x, curControlPoint.y, curPoint.x, curPoint.y); - } - return this; - }, - close: function() { - this.closeState = true; - return this.update(); - }, - open: function() { - this.closeState = false; - return this.update(); - }, - isClose: function() { - return !!this.closeState; - } - }); - } -}; - -//src/graphic/data.js -_p[31] = { - value: function(require, exports, module) { - return _p.r(11).createClass("Data", { - constructor: function() { - this._data = {}; - }, - setData: function(name, value) { - this._data[name] = value; - return this; - }, - getData: function(name) { - return this._data[name]; - }, - removeData: function(name) { - delete this._data[name]; - return this; - } - }); - } -}; - -//src/graphic/ellipse.js -_p[32] = { - value: function(require, exports, module) { - var Utils = _p.r(12), Point = _p.r(50); - return _p.r(11).createClass("Ellipse", { - base: _p.r(46), - constructor: function(rx, ry, cx, cy) { - this.callBase(); - this.rx = rx || 0; - this.ry = ry || 0; - this.cx = cx || 0; - this.cy = cy || 0; - this.update(); - }, - update: function() { - var rx = this.rx, ry = this.ry, x1 = this.cx + rx, x2 = this.cx - rx, y = this.cy; - var drawer = this.getDrawer(); - drawer.clear(); - drawer.moveTo(x1, y); - drawer.arcTo(rx, ry, 0, 1, 1, x2, y); - drawer.arcTo(rx, ry, 0, 1, 1, x1, y); - return this; - }, - getRadius: function() { - return { - x: this.rx, - y: this.ry - }; - }, - getRadiusX: function() { - return this.rx; - }, - getRadiusY: function() { - return this.ry; - }, - getCenter: function() { - return new Point(this.cx, this.cy); - }, - getCenterX: function() { - return this.cx; - }, - getCenterY: function() { - return this.cy; - }, - setRadius: function(rx, ry) { - this.rx = rx; - this.ry = ry; - return this.update(); - }, - setRadiusX: function(rx) { - this.rx = rx; - return this.update(); - }, - setRadiusY: function(ry) { - this.ry = ry; - return this.update(); - }, - setCenter: function(cx, cy) { - if (arguments.length == 1) { - var p = Point.parse(arguments[0]); - cx = p.x; - cy = p.y; - } - this.cx = cx; - this.cy = cy; - return this.update(); - }, - setCenterX: function(cx) { - this.cx = cx; - return this.update(); - }, - setCenterY: function(cy) { - this.cy = cy; - return this.update(); - } - }); - } -}; - -//src/graphic/eventhandler.js -/* - * kity event 实现 - */ -_p[33] = { - value: function(require, exports, module) { - // polyfill - (function() { - function CustomEvent(event, params) { - params = params || { - bubbles: false, - cancelable: false, - detail: undefined - }; - var evt = document.createEvent("CustomEvent"); - evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); - return evt; - } - CustomEvent.prototype = window.Event.prototype; - window.CustomEvent = CustomEvent; - })(); - var Utils = _p.r(12), ShapeEvent = _p.r(62); - // 内部处理器缓存 - var INNER_HANDLER_CACHE = {}, // 用户处理器缓存 - USER_HANDLER_CACHE = {}, guid = 0; - // 添加事件统一入口 - function _addEvent(type, handler, isOnce) { - isOnce = !!isOnce; - if (Utils.isString(type)) { - type = type.match(/\S+/g); - } - Utils.each(type, function(currentType) { - listen.call(this, this.node, currentType, handler, isOnce); - }, this); - return this; - } - // 移除事件统一入口 - function _removeEvent(type, handler) { - var userHandlerList = null, eventId = this._EVNET_UID, isRemoveAll = handler === undefined; - userHandlerList = USER_HANDLER_CACHE[eventId][type]; - //移除指定的监听器 - if (!isRemoveAll) { - isRemoveAll = true; - Utils.each(userHandlerList, function removeKityEvent(fn, index) { - if (fn === handler) { - // 不能结束, 需要查找完整个list, 避免丢失移除多次绑定同一个处理器的情况 - delete userHandlerList[index]; - } else { - isRemoveAll = false; - } - }); - } - //删除所有监听器 - if (isRemoveAll) { - deleteDomEvent(this.node, type, INNER_HANDLER_CACHE[eventId][type]); - delete USER_HANDLER_CACHE[eventId][type]; - delete INNER_HANDLER_CACHE[eventId][type]; - } - return this; - } - // 执行绑定, 该方法context为shape或者mixin了eventhandler的对象 - function listen(node, type, handler, isOnce) { - var eid = this._EVNET_UID, targetObject = this; - // 初始化内部监听器 - if (!INNER_HANDLER_CACHE[eid]) { - INNER_HANDLER_CACHE[eid] = {}; - } - if (!INNER_HANDLER_CACHE[eid][type]) { - // 内部监听器 - INNER_HANDLER_CACHE[eid][type] = function kityEventHandler(e) { - e = new ShapeEvent(e || window.event); - Utils.each(USER_HANDLER_CACHE[eid][type], function executeKityEvent(fn) { - var result; - if (fn) { - result = fn.call(targetObject, e); - //once 绑定, 执行完后删除 - if (isOnce) { - targetObject.off(type, fn); - } - } - // 如果用户handler里return了false, 则该节点上的此后的同类型事件将不再执行 - return result; - }, targetObject); - }; - } - // 初始化用户监听器列表 - if (!USER_HANDLER_CACHE[eid]) { - USER_HANDLER_CACHE[eid] = {}; - } - if (!USER_HANDLER_CACHE[eid][type]) { - USER_HANDLER_CACHE[eid][type] = [ handler ]; - // 绑定对应类型的事件 - // dom对象利用dom event进行处理, 非dom对象, 由消息分发机制处理 - if (!!node && "on" + type in node) { - bindDomEvent(node, type, INNER_HANDLER_CACHE[eid][type]); - } - } else { - USER_HANDLER_CACHE[eid][type].push(handler); - } - } - // 绑定dom事件 - function bindDomEvent(node, type, handler) { - if (node.addEventListener) { - node.addEventListener(type, handler, false); - } else { - node.attachEvent("on" + type, handler); - } - } - // 删除dom事件 - function deleteDomEvent(node, type, handler) { - if (node.removeEventListener) { - node.removeEventListener(type, handler, false); - } else { - node.detachEvent(type, handler); - } - } - // 触发dom事件 - function triggerDomEvent(node, type, params) { - var event = new CustomEvent(type, { - bubbles: true, - cancelable: true - }); - event._kityParam = params; - node.dispatchEvent(event); - } - // 发送消息 - function sendMessage(messageObj, type, msg) { - var event = null, handler = null; - var handlers = INNER_HANDLER_CACHE[messageObj._EVNET_UID]; - if (!handlers) return; - handler = handlers[type]; - if (!handler) { - return; - } - event = Utils.extend({ - type: type, - target: messageObj - }, msg || {}); - handler.call(messageObj, event); - } - // 对外接口 - return _p.r(11).createClass("EventHandler", { - constructor: function() { - this._EVNET_UID = ++guid; - }, - addEventListener: function(type, handler) { - return _addEvent.call(this, type, handler, false); - }, - addOnceEventListener: function(type, handler) { - return _addEvent.call(this, type, handler, true); - }, - removeEventListener: function(type, handler) { - return _removeEvent.call(this, type, handler); - }, - on: function(type, handler) { - return this.addEventListener.apply(this, arguments); - }, - once: function(type, handler) { - return this.addOnceEventListener.apply(this, arguments); - }, - off: function() { - return this.removeEventListener.apply(this, arguments); - }, - fire: function(type, params) { - return this.trigger.apply(this, arguments); - }, - trigger: function(type, params) { - sendMessage(this, type, params); - return this; - } - }); - } -}; - -//src/graphic/geometry.js -_p[34] = { - value: function(require) { - var utils = _p.r(12); - var Point = _p.r(50); - var Vector = _p.r(73); - var Matrix = _p.r(43); - var g = {}; - var pathCommand = /([achlmrqstvz])[\s,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\s]*,?\s*)+)/gi, pathValues = /(-?\d*\.?\d*(?:e[\-+]?\d+)?)\s*,?\s*/gi, paramCounts = { - a: 7, - c: 6, - h: 1, - l: 2, - m: 2, - q: 4, - s: 4, - t: 2, - v: 1, - z: 0 - }; - function pathClone(path) { - var result, i, j, segment, segmentCopy; - result = []; - for (i = 0; i < path.length; i++) { - segment = path[i]; - result.push(segmentCopy = []); - for (j = 0; j < segment.length; j++) { - segmentCopy.push(segment[j]); - } - } - if (path.isUniform) result.isUniform = true; - if (path.isAbsolute) result.isAbsolute = true; - if (path.isCurve) result.isCurve = true; - return result; - } - // 缓存函数 - // from raphael.js - function cacher(f, scope, postprocessor) { - function repush(array, item) { - for (var i = 0, ii = array.length; i < ii; i++) if (array[i] === item) { - return array.push(array.splice(i, 1)[0]); - } - } - function newf() { - var arg = Array.prototype.slice.call(arguments, 0), args = arg.join("␀"), cache = newf.cache = newf.cache || {}, count = newf.count = newf.count || []; - if (cache.hasOwnProperty(args)) { - repush(count, args); - return postprocessor ? postprocessor(cache[args]) : cache[args]; - } - if (count.length >= 1e3) { - delete cache[count.shift()]; - } - count.push(args); - cache[args] = f.apply(scope, arg); - return postprocessor ? postprocessor(cache[args]) : cache[args]; - } - return newf; - } - /** - * - * kity.g.pathToString(pathSegment) - * - * 返回表示 PathSegment 的字符串 - * - * @param {Array} pathSegment - * 要表示的 Path Segment - * - * @return {String} 表示该 Path 的字符串 - * - * @example - * - * var pathSegment = [['M', 0, 0], ['L', 10, 10]] - * var pathString = kity.g.pathToString(pathSegment); - * // 返回 'M0,0L10,10' - */ - g.pathToString = function(pathSegment) { - pathSegment = pathSegment || this; - if (typeof pathSegment == "string") return pathSegment; - if (pathSegment instanceof Array) { - pathSegment = utils.flatten(pathSegment); - return pathSegment.join(",").replace(/,?([achlmqrstvxz]),?/gi, "$1"); - } - }; - /** - * kity.g.parsePathString(pathString) - * - * 解析 Path 字符串成 PathSegment - * - * @copyright rapheal.js - * - * @example - * - * var seg = kity.g.parsePathString('M10,12l21-23-21.5,11z'); - * // 返回: [['M', 10, 12], ['l', 21, -23], ['l', -21.5, 11], ['z']] - * - * @param {String} pathString Path 字符串 - * @return {Array} - */ - g.parsePathString = cacher(function(pathString) { - var data = []; - pathString.replace(pathCommand, function(a, b, c) { - var params = [], name = b.toLowerCase(); - c.replace(pathValues, function(a, b) { - if (b) params.push(+b); - }); - if (name == "m" && params.length > 2) { - data.push([ b ].concat(params.splice(0, 2))); - name = "l"; - b = b == "m" ? "l" : "L"; - } - if (name == "r") { - data.push([ b ].concat(params)); - } else { - while (params.length >= paramCounts[name]) { - data.push([ b ].concat(params.splice(0, paramCounts[name]))); - if (!paramCounts[name]) { - break; - } - } - } - }); - data.isUniform = true; - data.toString = g.pathToString; - return data; - }); - /** - * kity.g.pathToAbsolute(path) - * - * 把路径转换为绝对路径的形式 - * - * @param {Array|String} path - * 要转换的 path 路径或者数组 - * - * @return {Array} - * 转换后的 Path Segment - * - * @example - * - * var path = 'M10,10l50,50'; - * var absPath = kity.g.pathToAbsolute(path); - * // 返回 [['M', 10, 10], ['L', 60, 60]] - */ - g.pathToAbsolute = cacher(function(path) { - var pathArray = path.isUniform ? path : g.parsePathString(g.pathToString(path)); - var res = [], x = 0, y = 0, mx = 0, my = 0, start = 0; - var r, pa, i, j, k, ii, jj, kk; - if (pathArray[0][0] == "M") { - x = +pathArray[0][1]; - y = +pathArray[0][2]; - mx = x; - my = y; - start++; - res[0] = [ "M", x, y ]; - } - for (r, pa, i = start, ii = pathArray.length; i < ii; i++) { - res.push(r = []); - pa = pathArray[i]; - if (pa[0] != pa[0].toUpperCase()) { - r[0] = pa[0].toUpperCase(); - switch (r[0]) { - case "A": - r[1] = pa[1]; - r[2] = pa[2]; - r[3] = pa[3]; - r[4] = pa[4]; - r[5] = pa[5]; - r[6] = +(pa[6] + x); - r[7] = +(pa[7] + y); - break; - - case "V": - r[1] = +pa[1] + y; - break; - - case "H": - r[1] = +pa[1] + x; - break; - - case "M": - mx = +pa[1] + x; - my = +pa[2] + y; - break; - - default: - for (j = 1, jj = pa.length; j < jj; j++) { - r[j] = +pa[j] + (j % 2 ? x : y); - } - } - } else { - for (k = 0, kk = pa.length; k < kk; k++) { - r[k] = pa[k]; - } - } - switch (r[0]) { - case "Z": - x = mx; - y = my; - break; - - case "H": - x = r[1]; - break; - - case "V": - y = r[1]; - break; - - case "M": - mx = r[r.length - 2]; - my = r[r.length - 1]; - break; - - default: - x = r[r.length - 2]; - y = r[r.length - 1]; - } - } - res.isUniform = true; - res.isAbsolute = true; - res.toString = g.pathToString; - return res; - }); - // 把圆弧绘制的曲线转化为对应的三次贝塞尔形式 - function a2c(x1, y1, rx, ry, angle, laf, sf, x2, y2, recursive) { - // copy from raphael.js - // for more information of where this math came from visit: - // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes - var math = Math, PI = math.PI, abs = Math.abs, _120 = PI * 120 / 180, rad = PI / 180 * (+angle || 0), res = [], xy, rotate = function(x, y, rad) { - var X = x * math.cos(rad) - y * math.sin(rad), Y = x * math.sin(rad) + y * math.cos(rad); - return { - x: X, - y: Y - }; - }; - var cos, sin, h, x, y, rx2, ry2, k, cx, cy, f1, f2, df, f2old, x2old, y2old, c1, s1, c2, s2, t, hx, hy, m1, m2, m3, m4, newres, i, ii; - if (!recursive) { - xy = rotate(x1, y1, -rad); - x1 = xy.x; - y1 = xy.y; - xy = rotate(x2, y2, -rad); - x2 = xy.x; - y2 = xy.y; - cos = math.cos(PI / 180 * angle); - sin = math.sin(PI / 180 * angle); - x = (x1 - x2) / 2; - y = (y1 - y2) / 2; - h = x * x / (rx * rx) + y * y / (ry * ry); - if (h > 1) { - h = math.sqrt(h); - rx = h * rx; - ry = h * ry; - } - rx2 = rx * rx; - ry2 = ry * ry; - k = (laf == sf ? -1 : 1) * math.sqrt(abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))); - cx = k * rx * y / ry + (x1 + x2) / 2; - cy = k * -ry * x / rx + (y1 + y2) / 2; - f1 = math.asin(((y1 - cy) / ry).toFixed(9)); - f2 = math.asin(((y2 - cy) / ry).toFixed(9)); - f1 = x1 < cx ? PI - f1 : f1; - f2 = x2 < cx ? PI - f2 : f2; - if (f1 < 0) f1 = PI * 2 + f1; - if (f2 < 0) f2 = PI * 2 + f2; - if (sf && f1 > f2) { - f1 = f1 - PI * 2; - } - if (!sf && f2 > f1) { - f2 = f2 - PI * 2; - } - } else { - f1 = recursive[0]; - f2 = recursive[1]; - cx = recursive[2]; - cy = recursive[3]; - } - df = f2 - f1; - if (abs(df) > _120) { - f2old = f2; - x2old = x2; - y2old = y2; - f2 = f1 + _120 * (sf && f2 > f1 ? 1 : -1); - x2 = cx + rx * math.cos(f2); - y2 = cy + ry * math.sin(f2); - res = a2c(x2, y2, rx, ry, angle, 0, sf, x2old, y2old, [ f2, f2old, cx, cy ]); - } - df = f2 - f1; - c1 = math.cos(f1); - s1 = math.sin(f1); - c2 = math.cos(f2); - s2 = math.sin(f2); - t = math.tan(df / 4); - hx = 4 / 3 * rx * t; - hy = 4 / 3 * ry * t; - m1 = [ x1, y1 ]; - m2 = [ x1 + hx * s1, y1 - hy * c1 ]; - m3 = [ x2 + hx * s2, y2 - hy * c2 ]; - m4 = [ x2, y2 ]; - m2[0] = 2 * m1[0] - m2[0]; - m2[1] = 2 * m1[1] - m2[1]; - if (recursive) { - return [ m2, m3, m4 ].concat(res); - } else { - res = [ m2, m3, m4 ].concat(res).join().split(","); - newres = []; - for (i = 0, ii = res.length; i < ii; i++) { - newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x; - } - return newres; - } - } - // 把二次贝塞尔曲线参数转化为三次贝塞尔曲线参数 - function q2c(x1, y1, ax, ay, x2, y2) { - // copy from raphael.js - var _13 = 1 / 3, _23 = 2 / 3; - return [ _13 * x1 + _23 * ax, _13 * y1 + _23 * ay, _13 * x2 + _23 * ax, _13 * y2 + _23 * ay, x2, y2 ]; - } - /** - * kity.g.pathToCurve(path) - * - * 把路径转换为贝塞尔路径 - * - * @param {Array|String} path - * 要转换的 path 路径或数组 - * - * @return {Array} - * 转换后的 PathSegment,每一段都是 'C' - */ - g.pathToCurve = cacher(function(path) { - var i, j, command, param; - var initPoint, currentPoint, endPoint, shouldClose, lastControlPoint, aussumedControlPoint; - var controlPoint1, controlPoint2; - var res = []; - // 处理的路径要求是一个绝对路径 - if (!path.isAbsolute) path = g.pathToAbsolute(path); - for (i = 0; i < path.length; i++) { - command = path[i][0]; - param = path[i].slice(1); - // 画笔移动 - if (command == "M") { - initPoint = lastControlPoint = currentPoint = param; - res.push(path[i]); - continue; - } - // 路径闭合 - if (command == "Z") { - shouldClose = true; - command = "L"; - param = initPoint; - } - // 绘制命令的目的位置 - endPoint = param.slice(param.length - 2); - // 对 'H' 命令的修正 - if (command == "H") { - endPoint = [ param[0], currentPoint[1] ]; - command = "L"; - } - // 对 'V' 命令的修正 - if (command == "V") { - endPoint = [ currentPoint[0], param[0] ]; - command = "L"; - } - // 对 'S' 命令求出隐含的控制点位置 - if (command == "S" || command == "T") { - // 隐含控制点是上一个控制点关于当前位置的镜像 - aussumedControlPoint = [ currentPoint[0] + (currentPoint[0] - lastControlPoint[0]), currentPoint[1] + (currentPoint[1] - lastControlPoint[1]) ]; - } - // 针对不同的命令求控制点 - switch (command) { - case "L": - controlPoint1 = currentPoint; - controlPoint2 = endPoint; - break; - - case "C": - controlPoint1 = param.slice(0, 2); - controlPoint2 = param.slice(2, 4); - break; - - case "S": - controlPoint1 = aussumedControlPoint.slice(); - controlPoint2 = param.slice(0, 2); - break; - - case "Q": - lastControlPoint = param.slice(0, 2); - param = q2c.apply(null, currentPoint.concat(param)); - controlPoint1 = param.slice(0, 2); - controlPoint2 = param.slice(2, 4); - break; - - case "T": - param = q2c.apply(null, currentPoint.concat(aussumedControlPoint).concat(param)); - controlPoint1 = param.slice(0, 2); - controlPoint2 = param.slice(2, 4); - break; - - case "A": - param = a2c.apply(null, currentPoint.concat(param)); - j = 0; - while (j in param) { - controlPoint1 = param.slice(j, j + 2); - controlPoint2 = param.slice(j + 2, j + 4); - endPoint = param.slice(j + 4, j + 6); - // 写入当前一段曲线 - res.push([ "C" ].concat(controlPoint1).concat(controlPoint2).concat(endPoint)); - j += 6; - } - break; - } - if (command != "A") { - // 写入当前一段曲线 - res.push([ "C" ].concat(controlPoint1).concat(controlPoint2).concat(endPoint)); - } - // 为下次循环准备当前位置 - currentPoint = endPoint; - // 二次贝塞尔曲线自己已经记录了上个控制点的位置,其它的记录控制点 2 的位置 - if (command != "Q") { - lastControlPoint = controlPoint2; - } - if (shouldClose) { - res.push([ "Z" ]); - shouldClose = false; - } - } - res.isUniform = true; - res.isAbsolute = true; - res.isCurve = true; - res.toString = g.pathToString; - return res; - }); - /** - * 将贝塞尔曲线切成两部分 - * - * @see http://stackoverflow.com/questions/18655135/divide-bezier-curve-into-two-equal-halves - */ - function cutBezier(bezierArray, t) { - function __(t) { - return function(p, q) { - return p + t * (q - p); - }; - } - var _ = __(t || .5), ba = bezierArray, ax = ba[0], ay = ba[1], bx = ba[2], by = ba[3], cx = ba[4], cy = ba[5], dx = ba[6], dy = ba[7], ex = _(ax, bx), ey = _(ay, by), fx = _(bx, cx), fy = _(by, cy), gx = _(cx, dx), gy = _(cy, dy), hx = _(ex, fx), hy = _(ey, fy), jx = _(fx, gx), jy = _(fy, gy), kx = _(hx, jx), ky = _(hy, jy); - return [ [ ax, ay, ex, ey, hx, hy, kx, ky ], [ kx, ky, jx, jy, gx, gy, dx, dy ] ]; - } - /** - * kity.g.cutBezier(bezierArray, t) - * - * 在指定位置把贝塞尔曲线切割为两部分 - * - * @param {Array} bezierArray - * 表示贝塞尔曲线的一个数组 [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y] - * p1 和 p2 是贝塞尔曲线的起点和终点,c1 和 c2 是两个控制点 - * - * @param {Number} t - * 切割的位置(0 到 1) - * - * @return {Array} - * 切割的两个贝塞尔曲线:[ - * [p1x1, p1y1, c1x1, c1y1, c2x1, c2y1, p2x1, p2y1], - * [p1x2, p1y2, c1x2, c1y2, c2x2, c2y2, p2x2, p2y2] - * ] - * - */ - g.cutBezier = cacher(cutBezier); - /** - * 求一段贝塞尔曲线的子段 - * - * @param {Array} bezierArray - * 长度为 8 的数组,表示 [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y] - * - * @param {Number} t - * 子段的结束位置(0 到 1) - * - * @param {Number} t0 - * 字段的开始位置(0 到 t),可不传,默认为 0 - * - * @return {Array} - * 长度为 8 的数组,表示给定贝塞尔曲线的子段 - */ - g.subBezier = function(bezierArray, t, t0) { - var b2t = cutBezier(bezierArray, t)[0]; - return t0 ? cutBezier(b2t, t0 / t)[1] : b2t; - }; - /** - * 求贝塞尔曲线上的一个点 - * - * @param {Array} bezierArray - * 长度为 8 的数组,表示 [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y] - * - * @param {Number} t - * 所求点的开始位置(0 到 1) - * - * @return {Point} p - * p.x: x 坐标 - * p.y: y 坐标 - * p.tan: 在 t 处的切线方向(类型为 kity.Vector,模为 1) - */ - g.pointAtBezier = function(bezierArray, t) { - var b2t = cutBezier(bezierArray, t)[0]; - var p = Point.parse(b2t.slice(6)), c = Point.parse(b2t.slice(4, 2)), v = Vector.fromPoints(c, p); - if (t === 0) { - p.tan = g.pointAtBezier(bezierArray, .01).tan; - } else { - p.tan = v.normalize(); - } - return p; - }; - /** - * 求贝塞尔曲线的长度 - * - * @param {Array} bezierArray - * 长度为 8 的数组,表示 [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y] - * - * @param {Number} tolerate - * 允许的误差,默认是 0.1 - * - * @return {Number} 贝塞尔曲线的长度 - */ - g.bezierLength = cacher(function bezierLength(bezierArray) { - // 表示(c[0]*t^4 + c[1]*t^3 + c[2]*t^2 + c[3]*t^1 + c[4])^(1/2)的函数 - function f(x) { - var m = c0 * Math.pow(x, 4) + c1 * Math.pow(x, 3) + c2 * Math.pow(x, 2) + c3 * x + c4; - if (m < 0) { - m = 0; - } - return Math.pow(m, .5); - } - // 用Newton-Cotes型求积公式 - var arr = bezierArray; - // 三次贝塞尔曲线函数求导后,求出对应的方程系数,用cx[],cy[]表示x`(t)和y`(t)的系数 - var cx0, cx1, cx2; - var cy0, cy1, cy2; - // 用c[]表示x`(t)^2 + y`(t)^2的结果的系数 - var c0, c1, c2, c3, c4; - // 求x`(t) 和 y`(t)的系数 - cx0 = -3 * arr[0] + 9 * arr[2] - 9 * arr[4] + 3 * arr[6]; - cx1 = 6 * arr[0] - 12 * arr[2] + 6 * arr[4]; - cx2 = -3 * arr[0] + 3 * arr[2]; - cy0 = -3 * arr[1] + 9 * arr[3] - 9 * arr[5] + 3 * arr[7]; - cy1 = 6 * arr[1] - 12 * arr[3] + 6 * arr[5]; - cy2 = -3 * arr[1] + 3 * arr[3]; - // 求x`(t)^2 + y`(t)^2的结果的系数 c[] - c0 = Math.pow(cx0, 2) + Math.pow(cy0, 2); - c1 = 2 * (cx0 * cx1 + cy0 * cy1); - c2 = 2 * (cx0 * cx2 + cy0 * cy2) + Math.pow(cx1, 2) + Math.pow(cy1, 2); - c3 = 2 * (cx1 * cx2 + cy1 * cy2); - c4 = Math.pow(cx2, 2) + Math.pow(cy2, 2); - // 用cotes积分公式求值 - return (f(0) + f(1) + 4 * (f(.125) + f(.375) + f(.625) + f(.875)) + 2 * (f(.25) + f(.5) + f(.75))) / 24; - }); - // 计算一个 pathSegment 中每一段的在整体中所占的长度范围,以及总长度 - // 方法要求每一段都是贝塞尔曲线 - var getBezierPathSegmentRanges = cacher(function(pathSegment) { - var i, ii, segment, position, bezierLength, segmentRanges, totalLength; - segmentRanges = []; - // 总长度 - totalLength = 0; - for (i = 0, ii = pathSegment.length; i < ii; i++) { - segment = pathSegment[i]; - if (segment[0] == "M") { - position = segment.slice(1); - segmentRanges.push(null); - continue; - } - if (segment[0] == "Z") { - segmentRanges.push(null); - continue; - } - bezierLength = g.bezierLength(position.concat(segment.slice(1))); - segmentRanges.push([ totalLength, totalLength + bezierLength ]); - totalLength += bezierLength; - // 迭代当前位置 - position = segment.slice(4); - } - segmentRanges.totalLength = totalLength; - return segmentRanges; - }); - /** - * 求一段路径的子路径 - * - * @param {Array|String} path - * 原路径 - * - * @param {Number} t1 - * 要求的子路径的结束位置(0 到 1) - * - * @param {Number} t0 - * 要求的子路径的开始位置(0 到 t1),可不传,默认为 0 - * - * @return {Array} - * 子路径的 PathSegment - */ - g.subPath = function(path, t1, t0) { - var dt; - t0 = t0 || 0; - dt = t1 - t0; - dt = dt - (dt | 0); - t0 = t0 - (t0 | 0); - t1 = t0 + dt; - if (t1 > 1) { - return g.subPath(path, 1, t0).concat(g.subPath(path, t1 - 1)); - } - if (!path.isCurve) { - path = g.pathToCurve(path); - } - // path 每一段在整体中的长度区间 - var segmentRanges = getBezierPathSegmentRanges(path); - // path 总长度 - var totalLength = segmentRanges.totalLength; - // t1 和 t0 位置命中的长度位置 - var t1Length = totalLength * t1, t0Length = totalLength * (t0 || 0); - // 产生的子路径 - var subPath = []; - // 迭代变量,a 是一段的长度区间左值,b 是右值,d 是区间长度 - var i, ii, a, b, d; - var position; - var bezier, subBezier, stared; - for (i = 0, ii = path.length; i < ii; i++) { - if (path[i][0] == "M") { - position = path[i].slice(1); - if (stared) { - subPath.push(path[i].slice()); - } - continue; - } - if (path[i][0] == "Z") { - // subpath 路径不闭合 - continue; - } - a = segmentRanges[i][0]; - b = segmentRanges[i][1]; - d = b - a; - bezier = position.concat(path[i].slice(1)); - if (t0Length > b) { - // t0 和 t1 都右溢出 - // ----------------------------------- - // t0 t1 - // |________| - // - // 需要跳过当前块 - position = bezier.slice(bezier.length - 2); - continue; - } else if (t0Length >= a) { - // 命中 t0;t1 可能命中或右溢出 - // ----------------------------------- - // t0 t1 - // |______|__| - // - // or: |_|____|__| - // - // 取当前块 t0 到 t1 的部分 - subBezier = g.subBezier(bezier, Math.min((t1Length - a) / d, 1), (t0Length - a) / d); - stared = true; - position = subBezier.slice(0, 2); - subPath.push([ "M" ].concat(subBezier.slice(0, 2))); - subPath.push([ "C" ].concat(subBezier.slice(2))); - } else if (t1Length >= b) { - // t0 左溢出;t1 右溢出,整个块是需要的 - // ----------------------------------- - // t0 t1 - // |_________| - // - // 此时取整个块 - subPath.push(path[i].slice()); - } else if (t1Length >= a) { - // t0 左溢出;t1 命中,取当前块 t1 之前的部分 - // ----------------------------------- - // t0 t1 - // |__|______| - // 取当前块 t1 之前的部分 - subBezier = g.subBezier(bezier, (t1Length - a) / d); - subPath.push([ "C" ].concat(subBezier.slice(2))); - stared = false; - } else { - // 没有可以再要的了 - break; - } - position = bezier.slice(bezier.length - 2); - } - subPath.isAbsolute = true; - subPath.isCurve = true; - subPath.isUniform = true; - subPath.toString = g.pathToString; - return subPath; - }; - /** - * 求路径上的一个点 - * - * @param {Array|String} path - * 要求点的路径 - * - * @param {Number} t - * 要求的点的位置(0 到 1) - * - * @return {Point} p - * p.x: x 坐标 - * p.y: y 坐标 - * p.tan: 在 t 处的切线方向(类型为 kity.Vector,模为 1) - */ - g.pointAtPath = function(path, t) { - if (!path.isCurve) { - path = g.pathToCurve(path); - } - var subPath = g.subPath(path, t); - var lastCurve = subPath[subPath.length - 1][0] == "Z" ? subPath[subPath.length - 2] : subPath[subPath.length - 1]; - // 跳过 'C' 命令,只留参数 - lastCurve = lastCurve.slice(1); - var p = Point.parse(lastCurve.slice(4)), c = Point.parse(lastCurve.slice(2, 4)); - p.tan = Vector.fromPoints(c, p).normalize(); - return p; - }; - /** - * 求一段路径的长度 - * - * @param {string|Array} path - * 要求的路径 - * - * @return {Number} - * 路径的长度 - */ - g.pathLength = cacher(function(path) { - if (!path.isCurve) { - path = g.pathToCurve(path); - } - // path 每一段在整体中的长度区间 - var segmentRanges = getBezierPathSegmentRanges(path); - return segmentRanges.totalLength; - }); - /** - * 求一段路径的关键点 - * - * @param {string|Array} path - * 要求的路径 - * - * @return {Array} - * 关键点的集合 - */ - g.pathKeyPoints = cacher(function(path) { - var i, ii, command, keyPoints; - if (!path.isCurve) { - path = g.pathToCurve(path); - } - keyPoints = []; - for (i = 0, ii = path.length; i < ii; i++) { - if (path[i][0] == "z") continue; - keyPoints.push(path[i].slice(path[i].length - 2)); - } - return keyPoints; - }); - // 对比两个路径的关键位置,在合适的位置切割合适的路径,使得两个路径的段数一致 - // TODO: 使用插值算法,使对应点更合理 - var alignCurve = cacher(function(path1, path2) { - if (!path1.isCurve) path1 = g.pathToCurve(path1); - if (!path2.isCurve) path2 = g.pathToCurve(path2); - var p1 = pathClone(path1); - var p2 = pathClone(path2); - p1.i = 0; - p2.i = 0; - p1.o = p2; - p2.o = p1; - function command(p, i) { - return p[i || p.i] && p[i || p.i][0]; - } - function param(p, i) { - return p[i || p.i] && p[i || p.i].slice(1); - } - function point(p, i) { - var _param = param(p, i); - return _param && _param.slice(-2); - } - function fixZ(p) { - if (command(p) == "Z") { - p.splice(p.i, 1); - return true; - } - return false; - } - function fixM(p) { - if (command(p) == "M") { - p.o.splice(p.o.i, 0, [ "M" ].concat(point(p.o, p.o.i - 1))); - p.i++; - p.o.i++; - return true; - } - return false; - } - function fill(p) { - var lastPoint; - var i = 1; - while (!lastPoint) { - lastPoint = point(p, p.length - i++); - } - p.o.i = p.i; - while (p.length < p.o.length) { - if (fixZ(p.o)) continue; - if (fixM(p.o)) continue; - p.push([ "C" ].concat(lastPoint).concat(lastPoint).concat(lastPoint)); - p.i++; - p.o.i++; - } - } - while (p1.i < p1.length && p2.i < p2.length) { - if (fixZ(p1) || fixZ(p2)) continue; - if (command(p1) == command(p2)) { - p1.i++; - p2.i++; - continue; - } - if (fixM(p1) || fixM(p2)) continue; - p1.i++; - p2.i++; - } - if (p1.i == p1.length) fill(p1); - if (p2.i == p2.length) fill(p2); - delete p1.i; - delete p1.o; - delete p2.i; - delete p2.o; - return [ p1, p2 ]; - }); - g.alignCurve = alignCurve; - /** - * 获得两个路径的补间结果 - * - * @param {string|Array} path1 - * 补间起始路径 - * - * @param {string|Array} path2 - * 补间结束路径 - * - * @param {Number} t - * 补间比例,0 返回跟 path1 等效的结果;1 返回跟 path2 等效的结果 - * - * @return {PathSegment} - * 补间的结果 - */ - g.pathTween = function(path1, path2, t) { - if (t === 0) return path1; - if (t === 1) return path2; - var aligned = alignCurve(path1, path2); - var result = [], seg, i, j; - path1 = aligned[0]; - path2 = aligned[1]; - for (i = 0; i < path1.length; i++) { - result.push(seg = []); - seg.push(path1[i][0]); - for (j = 1; j < path1[i].length; j++) { - seg.push(path1[i][j] + t * (path2[i][j] - path1[i][j])); - } - } - result.isUniform = result.isCurve = result.isAbsolute = true; - return result; - }; - /** - * 变换指定的路径 - * - * @param {String|Array} path - * 需要变换的路径 - * - * @param {kity.Matrix} matrix - * 使用的变换矩阵 - * - * @return {Array} - * 变换后的路径 - */ - g.transformPath = cacher(function(path, matrix) { - var i, ii, j, result, seg, pair; - if (!path.isCurve) { - path = g.pathToCurve(path); - } - result = []; - for (i = 0, ii = path.length; i < ii; i++) { - result.push(seg = [ path[i][0] ]); - for (j = 1; j < path[i].length; j += 2) { - pair = path[i].slice(j, j + 2); - pair = matrix.transformPoint(Point.parse(pair)); - result.push(pair); - } - } - return result; - }); - // entend - _p.r(11).extendClass(Matrix, { - transformPath: function(path) { - return g.transformPath(path, this); - } - }); - return g; - } -}; - -//src/graphic/gradient.js -_p[35] = { - value: function(require, exports, module) { - var svg = _p.r(67); - var Resource = _p.r(58); - var Color = _p.r(28); - return _p.r(11).createClass("GradientBrush", { - base: Resource, - constructor: function(gradientNodeType, paper) { - this.callBase(gradientNodeType, paper); - this.stops = []; - }, - addStop: function(offset, color, opacity) { - var gstop = svg.createNode("stop"); - if (!(color instanceof Color)) { - color = Color.parse(color); - } - if (opacity === undefined) { - opacity = color.get("a"); - } - gstop.setAttribute("offset", offset); - gstop.setAttribute("stop-color", color.toRGB()); - if (opacity < 1) { - gstop.setAttribute("stop-opacity", opacity); - } - this.node.appendChild(gstop); - return this; - } - }); - } -}; - -//src/graphic/group.js -_p[36] = { - value: function(require, exports, module) { - var ShapeContainer = _p.r(61); - return _p.r(11).createClass("Group", { - mixins: [ ShapeContainer ], - base: _p.r(60), - constructor: function Group() { - this.callBase("g"); - } - }); - } -}; - -//src/graphic/hyperlink.js -_p[37] = { - value: function(require, exports, module) { - var ShapeContainer = _p.r(61); - return _p.r(11).createClass("HyperLink", { - mixins: [ ShapeContainer ], - base: _p.r(60), - constructor: function(url) { - this.callBase("a"); - this.setHref(url); - }, - setHref: function(href) { - this.node.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", href); - return this; - }, - getHref: function() { - return this.node.getAttributeNS("xlink:href"); - }, - setTarget: function(target) { - this.node.setAttribute("target", target); - return this; - }, - getTarget: function() { - return this.node.getAttribute("target"); - } - }); - } -}; - -//src/graphic/image.js -_p[38] = { - value: function(require, exports, module) { - return _p.r(11).createClass("Image", { - base: _p.r(60), - constructor: function(url, width, height, x, y) { - this.callBase("image"); - this.url = url; - this.width = width || 0; - this.height = height || 0; - this.x = x || 0; - this.y = y || 0; - this.update(); - }, - update: function() { - this.node.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", this.url); - this.node.setAttribute("x", this.x); - this.node.setAttribute("y", this.y); - this.node.setAttribute("width", this.width); - this.node.setAttribute("height", this.height); - return this; - }, - setUrl: function(url) { - this.url = url === "" ? null : url; - return this.update(); - }, - getUrl: function() { - return this.url; - }, - setWidth: function(width) { - this.width = width; - return this.update(); - }, - getWidth: function() { - return this.width; - }, - setHeight: function(height) { - this.height = height; - return this.update(); - }, - getHeight: function() { - return this.height; - }, - setX: function(x) { - this.x = x; - return this.update(); - }, - getX: function() { - return this.x; - }, - setY: function(y) { - this.y = y; - return this.update(); - }, - getY: function() { - return this.y; - } - }); - } -}; - -//src/graphic/line.js -_p[39] = { - value: function(require, exports, module) { - return _p.r(11).createClass("Line", { - base: _p.r(46), - constructor: function(x1, y1, x2, y2) { - this.callBase(); - this.point1 = { - x: x1 || 0, - y: y1 || 0 - }; - this.point2 = { - x: x2 || 0, - y: y2 || 0 - }; - this.update(); - }, - setPoint1: function(x, y) { - this.point1.x = x; - this.point1.y = y; - return this.update(); - }, - setPoint2: function(x, y) { - this.point2.x = x; - this.point2.y = y; - return this.update(); - }, - getPoint1: function() { - return { - x: this.point1.x, - y: this.point1.y - }; - }, - getPoint2: function() { - return { - x: this.point2.x, - y: this.point2.y - }; - }, - update: function() { - var drawer = this.getDrawer(); - drawer.clear(); - drawer.moveTo(this.point1.x, this.point1.y); - drawer.lineTo(this.point2.x, this.point2.y); - return this; - } - }); - } -}; - -//src/graphic/lineargradient.js -_p[40] = { - value: function(require, exports, module) { - var svg = _p.r(67); - var Gradient = _p.r(35); - return _p.r(11).createClass("LinearGradientBrush", { - base: Gradient, - constructor: function(paper) { - this.callBase("linearGradient", paper); - this.setStartPosition(0, 0); - this.setEndPosition(1, 0); - }, - setStartPosition: function(px, py) { - this.node.setAttribute("x1", px); - this.node.setAttribute("y1", py); - return this; - }, - setEndPosition: function(px, py) { - this.node.setAttribute("x2", px); - this.node.setAttribute("y2", py); - return this; - }, - getStartPosition: function() { - return { - x: +this.node.getAttribute("x1"), - y: +this.node.getAttribute("y1") - }; - }, - getEndPosition: function() { - return { - x: +this.node.getAttribute("x2"), - y: +this.node.getAttribute("y2") - }; - } - }); - } -}; - -//src/graphic/marker.js -_p[41] = { - value: function(require, exports, module) { - var Point = _p.r(50); - var Marker = _p.r(11).createClass("Marker", { - base: _p.r(58), - mixins: [ _p.r(61), _p.r(75) ], - constructor: function() { - this.callBase("marker"); - this.setOrient("auto"); - }, - setRef: function(x, y) { - if (arguments.length === 1) { - y = x.y; - x = x.x; - } - this.node.setAttribute("refX", x); - this.node.setAttribute("refY", y); - return this; - }, - getRef: function() { - return new Point(+this.node.getAttribute("refX"), +this.node.getAttribute("refY")); - }, - setWidth: function(width) { - this.node.setAttribute("markerWidth", this.width = width); - return this; - }, - setOrient: function(orient) { - this.node.setAttribute("orient", this.orient = orient); - return this; - }, - getOrient: function() { - return this.orient; - }, - getWidth: function() { - return +this.width; - }, - setHeight: function(height) { - this.node.setAttribute("markerHeight", this.height = height); - return this; - }, - getHeight: function() { - return +this.height; - } - }); - var Path = _p.r(46); - _p.r(11).extendClass(Path, { - setMarker: function(marker, pos) { - pos = pos || "end"; - if (!marker) { - this.node.removeAttribute("marker-" + pos); - } else { - this.node.setAttribute("marker-" + pos, marker.toString()); - } - return this; - } - }); - return Marker; - } -}; - -//src/graphic/mask.js -/** - * 蒙板 - */ -_p[42] = { - value: function(require, exports, module) { - var Class = _p.r(11); - var Shape = _p.r(60); - var Mask = Class.createClass("Mask", { - base: Shape, - mixins: [ _p.r(61) ], - constructor: function() { - this.callBase("mask"); - }, - mask: function(shape) { - shape.getNode().setAttribute("mask", "url(#" + this.getId() + ")"); - return this; - } - }); - Class.extendClass(Shape, { - maskWith: function(mask) { - mask.mask(this); - return this; - } - }); - return Mask; - } -}; - -//src/graphic/matrix.js -_p[43] = { - value: function(require, exports, module) { - var utils = _p.r(12); - var Box = _p.r(25); - var mPattern = /matrix\s*\((.+)\)/i; - var Point = _p.r(50); - // 注意,合并的结果是先执行m2,再执行m1的结果 - function mergeMatrixData(m2, m1) { - return { - a: m1.a * m2.a + m1.c * m2.b, - b: m1.b * m2.a + m1.d * m2.b, - c: m1.a * m2.c + m1.c * m2.d, - d: m1.b * m2.c + m1.d * m2.d, - e: m1.a * m2.e + m1.c * m2.f + m1.e, - f: m1.b * m2.e + m1.d * m2.f + m1.f - }; - } - function d2r(deg) { - return deg * Math.PI / 180; - } - var Matrix = _p.r(11).createClass("Matrix", { - constructor: function() { - if (arguments.length) { - this.setMatrix.apply(this, arguments); - } else { - this.setMatrix(1, 0, 0, 1, 0, 0); - } - }, - translate: function(x, y) { - this.m = mergeMatrixData(this.m, { - a: 1, - c: 0, - e: x, - b: 0, - d: 1, - f: y - }); - return this; - }, - rotate: function(deg) { - var rad = d2r(deg); - var sin = Math.sin(rad), cos = Math.cos(rad); - this.m = mergeMatrixData(this.m, { - a: cos, - c: -sin, - e: 0, - b: sin, - d: cos, - f: 0 - }); - return this; - }, - scale: function(sx, sy) { - if (sy === undefined) { - sy = sx; - } - this.m = mergeMatrixData(this.m, { - a: sx, - c: 0, - e: 0, - b: 0, - d: sy, - f: 0 - }); - return this; - }, - skew: function(degX, degY) { - if (degY === undefined) { - degY = degX; - } - var tx = Math.tan(d2r(degX)), ty = Math.tan(d2r(degY)); - this.m = mergeMatrixData(this.m, { - a: 1, - c: tx, - e: 0, - b: ty, - d: 1, - f: 0 - }); - return this; - }, - /** - * 获得反转矩阵 - * - * 这是我解方程算出来的 - */ - inverse: function() { - var m = this.m, a = m.a, b = m.b, c = m.c, d = m.d, e = m.e, f = m.f, k, aa, bb, cc, dd, ee, ff; - k = a * d - b * c; - aa = d / k; - bb = -b / k; - cc = -c / k; - dd = a / k; - ee = (c * f - e * d) / k; - ff = (b * e - a * f) / k; - return new Matrix(aa, bb, cc, dd, ee, ff); - }, - setMatrix: function(a, b, c, d, e, f) { - if (arguments.length === 1) { - this.m = utils.clone(arguments[0]); - } else { - this.m = { - a: a, - b: b, - c: c, - d: d, - e: e, - f: f - }; - } - return this; - }, - getMatrix: function() { - return utils.clone(this.m); - }, - getTranslate: function() { - var m = this.m; - return { - x: m.e / m.a, - y: m.f / m.d - }; - }, - mergeMatrix: function(matrix) { - return new Matrix(mergeMatrixData(this.m, matrix.m)); - }, - merge: function(matrix) { - return this.mergeMatrix(matrix); - }, - toString: function() { - return this.valueOf().join(" "); - }, - valueOf: function() { - var m = this.m; - return [ m.a, m.b, m.c, m.d, m.e, m.f ]; - }, - equals: function(matrix) { - var m1 = this.m, m2 = matrix.m; - return m1.a == m2.a && m1.b == m2.b && m1.c == m2.c && m1.d == m2.d && m1.e == m2.e && m1.f == m2.f; - }, - transformPoint: function() { - return Matrix.transformPoint.apply(null, [].slice.call(arguments).concat([ this.m ])); - }, - transformBox: function(box) { - return Matrix.transformBox(box, this.m); - }, - clone: function() { - return new Matrix(this.m); - } - }); - Matrix.parse = function(str) { - var match; - var f = parseFloat; - if (str instanceof Array) { - return new Matrix({ - a: str[0], - b: str[1], - c: str[2], - d: str[3], - e: str[4], - f: str[5] - }); - } - if (match = mPattern.exec(str)) { - var values = match[1].split(","); - if (values.length != 6) { - values = match[1].split(" "); - } - return new Matrix({ - a: f(values[0]), - b: f(values[1]), - c: f(values[2]), - d: f(values[3]), - e: f(values[4]), - f: f(values[5]) - }); - } - return new Matrix(); - }; - Matrix.transformPoint = function(x, y, m) { - if (arguments.length === 2) { - m = y; - y = x.y; - x = x.x; - } - return new Point(m.a * x + m.c * y + m.e, m.b * x + m.d * y + m.f); - }; - Matrix.transformBox = function(box, matrix) { - var xMin = Number.MAX_VALUE, xMax = -Number.MAX_VALUE, yMin = Number.MAX_VALUE, yMax = -Number.MAX_VALUE; - var bps = [ [ box.x, box.y ], [ box.x + box.width, box.y ], [ box.x, box.y + box.height ], [ box.x + box.width, box.y + box.height ] ]; - var bp, rp, rps = []; - while (bp = bps.pop()) { - rp = Matrix.transformPoint(bp[0], bp[1], matrix); - rps.push(rp); - xMin = Math.min(xMin, rp.x); - xMax = Math.max(xMax, rp.x); - yMin = Math.min(yMin, rp.y); - yMax = Math.max(yMax, rp.y); - } - box = new Box({ - x: xMin, - y: yMin, - width: xMax - xMin, - height: yMax - yMin - }); - utils.extend(box, { - closurePoints: rps - }); - return box; - }; - // 获得从 node 到 refer 的变换矩阵 - Matrix.getCTM = function(target, refer) { - var ctm = { - a: 1, - b: 0, - c: 0, - d: 1, - e: 0, - f: 0 - }; - var node = target.shapeNode || target.node; - refer = refer || "parent"; - /** - * 由于新版chrome(dev 48.0)移除了getTransformToElement这个方法可能导致报错,这里做兼容处理 - * @Date 2015-11-12 - * @Editor Naixor - */ - function getTransformToElement(target, source) { - var matrix; - try { - matrix = source.getScreenCTM().inverse(); - } catch (e) { - throw new Error("Can not inverse source element' ctm."); - } - return matrix.multiply(target.getScreenCTM()); - } - // 根据参照坐标系选区的不一样,返回不同的结果 - switch (refer) { - case "screen": - // 以浏览器屏幕为参照坐标系 - ctm = node.getScreenCTM(); - break; - - case "doc": - case "paper": - // 以文档(Paper)为参照坐标系 - ctm = node.getCTM(); - break; - - case "view": - case "top": - // 以顶层绘图容器(视野)为参照坐标系 - if (target.getPaper()) { - ctm = node.getTransformToElement !== undefined ? node.getTransformToElement(target.getPaper().shapeNode) : getTransformToElement(node, target.getPaper().shapeNode); - } - break; - - case "parent": - // 以父容器为参照坐标系 - if (target.node.parentNode) { - ctm = node.getTransformToElement !== undefined ? node.getTransformToElement(target.node.parentNode) : getTransformToElement(node, target.node.parentNode); - } - break; - - default: - // 其他情况,指定参照物 - if (refer.node) { - ctm = node.getTransformToElement !== undefined ? node.getTransformToElement(refer.shapeNode || refer.node) : getTransformToElement(node, refer.shapeNode || refer.node); - } - } - return ctm ? new Matrix(ctm.a, ctm.b, ctm.c, ctm.d, ctm.e, ctm.f) : new Matrix(); - }; - return Matrix; - } -}; - -//src/graphic/palette.js -/** - * 调色板 - */ -_p[44] = { - value: function(require, exports, module) { - //标准color - var StandardColor = _p.r(64), Color = _p.r(28), Utils = _p.r(12); - var Palette = _p.r(11).createClass("Palette", { - constructor: function() { - this.color = {}; - }, - /* - * 获取颜色名称所对应的颜色值的Color对象 - * @param name 需要获取的颜色名称 - * @return 对应颜色名称的color对象, 如果未找到对应的名称, 则返回null - */ - get: function(name) { - var colorValue = this.color[name] || StandardColor.EXTEND_STANDARD[name] || StandardColor.COLOR_STANDARD[name] || ""; - if (colorValue) { - return new Color(colorValue); - } - return null; - }, - /* - * 获取给定名称的颜色的hex值表示 - * @param name 需要获取的颜色名称 - * @return 如果找到对应的名称, 则返回该名称所对应的hex格式的值, 否则, 返回一个空字符串 - */ - getColorValue: function(name) { - return this.color[name] || StandardColor.EXTEND_STANDARD[name] || StandardColor.COLOR_STANDARD[name] || ""; - }, - /* - * 向调色板实例添加自己独有的颜色名称,对已存在的颜色名称, 将会覆盖掉 - * @param name 新添加的颜色名称 - * @param value 新添加的颜色名称所对应的值, 可以是一个合法的颜色字符串或者是一个color对象 - * @return 新添加的颜色的值 - */ - add: function(name, value) { - if (typeof value === "string") { - this.color[name] = new Color(value).toRGBA(); - } else { - this.color[name] = value.toRGBA(); - } - return value; - }, - /* - * 删除调色板实例上用户自己添加的颜色, 该方法不能删除内置的颜色 - * @param name 需要删除的颜色名称 - * @return 删除是否成功的bool值 - */ - remove: function(name) { - if (this.color.hasOwnProperty(name)) { - delete this.color[name]; - return true; - } - return false; - } - }); - Utils.extend(Palette, { - getColor: function(name) { - var colorValue = StandardColor.EXTEND_STANDARD[name] || StandardColor.COLOR_STANDARD[name]; - if (colorValue) { - return new Color(colorValue); - } - return null; - }, - /* - * 通过给定的名字获取标准的颜色值表示, 返回的值以hex的方式提供 - * @param name 需要获取的标准颜色名称 - * @return 名字所对应的颜色值的hex表示, 如果未找到对应名称的值, 则返回一个空字符串 - */ - getColorValue: function(name) { - return StandardColor.EXTEND_STANDARD[name] || StandardColor.COLOR_STANDARD[name] || ""; - }, - /* - * 向调色板添加颜色名称,新添加的颜色对所有的调色板对象都可见 - * 对已存在的颜色名称, 将会覆盖掉 - * @param name 新添加的颜色名称 - * @param value 新添加的颜色名称所对于的值, 应该是一个hex格式的颜色字符串, 如: ”#ff0000“ - * @return 新添加的颜色的值 - */ - addColor: function(name, value) { - if (typeof value === "string") { - StandardColor.EXTEND_STANDARD[name] = new Color(value).toRGBA(); - } else { - StandardColor.EXTEND_STANDARD[name] = value.toRGBA(); - } - return value; - }, - /* - * 删除用户自己添加的颜色, 该方法不能删除内置的颜色, 该方法不会影响调色板实例自由的颜色 - * @param name 需要删除的颜色名称 - * @return 删除是否成功的bool值 - */ - removeColor: function(name) { - if (StandardColor.EXTEND_STANDARD.hasOwnProperty(name)) { - delete StandardColor.EXTEND_STANDARD[name]; - return true; - } - return false; - } - }); - return Palette; - } -}; - -//src/graphic/paper.js -_p[45] = { - value: function(require, exports, module) { - var Class = _p.r(11); - var utils = _p.r(12); - var svg = _p.r(67); - var Container = _p.r(29); - var ShapeContainer = _p.r(61); - var ViewBox = _p.r(75); - var EventHandler = _p.r(33); - var Styled = _p.r(66); - var Matrix = _p.r(43); - var Paper = Class.createClass("Paper", { - mixins: [ ShapeContainer, EventHandler, Styled, ViewBox ], - constructor: function(container) { - this.callBase(); - this.node = this.createSVGNode(); - this.node.paper = this; - this.node.appendChild(this.resourceNode = svg.createNode("defs")); - this.node.appendChild(this.shapeNode = svg.createNode("g")); - this.resources = new Container(); - this.setWidth("100%").setHeight("100%"); - if (container) { - this.renderTo(container); - } - this.callMixin(); - }, - renderTo: function(container) { - if (utils.isString(container)) { - container = document.getElementById(container); - } - this.container = container; - container.appendChild(this.node); - }, - createSVGNode: function() { - var node = svg.createNode("svg"); - node.setAttribute("xmlns", "http://www.w3.org/2000/svg"); - node.setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); - node.setAttribute("version", "1.1"); - return node; - }, - getNode: function() { - return this.node; - }, - getContainer: function() { - return this.container; - }, - getWidth: function() { - return this.node.clientWidth; - }, - setWidth: function(width) { - this.node.setAttribute("width", width); - return this; - }, - getHeight: function() { - return this.node.clientHeight; - }, - setHeight: function(height) { - this.node.setAttribute("height", height); - return this; - }, - setViewPort: function(cx, cy, zoom) { - var viewport, box; - if (arguments.length == 1) { - viewport = arguments[0]; - cx = viewport.center.x; - cy = viewport.center.y; - zoom = viewport.zoom; - } - zoom = zoom || 1; - box = this.getViewBox(); - var matrix = new Matrix(); - var dx = box.x + box.width / 2 - cx, dy = box.y + box.height / 2 - cy; - matrix.translate(-cx, -cy); - matrix.scale(zoom); - matrix.translate(cx, cy); - matrix.translate(dx, dy); - this.shapeNode.setAttribute("transform", "matrix(" + matrix + ")"); - this.viewport = { - center: { - x: cx, - y: cy - }, - offset: { - x: dx, - y: dy - }, - zoom: zoom - }; - return this; - }, - getViewPort: function() { - if (!this.viewport) { - var box = this.getViewBox(); - return { - zoom: 1, - center: { - x: box.x + box.width / 2, - y: box.y + box.height / 2 - }, - offset: { - x: 0, - y: 0 - } - }; - } - return this.viewport; - }, - getViewPortMatrix: function() { - return Matrix.parse(this.shapeNode.getAttribute("transform")); - }, - getViewPortTransform: function() { - var m = this.shapeNode.getCTM(); - return new Matrix(m.a, m.b, m.c, m.d, m.e, m.f); - }, - getTransform: function() { - return this.getViewPortTransform().reverse(); - }, - addResource: function(resource) { - this.resources.appendItem(resource); - if (resource.node) { - this.resourceNode.appendChild(resource.node); - } - return this; - }, - removeResource: function(resource) { - if (resource.remove) { - resource.remove(); - } - if (resource.node) { - this.resourceNode.removeChild(resource.node); - } - return this; - }, - getPaper: function() { - return this; - } - }); - var Shape = _p.r(60); - Class.extendClass(Shape, { - getPaper: function() { - var parent = this.container; - while (parent && parent instanceof Paper === false) { - parent = parent.container; - } - return parent; - }, - isAttached: function() { - return !!this.getPaper(); - }, - whenPaperReady: function(fn) { - var me = this; - function check() { - var paper = me.getPaper(); - if (paper && fn) { - fn.call(me, paper); - } - return paper; - } - if (!check()) { - this.on("add treeadd", function listen() { - if (check()) { - me.off("add", listen); - me.off("treeadd", listen); - } - }); - } - return this; - } - }); - return Paper; - } -}; - -//src/graphic/path.js -_p[46] = { - value: function(require, exports, module) { - var Utils = _p.r(12); - var createClass = _p.r(11).createClass; - var Shape = _p.r(60); - var svg = _p.r(67); - var g = _p.r(34); - var slice = Array.prototype.slice, flatten = Utils.flatten; - var PathDrawer = createClass("PathDrawer", { - constructor: function(path) { - this.segment = []; - this.path = path; - this.__clear = false; - }, - getPath: function() { - return this.path; - }, - redraw: function() { - this._transation = this._transation || []; - return this.clear(); - }, - done: function() { - var transation = this._transation; - this._transation = null; - this.push(transation); - return this; - }, - clear: function() { - if (this._transation) { - this._transation = []; - } else { - this.path.setPathData("M 0 0"); - } - this._clear = true; - return this; - }, - push: function() { - var segment = slice.call(arguments); - var originData; - if (this._transation) { - this._transation.push(segment); - return this; - } - if (this._clear) { - originData = ""; - this._clear = false; - } else { - originData = this.path.getPathData(); - } - originData = originData || ""; - this.path.setPathData(originData + g.pathToString(segment)); - return this; - }, - moveTo: function(x, y) { - return this.push("M", slice.call(arguments)); - }, - moveBy: function(dx, dy) { - return this.push("m", slice.call(arguments)); - }, - lineTo: function(x, y) { - return this.push("L", slice.call(arguments)); - }, - lineBy: function(dx, dy) { - return this.push("l", slice.call(arguments)); - }, - arcTo: function(rx, ry, xr, laf, sf, x, y) { - return this.push("A", slice.call(arguments)); - }, - arcBy: function(rx, ry, xr, laf, sf, dx, dy) { - return this.push("a", arguments); - }, - carcTo: function(r, laf, sf, x, y) { - return this.push("A", [ r, r, 0 ].concat(slice.call(arguments, 1))); - }, - carcBy: function(r, laf, sf, dx, dy) { - return this.push("a", [ r, r, 0 ].concat(slice.call(arguments, 1))); - }, - bezierTo: function(x1, y1, x2, y2, x, y) { - return this.push("C", slice.call(arguments)); - }, - bezierBy: function(dx1, dy1, dx2, dy2, dx, dy) { - return this.push("c", slice.call(arguments)); - }, - close: function() { - return this.push("z"); - } - }); - return createClass("Path", { - base: Shape, - constructor: function(data) { - this.callBase("path"); - if (data) { - this.setPathData(data); - } - this.node.setAttribute("fill", svg.defaults.fill); - this.node.setAttribute("stroke", svg.defaults.stroke); - }, - setPathData: function(data) { - data = data || "M0,0"; - this.pathdata = g.pathToString(data); - this.node.setAttribute("d", this.pathdata); - this.trigger("shapeupdate", { - type: "pathdata" - }); - return this; - }, - getPathData: function() { - return this.pathdata || ""; - }, - getDrawer: function() { - return new PathDrawer(this); - }, - isClosed: function() { - var data = this.getPathData(); - return !!~data.indexOf("z") || !!~data.indexOf("Z"); - } - }); - } -}; - -//src/graphic/pattern.js -_p[47] = { - value: function(require, exports, module) { - var Resource = _p.r(58); - var ShapeContainer = _p.r(61); - var svg = _p.r(67); - return _p.r(11).createClass("PatternBrush", { - base: Resource, - mixins: [ ShapeContainer ], - constructor: function(paper) { - this.callBase("pattern", paper); - this.node.setAttribute("patternUnits", "userSpaceOnUse"); - }, - setX: function(x) { - this.x = x; - this.node.setAttribute("x", x); - return this; - }, - setY: function(y) { - this.y = y; - this.node.setAttribute("y", y); - return this; - }, - setWidth: function(width) { - this.width = width; - this.node.setAttribute("width", width); - return this; - }, - setHeight: function(height) { - this.height = height; - this.node.setAttribute("height", height); - return this; - }, - getWidth: function() { - return this.width; - }, - getHeight: function() { - return this.height; - } - }); - } -}; - -//src/graphic/pen.js -_p[48] = { - value: function(require, exports, module) { - var Color = _p.r(28); - return _p.r(11).createClass("Pen", { - constructor: function(brush, width) { - this.brush = brush; - this.width = width || 1; - this.linecap = null; - this.linejoin = null; - this.dashArray = null; - this.opacity = 1; - }, - getBrush: function() { - return this.brush; - }, - setBrush: function(brush) { - this.brush = brush; - return this; - }, - setColor: function(color) { - return this.setBrush(color); - }, - getColor: function() { - return this.brush instanceof Color ? this.brush : null; - }, - getWidth: function() { - return this.width; - }, - setWidth: function(width) { - this.width = width; - return this; - }, - getOpacity: function() { - return this.opacity; - }, - setOpacity: function(opacity) { - this.opacity = opacity; - }, - getLineCap: function() { - return this.linecap; - }, - setLineCap: function(linecap) { - this.linecap = linecap; - return this; - }, - getLineJoin: function() { - return this.linejoin; - }, - setLineJoin: function(linejoin) { - this.linejoin = linejoin; - return this; - }, - getDashArray: function() { - return this.dashArray; - }, - setDashArray: function(dashArray) { - this.dashArray = dashArray; - return this; - }, - stroke: function(shape) { - var node = shape.node; - node.setAttribute("stroke", this.brush.toString()); - node.setAttribute("stroke-width", this.getWidth()); - if (this.getOpacity() < 1) { - node.setAttribute("stroke-opacity", this.getOpacity()); - } - if (this.getLineCap()) { - node.setAttribute("stroke-linecap", this.getLineCap()); - } - if (this.getLineJoin()) { - node.setAttribute("stroke-linejoin", this.getLineJoin()); - } - if (this.getDashArray()) { - node.setAttribute("stroke-dasharray", this.getDashArray()); - } - } - }); - } -}; - -//src/graphic/pie.js -_p[49] = { - value: function(require, exports, module) { - return _p.r(11).createClass({ - base: _p.r(68), - constructor: function(radius, angle, angleOffset) { - this.callBase([ 0, radius ], angle, angleOffset); - }, - getRadius: function() { - return this.getSectionArray()[1]; - }, - setRadius: function(radius) { - this.setSectionArray([ 0, radius ]); - } - }); - } -}; - -//src/graphic/point.js -/* - * 点对象抽象 - */ -_p[50] = { - value: function(require, exports, module) { - /** - * @class kity.Point - * @description 表示一个点 - */ - var Point = _p.r(11).createClass("Point", { - /** - * @constructor - * @for kity.Point - * @description 指定默认的 x 和 y 创建一个点 - * - * @param {Number} x 点的 x 坐标 - * @param {Number} y 点的 y 坐标 - */ - constructor: function(x, y) { - /** - * @property - * @for kity.Point - * @description 表示点的 x 坐标 - * @type {Number} - */ - this.x = x || 0; - /** - * @property - * @for kity.Point - * @description 表示点的 y 坐标 - * @type {Number} - */ - this.y = y || 0; - }, - offset: function(dx, dy) { - if (arguments.length == 1) { - dy = dx.y; - dx = dx.x; - } - return new Point(this.x + dx, this.y + dy); - }, - valueOf: function() { - return [ this.x, this.y ]; - }, - toString: function() { - return this.valueOf().join(" "); - }, - spof: function() { - return new Point((this.x | 0) + .5, (this.y | 0) + .5); - }, - round: function() { - return new Point(this.x | 0, this.y | 0); - }, - isOrigin: function() { - return this.x === 0 && this.y === 0; - } - }); - /** - * @static - * @method fromPolar() - * @for kity.Point - * @grammar kity.Point.fromPolar(radius, angle, unit) => kity.Point - * @param {Number} radius 极坐标中的半径 - * @param {Number} angle 极坐标中的角度 - * @param {String} unit 角度使用的单位,默认为 'deg' (角度),可以取值为 'rad',表示传入的是弧度值 - */ - Point.fromPolar = function(radius, angle, unit) { - if (unit != "rad") { - // deg to rad - angle = angle / 180 * Math.PI; - } - return new Point(radius * Math.cos(angle), radius * Math.sin(angle)); - }; - Point.parse = function(unknown) { - if (!unknown) return new Point(); - if (unknown instanceof Point) { - return unknown; - } - if (typeof unknown == "string") { - return Point.parse(unknown.split(/\s*[\s,]\s*/)); - } - if ("0" in unknown && "1" in unknown) { - return new Point(unknown[0], unknown[1]); - } - }; - return Point; - } -}; - -//src/graphic/pointcontainer.js -/** - * 点集合容器 - */ -_p[51] = { - value: function(require, exports, module) { - return _p.r(11).createClass("PointContainer", { - base: _p.r(29), - constructor: function() { - this.callBase(); - }, - addPoint: function(point, pos) { - return this.addItem.apply(this, arguments); - }, - prependPoint: function() { - return this.prependItem.apply(this, arguments); - }, - appendPoint: function() { - return this.appendItem.apply(this, arguments); - }, - removePoint: function(pos) { - return this.removeItem.apply(this, arguments); - }, - addPoints: function() { - return this.addItems.apply(this, arguments); - }, - setPoints: function() { - return this.setItems.apply(this, arguments); - }, - getPoint: function() { - return this.getItem.apply(this, arguments); - }, - getPoints: function() { - return this.getItems.apply(this, arguments); - }, - getFirstPoint: function() { - return this.getFirstItem.apply(this, arguments); - }, - getLastPoint: function() { - return this.getLastItem.apply(this, arguments); - } - }); - } -}; - -//src/graphic/poly.js -/* - * 通过点来决定图形的公共父类 - */ -_p[52] = { - value: function(require, exports, module) { - var Utils = _p.r(12); - return _p.r(11).createClass("Poly", { - base: _p.r(46), - mixins: [ _p.r(51) ], - constructor: function(points, closeable) { - this.callBase(); - //是否可闭合 - this.closeable = !!closeable; - this.setPoints(points || []); - this.changeable = true; - this.update(); - }, - //当点集合发生变化时采取的动作 - onContainerChanged: function() { - if (this.changeable) { - this.update(); - } - }, - update: function() { - var drawer = this.getDrawer(), points = this.getPoints(); - drawer.clear(); - if (!points.length) { - return this; - } - drawer.moveTo(points[0]); - for (var i = 1, point, len = points.length; i < len; i++) { - point = points[i]; - drawer.lineTo(point); - } - if (this.closeable && points.length > 2) { - drawer.close(); - } - return this; - } - }); - } -}; - -//src/graphic/polygon.js -_p[53] = { - value: function(require, exports, module) { - return _p.r(11).createClass("Polygon", { - base: _p.r(52), - constructor: function(points) { - this.callBase(points, true); - } - }); - } -}; - -//src/graphic/polyline.js -_p[54] = { - value: function(require, exports, module) { - return _p.r(11).createClass("Polyline", { - base: _p.r(52), - constructor: function(points) { - this.callBase(points); - } - }); - } -}; - -//src/graphic/radialgradient.js -_p[55] = { - value: function(require, exports, module) { - var Gradient = _p.r(35); - return _p.r(11).createClass("RadialGradientBrush", { - base: Gradient, - constructor: function(paper) { - this.callBase("radialGradient", paper); - this.setCenter(.5, .5); - this.setFocal(.5, .5); - this.setRadius(.5); - }, - setCenter: function(cx, cy) { - this.node.setAttribute("cx", cx); - this.node.setAttribute("cy", cy); - return this; - }, - getCenter: function() { - return { - x: +this.node.getAttribute("cx"), - y: +this.node.getAttribute("cy") - }; - }, - setFocal: function(fx, fy) { - this.node.setAttribute("fx", fx); - this.node.setAttribute("fy", fy); - return this; - }, - getFocal: function() { - return { - x: +this.node.getAttribute("fx"), - y: +this.node.getAttribute("fy") - }; - }, - setRadius: function(r) { - this.node.setAttribute("r", r); - return this; - }, - getRadius: function() { - return +this.node.getAttribute("r"); - } - }); - } -}; - -//src/graphic/rect.js -_p[56] = { - value: function(require, exports, module) { - var RectUtils = {}, Utils = _p.r(12), Point = _p.r(50), Box = _p.r(25); - Utils.extend(RectUtils, { - //根据传递进来的width、height和radius属性, - //获取最适合的radius值 - formatRadius: function(width, height, radius) { - var minValue = Math.floor(Math.min(width / 2, height / 2)); - return Math.min(minValue, radius); - } - }); - /** - * @class kity.Rect - * @description 表示一个矩形 - * @base kity.Path - */ - var Rect = _p.r(11).createClass("Rect", { - base: _p.r(46), - /** - * @constructor - * @for kity.Rect - * @grammar new kity.Rect(width, height, x, y, radius) - * @param {Number} width 矩形的初始化宽度 - * @param {Number} height 矩形的初始化高度 - * @param {Number} x 矩形的初始化 x 坐标 - * @param {Number} y 矩形的初始化 y 坐标 - * @param {Number} radius 矩形的初始化圆角大小 - */ - constructor: function(width, height, x, y, radius) { - this.callBase(); - this.x = x || 0; - this.y = y || 0; - this.width = width || 0; - this.height = height || 0; - this.radius = RectUtils.formatRadius(this.width, this.height, radius || 0); - this.update(); - }, - update: function() { - var x = this.x, y = this.y, w = this.width, h = this.height, r = this.radius; - var drawer = this.getDrawer().redraw(); - if (!r) { - // 直角 - drawer.push("M", x, y); - drawer.push("h", w); - drawer.push("v", h); - drawer.push("h", -w); - drawer.push("z"); - } else { - //圆角 - w -= 2 * r; - h -= 2 * r; - drawer.push("M", x + r, y); - drawer.push("h", w); - drawer.push("a", r, r, 0, 0, 1, r, r); - drawer.push("v", h); - drawer.push("a", r, r, 0, 0, 1, -r, r); - drawer.push("h", -w); - drawer.push("a", r, r, 0, 0, 1, -r, -r); - drawer.push("v", -h); - drawer.push("a", r, r, 0, 0, 1, r, -r); - drawer.push("z"); - } - drawer.done(); - return this; - }, - /** - * @method setWidth - * @for kity.Rect - * @grammar setWidth(width) => kity.Rect - * @description 设置矩形的宽度,设置后返回矩形实例本身 - * @param {Number} width 宽度值 - * - * @example - * ```js - * rect.setWidth(300); - * ``` - */ - setWidth: function(width) { - this.width = width; - return this.update(); - }, - /** - * @method setHeight - * @for kity.Rect - * @grammar setHeight(height) => kity.Rect - * @description 设置矩形的高度,设置后返回矩形实例本身 - * @param {Number} height 高度值 - * - * @example - * ```js - * rect.setHeight(200); - * ``` - */ - setHeight: function(height) { - this.height = height; - return this.update(); - }, - /** - * @method setSize - * @for kity.Rect - * @grammar setSize(width, height) => kity.Rect - * @description 设置矩形的尺寸,设置后返回矩形本身 - * @param {Number} width 矩形的宽度值 - * @param {Number} height 矩形的高度值 - * - * @example - * ```js - * rect.setSize(300, 200); - * ``` - */ - setSize: function(width, height) { - this.width = width; - this.height = height; - return this.update(); - }, - /** - * @method setBox - * @for kity.Rect - * @grammar setBox(box) => kity.Rect - * @description 使用一个 kity 的盒子数据, - * @param {kity.Box} box 盒子数据 - */ - setBox: function(box) { - this.x = box.x; - this.y = box.y; - this.width = box.width; - this.height = box.height; - return this.update(); - }, - getBox: function() { - return new Box(this.x, this.y, this.width, this.height); - }, - getRadius: function() { - return this.radius; - }, - setRadius: function(radius) { - this.radius = RectUtils.formatRadius(this.width, this.height, radius || 0); - return this.update(); - }, - getPosition: function() { - return new Point(this.x, this.y); - }, - setPosition: function(x, y) { - if (arguments.length == 1) { - var p = Point.parse(arguments[0]); - y = p.y; - x = p.x; - } - this.x = x; - this.y = y; - return this.update(); - }, - getWidth: function() { - return this.width; - }, - getHeight: function() { - return this.height; - }, - getPositionX: function() { - return this.x; - }, - getPositionY: function() { - return this.y; - }, - setPositionX: function(x) { - this.x = x; - return this.update(); - }, - setPositionY: function(y) { - this.y = y; - return this.update(); - } - }); - return Rect; - } -}; - -//src/graphic/regularpolygon.js -_p[57] = { - value: function(require, exports, module) { - var Point = _p.r(50); - return _p.r(11).createClass("RegularPolygon", { - base: _p.r(46), - constructor: function(side, radius, x, y) { - this.callBase(); - this.radius = radius || 0; - this.side = Math.max(side || 3, 3); - if (arguments.length > 2) { - if (arguments.length == 3) { - y = x.y; - x = x.x; - } - } - this.center = new Point(x, y); - this.draw(); - }, - getSide: function() { - return this.side; - }, - setSide: function(side) { - this.side = side; - return this.draw(); - }, - getRadius: function() { - return this.radius; - }, - setRadius: function(radius) { - this.radius = radius; - return this.draw(); - }, - draw: function() { - var radius = this.radius, side = this.side, step = Math.PI * 2 / side, drawer = this.getDrawer(), i; - drawer.clear(); - drawer.moveTo(Point.fromPolar(radius, Math.PI / 2, "rad").offset(this.center)); - for (i = 0; i <= side; i++) { - drawer.lineTo(Point.fromPolar(radius, step * i + Math.PI / 2, "rad").offset(this.center)); - } - drawer.close(); - return this; - } - }); - } -}; - -//src/graphic/resource.js -/** - * @fileOverview - * - * 资源节点基类 - * - * @author: techird - * @copyright: Baidu FEX, 2014 - */ -_p[58] = { - value: function(require, exports, module) { - var svg = _p.r(67); - return _p.r(11).createClass("Resource", { - constructor: function(nodeType, paper) { - this.callBase(); - this.node = svg.createNode(nodeType); - if (paper) { - paper.addResource(this); - } - }, - toString: function() { - return "url(#" + this.node.id + ")"; - } - }); - } -}; - -//src/graphic/ring.js -_p[59] = { - value: function(require, exports, module) { - return _p.r(11).createClass({ - base: _p.r(68), - constructor: function(innerRadius, outerRadius) { - this.callBase([ innerRadius, outerRadius ], 360, 0); - }, - getInnerRadius: function() { - return this.getSectionArray()[0]; - }, - getOuterRadius: function() { - return this.getSectionArray()[1]; - }, - setInnerRadius: function(value) { - this.setSectionArray([ value, this.getOuterRadius() ]); - }, - setOuterRadius: function(value) { - this.setSectionArray([ this.getInnerRadius(), value ]); - } - }); - } -}; - -//src/graphic/shape.js -_p[60] = { - value: function(require, exports, module) { - var svg = _p.r(67); - var utils = _p.r(12); - var EventHandler = _p.r(33); - var Styled = _p.r(66); - var Data = _p.r(31); - var Matrix = _p.r(43); - var Pen = _p.r(48); - var slice = Array.prototype.slice; - var Box = _p.r(25); - var Shape = _p.r(11).createClass("Shape", { - mixins: [ EventHandler, Styled, Data ], - constructor: function Shape(tagName) { - this.node = svg.createNode(tagName); - this.node.shape = this; - this.transform = { - translate: null, - rotate: null, - scale: null, - matrix: null - }; - this.callMixin(); - }, - getId: function() { - return this.node.id; - }, - setId: function(id) { - this.node.id = id; - return this; - }, - getNode: function() { - return this.node; - }, - getBoundaryBox: function() { - var box; - try { - box = this.node.getBBox(); - } catch (e) { - box = { - x: this.node.clientLeft, - y: this.node.clientTop, - width: this.node.clientWidth, - height: this.node.clientHeight - }; - } - return new Box(box); - }, - getRenderBox: function(refer) { - var box = this.getBoundaryBox(); - var matrix = this.getTransform(refer); - return matrix.transformBox(box); - }, - getWidth: function() { - return this.getRenderBox().width; - }, - getHeight: function() { - return this.getRenderBox().height; - }, - getSize: function() { - var box = this.getRenderBox(); - delete box.x; - delete box.y; - return box; - }, - setOpacity: function(value) { - this.node.setAttribute("opacity", value); - return this; - }, - getOpacity: function() { - var opacity = this.node.getAttribute("opacity"); - return opacity ? +opacity : 1; - }, - setVisible: function(value) { - if (value) { - this.node.removeAttribute("display"); - } else { - this.node.setAttribute("display", "none"); - } - return this; - }, - getVisible: function() { - this.node.getAttribute("display"); - }, - hasAncestor: function(node) { - var parent = this.container; - while (parent) { - if (parent === node) { - return true; - } - parent = parent.container; - } - return false; - }, - getTransform: function(refer) { - return Matrix.getCTM(this, refer); - }, - clearTransform: function() { - this.node.removeAttribute("transform"); - this.transform = { - translate: null, - rotate: null, - scale: null, - matrix: null - }; - this.trigger("shapeupdate", { - type: "transform" - }); - return this; - }, - _applyTransform: function() { - var t = this.transform, result = []; - if (t.translate) { - result.push([ "translate(", t.translate, ")" ]); - } - if (t.rotate) { - result.push([ "rotate(", t.rotate, ")" ]); - } - if (t.scale) { - result.push([ "scale(", t.scale, ")" ]); - } - if (t.matrix) { - result.push([ "matrix(", t.matrix, ")" ]); - } - this.node.setAttribute("transform", utils.flatten(result).join(" ")); - return this; - }, - setMatrix: function(m) { - this.transform.matrix = m; - return this._applyTransform(); - }, - setTranslate: function(t) { - this.transform.translate = t !== null && slice.call(arguments) || null; - return this._applyTransform(); - }, - setRotate: function(r) { - this.transform.rotate = r !== null && slice.call(arguments) || null; - return this._applyTransform(); - }, - setScale: function(s) { - this.transform.scale = s !== null && slice.call(arguments) || null; - return this._applyTransform(); - }, - translate: function(dx, dy) { - var m = this.transform.matrix || new Matrix(); - if (dy === undefined) { - dy = 0; - } - this.transform.matrix = m.translate(dx, dy); - return this._applyTransform(); - }, - rotate: function(deg) { - var m = this.transform.matrix || new Matrix(); - this.transform.matrix = m.rotate(deg); - return this._applyTransform(); - }, - scale: function(sx, sy) { - var m = this.transform.matrix || new Matrix(); - if (sy === undefined) { - sy = sx; - } - this.transform.matrix = m.scale(sx, sy); - return this._applyTransform(); - }, - skew: function(sx, sy) { - var m = this.transform.matrix || new Matrix(); - if (sy === undefined) { - sy = sx; - } - this.transform.matrix = m.skew(sx, sy); - return this._applyTransform(); - }, - stroke: function(pen, width) { - if (pen && pen.stroke) { - pen.stroke(this); - } else if (pen) { - // 字符串或重写了 toString 的对象 - this.node.setAttribute("stroke", pen.toString()); - if (width) { - this.node.setAttribute("stroke-width", width); - } - } else if (pen === null) { - this.node.removeAttribute("stroe"); - } - return this; - }, - fill: function(brush) { - // 字符串或重写了 toString 的对象 - if (brush) { - this.node.setAttribute("fill", brush.toString()); - } - if (brush === null) { - this.node.removeAttribute("fill"); - } - return this; - }, - setAttr: function(a, v) { - var me = this; - if (utils.isObject(a)) { - utils.each(a, function(val, key) { - me.setAttr(key, val); - }); - } - if (v === undefined || v === null || v === "") { - this.node.removeAttribute(a); - } else { - this.node.setAttribute(a, v); - } - return this; - }, - getAttr: function(a) { - return this.node.getAttribute(a); - } - }); - return Shape; - } -}; - -//src/graphic/shapecontainer.js -_p[61] = { - value: function(require, exports, module) { - var Container = _p.r(29); - var utils = _p.r(12); - var ShapeContainer = _p.r(11).createClass("ShapeContainer", { - base: Container, - isShapeContainer: true, - /* private */ - handleAdd: function(shape, index) { - var parent = this.getShapeNode(); - parent.insertBefore(shape.node, parent.childNodes[index] || null); - shape.trigger("add", { - container: this - }); - if (shape.notifyTreeModification) { - shape.notifyTreeModification("treeadd", this); - } - }, - /* private */ - handleRemove: function(shape, index) { - var parent = this.getShapeNode(); - parent.removeChild(shape.node); - shape.trigger("remove", { - container: this - }); - if (shape.notifyTreeModification) { - shape.notifyTreeModification("treeremove", this); - } - }, - /* private */ - notifyTreeModification: function(type, container) { - this.eachItem(function(index, shape) { - if (shape.notifyTreeModification) { - shape.notifyTreeModification(type, container); - } - shape.trigger(type, { - container: container - }); - }); - }, - /* public */ - getShape: function(index) { - return this.getItem(index); - }, - /* public */ - addShape: function(shape, index) { - return this.addItem(shape, index); - }, - put: function(shape) { - this.addShape(shape); - return shape; - }, - appendShape: function(shape) { - return this.addShape(shape); - }, - prependShape: function(shape) { - return this.addShape(shape, 0); - }, - replaceShape: function(replacer, origin) { - var index = this.indexOf(origin); - if (index === -1) { - return; - } - this.removeShape(index); - this.addShape(replacer, index); - return this; - }, - addShapeBefore: function(shape, refer) { - var index = this.indexOf(refer); - return this.addShape(shape, index); - }, - addShapeAfter: function(shape, refer) { - var index = this.indexOf(refer); - return this.addShape(shape, index === -1 ? undefined : index + 1); - }, - /* public */ - addShapes: function(shapes) { - return this.addItems(shapes); - }, - /* public */ - removeShape: function(index) { - return this.removeItem(index); - }, - getShapes: function() { - return this.getItems(); - }, - getShapesByType: function(name) { - var shapes = []; - function getShapes(shape) { - if (name.toLowerCase() == shape.getType().toLowerCase()) { - shapes.push(shape); - } - if (shape.isShapeContainer) { - utils.each(shape.getShapes(), function(n) { - getShapes(n); - }); - } - } - getShapes(this); - return shapes; - }, - /* public */ - getShapeById: function(id) { - return this.getShapeNode().getElementById(id).shape; - }, - arrangeShape: function(shape, index) { - return this.removeShape(shape).addShape(shape, index); - }, - /* protected */ - getShapeNode: function() { - return this.shapeNode || this.node; - } - }); - var Shape = _p.r(60); - _p.r(11).extendClass(Shape, { - bringTo: function(index) { - this.container.arrangeShape(this, index); - return this; - }, - bringFront: function() { - return this.bringTo(this.container.indexOf(this) + 1); - }, - bringBack: function() { - return this.bringTo(this.container.indexOf(this) - 1); - }, - bringTop: function() { - this.container.removeShape(this).addShape(this); - return this; - }, - bringRear: function() { - return this.bringTo(0); - }, - bringRefer: function(referShape, offset) { - if (referShape.container) { - if (this.remove) { - this.remove(); - } - referShape.container.addShape(this, referShape.container.indexOf(referShape) + (offset || 0)); - } - return this; - }, - bringAbove: function(referShape) { - return this.bringRefer(referShape); - }, - bringBelow: function(referShape) { - return this.bringRefer(referShape, 1); - }, - replaceBy: function(newShape) { - if (this.container) { - newShape.bringAbove(this); - this.remove(); - } - return this; - } - }); - return ShapeContainer; - } -}; - -//src/graphic/shapeevent.js -/* - * 图形事件包装类 - * */ -_p[62] = { - value: function(require, exprots, module) { - var Matrix = _p.r(43), Utils = _p.r(12), Point = _p.r(50); - return _p.r(11).createClass("ShapeEvent", { - constructor: function(event) { - var target = null; - // dom 事件封装对象 - if (!Utils.isObject(event.target)) { - this.type = event.type; - target = event.target; - // use标签有特殊属性, 需要区别对待 - if (target.correspondingUseElement) { - target = target.correspondingUseElement; - } - this.originEvent = event; - this.targetShape = target.shape || target.paper || event.currentTarget && (event.currentTarget.shape || event.currentTarget.paper); - if (event._kityParam) { - Utils.extend(this, event._kityParam); - } - } else { - Utils.extend(this, event); - } - }, - preventDefault: function() { - var evt = this.originEvent; - if (!evt) { - return true; - } - if (evt.preventDefault) { - evt.preventDefault(); - return evt.cancelable; - } else { - evt.returnValue = false; - return true; - } - }, - //当前鼠标事件在用户坐标系中点击的点的坐标位置 - getPosition: function(refer, touchIndex) { - if (!this.originEvent) { - return null; - } - var eventClient = this.originEvent.touches ? this.originEvent.touches[touchIndex || 0] : this.originEvent; - var target = this.targetShape; - var targetNode = target.shapeNode || target.node; - var pScreen = new Point(eventClient && eventClient.clientX || 0, eventClient && eventClient.clientY || 0); - var pTarget = Matrix.transformPoint(pScreen, targetNode.getScreenCTM().inverse()); - var pRefer = Matrix.getCTM(target, refer || "view").transformPoint(pTarget); - return pRefer; - }, - stopPropagation: function() { - var evt = this.originEvent; - if (!evt) { - return true; - } - if (evt.stopPropagation) { - evt.stopPropagation(); - } else { - evt.cancelBubble = false; - } - } - }); - } -}; - -//src/graphic/shapepoint.js -/* - * 图形上的点抽象 - */ -_p[63] = { - value: function(require, exports, module) { - return _p.r(11).createClass("ShapePoint", { - base: _p.r(50), - constructor: function(px, py) { - this.callBase(px, py); - }, - setX: function(x) { - return this.setPoint(x, this.y); - }, - setY: function(y) { - return this.setPoint(this.x, y); - }, - setPoint: function(x, y) { - this.x = x; - this.y = y; - this.update(); - return this; - }, - getPoint: function() { - return this; - }, - update: function() { - if (this.container && this.container.update) { - this.container.update(); - } - return this; - } - }); - } -}; - -//src/graphic/standardcolor.js -/** - * 标准颜色映射 - */ -_p[64] = { - value: { - COLOR_STANDARD: { - aliceblue: "#f0f8ff", - antiquewhite: "#faebd7", - aqua: "#00ffff", - aquamarine: "#7fffd4", - azure: "#f0ffff", - beige: "#f5f5dc", - bisque: "#ffe4c4", - black: "#000000", - blanchedalmond: "#ffebcd", - blue: "#0000ff", - blueviolet: "#8a2be2", - brown: "#a52a2a", - burlywood: "#deb887", - cadetblue: "#5f9ea0", - chartreuse: "#7fff00", - chocolate: "#d2691e", - coral: "#ff7f50", - cornflowerblue: "#6495ed", - cornsilk: "#fff8dc", - crimson: "#dc143c", - cyan: "#00ffff", - darkblue: "#00008b", - darkcyan: "#008b8b", - darkgoldenrod: "#b8860b", - darkgray: "#a9a9a9", - darkgreen: "#006400", - darkgrey: "#a9a9a9", - darkkhaki: "#bdb76b", - darkmagenta: "#8b008b", - darkolivegreen: "#556b2f", - darkorange: "#ff8c00", - darkorchid: "#9932cc", - darkred: "#8b0000", - darksalmon: "#e9967a", - darkseagreen: "#8fbc8f", - darkslateblue: "#483d8b", - darkslategray: "#2f4f4f", - darkslategrey: "#2f4f4f", - darkturquoise: "#00ced1", - darkviolet: "#9400d3", - deeppink: "#ff1493", - deepskyblue: "#00bfff", - dimgray: "#696969", - dimgrey: "#696969", - dodgerblue: "#1e90ff", - firebrick: "#b22222", - floralwhite: "#fffaf0", - forestgreen: "#228b22", - fuchsia: "#ff00ff", - gainsboro: "#dcdcdc", - ghostwhite: "#f8f8ff", - gold: "#ffd700", - goldenrod: "#daa520", - gray: "#808080", - green: "#008000", - greenyellow: "#adff2f", - grey: "#808080", - honeydew: "#f0fff0", - hotpink: "#ff69b4", - indianred: "#cd5c5c", - indigo: "#4b0082", - ivory: "#fffff0", - khaki: "#f0e68c", - lavender: "#e6e6fa", - lavenderblush: "#fff0f5", - lawngreen: "#7cfc00", - lemonchiffon: "#fffacd", - lightblue: "#add8e6", - lightcoral: "#f08080", - lightcyan: "#e0ffff", - lightgoldenrodyellow: "#fafad2", - lightgray: "#d3d3d3", - lightgreen: "#90ee90", - lightgrey: "#d3d3d3", - lightpink: "#ffb6c1", - lightsalmon: "#ffa07a", - lightseagreen: "#20b2aa", - lightskyblue: "#87cefa", - lightslategray: "#778899", - lightslategrey: "#778899", - lightsteelblue: "#b0c4de", - lightyellow: "#ffffe0", - lime: "#00ff00", - limegreen: "#32cd32", - linen: "#faf0e6", - magenta: "#ff00ff", - maroon: "#800000", - mediumaquamarine: "#66cdaa", - mediumblue: "#0000cd", - mediumorchid: "#ba55d3", - mediumpurple: "#9370db", - mediumseagreen: "#3cb371", - mediumslateblue: "#7b68ee", - mediumspringgreen: "#00fa9a", - mediumturquoise: "#48d1cc", - mediumvioletred: "#c71585", - midnightblue: "#191970", - mintcream: "#f5fffa", - mistyrose: "#ffe4e1", - moccasin: "#ffe4b5", - navajowhite: "#ffdead", - navy: "#000080", - oldlace: "#fdf5e6", - olive: "#808000", - olivedrab: "#6b8e23", - orange: "#ffa500", - orangered: "#ff4500", - orchid: "#da70d6", - palegoldenrod: "#eee8aa", - palegreen: "#98fb98", - paleturquoise: "#afeeee", - palevioletred: "#db7093", - papayawhip: "#ffefd5", - peachpuff: "#ffdab9", - peru: "#cd853f", - pink: "#ffc0cb", - plum: "#dda0dd", - powderblue: "#b0e0e6", - purple: "#800080", - red: "#ff0000", - rosybrown: "#bc8f8f", - royalblue: "#4169e1", - saddlebrown: "#8b4513", - salmon: "#fa8072", - sandybrown: "#f4a460", - seagreen: "#2e8b57", - seashell: "#fff5ee", - sienna: "#a0522d", - silver: "#c0c0c0", - skyblue: "#87ceeb", - slateblue: "#6a5acd", - slategray: "#708090", - slategrey: "#708090", - snow: "#fffafa", - springgreen: "#00ff7f", - steelblue: "#4682b4", - tan: "#d2b48c", - teal: "#008080", - thistle: "#d8bfd8", - tomato: "#ff6347", - turquoise: "#40e0d0", - violet: "#ee82ee", - wheat: "#f5deb3", - white: "#ffffff", - whitesmoke: "#f5f5f5", - yellow: "#ffff00" - }, - //标准扩展 - EXTEND_STANDARD: {} - } -}; - -//src/graphic/star.js -_p[65] = { - value: function(require, exports, module) { - /** - * @see http://www.jdawiseman.com/papers/easymath/surds_star_inner_radius.html - */ - var defaultRatioForStar = { - "3": .2, - // yy - "5": .38196601125, - "6": .57735026919, - "8": .541196100146, - "10": .726542528005, - "12": .707106781187 - }; - var Point = _p.r(50); - return _p.r(11).createClass("Star", { - base: _p.r(46), - constructor: function(vertex, radius, shrink, offset, angleOffset) { - this.callBase(); - this.vertex = vertex || 3; - this.radius = radius || 0; - this.shrink = shrink; - this.offset = offset || new Point(0, 0); - this.angleOffset = angleOffset || 0; - this.draw(); - }, - getVertex: function() { - return this.vertex; - }, - setVertex: function(value) { - this.vertex = value; - return this.draw(); - }, - getRadius: function() { - return this.radius; - }, - setRadius: function(value) { - this.radius = value; - return this.draw(); - }, - getShrink: function() { - return this.shrink; - }, - setShrink: function(value) { - this.shrink = value; - return this.draw(); - }, - getOffset: function() { - return this.offset; - }, - setOffset: function(value) { - this.offset = value; - return this.draw(); - }, - getAngleOffset: function() { - return this.angleOffset; - }, - setAngleOffset: function(value) { - this.angleOffset = value; - return this.draw(); - }, - draw: function() { - var innerRadius = this.radius, outerRadius = this.radius * (this.shrink || defaultRatioForStar[this.vertex] || .5), vertex = this.vertex, offset = this.offset, angleStart = 90, angleStep = 180 / vertex, angleOffset = this.angleOffset, drawer = this.getDrawer(), i, angle; - drawer.clear(); - drawer.moveTo(Point.fromPolar(outerRadius, angleStart)); - for (i = 1; i <= vertex * 2; i++) { - angle = angleStart + angleStep * i; - // 绘制内点 - if (i % 2) { - drawer.lineTo(Point.fromPolar(innerRadius, angle + angleOffset).offset(offset)); - } else { - drawer.lineTo(Point.fromPolar(outerRadius, angle)); - } - } - drawer.close(); - } - }); - } -}; - -//src/graphic/styled.js -_p[66] = { - value: function(require, exports, module) { - // polyfill for ie - var ClassList = _p.r(11).createClass("ClassList", { - constructor: function(node) { - this._node = node; - this._list = node.className.toString().split(" "); - }, - _update: function() { - this._node.className = this._list.join(" "); - }, - add: function(name) { - this._list.push(name); - this._update(); - }, - remove: function(name) { - var index = this._list.indexOf(name); - if (~index) { - this._list.splice(index, 1); - } - this._update(); - }, - contains: function(name) { - return !!~this._list.indexOf(name); - } - }); - function getClassList(node) { - if (!node.classList) { - node.classList = new ClassList(node); - } - return node.classList; - } - return _p.r(11).createClass("Styled", { - addClass: function(name) { - getClassList(this.node).add(name); - return this; - }, - removeClass: function(name) { - getClassList(this.node).remove(name); - return this; - }, - hasClass: function(name) { - return getClassList(this.node).contains(name); - }, - setStyle: function(styles) { - if (arguments.length == 2) { - this.node.style[arguments[0]] = arguments[1]; - return this; - } - for (var name in styles) { - if (styles.hasOwnProperty(name)) { - this.node.style[name] = styles[name]; - } - } - return this; - } - }); - } -}; - -//src/graphic/svg.js -_p[67] = { - value: function(require, exports, module) { - var doc = document; - var id = 0; - var svg = { - createNode: function(name) { - var node = doc.createElementNS(svg.ns, name); - node.id = "kity_" + name + "_" + id++; - return node; - }, - defaults: { - stroke: "none", - fill: "none" - }, - xlink: "http://www.w3.org/1999/xlink", - ns: "http://www.w3.org/2000/svg" - }; - return svg; - } -}; - -//src/graphic/sweep.js -_p[68] = { - value: function(require, exports, module) { - var Point = _p.r(50); - return _p.r(11).createClass("Sweep", { - base: _p.r(46), - constructor: function(sectionArray, angle, angleOffset) { - this.callBase(); - this.sectionArray = sectionArray || []; - this.angle = angle || 0; - this.angleOffset = angleOffset || 0; - this.draw(); - }, - getSectionArray: function() { - return this.sectionArray; - }, - setSectionArray: function(value) { - this.sectionArray = value; - return this.draw(); - }, - getAngle: function() { - return this.angle; - }, - setAngle: function(value) { - this.angle = value; - return this.draw(); - }, - getAngleOffset: function() { - return this.angleOffset; - }, - setAngleOffset: function(value) { - this.angleOffset = value; - return this.draw(); - }, - draw: function() { - var sectionArray = this.sectionArray, i; - for (i = 0; i < sectionArray.length; i += 2) { - this.drawSection(sectionArray[i], sectionArray[i + 1]); - } - return this; - }, - drawSection: function(from, to) { - var angleLength = this.angle && (this.angle % 360 ? this.angle % 360 : 360), angleStart = this.angleOffset, angleHalf = angleStart + angleLength / 2, angleEnd = angleStart + angleLength, sweepFlag = angleLength < 0 ? 0 : 1, drawer = this.getDrawer(); - drawer.redraw(); - if (angleLength === 0) { - drawer.done(); - return; - } - drawer.moveTo(Point.fromPolar(from, angleStart)); - drawer.lineTo(Point.fromPolar(to, angleStart)); - if (to) { - drawer.carcTo(to, 0, sweepFlag, Point.fromPolar(to, angleHalf)); - drawer.carcTo(to, 0, sweepFlag, Point.fromPolar(to, angleEnd)); - } - drawer.lineTo(Point.fromPolar(from, angleEnd)); - if (from) { - drawer.carcTo(from, 0, sweepFlag, Point.fromPolar(from, angleHalf)); - drawer.carcTo(from, 0, sweepFlag, Point.fromPolar(from, angleStart)); - } - drawer.close(); - drawer.done(); - } - }); - } -}; - -//src/graphic/text.js -_p[69] = { - value: function(require, exports, module) { - var TextContent = _p.r(70); - var ShapeContainer = _p.r(61); - var svg = _p.r(67); - var utils = _p.r(12); - var offsetHash = {}; - function getTextBoundOffset(text) { - var font = text._cachedFontHash; - if (offsetHash[font]) { - return offsetHash[font]; - } - var textContent = text.getContent(); - text.setContent("百度Fex"); - var bbox = text.getBoundaryBox(), y = text.getY(); - if (!bbox.height) return { - top: 0, - bottom: 0, - middle: 0 - }; - var topOffset = y - bbox.y + +text.node.getAttribute("dy"), bottomOffset = topOffset - bbox.height; - text.setContent(textContent); - return offsetHash[font] = { - top: topOffset, - bottom: bottomOffset, - middle: (topOffset + bottomOffset) / 2 - }; - } - return _p.r(11).createClass("Text", { - base: TextContent, - mixins: [ ShapeContainer ], - constructor: function(content) { - this.callBase("text"); - if (content !== undefined) { - this.setContent(content); - } - this._buildFontHash(); - }, - fixPosition: function() { - if (!this.__fixedPosition) { - this.setVerticalAlign(this.getVerticalAlign()); - } - }, - _buildFontHash: function() { - var style = window.getComputedStyle(this.node); - this._cachedFontHash = [ style.fontFamily, style.fontSize, style.fontStretch, style.fontStyle, style.fontVariant, style.fontWeight ].join("-"); - }, - _fontChanged: function(font) { - var last = this._lastFont; - var current = utils.extend({}, last, font); - if (!last) { - this._lastFont = font; - return true; - } - var changed = last.family != current.family || last.size != current.size || last.style != current.style || last.weight != current.weight; - this._lastFont = current; - return changed; - }, - setX: function(x) { - this.node.setAttribute("x", x); - return this; - }, - setPosition: function(x, y) { - return this.setX(x).setY(y); - }, - setY: function(y) { - this.node.setAttribute("y", y); - return this; - }, - getX: function() { - return +this.node.getAttribute("x") || 0; - }, - getY: function() { - return +this.node.getAttribute("y") || 0; - }, - setFont: function(font) { - this.callBase(font); - if (this._fontChanged(font)) { - this._buildFontHash(); - this.setVerticalAlign(this.getVerticalAlign()); - } - return this; - }, - setTextAnchor: function(anchor) { - this.node.setAttribute("text-anchor", anchor); - return this; - }, - getTextAnchor: function() { - return this.node.getAttribute("text-anchor") || "start"; - }, - // top/bottom/middle/baseline - setVerticalAlign: function(align) { - this.whenPaperReady(function() { - var dy; - switch (align) { - case "top": - dy = getTextBoundOffset(this).top; - break; - - case "bottom": - dy = getTextBoundOffset(this).bottom; - break; - - case "middle": - dy = getTextBoundOffset(this).middle; - break; - - default: - dy = 0; - } - if (dy) this.__fixedPosition = true; - this.node.setAttribute("dy", dy); - }); - this.verticalAlign = align; - return this; - }, - getVerticalAlign: function() { - return this.verticalAlign || "baseline"; - }, - setStartOffset: function(offset) { - // only for text path - if (this.shapeNode != this.node) { - this.shapeNode.setAttribute("startOffset", offset * 100 + "%"); - } - }, - addSpan: function(span) { - this.addShape(span); - return this; - }, - setPath: function(path) { - var textpath = this.shapeNode; - if (this.shapeNode == this.node) { - // 当前还不是 textpath - textpath = this.shapeNode = svg.createNode("textPath"); - while (this.node.firstChild) { - this.shapeNode.appendChild(this.node.firstChild); - } - this.node.appendChild(textpath); - } - textpath.setAttributeNS(svg.xlink, "xlink:href", "#" + path.node.id); - this.setTextAnchor(this.getTextAnchor()); - return this; - } - }); - } -}; - -//src/graphic/textcontent.js -_p[70] = { - value: function(require, exports, module) { - var Shape = _p.r(60); - return _p.r(11).createClass("TextContent", { - base: Shape, - constructor: function(nodeType) { - // call shape constructor - this.callBase(nodeType); - this.shapeNode = this.shapeNode || this.node; - this.shapeNode.setAttribute("text-rendering", "geometricPrecision"); - }, - clearContent: function() { - while (this.shapeNode.firstChild) { - this.shapeNode.removeChild(this.shapeNode.firstChild); - } - return this; - }, - setContent: function(content) { - this.shapeNode.textContent = content; - return this; - }, - getContent: function() { - return this.shapeNode.textContent; - }, - appendContent: function(content) { - this.shapeNode.textContent += content; - return this; - }, - setSize: function(value) { - return this.setFontSize(value); - }, - setFontSize: function(value) { - return this.setFont({ - size: value - }); - }, - setFontFamily: function(value) { - return this.setFont({ - family: value - }); - }, - setFontBold: function(bold) { - return this.setFont({ - weight: bold ? "bold" : "normal" - }); - }, - setFontItalic: function(italic) { - return this.setFont({ - style: italic ? "italic" : "normal" - }); - }, - setFont: function(font) { - var node = this.node; - [ "family", "size", "weight", "style" ].forEach(function(section) { - if (font[section] === null) { - node.removeAttribute("font-" + section); - } else if (font[section]) { - node.setAttribute("font-" + section, font[section]); - } - }); - return this; - }, - getExtentOfChar: function(index) { - return this.node.getExtentOfChar(index); - }, - getRotationOfChar: function(index) { - return this.node.getRotationOfChar(index); - }, - getCharNumAtPosition: function(x, y) { - return this.node.getCharNumAtPosition(this.node.viewportElement.createSVGPoint(x, y)); - } - }); - } -}; - -//src/graphic/textspan.js -_p[71] = { - value: function(require, exports, module) { - var TextContent = _p.r(70); - var Styled = _p.r(66); - return _p.r(11).createClass("TextSpan", { - base: TextContent, - mixins: [ Styled ], - constructor: function(content) { - this.callBase("tspan"); - this.setContent(content); - } - }); - } -}; - -//src/graphic/use.js -/* - * USE 功能 - */ -_p[72] = { - value: function(require, exports, module) { - var Svg = _p.r(67); - var Class = _p.r(11); - var Use = Class.createClass("Use", { - base: _p.r(60), - constructor: function(shape) { - this.callBase("use"); - this.ref(shape); - }, - ref: function(shape) { - if (!shape) { - this.node.removeAttributeNS(Svg.xlink, "xlink:href"); - return this; - } - var shapeId = shape.getId(); - if (shapeId) { - this.node.setAttributeNS(Svg.xlink, "xlink:href", "#" + shapeId); - } - // by techird - // 作为 Use 的图形,如果没有 fill 和 stroke,移除默认的 'none' 值,用于 Use 覆盖 - if (shape.node.getAttribute("fill") === "none") { - shape.node.removeAttribute("fill"); - } - if (shape.node.getAttribute("stroke") === "none") { - shape.node.removeAttribute("stroke"); - } - return this; - } - }); - var Shape = _p.r(60); - Class.extendClass(Shape, { - // fast-use - use: function() { - return new Use(this); - } - }); - return Use; - } -}; - -//src/graphic/vector.js -_p[73] = { - value: function(require, exports, module) { - var Point = _p.r(50); - var Matrix = _p.r(43); - var Vector = _p.r(11).createClass("Vector", { - base: Point, - constructor: function(x, y) { - this.callBase(x, y); - }, - square: function() { - return this.x * this.x + this.y * this.y; - }, - length: function() { - return Math.sqrt(this.square()); - }, - add: function(q) { - return new Vector(this.x + q.x, this.y + q.y); - }, - minus: function(q) { - return new Vector(this.x - q.x, this.y - q.y); - }, - dot: function(q) { - return this.x * q.x + this.y * q.y; - }, - project: function(q) { - return q.multipy(this.dot(q) / q.square()); - }, - normalize: function(length) { - if (length === undefined) { - length = 1; - } - return this.multipy(length / this.length()); - }, - multipy: function(scale) { - return new Vector(this.x * scale, this.y * scale); - }, - rotate: function(angle, unit) { - if (unit == "rad") { - angle = angle / Math.PI * 180; - } - var p = new Matrix().rotate(angle).transformPoint(this); - return new Vector(p.x, p.y); - }, - vertical: function() { - return new Vector(this.y, -this.x); - }, - reverse: function() { - return this.multipy(-1); - }, - getAngle: function() { - var length = this.length(); - if (length === 0) return 0; - var rad = Math.acos(this.x / length); - var sign = this.y > 0 ? 1 : -1; - return sign * 180 * rad / Math.PI; - } - }); - Vector.fromPoints = function(p1, p2) { - return new Vector(p2.x - p1.x, p2.y - p1.y); - }; - Vector.fromPolar = function() { - var p = Point.fromPolar.apply(Point, arguments); - return new Vector(p.x, p.y); - }; - _p.r(11).extendClass(Point, { - asVector: function() { - return new Vector(this.x, this.y); - } - }); - return Vector; - } -}; - -//src/graphic/view.js -_p[74] = { - value: function(require, exports, module) { - var ShapeContainer = _p.r(61); - var ViewBox = _p.r(75); - return _p.r(11).createClass("View", { - mixins: [ ShapeContainer, ViewBox ], - base: _p.r(74), - constructor: function() { - this.callBase("view"); - } - }); - } -}; - -//src/graphic/viewbox.js -_p[75] = { - value: function(require, exports, module) { - return _p.r(11).createClass("ViewBox", { - getViewBox: function() { - var attr = this.node.getAttribute("viewBox"); - if (attr === null) { - // firefox: - // 1. viewBox 没有设置过的时候获得的是 null - // 2. svg 标签没有指定绝对大小的时候 clientWidth 和 clientHeigt 为 0,需要在父容器上查找 - // TODO: 第 2 条取得的不准确(假如有 padding 之类的) - return { - x: 0, - y: 0, - width: this.node.clientWidth || this.node.parentNode.clientWidth, - height: this.node.clientHeight || this.node.parentNode.clientHeight - }; - } else { - attr = attr.split(" "); - return { - x: +attr[0], - y: +attr[1], - width: +attr[2], - height: +attr[3] - }; - } - }, - setViewBox: function(x, y, width, height) { - this.node.setAttribute("viewBox", [ x, y, width, height ].join(" ")); - return this; - } - }); - } -}; - -//src/kity.js -/** - * @fileOverview kity 暴露的方法或对象 - */ -_p[76] = { - value: function(require, exports, module) { - var kity = {}, utils = _p.r(12); - kity.version = "2.0.0"; - utils.extend(kity, { - // core - createClass: _p.r(11).createClass, - extendClass: _p.r(11).extendClass, - Utils: utils, - Browser: _p.r(10), - // shape - Box: _p.r(25), - Bezier: _p.r(23), - BezierPoint: _p.r(24), - Circle: _p.r(26), - Clip: _p.r(27), - Color: _p.r(28), - Container: _p.r(29), - Curve: _p.r(30), - Ellipse: _p.r(32), - Group: _p.r(36), - Gradient: _p.r(35), - HyperLink: _p.r(37), - Image: _p.r(38), - Line: _p.r(39), - LinearGradient: _p.r(40), - Mask: _p.r(42), - Matrix: _p.r(43), - Marker: _p.r(41), - Palette: _p.r(44), - Paper: _p.r(45), - Path: _p.r(46), - Pattern: _p.r(47), - Pen: _p.r(48), - Point: _p.r(50), - PointContainer: _p.r(51), - Polygon: _p.r(53), - Polyline: _p.r(54), - Pie: _p.r(49), - RadialGradient: _p.r(55), - Resource: _p.r(58), - Rect: _p.r(56), - RegularPolygon: _p.r(57), - Ring: _p.r(59), - Shape: _p.r(60), - ShapePoint: _p.r(63), - ShapeContainer: _p.r(61), - Sweep: _p.r(68), - Star: _p.r(65), - Text: _p.r(69), - TextSpan: _p.r(71), - Use: _p.r(72), - Vector: _p.r(73), - g: _p.r(34), - // animate - Animator: _p.r(0), - Easing: _p.r(1), - OpacityAnimator: _p.r(4), - RotateAnimator: _p.r(6), - ScaleAnimator: _p.r(7), - Timeline: _p.r(8), - TranslateAnimator: _p.r(9), - PathAnimator: _p.r(5), - MotionAnimator: _p.r(3), - requestFrame: _p.r(2).requestFrame, - releaseFrame: _p.r(2).releaseFrame, - // filter - Filter: _p.r(20), - GaussianblurFilter: _p.r(21), - ProjectionFilter: _p.r(22), - // effect - ColorMatrixEffect: _p.r(13), - CompositeEffect: _p.r(14), - ConvolveMatrixEffect: _p.r(15), - Effect: _p.r(16), - GaussianblurEffect: _p.r(17), - OffsetEffect: _p.r(18) - }); - return window.kity = kity; - } -}; - -var moduleMapping = { - kity: 76 -}; - -function use(name) { - _p.r([ moduleMapping[name] ]); -} -/* global use, inc: true */ - -/** - * 模块暴露 - */ -use('kity'); -})(); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/loading.gif b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/loading.gif deleted file mode 100644 index 5bb90fd6a49107a321c35b9cee4a7b810314b51f..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/loading.gif and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_BB.woff b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_BB.woff deleted file mode 100644 index 51b3cce0cca2aef11b35d287a0077f65bf42cb26..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_BB.woff and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_CAL.woff b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_CAL.woff deleted file mode 100644 index f433b03af6a9396146bc669df2a4f74c58b6e61a..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_CAL.woff and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_FRAK.woff b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_FRAK.woff deleted file mode 100644 index 9c7e9d68e6d48f0e1d67c77d62af1d485cfbeff4..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_FRAK.woff and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_MAIN.woff b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_MAIN.woff deleted file mode 100644 index ed93f8e84f307c523934cfea59c18569ec257e4b..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_MAIN.woff and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_ROMAN.woff b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_ROMAN.woff deleted file mode 100644 index 6b5d474dffe13e550788a56ebe4d3f8245388215..0000000000000000000000000000000000000000 Binary files a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_ROMAN.woff and /dev/null differ diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/plugin.js b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/plugin.js deleted file mode 100644 index 9b74d606efa311f760624889eb95bca86ac21006..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/plugin.js +++ /dev/null @@ -1,72 +0,0 @@ -tinymce.PluginManager.add('kityformula-editor', function(editor, url) { - - var baseURL = tinymce.baseURL+'/plugins/kityformula-editor/kityFormula.html'; - - editor.on('dblclick',function(){ - var sel=editor.selection.getContent(); - var path=/\/g; - var path2=/data-latex="(.*?)"/g; - - if(sel.search(path)==0){ - sel.replace(path2,function($0,$1){ - var param=encodeURIComponent($1); - openDialog(param); - return $0; - }); - }; - }); - - var openDialog = function(param) { - return editor.windowManager.openUrl({ - title: '插入公式', - size: 'large', - width: 785, - height: 475, - url:param?baseURL+"?c="+param:baseURL, - buttons: [ - { - type: 'cancel', - text: 'Close' - }, - { - type: 'custom', - text: 'Save', - name: 'save', - primary: true - }, - ], - onAction: function (api, details) { - switch (details.name) { - case 'save': - api.sendMessage("save"); - break; - default: - break; - }; - } - }); - }; - - - editor.ui.registry.addButton('kityformula-editor', { - text: '公式', - tooltip: '插入公式', - onAction: function() { - openDialog(); - } - }); - editor.ui.registry.addMenuItem('kityformula-editor', { - text: '公式', - onAction: function() { - openDialog(); - } - }); - return { - getMetadata: function() { - return { - name: "公式", - url: "http://hgcserver.gitee.io", - }; - } - }; -}); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/plugin.min.js deleted file mode 100644 index 9b74d606efa311f760624889eb95bca86ac21006..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/kityformula-editor/plugin.min.js +++ /dev/null @@ -1,72 +0,0 @@ -tinymce.PluginManager.add('kityformula-editor', function(editor, url) { - - var baseURL = tinymce.baseURL+'/plugins/kityformula-editor/kityFormula.html'; - - editor.on('dblclick',function(){ - var sel=editor.selection.getContent(); - var path=/\/g; - var path2=/data-latex="(.*?)"/g; - - if(sel.search(path)==0){ - sel.replace(path2,function($0,$1){ - var param=encodeURIComponent($1); - openDialog(param); - return $0; - }); - }; - }); - - var openDialog = function(param) { - return editor.windowManager.openUrl({ - title: '插入公式', - size: 'large', - width: 785, - height: 475, - url:param?baseURL+"?c="+param:baseURL, - buttons: [ - { - type: 'cancel', - text: 'Close' - }, - { - type: 'custom', - text: 'Save', - name: 'save', - primary: true - }, - ], - onAction: function (api, details) { - switch (details.name) { - case 'save': - api.sendMessage("save"); - break; - default: - break; - }; - } - }); - }; - - - editor.ui.registry.addButton('kityformula-editor', { - text: '公式', - tooltip: '插入公式', - onAction: function() { - openDialog(); - } - }); - editor.ui.registry.addMenuItem('kityformula-editor', { - text: '公式', - onAction: function() { - openDialog(); - } - }); - return { - getMetadata: function() { - return { - name: "公式", - url: "http://hgcserver.gitee.io", - }; - } - }; -}); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/legacyoutput/plugin.js b/component/pear/module/tinymce/tinymce/plugins/legacyoutput/plugin.js deleted file mode 100644 index d96f337f93feb3fc0022c6aa8d3beb80a3326585..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/legacyoutput/plugin.js +++ /dev/null @@ -1,199 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -(function () { - 'use strict'; - - var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); - - var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools'); - - var getFontSizeFormats = function (editor) { - return editor.getParam('fontsize_formats'); - }; - var setFontSizeFormats = function (editor, fontsize_formats) { - editor.settings.fontsize_formats = fontsize_formats; - }; - var getFontFormats = function (editor) { - return editor.getParam('font_formats'); - }; - var setFontFormats = function (editor, font_formats) { - editor.settings.font_formats = font_formats; - }; - var getFontSizeStyleValues = function (editor) { - return editor.getParam('font_size_style_values', 'xx-small,x-small,small,medium,large,x-large,xx-large'); - }; - var setInlineStyles = function (editor, inline_styles) { - editor.settings.inline_styles = inline_styles; - }; - - var overrideFormats = function (editor) { - var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table', fontSizes = global$1.explode(getFontSizeStyleValues(editor)), schema = editor.schema; - editor.formatter.register({ - alignleft: { - selector: alignElements, - attributes: { align: 'left' } - }, - aligncenter: { - selector: alignElements, - attributes: { align: 'center' } - }, - alignright: { - selector: alignElements, - attributes: { align: 'right' } - }, - alignjustify: { - selector: alignElements, - attributes: { align: 'justify' } - }, - bold: [ - { - inline: 'b', - remove: 'all', - preserve_attributes: [ - 'class', - 'style' - ] - }, - { - inline: 'strong', - remove: 'all', - preserve_attributes: [ - 'class', - 'style' - ] - }, - { - inline: 'span', - styles: { fontWeight: 'bold' } - } - ], - italic: [ - { - inline: 'i', - remove: 'all', - preserve_attributes: [ - 'class', - 'style' - ] - }, - { - inline: 'em', - remove: 'all', - preserve_attributes: [ - 'class', - 'style' - ] - }, - { - inline: 'span', - styles: { fontStyle: 'italic' } - } - ], - underline: [ - { - inline: 'u', - remove: 'all', - preserve_attributes: [ - 'class', - 'style' - ] - }, - { - inline: 'span', - styles: { textDecoration: 'underline' }, - exact: true - } - ], - strikethrough: [ - { - inline: 'strike', - remove: 'all', - preserve_attributes: [ - 'class', - 'style' - ] - }, - { - inline: 'span', - styles: { textDecoration: 'line-through' }, - exact: true - } - ], - fontname: { - inline: 'font', - toggle: false, - attributes: { face: '%value' } - }, - fontsize: { - inline: 'font', - toggle: false, - attributes: { - size: function (vars) { - return String(global$1.inArray(fontSizes, vars.value) + 1); - } - } - }, - forecolor: { - inline: 'font', - attributes: { color: '%value' }, - links: true, - remove_similar: true, - clear_child_styles: true - }, - hilitecolor: { - inline: 'font', - styles: { backgroundColor: '%value' }, - links: true, - remove_similar: true, - clear_child_styles: true - } - }); - global$1.each('b,i,u,strike'.split(','), function (name) { - schema.addValidElements(name + '[*]'); - }); - if (!schema.getElementRule('font')) { - schema.addValidElements('font[face|size|color|style]'); - } - global$1.each(alignElements.split(','), function (name) { - var rule = schema.getElementRule(name); - if (rule) { - if (!rule.attributes.align) { - rule.attributes.align = {}; - rule.attributesOrder.push('align'); - } - } - }); - }; - var overrideSettings = function (editor) { - var defaultFontsizeFormats = '8pt=1 10pt=2 12pt=3 14pt=4 18pt=5 24pt=6 36pt=7'; - var defaultFontsFormats = 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats'; - setInlineStyles(editor, false); - if (!getFontSizeFormats(editor)) { - setFontSizeFormats(editor, defaultFontsizeFormats); - } - if (!getFontFormats(editor)) { - setFontFormats(editor, defaultFontsFormats); - } - }; - var setup = function (editor) { - overrideSettings(editor); - editor.on('PreInit', function () { - return overrideFormats(editor); - }); - }; - - function Plugin () { - global.add('legacyoutput', function (editor) { - setup(editor); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/legacyoutput/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/legacyoutput/plugin.min.js deleted file mode 100644 index c2b04c1e0189c581f1ab8ab926926bd89763e9b5..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/legacyoutput/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),l=tinymce.util.Tools.resolve("tinymce.util.Tools"),t=function(s){var e,t,i,a;t=!1,(e=s).settings.inline_styles=t,e.getParam("fontsize_formats")||(i="8pt=1 10pt=2 12pt=3 14pt=4 18pt=5 24pt=6 36pt=7",e.settings.fontsize_formats=i),e.getParam("font_formats")||(a="Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats",e.settings.font_formats=a),s.on("PreInit",function(){return e=s,t="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table",i=l.explode(e.getParam("font_size_style_values","xx-small,x-small,small,medium,large,x-large,xx-large")),a=e.schema,e.formatter.register({alignleft:{selector:t,attributes:{align:"left"}},aligncenter:{selector:t,attributes:{align:"center"}},alignright:{selector:t,attributes:{align:"right"}},alignjustify:{selector:t,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all",preserve_attributes:["class","style"]},{inline:"strong",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all",preserve_attributes:["class","style"]},{inline:"em",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{textDecoration:"underline"},exact:!0}],strikethrough:[{inline:"strike",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{textDecoration:"line-through"},exact:!0}],fontname:{inline:"font",toggle:!1,attributes:{face:"%value"}},fontsize:{inline:"font",toggle:!1,attributes:{size:function(e){return String(l.inArray(i,e.value)+1)}}},forecolor:{inline:"font",attributes:{color:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0}}),l.each("b,i,u,strike".split(","),function(e){a.addValidElements(e+"[*]")}),a.getElementRule("font")||a.addValidElements("font[face|size|color|style]"),void l.each(t.split(","),function(e){var t=a.getElementRule(e);t&&(t.attributes.align||(t.attributes.align={},t.attributesOrder.push("align")))});var e,t,i,a})};e.add("legacyoutput",function(e){t(e)})}(); \ No newline at end of file diff --git a/component/pear/module/tinymce/tinymce/plugins/link/plugin.js b/component/pear/module/tinymce/tinymce/plugins/link/plugin.js deleted file mode 100644 index a5cc018dd66072c52593bb14c0c28e6b25ff2f2f..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/link/plugin.js +++ /dev/null @@ -1,1290 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -(function () { - 'use strict'; - - var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); - - var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK'); - - var typeOf = function (x) { - var t = typeof x; - if (x === null) { - return 'null'; - } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) { - return 'array'; - } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) { - return 'string'; - } else { - return t; - } - }; - var isType = function (type) { - return function (value) { - return typeOf(value) === type; - }; - }; - var isSimpleType = function (type) { - return function (value) { - return typeof value === type; - }; - }; - var eq = function (t) { - return function (a) { - return t === a; - }; - }; - var isString = isType('string'); - var isArray = isType('array'); - var isNull = eq(null); - var isBoolean = isSimpleType('boolean'); - var isFunction = isSimpleType('function'); - - var assumeExternalTargets = function (editor) { - var externalTargets = editor.getParam('link_assume_external_targets', false); - if (isBoolean(externalTargets) && externalTargets) { - return 1; - } else if (isString(externalTargets) && (externalTargets === 'http' || externalTargets === 'https')) { - return externalTargets; - } - return 0; - }; - var hasContextToolbar = function (editor) { - return editor.getParam('link_context_toolbar', false, 'boolean'); - }; - var getLinkList = function (editor) { - return editor.getParam('link_list'); - }; - var getDefaultLinkTarget = function (editor) { - return editor.getParam('default_link_target'); - }; - var getTargetList = function (editor) { - return editor.getParam('target_list', true); - }; - var getRelList = function (editor) { - return editor.getParam('rel_list', [], 'array'); - }; - var getLinkClassList = function (editor) { - return editor.getParam('link_class_list', [], 'array'); - }; - var shouldShowLinkTitle = function (editor) { - return editor.getParam('link_title', true, 'boolean'); - }; - var allowUnsafeLinkTarget = function (editor) { - return editor.getParam('allow_unsafe_link_target', false, 'boolean'); - }; - var useQuickLink = function (editor) { - return editor.getParam('link_quicklink', false, 'boolean'); - }; - var getDefaultLinkProtocol = function (editor) { - return editor.getParam('link_default_protocol', 'http', 'string'); - }; - - var noop = function () { - }; - var constant = function (value) { - return function () { - return value; - }; - }; - var never = constant(false); - var always = constant(true); - - var none = function () { - return NONE; - }; - var NONE = function () { - var eq = function (o) { - return o.isNone(); - }; - var call = function (thunk) { - return thunk(); - }; - var id = function (n) { - return n; - }; - var me = { - fold: function (n, _s) { - return n(); - }, - is: never, - isSome: never, - isNone: always, - getOr: id, - getOrThunk: call, - getOrDie: function (msg) { - throw new Error(msg || 'error: getOrDie called on none.'); - }, - getOrNull: constant(null), - getOrUndefined: constant(undefined), - or: id, - orThunk: call, - map: none, - each: noop, - bind: none, - exists: never, - forall: always, - filter: none, - equals: eq, - equals_: eq, - toArray: function () { - return []; - }, - toString: constant('none()') - }; - return me; - }(); - var some = function (a) { - var constant_a = constant(a); - var self = function () { - return me; - }; - var bind = function (f) { - return f(a); - }; - var me = { - fold: function (n, s) { - return s(a); - }, - is: function (v) { - return a === v; - }, - isSome: always, - isNone: never, - getOr: constant_a, - getOrThunk: constant_a, - getOrDie: constant_a, - getOrNull: constant_a, - getOrUndefined: constant_a, - or: self, - orThunk: self, - map: function (f) { - return some(f(a)); - }, - each: function (f) { - f(a); - }, - bind: bind, - exists: bind, - forall: bind, - filter: function (f) { - return f(a) ? me : NONE; - }, - toArray: function () { - return [a]; - }, - toString: function () { - return 'some(' + a + ')'; - }, - equals: function (o) { - return o.is(a); - }, - equals_: function (o, elementEq) { - return o.fold(never, function (b) { - return elementEq(a, b); - }); - } - }; - return me; - }; - var from = function (value) { - return value === null || value === undefined ? NONE : some(value); - }; - var Optional = { - some: some, - none: none, - from: from - }; - - var nativeIndexOf = Array.prototype.indexOf; - var nativePush = Array.prototype.push; - var rawIndexOf = function (ts, t) { - return nativeIndexOf.call(ts, t); - }; - var contains = function (xs, x) { - return rawIndexOf(xs, x) > -1; - }; - var map = function (xs, f) { - var len = xs.length; - var r = new Array(len); - for (var i = 0; i < len; i++) { - var x = xs[i]; - r[i] = f(x, i); - } - return r; - }; - var each = function (xs, f) { - for (var i = 0, len = xs.length; i < len; i++) { - var x = xs[i]; - f(x, i); - } - }; - var foldl = function (xs, f, acc) { - each(xs, function (x) { - acc = f(acc, x); - }); - return acc; - }; - var flatten = function (xs) { - var r = []; - for (var i = 0, len = xs.length; i < len; ++i) { - if (!isArray(xs[i])) { - throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs); - } - nativePush.apply(r, xs[i]); - } - return r; - }; - var bind = function (xs, f) { - return flatten(map(xs, f)); - }; - var findMap = function (arr, f) { - for (var i = 0; i < arr.length; i++) { - var r = f(arr[i], i); - if (r.isSome()) { - return r; - } - } - return Optional.none(); - }; - - var cat = function (arr) { - var r = []; - var push = function (x) { - r.push(x); - }; - for (var i = 0; i < arr.length; i++) { - arr[i].each(push); - } - return r; - }; - var someIf = function (b, a) { - return b ? Optional.some(a) : Optional.none(); - }; - - var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools'); - - var getValue = function (item) { - return isString(item.value) ? item.value : ''; - }; - var getText = function (item) { - if (isString(item.text)) { - return item.text; - } else if (isString(item.title)) { - return item.title; - } else { - return ''; - } - }; - var sanitizeList = function (list, extractValue) { - var out = []; - global$2.each(list, function (item) { - var text = getText(item); - if (item.menu !== undefined) { - var items = sanitizeList(item.menu, extractValue); - out.push({ - text: text, - items: items - }); - } else { - var value = extractValue(item); - out.push({ - text: text, - value: value - }); - } - }); - return out; - }; - var sanitizeWith = function (extracter) { - if (extracter === void 0) { - extracter = getValue; - } - return function (list) { - return Optional.from(list).map(function (list) { - return sanitizeList(list, extracter); - }); - }; - }; - var sanitize = function (list) { - return sanitizeWith(getValue)(list); - }; - var createUi = function (name, label) { - return function (items) { - return { - name: name, - type: 'listbox', - label: label, - items: items - }; - }; - }; - var ListOptions = { - sanitize: sanitize, - sanitizeWith: sanitizeWith, - createUi: createUi, - getValue: getValue - }; - - var __assign = function () { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) - if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - - var keys = Object.keys; - var hasOwnProperty = Object.hasOwnProperty; - var each$1 = function (obj, f) { - var props = keys(obj); - for (var k = 0, len = props.length; k < len; k++) { - var i = props[k]; - var x = obj[i]; - f(x, i); - } - }; - var objAcc = function (r) { - return function (x, i) { - r[i] = x; - }; - }; - var internalFilter = function (obj, pred, onTrue, onFalse) { - var r = {}; - each$1(obj, function (x, i) { - (pred(x, i) ? onTrue : onFalse)(x, i); - }); - return r; - }; - var filter = function (obj, pred) { - var t = {}; - internalFilter(obj, pred, objAcc(t), noop); - return t; - }; - var has = function (obj, key) { - return hasOwnProperty.call(obj, key); - }; - var hasNonNullableKey = function (obj, key) { - return has(obj, key) && obj[key] !== undefined && obj[key] !== null; - }; - - var global$3 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker'); - - var isAnchor = function (elm) { - return elm && elm.nodeName.toLowerCase() === 'a'; - }; - var isLink = function (elm) { - return isAnchor(elm) && !!getHref(elm); - }; - var collectNodesInRange = function (rng, predicate) { - if (rng.collapsed) { - return []; - } else { - var contents = rng.cloneContents(); - var walker = new global$3(contents.firstChild, contents); - var elements = []; - var current = contents.firstChild; - do { - if (predicate(current)) { - elements.push(current); - } - } while (current = walker.next()); - return elements; - } - }; - var hasProtocol = function (url) { - return /^\w+:/i.test(url); - }; - var getHref = function (elm) { - var href = elm.getAttribute('data-mce-href'); - return href ? href : elm.getAttribute('href'); - }; - var applyRelTargetRules = function (rel, isUnsafe) { - var rules = ['noopener']; - var rels = rel ? rel.split(/\s+/) : []; - var toString = function (rels) { - return global$2.trim(rels.sort().join(' ')); - }; - var addTargetRules = function (rels) { - rels = removeTargetRules(rels); - return rels.length > 0 ? rels.concat(rules) : rules; - }; - var removeTargetRules = function (rels) { - return rels.filter(function (val) { - return global$2.inArray(rules, val) === -1; - }); - }; - var newRels = isUnsafe ? addTargetRules(rels) : removeTargetRules(rels); - return newRels.length > 0 ? toString(newRels) : ''; - }; - var trimCaretContainers = function (text) { - return text.replace(/\uFEFF/g, ''); - }; - var getAnchorElement = function (editor, selectedElm) { - selectedElm = selectedElm || editor.selection.getNode(); - if (isImageFigure(selectedElm)) { - return editor.dom.select('a[href]', selectedElm)[0]; - } else { - return editor.dom.getParent(selectedElm, 'a[href]'); - } - }; - var getAnchorText = function (selection, anchorElm) { - var text = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: 'text' }); - return trimCaretContainers(text); - }; - var hasLinks = function (elements) { - return global$2.grep(elements, isLink).length > 0; - }; - var hasLinksInSelection = function (rng) { - return collectNodesInRange(rng, isLink).length > 0; - }; - var isOnlyTextSelected = function (editor) { - var inlineTextElements = editor.schema.getTextInlineElements(); - var isElement = function (elm) { - return elm.nodeType === 1 && !isAnchor(elm) && !has(inlineTextElements, elm.nodeName.toLowerCase()); - }; - var elements = collectNodesInRange(editor.selection.getRng(), isElement); - return elements.length === 0; - }; - var isImageFigure = function (elm) { - return elm && elm.nodeName === 'FIGURE' && /\bimage\b/i.test(elm.className); - }; - var getLinkAttrs = function (data) { - return foldl([ - 'title', - 'rel', - 'class', - 'target' - ], function (acc, key) { - data[key].each(function (value) { - acc[key] = value.length > 0 ? value : null; - }); - return acc; - }, { href: data.href }); - }; - var handleExternalTargets = function (href, assumeExternalTargets) { - if ((assumeExternalTargets === 'http' || assumeExternalTargets === 'https') && !hasProtocol(href)) { - return assumeExternalTargets + '://' + href; - } - return href; - }; - var applyLinkOverrides = function (editor, linkAttrs) { - var newLinkAttrs = __assign({}, linkAttrs); - if (!(getRelList(editor).length > 0) && allowUnsafeLinkTarget(editor) === false) { - var newRel = applyRelTargetRules(newLinkAttrs.rel, newLinkAttrs.target === '_blank'); - newLinkAttrs.rel = newRel ? newRel : null; - } - if (Optional.from(newLinkAttrs.target).isNone() && getTargetList(editor) === false) { - newLinkAttrs.target = getDefaultLinkTarget(editor); - } - newLinkAttrs.href = handleExternalTargets(newLinkAttrs.href, assumeExternalTargets(editor)); - return newLinkAttrs; - }; - var updateLink = function (editor, anchorElm, text, linkAttrs) { - text.each(function (text) { - if (anchorElm.hasOwnProperty('innerText')) { - anchorElm.innerText = text; - } else { - anchorElm.textContent = text; - } - }); - editor.dom.setAttribs(anchorElm, linkAttrs); - editor.selection.select(anchorElm); - }; - var createLink = function (editor, selectedElm, text, linkAttrs) { - if (isImageFigure(selectedElm)) { - linkImageFigure(editor, selectedElm, linkAttrs); - } else { - text.fold(function () { - editor.execCommand('mceInsertLink', false, linkAttrs); - }, function (text) { - editor.insertContent(editor.dom.createHTML('a', linkAttrs, editor.dom.encode(text))); - }); - } - }; - var linkDomMutation = function (editor, attachState, data) { - var selectedElm = editor.selection.getNode(); - var anchorElm = getAnchorElement(editor, selectedElm); - var linkAttrs = applyLinkOverrides(editor, getLinkAttrs(data)); - editor.undoManager.transact(function () { - if (data.href === attachState.href) { - attachState.attach(); - } - if (anchorElm) { - editor.focus(); - updateLink(editor, anchorElm, data.text, linkAttrs); - } else { - createLink(editor, selectedElm, data.text, linkAttrs); - } - }); - }; - var unlinkSelection = function (editor) { - var dom = editor.dom, selection = editor.selection; - var bookmark = selection.getBookmark(); - var rng = selection.getRng().cloneRange(); - var startAnchorElm = dom.getParent(rng.startContainer, 'a[href]', editor.getBody()); - var endAnchorElm = dom.getParent(rng.endContainer, 'a[href]', editor.getBody()); - if (startAnchorElm) { - rng.setStartBefore(startAnchorElm); - } - if (endAnchorElm) { - rng.setEndAfter(endAnchorElm); - } - selection.setRng(rng); - editor.execCommand('unlink'); - selection.moveToBookmark(bookmark); - }; - var unlinkDomMutation = function (editor) { - editor.undoManager.transact(function () { - var node = editor.selection.getNode(); - if (isImageFigure(node)) { - unlinkImageFigure(editor, node); - } else { - unlinkSelection(editor); - } - editor.focus(); - }); - }; - var unwrapOptions = function (data) { - var cls = data.class, href = data.href, rel = data.rel, target = data.target, text = data.text, title = data.title; - return filter({ - class: cls.getOrNull(), - href: href, - rel: rel.getOrNull(), - target: target.getOrNull(), - text: text.getOrNull(), - title: title.getOrNull() - }, function (v, _k) { - return isNull(v) === false; - }); - }; - var link = function (editor, attachState, data) { - editor.hasPlugin('rtc', true) ? editor.execCommand('createlink', false, unwrapOptions(data)) : linkDomMutation(editor, attachState, data); - }; - var unlink = function (editor) { - editor.hasPlugin('rtc', true) ? editor.execCommand('unlink') : unlinkDomMutation(editor); - }; - var unlinkImageFigure = function (editor, fig) { - var img = editor.dom.select('img', fig)[0]; - if (img) { - var a = editor.dom.getParents(img, 'a[href]', fig)[0]; - if (a) { - a.parentNode.insertBefore(img, a); - editor.dom.remove(a); - } - } - }; - var linkImageFigure = function (editor, fig, attrs) { - var img = editor.dom.select('img', fig)[0]; - if (img) { - var a = editor.dom.create('a', attrs); - img.parentNode.insertBefore(a, img); - a.appendChild(img); - } - }; - - var isListGroup = function (item) { - return hasNonNullableKey(item, 'items'); - }; - var findTextByValue = function (value, catalog) { - return findMap(catalog, function (item) { - if (isListGroup(item)) { - return findTextByValue(value, item.items); - } else { - return someIf(item.value === value, item); - } - }); - }; - var getDelta = function (persistentText, fieldName, catalog, data) { - var value = data[fieldName]; - var hasPersistentText = persistentText.length > 0; - return value !== undefined ? findTextByValue(value, catalog).map(function (i) { - return { - url: { - value: i.value, - meta: { - text: hasPersistentText ? persistentText : i.text, - attach: noop - } - }, - text: hasPersistentText ? persistentText : i.text - }; - }) : Optional.none(); - }; - var findCatalog = function (catalogs, fieldName) { - if (fieldName === 'link') { - return catalogs.link; - } else if (fieldName === 'anchor') { - return catalogs.anchor; - } else { - return Optional.none(); - } - }; - var init = function (initialData, linkCatalog) { - var persistentData = { - text: initialData.text, - title: initialData.title - }; - var getTitleFromUrlChange = function (url) { - return someIf(persistentData.title.length <= 0, Optional.from(url.meta.title).getOr('')); - }; - var getTextFromUrlChange = function (url) { - return someIf(persistentData.text.length <= 0, Optional.from(url.meta.text).getOr(url.value)); - }; - var onUrlChange = function (data) { - var text = getTextFromUrlChange(data.url); - var title = getTitleFromUrlChange(data.url); - if (text.isSome() || title.isSome()) { - return Optional.some(__assign(__assign({}, text.map(function (text) { - return { text: text }; - }).getOr({})), title.map(function (title) { - return { title: title }; - }).getOr({}))); - } else { - return Optional.none(); - } - }; - var onCatalogChange = function (data, change) { - var catalog = findCatalog(linkCatalog, change.name).getOr([]); - return getDelta(persistentData.text, change.name, catalog, data); - }; - var onChange = function (getData, change) { - var name = change.name; - if (name === 'url') { - return onUrlChange(getData()); - } else if (contains([ - 'anchor', - 'link' - ], name)) { - return onCatalogChange(getData(), change); - } else if (name === 'text' || name === 'title') { - persistentData[name] = getData()[name]; - return Optional.none(); - } else { - return Optional.none(); - } - }; - return { onChange: onChange }; - }; - var DialogChanges = { - init: init, - getDelta: getDelta - }; - - var global$4 = tinymce.util.Tools.resolve('tinymce.util.Delay'); - - var global$5 = tinymce.util.Tools.resolve('tinymce.util.Promise'); - - var delayedConfirm = function (editor, message, callback) { - var rng = editor.selection.getRng(); - global$4.setEditorTimeout(editor, function () { - editor.windowManager.confirm(message, function (state) { - editor.selection.setRng(rng); - callback(state); - }); - }); - }; - var tryEmailTransform = function (data) { - var url = data.href; - var suggestMailTo = url.indexOf('@') > 0 && url.indexOf('/') === -1 && url.indexOf('mailto:') === -1; - return suggestMailTo ? Optional.some({ - message: 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?', - preprocess: function (oldData) { - return __assign(__assign({}, oldData), { href: 'mailto:' + url }); - } - }) : Optional.none(); - }; - var tryProtocolTransform = function (assumeExternalTargets, defaultLinkProtocol) { - return function (data) { - var url = data.href; - var suggestProtocol = assumeExternalTargets === 1 && !hasProtocol(url) || assumeExternalTargets === 0 && /^\s*www(\.|\d\.)/i.test(url); - return suggestProtocol ? Optional.some({ - message: 'The URL you entered seems to be an external link. Do you want to add the required ' + defaultLinkProtocol + ':// prefix?', - preprocess: function (oldData) { - return __assign(__assign({}, oldData), { href: defaultLinkProtocol + '://' + url }); - } - }) : Optional.none(); - }; - }; - var preprocess = function (editor, data) { - return findMap([ - tryEmailTransform, - tryProtocolTransform(assumeExternalTargets(editor), getDefaultLinkProtocol(editor)) - ], function (f) { - return f(data); - }).fold(function () { - return global$5.resolve(data); - }, function (transform) { - return new global$5(function (callback) { - delayedConfirm(editor, transform.message, function (state) { - callback(state ? transform.preprocess(data) : data); - }); - }); - }); - }; - var DialogConfirms = { preprocess: preprocess }; - - var getAnchors = function (editor) { - var anchorNodes = editor.dom.select('a:not([href])'); - var anchors = bind(anchorNodes, function (anchor) { - var id = anchor.name || anchor.id; - return id ? [{ - text: id, - value: '#' + id - }] : []; - }); - return anchors.length > 0 ? Optional.some([{ - text: 'None', - value: '' - }].concat(anchors)) : Optional.none(); - }; - var AnchorListOptions = { getAnchors: getAnchors }; - - var getClasses = function (editor) { - var list = getLinkClassList(editor); - if (list.length > 0) { - return ListOptions.sanitize(list); - } - return Optional.none(); - }; - var ClassListOptions = { getClasses: getClasses }; - - var global$6 = tinymce.util.Tools.resolve('tinymce.util.XHR'); - - var parseJson = function (text) { - try { - return Optional.some(JSON.parse(text)); - } catch (err) { - return Optional.none(); - } - }; - var getLinks = function (editor) { - var extractor = function (item) { - return editor.convertURL(item.value || item.url, 'href'); - }; - var linkList = getLinkList(editor); - return new global$5(function (callback) { - if (isString(linkList)) { - global$6.send({ - url: linkList, - success: function (text) { - return callback(parseJson(text)); - }, - error: function (_) { - return callback(Optional.none()); - } - }); - } else if (isFunction(linkList)) { - linkList(function (output) { - return callback(Optional.some(output)); - }); - } else { - callback(Optional.from(linkList)); - } - }).then(function (optItems) { - return optItems.bind(ListOptions.sanitizeWith(extractor)).map(function (items) { - if (items.length > 0) { - var noneItem = [{ - text: 'None', - value: '' - }]; - return noneItem.concat(items); - } else { - return items; - } - }); - }); - }; - var LinkListOptions = { getLinks: getLinks }; - - var getRels = function (editor, initialTarget) { - var list = getRelList(editor); - if (list.length > 0) { - var isTargetBlank_1 = initialTarget.is('_blank'); - var enforceSafe = allowUnsafeLinkTarget(editor) === false; - var safeRelExtractor = function (item) { - return applyRelTargetRules(ListOptions.getValue(item), isTargetBlank_1); - }; - var sanitizer = enforceSafe ? ListOptions.sanitizeWith(safeRelExtractor) : ListOptions.sanitize; - return sanitizer(list); - } - return Optional.none(); - }; - var RelOptions = { getRels: getRels }; - - var fallbacks = [ - { - text: 'Current window', - value: '' - }, - { - text: 'New window', - value: '_blank' - } - ]; - var getTargets = function (editor) { - var list = getTargetList(editor); - if (isArray(list)) { - return ListOptions.sanitize(list).orThunk(function () { - return Optional.some(fallbacks); - }); - } else if (list === false) { - return Optional.none(); - } - return Optional.some(fallbacks); - }; - var TargetOptions = { getTargets: getTargets }; - - var nonEmptyAttr = function (dom, elem, name) { - var val = dom.getAttrib(elem, name); - return val !== null && val.length > 0 ? Optional.some(val) : Optional.none(); - }; - var extractFromAnchor = function (editor, anchor) { - var dom = editor.dom; - var onlyText = isOnlyTextSelected(editor); - var text = onlyText ? Optional.some(getAnchorText(editor.selection, anchor)) : Optional.none(); - var url = anchor ? Optional.some(dom.getAttrib(anchor, 'href')) : Optional.none(); - var target = anchor ? Optional.from(dom.getAttrib(anchor, 'target')) : Optional.none(); - var rel = nonEmptyAttr(dom, anchor, 'rel'); - var linkClass = nonEmptyAttr(dom, anchor, 'class'); - var title = nonEmptyAttr(dom, anchor, 'title'); - return { - url: url, - text: text, - title: title, - target: target, - rel: rel, - linkClass: linkClass - }; - }; - var collect = function (editor, linkNode) { - return LinkListOptions.getLinks(editor).then(function (links) { - var anchor = extractFromAnchor(editor, linkNode); - return { - anchor: anchor, - catalogs: { - targets: TargetOptions.getTargets(editor), - rels: RelOptions.getRels(editor, anchor.target), - classes: ClassListOptions.getClasses(editor), - anchor: AnchorListOptions.getAnchors(editor), - link: links - }, - optNode: Optional.from(linkNode), - flags: { titleEnabled: shouldShowLinkTitle(editor) } - }; - }); - }; - var DialogInfo = { collect: collect }; - - var handleSubmit = function (editor, info) { - return function (api) { - var data = api.getData(); - if (!data.url.value) { - unlink(editor); - api.close(); - return; - } - var getChangedValue = function (key) { - return Optional.from(data[key]).filter(function (value) { - return !info.anchor[key].is(value); - }); - }; - var changedData = { - href: data.url.value, - text: getChangedValue('text'), - target: getChangedValue('target'), - rel: getChangedValue('rel'), - class: getChangedValue('linkClass'), - title: getChangedValue('title') - }; - var attachState = { - href: data.url.value, - attach: data.url.meta !== undefined && data.url.meta.attach ? data.url.meta.attach : function () { - } - }; - DialogConfirms.preprocess(editor, changedData).then(function (pData) { - link(editor, attachState, pData); - }); - api.close(); - }; - }; - var collectData = function (editor) { - var anchorNode = getAnchorElement(editor); - return DialogInfo.collect(editor, anchorNode); - }; - var getInitialData = function (info, defaultTarget) { - var anchor = info.anchor; - var url = anchor.url.getOr(''); - return { - url: { - value: url, - meta: { original: { value: url } } - }, - text: anchor.text.getOr(''), - title: anchor.title.getOr(''), - anchor: url, - link: url, - rel: anchor.rel.getOr(''), - target: anchor.target.or(defaultTarget).getOr(''), - linkClass: anchor.linkClass.getOr('') - }; - }; - var makeDialog = function (settings, onSubmit, editor) { - var urlInput = [{ - name: 'url', - type: 'urlinput', - filetype: 'file', - label: 'URL' - }]; - var displayText = settings.anchor.text.map(function () { - return { - name: 'text', - type: 'input', - label: 'Text to display' - }; - }).toArray(); - var titleText = settings.flags.titleEnabled ? [{ - name: 'title', - type: 'input', - label: 'Title' - }] : []; - var defaultTarget = Optional.from(getDefaultLinkTarget(editor)); - var initialData = getInitialData(settings, defaultTarget); - var catalogs = settings.catalogs; - var dialogDelta = DialogChanges.init(initialData, catalogs); - var body = { - type: 'panel', - items: flatten([ - urlInput, - displayText, - titleText, - cat([ - catalogs.anchor.map(ListOptions.createUi('anchor', 'Anchors')), - catalogs.rels.map(ListOptions.createUi('rel', 'Rel')), - catalogs.targets.map(ListOptions.createUi('target', 'Open link in...')), - catalogs.link.map(ListOptions.createUi('link', 'Link list')), - catalogs.classes.map(ListOptions.createUi('linkClass', 'Class')) - ]) - ]) - }; - return { - title: 'Insert/Edit Link', - size: 'normal', - body: body, - buttons: [ - { - type: 'cancel', - name: 'cancel', - text: 'Cancel' - }, - { - type: 'submit', - name: 'save', - text: 'Save', - primary: true - } - ], - initialData: initialData, - onChange: function (api, _a) { - var name = _a.name; - dialogDelta.onChange(api.getData, { name: name }).each(function (newData) { - api.setData(newData); - }); - }, - onSubmit: onSubmit - }; - }; - var open = function (editor) { - var data = collectData(editor); - data.then(function (info) { - var onSubmit = handleSubmit(editor, info); - return makeDialog(info, onSubmit, editor); - }).then(function (spec) { - editor.windowManager.open(spec); - }); - }; - - var appendClickRemove = function (link, evt) { - document.body.appendChild(link); - link.dispatchEvent(evt); - document.body.removeChild(link); - }; - var open$1 = function (url) { - var link = document.createElement('a'); - link.target = '_blank'; - link.href = url; - link.rel = 'noreferrer noopener'; - var evt = document.createEvent('MouseEvents'); - evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); - appendClickRemove(link, evt); - }; - - var getLink = function (editor, elm) { - return editor.dom.getParent(elm, 'a[href]'); - }; - var getSelectedLink = function (editor) { - return getLink(editor, editor.selection.getStart()); - }; - var hasOnlyAltModifier = function (e) { - return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false; - }; - var gotoLink = function (editor, a) { - if (a) { - var href = getHref(a); - if (/^#/.test(href)) { - var targetEl = editor.$(href); - if (targetEl.length) { - editor.selection.scrollIntoView(targetEl[0], true); - } - } else { - open$1(a.href); - } - } - }; - var openDialog = function (editor) { - return function () { - open(editor); - }; - }; - var gotoSelectedLink = function (editor) { - return function () { - gotoLink(editor, getSelectedLink(editor)); - }; - }; - var setupGotoLinks = function (editor) { - editor.on('click', function (e) { - var link = getLink(editor, e.target); - if (link && global$1.metaKeyPressed(e)) { - e.preventDefault(); - gotoLink(editor, link); - } - }); - editor.on('keydown', function (e) { - var link = getSelectedLink(editor); - if (link && e.keyCode === 13 && hasOnlyAltModifier(e)) { - e.preventDefault(); - gotoLink(editor, link); - } - }); - }; - var toggleState = function (editor, toggler) { - editor.on('NodeChange', toggler); - return function () { - return editor.off('NodeChange', toggler); - }; - }; - var toggleActiveState = function (editor) { - return function (api) { - return toggleState(editor, function () { - api.setActive(!editor.mode.isReadOnly() && getAnchorElement(editor, editor.selection.getNode()) !== null); - }); - }; - }; - var toggleEnabledState = function (editor) { - return function (api) { - var updateState = function () { - return api.setDisabled(getAnchorElement(editor, editor.selection.getNode()) === null); - }; - updateState(); - return toggleState(editor, updateState); - }; - }; - var toggleUnlinkState = function (editor) { - return function (api) { - var hasLinks$1 = function (parents) { - return hasLinks(parents) || hasLinksInSelection(editor.selection.getRng()); - }; - var parents = editor.dom.getParents(editor.selection.getStart()); - api.setDisabled(!hasLinks$1(parents)); - return toggleState(editor, function (e) { - return api.setDisabled(!hasLinks$1(e.parents)); - }); - }; - }; - - var register = function (editor) { - editor.addCommand('mceLink', function () { - if (useQuickLink(editor)) { - editor.fire('contexttoolbar-show', { toolbarKey: 'quicklink' }); - } else { - openDialog(editor)(); - } - }); - }; - - var setup = function (editor) { - editor.addShortcut('Meta+K', '', function () { - editor.execCommand('mceLink'); - }); - }; - - var setupButtons = function (editor) { - editor.ui.registry.addToggleButton('link', { - icon: 'link', - tooltip: 'Insert/edit link', - onAction: openDialog(editor), - onSetup: toggleActiveState(editor) - }); - editor.ui.registry.addButton('openlink', { - icon: 'new-tab', - tooltip: 'Open link', - onAction: gotoSelectedLink(editor), - onSetup: toggleEnabledState(editor) - }); - editor.ui.registry.addButton('unlink', { - icon: 'unlink', - tooltip: 'Remove link', - onAction: function () { - return unlink(editor); - }, - onSetup: toggleUnlinkState(editor) - }); - }; - var setupMenuItems = function (editor) { - editor.ui.registry.addMenuItem('openlink', { - text: 'Open link', - icon: 'new-tab', - onAction: gotoSelectedLink(editor), - onSetup: toggleEnabledState(editor) - }); - editor.ui.registry.addMenuItem('link', { - icon: 'link', - text: 'Link...', - shortcut: 'Meta+K', - onAction: openDialog(editor) - }); - editor.ui.registry.addMenuItem('unlink', { - icon: 'unlink', - text: 'Remove link', - onAction: function () { - return unlink(editor); - }, - onSetup: toggleUnlinkState(editor) - }); - }; - var setupContextMenu = function (editor) { - var inLink = 'link unlink openlink'; - var noLink = 'link'; - editor.ui.registry.addContextMenu('link', { - update: function (element) { - return hasLinks(editor.dom.getParents(element, 'a')) ? inLink : noLink; - } - }); - }; - var setupContextToolbars = function (editor) { - var collapseSelectionToEnd = function (editor) { - editor.selection.collapse(false); - }; - var onSetupLink = function (buttonApi) { - var node = editor.selection.getNode(); - buttonApi.setDisabled(!getAnchorElement(editor, node)); - return function () { - }; - }; - editor.ui.registry.addContextForm('quicklink', { - launch: { - type: 'contextformtogglebutton', - icon: 'link', - tooltip: 'Link', - onSetup: toggleActiveState(editor) - }, - label: 'Link', - predicate: function (node) { - return !!getAnchorElement(editor, node) && hasContextToolbar(editor); - }, - initValue: function () { - var elm = getAnchorElement(editor); - return !!elm ? getHref(elm) : ''; - }, - commands: [ - { - type: 'contextformtogglebutton', - icon: 'link', - tooltip: 'Link', - primary: true, - onSetup: function (buttonApi) { - var node = editor.selection.getNode(); - buttonApi.setActive(!!getAnchorElement(editor, node)); - return toggleActiveState(editor)(buttonApi); - }, - onAction: function (formApi) { - var anchor = getAnchorElement(editor); - var value = formApi.getValue(); - if (!anchor) { - var attachState = { - href: value, - attach: function () { - } - }; - var onlyText = isOnlyTextSelected(editor); - var text = onlyText ? Optional.some(getAnchorText(editor.selection, anchor)).filter(function (t) { - return t.length > 0; - }).or(Optional.from(value)) : Optional.none(); - link(editor, attachState, { - href: value, - text: text, - title: Optional.none(), - rel: Optional.none(), - target: Optional.none(), - class: Optional.none() - }); - formApi.hide(); - } else { - editor.undoManager.transact(function () { - editor.dom.setAttrib(anchor, 'href', value); - collapseSelectionToEnd(editor); - formApi.hide(); - }); - } - } - }, - { - type: 'contextformbutton', - icon: 'unlink', - tooltip: 'Remove link', - onSetup: onSetupLink, - onAction: function (formApi) { - unlink(editor); - formApi.hide(); - } - }, - { - type: 'contextformbutton', - icon: 'new-tab', - tooltip: 'Open link', - onSetup: onSetupLink, - onAction: function (formApi) { - gotoSelectedLink(editor)(); - formApi.hide(); - } - } - ] - }); - }; - - function Plugin () { - global.add('link', function (editor) { - setupButtons(editor); - setupMenuItems(editor); - setupContextMenu(editor); - setupContextToolbars(editor); - setupGotoLinks(editor); - register(editor); - setup(editor); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/link/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/link/plugin.min.js deleted file mode 100644 index bf4586881139227fb394f3ff3934e7e6ba8c2449..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/link/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var n,t,e,r,o=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=tinymce.util.Tools.resolve("tinymce.util.VK"),u=function(r){return function(t){return e=typeof(n=t),(null===n?"null":"object"==e&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==e&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":e)===r;var n,e}},a=function(n){return function(t){return typeof t===n}},l=u("string"),c=u("array"),f=function(t){return n===t},s=a("boolean"),m=a("function"),g=function(t){var n=t.getParam("link_assume_external_targets",!1);return s(n)&&n?1:!l(n)||"http"!==n&&"https"!==n?0:n},p=function(t){return t.getParam("default_link_target")},d=function(t){return t.getParam("target_list",!0)},h=function(t){return t.getParam("rel_list",[],"array")},v=function(t){return t.getParam("allow_unsafe_link_target",!1,"boolean")},y=function(){},k=function(t){return function(){return t}},x=k(!1),b=k(!(n=null)),O=function(){return w},w=(t=function(t){return t.isNone()},{fold:function(t,n){return t()},is:x,isSome:x,isNone:b,getOr:r=function(t){return t},getOrThunk:e=function(t){return t()},getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:k(null),getOrUndefined:k(undefined),or:r,orThunk:e,map:O,each:y,bind:O,exists:x,forall:b,filter:O,equals:t,equals_:t,toArray:function(){return[]},toString:k("none()")}),C=function(e){var t=k(e),n=function(){return o},r=function(t){return t(e)},o={fold:function(t,n){return n(e)},is:function(t){return e===t},isSome:b,isNone:x,getOr:t,getOrThunk:t,getOrDie:t,getOrNull:t,getOrUndefined:t,or:n,orThunk:n,map:function(t){return C(t(e))},each:function(t){t(e)},bind:r,exists:r,forall:r,filter:function(t){return t(e)?o:w},toArray:function(){return[e]},toString:function(){return"some("+e+")"},equals:function(t){return t.is(e)},equals_:function(t,n){return t.fold(x,function(t){return n(e,t)})}};return o},N={some:C,none:O,from:function(t){return null===t||t===undefined?w:C(t)}},A=Array.prototype.indexOf,P=Array.prototype.push,T=function(t,n){return e=t,r=n,-1= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none(); - }; - var head = function (xs) { - return get(xs, 0); - }; - var last = function (xs) { - return get(xs, xs.length - 1); - }; - - var __assign = function () { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) - if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - - var cached = function (f) { - var called = false; - var r; - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - if (!called) { - called = true; - r = f.apply(null, args); - } - return r; - }; - }; - - var DeviceType = function (os, browser, userAgent, mediaMatch) { - var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true; - var isiPhone = os.isiOS() && !isiPad; - var isMobile = os.isiOS() || os.isAndroid(); - var isTouch = isMobile || mediaMatch('(pointer:coarse)'); - var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)'); - var isPhone = isiPhone || isMobile && !isTablet; - var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false; - var isDesktop = !isPhone && !isTablet && !iOSwebview; - return { - isiPad: constant(isiPad), - isiPhone: constant(isiPhone), - isTablet: constant(isTablet), - isPhone: constant(isPhone), - isTouch: constant(isTouch), - isAndroid: os.isAndroid, - isiOS: os.isiOS, - isWebView: constant(iOSwebview), - isDesktop: constant(isDesktop) - }; - }; - - var firstMatch = function (regexes, s) { - for (var i = 0; i < regexes.length; i++) { - var x = regexes[i]; - if (x.test(s)) { - return x; - } - } - return undefined; - }; - var find$1 = function (regexes, agent) { - var r = firstMatch(regexes, agent); - if (!r) { - return { - major: 0, - minor: 0 - }; - } - var group = function (i) { - return Number(agent.replace(r, '$' + i)); - }; - return nu(group(1), group(2)); - }; - var detect = function (versionRegexes, agent) { - var cleanedAgent = String(agent).toLowerCase(); - if (versionRegexes.length === 0) { - return unknown(); - } - return find$1(versionRegexes, cleanedAgent); - }; - var unknown = function () { - return nu(0, 0); - }; - var nu = function (major, minor) { - return { - major: major, - minor: minor - }; - }; - var Version = { - nu: nu, - detect: detect, - unknown: unknown - }; - - var detect$1 = function (candidates, userAgent) { - var agent = String(userAgent).toLowerCase(); - return find(candidates, function (candidate) { - return candidate.search(agent); - }); - }; - var detectBrowser = function (browsers, userAgent) { - return detect$1(browsers, userAgent).map(function (browser) { - var version = Version.detect(browser.versionRegexes, userAgent); - return { - current: browser.name, - version: version - }; - }); - }; - var detectOs = function (oses, userAgent) { - return detect$1(oses, userAgent).map(function (os) { - var version = Version.detect(os.versionRegexes, userAgent); - return { - current: os.name, - version: version - }; - }); - }; - var UaString = { - detectBrowser: detectBrowser, - detectOs: detectOs - }; - - var contains = function (str, substr) { - return str.indexOf(substr) !== -1; - }; - - var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/; - var checkContains = function (target) { - return function (uastring) { - return contains(uastring, target); - }; - }; - var browsers = [ - { - name: 'Edge', - versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/], - search: function (uastring) { - return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit'); - } - }, - { - name: 'Chrome', - versionRegexes: [ - /.*?chrome\/([0-9]+)\.([0-9]+).*/, - normalVersionRegex - ], - search: function (uastring) { - return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe'); - } - }, - { - name: 'IE', - versionRegexes: [ - /.*?msie\ ?([0-9]+)\.([0-9]+).*/, - /.*?rv:([0-9]+)\.([0-9]+).*/ - ], - search: function (uastring) { - return contains(uastring, 'msie') || contains(uastring, 'trident'); - } - }, - { - name: 'Opera', - versionRegexes: [ - normalVersionRegex, - /.*?opera\/([0-9]+)\.([0-9]+).*/ - ], - search: checkContains('opera') - }, - { - name: 'Firefox', - versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/], - search: checkContains('firefox') - }, - { - name: 'Safari', - versionRegexes: [ - normalVersionRegex, - /.*?cpu os ([0-9]+)_([0-9]+).*/ - ], - search: function (uastring) { - return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit'); - } - } - ]; - var oses = [ - { - name: 'Windows', - search: checkContains('win'), - versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/] - }, - { - name: 'iOS', - search: function (uastring) { - return contains(uastring, 'iphone') || contains(uastring, 'ipad'); - }, - versionRegexes: [ - /.*?version\/\ ?([0-9]+)\.([0-9]+).*/, - /.*cpu os ([0-9]+)_([0-9]+).*/, - /.*cpu iphone os ([0-9]+)_([0-9]+).*/ - ] - }, - { - name: 'Android', - search: checkContains('android'), - versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/] - }, - { - name: 'OSX', - search: checkContains('mac os x'), - versionRegexes: [/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/] - }, - { - name: 'Linux', - search: checkContains('linux'), - versionRegexes: [] - }, - { - name: 'Solaris', - search: checkContains('sunos'), - versionRegexes: [] - }, - { - name: 'FreeBSD', - search: checkContains('freebsd'), - versionRegexes: [] - }, - { - name: 'ChromeOS', - search: checkContains('cros'), - versionRegexes: [/.*?chrome\/([0-9]+)\.([0-9]+).*/] - } - ]; - var PlatformInfo = { - browsers: constant(browsers), - oses: constant(oses) - }; - - var edge = 'Edge'; - var chrome = 'Chrome'; - var ie = 'IE'; - var opera = 'Opera'; - var firefox = 'Firefox'; - var safari = 'Safari'; - var unknown$1 = function () { - return nu$1({ - current: undefined, - version: Version.unknown() - }); - }; - var nu$1 = function (info) { - var current = info.current; - var version = info.version; - var isBrowser = function (name) { - return function () { - return current === name; - }; - }; - return { - current: current, - version: version, - isEdge: isBrowser(edge), - isChrome: isBrowser(chrome), - isIE: isBrowser(ie), - isOpera: isBrowser(opera), - isFirefox: isBrowser(firefox), - isSafari: isBrowser(safari) - }; - }; - var Browser = { - unknown: unknown$1, - nu: nu$1, - edge: constant(edge), - chrome: constant(chrome), - ie: constant(ie), - opera: constant(opera), - firefox: constant(firefox), - safari: constant(safari) - }; - - var windows = 'Windows'; - var ios = 'iOS'; - var android = 'Android'; - var linux = 'Linux'; - var osx = 'OSX'; - var solaris = 'Solaris'; - var freebsd = 'FreeBSD'; - var chromeos = 'ChromeOS'; - var unknown$2 = function () { - return nu$2({ - current: undefined, - version: Version.unknown() - }); - }; - var nu$2 = function (info) { - var current = info.current; - var version = info.version; - var isOS = function (name) { - return function () { - return current === name; - }; - }; - return { - current: current, - version: version, - isWindows: isOS(windows), - isiOS: isOS(ios), - isAndroid: isOS(android), - isOSX: isOS(osx), - isLinux: isOS(linux), - isSolaris: isOS(solaris), - isFreeBSD: isOS(freebsd), - isChromeOS: isOS(chromeos) - }; - }; - var OperatingSystem = { - unknown: unknown$2, - nu: nu$2, - windows: constant(windows), - ios: constant(ios), - android: constant(android), - linux: constant(linux), - osx: constant(osx), - solaris: constant(solaris), - freebsd: constant(freebsd), - chromeos: constant(chromeos) - }; - - var detect$2 = function (userAgent, mediaMatch) { - var browsers = PlatformInfo.browsers(); - var oses = PlatformInfo.oses(); - var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu); - var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu); - var deviceType = DeviceType(os, browser, userAgent, mediaMatch); - return { - browser: browser, - os: os, - deviceType: deviceType - }; - }; - var PlatformDetection = { detect: detect$2 }; - - var mediaMatch = function (query) { - return window.matchMedia(query).matches; - }; - var platform = cached(function () { - return PlatformDetection.detect(navigator.userAgent, mediaMatch); - }); - var detect$3 = function () { - return platform(); - }; - - var compareDocumentPosition = function (a, b, match) { - return (a.compareDocumentPosition(b) & match) !== 0; - }; - var documentPositionContainedBy = function (a, b) { - return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_CONTAINED_BY); - }; - - var ELEMENT = 1; - - var fromHtml = function (html, scope) { - var doc = scope || document; - var div = doc.createElement('div'); - div.innerHTML = html; - if (!div.hasChildNodes() || div.childNodes.length > 1) { - console.error('HTML does not have a single root node', html); - throw new Error('HTML must have a single root node'); - } - return fromDom(div.childNodes[0]); - }; - var fromTag = function (tag, scope) { - var doc = scope || document; - var node = doc.createElement(tag); - return fromDom(node); - }; - var fromText = function (text, scope) { - var doc = scope || document; - var node = doc.createTextNode(text); - return fromDom(node); - }; - var fromDom = function (node) { - if (node === null || node === undefined) { - throw new Error('Node cannot be null or undefined'); - } - return { dom: node }; - }; - var fromPoint = function (docElm, x, y) { - return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom); - }; - var SugarElement = { - fromHtml: fromHtml, - fromTag: fromTag, - fromText: fromText, - fromDom: fromDom, - fromPoint: fromPoint - }; - - var is = function (element, selector) { - var dom = element.dom; - if (dom.nodeType !== ELEMENT) { - return false; - } else { - var elem = dom; - if (elem.matches !== undefined) { - return elem.matches(selector); - } else if (elem.msMatchesSelector !== undefined) { - return elem.msMatchesSelector(selector); - } else if (elem.webkitMatchesSelector !== undefined) { - return elem.webkitMatchesSelector(selector); - } else if (elem.mozMatchesSelector !== undefined) { - return elem.mozMatchesSelector(selector); - } else { - throw new Error('Browser lacks native selectors'); - } - } - }; - - var eq = function (e1, e2) { - return e1.dom === e2.dom; - }; - var regularContains = function (e1, e2) { - var d1 = e1.dom; - var d2 = e2.dom; - return d1 === d2 ? false : d1.contains(d2); - }; - var ieContains = function (e1, e2) { - return documentPositionContainedBy(e1.dom, e2.dom); - }; - var contains$1 = function (e1, e2) { - return detect$3().browser.isIE() ? ieContains(e1, e2) : regularContains(e1, e2); - }; - var is$1 = is; - - var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils'); - - var global$2 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker'); - - var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK'); - - var keys = Object.keys; - var each$1 = function (obj, f) { - var props = keys(obj); - for (var k = 0, len = props.length; k < len; k++) { - var i = props[k]; - var x = obj[i]; - f(x, i); - } - }; - var objAcc = function (r) { - return function (x, i) { - r[i] = x; - }; - }; - var internalFilter = function (obj, pred, onTrue, onFalse) { - var r = {}; - each$1(obj, function (x, i) { - (pred(x, i) ? onTrue : onFalse)(x, i); - }); - return r; - }; - var filter$1 = function (obj, pred) { - var t = {}; - internalFilter(obj, pred, objAcc(t), noop); - return t; - }; - - var Global = typeof window !== 'undefined' ? window : Function('return this;')(); - - var name = function (element) { - var r = element.dom.nodeName; - return r.toLowerCase(); - }; - var type = function (element) { - return element.dom.nodeType; - }; - var isType$1 = function (t) { - return function (element) { - return type(element) === t; - }; - }; - var isElement = isType$1(ELEMENT); - - var rawSet = function (dom, key, value) { - if (isString(value) || isBoolean(value) || isNumber(value)) { - dom.setAttribute(key, value + ''); - } else { - console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom); - throw new Error('Attribute value was not simple'); - } - }; - var setAll = function (element, attrs) { - var dom = element.dom; - each$1(attrs, function (v, k) { - rawSet(dom, k, v); - }); - }; - var clone = function (element) { - return foldl(element.dom.attributes, function (acc, attr) { - acc[attr.name] = attr.value; - return acc; - }, {}); - }; - - var parent = function (element) { - return Optional.from(element.dom.parentNode).map(SugarElement.fromDom); - }; - var children = function (element) { - return map(element.dom.childNodes, SugarElement.fromDom); - }; - var child = function (element, index) { - var cs = element.dom.childNodes; - return Optional.from(cs[index]).map(SugarElement.fromDom); - }; - var firstChild = function (element) { - return child(element, 0); - }; - var lastChild = function (element) { - return child(element, element.dom.childNodes.length - 1); - }; - - var before = function (marker, element) { - var parent$1 = parent(marker); - parent$1.each(function (v) { - v.dom.insertBefore(element.dom, marker.dom); - }); - }; - var append = function (parent, element) { - parent.dom.appendChild(element.dom); - }; - - var before$1 = function (marker, elements) { - each(elements, function (x) { - before(marker, x); - }); - }; - var append$1 = function (parent, elements) { - each(elements, function (x) { - append(parent, x); - }); - }; - - var remove = function (element) { - var dom = element.dom; - if (dom.parentNode !== null) { - dom.parentNode.removeChild(dom); - } - }; - - var clone$1 = function (original, isDeep) { - return SugarElement.fromDom(original.dom.cloneNode(isDeep)); - }; - var deep = function (original) { - return clone$1(original, true); - }; - var shallowAs = function (original, tag) { - var nu = SugarElement.fromTag(tag); - var attributes = clone(original); - setAll(nu, attributes); - return nu; - }; - var mutate = function (original, tag) { - var nu = shallowAs(original, tag); - before(original, nu); - var children$1 = children(original); - append$1(nu, children$1); - remove(original); - return nu; - }; - - var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); - - var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools'); - - var matchNodeName = function (name) { - return function (node) { - return node && node.nodeName.toLowerCase() === name; - }; - }; - var matchNodeNames = function (regex) { - return function (node) { - return node && regex.test(node.nodeName); - }; - }; - var isTextNode = function (node) { - return node && node.nodeType === 3; - }; - var isListNode = matchNodeNames(/^(OL|UL|DL)$/); - var isOlUlNode = matchNodeNames(/^(OL|UL)$/); - var isOlNode = matchNodeName('ol'); - var isListItemNode = matchNodeNames(/^(LI|DT|DD)$/); - var isDlItemNode = matchNodeNames(/^(DT|DD)$/); - var isTableCellNode = matchNodeNames(/^(TH|TD)$/); - var isBr = matchNodeName('br'); - var isFirstChild = function (node) { - return node.parentNode.firstChild === node; - }; - var isTextBlock = function (editor, node) { - return node && !!editor.schema.getTextBlockElements()[node.nodeName]; - }; - var isBlock = function (node, blockElements) { - return node && node.nodeName in blockElements; - }; - var isBogusBr = function (dom, node) { - if (!isBr(node)) { - return false; - } - return dom.isBlock(node.nextSibling) && !isBr(node.previousSibling); - }; - var isEmpty = function (dom, elm, keepBookmarks) { - var empty = dom.isEmpty(elm); - if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) { - return false; - } - return empty; - }; - var isChildOfBody = function (dom, elm) { - return dom.isChildOf(elm, dom.getRoot()); - }; - - var shouldIndentOnTab = function (editor) { - return editor.getParam('lists_indent_on_tab', true); - }; - var getForcedRootBlock = function (editor) { - var block = editor.getParam('forced_root_block', 'p'); - if (block === false) { - return ''; - } else if (block === true) { - return 'p'; - } else { - return block; - } - }; - var getForcedRootBlockAttrs = function (editor) { - return editor.getParam('forced_root_block_attrs', {}); - }; - - var createTextBlock = function (editor, contentNode) { - var dom = editor.dom; - var blockElements = editor.schema.getBlockElements(); - var fragment = dom.createFragment(); - var blockName = getForcedRootBlock(editor); - var node, textBlock, hasContentNode; - if (blockName) { - textBlock = dom.create(blockName); - if (textBlock.tagName === blockName.toUpperCase()) { - dom.setAttribs(textBlock, getForcedRootBlockAttrs(editor)); - } - if (!isBlock(contentNode.firstChild, blockElements)) { - fragment.appendChild(textBlock); - } - } - if (contentNode) { - while (node = contentNode.firstChild) { - var nodeName = node.nodeName; - if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) { - hasContentNode = true; - } - if (isBlock(node, blockElements)) { - fragment.appendChild(node); - textBlock = null; - } else { - if (blockName) { - if (!textBlock) { - textBlock = dom.create(blockName); - fragment.appendChild(textBlock); - } - textBlock.appendChild(node); - } else { - fragment.appendChild(node); - } - } - } - } - if (!blockName) { - fragment.appendChild(dom.create('br')); - } else { - if (!hasContentNode) { - textBlock.appendChild(dom.create('br', { 'data-mce-bogus': '1' })); - } - } - return fragment; - }; - - var DOM = global$4.DOM; - var splitList = function (editor, ul, li) { - var removeAndKeepBookmarks = function (targetNode) { - global$5.each(bookmarks, function (node) { - targetNode.parentNode.insertBefore(node, li.parentNode); - }); - DOM.remove(targetNode); - }; - var bookmarks = DOM.select('span[data-mce-type="bookmark"]', ul); - var newBlock = createTextBlock(editor, li); - var tmpRng = DOM.createRng(); - tmpRng.setStartAfter(li); - tmpRng.setEndAfter(ul); - var fragment = tmpRng.extractContents(); - for (var node = fragment.firstChild; node; node = node.firstChild) { - if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) { - DOM.remove(node); - break; - } - } - if (!editor.dom.isEmpty(fragment)) { - DOM.insertAfter(fragment, ul); - } - DOM.insertAfter(newBlock, ul); - if (isEmpty(editor.dom, li.parentNode)) { - removeAndKeepBookmarks(li.parentNode); - } - DOM.remove(li); - if (isEmpty(editor.dom, ul)) { - DOM.remove(ul); - } - }; - - var outdentDlItem = function (editor, item) { - if (is$1(item, 'dd')) { - mutate(item, 'dt'); - } else if (is$1(item, 'dt')) { - parent(item).each(function (dl) { - return splitList(editor, dl.dom, item.dom); - }); - } - }; - var indentDlItem = function (item) { - if (is$1(item, 'dt')) { - mutate(item, 'dd'); - } - }; - var dlIndentation = function (editor, indentation, dlItems) { - if (indentation === 'Indent') { - each(dlItems, indentDlItem); - } else { - each(dlItems, function (item) { - return outdentDlItem(editor, item); - }); - } - }; - - var getNormalizedPoint = function (container, offset) { - if (isTextNode(container)) { - return { - container: container, - offset: offset - }; - } - var node = global$1.getNode(container, offset); - if (isTextNode(node)) { - return { - container: node, - offset: offset >= container.childNodes.length ? node.data.length : 0 - }; - } else if (node.previousSibling && isTextNode(node.previousSibling)) { - return { - container: node.previousSibling, - offset: node.previousSibling.data.length - }; - } else if (node.nextSibling && isTextNode(node.nextSibling)) { - return { - container: node.nextSibling, - offset: 0 - }; - } - return { - container: container, - offset: offset - }; - }; - var normalizeRange = function (rng) { - var outRng = rng.cloneRange(); - var rangeStart = getNormalizedPoint(rng.startContainer, rng.startOffset); - outRng.setStart(rangeStart.container, rangeStart.offset); - var rangeEnd = getNormalizedPoint(rng.endContainer, rng.endOffset); - outRng.setEnd(rangeEnd.container, rangeEnd.offset); - return outRng; - }; - - var global$6 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery'); - - var getParentList = function (editor, node) { - var selectionStart = node || editor.selection.getStart(true); - return editor.dom.getParent(selectionStart, 'OL,UL,DL', getClosestListRootElm(editor, selectionStart)); - }; - var isParentListSelected = function (parentList, selectedBlocks) { - return parentList && selectedBlocks.length === 1 && selectedBlocks[0] === parentList; - }; - var findSubLists = function (parentList) { - return global$5.grep(parentList.querySelectorAll('ol,ul,dl'), function (elm) { - return isListNode(elm); - }); - }; - var getSelectedSubLists = function (editor) { - var parentList = getParentList(editor); - var selectedBlocks = editor.selection.getSelectedBlocks(); - if (isParentListSelected(parentList, selectedBlocks)) { - return findSubLists(parentList); - } else { - return global$5.grep(selectedBlocks, function (elm) { - return isListNode(elm) && parentList !== elm; - }); - } - }; - var findParentListItemsNodes = function (editor, elms) { - var listItemsElms = global$5.map(elms, function (elm) { - var parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListRootElm(editor, elm)); - return parentLi ? parentLi : elm; - }); - return global$6.unique(listItemsElms); - }; - var getSelectedListItems = function (editor) { - var selectedBlocks = editor.selection.getSelectedBlocks(); - return global$5.grep(findParentListItemsNodes(editor, selectedBlocks), function (block) { - return isListItemNode(block); - }); - }; - var getSelectedDlItems = function (editor) { - return filter(getSelectedListItems(editor), isDlItemNode); - }; - var getClosestListRootElm = function (editor, elm) { - var parentTableCell = editor.dom.getParents(elm, 'TD,TH'); - var root = parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody(); - return root; - }; - var findLastParentListNode = function (editor, elm) { - var parentLists = editor.dom.getParents(elm, 'ol,ul', getClosestListRootElm(editor, elm)); - return last(parentLists); - }; - var getSelectedLists = function (editor) { - var firstList = findLastParentListNode(editor, editor.selection.getStart()); - var subsequentLists = filter(editor.selection.getSelectedBlocks(), isOlUlNode); - return firstList.toArray().concat(subsequentLists); - }; - var getSelectedListRoots = function (editor) { - var selectedLists = getSelectedLists(editor); - return getUniqueListRoots(editor, selectedLists); - }; - var getUniqueListRoots = function (editor, lists) { - var listRoots = map(lists, function (list) { - return findLastParentListNode(editor, list).getOr(list); - }); - return global$6.unique(listRoots); - }; - - var lift2 = function (oa, ob, f) { - return oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none(); - }; - - var fromElements = function (elements, scope) { - var doc = scope || document; - var fragment = doc.createDocumentFragment(); - each(elements, function (element) { - fragment.appendChild(element.dom); - }); - return SugarElement.fromDom(fragment); - }; - - var fireListEvent = function (editor, action, element) { - return editor.fire('ListMutation', { - action: action, - element: element - }); - }; - - var isSupported = function (dom) { - return dom.style !== undefined && isFunction(dom.style.getPropertyValue); - }; - - var internalSet = function (dom, property, value) { - if (!isString(value)) { - console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom); - throw new Error('CSS value must be a string: ' + value); - } - if (isSupported(dom)) { - dom.style.setProperty(property, value); - } - }; - var set = function (element, property, value) { - var dom = element.dom; - internalSet(dom, property, value); - }; - - var joinSegment = function (parent, child) { - append(parent.item, child.list); - }; - var joinSegments = function (segments) { - for (var i = 1; i < segments.length; i++) { - joinSegment(segments[i - 1], segments[i]); - } - }; - var appendSegments = function (head$1, tail) { - lift2(last(head$1), head(tail), joinSegment); - }; - var createSegment = function (scope, listType) { - var segment = { - list: SugarElement.fromTag(listType, scope), - item: SugarElement.fromTag('li', scope) - }; - append(segment.list, segment.item); - return segment; - }; - var createSegments = function (scope, entry, size) { - var segments = []; - for (var i = 0; i < size; i++) { - segments.push(createSegment(scope, entry.listType)); - } - return segments; - }; - var populateSegments = function (segments, entry) { - for (var i = 0; i < segments.length - 1; i++) { - set(segments[i].item, 'list-style-type', 'none'); - } - last(segments).each(function (segment) { - setAll(segment.list, entry.listAttributes); - setAll(segment.item, entry.itemAttributes); - append$1(segment.item, entry.content); - }); - }; - var normalizeSegment = function (segment, entry) { - if (name(segment.list) !== entry.listType) { - segment.list = mutate(segment.list, entry.listType); - } - setAll(segment.list, entry.listAttributes); - }; - var createItem = function (scope, attr, content) { - var item = SugarElement.fromTag('li', scope); - setAll(item, attr); - append$1(item, content); - return item; - }; - var appendItem = function (segment, item) { - append(segment.list, item); - segment.item = item; - }; - var writeShallow = function (scope, cast, entry) { - var newCast = cast.slice(0, entry.depth); - last(newCast).each(function (segment) { - var item = createItem(scope, entry.itemAttributes, entry.content); - appendItem(segment, item); - normalizeSegment(segment, entry); - }); - return newCast; - }; - var writeDeep = function (scope, cast, entry) { - var segments = createSegments(scope, entry, entry.depth - cast.length); - joinSegments(segments); - populateSegments(segments, entry); - appendSegments(cast, segments); - return cast.concat(segments); - }; - var composeList = function (scope, entries) { - var cast = foldl(entries, function (cast, entry) { - return entry.depth > cast.length ? writeDeep(scope, cast, entry) : writeShallow(scope, cast, entry); - }, []); - return head(cast).map(function (segment) { - return segment.list; - }); - }; - - var isList = function (el) { - return is$1(el, 'OL,UL'); - }; - var hasFirstChildList = function (el) { - return firstChild(el).map(isList).getOr(false); - }; - var hasLastChildList = function (el) { - return lastChild(el).map(isList).getOr(false); - }; - - var isIndented = function (entry) { - return entry.depth > 0; - }; - var isSelected = function (entry) { - return entry.isSelected; - }; - var cloneItemContent = function (li) { - var children$1 = children(li); - var content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1; - return map(content, deep); - }; - var createEntry = function (li, depth, isSelected) { - return parent(li).filter(isElement).map(function (list) { - return { - depth: depth, - dirty: false, - isSelected: isSelected, - content: cloneItemContent(li), - itemAttributes: clone(li), - listAttributes: clone(list), - listType: name(list) - }; - }); - }; - - var indentEntry = function (indentation, entry) { - switch (indentation) { - case 'Indent': - entry.depth++; - break; - case 'Outdent': - entry.depth--; - break; - case 'Flatten': - entry.depth = 0; - } - entry.dirty = true; - }; - - var cloneListProperties = function (target, source) { - target.listType = source.listType; - target.listAttributes = __assign({}, source.listAttributes); - }; - var cleanListProperties = function (entry) { - entry.listAttributes = filter$1(entry.listAttributes, function (_value, key) { - return key !== 'start'; - }); - }; - var closestSiblingEntry = function (entries, start) { - var depth = entries[start].depth; - var matches = function (entry) { - return entry.depth === depth && !entry.dirty; - }; - var until = function (entry) { - return entry.depth < depth; - }; - return findUntil(reverse(entries.slice(0, start)), matches, until).orThunk(function () { - return findUntil(entries.slice(start + 1), matches, until); - }); - }; - var normalizeEntries = function (entries) { - each(entries, function (entry, i) { - closestSiblingEntry(entries, i).fold(function () { - if (entry.dirty) { - cleanListProperties(entry); - } - }, function (matchingEntry) { - return cloneListProperties(entry, matchingEntry); - }); - }); - return entries; - }; - - var Cell = function (initial) { - var value = initial; - var get = function () { - return value; - }; - var set = function (v) { - value = v; - }; - return { - get: get, - set: set - }; - }; - - var parseItem = function (depth, itemSelection, selectionState, item) { - return firstChild(item).filter(isList).fold(function () { - itemSelection.each(function (selection) { - if (eq(selection.start, item)) { - selectionState.set(true); - } - }); - var currentItemEntry = createEntry(item, depth, selectionState.get()); - itemSelection.each(function (selection) { - if (eq(selection.end, item)) { - selectionState.set(false); - } - }); - var childListEntries = lastChild(item).filter(isList).map(function (list) { - return parseList(depth, itemSelection, selectionState, list); - }).getOr([]); - return currentItemEntry.toArray().concat(childListEntries); - }, function (list) { - return parseList(depth, itemSelection, selectionState, list); - }); - }; - var parseList = function (depth, itemSelection, selectionState, list) { - return bind(children(list), function (element) { - var parser = isList(element) ? parseList : parseItem; - var newDepth = depth + 1; - return parser(newDepth, itemSelection, selectionState, element); - }); - }; - var parseLists = function (lists, itemSelection) { - var selectionState = Cell(false); - var initialDepth = 0; - return map(lists, function (list) { - return { - sourceList: list, - entries: parseList(initialDepth, itemSelection, selectionState, list) - }; - }); - }; - - var outdentedComposer = function (editor, entries) { - var normalizedEntries = normalizeEntries(entries); - return map(normalizedEntries, function (entry) { - var content = fromElements(entry.content); - return SugarElement.fromDom(createTextBlock(editor, content.dom)); - }); - }; - var indentedComposer = function (editor, entries) { - var normalizedEntries = normalizeEntries(entries); - return composeList(editor.contentDocument, normalizedEntries).toArray(); - }; - var composeEntries = function (editor, entries) { - return bind(groupBy(entries, isIndented), function (entries) { - var groupIsIndented = head(entries).map(isIndented).getOr(false); - return groupIsIndented ? indentedComposer(editor, entries) : outdentedComposer(editor, entries); - }); - }; - var indentSelectedEntries = function (entries, indentation) { - each(filter(entries, isSelected), function (entry) { - return indentEntry(indentation, entry); - }); - }; - var getItemSelection = function (editor) { - var selectedListItems = map(getSelectedListItems(editor), SugarElement.fromDom); - return lift2(find(selectedListItems, not(hasFirstChildList)), find(reverse(selectedListItems), not(hasFirstChildList)), function (start, end) { - return { - start: start, - end: end - }; - }); - }; - var listIndentation = function (editor, lists, indentation) { - var entrySets = parseLists(lists, getItemSelection(editor)); - each(entrySets, function (entrySet) { - indentSelectedEntries(entrySet.entries, indentation); - var composedLists = composeEntries(editor, entrySet.entries); - each(composedLists, function (composedList) { - fireListEvent(editor, indentation === 'Indent' ? 'IndentList' : 'OutdentList', composedList.dom); - }); - before$1(entrySet.sourceList, composedLists); - remove(entrySet.sourceList); - }); - }; - - var selectionIndentation = function (editor, indentation) { - var lists = map(getSelectedListRoots(editor), SugarElement.fromDom); - var dlItems = map(getSelectedDlItems(editor), SugarElement.fromDom); - var isHandled = false; - if (lists.length || dlItems.length) { - var bookmark = editor.selection.getBookmark(); - listIndentation(editor, lists, indentation); - dlIndentation(editor, indentation, dlItems); - editor.selection.moveToBookmark(bookmark); - editor.selection.setRng(normalizeRange(editor.selection.getRng())); - editor.nodeChanged(); - isHandled = true; - } - return isHandled; - }; - var indentListSelection = function (editor) { - return selectionIndentation(editor, 'Indent'); - }; - var outdentListSelection = function (editor) { - return selectionIndentation(editor, 'Outdent'); - }; - var flattenListSelection = function (editor) { - return selectionIndentation(editor, 'Flatten'); - }; - - var global$7 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager'); - - var DOM$1 = global$4.DOM; - var createBookmark = function (rng) { - var bookmark = {}; - var setupEndPoint = function (start) { - var offsetNode, container, offset; - container = rng[start ? 'startContainer' : 'endContainer']; - offset = rng[start ? 'startOffset' : 'endOffset']; - if (container.nodeType === 1) { - offsetNode = DOM$1.create('span', { 'data-mce-type': 'bookmark' }); - if (container.hasChildNodes()) { - offset = Math.min(offset, container.childNodes.length - 1); - if (start) { - container.insertBefore(offsetNode, container.childNodes[offset]); - } else { - DOM$1.insertAfter(offsetNode, container.childNodes[offset]); - } - } else { - container.appendChild(offsetNode); - } - container = offsetNode; - offset = 0; - } - bookmark[start ? 'startContainer' : 'endContainer'] = container; - bookmark[start ? 'startOffset' : 'endOffset'] = offset; - }; - setupEndPoint(true); - if (!rng.collapsed) { - setupEndPoint(); - } - return bookmark; - }; - var resolveBookmark = function (bookmark) { - function restoreEndPoint(start) { - var container, offset, node; - var nodeIndex = function (container) { - var node = container.parentNode.firstChild, idx = 0; - while (node) { - if (node === container) { - return idx; - } - if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') { - idx++; - } - node = node.nextSibling; - } - return -1; - }; - container = node = bookmark[start ? 'startContainer' : 'endContainer']; - offset = bookmark[start ? 'startOffset' : 'endOffset']; - if (!container) { - return; - } - if (container.nodeType === 1) { - offset = nodeIndex(container); - container = container.parentNode; - DOM$1.remove(node); - if (!container.hasChildNodes() && DOM$1.isBlock(container)) { - container.appendChild(DOM$1.create('br')); - } - } - bookmark[start ? 'startContainer' : 'endContainer'] = container; - bookmark[start ? 'startOffset' : 'endOffset'] = offset; - } - restoreEndPoint(true); - restoreEndPoint(); - var rng = DOM$1.createRng(); - rng.setStart(bookmark.startContainer, bookmark.startOffset); - if (bookmark.endContainer) { - rng.setEnd(bookmark.endContainer, bookmark.endOffset); - } - return normalizeRange(rng); - }; - - var listToggleActionFromListName = function (listName) { - switch (listName) { - case 'UL': - return 'ToggleUlList'; - case 'OL': - return 'ToggleOlList'; - case 'DL': - return 'ToggleDLList'; - } - }; - - var isCustomList = function (list) { - return /\btox\-/.test(list.className); - }; - var listState = function (editor, listName, activate) { - var nodeChangeHandler = function (e) { - var inList = findUntil(e.parents, isListNode, isTableCellNode).filter(function (list) { - return list.nodeName === listName && !isCustomList(list); - }).isSome(); - activate(inList); - }; - var parents = editor.dom.getParents(editor.selection.getNode()); - nodeChangeHandler({ parents: parents }); - editor.on('NodeChange', nodeChangeHandler); - return function () { - return editor.off('NodeChange', nodeChangeHandler); - }; - }; - - var updateListStyle = function (dom, el, detail) { - var type = detail['list-style-type'] ? detail['list-style-type'] : null; - dom.setStyle(el, 'list-style-type', type); - }; - var setAttribs = function (elm, attrs) { - global$5.each(attrs, function (value, key) { - elm.setAttribute(key, value); - }); - }; - var updateListAttrs = function (dom, el, detail) { - setAttribs(el, detail['list-attributes']); - global$5.each(dom.select('li', el), function (li) { - setAttribs(li, detail['list-item-attributes']); - }); - }; - var updateListWithDetails = function (dom, el, detail) { - updateListStyle(dom, el, detail); - updateListAttrs(dom, el, detail); - }; - var removeStyles = function (dom, element, styles) { - global$5.each(styles, function (style) { - var _a; - return dom.setStyle(element, (_a = {}, _a[style] = '', _a)); - }); - }; - var getEndPointNode = function (editor, rng, start, root) { - var container = rng[start ? 'startContainer' : 'endContainer']; - var offset = rng[start ? 'startOffset' : 'endOffset']; - if (container.nodeType === 1) { - container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container; - } - if (!start && isBr(container.nextSibling)) { - container = container.nextSibling; - } - while (container.parentNode !== root) { - if (isTextBlock(editor, container)) { - return container; - } - if (/^(TD|TH)$/.test(container.parentNode.nodeName)) { - return container; - } - container = container.parentNode; - } - return container; - }; - var getSelectedTextBlocks = function (editor, rng, root) { - var textBlocks = [], dom = editor.dom; - var startNode = getEndPointNode(editor, rng, true, root); - var endNode = getEndPointNode(editor, rng, false, root); - var block; - var siblings = []; - for (var node = startNode; node; node = node.nextSibling) { - siblings.push(node); - if (node === endNode) { - break; - } - } - global$5.each(siblings, function (node) { - if (isTextBlock(editor, node)) { - textBlocks.push(node); - block = null; - return; - } - if (dom.isBlock(node) || isBr(node)) { - if (isBr(node)) { - dom.remove(node); - } - block = null; - return; - } - var nextSibling = node.nextSibling; - if (global$7.isBookmarkNode(node)) { - if (isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) { - block = null; - return; - } - } - if (!block) { - block = dom.create('p'); - node.parentNode.insertBefore(block, node); - textBlocks.push(block); - } - block.appendChild(node); - }); - return textBlocks; - }; - var hasCompatibleStyle = function (dom, sib, detail) { - var sibStyle = dom.getStyle(sib, 'list-style-type'); - var detailStyle = detail ? detail['list-style-type'] : ''; - detailStyle = detailStyle === null ? '' : detailStyle; - return sibStyle === detailStyle; - }; - var applyList = function (editor, listName, detail) { - if (detail === void 0) { - detail = {}; - } - var rng = editor.selection.getRng(); - var listItemName = 'LI'; - var root = getClosestListRootElm(editor, editor.selection.getStart(true)); - var dom = editor.dom; - if (dom.getContentEditable(editor.selection.getNode()) === 'false') { - return; - } - listName = listName.toUpperCase(); - if (listName === 'DL') { - listItemName = 'DT'; - } - var bookmark = createBookmark(rng); - global$5.each(getSelectedTextBlocks(editor, rng, root), function (block) { - var listBlock; - var sibling = block.previousSibling; - if (sibling && isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) { - listBlock = sibling; - block = dom.rename(block, listItemName); - sibling.appendChild(block); - } else { - listBlock = dom.create(listName); - block.parentNode.insertBefore(listBlock, block); - listBlock.appendChild(block); - block = dom.rename(block, listItemName); - } - removeStyles(dom, block, [ - 'margin', - 'margin-right', - 'margin-bottom', - 'margin-left', - 'margin-top', - 'padding', - 'padding-right', - 'padding-bottom', - 'padding-left', - 'padding-top' - ]); - updateListWithDetails(dom, listBlock, detail); - mergeWithAdjacentLists(editor.dom, listBlock); - }); - editor.selection.setRng(resolveBookmark(bookmark)); - }; - var isValidLists = function (list1, list2) { - return list1 && list2 && isListNode(list1) && list1.nodeName === list2.nodeName; - }; - var hasSameListStyle = function (dom, list1, list2) { - var targetStyle = dom.getStyle(list1, 'list-style-type', true); - var style = dom.getStyle(list2, 'list-style-type', true); - return targetStyle === style; - }; - var hasSameClasses = function (elm1, elm2) { - return elm1.className === elm2.className; - }; - var shouldMerge = function (dom, list1, list2) { - return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2); - }; - var mergeWithAdjacentLists = function (dom, listBlock) { - var sibling, node; - sibling = listBlock.nextSibling; - if (shouldMerge(dom, listBlock, sibling)) { - while (node = sibling.firstChild) { - listBlock.appendChild(node); - } - dom.remove(sibling); - } - sibling = listBlock.previousSibling; - if (shouldMerge(dom, listBlock, sibling)) { - while (node = sibling.lastChild) { - listBlock.insertBefore(node, listBlock.firstChild); - } - dom.remove(sibling); - } - }; - var updateList = function (editor, list, listName, detail) { - if (list.nodeName !== listName) { - var newList = editor.dom.rename(list, listName); - updateListWithDetails(editor.dom, newList, detail); - fireListEvent(editor, listToggleActionFromListName(listName), newList); - } else { - updateListWithDetails(editor.dom, list, detail); - fireListEvent(editor, listToggleActionFromListName(listName), list); - } - }; - var toggleMultipleLists = function (editor, parentList, lists, listName, detail) { - if (parentList.nodeName === listName && !hasListStyleDetail(detail)) { - flattenListSelection(editor); - } else { - var bookmark = createBookmark(editor.selection.getRng(true)); - global$5.each([parentList].concat(lists), function (elm) { - updateList(editor, elm, listName, detail); - }); - editor.selection.setRng(resolveBookmark(bookmark)); - } - }; - var hasListStyleDetail = function (detail) { - return 'list-style-type' in detail; - }; - var toggleSingleList = function (editor, parentList, listName, detail) { - if (parentList === editor.getBody()) { - return; - } - if (parentList) { - if (parentList.nodeName === listName && !hasListStyleDetail(detail) && !isCustomList(parentList)) { - flattenListSelection(editor); - } else { - var bookmark = createBookmark(editor.selection.getRng(true)); - updateListWithDetails(editor.dom, parentList, detail); - var newList = editor.dom.rename(parentList, listName); - mergeWithAdjacentLists(editor.dom, newList); - editor.selection.setRng(resolveBookmark(bookmark)); - fireListEvent(editor, listToggleActionFromListName(listName), newList); - } - } else { - applyList(editor, listName, detail); - fireListEvent(editor, listToggleActionFromListName(listName), parentList); - } - }; - var toggleList = function (editor, listName, detail) { - var parentList = getParentList(editor); - var selectedSubLists = getSelectedSubLists(editor); - detail = detail ? detail : {}; - if (parentList && selectedSubLists.length > 0) { - toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail); - } else { - toggleSingleList(editor, parentList, listName, detail); - } - }; - - var DOM$2 = global$4.DOM; - var normalizeList = function (dom, ul) { - var sibling; - var parentNode = ul.parentNode; - if (parentNode.nodeName === 'LI' && parentNode.firstChild === ul) { - sibling = parentNode.previousSibling; - if (sibling && sibling.nodeName === 'LI') { - sibling.appendChild(ul); - if (isEmpty(dom, parentNode)) { - DOM$2.remove(parentNode); - } - } else { - DOM$2.setStyle(parentNode, 'listStyleType', 'none'); - } - } - if (isListNode(parentNode)) { - sibling = parentNode.previousSibling; - if (sibling && sibling.nodeName === 'LI') { - sibling.appendChild(ul); - } - } - }; - var normalizeLists = function (dom, element) { - global$5.each(global$5.grep(dom.select('ol,ul', element)), function (ul) { - normalizeList(dom, ul); - }); - }; - - var findNextCaretContainer = function (editor, rng, isForward, root) { - var node = rng.startContainer; - var offset = rng.startOffset; - if (isTextNode(node) && (isForward ? offset < node.data.length : offset > 0)) { - return node; - } - var nonEmptyBlocks = editor.schema.getNonEmptyElements(); - if (node.nodeType === 1) { - node = global$1.getNode(node, offset); - } - var walker = new global$2(node, root); - if (isForward) { - if (isBogusBr(editor.dom, node)) { - walker.next(); - } - } - while (node = walker[isForward ? 'next' : 'prev2']()) { - if (node.nodeName === 'LI' && !node.hasChildNodes()) { - return node; - } - if (nonEmptyBlocks[node.nodeName]) { - return node; - } - if (isTextNode(node) && node.data.length > 0) { - return node; - } - } - }; - var hasOnlyOneBlockChild = function (dom, elm) { - var childNodes = elm.childNodes; - return childNodes.length === 1 && !isListNode(childNodes[0]) && dom.isBlock(childNodes[0]); - }; - var unwrapSingleBlockChild = function (dom, elm) { - if (hasOnlyOneBlockChild(dom, elm)) { - dom.remove(elm.firstChild, true); - } - }; - var moveChildren = function (dom, fromElm, toElm) { - var node; - var targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm; - unwrapSingleBlockChild(dom, fromElm); - if (!isEmpty(dom, fromElm, true)) { - while (node = fromElm.firstChild) { - targetElm.appendChild(node); - } - } - }; - var mergeLiElements = function (dom, fromElm, toElm) { - var listNode; - var ul = fromElm.parentNode; - if (!isChildOfBody(dom, fromElm) || !isChildOfBody(dom, toElm)) { - return; - } - if (isListNode(toElm.lastChild)) { - listNode = toElm.lastChild; - } - if (ul === toElm.lastChild) { - if (isBr(ul.previousSibling)) { - dom.remove(ul.previousSibling); - } - } - var node = toElm.lastChild; - if (node && isBr(node) && fromElm.hasChildNodes()) { - dom.remove(node); - } - if (isEmpty(dom, toElm, true)) { - dom.$(toElm).empty(); - } - moveChildren(dom, fromElm, toElm); - if (listNode) { - toElm.appendChild(listNode); - } - var contains = contains$1(SugarElement.fromDom(toElm), SugarElement.fromDom(fromElm)); - var nestedLists = contains ? dom.getParents(fromElm, isListNode, toElm) : []; - dom.remove(fromElm); - each(nestedLists, function (list) { - if (isEmpty(dom, list) && list !== dom.getRoot()) { - dom.remove(list); - } - }); - }; - var mergeIntoEmptyLi = function (editor, fromLi, toLi) { - editor.dom.$(toLi).empty(); - mergeLiElements(editor.dom, fromLi, toLi); - editor.selection.setCursorLocation(toLi); - }; - var mergeForward = function (editor, rng, fromLi, toLi) { - var dom = editor.dom; - if (dom.isEmpty(toLi)) { - mergeIntoEmptyLi(editor, fromLi, toLi); - } else { - var bookmark = createBookmark(rng); - mergeLiElements(dom, fromLi, toLi); - editor.selection.setRng(resolveBookmark(bookmark)); - } - }; - var mergeBackward = function (editor, rng, fromLi, toLi) { - var bookmark = createBookmark(rng); - mergeLiElements(editor.dom, fromLi, toLi); - var resolvedBookmark = resolveBookmark(bookmark); - editor.selection.setRng(resolvedBookmark); - }; - var backspaceDeleteFromListToListCaret = function (editor, isForward) { - var dom = editor.dom, selection = editor.selection; - var selectionStartElm = selection.getStart(); - var root = getClosestListRootElm(editor, selectionStartElm); - var li = dom.getParent(selection.getStart(), 'LI', root); - if (li) { - var ul = li.parentNode; - if (ul === editor.getBody() && isEmpty(dom, ul)) { - return true; - } - var rng_1 = normalizeRange(selection.getRng()); - var otherLi_1 = dom.getParent(findNextCaretContainer(editor, rng_1, isForward, root), 'LI', root); - if (otherLi_1 && otherLi_1 !== li) { - editor.undoManager.transact(function () { - if (isForward) { - mergeForward(editor, rng_1, otherLi_1, li); - } else { - if (isFirstChild(li)) { - outdentListSelection(editor); - } else { - mergeBackward(editor, rng_1, li, otherLi_1); - } - } - }); - return true; - } else if (!otherLi_1) { - if (!isForward && rng_1.startOffset === 0 && rng_1.endOffset === 0) { - editor.undoManager.transact(function () { - flattenListSelection(editor); - }); - return true; - } - } - } - return false; - }; - var removeBlock = function (dom, block, root) { - var parentBlock = dom.getParent(block.parentNode, dom.isBlock, root); - dom.remove(block); - if (parentBlock && dom.isEmpty(parentBlock)) { - dom.remove(parentBlock); - } - }; - var backspaceDeleteIntoListCaret = function (editor, isForward) { - var dom = editor.dom; - var selectionStartElm = editor.selection.getStart(); - var root = getClosestListRootElm(editor, selectionStartElm); - var block = dom.getParent(selectionStartElm, dom.isBlock, root); - if (block && dom.isEmpty(block)) { - var rng = normalizeRange(editor.selection.getRng()); - var otherLi_2 = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root); - if (otherLi_2) { - editor.undoManager.transact(function () { - removeBlock(dom, block, root); - mergeWithAdjacentLists(dom, otherLi_2.parentNode); - editor.selection.select(otherLi_2, true); - editor.selection.collapse(isForward); - }); - return true; - } - } - return false; - }; - var backspaceDeleteCaret = function (editor, isForward) { - return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward); - }; - var backspaceDeleteRange = function (editor) { - var selectionStartElm = editor.selection.getStart(); - var root = getClosestListRootElm(editor, selectionStartElm); - var startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root); - if (startListParent || getSelectedListItems(editor).length > 0) { - editor.undoManager.transact(function () { - editor.execCommand('Delete'); - normalizeLists(editor.dom, editor.getBody()); - }); - return true; - } - return false; - }; - var backspaceDelete = function (editor, isForward) { - return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor); - }; - var setup = function (editor) { - editor.on('keydown', function (e) { - if (e.keyCode === global$3.BACKSPACE) { - if (backspaceDelete(editor, false)) { - e.preventDefault(); - } - } else if (e.keyCode === global$3.DELETE) { - if (backspaceDelete(editor, true)) { - e.preventDefault(); - } - } - }); - }; - - var get$1 = function (editor) { - return { - backspaceDelete: function (isForward) { - backspaceDelete(editor, isForward); - } - }; - }; - - var open = function (editor) { - var dom = editor.dom; - var currentList = getParentList(editor); - if (!isOlNode(currentList)) { - return; - } - editor.windowManager.open({ - title: 'List Properties', - body: { - type: 'panel', - items: [{ - type: 'input', - name: 'start', - label: 'Start list at number', - inputMode: 'numeric' - }] - }, - initialData: { start: dom.getAttrib(currentList, 'start') || '1' }, - buttons: [ - { - type: 'cancel', - name: 'cancel', - text: 'Cancel' - }, - { - type: 'submit', - name: 'save', - text: 'Save', - primary: true - } - ], - onSubmit: function (api) { - var data = api.getData(); - editor.undoManager.transact(function () { - dom.setAttrib(getParentList(editor), 'start', data.start === '1' ? '' : data.start); - }); - api.close(); - } - }); - }; - - var queryListCommandState = function (editor, listName) { - return function () { - var parentList = editor.dom.getParent(editor.selection.getStart(), 'UL,OL,DL'); - return parentList && parentList.nodeName === listName; - }; - }; - var register = function (editor) { - editor.on('BeforeExecCommand', function (e) { - var cmd = e.command.toLowerCase(); - if (cmd === 'indent') { - indentListSelection(editor); - } else if (cmd === 'outdent') { - outdentListSelection(editor); - } - }); - editor.addCommand('InsertUnorderedList', function (ui, detail) { - toggleList(editor, 'UL', detail); - }); - editor.addCommand('InsertOrderedList', function (ui, detail) { - toggleList(editor, 'OL', detail); - }); - editor.addCommand('InsertDefinitionList', function (ui, detail) { - toggleList(editor, 'DL', detail); - }); - editor.addCommand('RemoveList', function () { - flattenListSelection(editor); - }); - editor.addCommand('mceListProps', function () { - open(editor); - }); - editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL')); - editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL')); - editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL')); - }; - - var setupTabKey = function (editor) { - editor.on('keydown', function (e) { - if (e.keyCode !== global$3.TAB || global$3.metaKeyPressed(e)) { - return; - } - editor.undoManager.transact(function () { - if (e.shiftKey ? outdentListSelection(editor) : indentListSelection(editor)) { - e.preventDefault(); - } - }); - }); - }; - var setup$1 = function (editor) { - if (shouldIndentOnTab(editor)) { - setupTabKey(editor); - } - setup(editor); - }; - - var register$1 = function (editor) { - var exec = function (command) { - return function () { - return editor.execCommand(command); - }; - }; - if (!editor.hasPlugin('advlist')) { - editor.ui.registry.addToggleButton('numlist', { - icon: 'ordered-list', - active: false, - tooltip: 'Numbered list', - onAction: exec('InsertOrderedList'), - onSetup: function (api) { - return listState(editor, 'OL', api.setActive); - } - }); - editor.ui.registry.addToggleButton('bullist', { - icon: 'unordered-list', - active: false, - tooltip: 'Bullet list', - onAction: exec('InsertUnorderedList'), - onSetup: function (api) { - return listState(editor, 'UL', api.setActive); - } - }); - } - }; - - var register$2 = function (editor) { - var listProperties = { - text: 'List properties...', - icon: 'ordered-list', - onAction: function () { - return open(editor); - }, - onSetup: function (api) { - return listState(editor, 'OL', function (active) { - return api.setDisabled(!active); - }); - } - }; - editor.ui.registry.addMenuItem('listprops', listProperties); - editor.ui.registry.addContextMenu('lists', { - update: function (node) { - var parentList = getParentList(editor, node); - return isOlNode(parentList) ? ['listprops'] : []; - } - }); - }; - - function Plugin () { - global.add('lists', function (editor) { - if (editor.hasPlugin('rtc', true) === false) { - setup$1(editor); - register(editor); - } - register$1(editor); - register$2(editor); - return get$1(editor); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/lists/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/lists/plugin.min.js deleted file mode 100644 index a6a7b66b310796087d71942ab0f2a73398b7897f..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/lists/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var e,n,t,r,o,i,u,a=tinymce.util.Tools.resolve("tinymce.PluginManager"),s=function(){},y=function(e){return function(){return e}},c=function(n){return function(e){return!n(e)}},f=y(!1),d=y(!0),l=function(){return m},m=(e=function(e){return e.isNone()},{fold:function(e,n){return e()},is:f,isSome:f,isNone:d,getOr:t=function(e){return e},getOrThunk:n=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:y(null),getOrUndefined:y(undefined),or:t,orThunk:n,map:l,each:s,bind:l,exists:f,forall:d,filter:l,equals:e,equals_:e,toArray:function(){return[]},toString:y("none()")}),p=function(t){var e=y(t),n=function(){return o},r=function(e){return e(t)},o={fold:function(e,n){return n(t)},is:function(e){return t===e},isSome:d,isNone:f,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:n,orThunk:n,map:function(e){return p(e(t))},each:function(e){e(t)},bind:r,exists:r,forall:r,filter:function(e){return e(t)?o:m},toArray:function(){return[t]},toString:function(){return"some("+t+")"},equals:function(e){return e.is(t)},equals_:function(e,n){return e.fold(f,function(e){return n(t,e)})}};return o},g={some:p,none:l,from:function(e){return null===e||e===undefined?m:p(e)}},v=function(r){return function(e){return t=typeof(n=e),(null===n?"null":"object"==t&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":t)===r;var n,t}},h=function(n){return function(e){return typeof e===n}},S=v("string"),b=v("array"),C=h("boolean"),O=h("function"),N=h("number"),L=Array.prototype.slice,T=Array.prototype.push,D=function(e,n){for(var t=e.length,r=new Array(t),o=0;o=e.childNodes.length?t.data.length:0}:t.previousSibling&&je(t.previousSibling)?{container:t.previousSibling,offset:t.previousSibling.data.length}:t.nextSibling&&je(t.nextSibling)?{container:t.nextSibling,offset:0}:{container:e,offset:n}},un=function(e){var n=e.cloneRange(),t=on(e.startContainer,e.startOffset);n.setStart(t.container,t.offset);var r=on(e.endContainer,e.endOffset);return n.setEnd(r.container,r.offset),n},an=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),sn=function(e,n){var t=n||e.selection.getStart(!0);return e.dom.getParent(t,"OL,UL,DL",dn(e,t))},cn=function(e){var n,t,r,o=sn(e),i=e.selection.getSelectedBlocks();return r=i,(t=o)&&1===r.length&&r[0]===t?(n=o,Fe.grep(n.querySelectorAll("ol,ul,dl"),function(e){return qe(e)})):Fe.grep(i,function(e){return qe(e)&&o!==e})},fn=function(e){var t,n,r,o=e.selection.getSelectedBlocks();return Fe.grep((t=e,n=o,r=Fe.map(n,function(e){var n=t.dom.getParent(e,"li,dd,dt",dn(t,e));return n||e}),an.unique(r)),function(e){return We(e)})},dn=function(e,n){var t=e.dom.getParents(n,"TD,TH");return 0e.length?On:Cn)(t,e,n)},[]),R(r).map(function(e){return e.list}).toArray()},In=function(a,e,s){var n,t=En(e,(n=D(fn(a),le.fromDom),gn(E(n,c(Ln)),E(B(n),c(Ln)),function(e,n){return{start:e,end:n}})));k(t,function(e){var n,t;n=e.entries,t=s,k(w(n,Dn),function(e){return function(e,n){switch(e){case"Indent":n.depth++;break;case"Outdent":n.depth--;break;case"Flatten":n.depth=0}n.dirty=!0}(t,e),0});var r,o,i,u=(r=a,o=e.entries,P(function(e,n){if(0===e.length)return[];for(var t=n(e[0]),r=[],o=[],i=0,u=e.length;i 1) { - return protocolMatches[1] === 'www.' ? 'https://' : protocolMatches[1]; - } else { - return 'https://'; - } - }; - var getUrl = function (pattern, url) { - var protocol = getProtocol(url); - var match = pattern.regex.exec(url); - var newUrl = protocol + pattern.url; - var _loop_1 = function (i) { - newUrl = newUrl.replace('$' + i, function () { - return match[i] ? match[i] : ''; - }); - }; - for (var i = 0; i < match.length; i++) { - _loop_1(i); - } - return newUrl.replace(/\?$/, ''); - }; - var matchPattern = function (url) { - var patterns = urlPatterns.filter(function (pattern) { - return pattern.regex.test(url); - }); - if (patterns.length > 0) { - return global$1.extend({}, patterns[0], { url: getUrl(patterns[0], url) }); - } else { - return null; - } - }; - - var getIframeHtml = function (data) { - var allowFullscreen = data.allowFullscreen ? ' allowFullscreen="1"' : ''; - return ''; - }; - var getFlashHtml = function (data) { - var html = ''; - if (data.poster) { - html += ''; - } - html += ''; - return html; - }; - var getAudioHtml = function (data, audioTemplateCallback) { - if (audioTemplateCallback) { - return audioTemplateCallback(data); - } else { - return ''; - } - }; - var getVideoHtml = function (data, videoTemplateCallback) { - if (videoTemplateCallback) { - return videoTemplateCallback(data); - } else { - return ''; - } - }; - var getScriptHtml = function (data) { - return ''; - }; - var dataToHtml = function (editor, dataIn) { - var data = global$1.extend({}, dataIn); - if (!data.source) { - global$1.extend(data, htmlToData(getScripts(editor), data.embed)); - if (!data.source) { - return ''; - } - } - if (!data.altsource) { - data.altsource = ''; - } - if (!data.poster) { - data.poster = ''; - } - data.source = editor.convertURL(data.source, 'source'); - data.altsource = editor.convertURL(data.altsource, 'source'); - data.sourcemime = guess(data.source); - data.altsourcemime = guess(data.altsource); - data.poster = editor.convertURL(data.poster, 'poster'); - var pattern = matchPattern(data.source); - if (pattern) { - data.source = pattern.url; - data.type = pattern.type; - data.allowFullscreen = pattern.allowFullscreen; - data.width = data.width || String(pattern.w); - data.height = data.height || String(pattern.h); - } - if (data.embed) { - return updateHtml(data.embed, data, true); - } else { - var videoScript = getVideoScriptMatch(getScripts(editor), data.source); - if (videoScript) { - data.type = 'script'; - data.width = String(videoScript.width); - data.height = String(videoScript.height); - } - var audioTemplateCallback = getAudioTemplateCallback(editor); - var videoTemplateCallback = getVideoTemplateCallback(editor); - data.width = data.width || '300'; - data.height = data.height || '150'; - global$1.each(data, function (value, key) { - data[key] = editor.dom.encode('' + value); - }); - if (data.type === 'iframe') { - return getIframeHtml(data); - } else if (data.sourcemime === 'application/x-shockwave-flash') { - return getFlashHtml(data); - } else if (data.sourcemime.indexOf('audio') !== -1) { - return getAudioHtml(data, audioTemplateCallback); - } else if (data.type === 'script') { - return getScriptHtml(data); - } else { - return getVideoHtml(data, videoTemplateCallback); - } - } - }; - - var global$6 = tinymce.util.Tools.resolve('tinymce.util.Promise'); - - var cache = {}; - var embedPromise = function (data, dataToHtml, handler) { - return new global$6(function (res, rej) { - var wrappedResolve = function (response) { - if (response.html) { - cache[data.source] = response; - } - return res({ - url: data.source, - html: response.html ? response.html : dataToHtml(data) - }); - }; - if (cache[data.source]) { - wrappedResolve(cache[data.source]); - } else { - handler({ url: data.source }, wrappedResolve, rej); - } - }); - }; - var defaultPromise = function (data, dataToHtml) { - return new global$6(function (res) { - res({ - html: dataToHtml(data), - url: data.source - }); - }); - }; - var loadedData = function (editor) { - return function (data) { - return dataToHtml(editor, data); - }; - }; - var getEmbedHtml = function (editor, data) { - var embedHandler = getUrlResolver(editor); - return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor)); - }; - var isCached = function (url) { - return cache.hasOwnProperty(url); - }; - - var extractMeta = function (sourceInput, data) { - return get(data, sourceInput).bind(function (mainData) { - return get(mainData, 'meta'); - }); - }; - var getValue = function (data, metaData, sourceInput) { - return function (prop) { - var _a; - var getFromData = function () { - return get(data, prop); - }; - var getFromMetaData = function () { - return get(metaData, prop); - }; - var getNonEmptyValue = function (c) { - return get(c, 'value').bind(function (v) { - return v.length > 0 ? Optional.some(v) : Optional.none(); - }); - }; - var getFromValueFirst = function () { - return getFromData().bind(function (child) { - return isObject(child) ? getNonEmptyValue(child).orThunk(getFromMetaData) : getFromMetaData().orThunk(function () { - return Optional.from(child); - }); - }); - }; - var getFromMetaFirst = function () { - return getFromMetaData().orThunk(function () { - return getFromData().bind(function (child) { - return isObject(child) ? getNonEmptyValue(child) : Optional.from(child); - }); - }); - }; - return _a = {}, _a[prop] = (prop === sourceInput ? getFromValueFirst() : getFromMetaFirst()).getOr(''), _a; - }; - }; - var getDimensions = function (data, metaData) { - var dimensions = {}; - get(data, 'dimensions').each(function (dims) { - each([ - 'width', - 'height' - ], function (prop) { - get(metaData, prop).orThunk(function () { - return get(dims, prop); - }).each(function (value) { - return dimensions[prop] = value; - }); - }); - }); - return dimensions; - }; - var unwrap = function (data, sourceInput) { - var metaData = sourceInput ? extractMeta(sourceInput, data).getOr({}) : {}; - var get = getValue(data, metaData, sourceInput); - return __assign(__assign(__assign(__assign(__assign({}, get('source')), get('altsource')), get('poster')), get('embed')), getDimensions(data, metaData)); - }; - var wrap = function (data) { - var wrapped = __assign(__assign({}, data), { - source: { value: get(data, 'source').getOr('') }, - altsource: { value: get(data, 'altsource').getOr('') }, - poster: { value: get(data, 'poster').getOr('') } - }); - each([ - 'width', - 'height' - ], function (prop) { - get(data, prop).each(function (value) { - var dimensions = wrapped.dimensions || {}; - dimensions[prop] = value; - wrapped.dimensions = dimensions; - }); - }); - return wrapped; - }; - var handleError = function (editor) { - return function (error) { - var errorMessage = error && error.msg ? 'Media embed handler error: ' + error.msg : 'Media embed handler threw unknown error.'; - editor.notificationManager.open({ - type: 'error', - text: errorMessage - }); - }; - }; - var snippetToData = function (editor, embedSnippet) { - return htmlToData(getScripts(editor), embedSnippet); - }; - var isMediaElement = function (element) { - return element.getAttribute('data-mce-object') || element.getAttribute('data-ephox-embed-iri'); - }; - var getEditorData = function (editor) { - var element = editor.selection.getNode(); - var snippet = isMediaElement(element) ? editor.serializer.serialize(element, { selection: true }) : ''; - return __assign({ embed: snippet }, htmlToData(getScripts(editor), snippet)); - }; - var addEmbedHtml = function (api, editor) { - return function (response) { - if (isString(response.url) && response.url.trim().length > 0) { - var html = response.html; - var snippetData = snippetToData(editor, html); - var nuData = __assign(__assign({}, snippetData), { - source: response.url, - embed: html - }); - api.setData(wrap(nuData)); - } - }; - }; - var selectPlaceholder = function (editor, beforeObjects) { - var afterObjects = editor.dom.select('img[data-mce-object]'); - for (var i = 0; i < beforeObjects.length; i++) { - for (var y = afterObjects.length - 1; y >= 0; y--) { - if (beforeObjects[i] === afterObjects[y]) { - afterObjects.splice(y, 1); - } - } - } - editor.selection.select(afterObjects[0]); - }; - var handleInsert = function (editor, html) { - var beforeObjects = editor.dom.select('img[data-mce-object]'); - editor.insertContent(html); - selectPlaceholder(editor, beforeObjects); - editor.nodeChanged(); - }; - var submitForm = function (prevData, newData, editor) { - newData.embed = updateHtml(newData.embed, newData); - if (newData.embed && (prevData.source === newData.source || isCached(newData.source))) { - handleInsert(editor, newData.embed); - } else { - getEmbedHtml(editor, newData).then(function (response) { - handleInsert(editor, response.html); - }).catch(handleError(editor)); - } - }; - var showDialog = function (editor) { - var editorData = getEditorData(editor); - var currentData = Cell(editorData); - var initialData = wrap(editorData); - var handleSource = function (prevData, api) { - var serviceData = unwrap(api.getData(), 'source'); - if (prevData.source !== serviceData.source) { - addEmbedHtml(win, editor)({ - url: serviceData.source, - html: '' - }); - getEmbedHtml(editor, serviceData).then(addEmbedHtml(win, editor)).catch(handleError(editor)); - } - }; - var handleEmbed = function (api) { - var data = unwrap(api.getData()); - var dataFromEmbed = snippetToData(editor, data.embed); - api.setData(wrap(dataFromEmbed)); - }; - var handleUpdate = function (api, sourceInput) { - var data = unwrap(api.getData(), sourceInput); - var embed = dataToHtml(editor, data); - api.setData(wrap(__assign(__assign({}, data), { embed: embed }))); - }; - var mediaInput = [{ - name: 'source', - type: 'urlinput', - filetype: 'media', - label: 'Source' - }]; - var sizeInput = !hasDimensions(editor) ? [] : [{ - type: 'sizeinput', - name: 'dimensions', - label: 'Constrain proportions', - constrain: true - }]; - var generalTab = { - title: 'General', - name: 'general', - items: flatten([ - mediaInput, - sizeInput - ]) - }; - var embedTextarea = { - type: 'textarea', - name: 'embed', - label: 'Paste your embed code below:' - }; - var embedTab = { - title: 'Embed', - items: [embedTextarea] - }; - var advancedFormItems = []; - if (hasAltSource(editor)) { - advancedFormItems.push({ - name: 'altsource', - type: 'urlinput', - filetype: 'media', - label: 'Alternative source URL' - }); - } - if (hasPoster(editor)) { - advancedFormItems.push({ - name: 'poster', - type: 'urlinput', - filetype: 'image', - label: 'Media poster (Image URL)' - }); - } - var advancedTab = { - title: 'Advanced', - name: 'advanced', - items: advancedFormItems - }; - var tabs = [ - generalTab, - embedTab - ]; - if (advancedFormItems.length > 0) { - tabs.push(advancedTab); - } - var body = { - type: 'tabpanel', - tabs: tabs - }; - var win = editor.windowManager.open({ - title: 'Insert/Edit Media', - size: 'normal', - body: body, - buttons: [ - { - type: 'cancel', - name: 'cancel', - text: 'Cancel' - }, - { - type: 'submit', - name: 'save', - text: 'Save', - primary: true - } - ], - onSubmit: function (api) { - var serviceData = unwrap(api.getData()); - submitForm(currentData.get(), serviceData, editor); - api.close(); - }, - onChange: function (api, detail) { - switch (detail.name) { - case 'source': - handleSource(currentData.get(), api); - break; - case 'embed': - handleEmbed(api); - break; - case 'dimensions': - case 'altsource': - case 'poster': - handleUpdate(api, detail.name); - break; - } - currentData.set(unwrap(api.getData())); - }, - initialData: initialData - }); - }; - - var get$1 = function (editor) { - var showDialog$1 = function () { - showDialog(editor); - }; - return { showDialog: showDialog$1 }; - }; - - var register = function (editor) { - var showDialog$1 = function () { - showDialog(editor); - }; - editor.addCommand('mceMedia', showDialog$1); - }; - - var global$7 = tinymce.util.Tools.resolve('tinymce.html.Node'); - - var global$8 = tinymce.util.Tools.resolve('tinymce.Env'); - - var sanitize = function (editor, html) { - if (shouldFilterHtml(editor) === false) { - return html; - } - var writer = global$5(); - var blocked; - global$3({ - validate: false, - allow_conditional_comments: false, - comment: function (text) { - writer.comment(text); - }, - cdata: function (text) { - writer.cdata(text); - }, - text: function (text, raw) { - writer.text(text, raw); - }, - start: function (name, attrs, empty) { - blocked = true; - if (name === 'script' || name === 'noscript' || name === 'svg') { - return; - } - for (var i = attrs.length - 1; i >= 0; i--) { - var attrName = attrs[i].name; - if (attrName.indexOf('on') === 0) { - delete attrs.map[attrName]; - attrs.splice(i, 1); - } - if (attrName === 'style') { - attrs[i].value = editor.dom.serializeStyle(editor.dom.parseStyle(attrs[i].value), name); - } - } - writer.start(name, attrs, empty); - blocked = false; - }, - end: function (name) { - if (blocked) { - return; - } - writer.end(name); - } - }, global$4({})).parse(html); - return writer.getContent(); - }; - - var createPlaceholderNode = function (editor, node) { - var name = node.name; - var placeHolder = new global$7('img', 1); - placeHolder.shortEnded = true; - retainAttributesAndInnerHtml(editor, node, placeHolder); - placeHolder.attr({ - 'width': node.attr('width') || '300', - 'height': node.attr('height') || (name === 'audio' ? '30' : '150'), - 'style': node.attr('style'), - 'src': global$8.transparentSrc, - 'data-mce-object': name, - 'class': 'mce-object mce-object-' + name - }); - return placeHolder; - }; - var createPreviewIframeNode = function (editor, node) { - var name = node.name; - var previewWrapper = new global$7('span', 1); - previewWrapper.attr({ - 'contentEditable': 'false', - 'style': node.attr('style'), - 'data-mce-object': name, - 'class': 'mce-preview-object mce-object-' + name - }); - retainAttributesAndInnerHtml(editor, node, previewWrapper); - var previewNode = new global$7(name, 1); - previewNode.attr({ - src: node.attr('src'), - allowfullscreen: node.attr('allowfullscreen'), - style: node.attr('style'), - class: node.attr('class'), - width: node.attr('width'), - height: node.attr('height'), - frameborder: '0' - }); - var shimNode = new global$7('span', 1); - shimNode.attr('class', 'mce-shim'); - previewWrapper.append(previewNode); - previewWrapper.append(shimNode); - return previewWrapper; - }; - var retainAttributesAndInnerHtml = function (editor, sourceNode, targetNode) { - var attrName; - var attrValue; - var ai; - var attribs = sourceNode.attributes; - ai = attribs.length; - while (ai--) { - attrName = attribs[ai].name; - attrValue = attribs[ai].value; - if (attrName !== 'width' && attrName !== 'height' && attrName !== 'style') { - if (attrName === 'data' || attrName === 'src') { - attrValue = editor.convertURL(attrValue, attrName); - } - targetNode.attr('data-mce-p-' + attrName, attrValue); - } - } - var innerHtml = sourceNode.firstChild && sourceNode.firstChild.value; - if (innerHtml) { - targetNode.attr('data-mce-html', escape(sanitize(editor, innerHtml))); - targetNode.firstChild = null; - } - }; - var isPageEmbedWrapper = function (node) { - var nodeClass = node.attr('class'); - return nodeClass && /\btiny-pageembed\b/.test(nodeClass); - }; - var isWithinEmbedWrapper = function (node) { - while (node = node.parent) { - if (node.attr('data-ephox-embed-iri') || isPageEmbedWrapper(node)) { - return true; - } - } - return false; - }; - var placeHolderConverter = function (editor) { - return function (nodes) { - var i = nodes.length; - var node; - var videoScript; - while (i--) { - node = nodes[i]; - if (!node.parent) { - continue; - } - if (node.parent.attr('data-mce-object')) { - continue; - } - if (node.name === 'script') { - videoScript = getVideoScriptMatch(getScripts(editor), node.attr('src')); - if (!videoScript) { - continue; - } - } - if (videoScript) { - if (videoScript.width) { - node.attr('width', videoScript.width.toString()); - } - if (videoScript.height) { - node.attr('height', videoScript.height.toString()); - } - } - if (node.name === 'iframe' && hasLiveEmbeds(editor) && global$8.ceFalse) { - if (!isWithinEmbedWrapper(node)) { - node.replace(createPreviewIframeNode(editor, node)); - } - } else { - if (!isWithinEmbedWrapper(node)) { - node.replace(createPlaceholderNode(editor, node)); - } - } - } - }; - }; - - var setup = function (editor) { - editor.on('preInit', function () { - var specialElements = editor.schema.getSpecialElements(); - global$1.each('video audio iframe object'.split(' '), function (name) { - specialElements[name] = new RegExp(']*>', 'gi'); - }); - var boolAttrs = editor.schema.getBoolAttrs(); - global$1.each('webkitallowfullscreen mozallowfullscreen allowfullscreen'.split(' '), function (name) { - boolAttrs[name] = {}; - }); - editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', placeHolderConverter(editor)); - editor.serializer.addAttributeFilter('data-mce-object', function (nodes, name) { - var i = nodes.length; - var node; - var realElm; - var ai; - var attribs; - var innerHtml; - var innerNode; - var realElmName; - var className; - while (i--) { - node = nodes[i]; - if (!node.parent) { - continue; - } - realElmName = node.attr(name); - realElm = new global$7(realElmName, 1); - if (realElmName !== 'audio' && realElmName !== 'script') { - className = node.attr('class'); - if (className && className.indexOf('mce-preview-object') !== -1) { - realElm.attr({ - width: node.firstChild.attr('width'), - height: node.firstChild.attr('height') - }); - } else { - realElm.attr({ - width: node.attr('width'), - height: node.attr('height') - }); - } - } - realElm.attr({ style: node.attr('style') }); - attribs = node.attributes; - ai = attribs.length; - while (ai--) { - var attrName = attribs[ai].name; - if (attrName.indexOf('data-mce-p-') === 0) { - realElm.attr(attrName.substr(11), attribs[ai].value); - } - } - if (realElmName === 'script') { - realElm.attr('type', 'text/javascript'); - } - innerHtml = node.attr('data-mce-html'); - if (innerHtml) { - innerNode = new global$7('#text', 3); - innerNode.raw = true; - innerNode.value = sanitize(editor, unescape(innerHtml)); - realElm.append(innerNode); - } - node.replace(realElm); - } - }); - }); - editor.on('SetContent', function () { - editor.$('span.mce-preview-object').each(function (index, elm) { - var $elm = editor.$(elm); - if ($elm.find('span.mce-shim').length === 0) { - $elm.append(''); - } - }); - }); - }; - - var setup$1 = function (editor) { - editor.on('ResolveName', function (e) { - var name; - if (e.target.nodeType === 1 && (name = e.target.getAttribute('data-mce-object'))) { - e.name = name; - } - }); - }; - - var setup$2 = function (editor) { - editor.on('click keyup touchend', function () { - var selectedNode = editor.selection.getNode(); - if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) { - if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) { - selectedNode.setAttribute('data-mce-selected', '2'); - } - } - }); - editor.on('ObjectSelected', function (e) { - var objectType = e.target.getAttribute('data-mce-object'); - if (objectType === 'audio' || objectType === 'script') { - e.preventDefault(); - } - }); - editor.on('ObjectResized', function (e) { - var target = e.target; - var html; - if (target.getAttribute('data-mce-object')) { - html = target.getAttribute('data-mce-html'); - if (html) { - html = unescape(html); - target.setAttribute('data-mce-html', escape(updateHtml(html, { - width: String(e.width), - height: String(e.height) - }))); - } - } - }); - }; - - var stateSelectorAdapter = function (editor, selector) { - return function (buttonApi) { - return editor.selection.selectorChangedWithUnbind(selector.join(','), buttonApi.setActive).unbind; - }; - }; - var register$1 = function (editor) { - editor.ui.registry.addToggleButton('media', { - tooltip: 'Insert/edit media', - icon: 'embed', - onAction: function () { - editor.execCommand('mceMedia'); - }, - onSetup: stateSelectorAdapter(editor, [ - 'img[data-mce-object]', - 'span[data-mce-object]', - 'div[data-ephox-embed-iri]' - ]) - }); - editor.ui.registry.addMenuItem('media', { - icon: 'embed', - text: 'Media...', - onAction: function () { - editor.execCommand('mceMedia'); - } - }); - }; - - function Plugin () { - global.add('media', function (editor) { - register(editor); - register$1(editor); - setup$1(editor); - setup(editor); - setup$2(editor); - return get$1(editor); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/media/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/media/plugin.min.js deleted file mode 100644 index a540a82b34388c9fa5a9475406a328202c711975..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/media/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var e,t,r,n=tinymce.util.Tools.resolve("tinymce.PluginManager"),p=function(){return(p=Object.assign||function(e){for(var t,r=1,n=arguments.length;r"):"application/x-shockwave-flash"===n.sourcemime?(l='',s.poster&&(l+=''),l+=""):-1!==n.sourcemime.indexOf("audio")?(c=n,(u=h)?u(c):'"):"script"===n.type?' '; - var directionality = editor.getBody().dir; - var dirAttr = directionality ? ' dir="' + encode(directionality) + '"' : ''; - var previewHtml = '' + '' + '' + headHtml + '' + '' + editor.getContent() + preventClicksOnLinksScript + '' + ''; - return previewHtml; - }; - - var open = function (editor) { - var content = getPreviewHtml(editor); - var dataApi = editor.windowManager.open({ - title: 'Preview', - size: 'large', - body: { - type: 'panel', - items: [{ - name: 'preview', - type: 'iframe', - sandboxed: true - }] - }, - buttons: [{ - type: 'cancel', - name: 'close', - text: 'Close', - primary: true - }], - initialData: { preview: content } - }); - dataApi.focus('close'); - }; - - var register = function (editor) { - editor.addCommand('mcePreview', function () { - open(editor); - }); - }; - - var register$1 = function (editor) { - editor.ui.registry.addButton('preview', { - icon: 'preview', - tooltip: 'Preview', - onAction: function () { - return editor.execCommand('mcePreview'); - } - }); - editor.ui.registry.addMenuItem('preview', { - icon: 'preview', - text: 'Preview', - onAction: function () { - return editor.execCommand('mcePreview'); - } - }); - }; - - function Plugin () { - global.add('preview', function (editor) { - register(editor); - register$1(editor); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/preview/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/preview/plugin.min.js deleted file mode 100644 index 861aacf59af4bf803f2b1126669594921721fdfa..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/preview/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),f=tinymce.util.Tools.resolve("tinymce.Env"),w=tinymce.util.Tools.resolve("tinymce.util.Tools"),i=function(e){var t=function(t){var n="",i=t.dom.encode,e=t.getParam("content_style","","string");n+='',e&&(n+='");var o=t.getParam("content_css_cors",!1,"boolean")?' crossorigin="anonymous"':"";w.each(t.contentCSS,function(e){n+='"});var r,a,c,s,d,m,l,y=-1===(s=(r=t).getParam("body_id","tinymce","string")).indexOf("=")?s:(c=(a=r).getParam("body_id","","hash"))[a.id]||c,u=-1===(l=(d=t).getParam("body_class","","string")).indexOf("=")?l:(m=d).getParam("body_class","","hash")[m.id]||"",v=' '; - var directionality = editor.getBody().dir; - var dirAttr = directionality ? ' dir="' + encode(directionality) + '"' : ''; - html = '' + '' + '' + '' + contentCssEntries_1 + preventClicksOnLinksScript + '' + '' + html + '' + ''; - } - return replaceTemplateValues(html, getPreviewReplaceValues(editor)); - }; - var open = function (editor, templateList) { - var createTemplates = function () { - if (!templateList || templateList.length === 0) { - var message = editor.translate('No templates defined.'); - editor.notificationManager.open({ - text: message, - type: 'info' - }); - return Optional.none(); - } - return Optional.from(global$1.map(templateList, function (template, index) { - var isUrlTemplate = function (t) { - return t.url !== undefined; - }; - return { - selected: index === 0, - text: template.title, - value: { - url: isUrlTemplate(template) ? Optional.from(template.url) : Optional.none(), - content: !isUrlTemplate(template) ? Optional.from(template.content) : Optional.none(), - description: template.description - } - }; - })); - }; - var createSelectBoxItems = function (templates) { - return map(templates, function (t) { - return { - text: t.text, - value: t.text - }; - }); - }; - var findTemplate = function (templates, templateTitle) { - return find(templates, function (t) { - return t.text === templateTitle; - }); - }; - var loadFailedAlert = function (api) { - editor.windowManager.alert('Could not load the specified template.', function () { - return api.focus('template'); - }); - }; - var getTemplateContent = function (t) { - return new global$4(function (resolve, reject) { - t.value.url.fold(function () { - return resolve(t.value.content.getOr('')); - }, function (url) { - return global$2.send({ - url: url, - success: function (html) { - resolve(html); - }, - error: function (e) { - reject(e); - } - }); - }); - }); - }; - var onChange = function (templates, updateDialog) { - return function (api, change) { - if (change.name === 'template') { - var newTemplateTitle = api.getData().template; - findTemplate(templates, newTemplateTitle).each(function (t) { - api.block('Loading...'); - getTemplateContent(t).then(function (previewHtml) { - updateDialog(api, t, previewHtml); - }).catch(function () { - updateDialog(api, t, ''); - api.disable('save'); - loadFailedAlert(api); - }); - }); - } - }; - }; - var onSubmit = function (templates) { - return function (api) { - var data = api.getData(); - findTemplate(templates, data.template).each(function (t) { - getTemplateContent(t).then(function (previewHtml) { - insertTemplate(editor, false, previewHtml); - api.close(); - }).catch(function () { - api.disable('save'); - loadFailedAlert(api); - }); - }); - }; - }; - var openDialog = function (templates) { - var selectBoxItems = createSelectBoxItems(templates); - var buildDialogSpec = function (bodyItems, initialData) { - return { - title: 'Insert Template', - size: 'large', - body: { - type: 'panel', - items: bodyItems - }, - initialData: initialData, - buttons: [ - { - type: 'cancel', - name: 'cancel', - text: 'Cancel' - }, - { - type: 'submit', - name: 'save', - text: 'Save', - primary: true - } - ], - onSubmit: onSubmit(templates), - onChange: onChange(templates, updateDialog) - }; - }; - var updateDialog = function (dialogApi, template, previewHtml) { - var content = getPreviewContent(editor, previewHtml); - var bodyItems = [ - { - type: 'selectbox', - name: 'template', - label: 'Templates', - items: selectBoxItems - }, - { - type: 'htmlpanel', - html: '

                ' + htmlEscape(template.value.description) + '

                ' - }, - { - label: 'Preview', - type: 'iframe', - name: 'preview', - sandboxed: false - } - ]; - var initialData = { - template: template.text, - preview: content - }; - dialogApi.unblock(); - dialogApi.redial(buildDialogSpec(bodyItems, initialData)); - dialogApi.focus('template'); - }; - var dialogApi = editor.windowManager.open(buildDialogSpec([], { - template: '', - preview: '' - })); - dialogApi.block('Loading...'); - getTemplateContent(templates[0]).then(function (previewHtml) { - updateDialog(dialogApi, templates[0], previewHtml); - }).catch(function () { - updateDialog(dialogApi, templates[0], ''); - dialogApi.disable('save'); - loadFailedAlert(dialogApi); - }); - }; - var optTemplates = createTemplates(); - optTemplates.each(openDialog); - }; - - var showDialog = function (editor) { - return function (templates) { - open(editor, templates); - }; - }; - var register$1 = function (editor) { - editor.ui.registry.addButton('template', { - icon: 'template', - tooltip: 'Insert template', - onAction: createTemplateList(editor, showDialog(editor)) - }); - editor.ui.registry.addMenuItem('template', { - icon: 'template', - text: 'Insert template...', - onAction: createTemplateList(editor, showDialog(editor)) - }); - }; - - function Plugin () { - global.add('template', function (editor) { - register$1(editor); - register(editor); - setup(editor); - }); - } - - Plugin(); - -}()); diff --git a/component/pear/module/tinymce/tinymce/plugins/template/plugin.min.js b/component/pear/module/tinymce/tinymce/plugins/template/plugin.min.js deleted file mode 100644 index d6bda48bdcd77c9a317a9472d245db537689673b..0000000000000000000000000000000000000000 --- a/component/pear/module/tinymce/tinymce/plugins/template/plugin.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - * - * Version: 5.6.2 (2020-12-08) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(){},o=function(e){return function(){return e}};var n,r,a,c=o(!1),u=o(!0),_=tinymce.util.Tools.resolve("tinymce.util.Tools"),s=tinymce.util.Tools.resolve("tinymce.util.XHR"),i=function(e){return e.getParam("template_mdate_classes","mdate")},l=function(e){return e.getParam("template_replace_values")},f=function(e){return e.getParam("template_mdate_format",e.translate("%Y-%m-%d"))},m=function(e,t){if((e=""+e).length":">","&":"&","'":"'"},N=function(e){return e.replace(/["'<>&]/g,function(e){return(A(t=C,n=e)?O.from(t[n]):O.none()).getOr(e);var t,n})},I=function(M,t){var e=function(e){return function(e,t){for(var n=e.length,r=new Array(n),a=0;a")&&(o="",(c=r.getParam("content_style","","string"))&&(o+='"),u=r.getParam("content_css_cors",!1,"boolean")?' crossorigin="anonymous"':"",_.each(r.contentCSS,function(e){o+='"}),i=-1===(g=(p=r).getParam("body_class","","string")).indexOf("=")?g:(d=p).getParam("body_class","","hash")[d.id]||"",l=r.dom.encode,s=' - + \ No newline at end of file diff --git a/login.html b/login.html index a1dc97155810dcc5f6bc21b1469b398428107fc4..6cfc396fd8387d65f15f908972d0567b07dc6739 100644 --- a/login.html +++ b/login.html @@ -1,71 +1,103 @@ - - - - 登录 - - - - - - -
                + + + + + 登录 + + + + + + +