From 8e6d3122d5eae7cd40f0f54c2ec8b5bb108de989 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Thu, 22 Jun 2023 01:05:13 +0800 Subject: [PATCH 01/67] update --- admin/css/admin.css | 61 +- admin/css/admin.dark.css | 0 admin/css/{other => }/login.css | 29 +- admin/css/other/console1.css | 5 - admin/css/other/console2.css | 5 - admin/css/other/department.css | 6 - admin/css/other/error.css | 76 - admin/css/other/person.css | 80 - admin/css/variables.css | 5 + admin/data/card.json | 57 - admin/data/dataMenu.json | 372 -- admin/data/dataTree2.json | 37 - admin/data/dictData.json | 36 - admin/data/dictType.json | 90 - admin/data/dtree.json | 181 - admin/data/loginLog.json | 211 - admin/data/menu.json | 397 +- admin/data/operateLog.json | 211 - admin/data/organization.json | 41 - admin/data/organizationtree.json | 143 - admin/data/power.json | 185 - admin/data/role.json | 42 - admin/data/user.json | 118 - admin/images/act.jpg | Bin 201852 -> 0 bytes admin/images/background.svg | 90 +- admin/images/document.jpg | Bin 303524 -> 0 bytes admin/images/show.png | Bin 56400 -> 0 bytes component/pear/css/module/frame.css | 13 +- component/pear/css/module/layout.css | 8 +- component/pear/css/module/tab.css | 1 + component/pear/css/module/table.css | 112 - component/pear/css/module/treetable.css | 25 - component/pear/css/pear.css | 2 - component/pear/module/admin.js | 514 +- component/pear/module/darkreader.js | 7579 ++++++++++++++++++++++ component/pear/module/drawer.js | 420 -- component/pear/module/frame.js | 135 +- component/pear/module/loading.js | 3577 +++++----- component/pear/module/menu.js | 16 +- component/pear/module/message.js | 15 +- component/pear/module/popover/popover.js | 1 - component/pear/module/tab.js | 359 +- component/pear/module/treetable.js | 253 - component/pear/pear.js | 5 +- config/pear.config.yml | 11 +- index.html | 40 +- login.html | 16 +- view/console/console1.html | 42 +- view/console/console2.html | 585 +- view/demo/index.html | 66 - view/document/area.html | 143 - view/document/button.html | 305 - view/document/card.html | 78 - view/document/core.html | 219 - view/document/count.html | 124 - view/document/drawer.html | 597 -- view/document/drawerFragment.html | 385 -- view/document/dtree.html | 165 - view/document/encrypt.html | 160 - view/document/form.html | 180 - view/document/fullscreen.html | 126 - view/document/icon.html | 2195 ------- view/document/iconPicker.html | 244 - view/document/loading.html | 174 - view/document/menu.html | 115 - view/document/notice.html | 148 - view/document/popover.html | 227 - view/document/popup.html | 128 - view/document/select.html | 218 - view/document/step.html | 256 - view/document/tab.html | 152 - view/document/tabContent.html | 38 - view/document/table.html | 412 -- view/document/tag.html | 265 - view/document/tinymce.html | 93 - view/document/toast.html | 291 - view/document/topBar.html | 279 - view/document/treetable.html | 235 - view/document/watermark.html | 161 - view/echarts/column.html | 47 - view/echarts/line.html | 47 - view/echarts/script/column1.js | 137 - view/echarts/script/column2.js | 73 - view/echarts/script/column3.js | 120 - view/echarts/script/column4.js | 84 - view/echarts/script/line1.js | 236 - view/echarts/script/line2.js | 148 - view/echarts/script/line3.js | 102 - view/echarts/script/line4.js | 167 - view/error/403.html | 21 - view/error/404.html | 21 - view/error/500.html | 21 - view/result/error.html | 79 +- view/result/success.html | 72 +- view/system/deptment.html | 289 - view/system/dict.html | 341 - view/system/log.html | 101 - view/system/operate.html | 107 - view/system/operate/add.html | 109 - view/system/operate/edit.html | 109 - view/system/operate/profile.html | 108 - view/system/person.html | 183 - view/system/power.html | 242 - view/system/profile.html | 108 - view/system/role.html | 226 - view/system/space.html | 27 - view/system/theme.html | 300 - view/system/user.html | 298 - 108 files changed, 10372 insertions(+), 17937 deletions(-) create mode 100644 admin/css/admin.dark.css rename admin/css/{other => }/login.css (81%) delete mode 100644 admin/css/other/department.css delete mode 100644 admin/css/other/error.css delete mode 100644 admin/css/other/person.css create mode 100644 admin/css/variables.css delete mode 100644 admin/data/card.json delete mode 100644 admin/data/dataMenu.json delete mode 100644 admin/data/dataTree2.json delete mode 100644 admin/data/dictData.json delete mode 100644 admin/data/dictType.json delete mode 100644 admin/data/dtree.json delete mode 100644 admin/data/loginLog.json delete mode 100644 admin/data/operateLog.json delete mode 100644 admin/data/organization.json delete mode 100644 admin/data/organizationtree.json delete mode 100644 admin/data/power.json delete mode 100644 admin/data/role.json delete mode 100644 admin/data/user.json delete mode 100644 admin/images/act.jpg delete mode 100644 admin/images/document.jpg delete mode 100644 admin/images/show.png delete mode 100644 component/pear/css/module/table.css delete mode 100644 component/pear/css/module/treetable.css create mode 100644 component/pear/module/darkreader.js delete mode 100644 component/pear/module/drawer.js delete mode 100644 component/pear/module/treetable.js delete mode 100644 view/demo/index.html delete mode 100644 view/document/area.html delete mode 100644 view/document/button.html delete mode 100644 view/document/card.html delete mode 100644 view/document/core.html delete mode 100644 view/document/count.html delete mode 100644 view/document/drawer.html delete mode 100644 view/document/drawerFragment.html delete mode 100644 view/document/dtree.html delete mode 100644 view/document/encrypt.html delete mode 100644 view/document/form.html delete mode 100644 view/document/fullscreen.html delete mode 100644 view/document/icon.html delete mode 100644 view/document/iconPicker.html delete mode 100644 view/document/loading.html delete mode 100644 view/document/menu.html delete mode 100644 view/document/notice.html delete mode 100644 view/document/popover.html delete mode 100644 view/document/popup.html delete mode 100644 view/document/select.html delete mode 100644 view/document/step.html delete mode 100644 view/document/tab.html delete mode 100644 view/document/tabContent.html delete mode 100644 view/document/table.html delete mode 100644 view/document/tag.html delete mode 100644 view/document/tinymce.html delete mode 100644 view/document/toast.html delete mode 100644 view/document/topBar.html delete mode 100644 view/document/treetable.html delete mode 100644 view/document/watermark.html delete mode 100644 view/echarts/column.html delete mode 100644 view/echarts/line.html delete mode 100644 view/echarts/script/column1.js delete mode 100644 view/echarts/script/column2.js delete mode 100644 view/echarts/script/column3.js delete mode 100644 view/echarts/script/column4.js delete mode 100644 view/echarts/script/line1.js delete mode 100644 view/echarts/script/line2.js delete mode 100644 view/echarts/script/line3.js delete mode 100644 view/echarts/script/line4.js delete mode 100644 view/error/403.html delete mode 100644 view/error/404.html delete mode 100644 view/error/500.html delete mode 100644 view/system/deptment.html delete mode 100644 view/system/dict.html delete mode 100644 view/system/log.html delete mode 100644 view/system/operate.html delete mode 100644 view/system/operate/add.html delete mode 100644 view/system/operate/edit.html delete mode 100644 view/system/operate/profile.html delete mode 100644 view/system/person.html delete mode 100644 view/system/power.html delete mode 100644 view/system/profile.html delete mode 100644 view/system/role.html delete mode 100644 view/system/space.html delete mode 100644 view/system/theme.html delete mode 100644 view/system/user.html diff --git a/admin/css/admin.css b/admin/css/admin.css index 60703fe..61b3093 100644 --- a/admin/css/admin.css +++ b/admin/css/admin.css @@ -63,10 +63,6 @@ body, display: none; } -.pear-admin .layui-logo .title { - font-size: 20px; -} - .pear-admin .layui-layout-right .layui-nav-child { border: 1px solid whitesmoke; border-radius: 4px; @@ -92,12 +88,13 @@ body, } .pear-admin .layui-logo { - width: 230px; - height: 59px; - line-height: 59px; - position: relative; + box-sizing: border-box; background-color: #28333E; border-bottom: 1px solid rgba(0, 0, 0, .12); + width: 230px; + height: 60px; + line-height: 60px; + position: relative; } .pear-admin .layui-logo img { @@ -105,10 +102,10 @@ body, height: 34px; } -.pear-admin .layui-logo .title { +.pear-admin .layui-logo .text { font-size: 21px; font-weight: 550; - color: #5FB878; + color: var(--global-primary-color); position: relative; top: 5px; margin-left: 5px; @@ -143,9 +140,15 @@ body, } .pear-admin .layui-body { - left: 230px; bottom: 0px; padding-bottom: 0px; + height: calc(100% - 60px); + overflow-y: auto; + left: 230px; +} + +.pear-admin .layui-body > div { + height: 100%; } .pear-admin .layui-layout-left { @@ -229,18 +232,18 @@ body, } .pear-collapsed-pe { - display: none; - width: 50px; - position: absolute; - z-index: 400000; - bottom: 30px; right: 30px; + bottom: 30px; + z-index: 400000; + position: absolute; background-color: #5FB878 !important; - height: 50px; - line-height: 50px; + 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 { @@ -481,17 +484,17 @@ 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) { diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css new file mode 100644 index 0000000..e69de29 diff --git a/admin/css/other/login.css b/admin/css/login.css similarity index 81% rename from admin/css/other/login.css rename to admin/css/login.css index d4b6304..f23d728 100644 --- a/admin/css/other/login.css +++ b/admin/css/login.css @@ -1,16 +1,16 @@ .layui-form { - width: 320px !important; + width: 360px !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; + font-size: 16px; + width: 100%; + height: 40px; + line-height: 40px; + background-color: #5FB878; + font-size: 14px; } .layui-form-checked[lay-skin=primary] i { @@ -30,8 +30,8 @@ } .layui-input { - height: 44px !important; - line-height: 44px !important; + height: 40px !important; + line-height: 40px !important; padding-left: 15px !important; border-radius: 3px !important; } @@ -72,10 +72,9 @@ } body { + background-size: cover; + background-color: #f0f2f5; background-repeat:no-repeat; - background-color: whitesmoke; - background-size: 100%; - height: 100%; } .code { @@ -88,7 +87,9 @@ body { .codeImage { float: right; - height: 42px; + height: 40px; + border-radius: 4px; + box-sizing: border-box; border: #e6e6e6 1px solid; cursor: pointer; } @@ -97,4 +98,4 @@ body { body{ background-position:center; } -} +} \ No newline at end of file diff --git a/admin/css/other/console1.css b/admin/css/other/console1.css index e175df8..d2e0126 100644 --- a/admin/css/other/console1.css +++ b/admin/css/other/console1.css @@ -20,11 +20,6 @@ font-size: 12px; } -.pear-container { - background-color: whitesmoke; - margin: 10px; -} - .card { width: 100%; height: 160px; diff --git a/admin/css/other/console2.css b/admin/css/other/console2.css index e29ad41..573471f 100644 --- a/admin/css/other/console2.css +++ b/admin/css/other/console2.css @@ -1,8 +1,3 @@ -.pear-container { - background-color: whitesmoke; - margin: 10px; -} - .pear-card { width: 100%; height: 66px; diff --git a/admin/css/other/department.css b/admin/css/other/department.css deleted file mode 100644 index d6898b7..0000000 --- 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 37d4c0e..0000000 --- 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/person.css b/admin/css/other/person.css deleted file mode 100644 index 53c787a..0000000 --- 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/variables.css b/admin/css/variables.css new file mode 100644 index 0000000..0e6db41 --- /dev/null +++ b/admin/css/variables.css @@ -0,0 +1,5 @@ +:root { + + --global-primary-color: #16baaa; + +} \ No newline at end of file diff --git a/admin/data/card.json b/admin/data/card.json deleted file mode 100644 index e238590..0000000 --- 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 7993102..0000000 --- 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 86e8923..0000000 --- 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 db7ae11..0000000 --- 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 3b9ab26..0000000 --- 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 376d9b0..0000000 --- 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 eb39552..0000000 --- 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 3a20b6e..c8691d2 100644 --- a/admin/data/menu.json +++ b/admin/data/menu.json @@ -18,253 +18,6 @@ "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" - }] - }, - { - "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": 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", - "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/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" - } - ] }] }, { @@ -275,7 +28,7 @@ "href": "", "children": [{ "id": "success", - "title": "成功", + "title": "成功页面", "icon": "layui-icon layui-icon-face-smile", "type": 1, "openType": "_iframe", @@ -283,7 +36,7 @@ }, { "id": "failure", - "title": "失败", + "title": "失败页面", "icon": "layui-icon layui-icon-face-cry", "type": 1, "openType": "_iframe", @@ -292,153 +45,35 @@ ] }, { - "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", + "id": "open", + "title": "更多功能", + "icon": "layui-icon layui-icon-auz", "type": 0, "href": "", "children": [{ - "id": 601, - "title": "用户管理", + "id": "a", + "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" + "href": "view/result/success.html" }, - { - "id": 604, - "title": "部门管理", + "id": "b", + "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": "b", + "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", - "type": 0, - "href": "", - "children": [{ - "id": 801, - "title": "表单构建", - "icon": "layui-icon layui-icon-util", - "type": 1, - "openType": "_iframe", - "href": "component/code/index.html" - }] } ] \ No newline at end of file diff --git a/admin/data/operateLog.json b/admin/data/operateLog.json deleted file mode 100644 index 79e5454..0000000 --- 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 ff1626b..0000000 --- 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 262594f..0000000 --- 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 db7ace1..0000000 --- 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 42bd064..0000000 --- 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/user.json b/admin/data/user.json deleted file mode 100644 index 2e927ac..0000000 --- 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/act.jpg b/admin/images/act.jpg deleted file mode 100644 index 46eb3da8faccbd3a2d0f025d2e20e5e281ec20d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201852 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 FT?f?v^ckt$3TP6+m! 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�~k0fP=Zy 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�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 #%%{ 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 z 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 JWg>e1{{!W*gkAsu diff --git a/admin/images/background.svg b/admin/images/background.svg index 2f4b63b..1b153e0 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 GIT binary patch literal 0 HcmV?d00001 literal 303524 zcmb??1z1#VxAq7q3J6F`s(?s$$0!}r9fE*>beF^^NOy~XNDPg13XCv>f=Gv?42^UQ zF~L75zVCa!^PT^kbN&D3f_a$Pv-k6?XRUkPEB5*1`40fGvb>T!;L4RN07c9X;2eha zKuJc%OhZduUg@zM<^uo#iwb}_aCiU!M<)+AEd}X228Kp=F5dfdm|MEL{2Bk7SIjlw z;{eQG0APgk-+cbxy>;W6mAfV8q+QIfha2YR0Kk=Jm@%2n@3GIt*y8s%`eN*+qa}km z=RIcpz~&!gi+_y0JzP96=X}06-_phHVmyNxOE@}sUfk>AxR^14m6NVE=G6f6OABxZ zXaN)e(wOo8*W+(_I_ClaB1ZrKcKqM(S)>C14Iuyk)zshbF}()>h+YE#^#d;EZsxxx zgM;~tWo-=r>=yz6Hw^&*(m?+is0JpAR0b#$!zH$qIb?XZDtt;o9 z00zwdVdG$5`Llk^>lK_E*tpm6u&!Ri$DH6pj5z@d2L}fW`vw8_H3IzGSFo^guHL$a zdzTk*{gLJk5>j(A*L$xL@W=(UlX9wRhA1c*nfUnKJ*wM>cctAHWVI|3NA{?0Q!}#& z%jg(b){fqPASfgvs;K|W%R4AIIW4!YzC-tQUITPOPCl&A#?vPxv;c;=GyN6JRIo8K z|9ftjsb0N?d;JC$9_DkGTfb(8jdcz0CN2*C&8s(l&kS&l$oQ-Ro4tJ2)KD9*N*H_Sa^<7G7AaI$m)6p1=ro6($lwmmXezX z?Hn7wEob#QH6L7XzrKSd1a>|JAi&58>lXGc01z+}97ne|Oy%_%&CWl`146Pg%y&gQ zFOdUffm>8ofyf?|%|^5U>?6_BAMIfzkaxhLsV*ywV z(GSd;`5>tiN6+Vr6i7Gj4e$UDs2C={Lsk7!0(Ix7*l#wz3Uk@u8itfKq3Tbn3Zn{g zRtlv+@G|qX=9<%I=#t$(D~2FP)z`?+jvFiA;6`b|&jAr1QEk@L&a;qHO$3F@bR<$d zOyeAIonZ)a4oLdg6~bZqlrFF*3l*wH?KgK0Sg+e}juwPL2ruTuj=YtQI z84kak1FBzzYVT~LRkO$aZZ=jxCtXQ*i_QTf!lGcR0X}~FYJs^` zkBqa^Q4%s{&H4v%-&}sINn+pV`9?|j34N#L9MCb%fWA7%G2(3gZU?R=gf^!zn+PS^ zPewl)m=gXi*asVujH?)ZI0xV*p!l<=CDcj+s?Nns;e7

V!JiLgrB#7Hy>Z*jlz~!ikWhrX7 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�*c{{E_UA`5#RQ60iG+J*7a29_UVz=D>>PTOHwBv)$LHZdQz58 zE?yyp*TBxFQKu4FjJ?40l1;-;7-suiaX=I<6Y?C9`$n_t&_ zcb?x){L$DiEW{;?Lg{^F%J$Ab50VaY3=tc8i(%$TUP7kX|3WAM?TK@opt4>??6H0f zX367-Nwoo4xY%VYCQc`vw_h)1+46+0b0gaX-Ke0J*!SUM7e#3; zmg)?G0ga|1zAxX=Cr3)a!H$n5hE{Oe`ZI*XBLn%XvaN;q&`rKS%@3ePUcAME5`?Ra z5SZWdy#4(TZ8f$V>V5Y=yA*nD%&$%5p7IKp+LPc~xw#*_mam`ReOzC=+z6EB9x{8V z*g1T_%rnN8TkwOdT(jO^Q3d4JSPBIDUwePFiHg>w@@4 zL~YdQhU@#$sJeE>Q4d!|y|Rm{I=`x1#iwb{ zKYyIyUHa3BLkrHK>xM6UP6{Fv=2C_5euf!2Ur??p`j5e&?0?IsFZYC zzXPF__c@OCA&D=qOzKZ>7ht_ePXCS<2E}h~u6fBN4}8U8sLKvQ_WnWJ zH&fwW&AE7&mj$SfvfU2^?V8!_P}3=9>Qu)YS~tnh`uVt zY@-2&0ntYlGCeja-W&Usvyb?-7YImIU#-IA4=s-7WcRn?cs85f@Nt)e9N$T(YV z=9j6rI{JOk@bO7q_=#2rmER|fzSfq%-PAD&*eY}$5>7K_|r#zJeR&1yzS1>19hg&`6`LEME8={B>vrIc)cI5 zd(XZK`ZB7M*8@O+%t{h0fju!Iz4qvD1gJX?Otnl$M)}Nmc&Vy!O1 zb+uAG$9y&SMBXN(D*am{9%nwEP9_bPwulFnh@Ej91&CSuhr|!)e3P(l>Nd*3>|pHD z1^$$?_(`(3UkZb7c;EBC7m)x1$EXF%5C4|SNE%4? z;v{D}kSn}yT-!rcw;2R1`!~YIO7uuqtO6uHaH@mJa{;2c+wTb+^2ElbKct1Ohi~cS z@TmVU01!d%zDNyJsj68GItqN0NoU?>F|ld%l8~kxVb?C`m5BAY36{o`IGZLz1wgJl z_VSRcTgfAK)nFDZs{#laFTZ^{3*1`b!%ce=uAubPYusD(?%%Z9#`ZTm?cN645!Wv1>~xSf#Noy7O5JAS4tj;)Vg|{ zE!A;CL&&DdQfat(xwwVYI|HZk2MTBzW`d3;ae-bTL~J4YCRlktX4aiHTxCjzqL*Dn zi)xKc@(b<#lRZs93QO1(XE4m2EYNb%4@yi7G9%uTiljP7oHg5)u>K8FR8n#V5myIG$LAPRxql zCCQqLsvd$C&L>Q~AqG6x6rZG*q-HxaV}tZajEkujDo#t5q72L6*~d(>Q_Omj)EwOv zs}(q(5la;Z9YQwK(F%669>=qZ-1i)UbnFz8(PHer`6X@J;w$U*VotR!gSDrb~iho z-7VJN?Y{;N`*iv|_|;3tUoi69mp*Q}PUdef@ueDXF*s70KMQ7NPQhD`)^QF=pT3m{ z)tb}L+Ilqspv_kmQDLgIQ!bz?P%6}@@5I9MTyN071kATw;vWlmm&2;%DqA@os{1t@ zznUEhOlo#*Z;;yK#6yZpvs4!rn=RzT_NGL6F{G^yR9gpD=8Vpajh-^DaHYK4)tX|K z%|?`xqPdh;66lbJic+LA%wgF~wzo#4t!&6`Bt|4>E>vco3(mZ}!nvQ9wPx!$PZv_z zsncYSDkLyZnYonOjBuqGm0C>3p|0OKwpR!Jozzw+i`q~^LUJ1|itCRH}49Wo=jHd-%q zxWniLMX52}O4yLex|(?lLA|bSCgbbv?0+_gO@|o%F7SPOTH5|=dwpAbjtm$!?eguZ z(Dfg0ZVVqbJT7GBRtL%)67kZHVzPjz=Tv6AQ5v65 zh}+XAN^z+1nQ_&nChsog%HC|O!k}g9d-XcCLD1A_k@iUn_-5Mw_b5cLugWn7=bxb z^Ebs$G~(i%RT8&=IWNnq+s6#yg}m%Ko?}&Et!%j}Q>?GaCZ#C_Y}D#e*5o`XPIcN9 z73Zr`s&!R%ZBD0_JQMPxv}!ZZGY=cHECdRbMJP-0a>O^%m7yUnCsHG!dR&JI#3A~$ zgtt+sw%itB#8)X(DY=KjV=}c@t2H)-!W_RbULgdjY)H&fno&Zoq^KottZGcTZIv@k zVM~Dt#mropSiHU>c{56v%ENV>4@`}RYMj4Lq2k;SC~bZ3G%7tg_>{_|N?3{zA~6=8 zrpcQeonl z6_|-ikbI$=8x45oE+ys3d^h4=a?23klMmP`{X#4Un0eM7G{wAR(%j}Yq^uWd&qZ+9 z?p1tgN(|!Rk1dD^001p+Flm)Kl|bsBP@OqfzNwPml5cWvcbr+h z$v%>CZqp1h2w|3)7PXpf2o~F8p()#^$&W&H8f$xzt+e|GaiRN95U}nItO@EiweEY1 zX?@AP&bsvA!u9wD_w#yyFkJf$@9%9rwCGK~T@MBm7{TJmFGHfsQEE+{3{RVN`dIz2h^{Z;TEiyBtW;Xey=j}`M& zS`JZRZMeeOl~JxZTxteih?fPb66CjKA;hUC#N)C|xlg1bI((NLZi6xA8eUwdIWDHO zl&vdmn1e!}n!P)+(@NP%(nmFF_O{S&v*jf!(smvZ&%RS7QSHH za{}`%V=u#j4z*H}(@~$Q$&SNu=G9tlk7;qz`bws^9CF)vVYHG9ZXPY-uLr9&8YB$d z?Icm#s+o>aN)}vgwv^+KMy1p_npGG{Z0msY=T?NN)c~G)25`ie7JOLKp-5(2IgB+b zB&hBo<|M~`33Zp*bp=Rqr(051+R#c=l?4Jp<8&cuaR_y?7TS`9p=ltcNLbXB0y?EY zf)7g(*KBc{%)1%qV@PdmzRQj>^DZSwb*EZULyfHpvXHjal9i;3g#&ObMjUbVzj52I zeTQGGe@9F=w|`!j>2tXC9-h14;62y+zm5Ul>-;?%;Ry)^N+2WxNhAOO7bKIQ0BT9l z4iBfVubki=*7RH90^WOk`(iw^mp?IHYT`+mDa-7G>8H;h8)iIrR@^ud0?RVu(r2^} zp%f6d9;z@`Dx&aIN-9f9T({~SefiHARQrN1ACN&xTL6@(YOyKYSSSLeA8~Dzc8wZ= zOv^OnW{lpQ&6i4|kPGr1uvTCfs== z{{VDHEBLirBIcIRn=Dr{19x7A4qyTK%8wA^mYUegSaR2_0rpGemvC2NpIJ_-@^X@7jJe0wSe1AdJRSH zcN%-&g9(d&nwg`4a!)QXmTcx_d7LwVa0Lc-CB;?OV@sHteI}mYo##^uogP&AkF9D$ z5uw73B2>99wH=0Bb<`l-<=nql&2`FNTcE>K`psrzP$|(8wwf==c-bi~ytdhC2>`9f zU2zSz+ElfvDM>hsI&5lmNfV~J8H*LAJo}_6LAKMmAt(w`iRcoPsY)aO2_qJlEcwml zTQ~B}yx_oj`IZ%2z4$RQeRg&&q)@agkfNGmLs z%2uqBzrx-kWs35$&1WX&2=$=hZJ2FSB~0<(D@t9bKMl9z)EHSKL-5^wr4wyhfdULX z!9<@3R3gYd~v($^(c(pU$#nP?RpGj#(@&_OGa|5IE%k@wy%sKE#tsGM zjtoc1&t^$*WV@Sbk|q`*CF{~>LlD(Al_}Q}8-4h~bZ}l^mYi60BIrUKaV9cm zQ7{{I38qO)I^8L>mRv4|WV8X)lsm~;2v`e9)2IS$BsX!V(*FBgfO}g10A9y_G?p^U z{XZzNzz=J8zfEpU&GohR(_L%^puxAV&C}uZdGKka$RwMO_G_n3_xkiOSnuZR>+oSM zrIbze9d+30+>7bO;oMh? z_)LH4+5KX8n@#&;1Nv-V+qZ_F_lLhE=jtmI-TraU_1FEQ#CQGu@5;IQ>c`qW!hf2d zm}0lY0siNW`86NXz9o3_NBl+y=$t=0*!bli!n^sy_i*92?!=XP5yzL&&>+~|cGP*b zw&StlYS8D5oL@GPKRB-^O58;mrz?Bhe2?)vxCHnMv>pHX}__@Dj{ z8}di|d_(p?ej`u)0{;NL!@R5i0K&WZ;C#u(HcWK8GE>?QRz!y^ECBT$TI>Nk0BvjN z0kOE_8gW{jTC5YPYF3nsBwa+=Bd`nD4#AD#83CxwH*!O5GL7$Zp|q!S)8x4)a4_6x zHMOtuw${`9^g7=Bd|})du;17o*>LLwZFB2zrBY|3Hki3!GhksFrQt=w`1RONIGd_)b4mNbof1X!su^* ztbF=!p%xvrKKvLk9=dI@-0gdT^ROHkUj6O2$L7I%i`z{I`i{GHw%_C!OloE0!{Ou4 zH!vBn$1yo|1}1go9uC40aP4piR+Q6l z;=6`p!>4?6zKr-G@vDTnH!iCr*4}d}=1QGO$+IifWjE|CW#!qJZ2KgDl+wgl<3d`g zA((+h*AqQ%Kgmvy;$~IMwOPrk#6oH?BgackLyQlN#YpmfO(`_sd1`Kh(@=dMNZL~jShNK>c*zjR(@(cR> z-kdInW441$M{#r3!|Ln7gQu@wHpbTVz6}naF}F{i`W-KQNIupuZ|m^e_<67Z2AYil z{W_8fz4{GCoES_S-u(@=?nRBQZ4Jliu;9Ui<%oQf^l$6m^>}>E%UlhdI0qHwj%DGhZZ5!>+K(=SiLmWelI%K_GGl&68zm}3vEOMy z55$=n#$`d2(=y^b%$8bpHq;vJTP#*7)%q0Y>9u-Prlvrf9a>#s_Knhax>kh?q1KiZ z+pVc>xRoJFNsBTZYJ_K@Ol1$olG$nImI+GGuA^3lj>CO65x1l!er(%MDIo=H%xZVHGy0QWm;f6e?1e3lSn4bvo3< z#*+O7eXpK;H#0SJBvR;^TAHlAnr1*O=A6V7f*5>iX@BI~Nh&NVS^$u_axCm3>0&Eo z#?dfpnnww#@apm<)L#>6%{{802Fe9VHc&IvLPEnzB>|)zF9e0Uttu@Ylj-#8btVKV zO(qOFT`rpvJQ{U2pBb1?V8MveScwi4NXc$IXpvZL4M&d4Xl0gAhTB3=l%#OG@4Y4G zWJq<{5+8AIKKsro*PeOB6}aoJEU9id;>l9hwG}BusYH@aHtG23@rEpBpTo>TJ)fNL3Hofr!bW-bMu-h~XwvD0wJa8K~2x zHm2uM>hS#PRX(#xl?JO%beCaFVZ-L*Aj=uAF=V>LTK-n7O`=ueD(uXH>1|~Mg0>%Q zg)=5IxMwePzcEl=$It^AUkg747ml@IJH0lC{_p;Edg*M`DN*!%UaR+p$ z9Ah^l{vLe4@&`oB8a7G8t;l;Zaa+~;t$P+sk5CG-YCCO2|%9^98#{ii)rM_`W zxoxGiw!#`{2E|5P%9O0G+@|TtaYkFk=N)}PZwAM`#|zS%w8+(>;HgDLN-9w&8Q0WU z9@f3A2HFh|TYUR%sPU3wo5?OV>tfe&wWTDR07^&~(47gsm$rt&_u*1(q?6d7ej|JY zT_@uB{%@yybjFdnf%iB(_2RsHjqy!4F!^0-ory7iC9lD1WR)SDegs7&)NlCaI=`VztnfX#4M5-`L&%Ejaq|FKmam6hlflng#AR7`d(4M%O ze+DlNO#ATlYdw*jxQ{C9=QA9^OQ0OI#2BKun8OaDyeA5`?vn*!10U4;=N!fOQ8YQ_ zchoGDq%W3yD7fpB_|UAPa-=N757-e^6Fr@U0w%v6F!??&;x$T^y*@6!XET*+r%tPz zY%U*V3Z7LJF;RLGzBpqRyiM1f)5+%Q=5wRRwfTcioma8Fw!OshE%1$`_>Sf#S7VCS zdsK3w9$R4A<`w(POv||Vx>afFy=9uZDqnr2<2nme)}jX29dJJMPE>-lJekq_g_Y89 zC&ETg1L&E8lNTtln4PZF;#53pMQzG!aZ?&9qZT|_x?IIRr!@tKyk(G!6qc8LLSAsl zt>)Qqq`6aE6vK|=9JEAB<-+5Edijcw&_GSCrhUaxm80EvM~zOa zOw!)|O1UmU*1n$DG$&*2d+m)k!Kz5NHnCA~+Q*jEX0ERA6ql?##Hji4aUuQ8pCkxE z1w%PGs*>PrCB;L%vAvu7Hls7hP4+(TVX0?(&2NO+O&;u2p4bm;nvuA-mF+Awx$Pe3eSpSIWPgK4 zhvzRjmxFV6E%KWX!^}JZQ;%E1n1ZdEIgwROGOrnzSQQ0QpTxeL%T?UR3EC}Xg~h1DkC*6ii}9AUuaYDp0hH20kdhY5?Y*^& zgcEy;Zx6DyDq|Dj!F4j?tT@B2O_;q708_6)dzPbOZWe-_?i04sm2b>#(Abg<#@b%n zf^E81WD+uP6C8XA%RqJ(jt1QW_W2~`^ zhiJ>hc#j!Kq|>I*>U5f`6f8M~sW^6RMy`s?rr=dQ7~!uG_+{YD!N@fT)9Kmsh`dIP z8o4ryN|?f%r?w-gK&IBDp)abL5|Ph!xh%ZVoi?QW%V zi6WAkJms=l2X@sdRbLy_Q-5qjjexDgU|lBlJR!>IV78~Kig>5_M~t!*l?{On2*IEM z=oEz;8*1&wPO*YlqVubA4NZe+eSsnM$$d4TFTWpp=iWm$nWHR|N24Qi-C2~pa8EJly7IQhpaHycrvs!7Pv^44jkF)B4~u*CGsO;R$$ zJ|_{dB1U+}h~i{C&yB6;BlybLX-Yv`i@V9WMpjcZev?uZ?F2VYg&PnTTe$=_*2(3WEXk)$1?; z-Mk9m#bb=Qxw>N|$Qfpqre@~4@c|7}>ALQy@!W70l~kORINT;xs30ZTk08d1_Axx) znxf@uaeZMgPm)VC=wRJXzD0u8l=)&iM1?w`Vxm&gR2*?98ms0XF&-${We$~<{K|7v zTg#lQ=We})-OL={tjDZk1CWTT%b4CR!L*mCsAhHmii#ydBbbW}VKEY$B9BZEXfvtt z;o@hV^miv@KL;$`SZ=A4a#cQ6XNBmM9-B#QGaa1D+aZwxyD^uFkz3`p0KwSOXjIT_~X@4~YUU~?({Vjp5kU)LMIH3KT%gkF z4x)ierA>7-wv?%}W=^Ti)%w0_mix73t+k;}Hy#KJZaf7gKo*-}WUaO8Ko6~Vd1WLz ze3YR(^CMHKc{svymVo0#p>pM2E;~85P*As2;yjh7l(M+(r`lT~3T-#Km9Hm>2QKyB z4@}>Y&)+T+F#Q7u;|xm|5Az9;RXVI%9WN5qt22t8s^L0wj<@k|)#iLnMsylXc@<1A zSu(LTIxMU?HxNOm8_Z77i9dN$H@G*a@= z#Mt36oLh2Qit4e>E9DmQoWyY#EV~)Hby4R1nxrY@GTf)7t6F71ZB{OL!j`w5WuUhs zJ*r9@RAtFSIf2XPF!^cBzFpJv6D?}#nGN97YUL7A+HSvu>t2dnkwe4~P_?Qwwn~(? z9zk3>jDIBP5+p@+E^)^>-y_%Z1#$Wvekp0x6)qgc!j%f85GU?I%8@>)xIu4pkkg5=ODngK8$8({ZK05&texfi zmwdhD&jz=Ja7-ff*+G}_E-9SbM!AWqO`xaZXFP%Y3`R=r z{{V=bN6cJFttzWrdqWJD5lf{qrFe}lGSmoZgqw37SV|0;Ye;%Z(h9URhFWVdqR}AG z;t25&3yTTyi3_(jLy1XATJ3!Z7g0kPYBGv>GVllXESqw~#9%N;u*wWZ)M0Zkdmsx$kRi{!$ggDyLpst|k zY(@OgakaGK+He%DwW+nFf(llJ6sQnvK?D#%7smVqC<2pkpa>(O2XK7{V}~P6x?iE! zu9o-qJ%=9{UtZ5&UGSS4K1lX&fhPe1`K0IGTh+u;mRHmcNud5nz(BL!&?tK zN}6x@CD6nvQQnbHr?)8%3aoP>OcLa!K||9ca}f!MjuvGrR@HcuUh#G$Q?ldm z>9w`H4=z@!iCZj7ksapQl=2kf6AjeIQ^-n^m(nffGt$s5r~crG;2Hm4fqV3RRvw_g3_k7qOmj z>ng;f)saxImg_Zoz;-Q0RJ5h`TTJ%U!;CT>PM%V^fv4RmL0bh)r3ho%Of$U(so@dL zbx$mDQ?+L~7v?IpBE6Ovwpf!o7FFWcizt~!smi;mZ4`7aJubRjDw9*g4dLuo+Mbt8 zu0k{%P{_#R&Pro5P}yYhKPSa8st{W!ZQR94Y^}i4XuZ`VQkNp0qopER=2OTCkr~8f zSyH(70yDe$eyZ!g>|>jyE?q8jflf7->TA-KrNxa(OKqez9$+^vL=k6#R>Y>&GjQfZ zsKbd+r^<~!4Cu^EgEkxON{2EerqKLpQDm~W8Iu}A3q!0t%GA@XEevh5pDl}$?mm*W@8W>@qryN&65)`2W@F{t#;*psQW`=7uS->2k;JU<* z-s>&eknBl#-T2O}hbPW?g{3lPNJvu^+(goxVw&3D!+24|z4zL#j>E6!JgMNXmmSJk zJ#e!R80#?G{{Sen64^uSW%i$JIEGt7{pcd;dYwvG*C2-Km4p_II8O5A2QTJt2^#Zx zpEV|B3xzb9YBV|uTw5P;e<8K{sc@M5+aj}|0mQkL3jv?L`dN=41oZlX!yI*mqkUUa&hPHc(w z3C}quWa)0L`7)n%MQ*zDt|+O+saGmdzQh4wG1?Fy!lgosPNzg-3R4K0&4yc_C=&DIcHUM+AC@5-5ke$*&7$2dLc4y>(ksThecF?>rUN6dy*h-#R!IufL(>BMm$eG)j`9vieaqH$iCnj!$G zIoBxCDy_Vf*)GV3&8Do}c`8?k$ELVQCudSmQI9=%R{O$%E|nlD5~#Ilklblk)ZV2B zN=QCXB0-Xy8+k}oyRkl`0j;$**4NhkuW(P*ZudNKzBXnQ^cw1Zt91wJy|*{(!Gj(< zFf#)LWmXHsnTeR#ri+5GMiHgIS;V-b5YA?wNTgF@kKrGcCG`R3TFMxW9iZf?vfW}F zHe^eEmRz)=(Q4U_s|JTcr%S5U>T(el4L%bpeoU9#HcA_9AnXO!k)+=p1DGgA_x(4fVRs%{;x z!I4zODy(AJ)Y_D6&b^o6aC0s~$XODGGWK7PhYb3tUpA>&nmw*!DiahE`Ie;V54iCK zOsGYOi164`13t*29(I`aX023_R;Vzh+=osV5TQnJ2P4U0qNO(T3k4;B-O$>T&3wB1 ziEvNHH90Yt+3kffmQrSI0gCtuoa!BBEmoTGk1isR^D6)pljWtx+(djVKfRne`=4MtBV_g_5Ei4xz6vJRo>4SIYIrD8%x*Y$0yp?Nfx!i7PW{rAdbU*h(3H%ks*kTKPpq~#*G=5BuSGY z#4^No8A6YMBJOqJqd#*|7Hr$)v(oWVlz=SQurMA+g zt!hdT+5szC)T<>aN=3;kvQm_SR857>*p2Mf&iq}>9de(akgWhRhaVO zDP^bP)16O|*6DAAxP+ypCUtorw$P1A_=jZEt=Sbfj5sGtBWLAU=?Nh1eT|8_KnGK& z+>qE(j@PEqX;~%wN$bs%|^Y*NDrvk@7yEFmcbt0jdAh%AO#8+BUE zwYaaoQ6KuL8zgK8Qgvox%vB7@QC&iy<;l7uM?pM@jB2`BX(wPWVz&>L>x8X)n+v@| zp+8r5%&#+0+dsm;Z{-ndw9Uno;RjQyTL;XmpDI-Iu7=Zos_akFdw|>0NCUi6w9$1| zy^=lA^xoQb_gi=EYugvU!)q5al3p-aMvxXDPRC5#E=lLqDrJY zGc94Tf~9$u{Zi^BPNW_V@b1e7xxw0{O$}>*EmkObgb)ExX-~UCmC*Z?u~X)*!`!qF zKu$ZS!D6zOos9sl$tI^uu_oG9hN_Gm@4B2y(3_i*PW_nNz-xQ&d+Ij%1F-B)=J(^o z+;?6AY(T$VFR%N0@2=XOoES0F;v73b#nc+U7R3}=UL?arNmow;NhWQWk|>DngQMLV*Mw z?~PtODZCju6z1QYpA&qT&a5k#7?TO|shwC-23E?!*@05S6eQt%U0TfMq+onR^)fo< z&Ztlkg{idv0E&xLflx__P!26FeI)yfmiUL5>U=Wcu4jF1HB-!)UKGlpb~*~(nwYUe zvztM(TW(v0$t|EDx1r>K3P8seW~hx)Yqe+*6blimGMH$SsG+p1l(&2CTL+fAgXN_3 z-uGKFFs4@c3;4KW)+(4nrIo%PeBxz36h>L%dQ=QeiE!3m;=C6Il^S&-r!&o8uhk_{ zF(hnE^;wlUQLV8@%vue8NPZ}kv8wzaIB{L$p9`s<$f%7XjGeL2E%7PYknEOubcq*%uVt8S%ps9tl&Nmz!|88Rez4 zsl_%DU1?fUr6-xH+E8zw+@1KVWfwf0$mY&TWL5*m6>I^OxH*hYbK;=dDVSdoPIj{b zjNKuOH#Q_{0%`gcg$-=|)QDvg?rKsf4!5Cp8=vqON3AqEv-Aq@#Rg{P6=a)#p=bkz~0N z6mb6lvTL#!bw$KB5E)WKt@8?$rc~vY>RNF{v;^GBS-!oxk8ZZNe|>)4IqMm>UteCB zJ@4D7wwv3w$FIHn7+&7p{yqMC{I~!XJCF&`>$Ud(06UHhC#~?kbko1i!~4HD9^jZU zRxm1)85Xfy&5f^nxBv$GiycS3wkL&8x=&7{uTH(aHuy#xcGW1fYG+`W!Ru%TG1!nrz>gZf>_liM7ZU*me?o@k8Rz{p}O-1NQL?*)#ZsGy0(Y z{5!}Wg@5#?730hEKEi$)AiK>EGFh^P){$_0+7Y-m(D5>#QRYvC--y#uu3ThmL|rRR zr;wdUR=t#)-6q=*4Y1S9S*K4q^Jdm;T)It?O^CMO^dkF=aB^LoaC|gFWvpDWsj`UI z>2S-{EiXKuW9f#@xGrLDY_$uYZ0p~Tw6S!g^P~%aY#sA|Hw-wY#GE>7@M(Yi+<^V ze)rRZ1-jp}(bv#^j+o?awU5=;sUKgq`t{(#4_o0h{N~*N>2J?&qW<(p2qowd{FzXl8%Sew}O_O{@CWZUPZ#keqG2A5F>Uw((|uo`@|zT6m7 zZo_{+udV#s^8N&d>Bt(Utfd0E%dH_LjBJE{f7On1@!sr*M1Bg-oG9YSON`*Hn0OzeZNP0`|ZJn?c3$``F?D2 zwfb%~zxm%^^QQ(A9ZfceMWek{lS!k}sZwi|6;-Qm)2ZtQC zhY}=DjFzXQ7|~;}TrD!vQz7|siyIKf)^)O)afJrC(>~G)n08OpIgV*Nu_;4QJjcwPlzMb!`ntpx^ z7zhUX=s_Bdzh$kcJ$?8vVJ&S2mnY|8?{BZZ!`v8K`u_k9?=}}r4Y%o~j^tmZ&F|j+ z*Wki*+q((WUgq{Y-rnR9rl)ajwi@tZdp&!8fp3@MTik3$r?tlWU*Arf@L>48eIG~9 zgMIX|xFGHaUtwdeycj(mgK#^3KJK_TJqROBIv)D%wws>7aA7bLuU)k}4{MXC-=@0z zaAADjy`NSMH3V;Ree7-5zK8SQuLctdVo%rdHXTNu_t+3_G~mI7Bpd5(0SD_JD{F1^ z+g1`H*IhqwbvY3+T;KVMU~1`l61n{ST>!rGe-*1t<@zs}YI*Y_}B z7QU9axX|>uJ9IbT!Gq_eh3~J~(_J;wVn&zX!GMB#>3x1i+JAr6I51$ggLCzpjrHz# zu^L~X92j3-&#P~v1-9Sl>7nUwmgeI2+rFF_OcvhvIuWOC#9V8*79VE@3@yE_+vV8X z+-~2)2WR1{C$ZwIln7+kL*RxG;M6 z;VrJ`+UMtOG{0T-({sND7r*ND__};U3G6OT#PtJEFTY)GI%{iaOePlgu=eOKFK(LL z?0;`_1}tYWJj!IZDp_S!&FuNc^!y8gX-_i=GbJ-FbwaOLl-tfgpkeAYIf+$DckxpTQK#^wyqfh;kaKCHdImBxJA<`l3yYRF!0KJPN2eLK3qt7dVq0jK2}a zlJsn;0#l2S>eNDGik!IbIN5bcETt_`+**`u9BFpMH+ZcssNjQ^C`)oJ-MmPv@U9MLln*Dy8=e1y_Zzll}ar$1=A@s znT=0ntSttZ%Mc=Amt;K_nGL#2FsW3S7@iI(WtyEvWVtPLY>d~J_&=9;X8!;VXcYFi zIa+o~Ytkb|c12P|i4FL&+^9VusrA%Qlsfv?CC4R7ewghwYL6X+G;l=Irsj#&=Ie7_ zR%eQoc&c1l5giCZu8`7O0Re+_HUnu&5QozEON&t>Ke=ztOcBohPGas?`I*Dw7Ik3Q zF5zs@!Bxa2pIxX(qPUn0W+odhwq1)^hcyhpQFa(plv?lb!LvxIKoT^beah925oW4y z5V(Igo0RJBBBhsVu!^6A%Tp30E{9MFIvt4XWl4^QRi<1Zk*PA6cr}&L>Jf7-J^D3e ztrZyPEKFg*5bBF#LS-^ke20*$6=@f3;i|>8i@oKy#BVeFA61MwS>}R=jI+lgVPX2- zCFMUE(AOC?w5gXuqUF5#wMichPQz=E_(egWY7=k_5RE8n+4Iwm6H&Wu} zjJot%J$(*GiJPe}D5)`CC?L#jC>q^EsA)=w?U0#mB%#H#Dm;OPDY>3*LsW__VYliu z)U>x~k{Z$$NI%JxrK?IB)SwodsZo{+klNXG0XO53Zd@^6i@r6B;w{fcAfw{EuBGC< zK}X0wR&e*lr!TPS!xdu+WXxj?@PyRkH$E~F^cf~)LmWts-0W337+)&wq~?6+@NG37O-YV(QRvEU<*6%SU@m{PntD~sf`c?p_AHk)8S{D{I=#bTb)k~ zx@d_x^*=v3d0M8%Qt}4?2xUQ_bE=~iAsMG0kRH@l|`wx~d`Y@gm z_(A2Y`$CJto<6_LX#p%{ZXv$AO{YlGmZP&+nxw65I+144S$mltLIPT@Ax(!SsLa_a zeI8@EizX*Zj-^y6sZOS!K~}Y@D?sT|N!?LVp-8s4iU-OQcdAnTTdT zTaiSj9*W6S?h5d0IAxkGUo}&+R({RZUl5?Z9WkWGqDPU<6!{M})Q6g;IZ$6B8*^QC za-_aOOj(@mc;Ejjvi8krQmF)pcXIVo)br_h3?(5V5C6z3(hr3p$2 zbw%Yg-ZHzB7jn*DE}3;v%E}x%1r~KB3avn4UbMvG_?Cf**H@adWY3CHL27ODQS{Cm&1zPOJ6V*60WGzq$L_sGbasUxj2ewX$tgW zGE%vcNLSHlEdfn3pxcP}r&6UB67Q7+A=Q$g($IBSNj5fBi6AHhkPd~EsYz1XB^r_t zqJpI)tv*ezq~s#@P))ryByY9s4b8gP8;~urAmbyULXA#}%t(!fnPIe{As}4&6Xf%_ zLTtAb6ZFvLcMB;N7A;?YAjeoArN zwE0wU_9wtqz!s2AzjV;3it?z7rGA}Z!aTlJDIR2#We|7ggG9d-;?*6qdrqfTq8nfS zPI_8zVg7TGzTAm4x;(0*^{S+HB{L>%K9edV zGUL4ZUvHYSp9#O&2f`ky!*^eL9XYJyn$uO3$Vy}}N1{)tJtVLeg&`6ow;d5FHlPSLA|L!W zGB?C4#a}e}mcqHK;)$O;rRU~OBLZTlGJ27R>R)?m*ds70@6~Cznu$TeIggigN<9*m zr|2xa#XgZY_?9Navm{Jf>P>n5Gnv9(3go(NDl`rg9N;)&B1TH`R;xg`i?jV&Z6pt5ds*+o`1 z^?oWmjd-~DbYxZ+&pbooXPg=Bl1<}^J`2q%rUd=fU>swYblgWJsI)vsGCHwsMa)G? zsZ0*h7W|A!0Kvo)u>C#HU5d))L2iM=UI^5sN^YORESSYy#eMpFGwHEkgCPkx1)Kw7IF=;_kLKd;}#$%B43{1>bmSU;K()+APQsg$lT0`q?DO&~S5ZO}O zZEqnfDblA94e=T|eaq%h;C_B^J{9IRy;J660`n7-wCqol`LUZdI<-M~hZff&$CDh? zoR?IR)k<8}<5g+Yh?QAW--{-@hMjBvxkzG18pknl3pZvS1lH=@KZef^tGNd@$fsuP zvz4Q;!k|*2EyTEEmZLKCM%gY#lQHm{Qh|IpHmfMpl${%Dn+RtpfsKWU(j4_Xf{{S>o z9cLi(TC+DA@|B%4eIot<#dBmW5F!espGq`G6)ooJ73zANjSW?a4~Zydi;dAyjT8K; zs%IKaAHpYwOty30R)*ahin%q7MHR|RAuD-)EQGDc5?O6?AwHD4=!S;*OH}F_m~z17 z+J054Rd^S~Csv%9nB_ZG;kIjf+{!gY)#+uw7+!|Zpz6^YYb8xJ<7--+N@7*R?aXI} zcZkL-$lO}54-XK0Nf!>|oD)xRjEv8mT~tIoDVdpn0f`EwQS11suHz9AIxQ|6slzye zr!Bv}aiTqiYtBT)w3bs{&ZWko@e41-;x7-9WmD=TCbL9ow3+mJoscB3>{d#Ymm6D& z53<$1>UJEEw(%%Z>lqfd_C(JFMxO%8q*feJOgg1J6?n7FNpnb3WewSfmUU}F z;z;GoVMtws&fHgzJZrO_rOJ;hOo|sHxm}Fubu8@Wezk|&l5ss!jQX90PRoYsQCU-R z-$9V9ISwLW)atFtHH<*zD+rH;tK+$oHD%8R?7nkWWpGq8^=2G~a;8sWN|3VJ!ce(Y zQpwWPCY;i#k2sQqDFQ4Y^x#WQ=A7G6;@hm{iZe)!mSDWg^~&3fCBrIPT9n&R1KO5^ zBoda2Rv(ZQr{68cP;KicTaC;QgGOo5a(_K%)^l@_d~sWm11Phlm`};6W#_KyeqAK6P}8c1ZB8%d>N4NskjOah8t_xfz=(Db%$a zFa!=+l^w-~+jKspgv6~#^W`{E^(_zSQiluKb z#E}9dGQzaTZH8V$aw;;BWhE>`N}CG+NKBnoR9jsettsxbxVxrkaczNO!QEYoB{&qP zxDf89;`;3Y^n zXvJ+&$Pq57R;sbfC!|w!DOk5XDbU=A{^2>dlQ|--(B4WmEWM*|I&!0)z zRNf%1*+NqVuC}0%wzS0wQB;noql+|H*<4n}n90a zywCZ`B5YeXKet(sS#7qM!|OReY$?DPQJ~m~T(^0exC#k@v1L#Ob?orzqsWHw0Kv&s z`=7Ftd8YeXA4fPgM>bOD3uAN7P(xC1dH;e50L zcGKhUwi`k+avVxgA+TH-#DslFI0Iu3>vCt76IwG;i&!P$Nl(D(kd!VTo%AlZeXZt( zk_LmBjv+k(FJSu+h8zI-=NA&Rlj_kbq%YkZf}wYW`i|xS%?!v@HrgIpS50oNi6vFRU(wm5TMf~v)T6X9-_Dr1NKRytU~TEME78e~n? zyvNSjI55My|F};ptd@JiUvGbntsO6@H=#=`wqr-<%L3|)pvV>1C@{L+t&5_tjf`_j z2Yi&`^^TW4t*RtBZF&##`o z?Zvbx*&F~_9=B}U3kZI=?XrWk_vU*{t*SUI${KVCdnx#b&rqE{6%Cq^y=DmNAvW}9 zg^y#Cw8y$du5me-USH6+Y|nbopF-t}l-nR3_oWZ_aq;}+_BZN61#J?81hFxeEpkDU zPW=j<6y-Xzf!2tJ$ejCJB7zzFNyTjN{Dx0hBEeUU{={htQ<;V zyKPeVXGf4|A3<|J2s=1K!gf>{gkSRM!sol!4Wx{WWT5z5_Zdz)k5})ZiSRB3$1Fhs)Fk0+cB0 zeh{3x^J%4hM#LkESnNStwzvL>t&GLy zq^qxH#mCHm;oY%7>fb%P@4d6X7nL$pR#R5V1HRlz%U2IZT8+jq!%n5ktRwTvw{j#X zs%mO&$GlxjmE&2(Ow6Ah8QRTdEB+9YYu>f|5u0C`=l$U=D5lYrf$n|HL#OSTltdTEaghPt7cb1Krq3%@L#NK3DU(Dah=9laladh2Kg^pB9OnO3dl2Q4@; zYaVtkz&(pp)|iGjy%>i-EoJ3x-5($XbyzoRWD19R>4Hc%ILDkAu*lbc={8AS(KAwD z#v8AvM=q~yS=ny}c~7XrD3)#RUo}BrFGNaFp^*N;<5XC4!gjt)%=J`Q`r>0>S$@Ca zMT0p?He?E%EZX8B53Z<-4HJCO%xk=EWdS(w$S?rxR8=ALZaJC$zYl1u#TM#N3wD z@bpllE9qsFs<|WnZm<~i30QJ)QAp@E)LE~Y>&o?jM23x=G-d?Qz3fM~=nxID=i}WY zD{oOR8&LiIvyGpb9qHuHEGAAm-(`}CuOAZOoDwK<#es@d!rQ7T!$2((!4O?dQJsen zwP{NFBh?`>BZ;om8dT`BiEBa?wJ&M);KZ<5sm%;yT4hxx*R({j44q~UyKPPT6u_B1 z@v06dMqwR;Fq)Z8XlXh-qG#@kg9Vh%%pm9RK1ghu>`(BN7;Mb>v=N--3WKvEiWkh{7r`x;Pl z0mz)MPBNyI0b$QgZCl1Mo<>44TSUS?F=XNRgoH=$j4>eo`w@Sx11~FM7F4$)79ez~>LsPUx2@}z$jKz)`Xp$( zP-0kZJGRDE3>tvy+yy8N{6jCZWoXe5Vo^e^FxU=srEGHWjknef`@qr6*R@&E(DtDR z!@4?~0|W9C?Ge|dXD+@2?((5YY;Hukx^<;v#0^J1zZs$=rOTkip{2u3j4A0dypN@% zMU3EqLIH?Tw|ZcTvowaQH0rx$wsZOoVfA zN_Bm6|021(6gPM`;E@kDbGnaXe6ZX7#S2XvB?qF(m;BapHDeqiHgK)-yq45@>ETl; z8R^$)@1oHv{3g{Hb3|koCYhN@M=+%93OMs#3KK>V(abOI{r%@jQqw$;gsr5$zuVSg zcDMCf;ky20YzGJq$eK$byy9~>smnCdLf#iqzDR~%{R2;UW}21F*k2~4jFDEZ$4N4j zLIy&+NwFMMgkUl3#)(ir9TGdaltw_I2Z%o@TB5{Ci~t}yuK)Y_s>X`_PuTATYraEu zOOuW4tc4+JJAs@Ul6;LS#V^R8u<}u`7C4$Gl!1k!W2Z7+UaP7)HS%A&_)`UiY=`W0 zNG-G(8yIJ{`>`(2e+Z;8;58TnsbpqnDSiOhwNbHmg zERrLoVARmb$}mp|pYa4Vaw$py3o~{0={u0PW#iCLlg8AtLmwO^;pxwmtWNkmk>)w7>4 z4Q5duWd1{9TsrQIT-CQc5sA6iaXH3)t(Q^A@gdKB9%{a(8Pxp z&EGa_#vW3e!G7WbtIy;|j&232LPbB)Lb5*02S+&B)NOt|Ts;s%D(H`0a=1*Ii(_|2 z6>26#V69L~Q!QxQgs9%MiQ`>ZzFC|&P(ocD|ISq$s60aFCuNNPWKFGB))Ok%?nSj; zx3upc;^&rN?Ug9iv);Y)(9&&sZniCJ38}VFcjW>7dNCE`1qZxzA{5e#zTBJUNcdqO zPY{eUzoqjU0};5!S+9p*T{FV-AD8K}!_XIzzMY_V7u?RmM1qAzWm(x_KYcI+`wPSj+4qg3^v~HVY4FPQfMq0XHA{ zs!!*_(ANp>5xu>c)U`KnJgTRHgEHnl;cB=vu2HH!ORC;ocPCQo%a&jtnwKD46y+39 zO$)4h50O(}S)@jo%_U1yA@G;?UhB#)Eps(580fgjw@0cqSW8z2eg}B%h#^RvnjD{{ zmV-I<83cHcaObqVv-{KC-xu`9zeBiG=4yrXTyqsPF7U1na$c~rvub3aSto%8TFV0h zxp04OViHHg8Po_8ck-ucze9W<4D}2+?b0%hT#e8J!lP~}fjmCb(SgaX=+0E zZ^Rix5B%)C#Bgq5EpuTwe~w%3U&wdeZo(c_yCtJH`Ye#(rrvYrwf?C$uV7sA?Gw4E zXWFiz6@RK_Iwyp0n(IZ0c=10ZUon%oP(N2hfIchGtfhAq!Ht_ZknCM~JoKkUpdD&k zyE10i@E&i(5cVj}@!>V-_)o~qgRwt>|IKu8V9Wm?5p?QcWY32a|L3kXtkXbw#C-{r z*@NG}9&w&dgEDS;>4fhCzjDfTRlD5A1;sh|<3*v9Elus6JaoM98r`nq`LJ&7&~|M< zAx0E}3CyEfaGbscWgwmtZU1T@Gw`lwq2ZVcz=b3q~PZU`<}X4dEL<YP8z@OJ1}42Bg7cPW*ZCK*}%NP!Ih%D0W?slOhVbOk94mIVrJ z>k|(W1D7;~$?G5rO?5LVa6T>T+iVl%$Yk_%#^|4Pp_PK_Mgo3l9{3vX)5#|`C48|v zaXJC#tG|iu)9pjr^h)dK7a6JU$HK^N*Vx95YDf=A0S0aZ$mJAT>cX64Z;6GqB+}#7 z6lR=OP1qC8{c@?l1Scv){Gwjoxoqp&y%f(<$bZ$fcds8p8zlEC+t&4vMYR;#(XXQT zV$6k_Qw{hiOKZ?b@y!<4umI4=v#bh+-|yO4y*s zZU0E(vS=16ttOQ{O*&@pUZqH37;!lG$I)W!h2!ABrbU{%gBTY17f`x*&uO zFKp^Im$ZLm3xImU)ZBwp5?w1Jf&1UcwG=?&QjzddWC$`b#G&5s`+0k8j$A{ocmw{o z0^hLojy_8cl9TXBXWm`(D%}AA9r_tj;5#KW(sEWiDSL_eSAv$bN%je29Ad^T z?R~k%Y!7CM5A`%P#!q#bKUFntH&x~WY=>#=(YOYjAqoMGGQ>?N<9o>3?$<{n$6ESYcu-YG;k#O*u#*%Y~qSaRXTc-0aw;` zpgNnx=Z7G**tHid=R2HFdp#lpT1*H?ErmeBi@5>sfuvHVoe*W|#mgkECVAOdy|kay zpocLsPI97Duvx=dW?qM%=OZn8`Plu~uJ#;>igI+7AeQb=<>(_Ud-N>#Dx>@lpTBaE z2&#r!&QZ7x{a_e$#UK*-X0R3MRlRStLSbiXdi$Wsbae6ctyROS!P{&^1E|W^YN3es zDvrChS}2Eh1e4daeZBh)D+?=y(MoI>beOApKVK`)clS-*dp95hlMNg2O@sUgZDSYz zT*o(5D;p@5p#PB6$!WPI#r+5F+<#F%VR27w2)jR5{CtIuDI1EX>@WxscfAu=|wrez4In!|_~ zlS2a)%y-_zFu>J9NE!iAG$MWjOe)eUP4bICmZmAnbNDi*W-#A?lKblVK#|L_=wRrQ zxNq%@4Rzt-u0@{8eN&OLtX%zTKV73w_a~NyvV*jP))E)^Z3NfMVHAZ;;{Z2}YvFgz z>E)od&#IIiWz#8X3kD8LqCiX|ELlOt1sK+RI(nEArJ|x30cTSsmj~Z&CUNyU7Jv?~ zH1n{gBCtI%z}9uC0fzQvOhY8w(MyU2K=sz5A%lq*aUcw2;ZV?RJsQ0dIgVpdYyAav zYGa#Fpq@pm^>A06|A7P$LcT?yNZ$Of`5b{K2}vu(-Rc1?_S{^j!iMMS|K5q4<3HsV zJmENFE&lBr>MuUxZhibmO0%Z=m?YGlw`y{m(C^H5feT@+A9dm7!;$_ENdZk*_Y%db zu)}Lb(q04$K68(JL1{j^+xh!`Wfecg>cX12ouu4U*X^Hw0GPNn$NTBkJ9%GtNHX`W z$#}Dc^rbagTpSo)-BtlV^Tf|=#c(2WI&kN1n;c$!v9&YZ7^zusTa_|*rTK#L37B${ zQvethYXq@Iy-kwNHjjv?%yKVC=b%@D4$Ia+u#6%?r$Zv6i&v zVm@PAyV1s~gb!|VSuBnSr5vMpDwrj^=NkBv?^$iyuqS^rNt-PZrTFOCayUugsM>Wn zU$>1(Myu7sjI&MiA(7Y)=H`Ai?()4nDiLY!&N4O~H0%vzf+&v%qMNiu{gDNJ% zet8QLWyK)~y!sl&#d|`~U0qM1Z4xhQ@}2wGpq4FHPGNRMF+lHuu&}yTvxIty})&X2t@8@bYm`xO&A8E-q4&yGCR%|zCfB5vFt)arD{ z>5r7OIb@P9-=IEN4S+Gbc8s3hwEZLNtgi|}-MthRprz~Ru=wu%G>_{Pb{mdeXyN^c}A1W?VCYZob5$6S3RD|0RHdmp_3#Ql1s z(y3X^U6^gpUBSv?$dSj95soNL?8G>Goto|db4x*eEYqBa!anoW3=@uhu zWZo8SiODu+vTLOn@7-(BF2)^HO7Y+}%T?{bmMEul{()?*=5U|#t}5pV#0yQ{5L?kl zH?X{}8+_H@{A)ca3I^+JLud;PZqXq$qCvk1ivs+rX<$n=?xnI`P`B0Dj2z>d=tMQp z0#>r}1X=!2jn4%!x0@S`aA!F4q@u9U@IgKYE-xJ7pRxyq1{hqf}@7rfVX-6g% zg~8gTFa7-jvgbAP<-g2h$9ZAHVa;TGt}FSP+xl-k+}+h=Du&(E5cEmXTW6gF$Ko*+ zq@;@D{fbT{9rk|<03?w}3OUi;HYUxl3U;f-*|=tuwmFpiqz(|pPjY7O2XS|6lw{p4 z$~3gn`J5cE?25+!MQiF%8Bf-Dx<)^FU-FGZca_tglSZJ)u5gi5)D1_805=}&Icx1h z-S1x9{O%W~`ct$LwhMGYKd(+|+60^C-{TECIyV(B;i#SulX>)P3BS7nyEu5LP&OOM zK)I%Thf5Vod3}lZbVyrJkmNx)d`9}LVynigrW~kqww3C2o&XS^bkX(K-!XD&EL=5O zA=<~NNG89+%d?6|n@Ty1b8&|AviUQpdu=CK#!R+*)4uy>-ZwB>E!LgdmgC?*f?4iU z8G#AML{Kjy&kT6BO4S_m094yfV7@{tD``cKFQ7K35nZ`P8W9+%0>m4YwN1o{G4>dF zA!kx}HAgfu@*l83-`NPA_~LP>cC1YQNVU``m#OUc!;=wr{~?vnEwIrlw8{ZM<-n)^ zqv(bWoGv0xM}9NZCdFum+fi`2Ir5QDG&RWpyOT=bT-m^yZuTO9ZSdw<$*^>~LZmC> zr;koxR3&ZJ*&SBgY(FZuLxQhQdH)VYZByQA|`{}CD;r>@FF$3{ zNtBsa*-FwMU%WMGjyLHd)kZks5Ef-IxnE$@dghaj(P!vTvcwh3RtHAJ(G3MQfE^5B zOn)aBq4>4bpi!GJ*YhD@%t#SP3_&dbZ?T$)8h`vkjW9&0O6(|`L`D>mFyqI+_A=GK z8Ockhe?Ll}&(=a4Z==$~PpUB1_H8%)mtN7F?Wm@(7Nn9XNF?{~pp2p~a~z%?cJoCR zxev}@arpv(kgc_lDMg1fV^)a;MhMmjyOvp0GA_^v3RO?CR&AmpJNkk4JIeIT+UYhq zXd10YxD!4FopW&y0Tb1)ySan>SNfJ_k(QB_q{^3Hyqkx*wx3UfX!^;;2m(jD{zJMl zKpc49AxML@7KwD_|yOCIhl)HyFvE)h`9Kcx_N_u;uiH_*^G>V5xMeT=9OjvzM;AMplu@vK5tOFiYrIVSjD4z?dSvbtRe`1d% zz0u3GiQXN?6b2@fyj27=&qmJ8ICP7;frg24^WV>FWN8qF1fvxLHB@iwywqrmNZ8L@ z-4Mx{Z)}nR3ErY;R(|slJykH~0ErU+wuT88ce5)k@RZN>quIsV3rQIgbK^aR(^HL`Q z^z%)nsakrjf2vjL{M%2$s6@?=zSYq_PY?pU?*!>zWsBj>*#%#mHqr!VBMcL$1QPi z9kp0)#9>s-@i`r4tS&fGsrhkq)d3$BheYTXiENuWCw#h5RIz>!s51u zr5E)FfC^b0Z71=^Ax?$>hiXNqLJB7xZBh8o!}js*BtK-LH%9_AW35EF-_OiwB+6BE zg%?#T5pcY#7G?d*^T9y_p9R}AVIa5YUmANl zlHkt*ukp5gUvQu-&yumq3eKg?C+KG_oR|dIsy05*63|{FV7kK`Awo#HR^U*dh(^X& zm!P*fbj8E#>h8J-+PZi8W>7SjLSCi6q?QKjdd%_LA-~Sj#UOVyX-gDXS@j=Ff=)uZ zHH(ELNZ$#WfK_FH*rv9$$_d1r36@G?8tKdIP+8sIkqyEPW@eRkMzIaM*wrTqI;CCA zpK~7G$D@5P#<|cL!MkFS=rb_}36N@~Icl}hSFnDSAnxET_^GeGg*WjRxj*@cd=17Y z%>7^~ltX8YFH<2lvFzKaQ{DwpkTVL9|6_)3=fpDx78n&7UEH3x(=d&Nx z=WA6)v3zZkrz~j^o9rBy(bClV`VR7514+h3EyJj>0{Mg(B@=-~nE_ z*t-?Op#4H-@slb`fFetuc9T;uzOGYY?rAgf!V5h!#-2Z|zrrhwJJm2wsE}>O7t<@{ z+Lkm=#zY}qNr~t%-3UVJq)RCX3}h`Ds`-3mGy2w!znTSSS1EQ|y`>ski>%mMOGm3J zRGuQ4Qlczvpo}7A>=c^00@_Ol4VA3|ld8PPFajU9(1H$J*d3I1zHswXVQUs?W{yXC zZUFO1Sr~DRyrkkI+;Dxr%B|R7CapM1U^2Ge;^Xp>lx4eYWI3>7VWBj3pkDDIxZ9+m?Iv|2hi-^XkT zsX#xpceTd!kbnP&6oxTT?4DM&DkxQ;rIY%r8e+fdpI(|)xo?Fr2C@VVr{K%FWveT= zF_X_yTRy#9aTANgd9`tHz*lc1Ib9^ao($Typ3n=;DFWXnDG4e54;uq8ibk1eCWO%F zC^284Ilk9Q19`DmgqO0=r>KU0dP7g>jD+Nk=)*)(L<&I*k%W8Q*BgglpThcsh0AMR zQqilo zki^1Uu-V3gK@0>{h2j%@vji}K2RKX%KoKL8t#0oJ`E4bI83^I2?><)MfPiD!` zZYbPuAEU)9LNX1+2O4U9=!iZ+tdZ7~FZ%#wG8WvSPb|9C9(E!Ew7KT_|uD$7ze4X>GbH9-Voq9q@ zHh;WK!Cm@Co?hjqovtujcbkcHrFf1ya8hekE=5m3=Bm;{?9mr250%BFr|)th#K=jp z;pqYh{w6eoGEkLhK`}U^DLyU9EuEI|fnZ93Q&iS`L<)4|YiiVE=(x)mmn6tZq@QY3 zTN82}yC(ZqwrZZbTnlH}yWn}u#2K)lmrvULu5>EoQR+sn6hbY#$&e=^TX@CEx!rH@ z5XxoO!8|_ctXsm!$-u{s7=LE^K$lwPG3qFrP9h&TqQ>5EWi#TgBtFHY&Cf-N($s#O zlpjx!vB2e)QBJdKIw+P&Yz#grf;QDpDEbN+>F%IkaJJmGwo*Cg$6p^vZ|7d*`90nR z{CbY)S$v8!S>JDNT9*#|MB0rgBMRz{Yea|5nGGDbXuC8zt)C)gB9BE2nPJBRga1gtHFhH`6;hOIG*)WKioEw^Ww7PAk#!LNp7RZFZ~v+OA>i_l~H05?XKg^+Vi1t4tj=2%-Li|v27ZwmvPg1 zDcs99p}{^aO@}FS-M(m)wAlbiliM# z%Pcr))J#R1i!x&RkMvO7p{pnU(WM1c@r+vXACiaq;xW^8+W?Pc<;QO>kMrth=V#v= z?}o3aUsmBdybE?HAn{*v&L0F9Eqsr}muNz3{?dr(5A)!@8 zc<~O$XBHk3_7MD0)PfKq7?qza&|yA;Dq|5NslH7K#XT4A>2^?e%IMG&^|Yd4XWO$RF?dVr>7r+NL`}>w%S?x-^>g{9RuK4eANMJGmm* zzTOa;J6+N)TLFt5*DXF4;8LAAJ^Y81fa54gD*oaZXps`w)j7ddI~5#0>*fN3d?d(?Z>~0& zI!6xIO}Wbv zpY#$t3vM*!v9Ra^oq=kLKd!s-%%CzvwJk^YT_!w}{~<};9zJ<@tBUYiVmwpf^{kt<`zN$h z!OIazPp9H_V@JG~C}pRX6+~9-E#CjMLr%dXp;j7hh5BQ6OE3t$6{v>e*ctn{C!#X~HgyXn?U!U@W!7tu(VHmZ8 z!G%YCG}2uwt9a@yr-vXO$UjSk>eK6uV}G37K%*0X6Qh3Pe7v5G-o0a|>jy+V8NxSQ zGDU}Vbq4+ugd>^>LRYAAj~_u!aj#Ctf${ge%Sp=${l=vC2$o*54&euAN)k4un zS3;N06Zs6XO*iIA9~ie`~C^Pp54N0UYA|PCWWA+T6pJ+odpc0yqD^@K7lQf0Vk}t^bf5!Z0yca~%cRrjrO3=DlZEoIG%D zTyA`y2y!=i@E!}6geY%Y_UFnn5x?ES)r+|l>5gOIKVhc2=|lg(Zb@9W+S-x;gyyf`#<>H+JzV5Z-VNK(Yn;idfU~1eZnn*@bI3y$x1NQ9+z+C*K0yRu;H3a zgx#CD^!sMhOS0V&KdN{+zVim*lwLg4uFVI(b16jsu_hm;+6zB9gNo%I{?FmNdF7}e zZ6k$kciy7Bf{@O7Lms)l2km8MOtkOqGkT!Vdmu(2ECak0?{(&X6sPL;3oe7pylDqL z1v}DVzrPUZX2og7?W0SSHl1Kq_!WLI@o7|}-EZH=^9ZC8wcXc>jc1fLw4CiGEqphh zVK-OCf(=Y3b+&CC&rvkCRq{<|*vmC?Jl6S|zG72pGM_S0N{m*vI%KMZ?QmOzm*>!v zUV1IWuEC-8ZE$$etqLaGgeePQE>ec=i#j9+CewxRjCp{i|8}b$+nD* zkO7ky$)%oO@s7RI9>|hUx$Yn{=wB{GRxTR(@x<0YNx%E|{antJiEzQVU>fXOc0>45 zuF63QiNzIR&U_lQg~UrfFC;4!i9q0(aQX^shjTpLG25)D^>XEs7(zaql4A86yf^M( zd}!L@6+vqa6n|iOujg(<7X2|gIDE*&vQo;&@~au3fZ{(Sf6B6*Zcz!?66Mg>Fq};R z1ugb07qW%ipoV$Wx#Ai;juX0U#8qa+67`>p?Bu{`+=4V6l_1)ftWuHInkpWB?6KWB zN330jVQ%Fbfw0nQIit+qwx2nXo9jY<)W;Ju^a(s^=RN>h+eo`DQ2bZm1vzrC#oTnT zom+ysZKMO>+qfFo+Kzb-pMApc(%#c3O$Fr}yP$z*S;=7KQqGV0L2dyev|YtiAx`_^ zFdB{k4#4H{U#@fMS5~`rIRiUCRZ?moHBdGu%N+zXK2gqkN)V>uk+&%=1HPS=-L+IQ z)WU4Or8WLNVf*MYz4Y#n`Y#Tb61c`V1Hd686d0>l2cFSn5Ypgiqe?xxEa8=q=}@j8 z|D!psN9KZNxz2At*jh+H(ezzB?2vFg`hLPCdrp&4R{~n7sR_+;YxP2)TlWq)&HaxTCm}&;qObSVnT$t?V0o@zO}R`+&6*VxD##TP1G?J)Vi= z*T=hsz4yf0-%T9yNV04p{fX?b=M&M8!%Lc!8}yKqa2D--NtVZ3Mz4(ZN@YhX*F)l0 zh;k6tjD;Un}yAYshoQ0!3THx zz4PkZ!KNFSn}UhdI*T^B#_3#~}L^N__uCXRa~&RZV(LC^7t zRx2y9j@F3J}&%nYs?6J7Fkq6!@OgFQa_~=_$@iqV6Li%Z67h0oIV=ro$NNO^M z?x4XsCZ|9&e<)&Cu1mlFvh7ImH|%TdC^CggibLVp#@Mq*V8Ws|T0Tms zcmTva?LesHjBvfAT=yVF*wh_s{icN)=vkCM3`eFvsbq#@d5WX%Md7XOe3qyEsjO|K zu3f?+M=uZWyk3^J!?%Q`!^U0p-iBnGiyHfL*^)huE5M)kG1Xk7mxWo+oJ(}MoF6$B zB#sl*V+{faITk8+#}u_X$?J8*wPWOG;~G=ZLAP$oFm~43 zcfx~kK^Vl?B74-*n$qHM6()IzOiUA*YFXUbSQ@Da>=vbhXz_ov#lY=o0p;`c{PEgF zf>Ex6l0-IR14K)FxHEr)oTUksf2zoS&Y8m8wuu}PxbK3DkG%rs-!-f zlZV@|rRgIx3o3C>Xc(&a=(Ch6xI)(O(@?h^&v4ZVoQX#CWVI^(&28v59@EYh>GO~C z>b(;x*BwaFu&ctF12|rZ{Uz*E>uL`ajii~H1onp=jN%-*(^Zb>QgrVHNou~`I|$Jf~mrWJGlRQOr@ zPF6OS%xJ*gAU(Q*n`j3YiuFkEwiHAv;C&ciTQzFKENBMNbW*}R&}(%l>u9V)QxjJ; z4v$;qBy@>y-k8$WRgMsVk^X3&snm5;0^CV+q&adibpxp?im_0gi7a8vPp9ic}m~btIX%y6vd_p)~z_db{Xsw`rxRq zoC9p>PDQlhmc`hZ+Hjb(!#w_hQcICmI76>*aD*-G#gk6x(DTh7x7imPw!ye`>a*0? z2J->^RFcue-{owLhCl1&zrE9D+2c0VE>o#e`N6MdUp#i*E>dBI&b;Xf1q|LR6Kz$Z z1QSW>L=(CZpau!fy6ei9_Xiw2GVPq~v*07t?z-q}vB#Cq8rKmO#P#@Pb8ZISS{>0^ zTm4CU(RvGta-T%$z;%g9)! zt{cUJCg%O0DyE^SK4UEG4C@?ajc2`Qq2h^@UC$cj--?5xwPEMam{YoZ_-_UlFcYlM zFUsgj)P7pxTJ&etlmpXZGpsk;gUj&yL44ZjS2*AJZiq6ScFI#U2u1l;4H>xF!)ef( zIT;pDR@9TmtM&*vakx|Po+FGFu}G2PzPZf~y?}zE$XbSkhkvCMct5k%C+OM;F%F!2 zG>Y@p=vxLDr;4oO=(4wVb04&RA=0|ydAC^UCBLoG+gvFwh)bu|ugPY4q9FP3;h0lw zhdtKH`rX!UN3jmXj&(h21y`|J(X9<65+QJzv9c_ql^aFakV*U_qL>*q)g2p{T&9!B z4Jt+EaqH|waau242+F_+aFUC>Qm5TkVZ0%rKNom>5$CDvWa;qA{Td&x@nH%{Iu5Hs zzBamQ!N*$DzJ5nyMviw2kcQ!?jYzwiiq%Vf{_1kpX840kiqk%MUgy%tQ5@(dY+MOy zDp_GF$~4s-+9~FcMgyWzZL7#^I^6&|R=TVM`Id7v(glfI!N*BW-3%_M9~n?GRz8`f zv+}tCsiKU<;}SO;Hw$yjn0)^*ky-mSJ5c}HIC_%hZv@$AlNfZ~$AYdx8V*;&zy4FK z(kXcajbt$jl3{4tG;8MLWlzl@aP(^Dap$p+^Vsk!)%HQ{Xu+&wVxtdhvSrxRK)9S; z-3md|r-Xnq#y{8r46FQfcqR^>|HyFAS`HL;_`t$9D_=k1zY z2V5aI7c)ayQU+Yc8&lST0Taa^6+-{Uqq$|+0o?u9?|KR3?D=5a;T*Ur(1w1CVO&@j zknnQ-Kl;-vY{30%+s0!3ROG&}=NF2b-yZ>xZFD4iky6PJC*tp}E7K%J>>~b$Tx^pW zW6vRlKYTL7bTxGn#LgGB^ou@b8AB?LIM7J48XQ=d5eWMk3vU4OE!8&RRPsPxv8i*S z2by{u*o9<32?Lz58-U^w;J7&+VX%1l{yket1kW9VO8BPy;EI+m&@&%nj$1~*LUq(* zLP>M}HT>{s30w5oE+tWP#*^qjq$+p+i=7}>3%TDULm_p77=Kafu&@aUrP$;;mOJxQ zTEL6f&$3OAXVcqMt;;SRd&l6;{;4Z(i;XL~b3_B$`7Nl6K;%Cp+VN*|4DgfH`d%j% zc`m01ddL<|VW6uwWAutlz}S7nEQGug=-Hmk!o|h7@sPqPJ+F`!y5oSCQ035*{OTrM zPvb}B`)IWi#@tsuYl{Mwlc$OmCt&zMwMYO#ll|opbfQidVrC(l5Fqd&Ht(sc>1X?( zZ*B;!rfMuz{P&};Kk{al4*dka>%OV0S{Z#qkNRymEQmrtXIA7Yo9+`9_?K$YVu~O# zxZPS{DK=^~eYC8jPAm-yU_BbHmf%U>7L`KA-=n%hFrimRj1Q4tKFJ=?y`hn3bzV01 zD2sAeKb$8>UVIVR{prk!A;Yu$TqAhp)#CII(JoEaST4Kxa<{ThF~n`9rqbp*`25=v z?Bb?o(pURs2&>QSJd$Kk7Z{;uLdl7#Rq4JlU%Xjf_8!0FowlxFrLbykjsvt8Y-pkn zPa06db!L~)o)Vad(AdnEYCYjB)U9aKs+im6rzwYYTsaFp;ZMoRI2KDW)|p35;Yt|K zZt1LKL}*E7LJ8mF>K8_5I=U?@<4QDFD}p$*<|7~}H5$IugW=*u)nYX%#Ay|_49JUr zAN^1K?wbEY8r?SAI>xdPTQ?nDI__R@@^_feGV4bA_t@nTf-GgW|A}j^rr?$eA#!BN z2-1y`(igm_AsAoz3g~3z{cgtx%g+X;Lr>R7a?JC()E{9uiv-+9Xg`^Le59_9`qEVU`_Hu> z{s#v0P~jKbvjx5<3<~iOe-d(dFkN={%V(a709i_dV0QBzqZgk#c?FOSEy2#{9OBdleqRy&Ye3?UHW z9Iqem{p)*E+<7g2#O?RarOp^3L>?dU8t-?zb3vNm>c2aGAx7m5Xq4c}VNMRsk9XZ3 zSBP%Hu(|bfu%u9n3z+zT2`b2on0(@BM>9)-5U4j<>ix)`7lWkRLs$()+qs(6))uU7VjD^4K7ckXC8;9l*Qm(UUv`S!85tB{MQH*E9frvBf(tG#OPS;g$OOU;T?P2b9T z*qc{L|JM%6{GXVs@m?^v58GzvU&0m-t(1fxa=#&zW|#kv_~xHLORe?) z!v|(kB|06huKb6@Kc`-(OfLNRF_IW3I29r4E*oD5-1Az;HwgI}@IXAN#MXgWxnBj}Bw)cLAwSxiz=)`rP_m_uU{rIW^aU*EN>{+nxUJPQ2#r{~_wU_0YAzY)UC|b(P8!w4SE@|$ z<*ePi8yRq_+}-#ytf2qmUfX^cYVaacoF6wm{xXMUr)_msw`Kl3BKFPhjnK;dS?kZ~ z>Fr;vW)dtTN&7`cF0)*+3QNxiuIbcpVKQ!UtONvmh-=XNV|(Gk1d#EFzeZ=_In1@a z#?F;yLFh{{asHLdUwm`p&EF3+4xXvZ%wf^K;Zp?Tl$P*Ujp9mewm#2vIo5hhIy?2? zOHGo7*5TZeda6Cb@_xn!f8m^iu5G6===sk!hqZg}2pv1ghZTh^Zr9W#V2%h!0z?^9Cxz{|ly7w8Pzf?s@2tnYH`O)zPCy-sz9HRi?2ty|J&W zT;6TnxWUgnZ?B=UUUC%CRX*4-dM3jl$Y<{U%Rb>+(Lzz3E7HCj|2PbtXVZ#yu*~=j zP@{3OXOt`JHxwPtQJLM^q;(3b>AUT&Bgjgi5q%xT`Z&- z@f#nVepuZn^ya@WhEh}MN(7EF{?;jziC7z$2e5U35mjne#&QJI35j+I8-z94T0TNO zRkM(C#upc`1@UT2WNZdiqNX=D5rB_r@?=3^kU*>j*95c@><@N=cRtLBwDa^uk;A{- z$^u>fHU3LDG;yqwLj-{dYYQ1UG?ZdGd{Re0WoJ>!qZDdAmM0Z&87(PAzbLLzmUoUN zVd68Taqn*>tDl>}3y8YF(va_xa>+ibjaW}XU4suQU%v{z^eK-S0`7Ls{YN+O>Fk=? z=SMCIsnNa)mN8fSl^v?FpHnMCWMxl;8PM^!IrtLgm(E2_gT&3tMBKUXeW})whMFbf zybPyQgSAeL8?fy3$G^n4zobkG6Ml?M1+~#1(L0Jy$Ibe89kK|V$2HZBcXq$~yadggccJNM_D7d>Xs|F(L-U&f(uliD zOh~j&tWB{3hGV7YY|=-!&eWUOKEW?OQ1KFWW2~6dJCVjklucf-NT_vaJTUWNm9t*H zI)63?m@`>j*VkAV_^I02aFgE9D2?f*x88prwA>yW*z4hGxwb1i@Z02v zLfMNzFGCxna-#yx*xt&aj5KvaZ;`a$kSlX~4+B=}Ze9M{pUtJOxt-jR zpy~VkLjA7igTA|WjST%{EpmN5Dj3HzubDU%mee;TDmI9`eA9pVuixc({`X`=!`z)? zL}#C}t*=76qt54#PmMoJUVcMMeHL8h?|2)qWOXC(I)*@_g|j5v1!v(J8Wm70P7^?C z267$x{^S`tg`U9F<1VkNCB6}I+=M6gbWpGbH<*(iPmVWEQiawD5fKBMl1p9HyU03NVb!_6Nc(3a=Q8pAA5^`b5SQOPTA4#$@{;((tL6$O#vDjb2m`u zjXg_MwUMaH?B{Jwk~5Zv!53ahnQZypxp@SK#Wi%d__`XuOjeaP60Jy=s;YZ-l`|%x zA_W>UTfOtCbeVRSs<<}kWO{0_U3Qg|WH51wf|ODwhv&FDC?A;?yfCBqAKkqr@Fd!q zwfhv9c}v0djU$1g?V?PKEh|!@=I{tgNpbG7c>()U5{wIe_Bd=qSz=t=JSwu;@T1L_ zwwnfAqBWZ|^Y!1(v7#U7EHvFaugp8KoL>HLoci588-<;Jpt|WmgutWy*IyOt2Q-d$ zT;Z>l^69flU$1?the7SUP`!OA%V;WyFW~x-Cs4iRQyMW1MBQ>Iw!OC?_^9jVuJ2!V z-#{PaPvZ5vowf^voM84+o02(xq3gv4Z3jzVZ^xRXIwst2n9?*y*g@wc(^iz;35r8| z|IztpnSPb=Y}%m6G8{{jv)QwSB$ihpP4i;)aT9TmS2YVh_v&?Adwbn*(ORTFM_l8s zSM8d0DQkCrSKu#xkAZ1m+<1uBU}@zis9wk89nR^$#&#;Ve9!Y{1*aIzJd+wXw4Aj3 z;o}^r(iSe6KDkh-(H^WC?CuBqR9ljnyChW}<-^5aHUHxQLg!oJ=h?8CzGf%c6m(j7 zo>CR}19;CEU-tQ&TS?!`4vev#y{Zfl+57m#dU!WKBU*z+~T|RY{PNZ zv%EbECR0Cp!Mye%V~78^yJ`@NOLLe9R4|hv;m|&r3ut?hlO$h>^#wP{_@kY&l^?wI zZrwRvKs;VOO!}&fcB*{z_4lgmmj{zERQ&Zv@is1%Ubj=&V`5OF?jrMGF?ue(g$y zZQ>boA_Fz|ur0@%FvlkZfP>h_RbWr@h-{qerPT2mDz4uV2#vlM|Kq*O^7Gs;Xz}9- zD@)6(cQV$to@qTld2l#rKW8Ia$zA{2@;+V8RO0^py}!D1DxAT-!cn?*WXY!GKBE7r67vvBWrfQvX!CKi|0(wcvBlFSYDLT&dhwO6e}*>f0?rs+?Qfkcwv^%Z|&ExDj8*TUIhXkM%rtS z8ZFXyGTv$~Ee|DrP*%AC0-Wrph*+wC7AT*!XGJq(|K4R9TvfJF1w-K_F5KsvoFsd- z@|fkYAYZG4Eyl-hES7fv=c>o!ac9Qdo7SMnO#})D@-P6Te7Y&NPM3-q0>Re{g*QFs zaT?6SgeO}>9`Ey!Aq;}FNg$wA)(b#KhH&kX2>=Cy`UGB5OG2SKqc2EL%8sID3X;zV zNkegKqvo3Xyn@F(XX@Ha^B9|xW?92sr(yp8g=q&i$l2JIM%|mQw_p>FS3^}9{@`Qd+be=nU@-&>y-^INyJ_(xY@a>x_C zKmX{`BFk|CxSGPZ4YW+>B>wtFRNbLE4g!NH>_0c4iaNw*g9Kbg-&i9d$Fg0aM zE^Fnv?d>%s3r9d$KsCnf51Z{zPuR*h@DUbdLgdQBPAqEprB)Div>deM60S}G(4m~l z;Y1jvk;?1IKs`PNW*zWC!lSDvQ$pQ~D6|7P7ZvsB@+IV(HNAaIgId^oSs+#bb;bn( zFn{Np1eDH#U9g{gTr>kaK#f!OZBU}yD>l@4XAL9w*d~7bz~Zn<8mhP9y{3ek+~3fS zI!z*GuCBGaROd+(8`Zp|*8-Zz?J)v+wT1h`AB$?KB)F&2;U3_cVa6^^w<8;nG`41e zUat(fmgE9bn`sNjc&871ok-mCbYc8Q*UJP|;zo935O_$!$08D-(LkFfg77EJ>zlMk zJo7WXj;{&f<15mmj#vNp#7^p1Q6kZp*Q9-m@KDMa02EGAHk7D*M{BUabAffy%=pR? z%1Xo}Yl{GoH6M%05R%p=Sa=n9H3Nc4i$(Gnag8{Z9@<%1NFq3xo_KYvm- zYiHZce(ZyO{h207u#6M!{?Xl&O$Q=++haNa{8GZ}Q$%02u?YoAhbIu|Q5JBPRsD$JJDOxW0qmb#IEzjNAGq1BIEjF z2;q6&F4Y-mm(m)55oCeX0f~7vkSln{eUgtNpwAVg{?$qvY;>d@ukW9HIt3(6_SvXV z_euh6y^H{^!8FS8iwJf(kSYWiYP=#7HK|lN^yCbTz~VQyKTNHim~eNi#O46>i#Tgs zvETT#Qd6zk1SFj39zEuaCINFsPz9urh^5)~C;$qS-Z($yUX9Bq%3PE+OI@6DJ_n1V49=X!RU$bL224;b)6;0m7jQ_4`f|aDE5K0a zO>NVB^YQudOz^z)T|KquPel>;6Q*xh7q&O98*qdbjZKBAB_!N14sn^4v9J2TI@ncO zN`RuJqr;0$;+s`|Tn}Y6+)$zb`$q80vT>49naurl^)pj}yBk{3Bb_jQ0DD|jKU0K; zcvpYgY*P1eR#Ca(He)(>LM5S&{8yM9Bz~Do-dM@I5X3mw3+ZCjM<3c{(0!mc{>K|*ciwgescrY0S(neRg07ky&ir++LrESO)xXJ3x}vh} z(U-VmEtM;$Bm3S>r%R3J4Sk?IF=ah z`j1Wqm@8E45ej#M%a;B`Al{7N`G6~M|FAatRRC$~mKoF=er7_z3>Y~d8di*(qn#K{ z2xd|yHW9ST%s6b$O0ZnkSVGFgyUyIBgK8J?J}tI;@}pAgMJ+`Qcg=h4YDAoJ0+|h@ z`*b+(bM2)_yGpNI5}4v>RGIx{Wv;Qf;CEHe$?~0D@nQ_C(W+K~njkHaALT7R{0-_yW}6F6(*!dk%0nf=X(%p(|}f-(d4 zM#G=E`@dR^!)|_wEx2R)!d^1p@3Zxnq`UoJ{N6HB#mZJi`Y+#?(pKLd&%Nrd(8&B( zn&&n{`7IUEvZI)94+k!l5SomVtd{90uah*lQp8$!J5>A+#cfPlKGsR)J=CV#Y}SoD zM21iak%UQn9oLES8f(0(-oftX#lJ9uANuVAnuW zBM#tWFEUO}f$I1O#yNX+YDYo9{eGKU>8q{-V)y3!xU|X#yRP|9FF~e`b7C^{)523i zFjCL6&JU%&EZ4;Z*OqTrbNpH4ow}TNq=J$nXK>ng(_q}@n8ERF{T3L4kSKhYS4sop zvMH~8b;^>Rb&VaOaMhWubHF-~TQu*-{9d-Nj7P($7ej7z)iOdeUH;Ks zjrKz=cYn}0VTgCEqU!F zjaRFtJ>93*gEfCwpiO?ZGTSE=NLj{IhaFG67JD%B*VrSQ@drBXoK%->^g`yzuk-FE zZgIP9ycsh-G2a@+5D zG_mmQSrXt+#X-F{)JXf=OG|2kGv(d|7jEkvt%kSbez!-T4+VQgCZT8MYx({iF5xGq{qb;rG?Fsb9!aVsO|X!WSOOn~0MPO6c*Yp= zP95oReS|^;GJ)ja&Hjv3oE6$)*u%T1X}057v!H{>b=IYF6^fnTrBhFA*>c`MgXeeV zTRWY=xUtVAVr^oDX~0A{`ZO6!%dhkdYeh%k_l4Pj6L`b*f(wscU-o88~O|M9twD9-Fq`FFRWI2^WY{xMrrZ^|K)Mc{epaW7GCBfj4?} zW@%OcT3E}tu-Kp0R<8e~ZutA1XOU4&pDZm0)T`i`HI`A4!c`^bB#gA1)Siks>?ir5 z7ZtsqSBIhXl9BcucrF7K@r5;cT|DG;&+YUM;6R(w*&e^Q@cmw%`iURg4*no0T>M^B zcW{mJ(_Z>Jl46udb1S@|j3~VfiJLDWO1AOF+qA>?U&1)w`HNnC^qzjC^3w<7?`Pb9 zOB;@*Hjbr>&-;J$0fitL9mST{0~i z=0Cdm_?5r$OL9WNuxsc3;2HYLrv7+LO*(UHIWzeP$nVABOSNV;n*`od*(inwKU80I zKNkA`7U<`bnlBN`LX?kj{M41x%!ubcqwl8fy@!9*Kd?_bpwxO;$B2FeLZz*v4C}O> za^|C(F#B_*ZboC$keln|Khuf*X2Ay0SI9>Tf!5V0dUUtxl>gk19(JoyUR6dl?~j(@ z%qcXiuPie(@f6d*MIM9rRb!;vV;QG2*MP7zt+Ou3SlVOM+!R&U9W7q-dVxLXMajP3YH53E#O88D}*z=c@$J0l?d`b z%#Z)CPkQX*4S!fR*9!wxf0_alfUVtm>at$XB#T4zVdQ8n27vb^mVIPhHfyy`pl%R& z*+l_VBWbg=jlvhet-PWt2fqj2YKJ-G8Ptx#sB5z2j-HG(9~bCoA(o0AR}ZA}{iBOJ zkRCP8?{t9&jAB2*^??h&eD?52E1fct2O|@a-LbT@UO>Grwx)QG1R|4*)M4IZfFp)6 zl3=pO>t23*6hsBW)HX~r>FjA?`x_B2fXP_K6K89W+uVy*4bUK#6rdee4*y5jb$Eom zRNxnjMEIzzFds3Q#;=e3_rjPBFJ+(}4hLtk(#^JS0cVBN_k14!))-oQZXL1VrA=82 zmc!&HQkc-VVNb1AK0c=oqGRMrgvtI?vKy1JKypq*CVn(lJs}#h8tM);p>PZ0XO^Rx zV=0V;Jwn+GUa$)SRMO&93>I<83%7~nqo9Eg2?`j?i>2_cLQ9X1CP0AaM!dyonjyAY z`^HSC8)|ax60lfPDZ{Ue0R7I}57S*!6nzj%JFG1SL3V{HYf5}T(-X(Y3H=i$Rs&T; zq12qH*YPV6FMz^|Wlx2RTQl$|U`!CFby2XGF=oBos;tDlZpvYDzB-pj&b^3Ri>mG! zG~Pxqs{w?`vyj)-osKGK(`XnJ4`kxe8{i!Eumm#1zm}eM5(v~{?T(7b*GKyOi$Gn; zHeWVLu-X@FAtQbs$YHTKmG;Q9;h63ruTM_%j+;KvGW>t7SX>(#TQRtfqG_ ziuIyeW|l4eDFWY#W?mPiTi~!Q4}X%&n%dgKLRRS_H8!d^2a6l(r2F(aUM;VOG7Q1I z{jcTwD{7JmzpW1d7dG)!$W#Xr5}F*%Ff>%!-JlsHp#K{V95C{+7&%ZA&fHT`ptm18 z2{?#c=r9cvwh7U7TsYFb;-=U=!R;*}@YjJ70s?1d5{F)2-vo{Ytkh9hVijA|i8P`O zxPktQmwV>Vr99r|J>@T<7^o&hf}F+ z_oFz?`wgF9B9-xzQ#_A&?K@pYVR`E{gGYP7j4^`W$g&?|Fm7&=0%#$Omj&8X=q49t zs9bfZxsyEpwc>=`2TP0+d;W%Ee7|{72Wi=6rw#;uGUoI4D%?tOqj^ zQ8|exOaOU-$&{1Omx{t(p($`+av1F&9X}V*G#=`WY@ju)!Dfzm%1?gTMZYT!&W4XmbyH-jpTC6Mt1r@WKb+#8Q1Ro2kOWlDWV#Uvdz zy;tcLJEca^KcS39dNs#AY+W^n+Pr`C(hjTci}!+WqJ0l8q6dGr8a=15ZLNY{oaUKc zklpf79m{o8b59d{4Zn)|Sp&T+ zO*P`^pHavaV(i$JHCe>#@wrY^FO&{n`Xgq7I0!|4pX^!2Rgjz111Ds6BF{ns@FwU@ z-$Ke1v_0C#P&5^-3;BpM{RMG2qzN{5d(*qWw+yM>wrWSzHuha>iXm6kmR^qh-uYM$VWm)ys0b8QDM{L1>gK*U zmiEN272eJZcFK!ifaVS)5=XNB7%e^h z<^sqXa#w1Vk!?aE5rYpi2t<&NOXyS{Ep>}>%(T3*^3n_HGWPKm)GL4d$lIS7&4BUJ zJR9NI5=7v?Ba~C^sF19tfXkff{dxOd>>Y2_d6Vo&xl$9$97l_+q`LyC3T1D|#lydC zv${Tc33xSW<+tkFBwo*c@QAc7r8-#Qpg43l=hpL!B%S_mU+lbZtB%@y0x-LnfW|b0 zOU8w+?0l&aLb&gn(bF5(#utnh6$)Fe`fDtOtzAZ*4L*CjPxt6CcLg_{6m#?54nYP8 zq!;;J*g9v#cLALGK6zDh(*~42$@2`|Sl&D4k;hHuc6qF%t+On7td+N$WO&6& zA@3?JhLM^A?3S_BYWX^6zw2ZWv&0^#mO1H~w4(BiWv|9LT6q|oW_)L3oDvp!R$s`) zZm2CR)%89swy@IRf}y>q^@l?14~P-#4_-=i294Zno!=@1-txZmr=SYfaIEv>F*i#= zPnEuTz|h(%(uc5u`BDeEblLPNqg z0|)a$Wjd?tDv-Pl9Os1_MUtA4E@1*!`{(qp+K%bV%N0nf(_5(7q%nDYIC;A^F583> zdqFsbkbE&XlQn4^e|l1HJ2Zf4@xMd0JM5JB4WN}C;MKlDorF(09>qqjh9s1$l{l>$ zUCq9$!HyJlIOGJ`>mVwPV!M+Cpl$vYK2JK_p9)CaNQ(`;dV$ST%0N?wKGk=bXMU48 zip_hLrpBO{Uii-9F z)`&|r&sq1d%h(qG#tmk!!zg6{E?MeGCKOQ)!6qm|b@_jWSe&K4E@X=AHsKDTq8T|0 zq7UGzJ%WMDU($cnDBGMnclF^ST7BBU*U9?oDWx&}`V!5F%I6R%i->Fct4?pm+33?Q z%5-Pk%23#W@Mq%O`U+3!fXB`L-@nhi`lM;FIeN%9O*qCtM|tgE*R7}%*&xn{Tk0kw;RZaa9UbsH?(Tf}+(iOY<^S8ieQKRG& z@8gGRRnjiMbbpRf=WnUj?eA|K`bN`e)Z;8w$MvN{>{r4!atAbgewXlzv`(w_$w#ckIDJ`aiAcy1ZaeU}8&fd@K~3!5%s=&y?=E3I?2JL33<59!42@Z(1}C1f`r!Z?$bOK%4Oe5rk&VRy&61> z^`NG6!k1&Kf;fKd#5Fj_WTx2cG>4nA{oG zB*1N5@bA5!W&`p=e;2|^7%*hwj#Npbts3EmE1_mC~sG!V39C z24vJ%bw3wK4yy@@ciV-Rv#Y&Qv@38fV+>T}S5HOMwY|i6v&Bwok(l#U(dsY$Pv)y6mmFVY!~8(@vd*$lXYe3nr`NIP zK)F(r;#`~k0LdTVQTnUaJ^89GDZ%LN=*f<1oq9`>YNpgGZb{^lBa z3$8h#OemxrLP}46t`q&3tVkXEgc({`179SR7A)tY*ob_sqA5E$TY!e@?acy}lDD_% zgjx=Hq|J#!YlcVeHz~_S&+YG%Vv!q)NK7>wEfJ{wF=|2yXGq>~)TodC(geWi#ZY)B zUMeG-!9){HBr%%Ff$?Z+6CssltQP9(88A%2P$&}--+&J!0TS>G735r zML`wsZlX$3;jGPkU?6Pz-qxuqlcndS!AVxV(QF}51j4T#05c{Luv2DDVs2d#G{XgYiyaAZUDdO$e&g|$Et*1tVQk< zfi2x>`WT4PKA2t8L^8o_|Ixu)pnwy3qwV(nv!&R6c-;INKpI};^YV&lBotCd!RTm~ zm4lXAIu&xA=6d;%6@>uyV>p4;cz;DRwy*@9TT`0stR+O#p}oyi9QYD%Yg31b>l`5dl5H*t>M;UzEsOMPZ1fD5mW)8#MN z?h7@*vgFE-l0mla`w8y*-oqRhl!+~^p|rg=ukgpT&66I2AaELt1Yj0wD(U{9UInbiHjQydlV!EIDSaz?((MAstK5x>w~>BfnPt>JNaNfBOVz$q@x9o zFpUH*o%5`;6J6htE`jw*e8qnz(4LusucN@Dqv3k!I%JD`5tAj8Nj#7eo4xdNQCV64$gq0f1g#3oLhBM5fVcPYJ&@rCR)yEpduiZX(?tDR|Ng0$=bRcArSj z#5Alh5E8QP`v13Bm}usp=i z@ws>bbB#Aor%&Bbv{e^%fT6@i^9M~qo9JnI?Zb(&Z-qVqJS6SocG&V9ifcMRnIZ@^ zBn~K^wJ1BC;yHt)V2+npZk!LG@UdkG6QHNMCe1H_(+Cyt_agA9gT*oXNswuwkjp+S ztm+aFZ~#Rk_hzVkuvD}kaDtBNnpx^x49`Q9`+3*=r}V?UPp1u)*GJ3E+!)UyY6^Mt zn2aZgs}n$%C^Clyj4dZ%nxnlwP4-%~N1ss-l(?^rX_r`Hpbirj+oPF`;n9sV1Y@}5<3d6+%E-E? zG8h&A+vIa)MUA1ZjeqmXvkP{-cDA}tMcG;K_Li{jNKwL-zsZLO%l3(p^2(l;VH$qw zjEm2&#=PBs-}X~AcraVHyfZw^XNUG~e9?4@GNmYAXsVWpyUTtVid1Yfe8m+*Gs;IVY9d>nXZ`(xw1^KPDZ z4Z2k$IBn#)gsl83c%sfKsY#nO2JjD7j$M1y9M-s#lXSvrR>XD#?;^E}?lIqF4rbO# z7ninDSn5lw@UFhI{o$^*Y&{l)NSA-;E-L1nX!zj_(dbRxT_tr{UoQ-sC=Je-)+PCC zGLsARt!Tyf?RhrES)(s9YIz2dk7Mf}t4ZIqX`{q<9(9wIMIN2(9^(3Qzr?s`RqTa* z^8gd=05ES6dF4-*AB*!&hf}c9)jvYb*@n+ptkxU0wRJN-jJB!K6BJutOVzIUihi$F ztuz4~lIeYU%5D!t*=x@!rdYY&zm8Abg1zGyMq2wRiDyMl_Sr=`h3phYSth@HdqueN zzG#K94U(O{N+%mW6dt;hlbKbcAgAp5Tt=zPuO&Y#&);bNTFM+gPTrWuwbJIJev$K( z@p8)B;Eu0S}0XN3Fi@@^ zZJ4b8r}0zAP9dvmaQj4A0P1DDOmJ-H;%<^~#730t12f7qd4~`Bc1km*MuTI5ou8en zMDmKuEnVVt_59qcRK+h`bInp=Jy$zU^q0J=Tc4}0w|@IKc}AtG?t}4BE-U#j+b7Rc z`lgdfW|4?jH5@m6?c&+XU#9)AHhO=~fJLtRv4cmnk~p8r`6a`I3t56jY(+0uh0{x9 z3l7Go0vCoCg$s=xLVh+u7%JnQ2>AA`dC@xrZ2eiY%!Eu3Lvnpy(`(;6_Ker@;O%5rOf(Gif_J>s~oc{e=$D~X)^tk z^T-WR@(`rlq1h-2b zoBi}(`Fz8Meb?ZO^fli;))-RX>ug=>Y^qE8me9qW?YY%k z^IZI?&8}8_%Kntywcp}z-`)xqm>ihWwJ6tnaN*Ho(iK-+Y|&rawGsD<(&67*kE~|p zaB;k6J00yJZv8sY@6(ko{8 zSG%uv1=AKH((ShfU>P|4L83-Rtawv#G>uY(Y<7ARKdBIKrdpZ;{)J_~k1ca>*?!u1ni`9}lpTS>MSJh+Q~0cVAMU#Q*vRDL~~5ozG! zvxJSu3wVpIc#9#q>;nvC%6k+mN`zHA2%^%47k*SaiRZq5;J*B1fK4!1fz#NxmZF+M zj=k~RyocK^xL{9Hp|H44c)NUZ3px+^qVrHEKk=z;i}`2eG-8pR`}1N6v*|sR=a^omWeGz zpFd+cPOnaB8s|3pzn{KWc;R`@8M@R7_H`SXfLh)UIXQ$ONc|mo`Js0zZ@@Qsh&L5< zuelu8FY3z|&fgyBQH}Fw5*d;FiFfBIjRA1mBF1!!{H2SWlSTlwP(y}o;bBUlRitKK!@y_`nj>}OWhxX%=?Tj#xx9+35M|f=F*y} zQpTf7Ryt(jdhO(qAcc3cazk~8%Ev*c>Fw-ksODasS5u2cRG}dqyJAntQ~kI1ZeP2nCMdZO z#G&6Fq90$!>c>8}{MGu0oQruSI82^3ut{=N)2U+M&4*$s2Q;x}HOl-0|f!tM1L zr>(r%ZYMqQ1pOiZYpJU##rMm)S`S8^J<8p&PZUZQ=hH(I;a#Z98&MAS+I5drRTQ?E zC3q^ekd-_JU4OUHy`J74KtK?vj1CBy2S5UDrGpY_SHA&mPM(- zYpt&rZm)b{4p+<0KT1p&lQ~y;TR~e4S$bd0m1O?-h<@=>J4ha1*j+hVIKDi(B>F`I zMJ(=i=_-Xljf_eftrZ(5M-Yb1M(20uHXkm^_6TAm4%oo;H5VSToR|7CUv*)}%15T& zZovM1dXaj{l&g2?+tK$SGnxzIu_x)qB`l=psn$)zA{k|l2%4LB^tCYWvz~*POr!j~ z^)Du&F_CKC&zWs7%r~mL=7#U3IEkC?+C+wE=AN3lcoGM4Icx?rWJY&LDLy$9UhjH< z0dS@G&!b;A^wZK@)V^QgxZ3;USwYEbkqdHnF2%4t>Hov^wM#O|+M$2%?JxIl8b(=} z5@pu-&$Vq{ikW|mh8=PQ$ySvH=W+x@d7H4T=Zl~7+;uHwzFw)t{^cUmEjH=c9;1@j ztD0AsnQi3-dFj1t)jgQ_E*)qe_`awSMb13Eb1SO~oOuu}cW1mfI$H6#DerN`i2Ift zdE!&4d5-xgEvICb7PZ!?QXQeE-^1E`X zzSj#mWPW~IR4t83@B_h1Qa>v#(r7Ksp`s$!1U~>S#G*$R@ouBxcbWLi@ZUXbHK-dXRU+Y%sAjE06ngRX{PdKX$d*~qXTbQj5#ekDj!aEP;idnz!4&*_Uus- z&ZefCLLLsBZ8M>^!}Zo71z&ZW2$)_V;~|oBB0on!t2%Qca0KZ6fSr!HnIJR7@+NK+ z{sa&exn@~Xv1kI!|A=95ibwv{4lP}zQ=xKeqf*dK{*K+_Mu z8FstiX!;-B_oh=pk)vyt$2u?eU*P=Mb|;SSfJ^l8@3uex0LFtR9T#Nh zdRgbTwg8(}%8`g9{}ReT@F0KFl#iAaE+4U-eiR%%6tOjU`Z2;uU^p3Lwv_ypE!#JO z^>%voto)+ZGxwkXRI6yv}7gdiO)4-H1oSA(K zdPe`dfV4FDJD1DO{Ex@TN{_|L+Q$JEBBlzfDN##>iC+3oD-G-4S(KY!P;Du+=6IB! z{^ds!&6xc*UA?t7w8PVr&qvHi*kf^*y&%BNbtsF&*VRxEKhlF=pAbZ^ckB0VMP2Fu zP}i;d!fW@{-8`WadR1%yk%HPh0IaMmzJ-UN>RuD%gf}Dzuqt9P-+`y9)Ez<~)WZOv zJ?|M+IDA9EKG{>i zP{IW01KCr?h`u{OqxftMIDP+6pn(_c2Q>g%ffLcyDB==B3!h-i)PF+AZT%s0hANfe zv!!bRheQCI^xr3MyJdoca4UR)WE>Dt$z$wvf;mbmfoDw4TLRtNr0Yj#T`C$e-EV8v zoK9jXjZ<4LVKbO~^kH3JFKFV_tJk!7A0HlH8Pg%~y;d`z4z~l#Yr}qW_qr%Rl;{c1 z`3q0N{1^@bI)?f{=bDZT_dhbJfvtL%yA6Y)&vdx^MpUfG=$#Bsx)V$P>n!fIkFD2n zkNN=aVy|e3j|-e>lsu_?Sob|g2qHKwjrbw7yvt)cln{};Op}Y(E*i_ZRD;>vm8fCl z1mRcq_GV5F&Nt$nTCNa4Y?!zc^(_~zM*@gOA|z4e@Z&Dyve#xXP# zt&kf`+Ph33uvsP}r~P~jz7;fkAa|t@b=uQuvN^>@*jo*jE0A@pn(elk@$wm>Bzl&kV*i=GqD=j@nG{Uvj#e|!;zkgXRQi{ zA>p+3YAPLMm>hml5a)E(nH7ntVn|#I4bmLMsEh$CHkknON6nHdj{>;xt3by`lWr7p zoD_Wm%<%)(-g17u$R-jIw!S$sUdK%aZUi#+E?7hN@z;f&Kt0$Nyr1+E$FN?b?$ ztQn^A2@L?>6ce65C2KM2x2r~{)lXUn?C<$FmF{g9Wo|XW4x&go2n^XoH^ok#dV{Ec zfe73{ZmxTp-guIK?Kow&eR_v70X{emR<0A>giUw`G7^Z!054$<#Ce{Xf=$>@BOC8I zwrm3bne(ti0^1}jBl-qFKX1ALv8`M*a_Qi5by=sYR$<_nSFjwmcmx)joE+Xh9Suv} zV8WLsVyLKIHvp)hXDkGR*iJSf>rG7rR4WgNcK8!pbNlMZ|Hd4vZVR&~ z*aDeml>g4`Yg+v*wo|N3&hY*9M&NSQRC8LQj`4wE2_#>_DiEQmyRu1pNEf83<$PJq zL8vMk9zJ+c@<5Ai>ea|(L@A693=a@mo&m@JZah>goaVk+iE|+WKWL1ZAltLdl;fhN z)PY4fSWe8(c^xJ}N>_X4-VCzUYRoeC*fabZC8=bn`Yw$2?wW~KynyvD>Bc+nzC2RR z;ESjVyR^geQ^WXLkzJhh6)eBF;ERuf53EFNRAceQ#xK>L>U*(VtbH=i!966+ojuag zZvU}5ILDTv7Ue$2lFAxXV5T#?d|N+A=kZ9N4!;b-c*J}{^1^VT%`gw@dw%fo6Q6ss zckg|;>-XcajfLbPDDwa&Te!sNuPLMH`qYEd-^zWTNfPN06m50pA6*QzY~Wl+ej!M# z*1Vy%nmiDYf3D?8#c!z)QUG_Eaj1RKuN#^g64?O=RvcTNyqFq#$&VoT1PD97_%JqC zHPxU@yUbG3J!;Bepx1aOKLFuU%bqSB|4eRr@AZOYxr%}E3Ik;^y1P?uhe_=lOiIIQ zvOo6@S7!R!QXFWm3e!;!HZdyfA1IlXdL-pGQamRaocNZ#*nB2b1B}@pxN8+}{k592 z9;`YI+ z5&db_EXQPU|9*$ndE>ma^y*Vz9OHCwPuFPjgag;y-zbrM!FSie>$xNadGsKDiG&)*;ZJ4nogYrrXCWgNjxF18qr&_pCPao6HNEHqeX$o7-_L8z|H zSK%!wc}nBNg5>uyT;sg3kDEnD`d(<@o+Tal{`J%4#Mf$p=3CukeQdxAzA~Kc2MJeP zj*09$l#z8#5hMA2bBudU3on1u#fPul2J}Og zTorX3Qs!S;e(2!*8dLe3F4Dl}U0iR`*gravZz~3TXPyFV=MlS8cQGZ63dQ7yIPw9P@)GzDiCu$|fF7*I`QEKJwBwK4+M6BeMKQZX{)gWEVckF*aNs^{FxgQrN{%N|h zEx1T7aIzBK^?ePw?R=5%(W`HUKaI4UAK%=oyr%tbtLx=Ad1(%w$I~g@SF_|QcPsZN zcwT#V#hQ1f8$Gk2R1RUJ3RvX7{u2MS%9y(oGI&$OV!Y#V$q(HeF%!`eX?=4m4}){@ z>?Kh}&jjonIB%A0=p{`TZk*qR>$mXw9z6B?+7G@NM%vB!k*Kfk!v;7Me=P~(vT|Eq zoY2=#RbjdUZX50TW_2n#JeY^-CTM-V@5EF7uu}S0e9z5J) zDHhx@D zm-Q%v`dD!#7j#{43C=CJ=UEPKZ(*4xDQx3?e(s|~pRb$3d#&KQLwo_H_}}2StQCK2 zU~DW9jRxe#fR_EjBLH$&=+*kWGiPbWs zw9%`P85pL3kW_2ACeE1mcwQd1Vzx>$=P-NJA23zyw5o*PU%r2@?kU7KUw6o@l|nyM zI71yvu27;JEPQ2AQqv3#AV`U_oD3i!gXxpFGE-93=<|YYKaPAQZfeEJ8zKm5l{BE! zk>ICC(zAE4ISn^G7wGW`_i)~3KpGU#?sHGcTrAtE5_>-0=q*!aBF1QNH_DwU%hxOC zs@VbNoL>a832D9c#LZOw8LQnTM@Hg9ckHKRM@k0e>HF1yiGO>^_7rc+^6nYWqQtO8!k zBMd_A>5BKnBhH(mTcpe1>93hJ0)o9T?7D=|d7W~;*IT1m!~nIa^~~zvHO@=SiyNII zctmxuY0{rgmf|F2y#$H5Oa~XWx5+IkgG?OixIaRqt(c*g5gA4aa*Dw&Ja{_bGTLog zdPecBQdzYrEb&)r!aVmqzggGDep_)Fr;QON2vBoyAsv0xkJlP`V0mMMpP!&j!gnZ_ zNv4*CAq8V+W48d8<4c(mTHDJ)M^LmhoQ~ENa>2RV!kY=(a|~*i=FVE9uDk-9JxY~G z?KHV;#guy4@}`#V`r2O?O3ZB?r@6F!Q^((O3rH78m2Yzr{hpqjX3`fVO=*n+kE&oC z7jXp#qfoN5WU{~dL2;+GYv)hnqvYsEm#dkTlYD=g-SQ8R;-ky;F7Sq||J*6WuDB-n z7g4%)9_NBbwmn&Oe!_Cvyl4oyM%TII2{dNNivO-N+Ep zVB*fSMpp_C>L#E8@2oLZ@dOj94t@Z342l_~S@`+YEv=o?w8u1UyAF@DRJU0x!%|sA z6ACwyz|pk8S5jcfMk^0<|MkjYV6co4d#hGDQzdH1Dft9(@!I^%yb&SI=m*z#e#)ta zRpKl2LMv;Fi&2N&hW{JQ)9FZ91dFm(8h<$Y_Kbdou#%Wot!ky?R~I+I5y8OO6Nb-r z2rk;ZeKPr~vG<<6pRofPQqv5sJfX*z2eYl})7y}MJayXvOSlQlGA;q2Rm!lMkhayP>rfqde2V2BK-;<2V% zY;qYlMflRBYIs%ML1OYfHz}P!VWO@yjgZZ&j3i`7q`@kmgvZ_4bLCe69>e5%PWKlN-F{&*9gM)mWUCDaii>ic|u?hwf zn+!vPlO!uZ3x^+wE&+8q4q#)2NB}lT5(^|WA=W9)kBtiSMg?D!8?80?Ubo2fNc0F* z)6CR|TQgZTjTfUvopKOQB=h{5GPT#Dv=p~(8qD6%Kv>E0f`6~n^vgay`edZT#Eiu+9j0jw*ksAS)Bg-g!nj(1ZggDbcPY5+6Cs1Q^M(?!PlgrNKy0O; z`Y<(G(3IT!=BO&6G4h?ycMdLU(3aoT$pYOUxdaQjk`LlPwB9!}6W3u^ z@HEqPgb@)_1&&q<5|B=3Hpk@_O*QPk5FmC-(uV(DAYw-6oTuwnd3N!C4A`;6(r=*x zVatgs-s;w>Grv|;luU~aZA>}nf-KU$`#Zw#2>2&?eXi;_U1 zqSAthF(!et`}LyawOCww;gQ!|Y;S!a8LWL>8fh}^&M*$-bpof3CZn2M_J#Up9;>9 zqPRmYXdFPowK1R};Psf~Oky4u_%*9Y=xUCQe$_2q=Qa8H_`>h=A@4)q3h9`+rrlzj ztYJRHBl46(dwJtSjbDs?(G>d3yQiGx-WB+W?a&i^^>FL;B*2TVZ&Q_WL-h|(e}&NV zE}d33&sd}7h_GW)-6F)^x6~swG&%^MxA)b4^X!S@8`SU3{!N>38~u`LM5~NLLqmA8 zvRmDF&CsWS@K&Cg`jYK0pFfcyGKA2C^pqGh&2*yQQcDB9CK5{;DN&40S-%qJJ;Ajv zTl}HIc?t^A{Nrk50AR6UI5Vc&t9^MoHNZhFh+JZ23;9)nTC8G>v9Er{g)SD-&fTa{yE+z+d|qV8hqcc#rGckbwDIQnB>LNw3WXF+zJfpKA$1CsK_WkplXmOSxg z&zc~xZ$n_U*jYHZBWA!BQrY>quxjU5DTbH}2h(Ic?pHSznA_pa zlOHJ~G|~l?w^I*#h#9l-2|vO|`es9BXUNVfz$<(&8AHk$|?FHwATZOTAMs2{FY=WS`H`m@|9;5%Nft@A};LFoFo zt`F_)2njv00Rdp;r;V?j30odxF~mCxfe&1fzkBxcadRq})%6-G9@Qf;BipOQg{o}6 z!<1FBuZ$HJc*Jd~3Rk1N;k!G>e8>{z?VF~{lf0F1V%CA55^1!b-nN{O_ayBCm`#%% z%%6CYtE+Bt$?P0bM!WGaPO^WB0DZ~sopg4-z!33rPSf3;HQP;>Efi=kwr$*R)iy#KE~y%t$^yHY9{2nw&p`;!0o~1xB1M^Qv3RPbQg_*nkAPh zd4e*5d^8Epd=v)9vDFtNnWVvG!auc?Izr{@#2H>zL@11&n}&>bFspK@ndyY=I-n5D zQwL49??pifPv~jC`P)AW347Xe2;)0r=7t`(CjFNY{qfb)znWngizAP=-ZFhY9PT*U z>AU#*{L^tD8tHy~*9 z6!CM*PV*w*QfWRvltGPG^4E02iNU3`65^!*U3r=igCOr$f^bcz-ulaNpVgF>T zHa0fw1Ub6aQpObcJJlTcSsc2!pb;muz*}z@R!jE8=XZMoT;F`~j-v2s;OFa}&6_+z zct1?`w_DM>A!u6;-Cb?ZMPv@^%Yj=C$1YBD8(ZJz4aHhw5K>?#zqV+vtZR{wknacf zwuqsDVs*G5B}xV%qELLpGjAw8BvI|_mHp^&+7ogoctzFeh*ZkI zYG;q}5AgZHs;~a*e{rCyIT9SIr~B zPGie=top(@5t)O`?}VpD?%%r7l%c-|S1wqhJa(O`?$qx0tMIv7LO?~{#)ute9G_ma zce)QDnLOfV^)|=&O)lEiFq1gieh;l&KFy z<}6EHBW=bC;e0gTZVgo&rX!i{`U$ia6FOt##i`okc;R+RKLzcRMTRy`4$n=0!dR9{ zSi1Ttd_FyOuMer)eK7T2(#i7u^>E!h@AsP87~`Q!B?Dcl(!>kfs%36x=$Hm^OYD8C z+z;5M7fw&R5jR9hWenHLz^3rQ)@^zRVPNtbfA&)gLEu#NgIuN;{FY_Wu;IIRzFxO$ zLQprd{d+DpKa<|d#ydBcMx4%=!U3>dWcfwlFs)QrP0cv$ofkaW$ zs$C0*58TVkp=qVFMYNMuy5are!k)u%5rSu_2oickfbRBfo?&*UjvgHN#>N@%d>^s^ zq%D*CzHE)pu~I!DwZ{v#Dg}j4&yKbj=nFpA%{G*-2mB(#h=-_zkMXdU{CZ`sDZ?)a z`^nc2x$7fZrs@NRUceGc64GT2@VOnXO#I5hM5)pnx$(ic?K$-xGKHVq0LxAfC%gK# zf4IA)>w%q|#oriP)Q~W9xIO88Y;KQDb;^HtYrZA$mkv&NKm2h1Gce=63PW&JYC0Ei z;6*)Q+G~EY78T@lVTwtKI%K>kQt8)cf{y@OB0g~Q&FvFGOO$LEur|5A@eWKP_A%FcuWYJte0oDX%j&qypRuLuZivEgzirQ%q(&?W0e73@e=)?{< zGkEGif3v{{wFuP3K4-N>JII_yR5x0?gsBd}CL!nEv+J)~mj@|)mjYLXuoA+`$?Kyk zk(153x9OeA&fiHzv_M{^B|_D09Gs!}rhw}=b6O$_NlV(II8X9g=a@VBWuwuZs9~w! zWeZvk6|5x1s@hhV`@gEm;k2~bmi#UlBke0ylN|D_5+ejvbPR~{qj!Yu-rpolj+U{!~8Grn^}fEM+TBl($-j_x8$7+8gZq6Hni4O=ec^M zYPJO|ol#|ZcB%+w>hU1M_a`|T-!<%cBCZALIG0TnJ)wr2)H?AS3Hp+)cu7IHT&}x^^sep5dsC0)Oaqq=uUc1tc|+42|rg0_naC zMSXbRO1{NM-TTp+`Zrc56AwbNQ;f;4JII+|#w>2-wB+)E<5@rkH<&)6u%TdDFYGPJ ztNb11Gs{grw;e>D56?4!tZwUDduvJkK zpN{1VB=w?~olLkkcW>pR;NKaIS;=l&u>-o>YT@hO7&rR`)jD8rphJ?dEQ0eaicS)F zOKRVrv?RR5bsp!{%!m1C$pp9PsY)io=w*JA&;U!YGnQ$;GCH)q2}XQl8wtMDX~dU= zUbohEhHukLl_^zti}H`Jm0ffvj=B9#Z>2{Gz?^w7Dtz2;;S*i^v44a-CHu$claUpS zv7q`Re2b&Dv-=`lFsnMOzPL&4fcpKYwV#4%&aL}rgFS?&-ur}UeoKUlv*6I*p zQpWypS15foLc2?If9nx{PW5PjBWz?iVmI5c4Hi4Ifqe)Zt=WCj1WG+Pv9>36E}!|Y4c{qsKJ;%kfR-Ky`G z->=Vh2u!AS7&62Nd^ed(=8(IR?{-dZs1*I9XXMjGzqIP@K6j1`()i{8f7PdI&*tI#eZTK#bZ*0Uy>D~kVY$Yc=G5{}>ul>iG- zY3-B4CD{tebeblJjnQK97DeCn5i=RoY}3Sk{{lIf0cYGP{u;p7D4pObnJQ0hU4+)M z(_^_dh_ExfFVi$phCtHP4DB!^J#c+oH!W_$fehI?se7h_8|qLL zEGJ0=;o{r@)0^(KCCLc2MTw8PiTyD@3Y4ct^Xvo+)qL0*k_wf(hj+!C<4f6F8eY!= z0h~FE9})`7Mh^XX#OfuOS5w_LWmB_8@1~!eQgC+MJB59S{8}D;C=pu)@}6F`Pm$@w zu78{mOQ`vQi_FxHZxX53Bk%G2zW8ux(Ivs(9m)K@j;J~-5n-dyo%cUUcfhqoq}V}xMQfvi5#rVbs{P;A{P{|L1QbJjB8S(mZhnJo?QFa#F0wa((AId z8|7 zjn`KxVQt9lZBk>TT5D4p`g%-O?vhE)fhiO^N|9Q4cPSmGXOF`MFA3lYv1PPxTXXNn zexQd~wM=79G1r1z-^nY#@q>mZ{_s{Q>o1eHZbZva2~p^`Yh^aDa@ijj5~OQH>EwM8 z8xfEfObt=hk1WmBcuBNCQ#dhxV*cr0>e`7=%Qp!5VzM1tUGTLar5 z){@;YlCqHbS(oCPAY*t~$UgwHr-EFx5^U{g%A4Q%+m;;uEW=oVd{ktDZk2{1!>6(z z3#|?sPP-O~Kv}y`x_n_YIjZa1v;RK6(a~pGwowP$sT6vqkEG!lseZ28| zcp{+KIE8WH%g9`H3x*^C9K#Z0`LB*%SCF}~SMTOtOK(r}6HqW8>0Uo~e<*V)%%OP~Gx0pk1wk3U`>jpxl)ZExnG&C>=zgi`J*Ec&@p$*P_?ZBZLv(Y05fr2$+ z`7<=)(&dOsRtt6ADBNQU$0wJ~ys327NQ}Vcm)f!mLm}ukxXgonRTL={e(-16_S`$c2Q_~XvluRmz zg3`4Z+fVG3o$a7>_E#RFlpF#)k&s70F3Mea4$}7wtJ8_eU+^I=F=R&Zj2`+aJ-CWS z^xXb*wQAzFgmi&$<@ESoiD_-x-OfW~9`JL}NSB2XMaY&9H6Gs1kWrRwSLnkdUOK`= zb9cHrZGYVM@Pjz2{0@M|ugjrb?BJd)7evERRJQCpOe95Vve{y<9^?}eT zL74Zx!@6QaFZ@TPK~tv!pez$dS~5#oyoFD{G4+hXe(`<=ihFFgyEeHM+H%^*D}&PF zf?*{g^2t4S?6Y1cW@K|>)hM!WZTOe|JYC5SQgM|CB1|&!sY|ef`O2CcRp!^#$faMH z0xFDIZB0}U5RSSQ7N0ED%eoxiD z4e%1j0tn|3x{|@TOn^x)N6(LPt=2e{IoUme5Yb9T9;2q4x!@`vmQk~DX{_n@(8d*G zX=w0V$_zdTXBwaAS$Wb%I1YYZdtwWye;*}LrJlzhW$~GYfme@iT;)eE4LFu0eZ=Q>*B=cTs;e*s*d_I;2p+s1J`Kh zL;C#r!;eluwMt-x24RBH)3R1Ip07}5{OSGuBvn%qvdusHSHZK^l>sC zS1ygnJY3Xr#jp`NT0DW0@sg&k6#bc_LRoR)Y9NS~4-j3GBnq0pG!zxpjwRsQ+Qzar zAj>L)lX8j6%fcO=`wVJ+|2 zKlR;xK&R$?Dn%a_Z4`m#Bk6v9CNvQ^FYntaqd%8rRc{Po&q{dfdlldlcA%MFHiNlD zsU%}5{>m0#Khq1;qhkb0E+WXGnL)q#Vot% zemI0}?zkCFX=ejpT#V+a?dmomL+A_l9BR6Lu8P}!<3rZBD``c9D0I*J7dM#HHf8rC znVWmB?E3rXAe186#n?`DZL3G!-uMo_)zxUED_#D^F$-*~2TjRc$>@(S%K{t@-G&eM z&jMxro@}tM*hAPgSq9ozC8jt$v%JeF8CWGy*KU{dB?nHnwyP>m;4sh2#y< zD#s;~6i>Y0#=WnAY*5%)Ut|={lw|0sTMZ|%B^xs<*x(Tni0d+0*&{h)$k7X`KqOi~ zA{>idj&`A$(!99`0|C%8kSz&|Jk#eMn`uW_skNm1!6KCZ_MCPgu-9D56cH{DO z%CM`0VELq{-2Is{_ZUI2ZTfT>p7L|Mc6+8>*--R_19a>7i&M$7`Ny< z1d#as>QgrnkGlWcv}d&(1YmP{wZq}6>}3~^g76uWPk*l7$V^Y1?oNqS#0;-}DGKjN z(Ub#4e*MEJsKL%+(1P%|PdR?`6Xgj8y^#Hf&}73M-Yx!Fw|4^$TU5nK&HWBLecm!p z=Klck4ll;xdZ5*?jAymj>m@;j<#3yICs_m$nM03%llm#j|Kf=u-G9BvU(5X20n`2E zx_auvV~18;>Pu;REb^Ak=Q#fpxu(Lc6ISKquE0%oc551sp1G@^o}9j8pEcMvDi)ST zWVUp&Dlln?0Q5~!i+l=NGrO8)FLzZt6V)dBvDCV~Jl1*o;{s1_Be9r0Q^y`0STjQ8 zzKZ4`f}z(5U;;k<6;;15E47`jaEvP79bY!DIOHVPjKcKl8Wh(IWu;B+`zo|1nTQ-u#C!` zsT{S$Lcvl6hbeJBc7tr@G41b0!JwHuW+$*6mR9nVIAjSx5Reg=uK`KSlGeha6ADWO zxx9h^8HCDeScf6H^q=PxY#>qgCFK^u<$AH7kYa_lX%+&pUL3v9KSBVqL^^5y3(+e-oIi%a`SH9v5 z2JJOho>Afs)rkJg`aPuN{}&OGOhRsjP+Xa&P`m2UH)W`oGwfP45i9rJ0Q}vjAcZ9e zi`@)@A;+vH@)IC`hbC&^R0P#J47X}{EPkgdiJn=i1)vsF^!h5m*T_+*!WFJWK~&0u z^m$o|>9P%9K_K~rt%MA9OI9x&>q7b{U!rA!^7|A?E&8xl#xlKxJVafZg&VT5#J8Wg z23PzBjq|=QoBB(7ESa)HwtsADLe3)2{O#}5d>)fs=w|&1Phzu*1DAnA^&fJ*@fMAr zNY0AeEDa14NJ23gzk%?YCHIAIgCAJqqJVL+Ns;6X)Es3Hf zgUH5--oF(iK(9!xWR|Gc#$;#P7J%@#etV{S%97vs%ULR4bO?sU)(3iKGg4_2-k{H&|TpE1MI$IkNmR9?MuZl^l;o|K<0m{_a91b zdtZbZe}CtW)0xlC8rNdLq^-g}+k;`fA~L6`dypxrh0cN=SzFw>GP%-;*#h%(R2Fjwa3P; z(JhWOeY;ZI7VOFb+sf4fmR@;ei4bpG>TQk7p9_$_qGP`BQOZJD(PPbzrkAh9R0CnD z0+Q1|SZO8lo>m*3usVz*xISyY=UXV*0eoaNCP!fN2hqT@qa%S6f4j?mJZYMh3kHfT z*&~d{vY*ysU+irG-TDAQ9C>@i8{d7?>fvEe>avAC;JVKTpxiZRkI!@f!EvSJe1Z`_ z)1FgLh99H zPD`K-=sKDE5~s4BrAe&XO^hB zEI@oUO`}!}Lv|B}=mbBs(Ipek;{4PcQeOYb0D-Agp?@hOEg2qf^9CFuF?)0(WPdF& zEb&1C6ia>*Bqp)1e1WL^!Fs=GSm})?njS*G9SRqRjA-TZ0&U^ePM;5GY=fB=Zy8OU z#ruZ1|A=F06ao$DJWdl_3DA1#7sb1kFYV6$=;#wLtW9Urysoccey)J*16{iozxN3v zx|JvM!~XBa1!Z%Y3thKNo_wdI>gL5?9E#t`ysb7GOnbkKySS=$*VnT0=)Q2~O!?S% z;p<`i#fmx>!QiWYY}tKG>SvZyD-tHkhoO>ip-ww+ptOC+hx$gK8`|BN$>A1GO$FIN zCX)>LAQ>1e$lmv~{jU)LH1CbP7gnjeHQ36shYdf33_=b%0l@=yX;xO0~fyDGZ z#4MJ59tAz3dE}PP=*j1TvT+2r{ku%nabR+M?b5Q;a4UI|Me=MK(=gEEuVz!5j?ZdI z*YVS`h=AK~)T)lA#fv^WWe^kUFts#2_#(iUM?fZYUQU&A0>2jN9-pTd+tfiIG`1}3dO);5iaVX;AUF@vIkM``A!=l$Pw@O3==}fR+ zEgHJ&`B#M6Vjens!9x^*OCg;_{jv0Q)%@1+XLjE1X54AL1Z4KCNl=Gv(hSl|f@V>N z;2Sr^?JZyI>y+;YZ;NTJDcD>FA2J@i;gTOb<$}=dTrBa!%%DVnJ<=nr--p6 zXaW|HeW9uaEA_U54k+su{-D<@@cRKm#K0{uaW1U#!Erv~4`QDp)BmYJ?9-p{(Q)2c z@1%Z*`*8G|=#Mcy9o!-C_md7b{%iqz$0g2?(_-(#s-h*|@CHZOW+kE6y9`E~)03i% z9K#1Q^26DAq>kPXw=vEy@8OtqYeQz+6!eien_cH>zjV~Qk(XAvEB5Mz;c$@W>%`5%D67Q&5R19 zcv(#ps_GCn&cGDQf_NchYe`m(n#8V4cjStgyLA4lnK3pseM@{wREpBcEfd~0{Ntx8 z6<3CpT(V@9QuItTom0uZK;%X?d;Pa2rKRR3rstl{Vd;n0lavo|+++N6sQ>%4)-ZZ!4#=2vN2s3p1pDu|ZHD%7(FY7H|freFjR4gSFp zPT%dba;R;j?<-QVqz6Clyy>%i|2`zKI8g``nkXhT_p~JWNAbzb{aWB3;Bes^yQI<- zh5RXA1@#a9V6zOlc-n?`lH#Wo(``RuOJMB#270hjkkgfNLD7?9(NJOg$6yjUx9y(1 zJ+)Trcg6TgH|kk}u{5XlS+dg!)~pTrOJU@%29HO4fs|5?0E7brPf*)&@U8c~H;3jx_L4n7jXf1!RH4(@{x0BBKdD*M&Pn%_uXQoTK*v*e}O7#UY+!p+z zWAMiox@oowY|4tu7-)9#rO~qc=2jn!Vo_S$>%A=B-A<-XV}^|qT;I`%lx|cZg5kN@ zmd3!%&Vf(x{;dlx8{d|7KP(LUJID{4opAqNc1j)c_tjQ(ybXez`rwsiR+n^;c{7iJm0!Kmdq5b#Mz;P}n!df-lzj_Ik!?5dV(ORviWSZZTkP|;a?;+v^g>7eemJZbr$$K63{ty`w~2y5r7W^! zKb=-1$7Nd$G*yyk=*5*YZ$gM6wstKod;*VetK!5}H3BiPkmDq3$(jxx9M?NgHPz(Z zG)TKwbsYq9MZ)qE6X5%}ArnrV8g`|obWMF~Q~_X#yTP|c4#n7eW{~lwHhpo%DMO%- zY_+00j%6>l#652aEz+uDUO26FtAs8{J%Iv1z~-D_UY)!fMGPr;)5WtjG!<|c0|~dQ z)Qhrqe$kl0Hf@O_`Cn(h*>5v7^^ocS(TL-HByc8%Y>aVo)DiS9<@aKrFAuh z-mpD4)8QnW%`u|8S~3nHD5a}Nj}ZGq2lThqo(@;u#j2|!k3z~@(Rhrc#>7;4DH39+ z@gw>2wa$>QaRoB(w*>=Z0Ix-j>tkz4V~}qCZo!+l(Rb2CRe}iKjWzCyZQ?WuWq@B_ zBx7}7*TP%H`)YIa^ouzH0|Bpy-G#e9*%p&(UN2DBJt=1p#f&w>(bP?`0kkdgGr`fw zCYm5%^n^xC=i^2zZ{+kitjcBti%iT?IBF@oR8pMkdlSoh5>V~ug{vWpPe0=S0cI+k zi1`&LDbqy=>0)0#;4*7mXH?Fz-j*qhh%qY*p{WteCT)K}`5ViBrW7a^Tyqhy9fN38 zajTn2IpbB%$zxJJTQw+I44E+D`6j?Hfh@k^%u1mf&z!geU54hW62MlQmik*VetHTY znHO9B29?_jG2rS`GXc-EH&xcN?)QIyfz1EsrR1ots$CXTCKSt!ljYZ}0v{Td=08io zFXE;?WTduogLo0c-1c32c8|o5hu&%&NY2DU=)m-$@|RMP<$+VY{0Dhv<*P<8opWXz zp2|Th-o@ZeV^+_9wr4YvS{J!`g-yc9nVi48kkloJsHxd#B&) zVK{llbNDx@T5{8po?Z~v45SE9PR9evgn+-vw$Y!C+i-RCo09BCRR#aBZoY2+K zVm*m#mtoQ33B6EZ;}U_JV4A4it*BEdBicGd{!ae=GxCJKjsL1~aaG4B&QfDv9{)+3 z$J1h>&@a^h(O)L;hKAXH08@nAp;=K~fCYPHJ*_}NM>wAit{w5Hf?+m|zdS}2y7*u$ zfbhgI+hkSAh$bhTA1w^F=X|UCI@!uPJeJzav8BoVLCiDxr+^LGdV?IejJIKm#!R;G z2^&usb=oj11SH+_8SdAN+e|4D7w4_=GlzXh`*qO{>1%qWj^NiP9TnAD)m@iW0!L+q%3o&;^pXqdi$2TPI2WP>z2yVE-gfwb zxpZ%+3MNlX-IJ7rq@EYRaA^Rp0wEPg87Ec6xl86Gp2KHP=Zlx7`ydt7Gc!@q0nXq@Vr?KFyxBdfo6|_CMY3dh`4dAFJKLE9@2=)~}3JQD0 zqI*bZy>-j^RHQVVv`e8~JN+hwK|>ZuPnWzDK2<1hH8@*5YL`bi3n=8L5s=duaUft} zm6J%^%k0rk9v$ZkNzCqOPLtFKF?On8L-sB%;w<=C%~|9E+GG>sJLKG&+JMwa@g6KF zCvMt3OgbKYF45tN#=Yi~QjsU9#Yt1ok&5AIi-P)+JeW58;O}K&mRN5NVr4Cw9`R{S z-BZ#iY>2C8fL&~BG6)B^!HBtv*9&pzhV|Y^NyvBAN6ai{%yvvYi{~++rUWrD-!>5? zHY^guf=azev4a7`>uMAfxVM!Q&xj%+!Qn+c_Cv$ZCt&wv{qqZVd;4wWi*vUN$qd~S z_ovc-fDaXCh&N@z*5_L)U%=ENRGuGzhi+xmu<0k6)y1S5AzdK8e zZh!^Cbco8KuM}85T)u51?hQbAK<{&ziO=`w&TlH`O7YOw#VumH+6qhroFx} z-MzG1SOn+XyOPe#k3%|T_~KO29wKveS@W0*Dec#S(7o~Q$@dBNANm_d;E_kLW6 zO{L1>PhA?8~^o4 zAt%Y0)W$kqd~}fX>e3DQNcv$5eXG2ruRuxm977+I!3Qp%kZqGs#5A74B=<9`6e4f= z16ldZd3z(J;%Do!p@-FqG%E+^VVQp7TDL8UxG#G;diyIvPMY)mL0LBPIy8m2AIXKC z%vf<`=$hXIpf)5&sz?eZkSvXu*?V-bT^eO1y#RTvjVw$Q4L?OBEZ|DFntv0`C2Y}1Y7UwCPFW1MOEGI}XgPOH5@=#O4VZEo;x^*YTzVV> ze_Hg(Busd7%SHRsODH>(3bs+EMLqh2s}i_$s?>wI#2MqqoW@DpsF8L#o3N`m+qOL) zZ29`bS$R)cLf?b=p`vb58yoFDYr`UJrl_WscQH%i3SCd8l^c|24{XWpC7rP_#A$k6 zK)=)0OyF{D%r_ILm=>}-ImBrh&Pni^2nS6Al21s=sbI2)I-55%e;mV_bzAx0B}rxK zyf5}+;-zTl;e<=**W;i+xckI$eQV%q<32OqLHyo!)SYhb+fv|JZRfyu)yC-C4cmV8 zR^nxqapeA_{69Lt;vxEzTuVl9;~}|(4hT~#S01TpbTOw+?{@jA@p_wodU1T9!l7v^ zO6QgSBK0N^LFT;oqxo9+LgjxghiEeX?=Y^MG92&MS0=XUtFWZKqf!)N=C$S7{kau& zXSSjZU$!>uGQvQE@p3eV!`&zXKmBd5HU`?V46D6UFJu)w;9EY@ zK%Z2T9pc`YS2&DBDq2%T;UYs&Gg-rMI(RT=$Cm2Qawf_g9ze z&4ja+7axB2SEl~bDMZX{UXh;sQh74Jn8*v~$!rV=uaaE67qH2ei~daGv8?}H>)L`@ zGY&o7GpIko+XD)$_x7nTjR2HbDR&^>;=ySXy+;*M7J-V(qj zeGCKgIoLPT_MGXD`?#K1PFw3J>h%umLE}=^Q1D@rvT1hXjtj<)QP;JTjtj+7u7ita z2GHVnQdT>CR+y;Pn5fdPwQMoT>XhfFdwdggU>NTnOh?#K|29#IFKJz4R-lh=o>SIEltUpHG_CF?pHR7X_w_qLb` zdsK=r7(6MF^2jVXR!<)~AioP?E*wPt{3R|y_7~4VW@`djDNa#=C~KJpnnY8UwcUO_ zYa>cti47!N&5pTWASBatWE4-_wE1tmx-%E+n*DIhbo8*NSKK zU46YwJKKkn`8m&bs(HN%w%oKI3X>-%2{${=5vG8kaWzXQD{3Ggg}scx@Cv1>g+dya z&*G2fosoFZBs`j9M4NV2P*OEnqa9chm6E7bZ93`E^~Fc1!@O0vx6WzD)%iZurJfnY z=Ho^`(9t-;xv)2xHwCc+Hb2%ltq%1Ms!feA-P8Yw`gasBn0X8KYSpzdJRNt z9jCRKB3de%CG54gr|>AXC6c&B)k_p_Z0@vF2;l)$#4Bg<<5!RM6=nF_VuMBw}$tB}oUAtRl-@C(y%M_>Cv&iz`@Nm@Qgv3OlrjH+4%HnmUk zaa8vQJjq8>Enf|E)U^5A3`asEUv1yY*M1CR_%JO}sB$Rs4@B5b0u_(`-H_qm$!W<0 znug?=&EL5J6j;jnfw|p3BKnH=NXV>{k~p@KiI2Q&Y+2HOffEW{8VR7pO(W@+*itrM zK?7`pGk=x0MN!h!R7WOof20~3ajk1y@)bvO8!nun7EY@S=zPCx`K$*1`9Ok0FPl4~ z`+iTKC|wU67$Hh_XS~D5O-5M{HW#2Y`%aaVLevl^E0~3gr((aB^|xdswYR!O-&&r+ zeDdV2gu%NUWp+mJ4!hz8lx?fy0y=#3*OqUphk_tiqQ57L7k%3dJvGCoDyz+1ME2d# z4@9j~^wLDtjfdQ{viMXz?`UW4a=F&?A|^X@Wx_YL@e})|@tVRF;mvc9G@(ZCdvd!z z>H63Nk6{^^w$Tg!g8@z~u(8>eW2}rFtsDrzT)@s=j}58BK(%LMQn60VjT1z;VJ2d3 zsK_eEX^OD^+DY9Hf0C8kcMikw2*lg7l7-ion$CVx3aNHA@X@Ep;e#7{FOaA4K4_@A zDoB-6pV=C2_{@v5A^Q!q#Gjili;pg_lFn*p(9R~(PDm1|?}6BXOe7uWcE=D1_E#{N zm{@8Q>mq+|ns#tI0s>2F>m%Z+B`gH;JxcT!=-0)$;z~h+%;snrPiiAae>)puD+#hF z6+@=Sp(?!eSRh)q=F-k^HEg{^#GKFy6<7}cRQzX+e_zVVDSn3cZDJDDp?3AIlT7b{ zUSh#aHkE=#;$uoNvPs4r%=ufOoN@sV6bTZJvVh1{8)RXylr+1CX6=^Ov|I)Q-D!n8 znN*xrU&)#b+2BauB|pW8?bPRtSkPM7I3oY#3Ch+hv zj80V(Ta=X4~nL+6`tC_j8z+K-0>r( z|7;bB-`A|($_YzsPyGXsXFbcuULOg0QhQA7Yd`;H8B|nb5KEem>~!nMtqZ`ser=*s zA&0U+ghb~}#h@OqM1n!z%1vC$#VM(Yn^>r@TObDs9w3Hgyvj`?V3(99W$Q5BYX8QA z&gM=#07Xmiel>{#&jlKHmB`HyCFU1nfBOnp4k!anM~#C|bDhjeE|Q_XK;9q`u+fm=;CwW|dYKt8wo_ z!W4T`sKfvEmgrYg{sZKQ0mCI_9!FVHY&?o0A%e1k=Cs}=$ znj>$(Ixfi@7PSAS#_ZcKxNH(_{B31hL-D$tR>IkjZzt>I$cV&21gL z0_7Z8xIG2uqL{P9DVFw>N_9^Z-zB|i4SF={_k~T?k|*Zv5bEDUWHr1kW3F~H|vZK8uqf)^M7_)8>9cFia^J88|tH!{5 z*hwCRBS0Jph_`8`y!E(^8^W*1LECWvrVpm5mwZh6pzIET9x%iLcLvwD!x`Dd~EX10v z_c_!3ypN6kAB{iuMeKl#DEynQ zGXD$5p&<~p)*F}Af(OIrv_54P#}_=DH!gJdg#P9D^W6i%r{0KFUNHS!Wkl|ZKv}n13Mg z`^((4ig*2sv}_;K?QVDa{8$I?Ml-%ygRilP|7QBjqDKO@XFR%3vY7P`AEA0>s;v*# z%7ln*`<0iZiR1D>hl^qVDdXp|GyYS=O5zkN<5UP=c>M2bt6~jXba{cQ+-R=H-u-&| z{+$26L#`0Fgi`4Vbb1|jqdpLApjXK1zm0yth%}X#szEo0NV{G`!t|AmS;>G^}=3j8R5erSb z`)kF2-a&mW-6uI;V_p)SES1Sf@Ok;<{{iM~_WJPu0e;@E%8pg=AWn88s3)43t@-ns zR}%<0`IJ}ni}XI{Eb_Nbg5isr9$HTx7ZVUWXO)bL%n1h+9^+FdJ?qj;x^}>Ip*jZ)A9d(d*j7?#ok?Srr(m?#n=3pB$dk_R;pU*6$Q?+C z;(3rLb}u@vNkq($XakLQnGqcbm@0eInDzbs;+|xk6f9cLM8z?O;nRAK>%b^dzS7&DQ-{&x78WWUp#euMT@NGAouBO!DOZWI@OY{&Aj zm(+<$(M?n&ln$-cUX*W{NX;|!ux?(0VULs9F_}0N9M7d#%p+88`Xos^qAeI|XeU@l ztwOd)^s{OB>h?Hgk_$SU8w3VD`512Z4)YxR0}{f_D^TM&l2g1Y1KN<`qF$Qvq_ivS z_oA_xrtW?1UO(}p5-hrF(|2R2@D4$|+&x}LbUcgp17^lvsxVd~eSz!B@o$_R%^$#O z#1c7*Z8ej8nq*#lFdRCifPO2fx5pZ@Gm8#Kgs5Q? z`_@u<^!>-Ru?d{}g=mqpxwMX~Jr$-ce83*qf;4}DbfQMHA|w%C_yD&ZepdfVc%$hv z)+epp?6+-iJ@@C49ki6wkh)q>{&0~&<>dm(CG#YuI+TKo5>6G2MP!E4u zbWKy9e8`2EwnK!4Be5gzg%I~4>OXH{z$sBN7JQDV%(t|3iT;gI%wF&YmJLbU( zo4a|6VKTka0)6vFs_#VGHU+~gmucF9*@;V#C(Rra#mU?uJA@geapP@?9x!$n38L7m zoI~QA+;?6ptr#L>S<-#qt3Mx(!9I3zU`kueCztzF-huy3IzVE|``-G*_nsXRl>^DQ zVu`P2G|5v-8^}IO`Nf#j&iAKw#O7=+%Ew$idKK~~|;MdKs^r0Ok9|YZtBp?kZPZpFP&Vs*|T!D2;=xTEF zI;dZf@HW$u3ynJxFokhlScr`ESyyAiw+j#&IA|K{M&N0g?Fi5D{{n3h^t~f7x%tj_ z_q$5@Q@WNdaAp)fq4hAI4g4WZm{Ml2IIrZB;@K1R%?Y`)^LqP8 z-gD~iT(-@0#)j~!=UQLpzNs4>l0bpAerI_5^SyFcd(L(SD`9lKe2)^g7y%$ZI^DLn zIo`_$hl}0E!d+&|z({m}#qm1;?z1$X3Z%V5mAx0>McHEzQhj6fpOaClDNi$gffj)X{Sht4w~6KLc=JHj-#O}< zMQ~R|tJ;e_n@*AFye8Hgo~+qnr>U`5>UJ8kb1?@Phnr0fD)>hIGotqQj$X6ys?<(u zRTq^LHs!E>B1Ahei7%H!93G+zDxhUM$&a6RNeDO2{+N*(Jbk#;4&HG479c7kw#90m zYFe>F-ItQ+n^V^6wP#Y-rnj1(H^>(sS}~= zLrzW=y~>@*@*Q6*ST5_jduZ8+E#5PCU=(9fQh+9L9OWoT<_#I+W%GMgi80C$@^eAl z{j_}c=!fdb43-HU=qrqD`8WjFsqKhO6%1iILz$W#V}S}8J6C70-^XNg9<1khK5|L}2%7oyp1c3*GVCg_SR8yVqe9$`37b-4C znF(d#OByU}#(=I9Be9s!WFxVF(ejYYt;nirT;~=HQF_jr0L}fZ6rK5YGyP7~)wulp z&AVGtgHAg1X^5XR-x)IkL@+5>fik2H~zI) zkl(C99Q{~HXe*&!OLn>)wc2MXTk2(gMn0-_bxS{-0dO^)D14{mu9-rs2zt4p&)77v zeTuR#*t@7N)yKf}I@&QGvTOeI^v7uVVr}XIgnhxxU?$?R6RG?Lxj(dT=pOjv=}#0; z@~s-mjR40Sc><8tFKdeDsNg7+{LW096i|R_UK!M8jTQU_S~5ACV*Gm0aXPm**QF`5 z1Z7Q1;7B6B_8t+uBv3lsy0kTaMIU6~OLc9`HMzcW6teAenbGKLw_TT3Ti21Y6Z_r_ z=@|jQTici)J&_E;R3PXPyMq4f%!?9-xBXrH8(D*XfxFaJJVc?*h&P&*?|`w%7-iKS#qPAes|5?}GZwk9cbwO=rVI4#p& zd`7u-iE^HtAdKnhyI-J3#28(9n%H9kgd2ef zs)chWc5iMpbEBE&Sj)SKm&u#f=NXsT$i(6(roGL^he8K4aP#CEZ60#5M2TI~U<*rH@UT@#tY-rbGYbsl)M?aA~4tY!_iG_FF9^yoE~yjY#H%)<#wwO9Nt`Ku&1nII$$7v4XcEB*U?S}eEN7F0gn^Fa9Ek50^+Y3S z^Y-?NwZ;HT?`e`tS#4vLBSvjIwr;*kXta@XlUd??84Nj2ad5WhMwtLV|Dh0 zqFXOJl?9P(zLSHdt9RR?0BeS9SdC4%#c;p#z5SvB7F>{>Exh(g01b-C+y|Pk?{f3u zPbG;n+e^<0vR??T9Z79jIPv}do#i_zmQ@wQdW!r7LbnQ0CLJc1uB>AhnSb0oya%*x zmN&bh^7=4_`Hd+^_A6IS8HgClg-iln{t+Ix)8^*zf!~01uv9{ z!nLAx-F~|el!hqK`m#)^UqR3$gzNd!p3){JUzzVuS=mn45ObJXoOZFDyFQ-3_D6uz zedcq$3?r}Dx@|1JT;;hvK1as|E)33Zdq324-C@5rQw`%XuKNnXwBlW%e&P${6p(HlXN#B1DznsSD zmCX6@OMQzl^eVFJ6EK_L%?Jq3mMbl*j2Rk6WclzmJQGT&@rIE5k5Ms!BzV}!8ot_o zVzx(4d}17|2Se6A?Rs|gMx$HlP1r+66fZq&WfM%_M9yjG)x$KPTvy2{ZhNY+*JWOj zmbmCB4Ed>8b>X{bf7%Ca=N(J}`pc>E4AT72D+(iqppHK?otbK%IUoM{v)^a-r60ZT z3=QqV?&#w7@olq_kEJ>LP00p_*(ghx>^&`%wbJf3%Wz&>+)d*QAHn4 z-b$UTx)_5u+zf0pe4*ru!&8VFJ)3F-V-?gczsu;_7r1&842dp;;(=MASIX&`D9cy> zF{UyT1rC|OszA95&Xc$Sr}zIlkd5;_{%;4IS}}5!YZqjXHV-`@ScEg+Ia%%N-x4kY_*;kVbHHDHvmn;2mJ%_|VNBRX9%l{G&FC5D5NR!hGcV+SL#Y^NH&yyJClZq1g052SQ zQhL}rUSZ%|(iWUk(;u8uRntWx9y%7q636j&6*9@6L7D+(x*&b+j!oTGmq68kdj_G= zQx*Va=;cts;xd8%ziDi7%YJ9t2(atIxI|d1OW_)NyYs^x|Q@IZ%s%_zRd9?7;?s5*O`NzT1nV zOG1q0qxOJ>A3B1T4wfrB`FIm)41HVZ_Sf=&c=X zKX*8Prh~KrEO0FTsz%rIyFuXmJt9*WQ+H49P-bfy>0)-fZRGM1X6VbRDZ!Xll}IS_^6uT|OtnqN^`-2e-v_mCxv^+s@MnaNE*D z*V(5i>;V*o$Mni>ncx#D`L$uT9vI6yeS^7W{-LSbn*~^6Jn;D(dieC+YEB_M$@^5` zC3wutt-xi0V>wU23KmTzCje)@(eAy9ZM#~K zH1RqFj)_aTUbq-R6Nn^o3A`0+B~_xK?EtEqRd>qZ1B#Jg+9G7^DNvZByCc6R9m7W6 zq4VKSt1#o|uN!T*;;CNc`m^3n#tSPqWz5Z0+XjQ}NIO1V8l@T6pK&crcv-BM!Ot)9dX^ zCuFyP!jCk!j;{tJI`pfyWH^uJ{f<#c0n8-I$lsW zWU!?NS5q%r?pBAb8X`mRB3{&+C6H>=eaA{-Or1J(Y)SBZ^54Yf=i5VcLm+iv_GIlW z3X*$QBN-{97-cleS!F0A_=VBDq*Yx4kl>m@O-NiuO@Ca*6*ZWG8vbiB6If6Le3Z^| zq#A5zH14f#Gz5jmW&X$d0WSb;5(E8Y2Qfbe@q>&MK<*&(2O{@zvEBC&mmHjf3bJhB z?W7m@g2=b?yq8Dp{X8S1zV?p=S(Utyp=^7#garCvU*|{a;KKqe2H>U4Z`_N%j4gxp zUmxqmyWi!`{bmn7sT=!H%WCAwoE!4_BqHz@`|GU#9_Yz-{s0-W4B>6-svOZ31-^P+ zI{>OWs+D0nW2lTh7>Y~`!D{gJ9O0!4Ym%2bR3@W^yTgq6>+oN2J%2!l)Q*$EL!09w zw=oWnp{M>t&1RhEBgeU+^SonjvRKygwwldAcKwa+TQ{dnDlJvt%rY^t)nXf4Ap#)!1aB57UNS#DO{K zUv%8|=zl^sS_6yC6RwI)ypay>>Hv@tlxJy`fXbrfZDI^fK2k}SI}mEo4Y_s1`^@SUUj-_4NT#1z;ab;7? z=;UHH+Bxn__{*%jM!n4Bbr`6OH9)JXsuR;Ho2ppfs$AI`z3?b4ZGOOvS7&#yC4(NG9Gjd1^LkIc=Fn+Q-mG zMM(37mDgnHt0<6`jI3-H>N}boxkWL8OLEz^LLUq>W%TpDRdf{HFDsJFEqdn&pXb4F z=qgXEhH@r0@{2-@a$)8qt_}~YO>T%->5DO|S}0hkD-C~F4A`j#YjVPzSOf-+UfzYJ zDbPWjMZJYM+pSe?(r*^<*Cm+hHzHGk>rNY^hDaa$`Kc-GG{NLb>jS>4x?!&79IpE* z0nTKM55F!CE%i!Cm*{wq=00U_jrT;yGb_JXiEtnrD)KO-de{Lswi~+rkh82W&9Ghc z2mgs#VxpVLyLh9Ln`Xv+!Yf7=aj~7@WYSFP6mw;S>LOVgr0G;ev;}te&@YB~`LBta zscS;`spyhot4FG-JxcC1yvfwd8p0g;;;`o{a~#ACmp#7~sPC37a02r;r0ekmN%$Gf zszN!Yw~`9J;yN^Cctg?1y?|djJDO3Uj)P9-b+^dX5j1It!Pn6$ z`%FphOmhh=_KnRza5bqPNg~c{IazZHMd2dr2iz9I&Le9O&awSZ^o%aBm(}ZwPf(+@ z!hbkopWdnTyljdoP=dhEtGqz@P2RP*He@<@Xcx)gJ`R032G>M-LN9T7T%@qSQ`SWW zp<0+y_|Qk`k!?axYc-m&BJ=ss?(c>haj*i1sXQ-*#ej3b3GkR7zkM3wa(O+AR#5$5 zgtRR5aeliI=8KYo|B5bI&b6)S3-j5e9UxC6fr$wB=b@HQE*DcEc(y#>^7{UTBr5;z z_vjCj_&@G91SptlsY$ytBhe~b^vv$#M+k_^+x_Ac**@UhZn<#3vv$8y;SoMCr2ED5 zF4U6YVkA8%T7kz>DWEC#VNl7=htN6^c$DQ3LgD>9ZDw@xOh58HUv2DhV$dJ z--VB@+u@1spc5`2(Jpi0nu;5pn%$TfvS+cL1Sd#Ms(W`HJiz25w)9klid!3p>=HPb1yzs2@BhYV>=e*8n;ht0PJ=pi4~qdgo(D!XL~ z6|7Su89N$w@w{2ylp4%!|#h*1y zxW^KFUcicR?)Licvn)wp_P^GS|sdM){la_il7} z&o1MQD(sHS_X@doS*IK$p}^;2C5^aFxGu*gzKCW}uZM^s*U9^ABy^1{Hgv+_5>p02 zm$OgYE*URb?3RgZY}1*i}E7$)U_C1rb;RzzkcyLA}RFjw_R?L$O=l)#Ho zm)1in>!S9XYJNr!pm#s?GEq?0HPlGj4zatg1`{^~_{QzdIKFlGi8}m&;6+Wgk~1Y7 zc1I0Los4|a>)|OBkwZmRQ3|5+F=$u>BsPz_8Dxm*%KUt?NQn*vId#KtXHF@gsR3vh6?OVn%x}K<(*G*^kzVMpPn;50+6irv|#*Fq1`i zy(kTmwN6MQ#g)N2nE#=7+2klV}FlKdh5|`slkWLTh7V_Wb;0_EHb8l^V`SwBar8(J$6!0#gVl zHR~#<7JR7ge-{Nlk5Ct-u9wL1X(g?EEdBUlv)KW~P!nt%tyz^jN=6Q0JiQ&&{_#j3 zxYm5R!J2e9U;2{_i)Ed!KD_?B*zF$qiyC;gB_9l)Fa#oR05REvOas>OE&3fo$89SHt!o0^ zd0c~I2fqSlNXfai;jfRtUVyej^fwbzpPD?`d?H1 zK7CpUP<`7xanC0|e?CF0+NsY>{BM~)bNY@%70a9)N(uNAqPn$*Uv9Jc3eb6feacDw zi0&po1d6>kzv6?04sA(ih#HwazNQx!M1;pKx76?o0*m^vl0%jG3<;Hq4Si=@5pP=4 zlj23raZBoD+42~_9I<5>Zl$2_g9zsMGmDuSbmJS;#hFE(6?A@|Yz9yFPGQx3zy=`f znXM*Ee(lt=U2n=|^a_XuwY{Mq){}T8dtNl`U;BZOLJL7Ayde%3HrSbfTP|Av?wg0< zY*9YjMZZAwv{;}Hqy8Vw`2{*xoxeX5<5q704)8xhX7!%0r3p*9SeB{g@(j3+*gxI} z`35lIwJy6Zz=Ooy#;#gw0PoATQ;v04l@9`Y}5Av3`Gms->W0ie{pK zYl}V~EbN*^x!-``Tc-jZk3Cqx-CK&F$j?k3xq*UA_ACzT6fwiC_~R20w9|iGM)N;M z7lh&RzqQd>dTPRYOJb|Te1zrfl=)oNA#$59J3l`1Z98a|%UoBDi6A~|Fqy3GbMt<$ z{s#P&{yY38pWaZs+qWSl<4^@2{V$hb?CzIf*Crw-)g5+{nXBwWUu;ubxc*4$mgATb zp24l9xHX;@*>NTV?AKcp@NIx?&}PXU#WK^Uus8Ly*Hv7(p~fCqqR7bRczrNe-BgL_ zJ|7HO;L?K3`^Fx)f_IU2444qGdZ&4kRCdrJ;e`VzG?_gZm^=%;Jo}X8OfuVA?P9>m zWZFsL2~dsOdPnmeP5O0Mna(fJt6S5EzVC3^FCrLz&ojy~g8i{Y;bI5?8L_V%Len@+Dko<4`o5n48tHW+n6Km;T%p1cV zeao|&6T1R%LNvEx61|{HwLGDdfchF7%2=fWQ*B!qneO1~; zG)L5kj~W>chsSmLUd%aA07<5U@ScK51DJsN4!qE}4%MPx1!}Yf=(!2GjyPS_R-UEZ z+ET_HiPF|G>NN~owy`lct!^IZv_rjTF{mwTrLN;WkR2+UT~~4E+sNl*^T`N?iUqz) zI50^abPI|op$0w@8LudZ%vGJle!qy}9K3I?es;DJHom3C{PD4f%(ZGY%5!Lz%L z#j^cV2LkMt=lw6x_moqBMeIcIy8F~od-)rnez^Ee-ne<&SbC|^CvA?tU@w(kdc_`e z1cKm45Dw&Uzq8dy1ic5rU-(THm`U)O9Qh=Hgr-1CmlTe5zFp?%4tDy+>3K+)n>I!SsV?RLK1Ex)K=YFH+{MD#lG|+Q?-MYeWBK4KA_Kpp zkV%8yPBxS1+!U>61VD&L7oEGJz)tK9KABrYoBw(2Kf!<{@o*|_@WaWW&v|IY?S0M{ z=QFi%!i{RY)^^vsKeL`a8nbSnTjJ*D;MVpk+%*J}T+XLp^evSp{UifMXyV7As{e%^ za&gVgF^`nHrmHt_;tJstw30o$QilVtx*rvsAnf655Qj!0D0U4*^QBqR(*B2STin7U9aT7>s_vmdnHwzQhnbz z*I$pHw>IzmV^a7%D?&X^x0ijUr$=k)uIo~DGDjEE%OwoPk@^G;?xxTM@^g0QCu@_X@Wmd%c3B?*G3xY5Ad4mhq+X`<2cP zEakJb7hWbmKL*gRg2u>r)DyrW%h}LqqD)CW<=()o?*nap@%3dFe)xc-LHL?Af#1I? zL0ll)y0uj`4ud)C4%5&z$&B-DwzA<&7l(>hsCx^Qlv11n!`>4OsqTw%{4X0$z*q}4CNQ*{4f8R#2`hb_jv~Fmw9H8~+3H()>iNFE%dW{ou!s0QqsI zvpN8>57N3mw5WbZ#Z?D@u!-8i!A(mb0vZsA?-O1b{sRb;#TzCE4RQ6yTs26?;G~pW zTHk#79C>|lAo_(FE(pq;2SFK&gIC^#LehF~#L3oCK zTmhUYhE+rq{S z^Q8O%jqx;rgtJGKsI+n_-JEj2C0Uu%8CTsid|jz(kVinm8*RglglBlzD^9Vd@1n^w zKsT+~P4}N~>(=qnv&c9Po~K7I`*6yQIFCzzQ@(Ruz@>bi+@tU*8R?}RmHNtvq2s1)xu4{frvy83fcXrbf2 z)@p5QXU7gDi{tkBUo1d6c&9L~U-vx)3@|c9pz4m=k-vZ{yI$vINJn&byx_8KZ?yej zunDbG9RbM~2fTzUN_b^cT=?r@Nu++b)UxC+n5_SkC=>jjafM^!QW!;;NxiFnU&?(5 z{}{DjNKcr0>W>I1svIIy5lfAL9Fz{xUGE+kp@?{(he`0%m^(dW#j%q~_10Vl-Ia%E zwKA0G{$x!H_SN4FR{l>D*SGi)u^RaEpYTg>2^6eI?_o5+uEV0&Gzub`t)EESndBDM)%2B>4eEmkt`uyEyJTC~9=O07NMC zpWyodbkiO*_Q1BLOA{GvQWNMKx1a4@u6};>FQ##R<;QuTm?_-&6#wkKcas2k=UD_Q z;j2#dM)fBM<_j!-ReJPy{>wGs;g$@PDVRz-74A39yK~`>hq`lq2K7g{LTlnCjt7JW zNpJmM2;VK$Lv)(Za+t)@&am(f}e5@ji(N zZ56{BRWOxqJ@{fupF`PSwMP9duS!c zU8=C)E>&)*L?6ZcP7WJ!$zc(N%J=Z9qe^`_B3eN>vLFVTU8tPH2lWPJ2Y#SXX{EG; zNIEROBWX}}2xN2)q=;6$0%4!D6lq%~4@<#22q2RLk-h(PiGpCe!MQte@OC&zBM#)( z4~pIdxzU#4J;f)Q)THZI*PP1WIwD+Wwf{{(oI58s^K&9N3J?&U{pXa-9UwI4QymX%N{)(5q4aD^!q=jF)fd_pP27TAZokO znkThDSG2S-vHwtvLk^V?SpY|w$1{S+e7hCs(Vub_s>0|q{R^~Qee#=U{LffQDf3yN zOM})g&^`mEd8Ru07bsWzERI<;4dJ_ z1j$P6iAO;7TlnWA%g*DnW-L7Ii`0qA=HSb2`4Fw|i}Kn;saXSZz6_;8n+0rxQfHN| zE2Wd*U!Z|`|6zlN@{M9g;{N$)e|C#inMa$3X}kd9!u0Y?tkmvsAf9Obi`*;x|0MUu z{Q`OC0PNoO{dzB(Qg?vyj5^Q+I0bb+WV2Yhz8>?j`*iM3H98*!v2EQVJk!j(NLisyJ6Q8h~E>OVXvf8*|%*O(2#B4=XeliE~3F{41( z8J|4Bc%DAU14_Y%B~^cc(tM8Z%h$Z8!V!E+P9_oE+AFW%7>L~F##sxZBxU0DCU{6Ci~k{G&2QNP(tA%n5tk}(!`$H^)&N`R!Ya5mfpzLu z19(_loMhvtbdNgae|lAg@7I)^j>%7i{*?;A(*ktHL+D837f3(yID6}n{=p$YhFJ03 zhd6h!E+F0@_KN@o7T#x7{srMqPSFNXu{U{{nGHoRA~~LXO&*IIHwJ zmokptS?;-}C%;^YvLYtsnVC9`m4A0J?K1;(F9DgHtQXt*{utEu@?=u^lP<8Z~1T4Y85*CvFTDGk%e$2lAGU zVwfWG+1chW;G1WP_AVvr?hGBR5W?=5ROW=lSF|0l!Zd({4N&55g+(94o@uG>6VO$q zdCH&B-aUKX>dkT$8{PNw74Q@)VSoS*knLKqC4g2e&6< z_@ifOKX0S2VDADZ4k*I(TpFzbf;J0F(Z1V*aFB%soz}4J0#yGR6(*nQl;5?ddb2Ty zz_|^|oK-t(VU5L(^`a()@a1+#=f56j(Rf9K32!1+o}u3J>=9%7{c_BYbxK#GEY6AK zeSh9UPo4yEW(_o7lr_HZKdE_|iLjpLY{hDg?)b-s`s!g+{yI16H4o#XXjC;1iPXl| zGeKBSm2`8A?wv!zv6MH6}*qqq5ZQHi(XU~1k{XOp=@cz`Fy}P@* zs#e#k3#)%Ae3wLo!-E3>0YUsGC8h)d0yYZ*0-6W|2KO=RJ9Q;f7~Ynbo&MhR2Jg(ry5xw6ifS1m zfq?-F@FOPv=OBjysQ*Tz^z*+z|2ddJ1bGa3|L6Qae>8{+Cx@O_CB{O4iU^~iK>R%< zhpvJDUn|50e878_kgRFG{r5ER0Bl6y|Nln1)?LMQHDlZA-=+EYWdD6y6#*DjV7F^9 z@Ju%+LKkPgjwS~W`ad20dx`%ssR0|Kk;?%~rc*?83L`Bk)&C~pHnhvVfkn{lL%KCN z4pUwG4#BwQs%=q{72|*RYZ7O3hvHS1j|i3R-%b^Uh&h<-7ZHF z5iHC@c1Xyqu<;Mt|N6X4lKnF{#Vû>B@=TdS*K6X{UW3E18Qhbo&VNoZVP{<7( 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 z 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Þ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 diff --git a/component/pear/css/module/frame.css b/component/pear/css/module/frame.css index 09a1423..e916acf 100644 --- a/component/pear/css/module/frame.css +++ b/component/pear/css/module/frame.css @@ -1,8 +1,8 @@ .pear-frame { width: 100%; - height: 100%; position: relative; - overflow: hidden; + overflow-y: auto; + height: 100%; } .pear-frame .dot { @@ -15,15 +15,6 @@ 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 { height: 40px; line-height: 40px; diff --git a/component/pear/css/module/layout.css b/component/pear/css/module/layout.css index 9c4d082..000f1e0 100644 --- a/component/pear/css/module/layout.css +++ b/component/pear/css/module/layout.css @@ -1,7 +1,9 @@ .pear-container { - margin: 10px; - background-color: whitesmoke; - width: calc(100vw - 20px); + padding: 10px; + margin: 0px; + box-sizing: border-box; + background-color: whitesmoke; + width: 100%; } body::-webkit-scrollbar { diff --git a/component/pear/css/module/tab.css b/component/pear/css/module/tab.css index 3161f3e..4f9e5a9 100644 --- a/component/pear/css/module/tab.css +++ b/component/pear/css/module/tab.css @@ -9,6 +9,7 @@ } .pear-tab .layui-tab-content .layui-tab-item { + overflow-y: auto; height: 100%; } diff --git a/component/pear/css/module/table.css b/component/pear/css/module/table.css deleted file mode 100644 index a3c7210..0000000 --- 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/treetable.css b/component/pear/css/module/treetable.css deleted file mode 100644 index da849b8..0000000 --- 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 c43e364..d50f24f 100644 --- a/component/pear/css/pear.css +++ b/component/pear/css/pear.css @@ -4,7 +4,6 @@ @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"); @@ -14,7 +13,6 @@ @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"); diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index b829933..7e55066 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -1,98 +1,152 @@ -layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'menu', 'frame', 'theme', 'convert','fullscreen'], - function(exports) { +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; + fullscreen = layui.fullscreen; var bodyFrame; var sideMenu; var bodyTab; var config; - var logout = function() {}; + var logout = function () { }; var msgInstance; var body = $('body'); - var pearAdmin = new function() { + var pearAdmin = new function () { - var configType = 'yml'; - var configPath = 'pear.config.yml'; + this.configuration = {}; - 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.configurationPath = "pear.config.yml"; + + /** + * @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 { + resolve(yaml.load(this.configurationPath)); + } + }) } - this.readConfig = function() { - if (configType === "yml") { - return yaml.load(configPath); + /** + * @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) { + this.renderFramework(options); } else { - var data; - $.ajax({ - url: configPath, - type: 'get', - dataType: 'json', - async: false, - success: function(result) { - data = result; - } + this.configurationProvider().then((result) => { + this.renderFramework(result); }) - return data; } } - this.messageRender = function(option) { - var option = { - elem: '.message', - url: option.header.message, - height: '250px' - }; - msgInstance = message.render(option); + /** + * @since Pear Admin 4.0 + */ + this.renderFramework = (options) => { + + this.renderInformation(options.information); + + this.renderMenu(options); + + this.renderContent(options); + + // + + + // TODO 机制 + $(".loader-main").fadeOut(360, () => { + $(".loader-main").remove(); + }); } - this.logoRender = function(param) { - $(".layui-logo .logo").attr("src", param.logo.image); - $(".layui-logo .title").html(param.logo.title); + /** + * @since Pear Admin 4.0 + * + * 初始化 Web information 网站信息 + */ + this.renderInformation = (informationOptions) => { + const $logo = $(".pear-admin .layui-logo .logo"); + if(informationOptions && informationOptions.logo) { + $logo.attr("src", informationOptions.logo); + } + const $text = $(".pear-admin .layui-logo .text"); + if(informationOptions && informationOptions.name) { + $text.html(informationOptions.name); + } } - this.menuRender = function(param) { + this.renderMenu = (param) => { + + const isControl = filterStorage("control", param, param.menu.control); + sideMenu = pearMenu.render({ - elem: 'sideMenu', + elem: 'menu', 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 + control: isControl == true ? 'control' : false, controlWidth: param.menu.controlWidth, - defaultMenu: 0, accordion: param.menu.accordion, url: param.menu.data, data: param.menu.data, parseData: false, - change: function() { + change: function () { compatible(); }, - done: function() { + done: function () { sideMenu.isCollapse = param.menu.collapse; sideMenu.selectItem(param.menu.select); pearAdmin.collapse(param); @@ -100,11 +154,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm }); } - this.bodyRender = function(param) { - - body.on("click", ".refresh", function() { - refresh(); - }) + this.renderContent = function (param) { if (isMuiltTab(param) === "true" || isMuiltTab(param) === true) { bodyTab = pearTab.render({ @@ -117,7 +167,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm index: 0, tabMax: param.tab.max, preload: param.tab.preload, - closeEvent: function(id) { + closeEvent: function (id) { sideMenu.selectItem(id); }, data: [{ @@ -126,9 +176,9 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm title: param.tab.index.title, close: false }], - success: function(id) { + success: function (id) { if (param.tab.session) { - setTimeout(function() { + setTimeout(function () { sideMenu.selectItem(id); bodyTab.positionTab(); }, 500) @@ -136,7 +186,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm } }); - bodyTab.click(function(id) { + bodyTab.click(function (id) { if (!param.tab.keepState) { bodyTab.refresh(false); } @@ -144,17 +194,22 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm 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); + 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, + url: data.menuUrl, + icon: data.menuIcon, + close: true + }, 300); + } compatible(); }) } else { + bodyFrame = pearFrame.render({ elem: 'content', title: '首页', @@ -163,21 +218,39 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm height: '100%' }); - sideMenu.click(function(dom, data) { - bodyFrame.changePage(data.menuUrl, true); + 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(data.menuUrl, true); + } compatible() }) } } - this.keepLoad = function(param) { - compatible() - setTimeout(function() { - $(".loader-main").fadeOut(200); - }, param.other.keepLoad) + 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); + } + } + + this.messageRender = function (option) { + var option = { + elem: '.message', + url: option.header.message, + height: '250px' + }; + msgInstance = message.render(option); } - this.themeRender = function(option) { + this.themeRender = function (option) { if (option.theme.allowCustom === false) { $(".setting").remove(); } @@ -243,9 +316,9 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm } var footer = localStorage.getItem("footer"); - if( footer === null) { + if (footer === null) { footer = option.other.footer; - }else{ + } else { if (option.theme.allowCustom === false) { footer = option.other.footer; } @@ -264,7 +337,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm this.footer(footer); } - this.footer = function(footer){ + this.footer = function (footer) { var bodyDOM = $(".pear-admin .layui-body"); var footerDOM = $(".pear-admin .layui-footer"); if (footer === true || footer === "true") { @@ -276,7 +349,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm } } - this.bannerSkin = function(theme) { + this.bannerSkin = function (theme) { var pearAdmin = $(".pear-admin"); pearAdmin.removeClass("banner-layout"); if (theme === true || theme === "true") { @@ -284,7 +357,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm } } - this.collapse = function(param) { + this.collapse = function (param) { if (param.menu.collapse) { if ($(window).width() >= 768) { collapse() @@ -292,128 +365,29 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm } } - this.menuSkin = function(theme) { + 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) { + 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) { + this.logout = function (callback) { logout = callback; } - this.message = function(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() { @@ -425,7 +399,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm refreshA.addClass("layui-icon-loading"); if (isMuiltTab(config) === "true" || isMuiltTab(config) === true) bodyTab.refresh(true); else bodyFrame.refresh(true); - setTimeout(function() { + setTimeout(function () { refreshA.addClass("layui-icon-refresh-1"); refreshA.removeClass("layui-anim"); refreshA.removeClass("layui-anim-rotate"); @@ -452,13 +426,29 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm } } - body.on("click", ".logout", function() { - if (logout() && bodyTab) { + /** + * @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() { + body.on("click", ".collapse,.pear-cover", function () { collapse(); }); @@ -512,7 +502,6 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm return tiledMenus; } - // 创建搜索列表 var createList = function (data) { var _listHtml = ''; $.each(data, function (index, item) { @@ -525,19 +514,19 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm } var _html = [ - '

' + `` ].join(''); layer.open({ @@ -550,7 +539,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm anim: 0, move: false, content: _html, - success: function(layero,layeridx){ + success: function (layero, layeridx) { var $layer = layero; var $content = $(layero).children('.layui-layer-content'); var $input = $(".menu-search-input-wrapper input"); @@ -562,16 +551,16 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm $layer.css("border-radius", "6px"); $input.off("focus").focus(); // 搜索菜单 - $input.off("input").on("input", debounce(function(){ + $input.off("input").on("input", debounce(function () { var keywords = $input.val().trim(); var filteredMenus = filterHandle(menuData, keywords); - if(filteredMenus.length){ + if (filteredMenus.length) { var tiledMenus = tiledHandle(filteredMenus); var listHtml = createList(tiledMenus); $noData.css("display", "none"); $list.html("").append(listHtml).children(":first").addClass("this") - }else{ + } else { $list.html(""); $noData.css("display", "flex"); } @@ -589,7 +578,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm var menuType = $(this).attr("smenu-type"); var openableWindow = menuType === "1" || menuType === 1; - if(sideMenu.isCollapse){ + if (sideMenu.isCollapse) { collapse(); } if (openableWindow) { @@ -604,7 +593,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm $list.off('mouseenter').on("mouseenter", "li", function () { $(".menu-search-list li.this").removeClass("this"); $(this).addClass("this"); - }).off("mouseleave").on("mouseleave", "li", function(){ + }).off("mouseleave").on("mouseleave", "li", function () { $(this).removeClass("this"); }) @@ -628,25 +617,25 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm } compatible(); layer.close(layeridx); - }else if(e.keyCode === 38){ + } 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){ + if (prevEl.length !== 0) { prevEl.addClass("this"); - }else{ + } else { $list.children().last().addClass("this"); } - }else if(e.keyCode === 40){ + } 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){ + if (nextEl.length !== 0) { nextEl.addClass("this"); - }else{ + } else { $list.children().first().addClass("this"); } - }else if(e.keyCode === 27){ + } else if (e.keyCode === 27) { e.preventDefault(); layer.close(layeridx); } @@ -656,19 +645,19 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm }); - body.on("click", ".fullScreen", function() { + body.on("click", ".fullScreen", function () { if ($(this).hasClass("layui-icon-screen-restore")) { - fullscreen.fullClose().then(function() { + fullscreen.fullClose().then(function () { $(".fullScreen").eq(0).removeClass("layui-icon-screen-restore"); }); } else { - fullscreen.fullScreen().then(function() { + fullscreen.fullScreen().then(function () { $(".fullScreen").eq(0).addClass("layui-icon-screen-restore"); }); } }); - body.on("click", '[user-menu-id]', function() { + body.on("click", '[user-menu-id]', function () { if (isMuiltTab(config) === "true" || isMuiltTab(config) === true) { bodyTab.addTabOnly({ id: $(this).attr("user-menu-id"), @@ -682,7 +671,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm } }); - body.on("click", ".setting", function() { + body.on("click", ".setting", function () { var menuItem = '
  • ' + @@ -724,28 +713,33 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm '' + '
  • '; + headItem += + '
  • ' + + '' + + '
    ' + + '
    ' + + '
    ' + + '
  • '; + var headHtml = '
    \n' + - '
    顶部风格
    \n' + + '
    顶栏风格
    \n' + '
    \n' + '
      \n' + headItem + '
    \n' + '
    \n' + '
    '; var moreItem = - '
    菜单
    '; + '
    菜单分割
    '; moreItem += - '
    视图
    '; + '
    多选项卡
    '; moreItem += - '
    通栏
    '; + '
    通栏布局
    '; moreItem += - '
    通色
    '; - - moreItem += - '
    页脚
    '; + '
    开启页脚
    '; var moreHtml = '
    \n' + '
    更多设置
    \n' + @@ -766,7 +760,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm skin: 'layer-anim-right', move: false, content: menuHtml + headHtml + buildColorHtml() + moreHtml, - success: function(layero, index) { + success: function (layero, index) { form.render(); @@ -789,31 +783,31 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm $("[data-select-header='" + header + "']").addClass("layui-this"); } - $('#layui-layer-shade' + index).click(function() { + $('#layui-layer-shade' + index).click(function () { var $layero = $('#layui-layer' + index); $layero.animate({ left: $layero.offset().left + $layero.width() - }, 200, function() { + }, 200, function () { layer.close(index); }); }) - form.on('switch(control)', function(data) { + form.on('switch(control)', function (data) { localStorage.setItem("control", this.checked); window.location.reload(); }) - form.on('switch(muilt-tab)', function(data) { + form.on('switch(muilt-tab)', function (data) { localStorage.setItem("muilt-tab", this.checked); window.location.reload(); }) - form.on('switch(auto-head)', function(data) { + form.on('switch(auto-head)', function (data) { localStorage.setItem("auto-head", this.checked); pearTheme.changeTheme(window, this.checked); }) - form.on('switch(banner)', function(data) { + form.on('switch(banner)', function (data) { localStorage.setItem("theme-banner", this.checked); pearAdmin.bannerSkin(this.checked); }) @@ -841,12 +835,6 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm $('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 { @@ -858,7 +846,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm }); }); - body.on('click', '[data-select-bgcolor]', function() { + body.on('click', '[data-select-bgcolor]', function () { var theme = $(this).attr('data-select-bgcolor'); $('[data-select-bgcolor]').removeClass("layui-this"); $(this).addClass("layui-this"); @@ -866,15 +854,22 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm pearAdmin.menuSkin(theme); }); - body.on('click', '[data-select-header]', function() { + 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); + if (theme == "auto-theme") { + localStorage.setItem("auto-head", true); + pearTheme.changeTheme(window, true); + } else { + localStorage.setItem("auto-head", false); + pearTheme.changeTheme(window, false); + } pearAdmin.headerSkin(theme); }); - body.on('click', '.select-color-item', function() { + 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"); @@ -900,14 +895,14 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm function getColorById(id) { var color; var flag = false; - $.each(config.colors, function(i, value) { + $.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) { + $.each(config.colors, function (i, value) { if (value.id === config.theme.defaultColor) { color = value; } @@ -918,11 +913,11 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm function buildColorHtml() { var colors = ""; - $.each(config.colors, function(i, value) { + $.each(config.colors, function (i, value) { colors += ""; }) - return "
    主题配色
    " + + return "
    主题颜色
    " + colors + "
    " } @@ -932,6 +927,19 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm } } + /** + * @since Pear Admin 4.0 + */ + function filterStorage (optionName, options, optionValue) { + if (options.theme.allowCustom) { + const storageValue = localStorage.getItem(optionName); + if(optionValue != undefined && optionValue != null) { + return storageValue; + } + } + return optionValue; + } + function isControl(option) { if (option.theme.allowCustom) { if (localStorage.getItem("control") != null) { @@ -968,7 +976,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm } } - window.onresize = function() { + window.onresize = function () { if (!fullscreen.isFullscreen()) { $(".fullScreen").eq(0).removeClass("layui-icon-screen-restore"); } @@ -978,7 +986,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm if (sideMenu && !sideMenu.isCollapse && $(window).width() <= 768) { collapse(); } - },50)); + }, 50)); function debounce(fn, awaitTime) { var timerID = null diff --git a/component/pear/module/darkreader.js b/component/pear/module/darkreader.js new file mode 100644 index 0000000..c8eaa60 --- /dev/null +++ b/component/pear/module/darkreader.js @@ -0,0 +1,7579 @@ +/** + * Dark Reader v4.9.58 + * https://darkreader.org/ + */ + +(function (global, factory) { + typeof exports === "object" && typeof module !== "undefined" + ? factory(exports) + : typeof define === "function" && define.amd + ? define(["exports"], factory) + : ((global = + typeof globalThis !== "undefined" ? globalThis : global || self), + factory((global.DarkReader = {}))); +})(this, function (exports) { + "use strict"; + + /****************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + + 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); + }; + + function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P + ? value + : new P(function (resolve) { + resolve(value); + }); + } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done + ? resolve(result.value) + : adopt(result.value).then(fulfilled, rejected); + } + step( + (generator = generator.apply(thisArg, _arguments || [])).next() + ); + }); + } + + function __generator(thisArg, body) { + var _ = { + label: 0, + sent: function () { + if (t[0] & 1) throw t[1]; + return t[1]; + }, + trys: [], + ops: [] + }, + f, + y, + t, + g; + return ( + (g = {next: verb(0), throw: verb(1), return: verb(2)}), + typeof Symbol === "function" && + (g[Symbol.iterator] = function () { + return this; + }), + g + ); + function verb(n) { + return function (v) { + return step([n, v]); + }; + } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) + try { + if ( + ((f = 1), + y && + (t = + op[0] & 2 + ? y["return"] + : op[0] + ? y["throw"] || + ((t = y["return"]) && t.call(y), 0) + : y.next) && + !(t = t.call(y, op[1])).done) + ) + return t; + if (((y = 0), t)) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: + case 1: + t = op; + break; + case 4: + _.label++; + return {value: op[1], done: false}; + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + case 7: + op = _.ops.pop(); + _.trys.pop(); + continue; + default: + if ( + !((t = _.trys), + (t = t.length > 0 && t[t.length - 1])) && + (op[0] === 6 || op[0] === 2) + ) { + _ = 0; + continue; + } + if ( + op[0] === 3 && + (!t || (op[1] > t[0] && op[1] < t[3])) + ) { + _.label = op[1]; + break; + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + if (t && _.label < t[2]) { + _.label = t[2]; + _.ops.push(op); + break; + } + if (t[2]) _.ops.pop(); + _.trys.pop(); + continue; + } + op = body.call(thisArg, _); + } catch (e) { + op = [6, e]; + y = 0; + } finally { + f = t = 0; + } + if (op[0] & 5) throw op[1]; + return {value: op[0] ? op[1] : void 0, done: true}; + } + } + + function __values(o) { + var s = typeof Symbol === "function" && Symbol.iterator, + m = s && o[s], + i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") + return { + next: function () { + if (o && i >= o.length) o = void 0; + return {value: o && o[i++], done: !o}; + } + }; + throw new TypeError( + s ? "Object is not iterable." : "Symbol.iterator is not defined." + ); + } + + function __read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), + r, + ar = [], + e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) + ar.push(r.value); + } catch (error) { + e = {error: error}; + } finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } finally { + if (e) throw e.error; + } + } + return ar; + } + + function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) + for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); + } + + var MessageType; + (function (MessageType) { + MessageType["UI_GET_DATA"] = "ui-get-data"; + MessageType["UI_SUBSCRIBE_TO_CHANGES"] = "ui-subscribe-to-changes"; + MessageType["UI_UNSUBSCRIBE_FROM_CHANGES"] = + "ui-unsubscribe-from-changes"; + MessageType["UI_CHANGE_SETTINGS"] = "ui-change-settings"; + MessageType["UI_SET_THEME"] = "ui-set-theme"; + MessageType["UI_SET_SHORTCUT"] = "ui-set-shortcut"; + MessageType["UI_TOGGLE_ACTIVE_TAB"] = "ui-toggle-active-tab"; + MessageType["UI_MARK_NEWS_AS_READ"] = "ui-mark-news-as-read"; + MessageType["UI_MARK_NEWS_AS_DISPLAYED"] = "ui-mark-news-as-displayed"; + MessageType["UI_LOAD_CONFIG"] = "ui-load-config"; + MessageType["UI_APPLY_DEV_DYNAMIC_THEME_FIXES"] = + "ui-apply-dev-dynamic-theme-fixes"; + MessageType["UI_RESET_DEV_DYNAMIC_THEME_FIXES"] = + "ui-reset-dev-dynamic-theme-fixes"; + MessageType["UI_APPLY_DEV_INVERSION_FIXES"] = + "ui-apply-dev-inversion-fixes"; + MessageType["UI_RESET_DEV_INVERSION_FIXES"] = + "ui-reset-dev-inversion-fixes"; + MessageType["UI_APPLY_DEV_STATIC_THEMES"] = + "ui-apply-dev-static-themes"; + MessageType["UI_RESET_DEV_STATIC_THEMES"] = + "ui-reset-dev-static-themes"; + MessageType["UI_SAVE_FILE"] = "ui-save-file"; + MessageType["UI_REQUEST_EXPORT_CSS"] = "ui-request-export-css"; + MessageType["UI_COLOR_SCHEME_CHANGE"] = "ui-color-scheme-change"; + MessageType["BG_CHANGES"] = "bg-changes"; + MessageType["BG_ADD_CSS_FILTER"] = "bg-add-css-filter"; + MessageType["BG_ADD_STATIC_THEME"] = "bg-add-static-theme"; + MessageType["BG_ADD_SVG_FILTER"] = "bg-add-svg-filter"; + MessageType["BG_ADD_DYNAMIC_THEME"] = "bg-add-dynamic-theme"; + MessageType["BG_EXPORT_CSS"] = "bg-export-css"; + MessageType["BG_UNSUPPORTED_SENDER"] = "bg-unsupported-sender"; + MessageType["BG_CLEAN_UP"] = "bg-clean-up"; + MessageType["BG_RELOAD"] = "bg-reload"; + MessageType["BG_FETCH_RESPONSE"] = "bg-fetch-response"; + MessageType["BG_UI_UPDATE"] = "bg-ui-update"; + MessageType["BG_CSS_UPDATE"] = "bg-css-update"; + MessageType["CS_COLOR_SCHEME_CHANGE"] = "cs-color-scheme-change"; + MessageType["CS_FRAME_CONNECT"] = "cs-frame-connect"; + MessageType["CS_FRAME_FORGET"] = "cs-frame-forget"; + MessageType["CS_FRAME_FREEZE"] = "cs-frame-freeze"; + MessageType["CS_FRAME_RESUME"] = "cs-frame-resume"; + MessageType["CS_EXPORT_CSS_RESPONSE"] = "cs-export-css-response"; + MessageType["CS_FETCH"] = "cs-fetch"; + MessageType["CS_DARK_THEME_DETECTED"] = "cs-dark-theme-detected"; + MessageType["CS_DARK_THEME_NOT_DETECTED"] = + "cs-dark-theme-not-detected"; + MessageType["CS_LOG"] = "cs-log"; + })(MessageType || (MessageType = {})); + + var isNavigatorDefined = typeof navigator !== "undefined"; + var userAgent = isNavigatorDefined + ? navigator.userAgentData && + Array.isArray(navigator.userAgentData.brands) + ? navigator.userAgentData.brands + .map(function (brand) { + return "" + .concat(brand.brand.toLowerCase(), " ") + .concat(brand.version); + }) + .join(" ") + : navigator.userAgent.toLowerCase() + : "some useragent"; + var platform = isNavigatorDefined + ? navigator.userAgentData && + typeof navigator.userAgentData.platform === "string" + ? navigator.userAgentData.platform.toLowerCase() + : navigator.platform.toLowerCase() + : "some platform"; + var isChromium = + userAgent.includes("chrome") || userAgent.includes("chromium"); + var isThunderbird = userAgent.includes("thunderbird"); + var isFirefox = + userAgent.includes("firefox") || + userAgent.includes("librewolf") || + isThunderbird; + userAgent.includes("vivaldi"); + userAgent.includes("yabrowser"); + userAgent.includes("opr") || userAgent.includes("opera"); + userAgent.includes("edg"); + var isSafari = userAgent.includes("safari") && !isChromium; + var isWindows = platform.startsWith("win"); + var isMacOS = platform.startsWith("mac"); + isNavigatorDefined && navigator.userAgentData + ? navigator.userAgentData.mobile + : userAgent.includes("mobile"); + var isShadowDomSupported = typeof ShadowRoot === "function"; + var isMatchMediaChangeEventListenerSupported = + typeof MediaQueryList === "function" && + typeof MediaQueryList.prototype.addEventListener === "function"; + (function () { + var m = userAgent.match(/chrom(?:e|ium)(?:\/| )([^ ]+)/); + if (m && m[1]) { + return m[1]; + } + return ""; + })(); + (function () { + var m = userAgent.match(/(?:firefox|librewolf)(?:\/| )([^ ]+)/); + if (m && m[1]) { + return m[1]; + } + return ""; + })(); + var isDefinedSelectorSupported = (function () { + try { + document.querySelector(":defined"); + return true; + } catch (err) { + return false; + } + })(); + var isCSSColorSchemePropSupported = (function () { + if (typeof document === "undefined") { + return false; + } + var el = document.createElement("div"); + el.setAttribute("style", "color-scheme: dark"); + return el.style && el.style.colorScheme === "dark"; + })(); + + function getOKResponse(url, mimeType, origin) { + return __awaiter(this, void 0, void 0, function () { + var response; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + return [ + 4, + fetch(url, { + cache: "force-cache", + credentials: "omit", + referrer: origin + }) + ]; + case 1: + response = _a.sent(); + if ( + isFirefox && + mimeType === "text/css" && + url.startsWith("moz-extension://") && + url.endsWith(".css") + ) { + return [2, response]; + } + if ( + mimeType && + !response.headers + .get("Content-Type") + .startsWith(mimeType) + ) { + throw new Error( + "Mime type mismatch when loading ".concat(url) + ); + } + if (!response.ok) { + throw new Error( + "Unable to load " + .concat(url, " ") + .concat(response.status, " ") + .concat(response.statusText) + ); + } + return [2, response]; + } + }); + }); + } + function loadAsDataURL(url, mimeType) { + return __awaiter(this, void 0, void 0, function () { + var response; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + return [4, getOKResponse(url, mimeType)]; + case 1: + response = _a.sent(); + return [4, readResponseAsDataURL(response)]; + case 2: + return [2, _a.sent()]; + } + }); + }); + } + function readResponseAsDataURL(response) { + return __awaiter(this, void 0, void 0, function () { + var blob, dataURL; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + return [4, response.blob()]; + case 1: + blob = _a.sent(); + return [ + 4, + new Promise(function (resolve) { + var reader = new FileReader(); + reader.onloadend = function () { + return resolve(reader.result); + }; + reader.readAsDataURL(blob); + }) + ]; + case 2: + dataURL = _a.sent(); + return [2, dataURL]; + } + }); + }); + } + + var throwCORSError = function (url) { + return __awaiter(void 0, void 0, void 0, function () { + return __generator(this, function (_a) { + return [ + 2, + Promise.reject( + new Error( + [ + "Embedded Dark Reader cannot access a cross-origin resource", + url, + "Overview your URLs and CORS policies or use", + "`DarkReader.setFetchMethod(fetch: (url) => Promise))`.", + "See if using `DarkReader.setFetchMethod(window.fetch)`", + "before `DarkReader.enable()` works." + ].join(" ") + ) + ) + ]; + }); + }); + }; + var fetcher = throwCORSError; + function setFetchMethod$1(fetch) { + if (fetch) { + fetcher = fetch; + } else { + fetcher = throwCORSError; + } + } + function callFetchMethod(url) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + return [4, fetcher(url)]; + case 1: + return [2, _a.sent()]; + } + }); + }); + } + + if (!window.chrome) { + window.chrome = {}; + } + if (!chrome.runtime) { + chrome.runtime = {}; + } + var messageListeners = new Set(); + function sendMessage() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return __awaiter(this, void 0, void 0, function () { + var id_1, _a, url, responseType, response, text_1, error_1; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!(args[0] && args[0].type === MessageType.CS_FETCH)) + return [3, 8]; + id_1 = args[0].id; + _b.label = 1; + case 1: + _b.trys.push([1, 7, , 8]); + (_a = args[0].data), + (url = _a.url), + (responseType = _a.responseType); + return [4, callFetchMethod(url)]; + case 2: + response = _b.sent(); + if (!(responseType === "data-url")) return [3, 4]; + return [4, readResponseAsDataURL(response)]; + case 3: + text_1 = _b.sent(); + return [3, 6]; + case 4: + return [4, response.text()]; + case 5: + text_1 = _b.sent(); + _b.label = 6; + case 6: + messageListeners.forEach(function (cb) { + return cb({ + type: MessageType.BG_FETCH_RESPONSE, + data: text_1, + error: null, + id: id_1 + }); + }); + return [3, 8]; + case 7: + error_1 = _b.sent(); + console.error(error_1); + messageListeners.forEach(function (cb) { + return cb({ + type: MessageType.BG_FETCH_RESPONSE, + data: null, + error: error_1, + id: id_1 + }); + }); + return [3, 8]; + case 8: + return [2]; + } + }); + }); + } + function addMessageListener(callback) { + messageListeners.add(callback); + } + if (typeof chrome.runtime.sendMessage === "function") { + var nativeSendMessage_1 = chrome.runtime.sendMessage; + chrome.runtime.sendMessage = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + sendMessage.apply(void 0, __spreadArray([], __read(args), false)); + nativeSendMessage_1.apply(chrome.runtime, args); + }; + } else { + chrome.runtime.sendMessage = sendMessage; + } + if (!chrome.runtime.onMessage) { + chrome.runtime.onMessage = {}; + } + if (typeof chrome.runtime.onMessage.addListener === "function") { + var nativeAddListener_1 = chrome.runtime.onMessage.addListener; + chrome.runtime.onMessage.addListener = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + addMessageListener(args[0]); + nativeAddListener_1.apply(chrome.runtime.onMessage, args); + }; + } else { + chrome.runtime.onMessage.addListener = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return addMessageListener(args[0]); + }; + } + + var ThemeEngine; + (function (ThemeEngine) { + ThemeEngine["cssFilter"] = "cssFilter"; + ThemeEngine["svgFilter"] = "svgFilter"; + ThemeEngine["staticTheme"] = "staticTheme"; + ThemeEngine["dynamicTheme"] = "dynamicTheme"; + })(ThemeEngine || (ThemeEngine = {})); + + var AutomationMode; + (function (AutomationMode) { + AutomationMode["NONE"] = ""; + AutomationMode["TIME"] = "time"; + AutomationMode["SYSTEM"] = "system"; + AutomationMode["LOCATION"] = "location"; + })(AutomationMode || (AutomationMode = {})); + + var DEFAULT_COLORS = { + darkScheme: { + background: "#181a1b", + text: "#e8e6e3" + }, + lightScheme: { + background: "#dcdad7", + text: "#181a1b" + } + }; + var DEFAULT_THEME = { + mode: 1, + brightness: 100, + contrast: 100, + grayscale: 0, + sepia: 0, + useFont: false, + fontFamily: isMacOS + ? "Helvetica Neue" + : isWindows + ? "Segoe UI" + : "Open Sans", + textStroke: 0, + engine: ThemeEngine.dynamicTheme, + stylesheet: "", + darkSchemeBackgroundColor: DEFAULT_COLORS.darkScheme.background, + darkSchemeTextColor: DEFAULT_COLORS.darkScheme.text, + lightSchemeBackgroundColor: DEFAULT_COLORS.lightScheme.background, + lightSchemeTextColor: DEFAULT_COLORS.lightScheme.text, + scrollbarColor: isMacOS ? "" : "auto", + selectionColor: "auto", + styleSystemControls: !isCSSColorSchemePropSupported, + lightColorScheme: "Default", + darkColorScheme: "Default", + immediateModify: false + }; + ({ + enabled: true, + fetchNews: true, + theme: DEFAULT_THEME, + presets: [], + customThemes: [], + siteList: [], + siteListEnabled: [], + applyToListedOnly: false, + changeBrowserTheme: false, + syncSettings: true, + syncSitesFixes: false, + automation: { + enabled: false, + mode: AutomationMode.NONE, + behavior: "OnOff" + }, + time: { + activation: "18:00", + deactivation: "9:00" + }, + location: { + latitude: null, + longitude: null + }, + previewNewDesign: false, + enableForPDF: true, + enableForProtectedPages: false, + enableContextMenus: false, + detectDarkTheme: false + }); + + function isArrayLike(items) { + return items.length != null; + } + function forEach(items, iterator) { + var e_1, _a; + if (isArrayLike(items)) { + for (var i = 0, len = items.length; i < len; i++) { + iterator(items[i]); + } + } else { + try { + for ( + var items_1 = __values(items), items_1_1 = items_1.next(); + !items_1_1.done; + items_1_1 = items_1.next() + ) { + var item = items_1_1.value; + iterator(item); + } + } catch (e_1_1) { + e_1 = {error: e_1_1}; + } finally { + try { + if (items_1_1 && !items_1_1.done && (_a = items_1.return)) + _a.call(items_1); + } finally { + if (e_1) throw e_1.error; + } + } + } + } + function push(array, addition) { + forEach(addition, function (a) { + return array.push(a); + }); + } + function toArray(items) { + var results = []; + for (var i = 0, len = items.length; i < len; i++) { + results.push(items[i]); + } + return results; + } + + function logInfo() {} + function logWarn() {} + + function throttle(callback) { + var pending = false; + var frameId = null; + var lastArgs; + var throttled = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + lastArgs = args; + if (frameId) { + pending = true; + } else { + callback.apply( + void 0, + __spreadArray([], __read(lastArgs), false) + ); + frameId = requestAnimationFrame(function () { + frameId = null; + if (pending) { + callback.apply( + void 0, + __spreadArray([], __read(lastArgs), false) + ); + pending = false; + } + }); + } + }; + var cancel = function () { + cancelAnimationFrame(frameId); + pending = false; + frameId = null; + }; + return Object.assign(throttled, {cancel: cancel}); + } + function createAsyncTasksQueue() { + var tasks = []; + var frameId = null; + function runTasks() { + var task; + while ((task = tasks.shift())) { + task(); + } + frameId = null; + } + function add(task) { + tasks.push(task); + if (!frameId) { + frameId = requestAnimationFrame(runTasks); + } + } + function cancel() { + tasks.splice(0); + cancelAnimationFrame(frameId); + frameId = null; + } + return {add: add, cancel: cancel}; + } + + function getDuration(time) { + var duration = 0; + if (time.seconds) { + duration += time.seconds * 1000; + } + if (time.minutes) { + duration += time.minutes * 60 * 1000; + } + if (time.hours) { + duration += time.hours * 60 * 60 * 1000; + } + if (time.days) { + duration += time.days * 24 * 60 * 60 * 1000; + } + return duration; + } + + function removeNode(node) { + node && node.parentNode && node.parentNode.removeChild(node); + } + function watchForNodePosition(node, mode, onRestore) { + if (onRestore === void 0) { + onRestore = Function.prototype; + } + var MAX_ATTEMPTS_COUNT = 10; + var RETRY_TIMEOUT = getDuration({seconds: 2}); + var ATTEMPTS_INTERVAL = getDuration({seconds: 10}); + var prevSibling = node.previousSibling; + var parent = node.parentNode; + if (!parent) { + throw new Error( + "Unable to watch for node position: parent element not found" + ); + } + if (mode === "prev-sibling" && !prevSibling) { + throw new Error( + "Unable to watch for node position: there is no previous sibling" + ); + } + var attempts = 0; + var start = null; + var timeoutId = null; + var restore = throttle(function () { + if (timeoutId) { + return; + } + attempts++; + var now = Date.now(); + if (start == null) { + start = now; + } else if (attempts >= MAX_ATTEMPTS_COUNT) { + if (now - start < ATTEMPTS_INTERVAL) { + timeoutId = setTimeout(function () { + start = null; + attempts = 0; + timeoutId = null; + restore(); + }, RETRY_TIMEOUT); + return; + } + start = now; + attempts = 1; + } + if (mode === "parent") { + if (prevSibling && prevSibling.parentNode !== parent) { + stop(); + return; + } + } + if (mode === "prev-sibling") { + if (prevSibling.parentNode == null) { + stop(); + return; + } + if (prevSibling.parentNode !== parent) { + updateParent(prevSibling.parentNode); + } + } + parent.insertBefore( + node, + prevSibling ? prevSibling.nextSibling : parent.firstChild + ); + observer.takeRecords(); + onRestore && onRestore(); + }); + var observer = new MutationObserver(function () { + if ( + (mode === "parent" && node.parentNode !== parent) || + (mode === "prev-sibling" && + node.previousSibling !== prevSibling) + ) { + restore(); + } + }); + var run = function () { + observer.observe(parent, {childList: true}); + }; + var stop = function () { + clearTimeout(timeoutId); + observer.disconnect(); + restore.cancel(); + }; + var skip = function () { + observer.takeRecords(); + }; + var updateParent = function (parentNode) { + parent = parentNode; + stop(); + run(); + }; + run(); + return {run: run, stop: stop, skip: skip}; + } + function iterateShadowHosts(root, iterator) { + if (root == null) { + return; + } + var walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, { + acceptNode: function (node) { + return node.shadowRoot == null + ? NodeFilter.FILTER_SKIP + : NodeFilter.FILTER_ACCEPT; + } + }); + for ( + var node = root.shadowRoot ? walker.currentNode : walker.nextNode(); + node != null; + node = walker.nextNode() + ) { + if (node.classList.contains("surfingkeys_hints_host")) { + continue; + } + iterator(node); + iterateShadowHosts(node.shadowRoot, iterator); + } + } + var isDOMReady = function () { + return ( + document.readyState === "complete" || + document.readyState === "interactive" + ); + }; + function setIsDOMReady(newFunc) { + isDOMReady = newFunc; + } + var readyStateListeners = new Set(); + function addDOMReadyListener(listener) { + isDOMReady() ? listener() : readyStateListeners.add(listener); + } + function removeDOMReadyListener(listener) { + readyStateListeners.delete(listener); + } + function isReadyStateComplete() { + return document.readyState === "complete"; + } + var readyStateCompleteListeners = new Set(); + function addReadyStateCompleteListener(listener) { + isReadyStateComplete() + ? listener() + : readyStateCompleteListeners.add(listener); + } + function cleanReadyStateCompleteListeners() { + readyStateCompleteListeners.clear(); + } + if (!isDOMReady()) { + var onReadyStateChange_1 = function () { + if (isDOMReady()) { + readyStateListeners.forEach(function (listener) { + return listener(); + }); + readyStateListeners.clear(); + if (isReadyStateComplete()) { + document.removeEventListener( + "readystatechange", + onReadyStateChange_1 + ); + readyStateCompleteListeners.forEach(function (listener) { + return listener(); + }); + readyStateCompleteListeners.clear(); + } + } + }; + document.addEventListener("readystatechange", onReadyStateChange_1); + } + var HUGE_MUTATIONS_COUNT = 1000; + function isHugeMutation(mutations) { + if (mutations.length > HUGE_MUTATIONS_COUNT) { + return true; + } + var addedNodesCount = 0; + for (var i = 0; i < mutations.length; i++) { + addedNodesCount += mutations[i].addedNodes.length; + if (addedNodesCount > HUGE_MUTATIONS_COUNT) { + return true; + } + } + return false; + } + function getElementsTreeOperations(mutations) { + var additions = new Set(); + var deletions = new Set(); + var moves = new Set(); + mutations.forEach(function (m) { + forEach(m.addedNodes, function (n) { + if (n instanceof Element && n.isConnected) { + additions.add(n); + } + }); + forEach(m.removedNodes, function (n) { + if (n instanceof Element) { + if (n.isConnected) { + moves.add(n); + additions.delete(n); + } else { + deletions.add(n); + } + } + }); + }); + var duplicateAdditions = []; + var duplicateDeletions = []; + additions.forEach(function (node) { + if (additions.has(node.parentElement)) { + duplicateAdditions.push(node); + } + }); + deletions.forEach(function (node) { + if (deletions.has(node.parentElement)) { + duplicateDeletions.push(node); + } + }); + duplicateAdditions.forEach(function (node) { + return additions.delete(node); + }); + duplicateDeletions.forEach(function (node) { + return deletions.delete(node); + }); + return {additions: additions, moves: moves, deletions: deletions}; + } + var optimizedTreeObservers = new Map(); + var optimizedTreeCallbacks = new WeakMap(); + function createOptimizedTreeObserver(root, callbacks) { + var observer; + var observerCallbacks; + var domReadyListener; + if (optimizedTreeObservers.has(root)) { + observer = optimizedTreeObservers.get(root); + observerCallbacks = optimizedTreeCallbacks.get(observer); + } else { + var hadHugeMutationsBefore_1 = false; + var subscribedForReadyState_1 = false; + observer = new MutationObserver(function (mutations) { + if (isHugeMutation(mutations)) { + if (!hadHugeMutationsBefore_1 || isDOMReady()) { + observerCallbacks.forEach(function (_a) { + var onHugeMutations = _a.onHugeMutations; + return onHugeMutations(root); + }); + } else if (!subscribedForReadyState_1) { + domReadyListener = function () { + return observerCallbacks.forEach(function (_a) { + var onHugeMutations = _a.onHugeMutations; + return onHugeMutations(root); + }); + }; + addDOMReadyListener(domReadyListener); + subscribedForReadyState_1 = true; + } + hadHugeMutationsBefore_1 = true; + } else { + var elementsOperations_1 = + getElementsTreeOperations(mutations); + observerCallbacks.forEach(function (_a) { + var onMinorMutations = _a.onMinorMutations; + return onMinorMutations(elementsOperations_1); + }); + } + }); + observer.observe(root, {childList: true, subtree: true}); + optimizedTreeObservers.set(root, observer); + observerCallbacks = new Set(); + optimizedTreeCallbacks.set(observer, observerCallbacks); + } + observerCallbacks.add(callbacks); + return { + disconnect: function () { + observerCallbacks.delete(callbacks); + if (domReadyListener) { + removeDOMReadyListener(domReadyListener); + } + if (observerCallbacks.size === 0) { + observer.disconnect(); + optimizedTreeCallbacks.delete(observer); + optimizedTreeObservers.delete(root); + } + } + }; + } + + var anchor; + var parsedURLCache = new Map(); + function fixBaseURL($url) { + if (!anchor) { + anchor = document.createElement("a"); + } + anchor.href = $url; + return anchor.href; + } + function parseURL($url, $base) { + if ($base === void 0) { + $base = null; + } + var key = "".concat($url).concat($base ? ";".concat($base) : ""); + if (parsedURLCache.has(key)) { + return parsedURLCache.get(key); + } + if ($base) { + var parsedURL_1 = new URL($url, fixBaseURL($base)); + parsedURLCache.set(key, parsedURL_1); + return parsedURL_1; + } + var parsedURL = new URL(fixBaseURL($url)); + parsedURLCache.set($url, parsedURL); + return parsedURL; + } + function getAbsoluteURL($base, $relative) { + if ($relative.match(/^data\\?\:/)) { + return $relative; + } + if (/^\/\//.test($relative)) { + return "".concat(location.protocol).concat($relative); + } + var b = parseURL($base); + var a = parseURL($relative, b.href); + return a.href; + } + function isRelativeHrefOnAbsolutePath(href) { + if (href.startsWith("data:")) { + return true; + } + var url = parseURL(href); + if (url.protocol !== location.protocol) { + return false; + } + if (url.hostname !== location.hostname) { + return false; + } + if (url.port !== location.port) { + return false; + } + return url.pathname === location.pathname; + } + + function iterateCSSRules(rules, iterate, onMediaRuleError) { + forEach(rules, function (rule) { + if (rule.selectorText) { + iterate(rule); + } else if (rule.href) { + try { + iterateCSSRules( + rule.styleSheet.cssRules, + iterate, + onMediaRuleError + ); + } catch (err) { + logInfo("Found a non-loaded link."); + onMediaRuleError && onMediaRuleError(); + } + } else if (rule.media) { + var media = Array.from(rule.media); + var isScreenOrAllOrQuery = media.some(function (m) { + return ( + m.startsWith("screen") || + m.startsWith("all") || + m.startsWith("(") + ); + }); + var isPrintOrSpeech = media.some(function (m) { + return m.startsWith("print") || m.startsWith("speech"); + }); + if (isScreenOrAllOrQuery || !isPrintOrSpeech) { + iterateCSSRules(rule.cssRules, iterate, onMediaRuleError); + } + } else if (rule.conditionText) { + if (CSS.supports(rule.conditionText)) { + iterateCSSRules(rule.cssRules, iterate, onMediaRuleError); + } + } else { + logWarn("CSSRule type not supported", rule); + } + }); + } + var shorthandVarDependantProperties = [ + "background", + "border", + "border-color", + "border-bottom", + "border-left", + "border-right", + "border-top", + "outline", + "outline-color" + ]; + var shorthandVarDepPropRegexps = isSafari + ? shorthandVarDependantProperties.map(function (prop) { + var regexp = new RegExp("".concat(prop, ":\\s*(.*?)\\s*;")); + return [prop, regexp]; + }) + : null; + function iterateCSSDeclarations(style, iterate) { + forEach(style, function (property) { + var value = style.getPropertyValue(property).trim(); + if (!value) { + return; + } + iterate(property, value); + }); + var cssText = style.cssText; + if (cssText.includes("var(")) { + if (isSafari) { + shorthandVarDepPropRegexps.forEach(function (_a) { + var _b = __read(_a, 2), + prop = _b[0], + regexp = _b[1]; + var match = cssText.match(regexp); + if (match && match[1]) { + var val = match[1].trim(); + iterate(prop, val); + } + }); + } else { + shorthandVarDependantProperties.forEach(function (prop) { + var val = style.getPropertyValue(prop); + if (val && val.includes("var(")) { + iterate(prop, val); + } + }); + } + } + } + var cssURLRegex = /url\((('.*?')|(".*?")|([^\)]*?))\)/g; + var cssImportRegex = + /@import\s*(url\()?(('.+?')|(".+?")|([^\)]*?))\)? ?(screen)?;?/gi; + function getCSSURLValue(cssURL) { + return cssURL + .trim() + .replace(/[\n\r\\]+/g, "") + .replace(/^url\((.*)\)$/, "$1") + .trim() + .replace(/^"(.*)"$/, "$1") + .replace(/^'(.*)'$/, "$1") + .replace(/(?:\\(.))/g, "$1"); + } + function getCSSBaseBath(url) { + var cssURL = parseURL(url); + return "" + .concat(cssURL.origin) + .concat( + cssURL.pathname + .replace(/\?.*$/, "") + .replace(/(\/)([^\/]+)$/i, "$1") + ); + } + function replaceCSSRelativeURLsWithAbsolute($css, cssBasePath) { + return $css.replace(cssURLRegex, function (match) { + var pathValue = getCSSURLValue(match); + try { + return "url('".concat( + getAbsoluteURL(cssBasePath, pathValue), + "')" + ); + } catch (err) { + return match; + } + }); + } + var cssCommentsRegex = /\/\*[\s\S]*?\*\//g; + function removeCSSComments($css) { + return $css.replace(cssCommentsRegex, ""); + } + var fontFaceRegex = /@font-face\s*{[^}]*}/g; + function replaceCSSFontFace($css) { + return $css.replace(fontFaceRegex, ""); + } + + function evalMath(expression) { + var rpnStack = []; + var workingStack = []; + var lastToken; + for (var i = 0, len = expression.length; i < len; i++) { + var token = expression[i]; + if (!token || token === " ") { + continue; + } + if (operators.has(token)) { + var op = operators.get(token); + while (workingStack.length) { + var currentOp = operators.get(workingStack[0]); + if (!currentOp) { + break; + } + if (op.lessOrEqualThan(currentOp)) { + rpnStack.push(workingStack.shift()); + } else { + break; + } + } + workingStack.unshift(token); + } else if (!lastToken || operators.has(lastToken)) { + rpnStack.push(token); + } else { + rpnStack[rpnStack.length - 1] += token; + } + lastToken = token; + } + rpnStack.push.apply( + rpnStack, + __spreadArray([], __read(workingStack), false) + ); + var stack = []; + for (var i = 0, len = rpnStack.length; i < len; i++) { + var op = operators.get(rpnStack[i]); + if (op) { + var args = stack.splice(0, 2); + stack.push(op.exec(args[1], args[0])); + } else { + stack.unshift(parseFloat(rpnStack[i])); + } + } + return stack[0]; + } + var Operator = (function () { + function Operator(precedence, method) { + this.precendce = precedence; + this.execMethod = method; + } + Operator.prototype.exec = function (left, right) { + return this.execMethod(left, right); + }; + Operator.prototype.lessOrEqualThan = function (op) { + return this.precendce <= op.precendce; + }; + return Operator; + })(); + var operators = new Map([ + [ + "+", + new Operator(1, function (left, right) { + return left + right; + }) + ], + [ + "-", + new Operator(1, function (left, right) { + return left - right; + }) + ], + [ + "*", + new Operator(2, function (left, right) { + return left * right; + }) + ], + [ + "/", + new Operator(2, function (left, right) { + return left / right; + }) + ] + ]); + + function getMatches(regex, input, group) { + if (group === void 0) { + group = 0; + } + var matches = []; + var m; + while ((m = regex.exec(input))) { + matches.push(m[group]); + } + return matches; + } + function formatCSS(text) { + function trimLeft(text) { + return text.replace(/^\s+/, ""); + } + function getIndent(depth) { + if (depth === 0) { + return ""; + } + return " ".repeat(4 * depth); + } + if (text.length < 50000) { + var emptyRuleRegexp = /[^{}]+{\s*}/; + while (emptyRuleRegexp.test(text)) { + text = text.replace(emptyRuleRegexp, ""); + } + } + var css = text + .replace(/\s{2,}/g, " ") + .replace(/\{/g, "{\n") + .replace(/\}/g, "\n}\n") + .replace(/\;(?![^\(|\"]*(\)|\"))/g, ";\n") + .replace(/\,(?![^\(|\"]*(\)|\"))/g, ",\n") + .replace(/\n\s*\n/g, "\n") + .split("\n"); + var depth = 0; + var formatted = []; + for (var x = 0, len = css.length; x < len; x++) { + var line = "".concat(css[x], "\n"); + if (line.includes("{")) { + formatted.push(getIndent(depth++) + trimLeft(line)); + } else if (line.includes("}")) { + formatted.push(getIndent(--depth) + trimLeft(line)); + } else { + formatted.push(getIndent(depth) + trimLeft(line)); + } + } + return formatted.join("").trim(); + } + function getParenthesesRange(input, searchStartIndex) { + if (searchStartIndex === void 0) { + searchStartIndex = 0; + } + var length = input.length; + var depth = 0; + var firstOpenIndex = -1; + for (var i = searchStartIndex; i < length; i++) { + if (depth === 0) { + var openIndex = input.indexOf("(", i); + if (openIndex < 0) { + break; + } + firstOpenIndex = openIndex; + depth++; + i = openIndex; + } else { + var closingIndex = input.indexOf(")", i); + if (closingIndex < 0) { + break; + } + var openIndex = input.indexOf("(", i); + if (openIndex < 0 || closingIndex < openIndex) { + depth--; + if (depth === 0) { + return {start: firstOpenIndex, end: closingIndex + 1}; + } + i = closingIndex; + } else { + depth++; + i = openIndex; + } + } + } + return null; + } + + var hslaParseCache = new Map(); + var rgbaParseCache = new Map(); + function parseColorWithCache($color) { + $color = $color.trim(); + if (rgbaParseCache.has($color)) { + return rgbaParseCache.get($color); + } + if ($color.includes("calc(")) { + $color = lowerCalcExpression($color); + } + var color = parse($color); + color && rgbaParseCache.set($color, color); + return color; + } + function parseToHSLWithCache(color) { + if (hslaParseCache.has(color)) { + return hslaParseCache.get(color); + } + var rgb = parseColorWithCache(color); + if (!rgb) { + return null; + } + var hsl = rgbToHSL(rgb); + hslaParseCache.set(color, hsl); + return hsl; + } + function clearColorCache() { + hslaParseCache.clear(); + rgbaParseCache.clear(); + } + function hslToRGB(_a) { + var h = _a.h, + s = _a.s, + l = _a.l, + _b = _a.a, + a = _b === void 0 ? 1 : _b; + if (s === 0) { + var _c = __read( + [l, l, l].map(function (x) { + return Math.round(x * 255); + }), + 3 + ), + r_1 = _c[0], + b_1 = _c[1], + g_1 = _c[2]; + return {r: r_1, g: g_1, b: b_1, a: a}; + } + var c = (1 - Math.abs(2 * l - 1)) * s; + var x = c * (1 - Math.abs(((h / 60) % 2) - 1)); + var m = l - c / 2; + var _d = __read( + (h < 60 + ? [c, x, 0] + : h < 120 + ? [x, c, 0] + : h < 180 + ? [0, c, x] + : h < 240 + ? [0, x, c] + : h < 300 + ? [x, 0, c] + : [c, 0, x] + ).map(function (n) { + return Math.round((n + m) * 255); + }), + 3 + ), + r = _d[0], + g = _d[1], + b = _d[2]; + return {r: r, g: g, b: b, a: a}; + } + function rgbToHSL(_a) { + var r255 = _a.r, + g255 = _a.g, + b255 = _a.b, + _b = _a.a, + a = _b === void 0 ? 1 : _b; + var r = r255 / 255; + var g = g255 / 255; + var b = b255 / 255; + var max = Math.max(r, g, b); + var min = Math.min(r, g, b); + var c = max - min; + var l = (max + min) / 2; + if (c === 0) { + return {h: 0, s: 0, l: l, a: a}; + } + var h = + (max === r + ? ((g - b) / c) % 6 + : max === g + ? (b - r) / c + 2 + : (r - g) / c + 4) * 60; + if (h < 0) { + h += 360; + } + var s = c / (1 - Math.abs(2 * l - 1)); + return {h: h, s: s, l: l, a: a}; + } + function toFixed(n, digits) { + if (digits === void 0) { + digits = 0; + } + var fixed = n.toFixed(digits); + if (digits === 0) { + return fixed; + } + var dot = fixed.indexOf("."); + if (dot >= 0) { + var zerosMatch = fixed.match(/0+$/); + if (zerosMatch) { + if (zerosMatch.index === dot + 1) { + return fixed.substring(0, dot); + } + return fixed.substring(0, zerosMatch.index); + } + } + return fixed; + } + function rgbToString(rgb) { + var r = rgb.r, + g = rgb.g, + b = rgb.b, + a = rgb.a; + if (a != null && a < 1) { + return "rgba(" + .concat(toFixed(r), ", ") + .concat(toFixed(g), ", ") + .concat(toFixed(b), ", ") + .concat(toFixed(a, 2), ")"); + } + return "rgb(" + .concat(toFixed(r), ", ") + .concat(toFixed(g), ", ") + .concat(toFixed(b), ")"); + } + function rgbToHexString(_a) { + var r = _a.r, + g = _a.g, + b = _a.b, + a = _a.a; + return "#".concat( + (a != null && a < 1 ? [r, g, b, Math.round(a * 255)] : [r, g, b]) + .map(function (x) { + return "".concat(x < 16 ? "0" : "").concat(x.toString(16)); + }) + .join("") + ); + } + function hslToString(hsl) { + var h = hsl.h, + s = hsl.s, + l = hsl.l, + a = hsl.a; + if (a != null && a < 1) { + return "hsla(" + .concat(toFixed(h), ", ") + .concat(toFixed(s * 100), "%, ") + .concat(toFixed(l * 100), "%, ") + .concat(toFixed(a, 2), ")"); + } + return "hsl(" + .concat(toFixed(h), ", ") + .concat(toFixed(s * 100), "%, ") + .concat(toFixed(l * 100), "%)"); + } + var rgbMatch = /^rgba?\([^\(\)]+\)$/; + var hslMatch = /^hsla?\([^\(\)]+\)$/; + var hexMatch = /^#[0-9a-f]+$/i; + function parse($color) { + var c = $color.trim().toLowerCase(); + if (c.match(rgbMatch)) { + return parseRGB(c); + } + if (c.match(hslMatch)) { + return parseHSL(c); + } + if (c.match(hexMatch)) { + return parseHex(c); + } + if (knownColors.has(c)) { + return getColorByName(c); + } + if (systemColors.has(c)) { + return getSystemColor(c); + } + if ($color === "transparent") { + return {r: 0, g: 0, b: 0, a: 0}; + } + return null; + } + function getNumbers($color) { + var numbers = []; + var prevPos = 0; + var isMining = false; + var startIndex = $color.indexOf("("); + $color = $color.substring(startIndex + 1, $color.length - 1); + for (var i = 0; i < $color.length; i++) { + var c = $color[i]; + if ((c >= "0" && c <= "9") || c === "." || c === "+" || c === "-") { + isMining = true; + } else if (isMining && (c === " " || c === ",")) { + numbers.push($color.substring(prevPos, i)); + isMining = false; + prevPos = i + 1; + } else if (!isMining) { + prevPos = i + 1; + } + } + if (isMining) { + numbers.push($color.substring(prevPos, $color.length)); + } + return numbers; + } + function getNumbersFromString(str, range, units) { + var raw = getNumbers(str); + var unitsList = Object.entries(units); + var numbers = raw + .map(function (r) { + return r.trim(); + }) + .map(function (r, i) { + var n; + var unit = unitsList.find(function (_a) { + var _b = __read(_a, 1), + u = _b[0]; + return r.endsWith(u); + }); + if (unit) { + n = + (parseFloat(r.substring(0, r.length - unit[0].length)) / + unit[1]) * + range[i]; + } else { + n = parseFloat(r); + } + if (range[i] > 1) { + return Math.round(n); + } + return n; + }); + return numbers; + } + var rgbRange = [255, 255, 255, 1]; + var rgbUnits = {"%": 100}; + function parseRGB($rgb) { + var _a = __read(getNumbersFromString($rgb, rgbRange, rgbUnits), 4), + r = _a[0], + g = _a[1], + b = _a[2], + _b = _a[3], + a = _b === void 0 ? 1 : _b; + return {r: r, g: g, b: b, a: a}; + } + var hslRange = [360, 1, 1, 1]; + var hslUnits = {"%": 100, "deg": 360, "rad": 2 * Math.PI, "turn": 1}; + function parseHSL($hsl) { + var _a = __read(getNumbersFromString($hsl, hslRange, hslUnits), 4), + h = _a[0], + s = _a[1], + l = _a[2], + _b = _a[3], + a = _b === void 0 ? 1 : _b; + return hslToRGB({h: h, s: s, l: l, a: a}); + } + function parseHex($hex) { + var h = $hex.substring(1); + switch (h.length) { + case 3: + case 4: { + var _a = __read( + [0, 1, 2].map(function (i) { + return parseInt("".concat(h[i]).concat(h[i]), 16); + }), + 3 + ), + r = _a[0], + g = _a[1], + b = _a[2]; + var a = + h.length === 3 + ? 1 + : parseInt("".concat(h[3]).concat(h[3]), 16) / 255; + return {r: r, g: g, b: b, a: a}; + } + case 6: + case 8: { + var _b = __read( + [0, 2, 4].map(function (i) { + return parseInt(h.substring(i, i + 2), 16); + }), + 3 + ), + r = _b[0], + g = _b[1], + b = _b[2]; + var a = + h.length === 6 ? 1 : parseInt(h.substring(6, 8), 16) / 255; + return {r: r, g: g, b: b, a: a}; + } + } + return null; + } + function getColorByName($color) { + var n = knownColors.get($color); + return { + r: (n >> 16) & 255, + g: (n >> 8) & 255, + b: (n >> 0) & 255, + a: 1 + }; + } + function getSystemColor($color) { + var n = systemColors.get($color); + return { + r: (n >> 16) & 255, + g: (n >> 8) & 255, + b: (n >> 0) & 255, + a: 1 + }; + } + function lowerCalcExpression(color) { + var searchIndex = 0; + var replaceBetweenIndices = function (start, end, replacement) { + color = + color.substring(0, start) + replacement + color.substring(end); + }; + while ((searchIndex = color.indexOf("calc(")) !== -1) { + var range = getParenthesesRange(color, searchIndex); + if (!range) { + break; + } + var slice = color.slice(range.start + 1, range.end - 1); + var includesPercentage = slice.includes("%"); + slice = slice.split("%").join(""); + var output = Math.round(evalMath(slice)); + replaceBetweenIndices( + range.start - 4, + range.end, + output + (includesPercentage ? "%" : "") + ); + } + return color; + } + var knownColors = new Map( + Object.entries({ + aliceblue: 0xf0f8ff, + antiquewhite: 0xfaebd7, + aqua: 0x00ffff, + aquamarine: 0x7fffd4, + azure: 0xf0ffff, + beige: 0xf5f5dc, + bisque: 0xffe4c4, + black: 0x000000, + blanchedalmond: 0xffebcd, + blue: 0x0000ff, + blueviolet: 0x8a2be2, + brown: 0xa52a2a, + burlywood: 0xdeb887, + cadetblue: 0x5f9ea0, + chartreuse: 0x7fff00, + chocolate: 0xd2691e, + coral: 0xff7f50, + cornflowerblue: 0x6495ed, + cornsilk: 0xfff8dc, + crimson: 0xdc143c, + cyan: 0x00ffff, + darkblue: 0x00008b, + darkcyan: 0x008b8b, + darkgoldenrod: 0xb8860b, + darkgray: 0xa9a9a9, + darkgrey: 0xa9a9a9, + darkgreen: 0x006400, + darkkhaki: 0xbdb76b, + darkmagenta: 0x8b008b, + darkolivegreen: 0x556b2f, + darkorange: 0xff8c00, + darkorchid: 0x9932cc, + darkred: 0x8b0000, + darksalmon: 0xe9967a, + darkseagreen: 0x8fbc8f, + darkslateblue: 0x483d8b, + darkslategray: 0x2f4f4f, + darkslategrey: 0x2f4f4f, + darkturquoise: 0x00ced1, + darkviolet: 0x9400d3, + deeppink: 0xff1493, + deepskyblue: 0x00bfff, + dimgray: 0x696969, + dimgrey: 0x696969, + dodgerblue: 0x1e90ff, + firebrick: 0xb22222, + floralwhite: 0xfffaf0, + forestgreen: 0x228b22, + fuchsia: 0xff00ff, + gainsboro: 0xdcdcdc, + ghostwhite: 0xf8f8ff, + gold: 0xffd700, + goldenrod: 0xdaa520, + gray: 0x808080, + grey: 0x808080, + green: 0x008000, + greenyellow: 0xadff2f, + honeydew: 0xf0fff0, + hotpink: 0xff69b4, + indianred: 0xcd5c5c, + indigo: 0x4b0082, + ivory: 0xfffff0, + khaki: 0xf0e68c, + lavender: 0xe6e6fa, + lavenderblush: 0xfff0f5, + lawngreen: 0x7cfc00, + lemonchiffon: 0xfffacd, + lightblue: 0xadd8e6, + lightcoral: 0xf08080, + lightcyan: 0xe0ffff, + lightgoldenrodyellow: 0xfafad2, + lightgray: 0xd3d3d3, + lightgrey: 0xd3d3d3, + lightgreen: 0x90ee90, + lightpink: 0xffb6c1, + lightsalmon: 0xffa07a, + lightseagreen: 0x20b2aa, + lightskyblue: 0x87cefa, + lightslategray: 0x778899, + lightslategrey: 0x778899, + lightsteelblue: 0xb0c4de, + lightyellow: 0xffffe0, + lime: 0x00ff00, + limegreen: 0x32cd32, + linen: 0xfaf0e6, + magenta: 0xff00ff, + maroon: 0x800000, + mediumaquamarine: 0x66cdaa, + mediumblue: 0x0000cd, + mediumorchid: 0xba55d3, + mediumpurple: 0x9370db, + mediumseagreen: 0x3cb371, + mediumslateblue: 0x7b68ee, + mediumspringgreen: 0x00fa9a, + mediumturquoise: 0x48d1cc, + mediumvioletred: 0xc71585, + midnightblue: 0x191970, + mintcream: 0xf5fffa, + mistyrose: 0xffe4e1, + moccasin: 0xffe4b5, + navajowhite: 0xffdead, + navy: 0x000080, + oldlace: 0xfdf5e6, + olive: 0x808000, + olivedrab: 0x6b8e23, + orange: 0xffa500, + orangered: 0xff4500, + orchid: 0xda70d6, + palegoldenrod: 0xeee8aa, + palegreen: 0x98fb98, + paleturquoise: 0xafeeee, + palevioletred: 0xdb7093, + papayawhip: 0xffefd5, + peachpuff: 0xffdab9, + peru: 0xcd853f, + pink: 0xffc0cb, + plum: 0xdda0dd, + powderblue: 0xb0e0e6, + purple: 0x800080, + rebeccapurple: 0x663399, + red: 0xff0000, + rosybrown: 0xbc8f8f, + royalblue: 0x4169e1, + saddlebrown: 0x8b4513, + salmon: 0xfa8072, + sandybrown: 0xf4a460, + seagreen: 0x2e8b57, + seashell: 0xfff5ee, + sienna: 0xa0522d, + silver: 0xc0c0c0, + skyblue: 0x87ceeb, + slateblue: 0x6a5acd, + slategray: 0x708090, + slategrey: 0x708090, + snow: 0xfffafa, + springgreen: 0x00ff7f, + steelblue: 0x4682b4, + tan: 0xd2b48c, + teal: 0x008080, + thistle: 0xd8bfd8, + tomato: 0xff6347, + turquoise: 0x40e0d0, + violet: 0xee82ee, + wheat: 0xf5deb3, + white: 0xffffff, + whitesmoke: 0xf5f5f5, + yellow: 0xffff00, + yellowgreen: 0x9acd32 + }) + ); + var systemColors = new Map( + Object.entries({ + "ActiveBorder": 0x3b99fc, + "ActiveCaption": 0x000000, + "AppWorkspace": 0xaaaaaa, + "Background": 0x6363ce, + "ButtonFace": 0xffffff, + "ButtonHighlight": 0xe9e9e9, + "ButtonShadow": 0x9fa09f, + "ButtonText": 0x000000, + "CaptionText": 0x000000, + "GrayText": 0x7f7f7f, + "Highlight": 0xb2d7ff, + "HighlightText": 0x000000, + "InactiveBorder": 0xffffff, + "InactiveCaption": 0xffffff, + "InactiveCaptionText": 0x000000, + "InfoBackground": 0xfbfcc5, + "InfoText": 0x000000, + "Menu": 0xf6f6f6, + "MenuText": 0xffffff, + "Scrollbar": 0xaaaaaa, + "ThreeDDarkShadow": 0x000000, + "ThreeDFace": 0xc0c0c0, + "ThreeDHighlight": 0xffffff, + "ThreeDLightShadow": 0xffffff, + "ThreeDShadow": 0x000000, + "Window": 0xececec, + "WindowFrame": 0xaaaaaa, + "WindowText": 0x000000, + "-webkit-focus-ring-color": 0xe59700 + }).map(function (_a) { + var _b = __read(_a, 2), + key = _b[0], + value = _b[1]; + return [key.toLowerCase(), value]; + }) + ); + function getSRGBLightness(r, g, b) { + return (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255; + } + + function scale(x, inLow, inHigh, outLow, outHigh) { + return ((x - inLow) * (outHigh - outLow)) / (inHigh - inLow) + outLow; + } + function clamp(x, min, max) { + return Math.min(max, Math.max(min, x)); + } + function multiplyMatrices(m1, m2) { + var result = []; + for (var i = 0, len = m1.length; i < len; i++) { + result[i] = []; + for (var j = 0, len2 = m2[0].length; j < len2; j++) { + var sum = 0; + for (var k = 0, len3 = m1[0].length; k < len3; k++) { + sum += m1[i][k] * m2[k][j]; + } + result[i][j] = sum; + } + } + return result; + } + + function createFilterMatrix(config) { + var m = Matrix.identity(); + if (config.sepia !== 0) { + m = multiplyMatrices(m, Matrix.sepia(config.sepia / 100)); + } + if (config.grayscale !== 0) { + m = multiplyMatrices(m, Matrix.grayscale(config.grayscale / 100)); + } + if (config.contrast !== 100) { + m = multiplyMatrices(m, Matrix.contrast(config.contrast / 100)); + } + if (config.brightness !== 100) { + m = multiplyMatrices(m, Matrix.brightness(config.brightness / 100)); + } + if (config.mode === 1) { + m = multiplyMatrices(m, Matrix.invertNHue()); + } + return m; + } + function applyColorMatrix(_a, matrix) { + var _b = __read(_a, 3), + r = _b[0], + g = _b[1], + b = _b[2]; + var rgb = [[r / 255], [g / 255], [b / 255], [1], [1]]; + var result = multiplyMatrices(matrix, rgb); + return [0, 1, 2].map(function (i) { + return clamp(Math.round(result[i][0] * 255), 0, 255); + }); + } + var Matrix = { + identity: function () { + return [ + [1, 0, 0, 0, 0], + [0, 1, 0, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 1] + ]; + }, + invertNHue: function () { + return [ + [0.333, -0.667, -0.667, 0, 1], + [-0.667, 0.333, -0.667, 0, 1], + [-0.667, -0.667, 0.333, 0, 1], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 1] + ]; + }, + brightness: function (v) { + return [ + [v, 0, 0, 0, 0], + [0, v, 0, 0, 0], + [0, 0, v, 0, 0], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 1] + ]; + }, + contrast: function (v) { + var t = (1 - v) / 2; + return [ + [v, 0, 0, 0, t], + [0, v, 0, 0, t], + [0, 0, v, 0, t], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 1] + ]; + }, + sepia: function (v) { + return [ + [ + 0.393 + 0.607 * (1 - v), + 0.769 - 0.769 * (1 - v), + 0.189 - 0.189 * (1 - v), + 0, + 0 + ], + [ + 0.349 - 0.349 * (1 - v), + 0.686 + 0.314 * (1 - v), + 0.168 - 0.168 * (1 - v), + 0, + 0 + ], + [ + 0.272 - 0.272 * (1 - v), + 0.534 - 0.534 * (1 - v), + 0.131 + 0.869 * (1 - v), + 0, + 0 + ], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 1] + ]; + }, + grayscale: function (v) { + return [ + [ + 0.2126 + 0.7874 * (1 - v), + 0.7152 - 0.7152 * (1 - v), + 0.0722 - 0.0722 * (1 - v), + 0, + 0 + ], + [ + 0.2126 - 0.2126 * (1 - v), + 0.7152 + 0.2848 * (1 - v), + 0.0722 - 0.0722 * (1 - v), + 0, + 0 + ], + [ + 0.2126 - 0.2126 * (1 - v), + 0.7152 - 0.7152 * (1 - v), + 0.0722 + 0.9278 * (1 - v), + 0, + 0 + ], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 1] + ]; + } + }; + + function getBgPole(theme) { + var isDarkScheme = theme.mode === 1; + var prop = isDarkScheme + ? "darkSchemeBackgroundColor" + : "lightSchemeBackgroundColor"; + return theme[prop]; + } + function getFgPole(theme) { + var isDarkScheme = theme.mode === 1; + var prop = isDarkScheme + ? "darkSchemeTextColor" + : "lightSchemeTextColor"; + return theme[prop]; + } + var colorModificationCache = new Map(); + function clearColorModificationCache() { + colorModificationCache.clear(); + } + var rgbCacheKeys = ["r", "g", "b", "a"]; + var themeCacheKeys$1 = [ + "mode", + "brightness", + "contrast", + "grayscale", + "sepia", + "darkSchemeBackgroundColor", + "darkSchemeTextColor", + "lightSchemeBackgroundColor", + "lightSchemeTextColor" + ]; + function getCacheId(rgb, theme) { + var resultId = ""; + rgbCacheKeys.forEach(function (key) { + resultId += "".concat(rgb[key], ";"); + }); + themeCacheKeys$1.forEach(function (key) { + resultId += "".concat(theme[key], ";"); + }); + return resultId; + } + function modifyColorWithCache( + rgb, + theme, + modifyHSL, + poleColor, + anotherPoleColor + ) { + var fnCache; + if (colorModificationCache.has(modifyHSL)) { + fnCache = colorModificationCache.get(modifyHSL); + } else { + fnCache = new Map(); + colorModificationCache.set(modifyHSL, fnCache); + } + var id = getCacheId(rgb, theme); + if (fnCache.has(id)) { + return fnCache.get(id); + } + var hsl = rgbToHSL(rgb); + var pole = poleColor == null ? null : parseToHSLWithCache(poleColor); + var anotherPole = + anotherPoleColor == null + ? null + : parseToHSLWithCache(anotherPoleColor); + var modified = modifyHSL(hsl, pole, anotherPole); + var _a = hslToRGB(modified), + r = _a.r, + g = _a.g, + b = _a.b, + a = _a.a; + var matrix = createFilterMatrix(theme); + var _b = __read(applyColorMatrix([r, g, b], matrix), 3), + rf = _b[0], + gf = _b[1], + bf = _b[2]; + var color = + a === 1 + ? rgbToHexString({r: rf, g: gf, b: bf}) + : rgbToString({r: rf, g: gf, b: bf, a: a}); + fnCache.set(id, color); + return color; + } + function noopHSL(hsl) { + return hsl; + } + function modifyColor(rgb, theme) { + return modifyColorWithCache(rgb, theme, noopHSL); + } + function modifyLightSchemeColor(rgb, theme) { + var poleBg = getBgPole(theme); + var poleFg = getFgPole(theme); + return modifyColorWithCache( + rgb, + theme, + modifyLightModeHSL, + poleFg, + poleBg + ); + } + function modifyLightModeHSL(_a, poleFg, poleBg) { + var h = _a.h, + s = _a.s, + l = _a.l, + a = _a.a; + var isDark = l < 0.5; + var isNeutral; + if (isDark) { + isNeutral = l < 0.2 || s < 0.12; + } else { + var isBlue = h > 200 && h < 280; + isNeutral = s < 0.24 || (l > 0.8 && isBlue); + } + var hx = h; + var sx = l; + if (isNeutral) { + if (isDark) { + hx = poleFg.h; + sx = poleFg.s; + } else { + hx = poleBg.h; + sx = poleBg.s; + } + } + var lx = scale(l, 0, 1, poleFg.l, poleBg.l); + return {h: hx, s: sx, l: lx, a: a}; + } + var MAX_BG_LIGHTNESS = 0.4; + function modifyBgHSL(_a, pole) { + var h = _a.h, + s = _a.s, + l = _a.l, + a = _a.a; + var isDark = l < 0.5; + var isBlue = h > 200 && h < 280; + var isNeutral = s < 0.12 || (l > 0.8 && isBlue); + if (isDark) { + var lx_1 = scale(l, 0, 0.5, 0, MAX_BG_LIGHTNESS); + if (isNeutral) { + var hx_1 = pole.h; + var sx = pole.s; + return {h: hx_1, s: sx, l: lx_1, a: a}; + } + return {h: h, s: s, l: lx_1, a: a}; + } + var lx = scale(l, 0.5, 1, MAX_BG_LIGHTNESS, pole.l); + if (isNeutral) { + var hx_2 = pole.h; + var sx = pole.s; + return {h: hx_2, s: sx, l: lx, a: a}; + } + var hx = h; + var isYellow = h > 60 && h < 180; + if (isYellow) { + var isCloserToGreen = h > 120; + if (isCloserToGreen) { + hx = scale(h, 120, 180, 135, 180); + } else { + hx = scale(h, 60, 120, 60, 105); + } + } + if (hx > 40 && hx < 80) { + lx *= 0.75; + } + return {h: hx, s: s, l: lx, a: a}; + } + function modifyBackgroundColor(rgb, theme) { + if (theme.mode === 0) { + return modifyLightSchemeColor(rgb, theme); + } + var pole = getBgPole(theme); + return modifyColorWithCache( + rgb, + __assign(__assign({}, theme), {mode: 0}), + modifyBgHSL, + pole + ); + } + var MIN_FG_LIGHTNESS = 0.55; + function modifyBlueFgHue(hue) { + return scale(hue, 205, 245, 205, 220); + } + function modifyFgHSL(_a, pole) { + var h = _a.h, + s = _a.s, + l = _a.l, + a = _a.a; + var isLight = l > 0.5; + var isNeutral = l < 0.2 || s < 0.24; + var isBlue = !isNeutral && h > 205 && h < 245; + if (isLight) { + var lx_2 = scale(l, 0.5, 1, MIN_FG_LIGHTNESS, pole.l); + if (isNeutral) { + var hx_3 = pole.h; + var sx = pole.s; + return {h: hx_3, s: sx, l: lx_2, a: a}; + } + var hx_4 = h; + if (isBlue) { + hx_4 = modifyBlueFgHue(h); + } + return {h: hx_4, s: s, l: lx_2, a: a}; + } + if (isNeutral) { + var hx_5 = pole.h; + var sx = pole.s; + var lx_3 = scale(l, 0, 0.5, pole.l, MIN_FG_LIGHTNESS); + return {h: hx_5, s: sx, l: lx_3, a: a}; + } + var hx = h; + var lx; + if (isBlue) { + hx = modifyBlueFgHue(h); + lx = scale(l, 0, 0.5, pole.l, Math.min(1, MIN_FG_LIGHTNESS + 0.05)); + } else { + lx = scale(l, 0, 0.5, pole.l, MIN_FG_LIGHTNESS); + } + return {h: hx, s: s, l: lx, a: a}; + } + function modifyForegroundColor(rgb, theme) { + if (theme.mode === 0) { + return modifyLightSchemeColor(rgb, theme); + } + var pole = getFgPole(theme); + return modifyColorWithCache( + rgb, + __assign(__assign({}, theme), {mode: 0}), + modifyFgHSL, + pole + ); + } + function modifyBorderHSL(_a, poleFg, poleBg) { + var h = _a.h, + s = _a.s, + l = _a.l, + a = _a.a; + var isDark = l < 0.5; + var isNeutral = l < 0.2 || s < 0.24; + var hx = h; + var sx = s; + if (isNeutral) { + if (isDark) { + hx = poleFg.h; + sx = poleFg.s; + } else { + hx = poleBg.h; + sx = poleBg.s; + } + } + var lx = scale(l, 0, 1, 0.5, 0.2); + return {h: hx, s: sx, l: lx, a: a}; + } + function modifyBorderColor(rgb, theme) { + if (theme.mode === 0) { + return modifyLightSchemeColor(rgb, theme); + } + var poleFg = getFgPole(theme); + var poleBg = getBgPole(theme); + return modifyColorWithCache( + rgb, + __assign(__assign({}, theme), {mode: 0}), + modifyBorderHSL, + poleFg, + poleBg + ); + } + function modifyShadowColor(rgb, filter) { + return modifyBackgroundColor(rgb, filter); + } + function modifyGradientColor(rgb, filter) { + return modifyBackgroundColor(rgb, filter); + } + + function createTextStyle(config) { + var lines = []; + lines.push( + '*:not(pre, pre *, code, .far, .fa, .glyphicon, [class*="vjs-"], .fab, .fa-github, .fas, .material-icons, .icofont, .typcn, mu, [class*="mu-"], .glyphicon, .icon) {' + ); + if (config.useFont && config.fontFamily) { + lines.push( + " font-family: ".concat(config.fontFamily, " !important;") + ); + } + if (config.textStroke > 0) { + lines.push( + " -webkit-text-stroke: ".concat( + config.textStroke, + "px !important;" + ) + ); + lines.push( + " text-stroke: ".concat(config.textStroke, "px !important;") + ); + } + lines.push("}"); + return lines.join("\n"); + } + + var FilterMode; + (function (FilterMode) { + FilterMode[(FilterMode["light"] = 0)] = "light"; + FilterMode[(FilterMode["dark"] = 1)] = "dark"; + })(FilterMode || (FilterMode = {})); + function getCSSFilterValue(config) { + var filters = []; + if (config.mode === FilterMode.dark) { + filters.push("invert(100%) hue-rotate(180deg)"); + } + if (config.brightness !== 100) { + filters.push("brightness(".concat(config.brightness, "%)")); + } + if (config.contrast !== 100) { + filters.push("contrast(".concat(config.contrast, "%)")); + } + if (config.grayscale !== 0) { + filters.push("grayscale(".concat(config.grayscale, "%)")); + } + if (config.sepia !== 0) { + filters.push("sepia(".concat(config.sepia, "%)")); + } + if (filters.length === 0) { + return null; + } + return filters.join(" "); + } + + function toSVGMatrix(matrix) { + return matrix + .slice(0, 4) + .map(function (m) { + return m + .map(function (m) { + return m.toFixed(3); + }) + .join(" "); + }) + .join(" "); + } + function getSVGFilterMatrixValue(config) { + return toSVGMatrix(createFilterMatrix(config)); + } + + var counter = 0; + var resolvers$1 = new Map(); + var rejectors = new Map(); + function bgFetch(request) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [ + 2, + new Promise(function (resolve, reject) { + var id = ++counter; + resolvers$1.set(id, resolve); + rejectors.set(id, reject); + chrome.runtime.sendMessage({ + type: MessageType.CS_FETCH, + data: request, + id: id + }); + }) + ]; + }); + }); + } + chrome.runtime.onMessage.addListener(function (_a) { + var type = _a.type, + data = _a.data, + error = _a.error, + id = _a.id; + if (type === MessageType.BG_FETCH_RESPONSE) { + var resolve = resolvers$1.get(id); + var reject = rejectors.get(id); + resolvers$1.delete(id); + rejectors.delete(id); + if (error) { + reject && reject(error); + } else { + resolve && resolve(data); + } + } + }); + + var AsyncQueue = (function () { + function AsyncQueue() { + this.queue = []; + this.timerId = null; + this.frameDuration = 1000 / 60; + } + AsyncQueue.prototype.addToQueue = function (entry) { + this.queue.push(entry); + this.startQueue(); + }; + AsyncQueue.prototype.stopQueue = function () { + if (this.timerId !== null) { + cancelAnimationFrame(this.timerId); + this.timerId = null; + } + this.queue = []; + }; + AsyncQueue.prototype.startQueue = function () { + var _this = this; + if (this.timerId) { + return; + } + this.timerId = requestAnimationFrame(function () { + _this.timerId = null; + var start = Date.now(); + var cb; + while ((cb = _this.queue.shift())) { + cb(); + if (Date.now() - start >= _this.frameDuration) { + _this.startQueue(); + break; + } + } + }); + }; + return AsyncQueue; + })(); + + var imageManager = new AsyncQueue(); + function getImageDetails(url) { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + return [ + 2, + new Promise(function (resolve, reject) { + return __awaiter(_this, void 0, void 0, function () { + var dataURL, error_1, image_1, error_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!url.startsWith("data:")) + return [3, 1]; + dataURL = url; + return [3, 4]; + case 1: + _a.trys.push([1, 3, , 4]); + return [4, getImageDataURL(url)]; + case 2: + dataURL = _a.sent(); + return [3, 4]; + case 3: + error_1 = _a.sent(); + reject(error_1); + return [2]; + case 4: + _a.trys.push([4, 6, , 7]); + return [4, urlToImage(dataURL)]; + case 5: + image_1 = _a.sent(); + imageManager.addToQueue(function () { + resolve( + __assign( + { + src: url, + dataURL: dataURL, + width: image_1.naturalWidth, + height: image_1.naturalHeight + }, + analyzeImage(image_1) + ) + ); + }); + return [3, 7]; + case 6: + error_2 = _a.sent(); + reject(error_2); + return [3, 7]; + case 7: + return [2]; + } + }); + }); + }) + ]; + }); + }); + } + function getImageDataURL(url) { + return __awaiter(this, void 0, void 0, function () { + var parsedURL; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + parsedURL = new URL(url); + if (!(parsedURL.origin === location.origin)) + return [3, 2]; + return [4, loadAsDataURL(url)]; + case 1: + return [2, _a.sent()]; + case 2: + return [ + 4, + bgFetch({url: url, responseType: "data-url"}) + ]; + case 3: + return [2, _a.sent()]; + } + }); + }); + } + function urlToImage(url) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [ + 2, + new Promise(function (resolve, reject) { + var image = new Image(); + image.onload = function () { + return resolve(image); + }; + image.onerror = function () { + return reject("Unable to load image ".concat(url)); + }; + image.src = url; + }) + ]; + }); + }); + } + var MAX_ANALIZE_PIXELS_COUNT = 32 * 32; + var canvas; + var context; + function createCanvas() { + var maxWidth = MAX_ANALIZE_PIXELS_COUNT; + var maxHeight = MAX_ANALIZE_PIXELS_COUNT; + canvas = document.createElement("canvas"); + canvas.width = maxWidth; + canvas.height = maxHeight; + context = canvas.getContext("2d"); + context.imageSmoothingEnabled = false; + } + function removeCanvas() { + canvas = null; + context = null; + } + var MAX_IMAGE_SIZE = 5 * 1024 * 1024; + function analyzeImage(image) { + if (!canvas) { + createCanvas(); + } + var naturalWidth = image.naturalWidth, + naturalHeight = image.naturalHeight; + if (naturalHeight === 0 || naturalWidth === 0) { + logWarn("logWarn(Image is empty ".concat(image.currentSrc, ")")); + return null; + } + var size = naturalWidth * naturalHeight * 4; + if (size > MAX_IMAGE_SIZE) { + return { + isDark: false, + isLight: false, + isTransparent: false, + isLarge: false, + isTooLarge: true + }; + } + var naturalPixelsCount = naturalWidth * naturalHeight; + var k = Math.min( + 1, + Math.sqrt(MAX_ANALIZE_PIXELS_COUNT / naturalPixelsCount) + ); + var width = Math.ceil(naturalWidth * k); + var height = Math.ceil(naturalHeight * k); + context.clearRect(0, 0, width, height); + context.drawImage( + image, + 0, + 0, + naturalWidth, + naturalHeight, + 0, + 0, + width, + height + ); + var imageData = context.getImageData(0, 0, width, height); + var d = imageData.data; + var TRANSPARENT_ALPHA_THRESHOLD = 0.05; + var DARK_LIGHTNESS_THRESHOLD = 0.4; + var LIGHT_LIGHTNESS_THRESHOLD = 0.7; + var transparentPixelsCount = 0; + var darkPixelsCount = 0; + var lightPixelsCount = 0; + var i, x, y; + var r, g, b, a; + var l; + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + i = 4 * (y * width + x); + r = d[i + 0]; + g = d[i + 1]; + b = d[i + 2]; + a = d[i + 3]; + if (a / 255 < TRANSPARENT_ALPHA_THRESHOLD) { + transparentPixelsCount++; + } else { + l = getSRGBLightness(r, g, b); + if (l < DARK_LIGHTNESS_THRESHOLD) { + darkPixelsCount++; + } + if (l > LIGHT_LIGHTNESS_THRESHOLD) { + lightPixelsCount++; + } + } + } + } + var totalPixelsCount = width * height; + var opaquePixelsCount = totalPixelsCount - transparentPixelsCount; + var DARK_IMAGE_THRESHOLD = 0.7; + var LIGHT_IMAGE_THRESHOLD = 0.7; + var TRANSPARENT_IMAGE_THRESHOLD = 0.1; + var LARGE_IMAGE_PIXELS_COUNT = 800 * 600; + return { + isDark: darkPixelsCount / opaquePixelsCount >= DARK_IMAGE_THRESHOLD, + isLight: + lightPixelsCount / opaquePixelsCount >= LIGHT_IMAGE_THRESHOLD, + isTransparent: + transparentPixelsCount / totalPixelsCount >= + TRANSPARENT_IMAGE_THRESHOLD, + isLarge: naturalPixelsCount >= LARGE_IMAGE_PIXELS_COUNT, + isTooLarge: false + }; + } + function getFilteredImageDataURL(_a, theme) { + var dataURL = _a.dataURL, + width = _a.width, + height = _a.height; + var matrix = getSVGFilterMatrixValue(theme); + var svg = [ + ''), + "", + '', + ''), + "", + "", + ''), + "" + ].join(""); + return "data:image/svg+xml;base64,".concat(btoa(svg)); + } + function cleanImageProcessingCache() { + imageManager && imageManager.stopQueue(); + removeCanvas(); + } + + var gradientLength = "gradient".length; + var conicGradient = "conic-"; + var conicGradientLength = conicGradient.length; + var radialGradient = "radial-"; + var linearGradient = "linear-"; + function parseGradient(value) { + var result = []; + var index = 0; + var startIndex = conicGradient.length; + var _loop_1 = function () { + var typeGradient; + [linearGradient, radialGradient, conicGradient].find(function ( + possibleType + ) { + if (index - possibleType.length >= 0) { + var possibleGradient = value.substring( + index - possibleType.length, + index + ); + if (possibleGradient === possibleType) { + if ( + value.slice( + index - possibleType.length - 10, + index - possibleType.length - 1 + ) === "repeating" + ) { + typeGradient = "repeating-".concat( + possibleType, + "gradient" + ); + return true; + } + if ( + value.slice( + index - possibleType.length - 8, + index - possibleType.length - 1 + ) === "-webkit" + ) { + typeGradient = "-webkit-".concat( + possibleType, + "gradient" + ); + return true; + } + typeGradient = "".concat(possibleType, "gradient"); + return true; + } + } + }); + if (!typeGradient) { + return "break"; + } + var _a = getParenthesesRange(value, index + gradientLength), + start = _a.start, + end = _a.end; + var match = value.substring(start + 1, end - 1); + startIndex = end + 1 + conicGradientLength; + result.push({ + typeGradient: typeGradient, + match: match, + offset: typeGradient.length + 2, + index: index - typeGradient.length + gradientLength, + hasComma: true + }); + }; + while ((index = value.indexOf("gradient", startIndex)) !== -1) { + var state_1 = _loop_1(); + if (state_1 === "break") break; + } + if (result.length) { + result[result.length - 1].hasComma = false; + } + return result; + } + + function getPriority(ruleStyle, property) { + return Boolean(ruleStyle && ruleStyle.getPropertyPriority(property)); + } + function getModifiableCSSDeclaration( + property, + value, + rule, + variablesStore, + ignoreImageSelectors, + isCancelled + ) { + if (property.startsWith("--")) { + var modifier = getVariableModifier( + variablesStore, + property, + value, + rule, + ignoreImageSelectors, + isCancelled + ); + if (modifier) { + return { + property: property, + value: modifier, + important: getPriority(rule.style, property), + sourceValue: value + }; + } + } else if (value.includes("var(")) { + var modifier = getVariableDependantModifier( + variablesStore, + property, + value + ); + if (modifier) { + return { + property: property, + value: modifier, + important: getPriority(rule.style, property), + sourceValue: value + }; + } + } else if (property === "color-scheme") { + return null; + } else if ( + (property.includes("color") && + property !== "-webkit-print-color-adjust") || + property === "fill" || + property === "stroke" || + property === "stop-color" + ) { + var modifier = getColorModifier(property, value, rule); + if (modifier) { + return { + property: property, + value: modifier, + important: getPriority(rule.style, property), + sourceValue: value + }; + } + } else if ( + property === "background-image" || + property === "list-style-image" + ) { + var modifier = getBgImageModifier( + value, + rule, + ignoreImageSelectors, + isCancelled + ); + if (modifier) { + return { + property: property, + value: modifier, + important: getPriority(rule.style, property), + sourceValue: value + }; + } + } else if (property.includes("shadow")) { + var modifier = getShadowModifier(value); + if (modifier) { + return { + property: property, + value: modifier, + important: getPriority(rule.style, property), + sourceValue: value + }; + } + } + return null; + } + function joinSelectors() { + var selectors = []; + for (var _i = 0; _i < arguments.length; _i++) { + selectors[_i] = arguments[_i]; + } + return selectors.filter(Boolean).join(", "); + } + function getModifiedUserAgentStyle(theme, isIFrame, styleSystemControls) { + var lines = []; + if (!isIFrame) { + lines.push("html {"); + lines.push( + " background-color: ".concat( + modifyBackgroundColor({r: 255, g: 255, b: 255}, theme), + " !important;" + ) + ); + lines.push("}"); + } + if (isCSSColorSchemePropSupported) { + lines.push("html {"); + lines.push( + " color-scheme: ".concat( + theme.mode === 1 ? "dark" : "dark light", + " !important;" + ) + ); + lines.push("}"); + } + var bgSelectors = joinSelectors( + isIFrame ? "" : "html, body", + styleSystemControls ? "input, textarea, select, button, dialog" : "" + ); + if (bgSelectors) { + lines.push("".concat(bgSelectors, " {")); + lines.push( + " background-color: ".concat( + modifyBackgroundColor({r: 255, g: 255, b: 255}, theme), + ";" + ) + ); + lines.push("}"); + } + lines.push( + "".concat( + joinSelectors( + "html, body", + styleSystemControls ? "input, textarea, select, button" : "" + ), + " {" + ) + ); + lines.push( + " border-color: ".concat( + modifyBorderColor({r: 76, g: 76, b: 76}, theme), + ";" + ) + ); + lines.push( + " color: ".concat( + modifyForegroundColor({r: 0, g: 0, b: 0}, theme), + ";" + ) + ); + lines.push("}"); + lines.push("a {"); + lines.push( + " color: ".concat( + modifyForegroundColor({r: 0, g: 64, b: 255}, theme), + ";" + ) + ); + lines.push("}"); + lines.push("table {"); + lines.push( + " border-color: ".concat( + modifyBorderColor({r: 128, g: 128, b: 128}, theme), + ";" + ) + ); + lines.push("}"); + lines.push("::placeholder {"); + lines.push( + " color: ".concat( + modifyForegroundColor({r: 169, g: 169, b: 169}, theme), + ";" + ) + ); + lines.push("}"); + lines.push("input:-webkit-autofill,"); + lines.push("textarea:-webkit-autofill,"); + lines.push("select:-webkit-autofill {"); + lines.push( + " background-color: ".concat( + modifyBackgroundColor({r: 250, g: 255, b: 189}, theme), + " !important;" + ) + ); + lines.push( + " color: ".concat( + modifyForegroundColor({r: 0, g: 0, b: 0}, theme), + " !important;" + ) + ); + lines.push("}"); + if (theme.scrollbarColor) { + lines.push(getModifiedScrollbarStyle(theme)); + } + if (theme.selectionColor) { + lines.push(getModifiedSelectionStyle(theme)); + } + return lines.join("\n"); + } + function getSelectionColor(theme) { + var backgroundColorSelection; + var foregroundColorSelection; + if (theme.selectionColor === "auto") { + backgroundColorSelection = modifyBackgroundColor( + {r: 0, g: 96, b: 212}, + __assign(__assign({}, theme), {grayscale: 0}) + ); + foregroundColorSelection = modifyForegroundColor( + {r: 255, g: 255, b: 255}, + __assign(__assign({}, theme), {grayscale: 0}) + ); + } else { + var rgb = parseColorWithCache(theme.selectionColor); + var hsl = rgbToHSL(rgb); + backgroundColorSelection = theme.selectionColor; + if (hsl.l < 0.5) { + foregroundColorSelection = "#FFF"; + } else { + foregroundColorSelection = "#000"; + } + } + return { + backgroundColorSelection: backgroundColorSelection, + foregroundColorSelection: foregroundColorSelection + }; + } + function getModifiedSelectionStyle(theme) { + var lines = []; + var modifiedSelectionColor = getSelectionColor(theme); + var backgroundColorSelection = + modifiedSelectionColor.backgroundColorSelection; + var foregroundColorSelection = + modifiedSelectionColor.foregroundColorSelection; + ["::selection", "::-moz-selection"].forEach(function (selection) { + lines.push("".concat(selection, " {")); + lines.push( + " background-color: ".concat( + backgroundColorSelection, + " !important;" + ) + ); + lines.push( + " color: ".concat(foregroundColorSelection, " !important;") + ); + lines.push("}"); + }); + return lines.join("\n"); + } + function getModifiedScrollbarStyle(theme) { + var lines = []; + var colorTrack; + var colorIcons; + var colorThumb; + var colorThumbHover; + var colorThumbActive; + var colorCorner; + if (theme.scrollbarColor === "auto") { + colorTrack = modifyBackgroundColor({r: 241, g: 241, b: 241}, theme); + colorIcons = modifyForegroundColor({r: 96, g: 96, b: 96}, theme); + colorThumb = modifyBackgroundColor({r: 176, g: 176, b: 176}, theme); + colorThumbHover = modifyBackgroundColor( + {r: 144, g: 144, b: 144}, + theme + ); + colorThumbActive = modifyBackgroundColor( + {r: 96, g: 96, b: 96}, + theme + ); + colorCorner = modifyBackgroundColor( + {r: 255, g: 255, b: 255}, + theme + ); + } else { + var rgb = parseColorWithCache(theme.scrollbarColor); + var hsl_1 = rgbToHSL(rgb); + var isLight = hsl_1.l > 0.5; + var lighten = function (lighter) { + return __assign(__assign({}, hsl_1), { + l: clamp(hsl_1.l + lighter, 0, 1) + }); + }; + var darken = function (darker) { + return __assign(__assign({}, hsl_1), { + l: clamp(hsl_1.l - darker, 0, 1) + }); + }; + colorTrack = hslToString(darken(0.4)); + colorIcons = hslToString(isLight ? darken(0.4) : lighten(0.4)); + colorThumb = hslToString(hsl_1); + colorThumbHover = hslToString(lighten(0.1)); + colorThumbActive = hslToString(lighten(0.2)); + } + lines.push("::-webkit-scrollbar {"); + lines.push(" background-color: ".concat(colorTrack, ";")); + lines.push(" color: ".concat(colorIcons, ";")); + lines.push("}"); + lines.push("::-webkit-scrollbar-thumb {"); + lines.push(" background-color: ".concat(colorThumb, ";")); + lines.push("}"); + lines.push("::-webkit-scrollbar-thumb:hover {"); + lines.push(" background-color: ".concat(colorThumbHover, ";")); + lines.push("}"); + lines.push("::-webkit-scrollbar-thumb:active {"); + lines.push(" background-color: ".concat(colorThumbActive, ";")); + lines.push("}"); + lines.push("::-webkit-scrollbar-corner {"); + lines.push(" background-color: ".concat(colorCorner, ";")); + lines.push("}"); + if (isFirefox) { + lines.push("* {"); + lines.push( + " scrollbar-color: " + .concat(colorThumb, " ") + .concat(colorTrack, ";") + ); + lines.push("}"); + } + return lines.join("\n"); + } + function getModifiedFallbackStyle(filter, _a) { + var strict = _a.strict; + var lines = []; + var isMicrosoft = ["microsoft.com", "docs.microsoft.com"].includes( + location.hostname + ); + lines.push( + "html, body, ".concat( + strict + ? "body :not(iframe)".concat( + isMicrosoft + ? ':not(div[style^="position:absolute;top:0;left:-"]' + : "" + ) + : "body > :not(iframe)", + " {" + ) + ); + lines.push( + " background-color: ".concat( + modifyBackgroundColor({r: 255, g: 255, b: 255}, filter), + " !important;" + ) + ); + lines.push( + " border-color: ".concat( + modifyBorderColor({r: 64, g: 64, b: 64}, filter), + " !important;" + ) + ); + lines.push( + " color: ".concat( + modifyForegroundColor({r: 0, g: 0, b: 0}, filter), + " !important;" + ) + ); + lines.push("}"); + return lines.join("\n"); + } + var unparsableColors = new Set([ + "inherit", + "transparent", + "initial", + "currentcolor", + "none", + "unset" + ]); + function getColorModifier(prop, value, rule) { + if (unparsableColors.has(value.toLowerCase())) { + return value; + } + var rgb = parseColorWithCache(value); + if (!rgb) { + return null; + } + if (prop.includes("background")) { + if ( + (rule.style.webkitMaskImage && + rule.style.webkitMaskImage !== "none") || + (rule.style.webkitMask && + !rule.style.webkitMask.startsWith("none")) || + (rule.style.mask && rule.style.mask !== "none") || + (rule.style.getPropertyValue("mask-image") && + rule.style.getPropertyValue("mask-image") !== "none") + ) { + return function (filter) { + return modifyForegroundColor(rgb, filter); + }; + } + return function (filter) { + return modifyBackgroundColor(rgb, filter); + }; + } + if (prop.includes("border") || prop.includes("outline")) { + return function (filter) { + return modifyBorderColor(rgb, filter); + }; + } + return function (filter) { + return modifyForegroundColor(rgb, filter); + }; + } + var imageDetailsCache = new Map(); + var awaitingForImageLoading = new Map(); + function shouldIgnoreImage(selectorText, selectors) { + if (!selectorText || selectors.length === 0) { + return false; + } + if ( + selectors.some(function (s) { + return s === "*"; + }) + ) { + return true; + } + var ruleSelectors = selectorText.split(/,\s*/g); + var _loop_1 = function (i) { + var ignoredSelector = selectors[i]; + if ( + ruleSelectors.some(function (s) { + return s === ignoredSelector; + }) + ) { + return {value: true}; + } + }; + for (var i = 0; i < selectors.length; i++) { + var state_1 = _loop_1(i); + if (typeof state_1 === "object") return state_1.value; + } + return false; + } + function getBgImageModifier( + value, + rule, + ignoreImageSelectors, + isCancelled + ) { + var _this = this; + try { + var gradients = parseGradient(value); + var urls = getMatches(cssURLRegex, value); + if (urls.length === 0 && gradients.length === 0) { + return value; + } + var getIndices = function (matches) { + var index = 0; + return matches.map(function (match) { + var valueIndex = value.indexOf(match, index); + index = valueIndex + match.length; + return {match: match, index: valueIndex}; + }); + }; + var matches_1 = gradients + .map(function (i) { + return __assign({type: "gradient"}, i); + }) + .concat( + getIndices(urls).map(function (i) { + return __assign({type: "url", offset: 0}, i); + }) + ) + .sort(function (a, b) { + return a.index > b.index ? 1 : -1; + }); + var getGradientModifier_1 = function (gradient) { + var typeGradient = gradient.typeGradient, + match = gradient.match, + hasComma = gradient.hasComma; + var partsRegex = + /([^\(\),]+(\([^\(\)]*(\([^\(\)]*\)*[^\(\)]*)?\))?([^\(\), ]|( (?!calc)))*),?/g; + var colorStopRegex = + /^(from|color-stop|to)\(([^\(\)]*?,\s*)?(.*?)\)$/; + var parts = getMatches(partsRegex, match, 1).map(function ( + part + ) { + part = part.trim(); + var rgb = parseColorWithCache(part); + if (rgb) { + return function (filter) { + return modifyGradientColor(rgb, filter); + }; + } + var space = part.lastIndexOf(" "); + rgb = parseColorWithCache(part.substring(0, space)); + if (rgb) { + return function (filter) { + return "" + .concat(modifyGradientColor(rgb, filter), " ") + .concat(part.substring(space + 1)); + }; + } + var colorStopMatch = part.match(colorStopRegex); + if (colorStopMatch) { + rgb = parseColorWithCache(colorStopMatch[3]); + if (rgb) { + return function (filter) { + return "" + .concat(colorStopMatch[1], "(") + .concat( + colorStopMatch[2] + ? "".concat(colorStopMatch[2], ", ") + : "" + ) + .concat( + modifyGradientColor(rgb, filter), + ")" + ); + }; + } + } + return function () { + return part; + }; + }); + return function (filter) { + return "" + .concat(typeGradient, "(") + .concat( + parts + .map(function (modify) { + return modify(filter); + }) + .join(", "), + ")" + ) + .concat(hasComma ? ", " : ""); + }; + }; + var getURLModifier_1 = function (urlValue) { + var _a; + if ( + shouldIgnoreImage(rule.selectorText, ignoreImageSelectors) + ) { + return null; + } + var url = getCSSURLValue(urlValue); + var isURLEmpty = url.length === 0; + var parentStyleSheet = rule.parentStyleSheet; + var baseURL = + parentStyleSheet && parentStyleSheet.href + ? getCSSBaseBath(parentStyleSheet.href) + : ((_a = parentStyleSheet.ownerNode) === null || + _a === void 0 + ? void 0 + : _a.baseURI) || location.origin; + url = getAbsoluteURL(baseURL, url); + var absoluteValue = 'url("'.concat(url, '")'); + return function (filter) { + return __awaiter(_this, void 0, void 0, function () { + var imageDetails, awaiters_1, err_1, bgImageValue; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (isURLEmpty) { + return [2, "url('')"]; + } + if (!imageDetailsCache.has(url)) + return [3, 1]; + imageDetails = imageDetailsCache.get(url); + return [3, 7]; + case 1: + _a.trys.push([1, 6, , 7]); + if (!awaitingForImageLoading.has(url)) + return [3, 3]; + awaiters_1 = + awaitingForImageLoading.get(url); + return [ + 4, + new Promise(function (resolve) { + return awaiters_1.push(resolve); + }) + ]; + case 2: + imageDetails = _a.sent(); + if (!imageDetails) { + return [2, null]; + } + return [3, 5]; + case 3: + awaitingForImageLoading.set(url, []); + return [4, getImageDetails(url)]; + case 4: + imageDetails = _a.sent(); + imageDetailsCache.set(url, imageDetails); + awaitingForImageLoading + .get(url) + .forEach(function (resolve) { + return resolve(imageDetails); + }); + awaitingForImageLoading.delete(url); + _a.label = 5; + case 5: + if (isCancelled()) { + return [2, null]; + } + return [3, 7]; + case 6: + err_1 = _a.sent(); + logWarn(err_1); + if (awaitingForImageLoading.has(url)) { + awaitingForImageLoading + .get(url) + .forEach(function (resolve) { + return resolve(null); + }); + awaitingForImageLoading.delete(url); + } + return [2, absoluteValue]; + case 7: + bgImageValue = + getBgImageValue_1( + imageDetails, + filter + ) || absoluteValue; + return [2, bgImageValue]; + } + }); + }); + }; + }; + var getBgImageValue_1 = function (imageDetails, filter) { + var isDark = imageDetails.isDark, + isLight = imageDetails.isLight, + isTransparent = imageDetails.isTransparent, + isLarge = imageDetails.isLarge, + isTooLarge = imageDetails.isTooLarge, + width = imageDetails.width; + var result; + if (isTooLarge) { + result = 'url("'.concat(imageDetails.src, '")'); + } else if ( + isDark && + isTransparent && + filter.mode === 1 && + !isLarge && + width > 2 + ) { + logInfo("Inverting dark image ".concat(imageDetails.src)); + var inverted = getFilteredImageDataURL( + imageDetails, + __assign(__assign({}, filter), { + sepia: clamp(filter.sepia + 10, 0, 100) + }) + ); + result = 'url("'.concat(inverted, '")'); + } else if (isLight && !isTransparent && filter.mode === 1) { + if (isLarge) { + result = "none"; + } else { + logInfo( + "Dimming light image ".concat(imageDetails.src) + ); + var dimmed = getFilteredImageDataURL( + imageDetails, + filter + ); + result = 'url("'.concat(dimmed, '")'); + } + } else if (filter.mode === 0 && isLight && !isLarge) { + logInfo( + "Applying filter to image ".concat(imageDetails.src) + ); + var filtered = getFilteredImageDataURL( + imageDetails, + __assign(__assign({}, filter), { + brightness: clamp(filter.brightness - 10, 5, 200), + sepia: clamp(filter.sepia + 10, 0, 100) + }) + ); + result = 'url("'.concat(filtered, '")'); + } else { + result = null; + } + return result; + }; + var modifiers_1 = []; + var matchIndex_1 = 0; + var prevHasComma_1 = false; + matches_1.forEach(function (_a, i) { + var type = _a.type, + match = _a.match, + index = _a.index, + typeGradient = _a.typeGradient, + hasComma = _a.hasComma, + offset = _a.offset; + var matchStart = index; + var prefixStart = matchIndex_1; + var matchEnd = matchStart + match.length + offset; + matchIndex_1 = matchEnd; + if (prefixStart !== matchStart) { + if (prevHasComma_1) { + modifiers_1.push(function () { + var betweenValue = value.substring( + prefixStart, + matchStart + ); + if (betweenValue[0] === ",") { + betweenValue = betweenValue.substring(1); + } + return betweenValue; + }); + } else { + modifiers_1.push(function () { + return value.substring(prefixStart, matchStart); + }); + } + } + prevHasComma_1 = hasComma || false; + if (type === "url") { + modifiers_1.push(getURLModifier_1(match)); + } else if (type === "gradient") { + modifiers_1.push( + getGradientModifier_1({ + match: match, + index: index, + typeGradient: typeGradient, + hasComma: hasComma, + offset: offset + }) + ); + } + if (i === matches_1.length - 1) { + modifiers_1.push(function () { + return value.substring(matchEnd); + }); + } + }); + return function (filter) { + var results = modifiers_1 + .filter(Boolean) + .map(function (modify) { + return modify(filter); + }); + if ( + results.some(function (r) { + return r instanceof Promise; + }) + ) { + return Promise.all(results).then(function (asyncResults) { + return asyncResults.filter(Boolean).join(""); + }); + } + var combinedResult = results.join(""); + if (combinedResult.endsWith(", initial")) { + return combinedResult.slice(0, -9); + } + return combinedResult; + }; + } catch (err) { + return null; + } + } + function getShadowModifierWithInfo(value) { + try { + var index_1 = 0; + var colorMatches_1 = getMatches( + /(^|\s)(?!calc)([a-z]+\(.+?\)|#[0-9a-f]+|[a-z]+)(.*?(inset|outset)?($|,))/gi, + value, + 2 + ); + var notParsed_1 = 0; + var modifiers_2 = colorMatches_1.map(function (match, i) { + var prefixIndex = index_1; + var matchIndex = value.indexOf(match, index_1); + var matchEnd = matchIndex + match.length; + index_1 = matchEnd; + var rgb = parseColorWithCache(match); + if (!rgb) { + notParsed_1++; + return function () { + return value.substring(prefixIndex, matchEnd); + }; + } + return function (filter) { + return "" + .concat(value.substring(prefixIndex, matchIndex)) + .concat(modifyShadowColor(rgb, filter)) + .concat( + i === colorMatches_1.length - 1 + ? value.substring(matchEnd) + : "" + ); + }; + }); + return function (filter) { + var modified = modifiers_2 + .map(function (modify) { + return modify(filter); + }) + .join(""); + return { + matchesLength: colorMatches_1.length, + unparseableMatchesLength: notParsed_1, + result: modified + }; + }; + } catch (err) { + return null; + } + } + function getShadowModifier(value) { + var shadowModifier = getShadowModifierWithInfo(value); + if (!shadowModifier) { + return null; + } + return function (theme) { + return shadowModifier(theme).result; + }; + } + function getVariableModifier( + variablesStore, + prop, + value, + rule, + ignoredImgSelectors, + isCancelled + ) { + return variablesStore.getModifierForVariable({ + varName: prop, + sourceValue: value, + rule: rule, + ignoredImgSelectors: ignoredImgSelectors, + isCancelled: isCancelled + }); + } + function getVariableDependantModifier(variablesStore, prop, value) { + return variablesStore.getModifierForVarDependant(prop, value); + } + function cleanModificationCache() { + clearColorModificationCache(); + imageDetailsCache.clear(); + cleanImageProcessingCache(); + awaitingForImageLoading.clear(); + } + + var VAR_TYPE_BGCOLOR = 1 << 0; + var VAR_TYPE_TEXTCOLOR = 1 << 1; + var VAR_TYPE_BORDERCOLOR = 1 << 2; + var VAR_TYPE_BGIMG = 1 << 3; + var VariablesStore = (function () { + function VariablesStore() { + this.varTypes = new Map(); + this.rulesQueue = []; + this.definedVars = new Set(); + this.varRefs = new Map(); + this.unknownColorVars = new Set(); + this.unknownBgVars = new Set(); + this.undefinedVars = new Set(); + this.initialVarTypes = new Map(); + this.changedTypeVars = new Set(); + this.typeChangeSubscriptions = new Map(); + this.unstableVarValues = new Map(); + } + VariablesStore.prototype.clear = function () { + this.varTypes.clear(); + this.rulesQueue.splice(0); + this.definedVars.clear(); + this.varRefs.clear(); + this.unknownColorVars.clear(); + this.unknownBgVars.clear(); + this.undefinedVars.clear(); + this.initialVarTypes.clear(); + this.changedTypeVars.clear(); + this.typeChangeSubscriptions.clear(); + this.unstableVarValues.clear(); + }; + VariablesStore.prototype.isVarType = function (varName, typeNum) { + return ( + this.varTypes.has(varName) && + (this.varTypes.get(varName) & typeNum) > 0 + ); + }; + VariablesStore.prototype.addRulesForMatching = function (rules) { + this.rulesQueue.push(rules); + }; + VariablesStore.prototype.matchVariablesAndDependants = function () { + var _this = this; + this.changedTypeVars.clear(); + this.initialVarTypes = new Map(this.varTypes); + this.collectRootVariables(); + this.collectVariablesAndVarDep(this.rulesQueue); + this.rulesQueue.splice(0); + this.collectRootVarDependants(); + this.varRefs.forEach(function (refs, v) { + refs.forEach(function (r) { + if (_this.varTypes.has(v)) { + _this.resolveVariableType(r, _this.varTypes.get(v)); + } + }); + }); + this.unknownColorVars.forEach(function (v) { + if (_this.unknownBgVars.has(v)) { + _this.unknownColorVars.delete(v); + _this.unknownBgVars.delete(v); + _this.resolveVariableType(v, VAR_TYPE_BGCOLOR); + } else if ( + _this.isVarType( + v, + VAR_TYPE_BGCOLOR | + VAR_TYPE_TEXTCOLOR | + VAR_TYPE_BORDERCOLOR + ) + ) { + _this.unknownColorVars.delete(v); + } else { + _this.undefinedVars.add(v); + } + }); + this.unknownBgVars.forEach(function (v) { + var hasColor = + _this.findVarRef(v, function (ref) { + return ( + _this.unknownColorVars.has(ref) || + _this.isVarType( + ref, + VAR_TYPE_TEXTCOLOR | VAR_TYPE_BORDERCOLOR + ) + ); + }) != null; + if (hasColor) { + _this.itarateVarRefs(v, function (ref) { + _this.resolveVariableType(ref, VAR_TYPE_BGCOLOR); + }); + } else if ( + _this.isVarType(v, VAR_TYPE_BGCOLOR | VAR_TYPE_BGIMG) + ) { + _this.unknownBgVars.delete(v); + } else { + _this.undefinedVars.add(v); + } + }); + this.changedTypeVars.forEach(function (varName) { + if (_this.typeChangeSubscriptions.has(varName)) { + _this.typeChangeSubscriptions + .get(varName) + .forEach(function (callback) { + callback(); + }); + } + }); + this.changedTypeVars.clear(); + }; + VariablesStore.prototype.getModifierForVariable = function (options) { + var _this = this; + return function (theme) { + var varName = options.varName, + sourceValue = options.sourceValue, + rule = options.rule, + ignoredImgSelectors = options.ignoredImgSelectors, + isCancelled = options.isCancelled; + var getDeclarations = function () { + var declarations = []; + var addModifiedValue = function ( + typeNum, + varNameWrapper, + colorModifier + ) { + if (!_this.isVarType(varName, typeNum)) { + return; + } + var property = varNameWrapper(varName); + var modifiedValue; + if (isVarDependant(sourceValue)) { + if (isConstructedColorVar(sourceValue)) { + var value = insertVarValues( + sourceValue, + _this.unstableVarValues + ); + if (!value) { + value = + typeNum === VAR_TYPE_BGCOLOR + ? "#ffffff" + : "#000000"; + } + modifiedValue = colorModifier(value, theme); + } else { + modifiedValue = replaceCSSVariablesNames( + sourceValue, + function (v) { + return varNameWrapper(v); + }, + function (fallback) { + return colorModifier(fallback, theme); + } + ); + } + } else { + modifiedValue = colorModifier(sourceValue, theme); + } + declarations.push({ + property: property, + value: modifiedValue + }); + }; + addModifiedValue( + VAR_TYPE_BGCOLOR, + wrapBgColorVariableName, + tryModifyBgColor + ); + addModifiedValue( + VAR_TYPE_TEXTCOLOR, + wrapTextColorVariableName, + tryModifyTextColor + ); + addModifiedValue( + VAR_TYPE_BORDERCOLOR, + wrapBorderColorVariableName, + tryModifyBorderColor + ); + if (_this.isVarType(varName, VAR_TYPE_BGIMG)) { + var property = wrapBgImgVariableName(varName); + var modifiedValue = sourceValue; + if (isVarDependant(sourceValue)) { + modifiedValue = replaceCSSVariablesNames( + sourceValue, + function (v) { + return wrapBgColorVariableName(v); + }, + function (fallback) { + return tryModifyBgColor(fallback, theme); + } + ); + } + var bgModifier = getBgImageModifier( + modifiedValue, + rule, + ignoredImgSelectors, + isCancelled + ); + modifiedValue = + typeof bgModifier === "function" + ? bgModifier(theme) + : bgModifier; + declarations.push({ + property: property, + value: modifiedValue + }); + } + return declarations; + }; + var callbacks = new Set(); + var addListener = function (onTypeChange) { + var callback = function () { + var decs = getDeclarations(); + onTypeChange(decs); + }; + callbacks.add(callback); + _this.subscribeForVarTypeChange(varName, callback); + }; + var removeListeners = function () { + callbacks.forEach(function (callback) { + _this.unsubscribeFromVariableTypeChanges( + varName, + callback + ); + }); + }; + return { + declarations: getDeclarations(), + onTypeChange: { + addListener: addListener, + removeListeners: removeListeners + } + }; + }; + }; + VariablesStore.prototype.getModifierForVarDependant = function ( + property, + sourceValue + ) { + var _this = this; + if (sourceValue.match(/^\s*(rgb|hsl)a?\(/)) { + var isBg_1 = property.startsWith("background"); + var isText_1 = isTextColorProperty(property); + return function (theme) { + var value = insertVarValues( + sourceValue, + _this.unstableVarValues + ); + if (!value) { + value = isBg_1 ? "#ffffff" : "#000000"; + } + var modifier = isBg_1 + ? tryModifyBgColor + : isText_1 + ? tryModifyTextColor + : tryModifyBorderColor; + return modifier(value, theme); + }; + } + if (property === "background-color") { + return function (theme) { + return replaceCSSVariablesNames( + sourceValue, + function (v) { + return wrapBgColorVariableName(v); + }, + function (fallback) { + return tryModifyBgColor(fallback, theme); + } + ); + }; + } + if (isTextColorProperty(property)) { + return function (theme) { + return replaceCSSVariablesNames( + sourceValue, + function (v) { + return wrapTextColorVariableName(v); + }, + function (fallback) { + return tryModifyTextColor(fallback, theme); + } + ); + }; + } + if ( + property === "background" || + property === "background-image" || + property === "box-shadow" + ) { + return function (theme) { + var unknownVars = new Set(); + var modify = function () { + var variableReplaced = replaceCSSVariablesNames( + sourceValue, + function (v) { + if (_this.isVarType(v, VAR_TYPE_BGCOLOR)) { + return wrapBgColorVariableName(v); + } + if (_this.isVarType(v, VAR_TYPE_BGIMG)) { + return wrapBgImgVariableName(v); + } + unknownVars.add(v); + return v; + }, + function (fallback) { + return tryModifyBgColor(fallback, theme); + } + ); + if (property === "box-shadow") { + var shadowModifier = + getShadowModifierWithInfo(variableReplaced); + var modifiedShadow = shadowModifier(theme); + if ( + modifiedShadow.unparseableMatchesLength !== + modifiedShadow.matchesLength + ) { + return modifiedShadow.result; + } + } + return variableReplaced; + }; + var modified = modify(); + if (unknownVars.size > 0) { + return new Promise(function (resolve) { + var firstUnknownVar = unknownVars + .values() + .next().value; + var callback = function () { + _this.unsubscribeFromVariableTypeChanges( + firstUnknownVar, + callback + ); + var newValue = modify(); + resolve(newValue); + }; + _this.subscribeForVarTypeChange( + firstUnknownVar, + callback + ); + }); + } + return modified; + }; + } + if ( + property.startsWith("border") || + property.startsWith("outline") + ) { + return function (theme) { + return replaceCSSVariablesNames( + sourceValue, + function (v) { + return wrapBorderColorVariableName(v); + }, + function (fallback) { + return tryModifyBorderColor(fallback, theme); + } + ); + }; + } + return null; + }; + VariablesStore.prototype.subscribeForVarTypeChange = function ( + varName, + callback + ) { + if (!this.typeChangeSubscriptions.has(varName)) { + this.typeChangeSubscriptions.set(varName, new Set()); + } + var rootStore = this.typeChangeSubscriptions.get(varName); + if (!rootStore.has(callback)) { + rootStore.add(callback); + } + }; + VariablesStore.prototype.unsubscribeFromVariableTypeChanges = function ( + varName, + callback + ) { + if (this.typeChangeSubscriptions.has(varName)) { + this.typeChangeSubscriptions.get(varName).delete(callback); + } + }; + VariablesStore.prototype.collectVariablesAndVarDep = function ( + ruleList + ) { + var _this = this; + ruleList.forEach(function (rules) { + iterateCSSRules(rules, function (rule) { + rule.style && + iterateCSSDeclarations( + rule.style, + function (property, value) { + if (isVariable(property)) { + _this.inspectVariable(property, value); + } + if (isVarDependant(value)) { + _this.inspectVarDependant(property, value); + } + } + ); + }); + }); + }; + VariablesStore.prototype.collectRootVariables = function () { + var _this = this; + iterateCSSDeclarations( + document.documentElement.style, + function (property, value) { + if (isVariable(property)) { + _this.inspectVariable(property, value); + } + } + ); + }; + VariablesStore.prototype.inspectVariable = function (varName, value) { + this.unstableVarValues.set(varName, value); + if (isVarDependant(value) && isConstructedColorVar(value)) { + this.unknownColorVars.add(varName); + this.definedVars.add(varName); + } + if (this.definedVars.has(varName)) { + return; + } + this.definedVars.add(varName); + var color = parseColorWithCache(value); + if (color) { + this.unknownColorVars.add(varName); + } else if ( + value.includes("url(") || + value.includes("linear-gradient(") || + value.includes("radial-gradient(") + ) { + this.resolveVariableType(varName, VAR_TYPE_BGIMG); + } + }; + VariablesStore.prototype.resolveVariableType = function ( + varName, + typeNum + ) { + var initialType = this.initialVarTypes.get(varName) || 0; + var currentType = this.varTypes.get(varName) || 0; + var newType = currentType | typeNum; + this.varTypes.set(varName, newType); + if (newType !== initialType || this.undefinedVars.has(varName)) { + this.changedTypeVars.add(varName); + this.undefinedVars.delete(varName); + } + this.unknownColorVars.delete(varName); + this.unknownBgVars.delete(varName); + }; + VariablesStore.prototype.collectRootVarDependants = function () { + var _this = this; + iterateCSSDeclarations( + document.documentElement.style, + function (property, value) { + if (isVarDependant(value)) { + _this.inspectVarDependant(property, value); + } + } + ); + }; + VariablesStore.prototype.inspectVarDependant = function ( + property, + value + ) { + var _this = this; + if (isVariable(property)) { + this.iterateVarDeps(value, function (ref) { + if (!_this.varRefs.has(property)) { + _this.varRefs.set(property, new Set()); + } + _this.varRefs.get(property).add(ref); + }); + } else if ( + property === "background-color" || + property === "box-shadow" + ) { + this.iterateVarDeps(value, function (v) { + return _this.resolveVariableType(v, VAR_TYPE_BGCOLOR); + }); + } else if (isTextColorProperty(property)) { + this.iterateVarDeps(value, function (v) { + return _this.resolveVariableType(v, VAR_TYPE_TEXTCOLOR); + }); + } else if ( + property.startsWith("border") || + property.startsWith("outline") + ) { + this.iterateVarDeps(value, function (v) { + return _this.resolveVariableType(v, VAR_TYPE_BORDERCOLOR); + }); + } else if ( + property === "background" || + property === "background-image" + ) { + this.iterateVarDeps(value, function (v) { + if (_this.isVarType(v, VAR_TYPE_BGCOLOR | VAR_TYPE_BGIMG)) { + return; + } + var isBgColor = + _this.findVarRef(v, function (ref) { + return ( + _this.unknownColorVars.has(ref) || + _this.isVarType( + ref, + VAR_TYPE_TEXTCOLOR | VAR_TYPE_BORDERCOLOR + ) + ); + }) != null; + _this.itarateVarRefs(v, function (ref) { + if (isBgColor) { + _this.resolveVariableType(ref, VAR_TYPE_BGCOLOR); + } else { + _this.unknownBgVars.add(ref); + } + }); + }); + } + }; + VariablesStore.prototype.iterateVarDeps = function (value, iterator) { + var varDeps = new Set(); + iterateVarDependencies(value, function (v) { + return varDeps.add(v); + }); + varDeps.forEach(function (v) { + return iterator(v); + }); + }; + VariablesStore.prototype.findVarRef = function ( + varName, + iterator, + stack + ) { + var e_1, _a; + if (stack === void 0) { + stack = new Set(); + } + if (stack.has(varName)) { + return null; + } + stack.add(varName); + var result = iterator(varName); + if (result) { + return varName; + } + var refs = this.varRefs.get(varName); + if (!refs || refs.size === 0) { + return null; + } + try { + for ( + var refs_1 = __values(refs), refs_1_1 = refs_1.next(); + !refs_1_1.done; + refs_1_1 = refs_1.next() + ) { + var ref = refs_1_1.value; + var found = this.findVarRef(ref, iterator, stack); + if (found) { + return found; + } + } + } catch (e_1_1) { + e_1 = {error: e_1_1}; + } finally { + try { + if (refs_1_1 && !refs_1_1.done && (_a = refs_1.return)) + _a.call(refs_1); + } finally { + if (e_1) throw e_1.error; + } + } + return null; + }; + VariablesStore.prototype.itarateVarRefs = function (varName, iterator) { + this.findVarRef(varName, function (ref) { + iterator(ref); + return false; + }); + }; + VariablesStore.prototype.setOnRootVariableChange = function (callback) { + this.onRootVariableDefined = callback; + }; + VariablesStore.prototype.putRootVars = function (styleElement, theme) { + var e_2, _a; + var _this = this; + var sheet = styleElement.sheet; + if (sheet.cssRules.length > 0) { + sheet.deleteRule(0); + } + var declarations = new Map(); + iterateCSSDeclarations( + document.documentElement.style, + function (property, value) { + if (isVariable(property)) { + if (_this.isVarType(property, VAR_TYPE_BGCOLOR)) { + declarations.set( + wrapBgColorVariableName(property), + tryModifyBgColor(value, theme) + ); + } + if (_this.isVarType(property, VAR_TYPE_TEXTCOLOR)) { + declarations.set( + wrapTextColorVariableName(property), + tryModifyTextColor(value, theme) + ); + } + if (_this.isVarType(property, VAR_TYPE_BORDERCOLOR)) { + declarations.set( + wrapBorderColorVariableName(property), + tryModifyBorderColor(value, theme) + ); + } + _this.subscribeForVarTypeChange( + property, + _this.onRootVariableDefined + ); + } + } + ); + var cssLines = []; + cssLines.push(":root {"); + try { + for ( + var declarations_1 = __values(declarations), + declarations_1_1 = declarations_1.next(); + !declarations_1_1.done; + declarations_1_1 = declarations_1.next() + ) { + var _b = __read(declarations_1_1.value, 2), + property = _b[0], + value = _b[1]; + cssLines.push( + " ".concat(property, ": ").concat(value, ";") + ); + } + } catch (e_2_1) { + e_2 = {error: e_2_1}; + } finally { + try { + if ( + declarations_1_1 && + !declarations_1_1.done && + (_a = declarations_1.return) + ) + _a.call(declarations_1); + } finally { + if (e_2) throw e_2.error; + } + } + cssLines.push("}"); + var cssText = cssLines.join("\n"); + sheet.insertRule(cssText); + }; + return VariablesStore; + })(); + var variablesStore = new VariablesStore(); + function getVariableRange(input, searchStart) { + if (searchStart === void 0) { + searchStart = 0; + } + var start = input.indexOf("var(", searchStart); + if (start >= 0) { + var range = getParenthesesRange(input, start + 3); + if (range) { + return {start: start, end: range.end}; + } + return null; + } + } + function getVariablesMatches(input) { + var ranges = []; + var i = 0; + var range; + while ((range = getVariableRange(input, i))) { + var start = range.start, + end = range.end; + ranges.push({ + start: start, + end: end, + value: input.substring(start, end) + }); + i = range.end + 1; + } + return ranges; + } + function replaceVariablesMatches(input, replacer) { + var matches = getVariablesMatches(input); + var matchesCount = matches.length; + if (matchesCount === 0) { + return input; + } + var inputLength = input.length; + var replacements = matches.map(function (m) { + return replacer(m.value); + }); + var parts = []; + parts.push(input.substring(0, matches[0].start)); + for (var i = 0; i < matchesCount; i++) { + parts.push(replacements[i]); + var start = matches[i].end; + var end = i < matchesCount - 1 ? matches[i + 1].start : inputLength; + parts.push(input.substring(start, end)); + } + return parts.join(""); + } + function getVariableNameAndFallback(match) { + var commaIndex = match.indexOf(","); + var name; + var fallback; + if (commaIndex >= 0) { + name = match.substring(4, commaIndex).trim(); + fallback = match.substring(commaIndex + 1, match.length - 1).trim(); + } else { + name = match.substring(4, match.length - 1).trim(); + fallback = ""; + } + return {name: name, fallback: fallback}; + } + function replaceCSSVariablesNames(value, nameReplacer, fallbackReplacer) { + var matchReplacer = function (match) { + var _a = getVariableNameAndFallback(match), + name = _a.name, + fallback = _a.fallback; + var newName = nameReplacer(name); + if (!fallback) { + return "var(".concat(newName, ")"); + } + var newFallback; + if (isVarDependant(fallback)) { + newFallback = replaceCSSVariablesNames( + fallback, + nameReplacer, + fallbackReplacer + ); + } else if (fallbackReplacer) { + newFallback = fallbackReplacer(fallback); + } else { + newFallback = fallback; + } + return "var(".concat(newName, ", ").concat(newFallback, ")"); + }; + return replaceVariablesMatches(value, matchReplacer); + } + function iterateVarDependencies(value, iterator) { + replaceCSSVariablesNames(value, function (varName) { + iterator(varName); + return varName; + }); + } + function wrapBgColorVariableName(name) { + return "--darkreader-bg".concat(name); + } + function wrapTextColorVariableName(name) { + return "--darkreader-text".concat(name); + } + function wrapBorderColorVariableName(name) { + return "--darkreader-border".concat(name); + } + function wrapBgImgVariableName(name) { + return "--darkreader-bgimg".concat(name); + } + function isVariable(property) { + return property.startsWith("--"); + } + function isVarDependant(value) { + return value.includes("var("); + } + function isConstructedColorVar(value) { + return value.match(/^\s*(rgb|hsl)a?\(/); + } + function isTextColorProperty(property) { + return ( + property === "color" || + property === "caret-color" || + property === "-webkit-text-fill-color" + ); + } + var rawValueRegex = /^\d{1,3}, ?\d{1,3}, ?\d{1,3}$/; + function parseRawValue(color) { + if (rawValueRegex.test(color)) { + var splitted = color.split(","); + var resultInRGB_1 = "rgb("; + splitted.forEach(function (number) { + resultInRGB_1 += "".concat(number.trim(), ", "); + }); + resultInRGB_1 = resultInRGB_1.substring( + 0, + resultInRGB_1.length - 2 + ); + resultInRGB_1 += ")"; + return {isRaw: true, color: resultInRGB_1}; + } + return {isRaw: false, color: color}; + } + function handleRawValue(color, theme, modifyFunction) { + var _a = parseRawValue(color), + isRaw = _a.isRaw, + newColor = _a.color; + var rgb = parseColorWithCache(newColor); + if (rgb) { + var outputColor = modifyFunction(rgb, theme); + if (isRaw) { + var outputInRGB = parseColorWithCache(outputColor); + return outputInRGB + ? "" + .concat(outputInRGB.r, ", ") + .concat(outputInRGB.g, ", ") + .concat(outputInRGB.b) + : outputColor; + } + return outputColor; + } + return newColor; + } + function tryModifyBgColor(color, theme) { + return handleRawValue(color, theme, modifyBackgroundColor); + } + function tryModifyTextColor(color, theme) { + return handleRawValue(color, theme, modifyForegroundColor); + } + function tryModifyBorderColor(color, theme) { + return handleRawValue(color, theme, modifyBorderColor); + } + function insertVarValues(source, varValues, stack) { + if (stack === void 0) { + stack = new Set(); + } + var containsUnresolvedVar = false; + var matchReplacer = function (match) { + var _a = getVariableNameAndFallback(match), + name = _a.name, + fallback = _a.fallback; + if (stack.has(name)) { + containsUnresolvedVar = true; + return null; + } + stack.add(name); + var varValue = varValues.get(name) || fallback; + var inserted = null; + if (varValue) { + if (isVarDependant(varValue)) { + inserted = insertVarValues(varValue, varValues, stack); + } else { + inserted = varValue; + } + } + if (!inserted) { + containsUnresolvedVar = true; + return null; + } + return inserted; + }; + var replaced = replaceVariablesMatches(source, matchReplacer); + if (containsUnresolvedVar) { + return null; + } + return replaced; + } + + var overrides = { + "background-color": { + customProp: "--darkreader-inline-bgcolor", + cssProp: "background-color", + dataAttr: "data-darkreader-inline-bgcolor" + }, + "background-image": { + customProp: "--darkreader-inline-bgimage", + cssProp: "background-image", + dataAttr: "data-darkreader-inline-bgimage" + }, + "border-color": { + customProp: "--darkreader-inline-border", + cssProp: "border-color", + dataAttr: "data-darkreader-inline-border" + }, + "border-bottom-color": { + customProp: "--darkreader-inline-border-bottom", + cssProp: "border-bottom-color", + dataAttr: "data-darkreader-inline-border-bottom" + }, + "border-left-color": { + customProp: "--darkreader-inline-border-left", + cssProp: "border-left-color", + dataAttr: "data-darkreader-inline-border-left" + }, + "border-right-color": { + customProp: "--darkreader-inline-border-right", + cssProp: "border-right-color", + dataAttr: "data-darkreader-inline-border-right" + }, + "border-top-color": { + customProp: "--darkreader-inline-border-top", + cssProp: "border-top-color", + dataAttr: "data-darkreader-inline-border-top" + }, + "box-shadow": { + customProp: "--darkreader-inline-boxshadow", + cssProp: "box-shadow", + dataAttr: "data-darkreader-inline-boxshadow" + }, + "color": { + customProp: "--darkreader-inline-color", + cssProp: "color", + dataAttr: "data-darkreader-inline-color" + }, + "fill": { + customProp: "--darkreader-inline-fill", + cssProp: "fill", + dataAttr: "data-darkreader-inline-fill" + }, + "stroke": { + customProp: "--darkreader-inline-stroke", + cssProp: "stroke", + dataAttr: "data-darkreader-inline-stroke" + }, + "outline-color": { + customProp: "--darkreader-inline-outline", + cssProp: "outline-color", + dataAttr: "data-darkreader-inline-outline" + }, + "stop-color": { + customProp: "--darkreader-inline-stopcolor", + cssProp: "stop-color", + dataAttr: "data-darkreader-inline-stopcolor" + } + }; + var overridesList = Object.values(overrides); + var normalizedPropList = {}; + overridesList.forEach(function (_a) { + var cssProp = _a.cssProp, + customProp = _a.customProp; + return (normalizedPropList[customProp] = cssProp); + }); + var INLINE_STYLE_ATTRS = [ + "style", + "fill", + "stop-color", + "stroke", + "bgcolor", + "color" + ]; + var INLINE_STYLE_SELECTOR = INLINE_STYLE_ATTRS.map(function (attr) { + return "[".concat(attr, "]"); + }).join(", "); + function getInlineOverrideStyle() { + return overridesList + .map(function (_a) { + var dataAttr = _a.dataAttr, + customProp = _a.customProp, + cssProp = _a.cssProp; + return [ + "[".concat(dataAttr, "] {"), + " " + .concat(cssProp, ": var(") + .concat(customProp, ") !important;"), + "}" + ].join("\n"); + }) + .join("\n"); + } + function getInlineStyleElements(root) { + var results = []; + if (root instanceof Element && root.matches(INLINE_STYLE_SELECTOR)) { + results.push(root); + } + if ( + root instanceof Element || + (isShadowDomSupported && root instanceof ShadowRoot) || + root instanceof Document + ) { + push(results, root.querySelectorAll(INLINE_STYLE_SELECTOR)); + } + return results; + } + var treeObservers = new Map(); + var attrObservers = new Map(); + function watchForInlineStyles(elementStyleDidChange, shadowRootDiscovered) { + deepWatchForInlineStyles( + document, + elementStyleDidChange, + shadowRootDiscovered + ); + iterateShadowHosts(document.documentElement, function (host) { + deepWatchForInlineStyles( + host.shadowRoot, + elementStyleDidChange, + shadowRootDiscovered + ); + }); + } + function deepWatchForInlineStyles( + root, + elementStyleDidChange, + shadowRootDiscovered + ) { + if (treeObservers.has(root)) { + treeObservers.get(root).disconnect(); + attrObservers.get(root).disconnect(); + } + var discoveredNodes = new WeakSet(); + function discoverNodes(node) { + getInlineStyleElements(node).forEach(function (el) { + if (discoveredNodes.has(el)) { + return; + } + discoveredNodes.add(el); + elementStyleDidChange(el); + }); + iterateShadowHosts(node, function (n) { + if (discoveredNodes.has(node)) { + return; + } + discoveredNodes.add(node); + shadowRootDiscovered(n.shadowRoot); + deepWatchForInlineStyles( + n.shadowRoot, + elementStyleDidChange, + shadowRootDiscovered + ); + }); + } + var treeObserver = createOptimizedTreeObserver(root, { + onMinorMutations: function (_a) { + var additions = _a.additions; + additions.forEach(function (added) { + return discoverNodes(added); + }); + }, + onHugeMutations: function () { + discoverNodes(root); + } + }); + treeObservers.set(root, treeObserver); + var attemptCount = 0; + var start = null; + var ATTEMPTS_INTERVAL = getDuration({seconds: 10}); + var RETRY_TIMEOUT = getDuration({seconds: 2}); + var MAX_ATTEMPTS_COUNT = 50; + var cache = []; + var timeoutId = null; + var handleAttributeMutations = throttle(function (mutations) { + mutations.forEach(function (m) { + if (INLINE_STYLE_ATTRS.includes(m.attributeName)) { + elementStyleDidChange(m.target); + } + }); + }); + var attrObserver = new MutationObserver(function (mutations) { + if (timeoutId) { + cache.push.apply( + cache, + __spreadArray([], __read(mutations), false) + ); + return; + } + attemptCount++; + var now = Date.now(); + if (start == null) { + start = now; + } else if (attemptCount >= MAX_ATTEMPTS_COUNT) { + if (now - start < ATTEMPTS_INTERVAL) { + timeoutId = setTimeout(function () { + start = null; + attemptCount = 0; + timeoutId = null; + var attributeCache = cache; + cache = []; + handleAttributeMutations(attributeCache); + }, RETRY_TIMEOUT); + cache.push.apply( + cache, + __spreadArray([], __read(mutations), false) + ); + return; + } + start = now; + attemptCount = 1; + } + handleAttributeMutations(mutations); + }); + attrObserver.observe(root, { + attributes: true, + attributeFilter: INLINE_STYLE_ATTRS.concat( + overridesList.map(function (_a) { + var dataAttr = _a.dataAttr; + return dataAttr; + }) + ), + subtree: true + }); + attrObservers.set(root, attrObserver); + } + function stopWatchingForInlineStyles() { + treeObservers.forEach(function (o) { + return o.disconnect(); + }); + attrObservers.forEach(function (o) { + return o.disconnect(); + }); + treeObservers.clear(); + attrObservers.clear(); + } + var inlineStyleCache = new WeakMap(); + var filterProps = ["brightness", "contrast", "grayscale", "sepia", "mode"]; + function getInlineStyleCacheKey(el, theme) { + return INLINE_STYLE_ATTRS.map(function (attr) { + return "".concat(attr, '="').concat(el.getAttribute(attr), '"'); + }) + .concat( + filterProps.map(function (prop) { + return "".concat(prop, '="').concat(theme[prop], '"'); + }) + ) + .join(" "); + } + function shouldIgnoreInlineStyle(element, selectors) { + for (var i = 0, len = selectors.length; i < len; i++) { + var ingnoredSelector = selectors[i]; + if (element.matches(ingnoredSelector)) { + return true; + } + } + return false; + } + function overrideInlineStyle( + element, + theme, + ignoreInlineSelectors, + ignoreImageSelectors + ) { + var cacheKey = getInlineStyleCacheKey(element, theme); + if (cacheKey === inlineStyleCache.get(element)) { + return; + } + var unsetProps = new Set(Object.keys(overrides)); + function setCustomProp(targetCSSProp, modifierCSSProp, cssVal) { + var isPropertyVariable = targetCSSProp.startsWith("--"); + var _a = isPropertyVariable ? {} : overrides[targetCSSProp], + customProp = _a.customProp, + dataAttr = _a.dataAttr; + var mod = getModifiableCSSDeclaration( + modifierCSSProp, + cssVal, + {style: element.style}, + variablesStore, + ignoreImageSelectors, + null + ); + if (!mod) { + return; + } + var value = mod.value; + if (typeof value === "function") { + value = value(theme); + } + if (isPropertyVariable && typeof value === "object") { + var typedValue = value; + typedValue.declarations.forEach(function (_a) { + var property = _a.property, + value = _a.value; + !(value instanceof Promise) && + element.style.setProperty(property, value); + }); + } else { + element.style.setProperty(customProp, value); + if (!element.hasAttribute(dataAttr)) { + element.setAttribute(dataAttr, ""); + } + unsetProps.delete(targetCSSProp); + } + } + if (ignoreInlineSelectors.length > 0) { + if (shouldIgnoreInlineStyle(element, ignoreInlineSelectors)) { + unsetProps.forEach(function (cssProp) { + element.removeAttribute(overrides[cssProp].dataAttr); + }); + return; + } + } + if (element.hasAttribute("bgcolor")) { + var value = element.getAttribute("bgcolor"); + if ( + value.match(/^[0-9a-f]{3}$/i) || + value.match(/^[0-9a-f]{6}$/i) + ) { + value = "#".concat(value); + } + setCustomProp("background-color", "background-color", value); + } + if (element.hasAttribute("color") && element.rel !== "mask-icon") { + var value = element.getAttribute("color"); + if ( + value.match(/^[0-9a-f]{3}$/i) || + value.match(/^[0-9a-f]{6}$/i) + ) { + value = "#".concat(value); + } + setCustomProp("color", "color", value); + } + if (element instanceof SVGElement) { + if (element.hasAttribute("fill")) { + var SMALL_SVG_LIMIT_1 = 32; + var value_1 = element.getAttribute("fill"); + if (value_1 !== "none") { + if (!(element instanceof SVGTextElement)) { + var handleSVGElement = function () { + var _a = element.getBoundingClientRect(), + width = _a.width, + height = _a.height; + var isBg = + width > SMALL_SVG_LIMIT_1 || + height > SMALL_SVG_LIMIT_1; + setCustomProp( + "fill", + isBg ? "background-color" : "color", + value_1 + ); + }; + if (isReadyStateComplete()) { + handleSVGElement(); + } else { + addReadyStateCompleteListener(handleSVGElement); + } + } else { + setCustomProp("fill", "color", value_1); + } + } + } + if (element.hasAttribute("stop-color")) { + setCustomProp( + "stop-color", + "background-color", + element.getAttribute("stop-color") + ); + } + } + if (element.hasAttribute("stroke")) { + var value = element.getAttribute("stroke"); + setCustomProp( + "stroke", + element instanceof SVGLineElement || + element instanceof SVGTextElement + ? "border-color" + : "color", + value + ); + } + element.style && + iterateCSSDeclarations(element.style, function (property, value) { + if (property === "background-image" && value.includes("url")) { + return; + } + if ( + overrides.hasOwnProperty(property) || + (property.startsWith("--") && !normalizedPropList[property]) + ) { + setCustomProp(property, property, value); + } else { + var overridenProp = normalizedPropList[property]; + if ( + overridenProp && + !element.style.getPropertyValue(overridenProp) && + !element.hasAttribute(overridenProp) + ) { + if ( + overridenProp === "background-color" && + element.hasAttribute("bgcolor") + ) { + return; + } + element.style.setProperty(property, ""); + } + } + }); + if ( + element.style && + element instanceof SVGTextElement && + element.style.fill + ) { + setCustomProp( + "fill", + "color", + element.style.getPropertyValue("fill") + ); + } + forEach(unsetProps, function (cssProp) { + element.removeAttribute(overrides[cssProp].dataAttr); + }); + inlineStyleCache.set(element, getInlineStyleCacheKey(element, theme)); + } + + var metaThemeColorName = "theme-color"; + var metaThemeColorSelector = 'meta[name="'.concat(metaThemeColorName, '"]'); + var srcMetaThemeColor = null; + var observer = null; + function changeMetaThemeColor(meta, theme) { + srcMetaThemeColor = srcMetaThemeColor || meta.content; + var color = parseColorWithCache(srcMetaThemeColor); + if (!color) { + return; + } + meta.content = modifyBackgroundColor(color, theme); + } + function changeMetaThemeColorWhenAvailable(theme) { + var meta = document.querySelector(metaThemeColorSelector); + if (meta) { + changeMetaThemeColor(meta, theme); + } else { + if (observer) { + observer.disconnect(); + } + observer = new MutationObserver(function (mutations) { + loop: for (var i = 0; i < mutations.length; i++) { + var addedNodes = mutations[i].addedNodes; + for (var j = 0; j < addedNodes.length; j++) { + var node = addedNodes[j]; + if ( + node instanceof HTMLMetaElement && + node.name === metaThemeColorName + ) { + observer.disconnect(); + observer = null; + changeMetaThemeColor(node, theme); + break loop; + } + } + } + }); + observer.observe(document.head, {childList: true}); + } + } + function restoreMetaThemeColor() { + if (observer) { + observer.disconnect(); + observer = null; + } + var meta = document.querySelector(metaThemeColorSelector); + if (meta && srcMetaThemeColor) { + meta.content = srcMetaThemeColor; + } + } + + var themeCacheKeys = [ + "mode", + "brightness", + "contrast", + "grayscale", + "sepia", + "darkSchemeBackgroundColor", + "darkSchemeTextColor", + "lightSchemeBackgroundColor", + "lightSchemeTextColor" + ]; + function getThemeKey(theme) { + var resultKey = ""; + themeCacheKeys.forEach(function (key) { + resultKey += "".concat(key, ":").concat(theme[key], ";"); + }); + return resultKey; + } + var asyncQueue = createAsyncTasksQueue(); + function createStyleSheetModifier() { + var renderId = 0; + var rulesTextCache = new Set(); + var rulesModCache = new Map(); + var varTypeChangeCleaners = new Set(); + var prevFilterKey = null; + var hasNonLoadedLink = false; + var wasRebuilt = false; + function shouldRebuildStyle() { + return hasNonLoadedLink && !wasRebuilt; + } + function modifySheet(options) { + var rules = options.sourceCSSRules; + var theme = options.theme, + ignoreImageAnalysis = options.ignoreImageAnalysis, + force = options.force, + prepareSheet = options.prepareSheet, + isAsyncCancelled = options.isAsyncCancelled; + var rulesChanged = rulesModCache.size === 0; + var notFoundCacheKeys = new Set(rulesModCache.keys()); + var themeKey = getThemeKey(theme); + var themeChanged = themeKey !== prevFilterKey; + if (hasNonLoadedLink) { + wasRebuilt = true; + } + var modRules = []; + iterateCSSRules( + rules, + function (rule) { + var cssText = rule.cssText; + var textDiffersFromPrev = false; + notFoundCacheKeys.delete(cssText); + if (rule.parentRule instanceof CSSMediaRule) { + cssText += ";".concat(rule.parentRule.media.mediaText); + } + if (!rulesTextCache.has(cssText)) { + rulesTextCache.add(cssText); + textDiffersFromPrev = true; + } + if (textDiffersFromPrev) { + rulesChanged = true; + } else { + modRules.push(rulesModCache.get(cssText)); + return; + } + var modDecs = []; + rule.style && + iterateCSSDeclarations( + rule.style, + function (property, value) { + var mod = getModifiableCSSDeclaration( + property, + value, + rule, + variablesStore, + ignoreImageAnalysis, + isAsyncCancelled + ); + if (mod) { + modDecs.push(mod); + } + } + ); + var modRule = null; + if (modDecs.length > 0) { + var parentRule = rule.parentRule; + modRule = { + selector: rule.selectorText, + declarations: modDecs, + parentRule: parentRule + }; + modRules.push(modRule); + } + rulesModCache.set(cssText, modRule); + }, + function () { + hasNonLoadedLink = true; + } + ); + notFoundCacheKeys.forEach(function (key) { + rulesTextCache.delete(key); + rulesModCache.delete(key); + }); + prevFilterKey = themeKey; + if (!force && !rulesChanged && !themeChanged) { + return; + } + renderId++; + function setRule(target, index, rule) { + var selector = rule.selector, + declarations = rule.declarations; + var getDeclarationText = function (dec) { + var property = dec.property, + value = dec.value, + important = dec.important, + sourceValue = dec.sourceValue; + return "" + .concat(property, ": ") + .concat(value == null ? sourceValue : value) + .concat(important ? " !important" : "", ";"); + }; + var cssRulesText = ""; + declarations.forEach(function (declarations) { + cssRulesText += "".concat( + getDeclarationText(declarations), + " " + ); + }); + var ruleText = "" + .concat(selector, " { ") + .concat(cssRulesText, " }"); + target.insertRule(ruleText, index); + } + var asyncDeclarations = new Map(); + var varDeclarations = new Map(); + var asyncDeclarationCounter = 0; + var varDeclarationCounter = 0; + var rootReadyGroup = {rule: null, rules: [], isGroup: true}; + var groupRefs = new WeakMap(); + function getGroup(rule) { + if (rule == null) { + return rootReadyGroup; + } + if (groupRefs.has(rule)) { + return groupRefs.get(rule); + } + var group = {rule: rule, rules: [], isGroup: true}; + groupRefs.set(rule, group); + var parentGroup = getGroup(rule.parentRule); + parentGroup.rules.push(group); + return group; + } + varTypeChangeCleaners.forEach(function (clear) { + return clear(); + }); + varTypeChangeCleaners.clear(); + modRules + .filter(function (r) { + return r; + }) + .forEach(function (_a) { + var selector = _a.selector, + declarations = _a.declarations, + parentRule = _a.parentRule; + var group = getGroup(parentRule); + var readyStyleRule = { + selector: selector, + declarations: [], + isGroup: false + }; + var readyDeclarations = readyStyleRule.declarations; + group.rules.push(readyStyleRule); + function handleAsyncDeclaration( + property, + modified, + important, + sourceValue + ) { + var asyncKey = ++asyncDeclarationCounter; + var asyncDeclaration = { + property: property, + value: null, + important: important, + asyncKey: asyncKey, + sourceValue: sourceValue + }; + readyDeclarations.push(asyncDeclaration); + var currentRenderId = renderId; + modified.then(function (asyncValue) { + if ( + !asyncValue || + isAsyncCancelled() || + currentRenderId !== renderId + ) { + return; + } + asyncDeclaration.value = asyncValue; + asyncQueue.add(function () { + if ( + isAsyncCancelled() || + currentRenderId !== renderId + ) { + return; + } + rebuildAsyncRule(asyncKey); + }); + }); + } + function handleVarDeclarations( + property, + modified, + important, + sourceValue + ) { + var _a = modified, + varDecs = _a.declarations, + onTypeChange = _a.onTypeChange; + var varKey = ++varDeclarationCounter; + var currentRenderId = renderId; + var initialIndex = readyDeclarations.length; + var oldDecs = []; + if (varDecs.length === 0) { + var tempDec = { + property: property, + value: sourceValue, + important: important, + sourceValue: sourceValue, + varKey: varKey + }; + readyDeclarations.push(tempDec); + oldDecs = [tempDec]; + } + varDecs.forEach(function (mod) { + if (mod.value instanceof Promise) { + handleAsyncDeclaration( + mod.property, + mod.value, + important, + sourceValue + ); + } else { + var readyDec = { + property: mod.property, + value: mod.value, + important: important, + sourceValue: sourceValue, + varKey: varKey + }; + readyDeclarations.push(readyDec); + oldDecs.push(readyDec); + } + }); + onTypeChange.addListener(function (newDecs) { + if ( + isAsyncCancelled() || + currentRenderId !== renderId + ) { + return; + } + var readyVarDecs = newDecs.map(function (mod) { + return { + property: mod.property, + value: mod.value, + important: important, + sourceValue: sourceValue, + varKey: varKey + }; + }); + var index = readyDeclarations.indexOf( + oldDecs[0], + initialIndex + ); + readyDeclarations.splice.apply( + readyDeclarations, + __spreadArray( + [index, oldDecs.length], + __read(readyVarDecs), + false + ) + ); + oldDecs = readyVarDecs; + rebuildVarRule(varKey); + }); + varTypeChangeCleaners.add(function () { + return onTypeChange.removeListeners(); + }); + } + declarations.forEach(function (_a) { + var property = _a.property, + value = _a.value, + important = _a.important, + sourceValue = _a.sourceValue; + if (typeof value === "function") { + var modified = value(theme); + if (modified instanceof Promise) { + handleAsyncDeclaration( + property, + modified, + important, + sourceValue + ); + } else if (property.startsWith("--")) { + handleVarDeclarations( + property, + modified, + important, + sourceValue + ); + } else { + readyDeclarations.push({ + property: property, + value: modified, + important: important, + sourceValue: sourceValue + }); + } + } else { + readyDeclarations.push({ + property: property, + value: value, + important: important, + sourceValue: sourceValue + }); + } + }); + }); + var sheet = prepareSheet(); + function buildStyleSheet() { + function createTarget(group, parent) { + var rule = group.rule; + if (rule instanceof CSSMediaRule) { + var media = rule.media; + var index = parent.cssRules.length; + parent.insertRule( + "@media ".concat(media.mediaText, " {}"), + index + ); + return parent.cssRules[index]; + } + return parent; + } + function iterateReadyRules(group, target, styleIterator) { + group.rules.forEach(function (r) { + if (r.isGroup) { + var t = createTarget(r, target); + iterateReadyRules(r, t, styleIterator); + } else { + styleIterator(r, target); + } + }); + } + iterateReadyRules( + rootReadyGroup, + sheet, + function (rule, target) { + var index = target.cssRules.length; + rule.declarations.forEach(function (_a) { + var asyncKey = _a.asyncKey, + varKey = _a.varKey; + if (asyncKey != null) { + asyncDeclarations.set(asyncKey, { + rule: rule, + target: target, + index: index + }); + } + if (varKey != null) { + varDeclarations.set(varKey, { + rule: rule, + target: target, + index: index + }); + } + }); + setRule(target, index, rule); + } + ); + } + function rebuildAsyncRule(key) { + var _a = asyncDeclarations.get(key), + rule = _a.rule, + target = _a.target, + index = _a.index; + target.deleteRule(index); + setRule(target, index, rule); + asyncDeclarations.delete(key); + } + function rebuildVarRule(key) { + var _a = varDeclarations.get(key), + rule = _a.rule, + target = _a.target, + index = _a.index; + target.deleteRule(index); + setRule(target, index, rule); + } + buildStyleSheet(); + } + return { + modifySheet: modifySheet, + shouldRebuildStyle: shouldRebuildStyle + }; + } + + var STYLE_SELECTOR = 'style, link[rel*="stylesheet" i]:not([disabled])'; + function isFontsGoogleApiStyle(element) { + if (!element.href) { + return false; + } + try { + var elementURL = new URL(element.href); + return elementURL.hostname === "fonts.googleapis.com"; + } catch (err) { + logInfo("Couldn't construct ".concat(element.href, " as URL")); + return false; + } + } + function shouldManageStyle(element) { + return ( + (element instanceof HTMLStyleElement || + element instanceof SVGStyleElement || + (element instanceof HTMLLinkElement && + element.rel && + element.rel.toLowerCase().includes("stylesheet") && + element.href && + !element.disabled && + (isFirefox + ? !element.href.startsWith("moz-extension://") + : true) && + !isFontsGoogleApiStyle(element))) && + !element.classList.contains("darkreader") && + element.media.toLowerCase() !== "print" && + !element.classList.contains("stylus") + ); + } + function getManageableStyles(node, results, deep) { + if (results === void 0) { + results = []; + } + if (deep === void 0) { + deep = true; + } + if (shouldManageStyle(node)) { + results.push(node); + } else if ( + node instanceof Element || + (isShadowDomSupported && node instanceof ShadowRoot) || + node === document + ) { + forEach(node.querySelectorAll(STYLE_SELECTOR), function (style) { + return getManageableStyles(style, results, false); + }); + if (deep) { + iterateShadowHosts(node, function (host) { + return getManageableStyles(host.shadowRoot, results, false); + }); + } + } + return results; + } + var syncStyleSet = new WeakSet(); + var corsStyleSet = new WeakSet(); + var canOptimizeUsingProxy$1 = false; + document.addEventListener( + "__darkreader__inlineScriptsAllowed", + function () { + canOptimizeUsingProxy$1 = true; + } + ); + var loadingLinkCounter = 0; + var rejectorsForLoadingLinks = new Map(); + function cleanLoadingLinks() { + rejectorsForLoadingLinks.clear(); + } + function manageStyle(element, _a) { + var update = _a.update, + loadingStart = _a.loadingStart, + loadingEnd = _a.loadingEnd; + var prevStyles = []; + var next = element; + while ( + (next = next.nextElementSibling) && + next.matches(".darkreader") + ) { + prevStyles.push(next); + } + var corsCopy = + prevStyles.find(function (el) { + return el.matches(".darkreader--cors") && !corsStyleSet.has(el); + }) || null; + var syncStyle = + prevStyles.find(function (el) { + return el.matches(".darkreader--sync") && !syncStyleSet.has(el); + }) || null; + var corsCopyPositionWatcher = null; + var syncStylePositionWatcher = null; + var cancelAsyncOperations = false; + var isOverrideEmpty = true; + var sheetModifier = createStyleSheetModifier(); + var observer = new MutationObserver(function () { + update(); + }); + var observerOptions = { + attributes: true, + childList: true, + subtree: true, + characterData: true + }; + function containsCSSImport() { + return ( + element instanceof HTMLStyleElement && + element.textContent.trim().match(cssImportRegex) + ); + } + function hasImports(cssRules, checkCrossOrigin) { + var result = false; + if (cssRules) { + var rule = void 0; + cssRulesLoop: for ( + var i = 0, len = cssRules.length; + i < len; + i++ + ) { + rule = cssRules[i]; + if (rule.href) { + if (checkCrossOrigin) { + if ( + rule.href.startsWith("http") && + !rule.href.startsWith(location.origin) + ) { + result = true; + break cssRulesLoop; + } + } else { + result = true; + break cssRulesLoop; + } + } + } + } + return result; + } + function getRulesSync() { + if (corsCopy) { + return corsCopy.sheet.cssRules; + } + if (containsCSSImport()) { + return null; + } + var cssRules = safeGetSheetRules(); + if ( + element instanceof HTMLLinkElement && + !isRelativeHrefOnAbsolutePath(element.href) && + hasImports(cssRules, false) + ) { + return null; + } + if (hasImports(cssRules, true)) { + return null; + } + return cssRules; + } + function insertStyle() { + if (corsCopy) { + if (element.nextSibling !== corsCopy) { + element.parentNode.insertBefore( + corsCopy, + element.nextSibling + ); + } + if (corsCopy.nextSibling !== syncStyle) { + element.parentNode.insertBefore( + syncStyle, + corsCopy.nextSibling + ); + } + } else if (element.nextSibling !== syncStyle) { + element.parentNode.insertBefore(syncStyle, element.nextSibling); + } + } + function createSyncStyle() { + syncStyle = + element instanceof SVGStyleElement + ? document.createElementNS( + "http://www.w3.org/2000/svg", + "style" + ) + : document.createElement("style"); + syncStyle.classList.add("darkreader"); + syncStyle.classList.add("darkreader--sync"); + syncStyle.media = "screen"; + if (element.title) { + syncStyle.title = element.title; + } + syncStyleSet.add(syncStyle); + } + var isLoadingRules = false; + var wasLoadingError = false; + var loadingLinkId = ++loadingLinkCounter; + function getRulesAsync() { + return __awaiter(this, void 0, void 0, function () { + var cssText, + cssBasePath, + _a, + cssRules, + accessError, + fullCSSText; + var _b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + if (!(element instanceof HTMLLinkElement)) + return [3, 7]; + (_a = __read(getRulesOrError(), 2)), + (cssRules = _a[0]), + (accessError = _a[1]); + if ( + !( + (!cssRules && !accessError && !isSafari) || + (isSafari && !element.sheet) || + isStillLoadingError(accessError) + ) + ) + return [3, 5]; + _c.label = 1; + case 1: + _c.trys.push([1, 3, , 4]); + return [4, linkLoading(element, loadingLinkId)]; + case 2: + _c.sent(); + return [3, 4]; + case 3: + _c.sent(); + wasLoadingError = true; + return [3, 4]; + case 4: + if (cancelAsyncOperations) { + return [2, null]; + } + (_b = __read(getRulesOrError(), 2)), + (cssRules = _b[0]), + (accessError = _b[1]); + _c.label = 5; + case 5: + if (cssRules) { + if (!hasImports(cssRules, false)) { + return [2, cssRules]; + } + } + return [4, loadText(element.href)]; + case 6: + cssText = _c.sent(); + cssBasePath = getCSSBaseBath(element.href); + if (cancelAsyncOperations) { + return [2, null]; + } + return [3, 8]; + case 7: + if (containsCSSImport()) { + cssText = element.textContent.trim(); + cssBasePath = getCSSBaseBath(location.href); + } else { + return [2, null]; + } + _c.label = 8; + case 8: + if (!cssText) return [3, 13]; + _c.label = 9; + case 9: + _c.trys.push([9, 11, , 12]); + return [4, replaceCSSImports(cssText, cssBasePath)]; + case 10: + fullCSSText = _c.sent(); + corsCopy = createCORSCopy(element, fullCSSText); + return [3, 12]; + case 11: + _c.sent(); + return [3, 12]; + case 12: + if (corsCopy) { + corsCopyPositionWatcher = watchForNodePosition( + corsCopy, + "prev-sibling" + ); + return [2, corsCopy.sheet.cssRules]; + } + _c.label = 13; + case 13: + return [2, null]; + } + }); + }); + } + function details(options) { + var rules = getRulesSync(); + if (!rules) { + if (options.secondRound) { + return null; + } + if (isLoadingRules || wasLoadingError) { + return null; + } + isLoadingRules = true; + loadingStart(); + getRulesAsync() + .then(function (results) { + isLoadingRules = false; + loadingEnd(); + if (results) { + update(); + } + }) + .catch(function (err) { + isLoadingRules = false; + loadingEnd(); + }); + return null; + } + return {rules: rules}; + } + var forceRenderStyle = false; + function render(theme, ignoreImageAnalysis) { + var rules = getRulesSync(); + if (!rules) { + return; + } + cancelAsyncOperations = false; + function removeCSSRulesFromSheet(sheet) { + for (var i = sheet.cssRules.length - 1; i >= 0; i--) { + sheet.deleteRule(i); + } + } + function prepareOverridesSheet() { + if (!syncStyle) { + createSyncStyle(); + } + syncStylePositionWatcher && syncStylePositionWatcher.stop(); + insertStyle(); + if (syncStyle.sheet == null) { + syncStyle.textContent = ""; + } + var sheet = syncStyle.sheet; + removeCSSRulesFromSheet(sheet); + if (syncStylePositionWatcher) { + syncStylePositionWatcher.run(); + } else { + syncStylePositionWatcher = watchForNodePosition( + syncStyle, + "prev-sibling", + function () { + forceRenderStyle = true; + buildOverrides(); + } + ); + } + return syncStyle.sheet; + } + function buildOverrides() { + var force = forceRenderStyle; + forceRenderStyle = false; + sheetModifier.modifySheet({ + prepareSheet: prepareOverridesSheet, + sourceCSSRules: rules, + theme: theme, + ignoreImageAnalysis: ignoreImageAnalysis, + force: force, + isAsyncCancelled: function () { + return cancelAsyncOperations; + } + }); + isOverrideEmpty = syncStyle.sheet.cssRules.length === 0; + if (sheetModifier.shouldRebuildStyle()) { + addReadyStateCompleteListener(function () { + return update(); + }); + } + } + buildOverrides(); + } + function getRulesOrError() { + try { + if (element.sheet == null) { + return [null, null]; + } + return [element.sheet.cssRules, null]; + } catch (err) { + return [null, err]; + } + } + function isStillLoadingError(error) { + return error && error.message && error.message.includes("loading"); + } + function safeGetSheetRules() { + var _a = __read(getRulesOrError(), 2), + cssRules = _a[0], + err = _a[1]; + if (err) { + return null; + } + return cssRules; + } + function watchForSheetChanges() { + watchForSheetChangesUsingProxy(); + if (!(canOptimizeUsingProxy$1 && element.sheet)) { + watchForSheetChangesUsingRAF(); + } + } + var rulesChangeKey = null; + var rulesCheckFrameId = null; + function getRulesChangeKey() { + var rules = safeGetSheetRules(); + return rules ? rules.length : null; + } + function didRulesKeyChange() { + return getRulesChangeKey() !== rulesChangeKey; + } + function watchForSheetChangesUsingRAF() { + rulesChangeKey = getRulesChangeKey(); + stopWatchingForSheetChangesUsingRAF(); + var checkForUpdate = function () { + if (didRulesKeyChange()) { + rulesChangeKey = getRulesChangeKey(); + update(); + } + if (canOptimizeUsingProxy$1 && element.sheet) { + stopWatchingForSheetChangesUsingRAF(); + return; + } + rulesCheckFrameId = requestAnimationFrame(checkForUpdate); + }; + checkForUpdate(); + } + function stopWatchingForSheetChangesUsingRAF() { + cancelAnimationFrame(rulesCheckFrameId); + } + var areSheetChangesPending = false; + function onSheetChange() { + canOptimizeUsingProxy$1 = true; + stopWatchingForSheetChangesUsingRAF(); + if (areSheetChangesPending) { + return; + } + function handleSheetChanges() { + areSheetChangesPending = false; + if (cancelAsyncOperations) { + return; + } + update(); + } + areSheetChangesPending = true; + if (typeof queueMicrotask === "function") { + queueMicrotask(handleSheetChanges); + } else { + requestAnimationFrame(handleSheetChanges); + } + } + function watchForSheetChangesUsingProxy() { + element.addEventListener( + "__darkreader__updateSheet", + onSheetChange + ); + } + function stopWatchingForSheetChangesUsingProxy() { + element.removeEventListener( + "__darkreader__updateSheet", + onSheetChange + ); + } + function stopWatchingForSheetChanges() { + stopWatchingForSheetChangesUsingProxy(); + stopWatchingForSheetChangesUsingRAF(); + } + function pause() { + observer.disconnect(); + cancelAsyncOperations = true; + corsCopyPositionWatcher && corsCopyPositionWatcher.stop(); + syncStylePositionWatcher && syncStylePositionWatcher.stop(); + stopWatchingForSheetChanges(); + } + function destroy() { + pause(); + removeNode(corsCopy); + removeNode(syncStyle); + loadingEnd(); + if (rejectorsForLoadingLinks.has(loadingLinkId)) { + var reject = rejectorsForLoadingLinks.get(loadingLinkId); + rejectorsForLoadingLinks.delete(loadingLinkId); + reject && reject(); + } + } + function watch() { + observer.observe(element, observerOptions); + if (element instanceof HTMLStyleElement) { + watchForSheetChanges(); + } + } + var maxMoveCount = 10; + var moveCount = 0; + function restore() { + if (!syncStyle) { + return; + } + moveCount++; + if (moveCount > maxMoveCount) { + return; + } + insertStyle(); + corsCopyPositionWatcher && corsCopyPositionWatcher.skip(); + syncStylePositionWatcher && syncStylePositionWatcher.skip(); + if (!isOverrideEmpty) { + forceRenderStyle = true; + update(); + } + } + return { + details: details, + render: render, + pause: pause, + destroy: destroy, + watch: watch, + restore: restore + }; + } + function linkLoading(link, loadingId) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [ + 2, + new Promise(function (resolve, reject) { + var cleanUp = function () { + link.removeEventListener("load", onLoad); + link.removeEventListener("error", onError); + rejectorsForLoadingLinks.delete(loadingId); + }; + var onLoad = function () { + cleanUp(); + resolve(); + }; + var onError = function () { + cleanUp(); + reject( + "Linkelement " + .concat(loadingId, " couldn't be loaded. ") + .concat(link.href) + ); + }; + rejectorsForLoadingLinks.set(loadingId, function () { + cleanUp(); + reject(); + }); + link.addEventListener("load", onLoad); + link.addEventListener("error", onError); + if (!link.href) { + onError(); + } + }) + ]; + }); + }); + } + function getCSSImportURL(importDeclaration) { + return getCSSURLValue( + importDeclaration + .substring(7) + .trim() + .replace(/;$/, "") + .replace(/screen$/, "") + ); + } + function loadText(url) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!url.startsWith("data:")) return [3, 3]; + return [4, fetch(url)]; + case 1: + return [4, _a.sent().text()]; + case 2: + return [2, _a.sent()]; + case 3: + return [ + 4, + bgFetch({ + url: url, + responseType: "text", + mimeType: "text/css", + origin: window.location.origin + }) + ]; + case 4: + return [2, _a.sent()]; + } + }); + }); + } + function replaceCSSImports(cssText, basePath, cache) { + if (cache === void 0) { + cache = new Map(); + } + return __awaiter(this, void 0, void 0, function () { + var importMatches, + importMatches_1, + importMatches_1_1, + match, + importURL, + absoluteURL, + importedCSS, + e_1_1; + var e_1, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + cssText = removeCSSComments(cssText); + cssText = replaceCSSFontFace(cssText); + cssText = replaceCSSRelativeURLsWithAbsolute( + cssText, + basePath + ); + importMatches = getMatches(cssImportRegex, cssText); + _b.label = 1; + case 1: + _b.trys.push([1, 10, 11, 12]); + (importMatches_1 = __values(importMatches)), + (importMatches_1_1 = importMatches_1.next()); + _b.label = 2; + case 2: + if (!!importMatches_1_1.done) return [3, 9]; + match = importMatches_1_1.value; + importURL = getCSSImportURL(match); + absoluteURL = getAbsoluteURL(basePath, importURL); + importedCSS = void 0; + if (!cache.has(absoluteURL)) return [3, 3]; + importedCSS = cache.get(absoluteURL); + return [3, 7]; + case 3: + _b.trys.push([3, 6, , 7]); + return [4, loadText(absoluteURL)]; + case 4: + importedCSS = _b.sent(); + cache.set(absoluteURL, importedCSS); + return [ + 4, + replaceCSSImports( + importedCSS, + getCSSBaseBath(absoluteURL), + cache + ) + ]; + case 5: + importedCSS = _b.sent(); + return [3, 7]; + case 6: + _b.sent(); + importedCSS = ""; + return [3, 7]; + case 7: + cssText = cssText.split(match).join(importedCSS); + _b.label = 8; + case 8: + importMatches_1_1 = importMatches_1.next(); + return [3, 2]; + case 9: + return [3, 12]; + case 10: + e_1_1 = _b.sent(); + e_1 = {error: e_1_1}; + return [3, 12]; + case 11: + try { + if ( + importMatches_1_1 && + !importMatches_1_1.done && + (_a = importMatches_1.return) + ) + _a.call(importMatches_1); + } finally { + if (e_1) throw e_1.error; + } + return [7]; + case 12: + cssText = cssText.trim(); + return [2, cssText]; + } + }); + }); + } + function createCORSCopy(srcElement, cssText) { + if (!cssText) { + return null; + } + var cors = document.createElement("style"); + cors.classList.add("darkreader"); + cors.classList.add("darkreader--cors"); + cors.media = "screen"; + cors.textContent = cssText; + srcElement.parentNode.insertBefore(cors, srcElement.nextSibling); + cors.sheet.disabled = true; + corsStyleSet.add(cors); + return cors; + } + + var observers = []; + var observedRoots; + var undefinedGroups = new Map(); + var elementsDefinitionCallback; + function collectUndefinedElements(root) { + if (!isDefinedSelectorSupported) { + return; + } + forEach(root.querySelectorAll(":not(:defined)"), function (el) { + var tag = el.tagName.toLowerCase(); + if (!tag.includes("-")) { + var extendedTag = el.getAttribute("is"); + if (extendedTag) { + tag = extendedTag; + } else { + return; + } + } + if (!undefinedGroups.has(tag)) { + undefinedGroups.set(tag, new Set()); + customElementsWhenDefined(tag).then(function () { + if (elementsDefinitionCallback) { + var elements = undefinedGroups.get(tag); + undefinedGroups.delete(tag); + elementsDefinitionCallback(Array.from(elements)); + } + }); + } + undefinedGroups.get(tag).add(el); + }); + } + var canOptimizeUsingProxy = false; + document.addEventListener( + "__darkreader__inlineScriptsAllowed", + function () { + canOptimizeUsingProxy = true; + } + ); + var resolvers = new Map(); + function handleIsDefined(e) { + canOptimizeUsingProxy = true; + if (resolvers.has(e.detail.tag)) { + var resolve = resolvers.get(e.detail.tag); + resolve(); + } + } + function customElementsWhenDefined(tag) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [ + 2, + new Promise(function (resolve) { + if ( + window.customElements && + typeof customElements.whenDefined === "function" + ) { + customElements.whenDefined(tag).then(function () { + return resolve(); + }); + } else if (canOptimizeUsingProxy) { + resolvers.set(tag, resolve); + document.dispatchEvent( + new CustomEvent( + "__darkreader__addUndefinedResolver", + {detail: {tag: tag}} + ) + ); + } else { + var checkIfDefined_1 = function () { + var elements = undefinedGroups.get(tag); + if (elements && elements.size > 0) { + if ( + elements + .values() + .next() + .value.matches(":defined") + ) { + resolve(); + } else { + requestAnimationFrame(checkIfDefined_1); + } + } + }; + requestAnimationFrame(checkIfDefined_1); + } + }) + ]; + }); + }); + } + function watchWhenCustomElementsDefined(callback) { + elementsDefinitionCallback = callback; + } + function unsubscribeFromDefineCustomElements() { + elementsDefinitionCallback = null; + undefinedGroups.clear(); + document.removeEventListener( + "__darkreader__isDefined", + handleIsDefined + ); + } + function watchForStyleChanges(currentStyles, update, shadowRootDiscovered) { + stopWatchingForStyleChanges(); + var prevStyles = new Set(currentStyles); + var prevStyleSiblings = new WeakMap(); + var nextStyleSiblings = new WeakMap(); + function saveStylePosition(style) { + prevStyleSiblings.set(style, style.previousElementSibling); + nextStyleSiblings.set(style, style.nextElementSibling); + } + function forgetStylePosition(style) { + prevStyleSiblings.delete(style); + nextStyleSiblings.delete(style); + } + function didStylePositionChange(style) { + return ( + style.previousElementSibling !== prevStyleSiblings.get(style) || + style.nextElementSibling !== nextStyleSiblings.get(style) + ); + } + currentStyles.forEach(saveStylePosition); + function handleStyleOperations(operations) { + var createdStyles = operations.createdStyles, + removedStyles = operations.removedStyles, + movedStyles = operations.movedStyles; + createdStyles.forEach(function (s) { + return saveStylePosition(s); + }); + movedStyles.forEach(function (s) { + return saveStylePosition(s); + }); + removedStyles.forEach(function (s) { + return forgetStylePosition(s); + }); + createdStyles.forEach(function (s) { + return prevStyles.add(s); + }); + removedStyles.forEach(function (s) { + return prevStyles.delete(s); + }); + if ( + createdStyles.size + removedStyles.size + movedStyles.size > + 0 + ) { + update({ + created: Array.from(createdStyles), + removed: Array.from(removedStyles), + moved: Array.from(movedStyles), + updated: [] + }); + } + } + function handleMinorTreeMutations(_a) { + var additions = _a.additions, + moves = _a.moves, + deletions = _a.deletions; + var createdStyles = new Set(); + var removedStyles = new Set(); + var movedStyles = new Set(); + additions.forEach(function (node) { + return getManageableStyles(node).forEach(function (style) { + return createdStyles.add(style); + }); + }); + deletions.forEach(function (node) { + return getManageableStyles(node).forEach(function (style) { + return removedStyles.add(style); + }); + }); + moves.forEach(function (node) { + return getManageableStyles(node).forEach(function (style) { + return movedStyles.add(style); + }); + }); + handleStyleOperations({ + createdStyles: createdStyles, + removedStyles: removedStyles, + movedStyles: movedStyles + }); + additions.forEach(function (n) { + iterateShadowHosts(n, subscribeForShadowRootChanges); + collectUndefinedElements(n); + }); + } + function handleHugeTreeMutations(root) { + var styles = new Set(getManageableStyles(root)); + var createdStyles = new Set(); + var removedStyles = new Set(); + var movedStyles = new Set(); + styles.forEach(function (s) { + if (!prevStyles.has(s)) { + createdStyles.add(s); + } + }); + prevStyles.forEach(function (s) { + if (!styles.has(s)) { + removedStyles.add(s); + } + }); + styles.forEach(function (s) { + if ( + !createdStyles.has(s) && + !removedStyles.has(s) && + didStylePositionChange(s) + ) { + movedStyles.add(s); + } + }); + handleStyleOperations({ + createdStyles: createdStyles, + removedStyles: removedStyles, + movedStyles: movedStyles + }); + iterateShadowHosts(root, subscribeForShadowRootChanges); + collectUndefinedElements(root); + } + function handleAttributeMutations(mutations) { + var updatedStyles = new Set(); + var removedStyles = new Set(); + mutations.forEach(function (m) { + var target = m.target; + if (target.isConnected) { + if (shouldManageStyle(target)) { + updatedStyles.add(target); + } else if ( + target instanceof HTMLLinkElement && + target.disabled + ) { + removedStyles.add(target); + } + } + }); + if (updatedStyles.size + removedStyles.size > 0) { + update({ + updated: Array.from(updatedStyles), + created: [], + removed: Array.from(removedStyles), + moved: [] + }); + } + } + function observe(root) { + var treeObserver = createOptimizedTreeObserver(root, { + onMinorMutations: handleMinorTreeMutations, + onHugeMutations: handleHugeTreeMutations + }); + var attrObserver = new MutationObserver(handleAttributeMutations); + attrObserver.observe(root, { + attributes: true, + attributeFilter: ["rel", "disabled", "media", "href"], + subtree: true + }); + observers.push(treeObserver, attrObserver); + observedRoots.add(root); + } + function subscribeForShadowRootChanges(node) { + var shadowRoot = node.shadowRoot; + if (shadowRoot == null || observedRoots.has(shadowRoot)) { + return; + } + observe(shadowRoot); + shadowRootDiscovered(shadowRoot); + } + observe(document); + iterateShadowHosts( + document.documentElement, + subscribeForShadowRootChanges + ); + watchWhenCustomElementsDefined(function (hosts) { + var newStyles = []; + hosts.forEach(function (host) { + return push(newStyles, getManageableStyles(host.shadowRoot)); + }); + update({created: newStyles, updated: [], removed: [], moved: []}); + hosts.forEach(function (host) { + var shadowRoot = host.shadowRoot; + if (shadowRoot == null) { + return; + } + subscribeForShadowRootChanges(host); + iterateShadowHosts(shadowRoot, subscribeForShadowRootChanges); + collectUndefinedElements(shadowRoot); + }); + }); + document.addEventListener("__darkreader__isDefined", handleIsDefined); + collectUndefinedElements(document); + } + function resetObservers() { + observers.forEach(function (o) { + return o.disconnect(); + }); + observers.splice(0, observers.length); + observedRoots = new WeakSet(); + } + function stopWatchingForStyleChanges() { + resetObservers(); + unsubscribeFromDefineCustomElements(); + } + + function hexify(number) { + return (number < 16 ? "0" : "") + number.toString(16); + } + function generateUID() { + if ("randomUUID" in crypto) { + var uuid = crypto.randomUUID(); + return ( + uuid.substring(0, 8) + + uuid.substring(9, 13) + + uuid.substring(14, 18) + + uuid.substring(19, 23) + + uuid.substring(24) + ); + } + return Array.from(crypto.getRandomValues(new Uint8Array(16))) + .map(function (x) { + return hexify(x); + }) + .join(""); + } + + var adoptedStyleOverrides = new WeakMap(); + var overrideList = new WeakSet(); + function createAdoptedStyleSheetOverride(node) { + var cancelAsyncOperations = false; + function injectSheet(sheet, override) { + var newSheets = __spreadArray( + [], + __read(node.adoptedStyleSheets), + false + ); + var sheetIndex = newSheets.indexOf(sheet); + var existingIndex = newSheets.indexOf(override); + if (sheetIndex === existingIndex - 1) { + return; + } + if (existingIndex >= 0) { + newSheets.splice(existingIndex, 1); + } + newSheets.splice(sheetIndex + 1, 0, override); + node.adoptedStyleSheets = newSheets; + } + function destroy() { + cancelAsyncOperations = true; + var newSheets = __spreadArray( + [], + __read(node.adoptedStyleSheets), + false + ); + node.adoptedStyleSheets.forEach(function (adoptedStyleSheet) { + if (overrideList.has(adoptedStyleSheet)) { + var existingIndex = newSheets.indexOf(adoptedStyleSheet); + if (existingIndex >= 0) { + newSheets.splice(existingIndex, 1); + } + adoptedStyleOverrides.delete(adoptedStyleSheet); + overrideList.delete(adoptedStyleSheet); + } + }); + node.adoptedStyleSheets = newSheets; + } + function render(theme, ignoreImageAnalysis) { + node.adoptedStyleSheets.forEach(function (sheet) { + if (overrideList.has(sheet)) { + return; + } + var rules = sheet.rules; + var override = new CSSStyleSheet(); + function prepareOverridesSheet() { + for (var i = override.cssRules.length - 1; i >= 0; i--) { + override.deleteRule(i); + } + injectSheet(sheet, override); + adoptedStyleOverrides.set(sheet, override); + overrideList.add(override); + return override; + } + var sheetModifier = createStyleSheetModifier(); + sheetModifier.modifySheet({ + prepareSheet: prepareOverridesSheet, + sourceCSSRules: rules, + theme: theme, + ignoreImageAnalysis: ignoreImageAnalysis, + force: false, + isAsyncCancelled: function () { + return cancelAsyncOperations; + } + }); + }); + } + return { + render: render, + destroy: destroy + }; + } + + function injectProxy(enableStyleSheetsProxy) { + document.dispatchEvent( + new CustomEvent("__darkreader__inlineScriptsAllowed") + ); + var addRuleDescriptor = Object.getOwnPropertyDescriptor( + CSSStyleSheet.prototype, + "addRule" + ); + var insertRuleDescriptor = Object.getOwnPropertyDescriptor( + CSSStyleSheet.prototype, + "insertRule" + ); + var deleteRuleDescriptor = Object.getOwnPropertyDescriptor( + CSSStyleSheet.prototype, + "deleteRule" + ); + var removeRuleDescriptor = Object.getOwnPropertyDescriptor( + CSSStyleSheet.prototype, + "removeRule" + ); + var documentStyleSheetsDescriptor = enableStyleSheetsProxy + ? Object.getOwnPropertyDescriptor(Document.prototype, "styleSheets") + : null; + var shouldWrapHTMLElement = [ + "baidu.com", + "baike.baidu.com", + "ditu.baidu.com", + "map.baidu.com", + "maps.baidu.com", + "haokan.baidu.com", + "pan.baidu.com", + "passport.baidu.com", + "tieba.baidu.com", + "www.baidu.com" + ].includes(location.hostname); + var getElementsByTagNameDescriptor = shouldWrapHTMLElement + ? Object.getOwnPropertyDescriptor( + Element.prototype, + "getElementsByTagName" + ) + : null; + var cleanUp = function () { + Object.defineProperty( + CSSStyleSheet.prototype, + "addRule", + addRuleDescriptor + ); + Object.defineProperty( + CSSStyleSheet.prototype, + "insertRule", + insertRuleDescriptor + ); + Object.defineProperty( + CSSStyleSheet.prototype, + "deleteRule", + deleteRuleDescriptor + ); + Object.defineProperty( + CSSStyleSheet.prototype, + "removeRule", + removeRuleDescriptor + ); + document.removeEventListener("__darkreader__cleanUp", cleanUp); + document.removeEventListener( + "__darkreader__addUndefinedResolver", + addUndefinedResolver + ); + if (enableStyleSheetsProxy) { + Object.defineProperty( + Document.prototype, + "styleSheets", + documentStyleSheetsDescriptor + ); + } + if (shouldWrapHTMLElement) { + Object.defineProperty( + Element.prototype, + "getElementsByTagName", + getElementsByTagNameDescriptor + ); + } + }; + var addUndefinedResolver = function (e) { + customElements.whenDefined(e.detail.tag).then(function () { + document.dispatchEvent( + new CustomEvent("__darkreader__isDefined", { + detail: {tag: e.detail.tag} + }) + ); + }); + }; + document.addEventListener("__darkreader__cleanUp", cleanUp); + document.addEventListener( + "__darkreader__addUndefinedResolver", + addUndefinedResolver + ); + var updateSheetEvent = new Event("__darkreader__updateSheet"); + function proxyAddRule(selector, style, index) { + addRuleDescriptor.value.call(this, selector, style, index); + if ( + this.ownerNode && + !this.ownerNode.classList.contains("darkreader") + ) { + this.ownerNode.dispatchEvent(updateSheetEvent); + } + return -1; + } + function proxyInsertRule(rule, index) { + var returnValue = insertRuleDescriptor.value.call( + this, + rule, + index + ); + if ( + this.ownerNode && + !this.ownerNode.classList.contains("darkreader") + ) { + this.ownerNode.dispatchEvent(updateSheetEvent); + } + return returnValue; + } + function proxyDeleteRule(index) { + deleteRuleDescriptor.value.call(this, index); + if ( + this.ownerNode && + !this.ownerNode.classList.contains("darkreader") + ) { + this.ownerNode.dispatchEvent(updateSheetEvent); + } + } + function proxyRemoveRule(index) { + removeRuleDescriptor.value.call(this, index); + if ( + this.ownerNode && + !this.ownerNode.classList.contains("darkreader") + ) { + this.ownerNode.dispatchEvent(updateSheetEvent); + } + } + function proxyDocumentStyleSheets() { + var _this = this; + var getCurrentValue = function () { + var docSheets = documentStyleSheetsDescriptor.get.call(_this); + var filteredSheets = __spreadArray( + [], + __read(docSheets), + false + ).filter(function (styleSheet) { + return !styleSheet.ownerNode.classList.contains( + "darkreader" + ); + }); + filteredSheets.item = function (item) { + return filteredSheets[item]; + }; + return Object.setPrototypeOf( + filteredSheets, + StyleSheetList.prototype + ); + }; + var elements = getCurrentValue(); + var styleSheetListBehavior = { + get: function (_, property) { + return getCurrentValue()[property]; + } + }; + elements = new Proxy(elements, styleSheetListBehavior); + return elements; + } + function proxyGetElementsByTagName(tagName) { + var _this = this; + if (tagName !== "style") { + return getElementsByTagNameDescriptor.value.call(this, tagName); + } + var getCurrentElementValue = function () { + var elements = getElementsByTagNameDescriptor.value.call( + _this, + tagName + ); + return Object.setPrototypeOf( + __spreadArray([], __read(elements), false).filter(function ( + element + ) { + return !element.classList.contains("darkreader"); + }), + NodeList.prototype + ); + }; + var elements = getCurrentElementValue(); + var nodeListBehavior = { + get: function (_, property) { + return getCurrentElementValue()[ + Number(property) || property + ]; + } + }; + elements = new Proxy(elements, nodeListBehavior); + return elements; + } + Object.defineProperty( + CSSStyleSheet.prototype, + "addRule", + Object.assign({}, addRuleDescriptor, {value: proxyAddRule}) + ); + Object.defineProperty( + CSSStyleSheet.prototype, + "insertRule", + Object.assign({}, insertRuleDescriptor, {value: proxyInsertRule}) + ); + Object.defineProperty( + CSSStyleSheet.prototype, + "deleteRule", + Object.assign({}, deleteRuleDescriptor, {value: proxyDeleteRule}) + ); + Object.defineProperty( + CSSStyleSheet.prototype, + "removeRule", + Object.assign({}, removeRuleDescriptor, {value: proxyRemoveRule}) + ); + if (enableStyleSheetsProxy) { + Object.defineProperty( + Document.prototype, + "styleSheets", + Object.assign({}, documentStyleSheetsDescriptor, { + get: proxyDocumentStyleSheets + }) + ); + } + if (shouldWrapHTMLElement) { + Object.defineProperty( + Element.prototype, + "getElementsByTagName", + Object.assign({}, getElementsByTagNameDescriptor, { + value: proxyGetElementsByTagName + }) + ); + } + } + + var INSTANCE_ID = generateUID(); + var styleManagers = new Map(); + var adoptedStyleManagers = []; + var filter = null; + var fixes = null; + var isIFrame$1 = null; + var ignoredImageAnalysisSelectors = null; + var ignoredInlineSelectors = null; + function createOrUpdateStyle(className, root) { + if (root === void 0) { + root = document.head || document; + } + var element = root.querySelector(".".concat(className)); + if (!element) { + element = document.createElement("style"); + element.classList.add("darkreader"); + element.classList.add(className); + element.media = "screen"; + element.textContent = ""; + } + return element; + } + function createOrUpdateScript(className, root) { + if (root === void 0) { + root = document.head || document; + } + var element = root.querySelector(".".concat(className)); + if (!element) { + element = document.createElement("script"); + element.classList.add("darkreader"); + element.classList.add(className); + } + return element; + } + var nodePositionWatchers = new Map(); + function setupNodePositionWatcher(node, alias) { + nodePositionWatchers.has(alias) && + nodePositionWatchers.get(alias).stop(); + nodePositionWatchers.set(alias, watchForNodePosition(node, "parent")); + } + function stopStylePositionWatchers() { + forEach(nodePositionWatchers.values(), function (watcher) { + return watcher.stop(); + }); + nodePositionWatchers.clear(); + } + function createStaticStyleOverrides() { + var fallbackStyle = createOrUpdateStyle( + "darkreader--fallback", + document + ); + fallbackStyle.textContent = getModifiedFallbackStyle(filter, { + strict: true + }); + document.head.insertBefore(fallbackStyle, document.head.firstChild); + setupNodePositionWatcher(fallbackStyle, "fallback"); + var userAgentStyle = createOrUpdateStyle("darkreader--user-agent"); + userAgentStyle.textContent = getModifiedUserAgentStyle( + filter, + isIFrame$1, + filter.styleSystemControls + ); + document.head.insertBefore(userAgentStyle, fallbackStyle.nextSibling); + setupNodePositionWatcher(userAgentStyle, "user-agent"); + var textStyle = createOrUpdateStyle("darkreader--text"); + if (filter.useFont || filter.textStroke > 0) { + textStyle.textContent = createTextStyle(filter); + } else { + textStyle.textContent = ""; + } + document.head.insertBefore(textStyle, fallbackStyle.nextSibling); + setupNodePositionWatcher(textStyle, "text"); + var invertStyle = createOrUpdateStyle("darkreader--invert"); + if (fixes && Array.isArray(fixes.invert) && fixes.invert.length > 0) { + invertStyle.textContent = [ + "".concat(fixes.invert.join(", "), " {"), + " filter: ".concat( + getCSSFilterValue( + __assign(__assign({}, filter), { + contrast: + filter.mode === 0 + ? filter.contrast + : clamp(filter.contrast - 10, 0, 100) + }) + ), + " !important;" + ), + "}" + ].join("\n"); + } else { + invertStyle.textContent = ""; + } + document.head.insertBefore(invertStyle, textStyle.nextSibling); + setupNodePositionWatcher(invertStyle, "invert"); + var inlineStyle = createOrUpdateStyle("darkreader--inline"); + inlineStyle.textContent = getInlineOverrideStyle(); + document.head.insertBefore(inlineStyle, invertStyle.nextSibling); + setupNodePositionWatcher(inlineStyle, "inline"); + var overrideStyle = createOrUpdateStyle("darkreader--override"); + overrideStyle.textContent = + fixes && fixes.css ? replaceCSSTemplates(fixes.css) : ""; + document.head.appendChild(overrideStyle); + setupNodePositionWatcher(overrideStyle, "override"); + var variableStyle = createOrUpdateStyle("darkreader--variables"); + var selectionColors = getSelectionColor(filter); + var darkSchemeBackgroundColor = filter.darkSchemeBackgroundColor, + darkSchemeTextColor = filter.darkSchemeTextColor, + lightSchemeBackgroundColor = filter.lightSchemeBackgroundColor, + lightSchemeTextColor = filter.lightSchemeTextColor, + mode = filter.mode; + var schemeBackgroundColor = + mode === 0 ? lightSchemeBackgroundColor : darkSchemeBackgroundColor; + var schemeTextColor = + mode === 0 ? lightSchemeTextColor : darkSchemeTextColor; + schemeBackgroundColor = modifyBackgroundColor( + parseColorWithCache(schemeBackgroundColor), + filter + ); + schemeTextColor = modifyForegroundColor( + parseColorWithCache(schemeTextColor), + filter + ); + variableStyle.textContent = [ + ":root {", + " --darkreader-neutral-background: ".concat( + schemeBackgroundColor, + ";" + ), + " --darkreader-neutral-text: ".concat(schemeTextColor, ";"), + " --darkreader-selection-background: ".concat( + selectionColors.backgroundColorSelection, + ";" + ), + " --darkreader-selection-text: ".concat( + selectionColors.foregroundColorSelection, + ";" + ), + "}" + ].join("\n"); + document.head.insertBefore(variableStyle, inlineStyle.nextSibling); + setupNodePositionWatcher(variableStyle, "variables"); + var rootVarsStyle = createOrUpdateStyle("darkreader--root-vars"); + document.head.insertBefore(rootVarsStyle, variableStyle.nextSibling); + var injectProxyArg = !(fixes && fixes.disableStyleSheetsProxy); + { + var proxyScript = createOrUpdateScript("darkreader--proxy"); + proxyScript.append( + "(".concat(injectProxy, ")(").concat(injectProxyArg, ")") + ); + document.head.insertBefore(proxyScript, rootVarsStyle.nextSibling); + proxyScript.remove(); + } + } + var shadowRootsWithOverrides = new Set(); + function createShadowStaticStyleOverrides(root) { + var inlineStyle = createOrUpdateStyle("darkreader--inline", root); + inlineStyle.textContent = getInlineOverrideStyle(); + root.insertBefore(inlineStyle, root.firstChild); + var overrideStyle = createOrUpdateStyle("darkreader--override", root); + overrideStyle.textContent = + fixes && fixes.css ? replaceCSSTemplates(fixes.css) : ""; + root.insertBefore(overrideStyle, inlineStyle.nextSibling); + var invertStyle = createOrUpdateStyle("darkreader--invert", root); + if (fixes && Array.isArray(fixes.invert) && fixes.invert.length > 0) { + invertStyle.textContent = [ + "".concat(fixes.invert.join(", "), " {"), + " filter: ".concat( + getCSSFilterValue( + __assign(__assign({}, filter), { + contrast: + filter.mode === 0 + ? filter.contrast + : clamp(filter.contrast - 10, 0, 100) + }) + ), + " !important;" + ), + "}" + ].join("\n"); + } else { + invertStyle.textContent = ""; + } + root.insertBefore(invertStyle, overrideStyle.nextSibling); + shadowRootsWithOverrides.add(root); + } + function replaceCSSTemplates($cssText) { + return $cssText.replace(/\${(.+?)}/g, function (_, $color) { + var color = parseColorWithCache($color); + if (color) { + return modifyColor(color, filter); + } + return $color; + }); + } + function cleanFallbackStyle() { + var fallback = document.querySelector(".darkreader--fallback"); + if (fallback) { + fallback.textContent = ""; + } + } + function createDynamicStyleOverrides() { + cancelRendering(); + var allStyles = getManageableStyles(document); + var newManagers = allStyles + .filter(function (style) { + return !styleManagers.has(style); + }) + .map(function (style) { + return createManager(style); + }); + newManagers + .map(function (manager) { + return manager.details({secondRound: false}); + }) + .filter(function (detail) { + return detail && detail.rules.length > 0; + }) + .forEach(function (detail) { + variablesStore.addRulesForMatching(detail.rules); + }); + variablesStore.matchVariablesAndDependants(); + variablesStore.setOnRootVariableChange(function () { + variablesStore.putRootVars( + document.head.querySelector(".darkreader--root-vars"), + filter + ); + }); + variablesStore.putRootVars( + document.head.querySelector(".darkreader--root-vars"), + filter + ); + styleManagers.forEach(function (manager) { + return manager.render(filter, ignoredImageAnalysisSelectors); + }); + if (loadingStyles.size === 0) { + cleanFallbackStyle(); + } + newManagers.forEach(function (manager) { + return manager.watch(); + }); + var inlineStyleElements = toArray( + document.querySelectorAll(INLINE_STYLE_SELECTOR) + ); + iterateShadowHosts(document.documentElement, function (host) { + createShadowStaticStyleOverrides(host.shadowRoot); + var elements = host.shadowRoot.querySelectorAll( + INLINE_STYLE_SELECTOR + ); + if (elements.length > 0) { + push(inlineStyleElements, elements); + } + }); + inlineStyleElements.forEach(function (el) { + return overrideInlineStyle( + el, + filter, + ignoredInlineSelectors, + ignoredImageAnalysisSelectors + ); + }); + handleAdoptedStyleSheets(document); + } + var loadingStylesCounter = 0; + var loadingStyles = new Set(); + function createManager(element) { + var loadingStyleId = ++loadingStylesCounter; + function loadingStart() { + if (!isDOMReady() || !didDocumentShowUp) { + loadingStyles.add(loadingStyleId); + logInfo( + "Current amount of styles loading: ".concat( + loadingStyles.size + ) + ); + var fallbackStyle = document.querySelector( + ".darkreader--fallback" + ); + if (!fallbackStyle.textContent) { + fallbackStyle.textContent = getModifiedFallbackStyle( + filter, + {strict: false} + ); + } + } + } + function loadingEnd() { + loadingStyles.delete(loadingStyleId); + logInfo( + "Removed loadingStyle " + .concat(loadingStyleId, ", now awaiting: ") + .concat(loadingStyles.size) + ); + if (loadingStyles.size === 0 && isDOMReady()) { + cleanFallbackStyle(); + } + } + function update() { + var details = manager.details({secondRound: true}); + if (!details) { + return; + } + variablesStore.addRulesForMatching(details.rules); + variablesStore.matchVariablesAndDependants(); + manager.render(filter, ignoredImageAnalysisSelectors); + } + var manager = manageStyle(element, { + update: update, + loadingStart: loadingStart, + loadingEnd: loadingEnd + }); + styleManagers.set(element, manager); + return manager; + } + function removeManager(element) { + var manager = styleManagers.get(element); + if (manager) { + manager.destroy(); + styleManagers.delete(element); + } + } + var throttledRenderAllStyles = throttle(function (callback) { + styleManagers.forEach(function (manager) { + return manager.render(filter, ignoredImageAnalysisSelectors); + }); + adoptedStyleManagers.forEach(function (manager) { + return manager.render(filter, ignoredImageAnalysisSelectors); + }); + callback && callback(); + }); + var cancelRendering = function () { + throttledRenderAllStyles.cancel(); + }; + function onDOMReady() { + if (loadingStyles.size === 0) { + cleanFallbackStyle(); + return; + } + } + var documentVisibilityListener = null; + var didDocumentShowUp = !document.hidden; + function watchForDocumentVisibility(callback) { + var alreadyWatching = Boolean(documentVisibilityListener); + documentVisibilityListener = function () { + if (!document.hidden) { + stopWatchingForDocumentVisibility(); + callback(); + didDocumentShowUp = true; + } + }; + if (!alreadyWatching) { + document.addEventListener( + "visibilitychange", + documentVisibilityListener + ); + } + } + function stopWatchingForDocumentVisibility() { + document.removeEventListener( + "visibilitychange", + documentVisibilityListener + ); + documentVisibilityListener = null; + } + function createThemeAndWatchForUpdates() { + createStaticStyleOverrides(); + function runDynamicStyle() { + createDynamicStyleOverrides(); + watchForUpdates(); + } + if (document.hidden && !filter.immediateModify) { + watchForDocumentVisibility(runDynamicStyle); + } else { + runDynamicStyle(); + } + changeMetaThemeColorWhenAvailable(filter); + } + function handleAdoptedStyleSheets(node) { + try { + if (Array.isArray(node.adoptedStyleSheets)) { + if (node.adoptedStyleSheets.length > 0) { + var newManger = createAdoptedStyleSheetOverride(node); + adoptedStyleManagers.push(newManger); + newManger.render(filter, ignoredImageAnalysisSelectors); + } + } + } catch (err) {} + } + function watchForUpdates() { + var managedStyles = Array.from(styleManagers.keys()); + watchForStyleChanges( + managedStyles, + function (_a) { + var created = _a.created, + updated = _a.updated, + removed = _a.removed, + moved = _a.moved; + var stylesToRemove = removed; + var stylesToManage = created + .concat(updated) + .concat(moved) + .filter(function (style) { + return !styleManagers.has(style); + }); + var stylesToRestore = moved.filter(function (style) { + return styleManagers.has(style); + }); + stylesToRemove.forEach(function (style) { + return removeManager(style); + }); + var newManagers = stylesToManage.map(function (style) { + return createManager(style); + }); + newManagers + .map(function (manager) { + return manager.details({secondRound: false}); + }) + .filter(function (detail) { + return detail && detail.rules.length > 0; + }) + .forEach(function (detail) { + variablesStore.addRulesForMatching(detail.rules); + }); + variablesStore.matchVariablesAndDependants(); + newManagers.forEach(function (manager) { + return manager.render( + filter, + ignoredImageAnalysisSelectors + ); + }); + newManagers.forEach(function (manager) { + return manager.watch(); + }); + stylesToRestore.forEach(function (style) { + return styleManagers.get(style).restore(); + }); + }, + function (shadowRoot) { + createShadowStaticStyleOverrides(shadowRoot); + handleAdoptedStyleSheets(shadowRoot); + } + ); + watchForInlineStyles( + function (element) { + overrideInlineStyle( + element, + filter, + ignoredInlineSelectors, + ignoredImageAnalysisSelectors + ); + if (element === document.documentElement) { + var styleAttr = element.getAttribute("style") || ""; + if (styleAttr.includes("--")) { + variablesStore.matchVariablesAndDependants(); + variablesStore.putRootVars( + document.head.querySelector( + ".darkreader--root-vars" + ), + filter + ); + } + } + }, + function (root) { + createShadowStaticStyleOverrides(root); + var inlineStyleElements = root.querySelectorAll( + INLINE_STYLE_SELECTOR + ); + if (inlineStyleElements.length > 0) { + forEach(inlineStyleElements, function (el) { + return overrideInlineStyle( + el, + filter, + ignoredInlineSelectors, + ignoredImageAnalysisSelectors + ); + }); + } + } + ); + addDOMReadyListener(onDOMReady); + } + function stopWatchingForUpdates() { + styleManagers.forEach(function (manager) { + return manager.pause(); + }); + stopStylePositionWatchers(); + stopWatchingForStyleChanges(); + stopWatchingForInlineStyles(); + removeDOMReadyListener(onDOMReady); + cleanReadyStateCompleteListeners(); + } + var metaObserver; + function addMetaListener() { + metaObserver = new MutationObserver(function () { + if (document.querySelector('meta[name="darkreader-lock"]')) { + metaObserver.disconnect(); + removeDynamicTheme(); + } + }); + metaObserver.observe(document.head, {childList: true, subtree: true}); + } + function createDarkReaderInstanceMarker() { + var metaElement = document.createElement("meta"); + metaElement.name = "darkreader"; + metaElement.content = INSTANCE_ID; + document.head.appendChild(metaElement); + } + function isAnotherDarkReaderInstanceActive() { + if (document.querySelector('meta[name="darkreader-lock"]')) { + return true; + } + var meta = document.querySelector('meta[name="darkreader"]'); + if (meta) { + if (meta.content !== INSTANCE_ID) { + return true; + } + return false; + } + createDarkReaderInstanceMarker(); + addMetaListener(); + return false; + } + function createOrUpdateDynamicTheme( + filterConfig, + dynamicThemeFixes, + iframe + ) { + filter = filterConfig; + fixes = dynamicThemeFixes; + if (fixes) { + ignoredImageAnalysisSelectors = Array.isArray( + fixes.ignoreImageAnalysis + ) + ? fixes.ignoreImageAnalysis + : []; + ignoredInlineSelectors = Array.isArray(fixes.ignoreInlineStyle) + ? fixes.ignoreInlineStyle + : []; + } else { + ignoredImageAnalysisSelectors = []; + ignoredInlineSelectors = []; + } + if (filter.immediateModify) { + setIsDOMReady(function () { + return true; + }); + } + isIFrame$1 = iframe; + if (document.head) { + if (isAnotherDarkReaderInstanceActive()) { + return; + } + document.documentElement.setAttribute( + "data-darkreader-mode", + "dynamic" + ); + document.documentElement.setAttribute( + "data-darkreader-scheme", + filter.mode ? "dark" : "dimmed" + ); + createThemeAndWatchForUpdates(); + } else { + if (!isFirefox) { + var fallbackStyle = createOrUpdateStyle("darkreader--fallback"); + document.documentElement.appendChild(fallbackStyle); + fallbackStyle.textContent = getModifiedFallbackStyle(filter, { + strict: true + }); + } + var headObserver_1 = new MutationObserver(function () { + if (document.head) { + headObserver_1.disconnect(); + if (isAnotherDarkReaderInstanceActive()) { + removeDynamicTheme(); + return; + } + createThemeAndWatchForUpdates(); + } + }); + headObserver_1.observe(document, {childList: true, subtree: true}); + } + } + function removeProxy() { + document.dispatchEvent(new CustomEvent("__darkreader__cleanUp")); + removeNode(document.head.querySelector(".darkreader--proxy")); + } + function removeDynamicTheme() { + document.documentElement.removeAttribute("data-darkreader-mode"); + document.documentElement.removeAttribute("data-darkreader-scheme"); + cleanDynamicThemeCache(); + removeNode(document.querySelector(".darkreader--fallback")); + if (document.head) { + restoreMetaThemeColor(); + removeNode(document.head.querySelector(".darkreader--user-agent")); + removeNode(document.head.querySelector(".darkreader--text")); + removeNode(document.head.querySelector(".darkreader--invert")); + removeNode(document.head.querySelector(".darkreader--inline")); + removeNode(document.head.querySelector(".darkreader--override")); + removeNode(document.head.querySelector(".darkreader--variables")); + removeNode(document.head.querySelector(".darkreader--root-vars")); + removeNode(document.head.querySelector('meta[name="darkreader"]')); + removeProxy(); + } + shadowRootsWithOverrides.forEach(function (root) { + removeNode(root.querySelector(".darkreader--inline")); + removeNode(root.querySelector(".darkreader--override")); + }); + shadowRootsWithOverrides.clear(); + forEach(styleManagers.keys(), function (el) { + return removeManager(el); + }); + loadingStyles.clear(); + cleanLoadingLinks(); + forEach(document.querySelectorAll(".darkreader"), removeNode); + adoptedStyleManagers.forEach(function (manager) { + manager.destroy(); + }); + adoptedStyleManagers.splice(0); + metaObserver && metaObserver.disconnect(); + } + function cleanDynamicThemeCache() { + variablesStore.clear(); + parsedURLCache.clear(); + stopWatchingForDocumentVisibility(); + cancelRendering(); + stopWatchingForUpdates(); + cleanModificationCache(); + clearColorCache(); + } + + var blobRegex = /url\(\"(blob\:.*?)\"\)/g; + function replaceBlobs(text) { + return __awaiter(this, void 0, void 0, function () { + var promises, data; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + promises = []; + getMatches(blobRegex, text, 1).forEach(function (url) { + var promise = loadAsDataURL(url); + promises.push(promise); + }); + return [4, Promise.all(promises)]; + case 1: + data = _a.sent(); + return [ + 2, + text.replace(blobRegex, function () { + return 'url("'.concat(data.shift(), '")'); + }) + ]; + } + }); + }); + } + var banner = + '/*\n _______\n / \\\n .==. .==.\n (( ))==(( ))\n / "==" "=="\\\n /____|| || ||___\\\n ________ ____ ________ ___ ___\n | ___ \\ / \\ | ___ \\ | | / /\n | | \\ \\ / /\\ \\ | | \\ \\| |_/ /\n | | ) / /__\\ \\ | |__/ /| ___ \\\n | |__/ / ______ \\| ____ \\| | \\ \\\n_______|_______/__/ ____ \\__\\__|___\\__\\__|___\\__\\____\n| ___ \\ | ____/ / \\ | ___ \\ | ____| ___ \\\n| | \\ \\| |___ / /\\ \\ | | \\ \\| |___| | \\ \\\n| |__/ /| ____/ /__\\ \\ | | ) | ____| |__/ /\n| ____ \\| |__/ ______ \\| |__/ /| |___| ____ \\\n|__| \\__\\____/__/ \\__\\_______/ |______|__| \\__\\\n https://darkreader.org\n*/\n\n/*! Dark reader generated CSS | Licensed under MIT https://github.com/darkreader/darkreader/blob/main/LICENSE */\n'; + function collectCSS() { + return __awaiter(this, void 0, void 0, function () { + function addStaticCSS(selector, comment) { + var staticStyle = document.querySelector(selector); + if (staticStyle && staticStyle.textContent) { + css.push("/* ".concat(comment, " */")); + css.push(staticStyle.textContent); + css.push(""); + } + } + var css, modifiedCSS, formattedCSS, _a, _b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + css = [banner]; + addStaticCSS(".darkreader--fallback", "Fallback Style"); + addStaticCSS( + ".darkreader--user-agent", + "User-Agent Style" + ); + addStaticCSS(".darkreader--text", "Text Style"); + addStaticCSS(".darkreader--invert", "Invert Style"); + addStaticCSS( + ".darkreader--variables", + "Variables Style" + ); + modifiedCSS = []; + document + .querySelectorAll(".darkreader--sync") + .forEach(function (element) { + forEach( + element.sheet.cssRules, + function (rule) { + rule && + rule.cssText && + modifiedCSS.push(rule.cssText); + } + ); + }); + if (!modifiedCSS.length) return [3, 2]; + formattedCSS = formatCSS(modifiedCSS.join("\n")); + css.push("/* Modified CSS */"); + _b = (_a = css).push; + return [4, replaceBlobs(formattedCSS)]; + case 1: + _b.apply(_a, [_c.sent()]); + css.push(""); + _c.label = 2; + case 2: + addStaticCSS(".darkreader--override", "Override Style"); + return [2, css.join("\n")]; + } + }); + }); + } + + var isDarkReaderEnabled = false; + var isIFrame = (function () { + try { + return window.self !== window.top; + } catch (err) { + console.warn(err); + return true; + } + })(); + function enable(themeOptions, fixes) { + if (themeOptions === void 0) { + themeOptions = {}; + } + if (fixes === void 0) { + fixes = null; + } + var theme = __assign(__assign({}, DEFAULT_THEME), themeOptions); + if (theme.engine !== ThemeEngine.dynamicTheme) { + throw new Error("Theme engine is not supported."); + } + createOrUpdateDynamicTheme(theme, fixes, isIFrame); + isDarkReaderEnabled = true; + } + function isEnabled() { + return isDarkReaderEnabled; + } + function disable() { + removeDynamicTheme(); + isDarkReaderEnabled = false; + } + var darkScheme = matchMedia("(prefers-color-scheme: dark)"); + var store = { + themeOptions: null, + fixes: null + }; + function handleColorScheme() { + if (darkScheme.matches) { + enable(store.themeOptions, store.fixes); + } else { + disable(); + } + } + function auto(themeOptions, fixes) { + if (themeOptions === void 0) { + themeOptions = {}; + } + if (fixes === void 0) { + fixes = null; + } + if (themeOptions) { + store = {themeOptions: themeOptions, fixes: fixes}; + handleColorScheme(); + if (isMatchMediaChangeEventListenerSupported) { + darkScheme.addEventListener("change", handleColorScheme); + } else { + darkScheme.addListener(handleColorScheme); + } + } else { + if (isMatchMediaChangeEventListenerSupported) { + darkScheme.removeEventListener("change", handleColorScheme); + } else { + darkScheme.removeListener(handleColorScheme); + } + disable(); + } + } + function exportGeneratedCSS() { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + return [4, collectCSS()]; + case 1: + return [2, _a.sent()]; + } + }); + }); + } + var setFetchMethod = setFetchMethod$1; + + exports.auto = auto; + exports.disable = disable; + exports.enable = enable; + exports.exportGeneratedCSS = exportGeneratedCSS; + exports.isEnabled = isEnabled; + exports.setFetchMethod = setFetchMethod; + + Object.defineProperty(exports, "__esModule", {value: true}); +}); + +layui.define([], function(exports) { + exports('darkreader', DarkReader); +}); \ No newline at end of file diff --git a/component/pear/module/drawer.js b/component/pear/module/drawer.js deleted file mode 100644 index a95e41a..0000000 --- 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/frame.js b/component/pear/module/frame.js index 5ee6841..0bdc5cd 100644 --- a/component/pear/module/frame.js +++ b/component/pear/module/frame.js @@ -1,70 +1,129 @@ -layui.define(['jquery', 'element'], function(exports) { +layui.define(['jquery', 'element'], function (exports) { "use strict"; var $ = layui.jquery; + var element = layui.element; - var frame = function(opt) { + var frame = function (opt) { this.option = opt; }; - frame.prototype.render = function(opt) { + frame.prototype.render = function (opt) { var option = { - elem: opt.elem, url: opt.url, + elem: opt.elem, title: opt.title, width: opt.width, height: opt.height, - done: opt.done ? opt.done : function() { + 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) { + 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); + var $frame = $("#" + this.option.elem + " .pear-frame-content"); + if(loading) { + $frameLoad.css({ + display: 'block' + }); + } + $.ajax({ + url: url, + type: 'get', + dataType: 'html', + success: function (data) { + $frame.html(data) + $frame.attr("src", url); + $frameLoad.fadeOut(1000); + element.init(); + }, + error: function (xhr, textstatus, thrown) { + return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); + } + }); } - frame.prototype.changePageByElement = function(elem, url, title, loading) { + frame.prototype.changePageByElement = function (elem, url, loading) { var $frameLoad = $("#" + elem).find(".pear-frame-loading"); - var $frame = $("#" + elem + " iframe"); - $frame.attr("src", url); - $("#" + elem + " .title").html(title); - renderContentLoading($frame, $frameLoad, loading); + var $frame = $("#" + elem + " .pear-frame-content"); + if(loading) { + $frameLoad.css({ + display: 'block' + }); + } + $.ajax({ + url: url, + type: 'get', + dataType: 'html', + success: function (data) { + $frame.html(data) + $frame.attr("src", url); + $frameLoad.fadeOut(1000); + element.init(); + }, + error: function (xhr, textstatus, thrown) { + return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); + } + }); } - frame.prototype.refresh = function(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({ + var $frame = $("#" + this.option.elem).find(".pear-frame-content"); + if(loading) { + $frameLoad.css({ display: 'block' }); - $(iframeEl).on('load', function() { - loadingEl.fadeOut(1000); - }) } + $.ajax({ + url: $frame.attr("src"), + type: 'get', + dataType: 'html', + success: function (data) { + $frame.html(data) + $frameLoad.fadeOut(1000); + element.init(); + }, + error: function (xhr, textstatus, thrown) { + return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); + } + }); + } + + function renderContent(option) { + + $("#" + option.elem).html(` +
    +
    +
    +
    + + + + +
    +
    +
    `); + + var $frame = $("#" + option.elem).find(".pear-frame-content"); + + $.ajax({ + url: option.url, + type: 'get', + dataType: 'html', + success: function (data) { + $frame.html(data); + $frame.attr("src", option.url); + element.init(); + }, + error: function (xhr, textstatus, thrown) { + return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); + } + }); } exports('frame', new frame()); diff --git a/component/pear/module/loading.js b/component/pear/module/loading.js index 447bd38..5ff7ec9 100644 --- a/component/pear/module/loading.js +++ b/component/pear/module/loading.js @@ -1,422 +1,422 @@ layui.define(['table', 'jquery', 'element'], function (exports) { - "use strict"; + "use strict"; - var MOD_NAME = 'loading', - $ = layui.jquery, + var MOD_NAME = 'loading', + $ = layui.jquery, element = layui.element; - var pearOper = new function () { - this.blockRemove = function(dom,time){ + var pearOper = new function () { + this.blockRemove = function (dom, time) { Notiflix.Block.Remove(dom, time); } - this.block = function(option){ - if(option.type==1){ + this.block = function (option) { + if (option.type == 1) { Notiflix.Block.Standard( - option.elem - ,option.msg); + option.elem + , option.msg); } - else if(option.type==2){ + else if (option.type == 2) { Notiflix.Block.Hourglass( - option.elem - ,option.msg); + option.elem + , option.msg); } - else if(option.type==3){ + else if (option.type == 3) { Notiflix.Block.Circle( - option.elem - ,option.msg); + option.elem + , option.msg); } - else if(option.type==4){ + else if (option.type == 4) { Notiflix.Block.Arrows( - option.elem - ,option.msg); + option.elem + , option.msg); } - else if(option.type==5){ + else if (option.type == 5) { Notiflix.Block.Dots( - option.elem - ,option.msg); + option.elem + , option.msg); } - else if(option.type==6){ + else if (option.type == 6) { Notiflix.Block.Pulse( - option.elem - ,option.msg); + option.elem + , option.msg); } } - this.report = function(option){ - if(option.type=="success"){ + this.report = function (option) { + if (option.type == "success") { Notiflix.Report.Success( - option.title, - option.message,'确认'); - }else if(option.type=="failure"){ + option.title, + option.message, '确认'); + } else if (option.type == "failure") { Notiflix.Report.Failure( - option.title, - option.message,'确认'); - }else if(option.type=="warning"){ + option.title, + option.message, '确认'); + } else if (option.type == "warning") { Notiflix.Report.Warning( - option.title, - option.message,'确认'); - }else if(option.type=="info"){ + option.title, + option.message, '确认'); + } else if (option.type == "info") { Notiflix.Report.Info( - option.title, - option.message,'确认'); + option.title, + option.message, '确认'); } } - this.notice = function(option){ + this.notice = function (option) { Notiflix.Notify.Init({ - position:option.position?"right-top":option.position, - }); - if(option.type=="success"){ + position: option.position ? "right-top" : option.position, + }); + if (option.type == "success") { Notiflix.Notify.Success(option.title); - }else if(option.type=="failure"){ + } else if (option.type == "failure") { Notiflix.Notify.Failure(option.title); - }else if(option.type=="warning"){ + } else if (option.type == "warning") { Notiflix.Notify.Warning(option.title); - }else if(option.type=="info"){ + } else if (option.type == "info") { Notiflix.Notify.Info(option.title); } } - this.confirm = function(option){ + this.confirm = function (option) { Notiflix.Confirm.Show( - option.title, - option.message, - '确认', - '取消', - option.success, - option.cancle + option.title, + option.message, + '确认', + '取消', + option.success, + option.cancle ); } - this.drawer = function(position,dom,distance){ + this.drawer = function (position, dom, distance) { var _right = new mSlider({ - dom: dom, - direction: position, - distance:distance + dom: dom, + direction: position, + distance: distance }); - _right.open(); + _right.open(); } - this.loadRemove = function(time){ + this.loadRemove = function (time) { Notiflix.Loading.Remove(time); } - this.Load = function(type,message){ - if(type==1){ + this.Load = function (type, message) { + if (type == 1) { Notiflix.Loading.Standard(message); - }else if(type==2){ + } else if (type == 2) { Notiflix.Loading.Hourglass(message); - }else if(type==3){ + } else if (type == 3) { Notiflix.Loading.Circle(message); - }else if(type==4){ + } else if (type == 4) { Notiflix.Loading.Dots(message); - }else if(type==5){ + } else if (type == 5) { Notiflix.Loading.Pulse(message); } } - this.msg = function(option){ - if(option.type=="success"){ + this.msg = function (option) { + if (option.type == "success") { - layer.msg(option.title,{icon:1,time:option.time},option.callback); + layer.msg(option.title, { icon: 1, time: option.time }, option.callback); - }else if(option.type=="failure"){ + } else if (option.type == "failure") { - layer.msg(option.title,{icon:2,time:option.time},option.callback); + layer.msg(option.title, { icon: 2, time: option.time }, option.callback); - }else if(option.type=="warning"){ + } else if (option.type == "warning") { - layer.msg(option.title,{icon:3,time:option.time},option.callback); + layer.msg(option.title, { icon: 3, time: option.time }, option.callback); - }else if(option.type=="info"){ + } else if (option.type == "info") { - layer.msg(option.title,{icon:4,time:option.time},option.callback); + 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)', - }, + 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', - }, + 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', + 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', + 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', + 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; + // 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 || ''; + 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 - } + 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'); + 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'); + 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 @@ -427,327 +427,327 @@ layui.define(['table', 'jquery', 'element'], function (exports) { 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 + // 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 @@ -755,298 +755,298 @@ layui.define(['table', 'jquery', 'element'], function (exports) { // 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?'); - } + 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 @@ -1054,151 +1054,151 @@ layui.define(['table', 'jquery', 'element'], function (exports) { // 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 + // 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 @@ -1206,383 +1206,383 @@ layui.define(['table', 'jquery', 'element'], function (exports) { // 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 + // 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); - } - } + // 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?'); - } - } + // 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 @@ -1591,501 +1591,340 @@ layui.define(['table', 'jquery', 'element'], function (exports) { 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 - } + // 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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); + + exports(MOD_NAME, pearOper); }) diff --git a/component/pear/module/menu.js b/component/pear/module/menu.js index 33cde7f..88b348a 100644 --- a/component/pear/module/menu.js +++ b/component/pear/module/menu.js @@ -21,14 +21,15 @@ 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(){ if (option.control) { @@ -96,7 +97,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) { @@ -304,7 +306,7 @@ layui.define(['table', 'jquery', 'element'], function (exports) { '" ' + target + '>' + item.title + ''; } else if (item.type == 1) { - content += '' + item.title + ''; @@ -374,7 +376,7 @@ layui.define(['table', 'jquery', 'element'], function (exports) { ''; } else if (note.type == 1) { // 创 建 菜 单 结 构 - content += '' + note.title + ''; @@ -433,7 +435,7 @@ layui.define(['table', 'jquery', 'element'], function (exports) { '">' + note.title + ''; } else if (note.type == 1) { // 创 建 菜 单 结 构 - content += '' + note.title + ''; } diff --git a/component/pear/module/message.js b/component/pear/module/message.js index 54e96bd..51ba162 100644 --- a/component/pear/module/message.js +++ b/component/pear/module/message.js @@ -10,7 +10,6 @@ layui.define(['table', 'jquery', 'element'], function (exports) { }; message.prototype.render = function (opt) { - //默认配置值 var option = { elem: opt.elem, url: opt.url ? opt.url : false, @@ -25,7 +24,6 @@ layui.define(['table', 'jquery', 'element'], function (exports) { 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; @@ -110,24 +108,13 @@ layui.define(['table', 'jquery', 'element'], function (exports) { '
    '; }) - // 空内容 if(item.children.length==0){ noticeContent +='

    暂无数据

    '; } noticeContent += '
    '; }) - var notice; - if (count > 0){ - notice = '
  • ' + - '' + - '
    '; - }else { - notice = '
  • ' + - '' + - '
    '; - } - + var notice = '
  • '; noticeTitle += ''; noticeContent += '
    '; notice += noticeTitle; diff --git a/component/pear/module/popover/popover.js b/component/pear/module/popover/popover.js index 7f2e9bd..2dcb57c 100644 --- a/component/pear/module/popover/popover.js +++ b/component/pear/module/popover/popover.js @@ -128,7 +128,6 @@ layui.define(['jquery', 'element'], function(exports) { return out; }; - // The actual plugin constructor function WebuiPopover(element, options) { this.$element = $(element); diff --git a/component/pear/module/tab.js b/component/pear/module/tab.js index 088a3aa..b2d29d3 100644 --- a/component/pear/module/tab.js +++ b/component/pear/module/tab.js @@ -1,11 +1,11 @@ -layui.define(['jquery', 'element'], function(exports) { +layui.define(['jquery', 'element'], function (exports) { "use strict"; var MOD_NAME = 'tab', $ = layui.jquery, element = layui.element; - var pearTab = function(opt) { + var pearTab = function (opt) { this.option = opt; }; @@ -13,7 +13,7 @@ layui.define(['jquery', 'element'], function(exports) { var tabDataCurrent = 0; var contextTabDOM; - pearTab.prototype.render = function(opt) { + pearTab.prototype.render = function (opt) { var option = { elem: opt.elem, @@ -27,7 +27,7 @@ layui.define(['jquery', 'element'], function(exports) { session: opt.session ? opt.session : false, preload: opt.preload ? opt.preload : false, closeEvent: opt.closeEvent, - success: opt.success ? opt.success : function(id) {} + success: opt.success ? opt.success : function (id) { } } if (option.session) { @@ -35,7 +35,7 @@ layui.define(['jquery', 'element'], function(exports) { 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) { + tabData.forEach(function (item, index) { if (item.id == tabDataCurrent) { option.index = index; } @@ -48,10 +48,10 @@ 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(); @@ -66,7 +66,7 @@ layui.define(['jquery', 'element'], function(exports) { option.success(sessionStorage.getItem(option.elem + "-pear-tab-data-current")); $("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; @@ -95,23 +95,23 @@ layui.define(['jquery', 'element'], function(exports) { isOutAnim: false, offset: [top, left], content: menu, //iframe的url, - success: function(layero, index) { + 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; }) @@ -124,35 +124,20 @@ layui.define(['jquery', 'element'], function(exports) { return new pearTab(option); } - pearTab.prototype.click = function(callback) { - var elem = this.option.elem; + pearTab.prototype.click = function (callback) { var option = this.option; - element.on('tab(' + this.option.elem + ')', function(data) { + var elem = this.option.elem; + 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); - } - } callback(id); }); } - pearTab.prototype.positionTab = function() { + pearTab.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,12 +149,12 @@ layui.define(['jquery', 'element'], function(exports) { }, 200); } - pearTab.prototype.clear = function() { + 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) { + pearTab.prototype.addTab = function (opt) { var title = ''; if (opt.close) { title += '' + opt.title + @@ -181,8 +166,8 @@ layui.define(['jquery', 'element'], function(exports) { element.tabAdd(this.option.elem, { title: title, content: '', id: opt.id }); tabData.push(opt); @@ -193,25 +178,25 @@ layui.define(['jquery', 'element'], function(exports) { var index = 0; // 根据过滤 fliter 标识, 重置选项卡标题 - pearTab.prototype.changeTabTitleById = function(elem, id, title) { + pearTab.prototype.changeTabTitleById = function (elem, id, title) { var currentTab = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title [lay-id='" + id + "'] .title"); currentTab.html(title); } // 根据过滤 filter 标识, 删除指定选项卡 - pearTab.prototype.delTabByElem = function(elem, id, callback) { + pearTab.prototype.delTabByElem = function (elem, id, callback) { var currentTab = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title [lay-id='" + id + "']"); if (currentTab.find("span").is(".able-close")) { tabDelete(elem, id, callback); } } // 根据过滤 filter 标识, 删除其他选项卡 - pearTab.prototype.delOtherTabByElem = function(elem, callback) { + pearTab.prototype.delOtherTabByElem = function (elem, callback) { var currentId = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title .layui-this").attr( "lay-id"); var tabtitle = $(".layui-tab[lay-filter='" + 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(elem, $(this).attr("lay-id"), callback); @@ -221,109 +206,72 @@ layui.define(['jquery', 'element'], function(exports) { } // 根据过滤 filter 标识, 删除全部选项卡 - pearTab.prototype.delAllTabByElem = function(elem, callback) { + pearTab.prototype.delAllTabByElem = function (elem, callback) { var currentId = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title .layui-this").attr( "lay-id"); var tabtitle = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title li"); - $.each(tabtitle, function(i) { + $.each(tabtitle, function (i) { if ($(this).find("span").is(".able-close")) { tabDelete(elem, $(this).attr("lay-id"), callback); } }) } // 根据过滤 filter 标识, 删除当前选项卡 - pearTab.prototype.delCurrentTabByElem = function(elem, callback) { + pearTab.prototype.delCurrentTabByElem = function (elem, callback) { var currentTab = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title .layui-this"); if (currentTab.find("span").is(".able-close")) { var currentId = currentTab.attr("lay-id"); tabDelete(elem, currentId, callback); } } + + /** + * @since Pear Admin 4.0 + * + * + */ + pearTab.prototype.addTabOnly = function (opt, time) { - // 通过过滤 filter 标识, 新增标签页 - pearTab.prototype.addTabOnlyByElem = function(elem, opt, time) { - var title = ''; - if (opt.close) { - title += '' + opt.title + - '' - } else { - title += '' + opt.title + - '' - } - if ($(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title li[lay-id]").length <= 0) { - element.tabAdd(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() { - 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); - } - tabData.push(opt); - sessionStorage.setItem(elem + "-pear-tab-data", JSON.stringify(tabData)); + var title = `${opt.title}`; - } - } - 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 + - ''; - } 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 + + var that = this; + + $.ajax({ + url: opt.url, + type: 'get', + dataType: 'html', + async: false, + success: function (data) { + element.tabAdd(that.option.elem, { + title: title, + content: '
    ' + data + '
    ', + id: opt.id + }); + }, + error: function (xhr, textstatus, thrown) { + return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); + } }); - 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); + sessionStorage.setItem(that.option.elem + "-pear-tab-data", JSON.stringify(tabData)); + sessionStorage.setItem(that.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() { + function () { if ($(this).attr("lay-id") == opt.id) { isData = true; } }) + if (isData == false) { if (this.option.tabMax != false) { @@ -338,19 +286,29 @@ layui.define(['jquery', 'element'], function(exports) { } } - element.tabAdd(this.option.elem, { - title: title, - content: '', - id: opt.id + var that = this; + + $.ajax({ + url: opt.url, + type: 'get', + dataType: 'html', + async: false, + success: function (data) { + element.tabAdd(that.option.elem, { + title: title, + content: '
    ' + data + '
    ', + id: opt.id + }); + tabData.push(opt); + sessionStorage.setItem(that.option.elem + "-pear-tab-data", JSON.stringify(tabData)); + sessionStorage.setItem(that.option.elem + "-pear-tab-data-current", opt.id); + }, + error: function (xhr, textstatus, thrown) { + return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); + } }); - 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); @@ -358,56 +316,49 @@ layui.define(['jquery', 'element'], function(exports) { } // 刷 新 指 定 的 选 项 卡 - pearTab.prototype.refresh = function(time) { - // 刷 新 指 定 的 选 项 卡 - var $iframe = $(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-content .layui-show") - .find("iframe"); + pearTab.prototype.refresh = function (time) { + var $iframe = $(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-content .layui-show > div"); + var $iframeLoad; + if (time != false && time != 0) { - tabIframeLoading(this.option.elem); + $iframe.parent().append(`
    `); + $iframeLoad = $("#" + this.option.elem).find("#pear-tab-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" + $.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 + ',请稍后再试!'); + } }); - index++; - $iframe.on("load", function() { - pearLoad.fadeOut(1000, function() { - pearLoad.remove(); - }); - }) } 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("div[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 = tabData.filter(function (item) { return item.id != id; }) sessionStorage.setItem(elem + "-pear-tab-data", JSON.stringify(tabData)); @@ -428,7 +379,7 @@ layui.define(['jquery', 'element'], function(exports) { 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 = tabData.filter(function (item) { return item.id != id; }) sessionStorage.setItem(elem + "-pear-tab-data", JSON.stringify(tabData)); @@ -436,7 +387,7 @@ layui.define(['jquery', 'element'], function(exports) { removeTab.remove(); // 删除 content - var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("iframe[id='" + id + "']").parent(); + var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("div[id='" + id + "']").parent(); // 删除 tabContent.remove(); } @@ -458,12 +409,11 @@ layui.define(['jquery', 'element'], function(exports) { '" lay-allowClose="true">'; var title = '
      '; var content = '
      '; - var control = - '
      • '; + var control = '
        • '; // 处 理 选 项 卡 头 部 var index = 0; - $.each(option.data, function(i, item) { + $.each(option.data, function (i, item) { var TitleItem = ''; if (option.index == index) { TitleItem += '
      • ' + $.ajax({ + url: item.url, + type: 'get', + dataType: 'html', + async: false, + success: function (data) { + content += '
        ' + data + '
        '; + }, + error: function (xhr) { + return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); + } + }); + } else { - if (!option.preload) { - item.url = "about:blank"; - } - // 处 理 显 示 内 容 - content += '
        ' + + $.ajax({ + url: item.url, + type: 'get', + dataType: 'html', + async: false, + success: function (data) { + content += '
        ' + data + '
        '; + }, + error: function (xhr) { + return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); + } + }); } index++; }); @@ -531,7 +500,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 +508,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 +523,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 +537,10 @@ layui.define(['jquery', 'element'], function(exports) { layer.close(index); }) - $("#" + option.elem + "closeAll").click(function() { + $("#" + option.elem + "closeAll").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).find("span").is(".able-close")) { tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, option); } @@ -581,7 +550,7 @@ layui.define(['jquery', 'element'], function(exports) { } function toolEvent(option) { - $("body .layui-tab[lay-filter='" + option.elem + "']").on("click", "#closeThis", function() { + $("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")) { @@ -595,11 +564,11 @@ layui.define(['jquery', 'element'], function(exports) { } }) - $("body .layui-tab[lay-filter='" + option.elem + "']").on("click", "#closeOther", function() { + $("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) { + $.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, @@ -609,11 +578,11 @@ layui.define(['jquery', 'element'], function(exports) { }) }) - $("body .layui-tab[lay-filter='" + option.elem + "']").on("click", "#closeAll", function() { + $("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) { + $.each(tabtitle, function (i) { if ($(this).find("span").is(".able-close")) { tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, option); } @@ -626,10 +595,10 @@ layui.define(['jquery', 'element'], function(exports) { 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 +612,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(); diff --git a/component/pear/module/treetable.js b/component/pear/module/treetable.js deleted file mode 100644 index ab0d7a9..0000000 --- a/component/pear/module/treetable.js +++ /dev/null @@ -1,253 +0,0 @@ -layui.define(['layer', 'table'], function (exports) { - var $ = layui.jquery; - var layer = layui.layer; - var table = layui.table; - - var instances = []; - - var treetable = { - - render: function (param) { - param.method = param.method?param.method:"GET"; - if (!treetable.checkParam(param)) { - return; - } - if (param.data) { - treetable.init(param, param.data); - } else { - if(param.method === 'post' || param.method === 'POST') { - $.post(param.url, param.where, function(res){ - if(param.parseData){ - res = param.parseData(res); - param.data = res.data; - } - treetable.init(param, res.data); - }); - } else { - $.get(param.url, param.where, function(res){ - if(param.parseData){ - res = param.parseData(res); - param.data = res.data; - } - treetable.init(param, res.data); - }); - } - } - }, - // 渲染表格 - init: function (param, data) { - var mData = []; - var doneCallback = param.done; - var tNodes = data; - for (var i = 0; i < tNodes.length; i++) { - var tt = tNodes[i]; - if (!tt.id) { - tt.id = tt[param.treeIdName]; - } - if (!tt.pid) { - tt.pid = tt[param.treePidName]; - } - } - - var sort = function (s_pid, data) { - for (var i = 0; i < data.length; i++) { - if (data[i].pid == s_pid) { - var len = mData.length; - if (len > 0 && mData[len - 1].id == s_pid) { - mData[len - 1].isParent = true; - } - mData.push(data[i]); - sort(data[i].id, data); - } - } - }; - sort(param.treeSpid, tNodes); - - param.prevUrl = param.url; - param.url = undefined; - param.data = mData; - param.page = { - count: param.data.length, - limit: param.data.length - }; - param.cols[0][param.treeColIndex].templet = function (d) { - var mId = d.id; - var mPid = d.pid; - var isDir = d.isParent; - var emptyNum = treetable.getEmptyNum(mPid, mData); - var iconHtml = ''; - for (var i = 0; i < emptyNum; i++) { - iconHtml += ''; - } - if (isDir) { - iconHtml += ' '; - } else { - iconHtml += ''; - } - iconHtml += '  '; - var ttype = isDir ? 'dir' : 'file'; - var vg = ''; - return vg + iconHtml + d[param.cols[0][param.treeColIndex].field] + '' - }; - - param.done = function (res, curr, count) { - $(param.elem).next().addClass('treeTable'); - $('.treeTable .layui-table-page').css('display', 'none'); - $(param.elem).next().attr('treeLinkage', param.treeLinkage); - if (param.treeDefaultClose) { - treetable.foldAll(param.elem); - } - if (doneCallback) { - doneCallback(res, curr, count); - } - }; - - // 渲染表格 - table.render(param); - var result = instances.some(item=>item.key===param.elem); - if(!result){ - instances.push({key:param.elem,value:param}); - } - }, - reload: function(elem) { - instances.forEach(function(item){ - if(item.key === elem) { - $(elem).next().remove(); - item.value.data = undefined; - item.value.url = item.value.prevUrl; - treetable.render(item.value); - } - }) - }, - search: function(elem,keyword) { - var $tds = $(elem).next('.treeTable').find('.layui-table-body tbody tr td'); - if (!keyword) { - $tds.css('background-color', 'transparent'); - layer.msg("请输入关键字", {icon: 5}); - return; - } - var searchCount = 0; - $tds.each(function () { - $(this).css('background-color', 'transparent'); - if ($(this).text().indexOf(keyword) >= 0) { - $(this).css('background-color', 'rgba(250,230,160,0.5)'); - if (searchCount == 0) { - $('body,html').stop(true); - $('body,html').animate({scrollTop: $(this).offset().top - 150}, 500); - } - searchCount++; - } - }); - if (searchCount == 0) { - layer.msg("没有匹配结果", {icon: 5}); - } else { - treetable.expandAll(elem); - } - }, - getEmptyNum: function (pid, data) { - var num = 0; - if (!pid) { - return num; - } - var tPid; - for (var i = 0; i < data.length; i++) { - if (pid == data[i].id) { - num += 1; - tPid = data[i].pid; - break; - } - } - return num + treetable.getEmptyNum(tPid, data); - }, - // 展开/折叠行 - toggleRows: function ($dom, linkage) { - var type = $dom.attr('lay-ttype'); - if ('file' == type) { - return; - } - var mId = $dom.attr('lay-tid'); - var isOpen = $dom.hasClass('open'); - if (isOpen) { - $dom.removeClass('open'); - } else { - $dom.addClass('open'); - } - $dom.closest('tbody').find('tr').each(function () { - var $ti = $(this).find('.treeTable-icon'); - var pid = $ti.attr('lay-tpid'); - var ttype = $ti.attr('lay-ttype'); - var tOpen = $ti.hasClass('open'); - if (mId == pid) { - if (isOpen) { - $(this).hide(); - if ('dir' == ttype && tOpen == isOpen) { - $ti.trigger('click'); - } - } else { - $(this).show(); - if (linkage && 'dir' == ttype && tOpen == isOpen) { - $ti.trigger('click'); - } - } - } - }); - }, - // 检查参数 - checkParam: function (param) { - if (!param.treeSpid && param.treeSpid != 0) { - layer.msg('参数treeSpid不能为空', {icon: 5}); - return false; - } - - if (!param.treeIdName) { - layer.msg('参数treeIdName不能为空', {icon: 5}); - return false; - } - - if (!param.treePidName) { - layer.msg('参数treePidName不能为空', {icon: 5}); - return false; - } - - if (!param.treeColIndex && param.treeColIndex != 0) { - layer.msg('参数treeColIndex不能为空', {icon: 5}); - return false; - } - return true; - }, - // 展开所有 - expandAll: function (dom) { - $(dom).next('.treeTable').find('.layui-table-body tbody tr').each(function () { - var $ti = $(this).find('.treeTable-icon'); - var ttype = $ti.attr('lay-ttype'); - var tOpen = $ti.hasClass('open'); - if ('dir' == ttype && !tOpen) { - $ti.trigger('click'); - } - }); - }, - // 折叠所有 - foldAll: function (dom) { - $(dom).next('.treeTable').find('.layui-table-body tbody tr').each(function () { - var $ti = $(this).find('.treeTable-icon'); - var ttype = $ti.attr('lay-ttype'); - var tOpen = $ti.hasClass('open'); - if ('dir' == ttype && tOpen) { - $ti.trigger('click'); - } - }); - } - }; - - // 给图标列绑定事件 - $('body').on('click', '.treeTable .treeTable-icon', function () { - var treeLinkage = $(this).parents('.treeTable').attr('treeLinkage'); - if ('true' == treeLinkage) { - treetable.toggleRows($(this), true); - } else { - treetable.toggleRows($(this), false); - } - }); - - exports('treetable', treetable); -}); \ No newline at end of file diff --git a/component/pear/pear.js b/component/pear/pear.js index 236631c..2b5ba63 100644 --- a/component/pear/pear.js +++ b/component/pear/pear.js @@ -18,12 +18,10 @@ layui.config({ echartsTheme: "echartsTheme",// 数据图表主题 encrypt: "encrypt", // 数据加密组件 select: "select", // 下拉多选组件 - drawer: "drawer", // 抽屉弹层组件 notice: "notice", // 消息提示组件 step:"step", // 分布表单组件 tag:"tag", // 多标签页组件 popup:"popup", // 弹层封装 - treetable:"treetable", // 树状表格 dtree:"dtree", // 树结构 tinymce:"tinymce/tinymce", // 编辑器 area:"area", // 省市级联 @@ -45,7 +43,8 @@ layui.config({ nprogress: "nprogress", // 进度过渡 watermark:"watermark/watermark", //水印组件 fullscreen:"fullscreen", //全屏组件 - popover:"popover/popover" //汽泡组件 + popover:"popover/popover", //汽泡组件 + darkreader: "darkreader" }).use(['layer', 'theme'], function () { layui.theme.changeTheme(window, false); }); \ No newline at end of file diff --git a/config/pear.config.yml b/config/pear.config.yml index 4b7cd70..1576697 100644 --- a/config/pear.config.yml +++ b/config/pear.config.yml @@ -1,9 +1,9 @@ ## 网站配置 -logo: +information: ## 网站名称 - title: "Pear Admin" + name: "Pear Admin" ## 网站图标 - image: "admin/images/logo.png" + logo: "admin/images/logo.png" ## 菜单配置 menu: ## 菜单数据来源 @@ -54,7 +54,7 @@ theme: ## 主题色配置列表 colors: - id: "1" - color: "#2d8cf0" + color: "#16baaa" second: "#ecf5ff" - id: "2" color: "#36b368" @@ -68,6 +68,9 @@ colors: - id: "5" color: "#3963bc" second: "#ecf5ff" +- id: "6" + color: "#009688" + second: "#f0f9eb" ## 其他配置 other: ## 主页动画时长 diff --git a/index.html b/index.html index 3e90a71..61d4053 100644 --- a/index.html +++ b/index.html @@ -3,13 +3,15 @@ - 主页 + Pear Admin 4.0 + + @@ -22,7 +24,7 @@ - +
      • @@ -35,7 +37,6 @@
        • -
        • @@ -57,11 +58,11 @@ - +
      -
      +
      @@ -70,15 +71,7 @@
      - +
      @@ -96,27 +89,28 @@ diff --git a/login.html b/login.html index a1dc971..0631748 100644 --- a/login.html +++ b/login.html @@ -6,26 +6,26 @@ 登录 - + - +
      Pear Admin
      - 明 湖 区 最 具 影 响 力 的 设 计 规 范 之 一 + 致 力 于 让 " Web " 开 发 变 得 简 单 优 雅
      - +
      - +
      - +
      @@ -33,7 +33,7 @@
      @@ -68,4 +68,4 @@ }) - + \ No newline at end of file diff --git a/view/console/console1.html b/view/console/console1.html index 763eea9..47d133a 100644 --- a/view/console/console1.html +++ b/view/console/console1.html @@ -6,11 +6,10 @@ - - -
      + +
      @@ -150,7 +149,7 @@
      -
      +
      @@ -258,9 +257,6 @@
      - - - - - - - + }); + + + + \ No newline at end of file diff --git a/view/demo/index.html b/view/demo/index.html deleted file mode 100644 index 5525c9b..0000000 --- a/view/demo/index.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - -
      -
      -
      - -
      - - - - - diff --git a/view/document/area.html b/view/document/area.html deleted file mode 100644 index 1ccb2ed..0000000 --- a/view/document/area.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - 区域选择 - - - -
      -
      -
      -
      开发环境
      -
      - Area 省市级联 选择组件 -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -							    
      -							    并
      -							    
      -						        并
      -							    
      -							
      -
      -
      -
      -
      -
      -
      -
      - 基本使用 -
      -
      -
      -
      -
      网点地址
      -
      - -
      -
      - -
      -
      - -
      -
      -
      -
      -
      -
      -
      -
      -
      - 基本使用 -
      -
      -
      -
      -
      网点地址
      -
      - -
      -
      - -
      -
      - -
      -
      -
      -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -							layui.use(['area'], function () {
      -							    var area = layui.area;
      -								 
      -							    area.render({
      -							        elem: '#area-picker',
      -							        change: function (res) {
      -							            console.log(res);
      -							        }
      -							    });
      -							});
      -						
      -
      -
      -
      -
      -
      - - - - - - diff --git a/view/document/button.html b/view/document/button.html deleted file mode 100644 index 62a86f2..0000000 --- a/view/document/button.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - - 按钮组件 - - - -
      -
      -
      -
      - 开发环境 -
      -
      - Pear Button 参考 Element UI 样式 ,提供 Button 服务 -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -								
      -								或
      -								
      -							
      -
      -
      -
      -
      -
      -
      -
      - 简单使用 -
      -
      -    -    -
      -
      -    -    -    -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -								
      -								
      -															
      -								
      -								
      -							
      -
      -
      -
      -
      -
      -
      -
      - 简约样式 -
      -
      -    -    -    -    -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -								
      -								
      -															
      -								
      -								
      -							
      -
      -
      -
      -
      -
      -
      -
      - 按钮大小 -
      -
      -    -    -    -    -
      -
      -    -    -    -    -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -								  
      -								  
      -								  
      -								  
      -							
      -
      -
      -
      -
      -
      -
      -
      -
      -
      - 按钮组 -
      -
      -
      - - - -
      -
      -
      -
      - - - -
      -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -								
      - - - -
      -
      -
      -
      -
      -
      -
      -
      -
      - Load 自动 -
      -
      - -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -								layui.use(["button"], function() {
      -								    var button = layui.button;
      -								    
      -									button.load({
      -								        elem:'[load]',
      -								        time: 600,
      -								        done: function(){
      -									        popup.success("加载完成");
      -								        }
      -								    })
      -								})
      -							
      -
      -
      -
      -
      -
      -
      -
      - Load 手动 -
      -
      - - - - -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -								layui.use(["button"], function() {
      -								    var button = layui.button;
      -								    
      -									var dom = button.load({
      -								        elem:'[load]',
      -								    })
      -									
      -								    dom.stop(function() {
      -								        popup.failure("已停止");
      -								    });
      -								})
      -							
      -
      -
      -
      -
      -
      -
      -
      - 本页跳转 -
      -
      - -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -								layui.use(["jquery"], function() {
      -								    var $ = layui.jquery;
      -								    
      -								    $("[to]").click(function(){
      -								        top.layui.frame.changePageByElement("content","http://www.baidu.com","百度一下",true)
      -								    })
      -								})
      -							
      -
      -
      -
      -
      -
      - - - - - diff --git a/view/document/card.html b/view/document/card.html deleted file mode 100644 index 4f98816..0000000 --- a/view/document/card.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - 数据卡片 - - - -
      -
      -
      -
      - -
      - -
      - -
      - -
      -
      - - - -
      -
      -
      -
      -
      -
      - - - - - diff --git a/view/document/core.html b/view/document/core.html deleted file mode 100644 index 1c81d15..0000000 --- a/view/document/core.html +++ /dev/null @@ -1,219 +0,0 @@ - - - - - 数据卡片 - - - -
      -
      - -
      -
      -
      -
      - -
      -
      -
      -
      - -
      -
      -
      -
      - -
      -
      -
      -
      - -
      -
      -
      -
      - -
      -
      -
      -
      - -
      -
      -
      -
      - -
      -
      -
      -
      - -
      -
      -
      -
      - -
      -
      -
      -
      - -
      -
      -
      -
      - -
      -
      -
      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      方法描述参数备注
      admin.collapseSide侧边收缩无模式限制
      admin.refreshThis刷新当前无模式限制
      admin.refresh刷新指定id: 编号仅限 TAB 模式
      admin.addTab新增卡片id:编号,title:标题,url:路径仅限 TAB 模式
      admin.changeTabTitle修改标题id:编号,title:标题仅限 TAB 模式
      admin.closeTab关闭卡片id:编号仅限 TAB 模式
      admin.closeCurrentTab关闭当前仅限 TAB 模式
      admin.closeAllTab关闭所有仅限 TAB 模式
      admin.closeOtherTab关闭其他仅限 TAB 模式
      admin.changeIframe切换页面id:编号,title:标题,url:路径仅限 IFRAME 模式
      admin.jump兼容切换id:编号,title:标题,url:路径无模式限制
      admin.fullScreen全屏模式无模式限制
      -
      -
      - - - - - diff --git a/view/document/count.html b/view/document/count.html deleted file mode 100644 index e8f9f1b..0000000 --- a/view/document/count.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - 数字滚动 - - - -
      -
      -
      -
      - 开发环境 -
      -
      - Pear Count 数据滚动特效 -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -								
      -								 并
      -								
      -							
      -
      -
      -
      -
      -
      -
      -
      - 简单使用 -
      -
      -

      0

      -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -								layui.use(['count'], function() {
      -								    var count = layui.count;
      -									
      -								    count.up("number1", {
      -								        time: 8000,
      -								        num: 4540.34,
      -								        regulator: 100
      -								    })
      -								})
      -							
      -
      -
      -
      -
      -
      -
      -
      - 保留小数 -
      -
      -

      0

      -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -							layui.use(['count'], function() {
      -							    var count = layui.count;
      -								
      -							    count.up("number2", {
      -							        time: 8000,
      -							        num: 4540.34,
      -							        bit: 2,
      -							        regulator: 100
      -							    })
      -							})
      -						
      -
      -
      -
      -
      -
      - - -
      - - - - - diff --git a/view/document/drawer.html b/view/document/drawer.html deleted file mode 100644 index 591e23b..0000000 --- a/view/document/drawer.html +++ /dev/null @@ -1,597 +0,0 @@ - - - - - 抽屉组件 - - - - -
      -
      -
      -
      开发环境
      -
      - Drawer 在 弹出层 UI 上带来不一样的体验. -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -								
      -								 并
      -								
      -							
      -
      -
      -
      -
      -
      -
      -
      抽屉
      -
      - - - - -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -								layui.use(['drawer'], function() {
      -									var drawer = layui.drawer;
      -
      -								    drawer.open({
      -								        direction: "right",
      -								        dom: ".layer-top",
      -								        distance: "30%"
      -								    });
      -								})
      -							
      -
      -
      -
      -
      -
      -
      -
      进阶
      -
      - -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -								var dom;
      -
      -								$(".drawer-close-mask").click(function() {
      -								    dom = drawer.open({
      -								        direction: "right",
      -								        dom: ".layer-close-mask",
      -								        distance: "30%",
      -								        maskClose: false
      -								    });
      -								})
      -
      -								$("#btnClose").click(function() {
      -								    dom.close();
      -								})
      -
      -							
      -
      -
      -
      -
      -
      -
      -
      扩展
      -
      - -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -								layui.use(['drawer'], function() {
      -									var drawer = layui.drawer;
      -
      -								    $(".drawer-auto-close").click(function() {
      -								        dom = drawer.open({
      -								            direction: "right",
      -								            dom: ".layer-auto-close",
      -								            distance: "30%",
      -								            maskClose: false,
      -								            time: 1000
      -								        });
      -								    })
      -								})
      -							
      -
      -
      -
      -
      -
      -
      -
      扩展
      -
      - -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -								layui.use(['drawer'], function() {
      -									var drawer = layui.drawer;
      -
      -								    $(".drawer-auto-close").click(function() {
      -								        dom = drawer.open({
      -								            direction: "right",
      -								            dom: ".layer-auto-close",
      -								            distance: "30%",
      -								            success:function(){
      -								                layer.msg("触发回调函数");
      -								            }
      -								        });
      -								    })
      -								})
      -							
      -
      -
      -
      -
      - -
      -
      -
      扩展
      -
      -
      - -
      -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -									layui.use(['drawer'], function() {
      -									  var drawer = layui.drawer;
      -									    $("#targetDemo").click(function () {
      -									      drawer.open({
      -									      // 指定挂载节点
      -									      target: "#targetEl"
      -									      direction: "right",
      -									      dom: ".layer-right",
      -									      distance: "50%",
      -									      });
      -									})
      -							
      -
      -
      -
      -
      - -
      -
      -
      基于 layer 的抽屉扩展
      -
      -

      兼容原版 drawer 所有参数,要使用 layer 扩展,设置 legacy 选项为 false 即可

      - - - - - - - - -
      - -
      -
      指定容器内打开,需使用 layer 捕获层模式,并设置目标容器 style="overflow: hidden; - position: relative;"
      -
      - 使用 url 参数指定抽屉代码片段地址,会使用 ajax 请求将代码片段拼接到抽屉中,和原来的页面在同一个页面上, 传值更方便。注意片段和原页面不能出现相同的 ID。 -
      -
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -											$("#layerDrawerLeft").click(function(){
      -											  drawer.open({
      -											    legacy: false,
      -											    offset: 'l',
      -											    area: "30%",
      -											    content: "left内容",
      -											  })
      -											})
      -											$("#layerDrawerRight").click(function () {
      -											  drawer.open({
      -											    legacy: false,
      -											    offset: 'r',
      -											    area: "30%",
      -											    content: "right内容",
      -											  })
      -											})
      -											$("#layerDrawerTop").click(function () {
      -											  drawer.open({
      -											    legacy: false,
      -										      offset: "t",
      -											    content: "top内容",
      -											  })
      -											})
      -											$("#layerDrawerBottom").click(function () {
      -											  drawer.open({
      -											    legacy: false,
      -											    offset: "b",
      -											    content: "bottom内容",
      -											  })
      -											})
      -
      -											$("#layerDrawer").click(function () {
      -											  var index = drawer.open({
      -											    legacy: false,
      -											    title: ['标题', 'font-size:16px;color:#2d8cf0'],
      -											    maxmin: true,
      -											    offset: "r",
      -											    area: "30%",
      -											    content: "抽屉内容",
      -											    btn:"关闭",
      -											    yes:function(index,layero){
      -											      drawer.close(index);
      -											      console.log(index,layero);
      -											    },
      -											    btnAlign: "l",
      -											    closeBtn: 1,
      -											  })
      -											})
      -
      -											$("#layerDrawerParent").click(function () {
      -
      -											  var index = parent.layui.drawer.open({
      -												    legacy: false,
      -												    title: ['标题', 'font-size:16px;color:#2d8cf0'],
      -												    maxmin: true,
      -												    offset: "r",
      -												    area: "30%",
      -												    content: "抽屉内容",
      -												    btn:"关闭",
      -												    yes:function(index,layero){
      -												      drawer.close(index);
      -												      console.log(index,layero);
      -												    },
      -												    btnAlign: "l",
      -												    closeBtn: 1,
      -												})
      -											})
      -
      -											$("#layertargetDemo").click(function () {
      -											    drawer.open({
      -											    legacy: false,
      -											    target: "#layertargetEl",
      -											    direction: "right",
      -											    dom: ".layer-right",
      -											    distance: "50%",
      -											    });
      -											})
      -
      -											$("#layerDrawerIframe").click(function () {
      -											  drawer.open({
      -											  legacy: false,
      -											  title: ['用户管理', 'font-size:16px;color:#2d8cf0'],
      -											  offset: 'r',
      -											  area: "80%",
      -											   maxmin: true,
      -											   closeBtn: 1,
      -											   iframe: window.location.origin + "/view/document/table.html"
      -											  })
      -											})
      -
      -											$("#layerDrawerURL").click(function () {
      -											   drawer.open({
      -										     legacy: false,
      -										     title: ['用户管理', 'font-size:16px;color:#2d8cf0'],
      -											   offset: 'r',
      -											   area: "80%",
      -											   maxmin: true,
      -											   closeBtn: 1,
      -											   url: window.location.origin + "/view/document/drawerFragment.html"
      -											   })
      -											})
      -							
      -
      -
      -
      -
      -
      - - - - - - - - - - - - - - - - diff --git a/view/document/drawerFragment.html b/view/document/drawerFragment.html deleted file mode 100644 index bb399a0..0000000 --- a/view/document/drawerFragment.html +++ /dev/null @@ -1,385 +0,0 @@ - -
      -
      -
      -
      -
      - -
      - -
      -
      -
      - -
      - -
      -
      -
      - -
      - -
      -
      -
      - -
      - -
      -
      -
      - -
      - -
      -
      -
      - - - -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      - - - - - - - - - - - - - diff --git a/view/document/dtree.html b/view/document/dtree.html deleted file mode 100644 index 8029ebb..0000000 --- a/view/document/dtree.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - 树形结构 - - - -
      -
      -
      -
      开发环境
      -
      Dtree 提供 树状态 的数据结构展示
      -
      -
      -
      -
      -
      -

      显示代码

      -
      -
      -								
      -								 并
      -								
      -								 并
      -								
      -							
      -
      -
      -
      -
      -
      -
      -
      - 嵌套数据格式 -
      -
      -
        -
        -
        -
        -
        -
        -
        -

        显示代码

        -
        -
        -								layui.use(['dtree'], function () {
        -								    dtree = layui.dtree;
        -								 
        -								    dtree.render({
        -								        elem: "#demoTree",
        -								        initLevel: "1",
        -								        method: 'get',
        -								        url: "admin/data/dtree.json"
        -								    });
        -								});
        -							
        -
        -
        -
        -
        -
        -
        -
        - 嵌套数据格式 -
        -
        -
          -
          -
          -
          -
          -
          -
          -

          显示代码

          -
          -
          -								layui.use(['dtree'], function () {
          -								    dtree = layui.dtree;
          -								 
          -								    dtree.render({
          -								        elem: "#demoTree",
          -								        initLevel: "1",
          -								        method: 'get',
          -								        url: "admin/data/dtree.json",
          -								        dataFormat: "list", 
          -								        checkbar: true
          -								    });
          -								});
          -							
          -
          -
          -
          -
          -
          -
          -
          - 下拉树 -
          -
          -
            -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								layui.use(['dtree'], function () {
            -								    dtree = layui.dtree;
            -								 
            -								    dtree.render({
            -								        elem: "#demoTree2",
            -								        initLevel: "1",
            -								        method: 'get',
            -								        url: "admin/data/dtree.json",
            -								        select: true
            -								    });
            -								});
            -							
            -
            -
            -
            -
            -
            - - - - - \ No newline at end of file diff --git a/view/document/encrypt.html b/view/document/encrypt.html deleted file mode 100644 index 7c7ac6f..0000000 --- a/view/document/encrypt.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - 哈希加密 - - - -
            -
            -
            -
            - 开发环境 -
            -
            - Pear encrypt 为前端开发 提供 加密服务 -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            -								 并
            -								
            -							
            -
            -
            -
            -
            -
            -
            -
            加密操作
            -
            -
            -
            - -
            -
            - -
            -
            - -
            -
            -
            -
            -
            -
            -
            -
            加密结果
            -
            - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								layui.use(['encrypt'], function() {
            -									var encrypt = layui.encrypt;
            -								
            -								    encrypt.md5( str );
            -									
            -								    encrypt.sha1( str );
            -									
            -								    encrypt.sha256( str );
            -								})
            -							
            -
            -
            -
            -
            -
            -
            -
            API 文档
            -
            -
            - encrypt.md5( str ) -- MD5加密 -
            -
            - encrypt.sha1( str ) -- SHA1加密 -
            -
            - encrypt.sha256( str ) -- SHA256加密 -
            -
            - encrypt.sha512( str ) -- SHA512加密 -
            -
            - encrypt.rmd160( str ) -- RMD160加密 -
            -
            - encrypt.crc32( str ) -- CRC32加密 -
            -
            - encrypt.Base64Encode( str ) -- BASE64加密 -
            -
            -
            -
            -
            -
            -
            - - - - - diff --git a/view/document/form.html b/view/document/form.html deleted file mode 100644 index c991209..0000000 --- a/view/document/form.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - 表单页面 - - - -
            -
            -
            -
            开发环境
            -
            - Pear 基于 Form 的基础上扩展样式 -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            -								 或
            -								
            -							
            -
            -
            -
            -
            -
            输入框
            -
            -
            - -
            -
            - -
            -
            - -
            -
            -
            -
            -
            下拉选择框
            -
            -
            - -
            -
            - -
            -
            - -
            -
            - -
            -
            - -
            -
            -
            -
            -
            复选框
            -
            -
            - - - - -
            -
            -
            -
            -
            -
            -
            扩展样式
            -
            -
            - -
            -
            - -
            -
            - -
            - -
            -
            -
            -
            文本域
            -
            -
            - -
            -
            -
            -
            -
            开关
            -
            -
            -    -    -    -    -
            -
            -
            -
            -
            单选框
            -
            -
            - - - -
            -
            -
            -
            -
            - - - - - diff --git a/view/document/fullscreen.html b/view/document/fullscreen.html deleted file mode 100644 index ad625aa..0000000 --- a/view/document/fullscreen.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - 全屏组件 - - - - -
            -
            -
            -
            开发环境
            -
            - fullscreen 用于控制页面或元素全屏 -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            -								 并
            -								
            -								 并
            -								
            -							
            -
            -
            -
            -
            -
            -
            -
            全屏控制
            -
            - - - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -				layui.use(['fullscreen'], function() {
            -    var fullscreen = layui.fullscreen;
            -     fullscreen.fullScreen();
            -	    fullscreen.fullClose();
            -	    fullscreen.fullScreen("#fulltarget");
            -	    fullscreen.isFullscreen();
            -
            -			})
            -			
            -
            -
            -
            -
            -
            -
            -
            指定容器全屏
            -
            -
            - - -
            -
            -
            -
            -
            - - - - - diff --git a/view/document/icon.html b/view/document/icon.html deleted file mode 100644 index c453abb..0000000 --- a/view/document/icon.html +++ /dev/null @@ -1,2195 +0,0 @@ - - - - - 图标列表 - - - - - - - - - - -
            - -
            -
            -
              - -
            • - -
              加载
              -
              &#xe6f0;
              -
            • - -
            • - -
              download
              -
              &#xe68d;
              -
            • - -
            • - -
              electronics
              -
              &#xe68e;
              -
            • - -
            • - -
              drag
              -
              &#xe68f;
              -
            • - -
            • - -
              elipsis
              -
              &#xe690;
              -
            • - -
            • - -
              export
              -
              &#xe691;
              -
            • - -
            • - -
              explain
              -
              &#xe692;
              -
            • - -
            • - -
              edit
              -
              &#xe693;
              -
            • - -
            • - -
              eye-close
              -
              &#xe694;
              -
            • - -
            • - -
              email
              -
              &#xe695;
              -
            • - -
            • - -
              error
              -
              &#xe696;
              -
            • - -
            • - -
              favorite
              -
              &#xe697;
              -
            • - -
            • - -
              file-common
              -
              &#xe698;
              -
            • - -
            • - -
              file-delete
              -
              &#xe699;
              -
            • - -
            • - -
              file-add
              -
              &#xe69a;
              -
            • - -
            • - -
              film
              -
              &#xe69b;
              -
            • - -
            • - -
              fabulous
              -
              &#xe69c;
              -
            • - -
            • - -
              file
              -
              &#xe69d;
              -
            • - -
            • - -
              folder-close
              -
              &#xe69e;
              -
            • - -
            • - -
              filter
              -
              &#xe69f;
              -
            • - -
            • - -
              good
              -
              &#xe6a0;
              -
            • - -
            • - -
              hide
              -
              &#xe6a1;
              -
            • - -
            • - -
              home
              -
              &#xe6a2;
              -
            • - -
            • - -
              history
              -
              &#xe6a3;
              -
            • - -
            • - -
              file-open
              -
              &#xe6a4;
              -
            • - -
            • - -
              forward
              -
              &#xe6a5;
              -
            • - -
            • - -
              import
              -
              &#xe6a6;
              -
            • - -
            • - -
              image-text
              -
              &#xe6a7;
              -
            • - -
            • - -
              keyboard-26
              -
              &#xe6a8;
              -
            • - -
            • - -
              keyboard-9
              -
              &#xe6a9;
              -
            • - -
            • - -
              link
              -
              &#xe6aa;
              -
            • - -
            • - -
              layout
              -
              &#xe6ab;
              -
            • - -
            • - -
              fullscreen-shrink
              -
              &#xe6ac;
              -
            • - -
            • - -
              layers
              -
              &#xe6ad;
              -
            • - -
            • - -
              lock
              -
              &#xe6ae;
              -
            • - -
            • - -
              fullscreen-expand
              -
              &#xe6af;
              -
            • - -
            • - -
              map
              -
              &#xe6b0;
              -
            • - -
            • - -
              meh
              -
              &#xe6b1;
              -
            • - -
            • - -
              menu
              -
              &#xe6b2;
              -
            • - -
            • - -
              loading
              -
              &#xe6b3;
              -
            • - -
            • - -
              help
              -
              &#xe6b4;
              -
            • - -
            • - -
              minus-circle
              -
              &#xe6b5;
              -
            • - -
            • - -
              modular
              -
              &#xe6b6;
              -
            • - -
            • - -
              notification
              -
              &#xe6b7;
              -
            • - -
            • - -
              mic
              -
              &#xe6b8;
              -
            • - -
            • - -
              more
              -
              &#xe6b9;
              -
            • - -
            • - -
              pad
              -
              &#xe6ba;
              -
            • - -
            • - -
              operation
              -
              &#xe6bb;
              -
            • - -
            • - -
              play
              -
              &#xe6bc;
              -
            • - -
            • - -
              print
              -
              &#xe6bd;
              -
            • - -
            • - -
              mobile-phone
              -
              &#xe6be;
              -
            • - -
            • - -
              minus
              -
              &#xe6bf;
              -
            • - -
            • - -
              navigation
              -
              &#xe6c0;
              -
            • - -
            • - -
              pdf
              -
              &#xe6c1;
              -
            • - -
            • - -
              prompt
              -
              &#xe6c2;
              -
            • - -
            • - -
              move
              -
              &#xe6c3;
              -
            • - -
            • - -
              refresh
              -
              &#xe6c4;
              -
            • - -
            • - -
              run-up
              -
              &#xe6c5;
              -
            • - -
            • - -
              picture
              -
              &#xe6c6;
              -
            • - -
            • - -
              run-in
              -
              &#xe6c7;
              -
            • - -
            • - -
              pin
              -
              &#xe6c8;
              -
            • - -
            • - -
              save
              -
              &#xe6c9;
              -
            • - -
            • - -
              search
              -
              &#xe6ca;
              -
            • - -
            • - -
              share
              -
              &#xe6cb;
              -
            • - -
            • - -
              scanning
              -
              &#xe6cc;
              -
            • - -
            • - -
              security
              -
              &#xe6cd;
              -
            • - -
            • - -
              sign-out
              -
              &#xe6ce;
              -
            • - -
            • - -
              select
              -
              &#xe6cf;
              -
            • - -
            • - -
              stop
              -
              &#xe6d0;
              -
            • - -
            • - -
              success
              -
              &#xe6d1;
              -
            • - -
            • - -
              smile
              -
              &#xe6d2;
              -
            • - -
            • - -
              switch
              -
              &#xe6d3;
              -
            • - -
            • - -
              setting
              -
              &#xe6d4;
              -
            • - -
            • - -
              survey
              -
              &#xe6d5;
              -
            • - -
            • - -
              task
              -
              &#xe6d6;
              -
            • - -
            • - -
              skip
              -
              &#xe6d7;
              -
            • - -
            • - -
              text
              -
              &#xe6d8;
              -
            • - -
            • - -
              time
              -
              &#xe6d9;
              -
            • - -
            • - -
              telephone-out
              -
              &#xe6da;
              -
            • - -
            • - -
              toggle-left
              -
              &#xe6db;
              -
            • - -
            • - -
              toggle-right
              -
              &#xe6dc;
              -
            • - -
            • - -
              telephone
              -
              &#xe6dd;
              -
            • - -
            • - -
              top
              -
              &#xe6de;
              -
            • - -
            • - -
              unlock
              -
              &#xe6df;
              -
            • - -
            • - -
              user
              -
              &#xe6e0;
              -
            • - -
            • - -
              upload
              -
              &#xe6e1;
              -
            • - -
            • - -
              work
              -
              &#xe6e2;
              -
            • - -
            • - -
              training
              -
              &#xe6e3;
              -
            • - -
            • - -
              warning
              -
              &#xe6e4;
              -
            • - -
            • - -
              zoom-in
              -
              &#xe6e5;
              -
            • - -
            • - -
              zoom-out
              -
              &#xe6e6;
              -
            • - -
            • - -
              add-bold
              -
              &#xe6e7;
              -
            • - -
            • - -
              arrow-left-bold
              -
              &#xe6e8;
              -
            • - -
            • - -
              arrow-up-bold
              -
              &#xe6e9;
              -
            • - -
            • - -
              close-bold
              -
              &#xe6ea;
              -
            • - -
            • - -
              arrow-down-bold
              -
              &#xe6eb;
              -
            • - -
            • - -
              minus-bold
              -
              &#xe6ec;
              -
            • - -
            • - -
              arrow-right-bold
              -
              &#xe6ed;
              -
            • - -
            • - -
              select-bold
              -
              &#xe6ee;
              -
            • - -
            • - -
              column-3
              -
              &#xe663;
              -
            • - -
            • - -
              column-4
              -
              &#xe664;
              -
            • - -
            • - -
              add
              -
              &#xe665;
              -
            • - -
            • - -
              add-circle
              -
              &#xe666;
              -
            • - -
            • - -
              adjust
              -
              &#xe667;
              -
            • - -
            • - -
              arrow-up-circle
              -
              &#xe668;
              -
            • - -
            • - -
              arrow-right-circle
              -
              &#xe669;
              -
            • - -
            • - -
              arrow-down
              -
              &#xe66a;
              -
            • - -
            • - -
              ashbin
              -
              &#xe66b;
              -
            • - -
            • - -
              arrow-right
              -
              &#xe66c;
              -
            • - -
            • - -
              browse
              -
              &#xe66d;
              -
            • - -
            • - -
              bottom
              -
              &#xe66e;
              -
            • - -
            • - -
              back
              -
              &#xe66f;
              -
            • - -
            • - -
              bad
              -
              &#xe670;
              -
            • - -
            • - -
              arrow-double-left
              -
              &#xe671;
              -
            • - -
            • - -
              arrow-left-circle
              -
              &#xe672;
              -
            • - -
            • - -
              arrow-double-right
              -
              &#xe673;
              -
            • - -
            • - -
              caps-lock
              -
              &#xe674;
              -
            • - -
            • - -
              camera
              -
              &#xe675;
              -
            • - -
            • - -
              chart-bar
              -
              &#xe676;
              -
            • - -
            • - -
              attachment
              -
              &#xe677;
              -
            • - -
            • - -
              code
              -
              &#xe678;
              -
            • - -
            • - -
              close
              -
              &#xe679;
              -
            • - -
            • - -
              check-item
              -
              &#xe67a;
              -
            • - -
            • - -
              calendar
              -
              &#xe67b;
              -
            • - -
            • - -
              comment
              -
              &#xe67c;
              -
            • - -
            • - -
              column-vertical
              -
              &#xe67d;
              -
            • - -
            • - -
              column-horizontal
              -
              &#xe67e;
              -
            • - -
            • - -
              complete
              -
              &#xe67f;
              -
            • - -
            • - -
              chart-pie
              -
              &#xe680;
              -
            • - -
            • - -
              cry
              -
              &#xe681;
              -
            • - -
            • - -
              customer-service
              -
              &#xe682;
              -
            • - -
            • - -
              delete
              -
              &#xe683;
              -
            • - -
            • - -
              direction-down
              -
              &#xe684;
              -
            • - -
            • - -
              copy
              -
              &#xe685;
              -
            • - -
            • - -
              cut
              -
              &#xe686;
              -
            • - -
            • - -
              data-view
              -
              &#xe687;
              -
            • - -
            • - -
              direction-down-circle
              -
              &#xe688;
              -
            • - -
            • - -
              direction-right
              -
              &#xe689;
              -
            • - -
            • - -
              direction-up
              -
              &#xe68a;
              -
            • - -
            • - -
              discount
              -
              &#xe68b;
              -
            • - -
            • - -
              direction-left
              -
              &#xe68c;
              -
            • -
            -
            -
            -
              - -
            • - -
              - 加载 -
              -
              .pear-icon-load -
              -
            • - -
            • - -
              - download -
              -
              .pear-icon-download -
              -
            • - -
            • - -
              - electronics -
              -
              .pear-icon-electronics -
              -
            • - -
            • - -
              - drag -
              -
              .pear-icon-drag -
              -
            • - -
            • - -
              - elipsis -
              -
              .pear-icon-elipsis -
              -
            • - -
            • - -
              - export -
              -
              .pear-icon-export -
              -
            • - -
            • - -
              - explain -
              -
              .pear-icon-explain -
              -
            • - -
            • - -
              - edit -
              -
              .pear-icon-edit -
              -
            • - -
            • - -
              - eye-close -
              -
              .pear-icon-eye-close -
              -
            • - -
            • - -
              - email -
              -
              .pear-icon-email -
              -
            • - -
            • - -
              - error -
              -
              .pear-icon-error -
              -
            • - -
            • - -
              - favorite -
              -
              .pear-icon-favorite -
              -
            • - -
            • - -
              - file-common -
              -
              .pear-icon-file-common -
              -
            • - -
            • - -
              - file-delete -
              -
              .pear-icon-file-delete -
              -
            • - -
            • - -
              - file-add -
              -
              .pear-icon-file-add -
              -
            • - -
            • - -
              - film -
              -
              .pear-icon-film -
              -
            • - -
            • - -
              - fabulous -
              -
              .pear-icon-fabulous -
              -
            • - -
            • - -
              - file -
              -
              .pear-icon-file -
              -
            • - -
            • - -
              - folder-close -
              -
              .pear-icon-folder-close -
              -
            • - -
            • - -
              - filter -
              -
              .pear-icon-filter -
              -
            • - -
            • - -
              - good -
              -
              .pear-icon-good -
              -
            • - -
            • - -
              - hide -
              -
              .pear-icon-hide -
              -
            • - -
            • - -
              - home -
              -
              .pear-icon-home -
              -
            • - -
            • - -
              - history -
              -
              .pear-icon-history -
              -
            • - -
            • - -
              - file-open -
              -
              .pear-icon-file-open -
              -
            • - -
            • - -
              - forward -
              -
              .pear-icon-forward -
              -
            • - -
            • - -
              - import -
              -
              .pear-icon-import -
              -
            • - -
            • - -
              - image-text -
              -
              .pear-icon-image-text -
              -
            • - -
            • - -
              - keyboard-26 -
              -
              .pear-icon-keyboard-26 -
              -
            • - -
            • - -
              - keyboard-9 -
              -
              .pear-icon-keyboard-9 -
              -
            • - -
            • - -
              - link -
              -
              .pear-icon-link -
              -
            • - -
            • - -
              - layout -
              -
              .pear-icon-layout -
              -
            • - -
            • - -
              - fullscreen-shrink -
              -
              .pear-icon-fullscreen-shrink -
              -
            • - -
            • - -
              - layers -
              -
              .pear-icon-layers -
              -
            • - -
            • - -
              - lock -
              -
              .pear-icon-lock -
              -
            • - -
            • - -
              - fullscreen-expand -
              -
              .pear-icon-fullscreen-expand -
              -
            • - -
            • - -
              - map -
              -
              .pear-icon-map -
              -
            • - -
            • - -
              - meh -
              -
              .pear-icon-meh -
              -
            • - -
            • - -
              - menu -
              -
              .pear-icon-menu -
              -
            • - -
            • - -
              - loading -
              -
              .pear-icon-loading -
              -
            • - -
            • - -
              - help -
              -
              .pear-icon-help -
              -
            • - -
            • - -
              - minus-circle -
              -
              .pear-icon-minus-circle -
              -
            • - -
            • - -
              - modular -
              -
              .pear-icon-modular -
              -
            • - -
            • - -
              - notification -
              -
              .pear-icon-notification -
              -
            • - -
            • - -
              - mic -
              -
              .pear-icon-mic -
              -
            • - -
            • - -
              - more -
              -
              .pear-icon-more -
              -
            • - -
            • - -
              - pad -
              -
              .pear-icon-pad -
              -
            • - -
            • - -
              - operation -
              -
              .pear-icon-operation -
              -
            • - -
            • - -
              - play -
              -
              .pear-icon-play -
              -
            • - -
            • - -
              - print -
              -
              .pear-icon-print -
              -
            • - -
            • - -
              - mobile-phone -
              -
              .pear-icon-mobile-phone -
              -
            • - -
            • - -
              - minus -
              -
              .pear-icon-minus -
              -
            • - -
            • - -
              - navigation -
              -
              .pear-icon-navigation -
              -
            • - -
            • - -
              - pdf -
              -
              .pear-icon-pdf -
              -
            • - -
            • - -
              - prompt -
              -
              .pear-icon-prompt -
              -
            • - -
            • - -
              - move -
              -
              .pear-icon-move -
              -
            • - -
            • - -
              - refresh -
              -
              .pear-icon-refresh -
              -
            • - -
            • - -
              - run-up -
              -
              .pear-icon-run-up -
              -
            • - -
            • - -
              - picture -
              -
              .pear-icon-picture -
              -
            • - -
            • - -
              - run-in -
              -
              .pear-icon-run-in -
              -
            • - -
            • - -
              - pin -
              -
              .pear-icon-pin -
              -
            • - -
            • - -
              - save -
              -
              .pear-icon-save -
              -
            • - -
            • - -
              - search -
              -
              .pear-icon-search -
              -
            • - -
            • - -
              - share -
              -
              .pear-icon-share -
              -
            • - -
            • - -
              - scanning -
              -
              .pear-icon-scanning -
              -
            • - -
            • - -
              - security -
              -
              .pear-icon-security -
              -
            • - -
            • - -
              - sign-out -
              -
              .pear-icon-sign-out -
              -
            • - -
            • - -
              - select -
              -
              .pear-icon-select -
              -
            • - -
            • - -
              - stop -
              -
              .pear-icon-stop -
              -
            • - -
            • - -
              - success -
              -
              .pear-icon-success -
              -
            • - -
            • - -
              - smile -
              -
              .pear-icon-smile -
              -
            • - -
            • - -
              - switch -
              -
              .pear-icon-switch -
              -
            • - -
            • - -
              - setting -
              -
              .pear-icon-setting -
              -
            • - -
            • - -
              - survey -
              -
              .pear-icon-survey -
              -
            • - -
            • - -
              - task -
              -
              .pear-icon-task -
              -
            • - -
            • - -
              - skip -
              -
              .pear-icon-skip -
              -
            • - -
            • - -
              - text -
              -
              .pear-icon-text -
              -
            • - -
            • - -
              - time -
              -
              .pear-icon-time -
              -
            • - -
            • - -
              - telephone-out -
              -
              .pear-icon-telephone-out -
              -
            • - -
            • - -
              - toggle-left -
              -
              .pear-icon-toggle-left -
              -
            • - -
            • - -
              - toggle-right -
              -
              .pear-icon-toggle-right -
              -
            • - -
            • - -
              - telephone -
              -
              .pear-icon-telephone -
              -
            • - -
            • - -
              - top -
              -
              .pear-icon-top -
              -
            • - -
            • - -
              - unlock -
              -
              .pear-icon-unlock -
              -
            • - -
            • - -
              - user -
              -
              .pear-icon-user -
              -
            • - -
            • - -
              - upload -
              -
              .pear-icon-upload -
              -
            • - -
            • - -
              - work -
              -
              .pear-icon-work -
              -
            • - -
            • - -
              - training -
              -
              .pear-icon-training -
              -
            • - -
            • - -
              - warning -
              -
              .pear-icon-warning -
              -
            • - -
            • - -
              - zoom-in -
              -
              .pear-icon-zoom-in -
              -
            • - -
            • - -
              - zoom-out -
              -
              .pear-icon-zoom-out -
              -
            • - -
            • - -
              - add-bold -
              -
              .pear-icon-add-bold -
              -
            • - -
            • - -
              - arrow-left-bold -
              -
              .pear-icon-arrow-left-bold -
              -
            • - -
            • - -
              - arrow-up-bold -
              -
              .pear-icon-arrow-up-bold -
              -
            • - -
            • - -
              - close-bold -
              -
              .pear-icon-close-bold -
              -
            • - -
            • - -
              - arrow-down-bold -
              -
              .pear-icon-arrow-down-bold -
              -
            • - -
            • - -
              - minus-bold -
              -
              .pear-icon-minus-bold -
              -
            • - -
            • - -
              - arrow-right-bold -
              -
              .pear-icon-arrow-right-bold -
              -
            • - -
            • - -
              - select-bold -
              -
              .pear-icon-select-bold -
              -
            • - -
            • - -
              - column-3 -
              -
              .pear-icon-3column -
              -
            • - -
            • - -
              - column-4 -
              -
              .pear-icon-column-4 -
              -
            • - -
            • - -
              - add -
              -
              .pear-icon-add -
              -
            • - -
            • - -
              - add-circle -
              -
              .pear-icon-add-circle -
              -
            • - -
            • - -
              - adjust -
              -
              .pear-icon-adjust -
              -
            • - -
            • - -
              - arrow-up-circle -
              -
              .pear-icon-arrow-up-circle -
              -
            • - -
            • - -
              - arrow-right-circle -
              -
              .pear-icon-arrow-right-circle -
              -
            • - -
            • - -
              - arrow-down -
              -
              .pear-icon-arrow-down -
              -
            • - -
            • - -
              - ashbin -
              -
              .pear-icon-ashbin -
              -
            • - -
            • - -
              - arrow-right -
              -
              .pear-icon-arrow-right -
              -
            • - -
            • - -
              - browse -
              -
              .pear-icon-browse -
              -
            • - -
            • - -
              - bottom -
              -
              .pear-icon-bottom -
              -
            • - -
            • - -
              - back -
              -
              .pear-icon-back -
              -
            • - -
            • - -
              - bad -
              -
              .pear-icon-bad -
              -
            • - -
            • - -
              - arrow-double-left -
              -
              .pear-icon-arrow-double-left -
              -
            • - -
            • - -
              - arrow-left-circle -
              -
              .pear-icon-arrow-left-circle -
              -
            • - -
            • - -
              - arrow-double-right -
              -
              .pear-icon-arrow-double-right -
              -
            • - -
            • - -
              - caps-lock -
              -
              .pear-icon-caps-lock -
              -
            • - -
            • - -
              - camera -
              -
              .pear-icon-camera -
              -
            • - -
            • - -
              - chart-bar -
              -
              .pear-icon-chart-bar -
              -
            • - -
            • - -
              - attachment -
              -
              .pear-icon-attachment -
              -
            • - -
            • - -
              - code -
              -
              .pear-icon-code -
              -
            • - -
            • - -
              - close -
              -
              .pear-icon-close -
              -
            • - -
            • - -
              - check-item -
              -
              .pear-icon-check-item -
              -
            • - -
            • - -
              - calendar -
              -
              .pear-icon-calendar -
              -
            • - -
            • - -
              - comment -
              -
              .pear-icon-comment -
              -
            • - -
            • - -
              - column-vertical -
              -
              .pear-icon-column-vertical -
              -
            • - -
            • - -
              - column-horizontal -
              -
              .pear-icon-column-horizontal -
              -
            • - -
            • - -
              - complete -
              -
              .pear-icon-complete -
              -
            • - -
            • - -
              - chart-pie -
              -
              .pear-icon-chart-pie -
              -
            • - -
            • - -
              - cry -
              -
              .pear-icon-cry -
              -
            • - -
            • - -
              - customer-service -
              -
              .pear-icon-customer-service -
              -
            • - -
            • - -
              - delete -
              -
              .pear-icon-delete -
              -
            • - -
            • - -
              - direction-down -
              -
              .pear-icon-direction-down -
              -
            • - -
            • - -
              - copy -
              -
              .pear-icon-copy -
              -
            • - -
            • - -
              - cut -
              -
              .pear-icon-cut -
              -
            • - -
            • - -
              - data-view -
              -
              .pear-icon-data-view -
              -
            • - -
            • - -
              - direction-down-circle -
              -
              .pear-icon-direction-down-circle -
              -
            • - -
            • - -
              - direction-right -
              -
              .pear-icon-direction-right -
              -
            • - -
            • - -
              - direction-up -
              -
              .pear-icon-direction-up -
              -
            • - -
            • - -
              - discount -
              -
              .pear-icon-discount -
              -
            • - -
            • - -
              - direction-left -
              -
              .pear-icon-direction-left -
              -
            • - -
            - -
            -
            - - -
            - -
            -
            - - - \ No newline at end of file diff --git a/view/document/iconPicker.html b/view/document/iconPicker.html deleted file mode 100644 index ed72b62..0000000 --- a/view/document/iconPicker.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - Document - - - -
            -
            -
            -
            开发环境
            -
            - IconPicker 提供图标选择功能 -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            -								 并
            -								
            -								 并
            -								
            -							
            -
            -
            -
            -
            -
            -
            -
            - 默认图标 -
            -
            -
            -
            -
            - -
            -
            -
            -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								layui.use(['iconPicker'], function() {
            -								    var iconPicker = layui.iconPicker;
            -								
            -								    iconPicker.render({
            -								        elem: '#iconPicker',
            -								        type: 'fontClass',
            -								        search: true,
            -								        page: true,
            -								        limit: 16,
            -								        click: function(data) {
            -								           console.log(data);
            -								        },
            -								        success: function(d) {
            -								            console.log(d);
            -								        }
            -								    });
            -									
            -								});
            -							
            -
            -
            -
            -
            -
            -
            -
            默认选中
            -
            -
            -
            -
            - -
            -
            -
            -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								layui.use(['iconPicker'], function() {
            -								    var iconPicker = layui.iconPicker;
            -								
            -								    iconPicker.render({
            -								        elem: '#iconPicker2',
            -								        type: 'fontClass',
            -								        search: true,
            -								        page: true,
            -								        limit: 16,
            -								        click: function(data) {
            -								           console.log(data);
            -								        },
            -								        success: function(d) {
            -								            console.log(d);
            -								        }
            -								    });
            -									
            -								});
            -							
            -
            -
            -
            -
            -
            -
            -
            不分页
            -
            -
            -
            -
            - -
            -
            -
            -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								layui.use(['iconPicker'], function() {
            -								    var iconPicker = layui.iconPicker;
            -								
            -								    iconPicker.render({
            -								        elem: '#iconPicker',
            -								        type: 'fontClass',
            -								        search: true,
            -								        page: false,
            -								        limit: 16,
            -								        click: function(data) {
            -								           console.log(data);
            -								        },
            -								        success: function(d) {
            -								            console.log(d);
            -								        }
            -								    });
            -									
            -								});
            -							
            -
            -
            -
            -
            -
            - - - - - \ No newline at end of file diff --git a/view/document/loading.html b/view/document/loading.html deleted file mode 100644 index 9140e9d..0000000 --- a/view/document/loading.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - 加载组件 - - - - -
            -
            加载组件
            -
            -
            - loading.Load(1,message); -
            -
            - loading.Load(2,message); -
            -
            - loading.Load(3,message); -
            -
            - loading.Load(4,message); -
            -
            - loading.Load(5,message); -
            -
            - loading.remove(time); -
            -
            -
            - - - - - -
            -
            - -
            -
            加载组件
            -
            - - - - - - - - -
            - -
            -
            - -
            - -
            - - - - - - diff --git a/view/document/menu.html b/view/document/menu.html deleted file mode 100644 index 7f9a4ec..0000000 --- a/view/document/menu.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - 数据菜单 - - - -
            -
            -
            -
            开发环境
            -
            - Menu 数据菜单对普通菜单的深度封装 -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            -								 并
            -								
            -								 并
            -								
            -							
            -
            -
            -
            -
            -
            -
            -
            实例
            -
            - -
            -
            -
            -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            -								var sideMenu = menu.render({
            -								    elem: 'sideMenu',
            -								    async: true,
            -								    theme: "light-theme",
            -								    height: '300px',
            -								    control: false, 
            -								    defaultMenu: 0,
            -								    accordion: true,
            -								    url: "../../admin/data/menu.json",
            -								    parseData: false,
            -								    done: function() {
            -								        layer.msg("加载完成")
            -								    }
            -								});
            -								
            -								sideMenu.click(function(dom, data) {
            -								    
            -									layer.msg("菜单点击 : " + JSON.stringify(data));
            -								})
            -						
            -
            -
            -
            -
            -
            - - - - - diff --git a/view/document/notice.html b/view/document/notice.html deleted file mode 100644 index 8b30118..0000000 --- a/view/document/notice.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - 通知组件 - - - -
            -
            -
            -
            -
            开发环境
            -
            - Notice 用于 消息通知 场景 -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -									
            -									 或
            -									
            -									 并
            -									
            -									 并
            -									
            -								
            -
            -
            -
            -
            -
            -
            -
            消息提醒
            -
            -
            - notice.success("成功消息") -
            -
            - notice.error("危险消息") -
            -
            - notice.warning("警告消息") -
            -
            - notice.info("通用消息") -
            -
            -
            - - - - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -									layui.use(['notice', 'jquery', 'layer', 'code'], function() {
            -									    var notice = layui.notice;
            -										                         
            -									    notice.success("成功消息")
            -									    notice.error("危险消息")
            -									    notice.warning("警告消息")
            -									    notice.info("通用消息")
            -									})
            -								
            -
            -
            -
            -
            -
            -
            -
            - 消息移除 -
            -
            - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -									layui.use(['notice', 'jquery', 'layer', 'code'], function() {
            -									    var notice = layui.notice;
            -										                         
            -									    notice.clear();
            -									})
            -								
            -
            -
            -
            -
            -
            -
            - - - - - - diff --git a/view/document/popover.html b/view/document/popover.html deleted file mode 100644 index 5f27eac..0000000 --- a/view/document/popover.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - 汽泡组件 - - - -
            -
            -
            -
            -
            开发环境
            -
            - popover 用于 汽泡显示 场景 -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -									
            -									 并
            -									
            -									 并
            -									
            -								
            -
            -
            -
            -
            -
            -
            -
            汽泡控制
            -
            - - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -									layui.use(['popover', 'jquery', 'layer', 'code'], function() {
            -									   var popover = layui.popover;
            -    popover.show('#el1');
            -    popover.hide('#el1'); //或 $('#el1').webuiPopover('hide');
            -
            -
            -									})
            -								
            -
            -
            -
            -
            -
            -
            -
            - 不同方式 -
            -
            - - - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -									layui.use(['toast', 'jquery', 'layer', 'code'], function() {
            -									    var popover = layui.popover;
            -    popover.create('#el1',{title:' hello popover-manual',content:'这里显示内容',trigger:'manual',placement:'auto',
            -        animation:'pop',
            -        closeable:true,
            -        delay: {
            -            //show and hide delay time of the popover, works only when trigger is 'hover',the value can be number or object
            -            show: null,
            -            hide: 100
            -        },
            -        opacity:0.98,
            -        type:'html',//content type, values:'html','iframe','async'
            -    });
            -
            -									})
            -								
            -
            -
            -
            -
            -
            -
            -
            - 隐藏 -
            -
            - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -									layui.use(['popover', 'jquery', 'layer', 'code'], function() {
            -									    var popover = layui.popover;
            -									    popover.hideAll();
            -									})
            -								
            -
            -
            -
            -
            -
            -
            - - - - - - diff --git a/view/document/popup.html b/view/document/popup.html deleted file mode 100644 index 8204653..0000000 --- a/view/document/popup.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - 封装弹窗 - - - -
            -
            -
            -
            开发环境
            -
            - Popup 基于 Layer 的 二次封装, 提供简洁高效的 API 调用 -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            -								 并
            -								
            -								 并
            -								
            -							
            -
            -
            -
            -
            -
            -
            -
            提示消息
            -
            - - - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								layui.use(['popup'], function() {
            -								    var popup = layui.popup;
            -								  
            -								    popup.success("成功消息")
            -								    popup.failure("失败消息")
            -								    popup.warning("警告消息")
            -								})
            -							
            -
            -
            -
            -
            -
            -
            -
            回调函数
            -
            - - - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								layui.use(['popup'], function() {
            -								    var popup = layui.popup;
            -								  
            -								    popup.success("成功消息",callback)
            -								    popup.failure("失败消息",callback)
            -								    popup.warning("警告消息",callback)
            -								})
            -							
            -
            -
            -
            -
            -
            - - - - - diff --git a/view/document/select.html b/view/document/select.html deleted file mode 100644 index 8effad4..0000000 --- a/view/document/select.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - 多选组件 - - - -
            -
            -
            -
            - 开发环境 -
            -
            - Select 应用于 多选 场景 -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            -								 并
            -								
            -								 并
            -								
            -							
            -
            -
            -
            -
            -
            -
            -
            - 默认主题 -
            -
            - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -      								
            -      							
            -
            -
            -
            -
            -
            -
            -
            - 绿色主题 -
            -
            - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            -							
            -
            -
            -
            -
            -
            -
            -
            - 通用主题 -
            -
            - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            -							
            -
            -
            -
            -
            -
            -
            -
            - 警告主题 -
            -
            - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            -							
            -
            -
            -
            -
            -
            -
            -
            - 危险主题 -
            -
            - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            -							
            -
            -
            -
            -
            -
            - - - - - - diff --git a/view/document/step.html b/view/document/step.html deleted file mode 100644 index da55064..0000000 --- a/view/document/step.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - 分布表单 - - - -
            -
            -
            -
            开发环境
            -
            Step 步骤表单
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            -								 并
            -								
            -								 并
            -								
            -							
            -
            -
            -
            -
            -
            -
            -
            -
            - -
            -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -		                        layui.use(['form', 'step','element'], function() {
            -		                            var $ = layui.$,
            -		                            form = layui.form,
            -		                            step = layui.step;
            -		                            
            -		                            step.render({
            -		                                elem: '#stepForm',
            -		                                filter: 'stepForm',
            -		                                width: '100%',
            -		                                stepWidth: '600px',
            -		                                height: '500px',
            -		                                stepItems: [{
            -		                                    title: '填写'
            -		                                }, {
            -		                                    title: '确认'
            -		                                }, {
            -		                                    title: '完成'
            -		                                }]
            -		                            });
            -		                         
            -		                            form.on('submit(formStep)', function(data) {
            -		                                step.next('#stepForm');
            -		                                return false;
            -		                            });
            -		                         
            -		                            form.on('submit(formStep2)', function(data) {
            -		                                step.next('#stepForm');
            -		                                return false;
            -		                            });
            -		                         
            -		                            $('.pre').click(function() {
            -		                                step.pre('#stepForm');
            -		                                return false;
            -		                            });
            -		                         
            -		                            $('.next').click(function() {
            -		                                step.next('#stepForm');
            -		                                return false;
            -		                            });
            -		                        })
            -							
            -
            -
            -
            -
            -
            - - - - - diff --git a/view/document/tab.html b/view/document/tab.html deleted file mode 100644 index adee0e3..0000000 --- a/view/document/tab.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - 多选项卡 - - - -
            -
            -
            -
            开发环境
            -
            - Tab.js 是一个多视图组件,你可在任何地方内嵌它,并执行常用操作,Admin 正式使用该组件进行路由切换 -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -							    
            -							    并
            -							    
            -							    并
            -							    
            -							
            -
            -
            -
            -
            -
            -
            -
            - 常用操作 -
            -
            - - - -
            -
            -
            -
            -
            -
            - 基本使用 -
            -
            - -
            -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            -								tab.render({
            -								    elem: 'contents',
            -								    roll: false,
            -								    tool: false,
            -								    width: '100%',
            -								    height: '480px',
            -								    index: 0,
            -								    tabMax: 30,
            -								    closeEvent: function(id) {
            -										
            -								        // do something
            -								    },
            -								    data: [{
            -								        id: "1",
            -								        title: "首页",
            -								        url: "http://www.baidu.com",
            -								        close: false
            -								    },{
            -								        id: "2",
            -								        title: "百度一下",
            -								        url: "http://www.baidu.com",
            -								        close: false
            -								    }]
            -								});
            -								
            -								
            -						
            -
            -
            -
            -
            -
            - - - - - - diff --git a/view/document/tabContent.html b/view/document/tabContent.html deleted file mode 100644 index d01129b..0000000 --- a/view/document/tabContent.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - 多选项卡内容 - - - -
            -
            -
            - - -
            -
            - - - - - diff --git a/view/document/table.html b/view/document/table.html deleted file mode 100644 index 187cf78..0000000 --- a/view/document/table.html +++ /dev/null @@ -1,412 +0,0 @@ - - - - - - 数据表格 - - - - - -
            -
            -
            -
            -
            - -
            - -
            -
            -
            - -
            - -
            -
            -
            - -
            - -
            -
            -
            - -
            - -
            -
            -
            - -
            - -
            -
            -
            - - - -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            - - - - - - - - - - - - - -
            -
            -
            -

            上侧弹层内容...

            -
            -
            - - - - - - - diff --git a/view/document/tag.html b/view/document/tag.html deleted file mode 100644 index f2a5628..0000000 --- a/view/document/tag.html +++ /dev/null @@ -1,265 +0,0 @@ - - - - - 标签组件 - - - - - - -
            -
            -
            -
            开发环境
            -
            - Tag 标签组件 -
            -
            -
            - -
            -
            -
            -

            显示代码

            -
            -
            -								
            -								 并
            -								
            -								 并
            -								
            -							
            -
            -
            -
            -
            -
            -
            -
            主题风格
            -
            -
            - - - - -
            -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -							
            - - - - -
            -
            -
            -
            -
            -
            -
            -
            -
            动态操作
            -
            -
            - - - - -
            -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								tag.add('demo', {text: '新选项',id: 12})
            -								 
            -								tag.delete('demo', '44');
            -							
            -
            -
            -
            -
            -
            -
            -
            圆角风格
            -
            -
            - - - - - -
            -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            - - - - - -
            -
            -
            -
            -
            -
            -
            -
            -
            删除功能
            -
            -
            - - - - - -
            -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            - - - - -
            - - tag.on('delete(demo)', function(data) { - console.log('删除'); - console.log(this); - console.log(data.index); - console.log(data.elem); - console.log(data.othis); - }); -
            -
            -
            -
            -
            -
            -
            -
            新建功能
            -
            -
            - - - - -
            -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -							
            - - - - -
            - - tag.on('add(demo)', function(data) { - console.log('新建'); - console.log(this); - console.log(data.index); - console.log(data.elem); - }); -
            -
            -
            -
            -
            -
            - - - - - diff --git a/view/document/tinymce.html b/view/document/tinymce.html deleted file mode 100644 index 86bf479..0000000 --- a/view/document/tinymce.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - 文本编辑 - - - -
            -
            -
            -
            - 开发环境 -
            -
            - Tinymce 文本编辑器 -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            -								 并
            -								
            -								 并
            -								
            -							
            -
            -
            -
            -
            -
            -
            -
            富文本编辑器
            -
            - -
            - -
            -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								layui.use(['tinymce'], function() {
            -								    var tinymce = layui.tinymce
            -								
            -								    var edit = tinymce.render({
            -								        elem: "#edit",
            -								        height: 400
            -								    });
            -									
            -								    edit.getContent()
            -								});
            -							
            -
            -
            -
            -
            -
            - - - - - diff --git a/view/document/toast.html b/view/document/toast.html deleted file mode 100644 index cbbd33e..0000000 --- a/view/document/toast.html +++ /dev/null @@ -1,291 +0,0 @@ - - - - - - - 通知组件 - - - -
            -
            -
            -
            -
            开发环境
            -
            - toast 用于 消息通知 场景 -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -									
            -									 或
            -									
            -									 并
            -									
            -									 并
            -									
            -								
            -
            -
            -
            -
            -
            -
            -
            消息提醒
            -
            -
            - toast.success({title:"成功消息",message:"消息描述"}) -
            -
            - toast.error({title:"危险消息",message:"消息描述"}) -
            -
            - toast.warning({title:"警告消息",message:"消息描述"}) -
            -
            - toast.info({title:"通知消息",message:"消息描述"}) -
            -
            -
            - - - - - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -									layui.use(['toast', 'jquery', 'layer', 'code'], function() {
            -									    var toast = layui.toast;
            -										                         
            -									    toast.success({title: 'Caution',message: 'You forgot important data',position: 'topRight'});
            -									    
            -										toast.info({title: 'Caution',message: 'You forgot important data',position: 'topRight'});
            -									    
            -										toast.warning({title: 'Caution',message: 'You forgot important data',position: 'topRight'});
            -									    
            -										toast.error({title: 'Caution',message: 'You forgot important data',position: 'topRight'});
            -									    
            -										toast.question({title: 'Caution',message: 'You forgot important data',position: 'topRight'});
            -									})
            -								
            -
            -
            -
            -
            -
            -
            -
            - 不同位置 -
            -
            - - - - - - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -									layui.use(['toast', 'jquery', 'layer', 'code'], function() {
            -									    var toast = layui.toast;
            -										                         
            -									    $(".toast-top-left-btn").click(function(){
            -									        toast.success({title: 'Caution',message: 'You forgot important data',position: 'topLeft'});
            -									    })
            -									    $(".toast-top-center-btn").click(function(){
            -									        toast.success({title: 'Caution',message: 'You forgot important data',position: 'topCenter'});
            -									    })
            -									    $(".toast-top-right-btn").click(function(){
            -									        toast.success({title: 'Caution',message: 'You forgot important data',position: 'topRight'});
            -									    })
            -									    $(".toast-bottom-left-btn").click(function(){
            -									        toast.success({title: 'Caution',message: 'You forgot important data',position: 'bottomLeft'});
            -									    })
            -									    $(".toast-bottom-center-btn").click(function(){
            -									        toast.success({title: 'Caution',message: 'You forgot important data',position: 'bottomCenter'});
            -									    })
            -									    $(".toast-bottom-right-btn").click(function(){
            -									        toast.success({title: 'Caution',message: 'You forgot important data',position: 'bottomRight'});
            -									    })
            -									})
            -								
            -
            -
            -
            -
            -
            -
            -
            - 消息移除 -
            -
            - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -									layui.use(['toast', 'jquery', 'layer', 'code'], function() {
            -									    var toast = layui.toast;
            -										                         
            -									    toast.destroy();
            -									})
            -								
            -
            -
            -
            -
            -
            -
            - - - - - - diff --git a/view/document/topBar.html b/view/document/topBar.html deleted file mode 100644 index d57de7d..0000000 --- a/view/document/topBar.html +++ /dev/null @@ -1,279 +0,0 @@ - - - - - 回到顶部 - - - - - - - -
            -
            - -
            -
            动态
            -
            -
            -
            -
            -
            -

            七彩枫叶 在 Pear Admin 专区 回答问题

            - 几秒前 -
            -
            -
            -
            -
            -

            简 在 Pear Admin 专区 进行了 提问

            - 2天前 -
            -
            -
            -
            -
            -

            恒宇少年 将 Pear Admin 更新至 2.3.0 版本

            - 7天前 -
            -
            -
            -
            -
            -

            如花 在 Pear Admin 社区 发布了 建议

            - 7天前 -
            -
            -
            -
            -
            -

            就眠仪式 在 Pear Admin 社区 发布了 建议

            - 8天前 -
            -
            -
            -
            -
            -

            贤心 在 Pear Admin 专区 进行了 提问

            - 8天前 -
            -
            -
            -
            -
            -

            七彩枫叶 在 Pear Admin 专区 回答问题

            - 几秒前 -
            -
            -
            -
            -
            -

            简 在 Pear Admin 专区 进行了 提问

            - 2天前 -
            -
            -
            -
            -
            -

            恒宇少年 将 Pear Admin 更新至 2.3.0 版本

            - 7天前 -
            -
            -
            -
            -
            -

            如花 在 Pear Admin 社区 发布了 建议

            - 7天前 -
            -
            -
            -
            -
            -

            就眠仪式 在 Pear Admin 社区 发布了 建议

            - 8天前 -
            -
            -
            -
            -
            -

            贤心 在 Pear Admin 专区 进行了 提问

            - 8天前 -
            -
            -
            -
            -
            -

            七彩枫叶 在 Pear Admin 专区 回答问题

            - 几秒前 -
            -
            -
            -
            -
            -

            简 在 Pear Admin 专区 进行了 提问

            - 2天前 -
            -
            -
            -
            -
            -

            恒宇少年 将 Pear Admin 更新至 2.3.0 版本

            - 7天前 -
            -
            -
            -
            -
            -

            如花 在 Pear Admin 社区 发布了 建议

            - 7天前 -
            -
            -
            -
            -
            -

            就眠仪式 在 Pear Admin 社区 发布了 建议

            - 8天前 -
            -
            -
            -
            -
            -

            贤心 在 Pear Admin 专区 进行了 提问

            - 8天前 -
            -
            -
            -
            -
            -

            七彩枫叶 在 Pear Admin 专区 回答问题

            - 几秒前 -
            -
            -
            -
            -
            -

            简 在 Pear Admin 专区 进行了 提问

            - 2天前 -
            -
            -
            -
            -
            -

            恒宇少年 将 Pear Admin 更新至 2.3.0 版本

            - 7天前 -
            -
            -
            -
            -
            -

            如花 在 Pear Admin 社区 发布了 建议

            - 7天前 -
            -
            -
            -
            -
            -

            就眠仪式 在 Pear Admin 社区 发布了 建议

            - 8天前 -
            -
            -
            -
            -
            -

            次等水货 在 Pear Admin 专区 进行了 提问

            - 8天前 -
            -
            -
            -
            -
            -

            七彩枫叶 在 Pear Admin 专区 回答问题

            - 几秒前 -
            -
            -
            -
            -
            -

            简 在 Pear Admin 专区 进行了 提问

            - 2天前 -
            -
            -
            -
            -
            -

            恒宇少年 将 Pear Admin 更新至 2.3.0 版本

            - 7天前 -
            -
            -
            -
            -
            -

            如花 在 Pear Admin 社区 发布了 建议

            - 7天前 -
            -
            -
            -
            -
            -

            就眠仪式 在 Pear Admin 社区 发布了 建议

            - 8天前 -
            -
            -
            -
            -
            -

            微笑刺客 在 Pear Admin 专区 进行了 提问

            - 8天前 -
            -
            -
            -
            -
            -
            - -
            -
            - - - - - - diff --git a/view/document/treetable.html b/view/document/treetable.html deleted file mode 100644 index edc0d4d..0000000 --- a/view/document/treetable.html +++ /dev/null @@ -1,235 +0,0 @@ - - - - - 树形表格 - - - -
            -
            -
            -
            - -
            - -
            - - -
            -
            -
            -
            - -
            -
            -
            -
            -
            - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/view/document/watermark.html b/view/document/watermark.html deleted file mode 100644 index 5d67a7d..0000000 --- a/view/document/watermark.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - 水印组件 - - - -
            -
            -
            -
            开发环境
            -
            - watermark 用于水印叠加 -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								
            -								 并
            -								
            -								 并
            -								
            -							
            -
            -
            -
            -
            -
            -
            -
            水印创建
            -
            - - - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								layui.use(['watermark'], function() {
            -								    var watermark = layui.watermark;
            -
            -    var mark_node=new watermark({
            -        content: "单行水印"
            -    });
            -
            -    new watermark({
            -        content: "多行水印1
            多行水印2", - height:40 - }); - - new watermark({ - content: "指定容器上", - appendTo:'#water_div', - }); - - }) -
            -
            -
            -
            -
            -
            -
            -
            指定容器水印
            -
            -
            - -
            -
            -
            -
            -
            -
            -
            移除水印
            -
            - -
            -
            -
            -
            -
            -
            -

            显示代码

            -
            -
            -								layui.use(['watermark'], function() {
            -								    var popup = layui.popup;
            -                                    mark_node.destroy();
            -								})
            -							
            -
            -
            -
            -
            -
            - - - - - diff --git a/view/echarts/column.html b/view/echarts/column.html deleted file mode 100644 index 4175261..0000000 --- a/view/echarts/column.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - 条状图表 - - - - -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            - - - - - - - - diff --git a/view/echarts/line.html b/view/echarts/line.html deleted file mode 100644 index f8080e9..0000000 --- a/view/echarts/line.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - 折线图表 - - - - -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            - - - - - - - - diff --git a/view/echarts/script/column1.js b/view/echarts/script/column1.js deleted file mode 100644 index db5e817..0000000 --- a/view/echarts/script/column1.js +++ /dev/null @@ -1,137 +0,0 @@ -layui.use(['echarts'], function() { - let echarts = layui.echarts; - var column1 = echarts.init(document.getElementById('column1'),null, { - width: 600, - height: 400 - }); -option = { - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'shadow' , - color: '#fff', - fontSize: '26' - } - }, - legend: { - top:'5%', - right:'10%', - data: ['猕猴桃', '香蕉'], - fontSize:12, - color:'#808080', - icon:'rect' - }, - grid: { - top:60, - left:50, - bottom:60, - right:60 - }, - xAxis: [{ - type: 'category', - axisTick:{ - show:false - }, - axisLine:{ - show:false - }, - axisLabel:{ - color:'#4D4D4D', - fontSize:14, - margin:21, - fontWeight:'bold' - }, - data: ['第一周', '第二周', '第三周', '第四周'], - - }], - yAxis: [{ - name:'单位:万', - nameTextStyle:{ - color:'#808080', - fontSize:12, - padding:[0, 0, 0, -5] - }, - max: function(value) { - if(value.max<5){ - return 5 - }else{ - return value.max - } - }, - type: 'value', - axisLine:{ - show:false - }, - axisLabel:{ - color:'#808080', - fontSize:12, - margin:5 - }, - splitLine:{ - show:false - }, - axisTick:{ - show:false - } - }], - series: [ - { - name: '猕猴桃', - type: 'bar', - label:{ - show:true, - position:'top', - fontSize:14, - color:'#3DC3F0', - fontWeight:'bold' - }, - barMaxWidth:60, - color: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [{ - offset: 0, color: '#3DC3F0' // 0% 处的颜色 - }, { - offset: 1, color: '#CCF2FF' // 100% 处的颜色 - }] - }, - data: [60, 110, 180, 100] - }, - { - name: '香蕉', - type: 'bar', - label:{ - show:true, - position:'top', - fontSize:14, - color:'#3D8BF0', - fontWeight:'bold' - }, - barMaxWidth:60, - color: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [{ - offset: 0, color: '#3D8BF0' // 0% 处的颜色 - }, { - offset: 1, color: '#CCE2FF' // 100% 处的颜色 - }] - }, - data: [90, 130, 170, 130] - } - ] -}; - - column1.setOption(option); - - window.onresize = function() { - column1.resize(); - } - -}) diff --git a/view/echarts/script/column2.js b/view/echarts/script/column2.js deleted file mode 100644 index 6393cce..0000000 --- a/view/echarts/script/column2.js +++ /dev/null @@ -1,73 +0,0 @@ -layui.use(['echarts'], function() { - let echarts = layui.echarts; - var column2 = echarts.init(document.getElementById('column2'),null, { - width: 600, - height: 400 - }); - - var data = [1000, 600, 500, 300]; - option = { - backgroundColor: '#ffffff', - title: { - text: 'ETC交易成功率', - left: 'center', - top: 2, - fontSize: 20 - }, - color: ['#fed46b','#2194ff', ], - tooltip: { - trigger: 'axis', - axisPointer: { // 坐标轴指示器,坐标轴触发有效 - type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' - } - }, - grid: { - left: '3%', - right: '4%', - bottom: '10%', - containLabel: true - }, - legend: { - left: 'center', - bottom: '2%', - data: ['去年', '今年', ] - }, - xAxis: [{ - type: 'category', - data: ['09-22', '09-22', '09-22', '09-22', '09-22', '09-22', '09-22'], - axisTick: { - alignWithLabel: true - } - }], - yAxis: [{ - type: 'value' - }], - barMaxWidth: '30', - label:{ - show:true, - position:'top', - formatter:function(params){ - return params.value+'%' - } - }, - series: [ - - { - name: '去年', - type: 'bar', - data: [90, 52, 90, 80, 90, 70, 90] - }, - { - name: '今年', - type: 'bar', - data: [10, 52, 90, 70, 90, 70, 90] - }, - ] - }; - column2.setOption(option); - - window.onresize = function() { - column2.resize(); - } - -}) diff --git a/view/echarts/script/column3.js b/view/echarts/script/column3.js deleted file mode 100644 index 897e495..0000000 --- a/view/echarts/script/column3.js +++ /dev/null @@ -1,120 +0,0 @@ -layui.use(['echarts'], function() { - let echarts = layui.echarts; - var column3 = echarts.init(document.getElementById('column3'),null, { - width: 600, - height: 400 - }); - - const colorList = ["#9E87FF", '#73DDFF', '#fe9a8b', '#F56948', '#9E87FF'] - -option = { - backgroundColor: '#fff', - tooltip: { - trigger: "axis", - padding: [8, 10], - backgroundColor: 'rgba(255,255,255,0.5)', - axisPointer: { - type: "shadow", - color: "#fff" - } - }, - legend: { - data: ['新开会员', '激活会员', '关闭会员'], - align: 'left', - right: 0, - - color: "#333", - fontSize: 14, - fontWeight: 200, - - itemWidth: 14, - itemHeight: 14, - itemGap: 35 - }, - grid: { - left: '0', - right: '0', - bottom: '8%', - top: '15%', - containLabel: true - }, - label: { - show: true, - position: 'top', - color: '#333', - fontSize: 14, - fontWeight: 700 - }, - xAxis: [{ - type: 'category', - offset: 10, - data: ['团队1', '团队2', '团队3', '团队4'], - axisLine: { - show: false - }, - axisTick: { - show: false - }, - axisLabel: { - show: true, - color: "#333", - fontSize: 16, - fontWeight: 200 - - }, - }], - yAxis: [{ - type: 'value', - axisLabel: { - show: false - }, - axisTick: { - show: false - }, - axisLine: { - show: false - }, - splitLine: { - show: false - } - }], - series: [{ - name: '新开会员', - type: 'bar', - data: [20, 34, 18, 14, 16], - barWidth: 22, //柱子宽度 - barGap: 1, //柱子之间间距 - itemStyle: { - color: '#0071c8', - opacity: 1, - } - }, { - name: '激活会员', - type: 'bar', - data: [10, 24, 5, 24, 16], - barWidth: 22, - barGap: 1, - itemStyle: { - color: '#fdc508', - opacity: 1, - } - }, { - name: '关闭会员', - type: 'bar', - data: [7, 24, 18, 20, 6], - barWidth: 22, - barGap: 1, - itemStyle: { - color: '#dfeafc', - opacity: 1, - } - }] -}; - - column3.setOption(option); - - window.onresize = function() { - column3.resize(); - } - -}) diff --git a/view/echarts/script/column4.js b/view/echarts/script/column4.js deleted file mode 100644 index 6cd871f..0000000 --- a/view/echarts/script/column4.js +++ /dev/null @@ -1,84 +0,0 @@ -layui.use(['echarts'], function() { - let echarts = layui.echarts; - var column4 = echarts.init(document.getElementById('column4'),null, { - width: 600, - height: 400 - }); - option = { - backgroundColor:'#fff', - title:{ - text:"描边柱状图", - top:10, - left:15, - color:"#35598d", - fontSize:16, - fontWeight:'normal' - }, - tooltip: { - trigger: 'axis', - formatter:'{b}:{c}', - }, - grid: { - left: '5%', - right: '6%', - bottom: '3%', - top: '20%', - containLabel: true - }, - xAxis :{ - type : 'category', - data : ['策略1','策略2','策略3','策略4','策略5','策略6','策略7','策略8','策略9'], - axisLabel:{ //坐标轴字体颜色 - color: '#9eaaba' - }, - axisLine:{ - lineStyle:{ - color:"#e5e5e5" - } - }, - axisTick:{ //y轴刻度线 - show:false - }, - splitLine:{ //网格 - show: false, - } - }, - yAxis :{ - type : 'value', - axisLabel:{ //坐标轴字体颜色 - color: '#9eaaba' - }, - axisLine:{ - show:false, - }, - axisTick:{ //y轴刻度线 - show:false - }, - splitLine:{ //网格 - show: true, - lineStyle:{ - color:'#dadde4', - type:"dashed" //坐标网线类型 - } - } - }, - series:{ - name:'', - type:'bar', - barWidth : '40%', //柱子宽度 - itemStyle:{ //柱子颜色 - borderWidth: 2, - borderColor: 'rgb(79, 116, 223)', - color:'rgba(79, 116, 223, .3)', - }, - data:[320, 332, 301, 334, 390, 330, 320, 230, 156] - } - }; - - column4.setOption(option); - - window.onresize = function() { - column4.resize(); - } - -}) diff --git a/view/echarts/script/line1.js b/view/echarts/script/line1.js deleted file mode 100644 index 1a0ce7b..0000000 --- a/view/echarts/script/line1.js +++ /dev/null @@ -1,236 +0,0 @@ -layui.use(['echarts'], function() { - let echarts = layui.echarts; - var line2 = echarts.init(document.getElementById('line2'),null, { - width: 600, - height: 400 - }); - - const colorList = ["#9E87FF", '#73DDFF', '#fe9a8b', '#F56948', '#9E87FF'] - option = { - backgroundColor: '#fff', - title: { - text: '全国6月销售统计', - fontSize: 12, - fontWeight: 400, - left: 'center', - top: '5%' - }, - legend: { - icon: 'circle', - top: '5%', - right: '5%', - itemWidth: 6, - itemGap: 20, - color: '#556677' - }, - tooltip: { - trigger: 'axis', - axisPointer: { - label: { - show: true, - backgroundColor: '#fff', - color: '#556677', - borderColor: 'rgba(0,0,0,0)', - shadowColor: 'rgba(0,0,0,0)', - shadowOffsetY: 0 - }, - lineStyle: { - width: 0 - } - }, - backgroundColor: '#fff', - color: '#5c6c7c', - padding: [10, 10], - extraCssText: 'box-shadow: 1px 0 2px 0 rgba(163,163,163,0.5)' - }, - grid: { - top: '15%' - }, - xAxis: [{ - type: 'category', - data: ['北京', '上海', '广州', '深圳', '香港', '澳门', '台湾'], - axisLine: { - lineStyle: { - color: '#DCE2E8' - } - }, - axisTick: { - show: false - }, - axisLabel: { - interval: 0, - color: '#556677', - // 默认x轴字体大小 - fontSize: 12, - // margin:文字到x轴的距离 - margin: 15 - }, - axisPointer: { - label: { - // padding: [11, 5, 7], - padding: [0, 0, 10, 0], - - // 这里的margin和axisLabel的margin要一致! - margin: 15, - // 移入时的字体大小 - fontSize: 12, - backgroundColor: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [{ - offset: 0, - color: '#fff' // 0% 处的颜色 - }, { - // offset: 0.9, - offset: 0.86, - - color: '#fff' // 0% 处的颜色 - }, { - offset: 0.86, - color: '#33c0cd' // 0% 处的颜色 - }, { - offset: 1, - color: '#33c0cd' // 100% 处的颜色 - }], - global: false // 缺省为 false - } - } - }, - boundaryGap: false - }], - yAxis: [{ - type: 'value', - axisTick: { - show: false - }, - axisLine: { - show: true, - lineStyle: { - color: '#DCE2E8' - } - }, - axisLabel: { - color: '#556677', - }, - splitLine: { - show: false - } - }, { - type: 'value', - position: 'right', - axisTick: { - show: false - }, - axisLabel: { - color: '#556677', - formatter: '{value}' - }, - axisLine: { - show: true, - lineStyle: { - color: '#DCE2E8' - } - }, - splitLine: { - show: false - } - }], - series: [{ - name: 'Adidas', - type: 'line', - data: [10, 10, 30, 12, 15, 3, 7], - symbolSize: 1, - symbol: 'circle', - smooth: true, - yAxisIndex: 0, - showSymbol: true, - lineStyle: { - width: 5, - color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{ - offset: 0, - color: '#9effff' - }, - { - offset: 1, - color: '#9E87FF' - } - ]), - shadowColor: 'rgba(158,135,255, 0.3)', - shadowBlur: 10, - shadowOffsetY: 20 - }, - itemStyle: { - color: colorList[0], - borderColor: colorList[0] - } - }, { - name: 'Nike', - type: 'line', - data: [5, 12, 11, 14, 25, 16, 10], - symbolSize: 1, - symbol: 'circle', - smooth: true, - yAxisIndex: 0, - showSymbol: true, - lineStyle: { - width: 5, - color: new echarts.graphic.LinearGradient(1, 1, 0, 0, [{ - offset: 0, - color: '#73DD39' - }, - { - offset: 1, - color: '#73DDFF' - } - ]), - shadowColor: 'rgba(115,221,255, 0.3)', - shadowBlur: 10, - shadowOffsetY: 20 - }, - itemStyle: { - color: colorList[1], - borderColor: colorList[1] - } - }, - { - name: '老北京布鞋', - type: 'line', - data: [150, 120, 170, 140, 500, 160, 110], - symbolSize: 1, - yAxisIndex: 1, - symbol: 'circle', - smooth: true, - showSymbol: true, - lineStyle: { - width: 5, - color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{ - offset: 0, - color: '#fe9a' - }, - { - offset: 1, - color: '#fe9a8b' - } - ]), - shadowColor: 'rgba(254,154,139, 0.3)', - shadowBlur: 10, - shadowOffsetY: 20 - }, - itemStyle: { - color: colorList[2], - borderColor: colorList[2] - } - } - ] - }; - - line2.setOption(option); - - window.onresize = function() { - line2.resize(); - } - -}) diff --git a/view/echarts/script/line2.js b/view/echarts/script/line2.js deleted file mode 100644 index c0bb531..0000000 --- a/view/echarts/script/line2.js +++ /dev/null @@ -1,148 +0,0 @@ -layui.use(['echarts'], function() { - let echarts = layui.echarts; - var line1 = echarts.init(document.getElementById('line1'),null, { - width: 600, - height: 400 - }); - - const colorList = ["#9E87FF", '#73DDFF', '#fe9a8b', '#F56948', '#9E87FF'] - option = { - - backgroundColor: '#fff', - tooltip: { - show: false - }, - grid: { - top: '10%', - bottom: '6%', - left: '6%', - right: '6%', - containLabel: true - }, - xAxis: [{ - type: 'category', - boundaryGap: false, - axisLine: { - show: false - }, - axisTick: { - show: false - }, - axisLabel: { - margin: 10, - fontSize: 14, - color: 'rgba(#999)' - }, - splitLine: { - show: true, - lineStyle: { - color: '#939ab6', - opacity: .15 - } - }, - data: ['10:00', '10:10', '10:10', '10:30', '10:40', '10:50'] - },], - yAxis: [{ - type: 'value', - offset: 15, - max: 100, - min: 0, - axisTick: { - show: false - }, - axisLine: { - show: false - }, - axisLabel: { - margin: 10, - fontSize: 14, - color: '#999' - - }, - splitLine: { - show: false - } - - }], - series: [{ - name: '2', - type: 'line', - z: 3, - showSymbol: false, - smoothMonotone: 'x', - lineStyle: { - width: 3, - color: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [{ - offset: 0, color: 'rgba(59,102,246)' // 0% 处的颜色 - }, { - offset: 1, color: 'rgba(118,237,252)' // 100% 处的颜色 - }] - }, - shadowBlur: 4, - shadowColor: 'rgba(69,126,247,.2)', - shadowOffsetY: 4 - }, - areaStyle: { - color: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [{ - offset: 0, color: 'rgba(227,233,250,.9)' // 0% 处的颜色 - }, { - offset: 1, color: 'rgba(248,251,252,.3)' // 100% 处的颜色 - }] - } - }, - smooth: true, - data: [20, 56, 17, 40, 68, 42] - },{ - name: '1', - type: 'line', - showSymbol: false, - smoothMonotone: 'x', - - lineStyle: { - width: 3, - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ - offset: 0, - color: 'rgba(255,84,108)' - }, { - offset: 1, - color: 'rgba(252,140,118)' - }], false), - shadowBlur: 4, - shadowColor: 'rgba(253,121,128,.2)', - shadowOffsetY: 4 - }, - areaStyle: { - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ - offset: 0, - color: 'rgba(255,84,108,.15)' - }, { - offset: 1, - color: 'rgba(252,140,118,0)' - }], false), - }, - smooth: true, - data: [20, 71, 8, 50, 57, 32] - } - ] - - }; - - line1.setOption(option); - - window.onresize = function() { - line1.resize(); - } - -}) diff --git a/view/echarts/script/line3.js b/view/echarts/script/line3.js deleted file mode 100644 index 12bfbc7..0000000 --- a/view/echarts/script/line3.js +++ /dev/null @@ -1,102 +0,0 @@ -layui.use(['echarts'], function() { - let echarts = layui.echarts; - - var line3 = echarts.init(document.getElementById('line3'),null, { - width: 600, - height: 400 - }); - - const colorList = ["#9E87FF", '#73DDFF', '#fe9a8b', '#F56948', '#9E87FF'] - - option = { - backgroundColor: '#fff', - title: { - text: "告警数", - left: "18px", - top: "0", - color: "#999", - fontSize: 12, - fontWeight: '400' - }, - color: ['#73A0FA', '#73DEB3', '#FFB761'], - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'cross', - crossStyle: { - color: '#999' - }, - lineStyle: { - type: 'dashed' - } - } - }, - grid: { - left: '25', - right: '25', - bottom: '24', - top: '75', - containLabel: true - }, - legend: { - data: ['上周', '本周'], - orient: 'horizontal', - icon: "rect", - show: true, - left: 20, - top: 25, - }, - xAxis: { - type: 'category', - data: ['爱立信端局', '中兴端局', '爱立信HSS', '中兴HSS', '华为HSS', '华为智能网', '中兴VIMS'], - splitLine: { - show: false - }, - axisTick: { - show: false - }, - axisLine: { - show: false - }, - }, - yAxis: { - type: 'value', - axisLabel: { - color: '#999', - fontSize: 12 - }, - splitLine: { - show: true, - lineStyle: { - color: '#F3F4F4' - } - }, - axisTick: { - show: false - }, - axisLine: { - show: false - }, - }, - series: [{ - name: '上周', - type: 'line', - smooth: true, - data: [1800, 1000, 2000, 1000, 500, 100, 1200] - }, - { - name: '本周', - type: 'line', - smooth: true, - data: [1700, 999, 1100, 899, 199, 99, 1000] - } - ] - }; - - line3.setOption(option); - - window.onresize = function() { - line3.resize(); - } - -}) diff --git a/view/echarts/script/line4.js b/view/echarts/script/line4.js deleted file mode 100644 index 19e9f79..0000000 --- a/view/echarts/script/line4.js +++ /dev/null @@ -1,167 +0,0 @@ -layui.use(['echarts'], function() { - let echarts = layui.echarts; - - var line4 = echarts.init(document.getElementById('line4'),null, { - width: 600, - height: 400 - }); - - const colorList = ["#9E87FF", '#73DDFF', '#fe9a8b', '#F56948', '#9E87FF'] - option = { - title: { - text: '用电量' - }, - tooltip: { - trigger: 'axis' - }, - legend: { - data: ['2018', '2019'] - }, - grid: { - left: '3%', - right: '4%', - bottom: '3%', - containLabel: true - }, - toolbox: { - feature: { - saveAsImage: {} - } - }, - xAxis: { - type: 'category', - boundaryGap: false,//坐标轴两边留白 - data: ['12201', '12202', '12203','12204','12301','12302','12303','12304','12401', '12402', '12403','12404'], - axisLabel: { //坐标轴刻度标签的相关设置。 - interval: 0,//设置为 1,表示『隔一个标签显示一个标签』 - // margin:15, - - color: '#1B253A', - fontStyle: 'normal', - fontFamily: '微软雅黑', - fontSize: 12, - - formatter:function(params) { - var newParamsName = ""; - var paramsNameNumber = params.length; - var provideNumber = 4; //一行显示几个字 - var rowNumber = Math.ceil(paramsNameNumber / provideNumber); - if (paramsNameNumber > provideNumber) { - for (var p = 0; p < rowNumber; p++) { - var tempStr = ""; - var start = p * provideNumber; - var end = start + provideNumber; - if (p == rowNumber - 1) { - tempStr = params.substring(start, paramsNameNumber); - } else { - tempStr = params.substring(start, end) + "\n"; - } - newParamsName += tempStr; - } - - } else { - newParamsName = params; - } - return newParamsName - }, - //rotate:50, - }, - axisTick:{//坐标轴刻度相关设置。 - show: false, - }, - axisLine:{//坐标轴轴线相关设置 - lineStyle:{ - color:'#E5E9ED', - // opacity:0.2 - } - }, - splitLine: { //坐标轴在 grid 区域中的分隔线。 - show: true, - lineStyle: { - color: '#E5E9ED', - // opacity:0.1 - } - } - }, - yAxis: [ - { - type: 'value', - splitNumber: 5, - axisLabel: { - - color: '#a8aab0', - fontStyle: 'normal', - fontFamily: '微软雅黑', - fontSize: 12 - - }, - axisLine:{ - show: false - }, - axisTick:{ - show: false - }, - splitLine: { - show: true, - lineStyle: { - color: '#E5E9ED', - // opacity:0.1 - } - } - - } - ], - series: [ - { - name: '2018', - type: 'line', - itemStyle: { - color:'#3A84FF', - lineStyle: { - color: "#3A84FF", - width:1 - }, - areaStyle: { - color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{ - offset: 0, - color: 'rgba(58,132,255,0)' - }, { - offset: 1, - color: 'rgba(58,132,255,0.35)' - }]), - } - }, - data: [ 1, 2, 3, 3, 5, 6, 5, 3, 6, 5, 5, 4] - }, - { - name: '2019', - type: 'line', - itemStyle: { - color:'rgba(255,80,124,1)', - lineStyle: { - color: "rgba(255,80,124,1)", - width:1 - }, - areaStyle: { - color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{ - offset: 0, - color: 'rgba(255,80,124,0)' - }, { - offset: 1, - color: 'rgba(255,80,124,0.35)' - }]), - } - }, - data: [9, 5,7,8,6,7,8,7,7,6,8,6] - } - ] - }; - - - line4.setOption(option); - - window.onresize = function() { - line4.resize(); - } - -}) diff --git a/view/error/403.html b/view/error/403.html deleted file mode 100644 index 36d1e15..0000000 --- a/view/error/403.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - -
            - -
            -

            403

            -

            抱歉,你无权访问该页面

            - -
            -
            - - - - \ No newline at end of file diff --git a/view/error/404.html b/view/error/404.html deleted file mode 100644 index b13115a..0000000 --- a/view/error/404.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - -
            - -
            -

            404

            -

            抱歉,你访问的页面不存在或仍在开发中

            - -
            -
            - - - - \ No newline at end of file diff --git a/view/error/500.html b/view/error/500.html deleted file mode 100644 index 505d41b..0000000 --- a/view/error/500.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - -
            - -
            -

            500

            -

            抱歉,服务器出错了

            - -
            -
            - - - - \ No newline at end of file diff --git a/view/result/error.html b/view/result/error.html index d7abae6..a226525 100644 --- a/view/result/error.html +++ b/view/result/error.html @@ -1,45 +1,44 @@ - - - 失败 - - - - -
            -
            -
            -
            - -
            -

            提交失败

            -

            - 请核对并修改以下信息后,再重新提交。如果仅是简单操作,使用 Message 全局提示反馈即可。 - 本文字区域可以展示简单的补充说明,如果有类似展示 - “单据”的需求,下面这个灰色区域可以呈现比较复杂的内容。 -

            -
            - -
            -
            - -     - -
            + + + + 失败 + + + + +
            +
            +
            +
            + +
            +

            提交失败

            +

            + 请核对并修改以下信息后,再重新提交。如果仅是简单操作,使用 Message 全局提示反馈即可。 + 本文字区域可以展示简单的补充说明,如果有类似展示 + “单据”的需求,下面这个灰色区域可以呈现比较复杂的内容。 +

            +
            + +
            +
            + +     +
            - - - - - +
            + + + \ No newline at end of file diff --git a/view/result/success.html b/view/result/success.html index 5a2c7d4..2f2a3a5 100644 --- a/view/result/success.html +++ b/view/result/success.html @@ -1,37 +1,45 @@ - - - 成功 - - - - -
            -
            -
            -
            - -
            -

            提交成功

            -

            - 提交结果页用于反馈一系列操作任务的处理结果, - 如果仅是简单操作,使用 Message 全局提示反馈即可。 - 本文字区域可以展示简单的补充说明,如果有类似展示 - “单据”的需求,下面这个灰色区域可以呈现比较复杂的内容。 -

            -
            - -
            -
            - -     - -
            + + + + 成功 + + + + +
            +
            +
            +
            + +
            +

            提交成功

            +

            + 提交结果页用于反馈一系列操作任务的处理结果, + 如果仅是简单操作,使用 Message 全局提示反馈即可。 + 本文字区域可以展示简单的补充说明,如果有类似展示 + “单据”的需求,下面这个灰色区域可以呈现比较复杂的内容。 +

            +
            + +
            +
            + +     +
            - - - - +
            + + + \ No newline at end of file diff --git a/view/system/deptment.html b/view/system/deptment.html deleted file mode 100644 index 3114717..0000000 --- a/view/system/deptment.html +++ /dev/null @@ -1,289 +0,0 @@ - - - - - 部门管理 - - - - -
            -
            -
            -
            -
            - -
            - -
            -
            -
            - -
            - -
            -
            -
            - -
            - -
            -
            -
            - - -
            -
            -
            -
            -
            -
            -
            -
            -
            -
            -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              - - - - - - - - - \ No newline at end of file diff --git a/view/system/dict.html b/view/system/dict.html deleted file mode 100644 index 3a87150..0000000 --- a/view/system/dict.html +++ /dev/null @@ -1,341 +0,0 @@ - - - - - 数据字典 - - - -
              -
              -
              -
              -
              -
              - -
              - -
              - - -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              - - - - - - - - - - - - - - - - -
              -
              -
              -
              -
              - - - - - - - - - - - - - - - - - diff --git a/view/system/log.html b/view/system/log.html deleted file mode 100644 index d4fde96..0000000 --- a/view/system/log.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - 行为日志 - - - -
              -
              -
              -
                -
              • 登录日志
              • -
              • 操作日志
              • -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              - - - - - - - - - - \ No newline at end of file diff --git a/view/system/operate.html b/view/system/operate.html deleted file mode 100644 index fec1c87..0000000 --- a/view/system/operate.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - 表单页面 - - - -
              -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - -
              - - -
              -
              -
              -
              -
              -
              - - -
              -
              -
              - - - - - diff --git a/view/system/operate/add.html b/view/system/operate/add.html deleted file mode 100644 index 82ecdf3..0000000 --- a/view/system/operate/add.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - 新增页面 - - - -
              -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - -
              - - -
              -
              -
              -
              -
              -
              - - -
              -
              -
              - - - - - - diff --git a/view/system/operate/edit.html b/view/system/operate/edit.html deleted file mode 100644 index 82dbce8..0000000 --- a/view/system/operate/edit.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - 修改页面 - - - -
              -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - -
              - - -
              -
              -
              -
              -
              -
              - - -
              -
              -
              - - - - - - diff --git a/view/system/operate/profile.html b/view/system/operate/profile.html deleted file mode 100644 index 6041005..0000000 --- a/view/system/operate/profile.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - 头像上传 - - - -
              -
              -
              - -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              - - - - - -
              -
              建议:图片的尺寸宽高比为1:1,大小在5m以内。
              -
              -
              - - - - - - \ No newline at end of file diff --git a/view/system/person.html b/view/system/person.html deleted file mode 100644 index 16ad62a..0000000 --- a/view/system/person.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - 个人资料 - - - - -
              -
              -
              -
              -
              - -

              就眠仪式

              -

              China , 中国

              -
              -
              -
              - 今日事 ,今日毕 -
              -
              - -
              -
              - 归档 -
              -
              -
                -
              • 优化代码格式2020-06-04 11:28
              • -
              • 新增消息组件2020-06-01 04:23
              • -
              • 移动端兼容2020-05-22 21:38
              • -
              • 系统布局优化2020-05-15 14:26
              • -
              • 兼容多系统菜单模式2020-05-13 16:32
              • -
              • 兼容多标签页切换2019-12-9 14:58
              • -
              • 扩展下拉组件2019-12-7 9:06
              • -
              • 扩展卡片样式2019-12-1 10:26
              • -
              -
              -
              -
              -
              -
              -
              - 我的文章 -
              -
              -
              -
              -
              -
              -
              - -
              -
              -
              为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?
              -
              - “Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~ -
              -
              2020-06-12        评论 5 点赞 12 转发 4
              -
              -
              -
              -
              - -
              -
              -
              为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?
              -
              - “Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~ -
              -
              2020-06-12        评论 5 点赞 12 转发 4
              -
              -
              -
              -
              - -
              -
              -
              为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?
              -
              - “Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~ -
              -
              2020-06-12        评论 5 点赞 12 转发 4
              -
              -
              -
              -
              - -
              -
              -
              为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?
              -
              - “Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~ -
              -
              2020-06-12        评论 5 点赞 12 转发 4
              -
              -
              -
              -
              - -
              -
              -
              为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?
              -
              - “Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~ -
              -
              2020-06-12        评论 5 点赞 12 转发 4
              -
              -
              -
              -
              - -
              -
              -
              为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?
              -
              - “Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~ -
              -
              2020-06-12        评论 5 点赞 12 转发 4
              -
              -
              -
              -
              - -
              -
              -
              为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?
              -
              - “Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~ -
              -
              2020-06-12        评论 5 点赞 12 转发 4
              -
              -
              -
              -
              -
              -
              -
              -
              -
              - - - - - diff --git a/view/system/power.html b/view/system/power.html deleted file mode 100644 index cb0a594..0000000 --- a/view/system/power.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - 权限管理 - - - -
              -
              -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - - -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/view/system/profile.html b/view/system/profile.html deleted file mode 100644 index 6041005..0000000 --- a/view/system/profile.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - 头像上传 - - - -
              -
              -
              - -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              - - - - - -
              -
              建议:图片的尺寸宽高比为1:1,大小在5m以内。
              -
              -
              - - - - - - \ No newline at end of file diff --git a/view/system/role.html b/view/system/role.html deleted file mode 100644 index 7c93e19..0000000 --- a/view/system/role.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - 角色管理 - - - -
              -
              -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - - -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              - - - - - - - - - - - - diff --git a/view/system/space.html b/view/system/space.html deleted file mode 100644 index 8ab19e3..0000000 --- a/view/system/space.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - 空白页面 - - - - -
              -
              -
              -

              Space Page

              -
              -
              - - - - diff --git a/view/system/theme.html b/view/system/theme.html deleted file mode 100644 index 2b38992..0000000 --- a/view/system/theme.html +++ /dev/null @@ -1,300 +0,0 @@ - - - - - 主题预览 - - - -
              -
              按钮
              -
              - - -
              -
              -
              -
              输入框
              -
              -
              -
              - -
              -
              -
              -
              -
              -
              复选框
              -
              -
              - - - - - - -
              -
              -
              -
              -
              开关
              -
              -
              -    -    -    -    -
              -
              -
              -
              -
              单选框
              -
              -
              - - - -
              -
              -
              -
              -
              下拉
              -
              - -
              -
              -
              -
              -
              -
              -
              - - - - - - - - - - - - - -
              -
              选项卡
              -
              -
              -
                -
              • 网站设置
              • -
              • 用户管理
              • -
              • 权限分配
              • -
              • 商品管理
              • -
              • 订单管理
              • -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              进度条
              -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              分页
              -
              -
              -
              -
              -
              -
              辅助元素
              -
              -
              快乐的时候不敢尽兴,频繁警戒自己保持清醒.
              -
              路上没有灯火的时候,就点亮自己的头颅.
              -
              -
              -
              -
              -
              -
                -
              • - -
                -

                8月18日

                -

                - layui 2.0 的一切准备工作似乎都已到位。发布之弦,一触即发。 -

                -
                -
              • -
              • - -
                -

                8月16日

                -

                杜甫的思想核心是儒家的仁政思想,他有“致君尧舜上,再使风俗淳”的宏伟抱负。个人最爱的名篇有:

                -
                -
              • -
              • - -
                -

                8月15日

                -

                - 中国人民抗日战争胜利72周年 -

                -
                -
              • -
              -
              -
              -
              -
              日期选择
              -
              - -
              -
              - - - - - - - - diff --git a/view/system/user.html b/view/system/user.html deleted file mode 100644 index 7db350d..0000000 --- a/view/system/user.html +++ /dev/null @@ -1,298 +0,0 @@ - - - - - 用户管理 - - - -
              -
              -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - -
              - -
              -
              -
              - - -
              -
              -
              -
              -
              -
              -
              -
              -
              -
              - - - - - - - - - - - - - - - - - - -- Gitee From eead3c8f0f351b0d1fd298c414c20068aa39990f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Thu, 22 Jun 2023 01:10:49 +0800 Subject: [PATCH 02/67] update --- admin/css/admin.css | 17 +-- component/pear/module/admin.js | 203 +++++++++++++++++++++------------ config/pear.config.yml | 11 +- index.html | 13 ++- 4 files changed, 150 insertions(+), 94 deletions(-) diff --git a/admin/css/admin.css b/admin/css/admin.css index 61b3093..2a6c070 100644 --- a/admin/css/admin.css +++ b/admin/css/admin.css @@ -63,6 +63,10 @@ body, display: none; } +.pear-admin .layui-logo .title { + font-size: 20px; +} + .pear-admin .layui-layout-right .layui-nav-child { border: 1px solid whitesmoke; border-radius: 4px; @@ -88,13 +92,12 @@ body, } .pear-admin .layui-logo { - box-sizing: border-box; - background-color: #28333E; - border-bottom: 1px solid rgba(0, 0, 0, .12); width: 230px; - height: 60px; - line-height: 60px; + height: 59px; + line-height: 59px; position: relative; + background-color: #28333E; + border-bottom: 1px solid rgba(0, 0, 0, .12); } .pear-admin .layui-logo img { @@ -102,10 +105,10 @@ body, height: 34px; } -.pear-admin .layui-logo .text { +.pear-admin .layui-logo .title { font-size: 21px; font-weight: 550; - color: var(--global-primary-color); + color: #5FB878; position: relative; top: 5px; margin-left: 5px; diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index 7e55066..40ba8a6 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -4,8 +4,10 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm 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, @@ -85,60 +87,38 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm */ this.render = (options) => { if (options !== undefined) { - this.renderFramework(options); + applyConfig(options); } else { this.configurationProvider().then((result) => { - this.renderFramework(result); + applyConfig(result); }) } } - /** - * @since Pear Admin 4.0 - */ - this.renderFramework = (options) => { - - this.renderInformation(options.information); - - this.renderMenu(options); - - this.renderContent(options); - - // - - - // TODO 机制 - $(".loader-main").fadeOut(360, () => { - $(".loader-main").remove(); - }); + this.messageRender = function (option) { + var option = { + elem: '.message', + url: option.header.message, + height: '250px' + }; + msgInstance = message.render(option); } - /** - * @since Pear Admin 4.0 - * - * 初始化 Web information 网站信息 - */ - this.renderInformation = (informationOptions) => { - const $logo = $(".pear-admin .layui-logo .logo"); - if(informationOptions && informationOptions.logo) { - $logo.attr("src", informationOptions.logo); - } - const $text = $(".pear-admin .layui-logo .text"); - if(informationOptions && informationOptions.name) { - $text.html(informationOptions.name); - } + this.logoRender = function (param) { + $(".layui-logo .logo").attr("src", param.logo.image); + $(".layui-logo .title").html(param.logo.title); } - this.renderMenu = (param) => { - - const isControl = filterStorage("control", param, param.menu.control); - + this.menuRender = function (param) { sideMenu = pearMenu.render({ - elem: 'menu', + elem: 'sideMenu', async: param.menu.async !== undefined ? param.menu.async : true, + theme: "dark-theme", + height: '100%', method: param.menu.method, - control: isControl == true ? 'control' : false, + 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, @@ -154,7 +134,11 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm }); } - this.renderContent = function (param) { + this.bodyRender = function (param) { + + body.on("click", ".refresh", function () { + refresh(); + }) if (isMuiltTab(param) === "true" || isMuiltTab(param) === true) { bodyTab = pearTab.render({ @@ -209,7 +193,6 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm compatible(); }) } else { - bodyFrame = pearFrame.render({ elem: 'content', title: '首页', @@ -229,25 +212,11 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm } } - 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); - } - } - - this.messageRender = function (option) { - var option = { - elem: '.message', - url: option.header.message, - height: '250px' - }; - msgInstance = message.render(option); + this.keepLoad = function (param) { + compatible() + setTimeout(function () { + $(".loader-main").fadeOut(200); + }, param.other.keepLoad) } this.themeRender = function (option) { @@ -388,6 +357,105 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm 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() { @@ -927,19 +995,6 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm } } - /** - * @since Pear Admin 4.0 - */ - function filterStorage (optionName, options, optionValue) { - if (options.theme.allowCustom) { - const storageValue = localStorage.getItem(optionName); - if(optionValue != undefined && optionValue != null) { - return storageValue; - } - } - return optionValue; - } - function isControl(option) { if (option.theme.allowCustom) { if (localStorage.getItem("control") != null) { diff --git a/config/pear.config.yml b/config/pear.config.yml index 1576697..4b7cd70 100644 --- a/config/pear.config.yml +++ b/config/pear.config.yml @@ -1,9 +1,9 @@ ## 网站配置 -information: +logo: ## 网站名称 - name: "Pear Admin" + title: "Pear Admin" ## 网站图标 - logo: "admin/images/logo.png" + image: "admin/images/logo.png" ## 菜单配置 menu: ## 菜单数据来源 @@ -54,7 +54,7 @@ theme: ## 主题色配置列表 colors: - id: "1" - color: "#16baaa" + color: "#2d8cf0" second: "#ecf5ff" - id: "2" color: "#36b368" @@ -68,9 +68,6 @@ colors: - id: "5" color: "#3963bc" second: "#ecf5ff" -- id: "6" - color: "#009688" - second: "#f0f9eb" ## 其他配置 other: ## 主页动画时长 diff --git a/index.html b/index.html index 61d4053..7ed70e6 100644 --- a/index.html +++ b/index.html @@ -10,8 +10,6 @@ - - @@ -24,7 +22,7 @@ - +
                @@ -58,11 +56,11 @@ - +
              - +
              @@ -94,7 +92,7 @@ var admin = layui.admin; var popup = layui.popup; var darkreader = layui.darkreader; - + admin.setConfigurationPath("config/pear.config.yml"); admin.render(); @@ -111,6 +109,9 @@ resolve(true) }); }) + + // 消息点击回调 + admin.message(function(id, title, context, form) {}); }) -- Gitee From aea728009dd7ddd0f8531f9560a70d572f4d681b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Thu, 22 Jun 2023 02:05:56 +0800 Subject: [PATCH 03/67] update --- component/pear/css/module/dtree/dtree.css | 112 - component/pear/css/module/dtree/dtree.js | 4947 ----------------- .../pear/css/module/dtree/font/dtreefont.css | 229 - .../pear/css/module/dtree/font/dtreefont.eot | Bin 19508 -> 0 bytes .../pear/css/module/dtree/font/dtreefont.svg | 80 - .../pear/css/module/dtree/font/dtreefont.ttf | Bin 19344 -> 0 bytes .../pear/css/module/dtree/font/dtreefont.woff | Bin 19420 -> 0 bytes .../pear/css/module/dtree/font/icons.json | 283 - component/pear/css/pear.css | 2 - component/pear/module/admin.js | 8 +- component/pear/module/echartsTheme.js | 84 +- config/pear.config.yml | 11 +- index.html | 5 +- view/console/console1.html | 849 +-- view/console/console2.html | 45 +- 15 files changed, 517 insertions(+), 6138 deletions(-) delete mode 100644 component/pear/css/module/dtree/dtree.css delete mode 100644 component/pear/css/module/dtree/dtree.js delete mode 100644 component/pear/css/module/dtree/font/dtreefont.css delete mode 100644 component/pear/css/module/dtree/font/dtreefont.eot delete mode 100644 component/pear/css/module/dtree/font/dtreefont.svg delete mode 100644 component/pear/css/module/dtree/font/dtreefont.ttf delete mode 100644 component/pear/css/module/dtree/font/dtreefont.woff delete mode 100644 component/pear/css/module/dtree/font/icons.json diff --git a/component/pear/css/module/dtree/dtree.css b/component/pear/css/module/dtree/dtree.css deleted file mode 100644 index 3e5364d..0000000 --- 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 a05b22a..0000000 --- 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 df7af65..0000000 --- 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 GIT binary patch literal 0 HcmV?d00001 literal 19508 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 - - -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 GIT binary patch literal 0 HcmV?d00001 literal 19344 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 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 fca4788..0000000 --- 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/pear.css b/component/pear/css/pear.css index d50f24f..cd012a4 100644 --- a/component/pear/css/pear.css +++ b/component/pear/css/pear.css @@ -1,8 +1,6 @@ @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/nprogress.css"); @import url("module/message.css"); diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index 40ba8a6..bc24448 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -1,4 +1,4 @@ -layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'menu', 'frame', 'theme', 'convert', 'fullscreen'], +layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'menu', 'frame', 'theme', 'fullscreen'], function (exports) { "use strict"; @@ -7,7 +7,6 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm element = layui.element, yaml = layui.yaml, pearTab = layui.tab, - convert = layui.convert, pearMenu = layui.menu, pearFrame = layui.frame, pearTheme = layui.theme, @@ -96,12 +95,11 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm } this.messageRender = function (option) { - var option = { + msgInstance = message.render({ elem: '.message', url: option.header.message, height: '250px' - }; - msgInstance = message.render(option); + }); } this.logoRender = function (param) { diff --git a/component/pear/module/echartsTheme.js b/component/pear/module/echartsTheme.js index 2cf0bfa..c0c029b 100644 --- a/component/pear/module/echartsTheme.js +++ b/component/pear/module/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/config/pear.config.yml b/config/pear.config.yml index 4b7cd70..ec73717 100644 --- a/config/pear.config.yml +++ b/config/pear.config.yml @@ -54,18 +54,21 @@ theme: ## 主题色配置列表 colors: - id: "1" - color: "#2d8cf0" + color: "#16baaa" second: "#ecf5ff" - id: "2" + color: "#009688" + second: "#ecf5ff" +- id: "3" color: "#36b368" second: "#f0f9eb" -- id: "3" +- id: "4" color: "#f6ad55" second: "#fdf6ec" -- id: "4" +- id: "5" color: "#f56c6c" second: "#fef0f0" -- id: "5" +- id: "6" color: "#3963bc" second: "#ecf5ff" ## 其他配置 diff --git a/index.html b/index.html index 7ed70e6..c0f89f9 100644 --- a/index.html +++ b/index.html @@ -87,11 +87,10 @@ diff --git a/view/console/console1.html b/view/console/console1.html index 47d133a..71e8ff9 100644 --- a/view/console/console1.html +++ b/view/console/console1.html @@ -1,441 +1,512 @@ - - - 控制后台 - - - - - - -
                          -
                          -
                          -
                          -
                          今日访问
                          -
                          -
                          -
                          - 0 -
                          -
                          - - - - - - - - - -
                          + + + + 控制后台 + + + + + + + +
                          +
                          +
                          +
                          +
                          今日访问
                          +
                          +
                          +
                          + 0 +
                          +
                          + + + + + + + + + +
                          -
                          -
                          -
                          提交次数
                          -
                          -
                          -
                          - 0 -
                          -
                          - - - - - - - - - - - - - -
                          +
                          +
                          +
                          +
                          提交次数
                          +
                          +
                          +
                          + 0 +
                          +
                          + + + + + + + + + + + + +
                          -
                          -
                          -
                          下载数量
                          -
                          -
                          -
                          - 0 -
                          -
                          - - - - - - - - - - -
                          +
                          +
                          +
                          +
                          下载数量
                          +
                          +
                          +
                          + 0 +
                          +
                          + + + + + + + + + +
                          -
                          -
                          -
                          流量统计
                          -
                          -
                          -
                          - 0 -
                          -
                          - - - - - - - - - - - -
                          +
                          +
                          +
                          +
                          流量统计
                          +
                          +
                          +
                          + 0 +
                          +
                          + + + + + + + + + + +
                          -
                          -
                          -
                          -
                          -
                          -
                          +
                          +
                          +
                          +
                          +
                          +
                          +
                          -
                          -
                          动态
                          -
                          -
                          -
                          -
                          -
                          -

                          七彩枫叶 在 Pear Admin 专区 回答问题

                          - 几秒前 -
                          -
                          -
                          -
                          -
                          -

                          简 在 Pear Admin 专区 进行了 提问

                          - 2天前 -
                          -
                          -
                          -
                          -
                          -

                          恒宇少年 将 Pear Admin 更新至 2.3.0 - 版本

                          - 7天前 -
                          -
                          -
                          -
                          -
                          -

                          如花 在 Pear Admin 社区 发布了 建议

                          - 7天前 -
                          -
                          -
                          -
                          -
                          -

                          就眠仪式 在 Pear Admin 社区 发布了 建议

                          - 8天前 -
                          -
                          -
                          -
                          -
                          -

                          贤心 在 Pear Admin 专区 进行了 提问

                          - 8天前 -
                          -
                          -
                          -
                          +
                          +
                          +
                          动态
                          +
                          +
                          +
                          +
                          +
                          +

                          七彩枫叶 在 Pear Admin 专区 回答问题 +

                          + 几秒前 +
                          +
                          +
                          +
                          +
                          +

                          简 在 Pear + Admin 专区 进行了 提问 +

                          + 2天前 +
                          +
                          +
                          +
                          +
                          +

                          恒宇少年 将 Pear Admin 更新至 + 2.3.0 + 版本

                          + 7天前 +
                          +
                          +
                          +
                          +
                          +

                          如花 在 Pear Admin 社区 发布了 建议

                          + 7天前 +
                          +
                          +
                          +
                          +
                          +

                          就眠仪式 在 Pear Admin 社区 发布了 建议

                          + 8天前 +
                          +
                          +
                          +
                          +
                          +

                          贤心 在 Pear Admin 专区 进行了 提问 +

                          + 8天前 +
                          +
                          +
                          -
                          -
                          -
                          更 新
                          -
                          -
                            -
                          • 优化代码格式2021-09-06 11:28
                          • -
                          • 新增消息组件2021-09-06 11:28
                          • -
                          • 移动端兼容2021-09-06 11:28
                          • -
                          • 系统布局优化2021-09-06 11:28
                          • -
                          • 兼容多系统菜单模式2021-09-06 11:28
                          • -
                          • 兼容多标签页切换2021-09-06 11:28
                          • -
                          • 扩展下拉组件2021-09-06 11:28
                          • -
                          • 扩展卡片样式2021-09-06 11:28
                          • -
                          -
                          +
                          +
                          +
                          +
                          更 新
                          +
                          +
                            +
                          • 优化代码格式2021-09-06 + 11:28
                          • +
                          • 新增消息组件2021-09-06 + 11:28
                          • +
                          • 移动端兼容2021-09-06 + 11:28
                          • +
                          • 系统布局优化2021-09-06 + 11:28
                          • +
                          • 兼容多系统菜单模式2021-09-06 + 11:28
                          • +
                          • 兼容多标签页切换2021-09-06 + 11:28
                          • +
                          • 扩展下拉组件2021-09-06 + 11:28
                          • +
                          • 扩展卡片样式2021-09-06 + 11:28
                          • +
                          -
                          -
                          - 链接 -
                          -
                          - 官 - 网 -
                          - 下 载 -
                          - 后 端 -
                          +
                          +
                          +
                          + 链接
                          -
                          -
                          - 寄语 -
                          -
                          - 原想将澎湃的爱平平稳稳放置你手心,奈何我徒有一股蛮劲,只顾向你跑去,一个不稳跌的满身脏兮兮。试图爬起的我, - 心想你会不会笑我 " 献爱献的这样笨拙, 怎么不知避开爱里的埋伏 " -
                          +
                          + 官 + 网 +
                          + 下 载 +
                          + 后 端 +
                          +
                          +
                          +
                          + 寄语 +
                          +
                          + 原想将澎湃的爱平平稳稳放置你手心,奈何我徒有一股蛮劲,只顾向你跑去,一个不稳跌的满身脏兮兮。试图爬起的我, + 心想你会不会笑我 " 献爱献的这样笨拙, 怎么不知避开爱里的埋伏 "
                          - + - }); - - - + \ No newline at end of file diff --git a/view/console/console2.html b/view/console/console2.html index c9fa35f..c181f3d 100644 --- a/view/console/console2.html +++ b/view/console/console2.html @@ -207,43 +207,6 @@ table = layui.table, carousel = layui.carousel; - let cols = [ - [{ - type: 'checkbox' - }, - { - title: '角色名', - field: 'roleName', - align: 'center', - width: 100 - }, - { - title: 'Key值', - field: 'roleCode', - align: 'center' - }, - { - title: '描述', - field: 'details', - align: 'center' - }, - { - title: '是否可用', - field: 'enable', - align: 'center', - templet: '#role-enable' - } - ] - ] - - table.render({ - elem: '#role-table', - url: '../../admin/data/role.json', - page: true, - cols: cols, - skin: 'line' - }); - var echartsRecords = echarts.init(document.getElementById('echarts-records'), 'walden'); @@ -480,12 +443,10 @@ }] }; - echartsRecords.setOption(option); - - window.onresize = function () { + setTimeout(() => { + echartsRecords.setOption(option); echartsRecords.resize(); - } - + }, 500); }); -- Gitee From 8d289cd52365dbc92aaba8a9a68dc31ac0b4be09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Thu, 22 Jun 2023 15:41:24 +0800 Subject: [PATCH 04/67] update --- README.md | 139 +- admin/css/login.css | 45 +- admin/data/menu.json | 50 +- component/code/css/style.css | 9 - component/code/index.html | 81 - component/pear/css/module/card.css | 93 - component/pear/css/module/tag.css | 85 - component/pear/module/button.js | 26 +- component/pear/module/card.js | 275 - component/pear/module/context.js | 19 - component/pear/module/{ => core}/admin.js | 16 +- component/pear/module/{ => core}/menu.js | 16 +- .../pear/module/{frame.js => core/page.js} | 12 +- .../pear/module/{tab.js => core/tabPage.js} | 32 +- component/pear/module/design.js | 182 - component/pear/module/dtree.js | 5530 ----------------- .../pear/module/{ => extends}/echarts.js | 0 .../pear/module/{ => extends}/echartsTheme.js | 0 .../pear/module/{ => extends}/nprogress.js | 0 component/pear/module/extends/toast.js | 1225 ++++ component/pear/module/{ => extends}/yaml.js | 0 component/pear/module/fullscreen.js | 2 +- component/pear/module/step.js | 80 - component/pear/module/tag.js | 159 - component/pear/module/toast.js | 754 +-- component/pear/pear.js | 21 +- index.html | 3 +- login.html | 136 +- view/components/toast.html | 146 + view/exception/403.html | 0 view/exception/404.html | 0 view/exception/500.html | 0 32 files changed, 1939 insertions(+), 7197 deletions(-) delete mode 100644 component/code/css/style.css delete mode 100644 component/code/index.html delete mode 100644 component/pear/css/module/card.css delete mode 100644 component/pear/css/module/tag.css delete mode 100644 component/pear/module/card.js delete mode 100644 component/pear/module/context.js rename component/pear/module/{ => core}/admin.js (99%) rename component/pear/module/{ => core}/menu.js (98%) rename component/pear/module/{frame.js => core/page.js} (90%) rename component/pear/module/{tab.js => core/tabPage.js} (96%) delete mode 100644 component/pear/module/design.js delete mode 100644 component/pear/module/dtree.js rename component/pear/module/{ => extends}/echarts.js (100%) rename component/pear/module/{ => extends}/echartsTheme.js (100%) rename component/pear/module/{ => extends}/nprogress.js (100%) create mode 100644 component/pear/module/extends/toast.js rename component/pear/module/{ => extends}/yaml.js (100%) delete mode 100644 component/pear/module/step.js delete mode 100644 component/pear/module/tag.js create mode 100644 view/components/toast.html create mode 100644 view/exception/403.html create mode 100644 view/exception/404.html create mode 100644 view/exception/500.html diff --git a/README.md b/README.md index 2734d82..a07beda 100644 --- a/README.md +++ b/README.md @@ -1,137 +1,4 @@ +### 更新日志 -
                          - -
                          -
                          - -

                          - 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 组件, \ No newline at end of file diff --git a/admin/css/login.css b/admin/css/login.css index f23d728..b461dee 100644 --- a/admin/css/login.css +++ b/admin/css/login.css @@ -9,13 +9,10 @@ width: 100%; height: 40px; line-height: 40px; - background-color: #5FB878; font-size: 14px; } .layui-form-checked[lay-skin=primary] i { - border-color: #5FB878 !important; - background-color: #5FB878 !important; color: #fff !important; } @@ -29,46 +26,14 @@ margin-top: 20px !important; } +.layui-form-item .layui-form-checkbox[lay-skin=primary] { + margin-top: 0px !important; +} + .layui-input { height: 40px !important; line-height: 40px !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; + border-radius: 4px !important; } body { diff --git a/admin/data/menu.json b/admin/data/menu.json index c8691d2..1678e14 100644 --- a/admin/data/menu.json +++ b/admin/data/menu.json @@ -3,7 +3,6 @@ "title": "工作空间", "icon": "layui-icon layui-icon-console", "type": 0, - "href": "", "children": [{ "id": 10, "title": "控制后台", @@ -20,6 +19,21 @@ "href": "view/console/console2.html" }] }, + { + "id": 2, + "title": "扩展组件", + "icon": "layui-icon layui-icon-auz", + "type": 0, + "children": [{ + "id": 21, + "title": "消息通知", + "icon": "layui-icon layui-icon-face-smile", + "type": 1, + "openType": "_iframe", + "href": "view/components/toast.html" + } + ] + }, { "id": "result", "title": "结果页面", @@ -44,9 +58,41 @@ } ] }, + { + "id": "exception", + "title": "异常页面", + "icon": "layui-icon layui-icon-auz", + "type": 0, + "href": "", + "children": [{ + "id": "403", + "title": "403", + "icon": "layui-icon layui-icon-face-smile", + "type": 1, + "openType": "_iframe", + "href": "view/exception/403.html" + }, + { + "id": "404", + "title": "404", + "icon": "layui-icon layui-icon-face-cry", + "type": 1, + "openType": "_iframe", + "href": "view/exception/404.html" + }, + { + "id": "500", + "title": "500", + "icon": "layui-icon layui-icon-face-cry", + "type": 1, + "openType": "_iframe", + "href": "view/exception/500.html" + } + ] + }, { "id": "open", - "title": "更多功能", + "title": "菜单模式", "icon": "layui-icon layui-icon-auz", "type": 0, "href": "", diff --git a/component/code/css/style.css b/component/code/css/style.css deleted file mode 100644 index 5d460a5..0000000 --- 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 ba02488..0000000 --- a/component/code/index.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - layui表单生成器 - - - - -
                          -
                          -
                          - - - - -
                          -
                          -
                          -
                          - view -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          -
                          html
                          -
                          - -
                          -
                          -
                          -
                          code
                          -
                          - -
                          -
                          -
                          -
                          -
                          - - - - - diff --git a/component/pear/css/module/card.css b/component/pear/css/module/card.css deleted file mode 100644 index 39b4ed2..0000000 --- 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/tag.css b/component/pear/css/module/tag.css deleted file mode 100644 index 7c244bc..0000000 --- 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/module/button.js b/component/pear/module/button.js index d77c18d..c0eb62e 100644 --- a/component/pear/module/button.js +++ b/component/pear/module/button.js @@ -16,28 +16,28 @@ layui.define(['jquery'], function(exports) { * */ 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); } /** diff --git a/component/pear/module/card.js b/component/pear/module/card.js deleted file mode 100644 index 76934da..0000000 --- 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/context.js b/component/pear/module/context.js deleted file mode 100644 index a803e02..0000000 --- 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/admin.js b/component/pear/module/core/admin.js similarity index 99% rename from component/pear/module/admin.js rename to component/pear/module/core/admin.js index bc24448..3a2cf80 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/core/admin.js @@ -1,14 +1,14 @@ -layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'menu', 'frame', 'theme', 'fullscreen'], +layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'theme', 'fullscreen'], function (exports) { "use strict"; var $ = layui.jquery, form = layui.form, - element = layui.element, yaml = layui.yaml, - pearTab = layui.tab, - pearMenu = layui.menu, - pearFrame = layui.frame, + page = layui.page, + tabPage = layui.tabPage, + menu = layui.menu, + pearTheme = layui.theme, message = layui.message, fullscreen = layui.fullscreen; @@ -108,7 +108,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm } this.menuRender = function (param) { - sideMenu = pearMenu.render({ + sideMenu = menu.render({ elem: 'sideMenu', async: param.menu.async !== undefined ? param.menu.async : true, theme: "dark-theme", @@ -139,7 +139,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm }) if (isMuiltTab(param) === "true" || isMuiltTab(param) === true) { - bodyTab = pearTab.render({ + bodyTab = tabPage.render({ elem: 'content', roll: true, tool: true, @@ -191,7 +191,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'm compatible(); }) } else { - bodyFrame = pearFrame.render({ + bodyFrame = page.render({ elem: 'content', title: '首页', url: param.tab.index.href, diff --git a/component/pear/module/menu.js b/component/pear/module/core/menu.js similarity index 98% rename from component/pear/module/menu.js rename to component/pear/module/core/menu.js index 88b348a..f4622b0 100644 --- a/component/pear/module/menu.js +++ b/component/pear/module/core/menu.js @@ -5,11 +5,11 @@ 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, @@ -84,10 +84,10 @@ layui.define(['table', 'jquery', 'element'], function (exports) { }); }, 1000) - return new pearMenu(option); + return new menu(option); } - pearMenu.prototype.click = function (clickEvent) { + menu.prototype.click = function (clickEvent) { var _this = this; $("body").on("click", "#" + _this.option.elem + " .site-demo-active", function () { var dom = $(this); @@ -141,14 +141,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" @@ -211,7 +211,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")) { @@ -569,5 +569,5 @@ layui.define(['table', 'jquery', 'element'], function (exports) { }); } - exports(MOD_NAME, new pearMenu()); + exports(MOD_NAME, new menu()); }) diff --git a/component/pear/module/frame.js b/component/pear/module/core/page.js similarity index 90% rename from component/pear/module/frame.js rename to component/pear/module/core/page.js index 0bdc5cd..44ba8fd 100644 --- a/component/pear/module/frame.js +++ b/component/pear/module/core/page.js @@ -4,11 +4,11 @@ layui.define(['jquery', 'element'], function (exports) { var $ = layui.jquery; var element = layui.element; - var frame = function (opt) { + var page = function (opt) { this.option = opt; }; - frame.prototype.render = function (opt) { + page.prototype.render = function (opt) { var option = { url: opt.url, elem: opt.elem, @@ -23,7 +23,7 @@ layui.define(['jquery', 'element'], function (exports) { return new frame(option); } - frame.prototype.changePage = function (url, loading) { + page.prototype.changePage = function (url, loading) { var $frameLoad = $("#" + this.option.elem).find(".pear-frame-loading"); var $frame = $("#" + this.option.elem + " .pear-frame-content"); if(loading) { @@ -47,7 +47,7 @@ layui.define(['jquery', 'element'], function (exports) { }); } - frame.prototype.changePageByElement = function (elem, url, loading) { + page.prototype.changePageByElement = function (elem, url, loading) { var $frameLoad = $("#" + elem).find(".pear-frame-loading"); var $frame = $("#" + elem + " .pear-frame-content"); if(loading) { @@ -71,7 +71,7 @@ layui.define(['jquery', 'element'], function (exports) { }); } - frame.prototype.refresh = function (loading) { + page.prototype.refresh = function (loading) { var $frameLoad = $("#" + this.option.elem).find(".pear-frame-loading"); var $frame = $("#" + this.option.elem).find(".pear-frame-content"); if(loading) { @@ -126,5 +126,5 @@ layui.define(['jquery', 'element'], function (exports) { }); } - exports('frame', new frame()); + exports('page', new page()); }); diff --git a/component/pear/module/tab.js b/component/pear/module/core/tabPage.js similarity index 96% rename from component/pear/module/tab.js rename to component/pear/module/core/tabPage.js index b2d29d3..c74327a 100644 --- a/component/pear/module/tab.js +++ b/component/pear/module/core/tabPage.js @@ -1,11 +1,11 @@ layui.define(['jquery', 'element'], function (exports) { "use strict"; - var MOD_NAME = 'tab', + var MOD_NAME = 'tabPage', $ = layui.jquery, element = layui.element; - var pearTab = function (opt) { + var tabPage = function (opt) { this.option = opt; }; @@ -13,7 +13,7 @@ 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, @@ -121,10 +121,10 @@ layui.define(['jquery', 'element'], function (exports) { }) mousewheelAndTouchmoveHandler(option) - return new pearTab(option); + return new tabPage(option); } - pearTab.prototype.click = function (callback) { + tabPage.prototype.click = function (callback) { var option = this.option; var elem = this.option.elem; element.on('tab(' + this.option.elem + ')', function (data) { @@ -134,7 +134,7 @@ layui.define(['jquery', 'element'], function (exports) { }); } - 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 () { @@ -149,12 +149,12 @@ layui.define(['jquery', 'element'], function (exports) { }, 200); } - pearTab.prototype.clear = function () { + tabPage.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) { + tabPage.prototype.addTab = function (opt) { var title = ''; if (opt.close) { title += '' + opt.title + @@ -178,21 +178,21 @@ layui.define(['jquery', 'element'], function (exports) { var index = 0; // 根据过滤 fliter 标识, 重置选项卡标题 - pearTab.prototype.changeTabTitleById = function (elem, id, title) { + tabPage.prototype.changeTabTitleById = function (elem, id, title) { var currentTab = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title [lay-id='" + id + "'] .title"); currentTab.html(title); } // 根据过滤 filter 标识, 删除指定选项卡 - pearTab.prototype.delTabByElem = function (elem, id, callback) { + tabPage.prototype.delTabByElem = function (elem, id, callback) { var currentTab = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title [lay-id='" + id + "']"); if (currentTab.find("span").is(".able-close")) { tabDelete(elem, id, callback); } } // 根据过滤 filter 标识, 删除其他选项卡 - pearTab.prototype.delOtherTabByElem = function (elem, callback) { + tabPage.prototype.delOtherTabByElem = function (elem, callback) { var currentId = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title .layui-this").attr( "lay-id"); var tabtitle = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title li"); @@ -206,7 +206,7 @@ layui.define(['jquery', 'element'], function (exports) { } // 根据过滤 filter 标识, 删除全部选项卡 - pearTab.prototype.delAllTabByElem = function (elem, callback) { + tabPage.prototype.delAllTabByElem = function (elem, callback) { var currentId = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title .layui-this").attr( "lay-id"); var tabtitle = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title li"); @@ -217,7 +217,7 @@ layui.define(['jquery', 'element'], function (exports) { }) } // 根据过滤 filter 标识, 删除当前选项卡 - pearTab.prototype.delCurrentTabByElem = function (elem, callback) { + tabPage.prototype.delCurrentTabByElem = function (elem, callback) { var currentTab = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title .layui-this"); if (currentTab.find("span").is(".able-close")) { var currentId = currentTab.attr("lay-id"); @@ -230,7 +230,7 @@ layui.define(['jquery', 'element'], function (exports) { * * */ - pearTab.prototype.addTabOnly = function (opt, time) { + tabPage.prototype.addTabOnly = function (opt, time) { var title = `${opt.title}`; @@ -316,7 +316,7 @@ layui.define(['jquery', 'element'], function (exports) { } // 刷 新 指 定 的 选 项 卡 - pearTab.prototype.refresh = function (time) { + tabPage.prototype.refresh = function (time) { var $iframe = $(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-content .layui-show > div"); var $iframeLoad; @@ -628,5 +628,5 @@ layui.define(['jquery', 'element'], function (exports) { }); } - exports(MOD_NAME, new pearTab()); + exports(MOD_NAME, new tabPage()); }) diff --git a/component/pear/module/design.js b/component/pear/module/design.js deleted file mode 100644 index 6bcf7ac..0000000 --- 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/dtree.js b/component/pear/module/dtree.js deleted file mode 100644 index 21fcbab..0000000 --- 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/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 100% rename from component/pear/module/echartsTheme.js rename to component/pear/module/extends/echartsTheme.js 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/extends/toast.js b/component/pear/module/extends/toast.js new file mode 100644 index 0000000..16b7087 --- /dev/null +++ b/component/pear/module/extends/toast.js @@ -0,0 +1,1225 @@ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + define([], factory(root)); + } else if (typeof exports === 'object') { + module.exports = factory(root); + } else if (window.layui && layui.define) { + layui.define(function (exports) { + exports('toast', factory(root)) + }) + } else { + root.iziToast = factory(root); + } +})(typeof global !== 'undefined' ? global : window || this.window || this.global, function (root) { + + 'use strict'; + + var $iziToast = {}, + PLUGIN_NAME = 'iziToast', + BODY = document.querySelector('body'), + ISMOBILE = (/Mobi/.test(navigator.userAgent)) ? true : false, + ISCHROME = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor), + ISFIREFOX = typeof InstallTrigger !== 'undefined', + ACCEPTSTOUCH = 'ontouchstart' in document.documentElement, + POSITIONS = ['bottomRight', 'bottomLeft', 'bottomCenter', 'topRight', 'topLeft', 'topCenter', 'center'], + THEMES = { + info: { + color: 'blue', + icon: 'ico-info' + }, + success: { + color: 'green', + icon: 'ico-success' + }, + warning: { + color: 'orange', + icon: 'ico-warning' + }, + error: { + color: 'red', + icon: 'ico-error' + }, + question: { + color: 'yellow', + icon: 'ico-question' + } + }, + MOBILEWIDTH = 568, + CONFIG = {}; + + $iziToast.children = {}; + + // Default settings + var defaults = { + id: null, + class: '', + title: '', + titleColor: '', + titleSize: '', + titleLineHeight: '', + message: '', + messageColor: '', + messageSize: '', + messageLineHeight: '', + backgroundColor: '', + theme: 'light', // dark + color: '', // blue, red, green, yellow + icon: '', + iconText: '', + iconColor: '', + iconUrl: null, + image: '', + imageWidth: 50, + maxWidth: null, + zindex: null, + layout: 2, + balloon: false, + close: true, + closeOnEscape: false, + closeOnClick: false, + displayMode: 0, + position: 'topCenter', // bottomRight, bottomLeft, topRight, topLeft, topCenter, bottomCenter, center + target: '', + targetFirst: true, + timeout: 3000, // 默认3秒 + rtl: false, + animateInside: false, // 动画效果 + drag: true, + pauseOnHover: true, + resetOnHover: false, + progressBar: false, + progressBarColor: '', + progressBarEasing: 'linear', + overlay: false, + overlayClose: false, + overlayColor: 'rgba(0, 0, 0, 0.6)', + transitionIn: 'fadeInDown', // bounceInLeft, bounceInRight, bounceInUp, bounceInDown, fadeIn, fadeInDown, fadeInUp, fadeInLeft, fadeInRight, flipInX + transitionOut: 'fadeOut', // fadeOut, fadeOutUp, fadeOutDown, fadeOutLeft, fadeOutRight, flipOutX + transitionInMobile: 'bounceInDown', + transitionOutMobile: 'fadeOutUp', + buttons: {}, + inputs: {}, + onOpening: function () { }, + onOpened: function () { }, + onClosing: function () { }, + onClosed: function () { } + }; + + if (!('remove' in Element.prototype)) { + Element.prototype.remove = function () { + if (this.parentNode) { + this.parentNode.removeChild(this); + } + }; + } + + if (typeof window.CustomEvent !== 'function') { + var CustomEventPolyfill = function (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; + }; + + CustomEventPolyfill.prototype = window.Event.prototype; + + window.CustomEvent = CustomEventPolyfill; + } + + var forEach = function (collection, callback, scope) { + if (Object.prototype.toString.call(collection) === '[object Object]') { + for (var prop in collection) { + if (Object.prototype.hasOwnProperty.call(collection, prop)) { + callback.call(scope, collection[prop], prop, collection); + } + } + } else { + if (collection) { + for (var i = 0, len = collection.length; i < len; i++) { + callback.call(scope, collection[i], i, collection); + } + } + } + }; + + var extend = function (defaults, options) { + var extended = {}; + forEach(defaults, function (value, prop) { + extended[prop] = defaults[prop]; + }); + forEach(options, function (value, prop) { + extended[prop] = options[prop]; + }); + return extended; + }; + + var createFragElem = function (htmlStr) { + var frag = document.createDocumentFragment(), + temp = document.createElement('div'); + temp.innerHTML = htmlStr; + while (temp.firstChild) { + frag.appendChild(temp.firstChild); + } + return frag; + }; + + var generateId = function (params) { + var newId = btoa(encodeURIComponent(params)); + return newId.replace(/=/g, ""); + }; + + var isColor = function (color) { + if (color.substring(0, 1) == '#' || color.substring(0, 3) == 'rgb' || color.substring(0, 3) == 'hsl') { + return true; + } else { + return false; + } + }; + + var isBase64 = function (str) { + try { + return btoa(atob(str)) == str; + } catch (err) { + return false; + } + }; + + var drag = function () { + + return { + move: function (toast, instance, settings, xpos) { + + var opacity, + opacityRange = 0.3, + distance = 180; + + if (xpos !== 0) { + + toast.classList.add(PLUGIN_NAME + '-dragged'); + + toast.style.transform = 'translateX(' + xpos + 'px)'; + + if (xpos > 0) { + opacity = (distance - xpos) / distance; + if (opacity < opacityRange) { + instance.hide(extend(settings, { transitionOut: 'fadeOutRight', transitionOutMobile: 'fadeOutRight' }), toast, 'drag'); + } + } else { + opacity = (distance + xpos) / distance; + if (opacity < opacityRange) { + instance.hide(extend(settings, { transitionOut: 'fadeOutLeft', transitionOutMobile: 'fadeOutLeft' }), toast, 'drag'); + } + } + toast.style.opacity = opacity; + + if (opacity < opacityRange) { + + if (ISCHROME || ISFIREFOX) + toast.style.left = xpos + 'px'; + + toast.parentNode.style.opacity = opacityRange; + + this.stopMoving(toast, null); + } + } + + + }, + startMoving: function (toast, instance, settings, e) { + + e = e || window.event; + var posX = ((ACCEPTSTOUCH) ? e.touches[0].clientX : e.clientX), + toastLeft = toast.style.transform.replace('px)', ''); + toastLeft = toastLeft.replace('translateX(', ''); + var offsetX = posX - toastLeft; + + if (settings.transitionIn) { + toast.classList.remove(settings.transitionIn); + } + if (settings.transitionInMobile) { + toast.classList.remove(settings.transitionInMobile); + } + toast.style.transition = ''; + + if (ACCEPTSTOUCH) { + document.ontouchmove = function (e) { + e.preventDefault(); + e = e || window.event; + var posX = e.touches[0].clientX, + finalX = posX - offsetX; + drag.move(toast, instance, settings, finalX); + }; + } else { + document.onmousemove = function (e) { + e.preventDefault(); + e = e || window.event; + var posX = e.clientX, + finalX = posX - offsetX; + drag.move(toast, instance, settings, finalX); + }; + } + + }, + stopMoving: function (toast, e) { + + if (ACCEPTSTOUCH) { + document.ontouchmove = function () { }; + } else { + document.onmousemove = function () { }; + } + + toast.style.opacity = ''; + toast.style.transform = ''; + + if (toast.classList.contains(PLUGIN_NAME + '-dragged')) { + + toast.classList.remove(PLUGIN_NAME + '-dragged'); + + toast.style.transition = 'transform 0.4s ease, opacity 0.4s ease'; + setTimeout(function () { + toast.style.transition = ''; + }, 400); + } + + } + }; + + }(); + + $iziToast.setSetting = function (ref, option, value) { + + $iziToast.children[ref][option] = value; + + }; + + $iziToast.getSetting = function (ref, option) { + + return $iziToast.children[ref][option]; + + }; + + $iziToast.destroy = function () { + + forEach(document.querySelectorAll('.' + PLUGIN_NAME + '-overlay'), function (element, index) { + element.remove(); + }); + + forEach(document.querySelectorAll('.' + PLUGIN_NAME + '-wrapper'), function (element, index) { + element.remove(); + }); + + forEach(document.querySelectorAll('.' + PLUGIN_NAME), function (element, index) { + element.remove(); + }); + + this.children = {}; + + // Remove event listeners + document.removeEventListener(PLUGIN_NAME + '-opened', {}, false); + document.removeEventListener(PLUGIN_NAME + '-opening', {}, false); + document.removeEventListener(PLUGIN_NAME + '-closing', {}, false); + document.removeEventListener(PLUGIN_NAME + '-closed', {}, false); + document.removeEventListener('keyup', {}, false); + + // Reset variables + CONFIG = {}; + }; + + /** + * Initialize Plugin + * @public + * @param {Object} options User settings + */ + $iziToast.settings = function (options) { + + // Destroy any existing initializations + $iziToast.destroy(); + + CONFIG = options; + defaults = extend(defaults, options || {}); + }; + + + /** + * Building themes functions. + * @public + * @param {Object} options User settings + */ + forEach(THEMES, function (theme, name) { + + $iziToast[name] = function (options) { + + var settings = extend(CONFIG, options || {}); + settings = extend(theme, settings || {}); + + this.show(settings); + }; + + }); + + + /** + * Do the calculation to move the progress bar + * @private + */ + $iziToast.progress = function (options, $toast, callback) { + + + var that = this, + ref = $toast.getAttribute('data-iziToast-ref'), + settings = extend(this.children[ref], options || {}), + $elem = $toast.querySelector('.' + PLUGIN_NAME + '-progressbar div'); + + return { + start: function () { + + if (typeof settings.time.REMAINING == 'undefined') { + + $toast.classList.remove(PLUGIN_NAME + '-reseted'); + + if ($elem !== null) { + $elem.style.transition = 'width ' + settings.timeout + 'ms ' + settings.progressBarEasing; + $elem.style.width = '0%'; + } + + settings.time.START = new Date().getTime(); + settings.time.END = settings.time.START + settings.timeout; + settings.time.TIMER = setTimeout(function () { + + clearTimeout(settings.time.TIMER); + + if (!$toast.classList.contains(PLUGIN_NAME + '-closing')) { + + that.hide(settings, $toast, 'timeout'); + + if (typeof callback === 'function') { + callback.apply(that); + } + } + + }, settings.timeout); + that.setSetting(ref, 'time', settings.time); + } + }, + pause: function () { + + if (typeof settings.time.START !== 'undefined' && !$toast.classList.contains(PLUGIN_NAME + '-paused') && !$toast.classList.contains(PLUGIN_NAME + '-reseted')) { + + $toast.classList.add(PLUGIN_NAME + '-paused'); + + settings.time.REMAINING = settings.time.END - new Date().getTime(); + + clearTimeout(settings.time.TIMER); + + that.setSetting(ref, 'time', settings.time); + + if ($elem !== null) { + var computedStyle = window.getComputedStyle($elem), + propertyWidth = computedStyle.getPropertyValue('width'); + + $elem.style.transition = 'none'; + $elem.style.width = propertyWidth; + } + + if (typeof callback === 'function') { + setTimeout(function () { + callback.apply(that); + }, 10); + } + } + }, + resume: function () { + + if (typeof settings.time.REMAINING !== 'undefined') { + + $toast.classList.remove(PLUGIN_NAME + '-paused'); + + if ($elem !== null) { + $elem.style.transition = 'width ' + settings.time.REMAINING + 'ms ' + settings.progressBarEasing; + $elem.style.width = '0%'; + } + + settings.time.END = new Date().getTime() + settings.time.REMAINING; + settings.time.TIMER = setTimeout(function () { + + clearTimeout(settings.time.TIMER); + + if (!$toast.classList.contains(PLUGIN_NAME + '-closing')) { + + that.hide(settings, $toast, 'timeout'); + + if (typeof callback === 'function') { + callback.apply(that); + } + } + + + }, settings.time.REMAINING); + + that.setSetting(ref, 'time', settings.time); + } else { + this.start(); + } + }, + reset: function () { + + clearTimeout(settings.time.TIMER); + + delete settings.time.REMAINING; + + that.setSetting(ref, 'time', settings.time); + + $toast.classList.add(PLUGIN_NAME + '-reseted'); + + $toast.classList.remove(PLUGIN_NAME + '-paused'); + + if ($elem !== null) { + $elem.style.transition = 'none'; + $elem.style.width = '100%'; + } + + if (typeof callback === 'function') { + setTimeout(function () { + callback.apply(that); + }, 10); + } + } + }; + + }; + + + /** + * Close the specific Toast + * @public + * @param {Object} options User settings + */ + $iziToast.hide = function (options, $toast, closedBy) { + + if (typeof $toast != 'object') { + $toast = document.querySelector($toast); + } + + var that = this, + settings = extend(this.children[$toast.getAttribute('data-iziToast-ref')], options || {}); + settings.closedBy = closedBy || null; + + delete settings.time.REMAINING; + + $toast.classList.add(PLUGIN_NAME + '-closing'); + + // Overlay + (function () { + + var $overlay = document.querySelector('.' + PLUGIN_NAME + '-overlay'); + if ($overlay !== null) { + var refs = $overlay.getAttribute('data-iziToast-ref'); + refs = refs.split(','); + var index = refs.indexOf(String(settings.ref)); + + if (index !== -1) { + refs.splice(index, 1); + } + $overlay.setAttribute('data-iziToast-ref', refs.join()); + + if (refs.length === 0) { + $overlay.classList.remove('fadeIn'); + $overlay.classList.add('fadeOut'); + setTimeout(function () { + $overlay.remove(); + }, 700); + } + } + + })(); + + if (settings.transitionIn) { + $toast.classList.remove(settings.transitionIn); + } + + if (settings.transitionInMobile) { + $toast.classList.remove(settings.transitionInMobile); + } + + if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) { + if (settings.transitionOutMobile) + $toast.classList.add(settings.transitionOutMobile); + } else { + if (settings.transitionOut) + $toast.classList.add(settings.transitionOut); + } + var H = $toast.parentNode.offsetHeight; + $toast.parentNode.style.height = H + 'px'; + $toast.style.pointerEvents = 'none'; + + if (!ISMOBILE || window.innerWidth > MOBILEWIDTH) { + $toast.parentNode.style.transitionDelay = '0.2s'; + } + + try { + var event = new CustomEvent(PLUGIN_NAME + '-closing', { detail: settings, bubbles: true, cancelable: true }); + document.dispatchEvent(event); + } catch (ex) { + console.warn(ex); + } + + setTimeout(function () { + + $toast.parentNode.style.height = '0px'; + $toast.parentNode.style.overflow = ''; + + setTimeout(function () { + + delete that.children[settings.ref]; + + $toast.parentNode.remove(); + + try { + var event = new CustomEvent(PLUGIN_NAME + '-closed', { detail: settings, bubbles: true, cancelable: true }); + document.dispatchEvent(event); + } catch (ex) { + console.warn(ex); + } + + if (typeof settings.onClosed !== 'undefined') { + settings.onClosed.apply(null, [settings, $toast, closedBy]); + } + + }, 1000); + }, 200); + + + if (typeof settings.onClosing !== 'undefined') { + settings.onClosing.apply(null, [settings, $toast, closedBy]); + } + }; + + /** + * Create and show the Toast + * @public + * @param {Object} options User settings + */ + $iziToast.show = function (options) { + + var that = this; + + // Merge user options with defaults + var settings = extend(CONFIG, options || {}); + settings = extend(defaults, settings); + settings.time = {}; + + if (settings.id === null) { + settings.id = generateId(settings.title + settings.message + settings.color); + } + + if (settings.displayMode === 1 || settings.displayMode == 'once') { + try { + if (document.querySelectorAll('.' + PLUGIN_NAME + '#' + settings.id).length > 0) { + return false; + } + } catch (exc) { + console.warn('[' + PLUGIN_NAME + '] Could not find an element with this selector: ' + '#' + settings.id + '. Try to set an valid id.'); + } + } + + if (settings.displayMode === 2 || settings.displayMode == 'replace') { + try { + forEach(document.querySelectorAll('.' + PLUGIN_NAME + '#' + settings.id), function (element, index) { + that.hide(settings, element, 'replaced'); + }); + } catch (exc) { + console.warn('[' + PLUGIN_NAME + '] Could not find an element with this selector: ' + '#' + settings.id + '. Try to set an valid id.'); + } + } + + settings.ref = new Date().getTime() + Math.floor((Math.random() * 10000000) + 1); + + $iziToast.children[settings.ref] = settings; + + var $DOM = { + body: document.querySelector('body'), + overlay: document.createElement('div'), + toast: document.createElement('div'), + toastBody: document.createElement('div'), + toastTexts: document.createElement('div'), + toastCapsule: document.createElement('div'), + cover: document.createElement('div'), + buttons: document.createElement('div'), + inputs: document.createElement('div'), + icon: !settings.iconUrl ? document.createElement('i') : document.createElement('img'), + wrapper: null + }; + + $DOM.toast.setAttribute('data-iziToast-ref', settings.ref); + $DOM.toast.appendChild($DOM.toastBody); + $DOM.toastCapsule.appendChild($DOM.toast); + + // CSS Settings + (function () { + + $DOM.toast.classList.add(PLUGIN_NAME); + $DOM.toast.classList.add(PLUGIN_NAME + '-opening'); + $DOM.toastCapsule.classList.add(PLUGIN_NAME + '-capsule'); + $DOM.toastBody.classList.add(PLUGIN_NAME + '-body'); + $DOM.toastTexts.classList.add(PLUGIN_NAME + '-texts'); + + if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) { + if (settings.transitionInMobile) + $DOM.toast.classList.add(settings.transitionInMobile); + } else { + if (settings.transitionIn) + $DOM.toast.classList.add(settings.transitionIn); + } + + if (settings.class) { + var classes = settings.class.split(' '); + forEach(classes, function (value, index) { + $DOM.toast.classList.add(value); + }); + } + + if (settings.id) { $DOM.toast.id = settings.id; } + + if (settings.rtl) { + $DOM.toast.classList.add(PLUGIN_NAME + '-rtl'); + $DOM.toast.setAttribute('dir', 'rtl'); + } + + if (settings.layout > 1) { $DOM.toast.classList.add(PLUGIN_NAME + '-layout' + settings.layout); } + + if (settings.balloon) { $DOM.toast.classList.add(PLUGIN_NAME + '-balloon'); } + + if (settings.maxWidth) { + if (!isNaN(settings.maxWidth)) { + $DOM.toast.style.maxWidth = settings.maxWidth + 'px'; + } else { + $DOM.toast.style.maxWidth = settings.maxWidth; + } + } + + if (settings.theme !== '' || settings.theme !== 'light') { + + $DOM.toast.classList.add(PLUGIN_NAME + '-theme-' + settings.theme); + } + + if (settings.color) { //#, rgb, rgba, hsl + + if (isColor(settings.color)) { + $DOM.toast.style.background = settings.color; + } else { + $DOM.toast.classList.add(PLUGIN_NAME + '-color-' + settings.color); + } + } + + if (settings.backgroundColor) { + $DOM.toast.style.background = settings.backgroundColor; + if (settings.balloon) { + $DOM.toast.style.borderColor = settings.backgroundColor; + } + } + })(); + + // Cover image + (function () { + if (settings.image) { + $DOM.cover.classList.add(PLUGIN_NAME + '-cover'); + $DOM.cover.style.width = settings.imageWidth + 'px'; + + if (isBase64(settings.image.replace(/ /g, ''))) { + $DOM.cover.style.backgroundImage = 'url(data:image/png;base64,' + settings.image.replace(/ /g, '') + ')'; + } else { + $DOM.cover.style.backgroundImage = 'url(' + settings.image + ')'; + } + + if (settings.rtl) { + $DOM.toastBody.style.marginRight = (settings.imageWidth + 10) + 'px'; + } else { + $DOM.toastBody.style.marginLeft = (settings.imageWidth + 10) + 'px'; + } + $DOM.toast.appendChild($DOM.cover); + } + })(); + + // Button close + (function () { + if (settings.close) { + + $DOM.buttonClose = document.createElement('button'); + $DOM.buttonClose.type = 'button'; + $DOM.buttonClose.classList.add(PLUGIN_NAME + '-close'); + $DOM.buttonClose.addEventListener('click', function (e) { + var button = e.target; + that.hide(settings, $DOM.toast, 'button'); + }); + $DOM.toast.appendChild($DOM.buttonClose); + } else { + if (settings.rtl) { + $DOM.toast.style.paddingLeft = '18px'; + } else { + $DOM.toast.style.paddingRight = '18px'; + } + } + })(); + + // Progress Bar & Timeout + (function () { + + if (settings.progressBar) { + $DOM.progressBar = document.createElement('div'); + $DOM.progressBarDiv = document.createElement('div'); + $DOM.progressBar.classList.add(PLUGIN_NAME + '-progressbar'); + $DOM.progressBarDiv.style.background = settings.progressBarColor; + $DOM.progressBar.appendChild($DOM.progressBarDiv); + $DOM.toast.appendChild($DOM.progressBar); + } + + if (settings.timeout) { + + if (settings.pauseOnHover && !settings.resetOnHover) { + + $DOM.toast.addEventListener('mouseenter', function (e) { + that.progress(settings, $DOM.toast).pause(); + }); + $DOM.toast.addEventListener('mouseleave', function (e) { + that.progress(settings, $DOM.toast).resume(); + }); + } + + if (settings.resetOnHover) { + + $DOM.toast.addEventListener('mouseenter', function (e) { + that.progress(settings, $DOM.toast).reset(); + }); + $DOM.toast.addEventListener('mouseleave', function (e) { + that.progress(settings, $DOM.toast).start(); + }); + } + } + })(); + + // Icon + (function () { + + if (settings.iconUrl) { + + $DOM.icon.setAttribute('class', PLUGIN_NAME + '-icon'); + $DOM.icon.setAttribute('src', settings.iconUrl); + + } else if (settings.icon) { + $DOM.icon.setAttribute('class', PLUGIN_NAME + '-icon ' + settings.icon); + + if (settings.iconText) { + $DOM.icon.appendChild(document.createTextNode(settings.iconText)); + } + + if (settings.iconColor) { + $DOM.icon.style.color = settings.iconColor; + } + } + + if (settings.icon || settings.iconUrl) { + + if (settings.rtl) { + $DOM.toastBody.style.paddingRight = '33px'; + } else { + $DOM.toastBody.style.paddingLeft = '33px'; + } + + $DOM.toastBody.appendChild($DOM.icon); + } + + })(); + + // Title & Message + (function () { + if (settings.title.length > 0) { + + $DOM.strong = document.createElement('strong'); + $DOM.strong.classList.add(PLUGIN_NAME + '-title'); + $DOM.strong.appendChild(createFragElem(settings.title)); + $DOM.toastTexts.appendChild($DOM.strong); + + if (settings.titleColor) { + $DOM.strong.style.color = settings.titleColor; + } + if (settings.titleSize) { + if (!isNaN(settings.titleSize)) { + $DOM.strong.style.fontSize = settings.titleSize + 'px'; + } else { + $DOM.strong.style.fontSize = settings.titleSize; + } + } + if (settings.titleLineHeight) { + if (!isNaN(settings.titleSize)) { + $DOM.strong.style.lineHeight = settings.titleLineHeight + 'px'; + } else { + $DOM.strong.style.lineHeight = settings.titleLineHeight; + } + } + } + + if (settings.message.length > 0) { + + $DOM.p = document.createElement('p'); + $DOM.p.classList.add(PLUGIN_NAME + '-message'); + $DOM.p.appendChild(createFragElem(settings.message)); + $DOM.toastTexts.appendChild($DOM.p); + + if (settings.messageColor) { + $DOM.p.style.color = settings.messageColor; + } + if (settings.messageSize) { + if (!isNaN(settings.titleSize)) { + $DOM.p.style.fontSize = settings.messageSize + 'px'; + } else { + $DOM.p.style.fontSize = settings.messageSize; + } + } + if (settings.messageLineHeight) { + + if (!isNaN(settings.titleSize)) { + $DOM.p.style.lineHeight = settings.messageLineHeight + 'px'; + } else { + $DOM.p.style.lineHeight = settings.messageLineHeight; + } + } + } + + if (settings.title.length > 0 && settings.message.length > 0) { + if (settings.rtl) { + $DOM.strong.style.marginLeft = '10px'; + } else if (settings.layout !== 2 && !settings.rtl) { + $DOM.strong.style.marginRight = '10px'; + } + } + })(); + + $DOM.toastBody.appendChild($DOM.toastTexts); + + // Inputs + var $inputs; + (function () { + if (settings.inputs.length > 0) { + + $DOM.inputs.classList.add(PLUGIN_NAME + '-inputs'); + + forEach(settings.inputs, function (value, index) { + $DOM.inputs.appendChild(createFragElem(value[0])); + + $inputs = $DOM.inputs.childNodes; + + $inputs[index].classList.add(PLUGIN_NAME + '-inputs-child'); + + if (value[3]) { + setTimeout(function () { + $inputs[index].focus(); + }, 300); + } + + $inputs[index].addEventListener(value[1], function (e) { + var ts = value[2]; + return ts(that, $DOM.toast, this, e); + }); + }); + $DOM.toastBody.appendChild($DOM.inputs); + } + })(); + + // Buttons + (function () { + if (settings.buttons.length > 0) { + + $DOM.buttons.classList.add(PLUGIN_NAME + '-buttons'); + + forEach(settings.buttons, function (value, index) { + $DOM.buttons.appendChild(createFragElem(value[0])); + + var $btns = $DOM.buttons.childNodes; + + $btns[index].classList.add(PLUGIN_NAME + '-buttons-child'); + + if (value[2]) { + setTimeout(function () { + $btns[index].focus(); + }, 300); + } + + $btns[index].addEventListener('click', function (e) { + e.preventDefault(); + var ts = value[1]; + return ts(that, $DOM.toast, this, e, $inputs); + }); + }); + } + $DOM.toastBody.appendChild($DOM.buttons); + })(); + + if (settings.message.length > 0 && (settings.inputs.length > 0 || settings.buttons.length > 0)) { + $DOM.p.style.marginBottom = '0'; + } + + if (settings.inputs.length > 0 || settings.buttons.length > 0) { + if (settings.rtl) { + $DOM.toastTexts.style.marginLeft = '10px'; + } else { + $DOM.toastTexts.style.marginRight = '10px'; + } + if (settings.inputs.length > 0 && settings.buttons.length > 0) { + if (settings.rtl) { + $DOM.inputs.style.marginLeft = '8px'; + } else { + $DOM.inputs.style.marginRight = '8px'; + } + } + } + + // Wrap + (function () { + $DOM.toastCapsule.style.visibility = 'hidden'; + setTimeout(function () { + var H = $DOM.toast.offsetHeight; + var style = $DOM.toast.currentStyle || window.getComputedStyle($DOM.toast); + var marginTop = style.marginTop; + marginTop = marginTop.split('px'); + marginTop = parseInt(marginTop[0]); + var marginBottom = style.marginBottom; + marginBottom = marginBottom.split('px'); + marginBottom = parseInt(marginBottom[0]); + + $DOM.toastCapsule.style.visibility = ''; + $DOM.toastCapsule.style.height = (H + marginBottom + marginTop) + 'px'; + + setTimeout(function () { + $DOM.toastCapsule.style.height = 'auto'; + if (settings.target) { + $DOM.toastCapsule.style.overflow = 'visible'; + } + }, 500); + + if (settings.timeout) { + that.progress(settings, $DOM.toast).start(); + } + }, 100); + })(); + + // Target + (function () { + var position = settings.position; + + if (settings.target) { + + $DOM.wrapper = document.querySelector(settings.target); + $DOM.wrapper.classList.add(PLUGIN_NAME + '-target'); + + if (settings.targetFirst) { + $DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild); + } else { + $DOM.wrapper.appendChild($DOM.toastCapsule); + } + + } else { + + if (POSITIONS.indexOf(settings.position) == -1) { + console.warn('[' + PLUGIN_NAME + '] Incorrect position.\nIt can be › ' + POSITIONS); + return; + } + + if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) { + if (settings.position == 'bottomLeft' || settings.position == 'bottomRight' || settings.position == 'bottomCenter') { + position = PLUGIN_NAME + '-wrapper-bottomCenter'; + } + else if (settings.position == 'topLeft' || settings.position == 'topRight' || settings.position == 'topCenter') { + position = PLUGIN_NAME + '-wrapper-topCenter'; + } + else { + position = PLUGIN_NAME + '-wrapper-center'; + } + } else { + position = PLUGIN_NAME + '-wrapper-' + position; + } + $DOM.wrapper = document.querySelector('.' + PLUGIN_NAME + '-wrapper.' + position); + + if (!$DOM.wrapper) { + $DOM.wrapper = document.createElement('div'); + $DOM.wrapper.classList.add(PLUGIN_NAME + '-wrapper'); + $DOM.wrapper.classList.add(position); + document.body.appendChild($DOM.wrapper); + } + if (settings.position == 'topLeft' || settings.position == 'topCenter' || settings.position == 'topRight') { + $DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild); + } else { + $DOM.wrapper.appendChild($DOM.toastCapsule); + } + } + + if (!isNaN(settings.zindex)) { + $DOM.wrapper.style.zIndex = settings.zindex; + } else { + console.warn('[' + PLUGIN_NAME + '] Invalid zIndex.'); + } + })(); + + // Overlay + (function () { + + if (settings.overlay) { + + if (document.querySelector('.' + PLUGIN_NAME + '-overlay.fadeIn') !== null) { + + $DOM.overlay = document.querySelector('.' + PLUGIN_NAME + '-overlay'); + $DOM.overlay.setAttribute('data-iziToast-ref', $DOM.overlay.getAttribute('data-iziToast-ref') + ',' + settings.ref); + + if (!isNaN(settings.zindex) && settings.zindex !== null) { + $DOM.overlay.style.zIndex = settings.zindex - 1; + } + + } else { + + $DOM.overlay.classList.add(PLUGIN_NAME + '-overlay'); + $DOM.overlay.classList.add('fadeIn'); + $DOM.overlay.style.background = settings.overlayColor; + $DOM.overlay.setAttribute('data-iziToast-ref', settings.ref); + if (!isNaN(settings.zindex) && settings.zindex !== null) { + $DOM.overlay.style.zIndex = settings.zindex - 1; + } + document.querySelector('body').appendChild($DOM.overlay); + } + + if (settings.overlayClose) { + + $DOM.overlay.removeEventListener('click', {}); + $DOM.overlay.addEventListener('click', function (e) { + that.hide(settings, $DOM.toast, 'overlay'); + }); + } else { + $DOM.overlay.removeEventListener('click', {}); + } + } + })(); + + // Inside animations + (function () { + if (settings.animateInside) { + $DOM.toast.classList.add(PLUGIN_NAME + '-animateInside'); + + var animationTimes = [200, 100, 300]; + if (settings.transitionIn == 'bounceInLeft' || settings.transitionIn == 'bounceInRight') { + animationTimes = [400, 200, 400]; + } + + if (settings.title.length > 0) { + setTimeout(function () { + $DOM.strong.classList.add('slideIn'); + }, animationTimes[0]); + } + + if (settings.message.length > 0) { + setTimeout(function () { + $DOM.p.classList.add('slideIn'); + }, animationTimes[1]); + } + + if (settings.icon || settings.iconUrl) { + setTimeout(function () { + $DOM.icon.classList.add('revealIn'); + }, animationTimes[2]); + } + + var counter = 150; + if (settings.buttons.length > 0 && $DOM.buttons) { + + setTimeout(function () { + + forEach($DOM.buttons.childNodes, function (element, index) { + + setTimeout(function () { + element.classList.add('revealIn'); + }, counter); + counter = counter + 150; + }); + + }, settings.inputs.length > 0 ? 150 : 0); + } + + if (settings.inputs.length > 0 && $DOM.inputs) { + counter = 150; + forEach($DOM.inputs.childNodes, function (element, index) { + + setTimeout(function () { + element.classList.add('revealIn'); + }, counter); + counter = counter + 150; + }); + } + } + })(); + + settings.onOpening.apply(null, [settings, $DOM.toast]); + + try { + var event = new CustomEvent(PLUGIN_NAME + '-opening', { detail: settings, bubbles: true, cancelable: true }); + document.dispatchEvent(event); + } catch (ex) { + console.warn(ex); + } + + setTimeout(function () { + + $DOM.toast.classList.remove(PLUGIN_NAME + '-opening'); + $DOM.toast.classList.add(PLUGIN_NAME + '-opened'); + + try { + var event = new CustomEvent(PLUGIN_NAME + '-opened', { detail: settings, bubbles: true, cancelable: true }); + document.dispatchEvent(event); + } catch (ex) { + console.warn(ex); + } + + settings.onOpened.apply(null, [settings, $DOM.toast]); + }, 1000); + + if (settings.drag) { + + if (ACCEPTSTOUCH) { + + $DOM.toast.addEventListener('touchstart', function (e) { + drag.startMoving(this, that, settings, e); + }, false); + + $DOM.toast.addEventListener('touchend', function (e) { + drag.stopMoving(this, e); + }, false); + } else { + + $DOM.toast.addEventListener('mousedown', function (e) { + e.preventDefault(); + drag.startMoving(this, that, settings, e); + }, false); + + $DOM.toast.addEventListener('mouseup', function (e) { + e.preventDefault(); + drag.stopMoving(this, e); + }, false); + } + } + + if (settings.closeOnEscape) { + + document.addEventListener('keyup', function (evt) { + evt = evt || window.event; + if (evt.keyCode == 27) { + that.hide(settings, $DOM.toast, 'esc'); + } + }); + } + + if (settings.closeOnClick) { + $DOM.toast.addEventListener('click', function (evt) { + that.hide(settings, $DOM.toast, 'toast'); + }); + } + + that.toast = $DOM.toast; + }; + return $iziToast; +}); \ No newline at end of file diff --git a/component/pear/module/yaml.js b/component/pear/module/extends/yaml.js similarity index 100% rename from component/pear/module/yaml.js rename to component/pear/module/extends/yaml.js diff --git a/component/pear/module/fullscreen.js b/component/pear/module/fullscreen.js index a0f3b4d..234c81b 100644 --- a/component/pear/module/fullscreen.js +++ b/component/pear/module/fullscreen.js @@ -1,4 +1,4 @@ -layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'menu', 'frame', 'theme', 'convert'], +layui.define(['jquery', 'element'], function(exports) { "use strict"; var $ = layui.jquery; diff --git a/component/pear/module/step.js b/component/pear/module/step.js deleted file mode 100644 index 4c96d17..0000000 --- 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/tag.js b/component/pear/module/tag.js deleted file mode 100644 index b7222ce..0000000 --- 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/toast.js b/component/pear/module/toast.js index 57c8ca5..16b7087 100644 --- a/component/pear/module/toast.js +++ b/component/pear/module/toast.js @@ -1,13 +1,13 @@ (function (root, factory) { - if(typeof define === 'function' && define.amd) { + if (typeof define === 'function' && define.amd) { define([], factory(root)); - } else if(typeof exports === 'object') { + } else if (typeof exports === 'object') { module.exports = factory(root); } else if (window.layui && layui.define) { - layui.define(function(exports){ - exports('toast',factory(root)) + layui.define(function (exports) { + exports('toast', factory(root)) }) - }else { + } else { root.iziToast = factory(root); } })(typeof global !== 'undefined' ? global : window || this.window || this.global, function (root) { @@ -21,7 +21,7 @@ ISCHROME = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor), ISFIREFOX = typeof InstallTrigger !== 'undefined', ACCEPTSTOUCH = 'ontouchstart' in document.documentElement, - POSITIONS = ['bottomRight','bottomLeft','bottomCenter','topRight','topLeft','topCenter','center'], + POSITIONS = ['bottomRight', 'bottomLeft', 'bottomCenter', 'topRight', 'topLeft', 'topCenter', 'center'], THEMES = { info: { color: 'blue', @@ -51,7 +51,7 @@ // Default settings var defaults = { - id: null, + id: null, class: '', title: '', titleColor: '', @@ -93,48 +93,48 @@ overlay: false, overlayClose: false, overlayColor: 'rgba(0, 0, 0, 0.6)', - transitionIn: 'fadeInDown', // bounceInLeft, bounceInRight, bounceInUp, bounceInDown, fadeIn, fadeInDown, fadeInUp, fadeInLeft, fadeInRight, flipInX - transitionOut: 'fadeOut', // fadeOut, fadeOutUp, fadeOutDown, fadeOutLeft, fadeOutRight, flipOutX - transitionInMobile: 'bounceInDown', - transitionOutMobile: 'fadeOutUp', + transitionIn: 'fadeInDown', // bounceInLeft, bounceInRight, bounceInUp, bounceInDown, fadeIn, fadeInDown, fadeInUp, fadeInLeft, fadeInRight, flipInX + transitionOut: 'fadeOut', // fadeOut, fadeOutUp, fadeOutDown, fadeOutLeft, fadeOutRight, flipOutX + transitionInMobile: 'bounceInDown', + transitionOutMobile: 'fadeOutUp', buttons: {}, inputs: {}, - onOpening: function () {}, - onOpened: function () {}, - onClosing: function () {}, - onClosed: function () {} + onOpening: function () { }, + onOpened: function () { }, + onClosing: function () { }, + onClosed: function () { } }; - if(!('remove' in Element.prototype)) { - Element.prototype.remove = function() { - if(this.parentNode) { - this.parentNode.removeChild(this); - } - }; + if (!('remove' in Element.prototype)) { + Element.prototype.remove = function () { + if (this.parentNode) { + this.parentNode.removeChild(this); + } + }; } - - if(typeof window.CustomEvent !== 'function') { - var CustomEventPolyfill = function (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; - }; - CustomEventPolyfill.prototype = window.Event.prototype; + if (typeof window.CustomEvent !== 'function') { + var CustomEventPolyfill = function (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; + }; - window.CustomEvent = CustomEventPolyfill; - } + CustomEventPolyfill.prototype = window.Event.prototype; + + window.CustomEvent = CustomEventPolyfill; + } var forEach = function (collection, callback, scope) { - if(Object.prototype.toString.call(collection) === '[object Object]') { + if (Object.prototype.toString.call(collection) === '[object Object]') { for (var prop in collection) { - if(Object.prototype.hasOwnProperty.call(collection, prop)) { + if (Object.prototype.hasOwnProperty.call(collection, prop)) { callback.call(scope, collection[prop], prop, collection); } } } else { - if(collection){ + if (collection) { for (var i = 0, len = collection.length; i < len; i++) { callback.call(scope, collection[i], i, collection); } @@ -153,7 +153,7 @@ return extended; }; - var createFragElem = function(htmlStr) { + var createFragElem = function (htmlStr) { var frag = document.createDocumentFragment(), temp = document.createElement('div'); temp.innerHTML = htmlStr; @@ -163,126 +163,126 @@ return frag; }; - var generateId = function(params) { + var generateId = function (params) { var newId = btoa(encodeURIComponent(params)); return newId.replace(/=/g, ""); }; - var isColor = function(color){ - if( color.substring(0,1) == '#' || color.substring(0,3) == 'rgb' || color.substring(0,3) == 'hsl' ){ + var isColor = function (color) { + if (color.substring(0, 1) == '#' || color.substring(0, 3) == 'rgb' || color.substring(0, 3) == 'hsl') { return true; } else { return false; } }; - var isBase64 = function(str) { - try { - return btoa(atob(str)) == str; - } catch (err) { - return false; - } + var isBase64 = function (str) { + try { + return btoa(atob(str)) == str; + } catch (err) { + return false; + } }; - var drag = function() { - - return { - move: function(toast, instance, settings, xpos) { + var drag = function () { + + return { + move: function (toast, instance, settings, xpos) { + + var opacity, + opacityRange = 0.3, + distance = 180; - var opacity, - opacityRange = 0.3, - distance = 180; - - if(xpos !== 0){ - - toast.classList.add(PLUGIN_NAME+'-dragged'); + if (xpos !== 0) { - toast.style.transform = 'translateX('+xpos + 'px)'; + toast.classList.add(PLUGIN_NAME + '-dragged'); - if(xpos > 0){ - opacity = (distance-xpos) / distance; - if(opacity < opacityRange){ + toast.style.transform = 'translateX(' + xpos + 'px)'; + + if (xpos > 0) { + opacity = (distance - xpos) / distance; + if (opacity < opacityRange) { instance.hide(extend(settings, { transitionOut: 'fadeOutRight', transitionOutMobile: 'fadeOutRight' }), toast, 'drag'); } - } else { - opacity = (distance+xpos) / distance; - if(opacity < opacityRange){ + } else { + opacity = (distance + xpos) / distance; + if (opacity < opacityRange) { instance.hide(extend(settings, { transitionOut: 'fadeOutLeft', transitionOutMobile: 'fadeOutLeft' }), toast, 'drag'); } - } + } toast.style.opacity = opacity; - - if(opacity < opacityRange){ - if(ISCHROME || ISFIREFOX) - toast.style.left = xpos+'px'; + if (opacity < opacityRange) { + + if (ISCHROME || ISFIREFOX) + toast.style.left = xpos + 'px'; toast.parentNode.style.opacity = opacityRange; - this.stopMoving(toast, null); + this.stopMoving(toast, null); } - } + } - - }, - startMoving: function(toast, instance, settings, e) { - e = e || window.event; - var posX = ((ACCEPTSTOUCH) ? e.touches[0].clientX : e.clientX), - toastLeft = toast.style.transform.replace('px)', ''); - toastLeft = toastLeft.replace('translateX(', ''); - var offsetX = posX - toastLeft; + }, + startMoving: function (toast, instance, settings, e) { + + e = e || window.event; + var posX = ((ACCEPTSTOUCH) ? e.touches[0].clientX : e.clientX), + toastLeft = toast.style.transform.replace('px)', ''); + toastLeft = toastLeft.replace('translateX(', ''); + var offsetX = posX - toastLeft; - if(settings.transitionIn){ + if (settings.transitionIn) { toast.classList.remove(settings.transitionIn); } - if(settings.transitionInMobile){ + if (settings.transitionInMobile) { toast.classList.remove(settings.transitionInMobile); } toast.style.transition = ''; - if(ACCEPTSTOUCH) { - document.ontouchmove = function(e) { - e.preventDefault(); - e = e || window.event; - var posX = e.touches[0].clientX, - finalX = posX - offsetX; - drag.move(toast, instance, settings, finalX); - }; - } else { - document.onmousemove = function(e) { - e.preventDefault(); - e = e || window.event; - var posX = e.clientX, - finalX = posX - offsetX; - drag.move(toast, instance, settings, finalX); - }; - } - - }, - stopMoving: function(toast, e) { - - if(ACCEPTSTOUCH) { - document.ontouchmove = function() {}; - } else { - document.onmousemove = function() {}; - } + if (ACCEPTSTOUCH) { + document.ontouchmove = function (e) { + e.preventDefault(); + e = e || window.event; + var posX = e.touches[0].clientX, + finalX = posX - offsetX; + drag.move(toast, instance, settings, finalX); + }; + } else { + document.onmousemove = function (e) { + e.preventDefault(); + e = e || window.event; + var posX = e.clientX, + finalX = posX - offsetX; + drag.move(toast, instance, settings, finalX); + }; + } + + }, + stopMoving: function (toast, e) { + + if (ACCEPTSTOUCH) { + document.ontouchmove = function () { }; + } else { + document.onmousemove = function () { }; + } toast.style.opacity = ''; toast.style.transform = ''; - if(toast.classList.contains(PLUGIN_NAME+'-dragged')){ - - toast.classList.remove(PLUGIN_NAME+'-dragged'); + if (toast.classList.contains(PLUGIN_NAME + '-dragged')) { + + toast.classList.remove(PLUGIN_NAME + '-dragged'); toast.style.transition = 'transform 0.4s ease, opacity 0.4s ease'; - setTimeout(function() { + setTimeout(function () { toast.style.transition = ''; }, 400); - } + } - } - }; + } + }; }(); @@ -300,25 +300,25 @@ $iziToast.destroy = function () { - forEach(document.querySelectorAll('.'+PLUGIN_NAME+'-overlay'), function(element, index) { + forEach(document.querySelectorAll('.' + PLUGIN_NAME + '-overlay'), function (element, index) { element.remove(); }); - forEach(document.querySelectorAll('.'+PLUGIN_NAME+'-wrapper'), function(element, index) { + forEach(document.querySelectorAll('.' + PLUGIN_NAME + '-wrapper'), function (element, index) { element.remove(); }); - forEach(document.querySelectorAll('.'+PLUGIN_NAME), function(element, index) { + forEach(document.querySelectorAll('.' + PLUGIN_NAME), function (element, index) { element.remove(); }); this.children = {}; // Remove event listeners - document.removeEventListener(PLUGIN_NAME+'-opened', {}, false); - document.removeEventListener(PLUGIN_NAME+'-opening', {}, false); - document.removeEventListener(PLUGIN_NAME+'-closing', {}, false); - document.removeEventListener(PLUGIN_NAME+'-closed', {}, false); + document.removeEventListener(PLUGIN_NAME + '-opened', {}, false); + document.removeEventListener(PLUGIN_NAME + '-opening', {}, false); + document.removeEventListener(PLUGIN_NAME + '-closing', {}, false); + document.removeEventListener(PLUGIN_NAME + '-closed', {}, false); document.removeEventListener('keyup', {}, false); // Reset variables @@ -368,44 +368,44 @@ var that = this, ref = $toast.getAttribute('data-iziToast-ref'), settings = extend(this.children[ref], options || {}), - $elem = $toast.querySelector('.'+PLUGIN_NAME+'-progressbar div'); + $elem = $toast.querySelector('.' + PLUGIN_NAME + '-progressbar div'); - return { - start: function() { + return { + start: function () { - if(typeof settings.time.REMAINING == 'undefined'){ + if (typeof settings.time.REMAINING == 'undefined') { - $toast.classList.remove(PLUGIN_NAME+'-reseted'); + $toast.classList.remove(PLUGIN_NAME + '-reseted'); - if($elem !== null){ - $elem.style.transition = 'width '+ settings.timeout +'ms '+settings.progressBarEasing; + if ($elem !== null) { + $elem.style.transition = 'width ' + settings.timeout + 'ms ' + settings.progressBarEasing; $elem.style.width = '0%'; } - settings.time.START = new Date().getTime(); - settings.time.END = settings.time.START + settings.timeout; - settings.time.TIMER = setTimeout(function() { + settings.time.START = new Date().getTime(); + settings.time.END = settings.time.START + settings.timeout; + settings.time.TIMER = setTimeout(function () { clearTimeout(settings.time.TIMER); - if(!$toast.classList.contains(PLUGIN_NAME+'-closing')){ + if (!$toast.classList.contains(PLUGIN_NAME + '-closing')) { that.hide(settings, $toast, 'timeout'); - if(typeof callback === 'function'){ + if (typeof callback === 'function') { callback.apply(that); } } - }, settings.timeout); - that.setSetting(ref, 'time', settings.time); - } - }, - pause: function() { + }, settings.timeout); + that.setSetting(ref, 'time', settings.time); + } + }, + pause: function () { - if(typeof settings.time.START !== 'undefined' && !$toast.classList.contains(PLUGIN_NAME+'-paused') && !$toast.classList.contains(PLUGIN_NAME+'-reseted')){ + if (typeof settings.time.START !== 'undefined' && !$toast.classList.contains(PLUGIN_NAME + '-paused') && !$toast.classList.contains(PLUGIN_NAME + '-reseted')) { - $toast.classList.add(PLUGIN_NAME+'-paused'); + $toast.classList.add(PLUGIN_NAME + '-paused'); settings.time.REMAINING = settings.time.END - new Date().getTime(); @@ -413,42 +413,42 @@ that.setSetting(ref, 'time', settings.time); - if($elem !== null){ + if ($elem !== null) { var computedStyle = window.getComputedStyle($elem), propertyWidth = computedStyle.getPropertyValue('width'); $elem.style.transition = 'none'; - $elem.style.width = propertyWidth; + $elem.style.width = propertyWidth; } - if(typeof callback === 'function'){ - setTimeout(function() { - callback.apply(that); + if (typeof callback === 'function') { + setTimeout(function () { + callback.apply(that); }, 10); } - } - }, - resume: function() { + } + }, + resume: function () { - if(typeof settings.time.REMAINING !== 'undefined'){ + if (typeof settings.time.REMAINING !== 'undefined') { - $toast.classList.remove(PLUGIN_NAME+'-paused'); + $toast.classList.remove(PLUGIN_NAME + '-paused'); - if($elem !== null){ - $elem.style.transition = 'width '+ settings.time.REMAINING +'ms '+settings.progressBarEasing; + if ($elem !== null) { + $elem.style.transition = 'width ' + settings.time.REMAINING + 'ms ' + settings.progressBarEasing; $elem.style.width = '0%'; } - settings.time.END = new Date().getTime() + settings.time.REMAINING; - settings.time.TIMER = setTimeout(function() { + settings.time.END = new Date().getTime() + settings.time.REMAINING; + settings.time.TIMER = setTimeout(function () { clearTimeout(settings.time.TIMER); - if(!$toast.classList.contains(PLUGIN_NAME+'-closing')){ + if (!$toast.classList.contains(PLUGIN_NAME + '-closing')) { that.hide(settings, $toast, 'timeout'); - if(typeof callback === 'function'){ + if (typeof callback === 'function') { callback.apply(that); } } @@ -460,8 +460,8 @@ } else { this.start(); } - }, - reset: function(){ + }, + reset: function () { clearTimeout(settings.time.TIMER); @@ -469,22 +469,22 @@ that.setSetting(ref, 'time', settings.time); - $toast.classList.add(PLUGIN_NAME+'-reseted'); + $toast.classList.add(PLUGIN_NAME + '-reseted'); - $toast.classList.remove(PLUGIN_NAME+'-paused'); + $toast.classList.remove(PLUGIN_NAME + '-paused'); - if($elem !== null){ + if ($elem !== null) { $elem.style.transition = 'none'; $elem.style.width = '100%'; } - if(typeof callback === 'function'){ - setTimeout(function() { - callback.apply(that); + if (typeof callback === 'function') { + setTimeout(function () { + callback.apply(that); }, 10); } - } - }; + } + }; }; @@ -496,36 +496,36 @@ */ $iziToast.hide = function (options, $toast, closedBy) { - if(typeof $toast != 'object'){ + if (typeof $toast != 'object') { $toast = document.querySelector($toast); - } + } var that = this, settings = extend(this.children[$toast.getAttribute('data-iziToast-ref')], options || {}); - settings.closedBy = closedBy || null; + settings.closedBy = closedBy || null; delete settings.time.REMAINING; - $toast.classList.add(PLUGIN_NAME+'-closing'); + $toast.classList.add(PLUGIN_NAME + '-closing'); // Overlay - (function(){ + (function () { - var $overlay = document.querySelector('.'+PLUGIN_NAME+'-overlay'); - if($overlay !== null){ - var refs = $overlay.getAttribute('data-iziToast-ref'); - refs = refs.split(','); + var $overlay = document.querySelector('.' + PLUGIN_NAME + '-overlay'); + if ($overlay !== null) { + var refs = $overlay.getAttribute('data-iziToast-ref'); + refs = refs.split(','); var index = refs.indexOf(String(settings.ref)); - if(index !== -1){ - refs.splice(index, 1); + if (index !== -1) { + refs.splice(index, 1); } $overlay.setAttribute('data-iziToast-ref', refs.join()); - if(refs.length === 0){ + if (refs.length === 0) { $overlay.classList.remove('fadeIn'); $overlay.classList.add('fadeOut'); - setTimeout(function() { + setTimeout(function () { $overlay.remove(); }, 700); } @@ -533,55 +533,55 @@ })(); - if(settings.transitionIn){ + if (settings.transitionIn) { $toast.classList.remove(settings.transitionIn); - } + } - if(settings.transitionInMobile){ + if (settings.transitionInMobile) { $toast.classList.remove(settings.transitionInMobile); } - if(ISMOBILE || window.innerWidth <= MOBILEWIDTH){ - if(settings.transitionOutMobile) + if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) { + if (settings.transitionOutMobile) $toast.classList.add(settings.transitionOutMobile); } else { - if(settings.transitionOut) + if (settings.transitionOut) $toast.classList.add(settings.transitionOut); } var H = $toast.parentNode.offsetHeight; - $toast.parentNode.style.height = H+'px'; - $toast.style.pointerEvents = 'none'; - - if(!ISMOBILE || window.innerWidth > MOBILEWIDTH){ + $toast.parentNode.style.height = H + 'px'; + $toast.style.pointerEvents = 'none'; + + if (!ISMOBILE || window.innerWidth > MOBILEWIDTH) { $toast.parentNode.style.transitionDelay = '0.2s'; } try { - var event = new CustomEvent(PLUGIN_NAME+'-closing', {detail: settings, bubbles: true, cancelable: true}); + var event = new CustomEvent(PLUGIN_NAME + '-closing', { detail: settings, bubbles: true, cancelable: true }); document.dispatchEvent(event); - } catch(ex){ + } catch (ex) { console.warn(ex); } - setTimeout(function() { - + setTimeout(function () { + $toast.parentNode.style.height = '0px'; $toast.parentNode.style.overflow = ''; - setTimeout(function(){ - + setTimeout(function () { + delete that.children[settings.ref]; $toast.parentNode.remove(); try { - var event = new CustomEvent(PLUGIN_NAME+'-closed', {detail: settings, bubbles: true, cancelable: true}); + var event = new CustomEvent(PLUGIN_NAME + '-closed', { detail: settings, bubbles: true, cancelable: true }); document.dispatchEvent(event); - } catch(ex){ + } catch (ex) { console.warn(ex); } - if(typeof settings.onClosed !== 'undefined'){ + if (typeof settings.onClosed !== 'undefined') { settings.onClosed.apply(null, [settings, $toast, closedBy]); } @@ -589,7 +589,7 @@ }, 200); - if(typeof settings.onClosing !== 'undefined'){ + if (typeof settings.onClosing !== 'undefined') { settings.onClosing.apply(null, [settings, $toast, closedBy]); } }; @@ -605,30 +605,30 @@ // Merge user options with defaults var settings = extend(CONFIG, options || {}); - settings = extend(defaults, settings); - settings.time = {}; + settings = extend(defaults, settings); + settings.time = {}; - if(settings.id === null){ - settings.id = generateId(settings.title+settings.message+settings.color); + if (settings.id === null) { + settings.id = generateId(settings.title + settings.message + settings.color); } - if(settings.displayMode === 1 || settings.displayMode == 'once'){ + if (settings.displayMode === 1 || settings.displayMode == 'once') { try { - if(document.querySelectorAll('.'+PLUGIN_NAME+'#'+settings.id).length > 0){ + if (document.querySelectorAll('.' + PLUGIN_NAME + '#' + settings.id).length > 0) { return false; } } catch (exc) { - console.warn('['+PLUGIN_NAME+'] Could not find an element with this selector: '+'#'+settings.id+'. Try to set an valid id.'); + console.warn('[' + PLUGIN_NAME + '] Could not find an element with this selector: ' + '#' + settings.id + '. Try to set an valid id.'); } } - if(settings.displayMode === 2 || settings.displayMode == 'replace'){ + if (settings.displayMode === 2 || settings.displayMode == 'replace') { try { - forEach(document.querySelectorAll('.'+PLUGIN_NAME+'#'+settings.id), function(element, index) { + forEach(document.querySelectorAll('.' + PLUGIN_NAME + '#' + settings.id), function (element, index) { that.hide(settings, element, 'replaced'); }); } catch (exc) { - console.warn('['+PLUGIN_NAME+'] Could not find an element with this selector: '+'#'+settings.id+'. Try to set an valid id.'); + console.warn('[' + PLUGIN_NAME + '] Could not find an element with this selector: ' + '#' + settings.id + '. Try to set an valid id.'); } } @@ -655,95 +655,95 @@ $DOM.toastCapsule.appendChild($DOM.toast); // CSS Settings - (function(){ + (function () { $DOM.toast.classList.add(PLUGIN_NAME); - $DOM.toast.classList.add(PLUGIN_NAME+'-opening'); - $DOM.toastCapsule.classList.add(PLUGIN_NAME+'-capsule'); + $DOM.toast.classList.add(PLUGIN_NAME + '-opening'); + $DOM.toastCapsule.classList.add(PLUGIN_NAME + '-capsule'); $DOM.toastBody.classList.add(PLUGIN_NAME + '-body'); $DOM.toastTexts.classList.add(PLUGIN_NAME + '-texts'); - if(ISMOBILE || window.innerWidth <= MOBILEWIDTH){ - if(settings.transitionInMobile) + if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) { + if (settings.transitionInMobile) $DOM.toast.classList.add(settings.transitionInMobile); } else { - if(settings.transitionIn) + if (settings.transitionIn) $DOM.toast.classList.add(settings.transitionIn); } - if(settings.class){ + if (settings.class) { var classes = settings.class.split(' '); forEach(classes, function (value, index) { $DOM.toast.classList.add(value); }); } - if(settings.id){ $DOM.toast.id = settings.id; } + if (settings.id) { $DOM.toast.id = settings.id; } - if(settings.rtl){ + if (settings.rtl) { $DOM.toast.classList.add(PLUGIN_NAME + '-rtl'); $DOM.toast.setAttribute('dir', 'rtl'); } - if(settings.layout > 1){ $DOM.toast.classList.add(PLUGIN_NAME+'-layout'+settings.layout); } + if (settings.layout > 1) { $DOM.toast.classList.add(PLUGIN_NAME + '-layout' + settings.layout); } - if(settings.balloon){ $DOM.toast.classList.add(PLUGIN_NAME+'-balloon'); } + if (settings.balloon) { $DOM.toast.classList.add(PLUGIN_NAME + '-balloon'); } - if(settings.maxWidth){ - if( !isNaN(settings.maxWidth) ){ - $DOM.toast.style.maxWidth = settings.maxWidth+'px'; + if (settings.maxWidth) { + if (!isNaN(settings.maxWidth)) { + $DOM.toast.style.maxWidth = settings.maxWidth + 'px'; } else { $DOM.toast.style.maxWidth = settings.maxWidth; } } - if(settings.theme !== '' || settings.theme !== 'light') { + if (settings.theme !== '' || settings.theme !== 'light') { - $DOM.toast.classList.add(PLUGIN_NAME+'-theme-'+settings.theme); + $DOM.toast.classList.add(PLUGIN_NAME + '-theme-' + settings.theme); } - if(settings.color) { //#, rgb, rgba, hsl - - if( isColor(settings.color) ){ + if (settings.color) { //#, rgb, rgba, hsl + + if (isColor(settings.color)) { $DOM.toast.style.background = settings.color; } else { - $DOM.toast.classList.add(PLUGIN_NAME+'-color-'+settings.color); + $DOM.toast.classList.add(PLUGIN_NAME + '-color-' + settings.color); } } - if(settings.backgroundColor) { + if (settings.backgroundColor) { $DOM.toast.style.background = settings.backgroundColor; - if(settings.balloon){ - $DOM.toast.style.borderColor = settings.backgroundColor; + if (settings.balloon) { + $DOM.toast.style.borderColor = settings.backgroundColor; } } })(); // Cover image - (function(){ - if(settings.image) { + (function () { + if (settings.image) { $DOM.cover.classList.add(PLUGIN_NAME + '-cover'); $DOM.cover.style.width = settings.imageWidth + 'px'; - if(isBase64(settings.image.replace(/ /g,''))){ - $DOM.cover.style.backgroundImage = 'url(data:image/png;base64,' + settings.image.replace(/ /g,'') + ')'; + if (isBase64(settings.image.replace(/ /g, ''))) { + $DOM.cover.style.backgroundImage = 'url(data:image/png;base64,' + settings.image.replace(/ /g, '') + ')'; } else { $DOM.cover.style.backgroundImage = 'url(' + settings.image + ')'; } - if(settings.rtl){ + if (settings.rtl) { $DOM.toastBody.style.marginRight = (settings.imageWidth + 10) + 'px'; } else { - $DOM.toastBody.style.marginLeft = (settings.imageWidth + 10) + 'px'; + $DOM.toastBody.style.marginLeft = (settings.imageWidth + 10) + 'px'; } $DOM.toast.appendChild($DOM.cover); } })(); // Button close - (function(){ - if(settings.close){ - + (function () { + if (settings.close) { + $DOM.buttonClose = document.createElement('button'); $DOM.buttonClose.type = 'button'; $DOM.buttonClose.classList.add(PLUGIN_NAME + '-close'); @@ -753,7 +753,7 @@ }); $DOM.toast.appendChild($DOM.buttonClose); } else { - if(settings.rtl){ + if (settings.rtl) { $DOM.toast.style.paddingLeft = '18px'; } else { $DOM.toast.style.paddingRight = '18px'; @@ -762,9 +762,9 @@ })(); // Progress Bar & Timeout - (function(){ + (function () { - if(settings.progressBar){ + if (settings.progressBar) { $DOM.progressBar = document.createElement('div'); $DOM.progressBarDiv = document.createElement('div'); $DOM.progressBar.classList.add(PLUGIN_NAME + '-progressbar'); @@ -773,10 +773,10 @@ $DOM.toast.appendChild($DOM.progressBar); } - if(settings.timeout) { + if (settings.timeout) { + + if (settings.pauseOnHover && !settings.resetOnHover) { - if(settings.pauseOnHover && !settings.resetOnHover){ - $DOM.toast.addEventListener('mouseenter', function (e) { that.progress(settings, $DOM.toast).pause(); }); @@ -785,7 +785,7 @@ }); } - if(settings.resetOnHover){ + if (settings.resetOnHover) { $DOM.toast.addEventListener('mouseenter', function (e) { that.progress(settings, $DOM.toast).reset(); @@ -798,31 +798,31 @@ })(); // Icon - (function(){ + (function () { - if(settings.iconUrl) { + if (settings.iconUrl) { $DOM.icon.setAttribute('class', PLUGIN_NAME + '-icon'); $DOM.icon.setAttribute('src', settings.iconUrl); - } else if(settings.icon) { + } else if (settings.icon) { $DOM.icon.setAttribute('class', PLUGIN_NAME + '-icon ' + settings.icon); - - if(settings.iconText){ + + if (settings.iconText) { $DOM.icon.appendChild(document.createTextNode(settings.iconText)); } - - if(settings.iconColor){ + + if (settings.iconColor) { $DOM.icon.style.color = settings.iconColor; - } + } } - if(settings.icon || settings.iconUrl) { + if (settings.icon || settings.iconUrl) { - if(settings.rtl){ + if (settings.rtl) { $DOM.toastBody.style.paddingRight = '33px'; } else { - $DOM.toastBody.style.paddingLeft = '33px'; + $DOM.toastBody.style.paddingLeft = '33px'; } $DOM.toastBody.appendChild($DOM.icon); @@ -831,65 +831,65 @@ })(); // Title & Message - (function(){ - if(settings.title.length > 0) { + (function () { + if (settings.title.length > 0) { $DOM.strong = document.createElement('strong'); $DOM.strong.classList.add(PLUGIN_NAME + '-title'); $DOM.strong.appendChild(createFragElem(settings.title)); $DOM.toastTexts.appendChild($DOM.strong); - if(settings.titleColor) { + if (settings.titleColor) { $DOM.strong.style.color = settings.titleColor; } - if(settings.titleSize) { - if( !isNaN(settings.titleSize) ){ - $DOM.strong.style.fontSize = settings.titleSize+'px'; + if (settings.titleSize) { + if (!isNaN(settings.titleSize)) { + $DOM.strong.style.fontSize = settings.titleSize + 'px'; } else { $DOM.strong.style.fontSize = settings.titleSize; } } - if(settings.titleLineHeight) { - if( !isNaN(settings.titleSize) ){ - $DOM.strong.style.lineHeight = settings.titleLineHeight+'px'; + if (settings.titleLineHeight) { + if (!isNaN(settings.titleSize)) { + $DOM.strong.style.lineHeight = settings.titleLineHeight + 'px'; } else { $DOM.strong.style.lineHeight = settings.titleLineHeight; } } } - if(settings.message.length > 0) { + if (settings.message.length > 0) { $DOM.p = document.createElement('p'); $DOM.p.classList.add(PLUGIN_NAME + '-message'); $DOM.p.appendChild(createFragElem(settings.message)); $DOM.toastTexts.appendChild($DOM.p); - if(settings.messageColor) { + if (settings.messageColor) { $DOM.p.style.color = settings.messageColor; } - if(settings.messageSize) { - if( !isNaN(settings.titleSize) ){ - $DOM.p.style.fontSize = settings.messageSize+'px'; + if (settings.messageSize) { + if (!isNaN(settings.titleSize)) { + $DOM.p.style.fontSize = settings.messageSize + 'px'; } else { $DOM.p.style.fontSize = settings.messageSize; } } - if(settings.messageLineHeight) { - - if( !isNaN(settings.titleSize) ){ - $DOM.p.style.lineHeight = settings.messageLineHeight+'px'; + if (settings.messageLineHeight) { + + if (!isNaN(settings.titleSize)) { + $DOM.p.style.lineHeight = settings.messageLineHeight + 'px'; } else { $DOM.p.style.lineHeight = settings.messageLineHeight; } } } - if(settings.title.length > 0 && settings.message.length > 0) { - if(settings.rtl){ + if (settings.title.length > 0 && settings.message.length > 0) { + if (settings.rtl) { $DOM.strong.style.marginLeft = '10px'; - } else if(settings.layout !== 2 && !settings.rtl) { - $DOM.strong.style.marginRight = '10px'; + } else if (settings.layout !== 2 && !settings.rtl) { + $DOM.strong.style.marginRight = '10px'; } } })(); @@ -898,8 +898,8 @@ // Inputs var $inputs; - (function(){ - if(settings.inputs.length > 0) { + (function () { + if (settings.inputs.length > 0) { $DOM.inputs.classList.add(PLUGIN_NAME + '-inputs'); @@ -910,8 +910,8 @@ $inputs[index].classList.add(PLUGIN_NAME + '-inputs-child'); - if(value[3]){ - setTimeout(function() { + if (value[3]) { + setTimeout(function () { $inputs[index].focus(); }, 300); } @@ -926,8 +926,8 @@ })(); // Buttons - (function(){ - if(settings.buttons.length > 0) { + (function () { + if (settings.buttons.length > 0) { $DOM.buttons.classList.add(PLUGIN_NAME + '-buttons'); @@ -938,8 +938,8 @@ $btns[index].classList.add(PLUGIN_NAME + '-buttons-child'); - if(value[2]){ - setTimeout(function() { + if (value[2]) { + setTimeout(function () { $btns[index].focus(); }, 300); } @@ -954,18 +954,18 @@ $DOM.toastBody.appendChild($DOM.buttons); })(); - if(settings.message.length > 0 && (settings.inputs.length > 0 || settings.buttons.length > 0)) { + if (settings.message.length > 0 && (settings.inputs.length > 0 || settings.buttons.length > 0)) { $DOM.p.style.marginBottom = '0'; } - if(settings.inputs.length > 0 || settings.buttons.length > 0){ - if(settings.rtl){ + if (settings.inputs.length > 0 || settings.buttons.length > 0) { + if (settings.rtl) { $DOM.toastTexts.style.marginLeft = '10px'; } else { $DOM.toastTexts.style.marginRight = '10px'; } - if(settings.inputs.length > 0 && settings.buttons.length > 0){ - if(settings.rtl){ + if (settings.inputs.length > 0 && settings.buttons.length > 0) { + if (settings.rtl) { $DOM.inputs.style.marginLeft = '8px'; } else { $DOM.inputs.style.marginRight = '8px'; @@ -974,44 +974,44 @@ } // Wrap - (function(){ + (function () { $DOM.toastCapsule.style.visibility = 'hidden'; - setTimeout(function() { + setTimeout(function () { var H = $DOM.toast.offsetHeight; var style = $DOM.toast.currentStyle || window.getComputedStyle($DOM.toast); var marginTop = style.marginTop; - marginTop = marginTop.split('px'); - marginTop = parseInt(marginTop[0]); + marginTop = marginTop.split('px'); + marginTop = parseInt(marginTop[0]); var marginBottom = style.marginBottom; - marginBottom = marginBottom.split('px'); - marginBottom = parseInt(marginBottom[0]); + marginBottom = marginBottom.split('px'); + marginBottom = parseInt(marginBottom[0]); $DOM.toastCapsule.style.visibility = ''; - $DOM.toastCapsule.style.height = (H+marginBottom+marginTop)+'px'; + $DOM.toastCapsule.style.height = (H + marginBottom + marginTop) + 'px'; - setTimeout(function() { + setTimeout(function () { $DOM.toastCapsule.style.height = 'auto'; - if(settings.target){ + if (settings.target) { $DOM.toastCapsule.style.overflow = 'visible'; } }, 500); - if(settings.timeout) { + if (settings.timeout) { that.progress(settings, $DOM.toast).start(); } }, 100); })(); // Target - (function(){ + (function () { var position = settings.position; - if(settings.target){ + if (settings.target) { $DOM.wrapper = document.querySelector(settings.target); $DOM.wrapper.classList.add(PLUGIN_NAME + '-target'); - if(settings.targetFirst) { + if (settings.targetFirst) { $DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild); } else { $DOM.wrapper.appendChild($DOM.toastCapsule); @@ -1019,73 +1019,73 @@ } else { - if( POSITIONS.indexOf(settings.position) == -1 ){ - console.warn('['+PLUGIN_NAME+'] Incorrect position.\nIt can be › ' + POSITIONS); + if (POSITIONS.indexOf(settings.position) == -1) { + console.warn('[' + PLUGIN_NAME + '] Incorrect position.\nIt can be › ' + POSITIONS); return; } - if(ISMOBILE || window.innerWidth <= MOBILEWIDTH){ - if(settings.position == 'bottomLeft' || settings.position == 'bottomRight' || settings.position == 'bottomCenter'){ - position = PLUGIN_NAME+'-wrapper-bottomCenter'; + if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) { + if (settings.position == 'bottomLeft' || settings.position == 'bottomRight' || settings.position == 'bottomCenter') { + position = PLUGIN_NAME + '-wrapper-bottomCenter'; } - else if(settings.position == 'topLeft' || settings.position == 'topRight' || settings.position == 'topCenter'){ - position = PLUGIN_NAME+'-wrapper-topCenter'; + else if (settings.position == 'topLeft' || settings.position == 'topRight' || settings.position == 'topCenter') { + position = PLUGIN_NAME + '-wrapper-topCenter'; } else { - position = PLUGIN_NAME+'-wrapper-center'; + position = PLUGIN_NAME + '-wrapper-center'; } } else { - position = PLUGIN_NAME+'-wrapper-'+position; + position = PLUGIN_NAME + '-wrapper-' + position; } - $DOM.wrapper = document.querySelector('.' + PLUGIN_NAME + '-wrapper.'+position); + $DOM.wrapper = document.querySelector('.' + PLUGIN_NAME + '-wrapper.' + position); - if(!$DOM.wrapper) { + if (!$DOM.wrapper) { $DOM.wrapper = document.createElement('div'); $DOM.wrapper.classList.add(PLUGIN_NAME + '-wrapper'); $DOM.wrapper.classList.add(position); document.body.appendChild($DOM.wrapper); } - if(settings.position == 'topLeft' || settings.position == 'topCenter' || settings.position == 'topRight'){ + if (settings.position == 'topLeft' || settings.position == 'topCenter' || settings.position == 'topRight') { $DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild); } else { $DOM.wrapper.appendChild($DOM.toastCapsule); } } - if(!isNaN(settings.zindex)) { + if (!isNaN(settings.zindex)) { $DOM.wrapper.style.zIndex = settings.zindex; } else { - console.warn('['+PLUGIN_NAME+'] Invalid zIndex.'); + console.warn('[' + PLUGIN_NAME + '] Invalid zIndex.'); } })(); // Overlay - (function(){ + (function () { - if(settings.overlay) { + if (settings.overlay) { - if( document.querySelector('.'+PLUGIN_NAME+'-overlay.fadeIn') !== null ){ + if (document.querySelector('.' + PLUGIN_NAME + '-overlay.fadeIn') !== null) { - $DOM.overlay = document.querySelector('.'+PLUGIN_NAME+'-overlay'); + $DOM.overlay = document.querySelector('.' + PLUGIN_NAME + '-overlay'); $DOM.overlay.setAttribute('data-iziToast-ref', $DOM.overlay.getAttribute('data-iziToast-ref') + ',' + settings.ref); - if(!isNaN(settings.zindex) && settings.zindex !== null) { - $DOM.overlay.style.zIndex = settings.zindex-1; + if (!isNaN(settings.zindex) && settings.zindex !== null) { + $DOM.overlay.style.zIndex = settings.zindex - 1; } } else { - $DOM.overlay.classList.add(PLUGIN_NAME+'-overlay'); + $DOM.overlay.classList.add(PLUGIN_NAME + '-overlay'); $DOM.overlay.classList.add('fadeIn'); $DOM.overlay.style.background = settings.overlayColor; $DOM.overlay.setAttribute('data-iziToast-ref', settings.ref); - if(!isNaN(settings.zindex) && settings.zindex !== null) { - $DOM.overlay.style.zIndex = settings.zindex-1; + if (!isNaN(settings.zindex) && settings.zindex !== null) { + $DOM.overlay.style.zIndex = settings.zindex - 1; } document.querySelector('body').appendChild($DOM.overlay); } - if(settings.overlayClose) { + if (settings.overlayClose) { $DOM.overlay.removeEventListener('click', {}); $DOM.overlay.addEventListener('click', function (e) { @@ -1094,45 +1094,45 @@ } else { $DOM.overlay.removeEventListener('click', {}); } - } + } })(); // Inside animations - (function(){ - if(settings.animateInside){ - $DOM.toast.classList.add(PLUGIN_NAME+'-animateInside'); - + (function () { + if (settings.animateInside) { + $DOM.toast.classList.add(PLUGIN_NAME + '-animateInside'); + var animationTimes = [200, 100, 300]; - if(settings.transitionIn == 'bounceInLeft' || settings.transitionIn == 'bounceInRight'){ + if (settings.transitionIn == 'bounceInLeft' || settings.transitionIn == 'bounceInRight') { animationTimes = [400, 200, 400]; } - if(settings.title.length > 0) { - setTimeout(function(){ + if (settings.title.length > 0) { + setTimeout(function () { $DOM.strong.classList.add('slideIn'); }, animationTimes[0]); } - if(settings.message.length > 0) { - setTimeout(function(){ + if (settings.message.length > 0) { + setTimeout(function () { $DOM.p.classList.add('slideIn'); }, animationTimes[1]); } - if(settings.icon || settings.iconUrl) { - setTimeout(function(){ + if (settings.icon || settings.iconUrl) { + setTimeout(function () { $DOM.icon.classList.add('revealIn'); }, animationTimes[2]); } var counter = 150; - if(settings.buttons.length > 0 && $DOM.buttons) { + if (settings.buttons.length > 0 && $DOM.buttons) { - setTimeout(function(){ + setTimeout(function () { - forEach($DOM.buttons.childNodes, function(element, index) { + forEach($DOM.buttons.childNodes, function (element, index) { - setTimeout(function(){ + setTimeout(function () { element.classList.add('revealIn'); }, counter); counter = counter + 150; @@ -1141,11 +1141,11 @@ }, settings.inputs.length > 0 ? 150 : 0); } - if(settings.inputs.length > 0 && $DOM.inputs) { + if (settings.inputs.length > 0 && $DOM.inputs) { counter = 150; - forEach($DOM.inputs.childNodes, function(element, index) { + forEach($DOM.inputs.childNodes, function (element, index) { - setTimeout(function(){ + setTimeout(function () { element.classList.add('revealIn'); }, counter); counter = counter + 150; @@ -1157,69 +1157,69 @@ settings.onOpening.apply(null, [settings, $DOM.toast]); try { - var event = new CustomEvent(PLUGIN_NAME + '-opening', {detail: settings, bubbles: true, cancelable: true}); + var event = new CustomEvent(PLUGIN_NAME + '-opening', { detail: settings, bubbles: true, cancelable: true }); document.dispatchEvent(event); - } catch(ex){ + } catch (ex) { console.warn(ex); } - setTimeout(function() { + setTimeout(function () { - $DOM.toast.classList.remove(PLUGIN_NAME+'-opening'); - $DOM.toast.classList.add(PLUGIN_NAME+'-opened'); + $DOM.toast.classList.remove(PLUGIN_NAME + '-opening'); + $DOM.toast.classList.add(PLUGIN_NAME + '-opened'); try { - var event = new CustomEvent(PLUGIN_NAME + '-opened', {detail: settings, bubbles: true, cancelable: true}); + var event = new CustomEvent(PLUGIN_NAME + '-opened', { detail: settings, bubbles: true, cancelable: true }); document.dispatchEvent(event); - } catch(ex){ + } catch (ex) { console.warn(ex); } settings.onOpened.apply(null, [settings, $DOM.toast]); }, 1000); - if(settings.drag){ + if (settings.drag) { - if(ACCEPTSTOUCH) { + if (ACCEPTSTOUCH) { - $DOM.toast.addEventListener('touchstart', function(e) { - drag.startMoving(this, that, settings, e); - }, false); + $DOM.toast.addEventListener('touchstart', function (e) { + drag.startMoving(this, that, settings, e); + }, false); - $DOM.toast.addEventListener('touchend', function(e) { - drag.stopMoving(this, e); - }, false); + $DOM.toast.addEventListener('touchend', function (e) { + drag.stopMoving(this, e); + }, false); } else { - $DOM.toast.addEventListener('mousedown', function(e) { - e.preventDefault(); - drag.startMoving(this, that, settings, e); - }, false); + $DOM.toast.addEventListener('mousedown', function (e) { + e.preventDefault(); + drag.startMoving(this, that, settings, e); + }, false); - $DOM.toast.addEventListener('mouseup', function(e) { - e.preventDefault(); - drag.stopMoving(this, e); - }, false); + $DOM.toast.addEventListener('mouseup', function (e) { + e.preventDefault(); + drag.stopMoving(this, e); + }, false); } } - if(settings.closeOnEscape) { + if (settings.closeOnEscape) { document.addEventListener('keyup', function (evt) { evt = evt || window.event; - if(evt.keyCode == 27) { - that.hide(settings, $DOM.toast, 'esc'); + if (evt.keyCode == 27) { + that.hide(settings, $DOM.toast, 'esc'); } }); } - if(settings.closeOnClick) { + if (settings.closeOnClick) { $DOM.toast.addEventListener('click', function (evt) { that.hide(settings, $DOM.toast, 'toast'); }); } - that.toast = $DOM.toast; + that.toast = $DOM.toast; }; return $iziToast; }); \ No newline at end of file diff --git a/component/pear/pear.js b/component/pear/pear.js index 2b5ba63..e20998a 100644 --- a/component/pear/pear.js +++ b/component/pear/pear.js @@ -9,13 +9,18 @@ layui.config({ base: rootPath + "module/", version: "3.40.0" }).extend({ - admin: "admin", // 框架布局组件 + admin: "core/admin", + page: "core/page", + tabPage: "core/tabPage", + menu: "core/menu", + + echarts: "extends/echarts", + echartsTheme: "extends/echartsTheme", + yaml:"extends/yaml", + nprogress: "extends/nprogress", + toast: "extends/toast", + common: "common", // 公共方法封装 - menu: "menu", // 数据菜单组件 - frame: "frame", // 内容页面组件 - tab: "tab", // 多选项卡组件 - echarts: "echarts", // 数据图表组件 - echartsTheme: "echartsTheme",// 数据图表主题 encrypt: "encrypt", // 数据加密组件 select: "select", // 下拉多选组件 notice: "notice", // 消息提示组件 @@ -28,19 +33,15 @@ layui.config({ count:"count", // 数字滚动 topBar: "topBar", // 置顶组件 button: "button", // 加载按钮 - design: "design", // 表单设计 card: "card", // 数据卡片组件 loading: "loading", // 加载组件 cropper:"cropper", // 裁剪组件 convert:"convert", // 数据转换 - yaml:"yaml", // yaml 解析组件 context: "context", // 上下文组件 http: "http", // 网络请求组件 theme: "theme", // 主题转换 message: "message", // 通知组件 - toast: "toast", // 消息通知 iconPicker: "iconPicker", // 图标选择 - nprogress: "nprogress", // 进度过渡 watermark:"watermark/watermark", //水印组件 fullscreen:"fullscreen", //全屏组件 popover:"popover/popover", //汽泡组件 diff --git a/index.html b/index.html index c0f89f9..b425d4e 100644 --- a/index.html +++ b/index.html @@ -95,8 +95,7 @@ admin.setConfigurationPath("config/pear.config.yml"); admin.render(); - - // 登出逻辑 + admin.logout(function(){ popup.success("注销成功",function(){ diff --git a/login.html b/login.html index 0631748..dd946aa 100644 --- a/login.html +++ b/login.html @@ -1,71 +1,77 @@ - - - - 登录 - - - - - - -
                                      -
                                      - -
                                      Pear Admin
                                      -
                                      - 致 力 于 让 " Web " 开 发 变 得 简 单 优 雅 + + + + + 登录 + + + + + + + + +
                                      +
                                      +
                                      +
                                      +
                                      -
                                      - -
                                      -
                                      - -
                                      -
                                      - - -
                                      -
                                      - -
                                      -
                                      - +
                                      +
                                      +
                                      +
                                      + +
                                      +
                                      - - - - - - +
                                      +
                                      + + +
                                      +
                                      + +
                                      +
                                      + +
                                      + + + + + + + \ No newline at end of file diff --git a/view/components/toast.html b/view/components/toast.html new file mode 100644 index 0000000..ad94396 --- /dev/null +++ b/view/components/toast.html @@ -0,0 +1,146 @@ + + + + + + + 通知组件 + + +
                                      +
                                      +
                                      +
                                      +
                                      简单使用
                                      +
                                      + + + + + +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      + 不同位置 +
                                      +
                                      + + + + + + +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      + 消息移除 +
                                      +
                                      + +
                                      +
                                      +
                                      +
                                      +
                                      + + + + \ No newline at end of file diff --git a/view/exception/403.html b/view/exception/403.html new file mode 100644 index 0000000..e69de29 diff --git a/view/exception/404.html b/view/exception/404.html new file mode 100644 index 0000000..e69de29 diff --git a/view/exception/500.html b/view/exception/500.html new file mode 100644 index 0000000..e69de29 -- Gitee From 8b1da31d66feddfa4e6d6a4f5750287bc37f0d49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Fri, 23 Jun 2023 14:57:57 +0800 Subject: [PATCH 05/67] update --- admin/css/admin.css | 127 +- admin/css/admin.dark.css | 83 + admin/css/loader.css | 105 - component/pear/css/module/code.css | 9 - component/pear/css/module/cropper.css | 272 - component/pear/css/module/form.css | 74 - component/pear/css/module/iconPicker.css | 11 - component/pear/css/module/layout.css | 2 +- component/pear/css/module/notice.css | 228 - component/pear/css/module/popover.min.css | 1 - component/pear/css/module/select.css | 822 - component/pear/css/module/step.css | 88 - component/pear/css/module/tab.css | 7 +- component/pear/module/area.js | 4070 -- component/pear/module/core/admin.js | 140 +- .../{message.js => core/messageCenter.js} | 2 +- component/pear/module/core/page.js | 2 +- component/pear/module/core/tabPage.js | 73 +- component/pear/module/cropper.js | 3087 -- component/pear/module/darkreader.js | 7579 ---- component/pear/module/encrypt.js | 1775 - component/pear/module/http.js | 181 - component/pear/module/iconPicker.js | 525 - component/pear/module/notice.js | 489 - component/pear/module/popover/popover.js | 1218 - component/pear/module/select.js | 1740 - component/pear/module/theme.js | 1 - component/pear/module/tinymce/tinymce.js | 213 - .../tinymce/tinymce/icons/default/icons.js | 172 - .../tinymce/icons/default/icons.min.js | 1 - .../module/tinymce/tinymce/langs/readme.md | 3 - .../module/tinymce/tinymce/langs/zh_CN.js | 419 - .../tinymce/tinymce/plugins/advlist/plugin.js | 278 - .../tinymce/plugins/advlist/plugin.min.js | 9 - .../tinymce/tinymce/plugins/anchor/plugin.js | 216 - .../tinymce/plugins/anchor/plugin.min.js | 9 - .../tinymce/plugins/autolink/plugin.js | 185 - .../tinymce/plugins/autolink/plugin.min.js | 9 - .../tinymce/plugins/autoresize/plugin.js | 171 - .../tinymce/plugins/autoresize/plugin.min.js | 9 - .../tinymce/plugins/autosave/plugin.js | 212 - .../tinymce/plugins/autosave/plugin.min.js | 9 - .../tinymce/tinymce/plugins/bbcode/plugin.js | 99 - .../tinymce/plugins/bbcode/plugin.min.js | 9 - .../tinymce/tinymce/plugins/charmap/plugin.js | 1706 - .../tinymce/plugins/charmap/plugin.min.js | 9 - .../tinymce/tinymce/plugins/code/plugin.js | 92 - .../tinymce/plugins/code/plugin.min.js | 9 - .../tinymce/plugins/codesample/plugin.js | 2104 - .../tinymce/plugins/codesample/plugin.min.js | 9 - .../tinymce/plugins/colorpicker/plugin.js | 22 - .../tinymce/plugins/colorpicker/plugin.min.js | 9 - .../tinymce/plugins/contextmenu/plugin.js | 22 - .../tinymce/plugins/contextmenu/plugin.min.js | 9 - .../tinymce/plugins/directionality/plugin.js | 314 - .../plugins/directionality/plugin.min.js | 9 - .../plugins/emoticons/js/emojiimages.js | 9424 ----- .../plugins/emoticons/js/emojiimages.min.js | 3 - .../tinymce/plugins/emoticons/js/emojis.js | 9423 ----- .../plugins/emoticons/js/emojis.min.js | 2 - .../tinymce/plugins/emoticons/plugin.js | 605 - .../tinymce/plugins/emoticons/plugin.min.js | 9 - .../tinymce/plugins/fullpage/plugin.js | 544 - .../tinymce/plugins/fullpage/plugin.min.js | 9 - .../tinymce/plugins/fullscreen/plugin.js | 979 - .../tinymce/plugins/fullscreen/plugin.min.js | 9 - .../tinymce/tinymce/plugins/help/plugin.js | 846 - .../tinymce/plugins/help/plugin.min.js | 9 - .../tinymce/tinymce/plugins/hr/plugin.js | 46 - .../tinymce/tinymce/plugins/hr/plugin.min.js | 9 - .../tinymce/tinymce/plugins/image/plugin.js | 1664 - .../tinymce/plugins/image/plugin.min.js | 9 - .../tinymce/plugins/imagetools/plugin.js | 1348 - .../tinymce/plugins/imagetools/plugin.min.js | 9 - .../tinymce/plugins/importcss/plugin.js | 343 - .../tinymce/plugins/importcss/plugin.min.js | 9 - .../tinymce/plugins/indent2em/plugin.js | 62 - .../tinymce/plugins/indent2em/plugin.min.js | 62 - .../tinymce/plugins/insertdatetime/plugin.js | 177 - .../plugins/insertdatetime/plugin.min.js | 9 - .../plugins/kityformula-editor/icon.svg | 3 - .../kityformula-editor/kityFormula.html | 111 - .../assets/images/scrollbar/custom/bar-bg.png | Bin 925 -> 0 bytes .../assets/images/scrollbar/custom/bar.png | Bin 1067 -> 0 bytes .../assets/images/scrollbar/custom/bg.png | Bin 945 -> 0 bytes .../assets/images/scrollbar/custom/bottom.png | Bin 1003 -> 0 bytes .../assets/images/scrollbar/custom/btn.png | Bin 926 -> 0 bytes .../assets/images/scrollbar/custom/down.png | Bin 926 -> 0 bytes .../assets/images/scrollbar/custom/top.png | Bin 996 -> 0 bytes .../assets/images/scrollbar/custom/up.png | Bin 926 -> 0 bytes .../assets/images/scrollbar/edit/bar-bg.png | Bin 938 -> 0 bytes .../assets/images/scrollbar/edit/bar-left.png | Bin 982 -> 0 bytes .../images/scrollbar/edit/bar-right.png | Bin 994 -> 0 bytes .../assets/images/scrollbar/edit/thumb-bg.png | Bin 941 -> 0 bytes .../images/scrollbar/edit/thumb-left.png | Bin 983 -> 0 bytes .../images/scrollbar/edit/thumb-right.png | Bin 988 -> 0 bytes .../images/toolbar/alphabetic/aleph.png | Bin 559 -> 0 bytes .../assets/images/toolbar/alphabetic/bbbk.png | Bin 519 -> 0 bytes .../assets/images/toolbar/alphabetic/beth.png | Bin 317 -> 0 bytes .../images/toolbar/alphabetic/circleds.png | Bin 874 -> 0 bytes .../images/toolbar/alphabetic/complement.png | Bin 371 -> 0 bytes .../images/toolbar/alphabetic/daleth.png | Bin 305 -> 0 bytes .../assets/images/toolbar/alphabetic/ell.png | Bin 467 -> 0 bytes .../assets/images/toolbar/alphabetic/eth.png | Bin 552 -> 0 bytes .../assets/images/toolbar/alphabetic/finv.png | Bin 239 -> 0 bytes .../assets/images/toolbar/alphabetic/game.png | Bin 492 -> 0 bytes .../images/toolbar/alphabetic/gimel.png | Bin 364 -> 0 bytes .../assets/images/toolbar/alphabetic/hbar.png | Bin 516 -> 0 bytes .../images/toolbar/alphabetic/hslash.png | Bin 542 -> 0 bytes .../assets/images/toolbar/alphabetic/im.png | Bin 571 -> 0 bytes .../assets/images/toolbar/alphabetic/mho.png | Bin 573 -> 0 bytes .../images/toolbar/alphabetic/partial.png | Bin 546 -> 0 bytes .../assets/images/toolbar/alphabetic/re.png | Bin 702 -> 0 bytes .../assets/images/toolbar/alphabetic/wp.png | Bin 524 -> 0 bytes .../images/toolbar/arrow/circlearrowleft.png | Bin 337 -> 0 bytes .../images/toolbar/arrow/circlearrowright.png | Bin 351 -> 0 bytes .../images/toolbar/arrow/curvearrowleft.png | Bin 347 -> 0 bytes .../images/toolbar/arrow/curvearrowright.png | Bin 338 -> 0 bytes .../assets/images/toolbar/arrow/downarrow.png | Bin 255 -> 0 bytes .../images/toolbar/arrow/downdownarrows.png | Bin 268 -> 0 bytes .../images/toolbar/arrow/downharpoonleft.png | Bin 190 -> 0 bytes .../images/toolbar/arrow/downharpoonright.png | Bin 191 -> 0 bytes .../assets/images/toolbar/arrow/gets.png | Bin 252 -> 0 bytes .../images/toolbar/arrow/leftarrowtail.png | Bin 259 -> 0 bytes .../images/toolbar/arrow/leftharpoondown.png | Bin 186 -> 0 bytes .../images/toolbar/arrow/leftharpoonup.png | Bin 187 -> 0 bytes .../images/toolbar/arrow/leftleftarrows.png | Bin 269 -> 0 bytes .../images/toolbar/arrow/leftrightarrow.png | Bin 309 -> 0 bytes .../images/toolbar/arrow/leftrightarrows.png | Bin 294 -> 0 bytes .../toolbar/arrow/leftrightharpoons.png | Bin 268 -> 0 bytes .../toolbar/arrow/leftrightsquigarrow.png | Bin 346 -> 0 bytes .../images/toolbar/arrow/longleftarrow.png | Bin 269 -> 0 bytes .../toolbar/arrow/longleftrightarrow.png | Bin 297 -> 0 bytes .../images/toolbar/arrow/longrightarrow.png | Bin 285 -> 0 bytes .../images/toolbar/arrow/looparrowleft.png | Bin 332 -> 0 bytes .../images/toolbar/arrow/looparrowright.png | Bin 339 -> 0 bytes .../assets/images/toolbar/arrow/multimap.png | Bin 254 -> 0 bytes .../assets/images/toolbar/arrow/nearrow.png | Bin 319 -> 0 bytes .../images/toolbar/arrow/nleftarrow.png | Bin 276 -> 0 bytes .../images/toolbar/arrow/nrightarrow.png | Bin 286 -> 0 bytes .../assets/images/toolbar/arrow/nwarrow.png | Bin 324 -> 0 bytes .../images/toolbar/arrow/rightarrowtail.png | Bin 250 -> 0 bytes .../images/toolbar/arrow/rightharpoondown.png | Bin 194 -> 0 bytes .../images/toolbar/arrow/rightharpoonup.png | Bin 185 -> 0 bytes .../images/toolbar/arrow/rightleftarrows.png | Bin 278 -> 0 bytes .../toolbar/arrow/rightleftharpoons.png | Bin 277 -> 0 bytes .../images/toolbar/arrow/rightrightarrows.png | Bin 266 -> 0 bytes .../images/toolbar/arrow/rightsquigarrow.png | Bin 304 -> 0 bytes .../assets/images/toolbar/arrow/searrow.png | Bin 317 -> 0 bytes .../assets/images/toolbar/arrow/swarrow.png | Bin 292 -> 0 bytes .../assets/images/toolbar/arrow/to.png | Bin 279 -> 0 bytes .../images/toolbar/arrow/twoheadleftarrow.png | Bin 266 -> 0 bytes .../toolbar/arrow/twoheadrightarrow.png | Bin 262 -> 0 bytes .../images/toolbar/arrow/u-downarrow.png | Bin 285 -> 0 bytes .../images/toolbar/arrow/u-leftarrow.png | Bin 275 -> 0 bytes .../images/toolbar/arrow/u-leftrightarrow.png | Bin 341 -> 0 bytes .../images/toolbar/arrow/u-lftarrow.png | Bin 277 -> 0 bytes .../images/toolbar/arrow/u-lleftarrow.png | Bin 305 -> 0 bytes .../images/toolbar/arrow/u-longleftarrow.png | Bin 281 -> 0 bytes .../toolbar/arrow/u-longleftrightarrow.png | Bin 330 -> 0 bytes .../images/toolbar/arrow/u-longrightarrow.png | Bin 288 -> 0 bytes .../assets/images/toolbar/arrow/u-lsh.png | Bin 252 -> 0 bytes .../images/toolbar/arrow/u-nleftarrow.png | Bin 350 -> 0 bytes .../toolbar/arrow/u-nleftrightarrow.png | Bin 400 -> 0 bytes .../images/toolbar/arrow/u-nrightarrow.png | Bin 349 -> 0 bytes .../images/toolbar/arrow/u-rightarrow.png | Bin 292 -> 0 bytes .../images/toolbar/arrow/u-rrightarrow.png | Bin 314 -> 0 bytes .../assets/images/toolbar/arrow/u-rsh.png | Bin 255 -> 0 bytes .../assets/images/toolbar/arrow/u-uparrow.png | Bin 282 -> 0 bytes .../images/toolbar/arrow/u-updownarrow.png | Bin 338 -> 0 bytes .../assets/images/toolbar/arrow/uparrow.png | Bin 251 -> 0 bytes .../images/toolbar/arrow/updownarrow.png | Bin 302 -> 0 bytes .../images/toolbar/arrow/upharpoonleft.png | Bin 188 -> 0 bytes .../images/toolbar/arrow/upharpoonright.png | Bin 200 -> 0 bytes .../images/toolbar/arrow/upuparrows.png | Bin 281 -> 0 bytes .../assets/images/toolbar/brackets/1.png | Bin 748 -> 0 bytes .../assets/images/toolbar/brackets/2.png | Bin 634 -> 0 bytes .../assets/images/toolbar/brackets/3.png | Bin 813 -> 0 bytes .../assets/images/toolbar/brackets/4.png | Bin 635 -> 0 bytes .../kityformula/assets/images/toolbar/btn.png | Bin 6784 -> 0 bytes .../assets/images/toolbar/button/brackets.png | Bin 1284 -> 0 bytes .../assets/images/toolbar/button/down.png | Bin 979 -> 0 bytes .../assets/images/toolbar/button/frac.png | Bin 801 -> 0 bytes .../assets/images/toolbar/button/fx.png | Bin 1738 -> 0 bytes .../assets/images/toolbar/button/int.png | Bin 4273 -> 0 bytes .../assets/images/toolbar/button/lim.png | Bin 4273 -> 0 bytes .../assets/images/toolbar/button/open.png | Bin 983 -> 0 bytes .../assets/images/toolbar/button/script.png | Bin 1311 -> 0 bytes .../assets/images/toolbar/button/sin.png | Bin 1084 -> 0 bytes .../assets/images/toolbar/button/sqrt.png | Bin 1381 -> 0 bytes .../assets/images/toolbar/button/sum.png | Bin 4273 -> 0 bytes .../assets/images/toolbar/button/tick.png | Bin 2960 -> 0 bytes .../assets/images/toolbar/button/up.png | Bin 969 -> 0 bytes .../assets/images/toolbar/char.png | Bin 89633 -> 0 bytes .../assets/images/toolbar/char/bb/a.png | Bin 609 -> 0 bytes .../assets/images/toolbar/char/bb/b.png | Bin 617 -> 0 bytes .../assets/images/toolbar/char/bb/c.png | Bin 582 -> 0 bytes .../assets/images/toolbar/char/bb/d.png | Bin 525 -> 0 bytes .../assets/images/toolbar/char/bb/e.png | Bin 543 -> 0 bytes .../assets/images/toolbar/char/bb/f.png | Bin 500 -> 0 bytes .../assets/images/toolbar/char/bb/g.png | Bin 706 -> 0 bytes .../assets/images/toolbar/char/bb/h.png | Bin 537 -> 0 bytes .../assets/images/toolbar/char/bb/i.png | Bin 319 -> 0 bytes .../assets/images/toolbar/char/bb/j.png | Bin 388 -> 0 bytes .../assets/images/toolbar/char/bb/k.png | Bin 719 -> 0 bytes .../assets/images/toolbar/char/bb/l.png | Bin 376 -> 0 bytes .../assets/images/toolbar/char/bb/m.png | Bin 778 -> 0 bytes .../assets/images/toolbar/char/bb/n.png | Bin 644 -> 0 bytes .../assets/images/toolbar/char/bb/o.png | Bin 680 -> 0 bytes .../assets/images/toolbar/char/bb/p.png | Bin 483 -> 0 bytes .../assets/images/toolbar/char/bb/q.png | Bin 825 -> 0 bytes .../assets/images/toolbar/char/bb/r.png | Bin 579 -> 0 bytes .../assets/images/toolbar/char/bb/s.png | Bin 665 -> 0 bytes .../assets/images/toolbar/char/bb/t.png | Bin 448 -> 0 bytes .../assets/images/toolbar/char/bb/u.png | Bin 468 -> 0 bytes .../assets/images/toolbar/char/bb/v.png | Bin 580 -> 0 bytes .../assets/images/toolbar/char/bb/w.png | Bin 861 -> 0 bytes .../assets/images/toolbar/char/bb/x.png | Bin 709 -> 0 bytes .../assets/images/toolbar/char/bb/y.png | Bin 556 -> 0 bytes .../assets/images/toolbar/char/bb/z.png | Bin 565 -> 0 bytes .../assets/images/toolbar/char/cal/a.png | Bin 499 -> 0 bytes .../assets/images/toolbar/char/cal/b.png | Bin 599 -> 0 bytes .../assets/images/toolbar/char/cal/c.png | Bin 482 -> 0 bytes .../assets/images/toolbar/char/cal/d.png | Bin 581 -> 0 bytes .../assets/images/toolbar/char/cal/e.png | Bin 471 -> 0 bytes .../assets/images/toolbar/char/cal/f.png | Bin 483 -> 0 bytes .../assets/images/toolbar/char/cal/g.png | Bin 579 -> 0 bytes .../assets/images/toolbar/char/cal/h.png | Bin 599 -> 0 bytes .../assets/images/toolbar/char/cal/i.png | Bin 467 -> 0 bytes .../assets/images/toolbar/char/cal/j.png | Bin 531 -> 0 bytes .../assets/images/toolbar/char/cal/k.png | Bin 600 -> 0 bytes .../assets/images/toolbar/char/cal/l.png | Bin 493 -> 0 bytes .../assets/images/toolbar/char/cal/m.png | Bin 722 -> 0 bytes .../assets/images/toolbar/char/cal/n.png | Bin 623 -> 0 bytes .../assets/images/toolbar/char/cal/o.png | Bin 597 -> 0 bytes .../assets/images/toolbar/char/cal/p.png | Bin 581 -> 0 bytes .../assets/images/toolbar/char/cal/q.png | Bin 663 -> 0 bytes .../assets/images/toolbar/char/cal/r.png | Bin 641 -> 0 bytes .../assets/images/toolbar/char/cal/s.png | Bin 527 -> 0 bytes .../assets/images/toolbar/char/cal/t.png | Bin 431 -> 0 bytes .../assets/images/toolbar/char/cal/u.png | Bin 603 -> 0 bytes .../assets/images/toolbar/char/cal/v.png | Bin 518 -> 0 bytes .../assets/images/toolbar/char/cal/w.png | Bin 759 -> 0 bytes .../assets/images/toolbar/char/cal/x.png | Bin 546 -> 0 bytes .../assets/images/toolbar/char/cal/y.png | Bin 559 -> 0 bytes .../assets/images/toolbar/char/cal/z.png | Bin 559 -> 0 bytes .../assets/images/toolbar/char/frak/a.png | Bin 393 -> 0 bytes .../assets/images/toolbar/char/frak/b.png | Bin 438 -> 0 bytes .../assets/images/toolbar/char/frak/c.png | Bin 330 -> 0 bytes .../assets/images/toolbar/char/frak/d.png | Bin 445 -> 0 bytes .../assets/images/toolbar/char/frak/e.png | Bin 356 -> 0 bytes .../assets/images/toolbar/char/frak/f.png | Bin 392 -> 0 bytes .../assets/images/toolbar/char/frak/g.png | Bin 480 -> 0 bytes .../assets/images/toolbar/char/frak/h.png | Bin 476 -> 0 bytes .../assets/images/toolbar/char/frak/i.png | Bin 296 -> 0 bytes .../assets/images/toolbar/char/frak/j.png | Bin 320 -> 0 bytes .../assets/images/toolbar/char/frak/k.png | Bin 448 -> 0 bytes .../assets/images/toolbar/char/frak/l.png | Bin 312 -> 0 bytes .../assets/images/toolbar/char/frak/m.png | Bin 450 -> 0 bytes .../assets/images/toolbar/char/frak/n.png | Bin 382 -> 0 bytes .../assets/images/toolbar/char/frak/o.png | Bin 382 -> 0 bytes .../assets/images/toolbar/char/frak/p.png | Bin 462 -> 0 bytes .../assets/images/toolbar/char/frak/q.png | Bin 439 -> 0 bytes .../assets/images/toolbar/char/frak/r.png | Bin 328 -> 0 bytes .../assets/images/toolbar/char/frak/s.png | Bin 405 -> 0 bytes .../assets/images/toolbar/char/frak/t.png | Bin 296 -> 0 bytes .../assets/images/toolbar/char/frak/u.png | Bin 389 -> 0 bytes .../assets/images/toolbar/char/frak/ua.png | Bin 653 -> 0 bytes .../assets/images/toolbar/char/frak/ub.png | Bin 707 -> 0 bytes .../assets/images/toolbar/char/frak/uc.png | Bin 517 -> 0 bytes .../assets/images/toolbar/char/frak/ud.png | Bin 658 -> 0 bytes .../assets/images/toolbar/char/frak/ue.png | Bin 566 -> 0 bytes .../assets/images/toolbar/char/frak/uf.png | Bin 616 -> 0 bytes .../assets/images/toolbar/char/frak/ug.png | Bin 662 -> 0 bytes .../assets/images/toolbar/char/frak/uh.png | Bin 574 -> 0 bytes .../assets/images/toolbar/char/frak/ui.png | Bin 483 -> 0 bytes .../assets/images/toolbar/char/frak/uj.png | Bin 533 -> 0 bytes .../assets/images/toolbar/char/frak/uk.png | Bin 577 -> 0 bytes .../assets/images/toolbar/char/frak/ul.png | Bin 537 -> 0 bytes .../assets/images/toolbar/char/frak/um.png | Bin 827 -> 0 bytes .../assets/images/toolbar/char/frak/un.png | Bin 686 -> 0 bytes .../assets/images/toolbar/char/frak/uo.png | Bin 606 -> 0 bytes .../assets/images/toolbar/char/frak/up.png | Bin 685 -> 0 bytes .../assets/images/toolbar/char/frak/uq.png | Bin 606 -> 0 bytes .../assets/images/toolbar/char/frak/ur.png | Bin 690 -> 0 bytes .../assets/images/toolbar/char/frak/us.png | Bin 674 -> 0 bytes .../assets/images/toolbar/char/frak/ut.png | Bin 562 -> 0 bytes .../assets/images/toolbar/char/frak/uu.png | Bin 532 -> 0 bytes .../assets/images/toolbar/char/frak/uv.png | Bin 696 -> 0 bytes .../assets/images/toolbar/char/frak/uw.png | Bin 847 -> 0 bytes .../assets/images/toolbar/char/frak/ux.png | Bin 575 -> 0 bytes .../assets/images/toolbar/char/frak/uy.png | Bin 726 -> 0 bytes .../assets/images/toolbar/char/frak/uz.png | Bin 527 -> 0 bytes .../assets/images/toolbar/char/frak/v.png | Bin 423 -> 0 bytes .../assets/images/toolbar/char/frak/w.png | Bin 496 -> 0 bytes .../assets/images/toolbar/char/frak/x.png | Bin 405 -> 0 bytes .../assets/images/toolbar/char/frak/y.png | Bin 450 -> 0 bytes .../assets/images/toolbar/char/frak/z.png | Bin 435 -> 0 bytes .../images/toolbar/char/greek/lower/alpha.png | Bin 339 -> 0 bytes .../images/toolbar/char/greek/lower/beta.png | Bin 382 -> 0 bytes .../images/toolbar/char/greek/lower/chi.png | Bin 344 -> 0 bytes .../images/toolbar/char/greek/lower/delta.png | Bin 329 -> 0 bytes .../toolbar/char/greek/lower/epsilon.png | Bin 265 -> 0 bytes .../images/toolbar/char/greek/lower/eta.png | Bin 311 -> 0 bytes .../images/toolbar/char/greek/lower/gamma.png | Bin 303 -> 0 bytes .../images/toolbar/char/greek/lower/iota.png | Bin 250 -> 0 bytes .../images/toolbar/char/greek/lower/kappa.png | Bin 304 -> 0 bytes .../toolbar/char/greek/lower/lambda.png | Bin 309 -> 0 bytes .../images/toolbar/char/greek/lower/mu.png | Bin 309 -> 0 bytes .../images/toolbar/char/greek/lower/nu.png | Bin 287 -> 0 bytes .../images/toolbar/char/greek/lower/omega.png | Bin 307 -> 0 bytes .../toolbar/char/greek/lower/omicron.png | Bin 298 -> 0 bytes .../images/toolbar/char/greek/lower/phi.png | Bin 369 -> 0 bytes .../images/toolbar/char/greek/lower/pi.png | Bin 276 -> 0 bytes .../images/toolbar/char/greek/lower/psi.png | Bin 362 -> 0 bytes .../images/toolbar/char/greek/lower/rho.png | Bin 328 -> 0 bytes .../images/toolbar/char/greek/lower/sigma.png | Bin 288 -> 0 bytes .../images/toolbar/char/greek/lower/tau.png | Bin 255 -> 0 bytes .../images/toolbar/char/greek/lower/theta.png | Bin 370 -> 0 bytes .../toolbar/char/greek/lower/upsilon.png | Bin 312 -> 0 bytes .../images/toolbar/char/greek/lower/xi.png | Bin 358 -> 0 bytes .../images/toolbar/char/greek/lower/zeta.png | Bin 322 -> 0 bytes .../toolbar/char/greek/misc/digamma.png | Bin 336 -> 0 bytes .../toolbar/char/greek/misc/varepsilon.png | Bin 375 -> 0 bytes .../toolbar/char/greek/misc/varkappa.png | Bin 446 -> 0 bytes .../images/toolbar/char/greek/misc/varphi.png | Bin 520 -> 0 bytes .../images/toolbar/char/greek/misc/varpi.png | Bin 476 -> 0 bytes .../images/toolbar/char/greek/misc/varrho.png | Bin 503 -> 0 bytes .../toolbar/char/greek/misc/varsigma.png | Bin 360 -> 0 bytes .../toolbar/char/greek/misc/vartheta.png | Bin 532 -> 0 bytes .../images/toolbar/char/greek/upper/alpha.png | Bin 349 -> 0 bytes .../images/toolbar/char/greek/upper/beta.png | Bin 326 -> 0 bytes .../images/toolbar/char/greek/upper/chi.png | Bin 364 -> 0 bytes .../images/toolbar/char/greek/upper/delta.png | Bin 332 -> 0 bytes .../toolbar/char/greek/upper/epsilon.png | Bin 319 -> 0 bytes .../images/toolbar/char/greek/upper/eta.png | Bin 265 -> 0 bytes .../images/toolbar/char/greek/upper/gamma.png | Bin 255 -> 0 bytes .../images/toolbar/char/greek/upper/iota.png | Bin 223 -> 0 bytes .../images/toolbar/char/greek/upper/kappa.png | Bin 364 -> 0 bytes .../toolbar/char/greek/upper/lambda.png | Bin 324 -> 0 bytes .../images/toolbar/char/greek/upper/mu.png | Bin 372 -> 0 bytes .../images/toolbar/char/greek/upper/nu.png | Bin 353 -> 0 bytes .../images/toolbar/char/greek/upper/omega.png | Bin 409 -> 0 bytes .../toolbar/char/greek/upper/omicron.png | Bin 370 -> 0 bytes .../images/toolbar/char/greek/upper/phi.png | Bin 364 -> 0 bytes .../images/toolbar/char/greek/upper/pi.png | Bin 250 -> 0 bytes .../images/toolbar/char/greek/upper/psi.png | Bin 344 -> 0 bytes .../images/toolbar/char/greek/upper/rho.png | Bin 293 -> 0 bytes .../images/toolbar/char/greek/upper/sigma.png | Bin 342 -> 0 bytes .../images/toolbar/char/greek/upper/tau.png | Bin 285 -> 0 bytes .../images/toolbar/char/greek/upper/theta.png | Bin 392 -> 0 bytes .../toolbar/char/greek/upper/upsilon.png | Bin 297 -> 0 bytes .../images/toolbar/char/greek/upper/xi.png | Bin 258 -> 0 bytes .../images/toolbar/char/greek/upper/zeta.png | Bin 364 -> 0 bytes .../assets/images/toolbar/char/math/aleph.png | Bin 551 -> 0 bytes .../images/toolbar/char/math/approx.png | Bin 494 -> 0 bytes .../assets/images/toolbar/char/math/ast.png | Bin 363 -> 0 bytes .../images/toolbar/char/math/baifenhao.png | Bin 690 -> 0 bytes .../images/toolbar/char/math/because.png | Bin 262 -> 0 bytes .../assets/images/toolbar/char/math/beth.png | Bin 324 -> 0 bytes .../images/toolbar/char/math/blacksquare.png | Bin 194 -> 0 bytes .../assets/images/toolbar/char/math/cap.png | Bin 318 -> 0 bytes .../assets/images/toolbar/char/math/cdot.png | Bin 187 -> 0 bytes .../assets/images/toolbar/char/math/circ.png | Bin 362 -> 0 bytes .../assets/images/toolbar/char/math/cong.png | Bin 424 -> 0 bytes .../assets/images/toolbar/char/math/cup.png | Bin 313 -> 0 bytes .../assets/images/toolbar/char/math/ddots.png | Bin 275 -> 0 bytes .../assets/images/toolbar/char/math/div.png | Bin 227 -> 0 bytes .../images/toolbar/char/math/downarrow.png | Bin 320 -> 0 bytes .../assets/images/toolbar/char/math/eq.png | Bin 176 -> 0 bytes .../assets/images/toolbar/char/math/equiv.png | Bin 221 -> 0 bytes .../images/toolbar/char/math/exists.png | Bin 272 -> 0 bytes .../images/toolbar/char/math/forall.png | Bin 444 -> 0 bytes .../assets/images/toolbar/char/math/geq.png | Bin 310 -> 0 bytes .../assets/images/toolbar/char/math/gets.png | Bin 325 -> 0 bytes .../assets/images/toolbar/char/math/gg.png | Bin 334 -> 0 bytes .../assets/images/toolbar/char/math/gt.png | Bin 278 -> 0 bytes .../assets/images/toolbar/char/math/in.png | Bin 368 -> 0 bytes .../assets/images/toolbar/char/math/infty.png | Bin 399 -> 0 bytes .../toolbar/char/math/leftrightarrow.png | Bin 448 -> 0 bytes .../assets/images/toolbar/char/math/leq.png | Bin 288 -> 0 bytes .../assets/images/toolbar/char/math/ll.png | Bin 340 -> 0 bytes .../assets/images/toolbar/char/math/lt.png | Bin 278 -> 0 bytes .../assets/images/toolbar/char/math/minus.png | Bin 190 -> 0 bytes .../assets/images/toolbar/char/math/mp.png | Bin 225 -> 0 bytes .../assets/images/toolbar/char/math/neg.png | Bin 223 -> 0 bytes .../images/toolbar/char/math/nexists.png | Bin 508 -> 0 bytes .../assets/images/toolbar/char/math/ni.png | Bin 373 -> 0 bytes .../images/toolbar/char/math/partial.png | Bin 551 -> 0 bytes .../assets/images/toolbar/char/math/plus.png | Bin 265 -> 0 bytes .../assets/images/toolbar/char/math/pm.png | Bin 234 -> 0 bytes .../images/toolbar/char/math/propto.png | Bin 489 -> 0 bytes .../assets/images/toolbar/char/math/sim.png | Bin 261 -> 0 bytes .../assets/images/toolbar/char/math/simeq.png | Bin 307 -> 0 bytes .../assets/images/toolbar/char/math/surd.png | Bin 477 -> 0 bytes .../images/toolbar/char/math/tanhao.png | Bin 216 -> 0 bytes .../images/toolbar/char/math/therefore.png | Bin 253 -> 0 bytes .../assets/images/toolbar/char/math/times.png | Bin 245 -> 0 bytes .../assets/images/toolbar/char/math/to.png | Bin 333 -> 0 bytes .../images/toolbar/char/math/uparrow.png | Bin 320 -> 0 bytes .../images/toolbar/char/math/varnothing.png | Bin 584 -> 0 bytes .../assets/images/toolbar/char/math/vdots.png | Bin 266 -> 0 bytes .../assets/images/toolbar/char/not/gneqq.png | Bin 408 -> 0 bytes .../assets/images/toolbar/char/not/gnsim.png | Bin 443 -> 0 bytes .../assets/images/toolbar/char/not/lneqq.png | Bin 411 -> 0 bytes .../assets/images/toolbar/char/not/lnsim.png | Bin 447 -> 0 bytes .../images/toolbar/char/not/nbdash-1.png | Bin 289 -> 0 bytes .../assets/images/toolbar/char/not/ncong.png | Bin 658 -> 0 bytes .../assets/images/toolbar/char/not/neq.png | Bin 415 -> 0 bytes .../assets/images/toolbar/char/not/nequiv.png | Bin 463 -> 0 bytes .../images/toolbar/char/not/nexists.png | Bin 317 -> 0 bytes .../assets/images/toolbar/char/not/ngeq.png | Bin 526 -> 0 bytes .../assets/images/toolbar/char/not/ngtr.png | Bin 432 -> 0 bytes .../assets/images/toolbar/char/not/nleq.png | Bin 515 -> 0 bytes .../assets/images/toolbar/char/not/nless.png | Bin 518 -> 0 bytes .../assets/images/toolbar/char/not/nmid.png | Bin 245 -> 0 bytes .../assets/images/toolbar/char/not/notin.png | Bin 383 -> 0 bytes .../images/toolbar/char/not/nparallel.png | Bin 253 -> 0 bytes .../assets/images/toolbar/char/not/nprec.png | Bin 353 -> 0 bytes .../assets/images/toolbar/char/not/nsim.png | Bin 468 -> 0 bytes .../images/toolbar/char/not/nsubseteq.png | Bin 401 -> 0 bytes .../assets/images/toolbar/char/not/nsucc.png | Bin 367 -> 0 bytes .../images/toolbar/char/not/nsupseteq.png | Bin 400 -> 0 bytes .../images/toolbar/char/not/ntriangleleft.png | Bin 409 -> 0 bytes .../toolbar/char/not/ntrianglelefteq.png | Bin 455 -> 0 bytes .../toolbar/char/not/ntriangleright.png | Bin 406 -> 0 bytes .../toolbar/char/not/ntrianglerighteq.png | Bin 440 -> 0 bytes .../images/toolbar/char/not/nvdash-1.png | Bin 321 -> 0 bytes .../images/toolbar/char/not/nvdash-2.png | Bin 342 -> 0 bytes .../images/toolbar/char/not/nvdash-3.png | Bin 340 -> 0 bytes .../assets/images/toolbar/char/not/nvdash.png | Bin 289 -> 0 bytes .../images/toolbar/char/not/precnsim.png | Bin 426 -> 0 bytes .../images/toolbar/char/not/subsetneq.png | Bin 339 -> 0 bytes .../images/toolbar/char/not/succnsim.png | Bin 465 -> 0 bytes .../images/toolbar/char/not/supsetneq.png | Bin 330 -> 0 bytes .../assets/images/toolbar/char/rm/a.png | Bin 303 -> 0 bytes .../assets/images/toolbar/char/rm/b.png | Bin 291 -> 0 bytes .../assets/images/toolbar/char/rm/c.png | Bin 291 -> 0 bytes .../assets/images/toolbar/char/rm/d.png | Bin 308 -> 0 bytes .../assets/images/toolbar/char/rm/e.png | Bin 311 -> 0 bytes .../assets/images/toolbar/char/rm/f.png | Bin 246 -> 0 bytes .../assets/images/toolbar/char/rm/g.png | Bin 354 -> 0 bytes .../assets/images/toolbar/char/rm/h.png | Bin 245 -> 0 bytes .../assets/images/toolbar/char/rm/i.png | Bin 208 -> 0 bytes .../assets/images/toolbar/char/rm/j.png | Bin 226 -> 0 bytes .../assets/images/toolbar/char/rm/k.png | Bin 301 -> 0 bytes .../assets/images/toolbar/char/rm/l.png | Bin 183 -> 0 bytes .../assets/images/toolbar/char/rm/m.png | Bin 288 -> 0 bytes .../assets/images/toolbar/char/rm/n.png | Bin 239 -> 0 bytes .../assets/images/toolbar/char/rm/o.png | Bin 308 -> 0 bytes .../assets/images/toolbar/char/rm/p.png | Bin 298 -> 0 bytes .../assets/images/toolbar/char/rm/q.png | Bin 314 -> 0 bytes .../assets/images/toolbar/char/rm/r.png | Bin 227 -> 0 bytes .../assets/images/toolbar/char/rm/s.png | Bin 296 -> 0 bytes .../assets/images/toolbar/char/rm/t.png | Bin 242 -> 0 bytes .../assets/images/toolbar/char/rm/u.png | Bin 259 -> 0 bytes .../assets/images/toolbar/char/rm/ua.png | Bin 343 -> 0 bytes .../assets/images/toolbar/char/rm/ub.png | Bin 363 -> 0 bytes .../assets/images/toolbar/char/rm/uc.png | Bin 378 -> 0 bytes .../assets/images/toolbar/char/rm/ud.png | Bin 310 -> 0 bytes .../assets/images/toolbar/char/rm/ue.png | Bin 308 -> 0 bytes .../assets/images/toolbar/char/rm/uf.png | Bin 260 -> 0 bytes .../assets/images/toolbar/char/rm/ug.png | Bin 394 -> 0 bytes .../assets/images/toolbar/char/rm/uh.png | Bin 266 -> 0 bytes .../assets/images/toolbar/char/rm/ui.png | Bin 212 -> 0 bytes .../assets/images/toolbar/char/rm/uj.png | Bin 242 -> 0 bytes .../assets/images/toolbar/char/rm/uk.png | Bin 345 -> 0 bytes .../assets/images/toolbar/char/rm/ul.png | Bin 228 -> 0 bytes .../assets/images/toolbar/char/rm/um.png | Bin 368 -> 0 bytes .../assets/images/toolbar/char/rm/un.png | Bin 338 -> 0 bytes .../assets/images/toolbar/char/rm/uo.png | Bin 371 -> 0 bytes .../assets/images/toolbar/char/rm/up.png | Bin 280 -> 0 bytes .../assets/images/toolbar/char/rm/uq.png | Bin 425 -> 0 bytes .../assets/images/toolbar/char/rm/ur.png | Bin 336 -> 0 bytes .../assets/images/toolbar/char/rm/us.png | Bin 363 -> 0 bytes .../assets/images/toolbar/char/rm/ut.png | Bin 259 -> 0 bytes .../assets/images/toolbar/char/rm/uu.png | Bin 297 -> 0 bytes .../assets/images/toolbar/char/rm/uv.png | Bin 361 -> 0 bytes .../assets/images/toolbar/char/rm/uw.png | Bin 442 -> 0 bytes .../assets/images/toolbar/char/rm/ux.png | Bin 374 -> 0 bytes .../assets/images/toolbar/char/rm/uy.png | Bin 341 -> 0 bytes .../assets/images/toolbar/char/rm/uz.png | Bin 366 -> 0 bytes .../assets/images/toolbar/char/rm/v.png | Bin 301 -> 0 bytes .../assets/images/toolbar/char/rm/w.png | Bin 339 -> 0 bytes .../assets/images/toolbar/char/rm/x.png | Bin 303 -> 0 bytes .../assets/images/toolbar/char/rm/y.png | Bin 329 -> 0 bytes .../assets/images/toolbar/char/rm/z.png | Bin 292 -> 0 bytes .../assets/images/toolbar/frac/1.png | Bin 965 -> 0 bytes .../assets/images/toolbar/frac/2.png | Bin 669 -> 0 bytes .../assets/images/toolbar/frac/3.png | Bin 596 -> 0 bytes .../assets/images/toolbar/frac/c1.png | Bin 1115 -> 0 bytes .../assets/images/toolbar/frac/c2.png | Bin 1077 -> 0 bytes .../assets/images/toolbar/frac/c4.png | Bin 1124 -> 0 bytes .../assets/images/toolbar/frac/c5.png | Bin 651 -> 0 bytes .../assets/images/toolbar/func/1.png | Bin 918 -> 0 bytes .../assets/images/toolbar/func/2.png | Bin 952 -> 0 bytes .../assets/images/toolbar/func/3.png | Bin 931 -> 0 bytes .../assets/images/toolbar/func/4.png | Bin 880 -> 0 bytes .../assets/images/toolbar/func/5.png | Bin 904 -> 0 bytes .../assets/images/toolbar/func/6.png | Bin 893 -> 0 bytes .../assets/images/toolbar/func/c1.png | Bin 857 -> 0 bytes .../assets/images/toolbar/func/c2.png | Bin 1003 -> 0 bytes .../assets/images/toolbar/func/c3.png | Bin 2532 -> 0 bytes .../assets/images/toolbar/int/1.png | Bin 873 -> 0 bytes .../assets/images/toolbar/int/2.png | Bin 1148 -> 0 bytes .../assets/images/toolbar/int/3.png | Bin 1151 -> 0 bytes .../assets/images/toolbar/int/4.png | Bin 1406 -> 0 bytes .../assets/images/toolbar/int/5.png | Bin 1486 -> 0 bytes .../assets/images/toolbar/int/6.png | Bin 1376 -> 0 bytes .../assets/images/toolbar/large/1.png | Bin 889 -> 0 bytes .../assets/images/toolbar/large/2.png | Bin 1221 -> 0 bytes .../assets/images/toolbar/large/3.png | Bin 988 -> 0 bytes .../assets/images/toolbar/other.png | Bin 40838 -> 0 bytes .../assets/images/toolbar/script/1.png | Bin 445 -> 0 bytes .../assets/images/toolbar/script/2.png | Bin 464 -> 0 bytes .../assets/images/toolbar/script/3.png | Bin 507 -> 0 bytes .../assets/images/toolbar/script/4.png | Bin 596 -> 0 bytes .../assets/images/toolbar/script/c1.png | Bin 829 -> 0 bytes .../assets/images/toolbar/script/c2.png | Bin 626 -> 0 bytes .../assets/images/toolbar/script/c3.png | Bin 753 -> 0 bytes .../assets/images/toolbar/sqrt/1.png | Bin 800 -> 0 bytes .../assets/images/toolbar/sqrt/2.png | Bin 916 -> 0 bytes .../assets/images/toolbar/sqrt/3.png | Bin 894 -> 0 bytes .../assets/images/toolbar/sqrt/4.png | Bin 916 -> 0 bytes .../assets/images/toolbar/sqrt/c1.png | Bin 2614 -> 0 bytes .../assets/images/toolbar/sqrt/c2.png | Bin 1794 -> 0 bytes .../assets/images/toolbar/ys/1.png | Bin 1927 -> 0 bytes .../assets/images/toolbar/ys/2.png | Bin 2553 -> 0 bytes .../assets/images/toolbar/ys/3.png | Bin 1200 -> 0 bytes .../kityformula/assets/styles/base.css | 40 - .../kityformula/assets/styles/page.css | 12 - .../kityformula/assets/styles/scrollbar.css | 78 - .../kityformula/assets/styles/ui.css | 536 - .../kityformula/assets/theme/default/fui.css | 540 - .../assets/theme/default/fui.min.css | 10 - .../assets/theme/default/images/close.png | Bin 836 -> 0 bytes .../assets/theme/default/images/down.png | Bin 1089 -> 0 bytes .../assets/theme/default/images/open.png | Bin 859 -> 0 bytes .../assets/theme/default/images/up.png | Bin 1080 -> 0 bytes .../kityformula/js/jquery-3.6.0.min.js | 2 - .../js/kity-formula-parser.all.min.js | 9 - .../kityformula/js/kity-formula-render.all.js | 5757 --- .../js/kityformula-editor.all.min.js | 12 - .../kityformula/js/kitygraph.all.js | 8572 ---- .../kityformula/loading.gif | Bin 1787 -> 0 bytes .../kityformula/resource/KF_AMS_BB.woff | Bin 5764 -> 0 bytes .../kityformula/resource/KF_AMS_CAL.woff | Bin 5576 -> 0 bytes .../kityformula/resource/KF_AMS_FRAK.woff | Bin 9956 -> 0 bytes .../kityformula/resource/KF_AMS_MAIN.woff | Bin 52540 -> 0 bytes .../kityformula/resource/KF_AMS_ROMAN.woff | Bin 6560 -> 0 bytes .../plugins/kityformula-editor/plugin.js | 72 - .../plugins/kityformula-editor/plugin.min.js | 72 - .../tinymce/plugins/legacyoutput/plugin.js | 199 - .../plugins/legacyoutput/plugin.min.js | 9 - .../tinymce/tinymce/plugins/link/plugin.js | 1290 - .../tinymce/plugins/link/plugin.min.js | 9 - .../tinymce/tinymce/plugins/lists/plugin.js | 2148 - .../tinymce/plugins/lists/plugin.min.js | 9 - .../tinymce/tinymce/plugins/media/plugin.js | 1315 - .../tinymce/plugins/media/plugin.min.js | 9 - .../tinymce/plugins/nonbreaking/plugin.js | 101 - .../tinymce/plugins/nonbreaking/plugin.min.js | 9 - .../tinymce/plugins/noneditable/plugin.js | 117 - .../tinymce/plugins/noneditable/plugin.min.js | 9 - .../tinymce/plugins/pagebreak/plugin.js | 107 - .../tinymce/plugins/pagebreak/plugin.min.js | 9 - .../tinymce/tinymce/plugins/paste/plugin.js | 1764 - .../tinymce/plugins/paste/plugin.min.js | 9 - .../tinymce/tinymce/plugins/preview/plugin.js | 127 - .../tinymce/plugins/preview/plugin.min.js | 9 - .../tinymce/tinymce/plugins/print/plugin.js | 53 - .../tinymce/plugins/print/plugin.min.js | 9 - .../tinymce/plugins/quickbars/plugin.js | 491 - .../tinymce/plugins/quickbars/plugin.min.js | 9 - .../tinymce/tinymce/plugins/save/plugin.js | 119 - .../tinymce/plugins/save/plugin.min.js | 9 - .../tinymce/plugins/searchreplace/plugin.js | 1163 - .../plugins/searchreplace/plugin.min.js | 9 - .../tinymce/plugins/spellchecker/plugin.js | 737 - .../plugins/spellchecker/plugin.min.js | 9 - .../tinymce/plugins/tabfocus/plugin.js | 129 - .../tinymce/plugins/tabfocus/plugin.min.js | 9 - .../tinymce/tinymce/plugins/table/plugin.js | 10495 ----- .../tinymce/plugins/table/plugin.min.js | 9 - .../tinymce/plugins/template/plugin.js | 577 - .../tinymce/plugins/template/plugin.min.js | 9 - .../tinymce/plugins/textcolor/plugin.js | 22 - .../tinymce/plugins/textcolor/plugin.min.js | 9 - .../tinymce/plugins/textpattern/plugin.js | 1390 - .../tinymce/plugins/textpattern/plugin.min.js | 9 - .../tinymce/tinymce/plugins/toc/plugin.js | 236 - .../tinymce/tinymce/plugins/toc/plugin.min.js | 9 - .../tinymce/plugins/visualblocks/plugin.js | 104 - .../plugins/visualblocks/plugin.min.js | 9 - .../tinymce/plugins/visualchars/plugin.js | 541 - .../tinymce/plugins/visualchars/plugin.min.js | 9 - .../tinymce/plugins/wordcount/plugin.js | 417 - .../tinymce/plugins/wordcount/plugin.min.js | 9 - .../tinymce/skins/content/dark/content.css | 72 - .../skins/content/dark/content.min.css | 8 - .../skins/content/dark/content.min.css.map | 1 - .../tinymce/skins/content/default/content.css | 67 - .../skins/content/default/content.min.css | 8 - .../skins/content/default/content.min.css.map | 1 - .../skins/content/document/content.css | 72 - .../skins/content/document/content.min.css | 8 - .../content/document/content.min.css.map | 1 - .../tinymce/skins/content/writer/content.css | 68 - .../skins/content/writer/content.min.css | 8 - .../skins/content/writer/content.min.css.map | 1 - .../tinymce/skins/ui/oxide-dark/content.css | 710 - .../skins/ui/oxide-dark/content.inline.css | 722 - .../ui/oxide-dark/content.inline.min.css | 8 - .../ui/oxide-dark/content.inline.min.css.map | 1 - .../skins/ui/oxide-dark/content.min.css | 8 - .../skins/ui/oxide-dark/content.min.css.map | 1 - .../skins/ui/oxide-dark/content.mobile.css | 29 - .../ui/oxide-dark/content.mobile.min.css | 8 - .../ui/oxide-dark/content.mobile.min.css.map | 1 - .../ui/oxide-dark/fonts/tinymce-mobile.woff | Bin 4624 -> 0 bytes .../tinymce/skins/ui/oxide-dark/skin.css | 3024 -- .../tinymce/skins/ui/oxide-dark/skin.min.css | 8 - .../skins/ui/oxide-dark/skin.min.css.map | 1 - .../skins/ui/oxide-dark/skin.mobile.css | 673 - .../skins/ui/oxide-dark/skin.mobile.min.css | 8 - .../ui/oxide-dark/skin.mobile.min.css.map | 1 - .../skins/ui/oxide-dark/skin.shadowdom.css | 36 - .../ui/oxide-dark/skin.shadowdom.min.css | 8 - .../ui/oxide-dark/skin.shadowdom.min.css.map | 1 - .../tinymce/skins/ui/oxide/content.css | 728 - .../tinymce/skins/ui/oxide/content.inline.css | 722 - .../skins/ui/oxide/content.inline.min.css | 8 - .../skins/ui/oxide/content.inline.min.css.map | 1 - .../tinymce/skins/ui/oxide/content.min.css | 8 - .../skins/ui/oxide/content.min.css.map | 1 - .../tinymce/skins/ui/oxide/content.mobile.css | 29 - .../skins/ui/oxide/content.mobile.min.css | 8 - .../skins/ui/oxide/content.mobile.min.css.map | 1 - .../skins/ui/oxide/fonts/tinymce-mobile.woff | Bin 4624 -> 0 bytes .../tinymce/tinymce/skins/ui/oxide/skin.css | 3024 -- .../tinymce/skins/ui/oxide/skin.min.css | 8 - .../tinymce/skins/ui/oxide/skin.min.css.map | 1 - .../tinymce/skins/ui/oxide/skin.mobile.css | 673 - .../skins/ui/oxide/skin.mobile.min.css | 8 - .../skins/ui/oxide/skin.mobile.min.css.map | 1 - .../tinymce/skins/ui/oxide/skin.shadowdom.css | 36 - .../skins/ui/oxide/skin.shadowdom.min.css | 8 - .../skins/ui/oxide/skin.shadowdom.min.css.map | 1 - .../tinymce/tinymce/themes/mobile/theme.js | 13592 ------- .../tinymce/themes/mobile/theme.min.js | 9 - .../tinymce/tinymce/themes/silver/theme.js | 32458 ---------------- .../tinymce/themes/silver/theme.min.js | 9 - .../pear/module/tinymce/tinymce/tinymce.js | 29786 -------------- .../module/tinymce/tinymce/tinymce.min.js | 9 - component/pear/module/toast.js | 1225 - component/pear/module/topBar.js | 13 - component/pear/module/watermark/watermark.js | 224 - component/pear/pear.js | 21 +- config/pear.config.yml | 1 + index.html | 6 +- view/components/toast.html | 146 - view/console/console1.html | 513 +- view/console/console2.html | 455 +- 663 files changed, 285 insertions(+), 183343 deletions(-) delete mode 100644 admin/css/loader.css delete mode 100644 component/pear/css/module/code.css delete mode 100644 component/pear/css/module/cropper.css delete mode 100644 component/pear/css/module/form.css delete mode 100644 component/pear/css/module/iconPicker.css delete mode 100644 component/pear/css/module/notice.css delete mode 100644 component/pear/css/module/popover.min.css delete mode 100644 component/pear/css/module/select.css delete mode 100644 component/pear/css/module/step.css delete mode 100644 component/pear/module/area.js rename component/pear/module/{message.js => core/messageCenter.js} (99%) delete mode 100644 component/pear/module/cropper.js delete mode 100644 component/pear/module/darkreader.js delete mode 100644 component/pear/module/encrypt.js delete mode 100644 component/pear/module/http.js delete mode 100644 component/pear/module/iconPicker.js delete mode 100644 component/pear/module/notice.js delete mode 100644 component/pear/module/popover/popover.js delete mode 100644 component/pear/module/select.js delete mode 100644 component/pear/module/tinymce/tinymce.js delete mode 100644 component/pear/module/tinymce/tinymce/icons/default/icons.js delete mode 100644 component/pear/module/tinymce/tinymce/icons/default/icons.min.js delete mode 100644 component/pear/module/tinymce/tinymce/langs/readme.md delete mode 100644 component/pear/module/tinymce/tinymce/langs/zh_CN.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/advlist/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/advlist/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/anchor/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/anchor/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/autolink/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/autolink/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/autoresize/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/autoresize/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/autosave/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/autosave/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/bbcode/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/bbcode/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/charmap/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/charmap/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/code/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/code/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/codesample/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/codesample/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/colorpicker/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/colorpicker/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/contextmenu/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/contextmenu/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/directionality/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/directionality/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/emoticons/js/emojiimages.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/emoticons/js/emojiimages.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/emoticons/js/emojis.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/emoticons/js/emojis.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/emoticons/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/emoticons/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/fullpage/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/fullpage/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/fullscreen/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/fullscreen/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/help/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/help/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/hr/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/hr/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/image/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/image/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/imagetools/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/imagetools/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/importcss/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/importcss/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/indent2em/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/indent2em/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/insertdatetime/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/insertdatetime/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/icon.svg delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityFormula.html delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bar-bg.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bar.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bg.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/bottom.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/btn.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/down.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/top.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/custom/up.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-bg.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-left.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/bar-right.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-bg.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-left.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/scrollbar/edit/thumb-right.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/aleph.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/bbbk.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/beth.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/circleds.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/complement.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/daleth.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/ell.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/eth.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/finv.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/game.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/gimel.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/hbar.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/hslash.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/im.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/mho.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/partial.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/re.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/alphabetic/wp.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/circlearrowleft.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/circlearrowright.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/curvearrowleft.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/curvearrowright.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downdownarrows.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downharpoonleft.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/downharpoonright.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/gets.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftarrowtail.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftharpoondown.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftharpoonup.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftleftarrows.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightarrows.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightharpoons.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/leftrightsquigarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longleftarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longleftrightarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/longrightarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/looparrowleft.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/looparrowright.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/multimap.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nearrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nleftarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nrightarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/nwarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightarrowtail.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightharpoondown.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightharpoonup.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightleftarrows.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightleftharpoons.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightrightarrows.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/rightsquigarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/searrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/swarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/to.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/twoheadleftarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/twoheadrightarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-downarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-leftarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-leftrightarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-lftarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-lleftarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-longleftarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-longleftrightarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-longrightarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-lsh.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-nleftarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-nleftrightarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-nrightarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-rightarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-rrightarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-rsh.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-uparrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/u-updownarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/uparrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/updownarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upharpoonleft.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upharpoonright.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/arrow/upuparrows.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/1.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/2.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/3.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/brackets/4.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/btn.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/brackets.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/down.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/frac.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/fx.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/int.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/lim.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/open.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/script.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/sin.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/sqrt.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/sum.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/tick.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/button/up.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/a.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/b.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/c.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/d.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/e.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/f.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/g.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/h.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/i.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/j.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/k.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/l.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/m.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/n.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/o.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/p.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/q.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/r.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/s.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/t.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/u.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/v.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/w.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/x.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/y.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/bb/z.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/a.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/b.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/c.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/d.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/e.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/f.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/g.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/h.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/i.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/j.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/k.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/l.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/m.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/n.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/o.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/p.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/q.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/r.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/s.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/t.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/u.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/v.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/w.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/x.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/y.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/cal/z.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/a.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/b.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/c.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/d.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/e.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/f.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/g.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/h.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/i.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/j.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/k.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/l.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/m.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/n.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/o.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/p.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/q.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/r.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/s.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/t.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/u.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ua.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ub.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uc.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ud.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ue.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uf.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ug.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uh.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ui.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uj.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uk.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ul.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/um.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/un.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uo.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/up.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uq.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ur.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/us.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ut.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uu.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uv.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uw.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/ux.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uy.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/uz.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/v.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/w.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/x.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/y.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/frak/z.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/alpha.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/beta.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/chi.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/delta.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/epsilon.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/eta.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/gamma.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/iota.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/kappa.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/lambda.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/mu.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/nu.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/omega.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/omicron.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/phi.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/pi.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/psi.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/rho.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/sigma.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/tau.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/theta.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/upsilon.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/xi.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/lower/zeta.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/digamma.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varepsilon.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varkappa.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varphi.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varpi.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varrho.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/varsigma.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/misc/vartheta.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/alpha.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/beta.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/chi.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/delta.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/epsilon.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/eta.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/gamma.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/iota.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/kappa.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/lambda.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/mu.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/nu.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/omega.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/omicron.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/phi.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/pi.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/psi.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/rho.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/sigma.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/tau.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/theta.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/upsilon.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/xi.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/greek/upper/zeta.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/aleph.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/approx.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ast.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/baifenhao.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/because.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/beth.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/blacksquare.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cap.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cdot.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/circ.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cong.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/cup.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ddots.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/div.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/downarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/eq.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/equiv.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/exists.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/forall.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/geq.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/gets.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/gg.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/gt.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/in.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/infty.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/leftrightarrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/leq.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ll.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/lt.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/minus.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/mp.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/neg.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/nexists.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/ni.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/partial.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/plus.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/pm.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/propto.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/sim.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/simeq.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/surd.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/tanhao.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/therefore.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/times.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/to.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/uparrow.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/varnothing.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/math/vdots.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/gneqq.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/gnsim.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/lneqq.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/lnsim.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nbdash-1.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ncong.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/neq.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nequiv.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nexists.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ngeq.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ngtr.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nleq.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nless.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nmid.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/notin.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nparallel.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nprec.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsim.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsubseteq.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsucc.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nsupseteq.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntriangleleft.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntrianglelefteq.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntriangleright.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/ntrianglerighteq.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash-1.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash-2.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash-3.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/nvdash.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/precnsim.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/subsetneq.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/succnsim.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/not/supsetneq.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/a.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/b.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/c.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/d.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/e.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/f.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/g.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/h.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/i.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/j.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/k.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/l.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/m.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/n.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/o.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/p.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/q.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/r.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/s.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/t.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/u.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ua.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ub.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uc.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ud.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ue.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uf.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ug.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uh.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ui.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uj.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uk.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ul.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/um.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/un.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uo.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/up.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uq.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ur.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/us.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ut.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uu.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uv.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uw.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/ux.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uy.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/uz.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/v.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/w.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/x.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/y.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/char/rm/z.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/1.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/2.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/3.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c1.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c2.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c4.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/frac/c5.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/1.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/2.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/3.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/4.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/5.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/6.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c1.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c2.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/func/c3.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/1.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/2.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/3.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/4.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/5.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/int/6.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/large/1.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/large/2.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/large/3.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/other.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/1.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/2.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/3.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/4.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/c1.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/c2.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/script/c3.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/1.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/2.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/3.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/4.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/c1.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/sqrt/c2.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/ys/1.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/ys/2.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/images/toolbar/ys/3.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/styles/base.css delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/styles/page.css delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/styles/scrollbar.css delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/styles/ui.css delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/fui.css delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/fui.min.css delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/close.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/down.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/open.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/assets/theme/default/images/up.png delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/js/jquery-3.6.0.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/js/kity-formula-parser.all.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/js/kity-formula-render.all.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/js/kityformula-editor.all.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/js/kitygraph.all.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/loading.gif delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_BB.woff delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_CAL.woff delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_FRAK.woff delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_MAIN.woff delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/kityformula/resource/KF_AMS_ROMAN.woff delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/kityformula-editor/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/legacyoutput/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/legacyoutput/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/link/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/link/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/lists/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/lists/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/media/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/media/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/nonbreaking/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/nonbreaking/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/noneditable/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/noneditable/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/pagebreak/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/pagebreak/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/paste/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/paste/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/preview/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/preview/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/print/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/print/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/quickbars/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/quickbars/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/save/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/save/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/searchreplace/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/searchreplace/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/spellchecker/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/spellchecker/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/tabfocus/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/tabfocus/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/table/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/table/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/template/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/template/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/textcolor/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/textcolor/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/textpattern/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/textpattern/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/toc/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/toc/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/visualblocks/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/visualblocks/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/visualchars/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/visualchars/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/wordcount/plugin.js delete mode 100644 component/pear/module/tinymce/tinymce/plugins/wordcount/plugin.min.js delete mode 100644 component/pear/module/tinymce/tinymce/skins/content/dark/content.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/content/dark/content.min.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/content/dark/content.min.css.map delete mode 100644 component/pear/module/tinymce/tinymce/skins/content/default/content.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/content/default/content.min.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/content/default/content.min.css.map delete mode 100644 component/pear/module/tinymce/tinymce/skins/content/document/content.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/content/document/content.min.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/content/document/content.min.css.map delete mode 100644 component/pear/module/tinymce/tinymce/skins/content/writer/content.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/content/writer/content.min.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/content/writer/content.min.css.map delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/content.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/content.inline.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/content.inline.min.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/content.inline.min.css.map delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/content.min.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/content.min.css.map delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/content.mobile.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/content.mobile.min.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/content.mobile.min.css.map delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/skin.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/skin.min.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/skin.min.css.map delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/skin.mobile.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/skin.mobile.min.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/skin.mobile.min.css.map delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/skin.shadowdom.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css.map delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/content.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/content.inline.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/content.inline.min.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/content.inline.min.css.map delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/content.min.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/content.min.css.map delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/content.mobile.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/content.mobile.min.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/content.mobile.min.css.map delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/skin.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/skin.min.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/skin.min.css.map delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/skin.mobile.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/skin.mobile.min.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/skin.mobile.min.css.map delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/skin.shadowdom.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/skin.shadowdom.min.css delete mode 100644 component/pear/module/tinymce/tinymce/skins/ui/oxide/skin.shadowdom.min.css.map delete mode 100644 component/pear/module/tinymce/tinymce/themes/mobile/theme.js delete mode 100644 component/pear/module/tinymce/tinymce/themes/mobile/theme.min.js delete mode 100644 component/pear/module/tinymce/tinymce/themes/silver/theme.js delete mode 100644 component/pear/module/tinymce/tinymce/themes/silver/theme.min.js delete mode 100644 component/pear/module/tinymce/tinymce/tinymce.js delete mode 100644 component/pear/module/tinymce/tinymce/tinymce.min.js delete mode 100644 component/pear/module/toast.js delete mode 100644 component/pear/module/topBar.js delete mode 100644 component/pear/module/watermark/watermark.js delete mode 100644 view/components/toast.html diff --git a/admin/css/admin.css b/admin/css/admin.css index 2a6c070..f3141cc 100644 --- a/admin/css/admin.css +++ b/admin/css/admin.css @@ -79,7 +79,6 @@ body, left: 230px; width: calc(100% - 230px); background-color: white; - border-bottom: 1px solid whitesmoke; } .pear-admin .layui-layout-control { @@ -92,12 +91,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 { @@ -145,6 +145,7 @@ body, .pear-admin .layui-body { bottom: 0px; padding-bottom: 0px; + background-color: whitesmoke; height: calc(100% - 60px); overflow-y: auto; left: 230px; @@ -560,4 +561,118 @@ body, color: white; } -/* 搜索面板结束 */ \ No newline at end of file +/* 搜索面板结束 */ + +/** 首屏加载 */ +.loader-wrapper { + 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); + } +} \ No newline at end of file diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index e69de29..266bbdd 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -0,0 +1,83 @@ +/** loader */ +.pear-admin-dark .loader-wrapper, +.pear-admin-dark .loader-wrapper .loader { + background-color: #141414; +} + +/** header */ +.pear-admin-dark .layui-header { + background-color: #141414 !important; + border-color:#414243 !important; +} + +.pear-admin-dark .layui-header * { + color: #ffffff !important; +} + +.pear-admin-dark .layui-header .pear-nav-control .layui-this a{ + background-color: #0c0c0c !important; +} + +/** side */ +.pear-admin-dark .layui-side { + box-shadow: 0 3px 4px rgba(0, 0, 0, .6);; +} + +.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; +} + +/** body */ +.pear-admin-dark .layui-body { + 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; +} + +/** layer */ +.pear-admin-dark .layui-layer { + background-color: #141414; +} + +.pear-admin-dark .layui-layer .layui-layer-setwin > span, +.pear-admin-dark .layui-layer .layui-layer-title { + color: white; +} + +/** card */ +.pear-admin-dark .layui-card { + background-color: #1d1e1f !important; +} + +.pear-admin-dark .layui-card .layui-card-header { + border-bottom-color: #414243; + color: #ffffff; +} + +/** input */ +.pear-admin-dark .layui-input { + background-color: transparent; + color: #ffffff; +} + +/** switch */ +.pear-admin-dark .layui-form-switch { + border-color: #484849; + background-color: rgba(255,255,255,.08); +} \ No newline at end of file diff --git a/admin/css/loader.css b/admin/css/loader.css deleted file mode 100644 index 64ee940..0000000 --- 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/component/pear/css/module/code.css b/component/pear/css/module/code.css deleted file mode 100644 index 4bde0d3..0000000 --- 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 2c64042..0000000 --- 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/form.css b/component/pear/css/module/form.css deleted file mode 100644 index b6a8c8d..0000000 --- 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/iconPicker.css b/component/pear/css/module/iconPicker.css deleted file mode 100644 index 5d80b0b..0000000 --- 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/layout.css b/component/pear/css/module/layout.css index 000f1e0..6286b10 100644 --- a/component/pear/css/module/layout.css +++ b/component/pear/css/module/layout.css @@ -2,7 +2,7 @@ padding: 10px; margin: 0px; box-sizing: border-box; - background-color: whitesmoke; + background-color: transparent; width: 100%; } diff --git a/component/pear/css/module/notice.css b/component/pear/css/module/notice.css deleted file mode 100644 index 65c9fea..0000000 --- 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/popover.min.css b/component/pear/css/module/popover.min.css deleted file mode 100644 index 453a50f..0000000 --- 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 53285a6..0000000 --- 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,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') 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 6394662..0000000 --- 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/tab.css index 4f9e5a9..f8d3024 100644 --- a/component/pear/css/module/tab.css +++ b/component/pear/css/module/tab.css @@ -54,6 +54,10 @@ display: none; } +.pear-tab .layui-nav-more { + display: none; +} + .pear-tab .layui-tab-title .layui-this:after { display: none; } @@ -95,10 +99,9 @@ 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 { diff --git a/component/pear/module/area.js b/component/pear/module/area.js deleted file mode 100644 index 604c91e..0000000 --- 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/core/admin.js b/component/pear/module/core/admin.js index 3a2cf80..ed815fc 100644 --- a/component/pear/module/core/admin.js +++ b/component/pear/module/core/admin.js @@ -1,4 +1,4 @@ -layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'theme', 'fullscreen'], +layui.define(['messageCenter', 'table', 'jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'theme', 'fullscreen'], function (exports) { "use strict"; @@ -7,10 +7,10 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tabPage' yaml = layui.yaml, page = layui.page, tabPage = layui.tabPage, + messageCenter = layui.messageCenter, menu = layui.menu, pearTheme = layui.theme, - message = layui.message, fullscreen = layui.fullscreen; var bodyFrame; @@ -95,7 +95,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tabPage' } this.messageRender = function (option) { - msgInstance = message.render({ + msgInstance = messageCenter.render({ elem: '.message', url: option.header.message, height: '250px' @@ -213,7 +213,7 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tabPage' this.keepLoad = function (param) { compatible() setTimeout(function () { - $(".loader-main").fadeOut(200); + $(".loader-wrapper").fadeOut(200); }, param.other.keepLoad) } @@ -291,6 +291,15 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tabPage' } } + 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); @@ -298,9 +307,11 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tabPage' 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); } @@ -324,6 +335,14 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tabPage' } } + 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) { @@ -355,105 +374,6 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tabPage' 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() { @@ -807,6 +727,9 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tabPage' moreItem += '
                                      开启页脚
                                      '; + moreItem += + '
                                      夜间模式
                                      '; + var moreHtml = '
                                      \n' + '
                                      更多设置
                                      \n' + '
                                      \n' + @@ -883,6 +806,11 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tabPage' 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 { @@ -907,6 +835,12 @@ layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tabPage' $('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'); } }); diff --git a/component/pear/module/message.js b/component/pear/module/core/messageCenter.js similarity index 99% rename from component/pear/module/message.js rename to component/pear/module/core/messageCenter.js index 51ba162..bdcf20f 100644 --- a/component/pear/module/message.js +++ b/component/pear/module/core/messageCenter.js @@ -1,7 +1,7 @@ layui.define(['table', 'jquery', 'element'], function (exports) { "use strict"; - var MOD_NAME = 'message', + var MOD_NAME = 'messageCenter', $ = layui.jquery, element = layui.element; diff --git a/component/pear/module/core/page.js b/component/pear/module/core/page.js index 44ba8fd..a9703e2 100644 --- a/component/pear/module/core/page.js +++ b/component/pear/module/core/page.js @@ -20,7 +20,7 @@ layui.define(['jquery', 'element'], function (exports) { } } renderContent(option); - return new frame(option); + return new page(option); } page.prototype.changePage = function (url, loading) { diff --git a/component/pear/module/core/tabPage.js b/component/pear/module/core/tabPage.js index c74327a..ec9ab62 100644 --- a/component/pear/module/core/tabPage.js +++ b/component/pear/module/core/tabPage.js @@ -154,28 +154,6 @@ layui.define(['jquery', 'element'], function (exports) { sessionStorage.removeItem(this.option.elem + "-pear-tab-data-current"); } - tabPage.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 - }); - 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); - } - var index = 0; // 根据过滤 fliter 标识, 重置选项卡标题 tabPage.prototype.changeTabTitleById = function (elem, id, title) { @@ -392,6 +370,9 @@ layui.define(['jquery', 'element'], function (exports) { tabContent.remove(); } + /** + * @since Pear Admin 4.0 + */ function createTab(option) { var type = ""; @@ -407,32 +388,38 @@ layui.define(['jquery', 'element'], function (exports) { } 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 += '
                                        • '; - } + + var titleItem = `
                                        • + + + ${item.title} + +
                                        • `; - if (item.close) { - // 当 前 选 项 卡 可 以 关 闭 - TitleItem += '' + item.title + ''; - } else { - // 当 前 选 项 卡 不 允 许 关 闭 - TitleItem += '' + item.title + ''; - } - TitleItem += '
                                        • '; - title += TitleItem; - if (option.index == index) { + title += titleItem; + if (option.index == index) { $.ajax({ url: item.url, type: 'get', @@ -448,9 +435,7 @@ layui.define(['jquery', 'element'], function (exports) { return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); } }); - } else { - $.ajax({ url: item.url, type: 'get', @@ -472,10 +457,6 @@ layui.define(['jquery', 'element'], function (exports) { title += '
                                        '; content += '
                                      • '; - control += '
                                        关 闭 当 前
                                        ' - control += '
                                        关 闭 其 他
                                        ' - control += '
                                        关 闭 全 部
                                        ' - control += '
                                      '; tab += title; tab += control; diff --git a/component/pear/module/cropper.js b/component/pear/module/cropper.js deleted file mode 100644 index 6d77497..0000000 --- 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/darkreader.js b/component/pear/module/darkreader.js deleted file mode 100644 index c8eaa60..0000000 --- a/component/pear/module/darkreader.js +++ /dev/null @@ -1,7579 +0,0 @@ -/** - * Dark Reader v4.9.58 - * https://darkreader.org/ - */ - -(function (global, factory) { - typeof exports === "object" && typeof module !== "undefined" - ? factory(exports) - : typeof define === "function" && define.amd - ? define(["exports"], factory) - : ((global = - typeof globalThis !== "undefined" ? globalThis : global || self), - factory((global.DarkReader = {}))); -})(this, function (exports) { - "use strict"; - - /****************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */ - - 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); - }; - - function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P - ? value - : new P(function (resolve) { - resolve(value); - }); - } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - function step(result) { - result.done - ? resolve(result.value) - : adopt(result.value).then(fulfilled, rejected); - } - step( - (generator = generator.apply(thisArg, _arguments || [])).next() - ); - }); - } - - function __generator(thisArg, body) { - var _ = { - label: 0, - sent: function () { - if (t[0] & 1) throw t[1]; - return t[1]; - }, - trys: [], - ops: [] - }, - f, - y, - t, - g; - return ( - (g = {next: verb(0), throw: verb(1), return: verb(2)}), - typeof Symbol === "function" && - (g[Symbol.iterator] = function () { - return this; - }), - g - ); - function verb(n) { - return function (v) { - return step([n, v]); - }; - } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) - try { - if ( - ((f = 1), - y && - (t = - op[0] & 2 - ? y["return"] - : op[0] - ? y["throw"] || - ((t = y["return"]) && t.call(y), 0) - : y.next) && - !(t = t.call(y, op[1])).done) - ) - return t; - if (((y = 0), t)) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: - case 1: - t = op; - break; - case 4: - _.label++; - return {value: op[1], done: false}; - case 5: - _.label++; - y = op[1]; - op = [0]; - continue; - case 7: - op = _.ops.pop(); - _.trys.pop(); - continue; - default: - if ( - !((t = _.trys), - (t = t.length > 0 && t[t.length - 1])) && - (op[0] === 6 || op[0] === 2) - ) { - _ = 0; - continue; - } - if ( - op[0] === 3 && - (!t || (op[1] > t[0] && op[1] < t[3])) - ) { - _.label = op[1]; - break; - } - if (op[0] === 6 && _.label < t[1]) { - _.label = t[1]; - t = op; - break; - } - if (t && _.label < t[2]) { - _.label = t[2]; - _.ops.push(op); - break; - } - if (t[2]) _.ops.pop(); - _.trys.pop(); - continue; - } - op = body.call(thisArg, _); - } catch (e) { - op = [6, e]; - y = 0; - } finally { - f = t = 0; - } - if (op[0] & 5) throw op[1]; - return {value: op[0] ? op[1] : void 0, done: true}; - } - } - - function __values(o) { - var s = typeof Symbol === "function" && Symbol.iterator, - m = s && o[s], - i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") - return { - next: function () { - if (o && i >= o.length) o = void 0; - return {value: o && o[i++], done: !o}; - } - }; - throw new TypeError( - s ? "Object is not iterable." : "Symbol.iterator is not defined." - ); - } - - function __read(o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), - r, - ar = [], - e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) - ar.push(r.value); - } catch (error) { - e = {error: error}; - } finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } finally { - if (e) throw e.error; - } - } - return ar; - } - - function __spreadArray(to, from, pack) { - if (pack || arguments.length === 2) - for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i); - ar[i] = from[i]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); - } - - var MessageType; - (function (MessageType) { - MessageType["UI_GET_DATA"] = "ui-get-data"; - MessageType["UI_SUBSCRIBE_TO_CHANGES"] = "ui-subscribe-to-changes"; - MessageType["UI_UNSUBSCRIBE_FROM_CHANGES"] = - "ui-unsubscribe-from-changes"; - MessageType["UI_CHANGE_SETTINGS"] = "ui-change-settings"; - MessageType["UI_SET_THEME"] = "ui-set-theme"; - MessageType["UI_SET_SHORTCUT"] = "ui-set-shortcut"; - MessageType["UI_TOGGLE_ACTIVE_TAB"] = "ui-toggle-active-tab"; - MessageType["UI_MARK_NEWS_AS_READ"] = "ui-mark-news-as-read"; - MessageType["UI_MARK_NEWS_AS_DISPLAYED"] = "ui-mark-news-as-displayed"; - MessageType["UI_LOAD_CONFIG"] = "ui-load-config"; - MessageType["UI_APPLY_DEV_DYNAMIC_THEME_FIXES"] = - "ui-apply-dev-dynamic-theme-fixes"; - MessageType["UI_RESET_DEV_DYNAMIC_THEME_FIXES"] = - "ui-reset-dev-dynamic-theme-fixes"; - MessageType["UI_APPLY_DEV_INVERSION_FIXES"] = - "ui-apply-dev-inversion-fixes"; - MessageType["UI_RESET_DEV_INVERSION_FIXES"] = - "ui-reset-dev-inversion-fixes"; - MessageType["UI_APPLY_DEV_STATIC_THEMES"] = - "ui-apply-dev-static-themes"; - MessageType["UI_RESET_DEV_STATIC_THEMES"] = - "ui-reset-dev-static-themes"; - MessageType["UI_SAVE_FILE"] = "ui-save-file"; - MessageType["UI_REQUEST_EXPORT_CSS"] = "ui-request-export-css"; - MessageType["UI_COLOR_SCHEME_CHANGE"] = "ui-color-scheme-change"; - MessageType["BG_CHANGES"] = "bg-changes"; - MessageType["BG_ADD_CSS_FILTER"] = "bg-add-css-filter"; - MessageType["BG_ADD_STATIC_THEME"] = "bg-add-static-theme"; - MessageType["BG_ADD_SVG_FILTER"] = "bg-add-svg-filter"; - MessageType["BG_ADD_DYNAMIC_THEME"] = "bg-add-dynamic-theme"; - MessageType["BG_EXPORT_CSS"] = "bg-export-css"; - MessageType["BG_UNSUPPORTED_SENDER"] = "bg-unsupported-sender"; - MessageType["BG_CLEAN_UP"] = "bg-clean-up"; - MessageType["BG_RELOAD"] = "bg-reload"; - MessageType["BG_FETCH_RESPONSE"] = "bg-fetch-response"; - MessageType["BG_UI_UPDATE"] = "bg-ui-update"; - MessageType["BG_CSS_UPDATE"] = "bg-css-update"; - MessageType["CS_COLOR_SCHEME_CHANGE"] = "cs-color-scheme-change"; - MessageType["CS_FRAME_CONNECT"] = "cs-frame-connect"; - MessageType["CS_FRAME_FORGET"] = "cs-frame-forget"; - MessageType["CS_FRAME_FREEZE"] = "cs-frame-freeze"; - MessageType["CS_FRAME_RESUME"] = "cs-frame-resume"; - MessageType["CS_EXPORT_CSS_RESPONSE"] = "cs-export-css-response"; - MessageType["CS_FETCH"] = "cs-fetch"; - MessageType["CS_DARK_THEME_DETECTED"] = "cs-dark-theme-detected"; - MessageType["CS_DARK_THEME_NOT_DETECTED"] = - "cs-dark-theme-not-detected"; - MessageType["CS_LOG"] = "cs-log"; - })(MessageType || (MessageType = {})); - - var isNavigatorDefined = typeof navigator !== "undefined"; - var userAgent = isNavigatorDefined - ? navigator.userAgentData && - Array.isArray(navigator.userAgentData.brands) - ? navigator.userAgentData.brands - .map(function (brand) { - return "" - .concat(brand.brand.toLowerCase(), " ") - .concat(brand.version); - }) - .join(" ") - : navigator.userAgent.toLowerCase() - : "some useragent"; - var platform = isNavigatorDefined - ? navigator.userAgentData && - typeof navigator.userAgentData.platform === "string" - ? navigator.userAgentData.platform.toLowerCase() - : navigator.platform.toLowerCase() - : "some platform"; - var isChromium = - userAgent.includes("chrome") || userAgent.includes("chromium"); - var isThunderbird = userAgent.includes("thunderbird"); - var isFirefox = - userAgent.includes("firefox") || - userAgent.includes("librewolf") || - isThunderbird; - userAgent.includes("vivaldi"); - userAgent.includes("yabrowser"); - userAgent.includes("opr") || userAgent.includes("opera"); - userAgent.includes("edg"); - var isSafari = userAgent.includes("safari") && !isChromium; - var isWindows = platform.startsWith("win"); - var isMacOS = platform.startsWith("mac"); - isNavigatorDefined && navigator.userAgentData - ? navigator.userAgentData.mobile - : userAgent.includes("mobile"); - var isShadowDomSupported = typeof ShadowRoot === "function"; - var isMatchMediaChangeEventListenerSupported = - typeof MediaQueryList === "function" && - typeof MediaQueryList.prototype.addEventListener === "function"; - (function () { - var m = userAgent.match(/chrom(?:e|ium)(?:\/| )([^ ]+)/); - if (m && m[1]) { - return m[1]; - } - return ""; - })(); - (function () { - var m = userAgent.match(/(?:firefox|librewolf)(?:\/| )([^ ]+)/); - if (m && m[1]) { - return m[1]; - } - return ""; - })(); - var isDefinedSelectorSupported = (function () { - try { - document.querySelector(":defined"); - return true; - } catch (err) { - return false; - } - })(); - var isCSSColorSchemePropSupported = (function () { - if (typeof document === "undefined") { - return false; - } - var el = document.createElement("div"); - el.setAttribute("style", "color-scheme: dark"); - return el.style && el.style.colorScheme === "dark"; - })(); - - function getOKResponse(url, mimeType, origin) { - return __awaiter(this, void 0, void 0, function () { - var response; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - return [ - 4, - fetch(url, { - cache: "force-cache", - credentials: "omit", - referrer: origin - }) - ]; - case 1: - response = _a.sent(); - if ( - isFirefox && - mimeType === "text/css" && - url.startsWith("moz-extension://") && - url.endsWith(".css") - ) { - return [2, response]; - } - if ( - mimeType && - !response.headers - .get("Content-Type") - .startsWith(mimeType) - ) { - throw new Error( - "Mime type mismatch when loading ".concat(url) - ); - } - if (!response.ok) { - throw new Error( - "Unable to load " - .concat(url, " ") - .concat(response.status, " ") - .concat(response.statusText) - ); - } - return [2, response]; - } - }); - }); - } - function loadAsDataURL(url, mimeType) { - return __awaiter(this, void 0, void 0, function () { - var response; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - return [4, getOKResponse(url, mimeType)]; - case 1: - response = _a.sent(); - return [4, readResponseAsDataURL(response)]; - case 2: - return [2, _a.sent()]; - } - }); - }); - } - function readResponseAsDataURL(response) { - return __awaiter(this, void 0, void 0, function () { - var blob, dataURL; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - return [4, response.blob()]; - case 1: - blob = _a.sent(); - return [ - 4, - new Promise(function (resolve) { - var reader = new FileReader(); - reader.onloadend = function () { - return resolve(reader.result); - }; - reader.readAsDataURL(blob); - }) - ]; - case 2: - dataURL = _a.sent(); - return [2, dataURL]; - } - }); - }); - } - - var throwCORSError = function (url) { - return __awaiter(void 0, void 0, void 0, function () { - return __generator(this, function (_a) { - return [ - 2, - Promise.reject( - new Error( - [ - "Embedded Dark Reader cannot access a cross-origin resource", - url, - "Overview your URLs and CORS policies or use", - "`DarkReader.setFetchMethod(fetch: (url) => Promise))`.", - "See if using `DarkReader.setFetchMethod(window.fetch)`", - "before `DarkReader.enable()` works." - ].join(" ") - ) - ) - ]; - }); - }); - }; - var fetcher = throwCORSError; - function setFetchMethod$1(fetch) { - if (fetch) { - fetcher = fetch; - } else { - fetcher = throwCORSError; - } - } - function callFetchMethod(url) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - return [4, fetcher(url)]; - case 1: - return [2, _a.sent()]; - } - }); - }); - } - - if (!window.chrome) { - window.chrome = {}; - } - if (!chrome.runtime) { - chrome.runtime = {}; - } - var messageListeners = new Set(); - function sendMessage() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return __awaiter(this, void 0, void 0, function () { - var id_1, _a, url, responseType, response, text_1, error_1; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - if (!(args[0] && args[0].type === MessageType.CS_FETCH)) - return [3, 8]; - id_1 = args[0].id; - _b.label = 1; - case 1: - _b.trys.push([1, 7, , 8]); - (_a = args[0].data), - (url = _a.url), - (responseType = _a.responseType); - return [4, callFetchMethod(url)]; - case 2: - response = _b.sent(); - if (!(responseType === "data-url")) return [3, 4]; - return [4, readResponseAsDataURL(response)]; - case 3: - text_1 = _b.sent(); - return [3, 6]; - case 4: - return [4, response.text()]; - case 5: - text_1 = _b.sent(); - _b.label = 6; - case 6: - messageListeners.forEach(function (cb) { - return cb({ - type: MessageType.BG_FETCH_RESPONSE, - data: text_1, - error: null, - id: id_1 - }); - }); - return [3, 8]; - case 7: - error_1 = _b.sent(); - console.error(error_1); - messageListeners.forEach(function (cb) { - return cb({ - type: MessageType.BG_FETCH_RESPONSE, - data: null, - error: error_1, - id: id_1 - }); - }); - return [3, 8]; - case 8: - return [2]; - } - }); - }); - } - function addMessageListener(callback) { - messageListeners.add(callback); - } - if (typeof chrome.runtime.sendMessage === "function") { - var nativeSendMessage_1 = chrome.runtime.sendMessage; - chrome.runtime.sendMessage = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - sendMessage.apply(void 0, __spreadArray([], __read(args), false)); - nativeSendMessage_1.apply(chrome.runtime, args); - }; - } else { - chrome.runtime.sendMessage = sendMessage; - } - if (!chrome.runtime.onMessage) { - chrome.runtime.onMessage = {}; - } - if (typeof chrome.runtime.onMessage.addListener === "function") { - var nativeAddListener_1 = chrome.runtime.onMessage.addListener; - chrome.runtime.onMessage.addListener = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - addMessageListener(args[0]); - nativeAddListener_1.apply(chrome.runtime.onMessage, args); - }; - } else { - chrome.runtime.onMessage.addListener = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return addMessageListener(args[0]); - }; - } - - var ThemeEngine; - (function (ThemeEngine) { - ThemeEngine["cssFilter"] = "cssFilter"; - ThemeEngine["svgFilter"] = "svgFilter"; - ThemeEngine["staticTheme"] = "staticTheme"; - ThemeEngine["dynamicTheme"] = "dynamicTheme"; - })(ThemeEngine || (ThemeEngine = {})); - - var AutomationMode; - (function (AutomationMode) { - AutomationMode["NONE"] = ""; - AutomationMode["TIME"] = "time"; - AutomationMode["SYSTEM"] = "system"; - AutomationMode["LOCATION"] = "location"; - })(AutomationMode || (AutomationMode = {})); - - var DEFAULT_COLORS = { - darkScheme: { - background: "#181a1b", - text: "#e8e6e3" - }, - lightScheme: { - background: "#dcdad7", - text: "#181a1b" - } - }; - var DEFAULT_THEME = { - mode: 1, - brightness: 100, - contrast: 100, - grayscale: 0, - sepia: 0, - useFont: false, - fontFamily: isMacOS - ? "Helvetica Neue" - : isWindows - ? "Segoe UI" - : "Open Sans", - textStroke: 0, - engine: ThemeEngine.dynamicTheme, - stylesheet: "", - darkSchemeBackgroundColor: DEFAULT_COLORS.darkScheme.background, - darkSchemeTextColor: DEFAULT_COLORS.darkScheme.text, - lightSchemeBackgroundColor: DEFAULT_COLORS.lightScheme.background, - lightSchemeTextColor: DEFAULT_COLORS.lightScheme.text, - scrollbarColor: isMacOS ? "" : "auto", - selectionColor: "auto", - styleSystemControls: !isCSSColorSchemePropSupported, - lightColorScheme: "Default", - darkColorScheme: "Default", - immediateModify: false - }; - ({ - enabled: true, - fetchNews: true, - theme: DEFAULT_THEME, - presets: [], - customThemes: [], - siteList: [], - siteListEnabled: [], - applyToListedOnly: false, - changeBrowserTheme: false, - syncSettings: true, - syncSitesFixes: false, - automation: { - enabled: false, - mode: AutomationMode.NONE, - behavior: "OnOff" - }, - time: { - activation: "18:00", - deactivation: "9:00" - }, - location: { - latitude: null, - longitude: null - }, - previewNewDesign: false, - enableForPDF: true, - enableForProtectedPages: false, - enableContextMenus: false, - detectDarkTheme: false - }); - - function isArrayLike(items) { - return items.length != null; - } - function forEach(items, iterator) { - var e_1, _a; - if (isArrayLike(items)) { - for (var i = 0, len = items.length; i < len; i++) { - iterator(items[i]); - } - } else { - try { - for ( - var items_1 = __values(items), items_1_1 = items_1.next(); - !items_1_1.done; - items_1_1 = items_1.next() - ) { - var item = items_1_1.value; - iterator(item); - } - } catch (e_1_1) { - e_1 = {error: e_1_1}; - } finally { - try { - if (items_1_1 && !items_1_1.done && (_a = items_1.return)) - _a.call(items_1); - } finally { - if (e_1) throw e_1.error; - } - } - } - } - function push(array, addition) { - forEach(addition, function (a) { - return array.push(a); - }); - } - function toArray(items) { - var results = []; - for (var i = 0, len = items.length; i < len; i++) { - results.push(items[i]); - } - return results; - } - - function logInfo() {} - function logWarn() {} - - function throttle(callback) { - var pending = false; - var frameId = null; - var lastArgs; - var throttled = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - lastArgs = args; - if (frameId) { - pending = true; - } else { - callback.apply( - void 0, - __spreadArray([], __read(lastArgs), false) - ); - frameId = requestAnimationFrame(function () { - frameId = null; - if (pending) { - callback.apply( - void 0, - __spreadArray([], __read(lastArgs), false) - ); - pending = false; - } - }); - } - }; - var cancel = function () { - cancelAnimationFrame(frameId); - pending = false; - frameId = null; - }; - return Object.assign(throttled, {cancel: cancel}); - } - function createAsyncTasksQueue() { - var tasks = []; - var frameId = null; - function runTasks() { - var task; - while ((task = tasks.shift())) { - task(); - } - frameId = null; - } - function add(task) { - tasks.push(task); - if (!frameId) { - frameId = requestAnimationFrame(runTasks); - } - } - function cancel() { - tasks.splice(0); - cancelAnimationFrame(frameId); - frameId = null; - } - return {add: add, cancel: cancel}; - } - - function getDuration(time) { - var duration = 0; - if (time.seconds) { - duration += time.seconds * 1000; - } - if (time.minutes) { - duration += time.minutes * 60 * 1000; - } - if (time.hours) { - duration += time.hours * 60 * 60 * 1000; - } - if (time.days) { - duration += time.days * 24 * 60 * 60 * 1000; - } - return duration; - } - - function removeNode(node) { - node && node.parentNode && node.parentNode.removeChild(node); - } - function watchForNodePosition(node, mode, onRestore) { - if (onRestore === void 0) { - onRestore = Function.prototype; - } - var MAX_ATTEMPTS_COUNT = 10; - var RETRY_TIMEOUT = getDuration({seconds: 2}); - var ATTEMPTS_INTERVAL = getDuration({seconds: 10}); - var prevSibling = node.previousSibling; - var parent = node.parentNode; - if (!parent) { - throw new Error( - "Unable to watch for node position: parent element not found" - ); - } - if (mode === "prev-sibling" && !prevSibling) { - throw new Error( - "Unable to watch for node position: there is no previous sibling" - ); - } - var attempts = 0; - var start = null; - var timeoutId = null; - var restore = throttle(function () { - if (timeoutId) { - return; - } - attempts++; - var now = Date.now(); - if (start == null) { - start = now; - } else if (attempts >= MAX_ATTEMPTS_COUNT) { - if (now - start < ATTEMPTS_INTERVAL) { - timeoutId = setTimeout(function () { - start = null; - attempts = 0; - timeoutId = null; - restore(); - }, RETRY_TIMEOUT); - return; - } - start = now; - attempts = 1; - } - if (mode === "parent") { - if (prevSibling && prevSibling.parentNode !== parent) { - stop(); - return; - } - } - if (mode === "prev-sibling") { - if (prevSibling.parentNode == null) { - stop(); - return; - } - if (prevSibling.parentNode !== parent) { - updateParent(prevSibling.parentNode); - } - } - parent.insertBefore( - node, - prevSibling ? prevSibling.nextSibling : parent.firstChild - ); - observer.takeRecords(); - onRestore && onRestore(); - }); - var observer = new MutationObserver(function () { - if ( - (mode === "parent" && node.parentNode !== parent) || - (mode === "prev-sibling" && - node.previousSibling !== prevSibling) - ) { - restore(); - } - }); - var run = function () { - observer.observe(parent, {childList: true}); - }; - var stop = function () { - clearTimeout(timeoutId); - observer.disconnect(); - restore.cancel(); - }; - var skip = function () { - observer.takeRecords(); - }; - var updateParent = function (parentNode) { - parent = parentNode; - stop(); - run(); - }; - run(); - return {run: run, stop: stop, skip: skip}; - } - function iterateShadowHosts(root, iterator) { - if (root == null) { - return; - } - var walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, { - acceptNode: function (node) { - return node.shadowRoot == null - ? NodeFilter.FILTER_SKIP - : NodeFilter.FILTER_ACCEPT; - } - }); - for ( - var node = root.shadowRoot ? walker.currentNode : walker.nextNode(); - node != null; - node = walker.nextNode() - ) { - if (node.classList.contains("surfingkeys_hints_host")) { - continue; - } - iterator(node); - iterateShadowHosts(node.shadowRoot, iterator); - } - } - var isDOMReady = function () { - return ( - document.readyState === "complete" || - document.readyState === "interactive" - ); - }; - function setIsDOMReady(newFunc) { - isDOMReady = newFunc; - } - var readyStateListeners = new Set(); - function addDOMReadyListener(listener) { - isDOMReady() ? listener() : readyStateListeners.add(listener); - } - function removeDOMReadyListener(listener) { - readyStateListeners.delete(listener); - } - function isReadyStateComplete() { - return document.readyState === "complete"; - } - var readyStateCompleteListeners = new Set(); - function addReadyStateCompleteListener(listener) { - isReadyStateComplete() - ? listener() - : readyStateCompleteListeners.add(listener); - } - function cleanReadyStateCompleteListeners() { - readyStateCompleteListeners.clear(); - } - if (!isDOMReady()) { - var onReadyStateChange_1 = function () { - if (isDOMReady()) { - readyStateListeners.forEach(function (listener) { - return listener(); - }); - readyStateListeners.clear(); - if (isReadyStateComplete()) { - document.removeEventListener( - "readystatechange", - onReadyStateChange_1 - ); - readyStateCompleteListeners.forEach(function (listener) { - return listener(); - }); - readyStateCompleteListeners.clear(); - } - } - }; - document.addEventListener("readystatechange", onReadyStateChange_1); - } - var HUGE_MUTATIONS_COUNT = 1000; - function isHugeMutation(mutations) { - if (mutations.length > HUGE_MUTATIONS_COUNT) { - return true; - } - var addedNodesCount = 0; - for (var i = 0; i < mutations.length; i++) { - addedNodesCount += mutations[i].addedNodes.length; - if (addedNodesCount > HUGE_MUTATIONS_COUNT) { - return true; - } - } - return false; - } - function getElementsTreeOperations(mutations) { - var additions = new Set(); - var deletions = new Set(); - var moves = new Set(); - mutations.forEach(function (m) { - forEach(m.addedNodes, function (n) { - if (n instanceof Element && n.isConnected) { - additions.add(n); - } - }); - forEach(m.removedNodes, function (n) { - if (n instanceof Element) { - if (n.isConnected) { - moves.add(n); - additions.delete(n); - } else { - deletions.add(n); - } - } - }); - }); - var duplicateAdditions = []; - var duplicateDeletions = []; - additions.forEach(function (node) { - if (additions.has(node.parentElement)) { - duplicateAdditions.push(node); - } - }); - deletions.forEach(function (node) { - if (deletions.has(node.parentElement)) { - duplicateDeletions.push(node); - } - }); - duplicateAdditions.forEach(function (node) { - return additions.delete(node); - }); - duplicateDeletions.forEach(function (node) { - return deletions.delete(node); - }); - return {additions: additions, moves: moves, deletions: deletions}; - } - var optimizedTreeObservers = new Map(); - var optimizedTreeCallbacks = new WeakMap(); - function createOptimizedTreeObserver(root, callbacks) { - var observer; - var observerCallbacks; - var domReadyListener; - if (optimizedTreeObservers.has(root)) { - observer = optimizedTreeObservers.get(root); - observerCallbacks = optimizedTreeCallbacks.get(observer); - } else { - var hadHugeMutationsBefore_1 = false; - var subscribedForReadyState_1 = false; - observer = new MutationObserver(function (mutations) { - if (isHugeMutation(mutations)) { - if (!hadHugeMutationsBefore_1 || isDOMReady()) { - observerCallbacks.forEach(function (_a) { - var onHugeMutations = _a.onHugeMutations; - return onHugeMutations(root); - }); - } else if (!subscribedForReadyState_1) { - domReadyListener = function () { - return observerCallbacks.forEach(function (_a) { - var onHugeMutations = _a.onHugeMutations; - return onHugeMutations(root); - }); - }; - addDOMReadyListener(domReadyListener); - subscribedForReadyState_1 = true; - } - hadHugeMutationsBefore_1 = true; - } else { - var elementsOperations_1 = - getElementsTreeOperations(mutations); - observerCallbacks.forEach(function (_a) { - var onMinorMutations = _a.onMinorMutations; - return onMinorMutations(elementsOperations_1); - }); - } - }); - observer.observe(root, {childList: true, subtree: true}); - optimizedTreeObservers.set(root, observer); - observerCallbacks = new Set(); - optimizedTreeCallbacks.set(observer, observerCallbacks); - } - observerCallbacks.add(callbacks); - return { - disconnect: function () { - observerCallbacks.delete(callbacks); - if (domReadyListener) { - removeDOMReadyListener(domReadyListener); - } - if (observerCallbacks.size === 0) { - observer.disconnect(); - optimizedTreeCallbacks.delete(observer); - optimizedTreeObservers.delete(root); - } - } - }; - } - - var anchor; - var parsedURLCache = new Map(); - function fixBaseURL($url) { - if (!anchor) { - anchor = document.createElement("a"); - } - anchor.href = $url; - return anchor.href; - } - function parseURL($url, $base) { - if ($base === void 0) { - $base = null; - } - var key = "".concat($url).concat($base ? ";".concat($base) : ""); - if (parsedURLCache.has(key)) { - return parsedURLCache.get(key); - } - if ($base) { - var parsedURL_1 = new URL($url, fixBaseURL($base)); - parsedURLCache.set(key, parsedURL_1); - return parsedURL_1; - } - var parsedURL = new URL(fixBaseURL($url)); - parsedURLCache.set($url, parsedURL); - return parsedURL; - } - function getAbsoluteURL($base, $relative) { - if ($relative.match(/^data\\?\:/)) { - return $relative; - } - if (/^\/\//.test($relative)) { - return "".concat(location.protocol).concat($relative); - } - var b = parseURL($base); - var a = parseURL($relative, b.href); - return a.href; - } - function isRelativeHrefOnAbsolutePath(href) { - if (href.startsWith("data:")) { - return true; - } - var url = parseURL(href); - if (url.protocol !== location.protocol) { - return false; - } - if (url.hostname !== location.hostname) { - return false; - } - if (url.port !== location.port) { - return false; - } - return url.pathname === location.pathname; - } - - function iterateCSSRules(rules, iterate, onMediaRuleError) { - forEach(rules, function (rule) { - if (rule.selectorText) { - iterate(rule); - } else if (rule.href) { - try { - iterateCSSRules( - rule.styleSheet.cssRules, - iterate, - onMediaRuleError - ); - } catch (err) { - logInfo("Found a non-loaded link."); - onMediaRuleError && onMediaRuleError(); - } - } else if (rule.media) { - var media = Array.from(rule.media); - var isScreenOrAllOrQuery = media.some(function (m) { - return ( - m.startsWith("screen") || - m.startsWith("all") || - m.startsWith("(") - ); - }); - var isPrintOrSpeech = media.some(function (m) { - return m.startsWith("print") || m.startsWith("speech"); - }); - if (isScreenOrAllOrQuery || !isPrintOrSpeech) { - iterateCSSRules(rule.cssRules, iterate, onMediaRuleError); - } - } else if (rule.conditionText) { - if (CSS.supports(rule.conditionText)) { - iterateCSSRules(rule.cssRules, iterate, onMediaRuleError); - } - } else { - logWarn("CSSRule type not supported", rule); - } - }); - } - var shorthandVarDependantProperties = [ - "background", - "border", - "border-color", - "border-bottom", - "border-left", - "border-right", - "border-top", - "outline", - "outline-color" - ]; - var shorthandVarDepPropRegexps = isSafari - ? shorthandVarDependantProperties.map(function (prop) { - var regexp = new RegExp("".concat(prop, ":\\s*(.*?)\\s*;")); - return [prop, regexp]; - }) - : null; - function iterateCSSDeclarations(style, iterate) { - forEach(style, function (property) { - var value = style.getPropertyValue(property).trim(); - if (!value) { - return; - } - iterate(property, value); - }); - var cssText = style.cssText; - if (cssText.includes("var(")) { - if (isSafari) { - shorthandVarDepPropRegexps.forEach(function (_a) { - var _b = __read(_a, 2), - prop = _b[0], - regexp = _b[1]; - var match = cssText.match(regexp); - if (match && match[1]) { - var val = match[1].trim(); - iterate(prop, val); - } - }); - } else { - shorthandVarDependantProperties.forEach(function (prop) { - var val = style.getPropertyValue(prop); - if (val && val.includes("var(")) { - iterate(prop, val); - } - }); - } - } - } - var cssURLRegex = /url\((('.*?')|(".*?")|([^\)]*?))\)/g; - var cssImportRegex = - /@import\s*(url\()?(('.+?')|(".+?")|([^\)]*?))\)? ?(screen)?;?/gi; - function getCSSURLValue(cssURL) { - return cssURL - .trim() - .replace(/[\n\r\\]+/g, "") - .replace(/^url\((.*)\)$/, "$1") - .trim() - .replace(/^"(.*)"$/, "$1") - .replace(/^'(.*)'$/, "$1") - .replace(/(?:\\(.))/g, "$1"); - } - function getCSSBaseBath(url) { - var cssURL = parseURL(url); - return "" - .concat(cssURL.origin) - .concat( - cssURL.pathname - .replace(/\?.*$/, "") - .replace(/(\/)([^\/]+)$/i, "$1") - ); - } - function replaceCSSRelativeURLsWithAbsolute($css, cssBasePath) { - return $css.replace(cssURLRegex, function (match) { - var pathValue = getCSSURLValue(match); - try { - return "url('".concat( - getAbsoluteURL(cssBasePath, pathValue), - "')" - ); - } catch (err) { - return match; - } - }); - } - var cssCommentsRegex = /\/\*[\s\S]*?\*\//g; - function removeCSSComments($css) { - return $css.replace(cssCommentsRegex, ""); - } - var fontFaceRegex = /@font-face\s*{[^}]*}/g; - function replaceCSSFontFace($css) { - return $css.replace(fontFaceRegex, ""); - } - - function evalMath(expression) { - var rpnStack = []; - var workingStack = []; - var lastToken; - for (var i = 0, len = expression.length; i < len; i++) { - var token = expression[i]; - if (!token || token === " ") { - continue; - } - if (operators.has(token)) { - var op = operators.get(token); - while (workingStack.length) { - var currentOp = operators.get(workingStack[0]); - if (!currentOp) { - break; - } - if (op.lessOrEqualThan(currentOp)) { - rpnStack.push(workingStack.shift()); - } else { - break; - } - } - workingStack.unshift(token); - } else if (!lastToken || operators.has(lastToken)) { - rpnStack.push(token); - } else { - rpnStack[rpnStack.length - 1] += token; - } - lastToken = token; - } - rpnStack.push.apply( - rpnStack, - __spreadArray([], __read(workingStack), false) - ); - var stack = []; - for (var i = 0, len = rpnStack.length; i < len; i++) { - var op = operators.get(rpnStack[i]); - if (op) { - var args = stack.splice(0, 2); - stack.push(op.exec(args[1], args[0])); - } else { - stack.unshift(parseFloat(rpnStack[i])); - } - } - return stack[0]; - } - var Operator = (function () { - function Operator(precedence, method) { - this.precendce = precedence; - this.execMethod = method; - } - Operator.prototype.exec = function (left, right) { - return this.execMethod(left, right); - }; - Operator.prototype.lessOrEqualThan = function (op) { - return this.precendce <= op.precendce; - }; - return Operator; - })(); - var operators = new Map([ - [ - "+", - new Operator(1, function (left, right) { - return left + right; - }) - ], - [ - "-", - new Operator(1, function (left, right) { - return left - right; - }) - ], - [ - "*", - new Operator(2, function (left, right) { - return left * right; - }) - ], - [ - "/", - new Operator(2, function (left, right) { - return left / right; - }) - ] - ]); - - function getMatches(regex, input, group) { - if (group === void 0) { - group = 0; - } - var matches = []; - var m; - while ((m = regex.exec(input))) { - matches.push(m[group]); - } - return matches; - } - function formatCSS(text) { - function trimLeft(text) { - return text.replace(/^\s+/, ""); - } - function getIndent(depth) { - if (depth === 0) { - return ""; - } - return " ".repeat(4 * depth); - } - if (text.length < 50000) { - var emptyRuleRegexp = /[^{}]+{\s*}/; - while (emptyRuleRegexp.test(text)) { - text = text.replace(emptyRuleRegexp, ""); - } - } - var css = text - .replace(/\s{2,}/g, " ") - .replace(/\{/g, "{\n") - .replace(/\}/g, "\n}\n") - .replace(/\;(?![^\(|\"]*(\)|\"))/g, ";\n") - .replace(/\,(?![^\(|\"]*(\)|\"))/g, ",\n") - .replace(/\n\s*\n/g, "\n") - .split("\n"); - var depth = 0; - var formatted = []; - for (var x = 0, len = css.length; x < len; x++) { - var line = "".concat(css[x], "\n"); - if (line.includes("{")) { - formatted.push(getIndent(depth++) + trimLeft(line)); - } else if (line.includes("}")) { - formatted.push(getIndent(--depth) + trimLeft(line)); - } else { - formatted.push(getIndent(depth) + trimLeft(line)); - } - } - return formatted.join("").trim(); - } - function getParenthesesRange(input, searchStartIndex) { - if (searchStartIndex === void 0) { - searchStartIndex = 0; - } - var length = input.length; - var depth = 0; - var firstOpenIndex = -1; - for (var i = searchStartIndex; i < length; i++) { - if (depth === 0) { - var openIndex = input.indexOf("(", i); - if (openIndex < 0) { - break; - } - firstOpenIndex = openIndex; - depth++; - i = openIndex; - } else { - var closingIndex = input.indexOf(")", i); - if (closingIndex < 0) { - break; - } - var openIndex = input.indexOf("(", i); - if (openIndex < 0 || closingIndex < openIndex) { - depth--; - if (depth === 0) { - return {start: firstOpenIndex, end: closingIndex + 1}; - } - i = closingIndex; - } else { - depth++; - i = openIndex; - } - } - } - return null; - } - - var hslaParseCache = new Map(); - var rgbaParseCache = new Map(); - function parseColorWithCache($color) { - $color = $color.trim(); - if (rgbaParseCache.has($color)) { - return rgbaParseCache.get($color); - } - if ($color.includes("calc(")) { - $color = lowerCalcExpression($color); - } - var color = parse($color); - color && rgbaParseCache.set($color, color); - return color; - } - function parseToHSLWithCache(color) { - if (hslaParseCache.has(color)) { - return hslaParseCache.get(color); - } - var rgb = parseColorWithCache(color); - if (!rgb) { - return null; - } - var hsl = rgbToHSL(rgb); - hslaParseCache.set(color, hsl); - return hsl; - } - function clearColorCache() { - hslaParseCache.clear(); - rgbaParseCache.clear(); - } - function hslToRGB(_a) { - var h = _a.h, - s = _a.s, - l = _a.l, - _b = _a.a, - a = _b === void 0 ? 1 : _b; - if (s === 0) { - var _c = __read( - [l, l, l].map(function (x) { - return Math.round(x * 255); - }), - 3 - ), - r_1 = _c[0], - b_1 = _c[1], - g_1 = _c[2]; - return {r: r_1, g: g_1, b: b_1, a: a}; - } - var c = (1 - Math.abs(2 * l - 1)) * s; - var x = c * (1 - Math.abs(((h / 60) % 2) - 1)); - var m = l - c / 2; - var _d = __read( - (h < 60 - ? [c, x, 0] - : h < 120 - ? [x, c, 0] - : h < 180 - ? [0, c, x] - : h < 240 - ? [0, x, c] - : h < 300 - ? [x, 0, c] - : [c, 0, x] - ).map(function (n) { - return Math.round((n + m) * 255); - }), - 3 - ), - r = _d[0], - g = _d[1], - b = _d[2]; - return {r: r, g: g, b: b, a: a}; - } - function rgbToHSL(_a) { - var r255 = _a.r, - g255 = _a.g, - b255 = _a.b, - _b = _a.a, - a = _b === void 0 ? 1 : _b; - var r = r255 / 255; - var g = g255 / 255; - var b = b255 / 255; - var max = Math.max(r, g, b); - var min = Math.min(r, g, b); - var c = max - min; - var l = (max + min) / 2; - if (c === 0) { - return {h: 0, s: 0, l: l, a: a}; - } - var h = - (max === r - ? ((g - b) / c) % 6 - : max === g - ? (b - r) / c + 2 - : (r - g) / c + 4) * 60; - if (h < 0) { - h += 360; - } - var s = c / (1 - Math.abs(2 * l - 1)); - return {h: h, s: s, l: l, a: a}; - } - function toFixed(n, digits) { - if (digits === void 0) { - digits = 0; - } - var fixed = n.toFixed(digits); - if (digits === 0) { - return fixed; - } - var dot = fixed.indexOf("."); - if (dot >= 0) { - var zerosMatch = fixed.match(/0+$/); - if (zerosMatch) { - if (zerosMatch.index === dot + 1) { - return fixed.substring(0, dot); - } - return fixed.substring(0, zerosMatch.index); - } - } - return fixed; - } - function rgbToString(rgb) { - var r = rgb.r, - g = rgb.g, - b = rgb.b, - a = rgb.a; - if (a != null && a < 1) { - return "rgba(" - .concat(toFixed(r), ", ") - .concat(toFixed(g), ", ") - .concat(toFixed(b), ", ") - .concat(toFixed(a, 2), ")"); - } - return "rgb(" - .concat(toFixed(r), ", ") - .concat(toFixed(g), ", ") - .concat(toFixed(b), ")"); - } - function rgbToHexString(_a) { - var r = _a.r, - g = _a.g, - b = _a.b, - a = _a.a; - return "#".concat( - (a != null && a < 1 ? [r, g, b, Math.round(a * 255)] : [r, g, b]) - .map(function (x) { - return "".concat(x < 16 ? "0" : "").concat(x.toString(16)); - }) - .join("") - ); - } - function hslToString(hsl) { - var h = hsl.h, - s = hsl.s, - l = hsl.l, - a = hsl.a; - if (a != null && a < 1) { - return "hsla(" - .concat(toFixed(h), ", ") - .concat(toFixed(s * 100), "%, ") - .concat(toFixed(l * 100), "%, ") - .concat(toFixed(a, 2), ")"); - } - return "hsl(" - .concat(toFixed(h), ", ") - .concat(toFixed(s * 100), "%, ") - .concat(toFixed(l * 100), "%)"); - } - var rgbMatch = /^rgba?\([^\(\)]+\)$/; - var hslMatch = /^hsla?\([^\(\)]+\)$/; - var hexMatch = /^#[0-9a-f]+$/i; - function parse($color) { - var c = $color.trim().toLowerCase(); - if (c.match(rgbMatch)) { - return parseRGB(c); - } - if (c.match(hslMatch)) { - return parseHSL(c); - } - if (c.match(hexMatch)) { - return parseHex(c); - } - if (knownColors.has(c)) { - return getColorByName(c); - } - if (systemColors.has(c)) { - return getSystemColor(c); - } - if ($color === "transparent") { - return {r: 0, g: 0, b: 0, a: 0}; - } - return null; - } - function getNumbers($color) { - var numbers = []; - var prevPos = 0; - var isMining = false; - var startIndex = $color.indexOf("("); - $color = $color.substring(startIndex + 1, $color.length - 1); - for (var i = 0; i < $color.length; i++) { - var c = $color[i]; - if ((c >= "0" && c <= "9") || c === "." || c === "+" || c === "-") { - isMining = true; - } else if (isMining && (c === " " || c === ",")) { - numbers.push($color.substring(prevPos, i)); - isMining = false; - prevPos = i + 1; - } else if (!isMining) { - prevPos = i + 1; - } - } - if (isMining) { - numbers.push($color.substring(prevPos, $color.length)); - } - return numbers; - } - function getNumbersFromString(str, range, units) { - var raw = getNumbers(str); - var unitsList = Object.entries(units); - var numbers = raw - .map(function (r) { - return r.trim(); - }) - .map(function (r, i) { - var n; - var unit = unitsList.find(function (_a) { - var _b = __read(_a, 1), - u = _b[0]; - return r.endsWith(u); - }); - if (unit) { - n = - (parseFloat(r.substring(0, r.length - unit[0].length)) / - unit[1]) * - range[i]; - } else { - n = parseFloat(r); - } - if (range[i] > 1) { - return Math.round(n); - } - return n; - }); - return numbers; - } - var rgbRange = [255, 255, 255, 1]; - var rgbUnits = {"%": 100}; - function parseRGB($rgb) { - var _a = __read(getNumbersFromString($rgb, rgbRange, rgbUnits), 4), - r = _a[0], - g = _a[1], - b = _a[2], - _b = _a[3], - a = _b === void 0 ? 1 : _b; - return {r: r, g: g, b: b, a: a}; - } - var hslRange = [360, 1, 1, 1]; - var hslUnits = {"%": 100, "deg": 360, "rad": 2 * Math.PI, "turn": 1}; - function parseHSL($hsl) { - var _a = __read(getNumbersFromString($hsl, hslRange, hslUnits), 4), - h = _a[0], - s = _a[1], - l = _a[2], - _b = _a[3], - a = _b === void 0 ? 1 : _b; - return hslToRGB({h: h, s: s, l: l, a: a}); - } - function parseHex($hex) { - var h = $hex.substring(1); - switch (h.length) { - case 3: - case 4: { - var _a = __read( - [0, 1, 2].map(function (i) { - return parseInt("".concat(h[i]).concat(h[i]), 16); - }), - 3 - ), - r = _a[0], - g = _a[1], - b = _a[2]; - var a = - h.length === 3 - ? 1 - : parseInt("".concat(h[3]).concat(h[3]), 16) / 255; - return {r: r, g: g, b: b, a: a}; - } - case 6: - case 8: { - var _b = __read( - [0, 2, 4].map(function (i) { - return parseInt(h.substring(i, i + 2), 16); - }), - 3 - ), - r = _b[0], - g = _b[1], - b = _b[2]; - var a = - h.length === 6 ? 1 : parseInt(h.substring(6, 8), 16) / 255; - return {r: r, g: g, b: b, a: a}; - } - } - return null; - } - function getColorByName($color) { - var n = knownColors.get($color); - return { - r: (n >> 16) & 255, - g: (n >> 8) & 255, - b: (n >> 0) & 255, - a: 1 - }; - } - function getSystemColor($color) { - var n = systemColors.get($color); - return { - r: (n >> 16) & 255, - g: (n >> 8) & 255, - b: (n >> 0) & 255, - a: 1 - }; - } - function lowerCalcExpression(color) { - var searchIndex = 0; - var replaceBetweenIndices = function (start, end, replacement) { - color = - color.substring(0, start) + replacement + color.substring(end); - }; - while ((searchIndex = color.indexOf("calc(")) !== -1) { - var range = getParenthesesRange(color, searchIndex); - if (!range) { - break; - } - var slice = color.slice(range.start + 1, range.end - 1); - var includesPercentage = slice.includes("%"); - slice = slice.split("%").join(""); - var output = Math.round(evalMath(slice)); - replaceBetweenIndices( - range.start - 4, - range.end, - output + (includesPercentage ? "%" : "") - ); - } - return color; - } - var knownColors = new Map( - Object.entries({ - aliceblue: 0xf0f8ff, - antiquewhite: 0xfaebd7, - aqua: 0x00ffff, - aquamarine: 0x7fffd4, - azure: 0xf0ffff, - beige: 0xf5f5dc, - bisque: 0xffe4c4, - black: 0x000000, - blanchedalmond: 0xffebcd, - blue: 0x0000ff, - blueviolet: 0x8a2be2, - brown: 0xa52a2a, - burlywood: 0xdeb887, - cadetblue: 0x5f9ea0, - chartreuse: 0x7fff00, - chocolate: 0xd2691e, - coral: 0xff7f50, - cornflowerblue: 0x6495ed, - cornsilk: 0xfff8dc, - crimson: 0xdc143c, - cyan: 0x00ffff, - darkblue: 0x00008b, - darkcyan: 0x008b8b, - darkgoldenrod: 0xb8860b, - darkgray: 0xa9a9a9, - darkgrey: 0xa9a9a9, - darkgreen: 0x006400, - darkkhaki: 0xbdb76b, - darkmagenta: 0x8b008b, - darkolivegreen: 0x556b2f, - darkorange: 0xff8c00, - darkorchid: 0x9932cc, - darkred: 0x8b0000, - darksalmon: 0xe9967a, - darkseagreen: 0x8fbc8f, - darkslateblue: 0x483d8b, - darkslategray: 0x2f4f4f, - darkslategrey: 0x2f4f4f, - darkturquoise: 0x00ced1, - darkviolet: 0x9400d3, - deeppink: 0xff1493, - deepskyblue: 0x00bfff, - dimgray: 0x696969, - dimgrey: 0x696969, - dodgerblue: 0x1e90ff, - firebrick: 0xb22222, - floralwhite: 0xfffaf0, - forestgreen: 0x228b22, - fuchsia: 0xff00ff, - gainsboro: 0xdcdcdc, - ghostwhite: 0xf8f8ff, - gold: 0xffd700, - goldenrod: 0xdaa520, - gray: 0x808080, - grey: 0x808080, - green: 0x008000, - greenyellow: 0xadff2f, - honeydew: 0xf0fff0, - hotpink: 0xff69b4, - indianred: 0xcd5c5c, - indigo: 0x4b0082, - ivory: 0xfffff0, - khaki: 0xf0e68c, - lavender: 0xe6e6fa, - lavenderblush: 0xfff0f5, - lawngreen: 0x7cfc00, - lemonchiffon: 0xfffacd, - lightblue: 0xadd8e6, - lightcoral: 0xf08080, - lightcyan: 0xe0ffff, - lightgoldenrodyellow: 0xfafad2, - lightgray: 0xd3d3d3, - lightgrey: 0xd3d3d3, - lightgreen: 0x90ee90, - lightpink: 0xffb6c1, - lightsalmon: 0xffa07a, - lightseagreen: 0x20b2aa, - lightskyblue: 0x87cefa, - lightslategray: 0x778899, - lightslategrey: 0x778899, - lightsteelblue: 0xb0c4de, - lightyellow: 0xffffe0, - lime: 0x00ff00, - limegreen: 0x32cd32, - linen: 0xfaf0e6, - magenta: 0xff00ff, - maroon: 0x800000, - mediumaquamarine: 0x66cdaa, - mediumblue: 0x0000cd, - mediumorchid: 0xba55d3, - mediumpurple: 0x9370db, - mediumseagreen: 0x3cb371, - mediumslateblue: 0x7b68ee, - mediumspringgreen: 0x00fa9a, - mediumturquoise: 0x48d1cc, - mediumvioletred: 0xc71585, - midnightblue: 0x191970, - mintcream: 0xf5fffa, - mistyrose: 0xffe4e1, - moccasin: 0xffe4b5, - navajowhite: 0xffdead, - navy: 0x000080, - oldlace: 0xfdf5e6, - olive: 0x808000, - olivedrab: 0x6b8e23, - orange: 0xffa500, - orangered: 0xff4500, - orchid: 0xda70d6, - palegoldenrod: 0xeee8aa, - palegreen: 0x98fb98, - paleturquoise: 0xafeeee, - palevioletred: 0xdb7093, - papayawhip: 0xffefd5, - peachpuff: 0xffdab9, - peru: 0xcd853f, - pink: 0xffc0cb, - plum: 0xdda0dd, - powderblue: 0xb0e0e6, - purple: 0x800080, - rebeccapurple: 0x663399, - red: 0xff0000, - rosybrown: 0xbc8f8f, - royalblue: 0x4169e1, - saddlebrown: 0x8b4513, - salmon: 0xfa8072, - sandybrown: 0xf4a460, - seagreen: 0x2e8b57, - seashell: 0xfff5ee, - sienna: 0xa0522d, - silver: 0xc0c0c0, - skyblue: 0x87ceeb, - slateblue: 0x6a5acd, - slategray: 0x708090, - slategrey: 0x708090, - snow: 0xfffafa, - springgreen: 0x00ff7f, - steelblue: 0x4682b4, - tan: 0xd2b48c, - teal: 0x008080, - thistle: 0xd8bfd8, - tomato: 0xff6347, - turquoise: 0x40e0d0, - violet: 0xee82ee, - wheat: 0xf5deb3, - white: 0xffffff, - whitesmoke: 0xf5f5f5, - yellow: 0xffff00, - yellowgreen: 0x9acd32 - }) - ); - var systemColors = new Map( - Object.entries({ - "ActiveBorder": 0x3b99fc, - "ActiveCaption": 0x000000, - "AppWorkspace": 0xaaaaaa, - "Background": 0x6363ce, - "ButtonFace": 0xffffff, - "ButtonHighlight": 0xe9e9e9, - "ButtonShadow": 0x9fa09f, - "ButtonText": 0x000000, - "CaptionText": 0x000000, - "GrayText": 0x7f7f7f, - "Highlight": 0xb2d7ff, - "HighlightText": 0x000000, - "InactiveBorder": 0xffffff, - "InactiveCaption": 0xffffff, - "InactiveCaptionText": 0x000000, - "InfoBackground": 0xfbfcc5, - "InfoText": 0x000000, - "Menu": 0xf6f6f6, - "MenuText": 0xffffff, - "Scrollbar": 0xaaaaaa, - "ThreeDDarkShadow": 0x000000, - "ThreeDFace": 0xc0c0c0, - "ThreeDHighlight": 0xffffff, - "ThreeDLightShadow": 0xffffff, - "ThreeDShadow": 0x000000, - "Window": 0xececec, - "WindowFrame": 0xaaaaaa, - "WindowText": 0x000000, - "-webkit-focus-ring-color": 0xe59700 - }).map(function (_a) { - var _b = __read(_a, 2), - key = _b[0], - value = _b[1]; - return [key.toLowerCase(), value]; - }) - ); - function getSRGBLightness(r, g, b) { - return (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255; - } - - function scale(x, inLow, inHigh, outLow, outHigh) { - return ((x - inLow) * (outHigh - outLow)) / (inHigh - inLow) + outLow; - } - function clamp(x, min, max) { - return Math.min(max, Math.max(min, x)); - } - function multiplyMatrices(m1, m2) { - var result = []; - for (var i = 0, len = m1.length; i < len; i++) { - result[i] = []; - for (var j = 0, len2 = m2[0].length; j < len2; j++) { - var sum = 0; - for (var k = 0, len3 = m1[0].length; k < len3; k++) { - sum += m1[i][k] * m2[k][j]; - } - result[i][j] = sum; - } - } - return result; - } - - function createFilterMatrix(config) { - var m = Matrix.identity(); - if (config.sepia !== 0) { - m = multiplyMatrices(m, Matrix.sepia(config.sepia / 100)); - } - if (config.grayscale !== 0) { - m = multiplyMatrices(m, Matrix.grayscale(config.grayscale / 100)); - } - if (config.contrast !== 100) { - m = multiplyMatrices(m, Matrix.contrast(config.contrast / 100)); - } - if (config.brightness !== 100) { - m = multiplyMatrices(m, Matrix.brightness(config.brightness / 100)); - } - if (config.mode === 1) { - m = multiplyMatrices(m, Matrix.invertNHue()); - } - return m; - } - function applyColorMatrix(_a, matrix) { - var _b = __read(_a, 3), - r = _b[0], - g = _b[1], - b = _b[2]; - var rgb = [[r / 255], [g / 255], [b / 255], [1], [1]]; - var result = multiplyMatrices(matrix, rgb); - return [0, 1, 2].map(function (i) { - return clamp(Math.round(result[i][0] * 255), 0, 255); - }); - } - var Matrix = { - identity: function () { - return [ - [1, 0, 0, 0, 0], - [0, 1, 0, 0, 0], - [0, 0, 1, 0, 0], - [0, 0, 0, 1, 0], - [0, 0, 0, 0, 1] - ]; - }, - invertNHue: function () { - return [ - [0.333, -0.667, -0.667, 0, 1], - [-0.667, 0.333, -0.667, 0, 1], - [-0.667, -0.667, 0.333, 0, 1], - [0, 0, 0, 1, 0], - [0, 0, 0, 0, 1] - ]; - }, - brightness: function (v) { - return [ - [v, 0, 0, 0, 0], - [0, v, 0, 0, 0], - [0, 0, v, 0, 0], - [0, 0, 0, 1, 0], - [0, 0, 0, 0, 1] - ]; - }, - contrast: function (v) { - var t = (1 - v) / 2; - return [ - [v, 0, 0, 0, t], - [0, v, 0, 0, t], - [0, 0, v, 0, t], - [0, 0, 0, 1, 0], - [0, 0, 0, 0, 1] - ]; - }, - sepia: function (v) { - return [ - [ - 0.393 + 0.607 * (1 - v), - 0.769 - 0.769 * (1 - v), - 0.189 - 0.189 * (1 - v), - 0, - 0 - ], - [ - 0.349 - 0.349 * (1 - v), - 0.686 + 0.314 * (1 - v), - 0.168 - 0.168 * (1 - v), - 0, - 0 - ], - [ - 0.272 - 0.272 * (1 - v), - 0.534 - 0.534 * (1 - v), - 0.131 + 0.869 * (1 - v), - 0, - 0 - ], - [0, 0, 0, 1, 0], - [0, 0, 0, 0, 1] - ]; - }, - grayscale: function (v) { - return [ - [ - 0.2126 + 0.7874 * (1 - v), - 0.7152 - 0.7152 * (1 - v), - 0.0722 - 0.0722 * (1 - v), - 0, - 0 - ], - [ - 0.2126 - 0.2126 * (1 - v), - 0.7152 + 0.2848 * (1 - v), - 0.0722 - 0.0722 * (1 - v), - 0, - 0 - ], - [ - 0.2126 - 0.2126 * (1 - v), - 0.7152 - 0.7152 * (1 - v), - 0.0722 + 0.9278 * (1 - v), - 0, - 0 - ], - [0, 0, 0, 1, 0], - [0, 0, 0, 0, 1] - ]; - } - }; - - function getBgPole(theme) { - var isDarkScheme = theme.mode === 1; - var prop = isDarkScheme - ? "darkSchemeBackgroundColor" - : "lightSchemeBackgroundColor"; - return theme[prop]; - } - function getFgPole(theme) { - var isDarkScheme = theme.mode === 1; - var prop = isDarkScheme - ? "darkSchemeTextColor" - : "lightSchemeTextColor"; - return theme[prop]; - } - var colorModificationCache = new Map(); - function clearColorModificationCache() { - colorModificationCache.clear(); - } - var rgbCacheKeys = ["r", "g", "b", "a"]; - var themeCacheKeys$1 = [ - "mode", - "brightness", - "contrast", - "grayscale", - "sepia", - "darkSchemeBackgroundColor", - "darkSchemeTextColor", - "lightSchemeBackgroundColor", - "lightSchemeTextColor" - ]; - function getCacheId(rgb, theme) { - var resultId = ""; - rgbCacheKeys.forEach(function (key) { - resultId += "".concat(rgb[key], ";"); - }); - themeCacheKeys$1.forEach(function (key) { - resultId += "".concat(theme[key], ";"); - }); - return resultId; - } - function modifyColorWithCache( - rgb, - theme, - modifyHSL, - poleColor, - anotherPoleColor - ) { - var fnCache; - if (colorModificationCache.has(modifyHSL)) { - fnCache = colorModificationCache.get(modifyHSL); - } else { - fnCache = new Map(); - colorModificationCache.set(modifyHSL, fnCache); - } - var id = getCacheId(rgb, theme); - if (fnCache.has(id)) { - return fnCache.get(id); - } - var hsl = rgbToHSL(rgb); - var pole = poleColor == null ? null : parseToHSLWithCache(poleColor); - var anotherPole = - anotherPoleColor == null - ? null - : parseToHSLWithCache(anotherPoleColor); - var modified = modifyHSL(hsl, pole, anotherPole); - var _a = hslToRGB(modified), - r = _a.r, - g = _a.g, - b = _a.b, - a = _a.a; - var matrix = createFilterMatrix(theme); - var _b = __read(applyColorMatrix([r, g, b], matrix), 3), - rf = _b[0], - gf = _b[1], - bf = _b[2]; - var color = - a === 1 - ? rgbToHexString({r: rf, g: gf, b: bf}) - : rgbToString({r: rf, g: gf, b: bf, a: a}); - fnCache.set(id, color); - return color; - } - function noopHSL(hsl) { - return hsl; - } - function modifyColor(rgb, theme) { - return modifyColorWithCache(rgb, theme, noopHSL); - } - function modifyLightSchemeColor(rgb, theme) { - var poleBg = getBgPole(theme); - var poleFg = getFgPole(theme); - return modifyColorWithCache( - rgb, - theme, - modifyLightModeHSL, - poleFg, - poleBg - ); - } - function modifyLightModeHSL(_a, poleFg, poleBg) { - var h = _a.h, - s = _a.s, - l = _a.l, - a = _a.a; - var isDark = l < 0.5; - var isNeutral; - if (isDark) { - isNeutral = l < 0.2 || s < 0.12; - } else { - var isBlue = h > 200 && h < 280; - isNeutral = s < 0.24 || (l > 0.8 && isBlue); - } - var hx = h; - var sx = l; - if (isNeutral) { - if (isDark) { - hx = poleFg.h; - sx = poleFg.s; - } else { - hx = poleBg.h; - sx = poleBg.s; - } - } - var lx = scale(l, 0, 1, poleFg.l, poleBg.l); - return {h: hx, s: sx, l: lx, a: a}; - } - var MAX_BG_LIGHTNESS = 0.4; - function modifyBgHSL(_a, pole) { - var h = _a.h, - s = _a.s, - l = _a.l, - a = _a.a; - var isDark = l < 0.5; - var isBlue = h > 200 && h < 280; - var isNeutral = s < 0.12 || (l > 0.8 && isBlue); - if (isDark) { - var lx_1 = scale(l, 0, 0.5, 0, MAX_BG_LIGHTNESS); - if (isNeutral) { - var hx_1 = pole.h; - var sx = pole.s; - return {h: hx_1, s: sx, l: lx_1, a: a}; - } - return {h: h, s: s, l: lx_1, a: a}; - } - var lx = scale(l, 0.5, 1, MAX_BG_LIGHTNESS, pole.l); - if (isNeutral) { - var hx_2 = pole.h; - var sx = pole.s; - return {h: hx_2, s: sx, l: lx, a: a}; - } - var hx = h; - var isYellow = h > 60 && h < 180; - if (isYellow) { - var isCloserToGreen = h > 120; - if (isCloserToGreen) { - hx = scale(h, 120, 180, 135, 180); - } else { - hx = scale(h, 60, 120, 60, 105); - } - } - if (hx > 40 && hx < 80) { - lx *= 0.75; - } - return {h: hx, s: s, l: lx, a: a}; - } - function modifyBackgroundColor(rgb, theme) { - if (theme.mode === 0) { - return modifyLightSchemeColor(rgb, theme); - } - var pole = getBgPole(theme); - return modifyColorWithCache( - rgb, - __assign(__assign({}, theme), {mode: 0}), - modifyBgHSL, - pole - ); - } - var MIN_FG_LIGHTNESS = 0.55; - function modifyBlueFgHue(hue) { - return scale(hue, 205, 245, 205, 220); - } - function modifyFgHSL(_a, pole) { - var h = _a.h, - s = _a.s, - l = _a.l, - a = _a.a; - var isLight = l > 0.5; - var isNeutral = l < 0.2 || s < 0.24; - var isBlue = !isNeutral && h > 205 && h < 245; - if (isLight) { - var lx_2 = scale(l, 0.5, 1, MIN_FG_LIGHTNESS, pole.l); - if (isNeutral) { - var hx_3 = pole.h; - var sx = pole.s; - return {h: hx_3, s: sx, l: lx_2, a: a}; - } - var hx_4 = h; - if (isBlue) { - hx_4 = modifyBlueFgHue(h); - } - return {h: hx_4, s: s, l: lx_2, a: a}; - } - if (isNeutral) { - var hx_5 = pole.h; - var sx = pole.s; - var lx_3 = scale(l, 0, 0.5, pole.l, MIN_FG_LIGHTNESS); - return {h: hx_5, s: sx, l: lx_3, a: a}; - } - var hx = h; - var lx; - if (isBlue) { - hx = modifyBlueFgHue(h); - lx = scale(l, 0, 0.5, pole.l, Math.min(1, MIN_FG_LIGHTNESS + 0.05)); - } else { - lx = scale(l, 0, 0.5, pole.l, MIN_FG_LIGHTNESS); - } - return {h: hx, s: s, l: lx, a: a}; - } - function modifyForegroundColor(rgb, theme) { - if (theme.mode === 0) { - return modifyLightSchemeColor(rgb, theme); - } - var pole = getFgPole(theme); - return modifyColorWithCache( - rgb, - __assign(__assign({}, theme), {mode: 0}), - modifyFgHSL, - pole - ); - } - function modifyBorderHSL(_a, poleFg, poleBg) { - var h = _a.h, - s = _a.s, - l = _a.l, - a = _a.a; - var isDark = l < 0.5; - var isNeutral = l < 0.2 || s < 0.24; - var hx = h; - var sx = s; - if (isNeutral) { - if (isDark) { - hx = poleFg.h; - sx = poleFg.s; - } else { - hx = poleBg.h; - sx = poleBg.s; - } - } - var lx = scale(l, 0, 1, 0.5, 0.2); - return {h: hx, s: sx, l: lx, a: a}; - } - function modifyBorderColor(rgb, theme) { - if (theme.mode === 0) { - return modifyLightSchemeColor(rgb, theme); - } - var poleFg = getFgPole(theme); - var poleBg = getBgPole(theme); - return modifyColorWithCache( - rgb, - __assign(__assign({}, theme), {mode: 0}), - modifyBorderHSL, - poleFg, - poleBg - ); - } - function modifyShadowColor(rgb, filter) { - return modifyBackgroundColor(rgb, filter); - } - function modifyGradientColor(rgb, filter) { - return modifyBackgroundColor(rgb, filter); - } - - function createTextStyle(config) { - var lines = []; - lines.push( - '*:not(pre, pre *, code, .far, .fa, .glyphicon, [class*="vjs-"], .fab, .fa-github, .fas, .material-icons, .icofont, .typcn, mu, [class*="mu-"], .glyphicon, .icon) {' - ); - if (config.useFont && config.fontFamily) { - lines.push( - " font-family: ".concat(config.fontFamily, " !important;") - ); - } - if (config.textStroke > 0) { - lines.push( - " -webkit-text-stroke: ".concat( - config.textStroke, - "px !important;" - ) - ); - lines.push( - " text-stroke: ".concat(config.textStroke, "px !important;") - ); - } - lines.push("}"); - return lines.join("\n"); - } - - var FilterMode; - (function (FilterMode) { - FilterMode[(FilterMode["light"] = 0)] = "light"; - FilterMode[(FilterMode["dark"] = 1)] = "dark"; - })(FilterMode || (FilterMode = {})); - function getCSSFilterValue(config) { - var filters = []; - if (config.mode === FilterMode.dark) { - filters.push("invert(100%) hue-rotate(180deg)"); - } - if (config.brightness !== 100) { - filters.push("brightness(".concat(config.brightness, "%)")); - } - if (config.contrast !== 100) { - filters.push("contrast(".concat(config.contrast, "%)")); - } - if (config.grayscale !== 0) { - filters.push("grayscale(".concat(config.grayscale, "%)")); - } - if (config.sepia !== 0) { - filters.push("sepia(".concat(config.sepia, "%)")); - } - if (filters.length === 0) { - return null; - } - return filters.join(" "); - } - - function toSVGMatrix(matrix) { - return matrix - .slice(0, 4) - .map(function (m) { - return m - .map(function (m) { - return m.toFixed(3); - }) - .join(" "); - }) - .join(" "); - } - function getSVGFilterMatrixValue(config) { - return toSVGMatrix(createFilterMatrix(config)); - } - - var counter = 0; - var resolvers$1 = new Map(); - var rejectors = new Map(); - function bgFetch(request) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [ - 2, - new Promise(function (resolve, reject) { - var id = ++counter; - resolvers$1.set(id, resolve); - rejectors.set(id, reject); - chrome.runtime.sendMessage({ - type: MessageType.CS_FETCH, - data: request, - id: id - }); - }) - ]; - }); - }); - } - chrome.runtime.onMessage.addListener(function (_a) { - var type = _a.type, - data = _a.data, - error = _a.error, - id = _a.id; - if (type === MessageType.BG_FETCH_RESPONSE) { - var resolve = resolvers$1.get(id); - var reject = rejectors.get(id); - resolvers$1.delete(id); - rejectors.delete(id); - if (error) { - reject && reject(error); - } else { - resolve && resolve(data); - } - } - }); - - var AsyncQueue = (function () { - function AsyncQueue() { - this.queue = []; - this.timerId = null; - this.frameDuration = 1000 / 60; - } - AsyncQueue.prototype.addToQueue = function (entry) { - this.queue.push(entry); - this.startQueue(); - }; - AsyncQueue.prototype.stopQueue = function () { - if (this.timerId !== null) { - cancelAnimationFrame(this.timerId); - this.timerId = null; - } - this.queue = []; - }; - AsyncQueue.prototype.startQueue = function () { - var _this = this; - if (this.timerId) { - return; - } - this.timerId = requestAnimationFrame(function () { - _this.timerId = null; - var start = Date.now(); - var cb; - while ((cb = _this.queue.shift())) { - cb(); - if (Date.now() - start >= _this.frameDuration) { - _this.startQueue(); - break; - } - } - }); - }; - return AsyncQueue; - })(); - - var imageManager = new AsyncQueue(); - function getImageDetails(url) { - return __awaiter(this, void 0, void 0, function () { - var _this = this; - return __generator(this, function (_a) { - return [ - 2, - new Promise(function (resolve, reject) { - return __awaiter(_this, void 0, void 0, function () { - var dataURL, error_1, image_1, error_2; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!url.startsWith("data:")) - return [3, 1]; - dataURL = url; - return [3, 4]; - case 1: - _a.trys.push([1, 3, , 4]); - return [4, getImageDataURL(url)]; - case 2: - dataURL = _a.sent(); - return [3, 4]; - case 3: - error_1 = _a.sent(); - reject(error_1); - return [2]; - case 4: - _a.trys.push([4, 6, , 7]); - return [4, urlToImage(dataURL)]; - case 5: - image_1 = _a.sent(); - imageManager.addToQueue(function () { - resolve( - __assign( - { - src: url, - dataURL: dataURL, - width: image_1.naturalWidth, - height: image_1.naturalHeight - }, - analyzeImage(image_1) - ) - ); - }); - return [3, 7]; - case 6: - error_2 = _a.sent(); - reject(error_2); - return [3, 7]; - case 7: - return [2]; - } - }); - }); - }) - ]; - }); - }); - } - function getImageDataURL(url) { - return __awaiter(this, void 0, void 0, function () { - var parsedURL; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - parsedURL = new URL(url); - if (!(parsedURL.origin === location.origin)) - return [3, 2]; - return [4, loadAsDataURL(url)]; - case 1: - return [2, _a.sent()]; - case 2: - return [ - 4, - bgFetch({url: url, responseType: "data-url"}) - ]; - case 3: - return [2, _a.sent()]; - } - }); - }); - } - function urlToImage(url) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [ - 2, - new Promise(function (resolve, reject) { - var image = new Image(); - image.onload = function () { - return resolve(image); - }; - image.onerror = function () { - return reject("Unable to load image ".concat(url)); - }; - image.src = url; - }) - ]; - }); - }); - } - var MAX_ANALIZE_PIXELS_COUNT = 32 * 32; - var canvas; - var context; - function createCanvas() { - var maxWidth = MAX_ANALIZE_PIXELS_COUNT; - var maxHeight = MAX_ANALIZE_PIXELS_COUNT; - canvas = document.createElement("canvas"); - canvas.width = maxWidth; - canvas.height = maxHeight; - context = canvas.getContext("2d"); - context.imageSmoothingEnabled = false; - } - function removeCanvas() { - canvas = null; - context = null; - } - var MAX_IMAGE_SIZE = 5 * 1024 * 1024; - function analyzeImage(image) { - if (!canvas) { - createCanvas(); - } - var naturalWidth = image.naturalWidth, - naturalHeight = image.naturalHeight; - if (naturalHeight === 0 || naturalWidth === 0) { - logWarn("logWarn(Image is empty ".concat(image.currentSrc, ")")); - return null; - } - var size = naturalWidth * naturalHeight * 4; - if (size > MAX_IMAGE_SIZE) { - return { - isDark: false, - isLight: false, - isTransparent: false, - isLarge: false, - isTooLarge: true - }; - } - var naturalPixelsCount = naturalWidth * naturalHeight; - var k = Math.min( - 1, - Math.sqrt(MAX_ANALIZE_PIXELS_COUNT / naturalPixelsCount) - ); - var width = Math.ceil(naturalWidth * k); - var height = Math.ceil(naturalHeight * k); - context.clearRect(0, 0, width, height); - context.drawImage( - image, - 0, - 0, - naturalWidth, - naturalHeight, - 0, - 0, - width, - height - ); - var imageData = context.getImageData(0, 0, width, height); - var d = imageData.data; - var TRANSPARENT_ALPHA_THRESHOLD = 0.05; - var DARK_LIGHTNESS_THRESHOLD = 0.4; - var LIGHT_LIGHTNESS_THRESHOLD = 0.7; - var transparentPixelsCount = 0; - var darkPixelsCount = 0; - var lightPixelsCount = 0; - var i, x, y; - var r, g, b, a; - var l; - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - i = 4 * (y * width + x); - r = d[i + 0]; - g = d[i + 1]; - b = d[i + 2]; - a = d[i + 3]; - if (a / 255 < TRANSPARENT_ALPHA_THRESHOLD) { - transparentPixelsCount++; - } else { - l = getSRGBLightness(r, g, b); - if (l < DARK_LIGHTNESS_THRESHOLD) { - darkPixelsCount++; - } - if (l > LIGHT_LIGHTNESS_THRESHOLD) { - lightPixelsCount++; - } - } - } - } - var totalPixelsCount = width * height; - var opaquePixelsCount = totalPixelsCount - transparentPixelsCount; - var DARK_IMAGE_THRESHOLD = 0.7; - var LIGHT_IMAGE_THRESHOLD = 0.7; - var TRANSPARENT_IMAGE_THRESHOLD = 0.1; - var LARGE_IMAGE_PIXELS_COUNT = 800 * 600; - return { - isDark: darkPixelsCount / opaquePixelsCount >= DARK_IMAGE_THRESHOLD, - isLight: - lightPixelsCount / opaquePixelsCount >= LIGHT_IMAGE_THRESHOLD, - isTransparent: - transparentPixelsCount / totalPixelsCount >= - TRANSPARENT_IMAGE_THRESHOLD, - isLarge: naturalPixelsCount >= LARGE_IMAGE_PIXELS_COUNT, - isTooLarge: false - }; - } - function getFilteredImageDataURL(_a, theme) { - var dataURL = _a.dataURL, - width = _a.width, - height = _a.height; - var matrix = getSVGFilterMatrixValue(theme); - var svg = [ - ''), - "", - '', - ''), - "", - "", - ''), - "" - ].join(""); - return "data:image/svg+xml;base64,".concat(btoa(svg)); - } - function cleanImageProcessingCache() { - imageManager && imageManager.stopQueue(); - removeCanvas(); - } - - var gradientLength = "gradient".length; - var conicGradient = "conic-"; - var conicGradientLength = conicGradient.length; - var radialGradient = "radial-"; - var linearGradient = "linear-"; - function parseGradient(value) { - var result = []; - var index = 0; - var startIndex = conicGradient.length; - var _loop_1 = function () { - var typeGradient; - [linearGradient, radialGradient, conicGradient].find(function ( - possibleType - ) { - if (index - possibleType.length >= 0) { - var possibleGradient = value.substring( - index - possibleType.length, - index - ); - if (possibleGradient === possibleType) { - if ( - value.slice( - index - possibleType.length - 10, - index - possibleType.length - 1 - ) === "repeating" - ) { - typeGradient = "repeating-".concat( - possibleType, - "gradient" - ); - return true; - } - if ( - value.slice( - index - possibleType.length - 8, - index - possibleType.length - 1 - ) === "-webkit" - ) { - typeGradient = "-webkit-".concat( - possibleType, - "gradient" - ); - return true; - } - typeGradient = "".concat(possibleType, "gradient"); - return true; - } - } - }); - if (!typeGradient) { - return "break"; - } - var _a = getParenthesesRange(value, index + gradientLength), - start = _a.start, - end = _a.end; - var match = value.substring(start + 1, end - 1); - startIndex = end + 1 + conicGradientLength; - result.push({ - typeGradient: typeGradient, - match: match, - offset: typeGradient.length + 2, - index: index - typeGradient.length + gradientLength, - hasComma: true - }); - }; - while ((index = value.indexOf("gradient", startIndex)) !== -1) { - var state_1 = _loop_1(); - if (state_1 === "break") break; - } - if (result.length) { - result[result.length - 1].hasComma = false; - } - return result; - } - - function getPriority(ruleStyle, property) { - return Boolean(ruleStyle && ruleStyle.getPropertyPriority(property)); - } - function getModifiableCSSDeclaration( - property, - value, - rule, - variablesStore, - ignoreImageSelectors, - isCancelled - ) { - if (property.startsWith("--")) { - var modifier = getVariableModifier( - variablesStore, - property, - value, - rule, - ignoreImageSelectors, - isCancelled - ); - if (modifier) { - return { - property: property, - value: modifier, - important: getPriority(rule.style, property), - sourceValue: value - }; - } - } else if (value.includes("var(")) { - var modifier = getVariableDependantModifier( - variablesStore, - property, - value - ); - if (modifier) { - return { - property: property, - value: modifier, - important: getPriority(rule.style, property), - sourceValue: value - }; - } - } else if (property === "color-scheme") { - return null; - } else if ( - (property.includes("color") && - property !== "-webkit-print-color-adjust") || - property === "fill" || - property === "stroke" || - property === "stop-color" - ) { - var modifier = getColorModifier(property, value, rule); - if (modifier) { - return { - property: property, - value: modifier, - important: getPriority(rule.style, property), - sourceValue: value - }; - } - } else if ( - property === "background-image" || - property === "list-style-image" - ) { - var modifier = getBgImageModifier( - value, - rule, - ignoreImageSelectors, - isCancelled - ); - if (modifier) { - return { - property: property, - value: modifier, - important: getPriority(rule.style, property), - sourceValue: value - }; - } - } else if (property.includes("shadow")) { - var modifier = getShadowModifier(value); - if (modifier) { - return { - property: property, - value: modifier, - important: getPriority(rule.style, property), - sourceValue: value - }; - } - } - return null; - } - function joinSelectors() { - var selectors = []; - for (var _i = 0; _i < arguments.length; _i++) { - selectors[_i] = arguments[_i]; - } - return selectors.filter(Boolean).join(", "); - } - function getModifiedUserAgentStyle(theme, isIFrame, styleSystemControls) { - var lines = []; - if (!isIFrame) { - lines.push("html {"); - lines.push( - " background-color: ".concat( - modifyBackgroundColor({r: 255, g: 255, b: 255}, theme), - " !important;" - ) - ); - lines.push("}"); - } - if (isCSSColorSchemePropSupported) { - lines.push("html {"); - lines.push( - " color-scheme: ".concat( - theme.mode === 1 ? "dark" : "dark light", - " !important;" - ) - ); - lines.push("}"); - } - var bgSelectors = joinSelectors( - isIFrame ? "" : "html, body", - styleSystemControls ? "input, textarea, select, button, dialog" : "" - ); - if (bgSelectors) { - lines.push("".concat(bgSelectors, " {")); - lines.push( - " background-color: ".concat( - modifyBackgroundColor({r: 255, g: 255, b: 255}, theme), - ";" - ) - ); - lines.push("}"); - } - lines.push( - "".concat( - joinSelectors( - "html, body", - styleSystemControls ? "input, textarea, select, button" : "" - ), - " {" - ) - ); - lines.push( - " border-color: ".concat( - modifyBorderColor({r: 76, g: 76, b: 76}, theme), - ";" - ) - ); - lines.push( - " color: ".concat( - modifyForegroundColor({r: 0, g: 0, b: 0}, theme), - ";" - ) - ); - lines.push("}"); - lines.push("a {"); - lines.push( - " color: ".concat( - modifyForegroundColor({r: 0, g: 64, b: 255}, theme), - ";" - ) - ); - lines.push("}"); - lines.push("table {"); - lines.push( - " border-color: ".concat( - modifyBorderColor({r: 128, g: 128, b: 128}, theme), - ";" - ) - ); - lines.push("}"); - lines.push("::placeholder {"); - lines.push( - " color: ".concat( - modifyForegroundColor({r: 169, g: 169, b: 169}, theme), - ";" - ) - ); - lines.push("}"); - lines.push("input:-webkit-autofill,"); - lines.push("textarea:-webkit-autofill,"); - lines.push("select:-webkit-autofill {"); - lines.push( - " background-color: ".concat( - modifyBackgroundColor({r: 250, g: 255, b: 189}, theme), - " !important;" - ) - ); - lines.push( - " color: ".concat( - modifyForegroundColor({r: 0, g: 0, b: 0}, theme), - " !important;" - ) - ); - lines.push("}"); - if (theme.scrollbarColor) { - lines.push(getModifiedScrollbarStyle(theme)); - } - if (theme.selectionColor) { - lines.push(getModifiedSelectionStyle(theme)); - } - return lines.join("\n"); - } - function getSelectionColor(theme) { - var backgroundColorSelection; - var foregroundColorSelection; - if (theme.selectionColor === "auto") { - backgroundColorSelection = modifyBackgroundColor( - {r: 0, g: 96, b: 212}, - __assign(__assign({}, theme), {grayscale: 0}) - ); - foregroundColorSelection = modifyForegroundColor( - {r: 255, g: 255, b: 255}, - __assign(__assign({}, theme), {grayscale: 0}) - ); - } else { - var rgb = parseColorWithCache(theme.selectionColor); - var hsl = rgbToHSL(rgb); - backgroundColorSelection = theme.selectionColor; - if (hsl.l < 0.5) { - foregroundColorSelection = "#FFF"; - } else { - foregroundColorSelection = "#000"; - } - } - return { - backgroundColorSelection: backgroundColorSelection, - foregroundColorSelection: foregroundColorSelection - }; - } - function getModifiedSelectionStyle(theme) { - var lines = []; - var modifiedSelectionColor = getSelectionColor(theme); - var backgroundColorSelection = - modifiedSelectionColor.backgroundColorSelection; - var foregroundColorSelection = - modifiedSelectionColor.foregroundColorSelection; - ["::selection", "::-moz-selection"].forEach(function (selection) { - lines.push("".concat(selection, " {")); - lines.push( - " background-color: ".concat( - backgroundColorSelection, - " !important;" - ) - ); - lines.push( - " color: ".concat(foregroundColorSelection, " !important;") - ); - lines.push("}"); - }); - return lines.join("\n"); - } - function getModifiedScrollbarStyle(theme) { - var lines = []; - var colorTrack; - var colorIcons; - var colorThumb; - var colorThumbHover; - var colorThumbActive; - var colorCorner; - if (theme.scrollbarColor === "auto") { - colorTrack = modifyBackgroundColor({r: 241, g: 241, b: 241}, theme); - colorIcons = modifyForegroundColor({r: 96, g: 96, b: 96}, theme); - colorThumb = modifyBackgroundColor({r: 176, g: 176, b: 176}, theme); - colorThumbHover = modifyBackgroundColor( - {r: 144, g: 144, b: 144}, - theme - ); - colorThumbActive = modifyBackgroundColor( - {r: 96, g: 96, b: 96}, - theme - ); - colorCorner = modifyBackgroundColor( - {r: 255, g: 255, b: 255}, - theme - ); - } else { - var rgb = parseColorWithCache(theme.scrollbarColor); - var hsl_1 = rgbToHSL(rgb); - var isLight = hsl_1.l > 0.5; - var lighten = function (lighter) { - return __assign(__assign({}, hsl_1), { - l: clamp(hsl_1.l + lighter, 0, 1) - }); - }; - var darken = function (darker) { - return __assign(__assign({}, hsl_1), { - l: clamp(hsl_1.l - darker, 0, 1) - }); - }; - colorTrack = hslToString(darken(0.4)); - colorIcons = hslToString(isLight ? darken(0.4) : lighten(0.4)); - colorThumb = hslToString(hsl_1); - colorThumbHover = hslToString(lighten(0.1)); - colorThumbActive = hslToString(lighten(0.2)); - } - lines.push("::-webkit-scrollbar {"); - lines.push(" background-color: ".concat(colorTrack, ";")); - lines.push(" color: ".concat(colorIcons, ";")); - lines.push("}"); - lines.push("::-webkit-scrollbar-thumb {"); - lines.push(" background-color: ".concat(colorThumb, ";")); - lines.push("}"); - lines.push("::-webkit-scrollbar-thumb:hover {"); - lines.push(" background-color: ".concat(colorThumbHover, ";")); - lines.push("}"); - lines.push("::-webkit-scrollbar-thumb:active {"); - lines.push(" background-color: ".concat(colorThumbActive, ";")); - lines.push("}"); - lines.push("::-webkit-scrollbar-corner {"); - lines.push(" background-color: ".concat(colorCorner, ";")); - lines.push("}"); - if (isFirefox) { - lines.push("* {"); - lines.push( - " scrollbar-color: " - .concat(colorThumb, " ") - .concat(colorTrack, ";") - ); - lines.push("}"); - } - return lines.join("\n"); - } - function getModifiedFallbackStyle(filter, _a) { - var strict = _a.strict; - var lines = []; - var isMicrosoft = ["microsoft.com", "docs.microsoft.com"].includes( - location.hostname - ); - lines.push( - "html, body, ".concat( - strict - ? "body :not(iframe)".concat( - isMicrosoft - ? ':not(div[style^="position:absolute;top:0;left:-"]' - : "" - ) - : "body > :not(iframe)", - " {" - ) - ); - lines.push( - " background-color: ".concat( - modifyBackgroundColor({r: 255, g: 255, b: 255}, filter), - " !important;" - ) - ); - lines.push( - " border-color: ".concat( - modifyBorderColor({r: 64, g: 64, b: 64}, filter), - " !important;" - ) - ); - lines.push( - " color: ".concat( - modifyForegroundColor({r: 0, g: 0, b: 0}, filter), - " !important;" - ) - ); - lines.push("}"); - return lines.join("\n"); - } - var unparsableColors = new Set([ - "inherit", - "transparent", - "initial", - "currentcolor", - "none", - "unset" - ]); - function getColorModifier(prop, value, rule) { - if (unparsableColors.has(value.toLowerCase())) { - return value; - } - var rgb = parseColorWithCache(value); - if (!rgb) { - return null; - } - if (prop.includes("background")) { - if ( - (rule.style.webkitMaskImage && - rule.style.webkitMaskImage !== "none") || - (rule.style.webkitMask && - !rule.style.webkitMask.startsWith("none")) || - (rule.style.mask && rule.style.mask !== "none") || - (rule.style.getPropertyValue("mask-image") && - rule.style.getPropertyValue("mask-image") !== "none") - ) { - return function (filter) { - return modifyForegroundColor(rgb, filter); - }; - } - return function (filter) { - return modifyBackgroundColor(rgb, filter); - }; - } - if (prop.includes("border") || prop.includes("outline")) { - return function (filter) { - return modifyBorderColor(rgb, filter); - }; - } - return function (filter) { - return modifyForegroundColor(rgb, filter); - }; - } - var imageDetailsCache = new Map(); - var awaitingForImageLoading = new Map(); - function shouldIgnoreImage(selectorText, selectors) { - if (!selectorText || selectors.length === 0) { - return false; - } - if ( - selectors.some(function (s) { - return s === "*"; - }) - ) { - return true; - } - var ruleSelectors = selectorText.split(/,\s*/g); - var _loop_1 = function (i) { - var ignoredSelector = selectors[i]; - if ( - ruleSelectors.some(function (s) { - return s === ignoredSelector; - }) - ) { - return {value: true}; - } - }; - for (var i = 0; i < selectors.length; i++) { - var state_1 = _loop_1(i); - if (typeof state_1 === "object") return state_1.value; - } - return false; - } - function getBgImageModifier( - value, - rule, - ignoreImageSelectors, - isCancelled - ) { - var _this = this; - try { - var gradients = parseGradient(value); - var urls = getMatches(cssURLRegex, value); - if (urls.length === 0 && gradients.length === 0) { - return value; - } - var getIndices = function (matches) { - var index = 0; - return matches.map(function (match) { - var valueIndex = value.indexOf(match, index); - index = valueIndex + match.length; - return {match: match, index: valueIndex}; - }); - }; - var matches_1 = gradients - .map(function (i) { - return __assign({type: "gradient"}, i); - }) - .concat( - getIndices(urls).map(function (i) { - return __assign({type: "url", offset: 0}, i); - }) - ) - .sort(function (a, b) { - return a.index > b.index ? 1 : -1; - }); - var getGradientModifier_1 = function (gradient) { - var typeGradient = gradient.typeGradient, - match = gradient.match, - hasComma = gradient.hasComma; - var partsRegex = - /([^\(\),]+(\([^\(\)]*(\([^\(\)]*\)*[^\(\)]*)?\))?([^\(\), ]|( (?!calc)))*),?/g; - var colorStopRegex = - /^(from|color-stop|to)\(([^\(\)]*?,\s*)?(.*?)\)$/; - var parts = getMatches(partsRegex, match, 1).map(function ( - part - ) { - part = part.trim(); - var rgb = parseColorWithCache(part); - if (rgb) { - return function (filter) { - return modifyGradientColor(rgb, filter); - }; - } - var space = part.lastIndexOf(" "); - rgb = parseColorWithCache(part.substring(0, space)); - if (rgb) { - return function (filter) { - return "" - .concat(modifyGradientColor(rgb, filter), " ") - .concat(part.substring(space + 1)); - }; - } - var colorStopMatch = part.match(colorStopRegex); - if (colorStopMatch) { - rgb = parseColorWithCache(colorStopMatch[3]); - if (rgb) { - return function (filter) { - return "" - .concat(colorStopMatch[1], "(") - .concat( - colorStopMatch[2] - ? "".concat(colorStopMatch[2], ", ") - : "" - ) - .concat( - modifyGradientColor(rgb, filter), - ")" - ); - }; - } - } - return function () { - return part; - }; - }); - return function (filter) { - return "" - .concat(typeGradient, "(") - .concat( - parts - .map(function (modify) { - return modify(filter); - }) - .join(", "), - ")" - ) - .concat(hasComma ? ", " : ""); - }; - }; - var getURLModifier_1 = function (urlValue) { - var _a; - if ( - shouldIgnoreImage(rule.selectorText, ignoreImageSelectors) - ) { - return null; - } - var url = getCSSURLValue(urlValue); - var isURLEmpty = url.length === 0; - var parentStyleSheet = rule.parentStyleSheet; - var baseURL = - parentStyleSheet && parentStyleSheet.href - ? getCSSBaseBath(parentStyleSheet.href) - : ((_a = parentStyleSheet.ownerNode) === null || - _a === void 0 - ? void 0 - : _a.baseURI) || location.origin; - url = getAbsoluteURL(baseURL, url); - var absoluteValue = 'url("'.concat(url, '")'); - return function (filter) { - return __awaiter(_this, void 0, void 0, function () { - var imageDetails, awaiters_1, err_1, bgImageValue; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (isURLEmpty) { - return [2, "url('')"]; - } - if (!imageDetailsCache.has(url)) - return [3, 1]; - imageDetails = imageDetailsCache.get(url); - return [3, 7]; - case 1: - _a.trys.push([1, 6, , 7]); - if (!awaitingForImageLoading.has(url)) - return [3, 3]; - awaiters_1 = - awaitingForImageLoading.get(url); - return [ - 4, - new Promise(function (resolve) { - return awaiters_1.push(resolve); - }) - ]; - case 2: - imageDetails = _a.sent(); - if (!imageDetails) { - return [2, null]; - } - return [3, 5]; - case 3: - awaitingForImageLoading.set(url, []); - return [4, getImageDetails(url)]; - case 4: - imageDetails = _a.sent(); - imageDetailsCache.set(url, imageDetails); - awaitingForImageLoading - .get(url) - .forEach(function (resolve) { - return resolve(imageDetails); - }); - awaitingForImageLoading.delete(url); - _a.label = 5; - case 5: - if (isCancelled()) { - return [2, null]; - } - return [3, 7]; - case 6: - err_1 = _a.sent(); - logWarn(err_1); - if (awaitingForImageLoading.has(url)) { - awaitingForImageLoading - .get(url) - .forEach(function (resolve) { - return resolve(null); - }); - awaitingForImageLoading.delete(url); - } - return [2, absoluteValue]; - case 7: - bgImageValue = - getBgImageValue_1( - imageDetails, - filter - ) || absoluteValue; - return [2, bgImageValue]; - } - }); - }); - }; - }; - var getBgImageValue_1 = function (imageDetails, filter) { - var isDark = imageDetails.isDark, - isLight = imageDetails.isLight, - isTransparent = imageDetails.isTransparent, - isLarge = imageDetails.isLarge, - isTooLarge = imageDetails.isTooLarge, - width = imageDetails.width; - var result; - if (isTooLarge) { - result = 'url("'.concat(imageDetails.src, '")'); - } else if ( - isDark && - isTransparent && - filter.mode === 1 && - !isLarge && - width > 2 - ) { - logInfo("Inverting dark image ".concat(imageDetails.src)); - var inverted = getFilteredImageDataURL( - imageDetails, - __assign(__assign({}, filter), { - sepia: clamp(filter.sepia + 10, 0, 100) - }) - ); - result = 'url("'.concat(inverted, '")'); - } else if (isLight && !isTransparent && filter.mode === 1) { - if (isLarge) { - result = "none"; - } else { - logInfo( - "Dimming light image ".concat(imageDetails.src) - ); - var dimmed = getFilteredImageDataURL( - imageDetails, - filter - ); - result = 'url("'.concat(dimmed, '")'); - } - } else if (filter.mode === 0 && isLight && !isLarge) { - logInfo( - "Applying filter to image ".concat(imageDetails.src) - ); - var filtered = getFilteredImageDataURL( - imageDetails, - __assign(__assign({}, filter), { - brightness: clamp(filter.brightness - 10, 5, 200), - sepia: clamp(filter.sepia + 10, 0, 100) - }) - ); - result = 'url("'.concat(filtered, '")'); - } else { - result = null; - } - return result; - }; - var modifiers_1 = []; - var matchIndex_1 = 0; - var prevHasComma_1 = false; - matches_1.forEach(function (_a, i) { - var type = _a.type, - match = _a.match, - index = _a.index, - typeGradient = _a.typeGradient, - hasComma = _a.hasComma, - offset = _a.offset; - var matchStart = index; - var prefixStart = matchIndex_1; - var matchEnd = matchStart + match.length + offset; - matchIndex_1 = matchEnd; - if (prefixStart !== matchStart) { - if (prevHasComma_1) { - modifiers_1.push(function () { - var betweenValue = value.substring( - prefixStart, - matchStart - ); - if (betweenValue[0] === ",") { - betweenValue = betweenValue.substring(1); - } - return betweenValue; - }); - } else { - modifiers_1.push(function () { - return value.substring(prefixStart, matchStart); - }); - } - } - prevHasComma_1 = hasComma || false; - if (type === "url") { - modifiers_1.push(getURLModifier_1(match)); - } else if (type === "gradient") { - modifiers_1.push( - getGradientModifier_1({ - match: match, - index: index, - typeGradient: typeGradient, - hasComma: hasComma, - offset: offset - }) - ); - } - if (i === matches_1.length - 1) { - modifiers_1.push(function () { - return value.substring(matchEnd); - }); - } - }); - return function (filter) { - var results = modifiers_1 - .filter(Boolean) - .map(function (modify) { - return modify(filter); - }); - if ( - results.some(function (r) { - return r instanceof Promise; - }) - ) { - return Promise.all(results).then(function (asyncResults) { - return asyncResults.filter(Boolean).join(""); - }); - } - var combinedResult = results.join(""); - if (combinedResult.endsWith(", initial")) { - return combinedResult.slice(0, -9); - } - return combinedResult; - }; - } catch (err) { - return null; - } - } - function getShadowModifierWithInfo(value) { - try { - var index_1 = 0; - var colorMatches_1 = getMatches( - /(^|\s)(?!calc)([a-z]+\(.+?\)|#[0-9a-f]+|[a-z]+)(.*?(inset|outset)?($|,))/gi, - value, - 2 - ); - var notParsed_1 = 0; - var modifiers_2 = colorMatches_1.map(function (match, i) { - var prefixIndex = index_1; - var matchIndex = value.indexOf(match, index_1); - var matchEnd = matchIndex + match.length; - index_1 = matchEnd; - var rgb = parseColorWithCache(match); - if (!rgb) { - notParsed_1++; - return function () { - return value.substring(prefixIndex, matchEnd); - }; - } - return function (filter) { - return "" - .concat(value.substring(prefixIndex, matchIndex)) - .concat(modifyShadowColor(rgb, filter)) - .concat( - i === colorMatches_1.length - 1 - ? value.substring(matchEnd) - : "" - ); - }; - }); - return function (filter) { - var modified = modifiers_2 - .map(function (modify) { - return modify(filter); - }) - .join(""); - return { - matchesLength: colorMatches_1.length, - unparseableMatchesLength: notParsed_1, - result: modified - }; - }; - } catch (err) { - return null; - } - } - function getShadowModifier(value) { - var shadowModifier = getShadowModifierWithInfo(value); - if (!shadowModifier) { - return null; - } - return function (theme) { - return shadowModifier(theme).result; - }; - } - function getVariableModifier( - variablesStore, - prop, - value, - rule, - ignoredImgSelectors, - isCancelled - ) { - return variablesStore.getModifierForVariable({ - varName: prop, - sourceValue: value, - rule: rule, - ignoredImgSelectors: ignoredImgSelectors, - isCancelled: isCancelled - }); - } - function getVariableDependantModifier(variablesStore, prop, value) { - return variablesStore.getModifierForVarDependant(prop, value); - } - function cleanModificationCache() { - clearColorModificationCache(); - imageDetailsCache.clear(); - cleanImageProcessingCache(); - awaitingForImageLoading.clear(); - } - - var VAR_TYPE_BGCOLOR = 1 << 0; - var VAR_TYPE_TEXTCOLOR = 1 << 1; - var VAR_TYPE_BORDERCOLOR = 1 << 2; - var VAR_TYPE_BGIMG = 1 << 3; - var VariablesStore = (function () { - function VariablesStore() { - this.varTypes = new Map(); - this.rulesQueue = []; - this.definedVars = new Set(); - this.varRefs = new Map(); - this.unknownColorVars = new Set(); - this.unknownBgVars = new Set(); - this.undefinedVars = new Set(); - this.initialVarTypes = new Map(); - this.changedTypeVars = new Set(); - this.typeChangeSubscriptions = new Map(); - this.unstableVarValues = new Map(); - } - VariablesStore.prototype.clear = function () { - this.varTypes.clear(); - this.rulesQueue.splice(0); - this.definedVars.clear(); - this.varRefs.clear(); - this.unknownColorVars.clear(); - this.unknownBgVars.clear(); - this.undefinedVars.clear(); - this.initialVarTypes.clear(); - this.changedTypeVars.clear(); - this.typeChangeSubscriptions.clear(); - this.unstableVarValues.clear(); - }; - VariablesStore.prototype.isVarType = function (varName, typeNum) { - return ( - this.varTypes.has(varName) && - (this.varTypes.get(varName) & typeNum) > 0 - ); - }; - VariablesStore.prototype.addRulesForMatching = function (rules) { - this.rulesQueue.push(rules); - }; - VariablesStore.prototype.matchVariablesAndDependants = function () { - var _this = this; - this.changedTypeVars.clear(); - this.initialVarTypes = new Map(this.varTypes); - this.collectRootVariables(); - this.collectVariablesAndVarDep(this.rulesQueue); - this.rulesQueue.splice(0); - this.collectRootVarDependants(); - this.varRefs.forEach(function (refs, v) { - refs.forEach(function (r) { - if (_this.varTypes.has(v)) { - _this.resolveVariableType(r, _this.varTypes.get(v)); - } - }); - }); - this.unknownColorVars.forEach(function (v) { - if (_this.unknownBgVars.has(v)) { - _this.unknownColorVars.delete(v); - _this.unknownBgVars.delete(v); - _this.resolveVariableType(v, VAR_TYPE_BGCOLOR); - } else if ( - _this.isVarType( - v, - VAR_TYPE_BGCOLOR | - VAR_TYPE_TEXTCOLOR | - VAR_TYPE_BORDERCOLOR - ) - ) { - _this.unknownColorVars.delete(v); - } else { - _this.undefinedVars.add(v); - } - }); - this.unknownBgVars.forEach(function (v) { - var hasColor = - _this.findVarRef(v, function (ref) { - return ( - _this.unknownColorVars.has(ref) || - _this.isVarType( - ref, - VAR_TYPE_TEXTCOLOR | VAR_TYPE_BORDERCOLOR - ) - ); - }) != null; - if (hasColor) { - _this.itarateVarRefs(v, function (ref) { - _this.resolveVariableType(ref, VAR_TYPE_BGCOLOR); - }); - } else if ( - _this.isVarType(v, VAR_TYPE_BGCOLOR | VAR_TYPE_BGIMG) - ) { - _this.unknownBgVars.delete(v); - } else { - _this.undefinedVars.add(v); - } - }); - this.changedTypeVars.forEach(function (varName) { - if (_this.typeChangeSubscriptions.has(varName)) { - _this.typeChangeSubscriptions - .get(varName) - .forEach(function (callback) { - callback(); - }); - } - }); - this.changedTypeVars.clear(); - }; - VariablesStore.prototype.getModifierForVariable = function (options) { - var _this = this; - return function (theme) { - var varName = options.varName, - sourceValue = options.sourceValue, - rule = options.rule, - ignoredImgSelectors = options.ignoredImgSelectors, - isCancelled = options.isCancelled; - var getDeclarations = function () { - var declarations = []; - var addModifiedValue = function ( - typeNum, - varNameWrapper, - colorModifier - ) { - if (!_this.isVarType(varName, typeNum)) { - return; - } - var property = varNameWrapper(varName); - var modifiedValue; - if (isVarDependant(sourceValue)) { - if (isConstructedColorVar(sourceValue)) { - var value = insertVarValues( - sourceValue, - _this.unstableVarValues - ); - if (!value) { - value = - typeNum === VAR_TYPE_BGCOLOR - ? "#ffffff" - : "#000000"; - } - modifiedValue = colorModifier(value, theme); - } else { - modifiedValue = replaceCSSVariablesNames( - sourceValue, - function (v) { - return varNameWrapper(v); - }, - function (fallback) { - return colorModifier(fallback, theme); - } - ); - } - } else { - modifiedValue = colorModifier(sourceValue, theme); - } - declarations.push({ - property: property, - value: modifiedValue - }); - }; - addModifiedValue( - VAR_TYPE_BGCOLOR, - wrapBgColorVariableName, - tryModifyBgColor - ); - addModifiedValue( - VAR_TYPE_TEXTCOLOR, - wrapTextColorVariableName, - tryModifyTextColor - ); - addModifiedValue( - VAR_TYPE_BORDERCOLOR, - wrapBorderColorVariableName, - tryModifyBorderColor - ); - if (_this.isVarType(varName, VAR_TYPE_BGIMG)) { - var property = wrapBgImgVariableName(varName); - var modifiedValue = sourceValue; - if (isVarDependant(sourceValue)) { - modifiedValue = replaceCSSVariablesNames( - sourceValue, - function (v) { - return wrapBgColorVariableName(v); - }, - function (fallback) { - return tryModifyBgColor(fallback, theme); - } - ); - } - var bgModifier = getBgImageModifier( - modifiedValue, - rule, - ignoredImgSelectors, - isCancelled - ); - modifiedValue = - typeof bgModifier === "function" - ? bgModifier(theme) - : bgModifier; - declarations.push({ - property: property, - value: modifiedValue - }); - } - return declarations; - }; - var callbacks = new Set(); - var addListener = function (onTypeChange) { - var callback = function () { - var decs = getDeclarations(); - onTypeChange(decs); - }; - callbacks.add(callback); - _this.subscribeForVarTypeChange(varName, callback); - }; - var removeListeners = function () { - callbacks.forEach(function (callback) { - _this.unsubscribeFromVariableTypeChanges( - varName, - callback - ); - }); - }; - return { - declarations: getDeclarations(), - onTypeChange: { - addListener: addListener, - removeListeners: removeListeners - } - }; - }; - }; - VariablesStore.prototype.getModifierForVarDependant = function ( - property, - sourceValue - ) { - var _this = this; - if (sourceValue.match(/^\s*(rgb|hsl)a?\(/)) { - var isBg_1 = property.startsWith("background"); - var isText_1 = isTextColorProperty(property); - return function (theme) { - var value = insertVarValues( - sourceValue, - _this.unstableVarValues - ); - if (!value) { - value = isBg_1 ? "#ffffff" : "#000000"; - } - var modifier = isBg_1 - ? tryModifyBgColor - : isText_1 - ? tryModifyTextColor - : tryModifyBorderColor; - return modifier(value, theme); - }; - } - if (property === "background-color") { - return function (theme) { - return replaceCSSVariablesNames( - sourceValue, - function (v) { - return wrapBgColorVariableName(v); - }, - function (fallback) { - return tryModifyBgColor(fallback, theme); - } - ); - }; - } - if (isTextColorProperty(property)) { - return function (theme) { - return replaceCSSVariablesNames( - sourceValue, - function (v) { - return wrapTextColorVariableName(v); - }, - function (fallback) { - return tryModifyTextColor(fallback, theme); - } - ); - }; - } - if ( - property === "background" || - property === "background-image" || - property === "box-shadow" - ) { - return function (theme) { - var unknownVars = new Set(); - var modify = function () { - var variableReplaced = replaceCSSVariablesNames( - sourceValue, - function (v) { - if (_this.isVarType(v, VAR_TYPE_BGCOLOR)) { - return wrapBgColorVariableName(v); - } - if (_this.isVarType(v, VAR_TYPE_BGIMG)) { - return wrapBgImgVariableName(v); - } - unknownVars.add(v); - return v; - }, - function (fallback) { - return tryModifyBgColor(fallback, theme); - } - ); - if (property === "box-shadow") { - var shadowModifier = - getShadowModifierWithInfo(variableReplaced); - var modifiedShadow = shadowModifier(theme); - if ( - modifiedShadow.unparseableMatchesLength !== - modifiedShadow.matchesLength - ) { - return modifiedShadow.result; - } - } - return variableReplaced; - }; - var modified = modify(); - if (unknownVars.size > 0) { - return new Promise(function (resolve) { - var firstUnknownVar = unknownVars - .values() - .next().value; - var callback = function () { - _this.unsubscribeFromVariableTypeChanges( - firstUnknownVar, - callback - ); - var newValue = modify(); - resolve(newValue); - }; - _this.subscribeForVarTypeChange( - firstUnknownVar, - callback - ); - }); - } - return modified; - }; - } - if ( - property.startsWith("border") || - property.startsWith("outline") - ) { - return function (theme) { - return replaceCSSVariablesNames( - sourceValue, - function (v) { - return wrapBorderColorVariableName(v); - }, - function (fallback) { - return tryModifyBorderColor(fallback, theme); - } - ); - }; - } - return null; - }; - VariablesStore.prototype.subscribeForVarTypeChange = function ( - varName, - callback - ) { - if (!this.typeChangeSubscriptions.has(varName)) { - this.typeChangeSubscriptions.set(varName, new Set()); - } - var rootStore = this.typeChangeSubscriptions.get(varName); - if (!rootStore.has(callback)) { - rootStore.add(callback); - } - }; - VariablesStore.prototype.unsubscribeFromVariableTypeChanges = function ( - varName, - callback - ) { - if (this.typeChangeSubscriptions.has(varName)) { - this.typeChangeSubscriptions.get(varName).delete(callback); - } - }; - VariablesStore.prototype.collectVariablesAndVarDep = function ( - ruleList - ) { - var _this = this; - ruleList.forEach(function (rules) { - iterateCSSRules(rules, function (rule) { - rule.style && - iterateCSSDeclarations( - rule.style, - function (property, value) { - if (isVariable(property)) { - _this.inspectVariable(property, value); - } - if (isVarDependant(value)) { - _this.inspectVarDependant(property, value); - } - } - ); - }); - }); - }; - VariablesStore.prototype.collectRootVariables = function () { - var _this = this; - iterateCSSDeclarations( - document.documentElement.style, - function (property, value) { - if (isVariable(property)) { - _this.inspectVariable(property, value); - } - } - ); - }; - VariablesStore.prototype.inspectVariable = function (varName, value) { - this.unstableVarValues.set(varName, value); - if (isVarDependant(value) && isConstructedColorVar(value)) { - this.unknownColorVars.add(varName); - this.definedVars.add(varName); - } - if (this.definedVars.has(varName)) { - return; - } - this.definedVars.add(varName); - var color = parseColorWithCache(value); - if (color) { - this.unknownColorVars.add(varName); - } else if ( - value.includes("url(") || - value.includes("linear-gradient(") || - value.includes("radial-gradient(") - ) { - this.resolveVariableType(varName, VAR_TYPE_BGIMG); - } - }; - VariablesStore.prototype.resolveVariableType = function ( - varName, - typeNum - ) { - var initialType = this.initialVarTypes.get(varName) || 0; - var currentType = this.varTypes.get(varName) || 0; - var newType = currentType | typeNum; - this.varTypes.set(varName, newType); - if (newType !== initialType || this.undefinedVars.has(varName)) { - this.changedTypeVars.add(varName); - this.undefinedVars.delete(varName); - } - this.unknownColorVars.delete(varName); - this.unknownBgVars.delete(varName); - }; - VariablesStore.prototype.collectRootVarDependants = function () { - var _this = this; - iterateCSSDeclarations( - document.documentElement.style, - function (property, value) { - if (isVarDependant(value)) { - _this.inspectVarDependant(property, value); - } - } - ); - }; - VariablesStore.prototype.inspectVarDependant = function ( - property, - value - ) { - var _this = this; - if (isVariable(property)) { - this.iterateVarDeps(value, function (ref) { - if (!_this.varRefs.has(property)) { - _this.varRefs.set(property, new Set()); - } - _this.varRefs.get(property).add(ref); - }); - } else if ( - property === "background-color" || - property === "box-shadow" - ) { - this.iterateVarDeps(value, function (v) { - return _this.resolveVariableType(v, VAR_TYPE_BGCOLOR); - }); - } else if (isTextColorProperty(property)) { - this.iterateVarDeps(value, function (v) { - return _this.resolveVariableType(v, VAR_TYPE_TEXTCOLOR); - }); - } else if ( - property.startsWith("border") || - property.startsWith("outline") - ) { - this.iterateVarDeps(value, function (v) { - return _this.resolveVariableType(v, VAR_TYPE_BORDERCOLOR); - }); - } else if ( - property === "background" || - property === "background-image" - ) { - this.iterateVarDeps(value, function (v) { - if (_this.isVarType(v, VAR_TYPE_BGCOLOR | VAR_TYPE_BGIMG)) { - return; - } - var isBgColor = - _this.findVarRef(v, function (ref) { - return ( - _this.unknownColorVars.has(ref) || - _this.isVarType( - ref, - VAR_TYPE_TEXTCOLOR | VAR_TYPE_BORDERCOLOR - ) - ); - }) != null; - _this.itarateVarRefs(v, function (ref) { - if (isBgColor) { - _this.resolveVariableType(ref, VAR_TYPE_BGCOLOR); - } else { - _this.unknownBgVars.add(ref); - } - }); - }); - } - }; - VariablesStore.prototype.iterateVarDeps = function (value, iterator) { - var varDeps = new Set(); - iterateVarDependencies(value, function (v) { - return varDeps.add(v); - }); - varDeps.forEach(function (v) { - return iterator(v); - }); - }; - VariablesStore.prototype.findVarRef = function ( - varName, - iterator, - stack - ) { - var e_1, _a; - if (stack === void 0) { - stack = new Set(); - } - if (stack.has(varName)) { - return null; - } - stack.add(varName); - var result = iterator(varName); - if (result) { - return varName; - } - var refs = this.varRefs.get(varName); - if (!refs || refs.size === 0) { - return null; - } - try { - for ( - var refs_1 = __values(refs), refs_1_1 = refs_1.next(); - !refs_1_1.done; - refs_1_1 = refs_1.next() - ) { - var ref = refs_1_1.value; - var found = this.findVarRef(ref, iterator, stack); - if (found) { - return found; - } - } - } catch (e_1_1) { - e_1 = {error: e_1_1}; - } finally { - try { - if (refs_1_1 && !refs_1_1.done && (_a = refs_1.return)) - _a.call(refs_1); - } finally { - if (e_1) throw e_1.error; - } - } - return null; - }; - VariablesStore.prototype.itarateVarRefs = function (varName, iterator) { - this.findVarRef(varName, function (ref) { - iterator(ref); - return false; - }); - }; - VariablesStore.prototype.setOnRootVariableChange = function (callback) { - this.onRootVariableDefined = callback; - }; - VariablesStore.prototype.putRootVars = function (styleElement, theme) { - var e_2, _a; - var _this = this; - var sheet = styleElement.sheet; - if (sheet.cssRules.length > 0) { - sheet.deleteRule(0); - } - var declarations = new Map(); - iterateCSSDeclarations( - document.documentElement.style, - function (property, value) { - if (isVariable(property)) { - if (_this.isVarType(property, VAR_TYPE_BGCOLOR)) { - declarations.set( - wrapBgColorVariableName(property), - tryModifyBgColor(value, theme) - ); - } - if (_this.isVarType(property, VAR_TYPE_TEXTCOLOR)) { - declarations.set( - wrapTextColorVariableName(property), - tryModifyTextColor(value, theme) - ); - } - if (_this.isVarType(property, VAR_TYPE_BORDERCOLOR)) { - declarations.set( - wrapBorderColorVariableName(property), - tryModifyBorderColor(value, theme) - ); - } - _this.subscribeForVarTypeChange( - property, - _this.onRootVariableDefined - ); - } - } - ); - var cssLines = []; - cssLines.push(":root {"); - try { - for ( - var declarations_1 = __values(declarations), - declarations_1_1 = declarations_1.next(); - !declarations_1_1.done; - declarations_1_1 = declarations_1.next() - ) { - var _b = __read(declarations_1_1.value, 2), - property = _b[0], - value = _b[1]; - cssLines.push( - " ".concat(property, ": ").concat(value, ";") - ); - } - } catch (e_2_1) { - e_2 = {error: e_2_1}; - } finally { - try { - if ( - declarations_1_1 && - !declarations_1_1.done && - (_a = declarations_1.return) - ) - _a.call(declarations_1); - } finally { - if (e_2) throw e_2.error; - } - } - cssLines.push("}"); - var cssText = cssLines.join("\n"); - sheet.insertRule(cssText); - }; - return VariablesStore; - })(); - var variablesStore = new VariablesStore(); - function getVariableRange(input, searchStart) { - if (searchStart === void 0) { - searchStart = 0; - } - var start = input.indexOf("var(", searchStart); - if (start >= 0) { - var range = getParenthesesRange(input, start + 3); - if (range) { - return {start: start, end: range.end}; - } - return null; - } - } - function getVariablesMatches(input) { - var ranges = []; - var i = 0; - var range; - while ((range = getVariableRange(input, i))) { - var start = range.start, - end = range.end; - ranges.push({ - start: start, - end: end, - value: input.substring(start, end) - }); - i = range.end + 1; - } - return ranges; - } - function replaceVariablesMatches(input, replacer) { - var matches = getVariablesMatches(input); - var matchesCount = matches.length; - if (matchesCount === 0) { - return input; - } - var inputLength = input.length; - var replacements = matches.map(function (m) { - return replacer(m.value); - }); - var parts = []; - parts.push(input.substring(0, matches[0].start)); - for (var i = 0; i < matchesCount; i++) { - parts.push(replacements[i]); - var start = matches[i].end; - var end = i < matchesCount - 1 ? matches[i + 1].start : inputLength; - parts.push(input.substring(start, end)); - } - return parts.join(""); - } - function getVariableNameAndFallback(match) { - var commaIndex = match.indexOf(","); - var name; - var fallback; - if (commaIndex >= 0) { - name = match.substring(4, commaIndex).trim(); - fallback = match.substring(commaIndex + 1, match.length - 1).trim(); - } else { - name = match.substring(4, match.length - 1).trim(); - fallback = ""; - } - return {name: name, fallback: fallback}; - } - function replaceCSSVariablesNames(value, nameReplacer, fallbackReplacer) { - var matchReplacer = function (match) { - var _a = getVariableNameAndFallback(match), - name = _a.name, - fallback = _a.fallback; - var newName = nameReplacer(name); - if (!fallback) { - return "var(".concat(newName, ")"); - } - var newFallback; - if (isVarDependant(fallback)) { - newFallback = replaceCSSVariablesNames( - fallback, - nameReplacer, - fallbackReplacer - ); - } else if (fallbackReplacer) { - newFallback = fallbackReplacer(fallback); - } else { - newFallback = fallback; - } - return "var(".concat(newName, ", ").concat(newFallback, ")"); - }; - return replaceVariablesMatches(value, matchReplacer); - } - function iterateVarDependencies(value, iterator) { - replaceCSSVariablesNames(value, function (varName) { - iterator(varName); - return varName; - }); - } - function wrapBgColorVariableName(name) { - return "--darkreader-bg".concat(name); - } - function wrapTextColorVariableName(name) { - return "--darkreader-text".concat(name); - } - function wrapBorderColorVariableName(name) { - return "--darkreader-border".concat(name); - } - function wrapBgImgVariableName(name) { - return "--darkreader-bgimg".concat(name); - } - function isVariable(property) { - return property.startsWith("--"); - } - function isVarDependant(value) { - return value.includes("var("); - } - function isConstructedColorVar(value) { - return value.match(/^\s*(rgb|hsl)a?\(/); - } - function isTextColorProperty(property) { - return ( - property === "color" || - property === "caret-color" || - property === "-webkit-text-fill-color" - ); - } - var rawValueRegex = /^\d{1,3}, ?\d{1,3}, ?\d{1,3}$/; - function parseRawValue(color) { - if (rawValueRegex.test(color)) { - var splitted = color.split(","); - var resultInRGB_1 = "rgb("; - splitted.forEach(function (number) { - resultInRGB_1 += "".concat(number.trim(), ", "); - }); - resultInRGB_1 = resultInRGB_1.substring( - 0, - resultInRGB_1.length - 2 - ); - resultInRGB_1 += ")"; - return {isRaw: true, color: resultInRGB_1}; - } - return {isRaw: false, color: color}; - } - function handleRawValue(color, theme, modifyFunction) { - var _a = parseRawValue(color), - isRaw = _a.isRaw, - newColor = _a.color; - var rgb = parseColorWithCache(newColor); - if (rgb) { - var outputColor = modifyFunction(rgb, theme); - if (isRaw) { - var outputInRGB = parseColorWithCache(outputColor); - return outputInRGB - ? "" - .concat(outputInRGB.r, ", ") - .concat(outputInRGB.g, ", ") - .concat(outputInRGB.b) - : outputColor; - } - return outputColor; - } - return newColor; - } - function tryModifyBgColor(color, theme) { - return handleRawValue(color, theme, modifyBackgroundColor); - } - function tryModifyTextColor(color, theme) { - return handleRawValue(color, theme, modifyForegroundColor); - } - function tryModifyBorderColor(color, theme) { - return handleRawValue(color, theme, modifyBorderColor); - } - function insertVarValues(source, varValues, stack) { - if (stack === void 0) { - stack = new Set(); - } - var containsUnresolvedVar = false; - var matchReplacer = function (match) { - var _a = getVariableNameAndFallback(match), - name = _a.name, - fallback = _a.fallback; - if (stack.has(name)) { - containsUnresolvedVar = true; - return null; - } - stack.add(name); - var varValue = varValues.get(name) || fallback; - var inserted = null; - if (varValue) { - if (isVarDependant(varValue)) { - inserted = insertVarValues(varValue, varValues, stack); - } else { - inserted = varValue; - } - } - if (!inserted) { - containsUnresolvedVar = true; - return null; - } - return inserted; - }; - var replaced = replaceVariablesMatches(source, matchReplacer); - if (containsUnresolvedVar) { - return null; - } - return replaced; - } - - var overrides = { - "background-color": { - customProp: "--darkreader-inline-bgcolor", - cssProp: "background-color", - dataAttr: "data-darkreader-inline-bgcolor" - }, - "background-image": { - customProp: "--darkreader-inline-bgimage", - cssProp: "background-image", - dataAttr: "data-darkreader-inline-bgimage" - }, - "border-color": { - customProp: "--darkreader-inline-border", - cssProp: "border-color", - dataAttr: "data-darkreader-inline-border" - }, - "border-bottom-color": { - customProp: "--darkreader-inline-border-bottom", - cssProp: "border-bottom-color", - dataAttr: "data-darkreader-inline-border-bottom" - }, - "border-left-color": { - customProp: "--darkreader-inline-border-left", - cssProp: "border-left-color", - dataAttr: "data-darkreader-inline-border-left" - }, - "border-right-color": { - customProp: "--darkreader-inline-border-right", - cssProp: "border-right-color", - dataAttr: "data-darkreader-inline-border-right" - }, - "border-top-color": { - customProp: "--darkreader-inline-border-top", - cssProp: "border-top-color", - dataAttr: "data-darkreader-inline-border-top" - }, - "box-shadow": { - customProp: "--darkreader-inline-boxshadow", - cssProp: "box-shadow", - dataAttr: "data-darkreader-inline-boxshadow" - }, - "color": { - customProp: "--darkreader-inline-color", - cssProp: "color", - dataAttr: "data-darkreader-inline-color" - }, - "fill": { - customProp: "--darkreader-inline-fill", - cssProp: "fill", - dataAttr: "data-darkreader-inline-fill" - }, - "stroke": { - customProp: "--darkreader-inline-stroke", - cssProp: "stroke", - dataAttr: "data-darkreader-inline-stroke" - }, - "outline-color": { - customProp: "--darkreader-inline-outline", - cssProp: "outline-color", - dataAttr: "data-darkreader-inline-outline" - }, - "stop-color": { - customProp: "--darkreader-inline-stopcolor", - cssProp: "stop-color", - dataAttr: "data-darkreader-inline-stopcolor" - } - }; - var overridesList = Object.values(overrides); - var normalizedPropList = {}; - overridesList.forEach(function (_a) { - var cssProp = _a.cssProp, - customProp = _a.customProp; - return (normalizedPropList[customProp] = cssProp); - }); - var INLINE_STYLE_ATTRS = [ - "style", - "fill", - "stop-color", - "stroke", - "bgcolor", - "color" - ]; - var INLINE_STYLE_SELECTOR = INLINE_STYLE_ATTRS.map(function (attr) { - return "[".concat(attr, "]"); - }).join(", "); - function getInlineOverrideStyle() { - return overridesList - .map(function (_a) { - var dataAttr = _a.dataAttr, - customProp = _a.customProp, - cssProp = _a.cssProp; - return [ - "[".concat(dataAttr, "] {"), - " " - .concat(cssProp, ": var(") - .concat(customProp, ") !important;"), - "}" - ].join("\n"); - }) - .join("\n"); - } - function getInlineStyleElements(root) { - var results = []; - if (root instanceof Element && root.matches(INLINE_STYLE_SELECTOR)) { - results.push(root); - } - if ( - root instanceof Element || - (isShadowDomSupported && root instanceof ShadowRoot) || - root instanceof Document - ) { - push(results, root.querySelectorAll(INLINE_STYLE_SELECTOR)); - } - return results; - } - var treeObservers = new Map(); - var attrObservers = new Map(); - function watchForInlineStyles(elementStyleDidChange, shadowRootDiscovered) { - deepWatchForInlineStyles( - document, - elementStyleDidChange, - shadowRootDiscovered - ); - iterateShadowHosts(document.documentElement, function (host) { - deepWatchForInlineStyles( - host.shadowRoot, - elementStyleDidChange, - shadowRootDiscovered - ); - }); - } - function deepWatchForInlineStyles( - root, - elementStyleDidChange, - shadowRootDiscovered - ) { - if (treeObservers.has(root)) { - treeObservers.get(root).disconnect(); - attrObservers.get(root).disconnect(); - } - var discoveredNodes = new WeakSet(); - function discoverNodes(node) { - getInlineStyleElements(node).forEach(function (el) { - if (discoveredNodes.has(el)) { - return; - } - discoveredNodes.add(el); - elementStyleDidChange(el); - }); - iterateShadowHosts(node, function (n) { - if (discoveredNodes.has(node)) { - return; - } - discoveredNodes.add(node); - shadowRootDiscovered(n.shadowRoot); - deepWatchForInlineStyles( - n.shadowRoot, - elementStyleDidChange, - shadowRootDiscovered - ); - }); - } - var treeObserver = createOptimizedTreeObserver(root, { - onMinorMutations: function (_a) { - var additions = _a.additions; - additions.forEach(function (added) { - return discoverNodes(added); - }); - }, - onHugeMutations: function () { - discoverNodes(root); - } - }); - treeObservers.set(root, treeObserver); - var attemptCount = 0; - var start = null; - var ATTEMPTS_INTERVAL = getDuration({seconds: 10}); - var RETRY_TIMEOUT = getDuration({seconds: 2}); - var MAX_ATTEMPTS_COUNT = 50; - var cache = []; - var timeoutId = null; - var handleAttributeMutations = throttle(function (mutations) { - mutations.forEach(function (m) { - if (INLINE_STYLE_ATTRS.includes(m.attributeName)) { - elementStyleDidChange(m.target); - } - }); - }); - var attrObserver = new MutationObserver(function (mutations) { - if (timeoutId) { - cache.push.apply( - cache, - __spreadArray([], __read(mutations), false) - ); - return; - } - attemptCount++; - var now = Date.now(); - if (start == null) { - start = now; - } else if (attemptCount >= MAX_ATTEMPTS_COUNT) { - if (now - start < ATTEMPTS_INTERVAL) { - timeoutId = setTimeout(function () { - start = null; - attemptCount = 0; - timeoutId = null; - var attributeCache = cache; - cache = []; - handleAttributeMutations(attributeCache); - }, RETRY_TIMEOUT); - cache.push.apply( - cache, - __spreadArray([], __read(mutations), false) - ); - return; - } - start = now; - attemptCount = 1; - } - handleAttributeMutations(mutations); - }); - attrObserver.observe(root, { - attributes: true, - attributeFilter: INLINE_STYLE_ATTRS.concat( - overridesList.map(function (_a) { - var dataAttr = _a.dataAttr; - return dataAttr; - }) - ), - subtree: true - }); - attrObservers.set(root, attrObserver); - } - function stopWatchingForInlineStyles() { - treeObservers.forEach(function (o) { - return o.disconnect(); - }); - attrObservers.forEach(function (o) { - return o.disconnect(); - }); - treeObservers.clear(); - attrObservers.clear(); - } - var inlineStyleCache = new WeakMap(); - var filterProps = ["brightness", "contrast", "grayscale", "sepia", "mode"]; - function getInlineStyleCacheKey(el, theme) { - return INLINE_STYLE_ATTRS.map(function (attr) { - return "".concat(attr, '="').concat(el.getAttribute(attr), '"'); - }) - .concat( - filterProps.map(function (prop) { - return "".concat(prop, '="').concat(theme[prop], '"'); - }) - ) - .join(" "); - } - function shouldIgnoreInlineStyle(element, selectors) { - for (var i = 0, len = selectors.length; i < len; i++) { - var ingnoredSelector = selectors[i]; - if (element.matches(ingnoredSelector)) { - return true; - } - } - return false; - } - function overrideInlineStyle( - element, - theme, - ignoreInlineSelectors, - ignoreImageSelectors - ) { - var cacheKey = getInlineStyleCacheKey(element, theme); - if (cacheKey === inlineStyleCache.get(element)) { - return; - } - var unsetProps = new Set(Object.keys(overrides)); - function setCustomProp(targetCSSProp, modifierCSSProp, cssVal) { - var isPropertyVariable = targetCSSProp.startsWith("--"); - var _a = isPropertyVariable ? {} : overrides[targetCSSProp], - customProp = _a.customProp, - dataAttr = _a.dataAttr; - var mod = getModifiableCSSDeclaration( - modifierCSSProp, - cssVal, - {style: element.style}, - variablesStore, - ignoreImageSelectors, - null - ); - if (!mod) { - return; - } - var value = mod.value; - if (typeof value === "function") { - value = value(theme); - } - if (isPropertyVariable && typeof value === "object") { - var typedValue = value; - typedValue.declarations.forEach(function (_a) { - var property = _a.property, - value = _a.value; - !(value instanceof Promise) && - element.style.setProperty(property, value); - }); - } else { - element.style.setProperty(customProp, value); - if (!element.hasAttribute(dataAttr)) { - element.setAttribute(dataAttr, ""); - } - unsetProps.delete(targetCSSProp); - } - } - if (ignoreInlineSelectors.length > 0) { - if (shouldIgnoreInlineStyle(element, ignoreInlineSelectors)) { - unsetProps.forEach(function (cssProp) { - element.removeAttribute(overrides[cssProp].dataAttr); - }); - return; - } - } - if (element.hasAttribute("bgcolor")) { - var value = element.getAttribute("bgcolor"); - if ( - value.match(/^[0-9a-f]{3}$/i) || - value.match(/^[0-9a-f]{6}$/i) - ) { - value = "#".concat(value); - } - setCustomProp("background-color", "background-color", value); - } - if (element.hasAttribute("color") && element.rel !== "mask-icon") { - var value = element.getAttribute("color"); - if ( - value.match(/^[0-9a-f]{3}$/i) || - value.match(/^[0-9a-f]{6}$/i) - ) { - value = "#".concat(value); - } - setCustomProp("color", "color", value); - } - if (element instanceof SVGElement) { - if (element.hasAttribute("fill")) { - var SMALL_SVG_LIMIT_1 = 32; - var value_1 = element.getAttribute("fill"); - if (value_1 !== "none") { - if (!(element instanceof SVGTextElement)) { - var handleSVGElement = function () { - var _a = element.getBoundingClientRect(), - width = _a.width, - height = _a.height; - var isBg = - width > SMALL_SVG_LIMIT_1 || - height > SMALL_SVG_LIMIT_1; - setCustomProp( - "fill", - isBg ? "background-color" : "color", - value_1 - ); - }; - if (isReadyStateComplete()) { - handleSVGElement(); - } else { - addReadyStateCompleteListener(handleSVGElement); - } - } else { - setCustomProp("fill", "color", value_1); - } - } - } - if (element.hasAttribute("stop-color")) { - setCustomProp( - "stop-color", - "background-color", - element.getAttribute("stop-color") - ); - } - } - if (element.hasAttribute("stroke")) { - var value = element.getAttribute("stroke"); - setCustomProp( - "stroke", - element instanceof SVGLineElement || - element instanceof SVGTextElement - ? "border-color" - : "color", - value - ); - } - element.style && - iterateCSSDeclarations(element.style, function (property, value) { - if (property === "background-image" && value.includes("url")) { - return; - } - if ( - overrides.hasOwnProperty(property) || - (property.startsWith("--") && !normalizedPropList[property]) - ) { - setCustomProp(property, property, value); - } else { - var overridenProp = normalizedPropList[property]; - if ( - overridenProp && - !element.style.getPropertyValue(overridenProp) && - !element.hasAttribute(overridenProp) - ) { - if ( - overridenProp === "background-color" && - element.hasAttribute("bgcolor") - ) { - return; - } - element.style.setProperty(property, ""); - } - } - }); - if ( - element.style && - element instanceof SVGTextElement && - element.style.fill - ) { - setCustomProp( - "fill", - "color", - element.style.getPropertyValue("fill") - ); - } - forEach(unsetProps, function (cssProp) { - element.removeAttribute(overrides[cssProp].dataAttr); - }); - inlineStyleCache.set(element, getInlineStyleCacheKey(element, theme)); - } - - var metaThemeColorName = "theme-color"; - var metaThemeColorSelector = 'meta[name="'.concat(metaThemeColorName, '"]'); - var srcMetaThemeColor = null; - var observer = null; - function changeMetaThemeColor(meta, theme) { - srcMetaThemeColor = srcMetaThemeColor || meta.content; - var color = parseColorWithCache(srcMetaThemeColor); - if (!color) { - return; - } - meta.content = modifyBackgroundColor(color, theme); - } - function changeMetaThemeColorWhenAvailable(theme) { - var meta = document.querySelector(metaThemeColorSelector); - if (meta) { - changeMetaThemeColor(meta, theme); - } else { - if (observer) { - observer.disconnect(); - } - observer = new MutationObserver(function (mutations) { - loop: for (var i = 0; i < mutations.length; i++) { - var addedNodes = mutations[i].addedNodes; - for (var j = 0; j < addedNodes.length; j++) { - var node = addedNodes[j]; - if ( - node instanceof HTMLMetaElement && - node.name === metaThemeColorName - ) { - observer.disconnect(); - observer = null; - changeMetaThemeColor(node, theme); - break loop; - } - } - } - }); - observer.observe(document.head, {childList: true}); - } - } - function restoreMetaThemeColor() { - if (observer) { - observer.disconnect(); - observer = null; - } - var meta = document.querySelector(metaThemeColorSelector); - if (meta && srcMetaThemeColor) { - meta.content = srcMetaThemeColor; - } - } - - var themeCacheKeys = [ - "mode", - "brightness", - "contrast", - "grayscale", - "sepia", - "darkSchemeBackgroundColor", - "darkSchemeTextColor", - "lightSchemeBackgroundColor", - "lightSchemeTextColor" - ]; - function getThemeKey(theme) { - var resultKey = ""; - themeCacheKeys.forEach(function (key) { - resultKey += "".concat(key, ":").concat(theme[key], ";"); - }); - return resultKey; - } - var asyncQueue = createAsyncTasksQueue(); - function createStyleSheetModifier() { - var renderId = 0; - var rulesTextCache = new Set(); - var rulesModCache = new Map(); - var varTypeChangeCleaners = new Set(); - var prevFilterKey = null; - var hasNonLoadedLink = false; - var wasRebuilt = false; - function shouldRebuildStyle() { - return hasNonLoadedLink && !wasRebuilt; - } - function modifySheet(options) { - var rules = options.sourceCSSRules; - var theme = options.theme, - ignoreImageAnalysis = options.ignoreImageAnalysis, - force = options.force, - prepareSheet = options.prepareSheet, - isAsyncCancelled = options.isAsyncCancelled; - var rulesChanged = rulesModCache.size === 0; - var notFoundCacheKeys = new Set(rulesModCache.keys()); - var themeKey = getThemeKey(theme); - var themeChanged = themeKey !== prevFilterKey; - if (hasNonLoadedLink) { - wasRebuilt = true; - } - var modRules = []; - iterateCSSRules( - rules, - function (rule) { - var cssText = rule.cssText; - var textDiffersFromPrev = false; - notFoundCacheKeys.delete(cssText); - if (rule.parentRule instanceof CSSMediaRule) { - cssText += ";".concat(rule.parentRule.media.mediaText); - } - if (!rulesTextCache.has(cssText)) { - rulesTextCache.add(cssText); - textDiffersFromPrev = true; - } - if (textDiffersFromPrev) { - rulesChanged = true; - } else { - modRules.push(rulesModCache.get(cssText)); - return; - } - var modDecs = []; - rule.style && - iterateCSSDeclarations( - rule.style, - function (property, value) { - var mod = getModifiableCSSDeclaration( - property, - value, - rule, - variablesStore, - ignoreImageAnalysis, - isAsyncCancelled - ); - if (mod) { - modDecs.push(mod); - } - } - ); - var modRule = null; - if (modDecs.length > 0) { - var parentRule = rule.parentRule; - modRule = { - selector: rule.selectorText, - declarations: modDecs, - parentRule: parentRule - }; - modRules.push(modRule); - } - rulesModCache.set(cssText, modRule); - }, - function () { - hasNonLoadedLink = true; - } - ); - notFoundCacheKeys.forEach(function (key) { - rulesTextCache.delete(key); - rulesModCache.delete(key); - }); - prevFilterKey = themeKey; - if (!force && !rulesChanged && !themeChanged) { - return; - } - renderId++; - function setRule(target, index, rule) { - var selector = rule.selector, - declarations = rule.declarations; - var getDeclarationText = function (dec) { - var property = dec.property, - value = dec.value, - important = dec.important, - sourceValue = dec.sourceValue; - return "" - .concat(property, ": ") - .concat(value == null ? sourceValue : value) - .concat(important ? " !important" : "", ";"); - }; - var cssRulesText = ""; - declarations.forEach(function (declarations) { - cssRulesText += "".concat( - getDeclarationText(declarations), - " " - ); - }); - var ruleText = "" - .concat(selector, " { ") - .concat(cssRulesText, " }"); - target.insertRule(ruleText, index); - } - var asyncDeclarations = new Map(); - var varDeclarations = new Map(); - var asyncDeclarationCounter = 0; - var varDeclarationCounter = 0; - var rootReadyGroup = {rule: null, rules: [], isGroup: true}; - var groupRefs = new WeakMap(); - function getGroup(rule) { - if (rule == null) { - return rootReadyGroup; - } - if (groupRefs.has(rule)) { - return groupRefs.get(rule); - } - var group = {rule: rule, rules: [], isGroup: true}; - groupRefs.set(rule, group); - var parentGroup = getGroup(rule.parentRule); - parentGroup.rules.push(group); - return group; - } - varTypeChangeCleaners.forEach(function (clear) { - return clear(); - }); - varTypeChangeCleaners.clear(); - modRules - .filter(function (r) { - return r; - }) - .forEach(function (_a) { - var selector = _a.selector, - declarations = _a.declarations, - parentRule = _a.parentRule; - var group = getGroup(parentRule); - var readyStyleRule = { - selector: selector, - declarations: [], - isGroup: false - }; - var readyDeclarations = readyStyleRule.declarations; - group.rules.push(readyStyleRule); - function handleAsyncDeclaration( - property, - modified, - important, - sourceValue - ) { - var asyncKey = ++asyncDeclarationCounter; - var asyncDeclaration = { - property: property, - value: null, - important: important, - asyncKey: asyncKey, - sourceValue: sourceValue - }; - readyDeclarations.push(asyncDeclaration); - var currentRenderId = renderId; - modified.then(function (asyncValue) { - if ( - !asyncValue || - isAsyncCancelled() || - currentRenderId !== renderId - ) { - return; - } - asyncDeclaration.value = asyncValue; - asyncQueue.add(function () { - if ( - isAsyncCancelled() || - currentRenderId !== renderId - ) { - return; - } - rebuildAsyncRule(asyncKey); - }); - }); - } - function handleVarDeclarations( - property, - modified, - important, - sourceValue - ) { - var _a = modified, - varDecs = _a.declarations, - onTypeChange = _a.onTypeChange; - var varKey = ++varDeclarationCounter; - var currentRenderId = renderId; - var initialIndex = readyDeclarations.length; - var oldDecs = []; - if (varDecs.length === 0) { - var tempDec = { - property: property, - value: sourceValue, - important: important, - sourceValue: sourceValue, - varKey: varKey - }; - readyDeclarations.push(tempDec); - oldDecs = [tempDec]; - } - varDecs.forEach(function (mod) { - if (mod.value instanceof Promise) { - handleAsyncDeclaration( - mod.property, - mod.value, - important, - sourceValue - ); - } else { - var readyDec = { - property: mod.property, - value: mod.value, - important: important, - sourceValue: sourceValue, - varKey: varKey - }; - readyDeclarations.push(readyDec); - oldDecs.push(readyDec); - } - }); - onTypeChange.addListener(function (newDecs) { - if ( - isAsyncCancelled() || - currentRenderId !== renderId - ) { - return; - } - var readyVarDecs = newDecs.map(function (mod) { - return { - property: mod.property, - value: mod.value, - important: important, - sourceValue: sourceValue, - varKey: varKey - }; - }); - var index = readyDeclarations.indexOf( - oldDecs[0], - initialIndex - ); - readyDeclarations.splice.apply( - readyDeclarations, - __spreadArray( - [index, oldDecs.length], - __read(readyVarDecs), - false - ) - ); - oldDecs = readyVarDecs; - rebuildVarRule(varKey); - }); - varTypeChangeCleaners.add(function () { - return onTypeChange.removeListeners(); - }); - } - declarations.forEach(function (_a) { - var property = _a.property, - value = _a.value, - important = _a.important, - sourceValue = _a.sourceValue; - if (typeof value === "function") { - var modified = value(theme); - if (modified instanceof Promise) { - handleAsyncDeclaration( - property, - modified, - important, - sourceValue - ); - } else if (property.startsWith("--")) { - handleVarDeclarations( - property, - modified, - important, - sourceValue - ); - } else { - readyDeclarations.push({ - property: property, - value: modified, - important: important, - sourceValue: sourceValue - }); - } - } else { - readyDeclarations.push({ - property: property, - value: value, - important: important, - sourceValue: sourceValue - }); - } - }); - }); - var sheet = prepareSheet(); - function buildStyleSheet() { - function createTarget(group, parent) { - var rule = group.rule; - if (rule instanceof CSSMediaRule) { - var media = rule.media; - var index = parent.cssRules.length; - parent.insertRule( - "@media ".concat(media.mediaText, " {}"), - index - ); - return parent.cssRules[index]; - } - return parent; - } - function iterateReadyRules(group, target, styleIterator) { - group.rules.forEach(function (r) { - if (r.isGroup) { - var t = createTarget(r, target); - iterateReadyRules(r, t, styleIterator); - } else { - styleIterator(r, target); - } - }); - } - iterateReadyRules( - rootReadyGroup, - sheet, - function (rule, target) { - var index = target.cssRules.length; - rule.declarations.forEach(function (_a) { - var asyncKey = _a.asyncKey, - varKey = _a.varKey; - if (asyncKey != null) { - asyncDeclarations.set(asyncKey, { - rule: rule, - target: target, - index: index - }); - } - if (varKey != null) { - varDeclarations.set(varKey, { - rule: rule, - target: target, - index: index - }); - } - }); - setRule(target, index, rule); - } - ); - } - function rebuildAsyncRule(key) { - var _a = asyncDeclarations.get(key), - rule = _a.rule, - target = _a.target, - index = _a.index; - target.deleteRule(index); - setRule(target, index, rule); - asyncDeclarations.delete(key); - } - function rebuildVarRule(key) { - var _a = varDeclarations.get(key), - rule = _a.rule, - target = _a.target, - index = _a.index; - target.deleteRule(index); - setRule(target, index, rule); - } - buildStyleSheet(); - } - return { - modifySheet: modifySheet, - shouldRebuildStyle: shouldRebuildStyle - }; - } - - var STYLE_SELECTOR = 'style, link[rel*="stylesheet" i]:not([disabled])'; - function isFontsGoogleApiStyle(element) { - if (!element.href) { - return false; - } - try { - var elementURL = new URL(element.href); - return elementURL.hostname === "fonts.googleapis.com"; - } catch (err) { - logInfo("Couldn't construct ".concat(element.href, " as URL")); - return false; - } - } - function shouldManageStyle(element) { - return ( - (element instanceof HTMLStyleElement || - element instanceof SVGStyleElement || - (element instanceof HTMLLinkElement && - element.rel && - element.rel.toLowerCase().includes("stylesheet") && - element.href && - !element.disabled && - (isFirefox - ? !element.href.startsWith("moz-extension://") - : true) && - !isFontsGoogleApiStyle(element))) && - !element.classList.contains("darkreader") && - element.media.toLowerCase() !== "print" && - !element.classList.contains("stylus") - ); - } - function getManageableStyles(node, results, deep) { - if (results === void 0) { - results = []; - } - if (deep === void 0) { - deep = true; - } - if (shouldManageStyle(node)) { - results.push(node); - } else if ( - node instanceof Element || - (isShadowDomSupported && node instanceof ShadowRoot) || - node === document - ) { - forEach(node.querySelectorAll(STYLE_SELECTOR), function (style) { - return getManageableStyles(style, results, false); - }); - if (deep) { - iterateShadowHosts(node, function (host) { - return getManageableStyles(host.shadowRoot, results, false); - }); - } - } - return results; - } - var syncStyleSet = new WeakSet(); - var corsStyleSet = new WeakSet(); - var canOptimizeUsingProxy$1 = false; - document.addEventListener( - "__darkreader__inlineScriptsAllowed", - function () { - canOptimizeUsingProxy$1 = true; - } - ); - var loadingLinkCounter = 0; - var rejectorsForLoadingLinks = new Map(); - function cleanLoadingLinks() { - rejectorsForLoadingLinks.clear(); - } - function manageStyle(element, _a) { - var update = _a.update, - loadingStart = _a.loadingStart, - loadingEnd = _a.loadingEnd; - var prevStyles = []; - var next = element; - while ( - (next = next.nextElementSibling) && - next.matches(".darkreader") - ) { - prevStyles.push(next); - } - var corsCopy = - prevStyles.find(function (el) { - return el.matches(".darkreader--cors") && !corsStyleSet.has(el); - }) || null; - var syncStyle = - prevStyles.find(function (el) { - return el.matches(".darkreader--sync") && !syncStyleSet.has(el); - }) || null; - var corsCopyPositionWatcher = null; - var syncStylePositionWatcher = null; - var cancelAsyncOperations = false; - var isOverrideEmpty = true; - var sheetModifier = createStyleSheetModifier(); - var observer = new MutationObserver(function () { - update(); - }); - var observerOptions = { - attributes: true, - childList: true, - subtree: true, - characterData: true - }; - function containsCSSImport() { - return ( - element instanceof HTMLStyleElement && - element.textContent.trim().match(cssImportRegex) - ); - } - function hasImports(cssRules, checkCrossOrigin) { - var result = false; - if (cssRules) { - var rule = void 0; - cssRulesLoop: for ( - var i = 0, len = cssRules.length; - i < len; - i++ - ) { - rule = cssRules[i]; - if (rule.href) { - if (checkCrossOrigin) { - if ( - rule.href.startsWith("http") && - !rule.href.startsWith(location.origin) - ) { - result = true; - break cssRulesLoop; - } - } else { - result = true; - break cssRulesLoop; - } - } - } - } - return result; - } - function getRulesSync() { - if (corsCopy) { - return corsCopy.sheet.cssRules; - } - if (containsCSSImport()) { - return null; - } - var cssRules = safeGetSheetRules(); - if ( - element instanceof HTMLLinkElement && - !isRelativeHrefOnAbsolutePath(element.href) && - hasImports(cssRules, false) - ) { - return null; - } - if (hasImports(cssRules, true)) { - return null; - } - return cssRules; - } - function insertStyle() { - if (corsCopy) { - if (element.nextSibling !== corsCopy) { - element.parentNode.insertBefore( - corsCopy, - element.nextSibling - ); - } - if (corsCopy.nextSibling !== syncStyle) { - element.parentNode.insertBefore( - syncStyle, - corsCopy.nextSibling - ); - } - } else if (element.nextSibling !== syncStyle) { - element.parentNode.insertBefore(syncStyle, element.nextSibling); - } - } - function createSyncStyle() { - syncStyle = - element instanceof SVGStyleElement - ? document.createElementNS( - "http://www.w3.org/2000/svg", - "style" - ) - : document.createElement("style"); - syncStyle.classList.add("darkreader"); - syncStyle.classList.add("darkreader--sync"); - syncStyle.media = "screen"; - if (element.title) { - syncStyle.title = element.title; - } - syncStyleSet.add(syncStyle); - } - var isLoadingRules = false; - var wasLoadingError = false; - var loadingLinkId = ++loadingLinkCounter; - function getRulesAsync() { - return __awaiter(this, void 0, void 0, function () { - var cssText, - cssBasePath, - _a, - cssRules, - accessError, - fullCSSText; - var _b; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: - if (!(element instanceof HTMLLinkElement)) - return [3, 7]; - (_a = __read(getRulesOrError(), 2)), - (cssRules = _a[0]), - (accessError = _a[1]); - if ( - !( - (!cssRules && !accessError && !isSafari) || - (isSafari && !element.sheet) || - isStillLoadingError(accessError) - ) - ) - return [3, 5]; - _c.label = 1; - case 1: - _c.trys.push([1, 3, , 4]); - return [4, linkLoading(element, loadingLinkId)]; - case 2: - _c.sent(); - return [3, 4]; - case 3: - _c.sent(); - wasLoadingError = true; - return [3, 4]; - case 4: - if (cancelAsyncOperations) { - return [2, null]; - } - (_b = __read(getRulesOrError(), 2)), - (cssRules = _b[0]), - (accessError = _b[1]); - _c.label = 5; - case 5: - if (cssRules) { - if (!hasImports(cssRules, false)) { - return [2, cssRules]; - } - } - return [4, loadText(element.href)]; - case 6: - cssText = _c.sent(); - cssBasePath = getCSSBaseBath(element.href); - if (cancelAsyncOperations) { - return [2, null]; - } - return [3, 8]; - case 7: - if (containsCSSImport()) { - cssText = element.textContent.trim(); - cssBasePath = getCSSBaseBath(location.href); - } else { - return [2, null]; - } - _c.label = 8; - case 8: - if (!cssText) return [3, 13]; - _c.label = 9; - case 9: - _c.trys.push([9, 11, , 12]); - return [4, replaceCSSImports(cssText, cssBasePath)]; - case 10: - fullCSSText = _c.sent(); - corsCopy = createCORSCopy(element, fullCSSText); - return [3, 12]; - case 11: - _c.sent(); - return [3, 12]; - case 12: - if (corsCopy) { - corsCopyPositionWatcher = watchForNodePosition( - corsCopy, - "prev-sibling" - ); - return [2, corsCopy.sheet.cssRules]; - } - _c.label = 13; - case 13: - return [2, null]; - } - }); - }); - } - function details(options) { - var rules = getRulesSync(); - if (!rules) { - if (options.secondRound) { - return null; - } - if (isLoadingRules || wasLoadingError) { - return null; - } - isLoadingRules = true; - loadingStart(); - getRulesAsync() - .then(function (results) { - isLoadingRules = false; - loadingEnd(); - if (results) { - update(); - } - }) - .catch(function (err) { - isLoadingRules = false; - loadingEnd(); - }); - return null; - } - return {rules: rules}; - } - var forceRenderStyle = false; - function render(theme, ignoreImageAnalysis) { - var rules = getRulesSync(); - if (!rules) { - return; - } - cancelAsyncOperations = false; - function removeCSSRulesFromSheet(sheet) { - for (var i = sheet.cssRules.length - 1; i >= 0; i--) { - sheet.deleteRule(i); - } - } - function prepareOverridesSheet() { - if (!syncStyle) { - createSyncStyle(); - } - syncStylePositionWatcher && syncStylePositionWatcher.stop(); - insertStyle(); - if (syncStyle.sheet == null) { - syncStyle.textContent = ""; - } - var sheet = syncStyle.sheet; - removeCSSRulesFromSheet(sheet); - if (syncStylePositionWatcher) { - syncStylePositionWatcher.run(); - } else { - syncStylePositionWatcher = watchForNodePosition( - syncStyle, - "prev-sibling", - function () { - forceRenderStyle = true; - buildOverrides(); - } - ); - } - return syncStyle.sheet; - } - function buildOverrides() { - var force = forceRenderStyle; - forceRenderStyle = false; - sheetModifier.modifySheet({ - prepareSheet: prepareOverridesSheet, - sourceCSSRules: rules, - theme: theme, - ignoreImageAnalysis: ignoreImageAnalysis, - force: force, - isAsyncCancelled: function () { - return cancelAsyncOperations; - } - }); - isOverrideEmpty = syncStyle.sheet.cssRules.length === 0; - if (sheetModifier.shouldRebuildStyle()) { - addReadyStateCompleteListener(function () { - return update(); - }); - } - } - buildOverrides(); - } - function getRulesOrError() { - try { - if (element.sheet == null) { - return [null, null]; - } - return [element.sheet.cssRules, null]; - } catch (err) { - return [null, err]; - } - } - function isStillLoadingError(error) { - return error && error.message && error.message.includes("loading"); - } - function safeGetSheetRules() { - var _a = __read(getRulesOrError(), 2), - cssRules = _a[0], - err = _a[1]; - if (err) { - return null; - } - return cssRules; - } - function watchForSheetChanges() { - watchForSheetChangesUsingProxy(); - if (!(canOptimizeUsingProxy$1 && element.sheet)) { - watchForSheetChangesUsingRAF(); - } - } - var rulesChangeKey = null; - var rulesCheckFrameId = null; - function getRulesChangeKey() { - var rules = safeGetSheetRules(); - return rules ? rules.length : null; - } - function didRulesKeyChange() { - return getRulesChangeKey() !== rulesChangeKey; - } - function watchForSheetChangesUsingRAF() { - rulesChangeKey = getRulesChangeKey(); - stopWatchingForSheetChangesUsingRAF(); - var checkForUpdate = function () { - if (didRulesKeyChange()) { - rulesChangeKey = getRulesChangeKey(); - update(); - } - if (canOptimizeUsingProxy$1 && element.sheet) { - stopWatchingForSheetChangesUsingRAF(); - return; - } - rulesCheckFrameId = requestAnimationFrame(checkForUpdate); - }; - checkForUpdate(); - } - function stopWatchingForSheetChangesUsingRAF() { - cancelAnimationFrame(rulesCheckFrameId); - } - var areSheetChangesPending = false; - function onSheetChange() { - canOptimizeUsingProxy$1 = true; - stopWatchingForSheetChangesUsingRAF(); - if (areSheetChangesPending) { - return; - } - function handleSheetChanges() { - areSheetChangesPending = false; - if (cancelAsyncOperations) { - return; - } - update(); - } - areSheetChangesPending = true; - if (typeof queueMicrotask === "function") { - queueMicrotask(handleSheetChanges); - } else { - requestAnimationFrame(handleSheetChanges); - } - } - function watchForSheetChangesUsingProxy() { - element.addEventListener( - "__darkreader__updateSheet", - onSheetChange - ); - } - function stopWatchingForSheetChangesUsingProxy() { - element.removeEventListener( - "__darkreader__updateSheet", - onSheetChange - ); - } - function stopWatchingForSheetChanges() { - stopWatchingForSheetChangesUsingProxy(); - stopWatchingForSheetChangesUsingRAF(); - } - function pause() { - observer.disconnect(); - cancelAsyncOperations = true; - corsCopyPositionWatcher && corsCopyPositionWatcher.stop(); - syncStylePositionWatcher && syncStylePositionWatcher.stop(); - stopWatchingForSheetChanges(); - } - function destroy() { - pause(); - removeNode(corsCopy); - removeNode(syncStyle); - loadingEnd(); - if (rejectorsForLoadingLinks.has(loadingLinkId)) { - var reject = rejectorsForLoadingLinks.get(loadingLinkId); - rejectorsForLoadingLinks.delete(loadingLinkId); - reject && reject(); - } - } - function watch() { - observer.observe(element, observerOptions); - if (element instanceof HTMLStyleElement) { - watchForSheetChanges(); - } - } - var maxMoveCount = 10; - var moveCount = 0; - function restore() { - if (!syncStyle) { - return; - } - moveCount++; - if (moveCount > maxMoveCount) { - return; - } - insertStyle(); - corsCopyPositionWatcher && corsCopyPositionWatcher.skip(); - syncStylePositionWatcher && syncStylePositionWatcher.skip(); - if (!isOverrideEmpty) { - forceRenderStyle = true; - update(); - } - } - return { - details: details, - render: render, - pause: pause, - destroy: destroy, - watch: watch, - restore: restore - }; - } - function linkLoading(link, loadingId) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [ - 2, - new Promise(function (resolve, reject) { - var cleanUp = function () { - link.removeEventListener("load", onLoad); - link.removeEventListener("error", onError); - rejectorsForLoadingLinks.delete(loadingId); - }; - var onLoad = function () { - cleanUp(); - resolve(); - }; - var onError = function () { - cleanUp(); - reject( - "Linkelement " - .concat(loadingId, " couldn't be loaded. ") - .concat(link.href) - ); - }; - rejectorsForLoadingLinks.set(loadingId, function () { - cleanUp(); - reject(); - }); - link.addEventListener("load", onLoad); - link.addEventListener("error", onError); - if (!link.href) { - onError(); - } - }) - ]; - }); - }); - } - function getCSSImportURL(importDeclaration) { - return getCSSURLValue( - importDeclaration - .substring(7) - .trim() - .replace(/;$/, "") - .replace(/screen$/, "") - ); - } - function loadText(url) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!url.startsWith("data:")) return [3, 3]; - return [4, fetch(url)]; - case 1: - return [4, _a.sent().text()]; - case 2: - return [2, _a.sent()]; - case 3: - return [ - 4, - bgFetch({ - url: url, - responseType: "text", - mimeType: "text/css", - origin: window.location.origin - }) - ]; - case 4: - return [2, _a.sent()]; - } - }); - }); - } - function replaceCSSImports(cssText, basePath, cache) { - if (cache === void 0) { - cache = new Map(); - } - return __awaiter(this, void 0, void 0, function () { - var importMatches, - importMatches_1, - importMatches_1_1, - match, - importURL, - absoluteURL, - importedCSS, - e_1_1; - var e_1, _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - cssText = removeCSSComments(cssText); - cssText = replaceCSSFontFace(cssText); - cssText = replaceCSSRelativeURLsWithAbsolute( - cssText, - basePath - ); - importMatches = getMatches(cssImportRegex, cssText); - _b.label = 1; - case 1: - _b.trys.push([1, 10, 11, 12]); - (importMatches_1 = __values(importMatches)), - (importMatches_1_1 = importMatches_1.next()); - _b.label = 2; - case 2: - if (!!importMatches_1_1.done) return [3, 9]; - match = importMatches_1_1.value; - importURL = getCSSImportURL(match); - absoluteURL = getAbsoluteURL(basePath, importURL); - importedCSS = void 0; - if (!cache.has(absoluteURL)) return [3, 3]; - importedCSS = cache.get(absoluteURL); - return [3, 7]; - case 3: - _b.trys.push([3, 6, , 7]); - return [4, loadText(absoluteURL)]; - case 4: - importedCSS = _b.sent(); - cache.set(absoluteURL, importedCSS); - return [ - 4, - replaceCSSImports( - importedCSS, - getCSSBaseBath(absoluteURL), - cache - ) - ]; - case 5: - importedCSS = _b.sent(); - return [3, 7]; - case 6: - _b.sent(); - importedCSS = ""; - return [3, 7]; - case 7: - cssText = cssText.split(match).join(importedCSS); - _b.label = 8; - case 8: - importMatches_1_1 = importMatches_1.next(); - return [3, 2]; - case 9: - return [3, 12]; - case 10: - e_1_1 = _b.sent(); - e_1 = {error: e_1_1}; - return [3, 12]; - case 11: - try { - if ( - importMatches_1_1 && - !importMatches_1_1.done && - (_a = importMatches_1.return) - ) - _a.call(importMatches_1); - } finally { - if (e_1) throw e_1.error; - } - return [7]; - case 12: - cssText = cssText.trim(); - return [2, cssText]; - } - }); - }); - } - function createCORSCopy(srcElement, cssText) { - if (!cssText) { - return null; - } - var cors = document.createElement("style"); - cors.classList.add("darkreader"); - cors.classList.add("darkreader--cors"); - cors.media = "screen"; - cors.textContent = cssText; - srcElement.parentNode.insertBefore(cors, srcElement.nextSibling); - cors.sheet.disabled = true; - corsStyleSet.add(cors); - return cors; - } - - var observers = []; - var observedRoots; - var undefinedGroups = new Map(); - var elementsDefinitionCallback; - function collectUndefinedElements(root) { - if (!isDefinedSelectorSupported) { - return; - } - forEach(root.querySelectorAll(":not(:defined)"), function (el) { - var tag = el.tagName.toLowerCase(); - if (!tag.includes("-")) { - var extendedTag = el.getAttribute("is"); - if (extendedTag) { - tag = extendedTag; - } else { - return; - } - } - if (!undefinedGroups.has(tag)) { - undefinedGroups.set(tag, new Set()); - customElementsWhenDefined(tag).then(function () { - if (elementsDefinitionCallback) { - var elements = undefinedGroups.get(tag); - undefinedGroups.delete(tag); - elementsDefinitionCallback(Array.from(elements)); - } - }); - } - undefinedGroups.get(tag).add(el); - }); - } - var canOptimizeUsingProxy = false; - document.addEventListener( - "__darkreader__inlineScriptsAllowed", - function () { - canOptimizeUsingProxy = true; - } - ); - var resolvers = new Map(); - function handleIsDefined(e) { - canOptimizeUsingProxy = true; - if (resolvers.has(e.detail.tag)) { - var resolve = resolvers.get(e.detail.tag); - resolve(); - } - } - function customElementsWhenDefined(tag) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [ - 2, - new Promise(function (resolve) { - if ( - window.customElements && - typeof customElements.whenDefined === "function" - ) { - customElements.whenDefined(tag).then(function () { - return resolve(); - }); - } else if (canOptimizeUsingProxy) { - resolvers.set(tag, resolve); - document.dispatchEvent( - new CustomEvent( - "__darkreader__addUndefinedResolver", - {detail: {tag: tag}} - ) - ); - } else { - var checkIfDefined_1 = function () { - var elements = undefinedGroups.get(tag); - if (elements && elements.size > 0) { - if ( - elements - .values() - .next() - .value.matches(":defined") - ) { - resolve(); - } else { - requestAnimationFrame(checkIfDefined_1); - } - } - }; - requestAnimationFrame(checkIfDefined_1); - } - }) - ]; - }); - }); - } - function watchWhenCustomElementsDefined(callback) { - elementsDefinitionCallback = callback; - } - function unsubscribeFromDefineCustomElements() { - elementsDefinitionCallback = null; - undefinedGroups.clear(); - document.removeEventListener( - "__darkreader__isDefined", - handleIsDefined - ); - } - function watchForStyleChanges(currentStyles, update, shadowRootDiscovered) { - stopWatchingForStyleChanges(); - var prevStyles = new Set(currentStyles); - var prevStyleSiblings = new WeakMap(); - var nextStyleSiblings = new WeakMap(); - function saveStylePosition(style) { - prevStyleSiblings.set(style, style.previousElementSibling); - nextStyleSiblings.set(style, style.nextElementSibling); - } - function forgetStylePosition(style) { - prevStyleSiblings.delete(style); - nextStyleSiblings.delete(style); - } - function didStylePositionChange(style) { - return ( - style.previousElementSibling !== prevStyleSiblings.get(style) || - style.nextElementSibling !== nextStyleSiblings.get(style) - ); - } - currentStyles.forEach(saveStylePosition); - function handleStyleOperations(operations) { - var createdStyles = operations.createdStyles, - removedStyles = operations.removedStyles, - movedStyles = operations.movedStyles; - createdStyles.forEach(function (s) { - return saveStylePosition(s); - }); - movedStyles.forEach(function (s) { - return saveStylePosition(s); - }); - removedStyles.forEach(function (s) { - return forgetStylePosition(s); - }); - createdStyles.forEach(function (s) { - return prevStyles.add(s); - }); - removedStyles.forEach(function (s) { - return prevStyles.delete(s); - }); - if ( - createdStyles.size + removedStyles.size + movedStyles.size > - 0 - ) { - update({ - created: Array.from(createdStyles), - removed: Array.from(removedStyles), - moved: Array.from(movedStyles), - updated: [] - }); - } - } - function handleMinorTreeMutations(_a) { - var additions = _a.additions, - moves = _a.moves, - deletions = _a.deletions; - var createdStyles = new Set(); - var removedStyles = new Set(); - var movedStyles = new Set(); - additions.forEach(function (node) { - return getManageableStyles(node).forEach(function (style) { - return createdStyles.add(style); - }); - }); - deletions.forEach(function (node) { - return getManageableStyles(node).forEach(function (style) { - return removedStyles.add(style); - }); - }); - moves.forEach(function (node) { - return getManageableStyles(node).forEach(function (style) { - return movedStyles.add(style); - }); - }); - handleStyleOperations({ - createdStyles: createdStyles, - removedStyles: removedStyles, - movedStyles: movedStyles - }); - additions.forEach(function (n) { - iterateShadowHosts(n, subscribeForShadowRootChanges); - collectUndefinedElements(n); - }); - } - function handleHugeTreeMutations(root) { - var styles = new Set(getManageableStyles(root)); - var createdStyles = new Set(); - var removedStyles = new Set(); - var movedStyles = new Set(); - styles.forEach(function (s) { - if (!prevStyles.has(s)) { - createdStyles.add(s); - } - }); - prevStyles.forEach(function (s) { - if (!styles.has(s)) { - removedStyles.add(s); - } - }); - styles.forEach(function (s) { - if ( - !createdStyles.has(s) && - !removedStyles.has(s) && - didStylePositionChange(s) - ) { - movedStyles.add(s); - } - }); - handleStyleOperations({ - createdStyles: createdStyles, - removedStyles: removedStyles, - movedStyles: movedStyles - }); - iterateShadowHosts(root, subscribeForShadowRootChanges); - collectUndefinedElements(root); - } - function handleAttributeMutations(mutations) { - var updatedStyles = new Set(); - var removedStyles = new Set(); - mutations.forEach(function (m) { - var target = m.target; - if (target.isConnected) { - if (shouldManageStyle(target)) { - updatedStyles.add(target); - } else if ( - target instanceof HTMLLinkElement && - target.disabled - ) { - removedStyles.add(target); - } - } - }); - if (updatedStyles.size + removedStyles.size > 0) { - update({ - updated: Array.from(updatedStyles), - created: [], - removed: Array.from(removedStyles), - moved: [] - }); - } - } - function observe(root) { - var treeObserver = createOptimizedTreeObserver(root, { - onMinorMutations: handleMinorTreeMutations, - onHugeMutations: handleHugeTreeMutations - }); - var attrObserver = new MutationObserver(handleAttributeMutations); - attrObserver.observe(root, { - attributes: true, - attributeFilter: ["rel", "disabled", "media", "href"], - subtree: true - }); - observers.push(treeObserver, attrObserver); - observedRoots.add(root); - } - function subscribeForShadowRootChanges(node) { - var shadowRoot = node.shadowRoot; - if (shadowRoot == null || observedRoots.has(shadowRoot)) { - return; - } - observe(shadowRoot); - shadowRootDiscovered(shadowRoot); - } - observe(document); - iterateShadowHosts( - document.documentElement, - subscribeForShadowRootChanges - ); - watchWhenCustomElementsDefined(function (hosts) { - var newStyles = []; - hosts.forEach(function (host) { - return push(newStyles, getManageableStyles(host.shadowRoot)); - }); - update({created: newStyles, updated: [], removed: [], moved: []}); - hosts.forEach(function (host) { - var shadowRoot = host.shadowRoot; - if (shadowRoot == null) { - return; - } - subscribeForShadowRootChanges(host); - iterateShadowHosts(shadowRoot, subscribeForShadowRootChanges); - collectUndefinedElements(shadowRoot); - }); - }); - document.addEventListener("__darkreader__isDefined", handleIsDefined); - collectUndefinedElements(document); - } - function resetObservers() { - observers.forEach(function (o) { - return o.disconnect(); - }); - observers.splice(0, observers.length); - observedRoots = new WeakSet(); - } - function stopWatchingForStyleChanges() { - resetObservers(); - unsubscribeFromDefineCustomElements(); - } - - function hexify(number) { - return (number < 16 ? "0" : "") + number.toString(16); - } - function generateUID() { - if ("randomUUID" in crypto) { - var uuid = crypto.randomUUID(); - return ( - uuid.substring(0, 8) + - uuid.substring(9, 13) + - uuid.substring(14, 18) + - uuid.substring(19, 23) + - uuid.substring(24) - ); - } - return Array.from(crypto.getRandomValues(new Uint8Array(16))) - .map(function (x) { - return hexify(x); - }) - .join(""); - } - - var adoptedStyleOverrides = new WeakMap(); - var overrideList = new WeakSet(); - function createAdoptedStyleSheetOverride(node) { - var cancelAsyncOperations = false; - function injectSheet(sheet, override) { - var newSheets = __spreadArray( - [], - __read(node.adoptedStyleSheets), - false - ); - var sheetIndex = newSheets.indexOf(sheet); - var existingIndex = newSheets.indexOf(override); - if (sheetIndex === existingIndex - 1) { - return; - } - if (existingIndex >= 0) { - newSheets.splice(existingIndex, 1); - } - newSheets.splice(sheetIndex + 1, 0, override); - node.adoptedStyleSheets = newSheets; - } - function destroy() { - cancelAsyncOperations = true; - var newSheets = __spreadArray( - [], - __read(node.adoptedStyleSheets), - false - ); - node.adoptedStyleSheets.forEach(function (adoptedStyleSheet) { - if (overrideList.has(adoptedStyleSheet)) { - var existingIndex = newSheets.indexOf(adoptedStyleSheet); - if (existingIndex >= 0) { - newSheets.splice(existingIndex, 1); - } - adoptedStyleOverrides.delete(adoptedStyleSheet); - overrideList.delete(adoptedStyleSheet); - } - }); - node.adoptedStyleSheets = newSheets; - } - function render(theme, ignoreImageAnalysis) { - node.adoptedStyleSheets.forEach(function (sheet) { - if (overrideList.has(sheet)) { - return; - } - var rules = sheet.rules; - var override = new CSSStyleSheet(); - function prepareOverridesSheet() { - for (var i = override.cssRules.length - 1; i >= 0; i--) { - override.deleteRule(i); - } - injectSheet(sheet, override); - adoptedStyleOverrides.set(sheet, override); - overrideList.add(override); - return override; - } - var sheetModifier = createStyleSheetModifier(); - sheetModifier.modifySheet({ - prepareSheet: prepareOverridesSheet, - sourceCSSRules: rules, - theme: theme, - ignoreImageAnalysis: ignoreImageAnalysis, - force: false, - isAsyncCancelled: function () { - return cancelAsyncOperations; - } - }); - }); - } - return { - render: render, - destroy: destroy - }; - } - - function injectProxy(enableStyleSheetsProxy) { - document.dispatchEvent( - new CustomEvent("__darkreader__inlineScriptsAllowed") - ); - var addRuleDescriptor = Object.getOwnPropertyDescriptor( - CSSStyleSheet.prototype, - "addRule" - ); - var insertRuleDescriptor = Object.getOwnPropertyDescriptor( - CSSStyleSheet.prototype, - "insertRule" - ); - var deleteRuleDescriptor = Object.getOwnPropertyDescriptor( - CSSStyleSheet.prototype, - "deleteRule" - ); - var removeRuleDescriptor = Object.getOwnPropertyDescriptor( - CSSStyleSheet.prototype, - "removeRule" - ); - var documentStyleSheetsDescriptor = enableStyleSheetsProxy - ? Object.getOwnPropertyDescriptor(Document.prototype, "styleSheets") - : null; - var shouldWrapHTMLElement = [ - "baidu.com", - "baike.baidu.com", - "ditu.baidu.com", - "map.baidu.com", - "maps.baidu.com", - "haokan.baidu.com", - "pan.baidu.com", - "passport.baidu.com", - "tieba.baidu.com", - "www.baidu.com" - ].includes(location.hostname); - var getElementsByTagNameDescriptor = shouldWrapHTMLElement - ? Object.getOwnPropertyDescriptor( - Element.prototype, - "getElementsByTagName" - ) - : null; - var cleanUp = function () { - Object.defineProperty( - CSSStyleSheet.prototype, - "addRule", - addRuleDescriptor - ); - Object.defineProperty( - CSSStyleSheet.prototype, - "insertRule", - insertRuleDescriptor - ); - Object.defineProperty( - CSSStyleSheet.prototype, - "deleteRule", - deleteRuleDescriptor - ); - Object.defineProperty( - CSSStyleSheet.prototype, - "removeRule", - removeRuleDescriptor - ); - document.removeEventListener("__darkreader__cleanUp", cleanUp); - document.removeEventListener( - "__darkreader__addUndefinedResolver", - addUndefinedResolver - ); - if (enableStyleSheetsProxy) { - Object.defineProperty( - Document.prototype, - "styleSheets", - documentStyleSheetsDescriptor - ); - } - if (shouldWrapHTMLElement) { - Object.defineProperty( - Element.prototype, - "getElementsByTagName", - getElementsByTagNameDescriptor - ); - } - }; - var addUndefinedResolver = function (e) { - customElements.whenDefined(e.detail.tag).then(function () { - document.dispatchEvent( - new CustomEvent("__darkreader__isDefined", { - detail: {tag: e.detail.tag} - }) - ); - }); - }; - document.addEventListener("__darkreader__cleanUp", cleanUp); - document.addEventListener( - "__darkreader__addUndefinedResolver", - addUndefinedResolver - ); - var updateSheetEvent = new Event("__darkreader__updateSheet"); - function proxyAddRule(selector, style, index) { - addRuleDescriptor.value.call(this, selector, style, index); - if ( - this.ownerNode && - !this.ownerNode.classList.contains("darkreader") - ) { - this.ownerNode.dispatchEvent(updateSheetEvent); - } - return -1; - } - function proxyInsertRule(rule, index) { - var returnValue = insertRuleDescriptor.value.call( - this, - rule, - index - ); - if ( - this.ownerNode && - !this.ownerNode.classList.contains("darkreader") - ) { - this.ownerNode.dispatchEvent(updateSheetEvent); - } - return returnValue; - } - function proxyDeleteRule(index) { - deleteRuleDescriptor.value.call(this, index); - if ( - this.ownerNode && - !this.ownerNode.classList.contains("darkreader") - ) { - this.ownerNode.dispatchEvent(updateSheetEvent); - } - } - function proxyRemoveRule(index) { - removeRuleDescriptor.value.call(this, index); - if ( - this.ownerNode && - !this.ownerNode.classList.contains("darkreader") - ) { - this.ownerNode.dispatchEvent(updateSheetEvent); - } - } - function proxyDocumentStyleSheets() { - var _this = this; - var getCurrentValue = function () { - var docSheets = documentStyleSheetsDescriptor.get.call(_this); - var filteredSheets = __spreadArray( - [], - __read(docSheets), - false - ).filter(function (styleSheet) { - return !styleSheet.ownerNode.classList.contains( - "darkreader" - ); - }); - filteredSheets.item = function (item) { - return filteredSheets[item]; - }; - return Object.setPrototypeOf( - filteredSheets, - StyleSheetList.prototype - ); - }; - var elements = getCurrentValue(); - var styleSheetListBehavior = { - get: function (_, property) { - return getCurrentValue()[property]; - } - }; - elements = new Proxy(elements, styleSheetListBehavior); - return elements; - } - function proxyGetElementsByTagName(tagName) { - var _this = this; - if (tagName !== "style") { - return getElementsByTagNameDescriptor.value.call(this, tagName); - } - var getCurrentElementValue = function () { - var elements = getElementsByTagNameDescriptor.value.call( - _this, - tagName - ); - return Object.setPrototypeOf( - __spreadArray([], __read(elements), false).filter(function ( - element - ) { - return !element.classList.contains("darkreader"); - }), - NodeList.prototype - ); - }; - var elements = getCurrentElementValue(); - var nodeListBehavior = { - get: function (_, property) { - return getCurrentElementValue()[ - Number(property) || property - ]; - } - }; - elements = new Proxy(elements, nodeListBehavior); - return elements; - } - Object.defineProperty( - CSSStyleSheet.prototype, - "addRule", - Object.assign({}, addRuleDescriptor, {value: proxyAddRule}) - ); - Object.defineProperty( - CSSStyleSheet.prototype, - "insertRule", - Object.assign({}, insertRuleDescriptor, {value: proxyInsertRule}) - ); - Object.defineProperty( - CSSStyleSheet.prototype, - "deleteRule", - Object.assign({}, deleteRuleDescriptor, {value: proxyDeleteRule}) - ); - Object.defineProperty( - CSSStyleSheet.prototype, - "removeRule", - Object.assign({}, removeRuleDescriptor, {value: proxyRemoveRule}) - ); - if (enableStyleSheetsProxy) { - Object.defineProperty( - Document.prototype, - "styleSheets", - Object.assign({}, documentStyleSheetsDescriptor, { - get: proxyDocumentStyleSheets - }) - ); - } - if (shouldWrapHTMLElement) { - Object.defineProperty( - Element.prototype, - "getElementsByTagName", - Object.assign({}, getElementsByTagNameDescriptor, { - value: proxyGetElementsByTagName - }) - ); - } - } - - var INSTANCE_ID = generateUID(); - var styleManagers = new Map(); - var adoptedStyleManagers = []; - var filter = null; - var fixes = null; - var isIFrame$1 = null; - var ignoredImageAnalysisSelectors = null; - var ignoredInlineSelectors = null; - function createOrUpdateStyle(className, root) { - if (root === void 0) { - root = document.head || document; - } - var element = root.querySelector(".".concat(className)); - if (!element) { - element = document.createElement("style"); - element.classList.add("darkreader"); - element.classList.add(className); - element.media = "screen"; - element.textContent = ""; - } - return element; - } - function createOrUpdateScript(className, root) { - if (root === void 0) { - root = document.head || document; - } - var element = root.querySelector(".".concat(className)); - if (!element) { - element = document.createElement("script"); - element.classList.add("darkreader"); - element.classList.add(className); - } - return element; - } - var nodePositionWatchers = new Map(); - function setupNodePositionWatcher(node, alias) { - nodePositionWatchers.has(alias) && - nodePositionWatchers.get(alias).stop(); - nodePositionWatchers.set(alias, watchForNodePosition(node, "parent")); - } - function stopStylePositionWatchers() { - forEach(nodePositionWatchers.values(), function (watcher) { - return watcher.stop(); - }); - nodePositionWatchers.clear(); - } - function createStaticStyleOverrides() { - var fallbackStyle = createOrUpdateStyle( - "darkreader--fallback", - document - ); - fallbackStyle.textContent = getModifiedFallbackStyle(filter, { - strict: true - }); - document.head.insertBefore(fallbackStyle, document.head.firstChild); - setupNodePositionWatcher(fallbackStyle, "fallback"); - var userAgentStyle = createOrUpdateStyle("darkreader--user-agent"); - userAgentStyle.textContent = getModifiedUserAgentStyle( - filter, - isIFrame$1, - filter.styleSystemControls - ); - document.head.insertBefore(userAgentStyle, fallbackStyle.nextSibling); - setupNodePositionWatcher(userAgentStyle, "user-agent"); - var textStyle = createOrUpdateStyle("darkreader--text"); - if (filter.useFont || filter.textStroke > 0) { - textStyle.textContent = createTextStyle(filter); - } else { - textStyle.textContent = ""; - } - document.head.insertBefore(textStyle, fallbackStyle.nextSibling); - setupNodePositionWatcher(textStyle, "text"); - var invertStyle = createOrUpdateStyle("darkreader--invert"); - if (fixes && Array.isArray(fixes.invert) && fixes.invert.length > 0) { - invertStyle.textContent = [ - "".concat(fixes.invert.join(", "), " {"), - " filter: ".concat( - getCSSFilterValue( - __assign(__assign({}, filter), { - contrast: - filter.mode === 0 - ? filter.contrast - : clamp(filter.contrast - 10, 0, 100) - }) - ), - " !important;" - ), - "}" - ].join("\n"); - } else { - invertStyle.textContent = ""; - } - document.head.insertBefore(invertStyle, textStyle.nextSibling); - setupNodePositionWatcher(invertStyle, "invert"); - var inlineStyle = createOrUpdateStyle("darkreader--inline"); - inlineStyle.textContent = getInlineOverrideStyle(); - document.head.insertBefore(inlineStyle, invertStyle.nextSibling); - setupNodePositionWatcher(inlineStyle, "inline"); - var overrideStyle = createOrUpdateStyle("darkreader--override"); - overrideStyle.textContent = - fixes && fixes.css ? replaceCSSTemplates(fixes.css) : ""; - document.head.appendChild(overrideStyle); - setupNodePositionWatcher(overrideStyle, "override"); - var variableStyle = createOrUpdateStyle("darkreader--variables"); - var selectionColors = getSelectionColor(filter); - var darkSchemeBackgroundColor = filter.darkSchemeBackgroundColor, - darkSchemeTextColor = filter.darkSchemeTextColor, - lightSchemeBackgroundColor = filter.lightSchemeBackgroundColor, - lightSchemeTextColor = filter.lightSchemeTextColor, - mode = filter.mode; - var schemeBackgroundColor = - mode === 0 ? lightSchemeBackgroundColor : darkSchemeBackgroundColor; - var schemeTextColor = - mode === 0 ? lightSchemeTextColor : darkSchemeTextColor; - schemeBackgroundColor = modifyBackgroundColor( - parseColorWithCache(schemeBackgroundColor), - filter - ); - schemeTextColor = modifyForegroundColor( - parseColorWithCache(schemeTextColor), - filter - ); - variableStyle.textContent = [ - ":root {", - " --darkreader-neutral-background: ".concat( - schemeBackgroundColor, - ";" - ), - " --darkreader-neutral-text: ".concat(schemeTextColor, ";"), - " --darkreader-selection-background: ".concat( - selectionColors.backgroundColorSelection, - ";" - ), - " --darkreader-selection-text: ".concat( - selectionColors.foregroundColorSelection, - ";" - ), - "}" - ].join("\n"); - document.head.insertBefore(variableStyle, inlineStyle.nextSibling); - setupNodePositionWatcher(variableStyle, "variables"); - var rootVarsStyle = createOrUpdateStyle("darkreader--root-vars"); - document.head.insertBefore(rootVarsStyle, variableStyle.nextSibling); - var injectProxyArg = !(fixes && fixes.disableStyleSheetsProxy); - { - var proxyScript = createOrUpdateScript("darkreader--proxy"); - proxyScript.append( - "(".concat(injectProxy, ")(").concat(injectProxyArg, ")") - ); - document.head.insertBefore(proxyScript, rootVarsStyle.nextSibling); - proxyScript.remove(); - } - } - var shadowRootsWithOverrides = new Set(); - function createShadowStaticStyleOverrides(root) { - var inlineStyle = createOrUpdateStyle("darkreader--inline", root); - inlineStyle.textContent = getInlineOverrideStyle(); - root.insertBefore(inlineStyle, root.firstChild); - var overrideStyle = createOrUpdateStyle("darkreader--override", root); - overrideStyle.textContent = - fixes && fixes.css ? replaceCSSTemplates(fixes.css) : ""; - root.insertBefore(overrideStyle, inlineStyle.nextSibling); - var invertStyle = createOrUpdateStyle("darkreader--invert", root); - if (fixes && Array.isArray(fixes.invert) && fixes.invert.length > 0) { - invertStyle.textContent = [ - "".concat(fixes.invert.join(", "), " {"), - " filter: ".concat( - getCSSFilterValue( - __assign(__assign({}, filter), { - contrast: - filter.mode === 0 - ? filter.contrast - : clamp(filter.contrast - 10, 0, 100) - }) - ), - " !important;" - ), - "}" - ].join("\n"); - } else { - invertStyle.textContent = ""; - } - root.insertBefore(invertStyle, overrideStyle.nextSibling); - shadowRootsWithOverrides.add(root); - } - function replaceCSSTemplates($cssText) { - return $cssText.replace(/\${(.+?)}/g, function (_, $color) { - var color = parseColorWithCache($color); - if (color) { - return modifyColor(color, filter); - } - return $color; - }); - } - function cleanFallbackStyle() { - var fallback = document.querySelector(".darkreader--fallback"); - if (fallback) { - fallback.textContent = ""; - } - } - function createDynamicStyleOverrides() { - cancelRendering(); - var allStyles = getManageableStyles(document); - var newManagers = allStyles - .filter(function (style) { - return !styleManagers.has(style); - }) - .map(function (style) { - return createManager(style); - }); - newManagers - .map(function (manager) { - return manager.details({secondRound: false}); - }) - .filter(function (detail) { - return detail && detail.rules.length > 0; - }) - .forEach(function (detail) { - variablesStore.addRulesForMatching(detail.rules); - }); - variablesStore.matchVariablesAndDependants(); - variablesStore.setOnRootVariableChange(function () { - variablesStore.putRootVars( - document.head.querySelector(".darkreader--root-vars"), - filter - ); - }); - variablesStore.putRootVars( - document.head.querySelector(".darkreader--root-vars"), - filter - ); - styleManagers.forEach(function (manager) { - return manager.render(filter, ignoredImageAnalysisSelectors); - }); - if (loadingStyles.size === 0) { - cleanFallbackStyle(); - } - newManagers.forEach(function (manager) { - return manager.watch(); - }); - var inlineStyleElements = toArray( - document.querySelectorAll(INLINE_STYLE_SELECTOR) - ); - iterateShadowHosts(document.documentElement, function (host) { - createShadowStaticStyleOverrides(host.shadowRoot); - var elements = host.shadowRoot.querySelectorAll( - INLINE_STYLE_SELECTOR - ); - if (elements.length > 0) { - push(inlineStyleElements, elements); - } - }); - inlineStyleElements.forEach(function (el) { - return overrideInlineStyle( - el, - filter, - ignoredInlineSelectors, - ignoredImageAnalysisSelectors - ); - }); - handleAdoptedStyleSheets(document); - } - var loadingStylesCounter = 0; - var loadingStyles = new Set(); - function createManager(element) { - var loadingStyleId = ++loadingStylesCounter; - function loadingStart() { - if (!isDOMReady() || !didDocumentShowUp) { - loadingStyles.add(loadingStyleId); - logInfo( - "Current amount of styles loading: ".concat( - loadingStyles.size - ) - ); - var fallbackStyle = document.querySelector( - ".darkreader--fallback" - ); - if (!fallbackStyle.textContent) { - fallbackStyle.textContent = getModifiedFallbackStyle( - filter, - {strict: false} - ); - } - } - } - function loadingEnd() { - loadingStyles.delete(loadingStyleId); - logInfo( - "Removed loadingStyle " - .concat(loadingStyleId, ", now awaiting: ") - .concat(loadingStyles.size) - ); - if (loadingStyles.size === 0 && isDOMReady()) { - cleanFallbackStyle(); - } - } - function update() { - var details = manager.details({secondRound: true}); - if (!details) { - return; - } - variablesStore.addRulesForMatching(details.rules); - variablesStore.matchVariablesAndDependants(); - manager.render(filter, ignoredImageAnalysisSelectors); - } - var manager = manageStyle(element, { - update: update, - loadingStart: loadingStart, - loadingEnd: loadingEnd - }); - styleManagers.set(element, manager); - return manager; - } - function removeManager(element) { - var manager = styleManagers.get(element); - if (manager) { - manager.destroy(); - styleManagers.delete(element); - } - } - var throttledRenderAllStyles = throttle(function (callback) { - styleManagers.forEach(function (manager) { - return manager.render(filter, ignoredImageAnalysisSelectors); - }); - adoptedStyleManagers.forEach(function (manager) { - return manager.render(filter, ignoredImageAnalysisSelectors); - }); - callback && callback(); - }); - var cancelRendering = function () { - throttledRenderAllStyles.cancel(); - }; - function onDOMReady() { - if (loadingStyles.size === 0) { - cleanFallbackStyle(); - return; - } - } - var documentVisibilityListener = null; - var didDocumentShowUp = !document.hidden; - function watchForDocumentVisibility(callback) { - var alreadyWatching = Boolean(documentVisibilityListener); - documentVisibilityListener = function () { - if (!document.hidden) { - stopWatchingForDocumentVisibility(); - callback(); - didDocumentShowUp = true; - } - }; - if (!alreadyWatching) { - document.addEventListener( - "visibilitychange", - documentVisibilityListener - ); - } - } - function stopWatchingForDocumentVisibility() { - document.removeEventListener( - "visibilitychange", - documentVisibilityListener - ); - documentVisibilityListener = null; - } - function createThemeAndWatchForUpdates() { - createStaticStyleOverrides(); - function runDynamicStyle() { - createDynamicStyleOverrides(); - watchForUpdates(); - } - if (document.hidden && !filter.immediateModify) { - watchForDocumentVisibility(runDynamicStyle); - } else { - runDynamicStyle(); - } - changeMetaThemeColorWhenAvailable(filter); - } - function handleAdoptedStyleSheets(node) { - try { - if (Array.isArray(node.adoptedStyleSheets)) { - if (node.adoptedStyleSheets.length > 0) { - var newManger = createAdoptedStyleSheetOverride(node); - adoptedStyleManagers.push(newManger); - newManger.render(filter, ignoredImageAnalysisSelectors); - } - } - } catch (err) {} - } - function watchForUpdates() { - var managedStyles = Array.from(styleManagers.keys()); - watchForStyleChanges( - managedStyles, - function (_a) { - var created = _a.created, - updated = _a.updated, - removed = _a.removed, - moved = _a.moved; - var stylesToRemove = removed; - var stylesToManage = created - .concat(updated) - .concat(moved) - .filter(function (style) { - return !styleManagers.has(style); - }); - var stylesToRestore = moved.filter(function (style) { - return styleManagers.has(style); - }); - stylesToRemove.forEach(function (style) { - return removeManager(style); - }); - var newManagers = stylesToManage.map(function (style) { - return createManager(style); - }); - newManagers - .map(function (manager) { - return manager.details({secondRound: false}); - }) - .filter(function (detail) { - return detail && detail.rules.length > 0; - }) - .forEach(function (detail) { - variablesStore.addRulesForMatching(detail.rules); - }); - variablesStore.matchVariablesAndDependants(); - newManagers.forEach(function (manager) { - return manager.render( - filter, - ignoredImageAnalysisSelectors - ); - }); - newManagers.forEach(function (manager) { - return manager.watch(); - }); - stylesToRestore.forEach(function (style) { - return styleManagers.get(style).restore(); - }); - }, - function (shadowRoot) { - createShadowStaticStyleOverrides(shadowRoot); - handleAdoptedStyleSheets(shadowRoot); - } - ); - watchForInlineStyles( - function (element) { - overrideInlineStyle( - element, - filter, - ignoredInlineSelectors, - ignoredImageAnalysisSelectors - ); - if (element === document.documentElement) { - var styleAttr = element.getAttribute("style") || ""; - if (styleAttr.includes("--")) { - variablesStore.matchVariablesAndDependants(); - variablesStore.putRootVars( - document.head.querySelector( - ".darkreader--root-vars" - ), - filter - ); - } - } - }, - function (root) { - createShadowStaticStyleOverrides(root); - var inlineStyleElements = root.querySelectorAll( - INLINE_STYLE_SELECTOR - ); - if (inlineStyleElements.length > 0) { - forEach(inlineStyleElements, function (el) { - return overrideInlineStyle( - el, - filter, - ignoredInlineSelectors, - ignoredImageAnalysisSelectors - ); - }); - } - } - ); - addDOMReadyListener(onDOMReady); - } - function stopWatchingForUpdates() { - styleManagers.forEach(function (manager) { - return manager.pause(); - }); - stopStylePositionWatchers(); - stopWatchingForStyleChanges(); - stopWatchingForInlineStyles(); - removeDOMReadyListener(onDOMReady); - cleanReadyStateCompleteListeners(); - } - var metaObserver; - function addMetaListener() { - metaObserver = new MutationObserver(function () { - if (document.querySelector('meta[name="darkreader-lock"]')) { - metaObserver.disconnect(); - removeDynamicTheme(); - } - }); - metaObserver.observe(document.head, {childList: true, subtree: true}); - } - function createDarkReaderInstanceMarker() { - var metaElement = document.createElement("meta"); - metaElement.name = "darkreader"; - metaElement.content = INSTANCE_ID; - document.head.appendChild(metaElement); - } - function isAnotherDarkReaderInstanceActive() { - if (document.querySelector('meta[name="darkreader-lock"]')) { - return true; - } - var meta = document.querySelector('meta[name="darkreader"]'); - if (meta) { - if (meta.content !== INSTANCE_ID) { - return true; - } - return false; - } - createDarkReaderInstanceMarker(); - addMetaListener(); - return false; - } - function createOrUpdateDynamicTheme( - filterConfig, - dynamicThemeFixes, - iframe - ) { - filter = filterConfig; - fixes = dynamicThemeFixes; - if (fixes) { - ignoredImageAnalysisSelectors = Array.isArray( - fixes.ignoreImageAnalysis - ) - ? fixes.ignoreImageAnalysis - : []; - ignoredInlineSelectors = Array.isArray(fixes.ignoreInlineStyle) - ? fixes.ignoreInlineStyle - : []; - } else { - ignoredImageAnalysisSelectors = []; - ignoredInlineSelectors = []; - } - if (filter.immediateModify) { - setIsDOMReady(function () { - return true; - }); - } - isIFrame$1 = iframe; - if (document.head) { - if (isAnotherDarkReaderInstanceActive()) { - return; - } - document.documentElement.setAttribute( - "data-darkreader-mode", - "dynamic" - ); - document.documentElement.setAttribute( - "data-darkreader-scheme", - filter.mode ? "dark" : "dimmed" - ); - createThemeAndWatchForUpdates(); - } else { - if (!isFirefox) { - var fallbackStyle = createOrUpdateStyle("darkreader--fallback"); - document.documentElement.appendChild(fallbackStyle); - fallbackStyle.textContent = getModifiedFallbackStyle(filter, { - strict: true - }); - } - var headObserver_1 = new MutationObserver(function () { - if (document.head) { - headObserver_1.disconnect(); - if (isAnotherDarkReaderInstanceActive()) { - removeDynamicTheme(); - return; - } - createThemeAndWatchForUpdates(); - } - }); - headObserver_1.observe(document, {childList: true, subtree: true}); - } - } - function removeProxy() { - document.dispatchEvent(new CustomEvent("__darkreader__cleanUp")); - removeNode(document.head.querySelector(".darkreader--proxy")); - } - function removeDynamicTheme() { - document.documentElement.removeAttribute("data-darkreader-mode"); - document.documentElement.removeAttribute("data-darkreader-scheme"); - cleanDynamicThemeCache(); - removeNode(document.querySelector(".darkreader--fallback")); - if (document.head) { - restoreMetaThemeColor(); - removeNode(document.head.querySelector(".darkreader--user-agent")); - removeNode(document.head.querySelector(".darkreader--text")); - removeNode(document.head.querySelector(".darkreader--invert")); - removeNode(document.head.querySelector(".darkreader--inline")); - removeNode(document.head.querySelector(".darkreader--override")); - removeNode(document.head.querySelector(".darkreader--variables")); - removeNode(document.head.querySelector(".darkreader--root-vars")); - removeNode(document.head.querySelector('meta[name="darkreader"]')); - removeProxy(); - } - shadowRootsWithOverrides.forEach(function (root) { - removeNode(root.querySelector(".darkreader--inline")); - removeNode(root.querySelector(".darkreader--override")); - }); - shadowRootsWithOverrides.clear(); - forEach(styleManagers.keys(), function (el) { - return removeManager(el); - }); - loadingStyles.clear(); - cleanLoadingLinks(); - forEach(document.querySelectorAll(".darkreader"), removeNode); - adoptedStyleManagers.forEach(function (manager) { - manager.destroy(); - }); - adoptedStyleManagers.splice(0); - metaObserver && metaObserver.disconnect(); - } - function cleanDynamicThemeCache() { - variablesStore.clear(); - parsedURLCache.clear(); - stopWatchingForDocumentVisibility(); - cancelRendering(); - stopWatchingForUpdates(); - cleanModificationCache(); - clearColorCache(); - } - - var blobRegex = /url\(\"(blob\:.*?)\"\)/g; - function replaceBlobs(text) { - return __awaiter(this, void 0, void 0, function () { - var promises, data; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - promises = []; - getMatches(blobRegex, text, 1).forEach(function (url) { - var promise = loadAsDataURL(url); - promises.push(promise); - }); - return [4, Promise.all(promises)]; - case 1: - data = _a.sent(); - return [ - 2, - text.replace(blobRegex, function () { - return 'url("'.concat(data.shift(), '")'); - }) - ]; - } - }); - }); - } - var banner = - '/*\n _______\n / \\\n .==. .==.\n (( ))==(( ))\n / "==" "=="\\\n /____|| || ||___\\\n ________ ____ ________ ___ ___\n | ___ \\ / \\ | ___ \\ | | / /\n | | \\ \\ / /\\ \\ | | \\ \\| |_/ /\n | | ) / /__\\ \\ | |__/ /| ___ \\\n | |__/ / ______ \\| ____ \\| | \\ \\\n_______|_______/__/ ____ \\__\\__|___\\__\\__|___\\__\\____\n| ___ \\ | ____/ / \\ | ___ \\ | ____| ___ \\\n| | \\ \\| |___ / /\\ \\ | | \\ \\| |___| | \\ \\\n| |__/ /| ____/ /__\\ \\ | | ) | ____| |__/ /\n| ____ \\| |__/ ______ \\| |__/ /| |___| ____ \\\n|__| \\__\\____/__/ \\__\\_______/ |______|__| \\__\\\n https://darkreader.org\n*/\n\n/*! Dark reader generated CSS | Licensed under MIT https://github.com/darkreader/darkreader/blob/main/LICENSE */\n'; - function collectCSS() { - return __awaiter(this, void 0, void 0, function () { - function addStaticCSS(selector, comment) { - var staticStyle = document.querySelector(selector); - if (staticStyle && staticStyle.textContent) { - css.push("/* ".concat(comment, " */")); - css.push(staticStyle.textContent); - css.push(""); - } - } - var css, modifiedCSS, formattedCSS, _a, _b; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: - css = [banner]; - addStaticCSS(".darkreader--fallback", "Fallback Style"); - addStaticCSS( - ".darkreader--user-agent", - "User-Agent Style" - ); - addStaticCSS(".darkreader--text", "Text Style"); - addStaticCSS(".darkreader--invert", "Invert Style"); - addStaticCSS( - ".darkreader--variables", - "Variables Style" - ); - modifiedCSS = []; - document - .querySelectorAll(".darkreader--sync") - .forEach(function (element) { - forEach( - element.sheet.cssRules, - function (rule) { - rule && - rule.cssText && - modifiedCSS.push(rule.cssText); - } - ); - }); - if (!modifiedCSS.length) return [3, 2]; - formattedCSS = formatCSS(modifiedCSS.join("\n")); - css.push("/* Modified CSS */"); - _b = (_a = css).push; - return [4, replaceBlobs(formattedCSS)]; - case 1: - _b.apply(_a, [_c.sent()]); - css.push(""); - _c.label = 2; - case 2: - addStaticCSS(".darkreader--override", "Override Style"); - return [2, css.join("\n")]; - } - }); - }); - } - - var isDarkReaderEnabled = false; - var isIFrame = (function () { - try { - return window.self !== window.top; - } catch (err) { - console.warn(err); - return true; - } - })(); - function enable(themeOptions, fixes) { - if (themeOptions === void 0) { - themeOptions = {}; - } - if (fixes === void 0) { - fixes = null; - } - var theme = __assign(__assign({}, DEFAULT_THEME), themeOptions); - if (theme.engine !== ThemeEngine.dynamicTheme) { - throw new Error("Theme engine is not supported."); - } - createOrUpdateDynamicTheme(theme, fixes, isIFrame); - isDarkReaderEnabled = true; - } - function isEnabled() { - return isDarkReaderEnabled; - } - function disable() { - removeDynamicTheme(); - isDarkReaderEnabled = false; - } - var darkScheme = matchMedia("(prefers-color-scheme: dark)"); - var store = { - themeOptions: null, - fixes: null - }; - function handleColorScheme() { - if (darkScheme.matches) { - enable(store.themeOptions, store.fixes); - } else { - disable(); - } - } - function auto(themeOptions, fixes) { - if (themeOptions === void 0) { - themeOptions = {}; - } - if (fixes === void 0) { - fixes = null; - } - if (themeOptions) { - store = {themeOptions: themeOptions, fixes: fixes}; - handleColorScheme(); - if (isMatchMediaChangeEventListenerSupported) { - darkScheme.addEventListener("change", handleColorScheme); - } else { - darkScheme.addListener(handleColorScheme); - } - } else { - if (isMatchMediaChangeEventListenerSupported) { - darkScheme.removeEventListener("change", handleColorScheme); - } else { - darkScheme.removeListener(handleColorScheme); - } - disable(); - } - } - function exportGeneratedCSS() { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - return [4, collectCSS()]; - case 1: - return [2, _a.sent()]; - } - }); - }); - } - var setFetchMethod = setFetchMethod$1; - - exports.auto = auto; - exports.disable = disable; - exports.enable = enable; - exports.exportGeneratedCSS = exportGeneratedCSS; - exports.isEnabled = isEnabled; - exports.setFetchMethod = setFetchMethod; - - Object.defineProperty(exports, "__esModule", {value: true}); -}); - -layui.define([], function(exports) { - exports('darkreader', DarkReader); -}); \ 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 9594f1a..0000000 --- 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/http.js b/component/pear/module/http.js deleted file mode 100644 index e1b1993..0000000 --- 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 8d13e28..0000000 --- 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/notice.js b/component/pear/module/notice.js deleted file mode 100644 index 4ea67ec..0000000 --- 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/popover/popover.js b/component/pear/module/popover/popover.js deleted file mode 100644 index 2dcb57c..0000000 --- a/component/pear/module/popover/popover.js +++ /dev/null @@ -1,1218 +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 3b095f7..0000000 --- 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/theme.js b/component/pear/module/theme.js index 01fd026..a684c85 100644 --- a/component/pear/module/theme.js +++ b/component/pear/module/theme.js @@ -40,7 +40,6 @@ layui.define(["jquery","layer"], function (exports) { 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;}' diff --git a/component/pear/module/tinymce/tinymce.js b/component/pear/module/tinymce/tinymce.js deleted file mode 100644 index b6ef220..0000000 --- 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 d31c907..0000000 --- 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 086f297..0000000 --- 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 a52bf03..0000000 --- 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 89b106c..0000000 --- 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 0dd07b0..0000000 --- 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 dfa80d9..0000000 --- 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 2440054..0000000 --- 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 01cb7d5..0000000 --- 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 cd25294..0000000 --- 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 5b7ac22..0000000 --- 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 a0471d4..0000000 --- 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 cceb2ec..0000000 --- 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 3df46f2..0000000 --- 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 53f78f8..0000000 --- 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 c8cbff2..0000000 --- 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 67519fb..0000000 --- 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 084e287..0000000 --- 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 3fe1c73..0000000 --- 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 fc9e6eb..0000000 --- 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 e20ec96..0000000 --- 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 1bc8d72..0000000 --- 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 4adb59b..0000000 --- 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 8295d5a..0000000 --- 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 e939611..0000000 --- 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 250d786..0000000 --- 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 2592f73..0000000 --- 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 deb9dde..0000000 --- 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 7dee35d..0000000 --- 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 6b4b414..0000000 --- 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 dfeca9e..0000000 --- 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 d7b1cf1..0000000 --- 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 7b45436..0000000 --- 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 8e4fb25..0000000 --- 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 1c9dab9..0000000 --- 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 b9d8382..0000000 --- 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 b8ae4bc..0000000 --- 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 478f4a3..0000000 --- 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 f5f25b5..0000000 --- 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 GIT binary patch literal 0 HcmV?d00001 literal 925 zcmaJ=J#W)M7&fg0RizFrNHCo)3zdk!61&YQrfTejTEbCCA~hq9eMwHKedc_@PDU04 z{{SKW0y_c;Rwj1Df8Z~0PUDn;aI$@0&-1*We$(qdIXZlBC`rrkNt4@;yZ3i(mo`^5g&O^Q9vWvFEDZ*C4wzU z&9gl5gE{74jHe{F;P200At0dzFAY!i5*yFR#fssSg4a%sydJPA!@!Vh)j-uWV4AX4H%wD|1awu?6;(WDRjVVz zMEVKX3@EIzaDw_yXJbq3EI8vlL5h-PnVi*R%BG6eXfz59U9Sp6HC@Ks&#Q4-DHR-? z28<+}&=?eo{+KSf1%;>AAwi1cuC@rX6f-7?|I0LQ|`wB zb{z`}1(}c#)#|54-7y@eqlwY3weB&L~A;|0;BOB)X?qZrfIDwvCTt(d|sM u^^g4hYw=6mb)EBJ{&W263$gZZO9!fS{B7^vr)O`AOUZ3_osX^Oul@jSrWpJH 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 GIT binary patch literal 0 HcmV?d00001 literal 1067 zcmaJ=&ui0A9M2pM9h6mNuuafs=H}G3Y1%bw!@3_$nyp~U))m&9rpenHw&Z2W+nNoL zO++Vx>>qGmJc@eoq=$iQ2l3!R5%H$rS&QHhM1ASn>R~k`dEfW=d_Lcw@AhP7+}GOG zN>P+AJt1bvdW?KSM_R~#?ef%dvUK899#5lLTvBXEjcKR=LE2E}U=}Lc%Hm5nL{ZJO zp3CFBe2G_)5mY=(&^0W=CSoJ5rKs}|g94n>%>@1B`8Ex7EkVyj<&bO%u&7V0+HiU` zlT%mc)wo8F41*z;Cjth<3UG}D)8X9&UD4%4 zWX~~dJRbKn!r=fx1e_HUD{jDax@!s|bW~fnu#QaNDJliDgcCH0bUy{ds>_;AwM?X7 zjH_4-8w`0V)qt}6f2d*9(GJeSzwsU@?BrG~$Yh~|mTZ+YZnoQVW$}Uy6^!g0LJPGj zP8JbHP7zr^nC3v=jBaYE5xFS-Q3~1sSSF3a5p@v*<6by@a7NM;#Lrt=g0V*l;dgEBchI&=5 z)-aY>sv(yl!7yH9|7mpXh)j=X*2k7?>VpqWGVL}Q>xnJlGr1D?)8bgp{ZRP%`}asQ z_XK`x@%J?Cyjg#Lcw>)R?DcPdE&E2NUcFd5xj~iHvr%wwc(niM4%%!Fe`Fu{?(~3b z=bk06-V{Ii+q!rCrwY5}&g4KxRC~KQB}l%`gACyNk$e~%7T%q>c=z>Y0sOkv`@QW# s=INQo>-nyY!9(TKeSzlo@g}ONh0=C9ZtN{@@!s`Kr!wNB*X!WnmBXq@IQ>f`ZLQ(`N0^xMZ8u223e!VSCdwnYN)#CQha%ErOsI z_vS$a|A8kj-t^$vzp!Ty;>C+6L2=S;st0RGG9Nt8^S<-G&zyGJclY|SL5AH`T>!&PbyXb+EQ;t<5?9v&iK1f2MenNFd;Qju94(xl-#ev{t z7$FTJ#^$*CQ5re!6j3llV?WgRZy!GL!1px%q-slc)IbxzwIrywZ1>&e)UA2^(H&4v zArlA?bwC=-!WgC+ztV+lo^6XfSV8DiRwC8_ 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 GIT binary patch literal 0 HcmV?d00001 literal 1003 zcmaJ=&ui0A98Vq0F&yHMvAGG4H`EC>Y0@@p!{XeU%mtb;y5f2ewlsNN!QQ9ijv~nZ0GTgc+j+2tB<}~G&*%Gn-|y#b&(7TJ z>Auj-Fiej&trX~Zj((k8r|AFHw}Xdt7$9ni%;5^D89rhrEL=uFbBrZaK!&xkx`)OX zrUTl=5-I6<$;1w8L>M-7Jj!O6vGLF|%wgv&{=Tiz0sw2nk-`67&`0d`e1-k}wJy52Vq2t0EPYsYWcil3|q)PvW>*t;W`p zEcTZ;KAX)(8iEj~hrHwp@-T!$pn#tI^FZ>YixYvMpV-jE`LEcAwgM|Kiif^hzvf%0w~zTE6r9$M*e~ zsgB<8@aN&t(a|Hde_-I!3+wys%bjO-_dY#fKW@V<^(^QFf6)77Xz1CE yD=`fWj%>ZYdoMP)Sg!P)??bz>C;ii>nOG;Yu-g6h^ZJKd(e=~R8RgC7;?^H97C9jR 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 GIT binary patch literal 0 HcmV?d00001 literal 926 zcmaJ=J#W)M7fW^I=Z$e3jw#X>V6BMj`wo8Uh7g2l6Q+z^E8FdVwfb)F!fM50$< z#5_tkTM!z@dE)sq%)kgw!q|X6KYxKB3=DW$cVs6q@iaVHQao68hyHTr>j6A|2pT!! z0ug2&$fL73MY#c2x`@wI1NTAdg0aG3r~Lbu7Lz;FPfhNm7<&VpbCgok)tV>xG7@Rym@YE@I~8 z)i~WR6)c?kG)!1XVo)f0BQj?O5DVsAc;Qmf2Lzw%#nc7V+m1j#~`1s(0cmn E57{#v_5c6? 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 GIT binary patch literal 0 HcmV?d00001 literal 926 zcmaJ=J#W)M7fW^I=Z$e3jw#X>V6BMj`wo8Uh7g2l6Q+z^E8FdVwfb)F!fM50$< z#5_tkTM!z@dE)sq%)kgw!q|X6KYxKB3=DW$cVs6q@iaVHQao68hyHTr>j6A|2pT!! z0ug2&$fL73MY#c2x`@wI1NTAdg0aG3r~Lbu7Lz;FPfhNm7<&VpbCgok)tV>xG7@Rym@YE@I~8 z)i~WR6)c?kG)!1XVo)f0BQj?O5DVsAc;Qmf2Lzw%#nc7V+m1j#~`1s(0cmn E57{#v_5c6? 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 GIT binary patch literal 0 HcmV?d00001 literal 996 zcmaJ=PiWIn9L}7ZGTlKhGI#Ltc2TfNleTX*EE~0HU9lOXE3D#SrpfCXw&ca+&1OZY zI24AU;z1PAfkzMGT~Nf+@Zwp-!A>Gb^(vG3(zTrjYe@3`@O|I!_kO?ctkxmX{4;^LmKk1KVY6j+>YYT-{j06qNCz}xGg}?g3u)e?j=>yWG7$o>u#E6O_ zK!_LP353M6K#Gcz5M?ilh;ccAWN93)_pQec%*R~Cd?t;W}4Jn;%t>r z;#Y|a(sKx$p0^y6)ci9oyr#)H$EUhu;GC*Jroda4DN9k5kPwPxP)riVOe`7Crq7}A zR8~x+;_2~NhpQ4}#l{ZpaLs*gyeBubg6*=%D)y{v*vxvw2CXB@R_|QIo_cMr**h1h zCs$y}2w`LYYIJ9dxhI@2?X&BpP*BmL+{ zb8G9~sV}=bKi8hFt!*saUw=Gu>EXbW+YMo3>ej2q_1!^r`+=0t=iPz)qxxjy*NugP pcb+x3-fW+E_x#Y;i#w3(8|03TmOccd_V@7KfW^I=Z$e3jw#X>V6BMj`wo8Uh7g2l6Q+z^E8FdVwfb)F!fM50$< z#5_tkTM!z@dE)sq%)kgw!q|X6KYxKB3=DW$cVs6q@iaVHQao68hyHTr>j6A|2pT!! z0ug2&$fL73MY#c2x`@wI1NTAdg0aG3r~Lbu7Lz;FPfhNm7<&VpbCgok)tV>xG7@Rym@YE@I~8 z)i~WR6)c?kG)!1XVo)f0BQj?O5DVsAc;Qmf2Lzw%#nc7V+m1j#~`1s(0cmn E57{#v_5c6? 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 GIT binary patch literal 0 HcmV?d00001 literal 938 zcmaJ=yN=U96g8wET4^N^6hMJSvkgeZ&)6uVm?#@3tR);piKV2(u_uX@wa3^K?4+Pr zBqaWTf`Sgw@B+O}YzY zQIZ9by;?=8B2`23J+OHoixztm)HgbtSZt-k8Kn^tgfvb0RN+ZH6{K3NmTSmzg&``* zGNevc36q0D!N7?d`w{g?2y#VdOcqp!EYtHN1kqMDOg3d=1rstS5+q*Ck5m9H>;KRo z*rF5K$A9wur*L8~BP{fBLKd;h8aFw}Lq(_+V~3L1CgixNVsAz$NoFJht$_w^5B<<1 zX>wg$g-*$qFitd;w}Ol z(t_)4xth3>n_D4>SY!jo{uAtVViJJ$k&(YU7h|X1hU@LjMQ!io3M?5RZ|q-6yX6w^uFKu=uZka~Y&OVQSoSikUmP)0)r@y{md4Bzx^7`$ivd9fz Vl~2EZdb7xHkJ;`T?+zcG{07G#ARYh! 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 GIT binary patch literal 0 HcmV?d00001 literal 982 zcmaJ=O=#0l91nKrm<+u6fv`vBLBZyuU9;uUY_>`3DrStXbG^AVd0j)7yqLV%Y$5|e zL=eQ2HxGUuMDgN94?BDC;7wE*vdeCjfr3M+FJ0Stu!bb>gWvD>|G)qL_ioS5oF5)K zF~l&;aA8_2((w@ejtm~4|M{(*XLLADa%D1ytE6H0h{;&Ef~Kbe;X=owY=%isg`Q#75djsnWV;I6e7nH{+fvwtlrHF=ifZ=snvdqz zW=iH--IOhMY7(SFNCg~33=lfYZU94tZR~LfuzN|B^;w`|AAuB?jGKZe z0!iY;v6Lis$y z#EY^lM;eJloFd}Es!NP8?gpb>1q}tJZ+pbXE{GJ33SJ=!OEcX&g5&jM-Jnw@S};B| zJYM94=ty0luKyqEI6ZVgifBLIe+mbsRS)q+6yO!#q>ZbNMxi{Y`p6*IFJZjgt>SDA z6CBjA2h=$UoL;b93pau@ZM?3-f*TOSHBmuRSgOF;wgoe4HZzeQ&*r3LQWSH^tUMuS zgp@cTnhYN`_OC{Fx2SufY0tKF(K9}BsoQ;O>sL>7-uMF|l0NeQ 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 GIT binary patch literal 0 HcmV?d00001 literal 994 zcmaJ=KTOn69Ik?3NI(okBa1J+0Zq96z3bVAis!Y!B^L2G~n~S4^qfr(Y7Y7yw4GtzI8Vw-69(SjMXVdom$@hJ~-~0W(cYAtjqPJ(L zhoY$7;-pq0V>kKwj~*uft6N{6k>M29D|iOYdHIS4j;+$OS%WkD0<1ZcYXO{D zn<`stiX_<$=CiWS ziNZNCCrEN$Z*nzcExXXeO|ISIX1TW9#0suYB5N>kR-io|AQ#k+tT^p+(c0=YxOUrI zGJ0DsOOj!e#{Sjl<`!{JGHuzGELz5g9&vj>Z0+t0eI{4pT2afF;}6x{{r$0yuDPcV zKfM?}mLE)|hEL|$$JD^Uz`c#m`<>fAzJJ@;_;~r(-p-x=TQ~2X-n5SI{oLw4ab=~i qZ{*4D?)rrXN45vcxp!}0Q-`{!N7vc+(FD7h+`6JZr9HnmxBeS?8#|N$ 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 GIT binary patch literal 0 HcmV?d00001 literal 941 zcmaJ=O^ee&7|w2?E{h8*qM)ZS1yR`Mqitr}&{*0ebpxi9Ze@EkO{Q(=CKHpXNsA|M z{tEpC!k#>M@Fs|Q7W@-}KfpTaHeCpdOr5Pd*S@rcA$h?u5>hX@#+HAX#TIrHbAQJrCOtlJ-uf%!zXvBy~{ zhD*GFvKgk{NCL~AA_9hJ?D`7(^TS6LxQ@b}Nv2>1Dw?<_ix8bII(>UFwQCOBcm(Q+ zOa(kdERcBTek3OfyV8~EJl*D5u!4}O!d@mdFuOp-Ap#OtF4}@90th*=B0(q~fs!DW zc!9pKC{|<%%B5qlepnhUbVhPdYp-L`mBLO431ps+%P-KU0KwRvDRM8sZ8Bti8>E#i;U?b~C>oU=T@rf1iA}6Fr%7CW%f2ike z&=KjOt9<_{9QEe`;(I8~7Dcyj5?_b++eH*~;ZYvAH(0vWg~Ypclh?k*ZZIH%L@bS<&PFSyVsd` V_u9qNa^YoqfegK)y=y&t^#_8)AY1?d 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 GIT binary patch literal 0 HcmV?d00001 literal 983 zcmaJ=J8aWH7`FOSsZ>-61_}cwmjR^4j-A9IrG6 zctVndWgtcck&n_>iU@I-kf4|ZgNLQjJhKLiYJL!lu4J}BhzohX)9G-X7>B(&FQihb zP(u_W6cO>e4$*^%<1Y;rROB0;V0@svyud}n zBMpI?_J62tkI+6TqSJi;DeRZJF5-*G$8FD`jjJt%pe2CWdJ*1*jZY5^d>WXw|D-1sW)DTsnWHDS52t3M Y%>Cb2T6gx>FN9aEklRpStyX$}0Ls}k`2YX_ 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 GIT binary patch literal 0 HcmV?d00001 literal 988 zcmaJ=PiWIn9L_cz+hnkVhdB>EG8hwV{&k7#W3g+K&K1lkU12>gOe$ z5A)zjP{ErF@uVmy6Az+zk!>e$9z1yRCc6vsrE5D6){x}A-{bqf-`{tyuySL3Y-)^Q znDP9wUZm?e`b~@s)Bkt!=7=sANv=#*ag{X905KUGR}jd%<_0Pv({A1Rf)*HNh;>S3 zQZ{Zv3%i^dW4OrmDVt#y(vfdkbwoe~Z8)CF{(Ap`1&*zYOWw^mBl zR^3Y3Z2CG_h#(bk5ivpJZh9e%RJN@P={`Q@SD^1YXu3 z18r3SvuloL<7RlJjW-OK_d;TN7Ru`?OBFcBv0+A#<<$I=o>SzEDCUy$x~6MlR?jA> zDW;?@SI1VvMIPyL?K5t!FE<_q*QcI!6gan$y%b;DBu zoL&!24f z!VNxYd%kCU4&Rq^#!yP}o3i1T^#ObU&1Umkzgn%Ts`?gz{#%>PhGCd*Lw>)%(P+>& z^a^k~odDG9_2*C|5&^K^?^RVb51^Em%Vhx5>D1uwb~^x0r}KP1TLMr@jKQ@a{z)MXs?w@g%Hy3_uX!HEEfBLqvCeE0dP1Ry3_0R^7;H= zFi0koR*wow>2Np%FdB^vzPA16;V@HVZ6C5MKbnf71Ofp7m&?T}pw(&t2!%ohUzTON z-5w5ytpX%T(hF_~Efxy^+wIo;BrA%tUaz%hpU-EAX0zE~F!=00ih1#0bUYs0?Y7tJ x^>{pmLLrezJg-?Umzhk)B;a%De*k|3@CD!kB;@88S<(Oi002ovPDHLkV1m@;_M!j) 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 GIT binary patch literal 0 HcmV?d00001 literal 519 zcmV+i0{H!jP)6ov1^C~9FL z1cTTJ0l|oZNWfkTi(nyQD}vbC+4=x>mih#-5m7;`t!xAXX+#@;ili5fdbikRSy)_G z9oa2%%3+v~Ip@w{2qMBO#lVYY0sbDq-rS+RskaJgJKj=P(HKWekt0D#x)6-CkI zat((=yi+$U^85X&s!Ecis%ouPGYo@%20YKN*J}Vcolb-h`hX{&`ahVW?>Zij<#O3H zO+;i__Iy6K+ikboP3;B_ha(sa?)Q65(1N!pO2bFgpkAGplO;YigvqwI-LrF zKp_J{$k(`sfJyvcmW+jf>9`!(>JDx6%As)xyPBY|dQ4nx-&C%U@;c!F+N4~@JM2|hKovQ5y zA6euWwN0(WtZwI*MZ{b`EB0sF!~Oh?jBOqF=6>2c`zgbJUW>lPt5$V495A@HEjM!7 z>s@M|PFLUjp7*?R*0Lqsmo7y`AA7T_&&ZHbU}A9|vw%|oUt?w3{qI4i5+x*(^|>vc z`(D;L{pqAw}YeTu7O>WQx^yxs=GX`E!fhU7ppI@fAe!M>S7g7^PXe1?W!( MPgg&ebxsLQ0MLMa5C8xG 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 GIT binary patch literal 0 HcmV?d00001 literal 874 zcmV-w1C{)VP) zI^D>~2!5gG=jVZefv&DDkH<4RJBtunU0ucVrcfwmW@d^4gu~(b`g&Zsxw%m)m5D^6 z@EVWDO(qin?C$P<`P|;#7Aj2`P*G8FaBzStYPEW6YYSJ>=`;ZB?d{=WZ*OlP5D);w z#cniwnY2uh$cR^Ye3xq6jy#lQ%avySuw_rO*Mx!^4E9&1S2tti%ceP zd3m|V<9T~~;{rN5Iu;fd_)>%r%IEWhD3wYxnatAClH2W8DwVlhZfxLmG$KL7olT(GmVv%$f^ zwzjsivNEYuT3uajG#Z1!Ab0w6jr#xV`0oQg0eA0$40-K#w68ju5&+~b%VHmoupUbvwB>=K41As6L z_kBN|Wmy7%<2Vukp63C;PeB9~ex77XDFATJe`%S1za2>_wQXA!01*X6ds8Ap$kmH3 zz~_LXD4M2`(5`*o2Y{~YRP`d|5*?Qne_1aBjtMgi!@YBwCIB!^Q$h|HW5>=Q2&$^8 z>pD%-!;|N^gn@&I5340f5|LOU__O1jGseboB!pO&700orX+mxB`a1r7zzt(gPYN&R RA>;r6002ovPDHLkV1fyKj{N`t 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 GIT binary patch literal 0 HcmV?d00001 literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvcm7LGZJ;(0)!3!W~HAs)xyPP67~Q4nZj-@3tY<^K2kR~}qu zjug`@jlF)n@WHm1Hs^OV)ZQ;-jLQDvX?E-Z)3)5htR9;3|C*jJKVkX(hWy)erzW!` z^e{GT{if6MSFl~l&~xE?D4k)Ej z6d8sA0IgQ5kpC$vpzC@Z$9bHlX~`aJHk)3rC(AMbJRT24QA+jz0DRxi@YL$+81Ee3*PI5oL6^(lgAPi(BQh`vJ9QkxN2n?ucELCjYdz{F+=VP(h?RK;M2_D&0W4>V2VIIh?0$+9fVvSnF3&jT2ZMxnkUN7ZVz zQmK56G#ZV~W&= z03wk{D8O#F13;3b+lt5I0K6BGKftmqXUcAiAP4{q!-N8`EDOLiO}Awj27q?E9SR_d zA^=_2-PUTg0?_St!`_2ht>#X9y`sfJyvcmE~$^w-YbAYeV#6kAs)xyPBY|UR^V|J7Sz>Kk~`R4EtCIn-2*kN%;RO6 zT}KzH=Kp)B$r(7O_>iweOdE^69*5!@=g(87ObW`9wBFCC)MvQjqzc1>-xuc?C$DFo z8no?{+46hU=Pm2^C@$S{O^^HI58I5jlF3!?w^s#ZyShkS-Y=H1cK_XFhHig)1P)nl izxV2kz7iwn15Pd8Q<^XI3F@ArFe0(q%gt?qWa=lNEv1pt%D#C^Fpz(t&M0N89cq5wqH>2x$r z69^!pa5y{|3`c>Sj5+OtA8}Jev@A=KBvG9#%ktrH@YBiL?KYRo zS(fz}1_FWcc>J7pyC!77b1S0000l;a+3rssK|0sd0g zb@`t-j&)sUS@pyIwJ7;$6(0000< KMNUMnLSTYW{*!$G 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 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmV+f0{i`mP)d?=6rY}-~2v_>_j_LgLKY1M14)ubqY;43W;379Iq$k|tyWVMC1?h!szxFa+qR3vVk(t# zU6=E>+btT6hL8afEtg9GyvFlg+%A27ygmZ|U*H?}=e;lWs))z{0000Z1Z@N>!PZyj1H?*EP_VH|{=h;-ajys*xfJIs z2M6a=yTk4d%{AcWvI@qu5)Ti_oEQ1>h9klZ079XV!mQWpLZQI({9>`t!6E>Y$pnDOWQxb*k|c?uSSpoRmVMQt z>-9LPiG&Ur5JDJ+ zp(skb6NtrPI`lx6<-_5S&1Ti)YPAC3^?G&4px^HU5ClO@b~+u!G#xTf0??2ym&<50 z>eB;;VKfbpWf?#&ms6&j&F1+GlmNb-AO+QG6+k|p2QVIwN2Ag67S-!@0Nrj^P5S+Q zmSvT(AP6rtx!3Cf2#3RJ(&O>aG_ABc8jZemi+ny`u~^iQ&1Tc#aAY!>%jJ?xCVxJ` g@cwwc1^&LkCl8Po`2kk;QUCw|07*qoM6N<$f*B(1djJ3c 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 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmV-B0>u4^P)5et8S zR@x{jf~}Ph5MpD}CbfmyX<=n+C1Mf8Sc$!zwb~dE5fn_P1Vj*w5>WgWbZ#-Qg!LwO z&Go`A_;z#749_|9&J05!gy1Lj3w~H{!2bi#H0^%BzaF3{3d1nTWU^AJ@I3EyI<955@ zNW0zM@AuCENRqUuE1%B;0LO6%q2+SvcDv1HnwsqQ`xlFaSvHr;O{Y_z&nF0iD2l48 zn!agf-8ETG?`31 z9uELCo6VP9LEKN!E`#kTCKiZMZ7;=Z@|9~_yG6SF_sT%SX=-A002ov JPDHLkV1hqr{M-Nl 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 GIT binary patch literal 0 HcmV?d00001 literal 573 zcmV-D0>b@?P);oVDL%dMx#-^US}8v!0mQxHk)R%S!GM5 z(sH>ZI1mWr^Lgzm%JWF4)A!2lc6-m-?e_1~p&ik5I#qS?c-&&K+_N0VscfN85Jgd6 z4>p@kI2A=6pUs(~xyisZ?H^gI22rAdyIDvSk18JpZFf9t;KmQmNF#{dT(zAeYP0(?7rb zBqftcMNz8Ns?Xx(^9g|EatR<7i{0q5ECVnM!zq9e zl1`^5lgWMG07#Pbgcf}V2JpB`?jOyZs;Y{jcs!nBvB2w0H-|wH`gVAUd3%;$4eRRQ>XKBqotG#caac)Q)YT<-<-dcAtR9tZ>gghC-lJ`hC_fUfH| z`fxb(`~3h`tJUuxd9&F7Xti4Rso88sQ=(0p=Xn5&#o|6S7z_YZDiue72Q}7ewd-8{ z9-wI&fJ`Ry^?U2>%9@f;czyarCcZWKFH;Ai9|wC6iw6m{XWaG-ENnDUokWvul0H@%kuGf3#n2ex8TtxtAjlLhzGP!4K;f@c#q8T|zlPp-?zJK8{AC)9G~C ze|>$;FpSx3rfHfWi0?~SDM1iou^2+A(P#ibybFwDjP%+PAJZ*OlRU@#a+ zat4C|4&B||t-M5TP1S1k)zy_C2%_ifQnuS|k|ZOMh}-R6eTn=MQxw(hc11Ij$?WXx zAcQm;&CAOR$8k=lv)OD?6t%X>b%AoZd~k5^{{FtZyDRxs^z_u@@#yvXuTia5`!^4fTnEx^0|0=2 zzmH9y&j$cJ&nxd>rHn@7@;a&2YUR)Ma5$8BtX8Xdw%Kd|@bK`U5P%;`p69Xo^z;M( zEX#@skB^T4V7J>90!WgqR4ScL2b;xW5dbbOF2n?f!vO%zW)t`7a=AV}J~kdQ%d**Q z79m8_bSjlv4!yp1wqa4u`#7ucWNSViAwW34%B~ kJCnJA`2Dl{1^lx<0meu{g?ijT^Z)<=07*qoM6N<$f{6`4UjP6A 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 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmV+n0`vWeP)f(q&E zM6j_4!6u+s36?&91Q9_jEW#ibO2Ed>#wYLrv=j?Ltn9oXsbgU}3$c)BVZ0DBTMP`# zdWlADmi*P3Gylm4;hdRqVT|FE`hpM30XTqv1W;8qolbAJ+h+l;M<#i>Tnd6PnM`PA zJRWyC9n&;5O{-KY;c)n7F@8XyP>9Bx%_fyf_4|FA@pwG5+3Z%WHK5z=7K=p^%d#wr z;vYk;R*OcX_5q1RVmh6grny)w3WdU@q0wmE`4iRvTAWNKuNn|SZvY^Kj>qFw1IKYJ z%ibz~s7;&AW*`u7yWN*tr_)JMlw2-nzl-AWH~<_D2eMQY#V`!ITd&vef5aNFTCD&e z7K@Q(Bofgyjl{aH1Hf=Nd9>`o7;k=kqxj43bz71cqUrJ?tz1vMh5PN8-U? z(ChWyd|Z3I-u-@0NG!|x{r)!tc%IjFT~*c5Xw+`EZCp4m=Vj*rUe*tN$eqU2O%6i< O0000`sfJyrpBE%uH`2RWe72TvEr5Rc<;rv>sJRuE{ruIa!eG@+sS(E=eqC)F6)0CrpU zD~^R1tQgq0vrn>J6Pb8+Rx0Or7e2lCe~;^&4xibs{kU$oh1LS5IyQ;6M497@7XR_I zc+TLU`E-u9&PnYL_oS0AMP;v@l6AXmUb@n+rl!=$U;FAknHY?tv)68oWOZ*4aJpXl z`;Uq5O4p7VZ?6h62s(2d|LS@6q;-cOmtvo_PD_Vj+zaNlTfhICKX*^=>?xmA6mH)a zIxy4l?)ldz4Sn65kCdN3wtFop00i_>zopr0K52ro&W#< 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 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmV-l0igbgP)`sfJyrpBO{oJ#^(;W4U!E?GAs)xyPCeM$rXbK-xVc=DQMz!2eJDza6liWM0GhK2@XdvBLW+?3J616qt<~CY*PFC-Hb& zZi~RVpJyjNdbUd9c%ekwCLKnFV;vo#p_)ru1jHvFpX$Wn#F6a7@$mW1@AHb+ZT0J) zeEK$H!mMS+%~OIjzgiuTxLg{0>$1sNoAc`#oH$Bj$hvv7)+X1{dQ^{;1Uo@yxm qw|W-mT*j_H>gf(_DF^HsY8Wql2sEs_&SeD*1qM%7KbLh*2~7a*^N4@| 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 GIT binary patch literal 0 HcmV?d00001 literal 338 zcmV-Y0j>UtP)HMzi5;sT*t|B~Ez&Y2pZ6e^6Xsl8y(Y*6K zhhYGKx~{FYSIRukxl@FQ+qMBf+M$$Uj9m^y?E5}`sfJyrpB0loK5Y}`Phd7dtgAs)xyPIKgCQRHz=>`h=~cV!YPV9;=25-V^BaFT6c zRw>~xzI``k2J=a|UwupL^;?#?3Qe>)=`GX7s`Epwr68=K;}4ro0wZ@_;@aG`wKC@{ zlY72TZZ?xhu6WOwu$GmWo8m66#^t#z~QMl-wQ^#we**3xg x6N6TL-xvRXNB5lKsMmk1PRi?x{n`J3*V0()xR;#7S)fZ9JYD@<);T3K0RUldQ}_S? 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 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBWj4Jzrw;;!R(rZQhIkx*d+j3UVFdxUgv+ky1Z9p2-f?g*V7}{c_W*AR zi}}vm2kb<=JQi@8WX8X%|MT&Oz{7%>#a-5)1^&5V>m%Wx@!B#aTrJ{45np1=3 zuQTXRS}W?bWXe5WC7>S^9zFbF*wCTa;(IeHd+k}_$RFv)4_vQgdNc3oi`gOj8-dPd N@O1TaS?83{1OR1_W;Xx; 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 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB1>Q-?j$J^ZSWg$n5Rc<;uWjT!5WwLYST9yAB75-cKdrn4vu7x!&XN#t zs@Psvz$G0XdNGBam!08&t?_KuJF@0Ly$A9cL(iTuce2%1a!GlA_RQ7JsBFQRta^*L g##iiNsFAl|Ob=5u$~<_b9H^MV)78&qol`;+0F>i5VE_OC 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 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB1eFqBp>qSqV;+g&Y8qg*NPgg&ebxsLQ0J76UUH||9 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 GIT binary patch literal 0 HcmV?d00001 literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBevv047uA76vproLLp+YZof63FtjObfKU$4}-6KO*gww)-+v@ChIvnmo8}lR<@qo$ ztlj#OCA{gLwNjfvMdRnYyZa2Q-cJp>cI%)~#|eqgMtl0VY%f`UT~zR5lB<2}r^!<$ w73VE(n7Q>@HS5wT@8_@FlP%cspr3_*!c~@k0R=wmfX-y_boFyt=akR{0KlMID*ylh 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 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBRg0a=3*P{R7J0fjhIkx*J2jD$*^sAoeKM1ls*u)FJ}=QLPO2eJs&kr; zIBG5AGh#gL#%(R(e((H~iSHd13YCgtRvs_h$dkapd`H&c*o|3Bf7vr-t&MKDc8jf{ zHz3Ow8$9BlgpBbH<^?GHP>yz|)ClkdaP1k9y9h$0Jm%e9U z*z^5)rQR|Y28IiN`sfJyrpBS*748lU$%sq^FBxh{y4_R~>m73^`l^cePDuVNp?7IcY*eOC)p3WZ%Op zKd)E$+^54}bW{1Tpn^lg0nvs9-l6~B?WnfC%FJ*k=Y8+vCy&$8LQOeR(p+Siy7ebB dFfy4l=)YO(B`{0qaV*dh22WQ%mvv4FO#nCtI5PkM 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 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB8IyfeH`D@!qC8z3Lp+YZy&A}Sz<{IWVOiURCYB`)$~spWh4PrDnMQiZ zPrIYvpubaGt)XyJwoD%bBNNN715w&aQB2!bW`!=i$Y-$mjLZ6P2bX<)58s`)p3L74 dQu2@CPT1WK$tkV+H-WY=c)I$ztaD0e0syFuIq(1g 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 GIT binary patch literal 0 HcmV?d00001 literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBMJwZ@SC0UN)_A%&hIkx*JI$AuMUkg9ajF6%r-cUJ3YH}g7*u$;CNS|G zaQto%?ooEwY_e~~b+sDK_g~$GCO)|0ZSb0b@4P-T8OMsp4%i2N*vv-}|{OzMud6SqGrI O89ZJ6T-G@yGywp3EMf%! 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 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBK?T8wQocZ;E1oWnAs)xyP6-rjHsEPXG-tGMaC*d`@?e3`gbRlqWgD6w zEh%N-3u3={JMNlUPKYX{SZd+vV~TRz*QGI_Hx z1nw{P(^Or?E&JwoU&loOrK`)@bfQP;ZZCv>bC z1TN|_7=N#=f4=x6!}A!gC1<|0n67=ki%ILjeg^$pS6QQfP280Y^dEz#tDnm{r-UW| D1#5J~ 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 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBWtq$WjCKQsj(WN{hIkx*JIzt>hysu6>2q8wTD&@#3xZ@y0s=T6FmQVu zV6<2e8X%LxU(I@I%F_+Tf3zEq`#Z5Ubp-qGU3N~Yf$>NEfkGKsMz5894DV}uCK_Jj zP&gTx(j(|paPBq#qA6qw9JznS@yrR!?eDG4w4<3BW<0+cb^G+eaK)CQ18Yyu zF5jTzZOOpUV|ZTnO2%!o=P`MvcbCoi{MqL9=Qn$&2Q9n3>u%$+h84jc<(o`)US nweEVUDAS1_+jtHzd||I)*fAqjKVn5W$U_XCu6{1-oD!MN 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 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBMV>$P4zWO?)t)YnAs)xyUb)E2A}GN2;O=R$1{+qSIX1Hmjr$$EG8Gfne!X{IZs9$ZV<#-v zU$&e*fA06VY+eSAh39&cdN>vLe>F?!k=)DawNhY_c*W%zac8v{rUbP~CH71W+RLzX z%l=Z1gHf;NNK0Qn_hgP_GCy}3qh@MPq2h--f4?n!`@V`q)akFCu=vGXy%D N!PC{xWt~$(699`lW7Yrw 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 GIT binary patch literal 0 HcmV?d00001 literal 346 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB9p;;P%8fvwpPnv`As)xyPCdA`MM0n~@$(_kb z3h=ti#&dYW$zzk}6xZHgF2TT|c<=Y)Yt{Z7j18Ng#%x=ceS6!-?Qy~q$snkidcE{o z6vKikZ2|&LiY#853=!E|ubo`9)$Y`iDVI&&{yrz+J#ESS@0kKlzLz-^FCEiZ8kMcs z64WIy=}}1ifhj@9W?Wgg?zR2e7Z+^KhlW}{Kj(SQ^7)^jnX!Vq<{U4KnWlR0lC=@D q2mem?6HFfZ%Y);RGNZFyiIFnGH9xvX`sfJyrpBQR9!s^QHrZ)_A%&hIkx*JJnW@MUlsC`dnclb`J+8j{}TC2N=a1IE5xK zXfUwvd^BtC{JYv>yY_TRc1_ox%;0<^SM~Qc384uMEaFW9hh&)N9k4tu`6m6T_R=ub z7ki7(Rlg4ws^Ka+=hQLB*sn=;e)ihZ9zh0%2Y%r#0_S#K|5>=F;9Rd^RQ9!7)=k@g z?Q^bt-)p!z>PxlH(kYrtTbqKqrW8GtV{lkodP>UR*B4I*CZRviIcMnmteo|B85_{u N44$rjF6*2UngGhGU!MQ~ 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 GIT binary patch literal 0 HcmV?d00001 literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBF^zy~mK{K$6P_-PAs)xyUUL*}Q4nBDxVfD%BY`E?fmParS^0<00^Ti* zCI(Gr2iTmO>-pa?TE0m=viHON8Ha1~+4wjZTu<%kI&#v1&FBMr!u@i;-H$EyeBaNo z)|7q2wWw@;RTjfzTXMPG<`jFa+)%{0YE{v>#_8)`_ZS*FxRl18|IAa?;i0*8-Rnvb zhH0siZH`_yP0s4-AFsCeoqTQA``_gy!rK|r=jU%PSSO-g^=guQ)iQ=to1QQ{ws5QN qYs|epLs%d%Lh$G9NsT;9*zG>fVaZUfn5GT%6N9I#pUXO@geCwXa%=ej 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 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBF}|j}7A5^Z91Z`SV{b`i>Xg;mo>i<}&Ab<*a4XKQnr0 zDn6R47nwaZ==3HIMXvh|9c_sP=dNa5+_kRuzI1ZdRt|@KXa6st+iTfMEt_0 zuOsqD0RR!Dl+LL)T-0^l(kCkkA$IyL@z@*y+O|D=mHm8c?Nt@LTjj5ho$pll*fjhH e0T2N90z3iOGGMJo+Gmdd0000`sfJyrpBRi^sYE8>7cpFCY0Lp+YZop!PJumVq;=T*iNY&jEh4scYow5IeBcIqKC$$=welRy=t3BHrKkaDs z`YA@oJT&*uWK?2eFwS1<%)ua#{6~e=?}UW2OaD`w^N%e)6{<4&UbfNi^vM4EO+~O( zAn5xW(@4#!oqm@~ZZIzuQF@o2fBTzR)Y4<6J%S9ccIDmvw(aqp*Sqvu3(rMn|K4~1 z_Oc)^moNUiW>3qV#vJ=))s&NGYbP0l+XkKID&?5 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 GIT binary patch literal 0 HcmV?d00001 literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBZP^@!4ppGgTu&Fr5Rc<;ryk^GR^(yvonjZ$^pe4a&DX!MWVrq~Ec}C8D#nPbw_>UU$z!v-q6;w%@z&>|+WOKRJ;vOv!3t y%G#|{E=d#@oecggxLat?WXS^zY=0OZFfL}h%m3}P`sfJyrpB32QI6j2A$md!8!tIacdXdzcX`X}UCEY(`!X07Y;|*CkT|~a{qJqLy0(u}=RIGwYRQz#CXw806qy@> zvLxCRmS-$akKE>a=-%TuXLhao9psgn%Vk&V9XajvrV4?Gmo6zw_lwQBsISy?DW2ob z3xC#gU)-7a{>B|xa-ZYJ7wtyzUn>uY{|&id(kpHyxYOR^W4Ive|33^|3QlD*aXfxN PpE7v5`njxgN@xNA(oBCq 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 GIT binary patch literal 0 HcmV?d00001 literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBDU%oH#eV~ZHha1_hIkx*JJpewSy8}sdK&8k2F(WvItq;JEbJZ!7+*7R zMjT+YSkN9PwLs@~%4D^<`sfJyrpBX^wllqilgfdp%toLp+YZoqCb;hyqXB?Zw;{o`ubM4>dQ>16z?NE7o2(eCXiQdatB2?e%hRg1zoet}5l{2AXp~p1H^H^{!_-uFZO< z-D1#}%#rBNsc5P9mAAog*_2Z&i~EAAuG+-x_2GE9SO2x4o2IJMiKyA#x3?wsSU$gO zBKxa-SM}2p#UnQ7+ZW&6&St$}O5Lo@^kdIltG&JI$7DvJ djei&(@b0_wL-Z$$`(GfJ!PC{xWt~$(69AAHY)1e9 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 GIT binary patch literal 0 HcmV?d00001 literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBNzDaMG#&zl9(%ethIkx*d+j1`vw{HIgUv4)@(x%s<~-8)8&3j%N+qq)h zYk{WXyvS*VGJ=NUD;D)W+nYbjE&Fb%EQ5fc;MA!a`UB5_IOy z_rE5-Iwuq_YIV!-Y*(UNMdk(`NvvZ7P%D4Vs{kv&5V__VFriJR0 TVx1R2?=pD0`njxgN@xNAIoEx5 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 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBHGVDgb_Jl&Oivfb5Rc<;uWsaJR^(y5u=_<-Sc0fpBFkpR)fLQcmiZ0l z2GSO}Tn-9PgIxZpO3Y(8IcHUs&CKf`3wR6;H2i1n$jBB?yT>fBaqBidg+~`I#JQ*( zTXA~kmHCUyd|fn`3LJW**wHc5Tl3!U^B=SK<^0`VaPDjO{!&+l3v*vFGbkv%b~v~5 u+AhXB-`848zO}1P$rfdkNI1aXXs#|iJ5}t@ 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 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBIc}??{|^C$5`Ysn7Q}h3f9G9Jy8Z(2Rk-2JhV4U z$j|p*W%={x&xqbbd5oS4_V)Gv{`}mLqRG36nVpY=gF{6{WrCQ?5$5{(|KH!=e;jzg kA}X~Hq<;mg@mdKI;Vst08G_DH~;_u 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 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBdB(%s>T`iY5uPrNAs)w*|NQ@N&#cQR%-nl$1?yt5o+yK?g9RHD6crmA zy8cgT{QLX+_3PIk2Rf|emywaNtNF1Z;ULqcnuPp(|5d&}fBuZVL dK<*U`4DIIASRXz6Dh9NJ!PC{xWt~$(696muJ)Qsn 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 GIT binary patch literal 0 HcmV?d00001 literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBWj$%lWNV<%R!o6Wyh*ymfW=y=fkkZoMYZv~^nXKigkUVP={?N`7tDjS`he4)XF~Jh*%FwMR@f-x?Ec+~pA$DmW&Q zobz$fm*iDbKHV!%{@x`sfJyrpBMdk2ywJboPEuJopAs)xyPI2UARuphuxRODohq;NVfI)*n)5GDA)d42I z1B@06+T~6MnWga0{;>YflhhyeY}>D0m|L}Q_Etve4UDfF=6sfSkDhF(w$#L64U?DV zoX?F9@5*W)>oA=6M|G`fvQ7&F!~XR=eM2r8h9(X9xxx2 Wo6oShW~nOB{S2P2elF{r5}E*SM`iK= 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 GIT binary patch literal 0 HcmV?d00001 literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBCDF~6yW@aDD?MEtLp+YZo#x2PqR8W#xY=n!facVO=0^-N3XI&3TdW+I z7Btwt5uJ3C*OvGHFXwo#Tk~HTwoSU?&H0*v?}224K$8vw!@Ac|x02gCG@jdR{i4+^ zuDXmD-X@e_sg%bIcTPa*77%WWUbW>ui^hzBPhsOme9k<@chn|+V%4k zld|6~H)Lg4Y4|t&;=9+gg*!B+x}MpyYTcAe&vPsrm?yB;Ff4u&wbdairV8k222WQ% Jmvv4FO#pe!UCICe 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 GIT binary patch literal 0 HcmV?d00001 literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBU6we(_GF;Yc~2L|5Rc<;uO8%WHsE0m*#3$kO-O=KO~J>(EP+Mhp!5U5 zO^i7Yau}pjSgIVHR%8W*Y6bECJFc&-U&OaF_cmMjGd^*5MplskhJ@Jb*^Fu5?k!i_ z=CNy?vx}hRbfu;amlD0(+jtd^oU7aux^`=ah3{m;W0v6}tPB>`sfJyrpBDURa{vTJ}scRXDjLp+YZz2?i?Vj#f!AhDTIq@nqsW1)lW0!G$|1DvH7 z7A&w}VDD*uS6Uyn&F6Gx<@L&$`o6Qa%-kxr?hLcuIo?0I3QJWMnKYFil~8WE@%^qF zdrfl)o6MO>5(PGW<`2@9FEvaE>S1iO-NyJZbROgKTRhC?G*Go_OeaPiGY~UN5^x$g7?Xc{(Z(R1Wm&W!#)>vxu;>nx0r#GGX?Bn7ZsIj!h z=UnvN@3oQBd@n035?~VCo?AT4_}KC8j*b`sfJyrpBDLLbkd%8fO!=5gVAs)xyUNaOts=(8bSiu*-AXFfr@_<1`fs=D>i&duT z5yxHoo2LogI5BJYe`$#h6(z&sx};A!35;)rllQF4786J=IVYLSWu4^Dq4+%JcGt>M zy$@08jJjXz7Hqu7x#fCwga6m_2d-C%TAVNT*vpl%_J7a5D$x^`%cuPKy4;+Bq3$o| zg{aT3^%?g2xooP~rm!gJRMhLe;!YON84{kf7t6SFC@y7TVAzm5du!SK?|cqsa&a9U l9Z&UBIX0~8V!iU5O+;MBaffaA7NB<+JYD@<);T3K0RSgMX`sfJyrpB0S4nK+(&>y+dN$yLp+YZo#M#LtSI1GKAY=q1~ z9t^BK%vBlrxe;ZYp8S7a|9O)7?EIOy?7L~NHu_#;(mBA?1GIdpiQt5wOHuQGziQA} zx^&96bdCpm!@aiJIxBK3G8~Ay{o#%M{jJ4%&+l{^9y2)B_xQn_`tbR^IaZAGBjaB! zh!65=nP8Z9YGJFuJ>^+jmq|RnY`XWpW6wmxHi4|$@6v%Tb>NuE8u7l0QS3oIgMQcM WutO#v`sfJyrpB9f@G>SGho;m7Xq+As)xyUcJb9M1hAb!8WfUFU9=@+pZ?z7i^_d@-7I@ z;yuHb)_kXVj?D3`{Fj^_ezIphQX}MOYP?$ebAY%z10%~1W(L7%M;CQw&82KdB-#@# zfR-vr9pC76Zs$J1m-Ekm-K2Bx_bm}Y#)MhR9=jczQ8jD5&37|{;;ldDo{N4qH|MsP z(~7S)=U?wC3cqsjR(gE)+n)@^&*wx3dc9=W^5-NIhr$8g2J!!X0Uv`tKLh!L!PC{x JWt~$(69AE2VnhG{ 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 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB9gWgUw+;e@mU_B4hIkx*JM|(bv!Z~@^#axm^=%29VGHJFaF#8QjpfW@ zy>;-Jvjvln|;O? zkA|}_Bu@}%`aZAt-$^#h=gLLrD)Z95s0%kRu>4>=Aj><`Gx$f+e-@yF89ZJ6T-G@y GGywpu23%JF 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 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBVZ9^yp(lVsdpunnLp+YZo#x1UL_xqckyn9HCWM)51&hiRN8J!6zX=Yq z3XO#yzF$b;pPeRosm%Yg-(*gEekV0aUI*Kg-nKm)E+4`VZqix)HMgnuzJK;lX2FgJ zyB>V^DOF#m@1c42vyV%Btza#S`$ zRQ9nML0sx5L}lJ{C^B#;7QCxl(0*;2#Ny(rr)@ps~ dX5oXW_b#k|&b(G`sfJyrpB6DyVi;|oBcO`a}}As)xyPP@y?A}HeaJde4=iG4)_pN3;PkWsRL<@bh@ zcD?gw%uLz*(Y9iu#mRDh#;w;LpWM^ezL`;a1LI_d_qFFLCkD7{E){Tkm355aSOiC+ zB*Wk1=OmaJj?Jj!)ZMyX0r$U4Eg*l5q6c9 SZHz$IGkCiCxvXtB=r 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 GIT binary patch literal 0 HcmV?d00001 literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB5tZ!UT7p2KFP<)rAs)xyPCJ;}YQWR>cvbZT-a~AO%?DUEFv=+^Z(vlO zz{?}Oq48!z&ICEFuK}MXUD{W^@{|1E)BmR2=wni3`RKK`Q+zc8*8+w*j)HTs&98UK z9iQmWXKA=O=#`YZ(%MopTYiIM0)bav{jQ6gR`RR*SIuP;Mh1qQ+hwJ@*Ezdrrp8|H z*K&AdD%*CjdcMcMEH`sfJyrpBAsNxdrkp^bEuJopAs)xyPCLlStSI1GeyO2sk?fAJ1+p2OWy|Jfu-|G_ zo#Cu7J?GBBRK=E`?EFSQ9{gX=k=*mv&vx5vR|X~l27V9Ct=Gahm>1sLEs&(c$r|AG zbk22#f?qc(-!mSlwwF)t@zk{cp574T#gTZwyyt3=SGKNMv&7=9*DS-cWv_qP>bkd_ zVMpBM;_fZiW;C}5w2Lits#`Byc#hxM?dlbY%`unn@5opmx7L*FMYtma(;vnMoZoaJ V?8;tsy$8CV!PC{xWt~$(69DhOW3m7M 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 GIT binary patch literal 0 HcmV?d00001 literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB3!e1)m##pe3!W~HAs)xyPEF)JtRT>OJC$id0DC!~1Cz#r&;ZY)jHN*` zAxsuKI3-?hEYmrC=(p#I-;=73FIHc)ZdqPzs;L8W4Znbsh35jMx4-!qO1xYdvfpmf zdCp)PEvm?p+*ADShZF;c;=J>c4ql#`OSh)E+x9&+;CY`aknG~}-ZnO%{DI!mJum(l zHJ8RN&kXWXOnPW`?(>|p56-R2@2tKy>*RxAJzhVGt4rl!X>1aG>Qc74l>g_&z_ zwzqZsRLKfInmNmHh-(>jDU%`-fwJ}G*Y{L_v-xxey{an^LB{Ts5`sfJyrpBaY>1NriXz-J3L(+Lp+YZopzA-umX?kV?7762HphbNt}n+44llGeG{5f znEM_0C$5NUl}lRWCHg<1@X^8V$C--G9iCgoW4@Z%Y60^;W+#r{`+_-lD!EJvO53!G zVQp#8M81a0iO=USGd#az8ZMFSwKDlHr-$a+*H*s5N6QqCye@dEcdt6RXKUH*ZFl_g zHJw}-GNdmTcR#CKmUGHdUo3QX%q!O3#}Tt)dS7nR@lE=*yS?m5*F23E`@8sFG}trP ZFupkuVJDM))CK4V22WQ%mvv4FO#tpWX1o9Z 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 GIT binary patch literal 0 HcmV?d00001 literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB2`M)Hifurlm!2+;As)xyPCL!pq9D*V^Q_nc(FFFzq7hBH7aA`&mMxIY zV87A0klE@0-v;Jy8^j+gPc)4&`*WP}S#lgp!MTkSsx}_zYT)Q-&^}<|8y7b%b*IfE zKBHp_i#|`>I;}Wwt*zc%hE=O(J-=D$&1WfSg(AyWngFsI;HKMIZJElu|g52 zoVOcleOm=y?|N4Guh?_zHP=8B-_7d}8t`;zEG_B3T6*_d=n6C6Nl$EC878FOoGdam z)zjs`sfJyrpBajRW7T{Z%R_ItWGhIkx*JMExgivo}9*>hqEoMj5K0bSFk@NHoBZs1$c zQZgaJ@!JDe*{=!}Hy_G>POmVw=VVxQYtKsm&zrOsFljB|Xy^#?n!YWqd*<(b>Cb|< zGdP4kuas+hc%|uWs<;zFL%O44((P^Mb~@LxJGcl|-r*5cRC0N`sfJyrpBHKU^V(}qBy*`6+rAs)xyPI2UAQRH#8o-NqWVx_^ip@Bsvfsyk82dBjf zR+*A~;k?UdbgExj|C_MKWa)na!5b&p&61gf|M(j`f3r7V2)MLov3I=KTmP-w;flfM vb)4%g*J$~Ca6VXdHGlVsvIHjKJ`sfJyrpBX*sR@_c=hJzn(6RAs)xyPPyCLsvyvsxS91vV+li;f@}hNP?Ky1`!s{H z2PI0fJwWDW{@D^m;o&~t>~aoOK6p6c!$f2INi&aHe^tDz)=upI{QLL4-}AqQc*TnTbewJX>KuD<0Z-KZ?+hQl tGo;OXKC?s4)c@6jr=@clB|qph#9P>kEX&e$otxQ1&iQqBaHTBElu~=Rt}DiPyC;OWr9*xD z@sv`85JG60rY)njPSbP?8DoqwAw-fSXD6Vux2d(ZX&L~C41?Q5UDr}d&ycUzbl=5!p3Aa4EO~SdFvbu<0HCTWckD{3E&p2p u0Bq;BZR;kLQip5vBozKC0w4hX0pI~TeHrM5{#JPa0000l1z-ibl-`S4t%b);r<7FN$ItS5;+pu$8Hz~&UuvV zx{fhcmgP1@M6LCCDTe@SZ3tnXM8xPwLI^|z0H3y~X&SBdKHvAflu{|>oZGM7a1jv^ z(c2{eIO@b9z*@U3%WGzy=eBM4uJzuZwCL=RBX=sLBI6?>B3}6Qt~;NRXwxKsF(%r} vIVYt|(Wc(ys1KVpQ-nPKDl#Ag{sG_@p!K|`sfJyrpBA+vK5f9?Z?4tu&dhIkx*JMAp*VFjMn!mHJLJWsH!Im98Ss9e#K(`4>p zrl4#gd?7njbAr8|==)Q`^WUT^D=baPdX=iRno(*2<2weIl*nnD^kYMNHopJ8i1*zd z*E2aiii>)l&&_9INZ~nbARwqz_5QofPOce|q1~k`UhP_U*+lWtWXT%smIre_-#h>L zPw|%`sfJyrpB4N=c)!B>DnH$7b(Lp+YZoqABPMS;h)^f=QSl`;pb143_HtPNBHm}EWJ zFEoiZh;Cp{-!n6{^ro%O&Pg-b?SIaAIWB&9P0$v=6Yg4Q882OHE z(#b#Xpt*Hj_NiGd0#kwx8}vNBu`Tx%PuW+Y?-R1m=>~pNG(R)zv)zrqHs_14mxk9g zbnM~p@bLP1h$X(Gt2@!%rS^V0k9GFi@BhMXOx54a@Q>pI%Y{2PPgQ=2kOz8_!PC{x JWt~$(69BqDd>Q}% 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 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBb>6#5*L{IP^E_P~Lp+YZo#xHUqR7+MepbqX(Sw2Y0gLw30QLw6CZSgh zoKp|nJ2A&B)+j~)ufIv==dYqc#?SZoy(*QR#w7AV-r@aUi-wLR_lmujilj}e*wH|JVj_Wvo?vWYl@WQrxLxjjQI;uW8SMx(o`^PjqlF@bmwSJ1F72 ykI!1P;{Dgv0SDL~EI+&R^oyH|7+B}9*Dx@#8*|3({W%BdQU*^~KbLh*2~7Z#K3K;9 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 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBVe#2ncMkxCc6z!vhIkx*JMALxVFex+PjLn53A_o+>nHIZ;^;Y~mcqQL zadYF%1Am=ES7}{P3$m}7pFVe9$q6xL<^E*O0OiQM$*?MfoD~aSa zTQ!$*Go0SUz#z!zV7mJ8-v6Qjt1TG#F8f>6r#!!NJ$R=plYoQ%gVN=G-&bc%=%3E; cPyPeTQ?V<;tgX6BfSzFRboFyt=akR{0A(X*AOHXW 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 GIT binary patch literal 0 HcmV?d00001 literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBQK7w2eJ6oJA3a?hLp+YZopv$zr~;4c+*QpfEM^-vJDN54Oc4CQmeQQk z(sO_$SO4IaT-RrC&9rxw)7gsVQ-#dy*q2N>#S$f?#KfRf z6n9BvtEQk}pjT$>_1E4<&K#3S%e!3`Ij!6K$=-T99)`;%a|Qp^G)p93FJ)-x=vPsC z_uJ3K@Ywx(2coL?XerrEIv(Y+X6yQ=tg&B23w%5CR_|b}XLvB@v}OJ7sl{?_54ZmL z%X7f8e8*As_uYm@#k!lh73TA-JYv$ gb^lKM@&Eik7#8$$J^d;g4GJ{|Pgg&ebxsLQ06C+Bd;kCd 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 GIT binary patch literal 0 HcmV?d00001 literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpB0jYD}KJ5bv&GK|{4DmSr_S!*C7DXP`fOP2%B5xmTPhihtotD7qr@l`sfJyrpBLDL$Wf6IVEXFXjULp+YZopzA7MM1!|PRKDVOxh0!?*2HjO|Mg z$5buLy?sw3G&JPEZU)5`>7^_O40vkqzqfYeNR)A3`&CoHvFz9k4eKe|P)r3vUU22WQ%mvv4FO#txcc-sH~ 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 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBc`=6@i=u!+(Vi}jAs)xyUfalfz=6X#FkUUGS(-J!F6R-?1T_(l&L{E8 zwo)q7RD8-3EtuKnO_X8r2)oJ=5UR5KHFLwgsWYF;cvk0^Hq9z!yx+*k%vQ(g;*wqW f^P|y++6QdYf1PAyR&%KYTEpP!>gTe~DWM4fBD^=H 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 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBd1LN7WwJn_bWaz@5Rc<;uN~xMFyvryC>CAH9PO#Taq^TT?rD?wzWw{& z#qK1xyIwL(ActXzQNKt#L!mdKI;Vst01>%7PXGV_ 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 GIT binary patch literal 0 HcmV?d00001 literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyrpBC5_jC-~E9?J3L(+Lp+YZo#x1S#DT~4aw=<2^Tq)7V9tpKd{XSm3;EQ7 zlokp-N;u~DZNmlU#M_60UMT+m;aTy=!HLbd+4^hK?57Ou3=Z#WBd5*PR8lJHOh}*g zT#_Mc?d;1@-G;{`qO+I3b>|Eb6)Zldxm35kLqJeTNl9?-GYcjIW8?nE91JcdzQRhY zw2a#YoH)*`S@n9?KT{=RZ_T%Jg1j`JdaZxo$Sm`qL7m}Vc-KDmuQz@!Jt(iwZX^GJ Zabe7p??p~V8-adc@O1TaS?83{1OWDqVSWGr 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 GIT binary patch literal 0 HcmV?d00001 literal 748 zcmVMu2(fp|MWlg?c5H8rJ|7zc!MmDr9OoR0E%Hgj z`q)SC_NMuK-tHC(h1buk)rq?|r&eo$avb*-t^Y|=hRKSge<1ybNxR)HQ#^P{?RL9N zCW8=KEEenaT2YjAI-Seq%H=Xb=yJKFQYki4jtgGGUTuQs)bUm1aM|XR5VG6tsGPsv zuYcUj<>JXse9`H2nBo+$_kr}60ZR%`18^E@w#BDLG?HnY;zYDEo6lI(HIT`rei zwa-a4O*r4WUcO2z+ng!vcO2ZO<&Uaym|sMTt{UXQhkS?GK|7X-l(JfF{sq8Ns; z*=(#Ehs|bV7>1%K=kwXoUJ!)obQ-NtjPYF*=86dzkO{pqgd@$4L-;Fi~1gW94d^+Z@w;f^!K8!MR#H! z$VmKXlw4A0@;4;-cwx=``Wa7u|GWF^!W6Cbmp|JubS!#NV;8^v`qQGFaqBr1=RKG0 zKR$2SRu09M3FY51i@mS#RZqI78~Ijrjq%I8?XRcwowu9Cm(&%^<$F=Yx83~g=a^0G zg)-{rKdZ0*x=kW^YRDv}^Rwk$0|Q0AmIjIhitJtJ->h(XW*v9@tIJ1|6gllPKcz=ryW@E6;p%0ZZ~6$88DBLyyY20>ZCiF4Z_SOqY*O=n zvF5Brnssw|R_XsxcM4!}g`f);9VV+RoU$xa%lgTWhgVd5gS|2*sl;lB{@$8zH1o{! z&+E#4mtX#M&tAIfoMrMFozoV5j1Nkz7#(Der$!nbvv@w=$X(RckjFVR^s)(K!seR{ z4Vkl6t&(c{ID5aha-$qy`@Nluo8Eo@4Wi=orh}+;VXHw@)HKnyg#w34V;OGbZD)9} zYn^}+&*6C47Q4`^u|0-fD+QEJZ}Kxwi&Se_FvZUHRvx$gbU_hEINJR}`jsgE&%c)w Rp99kkgQu&X%Q~loCIF=@6Jh`W 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 GIT binary patch literal 0 HcmV?d00001 literal 813 zcmV+|1JeA7P)yIo5kJ+ML3>9leWI3H~HE0xOK+?7ft zOZ`7=vR$9;9gjyr5H6RC&*x(pCL9i{dXLBR%rq56F%Srt^^zp{{eGDH5cEw!;gy1* z5EOzsA9TH5H=9kIwO+3;mrLRuN-!9--$~dwV41qzZdK^@dV(ORvLFb(UeDn0Oim}0 z3Bxd|%rMMkGI>6yxm?cvfR)W=$#PmK6f~J-S-nYL%;)oDyFP6k^m|8rF%pU3>SBY^ zG_4A!(@C$_ikbt#=&(P&gG76*gDql^_oq*AGJxol7x?tkuD ztJP{Ml_F}Fm?+0_=IbZJ?blr^P1Cp!tj}L;Jp%h{$ww|Nzkf2_Za4iWSrxTfZL`@( zlEiTwMNzF*i=rrw<0MJiY&Nx8&AeC;|MDy3n9t|2Sgc;JFBS`;iqq+|(P$(RiPdUF r+9({CfhZ6KqCgag0#P6eL`m=ga(>!t>00000NkvXXu0mjfvKw{7 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 GIT binary patch literal 0 HcmV?d00001 literal 635 zcmV->0)+jEP)Q2HWC6$!x=aD*!)BrN$WEJap+oLvGe`)OWJzm4NqJy=7mc0CimSziR>^gl*ehTgxyL&p}k_9y4MLI-cGU2-Lu*3?jNg~ zyWI|bA4!KJ#Uq8JNQ$I`keb7gmZY!35IvV}b43F{6h*G<20^f1uOD;gmZYxh9u5aR zFCdEIP3MX0y?o^ZC33(#d4<81{_v@atiol(K1>4oIIyeeI9bW4vft zmWnU&-bYd-MN-U82EZ5m5ui{Mib7E+3PqtPbYP)`5XRW|$1}zVA-^EhvMiNH_B6g1 z(_bzZ0Lb%P2*DU*j0quB-CK2i4*PQoA%y370O0#RX!R=9^gPc{ejjv4Ips8N-5_&3_}1&l0nxd3hkrpqW4g`!Xtib7E+3Pqtm!9Q5k V#~#b6-emv)002ovPDHLkV1g$~6*B+; 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 GIT binary patch literal 0 HcmV?d00001 literal 6784 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 i+iO?PToSNf0{;&Q$@k<}p6WUP0000b!J z!r;*0CzHuZ3L$_9P`Fp%=!H>FGd-6kn}j)Tk|f$TktFhW^Pa%6EX2p+O2M)$B&U)j z36R9hr!yppyT=P4VqM;9a^8xk|qGjt9erQj!F@JW80q?8htWidVP zxnFH2E+^Efx~}&HNX@1wrFWQRS&&k8d=QJq6rY?!M_XT84|zAcm}UNMUK2v#tT+n* z5JGfCp#``t7eWa2j!2i=yL4VTjITEjP8YyEayh;Ta|7w3bCP>^1R=BRHa(mVChNeEqy=_>jv{6zno`&Ij>G$`EG@55_{!6 zN+}_wgltHpW>c)zswzi%+Ng+#z7$rn7D734`fPk<3r@Wp{Pzs7Z5x*+E-`a8L)*4P zLr0tI+<3Ube)8>~I>S*g0}J;Hyl7rz=}D<~zngLC`80jr`}Kh&s?V!TP9;0?CVReh z9OupCR5HX9g*)frI)@H|J-5dL`hbquxmbuRmHi4cUuKY9%t8pE>Tb`sx?atFlSAfe zhUNV-gVjLSJ>2d}*<(PxUPo*=7Lu(#ScNfSAQp{je|NaQjPr&Ti^j0Ex#iXGw#$vT z4IlzIFP+WMbPaehs?}*#63>2qMj-^#^XbrR6d#K-{%%~&L*23OekMMcpfO^E z^ou)13L%)gm7{a$z;PUO`blttn@aY6{J2PC#Gqf8k2~D@!-6qlaOJ^@H!U{%;5Lp) z!hXd(aXF!_udO3JpYEY$_ey=9V*YL(lOIiLVxWT+!i^k5!{Sbn=D5lAjdcbs^*e9w zR*rk+J$BQq`n<~Aog8ID_Rv%|B+PM>OV^ir!q~qTw1E0i{SD`(^QZmNra5M6A*=lf uHF&E&vf4q-Yrw;u(OJ>>|7P@WG2kzFYjbyphIGjQ0000La=QK$f2$t>p(DOX+d++<)Xmew2Y2oq$!!S#= zb+b;#^T~Jm6#ZZQacI*aO{z_@h1+Cchmg@-+=8Iy*&SGiw!3%l9V{_SibahkXUOg zmT!SltWp6F5*x(ct{|eGmF%%5{&qmATx+3SK}Xn=nN8p}QJl4~&njqWQTfbM+=%cYZGVTrN+O;giPx z)#&LKbx$&#*_JM5#)m$2dq{14t+M`!UWv7usW;-!tzUK$q0OSHMQw1a2sU(SyV$>=rClU(D0Grup_00b zm%%~~EaX7~_rQbCA+3#AHScUJ^@F#(;rD*u_kQ2+`xGL=dB!E2b6iXUob%M?`X*Uf zi)LnL$UpF@FjXKcYfC|$KwiP3{d|J zqeiZs3M7+Bh_-mK`Q`1 z(pDnuw!`ycixeKifn*cHZ@ zC*>|O|J8k*Nr&_yof?e>Wpi2bK6(_i0ubx4UFf3GR6u40i(G+tEbfhFM!{6} f;8c2FViFh?3y^w370~qErUQl>DSr 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 U9@IYl`WRldVxgqH$~Er)0j{AjO8@`> 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 GIT binary patch literal 0 HcmV?d00001 literal 1311 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 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 GIT binary patch literal 0 HcmV?d00001 literal 4273 zcmc&%Ur19?82=`cn`sOZnmtYNW%SY=23@KL?_9dU%tnwwMCBHlu7A4}h%d=Bs@ank z$ku~0dk7aK?xC1((L*sG1lL1!AADF3!S*0HNI0GEta8lVI`=g2z_)w$o$ufI&hI;a z9`*P2G&de@1b}8wZ?~U*?MUW*^fx>@x=BBl+r1aU0Q(OjnP4_%qs#`?<8wEBt+!g5 zT8bYgFHu&j>K;&Cw?d)dO%+^sgICmGz9RE`1;R3IB*ESdc@P+b#B07vRk#h zi4a2d_O8|akL%S>t4v+{q5+afs~1s1otft|B)gUcMN=UAISX4qwjeSdF&VWdoPkzb zE947#kR-`uZZbpRd%>u0CNCVo;_F4gAlf?GAoDQ;(lJRW06-9mkkl!Y^h%oPN}UqP zZRCXP2xS1lXEp;UT?(6Zp-_PMd|arU_Ph+at04I*NfIv;Y{m$>QnUQ}Zb5Og2*qtm z#UiBNrunPE$ofa0Mv4EdpU`rnYP+$MSV$1XtyCSWCXYPBz!@GICSISP#9qXzI+}hq zU6o(60MHO-!Rzz>sRBLYJbc3$K%==_4!j;OLBc+dBRv^mWePMbLzW3W<2-z!eE^|P z!3Oei8E^v%Tnz~A0cb}!091}lMod_GHXGg!1RGD9^ki@ehC^XGyt^cMdBPZwPs#*K zlGl-*oKOI4<~4ARK^YDJOD}v!Kkd=SQA1fV1j3OUBdqQn4o6kQEzB>F_*}f|m>!e+ zG#ncpBgv&?$2h?G$`8+ga!Gs>;1wMkUek>p? znSpYLMjt3#8PGJ1Xd4KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0KG{>K~#9!)YGqOf?*WL@y|O=UVv$M6Dx+91;H#6!w|d!v8-7a7YswML6C*rz~X|4 z!5|n0Yqr5G@5(b6gZK4ePudqwIB?F7^Eb=$TnZNwNfxO7bcWBPbMXW87wyN+Un*!~ z{yQgD;1Ww5aa-6z0kx1^M;Gs971V-#lVO1?JmBfv7GCg%do*x|9@dz|tZ|4F#@J(u z58U80M&K1K98d`@jIoWngTM~gSYd-%*@UzI{|m_iUjqO#$|0DX*G=XC0000aX?ir2agLF* zFcxe{+S_LZ`C$sm6o4*QZuz0E4x7jj= sA8v;?&zesE{nIP==1gCIxKNN59!MY4$FEbcw31)0M!n^Hs=c}T4dWyxpa1{> 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 GIT binary patch literal 0 HcmV?d00001 literal 89633 zcmeF3WmFu^+O7$KK!6~@10+a*;2JczyIXL#fnYNPcXuafa1TBNx8N3h1}6|)gZpXT z_uJpz`#bxrb^e~U&QGZ6?&|82=eh2?Doj~X>IK>>Gz0{M7c$b~st5>3x(EnQT2P+> z|9Jv0O+r8*N01R0QU7ePcZd9)spt3(iyO0Z(cjhq73n$Bi-XPp+=YN<6jvDsS69Th z+DAs6i=qy$4?aS7ZD1d-jnO>;kHaqqyqo3jStl7DV_5?FwM|V$wqT7jR-uP%o-k}| zL{VW>)F%|=NP)ip`iC$zDh5?e!Anvw?*CTyUqAeeBo6Jz{`brNc@Jd@L`q$HB(;W@ z|NewKWIwv1jETFuLmyX;VOB986&-i9$LC+a04}&z(2`O4_XjG!K;&Nbtetn6R9N(R zxLLNbFK+(3!oqJJYe4?*HRvE0GlIe`oIUpIQ*@n2-lM=1b{&Hr>*a`z4S$JZSx@=z zulmZbqZ>l_hS`U{BNJ$UEigH3 zy~yJKov5~Oe{-09|0LfJ+lm~h`70Qms?5K%WB{?B(EV|Y;EqY*7Yq6q-5JiK+xKUc zK8-3;Wc8=6?v2=+E~&=Bj{JL70Ui%`7p-~McNfdeXEVBE747%etqV=(hokRj_3Vo> zAx|c z_P(i5dOws<*?vE#z_*=$u;4rfW+<=f`r5tUeAwokV(9HwvRTMA@yX|AUUhZ`JWiYK z`AgHl&D?b}({*M#@E|=v__x{6T8z*E>pL2z|Ityl@cc}pd3yzpf8Z{~F;G2RjrlBm zI2m5c?AGr3CaAa(#l5uEOY*6OV#K~~T=HP~;l9D+&j77y$%G33*4eJ%!`v$448;(0 zb2`six67{F*8HkS`wRaLb!I zjtOb1M(d)?nHay)joiTj0>0QPaqqXl82cfD0KNX!eBi`TQKy>mY&sn1kuo@+_v>dD zb}QSL;xHK#sYSoGllum+55CL$Z22wnc3a8ENloE>QcQ3dwRp&a>#|ogGGDaEJLfTh zhM0I?PMfq9X~u>HC;R4oXqm)&%E?Z*`K!UY!_}kJF}EQTAmJ$Ze#WVk&784m=|Pt&H++W@ztVSZ@a6Dmu)6YHv+< z>?IZmezmcS%#EAo8_sGPTFrrX9B@0K%4N?msmrDZY~)RmPz;A;uG@4`%D z?1oRooL)P0Jn?oF5x2atuf`r^)ST6Gj>4)Yl~)Z!W-&hMoS`0NktOH603IW0WWuiw zZ(BV))iG#~+fjC%+NO&6@QaX+r$3S!%>jx_kUJG+wCPgSFF~lkPS!XsNitGVJIcqD zomoeek%1#cIzGQ_^iujsF2;<$>moEJD(~`YGuuPn6g7^sc1*DOfufY3LCesqUKc#A z(V7shHiy?)LK~mQ7&aZXq(H4p{^GUA9-HgUenW#7Q!>|IVYE#O zT<{+WkujF1LSkn*P?JRcBSm8S@2d-<=uA_ako;_sLY(JR z)=?e67hO@Ca#&YGv*nvK4-)Vr_9=N~abBPitv1NY1%bxmQ z;S9;wic1nt<3XzhD0#E8i3d~lBN#g@>@pQKgY>Th_z3AU{TJT!6J%)gmnN=8NG9WC zg}&a1{nKS!-5s$4e1l!Q`-xdop*_xyo!R}NA-H^jCHD1cU!E||Y54W2_SQ4U@&^a4B=Q*99Rcl)6gkNPnRhJ`95u~ZR z&Yo+u?Ua_aoJhUni$kDkFt z*ar&zZ#EPa0cn&vPGMJJADMHa#5m&(rmS7ellV9+*&aNPdk8T>p;K0+oIxOCufC61 zVG7XO9j*31TrR*w$X%cAbVeB;;UWlPlH*DCihUvmt>Tc3W*m(i2qv-LBJ|Et>lQr) zR-g+-{N>dk2VinZ>5-eAj`ZDsO?W1QO9~-yk=IrT_qC#jcM(x7XORi^QVG!^34}_! z19R4$|3bz(<(~pYGDp~WC+T^icy!>pEYGJ`ogJ8l3DT4shz@3?y`eBvJH&FU`Os1t ziG%`5-OwrWYhP0D4BWsbRGy>2?%H>juAJ#MonY)2w^Jep#_fB`u9V<8UNF1E%PxI^ zd4W6&dw-|KH;Iq=G)7{4RgFZn{8(J_PuNNOxRF#<-`nFoK9zN zSFwDG6?)il81gw;`({g|im*Zh-rrxYd94XZQ2XksoK&+RV#|zGMPOlEK<$8ejaz#}qM%Bl zwnEnGww9g-gF3CWUDk$IwW}{__Ck8n@$I{G$hk4ZI1qz_h>#RAo8g&|J)`z4K{LlB zYCX^epG36rlkZ8rz=o6e%0j*y)lep?JZq7wt2IpbaIx9qnv<_o^mHE zHH*^-JsIV1em|p~cjOWK^^!xpNrXs*k-c)70*^k3i1v3+V1GIgXnFQOgt<`fCm{CI znPoWk9y{ag7AmJc?Wm>OUD?x1<^+;&QtN<`}{>Gp$>8mb#40I*GU<@!>yM$)ZSC zdQ5QM=hQ~u&Hh%e@20z5AcatcrGLe}Ciad+HU7+eH~1m#&VzPrVY}YAJ?IX;?X}ai zq*`UN7Ju=94wy2XDA7Jj#KubctvRjup@O8;_(DwcU~hpFxIR~G7ZpV0kkrcfx+k^ne7j-Xtk<~-|4?=Ey#J*X4EMTN3|V-^-XDtJ`=L#EShRALL$y4yG2D$-DRqea zE{p&a&q+}e1a|mdO&9^n>E}RBG#%y#pYuXpfgrdESdPlpEShL^KVRuAX~F2xU8uNg z=B9p&*L~ERC}cv2fGLt{WKnB`i}kf?b`tLCY%^qKB0uHXFgEguk%1nCN`80n55}>< z|KPr@3&Zp=fO#w_pqkg=sw4gU5XyAv8nYW*y($*bFBGJ^iMf-ZA6o-<`Jzz$ zeNQPAhpnjd3(DKBcf6Q8WnQ={?EYXpYjy1H{3^{e-JQ!_L+d|Pa3jakx*j_CHP)8F zI7j{+&p6|hG&x$ZHcIMIu%dehN<-X=&=kdT`c`pbXusHEM zx~gbcYT}v>4K^XIcWxUe%rwE%A%IV`HHSInZHx`Ev@dL$^uGE*V{30CuIIj8;3a5@ zNo`*HObdzc zC;8V9QW2wrOnH1^ zR5z*^AeC;sAbS$GR`@`aNDQ zO#$64$u+y>4{4S{K|ES6M>B^wVZkl~<~Fx70gaoF0B;Cz{}+rH;`d)WcVlrP7D{>d%niCYUlR>cN=^{s~E&*oEYw zeEY@pl`P@v)tt}zUpU*ttZ7p|1l8hZvBqn47s$##>uNO#LfSCK&zgw8UVkO$W4uYF zSBzKC!&z{co<`qIiU4uj)+TUNMX5H5csf_avMVdLU;p6Njy;V$u58I?qa&c!I;IVB z5~njh&O{Y|Q9>6ugymu^mAn9}bZzblX~Y@alIXl1Gi zn5t?*&aCNs$HDE;B{95aY4~{+St@@7NX68(8~hjbAP;eTq(T$CsR?16?6j5Bbo@a6 zl{rhT$(I1kMtOezb+KvU0;wyc0c3X{U0xFPab!d0tlO&W8U4yl4Z3ik@0dYoMXBx_ zo};9qZ{;)nM-qC83VDO}ali=A&wfR)%#=v>T?DV2t+ivoe;$v>d3J`TuojaSj$x-G zFg%gzONmvKs`gRM;ZJ%Z0zLY<3SWKZ&xwT_sj$FLcY$B4uo*@WJx}O;M zj>M4xCS_oiV_W)j`rc{qkLP~chd%`goBJDcvBFfX^vO@>WVI&4T(QtQXtn~|fW=%j ztaxqQ+KM;&-Kc~<#qlCcSAUsemSi*h==K8z6AJB<_*BuZe9xBSUJ`H#$9fwKqmK|* zKy(f<@EM63>_v)axmvjB>wkv# z%AM!1`Z^N2CJ(GO@uGK~hL|?d1#mS2V!bbKmLJ-brg+Wxov(mQY*voD{+4;)>49v3alNKCug=vPN^J!mm%{T0T1@c@%s>!fF;l zraL$^0uiqu|HkCc6gVi#LSf+GaOtsg8Uo4ukSfSRA8h+xPxbY5RE738E3#&d)>DoI zZ8gPd6VaMH$MLf0{t$L;{5S@J9&`6Xq6f_wBz{>1`5DT%h;I_7v7jxiDvLpmfG5hLp$=tm6OO0>c(J@sJyqtp_K?{*S%qj1K2D+pH4naJ+xku3UrD@6o{RH*UWowYj?eV zilDghS6;u{0`k?L?Vogce}QBHKBFqQ6MVrEh_~HK`f2zRX@+*hW)%@LvN10OCCwM5 zyC-wzDbOS}DRFE}P8Bq^z))05DrwxoLUli42tipY+n8L%s|kTYsN9=)MeXE_?PrrT z@k}33?z*>4rv&{O8D7a@*NCIyNq}7fWWF3Kuc5rOT5#+mbK-rA(zjxPe#N0Q4G$?q z5J#6Nu27_K-j0)cy$!a>%?CmoS2GSClX#}n=Q#0rfx&f;oFW~j(8wo}Q5$V^aHt7{ zKjDg0HU-kdgeDEXTOOicg(y4T%8u6*&eS8Q5u6&Qsi0*bK80}7s{IS?| z+2EUAqy#w>Z&5`cF;W`xwfbbvnqClyXt<(f;+%p7mGCbJ;Ht>sXG>4}g7o)7-gv`8 zeymj~Uyv&m2MIIbXP{?fmF|<$`bwCo*r*lbijM;@YBTQ>`O9LFfFG0}tZ%;O%t!===;)G+3#hX%D-zb}I1r(A{7^8=&vky5Hy)LuB!B2a8UxpfMhja#!>r^xQoft#8; zMS7z5UE!*p6ftnT3SDyk67CfIUShhIOHFb1b9w-JNhmK9BEAsz4Z}PCC@%MuPmCVb zPb3r}NKfZGTn68q!l+X!zhjtVOz)hb$v&3KC|?wgmsGk+NgtL*JoPX%D9o`f(spC2{_0vV#~BV&e=2wK5}2p-N~cFC`GS5w9q55HraUzKBlYjH9?A(uu$L z%F=de(%%J%Dtnd?1hgfme&6wT6GIGq|6rex5XoVs6D@gP@!*REfXjU4!2@`fJ` z1-Vn6Oe=*xARP2l9szB4spm~8S7I#kQNo7ew|VQ?%!w4lS&uu8=_SR_=ZN{AMabiK zrew*9N|eMYK22mx@9NssPxD#J&dx;oPSeRJF{_`fou$u5fVR2ysU`jr8~$5W5oSZg zQ|(pJRF5dnCqd%*m5i6eE|u(z@xI-C1YxlpO@K4PJ5OF#X#DvX;5O$RXqW}Fy|G4Y_zyANN z_WL1X1TcE=#j;O(Gl2FN%@Py{id5<+a1e#=P80qTqPXTklj9dI)&KIr-6f2E#xnJh zxn|58hmg7V*mn55iR_U5FX^iX^}{*L)c#xJ#vj6RV7fa1BqLnChmekg=EDO_K#>w< z{M<+CJj`YfGY*OJpM8q;VPzxR$J_M>j?{MXuGj@1?JzTvspt!Wqfjn0qT_Rv{|3K$lSMbx};Gtq>&1<+-)v) z$|{?HdAg73`-=Z~*70Vx52PD|BN7n)W)~9G6p1SqAuj|jR|2wNzIgBAA33;P+tmis z^DmHnmp@mJ0SLaxaX(cI2E`(#Z3dgeN$(c*@$(Yb`Me{+Ez@jO+=T(A|;PD~h zQr}AoWn{!hX(3zf826ItR{@$jI3^KQnEasq;U057`62xq?K5P!Xnt=r|H0N@N*b`l z6^S*!sbj1u@St{Ze;lw7 z)?C$%q7VTkWH=0&(qt$6be8ChRl>A37+@wGb#c`f7M*UsX6t!{yWgCF&r;<2+2r|X7tp?YK$TD~{tU73 zL#F2k0QvJb1a3}v0pP815$_*(aZGIE-=IvYWWehQ8SaWsd_c-_+aTr!gg%cRKpfcGpW#R8(u4$R3OGl#%9V+H1vI*I@RvN*Rz?$VK!1QVwrRU4 zdr63kOTX7UMbAm*Q4YExGYjoarL3W*nVW{1D^kSa##>M#-hj`Yyc?g&-PHI7 z>tYmd$sPqdysiME!m(Lp?er% zu-S*IbW$~O=nwJc3uu=64juOpW9=o$aaTHcMrV=G(35SwSNtszeAdIZsasfb1rSUj z?bp+lA3ARUji(VvoGX>YpNl^`>8_tO*xfZ`s{1J#<^OcizU5dlJ6EINlpCO!FL$YD zRBpNYrdY%FJ2uH&I+~&{NUnSEW?DdVI^ygU*Et*ufhJ}9T$Luj%mRk5&g&tnOj}v^!iCi0`&jp z+h@`?)rn)V-2GHWCc8R`Iw}%A=kicim_xi8`!{pGx71I-OA z)S*f!Ct$z=p>zn$?2}nm6d%Kn&j5Mx=3$Mo{pO(A9#Ego9u(_67JOn83xg4?qhaHK zj=!B50tl0is63CNE(_?oNa${05zvb5ffUCM&w)~RA@C3xD>7%7cj0 zt4E9`dv^NrDY^b!Gu10nxLG0@gtrYrzfivbEt!0i{?Z$gIR*&3QPR{kymT2uOz$~^ z9&9B7w}%+54U-J?6PSpwDTDyE$g8~=mKiU;Wrq0Glo)#@O;mMdDvGI~mri2&w1F$E z%MF##L(w3^%o zuxsgl>WY2U?V-=Z?$77`j7fT*SA!0I;3}QcLPvPkBJIQJ3b$%QbpYtP2n@mlNiwi{ zw(Jxq@t#>k+$+WpVqLyLRdHy>;j)qUwW8m7UQ8_;FLn@#7r}z$9W!bapFH&GK&_%^ z0(U2U9+i2PNMe$_as_RA`90KpO{lfFz8Y7=2n7u#uWkbBjna6Cg%~_hSz7Z*P69!v zohzyX{VYf5YW0(3UH)66YUkQ3B4>yJiG>pUn#~PKUY_hrrCU*8I{Iz)RRUjSGWBGI zqJA9HJ23&g$UpXAvz^66+1 zt9`4x;IoE4t-9V77Z9GD5~U{`PPMv*bv8E~69^s+jbC@Tni}8S z^}%jVCzTRLkqIPT#($GQlII?S@4J#?xupc2XB62sTpXr>j47tk;U*MTi}Xv|7pk$S zi|m(@l)lGC*s_*44LFBj(AhcUN4JS#l_AjU3fd=kgQlL&x$jnZ zWxm+4_gw>QG8q{T)tt0hhd@AckhXq^pM7*=+_}RS{ro^u3sOa>3u1fFK-bww2 zi;8(9M>hR3>zk=pveQx>Z_aZZE(7v?O4`_%%6&LqHj*=>GcdZh&@^h^;-!x%3$6smsK>+ z_rJ7@V2Zud%u&)ZLpRd>#@JC{!8PRK4XP=KRCJqFPkJ+BcLQ|S-sH68hy|vlr&k`O z@Cn_+mrR{FYZ`>x!;|5magPoNspSlZuIEc^g&o^Kn6ay=ZH(;N{et__rON9ZUepk> zvpS!j|2W2-J@%@luv|;d%VJUS2sXsO@<}(@*HH(BEHXp~DpDAU1QH>w0TvS;ab(I- zp4_y&oX)*0j{}(;gAy(j4)_Fp!!qdwOp!oQUghlzGr3Z{h;p`S=I2-z@618?hIm;` z)(ydR4eG(+=?vgznms*Bdq_U;4pYln?k^-pa708Ms1HJUTrn}G(5AN3!lnh>pDyFCU++WEV z3dOSEJvQIW@1x(=$YCNo*gr6NOJRa665;8T;yRX*(z1l0g0 zw$CK~!vRyarBm(VGYK(2#jRK8 z#ff5k&ej$x?4p_fmU)Cb-#FxPPcvg%eVh~}ExTV8a&MV>t>Tg<&*)*RCCvkwk~DbY zC{18vP$12~IgxY~D&2e($Q03*gJoJ2XuewytDe%xs#ySn3Z##1DAb#X#LNY5Qjj9A}s!;At1DFV&2izasm=Tsx}viGUGITH2zt4-y$1p887 ziVDFb%;Y{1D5rF5NtR8y{W5o%dOsq*63H>@kZ#{p!oOQyd)rLSkiUZiSA`fT94CUK zTJJ@nu&~YIiHaGNT8dAbnfoo+DPuvn%l8>!P?h>7T3 z6-AkhiCIs6GL`Edakl_Q6*6mv~Hu8n<$S}d!{-5srs6u zvY)}3X0!#rFiK(%pX|c~y+WOR2IC);=3mR2B*T0ZhkNDZ-j%_P1Ttio7-_sC=zRSK#Sx@)7E|K~}^3;Rf&KirH>yDv6uh z7=k3Uw|*hDXLni@_4$9CGaWGjAfN7R&GJxL~;6}=3-s>40@~vZnhYiA?{2Yzvf35t-Zozu7_2LCUzGgehgK^pKUsT|-4LBvDchesm7{C! z`-u-O8Zs|eJ$$0>6@`z!)|TA&kvk{u0%IRUN2AEna^$a6bh-b@NB7kM5K0VJeE$`G zAG(n0f6^6K2{6|0l_@`w06kEb#dldlOaHfzDk@mdWZp4+lN7@){uy-UqwST{Z*g+P zXQgV=R5fI|Ee^kdQ2S^0JBh(pC!k4jGdXAXACU4ZyXXMk{@eEF;^v;{!t=r%yeCX6YhfiGk~e%K0h}AOYr;iol}0YwugI<3n1%n zGQ9tja;NA@x4?)bTJt+6oro3RT~9X}v7C^v z%7{b5EPB|6JbkJR119lbw`RPIp~3TkZb9VgJCuq|H-)H2ZJNE2(&D`}9}+ei$ZM$a z|GcnEkx3+Uwn_e;bHu62)b+0YdWXRkh;o`9?Ivt|ZMT1hqSqWv^O-m|ativtiu$5P zJ(^zbd3p+m_8XQDB#DdzRq5hdKcK%|1u`Yh{C<4~r;uN3vCNb5911LeHS6Fp<(^Ci z)_ol5y;4-dIHt@C;qkb!%;l1$Pn_0bW2zkvGirsJQxTuRt_@Q(Wv-KW!{noBUn3+M z#oiUt;Fj%z7wKpa-QI_pK(m`FM8u#SqlJ7s^k7=o32$7q7I1FmH+)0@+T{!TCZtJ{ z*l{kOvh|U!-G(ROfh#Y;PcoXIG4g*unKZlecGOo#A1VHExYckjO~*u|It zE1Nbh;r|QX1a^>%t^n?|BXC%#4V^BQ8Fpu$)L*akw;j9Vt0aIPzaDrCwEPQ+`WJV$ z@_WE1T`H-5f&17Fe_!;k@bcMX`7`jv?&`lI)PMZOuM`IxuKGT=Df>U)pS2h$XD@Cx z#A5jyH~-J4s7LwsCzs+(-~CIa0A~8%_ZN9A7g@Y>|NQs+|AU$S<2PSz0K>U@RPh1r zKQDUnFF(b2EXUY6nC(XY*MI->O*N>eS1OB2|M~tzQ$RWK)M8}_ zA>x0$Ln-iy<)%Y-y#Hfq;Qvh*sQ)LIES=H#yDwm9BN=$?zwaBPj9_Fp%C1g9xdDQm z+u6QXw&e!)d53>(5cubJdWSkC3I%;%4PG)%bsD52LtjtQGT1Y`ZL#u-R+59#C zbJ*TatCOniSOd6~qdS9b+r1606{8*754t4jviT+|+Qr55drMR#6Y?+)kiBZ4=3qy43LD>-ZGY6`z^ zn2}c}(5Q}9oUg$FFSw3ui5^Y%XA~Wz9jOs?Tqr9=kpkzi10d|Shqu_hBKrCSWL>r)Pkev}ZlntG=6pdF@aXzKI;wKE++_3Tf6v@ze^o{V|DPQSt> z`9+IgV!Urj_Eb(GVt*kJAqUqKn@p`uE1b2)&G)KnBa#TBK*FPlZ365d*ieQRBQMu;VK@i#^1OW%|EBF3g0{>fw9tB zaR0HJq@a;JH>y}-@(lh~z2WF$Qf}G@g}=1_S_C6C@vd>J4h4x??lH|2hQJ%_vfvw2 zcxv)&f!MWCsirXk&?2y#yx~ z@6bx<#$|?4T1eFxOIb0yJ0UZ*=pS5aLt9dN6Zf+j6&1GI8EHyR*(t-3;d zMh;z2wJoC)RRc4*%Us2J(|Mcfz6Eu>UwRjBMY4&lV=$9#^jw?WEbuv26~yqKNtu z#dPR1EBxPTr;6osZGV<7B-ZgDv*?ORaZE%)y}=wdn4(1CYVW1Z4^UWL?1>06!q3E) zHAnff`yep8jyO52NumRy0=+FZ1ftOMiRy=<$h4ZDx_c-$(eH`z;Jnw`oL~0$;PqTN zzvD#Bdlf2YwJ#}=B1X_}U)1CgT71`P?Xb>^;(8@2`X%bjeOa;1aO%@)G~eAb$gpm; zG(A<0E)%0J;EV7VDVhxy_hZ6V-8;{7Wx!zkAb3tWb_A-2)i!cKzVY0do4yes4gkzF ze^}A_42U;#)o$!uTSuO+f>(a<_d-_Y7xQ+;(${$sDcDqbwJ8qFPs^LK{~V;ux++k7 z+{^5Jg(k&<%x1SXGI3H9N3vyQn*$a(>qw3hwo&P}ZacEF! zJCQ*wD2D^@dQW%zL6^2Z93dLV*rtMrU)G8F8!X(%q+tR^+RjwAGm!_fGEbSV5hRXhk;}b%VrNgUwWVb|qoNWjeiV z`*m;l8U^Kfs}ZMkNPZnw+hV111bNLLBq^jpPy7_C$ppK(%>FRxRpTyrv~taVGG+?i z8=~g=5^|>|X=XThy|-lry}`?*~1jjj#LBf6Xg zk@f>7W+%dEy6p0`n0S2EPr7az!k~Ebql0|fnx5?EX+76$({t?nTqmG~{$~3=M~!9l z%>eb2@4N~UB8jd)nX%W%9C^dNr#ys4;K9JKr_E zzg?s}b|;=}_2h=)E-23CE}kZiGo9a8Ef4De)>Xpa`wnu|k^?(aZ~Hn4+AAhjK)1)F zCD%1!W)THOI3n>j2~>3z4$MmLV?xHME>TzcQhapHti!K3J+abX8_$`e)f8yh6l5Yy z*(;X)a`w1L4zn@eH&IE_sMFtgt&qkc<`vQZ^ymk4s~cu(9MRTi7^-kuw>wl5XwZCP zCR7PD)WFy03A|V^dcqfE#G!0uqLw1uHPqlhB=_I@?CjP*i>h6x!}|j?^F@oE8TOo6 z2$k$FPL$PLmFYNDhFdZ_V=>s^zx)jK=(#wtd79MtDQWgA338L_^eyWj->bgsC~pkM z!9oM|t6PbS!T5JAp%w26y!sT8Y_wP_WxX7O$Ell%gblkZ2G8df%QOHF#fZJaIcyYi zQNDA6H!8xgxJ@P3JZz9+BUKR=$3($pVOSE*n9i)DNc)XJzsV#yvc$B)_@Fr#my^6GzFf?#HlwjKbo^E4uuQ0^Ub8bKe zaIU-LDt^qW+Qv40{nd^^*f1ERVm9=!%hVrmbcCyGSfeAcT=2)VoXfbhZa24H&UAo4 z4$DfTs<^br41R;h_VxTCG1C_3Eu*NNF}7{Z;4e%5JplOM#Xe8)bmwoXVqDVD*IMuQ z)qyh0XxKsAv!~9KMZHGi2403#Kq&dVmTG3xnS!i6bWjAFtLQuqOTUS|F<>l-!5Tf+ zB`AW8Q@Q;Jm#_|uGow=t4F~bEP*&3OTZ6MT&Cr+SWHyQ%FvF{Cw5TXq#04cEej6u( z9aMQZ&-cvLEOvTJ>6+_u0;cIB(*?UXRI{E<<@Xcp_3voH(x{Pn$>yw=JYM_~lrO57 z|JLZkv(y==PDYiRCJFt@LbQq?DqE16p7s)sNMJrhf@jV(Wo@YNg`;-NDpf}&Mia*$ z{42rr5YKiHG6vJG>4^p_;Dk@1)wR5OqoCc-O8%vV^>bNiW;jR$YYvJ^B1b0O<1%M< z4am$`+aIY;e!kbZ%l8<=W*`KtcC0k} zR^0~kJEu1al)77QPU+B;xKMuP8uEF~*jKUysBAfa=K=4JslkdsioRR{`QsFxng?gj z#mr<{{7!P~ai^HjPoVoS$H6wbht~k3ds--#MV3ccq}UtDIa0WzT%2aoL})6ia%>Py-ybfKRM|E z5Pu9ED3j~?d#PT4i3qV&e>O6ZvH;A@TgWN3+Zu4UfFMhdWh)sxzGg`hZS$)YGm98@ zeyF{5NZho;bE+njmUJE5VIXeKS{R0Ans7JEM2o?LqosCWeYm{WNt@#> zv3&*>5(8p~Bb{AJEWm2NSZGrE0xPS8xrLrWw_Nxe+0C$j!c<}+&P!jwy_WfEMtrMB z+WpF&%j@f6S8ED%(34x&G;i3|L~pXr8$Fvh-IerdjHX?cwg_#6tn6xWy7wtb1Y*Q( zHDZ}24|kBg8(0$LXW7^e&BJeIA%2iV)Sc1?k(CR`-JlX?xcNlnyxD(AW{gvn z9+{}j5BL&*OpFJ_%F`KkbXe84*!eD)fA(_p)#a?5lSQ#@aq}~uChg#HM<5RJi!ehz zQru0x?ek-kYOkY*We;|u?YD26$q`ZD%p0>%;&jBgzBwl-i#E|D>?I|6qeGdusHf7` zT!pVVoMc?Rz&D3=Xr10=e*4`($!2?9r(-LOHmkoP%0eQ@E^}$X%cB)4<7{!s2#!Np z{H0NNZn!teW4fXN;4u9v4r|r^a(Rk8d;W4EZJBc z%%zYiWFkJ7^BB^>5Y+2S81fhQdV*s{#xp8O;k1I1xdEtTi7Aa=bn5ou52J z)4?fIb((VxO^YhHMjVawbl#ZX(16$Tw|+PeTl-$&NBTHb>RqEr3atvmh@nJx~6k!D3Tp`Z1-R<%`3SPU+e0X>Ua zw=1OcdpWrUJY))djLjNCvw=i>xILw6gLM5g?B~F!g8t`ol#Cts^LxlLV`sv&(6n9} zbKjvS&XBmaZCyj(nwA$rSB$~N|`pG z)Ky{ayJi?BzG=C}auDVX;5psdf8k{siwgNHxdaQBNweJabr^k4#qnn&ylL}Xv&md$ zwTT-=+!a&tw}SALQgVAI6u&fKPLDXM-`DG>bo&}(c{Xp*HIxP2Fc_Q*Kki9FG+ zIBK6~!*4i-^92Cd5^WV*)Zi5;;t`mmAgy(v{3pEPNBBmvcw042K`kc{yI4oy4 zS8*1gBg!m@@~Okf)vlMjUZp#Sn2MUSh1boy(E#Y+B=ci`t1ORLoa7uk;fP9xy2Qle zM@Lp({#0)r)Kk~aewRSaZNlHrcC4)1N~N5<9wkA3dM_TZiAmsSrbK!o5Fg_7#WmB5 z<=jFg&R%0jg%19*#xv~)%GlSL1T;VFClFKO2XiMc6b>i(Bg#CKTI4PGzY(x!?1)JT zOizg!1=0aTu#Xd}!&uSE)g=1AK^*Ki0RK5=(~9^%;2DHRLWgjmCy@4^3EKa^{{Ol5 z`zeI;`Oz-{C|)q0-|3}VYrgTKe}8_~tw$cZr67#(H~s4{5?*=aTxyEE1thlR)$xJ{ z0K!_gNHu3G z!f`GEJhuRBu$>8Qr1Rw5kX>R>h^GPKcF(l(AwX-`-nR}RgB0s4EL~)KUzg}w7bMvj z;)a1rTKT8{3tD2BA!Yg8ySV~tb|YY_?|XDmMR}?d>^%A^0A05)o&~0}z*zm`<>M(1 zb{LvG9Kl$DayEXEe@PHlc~Qw9lLYsH7dSlt&L(i7isDqwJAJh`xMK8px_~{9aGV6@ zm>E&{o&b_-#CL!YHnL$sfU?hsR)AMAMKMa`s}H?D)1zO^9@t-fagJw-xt8ez*k*X= zmVo;&0ERR}l5NVG0-w2pI)X?EFYNv>_8%IQI6?9_@*=JuX$v~QnE_i-ZIbLo zF{&Qmor}ia0USfsOgA#Aw~vNPO?~imF<)u*LkI#U8s_5XwW!TU=YrtR)Dx#(V$07c zCY{KHE^^F``71X9vh#@3U{# zDog-IZS!%}^SL|2oJf$4Z~FasVhLcaXlh6Rm?Kp~!I!aIz3b&DP%twvFy*blI;{~?N=~80D!Tf{bXR+sT zv@o9iWneGJ0O|>4hNzd?nz#>+PMVVo?y*SMb^|mOQ*o>{NL`XfBT4kEdj~0?qs#@a#E;qVez7B>=mrh86&! z_KRo*#U00jLw6%!)aiUAV+Vja$|2;nd$B1kWfJy?6JX0d4ZAiTM+octFpk7V`Q#=V zh>Ui=j3fWS<>!Aq#RIrNn}kh5chGdR4zW_YycnBdYD4AmB<}1PJ`^ z`_m$!tHkfD`c{v^vZ)F?Ct|r)2f8JehfNpXr0Rz~S6LK>F^e=JkqPn4D(Z~`y!w2r zSsSaLZ8-E>Ka_AmXg6GBeXl)0LeEV34<&fsTYp0;`pH5=59qHH119IVwReiwxjXMV zv-$~$zLL2vjKkNFs91Uy-c`PwaPI^=^Nz z1K?IYWi;GNsr#+}vA7IJ6azM${_O{_MQ z3H1!MaafZGu31NtUkdv3&br(DT?QJkTBowlA&bn*QBYrmL@pCXa-in(6{=$v{^C|( z&e4YxRed>s!!mP>^-|F1qE!IqZzandsa<``#0u}F)lAj~Qf zyRhR1jj2nPa_YMLpq7u_-wOE_PFWxBMX-bVzr6HI!T6fRMjM$nu6Qir&giG5!R;Qd3FKt&Cg1e(*hV2&-$t zvb{?-2b&8I6cinRTth~Gb`ZYiP~iSh>Kf@0mdO2Q=hiERT6fy-fbNleC5_}m5zKO> z_AY9e0G}4ifS((&J?cC~ZIh~!Vc>!GtN_SPZx|DAmc_%Kc8}R!xPiIkn2G~X(mmP8 z{6B^Uq$~jmI4o;)>l5J^m<(L($tukC7r0@H=gsBZuyK1qt|KB<;p;&Z5^vQdzusE) z%}7aAtOBR{<+Qhn?@b@Eq`}E_!J2Y&kC(q3j2^-(FQ;O~WX;6>v-}Q;&DE zif$D=`ONnBJCW}CD$wFj&DtdO(>q#u@QtMt3=H=JqW7nOE5ixmB}lrdt93EM5yG>f zNUApa3_g(iOdy@Wvbo&^U!O%~GPt1Qcv<|F(3#YWIiDD*AD&H#%^ptChAe*!KFLn8 ztkf2~9!Op%HO){usVoeT8k$7dnI)JCp!`qOW4=sWPX^f zG$l$smGSW`FoR(kO^uBTz5<3$&H@`tj^N>@s9b zDw&kn{jpkl-S1+?nB@Ln_-yzHfAEYu@iE(9MehXZ@Z3qEPndWihsggT^ypW@vvZ}{ z)jlG&gX-UDii*?Gr`Mc~>v0T<6!6tm+vp|2fIi|^P^<{yMuerfI=gKi8(b`R0SMx> z9{C2)Yy{d+UMuK|Hb>c zo&FcMMf{9N{j(04e7@VRnB6$KK`SyJ=Wg#8?|11#)4U7oG##pG_^S6vQe1%F%LCm+ zH}S-^h3nbPB!W)?^%FOy@zRGDzqm0{Rm46$^R>-1zL#LdPvWJQCNo_d@4vi?r}aLX zu8Bb}+btY_v&xC?i6v7}7{w3tBCOZ+{fJ^eTJ(>}Gy5g`9KTy@f#|9flQ*ZSbTB^qI7G3g&;>TyszdC=FXRkH;#EI#ICrF zV-%bGAX3%?{DkJjB|h%@=6J{MEIiq%%gUT@02sVcSV^x_j8x}ijk@_0>c>R;Ev8K=2P_Oy-s-k>)YkB^T_tw7 zRFPlv7UAe|UeRF@DKt=RhbgNKBFI~|Dyl6ndBSWb@(zc+igoIhejM*}*BG4YN^6aW zc@VguCv39!`hVxB&2;~+=BK@P_ip&H#uzQ^Q?zQ;Q)Y~b&tUEs{-uawUk@Spog!bW zz=ls!<}2%&wN7vfn6$IRXp5cZK^sDPxy5)JbIO%Wag_|$Zdgz>H!Mao<7Jdd$X#9f z=<+s={sCp}W%3o))vAaTajm-dPOagpq5$o5b&I0pL;Zc~2}&e|F|m$%;DhUSq*U@| zHVY-tKQ9!YNjkv7xeRJ_N<&@x3jwuNj)fnVd~?UQY_UcJs7N0Fm)7SF5sT61@|^Bl zQJW?f?w=NwtAuuGE{5^b2}URjK0mk8@h?sFWU=Mcs0*=hkMZYW`_6h`-^pEvhfWrg z9d%Z7<{-~~R&&}%?;77!ZQHEcAhzP1(7qnkgr0eP1`lHwY^u6{b+I5PRjVFhRY9ld z1T7`%>RaUW%k-V=9^5H9_=7b73^{tts|=A*1Ixzyy_5FfZcBVNayowF+3eHeSDqQ9 z@6GdR@XaKqUzq4=d|(bW{T9x4VMd}B_srx$T$-J=-6@V)tc9IASCVgF#tU?&z*D)M z;j$V_6vFfuhWly6_MRP;qTl46319iZSC6-!n!UzDtP`AE6>+|GlNR39=@3>(($}&9 zs#X&9C_uBtyJ;fZQCvxx$Qq@Wm9VN)9If7Os{Jx2->rF+c0UznV=E4UB&8_tinm*l zCQDBd9$a|a;wNn8ITi=0X=m!VmDaienI{bl`_ZJfv#QrA-rw_BzI%-|##Cu&6PJ}g<#L9XAs&x|4(HxK2K zN=R*3eK@dKu7j$YQZW8POiVzrNMr{~c3?%4jVUBCAnMrd4c;BTh|QZs3r@#9eC^*- z!8~FOq)3-9A3JAo*3b3#L|rL`4a)H4K<*-LdC4?4fS&3KFwA=}mGGitpKgB)nub5s z?>(Cs-A(L+*(c^He6QMZr~dLN=haEty$aH_{9(tpPgU7M+vLmSZdBCWaT;1qbvD2; zcVl>aM1jW0{>^>VUml#q%RN3kUyLmBzj#+Brq<9Y?u9Ybw>hkBwxbxWl(2cVj;8-1 zZ4%69YL`$ILHE+I-rJaP3sGdNT*#YLttHg{lAE(3>GI%DJkR`+z29itZ~H*k8PretmMw!i=$Jq1)vq0(K8r8ws*d(q zcCMPM%vq%;`+Hn+^>fC?^j`iVQoDjQRRd~>T{pt360D_X8`QZZ^X^*uWqB4aOV7qw z|D_m0tlLue1qBMHh^{se#))g3M<$qYD6SY0O>4=1*4&wz*dDQs z+~+on&%cgN{zM;{FsJm|KW*VcOwiC{N^0zG) zkL}5(3;nL4Jb9PQb7hm+z-2=s+$0o; zA5$ORQMJN|kWMYfX%AO_mK73`MW@#dm+yv|Jd1ws%#3Mzj^z2K2lW9)k8w|vJ&8US z5#uVBBm4XJfX?xFUjd&5NE?-m-Xw_CSa_1)x0dU`aIa!=Nt901oy%SlN{^xZXSo(3 z6>-;1DONTDt^I9|M`>N|D+mu_*2`GjNO&e)!s(a1!FpRt@!SxSCcBFYx4%d=D*E{6 zYky|u<&)%?~Jr1d+{ljs((EyTgo!Q?vPC5OvEYBb1d=4so6g%|#^?7df zaP370t2C`)20M8woEJ>!O;su0Z59;IHsN!TM?1>ygRdzze*xy+(Vk)Oy98}3q|ePDO&FZ(a!8MA=X?GTdZFcX6o@RZd;%W$gwE;CK=PLO2ajZ3`>kRZ9 z&XVz*jh23l$S736^d-&0c{kO*(IdrRL4Q_0{@q~>-i1HAF+s|SSEJipmKNWHqEtiH zS>XNZ|LRAwL4R-bHll+as#MA@n5IynFpKohzh}iHIkdBzH5I`2!|;?Snq z83Z97k%+m36gp4(+R@G2A=ZQwm{fFv4~GRmKcyvF$JF7wG6mjq5q7j-Oab8BV@?W>8rL(@z0m=uk9Jqj)2bBtI%DqL??1rHl7&0p+O3L#t=4=+eZUe+D+c^1B#-v0+VvT>nY#e60QGw*4-;#!78aQ zdGlF^R_FQQcE~Izq8-5$hhk)_QAX)U|5+UCePfkinBKWE7BYc}5bw0(!#?9c@~^bdRkXU}xMiL%e#CgP;R@-h-RDSZ z@aT)d?sT&{`0xEec<3o7;!K#uVxRy}LA9F6H;GCxFB@G6-Iu zl0HY;)2Xc{*E%z6Yco^3M)Um~5*5m0|Hd;~8FPq)x+SIQ@jE zR8-aXRZ#LN9ps)flvHVXlaRioUGgR=RJ1hMLS03_^f1)vthIOsI!n3XpXS_ZLKKC9 zaV&gQe%_|ZjSj1N|3;Cwfu8naQ1C-S=}Hs@;nI5rxmG78xyhZD`Dj3idOC+x_iMlJ zd*7c??Z-F`b4U{-I#I;MIKk`C%&};WE^8aI{{r_JuYx%NskGv&<{QFE0;&A7ay32g z-KKof6z{-rc>b=-Pzm6Mp;8rgsVtQS39BT$TgZ7jp~GxS)z2b1d_eg%=+yXGLh=() z3!lYk=Vzvz=QvX;F#d^Rdc3%6Q|bFoXw4+9&+_(*K@d0u`v+3`u44mA~1vn!(g<~jG?5VNudjd*xvk^i!P?ZV$6nz*Dg zBcUC_vg@s<3SJuM<**(IwQn5NDs{(*|Yf0agIULDuS5-uv~GiwrLuVsFzv4ti8D4 zrCqh0*Qx7nbgqC+&Y_B00xiOK7sa2MpN6afb=H#lROnlx&T7_6>0$UwQl@6Jhb{Vn zetUF=&&Ee-(H8^e$SB`=S?`X0d@HdfVVN6E=665ae{+pW(f%4#Mfn4<89mxg&p~>Y z`#d_-(I(OF^U>!G-4)>r?xqU~h()N$-TN_MwH2>Ml{U4%^ge|n8{1(m>3=w#dbSqJMB_JqxK00mnR-GzF z>8zFhBKp*P?cuTZ{clRsSI}HA(}to@R#eM>&&9mOD+#YvA*enfykGtlD1bn3z$_{q zsDM%uU6a?Tp3t0`%Y8!C9*0RspkHZ;Jb7K_A z8CsN#ueob)rbMY5DkY~eszY;YLp?SKg@CM?fh(YzhH2eDvjS}5WD4) zll3u&|B2cSnLNtHCY|f{k$<92?*>w$KW7K^UnNCtcAMT|6gj0{ntp>>2p|%}Eu>Zs zCQ$7jmL#`Th^&bP0*5CC`1SL26W)o659~9mUK09M)W5dO`!@J|I6hngUOQBrBgY}` z0jv#DaPI6$(?}LK7rygT5Wow6w+A<|yOurdc1$;`9Y% zIIEJ}ff_hV-t*Zlw_2-Sxw|YMJrT`)g|8c%QIL~(g_$z9z+wR9-I$0x{0+U(UP&#b z+@IC7dt=@DK=#?cVB_#R5s#m0Vlo*ySy+FFD7&HXEwuk@s~1Qh;ka-fQFs3zg~JnZ z+$g`1YVFdn|4UAxfOWBHA^x8a{eR>jMi?N(AnBWJ_#e*y|41DEg>1JdOR(er^Sj|B zSeXbsw>#^fL2he{C0RbCh=JKZF;XgLB zgkbu=#^L|YY~5j7V7KK=i(8M_3x|7V=5 z$-_b6`jH$sXaJjp;kpL$RZ|Eg+=1geHilq??a>EdLZIt`RTyKve_O9-`(w8pP6EZK zbT9{e@b*U=PtRy3BOTZjlW&ed5xx!@;j>HqNa6ZHg;DHy--p$4L_%sT z0NTquS-5qnLCA`$1q1VC6&CkqJoTzM?cZUzpV-O`u``uiyY<0KX=E`I68<;lHNYA7 zvwhU37L!8d5Oe3g#;P7DM&4|*UHy!;aBCi7 zEPa+q&xmvI2ehV6L(hQE?({q0&J&>y@r`;7@)|ZLq`vTX0^qL)xS5nq7Fyrx2LF*| zz+yMu0Kt?RS7DTpJ!l#TzK&^O0Kl|#aHA2O{P)**07%$LSi1y>*#>Y}5j+QdKB*lr zdz5@|Z|Wob`>|#lX!%e7IQ+@gNYPpT#G)4E$Y*AkrhM7`!uhWupNwq>Q?y&()MjjQ zqlMhBZJNms8xPOuBKz;Ce6Cb>eScSb`kh)^Sqh6VQfu;W6jghLcY%dr5AcHip#3i^GQrSEDWMl9)0%%C`T-=k z8yN35OjKTc_>FbP!J=>}M|mIzz-J{Cis&vvK)1St&O+?2wUAZd5M>TOCnO~FF5sUSR1sb`H!$bH%QK~=makM-Qe-l zIvdd4HHxvmNB~~EH=aGe@$7}@{^erQ8We@{djtx?)rY-x-wr^_I@$Xcz^H;B0_vgv zt38GLMWEM1Q2^}-|{FhaZ5g>tje zd;|=fV}b*Kdo}~sx#_q<{CE)b0j^sN!4G>us0C~1pR<)`B4LW6!qj5-q?Z(MtS zP7nJ3ETG3pJ4BDdX~!iGv;i(oXhQ@i5b=ABL-bRfL#5kPy5;?ehI)3KoAdH+nj9Vh z&a@48o?Ut}8<8W{gmCv~$m&BI-~@4Ab6Z(4GzwrU)ddy-r$rwxcWz;k&NKO-Jw=t5 z>$y*}<^SyIu8ncR`>C$=*yzduK+UpndK#{1>6G^_8gK=%wjXz z#{geoO?8NSF=RFOPQ)EkMKyO|;l^_77SMM7x{b%vE*NyNSJgX1q5s;PdNTmLS6A1i z@iid{cn#Qn1z&F54zu@Y0n(O>+ts{BpTX_@0ATeEk@z+fwT6qr*2OQtW%gU_c-Bxi zNE8z=4(_x=5OvWfHAnxz^JM*xKLDmBXEx-oex)o#cjc24?O=mjW+sbL?U8X5mo%4J zJ6xCEPid4zGT=$GDjf=e!b|;8!<^;^V~Ji%;AUCXxY01X$V)fCts+~Xqh06REusz; zq}0@!rOq9~WZN2S5>3B9Kn_kLYNUob$G<3dz{<_IqlqmLe7q`R_e@GmE=uWy#_0V8 z3*+4}up&S$epL=nC=VWm$NHWWc?db^6avUIHr}QAHR&5R z>}ayykyUNO?WaIepvd55(U5BxVVVo75z0OWyH45>9{|XCqdpE&m#OY?_`AZzUn4*0 z$D-~5Bd?2HR;61m51}G=q99*1@l|72?U`SeCrgdL14GbWt0;9{Cu8l*XdO_{n zV7ZUy9M^CO8mw>s2vT{fvaGHDW*?LlvYq z>%EH}9*Q8WqIcx;y;qrQ8($%1-azSv{&6jYiS#BR^EN?OPEdL`Mcf{K+Uu`)LT*;` zCnbN9H=@i*$TDaTr|)VRtrOP7h9MzCO_Pc(0L7ypyfd}vnxzueD01=6*EOeqQ1bOW znyT0=)XU|_UuKFlE=z)^&|C-yf+tABas=!!R)p4U z`tqstHkq_&;0bvWk3_L-z%tfeOVJz=7(@nmTP9omd{|+82XP4y-qS~w>o=0Q)8x%= zgGblH1}2})AfbIJ{v@{!t|HUgTr0=Z|5VO%i$H8a9DD*LG@6U8N-U zzeftB56uT&lHZSMmz2}uFQMVTSb=jt99 zCz72=oqzBNB|3f}QIr_iH~O}wrmR=zYu{s~TT$VpVa;XYPBRDz#iQ3Jo{FV514M51 z*Xp%NfRbWhm|Ms#KCY};0W~VEahAUwDFuv*q#~w*dJPUd!{T&j?o_iW znd3|eh~N_eZ>wXR+gAti)J1kJSYFkTaIz!GCi6-u+Y-Kpnd@M@MvH|O+?d%8BBGWk z#r(r0lyd1}i0*#iin14O&^e8A`gIJ0ON8CnWVh}HVkkaentN9(e*^RwK2!-3qZpj& zQXPzm_mm_%mqu}Y5$~uXIAFqMXDU|s%s#x%etxNjK-azh<0^m+qkNHTu4_zMgN5a^ zR#vFh$4xm4!o`JscsPlsjEqS;UVy1JsAU2F(c><7f!yflibjU6vCk5*Mh$lZBb5N=Q4Ngt;g64P+szG91?izZM#4XL)}Q)gl-|A` znXWfIDYekT#j#Y(rg4lP8&iBEEaSB7H_l^fOM~B|k451g-=bnh`3^$kt2T4f%d&YshMpHu-oo-84l%eG0Z9Q# zA?@k~T(c(dTn-r_z&2FOf`pfG=mPb_?5xoFSirP|bGa%crjM1jL9<8UAYuj1{ z7Sej}XiD+A)L0Vv@R{t_LO?3l#fRkG60nY0qN#)Jz8%Lh_u_`#y5T;w`oc>QAB}g- zQ60iN605$3Z2AK-1bIYeDy1{nEGJ{J)l=F0d=)!NU$7LBE<0@mtAxgq=G}y!92K9V zcs^XWOjz|2@K@8|KBhmrdx}&*O$vWqa(fDunHH4wpEJIDx^VS1;MFm~AzHI%_fz+2 z>7T!*LY499j6lpiZv$l|qrM?*9-zAX$2(%rsIVq?kHo%s5`*73q)!8LOm9PXZ zVaSt164Y7gB^Jr39f?0IyhiFo7DaJ(^4Z8N>vrXo2|8Rj-W zIw*Wa^)5mX2?VcpntWwLUI=^{*l^L@1Cas;Z)T+7fEIOy8qmLMe&gd$n& zFCaYGzMgF%_uW82NfL%L{XtpmH|CmfA)U%RtJO?X$$K(dBdVPaS_C5tn(zipSRyi! zM{&zrYHFZN?foaf$s84Uc&`eJCxu05vGc`YAk3`H+oH*)Sr=68itbd9Bt%~^hNP@f zYs%Tscz@7CdQTIT4Xsgb{#4e#G>cbu&Ba(bW4bu`w|@juc&RQf^s~h8ZDHW7N*q1$ZA^F zWyr*O!ShM`vmAk!9j4($S$_rHlK0ZmY?p^y+03^JP7Bkza9tj`*Fd*!W)VZ?I;I1W zd}ttHCp9I1P+~qt>pF@_G1aG5v8}*VkKGJork#%Vl1Nf}vh}vP<=Y@9)Tz~Jy_7CA zdW#}Rq1q?$<<>8OZti*xC3%Nq611&xlwozwTo(Kj@g_&*Osv3^T*usCc}X)5Xz4uBEo@vhE<~H9VZD=v__yCvFpC898`Cauf@} zj~8s|N!I(2$w-gVHt;$DPJ3V4eus1y2gTX87Cxp{xuTLvp4<70tC3Tb^F2L4mZi;7` zi$Kp7+i!n6VQaT&!4)BO)`=nw!$oOpso&{niaF?zA(S(*ta=e4|1yZD|MaKm+uubO z6#Aptxu^2GrV5E>k)_6t4B=1}*Y{=}b*y2xxWg5Cg7Adum?X>Sgk-t1bja&zly;Vd zyJM8Odv;@N`0C@mS~6@ggu=4uR0BB0PHus$c#@llB9*j;dPfu$(=O_x{n%nA6_bfP zGQ}zGdNb8>7t3#*S5FZQ00Z^ivkxep`Bh!;C21WKy01{&h_E;cNmUl9z|p^UV4D$q zhtYu~{Ab_T7Ai?kEe~$~IG^z#Kc)(2u7L-js*d_f-1S#?dT6Qi+d?dIu+@9M(02_O zDsY_gaH^!94phhW-T7<}?sMqNH-@?xPPj6UjQ&%) z@3{rKvZqG(6UA;=6FSpXnkXtZ05&bQ=B}us-B2u{4$oEj_7M{F3!c5F z*+O0(cBGt?_++6m?lX?4PkJGQ)6WGTF556?xP?C%$&S-$HefhB`9fK;HS%2sx?8XO zrZJ^FRUjLeI`Ue$Q{P5I0{NF&`b1vHjON>^H&P}*%iGdD<*33vn7G)KQQ?$uCI zKV3i51)Q-OQr?e^&Sg61njH}p8ayrYi+D=Kyq#!xDe^Q|P+8jDZ*P8klooTHcJp$0 z!g~|>GG8%Kfj3@|UE^`NcUmn1IxbVC{7i2<@7$AjRu|sQDUk=+!0+nQHSv0&=7*rJ z_6WbW)h5Es6K~Z)Q}+0E#)W|2f(|Z`j)pD8$gdmJb>)ijT6JHRWi5W*F2I${L@`~D zdpfv5X4ncrO7%uh?i#9%ly$2V?b2Bla9Mbb-ZqYBlW+^lt|X=sc!9?dAQE*>Cmz_3 zI|(IfaJjU8RFOWX?6&B0Y*k*;v1pqhr>9pyurmDD`-rNM!?tOEE4we;R~A8idk?bt zew22a8E%oNhf3kDC$eoEfLnb3$j((wnKiCj8(hD**D6Eldc18%N|>B!T;ZY+|20SP z*>{MG8XXB|9&2f_2r>ThySkl~TAt#@}@a#70~YES;sQbD*SP|0C@qP06juf$gOy117% z#F1<`Ri@Bf+2bj{9?PZ;K2aJ8){mF0nq)=TQZk8mr|0>YT|$v*U#O}wko+X_PxKz!AVjXPl1t_N<))FW4C~lKPJH#@1Jcrk&<0|tRWl2P{-256h z&dVYB36-%?uc(G4@hgQUiAl`gtAHCL&03-_BEqM zM5qI&CCkr%2f8QWr=5(_FQNKvrP)ayqp{3ku|iMp=* zm?M`O|9tnEi4G=i@Gq3^a?Eor(CTQy`}KW*@;43V8L0Gkqm9YsNqUQYr`6?FBlAUq z`s1!A;<>O#Nx!wfc#`AF{-)W|O%f(uyAVHnHm$<*u{~HI2t7X9Y8r*GBeo;tq(7U{ zVQ+MQ*Y6RSr7GaK;&5Kr-&=7cd`7hlaywUIP=pq6!-NBusz*zcasIX}53shnzewVMe(kX)*fH`6$be-IiLZyuvPaC{@s z>6=(58u86*?`h5jqejhOywi-_h@6tIuK|8LO)v7`t;k8LE>>G`e#({x!B71L#Ub6*m{VIEM)BEP!N@jlszVNAYj2F+ikJJpSF}a++*PbOED9sQU zjE7p1Hftz%mM+{yLDJhdXzwe^g`XP;nJebpBt^Kc+k$+G10vwKR@DF=B=OwrRKSsb&%*Z}<`WQ21+C zKzPW#Mc;#pN2Vg1e2R!UmNZY{&I%vF<{~RZ_U=MSbWS@)uOsw!$CNNdfz&2II?#H z7Lp?@pWBG)q~?PCW+^=XfLz$vMKdLeTz2sNUX9;7GoWeZX(9L=txOa7*b+@ry&MN! z;xJB9j@QR~G8WwYhRWa6)QyOlI3p>XDhAW1boTn*%%jU!bm-dY=i0Ac_}0~~?45+I z&x-ZtD|FCL*}hWRk(}e4yr&@POoLEux_J?c-kxRZi|~$_@_JeS#9txw&cH`*@@FugAMqgl6jM-i@bU7t`Aa26 z%BqT4WE$6lpBEtzJ9>ojQ>-ce>qRCo~eY)AAng|tAjb&|R#z5pd2%_!}SdDo8Od^h400gwJ|4^^E=N}A{DE-lKE#?ol|J{<2= zzQdYjljCnOH&YDREOIK-fwDBJDT166chqg6hRD)HVq$0}NK~9D7oC{gkN5B@? zD0)z#m1ga~wB#Nu`S@{zVRbW3P%Ma)vSS9F6F-Ti&ucN{${N5*8g-SICa`#&$1FOH z5~`mnzwtZuTOj~X(f+*g)!$&%Qgh6r6uu>3+!xAqItYw>fG!JsV?4-% z@Fmx!Ab;25U`l)`BBNM<8r@an z%Zo%3awq(Hu@w@6^JKS2d+yC>W@UwF)K78!TNhJ0*|h^Y-Mx;6r!Kfl)VBHd?}5X( z@Rg}|BX^?oN%KjcUI}b5DwM0RyNLYgRZfJP&8_SV2FY=8811g)0GLqAL@?vm5?+)8 zUPZ?N=(Detma+3hv$m!Q!0PScY?}O*v0+>Ic{1?!@OGm-j+naXo@%QE&b1y|}6?1n%T_PNyDkMo$zex#$Ug3TPlhKIF3(pQ}Mw^Xzd z=_oTtKYLlzF+d{9CmdqCZ|Mk2xTC&|YUu_g0^`ir-(NjKzr{J>L79+++u3>`$Q#uT=mSU1 z5IVMT%8kN=@OmZU6o*)&H`EB@UCiNwcv>onR3yX)+8)bJIe`0S@h5l!7V#&IQb;$^ z7&TZ~n=+P?X!)khLwvP6-s_tY4Npv0`sCdcV2KgCUf5@qS1MYxWY>FO`bl(>>X=d3 zHNwNhG)wQMTXj*du=8NGz>HC^A`{gTwGa3=Trcrjg3(bMnu?kKC5Rt?F!EzU+4**} zuZWQv7k~$uE|Jo+uA@GclC%ZpOw9zi7ziD+AdUZ&x@>8nhn7teN=(J-)sI^wTMl&J z{PrEw^dyCY2()X?Z6*kkORmS%8}h`@95+r5VA}G4NA>E$<#RBDFb|owo|)u$Fw=n$ z$hzO79Lp0V$@JZAh?&~iqzn1_f_fd;AiU?do1wcujDcQnooI`K#k9- zX&)ysPF*^b-qQZWZHbGkC(7uoLQRc{+PrPCMy~}{li6F5e)TQ%;?dWg+mlO^Zwq}s zp8NG$O(uN)Rcya=)5oFli;sZPzTig&eM*3tmi-C}WVeU)K-; z|G&8a3ElEgljf9Q!F?g+p}56${6-KOev3mMS;1%GU{r#mlGEHF+hx2+A z6scTsn+!gy&B2E=FiSVe21COxG9&sd{A?+x1ZN*0YhO{77rnJC`2lB$Tt2oJNi zQ(^9D2r!qwMe@Jp^6DFSC&QB;9W?Z+3R;*C#h~oI-zU@GN0D*S=fHOD1)Lr{yzvDm zO$e3iz1=$21gZWmUU7R$B^3gh%Ba_bCZ&ofk@ytvGLEvH-8s;4*}S7?$iv&ww1yRq zEv0SDCL^?YA8m_mlMFpDtCK|Jx5;4`lgD(B<1#kdjE3$Lne=488Yk>DUrwQAN~0x` z+bxwSE*3vF&=eS;8ru47>krE)QwsyHhFdUY_oi6Y^#{$E4i3$gtVQ9E&%a^2;t2vB zrn3&{C~Asl7m#3vc+s_+FVfoxlr{ah%Oplap6fIsgV{7{T{J6PbpOhx64F!5=BRs@ z=@`q`C@Y%N5I6y?;TgX;VI4<{F;v&UbllM8^)k2 zOofLWMY7{G9>dDk$fh_h9c&?5wD^l7?6=~0Z)oHhZ^PQV788C^#H2UR?J$$X!q=D* z-59#RDli11-4~#dvJ7kLDAJfN&+3%YRqzUZQ?mp;Zp`Z|DE+e6`H1aqht~zk#tsk? zXjVE+03<3;RZNAo_uU<(*HC&M+=>8&id4~98;uKmFai8p#7eQj5ELlC%mcroAcOBU zKA+`?IX~O`vu$nn<|Jk+*b@TYc?`Gy&p)ppQ33M-&`$0{CQI} z`3PH?1@J{ie71FL%@KQ?3ODghOPZ?|T}KcgJv0Fu8l}=1&{UE{ z%+q>vL=-(Tle}(6N{UZ%J7JKXe(6$GvLodInIVqS&TBkMUl200jq))yf?EL$xk^NA zY8iVk;32N2o>A$+~)kn~mB}jD&_Tm7)xy-2tr>FRo?vpbgR8Xaj>~_Y%e-DEZ z$7?x^PUG%?NE+l|MAFt_KTPDa6`v}eaD}+BhQ&W5cecJb^QRYY~ zaMSQa=!#-T{A18~7gKo&@9jj(UGcj89?xmY<>)^7m|vWm;mz3_YZa8*&o;WuLx$V9 zwFvqF(q7preCTKYg~un^^AXv{-g)-Ky4m1(m2xMRtToi{7?-=tOSYZ``;ec=V)V`B zIo2goG?Grlq%bDG&YUtf_|eDnN~c$lcSio2!Yu?t)&K*48(+tVUkLEk7zwLovTf5* zTBP>6kxGZ~Po&vFt+M6wIQtZar-PTg15e+XrtFz32b{VaCeD=78@`-^S`m*D&;8n4 zSt$K>_x?{pC2OTe`!9b3-2~3yJ;+=m_qTWVw`eE=+ilYXtR+-ztwm`B(SxmTmR)~|e(An^w#L0c8Lkg)iB6*X#55GHts9a4*!yum^rmPT$%p1t0bT-Yqi8&u z#4j=5?Z~5PGOVI>GE(eX?s0r-`}QK`4(f;Ok!6f&;vU;1Q@S4cZJzJNM?9I+Yun%) zge_N$_Hi%7zU0;w<8=`^G5_>T3C#)N=GYL$Pd1*q$M=#o`0GjDu|}FOawdNQpI-mH$Pd^aVKF{Td)gh}6^pDgh+-)fG!_6o;ajrQezk-< z>4QT(&WMkJiTWh+^W+pXiLMhM$-|1Kl+;UU9mbLVMDrv11BZQ=Zc*&}m{%7J8flJG zWgWVZX%+YKU6&Q*RDwMJDC#tQSi~0&?N`4mzgfFKi7`-nQShP%W4-=y_dc&dyg!Ue zLkUXYm#f9yZx6YwReU=_{q$3c_mo`bCakvhG~=5F(l5+{&fKY#H%-vk)rsnM_5%Uj zDv(I#T50>?VeI8paIV241I~A*)4coh{J%pVAgnnRTfJ`<-c!+X1N4?Wt9fx;sgu9c zs<#~79oYt1DHvAA-j8RI3g!RzRcKETwkeSoRIgC6E z{Dw$Aggl$Rf&TDM&zvFL>C!K~ejj7X>bu{HBw3P8K6445ZI{<|I7*6!Dew7NruIBM z*IuSPgDwEl-J^^*A@>cH`J;+U>?fHbgsbs9M4^I8>)iLoWen7NX~szcC~qX zVrEmJnDHyjsqbD`&M2_ywR2=NhbuPgyqzGJ(~JE7Sf0CG_9z< znG=y%$JAPLCjCWG?I?_I9Ssg!U##$6Y6e{Cn~?Eujn*{3rDe9|K3-e7Pr)+UGN%o@D7WK-_O}qw&Qd7cUvn1uc83Dpm|fDpK`VHcjmvQ zateOq;49OrU9P}wM{UPA(YV|E84MZiwCD(XP?Xu1>r*k->YPxv7~e?O+{ZW;HYdT? zTu-h&Kh*-W2on4ZIR1&56ur7}{E2sh#TjU>7=^KA)AE|cz-c1W$FJ|HTX*?B3Qc_q zwSyF5Z*||fM+ly33e!5ia2HfH~>rnUDDNyzQ{`Qtw zrjA}!)auLfhtECFLOR0emZ)24=jr33;El}B&=Zx#e?qEbl9moL4R)TK+K3_9<;TIv$r;v|R+(jm%4dRG2S z{oA0=oe=in!OI4v^{59FKST+iX(SR?+k%)ZBA5l$O<;NojE}ezmaC82cAC?|)lamY zsG6sCy55$&*H`B~pp^NpaO2*kM8L1F1t$y#KmOiIN_RPW+w$Yk(6jnYNWq7j48%Em zFr2|lqx}l`Vzd@pt*Ak}(9mK*TUa_pZpt+vkjI_GHql9l?{~zsuw@z1$uBjOcZN{HYmRzJAO&$G&S`2e(_{c7>@^5sH+%=UaPlD$->B)tnyTtz14h zym?<76{5J?XL<6CFVXbX?|H+-=Fet~`U`nQJ)UlUcA3;hj_l63*4t4>Q1NJANK15w z_8blVw*KK}pFun&i4jv-<({dJWsX?cg7BsxV?h>&& zKs9W3xZ*du_!xJ&D49!<-(jDG)9Bj5Mt#3m{9JWetoRT}ex0-RN)LP0HkeZ4;iID#K9F0p8 zl&JX0<`zK#@d(lAqXbmfB(nFBmekXf%rt?v97aTFN?${NP5paIL$?wCqTHF6XoltQ zbUN^?3%;ih-L?!CSWlk{sqeh10v;!>G_OXS?*8q~h;!0k8Bq~_-zbw@|E%=J<>#y} zk~Vm#4mdG3 z(jERu4YI~Q?>q5+zn!ZM`Q*l^DRu-s%xkerfZeBJ{y*&f^;eW{814-#(jkq5scu)?nc?xDYE^S;^9`9&M*<~qUS{N+i#z<|?L_xKML9Jw@NYtwp{ zX7QvOeYtU$UYI3!4w-m$kL^B@i>>F#owK9%Zha2&vPQGWFj+WwXRC-X)4w@h$nlZ^NxQu@+j3g`Bx7FjFB=87dEODvZh3fZ2)Krc!yUEkvN1*b(YXG+-DLCNpC317!ca$?ya zJu-2HM<1dMZU67mf`Hh+n*0cEh3~=Ifb*FO)g~*IA*Wwm5YNz9$ho6%@_avhBJ}tm zfyv;BGTM&wwCzWNqONn@@*na|hj0-eI~HRbZ%)*{pdZ?_`h9ZW{q_JdR9r>Dy~L`U zCZ`M$MAQ?A$xH!@Vf~8MDpmd;bzdPm3LGLJ>1=Zp=Z$g7&0m8?q4bl?$woEmq*{#w zxLCua{-Rl&`<_gVi(j9C9i3_G4H!L3WoRh(kAuN)9unFw<@Q(2J1Bs1-5yh!A=ex? z2*>RhI5?y8h&2@I#}u9(I;cQx_Th zCfw9c)|P1z#@A_jS#jJ1|0rWfapd|xOLAitI(28>2kqm^%L;0LOPPjg8I!kul94aL zA?5$y3w+KD0?rz9;i!hong3I9o=azJ_SzY7g!X@`uK(Y^@xS*z{{QKD#LE9iMEp<4 z4)8dZ%WHoM7d+vvF;~JXa_RejESYA=pW3X4kq5vy?24or&B-fA+#&4-EjwZ-?pi+u zGsyx40#uPO8D#3DGcbcc#;wo;3gi`m_EWq@fau0(`K#mc!R|VtNR(l*rI3E%Y&{Ua zSxZf9<_MTE@H|D@$1NTk`d(VYp3PAIkB#;J@dW@|1+bqCww-vNIGy-hx2yo8l(^PY zx9hCSa*NT6RlopEdnX|JC^HC1M}Gqm8=&i84zJD?0JlRtDtNn_x1uU?l+dbYEDJ-8 zBaqqDoI6D_9!G&X$0Z5v;Q`rfe19|ac6n4_Z8;g&vlGW?UHqy#rfEm~x=Cv3i|;(p zPf1zWK+3fLBc~zN+5b*se81D&uVWm?$~<>KLRwb-bGrbEC(t8g;?}``PLcXb?@_U{ z0lEc|$oiC?o?-9`?ICqzB?R z@GRdLU$!NGCdJzZOaWQ-y_nhUm`e{KKena(E)gytN7lr)FUF6a(N!$LsSOvK0Mh}} z+S|U!K{HE=J8sXaN{)Ohk#qE&@uwJ+#!gJ6yI0gQ*(m;in~33#k8i>8cZ$Ua)lGmb zuuA1TE~Q6t+;(l$2oUqkt%Fcyk`aEtlHQB&2~q<5b~EAzZ8dw&G@nfR}B z@V%i^@Hg)qWL*Klq^uo2Apvrx@gYH`j${yswb=yH!zxDHj6S58=Qft?qQ$-{-;1Q^ z@!tj(PK*fPwaRO>oKg`OMTGyCt#Y#+A1&mKv;_fW)f!vV_7`N^Cp8BT5F@LR4F*#J z4k;w#GGex`(&w`56Ob+KKtLTU;(pV^B)$O%7v8%9&6*~_W(08)nct}de%Hnasro+# zh<`2s%upi)%fmedY2-Q%q`A))0i0O+@~sRE2FY&sVGNw+tlF)Ck6n`BdkMK`@kXdP zekg8AG6Am4HGTb($vr)cF+#c~AmumY26rh2t}8BY`8#F-%kIbd$&**#zIT;8w!Y%C z6x7=pnO_{e{`r#k_em^&P4siw&zxiK5<|=L<_H(B!{o>&@55d}VO_Ntp#08nmZW}h zLHJv!j~M&ClA-Yk+{~5-Rg=yy?xtzX`=<$O5ySwQ4Su~i*Uld??)R>9327Tx@&4OQ z^BIZW;K3L5=mKnKdq6Nv%%QL*^*=y{%Mch^A0|OS)ov_EoKgh@nwo#_{Q`*P@1CP< z*xGrfA;Y9skg>r)QmNZ@h(Ig28+946Z7kM-+^ngmsdKH2cb+38ab8)j0PV|W831x- zMIM47ds{S*Zu~x&afGt;GSEXr^ZLV$_cjBEyJ868_UkyweL^tm0^#fSivkWIOs3zT z7Lp|i2>C97cwS~V9wdY8y7X-u3r=4wXOa=H-s_5I;aMf8V{zUt3}Eb zR0U`5j94IK{#BiFH{KMIkdwZIdm4$N@_vr*EZ!7}-;tn(^s148#bG^COYNqdwdlAi zxD(Mxm5?=3KfBsMp>^f4hcYR%3$^C6=FfEz<$I!!<0f%*x>TevpPR5deN+d$xTl`_ z7l~h%q?jP(MvOqTkSKD_V1s9R^lzrp=U2n3$3f(>;6@Pf2S39Q@Z(=#-!uVqR-W6c z|H!TdiEmhxOBMm66(u1@T?!%$)Fq6Gbp@zz)I_Nv&xow9S6p4Q04Sw}8`~a~fHUi6 z#G=Nx=pV+uI~cFonzs9;NbJZmTDu$^bltHl%i$R7DKlW_b53zRnbbZF z99ZrJqEB4(?IFbGwLegBP;GxBwWB@&d&dG+%8{>+goz$gow$Vtin0<}5lh8Nu_6t` z6-$W;HaRX(Jm}AAtmtY2ihqd69F_RNfwI(55Q)<8OYRz(p=LYYSB5G|UI&#m+vo!n z{8SP|0oOPY>L=AZJ+gjW^rO`XNk1WcmC5=&ymMXfbaTv2@KXd6ErZmsem&BIMj&oD z_u>yu8}<0}ghj@#`NWvSZXz3hyyOIF$4&rWQw^bEr_Q;vj|LE7>)cVB1~{go^t8X!&rT`>1YOh zaxo8pHv>gp81WeDt3@pmp)Os`KvcLd(z&KM7QR^Z==ry?cc#}{H(+U#Cuqx98>G-p5cm9pvwp>pXIg7#Eu!| zFJCXBGxsizcqBajte0D7Fke$)C_jR7k+f5MxhEt)niKuQ^~bufAo6ykv8=q1!nWY3 zyt?GK_LLA2ybbqeBzEkK>okkP)7Ms*OlR)b5(plMR-wDT}v zrsaAHhAFixFw2Sd3GY3RCCI1lO+Xq%UpM(p|2W8c5vhecj%1}xOqzZMh{ff2?$W{9 z#F)4cf1}gzw+UU630TQ($1ar-a+s%%Hl|lbnl3-!HfR3$UbL@UOqCT=6xm|U(+`nu z%MYJ-lYY3;-?yPMTZ-9=(Ph_8UWA;W#!I{EFK)C{gy<`Oq;{>O9nHZroP7 zMB7Z`?Z}>tLhu;=)~6-LI5s5=Yfs;mOBE8ks#wUO1PAFtm&n0t!E_;L^@7&CYS8fcGY?5n9G>|5sh0&qdt2`T&jWJsn%uG;fFtZaw{!&uw0WaeISB=A>W^?> zY@Y@Fv3Pak{f+4;e9I#&VL*QCc8mcJr;G9P?Z|cewOAvdXf~@nwu-&(%sVzhh)h;# z&fc6Z)h$|;ne$nj=3~rUwjH~MZ)?gI*(@Wt0}%z$L>fkh^Z+1!YIoSx=c8%fN6x-+ z#@BRKS1G)`B_EX|te)|DT3_lwe}hmAb3d9wxmCDW4iagkX;5e~Cz2?4J$=)BNZiq` zEYSa_7ND$Ot|9-;kgWD!w4Y1H!e6at@c-Z_s_xwNpL0#7&0ataWTZD{3)e~pXgIB8 zc#{gwgSr&PESK1`(y>;)@{ehyvJ$$5f7HHsOObwlGIGMC6p{D6Kn)hQ4CZ5}p~~ne zik$v5_5N|ui$W$|#&Bt7Tl_r+A|qtfqel@EX(+xA!UgMFs{Jco&)E+o3`06$LkiH?nhwaN9SI~__Xg8rqxX86}vkC62=c9?`(q$ia?1Gzm`@O}Sw z)5m=ehZEw!BC%Q zA>lmZ3ihv`Z~v+v9|Ic15l>3tdc}|tQ9#btU3+c|?N$!}TkGqsEKeX|U=w>b-Suz76-jpATbLIcs;j1~fbTB%9y~HZUDzaFs z2tpby-S~SF^54Y0!4h{1W2yvPTx;*IY!Je#Ak$B$ZNKRJq4z@$Th&4F!O4xl%i-Kw z4Kz7VMk@Y%MO@V;cXk{cO8F(jsvbGsC0XeTQzWP)@%xQwXGP*dNN3QTJ$sr7%%5cC zjC7I~S;`F8P2$Z1ElczJc~O?~4HVs_!r+8czAeV%7u2`MkCv|+crOFq))(Q)nU87Y z8%+5Kw5giCehXJr;`NSHY1qEw<*zAV{tf;%b-k8ov$13y&pufLh&;RmVz zRGI2Qn#H-#kEwt~06s2PcO3!hdqcSYol9gP< zXHIZ?Zg#$8L-w4K`x(bA(A^h0JqN104L}5sbDh2;+W!FDXKl~jo!h@^=_4f7pQ=u> zBi*R1`q#4tb{TH$B`h!AdpYb}^R~sI6kN0^(o0WSgfy#eckUHsWm3_-V<4a+k+XHQ zMO<;k6kp1u64!q~ApYRog}BKtSx6SDKSSIc4g&y$)B+QLb}p+yXD_6hvenG|WK>Z@ zM|z*Shsn|fM&C;W=|^6?&0|8nSkiXVsb$md@$J-Byk%`W4=&eA#AyLZs0V$j;lx*)96T?K>af}BhBB;DV`7o0 z0lQFy?rKVm$2pzBnJs>Wlm1JM_yw*lzVILLpMPw1Dzr+b5S$I1&9rPMSfZmnX zUq12GIVjN_EE3ed(Ik#6?enkBibiuB<}9HYZg*-v{+F|+c9)+XL0fKpKJTNZLHoi6 znysK~4+Lg!{tGo2}xd>7E$sOR%&*4Q0!-2~^|on^uSnu;$W| zdkn34$I1DN2}-zRe@qv=is}@suzu!Um6w&Ka@P#RJtQ2zoryBPW)f&|+PyAIguEN5 z{X_@V&Y>gX{8r31u1!m+%S5WQcG2E2SI;1Dzthht-PvZV6pmm{_?>H-YRkpk+^#ZV z{RrA6IQiz$r@J&$xW+X*96N@4!%Fkwv8nocj(e%MYmvr7_7!l;-j}Sn75fkr^thT676rjY zE=73B@}gJf=c&8lZ!#Mf-2->x9G4GpPSyVLkm>JgGuL=xUxDpP^OiKrhS)!+SrNR0 zarANjUF@95g)n)IM0Ms&;t#M{mIN0U99KuQzWnk2+bwN1=a7VJ`H|9$uV)OH6BQ+& zTe2n{D6$q#JKf#;crv+6aHUb<%KapohCUa0H0Jqg?ce17wb`n=>@9v!{kx%Hu?+;3 z|BO~)2gXL4sixo7{NBmWPEBYBH?5}ece{>F>_oChPKYah3!RVZ| ztSlTBKXM*y?&NbG8zx2>&JZJZl^lp^<%q4ehCV#N zTBhUge;e`s9zvH}Z2idI>Fs)RYI zV}wHEwYvs|Vp%DD#p*cUBkFR#bM>3j!J=ZBYXPQ4GXU1^XRG>wqQ?b~mWpAE6)k@T zQv^!1Fok|uGQA#$TumB9rH1^WVDwm^9KIljC-Xk9$NClS%T%t!q%;2EpGxA!UH;5P z3W4l(Ayhx)twxbv(5DWuF@j`P%-!OVoJA4-NuFLyzMQJB795G89NH~KOHSIfx(|#G zVJF`#{Wo;oqUsH+Z>`7pP&H}&9DXXY!fI#%o=T19Rc)4`0kQN1<8&)+1^DZ3@e+W! zb_{_BMy$$bd;>Z=Y_Gwk5q^71t4Od%E-lBckV}eJXOrYU?vd|#+S>B9OVsgBvPECu zRIcD@e-iL;L`7CX0l~x>pq+U~p!uc(6Vs8ES5LnJhzR!h68H8Aj8c^Ln}ptP#7Jxg z0qcPpaK~JA3{a3wC0r4HwAx z_qShq?lSM-6&gyU;!hnPXs=C9UA27GL|LCg)}2oCJ4ur zkgZz2GxL9!uX0imtfQ(%iekod_?$+30@y#+%5RndNMFiCxoLIIDTFjcfkJhA+t6)9 z(J+>^ep++Ep_Y}_cTv#AyEREBXKHN&-{DKyjw9CT2- z)VJg-US`$hQ4xHI^#Iy+4W3&RYl7NSENjDx30`R=Qw&2DWq^2+RH$X_|1kmiA9F?} zLfS6eF5rs(X)w0|p$zFV6Gp_bO_?NA#QdMeXt78Y>=!9pj{lR$)ql^=@BjT9|4V}W z|D(^tp9^dcP%xSRT92!;N=?K6l0E<6g{@mi+@*+YMe-~^!xvruuL~X*1qmI#lv*EvMI-xf(ieGu>H2Mn})mg$fB<67rG|&gz*3me2PlNWn0a(rL zTjcm?`r+Zk*EP+iMv<43+Vha>8VEA-4%w+S83XWK6RSexH1{QH-Yi-lkjF&WZ-CV_ z<_h4rTJCn`C4|Xa67omolo|XNjJQ<@z612E6_M4`=dOT$(@e}~<-lkM8B~6~ydyq0 z%00}=lVcC`rCWfMq25nGc!d+ttk3gA-e6Q>Yd)zmpaMt6<9Fmh;uy)kl3Dwp$^pDm zwMrr~?#})jSUeoO&)WNk@4YK?%mcKvm4TiY%{{GwKu7|T{e_HMli}}NU3ua!Pwn0# z1{Bes>89Yd0LrgB#ozi6iMw{zzIHx+hy>nsTUY@`FsKzT2Zr^xfpQWBcLUY zWbS4Cy#b7j?Z{SOUc=TYkQWC8QN3<(8{_Jy%vb|1Y!*$xXt4GC0sJZG-mRNrb^X8V zT1*ib}W{|*7 zB)e9G*>{@*9;`H zT~@DSp1o_Am@NmY1%ZL{3xdckV2tW{eBJTbCh~VZu-09h$r!2rXaVSBwa1!w-a(kg zBxHoNhG`za-Mr~-`&r^KkX<=6tDs;s`}zWf+3m(63z#k->3~E3$ny@Z-{0xa&8aQk z{k0Lq1E_ z8H0>~ndBfNHT@Wd#NW>HsP)f4QEz^dY1e+k&A?P>98~M?b=|V&V&}C*A<~BZY!_H{ zpP@xyG(-DO&|B&?g&6AbFe11>$ zD<(MTst0nMEP!14D}ngp$>iBc#+~Qtd1ex!Xe>Ev{v#j|U}_$-Gp+$Dl;9w<5Q_;5 ze&5zk8!uxGdMHj7@blU%`2Jwl#32GoLO32Nn}fr8X|#igkVV%u@7hxw%Rf3U zv34|pXqBXCtH3AEs)z&f^#THWve`gk93B%9xf}TywM9sazyc+a!`ybk``gK+<$@%m z)QTJMHqas(O?dsA&yCj0Gg2inTk_nNJNhs#2Q@hTCh{yIt_Cp2&5FOw%XCR}DX-)t zD`z;wg6VkytF4@2>*k*&Q=FLuFr!gQ`}4K2wRZ!waR=otysOJNmEJI;raN?yo#%S| zuO6G@T!SMXRp8~sw*B)}kBL}Y*T8`&Iz?xSbB893=~?n;Gh_V{ImD$K3-d5HlKNK; z4Er@wQJLETSf*KAS}YmzY-3str0(@#*bp8t>Ej6D`~WLs2h0n{fPvCAB*NLqSss^- zvuP_@WZ7Wt_6zrC(HyA61lsGv1R8&KpNt?g zB}EK~_2wpOW2ZlJGzk3UJT%;^pXUYWqO!Bp0r4! zblJ-WC^5Hs4(7`{<3>{tIAMedFUYwNUThibMTdQ_BgK_gC>=-ViC`ckG=7@*o(W(#rYr$M6CQ38;M=HZX`MQ;f!a80rhcSx z5~~cV{Q+Ojrmqn~`c^Vl-#QbInSINK5|jjQ4vYFL|4`q-KUWOM9YN{q*g{+P;kO{? z>wJ0jNYlgE{h?a~Y)~3>|B=j7frbAN6d;co9L|RULDLL91y4qw;00sT-4>>O8iK@e zP7}7{w8nYowxwQSn1{QB^KS>AYA!PL;bt!CcC{8$)aJSZ|3(mDF9~YR=GD7=e+uUT&114qb zXuDoUoRVsB2GpNyRhy5p6U}1gn(`i3FQT%SXO&}kT@$>Aef_(al#D zb{p$2GRBiU$KQB-OF0l!7)2m4k^w?tjE&rF+-=4*TT z$1%;Gu7SH6W1L8s$ehw#_zUsUPk3ylC6<6%)Z%a0L)0a$6e)Koclf{cuOcNV^QgKjM z6;~aBC>=CE2bGQ-4V%vI^DI^g4)g%_td}6N5ILYGUVRR@CD0H9FwiRm{X2Wbw;>Z2iXl@rF#X>iY8wen@C&v%$;9=TH02=MT;P zIM%jmn!^JovV|p>XPNtO#v(eze~Apb22YHn4$b!x;EEy&A!;Xvn;=55=ye(zHx}Gq<;&;EU?*GLMu%Htr%5|LI+b&)UzPl_HpPRcOm1 zFmnk6t2;Ip;NFaoJOz*ht`4pXrQS#Vn;XFQpTO4t+QZjrx=i9_7#`CJio3=eeZaefm$ z*RO{t;|kjSo}rTx+O+?*CKuchI|H9W44*6ooruH`+G;tImp}>3sxg^wgK`Ya0;^t} zQ=LT>koDoA#9b1Vdl|xl(JouXSoB9u0a%ms96+s^+p$X_nR>MSdAhgursm6dX7FXy_fs#7V zlNrXQ40)*>*J-Zt@}FmMeIU3{yO_XMGEDoq$3o*s^K<4v|4=7?ewptHSWZtY6pj4x zCX6yW=b3xUi$_8Ipo;RX5)zF+v}f5?pC%a7xvRq~h;tC9PbTz8N4u$2M9TWAPIPl< z2rKmYi(tmJ0+fh>KwrevwY<2T#T@}M8x-vew4*mKe& zO1Mh*pUK@aiJyjj^f06H5yTpYC+@Ry$K7p@Yzsif!<3a6yga9`|MV-Je6S1I?rBhB z77RTYup81LAbp=GPEj+uJ4f(Shdu|vJ*zugK!P$TV`iN3Qw^p#P`Tn?X~z3Xq09_>V_lH#Wcm-DjSz#BYr zGi+pI8U@^|uaZF{k-rR#+(a?=S;iE~8{)}u7J@X;2;VTcHEU?XW2ihU&LR(HRUopQ zACkAg!CW#oAI8`KP=ktONq3W!_~#X2m0N-}hc(f?8gc1d=vi$2fJ8msW~$4R0`UT9 zBI2R1((YHI|4AMz5fjWH3|b*V>&KUM8l)V_oDVflmZ2qaC*?cQYfRMdxqsf&fAc{1 zOUsj$5S*WPlRGURC*f|xX&lz$?TaAkurt!19Lp}uf7n{?0joOQr;IkCJI zp~qRE$oD6e)qMT<;i#`Lke>Z@Xt}2aQ%%8s&XcfBzJwhOTR0bVScB(_xPbNd?T3v{3L%q=$6gYS<|j@Or|s5w;Gteqet zG9W+-;x(_J{xR9W9OdRIj{b{>$pUZC)4IT2x&nK3`uNetV}wNlEJ2o}YQBi58a!L@ zZo|-`Hos8zqp8vat!;;$i8jgYvUzLivH!>3XJHnI^et|%sX}kJbR+mt^vr@34J0#B zVJ#t43zO8&prtp*;kHB2$tdask(9Eihv)j`M01e_DzkRQrTd1H&CRIf%rk>txI66k z745r{rm&Y{Jag!3F3A1$Qf4-9 zq#Z0OaZ)zRxzzKaYkcTIFelN^FTYE?K&&!yk8-?I?pQbo&-FPwSEy$w?w0Y6R)<6) zqA#?Zf(WAFTrQe?$b~=pUS(knsoS4_HX1&yR<7_nB>+YmKiryzHnqyl^N=c%}{o^6Qo62 zElON~{t@_RDpeV1|CBkPyJKxYY0kPzNFe88$c0|kb0MMuFYF4 zYJF_%EkZLVi@0ln5du)n#`>@R_~8CHJaju5y?U=px}KH?i{e7Od~H2;?->!U+xg;% zguk)2iA9)1mHqC=I= zBM7u}zngkarfwEB>AWDFxNx_v>~47;wwUh|y)VD62e%Dp1Lfsk%#a@Sg6Pd_qtk7d zjNDJc_oE1OcIN(qy+e63YnsM{W$R2eI-47gta4FhP;$QKRn;<1tmeQwvOYZD^misb zjvyyfOW>!M72i}%4ubxfcgA(tm1LLts-O)`?|`qXCzUB{+w0QnPhHO%Vk|t{i)SL# zB?b@aF1h4$ZJ|#*-4H_E$W1VsRl=l2pejAD`kZ&ZpODZj?s{YRlLhg*<0>xQ`(_ds zh=?jH|LdOAuzjLI@z-@#h8`9ETVDNc4ID>e%%8u`8kij|_DKaOukkD-qJy=&+P}SY zo&S*lrqz5MTFv?Ou(zaNxj|z|KgZSqN4252T{dy9)Rs=hDCVicDh;u!PO6M}$Dy9G zjkIZ)$9e~|s^G^-jyQ^-WxQWpa4!0~geU^@rwoOx<*&UV+wn0v@^}aI1>-vdGPl{q zvB$w1J)1pp@@Cpb>OTjvs-+ND*|Ci%@mxuXfmHu?0jXwv=GFZy^w%erpoL#K4@8Fi^=!u@2Y9W z%b7YmnK|o;xE>c+6Xo-ZhzImdt_EZK&0e^zaTJh21j0;d=KRNQ`)dK(b+c@dtDtCZ zOqIAE`82Pln7#GuG;X;2BB?DQID}i7-n^7py!4Mw#uu+qNIGVILG}A0f?1jUE=l{d z2l%{XWGz{>08dOlegCHz=OQot(tTSf9xK`cP<{krYYJy+9u|>ncm_$w!sr#$_fyXA zJwHw?CJ4lq$fKxEqbRwQn(M96^5|qKdl*dAmmc_K2K&EM3epfCRW3mR9lq;c#VHxo zz0>H)S)AAwf?1S(i}uy#;A3=F(vRP9ZjxKm$Rx=Nc{x9Uo-v=lb0_cBubh;#8VBhv z4Tt7+tV2ze;er>7>)48N{LhXQ>wVtV;~T{AVRprHsWOKvo3hcLEsu$7sIV@|D1o+L zClNC*UCFx`e6QT)%xD;U)gmsq5U`>Bwf1G{gm-3O=Lm`_)J5r+QaF`PorZX5dCcZk zXn(pQ&8xAdLEW6#c%N=a={xD;S3Fid`CCy>UjL@V!ALX9n9Eo6ytn?UZ&kwj1+7;z z^QZ<$86#BxroCQq)KdCw2PBYdjfk~sS=i6dNM@2RK02#Pnh^u9L?k@pjEaNMLW->Z zk!+L`rwQq1{)6TUREC~x=x-Pav&b0|0&R7i(aBqr1kj|EOki7!w)1V?^qVVfG zX%CKr{P2rHS_3zUhyHnbk8X)Lm6ARlc`yf&BQO7{awG7UcVr*L*P?a0-vW~N5LQokDcssR%Rb8LLM)WgWYldrwk0*ZT zXrXg1o0#hiux__3ik3kS>qj4QzV#Z&Rf~irueZLPU#mLbs9_n`eOsGtn+6`--q;&2*7Hx0#yWFArv%b!o2m zk=tOi0S`9VhiotDKc;S9u`Hj1^bUiA3W|iiCC%i?7rIh|-r@y9LJ)_iQ=utpf_!Gi zdu`!Qpl8ClPc(zRAM%#B+xEw5MoTay5>7~`Ql3x-ZV!^pYR*n4lmv-CKNNxH%E-zZ zWAeN>%XDs+ZGHTw2nAsKs$j@Nyfe>avsWBXAuFY!r{J}A#@|_U>LE$S+>imypaFs_ z{l)V5#%58GZLvdlke*HnN_h%_CKzXC3S)JU=bR8d7QVZ^yTujb#@-zV7oRe_|mGm>s~(QBjeQ~Oy~unYCCK`6zr!edfHRIs=BMSm^vb3uC#4!#Mjig$0s#N zmMo%rokP0{Qe7Afl*C4}`MCRTT)4_5AXs%=edx9LcI~lHjxQ5w2pS1K&2}$=^aS_3 zr!V0P@%9%fvi_~|k?NRuU8vp@mLlMYdsE#S!dtXPGiTBn`Y`uxo)C(mckSN|R+3E= z0`Y=ydWTKJ9d}QyVuvJ~Gp%q5qMjKTx|nJfH<%m}g-1H5RvWm3F1@Utb7rZl6ZR!s zFe%iLtm=<~Nm1xDanR(MjcmkAqSMUZC2y_6w&hX~`5_=vEoC;~M3*9$KV>+}RTgBx zWj!6(Ow5-wTcx1EX=JHEtBGu)x#|Aprlixb6pPS+z`mU-mJ z_{`nJ^DA@FLNSZj(=gm?f={B`xIQcCXm}z-&Dih_f3%(m_=yLbl$sWLWDb1QF7dqa zfzC9BZ_l;%pZc{^D)HL=odpw|j!QdkN`m5{D_mKOJB=D1mLFx*G2oI7L>aJr4qd73 zuxzC$Qs%_nkFcd|oI4CrsIYnw!K6=Q*L;9ag|_wp?r)p;;+M`$>3Ag3(QLxgc{bEH z%-%UW8cXe#cDN2+_DilwhLtXuOs-1()JGF76LbqpwA~6x@}-a>>C3iVq1d(jgNd)) zdk3`7l^USU#=C=t=wBUcHFthi`_&|~&?tlVWWG=u=MUY=e1Suq+`^4}8P4wSm>!Mm zhzk|4l{8pnA~y@&L`@1F@|1O!0vm4SxI(x?UK!%8)>q228eTtsU5TI#_|Z(EM&iGotdr|Cl8337aBWJ5(!8*d0wc%0M%!DaMy8d zb%U~AJ_zVl>b#4kdk&wbEIycuz0`LO5B5coZf|pIcHrdfrwzFIt@&jSz`<`cikSS&<|4f5Z5;@=~^7ZLXxX7yrCBGczFh=la=NZ+{? zN7dze;3K08qWJk$=JYmWFmA~SnuhKRO%-RGg)mJQ@1rx3Ajb0`l9*P64f(!3I>fo; zu6I5Wiz&fmJ(SVl44oUcGmqLGUB@vyR4V*t8oSH>Ew)OrPxke&Vm~DfB)p)UV>fF4 z8A<-=-2D=e5X2PzN?@VvZj+&id~74x@v1|3gM`*fC^&ka#j_GyI_any4l#gnK6mJX zllzobq@Hcl)CcqVK^Awh9NVQGC9^dsa3NwYx77K(gjz1vD4p~^4^7P{U5{d*1qh0N zF!zUrHda0U0{{`NC;Ip)TOs(O}K590VILv|ams2ThIJ4Bf;6nhxdKrg8= z(`9NzQ0-8u2)u&`B3AvpbiGb{^N6wZe}Mant$Ff|dp0T{)A!Z=)Wf*KktU8iI`&_C zNr@tgpJyFLEPM)XB$J)9RQbr$XSh_lsNf=>a&QyQAK`syrso?{J{RCG?`)vgMo((a zc#9sab=j2aQ)Jjb-VxIlbhFhM_jyYwU?AeCP1E}+E=zl5Gs+(&6)jt$V-1)(rsxH( zXy-KCgl&X|^xITBh@&Ica^Skr`|AK%F1?157WL?$S8(!Xo3V_ra^gA^yf~>=YrC|@ zI5)-ajE@~sW0XjRfm=P+D2NJHE+r1Jq#~?H2pE?uv7^14AXNDi<&L*TRiCC%7Nl@F z)gHcDHhtCXJj!l+bzsTIK-k<`G%Qvsqni*AGWWj7zChRw)=cRwWpS3*5^)>)DLRTy z>^ly+%eDFmzBDN-?NBw(1H9HIY_O9P1&$+49Cx|X+V2ZIwEaW4N8M_&=>LDXP=a&410Kd!&EV+i=Ape>wdeV@i z$$@51PW#h;)69*r)Flxp)wDm9ck(RNkB!et7rQY6xnI(SM(q-a?y4lK@GIi#^flNx zlu_j6t_hVA6x8g3M95tUC|Z;L)NscTu1+Jpr96((%)n^f%jq{78|3+~UPg~+(wLpE z{Bz>p?zXIJI^%=ZZDFa?pllFLKVs8iy`wrA{sW$xmamf?G(m62Q`UNfpdwqDLqW}CHF^vZCQ|By$1)r%q>%#RK z!4fjqX2jH65bmt&;y(1p_eCN>Hg9KY%_6OjR4JMVG>THrwDz2Lz{pn&a*Rx`olUmvX)8O&qum z4JD?&8ET5XMO@=BXXqNmy)s^{i1yas9zZO1I^-wrN!S-5O0YV# zuYyA2ytDMVVC}cLH~c-!=CJGPH78IoN9m5HwxGntU*^RDUv>|i10eA8T$;<-xmmnF z6@$(IG+i^Ls{V$H?DTUmS#afyET26JA-2)J7Ghp~;1zv1-FtlLdWs?3SNtDvzkwo> z$?QZkm1#xqptzg|H!87Rl_W>n1FpqfW;xp{vbhS(K4n^>=7PCBLD)%5+xQ&tIBCf= zXUakaUPt}1uHQ1o=o`I^f!bV?pkU5NFN#<_<{%+lgXjPOn74nf_@+*vu9W(KM$h1k zoQ8!M6kfc5X*%<@Q+&eQ)Ny+`5G6FcuvvgOfmk9-)ISSRP*{Jwn80w~wwP(6( zaYJbpB-3k+CxXjAE|g9R24zNp5|^|MD{VSrP4ULyVBgcN4mt^Q7{U=II(SyEiCLh^tm%BJEc1PR zc|DDzjH)+PimG}(P9XA`OYEOi;-htWjChnGAB9sF64%MMC8R-;xLXxwnZ1tu3ckZJ z#LUhh5qBo?pP*UXTVfgD<kHgBnig=VYTl!ln3l{6bMa>r#qaIIg2Cnh_Ne!I4jQ;Ub#EIvdCN25^_GmePcVQ1I~Thr_=ntBEQ*pgo=bRmkX;<7Pmda3*RJ2;dJA5C^!|n5 zOvA?A_IELa^(;Fsb0j&*=hiqGtRW!nt7g4??QQV#nO(VJd75!oqna5leKX?KjB2NG zFu^a1s9yz_OU1m@xpxD;a$$a)kyI1X6eOe1HX|?;WNe#GGivrHCjQh4Pk`?l5Km!Fxtp* zI7rP|=&D`2e~e|4mZp9r*_1-EE+M0p*jjwAX~fz_Bv*tX^2HvL&aEfn^PplOf-4uF z)8jx>h@@%k0W@3PBLUX2{!)WRD*--DK9HRts$R_Bk(Sn?z;a~GBBgB+y5d@KM5(qj z_S8zJUJAQxQV=+O#1nhbh3Ny%H|EKCO$7dS-KoK80eUq%0NFE8{?50Mdy&MLVG&^R zmru;6evl{P8=)~MHx}bYDk#Uanni>>=fLyecnSl*tT z&b01@9gWFMYq!9n`afNI+F<7%N?R!*+U-&f_oqukf(rYPxbM#cE5kOAd2*p2NDjNZ zm*r@))$6z>6~h8;O3pty;)UQ*@CJX>`X#=JCZ%WUA1fKjW${toYGPhmJZfVbyH&&O zNEb&vRh{e}jl`U)Ts_~*JpB?IZQ(78v}wtd8fOqGmd1tG**MPP6tP#Gf?`x3hdXqmj@fF6hQ>af+gSy>4*TShe!Snj0M0PebK9n9xXC6ir$EpnBwH~= z0k7fn8I3Zk)|2)iN||j`LA{)u%Zv*un-&hwM434Ma;%BcahMlfMZgRj5AdBBp1vv= zdztO#nWJJ|@aU=X1vDqvwpolF}I!lw8hsV|KM zhE*I&df;w}yF(w2>e;#L-yRXvhj}|V5##e#Wo)<4W7v|olT?g_PNwheYDI6O1`tC~ zL`xYI6xDHJ>+x6f|$m^f^luQhG2|eH}rW0gNLRj!2|bBnDAiZHPQg`14aTFy8aHd`Vq& z|IeSeu}rS2hVGy8mF8OXunEGB*sVDYQg_)s z$2v9_RF3M5RWG16BJ6F%c%7!24K7Ypq3-e8Cix!IrGC_REkA>duApE19)H0ouo)04 zJyAj`qq|}6b2hL0^Flk9-Y5^KpqNl&jd4!N4=TRGOO|Z`eTf5I#C}ZOM`v=^mx_uR zu-U%SrmDAhWIVXfU_kB}z>;H;fg?<|F)CJ$ZtKTb#<>5NA^+ze$5f>B+st^z?Jy2& zb%Ly76~JSBp7oRFzYGEV+em;F4xnrLPD=lLFB{mwe`kyTMPmF9d;b5o@t>FF|IK>H z8>7(&pX*)$^xgMSfWfwAfN2Z=Cs}ir9-wFzDv4C5&&ht5qm%k-2=d5Ga`z# z1SFjg0b|bFOa5K=!QiWdrO+_s?-h%^4iWgp5|U{8@g zRsE-TZq&X;c3A!~#S>7>tg^hk7Z{ClL~fwyJdQpDh;*t_qRVGWR@vaNF>>y#4}gma zz{6V*QY^%D(%~QeQ2zm)X6!Oqgum)~tKjG#YFLd4aWjPpl>N&eVys8P1g0 zf`Bje6ZGNO?71rlZ_ih;jvdWIMBIJ-2qFKx-2F$rb=7e+`tS&No3vl3cHAxx#^0!C>?jl#9JN_N7D)TgF`EDQ>7#0}cJW;@;+aL#qvNLN6cFZaL zM>sdVmloZDnKkI(9)QF){{(Wo4L)V+1QHvd=0W;Eh#3rEoi~$aqT1~q4gu0X`Ur^Y zHPG6v11S38D_}r_YPJT1dJ7B?_8`P#hf^B-d49BeT|f+3u6G?E&}n=Rziz#7W>qiP zXq?viK8ro@{^AzkR&(OZ@h7!rnLBwGbvM8C(DqkFi?A*M8IP4Lf=Z0^J zo(On&WOfEvuV7bT>Uv1}XV5#?uc|XEdX3*e2c-=$-}EMxy=M~`F7v8ldz!sP4=8vS z#G+{tjxEG-cxjpOo~Q*#a|;ol01~Lr-TIM8&SXTcZvNlRXwgJdVVjVBxuyL`#mB=Fx!(w3J&wh$WcNv^o>T$gZw;JCcTPoBRtH0BB(Qz^t%M z;$sWc4am^kGZDf1$=2yOSU9cU-__V9pyQrPl?fvC8)E@R2Wo_Sk@|^05-KzNc|D5B znmX|!Q$OiNQVlScCDuk3ou^q@^TE3YNQ%4%kCaBRp8%^ows_XQB{SY#b@uqqGUTfn z01gZP!9jTeNWI3SK^#MrVs+8JwNwEdZvl;@3tF^Hl&)iql9N}{6WwOCOE<1-y~ z?2LD?`XRPM#ALy&ED&zNd8y$SS7{fHP7cST{gw>=*>~5?oC~103#@12s(;yBJ1(AG z0ZuusJDOz;oa-Kn&NTmcox`}P*X;<`$%9PI_Uc6pM>1=gUs_xmPA3nb7oZaSE**)r zM(7gri*cBnZ8F{{?n}5}#2u$iHMSSx8rpCIOw!5G)6&E9fg$)G=72OySenKjXUa5+ zbZ=h6;*?lr<2`?nTaYgpO)*;pNpS_Z?mJ)d3X{h@(o3g-tg#O4Lc-}bxRoh4z5@a+ znMsz}&{?cmzuDBz*OuJ=Y<;OwUtoZ11^$r0?jMOSx_vv`a|@hvT_aNF=bG!{RxGora8&|AD@~)^HPnDi)uIEfb%tX$22^S`H89$jieht;+*>fYnh=N zeWXT5^aXQ0`VnEiWF`!1^#M}vsMt9ISh7;k_W*TXpt7sHUD|TWhoH4Q$jfL6`>qX!~byhDvgFpx&dB+BBBbHHhz9<>oBp>mA(vh&1J z)Cr3L&l~&qHPF`N<}mQv)t2}}>ig%7(F-q}kEBN;>KrJAam2lY*d9nKl{5{d%Rsuv89;~K+ZMHMAeCy1_c#@>Vw-8C889^XuDSjT1+AH$hOn~4qB||tl+VZ zg(D#b!?G*{cajg1EdSJ+<$Ib@SwfNaVwj2nent4oAufaj@&u*gG{v`_nMO<%8l1?n zm&B=@wMjcig0Eyi(eoU4^$Y3bbyIW4=sobNn;X}@ZpOSu&`X#q^~kz=2pk{*O|Die zQTf_d-JR&yNrm|oqny>)4@XJh4N_v80%zgb*0(oU`~94%r>&QTD#tPeoJ`{}v>D)A z%PZGS9vrqw<87DyXwz>CsA_xBaN+kv$g`b5DFMb*8Nd-_S3FIR^#*V+dX<*$11~>^ z`UN)zQ*2Iov`%zYdpxbAUOD%Zb}!HxUF+v6Ur@DfPQ3Ko-kg86y~1z}R}qpK_Vw$d z*YNh(x5S<_+fHLTy1OFDOygp*Jc445tt(KUXF0VgVAyh7DdB-3uQLuJrZY~Iu-Lj+ z;m?;n2I-c7lEriJQkTV_aWHTKQcn+Iox^0G8Bfg8+CAmpba>3mOyKtjM zA4Y-{3)bpNNO=J8U1u$b(0`I?ET+dxmjLKwB=0ny^HZ+-b(pYZKHIR2REZjj4P&*~O!GnN1YS>H z4A{$Z6_sm;V9CYE%tsTG7ya|?_%929wjVz>CgFPc9>iyM>$E$^S3pHLpaHvNtMymuEp1d zWIXzV4t4Y+ZAZot!)tw-C;3cFa1a*dmxXT>uQM05U|GTFsHvUAUs$b4UbtBogz;>O zNjtAJ^bu>=y)+r|4`Ht6v>W5y5Lc%~Ibl{bbg>0KghscFrxFsWpSm{0&y~zv^nczC zxuk0ssroe14@N_$R2gaRyr|~6$&^SIjyhrH;w*tXhH*HIQ+@i-45}Re^{Gli*F>#24-DcL^&4x+RWtpU0iO7``m1 z$`oF*HqmH3+Z5h-;*9+A85+YeJ~2_$Ln12nAbx-bOktdvI{pZco#Pep4Nd^HGh6ys zrFXPx>qI>6aW*Pp*28c2u7!wxj*798~@2ftvOI<6J??bH5niVeH)>kXSO?DPz;C{hBWf~;rT zdW`%}g!AW*w0}9PvLglGVBBC1VPlVrZD*Wt_=0%tSGSzRoVlExoscQuTu_FR5V>Je zFWf(z+6n7q_Act2RX;&Flzo%~wj{H!I+^9DYvcZEFSsV5V;L?BXt~V)y|?GHj#Hcm z@AFdp!qvI{-GX*I@2ZDaDnJ|bJu!wtyfcY)>ct+T2yUnwRv%%wX)1B1cL{i!26r=R(*tQyKMOAAuQ8nAvH z6WZ^b-Zfo;R8g>F&S=e_p|NYpEF1>=w3yaM3s95Q8B#Vc6ZMo`Zzp8>8Ea1oTKym` z{TygLmlYLdaY^L)qokH7CG~3T3T6XY{lSih<)&-FXcBiGNAzsy*3UHu`=IP2s7C`! zpCkP$daL_a_nMkO7i0S{oSZ3yvFbP_id@gN+#!6fNlyxfRMG95wL-w9%f3@upI0t9DF2_0!{tLj-Na8<1+6Me~@ZR>H=g128`2@+$%&g_GYreh6^e9T~}TW1rGK=fR_lNbK3lk;uxO}KSrT|8gXik;mkOTUmob#>{1l0&!^@8US=A5j+I zz)%e4PkMD}F$CIcP33GAaGB`F(>zJ>pnF9mnK5-AOIZ{24blW!8lz6(xc7t42o%87 zeh}nhfGW3_L6qVjz#-s|@v|&T#y-69A?zB+-7$LEUQdIOer~6$&<`;g8MoCf*Qvzm zL{ZvS8=RYSjoe*FY4wEkP=BbW-^Sj4w!Lde@JP8#GoEP?c7~VJPq9xk&_4X~XR-Mg zJ6ysO6QOxexn&Iu1tNJS#Zz3l1oSy!lUwpZyLwPQe&OmCN#&WJ8dVq5k&yL?z;10y zg0Ult>9n(z$w_T9{?AO^J{vRNVaRmTwxsb(GPqrYMx!HHGII?1uo92khZ_w_SsD%f zaF9YcemvfKYqM77=^#|RQ?uB{qj*Kf!&#e#?wNg zLc=h!-Nq$3Svy3wRyMt-PYtSs&B^XZbCwnVf!c=WjcB>8zi!g~blhL5idSI$$?TPy zMad8s#!T&`&tR?B-C6QfF#^Za1e3__GmT51a;zpcs0X5b5`qh!U;r6MU%%|34sBkJ zRmy_>(aQV&d?iUXh(xGf!c>3atOu6Rt`Gjn(oUd_jNYhBoX{mXt)J2;`v8Wmag_Id zK%mPeijPpdBb`nA=>h42q5)$pBO@+M|{K8VS^5_h=Lr;$X-e{^w`9T!zZ6vJ-bb z+Q_PLZ$VYm<6ZL4%B8;8_;o^HOkj;PyiO24QUm!%0k)%)Jx0AQT6D; z+v^NPQvAAy)F6sUCY{U0VjR%q6P=}kR`lm(9MPBc6_f%;<8zW}g<%m|l_14=DqPG- zT>Bj^pWupHx}KC7Dd>zNxc~cBfdFKba#O;kn*^J)*9Mo9L}*y~fUFQl0jgDrmdX=_ zEAdfMsP=PeVdz!j@>^*9>W|VCND`dM+E~+_v;$=|*3sYVq(_;&UHg*Ds9e#ol z7LkNJX`*&hB`?%DWiv>ZI$gAAKAjho0K(!ZsOU(gL{9=I_{pl{Dn`o9q;kBTu}hrt z^5HGNBelGeIq$YMvYS3#tK~1iIzNbd6uwC2`At2pZ69gi=U5uo@qWo zdPF&gZ~x)@3$7`;@9?*oH}X{BA3EO0;petgK)otB>V3-VV2Vu}U!$8^MA*#Y91C4> z3qKcQs6AN~KS4Vx=Le`J2xgdK+{9lUMJ|#rQm6i_hB>KN#gu3$_ovgZ7K>ZU8Ck#% z*BMGTYtgTxnkU6>{9XWJ(<4*qgr2IKCbe{7>DZnIQVUlmNaM<=;`LcahUQ^)oAMX0 zQ(bL6V;xYI*)=oi``FwpQqxll&giuh`Xo+i$DogufQdKsX%pqsQzA9LTGBTn8y>0Z za^Q$Dxf6}Q98ebWg`Pm;cjXyTid&(+0b;*x=O2JK2;q%5KBw>Cvq98_2~lKZelxlJ zmEaQi+q5W3-U!3JVLlgy-tB+lxv}q%q zXI}xT&;85Owv^>H)Anng4IidlxMm+C4kswl&;IO!pb?qaX{>#KGHQjnLp5DraFb+` zV#IA(wbX^wy(djcFox0QVfqywrYO`i{f%6K$IDp88+Rc;hs2xiI(pe+Rkt z^Y(vCIY~Kl;}K#5%0L_m5ca@Y0(oOEV|3^zef9SWRr=S8i>T%|CHjAEN^!jXeHUba ztuPuI6P9NvQ}dVL-(^(Qw%yHar`@~V@GzStq*t1L`p)E*ZS#9eawo&zA+hMwciNA^ zzfFAI$e!78e`ve*fg}Rr~c1!JQlh=E{8_@U32D z0xcD%Qu|p;JPb^&6D=52K;-H!?ux0%WKv{$njov)I;PdOWY*F3hY52<@&4fT#= z68<~(_fo<<#S}s+2GwTM3!m9Ch!7@SYv-tEZIl5%mfbwukazFjJQUqFY7zLK8vTBY zdw_J9X!PUP?(Kf-Z5yPixN1S@Sv~Z|?*UEahd`f4wavPZEojXbMn*d)eweV&?JZ8w zDvx={oD6?kNdY2HB{JGrFu3rNo0Gd(tK8j(uATsNb?rwB3}{I<`EZFb|8G6T2YoVQ zedO6nZxXuTks(%uU*UG7ttU`Td;Lj4DZREVl2*{pckxY{$nN;7Z>r@K3f+2mSMB9# zj!F1t{d$7?r-RKu@S|`P2z8%Qln@kQVasUw+|M4R(fK8vU9a7J#upx#9G5P*Hrc#Z zxMnpkT6;$1{rL$PKI4Tv- z;^SUrCe~;3X>PeM??FyQ%*}2)wQr?2^0B1-=M6vNZav+dHdVc5Vr@tOo)7X8@e&Su zcU3*p`ycaUCFgp3F<1>u!Cayil{M%u%^M#FLPD3$V$aEMU8bL}EgJ{AH?4F<{DP=( zN~#upb_))v@!WX%nGBkL~0CmP?jHG_zB!Gq&2kR*8S+-+tp=yl+8Q@|=_& za6}M?XQmr75f@g}4PmNHLfI6aT6^m1q<@qcGU?wl@jm~w42)bSP4bbVEXq5EcgvQ3SYSYYO|Rlm3ci&yW_k@4chb}%=S5X9vWNE2Od*y!*bz4Tm3u#a%ROptW$qM zn(>NV0i4}54U@_=ns<4oP!O(CTJE)*lDb7DoP4>LPbtACZyH(fEqI?O7X(r9i1Nb; zXY9o`uzM1PLvc7oNc*gE3+;Vjqe7hVY>f_jeNLmMBsHgdkXNUwEabwuLZ zky9L%!D=}Z>)whk1s=PaO&^~2V_eRod7#V;nogda&6ErXWv?8ht5zb2pr93sIy4w%*Kono|ChHHr_B0xUc7Y~(N zDd8|{!gU&zqs=I`-O_7C8hwcR%~9XP$5-Ija_7jW6!jtlU`&_IF!)bGf#= zv3Ol3q0_Q)zSiv`6K~h;NT=+^40z~GHCC`HJr?_Uq>xPGkk{>VW`}G&e(+I+zBh0- z+XoiZuzLqXSokldwau%VXZs11aztrZHAC_4s8>+$c3w;}I34>C`a6;w9RF*J1V={jN~%!6`sGsAq@`eJovFf%orNY#!@ ziPSNM^jQ{ZZ8?P{3-W!v_USLYva!4hu8p2_Y91bW;X^Qf+hxAOUXJl}xs`4^wD8R1 z?>L|0aqCbOSOh0Vf3##)<0SMsay*q9FDidxtL*dvt>-``P2(&c0eRf+8;d&zq`R(zuX~n&}0Y5%Pk*hFF49#%2m1ZL{gL~|@=G(&!cIun+ z*I=h~ERtC;9k15C5RN0a=SSYd;2H=1XHlGJ>@iZd@PL$V>0*wOx1z;WO3&uDz}kOx zeohQsZ@Md57k^Atoj)@EZot#_Sq>b^{)U|SyEga6wIn4Nap)}a*Zie7Yl#OqO;F2$}FBgKK$K}GS;Qq`g>gUj zQN=neo>yvElm4)P46J??) zY;h_K{pL;%)q-NOJT~W@9$E5@p+AE7%a$EBiKG8w@f*QuHZXUjYQOmX`4fzrOvaKj z5JxREQ^^Q<&;0gNlC&s2xn18npKL$%PL9ZesZPWItTIllq!(83?VfNux=jHFYd+BfY*SX^o zTmFZ)i+eW*9Y8LqdCrt3Z}AFWk96?Qlk`qav2?Gb{9-=b*4zx3*8Q~SIr@~h&yJYmL~46^#OiKVa=yqv5nWM)5iPEIGU!t{_<|N%vRck zHR`|UQBQiUNkw(%t5l`?9QL_4dXhuLu>=RR%I%A+!7=KhFtT%nl(?TwSB<7dml6cB z$8TCBGPmROc%|D_n!N-fj|4LB*#=6+mD=^Pt|s}#kJ*j#vP9q4-PVOCX7Ga0C|L#8 zo;5_4$4$TojKM6+)IRFFpa1*>Xdb$<^Cx%;w2K}z)-6#;y|h!t-U2DP^kO0!quXcX zND275QAzqwaw!y_$G6sDSodQSrHhF3)h3BkZdCRg8Kov_{J8p*@QPZAw#;{RM9HaG z+`5-2+@!x7g-EOH*3294wN#EaHulavVOEn7x}0UF7)Zz0dy7dCRXA?cMpznIt1PCsZX zrYHCHi0qJ{;xIAtwcypcat3UBZ(!ke72;;?iI?U2T}<|*Js-gGjF#x5E|QZ%?$KpT z9>>#(d-{OC3JUp5_~uS;B$5u{-2dF=1S#I;wzd&?JJVG5lO&QuJ9JtObJ7m9 zdWu+r$G1)!(OyE(jT8|)8-Y3|ze_JIT5%|l0P0BO;g?7#*9XF~U#E z8HFkSx>E^Qbq3n0+F3j=;=#I9eX$}!N;y^Wq*H`DT}5sN%G`fMXoB`qIbW#Cg{wDa zIz%fvjn|bDPyBC%_DpZc!UpBIKrXQg-5n!Ib&0`?^YBQ5c*S7~e7!IdLRE7OiU?_D zGG6J`-j@#ht);ig!bj^zJ(WtIDZe^EUMIq5Hy)rOHc{$H7Qk>SR09^{VV4YIyZDNwalpM+re(1k z2tX&;;nO|sO+BucbOU(A{66OOvI3*mc-~L63@Ml1H-uh@bbxA|HDYxvd(-U4Bm1lv zx?gZnN$80!&Z|fyUWkrLPT9@}#!k#*O1N{FpGyoxC`mhs#YC@YtVdhQ7l#<5H8non z4Xp>&n!2LJx!2|w`DiiMkKKAB-2^?uaUbx1G2Q0D6h9r-fbvx^ioAX{!yP4|4sTUn z++!?D!}?O2HvIDB8|Q1Jff9KDmS%dbsK* zjS{*NhTvydSm91+;&zNhEGfmL78h8s_LG79Uq=CHBKox~{aK4yO@kwuSNXevo~lqH zU?zW9%TP4fO$fBomEfOQ|7rwo_uWpOol^zcb!fL0SZtMsQNo566$S#KoH1FI&0p#} z9muCyGhXH0{6G&ZYIJ|D%D@u+rd1l^l1{AB(wq(4@FkHk0FeYgaZP!0-01fDVF$>^ zmMCC+SIDPuV=^sogR=Z{vuR9ZKuzqxGZ;X!8<57JZmQ1Un~=(y)XDQN_opZiJeF`~ zfj*8Quo8xe=Hf$|6AYhvpA%yHxX$N&EK+w6cq3$F>xWK90^-~Hh!4=fDjFP>DbbLa3PLHUHre{l`5iR+6{Vkc3^>{fC|Y*EB57^+kMBQ_3rpzb})?qcm{TAe`G`>p5Onrk#MRwVEa_! z+X43f^A0l7p)i?ES$|^xU)EO`1Z-c}ed1#Hzis=UWssKyo}l91XWIY6`i8$u>H@H+ zKb`jnZfyv)E+W+8gQ!@T0Vv=SASRSdUN)_nMF;M}TxZJRpFA+(igb})81QwA<>8QaNPP}K z_zh#1=SRzHVaoJn(%R8fvT|-wu4*M$Af5i3|qDpnO z{CL0o00q*IDpvpuH7j$Po|-Gm|5 zY5N8|0o!aF!T@~byT2En8@3P7frmi7!xsUySfsP7I7W9d)F z1kZ9Fr}rPl`+>ialL>JP{Q2`2;5hzSl2|7@{iHx(WfFg+4AE^p1i0C&(5r>YV`R+Z zR$z?qPC8_+?e`yGRv&VOfJ_mfXo^RS>W5W>BC3+{F!RBbF-zbV z^Ba*%Kta6p9p!CR^dJyhMFgkz3_AfbbQEFmJOnJr?V)^H9LWzRW{orJ{eeQFFJk9& z?Oj86G%P(+17lbzqc}dj!PRyB7~F$y+(kV~9?Jfi*qe&i;ng#`!<)T6)rUbYpR2B{$Ix*f3dwjmzM!x_Z+1G5*@#e2al%T3UAsO$PF zvTiB=EO!f0W*s&Mu9*nJwFI!?-*4^^N9?mk?MtT)&3Iw30t4r0KlHZklUZjT2c&+zV&~6zuo2`Z1mf* z$Kiy2Nc=4;C|3wZ@2icbpohbnuE(8%P`?s5rJUR-W!G2iHWJ%3b z7y0pCIGKZ<)ic^J(dlo-geaYbmj0T#JA&lln)f)@cG zsbk=+fW7K1Et!j%ujZBj^7>owpXg;CPSPskm~^fFGP`RC0KGuHc9}#P_<^$4*Hdsp zFv&yUnVE}-+uuonUHAImCn>&-k`%#MUx9|eS0JD>PNNGbYG1RP397mQuIR5R9Cjo7 z3k|`(xvz=IqPo#TIH_Z3?mg=LfEua4VunX}lnkJTzFV}-w?zwGBPnp#4!xPaZ&%ck zEvOe6Ww(oJX}IpA{HSu9uWk5uMJE`@IeH*YqowKm%O~0_^;ZI)kAk+OmH;Athpq#G zKK@pH09rDCu1Xwa_Ds}P6bH=QI)04X-k_p-qo&XYeO#dPbIYxCG2ME}s6E8Zw@}tX-4EJzE;Pj*q8G_upQoUk(__u7si9A;SSUZtr3r2w5F= zUXQxn_)N~xC+Eks0H38aejy@R@wos#2z)*?C8V*#l%%Koe$@$ha9e@v*x=qHX|m5H zpo(9-2Xw8+0U(-r>hZ*48Dmz6__zQ99f#4Mx>1g-O}0;^iq5`LFL z+z@YPT>%H~#VcG)NL4?=@{MQ)Yo??lNAPT`Z1S8XU@^kH>}(6VFZ&OBJC&OBwIo;< z=Ih>d{NZ&w5w%yfh`>F=GO3dQk6lw0^lBj)`QZ~ND7$pL=H*e%Y!=ay767K|Dzv1t zEhxK4I~Ri0t#s-HOt31FN`Zh`G}i+_j-Dk78AbAJ5VAX4N4{SI!k(V-t9j%}Pes2K zii#3#667#Cr)H!9C6Vreq|?w@76PwI{e4P`T=68&bI>pem3Xu`0Msr4Hso#XbMVk-i039!xY>8^6S-U-{YUXHMdl_(*H-XS|wHfrqGN!Rtj1vG#-JOeCht@ZOS zD(A>R5MWeir|>|i@^e|d)T2)<9E=r=8{P|F%}?CEN;!b;JT4uDG|TxEFWl5G3lF~E zLughz9&A1z0oUsxk0Mlp=K{sy#eH|C)QDp%Mpj)9v?z@ z+?m{I5yE$VhhOe+>_1+A|R|bR@ zISb5pgB-|z9&%e=s|)4!V6HbR0fUCyx4_lnuNA>5Bcb^7C~tp6>Dm4%(T`{7-g9-f z_z^TI3qUqFr$2?sX|!l*K9VV-@cQA&2#L_)dVi>1x2A` z$vc%K%wydmTD3=N{QDU|o^A1GzcQMFY!QRnvh`7~=!!7sBBERNZL5g6JG{d#LsPWk zV0cq@kKh}!iM|Myrz*uFP%T*BN+=2SP>uW?Q5^GRZt|$ z2OL)m%$Lh*#)%?gZE7S}9g5c5SCand?6#Beltr_8R>ppeUVnJ~uDy?2AXhh+a(-+k zIl~4IlUBkRlq)V|$X<*1&8dSp+yMS#Ue#(wkT%IGyx7JSjM>UG7*BqL`x5XAF6X+t zdq$n$O5MlG-C2M3O6VLW!*O0mvQ1G^$r6si#h}ZfKa0CIuNQ2Vn2e0F35h-9Eqh*Q zJvOx0Phlx7mJp3Uu1W|;>(O3d(HBYhm2QeI5oWE{N4nu{9*D>uh`kWKFc=fuptbb@ zt`B~Km9$hvB3ZWk(Lv<2*bZ7t0uZn{*i<4+f&D{jCADAuQMlo74DB}R0Nb6fVZlEC z{F8ZH&c*UG?0wZ>Rfz({rviQwf^3QsuB%7Jn7Jb)yy+j`?6)1;z*3F`{S63akj3%4hlBwIXNJaVvdYEj%<-v zv2Bp=l6RB_24!-~q-K%O*jr_wwqwNM;SY(}cP(;7q>REZMzjB1DbY?fomY9-vk@oW zGtilSX$Hwe^M)Ou2=Qj0}E+un=HZ3cA7v1v&>F3+6 zBOMugNR~6=v|*f=`Y927Hj5?FHDKT|fshCVURxCA8b#bR^gHA7^^xW*VUNLTe;h)65! zdgps5>-*IxSBN!uRw?MUoGM<}X~bvvsN$bygA1`V*~Z^SgG4h3oANReXp=KQ8v0hk z*0LX2JV1(((bKQU-6~(G$8CAF4q-F+5vi+3g4P;Q?d6{!fq%csMw>kT_IUfPW9vq& zgWI|kwn$09%IrbOjR&05^Ttth5P?3799Atsb`n+^Pb(}ho9Fd~8564@{bC$gZ8wI6 z5pjNYTQr6eY@1jCI?q?u*eLqZopu3xYjXpSIO(KYb;Y~98mzCrMai6ZQg>mv1$VbW zjqd>J9Dyo{=g7IqnbpbjjMZ4EdB@N3bl_{5>|ffQbDrkfq?}1`oV$$ z1sBsPHpAAiN@dj& zms8P}02hv^S2gIo zF!sh{PvTJps0DZ}RfBbzd!=%BN(O~!*Hm)3kT;33f}=oa9PRtzO`*fKC+WP>Qh3^1 znK6H!uS!2xU{S92%R6Dn^-eY6pAp;xSC<;Yzv^>bEmCHm&Po@8c< zWfx{q0m(_TVk$81>REAAG0a6MI*N`(3RqXoWtYk`Y^68XnU%_s@V6(*t)n^&M?0g- zuGCUf2IYjvI|+HO+rCJIRQ#!f6YVpdRlFu3>Vc}l z#HwFeH+ z*xQqJxU!tGsxnbcuJU2tXG$HN7H&L6&h|=8JE%gS+jG^718*#gM zTO^aO#JQESv;ihyI^QMc#!uVr;nmVS)npH6sFP4bB0c|m<-Wy%g-8e^7xG$eFSnC= zbaJcJzCVP1gUu`rRS0=-CWv%OZiu)xCtdF~Z=ov_dS*E&p-$|}u@ne2^Il=opgI|b z&1_bi(arm+a_|j4P1rTEiM%>Ckvzmv^ozI%$?}tw-wZ~4w;?nOifGfor%b^D>-5DC zq4&qZYMSe%X8WT1ZZOc)gy+wj$3e~L`}ea|&MnKb)QE-XVkyRD8YgIVP~mFynOh0+tP$>}3vx!Pv$zM0$VzP!b{!a%dC4TrN$Isy@ga`v}uXQGF!Lc zMZ@a!d8azN_+iSKz^mPS*jK$bHifesQ-*7s+_Q2}N9<-c-`ot!Bt4u{A_eHV`Peg+ zCV|wiCoyqqcDAUoR!?;)lC~v_1ok&lW@PlH^@z#L1?i(<*mZVC;WGmqnm@APB=!EHyxW7F-TZ#AaSwnNTfk6KA9Ou zz!a2&$esF)!|nH_W|?0-<*H|$)lBPxK%PMvqHIAa{3*ikjEZ?GmzA5+6tx$nJ~%oBu7R>pUH_G?D~{vyZ6@SJ>osAVn7GY~rb!qXs~_iZAr6z(P6hWdeO)RAjI zcu`Gotb0mCU58vNhwM^V-V0P7;L_V>rMj@VmHE>(i|UX0;60C#t)A5I)YLpEp0Pqm zeemGZ_p5c3uMih&_`;VA(twiLL10AaU^+@MM z%u=WYz0qb77GoAnsh}z5zogb>CBZ5bG-6?yNOPu6K zgCod>1z75%)1bSq6FSGR7!G|YR^E6LA^dPyU2?jPFRn+!2}HI?)RTh9g-L>^J{mv4 zRGRarxSfU}j)A&~$F}&JRmcDwvd6#mW*;Q8UCLE70)I=ZtL9@Ii4J}<1MNQU{eU8t zoAoRCB3dEEwMfAVw5h(xjE0xvk+7Z4r%a2+e0|}u1Wuxht1$4{+_sImPEmfc_P8o;yzR1)n8#c^n_`nkVA$&KpYd& zQ_5Dnem(P}a7b|6CN@tZ)s{pICJEG|6zsl-PN=;sZ%z)Cezor+ZX&)@OxN&Rd_yU8 z@gTuve1GpsiP>yq*1no#6{W)Zf-5edP!{J_pc-Jom$zAAB%hX16jBHkyjd~7=zk?D zdHHlwvsjQsSIM?!9ivNhP>j~H=xU+NE1h?r7i3#Zs+4QyjUl$GP+8Jy|JspCPlu6U zEx3hXy#<3{LpD$=fjkAf3FneX#l4UH9KYxP+|T=c?9Dq^%$ij*-zz@Xc^-*+$=mbrM7iGc+|mWpg|g`)q~sm9 z(~y$?9~OY+30n$gfN%-V)VEB4BIei7kKd{`4K7h1PS;mh+496YIdreDP1zl*wG;YMeju;{qUTf$bgIc29ep80o5 z9k{b9BuUhod|hBUaCgWxK7?I6scclk(fKan_=X->P=ia=??AW_Rd%SF%WUKou~|%} zpR%3a#*~yvffDSI_DwD3&H!X8Pg#(WFM{MdvjfEu4>6Wph$Mx-UaJT^;z|L~_``ab z(4i%gi+zvZ&0D$e`}6YdV%{20>$eBnXfbNLa0+HYNrck`=HJv%#SwgmY5e+moplWf z_APr~mUBwM(P&3xr9-asSBDfs#j^^xHBhyx{y`Sg_k^+^@I0W}n9IIMHA5=S!$TzQ z_;rB_j*O1^F(WFpadbah6V10c6>P)dI_xy^sc%s`Epe1S$FdbOWqWky5)YM2=WDuD zH9oN=8>s4^+?(7Ao()-kN?9wIC_ct>=2Dwtq>AhGTa1p3SHyVTU|Zy5)@f*AN`cIv z(aA}D zajq`Lt)0>MYX-ryB%N`mQf&DKb1>x$xGM}}i(6#zMRV_|(xFUi#UTG;to!b}{h>CcxN1O4aCvILO@UF5)2bH02mct4Ucsad`33F|=>Wo)h<8HGol#(Zu9 zwZRYG##)mCx_!Y$P0axI`d%r7GJ<}p0$`Yb+S{#I$Fmdd=g-?>U^XS?DWQd@?Y z<@EIcuN+G)kRW{>?9DCpJ~D_t+VhmKvsYyBM@DID3O7W{jl&9@P9}k$7$Ceoj*LO| zWB66Q-r&_Q_cM<*_kqa+iiJKh_iCHHEOX6uM8<~%SO^j`Gq-?{8+Tx=eRpmcuz$=>itE|@;7b6h2 z{pU<0VoH=5uyvHDB_C^a=PMXqn>Bwal)c8!ma(u>YkELL!R6^p$DUcd?tg~p?XT#% zJszz@QQGto34Zjg3kX-sbJ>suOr#fI0opA0oucQN#mU^4%#a>}0uKMryofm(gykAPKd~iOwW&s5Y?#tD(NLU$&Y4}$Y zg98WMlgIFj^faR!3B{L14>t^ntF-vS6d|MUr zK_@y1_!QvGDLX+m$RjB?!=^P7y{KAkim-%T;yt%UW!>9SxMykB%f35`mskIuybl3m z4)^U5vupevH}nzu;~Uoorx^_i z(&di%uynz5D}R~$0ys_tY@IrXmTKz+qdQoBsv1$uiwwHN_K)H{oBtydF@*iK7w3afyQB#yf0daS6V8{1|RfPsaGi%beTH}s0eZ6+;pmC zJKl+aR{CVe&FQc=GYKV1=%pJM{TpGK1P~V=2UhEZn$4Ah>25jkS?W z;LkfTK^QBJT&yU19Bx=)H@LiMr_k?Ox=cL7KA9_7i;X_LTM)!YqiTJS_m*1Gs&V3cEhvcg7za78rfH8cEdpimE;U!431v?M z!YwCOGNacn1V^_@@=`8#qtF3oqI_$IiEu(@*Jot}ifNY^TIrfPc&oU3-c-XM^ZPjn zggK&ww|XdoB}v?dGGpFiwV8%TRj*aYMwJ<35~qRFuCNrN`Y<)w0=#e>q%%y_fR3JSH5QECagFaqz zf`w2s{LC?f`(TXrpa`6`GJ0k6Y_pv{*JN1lbM zl3>D@kfeP0J$*c3Bq}s=#e#SgGA*$G@B@E`h1j_iab>gllL)7z8IAY5kYP9nK?V^? zztfH8tB-@pOp^;Ps{QnK{471Gjl=n1(`1%p4T$tCm>8na_;=xKWN478#n(7soj|%0 z_~t7^$VS~lC)_gVg8<6`1W#>8$&}0a``o26o0JMw9eV}~-8y+})34qM^DT03)^9xA z<3g043E-kn>xq`6b|{3^jHv{DezWoJbII|>-=@$`k$84S^o2DAJTM9F9@4r>(-2j{dm}1w zU1~a0UWCV)^O4fHh$rolW&$PygDYH4zM$#nI}Y_TjTo)0rZDv=V^&|}P;@)2PWo%z zmp2sOn?VPD;cr~u+a{8e-PR(b*G&3St@Dnkju!U3JAa&ZK-^1EJ9 zT?}^YjVz6_6oU@8)kiIpLzA&r=VG2rt*y~0v6R_5lQ<}Neo3GheVu$uz;lE=HJ;sd z_gWpsbckO0)H8Mb93y^nB5j4U{o${`J;X!rjVT=|s_;Q>|t4?V_ZCCdZK;KN27`ag=lUOZn0E{Vxl4o;aedhKL#Q+lHK~q8j0lk zM60M#9TfGkrfu;dTbUldc<2L>}!P)-#~Pnx=A|dd-4Ki^{3hl!aRMvFI|^E zvoPtpX48|p&d1s=@LPjO(v-EUTaKt#8Ua58?#{Ns8Ur3JKwu@GNn^wh*($p-~Oix_4-{j za{-Cez91B;+UT|~)6jtRWL;sa@3kg@&t;z{GxR%%JAsce zK73Pxa`7dTKs+11iLbk+T~R2i>8XXGw2W~&?Ye$vIOjS3!-WeMNru>g!Q#KgwsLl5 z?(xUvoq0}K#HP05cF?Vddb2hWa)@|&OVCRf1r)UzjZ4p3$suB8uOX{b`w@Gb{?Pkq zk`SaY|DRL2yySAIq=%@D^u&>A>CMpE4&bw`P=A>D%MjNO<^T`-6amomp`>_d6x zixH*5GRHAiUGnMm`Cdc$Z`ao2jGPXdwK4j0-ohVfr$^^=hJtbJ3ZjHDlEO5;3NVn+ z65=SRvNbPm(Y<3!9VV|SRuvl%9bhMgGQ>)HaVX4mq$8e`CTJw#kZ$zpy0WR-rr?qN z%zq)T{H5J_eQNWE_WOp(NaT^HSkv@m2nh7Y)cUFHYBMsQw@9ch*B{Ziu06fXF1vLy zj}qLJXnsqh(+zA7Aj}i0r(Zp#iC25G(QjKPH^6 zLkb?6SLyIKItN5T*(U^;?AH>mAfC!*J=6C|{`m6cr^rW%DRDC~#Taf;$k>L-RQQx* ze))YwbvU%$ZF#0k@43VLg(Bl??r0hC?8FpmQm3zNZ(X-)N?dh^`T!nCWt5(q+Ae*U zB;K7N`4ZJ6;&Wk_7q$47MZh`_|Iz0$D(ibKU&|uv!FxHk!0s2{b@lh++^k*l5_v?` zgVv+Zbo9XF(I}hW$vAt*@8uH8cu>N^o`A9&Wvw;`PCk%vZcBxOpqnD&JeYVO*L3>Q zTn30T<4!PID2o^W3M8DVE5^qTdm%_f-?|~}c4&IulLT zlMx`>%s0!UV=DAd5Qc6pXx(+j60JsFM-`1IyDs>yb>ybCD=WCWCn)jH>q ztSC~W0!TwCP!djAaFMf&tzycIBk=6*Wo}(NqH(v{q=!t-#ZN^@4P|hn+BY>7I-pQB z2Rkbci(PR5pi+N@roEeQXp-`2@1`Q{#b!ttJ5{&F#OUD{S55kGYk;;mDPhrEP zd-Xe6WSt%i&co-L_kuVr)D@QwEe_hzo4jX5Wv5)szoj%K%p(*}+nsZJ!3VdYDn2!T ze6#<7sHKG?DXhh8(V;}^Tkj92xG40eu=>Wbv9#ud0LWDi?}V?~zr1cJ7)dZrd2RiL zy)IwX=j6*SEMa+d!bPzrZ0>i>3RyI_ETlMJm=dioDj_dhO^oD4K> z`(OV0e>0E1z=^9RS?uflZ@ULhTlD{nr)>d+|4bDB?V9vvfRRJt4M6bhk-U7f{x*;_ zsCS=VvNwt5TkxkxW9*Aa;hxX`FjluqizrxJKLFvnpiWka^{0%K>d?Oz^^8N!g1q0C2c!v%0^ z_j%+2d=l+|wlno+O?}r0ckktfOK}8=I{-obGUM9@7BhmrbxzBYz zYGkeeLWduU-#*-3bOU;!lNpnKfcW2XN!&9rJkfA@|BDr$?yK#**S~$PT~q0C0K(1Z zB70B*K~MNgC&@Scq4^PUdu(Jrz={IS-GJR@Jz(E`r6d022AKPJ(_T+S-A+Dc02hyB zW)N=ZKEO&<1|a}2NQ%UJ?Pm4jA98It1|Zi~(}@2O4h0;qcYq4Em_eX#` z4aD7YxmfjUpv@b7{!zkbZeQy^Kw-iNBn+S1^<*;25!^UH&$Kd%no4UnPQ@7bv_FaX zqzsKy34CN21|I-D(qrk+H&u)hmy*!_nWB5ocHnY$15;Y1Mo6pYZS9>}fyZesG0d5N zz_=nq5DA&XAEz6QACEH{@|Si1l`8J`FC?aK2+(rqq6#kuSi2r^LKi@BlS-{kD_~#m zQBuzXNY3h$zKZ-EAYA#?zV`d4-{MT6(41`4p$yBtOv@qg9IjSHMZZPx7p_ZRJc?lc zf{#9XQ~~W22NWH97$5Z>eLDx8lWmh7~qb0rK-1^P1vzyjG2=M4=X5FQ;$TG1de{K9%*eNk6jP^lu zWp@)0jXYhEF=Rx=xym&6Hfaa^=_l??98LOmN=@ZZy6TVekG(SXfO)Lpr{9+UQjGZL z0>OL{zwnA@T2Vj#roi^;Bg^*GmkJYs%gW$mP1Vq`f%zN*%5z;6PIbOoD+tZyw@dVS ze<=-4ZzJ(o?>GLIP%w;SNagabluZqrU?cSoIZ#+R+ zf5e%!(wzp;hF=%L37}fb~ZZbg{s9zpAkD-IuK=V2Uzu zf%^#i@79I@=T|F2QW)eeoj*xv*-;$+0KDw7x$9^2j5QO7@(h3IDCf(+u}pBVxxB#l z$IfRvfT&5;;t5HWB+-pUw^=Udfd-l6p5R54S#9=PMkhqg1}vQ%M5FPOxr^3T3tZ0mcz~dmvlXc{*6Mpc+4~;%a;++i7UH%ZY*FI(O+j zU#Ro?cZ0^O#TTy`20Um)!u_b*R3(Ip!xT(g-OMItKpd_l3p=+Ky`L*I-10A7S)RF8^Xo9@9k8>xk z)#7P+-2)YducAm8_=Y>ch?*%oQB`GY5FYL^v`u{e>>!~D)0qfyJ;pzIdhk2~x3!<` zK$>MYp=T#KI_Nd7O0(_=7=mieT71yFeFrQpLgFRUMcitHIXJL0#OIa{eeZe`Z{ zoJZBi$^d*zSD?}~ClzX+k3s7{rKEVeKqgb-xcdNn%QpFZkExGY!g_TnSA=^4P(gDa z9-&bkq1S;Yc{^9xB!Bn|Fp2zCOkY8N-xOfavJpKGsew(S_;;nA1xDN2cEIG zyQYTe2k)YNc*e>sQiV?5KF_K{DnatJKt=RJ0>Z?8Xa;drBU zCTSvn^!SF?T z_0IXD0?oG1$a_r$#@FznrH+LcwKEG{rO`5RH9)Ff|_ zyr|HH@1SMr2VnX~yefMZvTcp{fZp*^lq}G=xMp>HYQoNO3rq*_3+sE_$eZNKY7RLJ z>oW*ZV_7C54+o4)Tz-BLrZmG6#eh?4ri%w%LM*o-m!~#pJY$5qr|6nLrIX6)kItFB zVuF|Ze!rC6@SS1aIw0igbYs6EBUZVee{Rk8PYbz27^Hjp1vL95mK-zQ(GA}bR^FMB&2K$ z37=(K6PDqndr>;rzg-fA!v9vQGGY!!xCo+Vm&C7pHQU$7I%vaa7`3{1Q~S<<0b#%SnUrGQ8j45^4_A zUK6K?x#MXR)jH`lwbjxtS{E<^mKr@wt_F#l`cz#f7Kvjngu>>Zih_EIQ@DRb_F|W= zT5~mVPv?mKX%e`56JWY!YYu%HsGc~aiAWk!0nv*O98nfID74|5%TVLFEMI+V2>ki- zqHE3|^2z#`$7s?w&OK9|#=m{3yvF$4kfnhLy%glWh*QGY$zC8-zL?{a$2Vcj{b_#W zn^g*O9Z@_5l@Ybt^q#jibZ#a|-&^VkvEL*W;e3Yo2XecvCb;fq4Cx|Vf07d;I})_kUQ*l+NPoGasY8RRxM zT|Li<;}VBN=QQfO^kX+*Qab+UtkPF8H=pqW ze;jmcw}&gv;t2n}1(xjNB8`P;`*mLj7GbzMKLOe#ATVA8Us|+d9DLNerL~l2%ng6g z;~|yfP9zv%W>Rqd_$T7|r9JaDnTSsFduYv~zcDJ?*V*+DgQFEl8(k866IJ$4q4cg^ zy(Pq$NA0||>4fu~RJZ@c7GM7-_XkloD&V0}hoFBWp7?!SsCPFuwWDYLTf#c)pyea( z55wwrhv<$#dRBXE0^*PUqKX#kUtaQhAuHu9g!!TpP3>vA|EM?x*Ip$ev?H zZb!%3_qTHAcKx~uxb4+=wf!CaTr(ce+lQ)^n)d5?i0lmizV7i@kgVpmG1--suhg6r zhz0+dMMg>Orxw6X>>V&XHbDBK{5R-KyCZc0h}a9ZS5GU1nWcGIR3nCR$Ay;0c20Gf zNbL#`d)P(>ddZnD*dgl4y@VA6vRugo8E_D+LnQi`UNFkEoGvmMLl<SzyLnzzvufZA-}6$!5&vmtNY!jKTI`16sW6bts0`m7J>q0WP~I zRf)kR!5@Y)qb5V?Q@CqAu&NM$26BeY>BLv%7j>y`UKlw~K2^av$LlWm(kl#fpG<0P zv315P`hV>>AI%RQDNSpY`nTaN?4L_~xA-mjWGCV58?ypw{^I`2(~u-d#?`Q2o@@Ir zw%jFZR-fJtys#d-v>vdX$g8W~B3RIsM*SQ~>AY$GDPM=1#oQl6rC6`8(7W}1j)2iF zB0_I|WhN1ZERl``W`;Pqw(>u;Ap*`!VND9hxwMdK|3~5QNBMZ8@A-x~e~D5#Xo2an z0A6!t^w@O*Ze*P>lubv=`-0Mcyc~`Kj{NTW$`mo%kz{orb)?6p18ivVrMQ$4$(|g# z-pcJ9)9=US%Ep1L&pxPJWX?TI2M8#3{@M;saxaTr49kB*43aJGVJm9Z6XCC}RM%xu zRdyUbgQ{gsp5AF11Z0Y(#3W4e^i>Y9#7k(L#E2#);!%d%;mWr-*KbMuYRF5IrxUVT zh@?wPFgMPh+~QD4ZXK`c_0pO-k%Ke$YG7a_x7r>Hlndn4cCyYf_3>r~a}@|1 zB@i`MF&ux6ankA_t# zb^nG(5J1(;wD?*!s~KLY&cEGdIz`=s1So0QF`9PlMJmTo;cOsF0;>xpLE|MCy zo)(xDU!6=!fAsqig3-fun-|DFp|*viBiwTHyL*xwkW49beYEH3VT_fvESd}<6=qDC zK$9ZEuFwo$(QEqq%8TX9{`$gbk=q>rg(Q^X67s# z@crb7rnH_DD2mtK68E3z(@|)VAHe*}2R&AcR8qHn*+vED@s4(8C)jd*U=w zkD2(BO{I;j%0jd0Tl^3)@x0eZPI5sL_qv5^ry3ie9Gkch@}2EwSER`Kh0oY80$~lI zU+weghRUA#7c@KFK;L|^{>6kwPvn~yV6(U_IlC8koo=qQXWed&{^}LsDbKyT%`^$V zGqC*q?3`rja`p{CF3lRY=>-uNHC=N{M(f^y92a|jpg(tg z964nb>?nw~>V>onw3_LT=$yeAOe{#%Qn}5fada*py-VVT$S;@98BwSX5R>c z(Y*JQZPn^>M9qK6l*CsiWV53@KDc}wEx0ylznAm>3^wJT zqiUd763S~H^(VXFcfO$%!>V;x$~}3h=>DUI5&%33)*4%*#Tc=z;mkdfRS^9+YLu`P zg~e0yZ$ixQ2oQ(}KO8B+vjE6g8ohgU8@7NNn#WF2(0zwT*U81jvWJ!y%+(rO_}8BY z9O31ub%}vILhVK2V~0mY{-z$C=O#pux#V7Zunw#(J)Z&6&deK%OIHEig!iaIp9%b;*jBX>_ws z#VRGIPWA|l3W(Sf`}@>c)2b=a74F8UG58hgKKA;WC#qgki8AI>VD^kGO)d=v2IIgq z)_D+OBGxO^W}-i_O)|SvBRp{8jx;B`->VHo#-ODs$MI6lS;(%wH7d=e%FTdp`)iiL zkrNY^$71Z;oj&HnsC(`eUQJqTmEvVS!z;ZZF~9S}Ro#mUNE=dN`Ou%&`zHG324q9C z)b!Wr1oTFXx~SzUzPJ<5jn1VW=QE971$aFJ`%9~HDdWU`5F$re|D{l+7fts9D1YJx zna%(v4ck~}kvKc)D7_@bO~5L8`S)>z6>epe3%df0Le>L;GR2jd2}Qdc_;c&5uA0Gy zOgMgohZZp8Sthdnhk@{fvXtF+lvlB8!D>B}Eury~z3Td+Q17xZfhFYcJy8|nG9ix` zJYk?zG5$`DCZ1HNaJiDs`3Wyy6T25X*ZdrnQ(9F+AmAFhO;}ktyAhjb-v81IRc1~~ z@y;yITHVop_?ot759%baAMxBy*{i^8Ea;pBm)>0z@3g;= zwD%+Vucl`dC<}edGQE!jkVliEDmaWdT;m-1mA8pj3nGW|4B+b*YNb+x%JSlFgNpFG zcA}7}GCUYfj&(L?Mv|a`!5W5m+FR&xd~DFGqSwu$H~W>pM0XhwOugBm52fAi`ys}L zOG?p0J8PmBsoEqwRu2|ZU&MyK(_cTm%NV_HJuMbl92}wfb0T%##h%9f_-Sd7Jq9Ad zDd(1H#mBPT1+K>OdlfmyFLxJfM^AI}oq-Xxzm%iET>QRG=@3WCQ&Gw@Yqs97rO%Y83LItr=Jy8zr_yr8!-Jdhn2UpO~Jj1YZ+x^VK#3&eE2=P&}K9a8n>1&?Z@vpbxtV z++U-#v|vYDr^(_hFV>(XOL;xf19qxvvYar6a6+k1Vy|#g$SPiyXO{lHlBYLKo&=E| zqHGh~W4$T=uHZaxTIQ#DQ>V%jr&_xtJ++egeeGN`;BK`fpt{fwSly`%HF99GjgO^o z@y+Ew@*0^Uj^VomRKE2GD?kzarmy0}qrUsMSkMW6&|o`(SKv@KEt6Ja3p3_8fr>8a zioD|pFhaets#cp1c$(HToZ4{G&PRxzDlr^gU+ zfOw+Cu3y2LzWAr>FVi8&W`G*QxKgjo)H{1Ss~Y~V3Cc)>n(^+u-wmwsDGZq9U)gQk zW+xs|74Bz9bmk_`SG=igOm0GOqWAG{=6Eq_U!EUE8GfuH;*g&|T2v0#ou55(+Cn)G zG55(26FCYE+j|asZ{|%DKtZ4I(Sr59^SYrQ-6~7~52gx*@3zxZ4b691<7P0NST84| z*Qy@*Dc&27(;{XO@KIl~9e%^`-n~Ca42Yq?Qxpsuy@Ctt6z(22;TC^j?DK-1?^aes zH@3cOpW~>u$a~SD_gtwe(z+M80@q7kbQG!rC63XU4xIU__F_eyfMP%@z%)LY(;+PH z!%>MRJ@cjuqw}=~7MFwu+J54}ct%LvN+YVJLb~RDLR4OqvPLs!Pyc-iB?E_zKwn+^ z>i+9S28L0WG!)9!HHwb#jI%nPXP0$=IDiU53y&D(Ke}(qVZr5M#&ramtzJB7Pn;wL zX;G3f^_VfQ)8Q(((Iku7plYc#KN$Q=xad*OiN8MDnMy|qX=sQ*^4A2E2BO>#Kfo<0Y=UT zNGG|grU+EfTQe;D&%WzFFBJfdf#A$Ip1#%pTgQ_oF?fh%924k<{Oc}GAGJkjKF^l^ z>(<9sDO|zhzqLvK^A|}#8Kqo_=Zx)t+kG@_n(AL9O@Q43ZR;dJ*JTf^E~)x|T#$dZ zKDJ63Oa(Chx8s^(1UCDk=_L`M{KsAU&-VgO`@i<|fBwt=FHW0G0>#M8Ey6V5?Aywt z8U-ND(E53l6ZyZ%%-9M6*U|R;^5EB?%nx9W-;31TGiB+~Ku1&jmjEK|)Bw0wi})Qt z18xOq;OO|*J@$$oH9%Z|@Xiyk3e?J*zy9!_kKZS31&a|VmLkg&)?Yxs(wjBkHPjTa z-=lf58N*t*J0WqR{?Hvk@?vQH-M0Oy-&YmZ@n4RBqJY<Lns;!TFp%e{Zx-tMmt zcJP$~)b-GeF~(}lPJDCw-p^6cq3o*6^k9@JvP030DC*X+SzRdi}%pcshy1N z=|5l)qmU?*Jn1`rhuAHO`%8_`@cEy)YH2*WsXD+hN#T>l!J5XiK&g2yT~(hUDbS5REy0~~!xX;)Yx|A?v{EvOu;Srr-Zc%CRn=<2g zTg87Ls^9lK+mxQLi`;Kq5-*mfFOHN^=FdtL-6oT^RigIN|C`G#Pt#35Dm39c?Q=pO z90*-$#>jKoS_AwT*OvoCiv&*2p=F}S^pqzBcjf5;pL*rW1bkyYpqUH$ox^BF>kJc+ zZekaF%6Y0)QQMVoO`2`rK3G-=HRb?nJhumFELvFn=rETsQjda6r`{+y@O|p*fj1*> zk}O)OVZ=&!ovMo(X|0(9`<;tzVKWZ$1Q%Wz0%KZnqR(J&3`WvajQc)UACQVJlr7|| z2{0C^KiT5i8^iv_GdOQ8WkNqzJnIy_qwWAlH^XL)`^skHiI{)4#cQlu*Xn9bueu2+ z-{f*KAZRFGJzasyVSD|`n2IyMfzawJaC+YbzABpf z*2TI(RVt6Lvvg^rlS~mQR72(M{&w=-m@d4j{qNwlU0{xefo@i5mbwt)oAO=n>G=Ce zUcZ>X@H3<1M#l7_vq|F|8nUyM>)W0LQxTsj6^jhh-eS?iCfr7O_D0^X!9{;X8%OpA zjSbPGZdu~MpMMyK&RX2fyjK4jf+x*sFbm)Xz1TN9Yv(6Yb7_SJNuTDSSV@SSMW9=| zf=+72qcwtyKqagj7^pm&r~6@7p{zCpjjR~{^6-{bP4gbM)pj>a4&KOh^D z57>Tc?97&6#+Fozda6a6(vKbeHMT(jY;!b8<_rvJpCoh3zi;IqXf^VkXgPbuz}%`@ z@#e5kuk}w$-LC-M+uqY2xrfF<`Y7@@WF_8HmN&H5$kdrPXq}q9Q!!e+&om~>UeBy3 zLPGS|OS)WebJEPLXzQDiBTGh`uvC?t!Urtbu!LAdGRWFpR~b>k1eW_QDgh>flWG%x zS)wFcPTY4{ujL=Y#n`;RPOpts5n%Wa*-d+U?`G%q;0=Zd+V1VGPpT=d&?`~BK~lUl zDnHMp^6-fcIF)PrW2Md~$8JgCz}uvK{nI2q--U4B&{4L83>2}muj|C-x5Zvun_S#t zx%wq#o!?t7wx^r|@!Z-57tLciKNhIjWHg7W57||klsED*)83owl3-iLqcEC8;nVXD zwAxui!ASDm4o>f(aSCn*<@MWz7v(z{DO~h1eg1HLx&G4Gr#=P#%+a)sNUSx^#1q7U ziR#SfnO&mc>hnCdJ3sT6G|;s70xC{(;|4jr8tjdS4kkE2b{x!8LuXPa%Bfg-qBJ1T#pNaQHZ(cU8 zj=kPkvoJgkmOksD-aqkUH02tIfBIVWLwJfdMvDed&5X8{OuPnmhTNXU;`PpJk14e% zo-|GhC6x@ahWS5re9>x(uX$|84n#t+Zed|u5qY8qr>|qBj5J?=6W?TNyf*|=M=fs# zJ@(L#v{O8T~Y)rj4}4uc5etXwU6+p)UTvYK%R#=uDLMxJy@=H-VPs%%}&xhc)& z16;FDc0lk-L)8>w#>~L9e;AtT=UO`&Wpx6N(pC%m7(>N-Tn>TwWSrPtTYzq2_T19S znHEB^oBDB!KToR0n`gJ#g(rcZ8)6ohQQO#Xku}rLYq$w$KTWN5(J=XhoJEt~R;1c+ zLvVMY*hVLTJKlTq`v5CqVNWL}t6KMW85sL>h_E-Af(`v!5;-#zPE$|IXofNrYZDHp zHqV!DzKP6&DVcF3<0reUiVc4>4&-Adklah6p?b1a`mVp>sXSc#!?RKX6_e+B1&hwi z*HU!Hj)7U$PNj9~S>_^Sp=u{w)D#Q4N(}nt(%UbBygWcr75a5GV%_hyXe9LEUk=@< zyf8iCA6=d7tGdAJJ=_ZL?+aeQj9%ncV-$QIN0(%LeAS2}VhHio@qo^htTSIt3vn0j z<$PI?5zEG`HUE6m22wa|82X74g@hTp3yhnflc}fACC5*S-N``ceD5xL<()QNu7Jamo3v&IRxy*LLd8k0@d8uh(ll6kz!jG zv47a!SRh_fo!2E<$uYcXkq%IXsvQP11ndoE&Re#7%_YJfiW>D9aI1d>lNDI(@iLdH z^r`Vz``6r0@1747mkZIiQWr+$P|HgMA4dLx23Gq3uGo3Fgd;*Z*~Y_?3)Pyoay{;& z{pod-4XKox=Ia*L-_^KU#lkwuijD027waIRF$2}S>@gZ#NyLb@qGp}R9R5M2CmEPw z)QeC3;uoeoJNIgeA#L+s8@9U{>N?Z}D&M_cX1RBDjbu3$Rn2UAzc4LHE>>WX-_<)v zl#KXuk}4QeeTdSHQx5fXO{30m!u@i`Q@Jq&<>3$wWU=n~-JeU)`L`Ob!^P17sm}lK zQ6bsVCzDAaIqI!-gsX;BO^R-{X6!dOCLS~eJueYdpE|zJ!eF}Bgo?p0QaqyJGT&;!q6TA2XA?5m(azusx5GpsSAIYd#yrm85-=c@GEdch z-|gMN#7@jHmO3Bqu5TVNcr^azIdPzvK&2K`?c&#}+$1+e@qT#A&CK;3)FHL@pvQIv z>`X!ue?%IyU+I2skZ2687wCn5q)Rq zLc7rf7zXPJhL*)HffF6{Gk{K(N%}4lrKisxs@AsH4X70};j$^$6i@P0J7v+d^ZZ-! z8Gqd{34eGEnWHJlZP#T48U9B+b~VSUy^DLu(uk}gy|_l+fDg{RiXHW?aUQ0<@psQ_ zkD+A9ri@5ry<=X*VdAa+w>fRVk|B>={bgM0P!&e)QL$)%xtIL#TjDgTawu;AHNnmp z|9P%%RiefT2dQT9W+xDQ`k6!9{}k7Zg&?zHTc1M$5q2KQnC3r6BeKp2_uT>`X@pUp zw{x8upyq#u3!t*v6@5ymWP-}qBGqMkYC z;V}fxODv%yvt9&xLt*y*}ts*6E9FF}0@Sc7m zi-Pl%7D^sULq@@pMu&G_u#zh9^jH-k0XkJ| zn~-XK1^?i#dzVP`o2_9f8km(eKdbF*sg>W8UPg<8DJ8 zJFt^HoSCf6rl7hcf!WZvwT4eAAMH)K=*$0>Wmt!XBa+|b8BBO-vvy)R`7fZRxiwvt z<@_Ep1ubE(Qey}<4^40g!YejZQ<0dx=zq*!!5wKaNUF%8@iPIK>rKdVa&E`kBToy| znV7wzW%9+eQ{PZ;3}FivSVkKc$MINk-S$8VFY(=~QmY(aYQ!F<>Ve{8kxo{0{pc;C zw9}xoK2tkD+L8@J>+74D=Qu84@srR~ehz0wuO_@!kKoqa{iFi>mn4*o2*_@p2vQL! z{(Fv@?Flfy>enFEz<+r$kW5-=134=BtgABF|FZonKpgY!F|u9#x1{R7lGYGeAc3~g z?x(l>uRr~_oHRs52_T-!lHP5R{(BnxBm&6KWpSdy!T-LUg&M$))1*REU;XP9LLYS2qn6b z(IAwr0U?V;nUs}L(p|4)L&@Sh_%Zko{K#K`*kn**kZdM#bu+jI<;Ugo47Z*^PfwSJ zp2d6moOAm0I_G@epK~w(K%W$jKCCa`3wRJs)2USIsTAy~K2WJtGMQ|@-+u(q?RIOm znqIFbNs^){u>=q;pU*cMjaZh|>2%_=#Ma<+It_-BoG+3a?^@px=B8cinCa=AnZS*_OBJDKA+f*|~UKS2-} zh6!8ddH!;_bUK~YYUTBM8HRbi57Oy0Lg;q8JWRAgNTU(P$Eh#J_$x-%tMw_%DE8nReV5=4z2Y00000NkvXXu0mjf_BjsT 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 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmV-v0+#)WP)1${ibmA%lZI5fS*hIY+=9O7YYTF$wUyu?RG;55d?wbxG0Kx zz20WCktCVPWbAhP8v;BR!!YCV7{jpTayg&RDT*qW%ZtULR;wX|TCJAD;mBsQ@KOlg zNvqW=h9t?u;h^|RrP6M<0iakcmdj;z0HIKb=Xu4mEE|i({)Tv&hHn*&S$zP*Fcd{0goeXmDwR^92EkzPcswdzk|ZVXG)-G97G*yEzx^3l z6ve?{a5|l2Sssl>_xs&qvE*{Od_KQkuW6b#7z`MORjbv@M-XVelzgRnR&w)!%xZvKdcwvKLjX>@?pg=j7JUl5479u%H?t}7z6;C zrU4)tjdr_TP17*OsZ?q^Z7g;j{|_i;jr0k)9KVA03p=x z_a#YU80PnEwOTC{3Z+uXA|Rbk4+aB_aVQiz91fq>6pKXwumX@IDU-=yjAdD-DC)sJ zECO=5+;X|Z7>lA$U0qX95U<`1PG22;#{Azu&*zZq1mYsQrHbWI!MgxB()Oh%C#`A9g&?PbL!p z;5g0=$8oJzizG>}*SlCO?o~D#4TfPX zj_X7sQLEL?=d;V@G7RHGR@e1>K93N(Ua#LifvL@A1NLMftM#?e+0`0sei!J08-4 UmN$%iEdT%j07*qoM6N<$g6iS~BLDyZ 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 GIT binary patch literal 0 HcmV?d00001 literal 525 zcmV+o0`mQdP)@5XNWMM6nYk z(MD{vMJ#*+o4km%58x{ZfmC(@A%(Hh&RRrR|5O$d<6IH(O;R-hh7q;O+$&W0bn!ZQB+_@d*ODX}Mgc(`ia+G#bt2a*`y4 z!(jj@6bjBRS(bafo@H71li-`!d_HeBo0oMrrKqY30E(heN(Y01cfe+|$!4>T=Q!>* zG?`3NsT3ksDiuXhJOUVFk|enT5V2OPjYcCxlx11dH2(p*uD4n(L_8c0p-{+w03u%V zw%cvPFkF-T>K@p(?U-t{s_VM{7cCNr?Du;BD3{BoY5EUHBoe37$?-hT`ww7@34#Cs zi^U?7$@mZ0ZnusxO*5a*KQSsEIYpLbiK6KEKp=20iT4hM!(qK%2LM%78;!G^ziJR#&Zq-h$@^MWA6VzJq577PZxbYK`pr_;F(yWR14j1P#sKVEOZ-v@jEvb#&?OK31t P00000NkvXXu0mjf6gAv^goX7~m$~GA8E(!Yh;t6Fln-94H{d@2;4gZXWtpb=ohh;`i=z0jg}(4Xxm+HP z$LsYv7K;gjaJgIz!_YL1F=m?PZnpyfMNvYbP#_SP&1R3M@MkI(izu91h>Nvf1qMcD6lWg>hZ0)q=s`4*>`v=lb`Vaj$y4-syBcOXcT)<#L%w zBmf{9jjmQJ_xyUj4h92NRc+gDG#c@E{Ey?hP$)RBj4{R-JGCf^82@HZNs<6yv)Mcx hg5Ez~Z@|9~_yzANC6IOHq{#pP002ovPDHLkV1k(^@6-SQ 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 GIT binary patch literal 0 HcmV?d00001 literal 500 zcmVTUHE_rI zs$pkm9=kJd1_JbFh{xl;?<0gl8)F;<0b{J) zZYzp%GYRJCV87q*cDrV?X&6SaSX?X?)9KVSO~%;qcwDVk{eC~6&sVF})9GXw#_cR{ z50ui$WC8%4PRF+GE3c}m>2zAtw6DVN*C3Hdc%B!2iy&Oz9}EV$T<-Jv3yNH+R6;{l zRmRvOMdo8Rn}tTB(crw`K?28dE_No9d5sPLK$0Yc(0o3x*Xyqr8X=_BYGI5OML8S} zu~_U`pz7A7xXxm<3yTidp?+3aXEa$UFE?VitPQ50*n+BbE;+Xv(Ec(d6MLV_T; qXf50@x~_|&_$Awkn3Bd>EFy~Y;k!pzm0000iV#5#X4EPTL!{P7`&t|hZm4H5>cDwEI zcq9@D04Nj+0FcRKu~=+89wUUbT5YXX`zZJC0GrK5k|aS8Hk)nlEEbDOr4j&mJRYCV zFPF;<0R%xjJUkQ%1+`jz7`?fZr_&{qNraG8D(!SSN7pzU4gg>R$mjEV zy&fSn7z{2iFHh6~0Hspt%K)?4T(8#=LXVG+fk5B{AQFkZzP^4Luy3&2+uKYggP7|0 zJ{XNgBuUaXMNtGneDg-@_xp4g0zjkDpnLy20bDM3KPOl$7Kg)O3^<;7adFXXHfdWb zl@102u~@v1S}c~yWP)MXVzHn-0)b$?Ui*ALm&^6pqk_ZX(1z3Le13lZH8dO!pPrs@ z9PjmdqtS?>C_bN`%jLG)?csB_dP;q0neF z;c!@^(Nrpx)oOM4ZI71xsh>ApS=Zn`F@b3fO0nhcC@66(+-v9sr07*qoM6N<$g6+pL9RL6T 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 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_OdRP)!2>3|_zz@p@`~v{})RiP@xm+>~W7{?%grX>hVJyo^r_+r_ zV>ld6r&E??FPDq!x&VM+Flbp;G#c%8yZ61wGZ}`VD2gbGqtQsyw83BykH;5_g<%+k z5YseORn6scolZy7G+CCz;V{Nn*Y(F%&nFNBK@fyOp#UL72O&fIJ^ev1A$z_P4RC8yog`sfJysqzQ3LWKfpHFb71=B1M&ynA< zW1sg8#d=Fw7@RtSPOV$Xs*}(-pCRa!0tbVGrmLnY`T-|~Oaw%qNxi>KWC{Z?ZG&b`|?!`GHCF@#ls;M{25o PK4tK9^>bP0l+XkK+Y5f6 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 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmV-~0ek+5P)Oa3@C=?Hcklp$t(BF6t%U&#D@80)*y!6Lutf?pOOP$rzj_Sw_y&IF ze~%y{Y$*yGYX|&2;7jmc*L9S>zGhh#RaFTgYn>>dvMf#0Je^JeVB0q5+%OCP;G9QM zwB9QO_>rP0&mstdIF3bHe&>O%>wVt?Kwa0Ws%~g9rBpBi_J6PgcECRXWLf6>ev%|F z=Y$Z^ZDAz{$8kI!k9nSJnpRa6B67~Vu0ur2vYy39Y1%Z6<2aYg#kTFXZ2@4KCP|X= zJfG)TFiqdg1J`x0*X#LwM#MBt4~Ih-hK#Xc7z9Vin~_-*#qD;x-|v)CS(ZJ|V~jl> i4{?*pzS-@7kM#`=1%9=aMn66P0000&sBOD~f+5hLof{YG#-LgSAqt8@P0l~i zRL-Q%eGA{_*$~E?Ab6eSxrgtEd(ZcrOJI!QE5iU^96x~n0Dv^J`}_O1x3@;4QBf3( zF+mVUqfwUS)z#JQ?QH;v#bT3_lih9?08Azm#@J%993LNRXko1o1mW`Xa&~q$o6TNd zU!Rb0Y}Cu;A|QjwH!Kp^#3e0U(pfRI61@DQ&K+M51@*6DPnrl!`{*I!>> zBaz6%!^4<+ep~?0^Mk>FWm$}IqtTe3pMQIM(-V+LBt%hMT3UK~dZH+*SS&6qEa(Yv zI-S$g)8%rRVHf}ihr=5i8_{S~XBUOT;mys>P$&cdTU%QIu(!9T^Biy-M^RKNl>&f# zK7Vv{R4SEpu<6K>U>L^l_s3$fR;y*TTAR(L$KxRg;&T95mPwKX0992H`m3^5tJ!R} zU@++Mc$&>7P1DcM&l3|9??ry??(V+NUR_;PDwTtS1BPMl@9#xXJUl$4C`ytfx7!T> zk|aGoKAxYS69gd$g4t|lS$27Od2ViQM2gUyms~Dauh$Vm{eJ(?O%dw%`-_W<@pv2n z+U@q~=_x{JFc=J91|ej(+gX+!3-I&l{{X%f;5T7vZ3}A2W32!H002ovPDHLkV1fy- BNO1rF 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 GIT binary patch literal 0 HcmV?d00001 literal 376 zcmV-;0f+vHP)E4ynuHwF!c_Go}P?b3nKjh0000)P6y*=*M7 zbgfoPQ4~T*I-RCz`qRmhB>DY*06;{FqDDqWBuR?JVpCI7Zz6mjxm@nx-~a&D*Vk`u zZZ%r8t9(ZXfy!8VzD5iEXy=a_c8#0(b3UH zqk)JE3k$Vcty|Nx2BA(~*qDZOb#Wd+T<))taxau5ug~kH@vq?-p4Nhr>~=RuR!= zvwax)2agBduP7c zY#Iy(0ALvA@$s<_fh^1Mc--l9j*pK!9FD!cJxP+(AyE_oAe+r<;7-xb1KmgzO5RFFP-rjhge}8`m01U&5 z#UeovTS7LQeRy~fi^Tx2TCJQ;XDk-`rV!eLPNx$Nht+Czzu#{(8i_>W>gsBjFqupq zA0IC-F9D!jE>EY^Z|m$8KnQUh2LQ=ra&z^1y_rnr6Q@)vnM@{uB0>W5`5XX9lI-<* zJkKM92!a?6hr66&v1qYa1d8AXT^fx>7Z(>VFE0SVFpO5K-TdriT_lxC^ZC5dXv8o~ zrBbESX`jz`;x-M1LK=0mIp37P;ffrYbJEEEdGCqg6= zAxScoN&$e`Y^Eq`Hk-BE?Gt#gYev0ZM+mLgYaGXIHrr`D*n(jghr_X4E=3|ywOSR9 z#W4bMx%~eA-e52QfKI1dtyZTW*M7g>(G{QQ+BlgVnennWTwG6(0S ee-`*h1U>+}I&RA2*NI600000hSOo08lIz)y2VJKoCSA5U|;7FE1~f11uIxtyW_g z=KTEp_jN^4o}Zs7ijpMBWHPZVy9vPW_ut;$qMU0Q&d$z;!{K~BCkW!>kdNY7?7k|bBX;y8{Y5eNiEqmkaAy}rJBJRYP) zQMB9bYs0j=yE~ao^a9Lg^K!XVW2h&s7={@b6(mUtf`GKk<(f{XtC~MQKar3mNxkXy zfW5sv^+0!ab|gt!xjWO(_J@ZD^|9$1c8Nry)9C;Jj*pL7meuqKf^c+ng!J9r-O0&` zfnmpSoZIb&5I#LU1%p9NPrY6*6bcYRhGCE}HYzfi%=Ps(3Xv?!e;W=C4tSpDIL>Od zZaD0GK3_hcuU4zcWb%(o?RGm7iFCVN48ufG+NY z3dyppD9Yvl2;uwtd%0W=hr=khIF37=&dbY7p6B&^aIo!<*B0>a1AYK#xe|k7XKA@5XQgNl{CJ9 zA&LZIEL0Ft!P-VFQwhF;TG)w=U@v(Id%@B&m4$_kg4hHt1g!)MiH=1Mi#soR8jpj^ zS1t2re+#oS3?m}EQ$D;|9^fAUxP$L_Jnr}Vo33CmC1r_%|5 zBuT5)%6))kS$@ACfN7ecP{@6NVHl}Y3P8PHZ#J9m0DQiW`0aMPSS%z-DijK`ENhzf zOrw3hUDx&DaCkTz27>{BY&NUwdZ|=;vXejQd_I@U#@H*H$9=$LGD#+r07Ow-uh%~&I853~rDDejg1|YqyDSh0wA*cZSj=0zJiy-v ZTmWFeIro}|6xIL$002ovPDHLkV1h$w%b)-N 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 GIT binary patch literal 0 HcmV?d00001 literal 825 zcmV-91IGM`P)Z?MxHuUh<`gtFMT6B6BGu9mNMkfKG$>>t1a7&BMmQ)QS(M_X z1m%!k&uF{mrA9g(P%!Oe|dS) zXf#t(Q#PCJXLhi^zfaTj*x1lPm-2D8!EX#JgogfI0$0N(~H}$Bj=jUg=Uca)k zVzF3ucXvOgBuVP&={Y(&qG>vrOn$M*R{(>-5Q#)msg%iN`kdX{+gn{-l_ZHI$=lmo z)c~K*x4yoPh%T4w?Ch+mhoUG%OsCU4&#MNIB-sc$J3Ey;6B83RH#dlAx7(x9X!CWN z9!w|{@_N0En5Jo^^D~>xi9`YbHa0eb!Jvv;6bgl$PA337K0Xc(4k`fzLC9n>05CZ@ z84ib40E)$;R;vYoTrOuY7?c2geSJ?)PmP#mSrq_L6bA+d06>;yifXADtJSIsfFKC@ zd>#N8hN;)a?rs$Thr@AlasmJx$EDM0C4eZ3 zI-L#xE-o${4u`r?!7xlC=gGd$8lP%_Vo0$ zX%*4l)A9WLJe$pyN~NKpq4Du?qtU43B>vu}{~hoTaD5yG{k=yJ00000NkvXXu0mjf D!6SZ{ 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 GIT binary patch literal 0 HcmV?d00001 literal 579 zcmV-J0=)f+P)~0005vNklq!bieKKc(4fugWK&E`^93x^ZaNuN~KbT zLgD@lU+jUd>)2?T=61WW4~0VYdVMyVsjBL5I2w({!%Jj}rs*4l)$jMqx7%UwbULk%>E&{{Ua#02hG9KmI-RD|X@pR_-Iit9f<2%p$}Fx{E1u`O-EOH= zk|gPLIz1m#6X0^W5{X16lc8xEA;hw5Hk<8qIzK%JCV*iW0PuRfgTVj*Se88=kMIpW z7SrW&DM=Cl42Q!=Bw{@P0BW_Gq9_26%jH_Fmh}Jt5Jhpb*__X3j^oVx!%Bdvs)0ZN z0LJ67-|x2uK$7J9dZkinHk$yTC`z$dd=hXt9DF_>_R(n6FpT$Ij^p|TH$>kVMCEDKP2 RG`Ii&002ovPDHLkV1iEf|4{${ 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 GIT binary patch literal 0 HcmV?d00001 literal 665 zcmV;K0%rY*P)D=G%-1E8J@9+H1AwUShUkU+#tT*6401$sTuhZ#NtJT?TMx)WxYPHQ~BNB<-Zg;g> z84QM7Z^E0xaeTYo3WY)dfW=~|R4T<{QLonn0H{#bTAqWvkWt6d;qyB$G*})7fY=u2R$K6ae6MyKk>>$7B>mtyU|W&7RNaS1FN5 z6buIMyLX!}kw`Y1&EarB5M($UUS$V^K_ZcO>KA#v-cqTA<2Z(4d_Ldda9|h)f1^8q z#bQCBP)?^4j^hx*LZQInaFj}AwOV}*078hOD49%dx7+8cg%D0A6O+lr{_k%xd+K)^2-2ct=DUbL}Ihq&X3V( zG?hv{4v0h|D2jfK`~CiKIDD=Gl}h#aMx#(Dh=1^$H(LC8pm-Gi4+I~a=F}9YPZ|*cs!j>HyVu|Zx!))Je$o51Ol(u zdl?@NhX4R3lliSfzc4u#i_z(HkH@1>C;$LPqtR}+%jI$afZ1$buh)00j&S?pg<%+% z%RP^e$78S8LlA_)V2H)yA0CB-_s#ANcv}Aeod}3@%EiT=00000NkvXXu0mjf*;_Ht 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 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmV;x0YCnUP)@+~05&#muxnw}@; z^zCUO=N$Y}2>e(AAOPR1Rkn~MiR-!uAz79I0E{t=@$>oQoJ*3F=Q+k0A(UkqW6ZKF z&-0p9a5|lCx0`92`~AM%ZciqY=I%f&E^(P%^n34&lgpKrI@(h_)y2qBuL z^?JSg{a!={gF%ucob%~)N(d=}o6Sa1l;Ln#mZw$GzVrE8@ka*u975Gs`lGxJdT1^!{b-!~c!08kXA*=)AkZ2+j% zYPzmpuh%5wI8LEZ006@<06^0;$?4ZKe?7=nVB(7v)Aj*W;5i&6&#O8%d!wL zilSDl#mvm-b7l|j;l5-HT^bhKiyr77I)RQWN9xSQN!lsU%6#XfzrQ zhm_KMKEGP6@CC?=2e0*dz1!`AATSK0)9Fx3U);weJK1G|kGTP^Z5U$P)5={^W4 zC9AyDIfH+IQc7X*7bwYqO<9yvW`p^ZOk`jZS!6OB)X6{@7#NPhBFXm|&YgO^-1p&j z4^R0_=Umry&ga+F?@a}OeiJqQGH=0K@N@oLhYp9sZnwJ#0H;>xo3-x@NoGy4~(Vp}_Mz?nCzykw~Q1>j4;zM$u^WW{tsMU>F8pa#t{) z&z(-^XVI-rE*1+S%IEV>3IMPyJDE%XB$LT@yM2)r1c8VoNqSz;?REo!002=Gyg3<;_xq2J4*)#R$K&x= z3No3DAP4|rvDjcRARf?D|~Ql!}+2!gnY zTBs-*MNeoOJgit6%L`_Xihlht+R9swav)N8gPKc1RC<1V~T&Jg} zS`>@LR9Bt7*Xy-ftzXsB7;J5A_4f7xSX)~Q1Oi&r*4AdRST;8|0d#eB?d|QUsI;_n zet!O22I}Y(Md5i~?M$UoM09a+;c~eEL?RK7$HP!EnIxju*VpeFba!{}?(PC`I2`Ba z=d9D`^Uci60N{B(l}c$-nwy)etE)>t*0jBmNTj{JouxD~GNKE8c6N4RVgkUxz(6=0 z24J__S>w9~0630gDKXvE)m5+8%h21~8{27;Bvn;aso(s}KpkCeZLK6pJkQ_W-m0{| zzCIR<0VpXc@%#PiV*J2Bk|c-20bqT7-Db17-EJ-2-rnx)>{Pe^&d$z{4FH%-rk9r& zmj2PvQKp@iB_9BW@$vCYH?5*5XJ=;>6%{KhE6dBvI{NVN@cjH7kH>kQ@95~rcwc8R ze|mZ{o6TcmV+#ulX)|;>ovp2{?AZTHMC=?C6%}Qo<>lpOvpKs0m;HY9cKiAHc{m*2*w{dM0y%?9rIN{HLPSv%RVoz#OeT}x1R&z>?rtKHK*WoS z3#ZeGvLzQFiXs3EheJfPSS*=L=9dA8SglqK1_L6F$72AHPGzBf@KoI0-8CAGR4T>u zydVfpr&HE6naj`Ra?+}mO6B{FlCx2=0QGtu0D8S1A*5I=TCLVkr?NbN5Yle90ia&5 zznfO8wOA}7;?>oaUawysKnUq}yEIKlqtTE4a5&^RPOA6z_F}Qvl7L>X$1u#+*4F*~ z{io>Y=;-9+M5&yh$(r_=fUev`>`czD=oG^D80=?H=_7!1{ZTrSUTMa}&$8jVKLXq4l)*Vk8yqSn^d^m_gN{yqRSn@vFwSe7M(h@wbQ r6adgPtZ88`{8NB8GDH4y)neSV00000NkvXXu0mjfv@=m- 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 GIT binary patch literal 0 HcmV?d00001 literal 556 zcmV+{0@MA8P)9{|LgS9iNzp-}L8y_d@c0C=7!gb+g7?e@E; z)oM*969BMnTaqNd-><6bjV`=1ubYyyHylL5Cm0K1A)L| zvAEfD7l4ShTCG$nQ7uW*;c)oqNvG2QU|H6^l1BjAyWj5-aWEL9QmK!INF*{G4j(i; z0rdO*OeRBhI2@kMX4j{q(I}ZrK5lpdKtx%V=kvMix`tr{gTd<~kH=%0=63;xVaT#f zbvB#r^?Fnni^WEx@ihJ%KzlV!LqyXw1wlZ>&1U2C`B<_{0Mj%jNus)3E;pM^S(cZ} z<&Obquc9ba6GHO&JY$d*KwqhC+lW}HRJz?RW9k#%qEIMwI-LN35W>C(KLPmKa{X8P zz;#{Mb*W%~Tq27})3oF9xLU1rT|b}CmSxrJbpVJ)qw#qBah7Abmuj`j^E}6Kj^l6~ u2LPfdI*yY_Byzdj4**_&6)(Ww0^R`8)1&asQC+_P0000XafZY zaS*J7)=6;E#YG*(!NJKz5&RQ6xJq|X7Z(xdE)E3|M-g3|q#X)w9TZ%vbjrCy-jhpx z*4}b2Ja~T7$vI#8qah~=1_1Pv`h|X2Z@_;52)NX2+rD0}?(-?7(P-4gfL;0kV_YZ{ zw%aWmilWGI975=LJch$z_FYZWZnqmDF8MsNe59^2K6NRaF2uolZQ@!z(=ntX8W`CgVshm&;r($Kq@@yI!v;rTzhm zqBxSFQ0Q{G0Kj}cuT(1FK?pock|bG{S&T8ZEbBV~=kxi#;+;-sI2?MM=oKJ};%>L2 zlp2N+iA22rwzg#z_Khth@+~isvromEDr{Q>2&&K zfN7ctAwozX@cTvz{1L|Ze$=yTz`ZT-`{DHl{QH0pob+c7bM=cO00000NkvXXu0mjf Dz_0ww 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 GIT binary patch literal 0 HcmV?d00001 literal 499 zcmV7?s=qtReBrnOp)5OUjEmK7vmu~d0%_f+ed^j8c*tUH;8IQ*RqS0tDH#wir4+aC8 zHB~a11VF)`R?zG900@F`=jAw#GCaJT??2hHEI|GTT~ z++`Gx#|a@1v*URlK)2iVsNewrz<$4{>r5u2D9T^vY&Hv^TrR%=n9t{Q1gq7mBuSzu zdYGHdCJkP#R;^a+DS&O;;c%FCFBXgKb~_J%X__=Lkx0yDvu9hhUaxbxT%}SupU;lt pcn{ciyIn4qA5GEs+42SW=?X6_)14Nr{Mi5i002ovPDHLkV1i@^(arz> 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 GIT binary patch literal 0 HcmV?d00001 literal 599 zcmV-d0;v6oP)mrNEZB9e$0?!LpPF6qmCfA{UX zc~AHGJfG)z^*o>Fo;!o0DELeL!yoGd_y8VtKA)d<4u`|xaL{m5exPQvX|Y&}#Ufd* zR;zS6twu1L&6COGm9GY1xm-G(PP^R>pwsCnijvFa+-`Tf-5!lbf*_boCIA#g=>**G zcSTWrJ|BSDY{oE5Hk*AsFdmOd9>?QR4}gfKX#gzCG7R%g2*7MM>&$>8p_Y5M+dZ0O zSso6D0Q&vDe!yTbAkp*r{F7<1SWpxtisBo0Z9uJ7BY@NCq;5)*#BrS0>s_zc@7=Wl z$z&1$$8ls?DwV8OD*(UWKcCMv-L(O3w;KSdLm&`f7{=rAsJ9Xdg?=O z7K_D*DU-?Q2ap?9>+_^|JgzwoG-gq+*8>m^hrhMf>vi(5*=%&qqF^uxV87pM7Eou2 z0JvPPSJunr0)Xdvod8i30aUBiR|f<^FdB_-^3wpYEDNAgsn~2bNs^wd-ENnr>FIQ; zvrWmprBW#X27>`WB9Uk`8m(5VTrN8tj%YM`yh48(v0n6nQz<4}<@D0NtgzWcwUO+aRRTSmfw{4p-Mk(b2tX3-kjYflg zs~3Pur2=3!n|%!s!ry~LBH?)+&zlhjxLhu>EC;<3%Pg{O8$dFdjBD5(k4FHm>&690 zrBcCSx7+<0u-$Ik?Kamm4Pu_llv280uK~>GbFMPgbv2#7L zNe~18rBZ1!nV6>8YPHhoboh*W7eFaJ91g`|@ph%EstyK&$QtdTs0blZHrnso@&ml5 YD|ai| zQcMP2qC{QlN)#DPvND~)Xkk!BbvC6Wg)%UkZZPO(G9kOcl@hL#`wgC?$KO-Gdg}4s z?)!Ot?)9y^&$llj%QAj5D*ST3g8x9ERzz>NTTv8MDwWY_e78q_m0qtGi9~cd-EFVU zW=p5jlgZ>s`!fN@ab~kQl}gp?^-LxMAQTF59M^8Qi^U>M(-#v(QIaGn6I3b{yTWd}jnXvz z;aT*D0Nif(?Ybz6E|-g8m>2EO%dJ)mK&#cdUOXHQg+jq(GVwhBdP1N7pyhHI06`F) zPDc=g#bPlS3@Gn9 T+4U}w00000NkvXXu0mjf3BBZ@1g)_4;@` z?)Q6)amcW3y8wVBNz>`{vmc;Ztrp;5Hk{F(+wB$t6h-;i(sf-F#pm;xcSIOt%d!BV z)9EORA_#)-`>WLoV{DpcF)>{(mpsph#f?ToRaM7vii~Obt0)0+`UNv5G5>$Ul!*WU N002ovPDHLkV1f?U%`*T1 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 GIT binary patch literal 0 HcmV?d00001 literal 483 zcmV<90UZ8`P)_Y{!VbNd^|Au8jv>OG3&L9T=2cxhgcCA(sG#C__O%?`nLBXQz3p3C=#B&jB#7FGAx0jD7jpYzr_QA<2Z#vp`^m;uWfTw5CVzD5EWV6|TpG@-ov-=7H Za|LDowplw^g>V1>002ovPDHLkV1kQ))lC2Z 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 GIT binary patch literal 0 HcmV?d00001 literal 579 zcmV-J0=)f+P)@jQ{Orqij*<%&k5)oN8ylwPlw&1Pwu1`vzI^a3iC3d1n-`TU=FE|&vPEEaVE%H=YE z!{Kn95(I%|**j~=fbn6_3Z4%jNy$1b{5d0P^|# z`B@PFKA(@+1YH24SL*e8DwVoZaL>t;$piq)vbPG_?Y1b2Mx*gbC-?h(02D>tDhLLH z02D=evPFZz;PMii&E`6L*&lJ(JoF9H>GXBV?REq3`~A8Akx1mikY)KJxZCYK9*@J} z08lEGbOE;8t-hUa;jrYVY&Bx$i& z*ladMQ6xzspBvBFCz(tF*zfmxjrOHhs}+D+t@Z;>et&;Ao6X^HSXI@JAjffqLg8md zMJN>d+)u03YOz>4ozCOieIwrNj>luG)f$aPCX~!Y}EM%C4J`y@B4o5@RfTz z&vo7R^>p3mzIzBk5b&F!!Y{{1;QtZ0-ERM0V7J>9i$$8I34+jQG?hw4jv0@~1A%}v zCdfoSpZ9n?^?H3c9EQVT00x6Wl3AH5!f2C*5urKsucklX;#8kjZ4^1pe;9;c(DuwcG9X`Ea#b0r2^JVu!2MDu7%r zC)-Kkjfll!049@(7_wTe%0=E1uvjdTRXC0VkW3~Oa$nEE^?Kzv&gF86p?13sAeBlf zq?5|kN2AenIt5^}**cxh^KK_eve|3`xEuJL9_aP@JBJ_$aUw-g02qc*wpYob%jF^n zg4t|VtJUJn@pud%5{dk17i~5hp63&Zgc$1g`v5|r(2oRqy&iyUHY)uUTX=nMjh9 zgj%f@0Gg)P>-A!>(CKvLa`|f(u`Ekb6w9)b=xjE7T+wc~4+aCdI>fghUgz`qcsx3t lPL)c@XX5j+`w09v{s53-g&g?I_Mrd(002ovPDHLkV1kf_4X^+J 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 GIT binary patch literal 0 HcmV?d00001 literal 467 zcmV;^0WAKBP)VHNNj>{3}M*rc$tuu%{{z)mE6ibO5a3fU_JkzjI(XSm{= za@g5f-g~pV#27=7_(H+>82kf+(hHi?=|n`2OcX`+dj0uomI0H=q}%OQDwQNlj^n~G ze5$4NpzU_Me!p*;rX)!m$2FVHa=Cmw9tVSgZQHUeGscLh-EJptk#g|ub_-y=UdQ-q zwW_Kr%Z4-qK@dixQH&gq#{ibgwY>$;xj8HQ0*4jjh; zpzC@L4a);XQEoZNE}>lS0TJ;$e?FfJDbZ%L0ibDGQFqa5wF1!V_3~XT*{dmvV&0zp z5VS{JE*Ai%X%=N*Sr!1#^J4traCnaafZ=c$BRidrD2nOAQc`1x$Z?$O^-4t3>9kg> zsj51k&+qfPSS*4d*zfnRG}-t4bXBX>n$2eK58CHf@iF)lgKwE2iC9>2d~pB(002ov JPDHLkV1j&L$`=3t 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 GIT binary patch literal 0 HcmV?d00001 literal 531 zcmV+u0_^>XP)A|? z;R9G;HCD=25sAGuN?FWCiq9dX*l6Md$Og$5u#<(Al@ya2v9fY4yv4jR!<~8bdgUzt z_x$_ad+s@RhEPiJ&T!z(@d5lj;Om$E{eJIoeD9J{>hX9uj{A{8t;cXU%w#f#yuo0g zOD2})V7Xi-5{Y;`o=hfvKA#{6JkQtb_33mf%W^Ch({JC>3EJ(p+wDG|&swq9>j5|( zk7h1bK)2fka5|l|;&!_Q&}cLs7?}Wyq5vosi#k0TjS7PB*vkYc6bgR7|8O{H#noyB zpjNBB0AN_+d_E6AQIr<|jGaI*7<`&$bCM^M34m-i`#ja&_H(%$fcbp>G?Uo-;CQ`W zRaIHMc1pC_Y*bY>do5l77>~yQQmGVEwv7u&r_%s-yB$-r8LFjH=>Z#nD2lAzd@n5) z3ji*c%g`XpGGqUk0%o(>t$OSA`hJz?`D(RlVIIwj03Z|!T`m``9tZ@=<+8PbH&k1# z){Vh&oFqw|PN!0-IGxUZzi;_PFP5}V1t#Ue5&i_XMgpi|1Aq)>_s>iZ3+PB+}^ zp5M>iJlpp^?|Yu_d%pKQ=e!X@@SFI9U&c$|B_N?ztF>CKyVPp6%4V~%SZuLa+@Z-M zwA*d1Rtq4VPG3>u@z~*Tc)ebZ;{Z4uj@$D0?>9c1%|@dU%d(9|!)P>0@#FCr3WXF3 zMZe!S7z_Zq-7Zbj|8fFCh|A>y(ChWYWu;Ql>2#CHuh#$=h5^8` ztl4bdZnsxCYPI@)@lQ@5Wl|K?Y&MA;JQkSG=KunMfYoZPR;xrN9t)JqWdPy@68U&M z2gBhIfY<8#x2@&w#&H-O9K@;R7Fr2yn|xvOM~qCP%8WC&a?7XW_0|CTbDOaMBajuhcI&Sta8 zv#3}s0^oW6mfG+4;uj(u4#(qhtyY^%Cck>lmv2+0QYi?6#bUXoG#brzyUpkGr_+gH mm{O_qO_#pC{_I`?|Bb&3aC|#3A7Tgq0000E-{0004uNkl@5XQef{FBZE z6-{TMSPCHzp|P=vMH)e|RvYas#0L<3fuLZUfDd3{VPWkH*og>2VhRh_A|S`X#bhxY z2l=`kX86qvGs6-}DZ`q0B{_~eX6Pofa5rikN^O~FaYSf{<2Ia6So47DB}NAB$LT_JZ{_e z%d%Rnc%D}jfv+0 z-xG-hO9k`!+}+sU9BkXJR;#isGfol5aR5Y7OsCV5Bn^kd?RNX!q0wjnI3ABIi>4@w zD2l48mdoWIY00wO>-9#XQ7jfa91bj--0%16_4@60ds$4=>~_0_LcwJSf-oMBDW#9c j<1^PZ`c*`LzXCh~Wd|aycr%7@00000NkvXXu0mjfK@`uf 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 GIT binary patch literal 0 HcmV?d00001 literal 722 zcmV;@0xkWCP)i6#qQofrSpi z6LJt56htBfi>7oDF+pd zsrbIbjrTQwJ%ew{7eCWI=bn2$+|N1Zaw$oY@S9NKm$4z(5Qw74aolh?{87?}hljt0 zv=Vl^9l+Dmle9K2FE9OmzicWH&@>I;=H_P2?AdGwOS;; zR4T1SP$(3vRx5zr-CacjQ501w6-7}1CXE_Zcx1%T&y#lo7+=0G4INz&HV z7NJotvdv}_1mWP|0KoI}^NL8P(|LG!*l08WoSd9YZ>_pPr_-9Q-R4OGqO(qk7TCJu` zkk98ij+4z;ECwJFiOAV`o~I}(9*=*kr%DB&-|s6Ecs!m~t0kN7@9zM#TCF^QG)+gN z(V0^Vm0UnD8jXxbG=5A zU@#mV9nGIAm&*VchEXP-C5N`}_L~RV6a&bh;V;*BrQ9uKWA@@pv2#hc7NJ z=KFnTXNP53i^W2keIBF+L@3$(T9FYam={sTcsyS5TD043lEG%Pxm>Pq5`BJtG7Lku zYqi?+TlgceEPHl#mP{rW*Pv3Vh@vR{Yfzi7f!H-zw3uBm7!0#43M&?iN$_8AhyyWL6bu>^Oe?~M?cT7Ly)XW` zsXPx)c`ohuz3=@#_dD)(XF~|VcQ!kGbNdDSJb?JxbgHT+ilKA(R&9zT6e)578Ka=8Qm zkH_=SQ!bY=#aRG`!(pjZLI@EA0RXGj>fRFw1TYyamS{X4r&1{ZC=?1do2}h$-xw~J z3r*9w6!;3F(WtKL2q8sL9_}Scl3J}6CW8gQ=kuB0Znql%`u+a@hFmVU-|s&JOeT|Z zxon2DS`7fw>GX>m)EZDKm1eV<8Jsy&eEKolYanX0ylR@k2ndSd?Y?UUxVg03ZkgLg?AidkNt6dLQb7 zAOL{NHV{Bu&$*)hf^P7&ZXVG~H-4-T)j9hkrM<-HsVE7z_;CZnt{_ zplMn#7_|H|n`dG)8ohEG+HRhX+wGR3D3T<<>KS1BeVhI`;17@>|B2ZQUK0QS002ov JPDHLkV1i431<3#a 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 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmV-b0;>IqP)NklL7K<#)&So=eTdmestJQ9|)9Ew-LI{BAbb2@UH9!yqhr>bbR4QdK z7;aBxS*8G=&-W*QXf$fG*{I!YHUZFk+)5P1C(U>Us8lKdR;!h&s+Y?JKqwUY9=6$R zC}1!cyaAvuB#}r^Hy)1zSg+T2gLOI`fL^cn1|S#=0yrEF)Xn8`+wJyIu-R+|FdmP! z0?y|%0FTF`YLi~C2XMV!?_BQg+if%&0Q`Qx#wj_SP8`S4Mrj(fPNxHa=XovFX)tZ6 zR={L30l+Yf7C^mT2SA5TD`3Ch16VGXFRLqx^7Zv42!hdQd;?&ySO9dp-Isu9G|Dhc zwOV~|7iF_qEt{&}?*ot|Nl}zXG51R>77Gf9#bS>#hr{8c>D4r7fk1#VL{a>HS|}7) zmZe+dxyX}mi`(rUjYa@Cj*CPhcDtPr((m_cwOTTn%w#f}X5=|PpU*p;&fmdaueV$- jtM7<>K3*TdzYq8YE;zyD3(J&500000NkvXXu0mjf)BpVD 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 GIT binary patch literal 0 HcmV?d00001 literal 581 zcmV-L0=oT)P)M*DwW%(BuM~dS-zv0rWp(d0Wb{nhCsPo z<~UB*^_wM=$p9FQMvvs#Y-UsK=hoF~buHA*5)Ov}oX_V+@_xSu@b&feUWx8`08P_R zU5mv6K&@7DFR)xL0c5k;r`}Sj4*ITdGgpg}Hy>||- z$mjFdSaf6OBd-g~DAgxDilQ6+kYRn@lDikLS8? zNs@NEos;BV{{ux)02GTwUDp*wiO1uDAiQzgy-XpQOad@XleoeQf#dNAAe~MVw|FrR zWLXAKtybL+1bh8RB;v4@-IQpv+1T6x4nf&GykuE645QI#{A6TOpO@W7;K%q2y?nP| TviJ<)00000NkvXXu0mjfH#Pmk 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 GIT binary patch literal 0 HcmV?d00001 literal 663 zcmV;I0%-k-P){oqBb`pO1T2?J z04Nj+&jK_W4FCv*LY4p&MSVWsivS$Q=_F>e+1miC)ym~^8QVhxn$6}z@6#zF2%=mr zM$GcoEYygA7;MPEg!;wm*!r?H6VRpNnBuR>*8jS`3OePchmW`5U zvzg6ilSm|dK3}C$g+iglVnMqql?sQ$nNFw7GNj(L>-FmKc=USx>2!Mi?hHDht<&j{ zBuOi7JRX-yrCzU>%jLelzV1Ikk0t$#Tr3vvgNu z%49N5r<23s+%N`%A)C$acDq}oPNy>(jsMz%dcE#)xxSMG0)bwy7mLMSua|uf?ycMH x)@rrYYPH|*wOXy)?dJ3OuTH9;U&sF+@Edn{t^vvb+W`Oo002ovPDHLkV1kx}D-Zwx 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 GIT binary patch literal 0 HcmV?d00001 literal 641 zcmV-{0)G98P)=t>#h|2=!C+CcGnyz?Bdbu?;7{R}+{++EO+*Wq@%1ptboM1y@k9{}WX zIZ?03DH@GNcDtQr+3Ui`<1qlZTrSa_RH;+|;PraH^OCVjr4j%n5(!bSMx(LWY|nBf z9n;}(2mo%k`_WacRs}&A3oMbSIQ$F%_lfIpu~=Y0JRbi6fFK9}5C{Zrjgd%1`T_YOs8A>XK&@80HF6w>0r`CX zE`Bh zu~-ZM7K??bm!|2zA4P&7Nivhkyxl4c2E%5v!M*HJl}g3q@k}NYhr7{{M8g)x!W zuV802Woe^WPMQUog^jRLlD&^$MM~L`m9mo(cCxi)DJ8KQ3yYcOE>7uohq?1Y-CO?4 z^E}V_opb)@jUXbtQw+RWAHaVGoK7c0d1yw*s3 zx7X|SWHPDO>m0`sLI7aD-`fQUf)I^He>AG9O6M^g4s8Kitrh@Gr&Dc+=Xr)~uP> z2Owg<-w%hw6ytKa27|$i0e1|w1OO_Pid}%BD7V{9+n!7&DPumLTL%;hg+L&1KA#^( zgTWvGlu9Liz|(V(PN#dl-sN(k9ch)%=K&xT3R$`AuGcF7c)eboq19?N0N8G~R+ebB zT2cIFvr$#`VUEM$_;r2sJfHxUWp}%sHX4t|GntH$T}PgMTNaB&B9S13AYv+&5=GJD z@hFP2TrNkWQMcR8X0vu5oWtRe%jMi|H_i05a8Mb-k=Q?1VJ!_x;=5`j%&#-Ejhz4XLt6S zo!QAOM+m`^`oO|k0V{x2!!U$l_|x)9INZ9xT3}UfJkTO~&Vqi5G*jcQ84h9lwA_l35&0-Lu!qTCkcW5Fv=k)El zwGEwVH|`lWVuz zc|0Dg)v7ovl?utZ-|qn=5{b`}79g9=3W6ZZax$3&(CKtY&SJ3$U_PJ!AK+DfzaM}o ziX?;CY&Mxps?yg0Ns<6WA`y~dFc<(R6bd>4&1Mt8U@#yV7={6`TrPD2XqvWIEUMD; z`5cW#04RzgJ^lrN<2V3~MuTLq*=zvP>9kHjJRaAGaX#@D1bm9pc6n*l-+Jul~|T_I2_$>7eKjO)&rQ$W&rZ}{Aa1x z>j5~Q=j0LO8904&P_Xt&!R`aI7ASg+Tw2x-UUH)%R53yGrmcXPAZc)ebp=NX2P zBGb)0>I;$n-Q)34-V{JA7UOyTgF%T9fMT(zu?L3l pT)Ym4gUjX8_88tbyEow5^#=$0z&)9g@U#E`002ovPDHLkV1kL#2^jzY 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 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmV+h0{Q)kP)8mEbN7VPayaLwib#)N{OO{Bw%BcYY|vvP2x3} zX7O~HIWr$~ZzhBxguqGtz+rs>Ux0&v+wIovb~~NUcDuExZ@1fv#lng}Ow{Z3LZOiE z8IQ+?p2=jQ8>Z8#Sszn?uEAiSx7h7=&)I&z@AvxwB$G*-076K$S_M$4RLl&8LV;yj z`v6&%tq*g#T;}t6v+V1)h~v0eECyh+*%%s*$788fdi#2&&Xx!9io zKqiv`a5x;EQ=%xQQYn^Y&1zjVfJ7nz;Cj9OiL0vGXf&SVZ*Q`uX@>D^Hai>+eLkNf zpNew19F0a>t(LXTMc?spj(WYmTCL9K^UEqK0K+f<;_2%UGjZlkf z0!fkpcsw3OQM_KSekGrr06?)=B(_8a7>!26u9)wyvk zk`#v&2U~&$MTbC=1{Xzw5JAYn#Yt#rwIFb4YX}6F3nEQANYJ9V1&R(LC>0?@i=&EM z#q);q-hFmGUEhP(^6;DP{m=iO@BHWg&VLS}l;S&~!8c<`uq61G1f$W&XfzT+1VJd3 zN?!#?l4P}7T`m`Q)aUaNLY|+Wf1BtpNRm{m)xzO0vp1Vf%0s`!b zL^fi6icly7!0mQ(3A|qK=H@1VTrM|1`tb0uv$NxLI@JjJ{k|f(+2z~q_Eahb;PmvA zyMjz6jCn+-svQc>8=W^=pUZZsMIR##WKvG@1)=jZ1O2x74q08tbbk%2(q zXBYsW*Xzy427|#)r?Y_I>go!><>lq9QKQlH`+fH9@pu3f3I#+5Sl5ZJHV?FLXTmlc7DMB?V==97t=fhdXq(&;p%bUK|@tJU@O^;w5vu?S$c zn3U3wkB^Ow4aHPi{_)dj0IaO6FkQP`E>>6>4u=E4)6>(e@#yF%pU?kMt9W^NkqM&F zXgnU@+uNIU*xK3xFdPnL%iZ0b!C*K%JXFrb-J*+&3jmEqIL+uK`q=;mQG z8re~ZL?Zk9`>ermz)fGL)2Xy0hGa6ygd_-piW^5o+9cLIP5ZLwOUN9UxC#ipU>~^?y9(PGANhJ#bVK9GO1rxgTWw~O#1zPbvH8qvZIu; p^wlw$Otf0}?A95h*$Z?_u&Q55s}yvHd|5}i(`N~OZG zY^hXQE|;37QP0$y67_n$a5(I0Qm@wml*?uBsy>s*FpP9MZQHhGS%M${NG6j2G)?pO zhoWLKnZ)Dq!{P8VIh{@cM59q3&ZcHXQOsmAk9k>^{d$km+U<4$%x1I4lCJA6fubn) z``xmvcDwDHpin3P5ClQjb;{BL0RX8~N|Gc1qtVDW!C)`|P^;Ch*Xv_dk|dX-SS)Tf ko0k%i&&BIQ@c#+E0CWR_T2(BDHUIzs07*qoM6N<$f?PlB)&Kwi 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 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_@5P)nq)q5ebn2V zXEk%qea>^wJ?Gpms;UZ~#1DKJUxB|ZuwJj@@i-zPVltVOB+1xv+wB$+!{PAxd^V4w zT41?cy4`M36#M;tFc<^?ilR=Z)7`ScV4%e*6bhzsECnG60pdN-R5!!V}AM~h6;bS{?zfOflW^j}|fg+ifT zug9|N`vn{h2gh;6Vo{rn_X}jRS)b2mI?}HSXcNFN%yc?^lw(!>L?Ur#+3j{Nmy73l zqQ)~9n9XJYFdPnbORLoafP6l$62dYAEx%MMRjbwfem?*-8V!{kmI9;ENI%9%B(hj6 x)Te+pFFRS5$K!D{8s&NZ>2bmD)A9cc`~tKKlO1JOmjnO+002ovPDHLkV1lPt?~woi 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 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_@5P)1MFbTr^1Jv#xAO?#Ti?C$TXtK!4tO`DUAczimtU4Fm35Np* z{Fsi{_Y|+V`?{}RxOZ(9UDv@o^$WaNAHWCjbAZKSk;~;EgqFWz7)B6;dc7`+qQ~PI zjYc;YEzcA!l}ag!l1`^}T}KFw$K&aA`mdqgZs+s)+spbxX_`jUbR-hF9vu#c?RE`-n|jSFdWC}MzWau*zr8S-|uBvHgtZO zNKYn{7~^NsjgS0Co6Ux0SqP!i=_E-K0O0j{IgUFXkA}NX^#DRxtJNe)a=BdbcwClc zK@b#0v0AN$yD!`zkx0-qEsEk>nj8v+!r}0%=}+B2RaJ_j8jZ$11IE~74=$I>Zntwd z9Q}U(o`>goilR&cCX)$45X0f{o}pAK0RTFkjv2sUFaQ8Fn@vfQR;!h&s@EQy%@&PD z%`~~yY88vc>*qe7FAxX>gF%ucWm)$7{oQW&<=3=QsUU<3g~I7{(ll+kT&~ya`FxHL x!Wf^=XM!MDmaSH+u~_Uod+_-ue*pgr@Eb7WB@o=qWm*6L002ovPDHLkV1iP;_7VU9 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 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmV;40e1e0P)w+cp3sNx}vo2*R(+B!mFK?RML(-GAg|S*B?+3}c%TMUlZ2 zQAz-w?lHEi3K0buQ&Qo6dVC<@E6 zPNx$91VIqTaaorCb+YTaKj(elN5n7;*D%X6HcmE8ljr%>YpWzls;X+Ykb82g==&ZK nRaJfUbL5V-_o1e%nFhSdUEfYfTWl9MQk7K=swfcyP^yWJeexm+$$6jcIzsTg&;-G09h z;B-1QScA!A(o_vPoeqG(V9*qx*XseGl*;A#e4fwed7jq>kPT6e%jME>oH&jR!w7<) zv{zQB!Q=55kH?f!&+`BfLe}ebmSyG9m1?)!0T>R4oO8MJd_Hwu2aqJm-@X-2Fr7{b zA#$$kx@B24U(;XH{i^&&08M*q#yPJ6aJ^pNQEl6<0ZEUn)!%$Qd gX+K^q;Qs@@0jA*b;6S1&FaQ7m07*qoM6N<$g62QKQUCw| 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 GIT binary patch literal 0 HcmV?d00001 literal 330 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 G2~7ZXlyz4C 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 GIT binary patch literal 0 HcmV?d00001 literal 450 zcmV;z0X_bSP)ztQLR=1K-09rV9;nZZqGECOk`PpD5U^^bG}}$ zecuNFK@g_XDI)H6JIk^to$I>f9FNDOP+0{kK*afc4gl?T`_BF2R_pb8KHz1OB}t-O zZ(CRnT7EFbehD}n4%EH;{bY#axbUC_K|qGlXhh0twIandO;S#$6Dfiq=(;|e%?dnI z&N*%FbULJ5k12}ce!nMCRaM4VrBYcgm&N7)5go_r^?J9;a5z*HckzW@LL 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 GIT binary patch literal 0 HcmV?d00001 literal 382 zcmV-^0fGLBP)U#RmUs-Vcv&hBq_3 z6A@ug3D{W&-~fCIfO9@SW?A+N0xik+eE?~i5>eAMhG773T{q8jTA>Ai=Xp~ewrw-U zL{Xe4SJ(9>z%UF|RRuu+K$4{U{Z2%j^DqooR=->U5k*l1z;T?n^L#$n1B5k?1VGcY zx1*{m09lszYEwZFezw-%&q3e!|76g*uA4gY?KDj@1+Ui&z&MVZ07X#%h~xP2cuY=N zmQ!F^*7bUA+jbK`lB91NLf7@nPx# 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 GIT binary patch literal 0 HcmV?d00001 literal 382 zcmV-^0fGLBP)o8qIZGarymz3q{j3 z&+{my$CT+X463RMhNfvj5af9-*`ZPZ#u%kkQ4~T*mSwx9%T02t`0ASb?%{a5)|Lx! c0nP_}0J+w6G^wFA2><{907*qoM6N<$g6VjbIRF3v 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 GIT binary patch literal 0 HcmV?d00001 literal 462 zcmV;<0WtoGP)PZPn}zJPxPc(31B0h7r@5CmR;PN&msHlKNxB0tg|~=@fvbY1{3VdSAqXeOyPNzzx^4#C+^){Q0@B0AO>-DEXyId~)e&4oj0H$ebnnp2= zM#J}gmKJBy!D6uhU|AL+WImsFyWQLEmSq`BEK`vmkH=FDqtR%$+f}Po#>bTj5Cj3= zfkQizBY<9!BuQ@o1eQU#TCMK)`(QBO1^9kjzJNme0fBmE9D#G)kN^Mx07*qoM6N<$ Ef}p>|n*aa+ 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 GIT binary patch literal 0 HcmV?d00001 literal 439 zcmV;o0Z9IdP)IeZ7lY&vA>1K2?j#7;#jSu}SDl=d#>_G%~3mY*Cx z&!0c4CWJtr8lh(mfC2DrK$c~W<3v#efKuvtUb{yq%lG}KYciPtI3AC!E~NyNQqweb zU8j_uPN&^&XBY;6*=*KL0?V=hR8{q?91aHnK@fD4AW4$xbSm2-^>{o0)OFp#As0mf zU_PI}7Sl8ZuvjcQ0Nidj0ORra%{CeVXqu)2Kv|aGxCgRPPyGt?FM#aB^?D_Q$jbSA zW{jyuXq_|8xtw|cgpl=m%^2HkHUQ!{ZnZ1jgUjV20o(1Cb1sBftyYQvT_vS$+hG`% zW$C)^Uk_PV+_&HFUzeJuDGu0&uj?d90OWbz7eJ1d%+U+re!l})E|;x4wGV#0gb*sv h{yAXy=nsH*{Q%hRmesQWCwBk<002ovPDHLkV1j`7vwHvl 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 GIT binary patch literal 0 HcmV?d00001 literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysr8J)^~EYYTuv&pllnLp+YZoo0Kg#XzD({dQNALIo=~xA(zQrw%c9^ez|h z-rFO0D7%6=+f_h^rTb^sfoby#Z<=^7ods*yvbtzwth1?r-PFG*4b`1?Z z>3RQqe71??Sp%M>s=mSZzaKCBljgH@kp|NQm6Mh8y2NbGel_6ff7SYPn?wWS3-&*Z Ymw%-%TO%HG3+QDAPgg&ebxsLQ09M+BdjJ3c 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 GIT binary patch literal 0 HcmV?d00001 literal 405 zcmV;G0c!qu8~)-fX!E4GmpStd zbGR@JBEpek;b5JB6L1241r$Xg%W|5gr0n~CS(XhCQp<51j^l{ya=GZb9t6Rriwe+n z9nbT&Z6o62@h}WS5QNw3MdPIcJfBYhh@uF87gYu<%L2eK4Bt+k=i@k1n#4rrs@AtR7Uava?{>gP+04U3H zpOCXGyWMVpA!O4uMN$0jC(|HF631~n%t4lAZQGKy=Xr!7Nm81o zh`6rnCV=_rSCJ&iJkP%G(_5JH+j0U`sfJysr8eI19Jg&>W`JzX3_JdVGeV#wE`AmG}*_Ns71L{y!6s#jV?&JIp>X6UyhPrAn=IGNmyY~@w#=dE9Y(g ov+Q}b{Q0jb?5X@+544-iRXwLJTzszYIM7QBp00i_>zopr0O8YZ&Hw-a 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 GIT binary patch literal 0 HcmV?d00001 literal 389 zcmV;00eb$4P)KuhZYF5ny-L925Ctwtw8;$I}9m@On5vAglhqS^RXFW)zl&*Z(CWGF<0 zJM{rK>j6A~{{m>5=0|^;rV9X`=Lv!k$MMz-!|?Tb<#~Qw9saI)o-NBFga7~`WP7#d zR#k;Zg2RX?iU2?mgzo@+L&rf~*PQ_z|H1l1JkQ_TrX0uZ9F}FT0n~L30For_e43`O z0Te|60J1Fa{Hm(10iN*8zZG7~l61F$e<3an@W_RSm<) zvg}lwx~{t|C`l4Tv~3#zL{V(p_Us%WVp*1oqR6s5j^pYK!=P!}vMh(W)ZexWM5HL{ jok;3gTOPmzxF7HdKM4w$-7NIH00000NkvXXu0mjfM9iJ) 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 GIT binary patch literal 0 HcmV?d00001 literal 653 zcmV;80&@L{P)3poEa@Z!#K8`Nh~T7yf`gljgFi|!f))f(O1HK{&0t-m z^>qkezMx-2P21_~+1|PL=Dd@4-{nz+5d0(z_+k7C{09QY&m@VWSglqc9v&EmNhA`- z$H(eurBX2%4B>G2-^D}|q9~r8o^l+=vaC{ad3mWMoSmITA`y)*XbI$UId$>lGysm{2q9Lh6~OiNwT8flhs^W*E=f^TI-LeE zolXJRY&Llldb)^V7>c6YZub@+3jSP()y9uI(izpv+zW!&A} z@jQQcc&IShY&IMYTP&7ua1e{dip8Ru5d^{S_bbcKIM5mu^50O9&*$g!d9&HvN?R_M z-!SZw$)qGng+gIB^z`(kf7lU1*6X#;=c8%*>gsAM`ttGuU^1EL@1oIYbaZs2B#*~q zWiENWUWda0z-%__9CoQxie=eYET+CzyJjOZ00000NkvXXu0mjfW+5)X 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 GIT binary patch literal 0 HcmV?d00001 literal 707 zcmV;!0zCbRP)jpdBnt zo$O?xx5I@H{KI^uo9~wQo}1_9oWso_5JK>m`UiikEno`(06`EUk%-sphsJU>5U1^~#i ztoZqS9soFw(*Wppy8z(#`{(@2%S!+_J3CXGolXY;bUNMB(~~4g8v$fl#+fY?3TmI{ zc>pk*&2#Z2Ndf>()1oMDnxarBgc<#QUol@^UKU$pG#b$~{rLE(tp;CTUq+*mAc#O9 zpqL*YA8NpGIAmG&`uZBJ*19&u$yJwHNnI|NqbN%0_1)dwo0}VL0EAGrS~ZzWpP!$K z)9dvBz+^Hhd22Kp4u=C{&d<*^07Ov?27|NNOl`K?Z2$-cgLAo+FFUnfUtf=p zk2#KOwOXrUD2lS%?b^BsE1gcyohcfP&Rq$`Vlf;JFWpY88C!Us&tx(z%eq{y$z)Qm z*DIBZvPzO?9=zV) p-}mOF6((0004`Nkl0zO;EQCEQBbpKnXG2O++!=#K2=Xb<=OSm+Ri`ey4Mu z^PKZJf1dO7n1~2^>JK{002lxn4Tr-{r=#pg->Y7)+wFD$KA%s~`3pd!(U?poX0v%P z7_?d~w!hVCB?!X(e*XzjsZ9yQ$cfa5N=TNKFN~Mx|!1MV$olZ`t^F1y?p-?)VP9~F9t5q>= ze44I#o{z`l?--8bL{U_nXi`yl9S#SF!||cB$*AlMz|VRC?tT@H6iOT100000NkvXX Hu0mjfQi0006pNklMfx^-ckl%Vhw_ zWHKzvN~@2Lj}C`Jz>LS^;{Xi90KjxQ6(?_QZfdofICFP*#{-N;<8c6=&)06Z`7y_F zo6SbA*H^1msj^rs@{C5KaRlJ%>Pi@M9Ean$-|zoSY%-YuAel@`OY(idFibEQ6sDz8 z>2Nr_yu5sN71QZ70L*4HrH%IX_U83^h3R6k0Dw-X^YHK>t9Q9v0HD!mPV57OkXEbZ z^}F3pTAk1501$~pl>Q>=N6<9Qk7KczRG`!80O0!i`b00nFpMCGcsvdOEXzs-qtOTe z+-~<@nH_IF`F#E;fYLKqtyVaWQxqjz4Fm$AP)N4)jhlA6-G0CS{QUg-`nuomWi{LF z_Wu5UI2<1BruBMVth~6mh(@DAdkbN=+XsWe(Pp|MmNtifQwFicviR4UD8 s(_*n?vsr|Ytme-ZKR>+Afd3!x0T->L_LGj*%K!iX07*qoM6N<$g2mA?8UO$Q 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 GIT binary patch literal 0 HcmV?d00001 literal 566 zcmV-60?GY}P)TCHq0TPl?v{rP;J49n#*Lg>l#X8@k(-EMcM)4>>z zMkDe^MN!Dt<#MTKiJk#$Hd`up64%@ zi`i^e6y-&LEXx3JyWP}`#bN<~TCFyjOe9Gv7K@wBhN7q!4_Y#r1b}|OuVx$$hsWc2 zz9|hfIUEiHz+$lgfM&B9i^baQwkV2LtJT=8qDAiYdg?L8Z%7kxJRS)kl}ddCfH6)a z5`*U%0MqI8tqN3) z$Ky;U^N7jia_93|&s>wyhnFNtPN!49-}HUieF1Ol7m!cud$y6`p8x;=07*qoM6N<$ Ef`B>r>i_@% 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 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)f zc#YTG=5bH89A@^+?%CO0Oi>j0N&JBy#;?Fj{M8dQ8jWhT+WCBTxm@XVnjnZb6qHwB z7)FzlN~JV0{eJ&h`U`<2z#1n|eWlAjq=(Y=*B)ZZsODQb|J|4hNUZmCxr1g0NUDlgY&4a9|kr9S?Y(*D%Rs zlH)k#9f1B&p64lwQr^TH0s!Fi`OsLF<@I`9E|(1x5JeGf>E&{fWqG&Tp>CMXW?v`j z?PQC^g3c(zF!TA`=kxjfegGH@2A?*Xx|>i+BoaYPrBX4{14U8d@i@}BUatn2+-x?z zUM~Q2yWIy#k|c&0aPQ7;~HL) zq;NQFz>9`z+-|pO&swb(0MzSs158F!<2b(G?-3(O5=oNN>C~{xE|bZiQj*DJG#X`D z_IA7J?@dh4&rT48;c)15Izyq*yT1zT_v`ro3;YAeCXGC%@$6o_h~P2*FR90Y7XT!2b+5IXPJ=j_5H-lG5q4 zBuVjj96+H^Q1r!Ou`FdJz~|@Z)z#I_%?$va=LsPU!zk}(x7&R_-_z66`hZHM5{X2z z+3dG3&gF6dj7H;RGSNua0`NTVbUGW21|g)~Zhr;HvMfo`{{H^Q$A>J-YXY{nx7}{H zvVMMkRsfHWkAx78WJ!_$a2%(&udlBx%i3(Vd_Mm*?C|i= zY&HX+C`uo|S->P)%v)NoM7DWNnYBd1FVljLf3WXSkDHICvc>G-RR4Vm6 zfMFP%<#0FzgTd`~dv+}r3+(cEJkJ9-j>B2BTJ5zrkw^f5TrL;YrVfV#0E|ZCwToq0 z;>Sb=G@DJFWxZZsxR%Q$c5ODB=K%;IjYb0i-EQ~7KA+EtPjJ^PibNs+Ad|^nJnYKl z@_0N30HsoCv)O2xz8R)csU9A7yWLK&*W-XpCPUNoe!ssC!!_`Fy$=`JVzGq7VS~Yd z8KcqYbUIy!4F&@MNT<_}0jASwuh+xtXf#@@)&AO?%jNJ2&paUF>;q zp=z}X0Lf(1>2&t{ePaCAqiwfZt?YLDWHMn{R-sT3<0YS8$Nvxb2K2o@2QsxxYXATM M07*qoM6N<$f@5XQd*Z8Vjj zZy>R<5X4w&WnrHtP0%N>wG7x;r0_))Svw0!7qGF=QZa>?7!X7W@aTyDMU(!V0{4p0FdBDP)egH>UO)H=V_W|7)Bbcs7?#bPlG!*;uUKA(rf;bybByXy7&bUNjCfFVLityX)q ztk>&Kr=zOsY&M%rCjEY&{Q?KjY&M^{Y}?i}joV=sV87q@dc7ZAmSq7LkH>ETSZM$N z*LAs(f1HC{E(c(>T8SF8R4N7FbUKLwls%nPgqACz3utyAR-P ZT>-WXL*43-sP$cj~qK~yk5MQny8F&a!3!Q?kE_yr7B&Ay-_%qIB4+z|HMFpzOyba&Tr zxo}S!=j@yx=jA^}IOp)w0`S@X0e=c`KA-&p7>1Efrzxd`kWQ!bJpy-Okx0aulF#Rz z(Zk{JAon?dF{Y}j{oHQ1ZH6ESjYgwbELN-4_GF0gT6E(=($gJ$*};ClPo+|v^FpD(IbSRm z&S)Z$06;1AJ|a;RGnotk#+cpc$9HnM+zZZB(=-6VV9@F8^?KoO*v*-`y5&G10AMs4 z-941j^?Get)@uO$e&24lUavQsO<9(AyPZo_x)s`Hvl$MDgb+!RWLf@(B>(?Se;x1! XUiw9ZoiIq600000NkvXXu0mjfoh<07 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 GIT binary patch literal 0 HcmV?d00001 literal 577 zcmV-H0>1r;P)0005tNkl>6VZUV_{(<3(d%ug@3}zihn>^jIFYhQZ}=(P!=|_CN)Y^q=*;z_6Ga{z~`%i`Ft+R@^-tm+wG}TDi(_w2=LQ3 z9*+@1JkN`w$Z;Hzhr?lg)w6(FttLs*V`Q~jA%p;6I2_Uf>h*f7)%tRYVVKEeLIqeZ zmpYj&6biH{N+c32%ii67zaI<+0YDT*jPdPuqXHa{$H!jCX0y3m?%p|r!N72T1^`Xd z$iEatNvG52^O?j2K>z@r=V<{LW2e&z02Yhoa5&t9v)PP*1wm-H+f;y3sRRJ!a`~@# zBog5`uG{U>oaLkk98MuG{VYHUJq6o6Ux} z`~BWzG6BGJIyKZjHBCJp4*;+%OI(M;QK?h_U^E(i&$u?5&CzJ|F_KIs0if6G8H@jS zw0JzeSS-jz^?JRh)9G-B{ikPO&twq~=L&*#_c^}i$GzD29mS}Yb{ zE3&Gpfj|HNGMS8~X4WPC^-bUUJ+n;hD P00000NkvXXu0mjfjGqDA 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 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_OdRP)Y%7X~uskL_(w zcn>`7e(yPaw(q(3a4A9vyfePw&G7;JLjcBjzuzN-^cE0(fiW%?i!96D3OSCuTrQf0 zx&YJZG!lu3q9`xh?Y7Lw=ksO(7~{oa!7z+UkH_Nx!1KH&K%)l~MTJ74bULll{eHi^ zYqrUaM&o=w-|MpI^?J<$Hk%Cqbh}-ZE=dvq^m@H!v$@;ti~~511AzH_zFx1Dx*!NN zO(zlwhr?mF+f5x)o6QCQu~>{43T;5WUcdSN762i{?REn|wOTa*&^0P5l?nhH4hJK{ zNY7V{$783{`RpeCf<@tQ7$Nj*w_Gm2sI|QKxlX4u91i>a{^@jjmeXprd_JEMi%O-E zGA)3NHR`^I}O3h%vEuWvQ;%{lYUnK|b$0ukXmVZb-zN8rB|2#3RKYipB}laeI8zP{Go z<>27JZnrxej#8gEQ%ttlq89&Q6-ScWXxuBxm;$`L?Y4B(gMI_G7-`8^77{9=JxhB+pD3WAr_0d zTrOrD3VQOlMcQ+c10H&v>y;W0l=`?_@t}fov@Am`XuPC3-1CV7|B~X>7 zXJ==fot-Rpg=}hS(&nYM2hYyV0vH(?sZ$5xa2UYAz<`R^m1%EpSH`j|kB*MkFSKkn zYcLoN4-bD^7z_Y(oyW(=+2HQ(4nRjoht|f(PtMQJkB*K?r4oPMr>7^~m;g*nOt3+X zYOfM-I-O3ZQ)Th^_y}Neagis>=kD%qmJtdBLHHAai;D}T zJt(-ky4u;~_?-Nn6SR5J}T3uaLmM$+ZPft&YXm@wl z?RJwMa=Bb%V`DOzRPloD$BT$`Q=%@kj>6B+?nmIS@eADw_>(U7=A9dG!{fr zYB0*mlr0No!AO>BHvRz?v$9fFnws@26v;{oODh)2j2TWm~P*u}#DcR;!iGW($YIu~^LG@c>{LMx)Vi97hPLR;vny zB9%&IG8w5<3c&02US}Ya$=2)j{n^-F)%$^D_Wp>rb_aVHmU7?DzZSayea3@$~dW=Z-HP4u=3F zlA{C5idM(taj8_Q)oT2r$z%ecR;v$Ab9#_j(OZedV$1ONa407*qoM6N<$g6twVe*gdg 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 GIT binary patch literal 0 HcmV?d00001 literal 606 zcmV-k0-^nhP)RQ z<{93^nc925_kPZ8&iURF7-RU&AmNwe1Ng51&1UlrfbK<|+wH~}(=_e(`@LST-EJqz z*OJ38#Ar17zEH2%a~wAq43yUrs*SeYZap4PwOSQLQO=qqNl_G6tCcK>L?ZL~{LK@D z!{PCG{B#N-6pO{=O_IsvPdg|9d_G^jURTZ_7!1mcp+_PNh;w8DO*7 z9tmlyqG&WKYc7|If-Id*13;xx(e{Y|U^1D=58ZB8LAGA60f1o`&0b_OnTo|C0O)i| zj8NTRPNligFvfvEV6j*z2>Sg#00@Gh4IoL<;c#GCw%u+kXW(!+ zve~TC`JV2+-|r0ugZvFG7E3OdTP~O1l^nvTFzrBZ(`aXOu~T1`Hys*yau4=~0ALHsp{ s5V~HkMx)VeHotyl5}!Z258$8U3z7%h*~Ah(EC2ui07*qoM6N<$f-77Gw*UYD 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 GIT binary patch literal 0 HcmV?d00001 literal 685 zcmV;e0#f~nP)SXCIf(vj}Ht$tyX(`d%IL#US2rH`FwUdo%8vew|qVy0K{T33;+O>%VnVm049^^ z%1Wox0H9DP`u%>d*ZVVII-LRlK@eAZB9Q<9wOW0pFBS`qZMWMGhr@SA001tR>r(7? zy8xikXoT%alFVka7{4f=&vT4Ip}>pV?e-?1*=*WuHnCz6ts;lR0RRq%gID(Zy%2Cb z9swX8k7ENUiUNRQv3MWQ>2&U|Cs8912>AW}OXVhjpRiCUgaK$Y8p47T1LSf!j&VAj zFh(E@F#tlyVzB@~y9gRkR0(gCWO(v5J!+d>xH5!d8l3uTmL?YpE*ladq zmnlN%^YfD=N#P`qMkBA+%VRtq&z&Uq0GrL`^7U{yTvgF{JQh1=ep05B$piqDN+rSx zj54KZnmceFb*osf*W3fcFb@F?heMT0wOXy@a{2ealHlG=5keA) TfhFW&00000NkvXXu0mjfCNCx` 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 GIT binary patch literal 0 HcmV?d00001 literal 606 zcmV-k0-^nhP)1xPwJ59D%t8j44Rlfr7Uj>SNaE62j_Wd6l(^sUDSi9pj`RE3 zyr)ms`}w?jy7%+kVWKF)C#8Z9>kIgw06`Ew2%sn`9*@5Pz+Q>2!(#sCd0z%eR=z-CBNnM~%P zK{BS}@fZLKg~F4Vt5kNo9ROICRW=7Gm-Tvmxm?OK%w{tHU>K$h(C_!rAs7tG0~`*= z9isrC*XtXN271qf!9WI}(P#j`X0s_?72$B$>2&_?=Al-r6##g>-ghRsTCD=Wa5$9l zSS%Kqd!8&imSz2Zzt88BGMrAQ{eGWHrQX>^48xElDc@o?o7HNy@9d&7UK%i7A zT`m`?X*U{;9LL>mH)Q~H`)~dH{FKY(?RJX{=kpmYiOFOl-{J#6rBaDRA{@u@JYTET z2!fD`CQ`fIMupSq^d-P%v-#`E;czGxi?LWN8jU8C$yTc+isE1}FququjMwXB7)J5; s;HjF;W+)UIjYd)i?E7c;1^l!A04f&oAMt=3b^rhX07*qoM6N<$f(0xQy#N3J 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 GIT binary patch literal 0 HcmV?d00001 literal 690 zcmV;j0!{siP)C|xP*|aVuMRwK?SD-g`x&+OrlLUH)&N|BLasUT$FSWL{V~yP{9cNKspT< z1+9sPhX+ArG#XuGtyb&q?(Sck5Yg&fI-Nc|Je*FaMAYy1tyU}7D4)+0k<;mX zdwV0I=jUgRm&;`l0@Z32!0YQP9~zBD02+-7TYcDsDo zZnwF^CX-1%x7+Oi4h|0P@9!TUAD6qWFj=8cFbs2abi{``oo;`BAAnY?<@2+%GlfFY z>-9c9J{%6mk4$d0T3pKIa`Cy_?FJB!$N4ZGkEhdV(I#JCUvnCbMq>d_Pfr2d-Q97o zg+jq#FmP^*79b*%$poO)Y6%1)k%+}&;m_dYTZym7C;$Ke07*qoM6N<$f*$-arvLx| 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 GIT binary patch literal 0 HcmV?d00001 literal 674 zcmV;T0$u%yP)!KYxCHIF6fP{C_c-t_hL6$*vs%kc2lQ`T2QwcXxk(-)uHNK0c0*j}wW6R;yLfrqO5=0MGM;kb1o? zd(t%R^?E6a`ZtK#Y+jbZVr;+P2QVIw0Wb_xDwRAQkI`tfTCE(%Rjbvvw>P>^5xVQkYzrU|y7KOuM0FopX z3Wc?Ry}dmEE|*K)EHW4j0CsnG*On-s&##EH)NpfiBcI^l;9xbtrQL4la=BnISSS=W85Q&5dEV)C z{&jNddTAHJ!C5UK@K&Z(v2pY06Y6^ld3~~q}?>qP+eSP_U zEQrb&{N&1RR&<$ArQX*!)w=W;p6EZ9M-)v8b^+?a-8a2$u9 zkz)n5S`8s|W5(n0PN(x+8#$3#mL*AYyWQH3EXxEz7>4mw1&&>m$z(2<3(xbm(`+^g zf@rl`uc-iITr3u^m!(q4+A^EX9|7V$3X~% zuBTkx?{`U(w%aWsB;eZb_bh_%`( z5&-1$`Tt*XDwSe`>2w+f5VkVGCD-e90O8C5j82utCl^7AM zC>eB7EH0ug>Sp^79O~3DgLKrTljH}u2wKpgwP=SrxCo+F2zBd{PQ{8&4kc=cwa}qL z#k}D{$V;P`_g<&hv*mo}ekbQ9-{oSGB*AyW0N;!sga5z)-%#uK`=wHe=XtN!%PsH~@&p<0`Sk;m~ccx3~BB_^2YUudh!| zPHlgY&Gc3)jxJv=<5)9KyaU1SrDM#tmvZ|ec_`Mk6q+6m6i z&Qwe;my^@PVzF|$T&-4v!63(R(nf%!2Moi=X^xMNQQXZ-us^tX&FAx-ogI=Sw-IAM eH@hE$zs4`LQ9?CPO?xW<00009d!Cv9%+EIJ$x8nC&!$$CSfkXEa$R4SCj<8hTr1)#01Egp|cMw1FeqfwX36^%y2;jqDA zAR1d+Tf}RzSP0SU^^HbD6vaRwFf=se^ZDq6dU|@6mzNI?4ip4pvDoC~BungeJL&fL z_&72$Qm@wqK_FyycGmCrpPru5V4mlRYhq$Tc?AFjL6EKy0HD+9-rn8_86O`fFq6qh zg7f*j#bQz3qFgQqz-Tl|`YbFg0O;@Ur=(OW(Pgobl}d%U22cyx3G zz+f=2u)VzrrG05nfE>sZ^>^C|Iplp68pJn-za(+~39PPvG|p Z{0IIo#$xdaS+M{B002ovPDHLkV1kyLgsA`k 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 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmV-F0>J%=P)uo$d1!D5J&1Umt*EFqOufHZxOHHTKdt^47z1v5l zk!hSvCe|6O0JGT)Kqiy%csyph(P%^|?e%)1C~_P}2ywgJk|d4CW7~lBdR;D;@5fXs z1wasl&1O@nR4Ap_>opJv0LbU_*Xz|V410ifyZsyr00@V}kH+Ki`1ck)DVD#< zj%-|0pU(#%nM{7_9q>F4AR3L@0ubwUz1?n`%_hSzx~}i{ds&tfi3H2C01U(EbUKkp z#2Ua@yA?%gG#a|Da~vm%qAbhRYW3&m$LVw`it;l1>xcHJQmF($lB7=!`FuVD*zI*P2_x}r6tyYCX;eJdc5~tIN zQYwm~S@&QtFkPCaJ+7>`0II5*Swf*uJRawHURBlmF7x~Sgb*{p>-DlM`{;eQf>x^q zz~OLoyWJ<(?RJaBVkRJ$%e`z7`P;|qa=EzOZkNmT-&OJbReS+&=oc8(vHp)XKpFr5 N002ovPDHLkV1lty0%-sM 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 GIT binary patch literal 0 HcmV?d00001 literal 726 zcmV;{0xA88P)D~4L5UKq#2?rhwGhNK5i7eO3W8QC0?|eV(aK7j!$y>p`2*BKPOuQM5lLYo7HVQZ zMBP^$EXR2o&%6|m_omwY=G*&rZf16uhY*6FG(P;W{UZX4#bP?0o~VEhS}vCpi9{6B zU@(kEqwRK!y(CGVpPxIO&I4cAE3jNH^?H3Y8cn5A_xJYzz~k`*0>Q_}2So^lLKFx9 z*VotY@9*3M#A5N=+Z&#CyIm>{x7&>nayT57N@X^isnu#qMyJzp5O{ie+WmXkY?jh+ zxm>H&3gcH-SCj?^fxEjq07#`$Of~=j)M_<4ND#ziGnvdLs}Yy<$%ZnptoyWKV#4f<{X;Ns$f zK^6*yr}Tl}?`IG^9uMmhsZ_czf)Ol*-zB$-Syz*4DXx7!adJW8NYC{Vj;wOSaA zMx)_y_{+6N3G{kB9I;F$yS%)-xw#=p@|d;X&B6bd-CrQ^8@v^NgnoT@#sB~S07*qo IM6N<$f)?32CjbBd 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 GIT binary patch literal 0 HcmV?d00001 literal 527 zcmV+q0`UEbP)i7FzuUFHwVzC$q1g`NV5()NqKnU4xw`Q}MCI$z*z6oo`GutJSKi>Tb6aMKKr*x?HYUEOs~?SPuRFAFsa+_yum;F=?GK RBK-gW002ovPDHLkV1ke7;;sMy 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 GIT binary patch literal 0 HcmV?d00001 literal 423 zcmV;Y0a*TtP)HQ0003-Nkl2XiY`I*%Hn-pJTLCR28jVJ->jJpn?@5xJ&u8EFpU0992ri-I5kxZQ3X0PH=VPN&V{WHJGuCSyk2d?FK|q?2?1_4$?GbeJF}@ zxm*Bvo<|7T?RFfJ%(PywUw+dxx7#i4EOhkQwhh3tEc&K|;a4#L2Eac6d;!#^)mRhK RsI&k8002ovPDHLkV1k@huzdgk 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 GIT binary patch literal 0 HcmV?d00001 literal 496 zcmVD^E~!LB2r@DPPACWk0Sbu7ah&`89+cpEy;dp}S(bwmXqt9B9>uWV?{~Z1mpP3_ zV>+FFG0<;Wtya9+Y&MCgUa#|^q9~)$h=>-8MJyKMFrUxQ=X3H1yb8Ho4nQ;-t<`F# zY4&VI6ccs%Y~AW4!}$#ER?K`SQKP17ywwW*S=4YVHkY5 za=H8>0FcRKX0zFDw@W6I!{Ly;gAcV*sRUrTTnchH9G<(O>pFeQCjn#3vaEM*+jghZ mab1`G5Gnj^2?e1bc)XK6{w}RaGJ4d*3X}@;uixttg5`FB4!=9LE4)nkMpyqsY_LQdM>9gU@Q3 zW-Wjyia!C1&j|%8L6?wnkmt|?&c9JB0-}BvT#*r+-9Q%L7F>a@z&)hR0;WnSxCKdRs(1NT)W-wa{{Z<;c%GG=c02ypP96(0qu5M*Y&b2DW#0D<#GwY z^E^pR1>kf#0njvUu~=L#m*H?|+ctLq?Du;G6>K&ezT$el=1vqvhG768geU+Uk4FIA zZdWv?(G3@dZ<{bhSnktYw&k#r%h>b`DAt-jPbBl!(w^}b7xP_-%+1YP) z&d#7hMEIsud|4A<0{l|fb-Uf}`FxIuAz|HaH(l2iMFDWRTm+*;0jJX`48tTz=JWZe z%!Kwa#?mw;qG1^FJO{AdZUq6#*ipe4GfngLdVT8^`MxiH`Z$xju3N2E08G<791fCA zCZgl<=y~2Jv;BTA8Nl^;JUAc-0+IddsA8678AZ|cdIeBbm1Gavw&hvZbq!#%*~q*> z-}hk{p3i3h!!Q6a3_~PP7X&zt!z%-TPYcVkr1e1@$EvC>77M;CiUNS^x^g^dng+mZ zHv4>u<5<(Qs;cBXQ^puC%W}EQvMkSY+qU2Dx6DSn-|rtw*X#ADz7ZOBM8u8#gOusV dYXba#zz?JukpQNi4>JG&002ovPDHLkV1j`sxL*JO 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 GIT binary patch literal 0 HcmV?d00001 literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*eybgy1C)S5pFCY0Lp+YZof_MFL_y&A@^l87EkXqsyjCz51aMAe;G5te z8^Hd6K}LkVm|w+r^K9LmZ)Q8$|K;=e)O}_x>EO73g})|}_W}d&2YE)rW82S_f6bp5 zq;<^Vd~wgk>h)7jeVZb*^vhD|Yn{dCEcfeez1ESjw)EUxi!jC>!uukEXvwJb*O{oif5P948( jc71zk?!au~5V?QZ$tOLDJd2ruzGv`s^>bP0l+XkKZViHX 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 GIT binary patch literal 0 HcmV?d00001 literal 382 zcmV-^0fGLBP)l)Gp-GMO%A;cK_-FpS< zg)(r?mD7zeZQGs(Ii=JzO<8izl~SOkLB6Au(t9tZWQ$MNBb5P}eL8e~F98Q>UW+qTx) za}2!qLWp^u@1@qd?|b<4ob&fn0K+gKgw}OUDKW;N`2sR{NWcMo^uh@tV2ochsIEV| c%iv|*0PbkToCs2G7ytkO07*qoM6N<$f=QE}8UO$Q 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 GIT binary patch literal 0 HcmV?d00001 literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*Ii|xJr`G_5zI(bjhIkx*JMCa$gMx_5^pFJh04CW8rl`iU1kPy=oHrPw z8cQ5FZyj9DTvTxEqzb#jMejCSrr+|LKS)OO2!{ccp$2}zxsWzp=Y&Jfw$(;DO#)I*bI&_C@3k-dTx0+ z6v$vWCb713-)aVd7&<8Oc0eSa`tNompiMxMh8OH0l@y%YXzcl^<> oES!pyv?Kp+3vpoG!~cV&{H|x;clM?4fI-0E>FVdQ&MBb@08S~0mjD0& 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 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*QIRVg%gum7FFaiwLp+YZowkwphysu6*_T!6%_+<`8hR!PZgK=cHxDxd z=?6X&1SJ}^CkWhaJR++8Q9C%|{*Rj+5BIjmzhboyGtOYEPxzqcYjBK1Q6Nw=^grA0 zeasAky^kdxz5k>dHBFV}+|DyojF>f->W4&jPYHUxYnr3B*7M4F2NdjGpV(i&UTSD; zeE+-boUD5fEc$Y9@A>Y+!tlKET8ocM)a!~jzwP>hWlwyz@xLt6f7l?Tjfdgo18>dj zZ6~5;Uwb&m`N*m6whqm=H4Ho13R~7}je7m(6Zf}`sfJr+J*Q6n~1rPDy66`n4RAs)xyPCdxWDk#u){F&$i=3pk-7Y^K37n_8pEMT^} z(8TxRfVIcH(wl2epRQ3CI{92)`0z1_f=S$b&P+lR9>}xIUwc`xWlr&XS;4*E^|{w< zy}VI8am~Xy!cIN4Hy)LrwG8*lT>Jc*<@dCvATEX_Q{+^3h^^;m=%`rbD;UTTm|c5m zdADb<*RdJbZpEyh-o5txlc?+-L7>9@*Y~wvyr9m==}~ZAyy$?robndyJwP`zc)I$z JtaD0e0suLQU(x^o 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 GIT binary patch literal 0 HcmV?d00001 literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*F_oKtjzj{5u6epRhIkx*JIzvuoQ#(+U6^Q77k1n4D22mGFyZm zEwDHtH{)jF4Q5UI?fasQUe@@=ExYXH^1!$DL8_<&qez3$hIOy)Ql6fYS;cAEWFPxdo8Ygrp4lCPKgUe5U`vAE1_R&P&BSv!p~v!ri~3bD!HLCr@=A{;XaC~A(Oz!5Be~&J^OQ@QbguJU zm{nsSBlz{}&HTW5jFD&K3?7{7SeAKe)%sKWS1@of?2GxvroTPO(FEv222WQ%mvv4F FO#tELb(;VH 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 GIT binary patch literal 0 HcmV?d00001 literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*5yLidCj+3+IZqeI5Rc<;ryb;NRp4>BXyM@gf+LSX`h`Z$A&y;)ISjK8 zu$3|YYdkXH56i@sBh2qps$MKUYUX3;c5U*^(lm~?1P(hD4n-5GN5aPo85ojz1owWg zv7vs6SpAbU_BRu$MN-N?tPjqmHcY+c8-pW```PTN@K14iVp8Mo3HP{aWU}0 yoY%LNlvd4IFTPtt{l4o|pT`ePS?-JfVc6d5@OtBxC(1ydF?hQAxvX`sfJr+J*aoPEgY6XBoGd*1#Lp+YZy>?KrMUaOz;onWB5(oAY2TrdGlCl|!vKJU- zFEsAmx$exG(|Px7KcC#q5ud$rcIAzy0uBs}^_*uc^_etP-~V-GV3-oLW2(4X(5X4b zSuBiGf+UiYc|<-e__gsGmttP%lC6D)?{fFW1ZL-czZ`Y@((ye3uelT%7JQd;vXFWB te7+sSm8iMJ$7XysFWjZYq40pc!CZ%@?;*QSp(N0e44$rjF6*2UngG06R~P^Q 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 GIT binary patch literal 0 HcmV?d00001 literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*ann`dS6=~z&U?BzhIkx*d+j1;ivbVY0}XQrGY_`{7Wb1JeGk}nHQqcR zYUN~}F?T`Ug=&o{&CI$h^vnOwU-IGiMYkosJ%aOmxcQeeiLN;CpYiuTdyW-Z_rFI5 zg}Tgn{&UAyE%qM6*z1f9TdzfFE8VLWw9GSox<5Nj?zo_!pke+~n~gf>EEyD(1Pzb1 z2yk^TJ+Mi~MI@O=(dV*@%ekGClA`SzN_09bc$ke>XGQIQu6@eEPwoeA!}q$|+x#15 yUcP<#@Kwd-#sA|XuYcWg`%1JctJVkR1JZR?Zf_2ng#8D4jlt8^&t;ucLK6V69dly< 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 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*2~n|yFW&-%u6VjQhIkx*d(Dxz#Xx}dLZaw{1*HspT`V#^EGh~Mg&0_Q zxh5D`tY|rS@J*sHA2+*N=JyRR?aeadKdbvjb#gp8!)>&jf%S*1!THTw%kGzNRp@W- zh`ruv#HG-}z+iYRrlCV3dC&J%y1Nv=*Y4NxUMJbXA($D>^!7rJ;bDU(t6o_2?OJ!e z^lXrzvGSvBxeN|2o!Uuh&t;6eJuaJ^k8XOteE#-t_oA~WGoHD#?X8LLbFUsj1}6^A zhVw5UThy(!elB3hTkyN2^Tn!r%e3})F^N3jZ!njT|Kyim+jAG_KL$@%KbLh*2~7Y6 ClyWry 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 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*Nk-8Go{K=CE1oWnAs)xyPCLlks=(8Bk+p<5fl0P8@Q#c5O6eU=cMtGJ zsUP62U>9<}cd*@N$H)7(mi%=3FP1THcQyv&`OkO0-+jM1HL}OB_P%kkhp+ifX$P0jHp~rMuc<5h=GE;xdD-OW zwkf-`;(BVFy5oFPPRT`NZ_h2RU$OH4BCZt-9~mnjG9O*zwR;B8e+-_kelF{r5}E*X C7ICBi 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 GIT binary patch literal 0 HcmV?d00001 literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*Nlk^TOSFMP`#fD7Lp+YZofgP@M1iMmcd!Bb0|u1`ESx@EdDK?)oo4^}xj>hbTkzoIs)L7THE_;ouxGv!r9bo9t-ZYxT#6iu zEdtM%Y`tb#{yLSht4?al41++Y8B8cek$FOc2krFm>d^83B-UvDtfU7E2rI{WrEMu(n{&Fu$r4g^lS$F?t`VUDrVrSPa{ g>ywz&9zopr0LF!Ac>n+a 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 GIT binary patch literal 0 HcmV?d00001 literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*Im;qtr4FFbB~KT}5Rc<;r(Wc3HsEp5k7ejTz}CVm(a3v(Bj*6e0hJ0C zw*=-*jtNa)^tp1cY*|_pa_VpFnjews-eT9HVpdA)g)yl(F#TanxV=rD;nudRQTF?_ zm!8^W!+jx2IB?!`M+bqL3B4;{TP62we!c70)n%D+_4V3HN=2R8OaDxo@+rqE@*TmORda8%JJ)@8U`sfJr+J*DTN{xe;=UGNlzEY5Rc<;r*7nJG2n4M+$raFg3Z9mtbx~tD@W+Y0cjQG z11uleDw<;og}O2d7%z$bi`|#B*F%5O>N%S$jpaWVi7a4X{iED4b7o}S{%P^9E-oeK z1O)|kPb*2C-o$Xgfahu9EVYvfx;4Ldtvg;gr+2H_u^%&FVdQ&MBb@0DdiS$N&HU 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 GIT binary patch literal 0 HcmV?d00001 literal 369 zcmV-%0gnEOP)?=nRCuv*TopCxpjc|UMW@L7^C;T#MatrnyTq_55{qv=Xo#GUKU}eKB_&lZJROX zbpjAk;`sfJr+J*DdTUm_$C2`Hha1_hIkx*d(Dyeu!0EN10&W44?I_}%-ON2!?zV0>ChFoa|2E~^6#vm@i$n2$46k96iS=&#XQWSgr{M0FzCaBGS9(h`xrQ6>xP&~a!BKg&g>iZR|mSwIk)_eYEmfZ1+d>sEm4GtWTXYjAS X^F`x~V8{`m^BFu{{an^LB{Ts5skUmE 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 GIT binary patch literal 0 HcmV?d00001 literal 362 zcmV-w0hRuVP)_AGm9e@=`2bRF?KssO_Ovq&1tUuArZsK{=8&2Z)0X|Yn>`K1a#oU5h z@FPUzy}wZ4y|1e3LP3m?bN;U~h%vqf007J92L(igh{l+z#QmQOVB04T0qPZ>3xn*rQ=TgemIz4}R2LJ#-M19|f5Z(fq2TlmtdoP5T z*UACR-|95M>!NuFAflA=1OWgntKyu?))mqk(=-Vo5HW;ctqmb)t;cap+h7~#hGD4d zT5D~sO?zP5N4u^|`}s5X!P^el&ST?$(XJ!WfCH2?qr 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 GIT binary patch literal 0 HcmV?d00001 literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*Y2hpH<)wi_&pllnLp+YZopzA7MM1!|aC7-f2k#BcFI}uI2)%KzVzA!8 ze4J|ovzLTb0>8?!ikpVo(|P~1s2omy=HH;yav`sfJr+J*83Cr{H`0JY`#oJ8Lp+YZo$4sqV!-2i*)%|=q1kH%%K=8A2@TC2D_CAF zC=HMaaZ*Xi=h@w!EBRnc7dU$6gNlBIgkXmQ%YT&)!@kEW>}D=oSu+vR%>zxc|~O_-4b3~%CRsgU|q(%=c$pimff8E_-B@@3k!qgbNQ1? zyPP=U=NFud%zi)TV4#D`u^Ce?&1G_NaY;L8`MtLORcTt7sdeRTv-h>vOAi~&nQhQ8 hX{kPwV8?`sfJr+J*8STw$44r^N^E_P~Lp+YZo$AZ$tjN=lcvH3@fYZZ)NvME9XhIW<$^#ae zhURx$RINYmvhjOeuJ`lTbS1&SIZqV%4l{{ucrc$uQ#HBg&oRsLeud{e413F6dJG@U zzIN-|+hXaB*O(dvngo)17H(DB>M`kDsitf8+r9RtPoh?Doo1H0=ggd7%~lr<(Jj|b zyqp{rlD&7+^e4K%9_;p902??0Zomk-fw%!1;0EXfxB+b7cOW6&>`V0WVo#Q|`L(5gERN$qPud4PY%kyi z{3u{uS9oyom6EmAF-A)1vMl2`f^rV9P1D3VPv1?`IOiZ)P(TQQ5E4R2F6Ue+1xbY7 zLEra`v9c_a8)F0}{y~EFeV^yqIhRl108j_U7>sdU*ZE}IHcIJj9T;PZqG;RpTs~v$ zwk<*k4a1OKr4%6qxE=DkMd{h7dUC@ZltbK6YAbgpd#-i}{h)^!=l~fZqiC13}EH*U&1Q Qf&c&j07*qoM6N<$g7GYweE`sfJr+J*SswnqTQh({*F9YvLp+YZoqCb8#ek=6@txh02YFwySv4u|=(K9gd%$(` zK;8oB8N8Qxi}+bJk2|&o?`W^f|EpQ!DV(uv)dv+z8y_JRN1;Cx4_J!(?)%hrFCi^k z*O>W$0gv6B=an+!*yLp`nZnf~LO3&pIUJ>R%nW z&dqSVu;rnNuX)J>MWtk)$Y~E-1V3)m-E^(ahC{G4wtO~&;Nhz8wfwtxCbHe$CYkKw z5_-M#Yjx?wH;?9@IpgwVPWJ6<@2|RU`tnlU5$K*d=GK{>55Bae=K;OQ;OXk;vd$@? F2>=WTb|nA+ 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 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmV-s0h#`ZP);Ouz153aXumVev4x|I@fa!oecyY6r!DzAv-+AB<|4$}VIcK<&7u?Jv@Cf`e zj$={%yHp^A;G7deAY#{bSH2*Gpp@D#_1+61NXIgb7$akBp66T$RbUtf&Ur3}YSFfB zR8PLCh|4a7(6;R~O^h)B;G7fns8b|_FvhIw3IL3;x~{2Dp!k?l(psmKPGmq5&|1eB z^C^JRzLYYboVzQ7J>-3U`o1s91L&nGC2K9`8~~POxnAHn zRMuKzalyLw-XmhuGyq_XxiaLVOLTK~s^{bN2>idm2WA<@_K>}J`Tzg`07*qoM6N<$ Ef>>6QCjbBd 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 GIT binary patch literal 0 HcmV?d00001 literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J*F@YZ*25*2u4?SHRLp+YZoqABPMS;h)`SIN;4(!tsIBzuS-e^?yV2@yu zox!(-`7MKW0)I^Tv6jehN9@}x=joYWH##48fU8gd{!_jZ_AL&vo!rAHHvFub=F zR8$hoTpRy9dZp$0&k@x`e2krFVC&lgvNBYVn*QLB{=k?Mj(9zw>%L`z)W= z@q2J7>YQd`ICH`AOwj%BXHJGiE!7nMY-8Nt@p$sLsliufHvD=Se&9c&yxc}!mD)Y4 RS%98p@O1TaS?83{1OUL+e6s)m 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 GIT binary patch literal 0 HcmV?d00001 literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJytG3HVXyDye&YX_nt0}As)xyPBY|cF%WP)z9S<$IX(BGU`xWvh*jdB<+4_8 zo9EiEu<>+`;D(4YLqqGi`=ur|`aki{X=v`pHIKhP5(t7{1lUPkU;^f7rlt(tgP$nOZFt+b2)?6#nRp0=HsF^zCgG z-aR4*OjA~~yy)>zU9c{DkG9+NhS%aHvCFHjm8w=AH1TD4@Oz)smH*;=&+nARuKvkj gasK=}!wuJ@mv=CH?bq741L$=IPgg&ebxsLQ0Nv4qe*gdg 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 GIT binary patch literal 0 HcmV?d00001 literal 375 zcmV--0f_#IP)uuX0 zgni%7^DIfy3tu=aqT@JqUEk%wx~>R<&@_G5B*$?q%ksZZZQEW`B8Fl926bKUy6#Mg zj#q{6`w&9IFj$ryhM}seq9~#$!g2hvHl3y^48yW4F$_~xRnxSK=ioUw58wfOrXNec V1jITqZ8rb_002ovPDHLkV1k|AnsNXD 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 GIT binary patch literal 0 HcmV?d00001 literal 446 zcmV;v0YUzWP)Ska)hV*Q@2>e>&Vh z_x%3%4ENp!BEly{!G~1?YCsKm2H?8xXf*2edQlXW-7L#wS*B?^&-0)6W2H>f1OSSn z0ARb_esdkiAx#X!xYwZyu-ol8jtj#O5p`Y9^SrRKER!S&0GiEa5Cj!XssNYE<$Ar6 zdN>>w>#Nm@1m}4k9|`aYrD>|FDk2__N0wzt@NTzzKA+zMn9XKMl312Sf@_)<$8p8n ze+>{tvET0l0K+h3;*-hbbUM8UpePCnKA+Ev#lc{JNKB#9shx50@#&s!`Oq#lpQ zhr{6&fNk65;6&^7y3^@!90vf?>GYKo?Du;BXt&$G@0Z=pW&;4NR%^LjJ{(cw-lLzU oDNWOVzl$36uc8LjfPVn^0$XNCsPaLfKL7v#07*qoM6N<$f^&wulK=n! 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 GIT binary patch literal 0 HcmV?d00001 literal 520 zcmV+j0{8uiP)&zuW&dV7K=qZq0{Ne zvK$VF+3!Ip6slAzhrT5M`_aR@{R92}yymOg{6et`x-aB*l6YKsJM2pSc1Zp!pFJcuy0e9-dn zO!xlJx#xGd_Z+woAq2i@Kj6z&0V+TR0H9Xj+wFE3hJBa_$8n0HG8`z&Ow;^Bv6-oA zuR({yVKSN6w%uyASeDf^?RL8r}_PA5&%Qb#VA3y$OEE)F3ypUv>+g-F|FURjt?SaU8QOyI!v!I>Rul)vCC`a^C<#*y(h5o^Lc7&1Td0{Uk{?n+*V9 zI2>{u2LO;H>1_w+0$kS}jYfmPKv9%uT~U-?uQwi#P1F2jL}2x+r~nn<9{}z^`f5pB S+iC~^0000yXdAO?fYZZY~3Z2kt5QR5baANUa#1PvC8$Ql$4yC#_z1X-Dl^Pd8cD^;9Z#I2`Oquh$z422A}&y+XBGozLgtaQJpy zEEWJXO=EmO^b9;6PbQPmG_6vpM59qc$mMeJ`~9r5<+1*1wYtrQr-RZ(r_*V(*}O7M zU5}T(Wm$nhpja#>lS#MR4L}sdL?V&T=bb4LA!IZf<#IVe5F(LCEEbbxnd7+ec+6NL t*Aw5C^Z9(eUPV!KphVxD{1x~JfgheZ2g)B9vbq2O002ovPDHLkV1lld(=Px3 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 GIT binary patch literal 0 HcmV?d00001 literal 360 zcmV-u0hj)XP)$-|GIHoMif*|+^3L%tA%Yw5~FF8$9-}i5HQQ!Ac%JVi-_UL&YV~lftZbWLpIF1M*jB%dlw*Ua3 zZChQ}5kjVE)^&Y7005+vVHm!r>Nw8zfVb9lwQUJ^otJ$A3yp+ z2ui6Cf-!d7xL?#V3`1F#`@YZf3;-D8i#vEO+5>n1XY~iin5?d03g37D0000)m9~P|q!0^>*w~4URdg+FMeqlRU>B_=)?yd@_ybmoc9wz?D-A*2D})$4xFlYL zJ8+6+XLgroVdmW(hEj@mngegP58!_S*6TGPq|s=Y+D$E*D2nZNn^HQT&sml=+;0tV zI-Lk1kHf%zzqb=mtJM@m(Oj?BI~)#wK4L8g$K%oIbUqU3aI97FjjIZmD+4Jnw!mLd%a#F zkua-%!z=7|JD1DF^Za-`<~U9e1WOMvW7ro_N*RV(E|-VHA)QWJ{r;FwE5!5h(ZYSJii)CM2L7y z4Yby85v7z;>X;gQoDGP$EKAeaXgPjLsg5(o>YLU23y@MGBF;Gx)m<%wkWxD5KH{JH vr^t-4$9SlvwSE|I`sfJr)605#|q~NlSo2Pd!~6Lp+YZopzSDMM0po@bO(C9Y*U5Ld%4sHZZ?su)e@| zge%SK0@obAH2&E$&gLl{nR-}lkMKiv`44jTGdotys9JHttAXVQvqRlI8=mIkyxZG$ zt?TznV{2HJ*~Ibavdwwxyl2|hTGnTFAr24nC>i8=j8L8 Up%mI$1N1P1r>mdKI;Vst0Mej%D*ylh 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 GIT binary patch literal 0 HcmV?d00001 literal 364 zcmV-y0h9iTP)xtPjX9AaGvDy%pM)18l5fTj`Epc1 z1yn#5V6Bx>c3r2G+P3Y?kK@>Nos@E(=L`XJ0RWUz=iHw>=NtgC<#_-idhaQvF~&3F zoGa;G3P8lZ?}ZS@ImYO{FDxtt06^Qe#uxy&%Jl#M5km-s5Uq8gIJW_aI1Gaj;uhe> z9_;(h7y|%n?Ttk!pXHD~#z+VWAv`RR_x`l0G3I#6V}Pr3IOj^K#{gGf9zvCD1Nl7o zx~@{nt8-FHjIpL^mSssPeQ5HVwSd<8->YewN=)>s|Dp=00P+R~;PtZ(vR)ei0000< KMNUMnLSTY`>5%>a 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 GIT binary patch literal 0 HcmV?d00001 literal 332 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr)60QQH+ErtnLZT zn;dT*s5UU1{`t$QRz> zeDa>nt%l21t(wmeef)X%k57}fUQ3O9r^BJhaNy2jzU^I8f;bw3k4L>;doJ)vzBgOS cfxivv)3@@Ll`s9w4D>dGr>mdKI;Vst07XcFvj6}9 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 GIT binary patch literal 0 HcmV?d00001 literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr)60QRDO1lRbe#_dH!3Lp+YZofgR3svy#KQL=%C)Y_ddHs^0(UZ z$NS#TU-m+X!RK;|K-4tVWyUWxFGU4=$oDfibtFuf zm7uY7%JWJu&FiIKU(flRd%J1&ig)#*b+78B-raA|Z20s*#DQ_oLjEp4rj6MtlRJPu OW$<+Mb6Mw<&;$Stw0uPX 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 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr)60ap7bAip)Tv6`n4RAs)xyPP@o?SV5poe<`y?lk$$nzDc|>2YF>2-FMzT zAUKKl49oTQ2A11wnkT(?{(t#{#eTy4!<{o9p0j!ItiyptiJ@Yiy#DD)#d=E_8Vu9s zrLX`sfJr)605veJ4r&54I^E_P~Lp+YZopzCzS&^gd{Vcu*Y?}^lY}DS_sQiMXPf6LL zv1ftsh4$)~v)^tt%RKboh2shL1p7qsiMdPjZYOCvFxE5d@YkMU`8>wU@R-7*nQ!)9 zkLrKyq3QeUsj202Cyw(oug%(8cB`V+mEpnO_-baClxM9B3_lJ{v}ajyQRD-+!~3}% z$0S@_T!PbMKQ?w8kvRY0E@xS7w8(;nuMO`sfJr)603BxJnH5x#nI!_nJ5Rc<;uQ~F%DDtpe*c8d=;lRX~#mXLW=#<3@mI4Ef z2lv0l@crN5`P}W$6V(uzBzHRokw4X|8*=)AN07 z=z6Vk|0%_N@gfck^*j?;7!ua9HZ0jZV@@`=r}1yu?6v1MPE6A0QedcLP_}JT%$e+X Q59ksGPgg&ebxsLQ00I<9GXMYp 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 GIT binary patch literal 0 HcmV?d00001 literal 364 zcmV-y0h9iTP) z&paum^mU1d-uro;i`+rVZj32%$(OQUCP2i#@1>MQWSVM!JRVx>3q|Ft$T^q9(=^RA zO-CMb34{>OrE`u_`lmn>a$CeXf7-^Fwrw*T_2H=S-iHuMy#qoBW6WBswMN8$5g;M} z?E4M?0PvcQbB>6^FaW^k!!F6pIhTyn@CYIN^q+96|DsAz3CK6h(rgg`c1n8y0000< KMNUMnLSTY}Op-zX 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 GIT binary patch literal 0 HcmV?d00001 literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr)60N!97wW{LoX9(%ethIkx*JMAFvVFeynPT`8?4UQ6u(g!+n5{w*gFqkPw z&)|K*sM%Gt;?cGh;{Q%=GKl~G^U=y{T2)?M=cL#UKj3FOUig7cEBLd`=6j!c1Oho4 zJI=eSOz$^5R((I4ogrcE-EC`6^9dL}_i@qjnsn4%la&EPFBi4((y?2c7C1@AE?p$q zhvVV&4nI5J*SqYNeo;y5F+5iB_Q{-9f$h(pckKBd^*Y;KbE{5w@w?kBE>Gq#H`LzG zpSfl$gMgF5B6EA6_v^cYyu4PveITW@G{h@&>$P9o7Oq}axQ(Yd@xuKFtoKwx`1z~3 R`GMYL@O1TaS?83{1OTT#d>8-# 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 GIT binary patch literal 0 HcmV?d00001 literal 372 zcmV-)0gL{LP)00003KNklIBA+?6PY1=^B*3|val=Vi(M=? z;0F8y!1tEHIX4W0wKhqTzVAQYK}5zF0MvE8NmzEJEKAP$JkRf@X_~SutEy`Mgt*5f!{ILU}eM9#TG?jHaMA&R0f#vCfZv0bE;>bmZ5jD-i)eOx@0^*lSbH`D)D((W_@o)5OEhBai#raszI_^?)CA^!miu SbglmY0000ItDpXD!^A>xBlZx3SK zfE(}+0PnA#bI#uTloDfXnx<#FwRYRKvMiNSLWm!~zzgd8z9@=e7!LNPX-<7F0gN%@ zIC9SSeSfwu%W~>_wFYh5erAKP$lm)9!n&?h03n1irt3PwHdRU?qP3O^z&Ur$Ip=cD zRD)L6byZbb>%SSaZ{?hmQqJ?tIVV{aLI|al)*1k)c9FFf5mQRP1pq*dF@z9fJjCn0 zzY+?2eN_O!SC~@DL(&1@v<&P%TW-J&pa*;asIU(}wxA`)00000NkvXXu0mjfjRlMW 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 GIT binary patch literal 0 HcmV?d00001 literal 409 zcmV;K0cQS*P)X!!T@}Qc3`j zQaZOg05(xw*ZYty)Hsfp0Gx9Gcsstex~>7BEXzxPgEDqqXB&Q;!O>)UgJoIvA?p-E zTvAa{6jnvQN^4#4cNH095b^nZ?n8*^tdF|~M5L73t3^tQh{l)?0EnonsyDT8&bzKV zvlou*qm;7WVHj@pv+|s?2F@{F3$-4(EK6G)V~leS9?l;eV~jDDWm(_%)~U7jeV;Mr z`@ZLS#~Il1vqfvY4uKHDs($N?qUe~x?sw4*xB>72CRs*o0xrGj00000NkvXXu0mjf DKOm$M 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 GIT binary patch literal 0 HcmV?d00001 literal 370 zcmV-&0ge8NP)0003INklJ2haigVY1n*Ph}tRV-xQu0~}_COK5V=aHl@tW<7uh z@DBi=C6iK0(=@ehi-;*D?>!<4A&Ln3O3pdPm~-yupw?PSnG19Qh%q9fwRRtpQYxit z0ZOT^>t2RJ2mla5IN#x-$;OzYT2o31A;y@h9st10`fOs1F~;7{V4mmm!?kT&<%7%h zDWxg^A_9Q-{scfNt#UHw{HRbVrDa+AzOQPswH5$kjQfz*`sfD#!3Ucagb;fJ5<-62 z`%OU3c^t=K7{2px&T-C5cF#FCg};h*U5zo@V+R1GFC9Shd|MvC1GpdX1==;FbG^FT Q5&!@I07*qoM6N<$f<&~D)Bpeg 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 GIT binary patch literal 0 HcmV?d00001 literal 364 zcmV-y0h9iTP)~=P||~7CGnAG(Ev0rIay-G4{L;0M^<=7OiEI=lRQBDP`AnhXjNW zYrMb7Kfi2u$VE}SyyjX|Wm%rk2U_d8t{+2=F>0-wrg_V~Z5)~2dqhOUs;ZoGM5L5@ z>(5_w@_knuhY$cDgpeeOlyVDkt3^cg_(L$pP8PT(+9hxa9Kbi7cgzu3r%9Or0000< KMNUMnLSTYR8Ih>~ 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 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr)608Dlxo8$c0;nVv3=As)xyPCLlStSI1`?##8JMe`tE&QU&{gF-rv-i1~h zSl%YAIUpm}bhAZ8r6OWR{iN>`*^PMel6fL#a_jVQxD+rQ{8}5E?W_58j-a66^Ho!r z7^1SX-!7~=@k8mD#QVR-CFg4Q{Jt)%xiqEAMWIQUW5&#ms`oA~E@x`m*KU>kx8u#X rR8glJ{Kh?oat}`De99GUOd|q9BOQPf&XDV0)w3Sj1(^WSG+trZafXsw-3 zLkJq8E{41;OYi+|nK4EpverJUB1F98;aQp9rKpqw051Rlfb*PNYqi$b01y!~pY?-? znpIGBKt$gA@8x^%LkJprC*_;W%*-5PwAKQ^wr!XC`KL|R-bFd*-g~XJ)|yh9=ULgo qO|NJX+4ud+(PvHLUo-#)fcXRxwJFvG85Q6F0000`sfJr)60S&>C7FjVcd2Hc(d8;A+1PO*`mH+b2oNws3wJr5olVbkuu`sfJr)60Idg 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 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr)60IVHErvkHJhdpunnLp+YZopzA7MM1#zf6g~O*$nnujMI|X1Da$bgch<` zNoY6l-C*v#dAQ5%`t3i$lNCQ389!t{W%<~1?}rU63Ji=4@2je0+?6gxF?(pX3f$WE zb{8Lm@%q=hbWR)aY!%wMYTx_ho@kB(mfKs8&3OM|IiFj~+EA~zsn09Zp1rnCcxKdV ztGP6fk>Ls>!?Mg>`<@(rmHzI8v+#k(aUmfw8cSIYRQtQkR{qN#ptCwt>UoUi{Pzt{ e;#C+JA26ps@3lE}IF1$Q4+c+HKbLh*2~7Z^#A$&5 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 GIT binary patch literal 0 HcmV?d00001 literal 392 zcmV;30eAk1P)4KnG|AU!IRJR5EY-m!Pt!z1Pc1~`oKMqqDn-k(5RvyjwTv;0u|vSS6d7ao zLDzNbx<0r<2qL<#`3rzCwhxF15mS5!;cQF+U>wI+t`OodtOs{c*Y%r2nCJOb1ad3T zT9;+HZCh$7r8wtj`(ST{+wGP%Am`j#`wxH^W8e3E-{0$S&ee6DvwMuO$o#f=?~O5t mxF;v~r2{Cgf6)cF0Pq8V(6X@sR^_e$0000`sfJr)60d9Ey5=F>o-6P_-PAs)xyPCLlkq9DNV@KO942I~zh$*fa0EDh)?X^<7r z4$xKzQwZDeU12A`CBNRo?Vp>@zT@j}Js>#o>XV~d&P+lR9xOi~ak*6XdCjb40!}=7 zrzf%PZ|c`ry65}#(#*BT3te2^*WTWC&eEmiT;|&O);65mayMVA+s2TvmbKxAtZ>zDF~-6kjZwsIc(lncLt0?tA~)rvGuo^-!;w smg{~0MLs$#ApSFS&OcWb1;%RTIMWWZr%fuhKtC~fy85}Sb4q9e06oWY;{X5v 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 GIT binary patch literal 0 HcmV?d00001 literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr)60X(P4ZxZ=GF=py0%h2iy*b z*z?cqShMxqPVey0nWmX_}|$oU7}4S(bxvMu>Ah&vWT`?+GEsn8PdzFbu;hQV4;` zqDlk+CWFWL?G|9~&h9$%f8c7+WVFc^L0AyiEd~+X4dO--S@GPkaQRU0 z{p60q7d-8}@4z!>=FDLj5#g2b2QQ8{;J*iKx7)kAVHl4R==(5DGZu^8wM0>z&1UpK z`~;XzrvO%~)ve|C`y-JEFMx=AK3^aZIG@i~dZW<*P_0(E0GG>UKA!`K$K$tdHk$>| zY&N+nAfkT14_*wGV-#OZY6?IPQ@0gOf?Ck=&nXIasUp81Mf?A0KH!CuB9l-F9C*O6pO`RFbE)-Oxm`6yC$E{|GYWI p|1TmU#@Ki669DgT%Ny`&z$db<4@E?goxlJ9002ovPDHLkV1gY9^5Fmg 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 GIT binary patch literal 0 HcmV?d00001 literal 494 zcmVi0s_SV89}G7Jq?B0}S0oC2^~tsa&AejklS0aPlLN4?wazM8{S zm&;`)lVP^{{k|Xw03=D0W!dF&0hmlCJOFz|q9~?PDP}8?NSx2-dc965RaG?>i|uy1 zNF>5rHTm&BSS%J+tJUxKzwlfxm*ersj)C&4TrPhdgpg9H#B(Z&QmfSrWN@Euu~?eT zrmCvz^}1TE3W8v_+sEVavpJj14u?Zy005`c>6=(66aXZX$<1c-DHe-GQ522cqSbBv~W1gOLab<4+aBW*8_n-E|^KnO{a^oy5e`9KEe?Y3_*Xw0`znarDnWo9}d=LZ=_kdxTaU4C* z0{~su<2Vk(@Ub!7w#{)IS(XjMNRnip=cZ}0EMr+VilPUa+_vrK^Qr3^0Q$ZcMe&Sd zj4jK$w37{Wp69Q;gP-<&CtVdR>8HPKn;-};0_eJ?01EhrfG@Z6{5)89q7ncA002ov JPDHLkV1oDbmtX(@ 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 GIT binary patch literal 0 HcmV?d00001 literal 690 zcmV;j0!{siP)r) zLRql#2T0A5#Kub27B=#$q~ynfl&sjv1}T!oSja{Su~W=$l%hn0g-J|t?qcdRVO-bO zt*@{9tj_bCch1w9^PcxT2mpZdlla5=Vf-5W!v+9=-EJ2Q21B7xzu#vITd&vAX!Mx_ zV8L#;Q>j$+IG@jFv)TKY4@@SL)9KXf^)xk`&04KiE|;SyDwD~k z(cp(qN{WHJc=pePE%uv{+J?REhGTrQU+N$?bp4R9R4@ou-< zolb|T*lf0RIt{)8@8Px%hXaBjOhqgf@ArF1$K!FY*DIAuUuMx`1BF6yb2h8hN+y#* zs?+I4qtQ!w%6j?;GM~>O_51yB91e$lJ|B1utOoITJdsF13Rhe%mjZzRybR8hIg7UG?q#wdOVp-=uD$gsZZbN~PV07*qoM6N<$g0&kr1ONa4 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 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`Esb@24VQsJOFdm2Lp+YZy<*69L_vV{f<5;=CHK>gMXU#pIY&I<%DlX6 z^Tt`+9AZhDyVN_@Y|t#58Gru6k0$56l4`sfJyvc`JteK}Yfb`%9(%ethIkx*JJpb@#X!Kdmt~_6)1-T+qC0MQO7$ls9$>y% z&Bkrpx3|}iVJ%F>c~Q(oKXaR114n6)hTb{(g~0dw81 zMX#;AUY5qLnxnumYuU-qF`g5$3eTC|X6bU+SSS-4{(9oF%plQ&2R3SSwFsQv#Gx2s z`Pt@pAMU;MszVBPgn(^Ymn%`;=?KaUKZ`n=L=wVLN7ozw5u_*k=xEm$rd;>4{` Ts++YP=v@X+S3j3^P6`sfJyvc`ea4BW-~0j!C3?CzhIkx*du<~pgCPg&1(!TV?(h0B$71g|<}E3&-% zANC2PVeD4m%g@c{>dx=jrO_vd$@?2>^TBL2Cd2 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 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`VLi{6D`J2`cRgJkLp+YZoun3nsm}xA(ojUTW(be0y8vJmsWmsX<=O8;vx(7AbHXEBv$N)Fu`N z#UqvT!k@A^1d0^OWHZHHS6rl)z`)QjC1}3q>(Gdc*(# 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 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`9g{bq)lxvAC{Gv15Rc<;uWaN!V8G!Ls3)sz+_(KB)0zf}#y*`1$EIm0 z-Hm_H*y2!rI;Ee-y@7#|$)5S$zjurb4xx-G&o~~u3sqIBe&4*YPb@y$wPmI+qfIaq e3x~jucdUyvWKO+f6*~m9g~8L+&t;ucLK6UndpIuu 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 GIT binary patch literal 0 HcmV?d00001 literal 362 zcmV-w0hRuVP)b@ZYe^X>+)TkIM;n zAf*(%Qy<{X;s6fdfIk3yvX3@RgE3y$)p49Cik{qH-*-*Z;y6|m#j>obsvv}Y-!l;? zgH%;b)AYO3bsYd;S(e-EJ)kHG&-1Q+k|bdmJ^%=UpswqyKTVS;insCm4(54A2wi=I z(6((4lq7RrX0>v8S> zw_n)1a!Ip29*@`SwOA|$G@yrV+kNL| zv!OXX&pRHEgAx^RI-M}aNs{~zecu;FQI_Sd>j)ul=G|_WW!W@j^BH6O%`S#vSe7*npsH%yw%_C#08~|FNoD{BpvNCWf!T-W SXo&j&0000`sfJyvc`VWG6PE4P6{H#}V&Lp+YZy=KVg>L9@OAaW{)`otVp-P>7P^&Uv^J>=+H zFu~(XmCM4dih&m{%qVY64_DbW^Vj_U+RG%{IzBv=`0!D{;lOqWiMHI^S=uqz?|%Qw zYv6l%TW(Z>%<<1QFHf)teBdjPdA>_8_h_Navdn#qHTT!A^18cEhnwNXw%XYTeoqWy zI$(3Y%SV7EbCwp97K32-B8CQ=^Z!51DOPOR)tI@zD^cQ+Mcyp6E~RspO6y)nO-sH1 zJ#w0==c2fD{`+E@sj=5%uS>QiMotqr^m&hZch5g1CXNPqsrqkhi%g2Y0R70|>FVdQ I&MBb@0P?zewEzGB 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 GIT binary patch literal 0 HcmV?d00001 literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`T{X7v)<8LiO`a}}As)xyPEq7Lq9EX!D17ef?T`W`J%F zr2g#K73sJsNqW{@hP3I=A3jb0$K&d9X)^oEGXgx0?vD5RC6d=Na?g40sj1qcv2;UI z64U!yzKyxj(^)z+T4p?#WXKY_V87e-c%jAfS!W;g3OLnmT9@4{7F+q&#p~tg@cX=x zUYrbbKF2l1+mxN&B$0e;%ZsjSR`r|SS2v5@Js|PgG$mU%IcL_gi;EN`nvDF7uFjb{ TPyG@*(De+Su6{1-oD!M`sfJr+J5EtUz3zefUvnmk<`Lp+YZoqCY>fC7iB_v5>wGL5`*4hG&iz?&j01EgF0 z0<_sDn>~&HY0uBc&~aj8@bit4Yz7UCAq|FZUYgI>D4*CgBT`yWaPIDFr_QY6sQGte zr{~)5abAoKoyV*FT@+iang6_z7YNLL8(aP0TD0R431y{KYz)=EK!(gKWfYCm?zPlD R$p&-{gQu&X%Q~loCIDMpOR)d| 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 GIT binary patch literal 0 HcmV?d00001 literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`O}5Cd_wECQ?t8j8hIkx*drgtA*+7Kt!S#(Tx40adjtRP~Z*cl1Gl#*3 z@7)1Lfd>!xBy=Q1Ja`(H2v7Dlle(r8`RmQ=`Tl#ltvFx%R$3V~=4=z`W<{S1;1wQ0#jg!}MyG-0_W> zQl~d<%Vlmz=UzBvS>~;6Z%ur|^Am2DMNW&HCfUZwAd!6kd$YoeUFSaUIq&{pxw@xN z&&GAHdp3U7R0-MRb9v75NR1-#U&VnUUu*S61ep&Rl*EQ>G=-S|wfw*kr9Geb@{`H+ QK(8`*y85}Sb4q9e06V;Y9RL6T 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 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J5Wr673Gjf4K{+=$5As)w*|NQ@N&#cQR%-nl$1?yt5o+yK?g9#fNSoeQv zV&xXoi}AQH`sfJr+J5OF14r|BXPQ8c!F;5Rc<;uN>q(puoWzkWqD9Q0Cy-n1g{btmYSd?>LzM zF!Rj`Vh(S0KX4+M=a!^+E*~?G!2^~DZ0W0_ydtM{7+O8Q$Dr7vZrk+A<;ed3zT(y% znuf+Zl$9*g4VG?pzfzsQ_F;|S!G2!Gtzn_D-(KvsuVQDDNI1ZLfaT0a6>Ei~4y{0U OFnGH9xvX`sfJyvc`RRwil5j~*LdQTU}5Rc<;Cp&T-RuFKV8>G_Rkn;Reb;{JwuUPlA|GwkU zDq!4^pr62Nvh~8Xn{~&x&-kzK+$ZW>ugN^VAIt~#${m+jI%O)mQ%B{zcy^2DQ-Tf~ zhy=S_iE0*$!;dIW{9Hy6D_v zi)+{QD+^?foA~nD-uS+^`on96V>dE6{TW{GI`nzrl%jLeRTuj2FwSSRVbH$irf{7< R&J^f$22WQ%mvv4FO#q*mXkY*U 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 GIT binary patch literal 0 HcmV?d00001 literal 444 zcmV;t0Ym>=`GcQ;WC&wtz9 z_y2yk?>oLz7-Qg-`T{T32k_4UuIo}tg((n1m&@f5fMFP681l1cSw<;^5Vl6Jc9mtx z4`7UWo)-iGCqUr0EGv#{sw_j`m;+b$u*G);a60f2wT>2yj6;oBAAu=9O? zx7(?z`e(h@>!oR0*EQcR2Aoc(!C-Ja9-E&3+7tz2-0$}>#)4bSBs3b0k|en=9i>!U zVHv=7yPeHuw=0LkLDzK|uN0s;Z&g*-PseehD0(Kqwrz}Y8}A8#+nQ`PoB4b$`|C_v z*RBqS!~32;0kB@L7mLODe3ra>jlSh4`*OL|Gz~(yTCF-f2&{`HlL-JI&+`t2?F1l% mjK||n7V)U~Jo+EN+W|i#$Gq!U0w@*$0000`sfJr+J56Y&Evoe@BxtDY{7As)xyPP@q4tRT>~^(8~!12%J}Jcl_9a}Eef927jj znb2I!>~?@xqS0=`j|(P?!X}wLtbY2bp7YMc)y^EDesZB{T?;t66f^_8cn@z__qx>C zqp_n!;M~rwW^4k`p+^MYZ((}E#tn} z&ayo3vGUjZ`J(5aqxKo2r_y85}Sb4q9e E07r^>Q~&?~ 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 GIT binary patch literal 0 HcmV?d00001 literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`b>*HSbupmO6Hgb%5Rc<;r`d8f8;CT-ze*Ad7c3X#f2di+Xxr#s_*rC~ zWT}XV>{lK>F21I2&vqwG-7u9}?~~h8e^uiw$2Y z@FZL!Idhg5D<7*`sfJr+J51I^UH!0$kzx1KJJAs)xyUW;CPL_vTpp=|0EMxkYV6Bzv1*smOXut4a5 zqpFW=Ps=-IPQ|-#=GpGuW0?Q<@}KxqsxOmoo0UGdxq9|;BVWk_e}(6Bit{E*Jl?hL zzreQjhtFJ#Vn}#4N#`^Z!?~TaYUID3_TC!e;x#FViQ#>%uOH)luTGC_Ti?s34$)G{ zYdDqOO$v61wmM&2DI(~?(lF(csl(0xi4q+vVx5Xr#4JS&u0yY*|)-eh*hw6b$s&40>Tvo4uZ_S?zopr0P@v`sfJr+J5eU1A(`Tv1JTRmMILp+YZy>^lFh=Ksig(o|h-l(X~;M>-+k;U3$jmk?0 z>l;E_nspUl9{A01C*P+-M&{i14-svQzvmQ(8?RqiBz2*I?T;LXqQ&!Xwfps-Y&I|! zjLddbiT4lxp?8df!J%g(SAmNQgMgrMIAdSVZ8P7=*Q#Q#YaN(=F^YLb(LtN@hYfU2 zf2v`>7Nzv*p8cK14vA!jDc7U93_e@*F}!>Gpmx`jDU-g(X_n@nsQn#kvVgIkp@w1M XN9T?obML+fdVs;x)z4*}Q$iB}2pef% 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 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmV-$0gwKPP)&V6rv>}Vy?LBE=PV#=c_0C?aa>15=4Y25#V87 z!7JeB>!awRDC)ZIx=s*&Z?>+h=XtU$^JWkP0U^Y3oU$xMQM@w)L}ZL9iqiMJrfDD7 z2+uGK!*yM}%84L~BE}eUa3Y|TR#n9#AP3uYo@Yua=ej+5|6?COkLL@1Y-66~((&7T}&wARKLDW&H(afFs- t*|x21+pg;{#!s76<K0w{pb`UNxk0gRWap-lh)002ovPDHLkV1i>Rpw0jQ 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 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmV;x0YCnUP)? zuHVD=oZ&r(!yzIR86FBwDJTX1UvRtK&gU})*zflY15#s}=5#ux0JU0ex7$$wh5!KK zIHmxO;|vCaF9ksmbh};p3DPtLfamj>Pe2HX;}`(0*DJCzpU<1kWJRaGT~FpG$Yl}g1hjMM4ld7h?ezo(yq#bPlUjQ~KF z<=5-Qaa@+NBjV%nI3ACpD6UqkR;$IRsjlmdMgub^3`0Q>T-VLfBFnNQNy@T4NfH1! z91gi_+Uay=vl&xRuh*B$=V`sfJr+J5L#e~F7#9GA_ItWGhIkx*JMAFvVFeyn&#R1^ICC7#8Ut@AC`+g*NE&$YmdTGeHpB8;# z>+UU?@@UTFpm)FHynfCUmtD))P~WAhpp^ag?zI?3hBdFHlGns?oJ(PF@OnAtG0)!r ze0scsyn=I%NNl}!EozzD7hkibC0PQ69S>Lpdkv#r2R6MHG+%Z4@%3ru&x5%Yw-{?K i&0m_DR~G!iT>cdQQjUO(u6;nSFnGH9xvXIP 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 GIT binary patch literal 0 HcmV?d00001 literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J5J^p0b*H?i;pFLe1Lp+YZy>^keSwVm;;kIX9v-HD9EU#ELaOOPV*ua>_ zAZ@{vSD<{MU9Dx(m0MBwf5_|qs^@I)+&(3!JoVk(qnQrOQXixRoH!JxOiqpb$DDK9 z%y;ruF$SY+-)o=lRgvX3_SWpoh`s(?<(Ng^VgaRNJ3c3sFNw-6ONjLAGo zQpsLCg8d=&40DP*R!q?{R62D-^MC|1!_$XciVO`iFHe8@jo&>x)_2X;|BUlyKHsU6 znzr=H!LN0N-K&Dq#GIyte-oLIUmGfwEYs%bRr$?&g@lrp_ulU=A?sd=Oz>VUYw`S^ kZB6!mUEYiXUk@`sfJr+J5U4f$(TOR|3wtBiahIkx*do7TcS&@hB!R}P1f~FQP2KJ+jLJo%(GR$dU zR#9M-*>L@|9NV4Vl*k|Rz4w{5w(PyO>+G52*>hNR5*Y1yEuL?=_I8)mj5(hRWf&6H zzFk@WZF`KD;jtqUmd_Pi?j_sCE}7CI!0=$N{M;Rk74I#dcgzS{HT@IkhHFAjNj+cP zZV59q2qc|ic`mD`sfJyvc`ZMA^4bEX1?Vm)0PLp+YZy}FV2fB^@KgSFRb4V@!A>uyf)6v%cE+n~C9 zgNWw;x85-yS@*8Gbu#8{0Z`sfJr+J5Q?6Z(R}KJ$8a!PbLp+YZopzA-fC7i>(w7W<2iW=^Wc0CVTQnLmDqmPV zecQz=&cgpb3jeeIz~3;lb*|N+G|K~w_6&3QH{aXcvB&Mnoa>BdY^=`obaYtE(p)O> zIJfKUiYZPm!P@s0^+&5HZ4G0%adpwPSuO44SyTBk0`m9 UR12g#0o}sj>FVdQ&MBb@0BHtL=Kufz 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 GIT binary patch literal 0 HcmV?d00001 literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`9X6FFtyw^!I!_nJ5Rc<;rx|h`P~c$*eWfpRXYQX~eV!jo^^e~@TBr1q zTPpg<%AKZd-6|~}E+XoIj|_AY7`Y=pa3B0C@?tM@!?juG++E)9Eq=Fo!L?aIL0KP< z&e^=x?3l;Y4a^KJ0v+tTZD$mJnxU7uRxog9WoVC~m*%kL S(g{G9FnGH9xvXHbFtq zrGtA%aW9CVIEten-2}V(GrDyX`b)%C5d<9^92^9}?tWm46x6}ILGXR>=+|o|&y=<| zIrrq|G#61yfh9O#jJG8)3}d(3g^5J*ii{9C9*>1Wfr$dgank8@nAHIQs4uqLZ7P+* zKS2lq073{Mq}goxuMoUN`~9BdzJzid*YEcwN$PgHr_-raDqXMF_zM0+u~=NKR+Q4i z;eavr4~|3dN-GROpsWN6RE1|{eB04+wF!i_MaY1(CKt++eQchz<4~CWx3I4JRT1KxLhuy(J09+ zQWQnk_19zaJ`hE5yUp>zg1R)s(wr%HfxokH3{beST84L!=_`ooXcDo(p-yT-Ma5$`1 yt8p5Tkcs5;`ORj-P(iEJigeHXw=a69-t-gplY1P!*rDkF0000KP)!g$-hCV%+~kEJ zgaDfQ0+jUt9>9IEr;a2^+P3{UavZ0ss%e^nAW)eAV;ls5D2j$*48w5VK&~nbLjXXU zrpLDH07A$-&j5h3ENKC@ZEKo_Wm#H)Z|S-oMbTdM12J_RC(rZiG4(vJuImHCvMiD$ z?Nyo6eK3yWG))JFs;Y{j$g=F>1Q0?9;ep}xdTE;W`Frr2695oGdsXJ<%Cv2JUDr5{ zsZ8LyuA(T%o+~j$2>HIx^E}45@B6!Nk*@21T4Y(aEUW9f|4hj|-ni9`y8f`sgLyHF@Z2mxTVT3-^F&*x^dIh{_2!{IYX)3m{0sMTseb?<>a z(ChU!n@x^48V%_MK@e`x?^Fu(J0v{PbCrw0GUkY z`9<4oHUJ1ASF=v1Q%Q$!?ZI$31mJSH7Fc002ovPDHLkV1oGe><0h< 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 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`ZJutiP-mdf3Qrfu5Rc<;r)}gssvyv2Tgbo}v80IitkX=#0%7rjmK>#~ zUcQ9MW(TjI_D)RfDhU5~=Y4s5yWEy*C(bNLDN8DTyxt#VdL_`+h&SKCa@OhJ25bw;AdNEzHFTb_e!9f89ZJ6 KT-G@yGywpN`sfJr+J56&YC{r$(Sqr>Bc!h{y4_(*k)9DDb%Sr!q|lV1K~i>2W}akAc0kfmLQh z{H9cu-w7wD-Fv?D&hHmX9lze&7$hy`&A?P4ec;U6t*s3b%EqVp?AQV(XU{6uTRKNZ zNomo=FZZ(7zIXb@`A39h!L_WOjo12~smLD#=YL)DX z4an#7O#g5=+#mLOz1jq@hs<#t)AxG4jYb1NtyZ(Ur%Y_QT(+tx91cgLQ2?9G=KT&N zNt(~+&wjJnOsCV6$pk<$nS8$kBFbbk56*Bn6a?Yt*5-1#H-}6_i^U?F%^r_OBHHiw zs;b6fvD4{fCg{2j!0-2WI-M6Qix=?icB?2#BodKjc`z6}C!Eh`P17VvN~Ka(m$;l? fg#&N^{{V0UkweYyYlbiy00000NkvXXu0mjfz`sfJr+J5b;Uf+*kGX05>FS$5Rc<;uln*bD+;haxT|%LQAmQFg*AbZH9~^@K|)~z zt4ss4iVwfQP+ka-{V0hVo79Edo*5uhV)G*RnFW zxVR`D*`#xyIl4W$Cn`Jp?ZdY&CZDID1e*Paxq!WmRpH^?&oe#)-OJ$V>gTe~DWM4f D{FYf# 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 GIT binary patch literal 0 HcmV?d00001 literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJr+J5Gwx^E+ouABE_u2*hIkx*JM|)Ovw}d|#+TMP4{{ZhEt;fHux)BweTO4& zfpmj#hwuxw>+HhGS=DB~IYEd2AFDr5E;GTq!(-0M*%pz40*rzMtOx!UuqpLDUNJ@M zbdcs(5ne?OMTQ5bg(Z>&CU(pzj(WW;^V^SRmX~{PZCkr4OP25Ogw&Z^%VsTG>%7Lo zA@=&~xaeT7%pT1yCEwuZGW;Gh>K^R99`*jO0Fx4v!@TD{U&U4H?-%Syw>n>Z|NEaR z&8Mf0>R3M9D~~Ooq0I2+|MAv$3QS50Omz$u3^JMbrm+OfHUavM!PC{xWt~$(696`5 BbM62D 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 GIT binary patch literal 0 HcmV?d00001 literal 477 zcmV<30V4j1P)FI=HlxL{(WP8BqY3O5`3e#!W;Z{Akwzf90dqD8Z1)Xr21Wi}!n?gEo^#-L z4)>hr(xa53OZ!2`_NM@nB>BGI72te6XIVBLkKY57kxeEO*L6SrYyj8mwcqdOhS&h6 z)2ZV)T>(7L<2deHlmS3dl*8fB6(9(L;z>dK@@?BLNa(fEqBxEPK`4Ght3_L{*QRL} z=QQsiilX6gSo(NT2dmZUd4{>R-EJ+*Dla7WWFC))BuM~tUC&KO(-c6GB&Ac31GwF8 z%jNRbdzz-7IfM{GNR=@w8dE|DfX!y}=1-F38@L|ee!u5_#@%jb7)HfKDOt3|VgcZ7 zl>mfc$OiD7qQPMB@|dQnX`sfJr+J5ZNAK0eKw#_xu=U`h{y4_*Bp5dDDbdeI4|;mLFK^&1y0t81DvHF%4alw zy}+{VUv;IYH&>&IPVqqtK8p{Q4lY&itr}-tiDK+Ayf^(%E}LaK!%~rGg<};(-9cX4 z4qRS3IlT217b8dY-jl`WuFdMm+0tEdAj-Sc>g0p}O6)QRc#YY$pGTcuWdU>ogQu&X J%Q~loCIE)!NYnrT 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 GIT binary patch literal 0 HcmV?d00001 literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`Esm)P3#5TUb39!fLp+YZonp(yqR7+w_@1{--}DbAWpU0T2anyl7M3!@ zjhlP>hIupRGK!a-T+Q_J=Om^69>avCaT_8y91d(}>@jrem{KI_kj=|*?UuCd`sfJr+J5P0@>XEg3+eDV{ElAs)xyP6^~aYQW)oddd~fpaoo63;hl_>OScCzI%_Z z`sfJyvc`4Xq-x=31c88&4O<5Rc<;r!C}aaS&*mo9q~HLH&l#4VL?dw)j8bj;P_^ z?bf`0p|1f4+vI~PYLh!E^<-q)S3IbkocDjnXJdKm!*6sH7CEhKchcdU&|uF{G0)sr zSn+_#S)J48WGehaLtpNyOWMKh;BtH0WEDl0JyjRB>54K4?p~MN^Y$LI+4)idmek0) zi*HjSf9*5pQ9fUMz4ZR`=mQ2kk1gWPu3MEQ(dK)3Nv2lI51x&^Q;W}8?&lJ4VmM%P z-um_HI_5_fWirn-xW0$0F|2vLDpTsDihJOb-~R%?$xk`4Y0V-H4)vYuUKcZ;$nR$H dV6c6_dAa|<+$Y(Y=0JZlc)I$ztaD0e0swwefcF3Z 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 GIT binary patch literal 0 HcmV?d00001 literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyvc`4bBUJpZI}7_dQ)4Lp+YZy|$6F#XyAZ!Sm2-T{qGh9VhT4WD5rrFqjuG zl@~BuYaa}15eYkJ%2LXx{dt{*#X6HY4=ql_v&qHFy%$VURC;lS+2lBbIrH<%cfZ#O zzWBXwUG`S70M*P{Y>o>;7BQ@O{cG1{6W=I?>!sa`7EEC}uq`*}ly>O!v<*7lk1aw& zj~4oHNVXmPUaNS7*Z9F4<6{g9a-&^xW~rSocA4}1=C)j~%4bz)Fw>c3_7?DH%HAL=!w^Lqik O%HZkh=d#Wzp$Pz_=650h 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 GIT binary patch literal 0 HcmV?d00001 literal 584 zcmV-O0=NB%P)k+iJA{ARG>NyWJN7@pznNSwpK(C=di8Nz!Vy za=Bcu0AyJ`sfJyvc`UBP``^JIWRD?MEtLp+YZovg@rL_xr{-IjgXJZ;6_1 z)X;Hy6N5ufp^Tu7iCB%e6vMjLN+KMJOQxK&6gpTa^Or+$f{vu%+O4;@*`7b_oP6+n zQ_!gx_vKkp*>6wmd;j>#5%%x3-<6;Hn3}xbYq)IdF`yFnd*%vn!!)8VYzI1;!PC{x JWt~$(699L?U&a6c 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 GIT binary patch literal 0 HcmV?d00001 literal 408 zcmV;J0cZY+P)ftSgSQDnztvzhZ`fSfP)4@sPJaHqcDW_y;sgZ&JUDtW*h*5x3Yav8Y6me7LoclhW z^L1T~F^sX@Edbcvx^`9U%36zvAz>xQzszZxwrzV|FUyjMq?7=FhzAZQDH_M|H8XA7 zR#j!K)mj5Unx>rd_oT>LE2TUguE;rva6hksF(ye8|6SKL=bVUsocUD^rfKr+*fb3h zF~)q}pCyDiYSxf2l~PwTbFBu$Fht+#$>-_#{{asr{FRnF)4Hkv0000bh>1Kaf%)V&C_d%jNNSv@pav008IQ7!yK>Yd}^-0|2FT97jal zg&@H>Cxob^X(7mIq?F$Kg|K#+_I-akok9q=+iim;=LjJfV<@Fs>tfH>5g?*5hI0-8 z8#fsd$8n^T)~Bu|NU4Po&bfwq76`1h&8ZU(Z3}0f=Om=ftl|fR5S7DRI|sSbP1D2} zV~lNMb^wsPnlWarjWKf0bNM^x7MetA{2*1sT1zRFQfjU9nDhC(;1&e}rBwd0i1=O- z>BM`llv>D8*l1nX<-6>9y#m1fem@?MQc6OI_x@L2louBfIp^1=xXhfE{25&;eS3`(d)#>`PF1Yxc+cWym;Zn5zTXzVC3SKHz3O zfCmuJx~^^8GRB;9e++QWwQXAz1*OzE#~2Gm?=iC0A|jh-Hciv( z5bgWEu50hT)*1jPrJ;Ej+nGGiuTQ!-4-&GUdoa&)mSx9t(=?1RMEn)=mIuqStm_H@ zUDqKZA>`=$PjSu(A#ZsgrHt)NoCo7LCjXDwb2t5Wz!$^%oE}^G<{bb4002ovPDHLk FV1kg^t9bwb 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 GIT binary patch literal 0 HcmV?d00001 literal 447 zcmV;w0YLtVP)T_tJ0KlE2e<=rK(Z{Ygb9idE9IX!jOJN0pN|hQM%Yt7 zu(Q5^eF4)n-S78}qF5y&YTH&y>72_~LPcvt9EM@D^?QI2!u5JZM5R;+q5OlOy!GvN zd#m*}AcSzaTo93nVy$v6^4@E$&*!rcqTXtSTkZS4aI2L|HpXzy`@XlIZaj)G0^r)g-dkH@1BLMgSb8HOQ$Gjf2g>((FZoC5$M z#IgWuZP#`A8T@9Z*ECI2ylzWUZa1seT9R;X3CKaXBlch^WL%r8bpP pmd8U4fOB5=9@Iz0_s8qs0A4T3#DZWY`Az@;002ovPDHLkV1jZuz|8;v 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 GIT binary patch literal 0 HcmV?d00001 literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyro$9jSed@%lia1D-C9As)xyUfsyq;vm3!VgKuy(p*`rVH+3D{Mn=`DUqSr z#`dhMQQ_DrvjoOh5r^&`)RVdMr>27Eb0Ul2!BiEQc1AXdAI1rhVhpc$F)1v{z1{bC z1Lv1o{soy*N=C;*LPc2)-d=hAd4m8`!}H4D`^sa(r!Ac<-Sar&dg;99$7cNAmz&3s zFl(7c*Cw6W&wuV(XTY;`%C&|>iAyHEk0Ufw_q*oaR`Xmm#p?WJPv6@6*Q1yiwBxV0Gg&f z9*@;(b-7%%TJ2h3x7$ml(&agkNC*SuaybBi!C68;wQ*fL5!8VOX=-WLfrbIB*;{olbo|9{|AX^+E_aj>B=h(P&)s9*-v$iwOWY z9FBZGf4yEVm(^-D03Z|!5d^VbuZP2-&*wu?RDcIO&&y=8dkGA~q*AG`ZKBufCzHuN zJ#upvb-P`g&33Qx+-^65An|ydWm%n0N0Q`EwrRiL7nCI!;B-2x)#|$dg+f8A)e1_v z?Ljh`tW+u}ihivmhGCP*M4?dNIR01G@puddgPBa``cpRm5W>-D#4rqkAfJmEhUId( z`Fx&Er}z8)b&5)*A_(GnlNp8q0L*5y^ZEP(CAtoZqLfNyy^kNB7?!;;(=H!UaeM}&4wU|)9G|`m*?}DB*|X{O4w_6;?Tdmg9htfX)*=+XX_q?DA>jen(LjGvva0qYUA zwknFEX`0PJs}Vu~z$*t)6lGcVzWyA5F?Lw^?f|6}0JLp;>Q3LbG)~jBah7F?F}~mL z!!X#2K8m7E4y;v_=lQc|o@ZkWA!Mhe0HChxZSsF{D!At$P187z-Fp5QAcWYT_+Efh zQ^5tm7z@MDXJ_mI#&JXl2_bv{2TPwZ_H(G6GT)v2`SJP(fCqT_R+JdNI;sEw002ov JPDHLkV1i~lt1$oo 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 GIT binary patch literal 0 HcmV?d00001 literal 463 zcmV;=0WkiFP)kWEXysH4$8oBoKM+~lL5mpNs^!ey0@umniNHG9EW~ox9EDk(lqV5F7n0K0q{I; zxm-2_)B)gmJ`BSlfVK>>EE5D_u~-awc|fo0|F`Mr`UWU0;BEe#z{&ss002ovPDHLk FV1kSX%k=;N 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 GIT binary patch literal 0 HcmV?d00001 literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyroWS<4%Lr*8ua-SKpB4DmSrcG^bX76Tqv#=8tTLS`H@8w49XB{~H?)DB3i z%w))apq-&H;ap!q@uTp}HPhecyRYnAaVaEN^EK<9hG@m4``^157#=WdC7qBcj<)W5 zeEwEj<U6>1JxAV7q-9lo_0u%QqB{?|O?+7;W4L&C+ zD0tCQUHOB1hD2NKeNPR>0}{?frc(MDiQP#(tbDJ&zy9&RLBDaSjDC6YM^Hd9c)I$z JtaD0e0sxn-bV2|C 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 GIT binary patch literal 0 HcmV?d00001 literal 526 zcmV+p0`dKcP)1r|V7XjjJ07=i zx%ZzAoagZ4c|QRFp#0Pa<+J`cK+`lI0rUBMGMTvB0jZM7D+EN{8w0jcDo%4 zh05h}x7&R+XHJ0o{a&xvW3kwDIt74KDrH%gmw@y6yjUzAXTvZGg#y7$#LYpqTE!eb zKNP@R`jJTFbUG2tT_=ET+s$SZA*Ad2cDpT=O3yY7!?ap02Y^!_AcQKFN;n+OX0xiQ z+P3{{L(}xTeXw4y6-6OleC~jJK5rNXF~EIg%CekDB#8e8xK;H3v-`z>FJew|?N;%r QO#lD@07*qoM6N<$f{>u-1^@s6 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 GIT binary patch literal 0 HcmV?d00001 literal 432 zcmV;h0Z;ykP)1&`N`Rjh~?74fF1x_(W92tK&IDUX* z0guOH9LGdb+!{nwRh9RCJ#Bjj)>~~!UKnSr9z!+nUd97a8b<;HW`+c7wbIyr~h^)19>6|f~GM~)b z?FQg{KF>R>wH88T-B~&EopW=tQYwD~vMlo6YpnrDDZee9066Eg){L=vjo)vi%=rH{ zou=t}y>iZ{X_^O6Rn^9KBWY2I{PYZzQmblB#%~55tf~na08Kc*Gdz z^ZEP!vUgw@hU>bfX^NtlC}swnPA33BtyWtumo$0?z$NggpkEzq3e1!fG`XZLb|TsZny76MNxtv$jpJ~d7>z) zs=D9r??|5KSwjI6gS^>nEX#rravY~=TC3H95HfTPQ#$MQy61UJ4rn`hwOS1ZgZX?u znM^RowrywZpjxd)QFMQfqNv;LmdoYwc$`fi1VNxE%Hz7@IN1OU!|;7S-Q0yVhkmJ4 zx?Zp8PL8L5IF5V09zy7FIP7-2X0!RIDHIC*e*b5{=d%|Gp?14nEEXk6@_j#!<3~*{ zmwPouDTWW*Pi{0Ctiy+`(K?+D$8oP*Tc}d>f3y4DfG?DvE5W^y-znE zcQVB(V7XkjS}j2kc%B~)htAhz19&_h>-D-=EOH#TSS(JbQ!<%!W!efbnM`7_SgBMx z9*^&cD2n6pI2eGYX#k+A>Q4kAl*{GZUO6iV`~6-N#Y`qM8jT1c<#KsCodyYb>w3LP zk^}%0MLnO--~n&dYPC+M0|4D_*A>9N&??|uLV;Dx3<-_6NcZ=rpc{ZE`sfJyroWY3qcQfigg$DV{ElAs)xyPCLlUqR8Po^X#3i!ny~AbQ*;;faF2HB`nqx z`R*JxYcT$}f%8Alo|ga4JFZ0)1j$?IF#nNG=n3?)eH>tF4Rg zRreUS7(5TzmUH}yp1YMV0tI~4qxDjP7ae2z5*kERm l##XUb|Nh*jmsLkvHv&Z&JYD@<);T3K0RS6#SCRk# 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 GIT binary patch literal 0 HcmV?d00001 literal 383 zcmV-_0f7FAP)LJ!9a@F2i( z9Nzl}0mgCMw(UAEwT2L)B(1Rn?>%FzD7CG8DdoDZC7IvlRXgXFWjTrU-tYTP2$|>k zh7MwkN+}_PF(!myj2VWZuvb*br`Eb*K1Bdp>woo9O3T^02B4IN5PqLk^GPY;OS{Gx zkK>qA4FCXu5CQ-x`sfJyroW8KK;$`0YTUIi4<#As)xyPTS3UK!L}F_Y_0V0W||A=?7;cS_35-c|F<# zx)SX478OjD{(W$6tH4r`2UA$mWDhK7IJYxO`B9z2xt-TEmriC3G<0)gP%1k-LHqLB zt$$0kQY4eJco`H~ysq;csJ?&bp6c^C4{s^0dS5KLW#47pMND%0^3Nq)`M!}SttP)@ xqul(G=BY31tJh5p+IlTYc=wT?H)RiO$`du|*rD3xxee$}22WQ%mvv4FO#mqxT?POE 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 GIT binary patch literal 0 HcmV?d00001 literal 353 zcmV-n0iOPeP)>msc^zF!N=XQDWaa0kzO^=lP`SZgUkH&>s@!1HpXXUh*)&bf1~Ep?IT3m9 zi~2+aXK&MS9033kIp@~ef<9wk#c8bTx_$T|gc##649>Z>ZR;Gg{cx6L0RRBVIUlWj zYWiK*5z#bFecvmkiW@*gCjeS&@BQ}Zz2}@48SJe7KF&FFfyhn(`liQ=^ z;eWe-{_x|Rd+y;<7-RUPzTm?u00p1``~?ulvEw+oi-3B2Rmie@yWI|lLrxCAC0*AU zhKb`iH~Aaja=A#7)a&&GK`>48<*(Q4YPEVkpVQ&lY(@q+9*>z?MNzz7ub$^sDwXYa zn-2TF-)^@F06`D{K&@6o2-&v1-|q*50RS|cO_pUhn@uLaSS&`P5dlC|)mE#OBuUyt z2mwH;RMIpp48xbd+wA~gxm*$eI-QPT7#UL(MMY7@<1qj<8jWtZJDE&)o(F*8a7b{; zNs`p-^^7^4PC1T?q6lL=pU)YF`5AMH>i7Hi`~C5F5LDp%e)_mtt;*$cx-CHv*tU%j za$PsmNrEx`mStH0a5|mddoekHD2iyB&I~1ysNz>q01CiA06YOE7(F=js&pp+0000< KMNUMnLSTZxy~b?- 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 GIT binary patch literal 0 HcmV?d00001 literal 401 zcmV;C0dD?@P)Ih zI=SrzH;=M15B5{&C1jZOCdY(==HPq(+6cmNE7;J^|pEUyPAS-8E6P(pk_b@5`soRX8=aP9JXp}FEb!BR_(!m1?sXle8Yrctl<|EbOU^mQSjx^w1kV^#@uLw`Rpp$^#*atPb)8ZwA3x;|gb+%p zJp6bBgb=N@wU%?fEQ|MEN_hgGkRowhBcj%Np67kv0RRAgm-@b^ls-H7eS)PZj^kjA zm1UX!iX<6GDYtC{fU2sDF&`ck08rPpF$NLGaXj7euWMkMrePRD2-aF5L`Ki2Hd@=Z z>$+wbL{ii=4W$$j5%F*3d@Myj%EphU=$-7R8oYxaLMZN!*KP3s4Ib>;D&rq+_@@8> N002ovPDHLkV1gE7j^zLV 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 GIT binary patch literal 0 HcmV?d00001 literal 400 zcmV;B0dM|^P)~0003mNklR*i1nEGn06IV`zz(njv;y~FK4LtG61{xcIq}R(24>!m?`2tDPvY}>7(aq% z2`Hrx5;RT27z^huu>b&TZ7?l4re}=J^St|*Wm)=%`(I$Kl~Q7iDW%T2V1A55&N)Je zlo9}f95Dn{Rn>L99?G)3pMVhJFHQ(KPQF~GN-0VyLTC-sG#!TFAU}yHe<6eq5kk{6 z-Bv}`S^(I|b*Dr^h@vQb*mYfaT3of)pN%mX<6tu<5yNL3$F^;?)=H^hGrx~lCS%Nd z*!MjEtj03Nwp!gFkuipI9?>*s2{`9k>!%2ua~R{esea0XaU2mszI%5|ZQFN|9&Crt uReY`vpUVhdAyX zfCunNob!2}gG}9Vt?P<04m3WKft0eY>rm?x8DNapbyZ3+#;mp9jbA6iPt&w4%Ph;B za{!R%`DI0xQjX)8W!W@MQc6OI*X0%dv=9OzL1DwvFRR2mt`CH6i3cdA%9z z&CVFpS|>>Y002-F#l?dbMbUl`LL3d>1K^x%t>ZW@ieeZBt@XtKgiw+sZQB}SthL*= zbzKJlx9lQgj4=jd%ouB$<^U#Sbf;&_nV)3<%&e4h&H;dk zAmU~WnE7-%A!65c%&fIu&wqn~_x^sr9}b6ko{4DX)^9WL-fOLy`F6WG=c=m8JpDDm zaJS)(l#ay%ZtD{`ry%>XW!3o}pCq_w_YuOS3P%-1LD4FF()Nh!5$ ztCWf{Ztq0^Fbo3#7-O2IIiJt#{Z-Nji#=FtLkM+UTWkBie?Fg^nO)a)<2e5OGLEA$ z=J9x}{8hbWp9Q9yD-jVjO;ci9nHMp}Ow&}rK&`JW)>;vXF^b4V~wH898^O7ZS&b8Km95wsn$A#(6+7jK1Zrt4eGjdl|Uo`8w5<(bb z&*zhKP6)Z+i4J)0kBCwVV=RRDp!Vr89mnx~IuSyNi*l-iW4V-4l+s}sl9T#4yIcq% z0OLYr#tEdT%j07*qoM6N<$g0dp1 Ae*gdg 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 GIT binary patch literal 0 HcmV?d00001 literal 440 zcmV;p0Z0CcP)0pTdL}{Fb=F$W`8?12 zspAL`vG4n7ng9R*4j*tt4-ipnEu|!cZ0d(+52_%`GD66*EZf*nO2ug!J3eD4ZiG#Z zF;dECQ-|Lr&-1|X@Ds`5+M<*K07L`;&iSL_9(6tm+>6F>M8vwTuaYR_cYMCdh)5}o ivVXKh@5SpM6MO;Y0yxP?(3jc(0000mSa<%**=I-Z|%-J8)0BqB)_i>u#xm_r9vCmwrC1H`uJG)=~s82c-2s;YHew{3f+ zA7V0KW)azZXs0@H5D`S2qyHWtB1A+)2csehKtv+49yRN^6sbr4wq!sC+z)sIHCj2* TtT@y?00000NkvXXu0mjfq*8p> 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 GIT binary patch literal 0 HcmV?d00001 literal 342 zcmV-c0jd6pP)Nklfpnl9pp|F`Qi2_z6)+{x0dz3;KytZ<+g;X^mks~ZWM;w_X8r^UBD$s2{gzl6 zkO7|p7>40dX&guI{eJ=0+DG83su*KQMzkzTxWV(buXCp>rS^T_w(VtSEZ{hfpV)gp zO_Ne8Bsu370JPR2Ktx28QW|4I1^}L|fg;2?4}o(I0E{sdtv3M9xw@{k*7S~wm`sfJyroWS*;l7YZ*YH&z>%hAs)xyPP@q4tRT?VzwG^{gGV__mpPqc?Ny)fM`@|AkrJ+3k?$I1|Mk{)$cfG_%bEeTJylN53txIe&ZG zU#a|hPY%Pa_RqDKP6^U}*zWbjEaduERk@6{OQ*cP$@pNOdH(g%ysJGM4R~VByOhrT zw6xBc<>n>H!l+~y_v-gQlgW=Q)~z~~ca86WMIXZk?cH0;RrG) j-t{xTo4w+|*9LVBw+*u#?r`4#dY{45)z4*}Q$iB}gg1dH 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 GIT binary patch literal 0 HcmV?d00001 literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyro$Ey==5D}izh2RvOILp+YZy}FUJ#X*4e!v5DYrMa?L!!|CQ`Ljt?QX)gK zjqO=iqr$OMW(kb1A`aa>s3&vhPfZ2S=R_94gQ+Sq?Tl;^Ka3M1#TZ`iVp3R?d%N%P z2F@?F{0lOrl#Gsrgo?5pyuI@J^9BK?hUb;P_m#(nPg^=!y617k_0oCIkIneKFE@`N zVb(H@u1z|#pa0yo&VXm>lxq!%5|>PRA4h1W?sv_-t>(FCiq-kcp1!sBuSYR!bUo5` i_~4(`z{pm|P{H8Du;cxLd34?Qpk^pw)g(?`D}K3?~O6m zT0|rw&Uwm3A1O6-&N=72_sg<0O(UgD{QD7$rfHH=3L&)CDg1+7G|#gTf{1bntPnz2 zYjd?J0JLqJH_1)Yc<`sfJyroW9)$P#?|c7n!J~$K@0VwC?d+;(=y2j#Te^>P{?8yUB`(&kP7$h^EVl$$sE_ezsz5Asa&q-9QjN^rG3|;u8T78RR*ZGHFn(EcJ{>UMiIl}>!t3| gQStV>xdYb7n}+AK1}qfa3iLgLr>mdKI;Vst058{sX#fBK 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 GIT binary patch literal 0 HcmV?d00001 literal 465 zcmV;?0WSWDP)65N5*f!u-Afz*KropGTZ@c}ao$qOu=Apj!YZnsq<^vUYFj#AonU7uSp+hL61oM&UelBNMeYn=g8EZk&7 z)LLt;4~K&gf)FC59Bxrc8DqaaxVv7jO91x!{qcBwymu0DxiZTAN1~EoTskL@1kvZqy`)r%eELsRb2$7bhRD$VJ`{Cxie1 zizdrswk*qqc3K+Oh&YW{##myx-kU%vMF;@^#+Wf?@YOUkthEUf&j46!M>dQxlu{{W z(=^kb%jJ^r@eDv!Rnw1+F#>>;aumROUsYA&4c}=32_XYNLusv*Qf=FwPNyO4y!Xzz zd<~}L#uz#0<8{+COQPuwo1V|-j6{OByq~c##pmew{{emg&fMTr9Krp*00000NkvXX Hu0mjf)11jg 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 GIT binary patch literal 0 HcmV?d00001 literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyroW0TsT`Rwba&OHUWa5Rc<;!w&McCuk1}U4YH%oIVRXsiOd#Ysr0p$sO{y(BPHm-a9On~9mw%l21 z{SJjC7X$Xc=9ZP%RQ*z1Mo)@}_fstK)l|G!t%spW8SUFe;SzKjfl z-#7J3DJ%`~di&fxYRkujdFjV)yf0upV8C-d_AHB`l3iLFCr>mdKI;Vst0I(l`761SM 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 GIT binary patch literal 0 HcmV?d00001 literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrWM(ab9FKh-1o%3{Y4DmSrcA6vaVFMo5%b5&k7PKXBGzPGRN=h_oia2r| z6yRCN!?ZAQf~?ll4ZcxUTc_*(7x?+$$4UE*lk}dyS$E}Z>>9R=2DTsS2X?Jnm6dj8 zPLP$u3DGXYHUY0Y-~VpQ-RT!9JL9I!`RbmIj*PVQs3&{nkAFP5(d)ooHBQ0yL;*nt zg+)UFO0~il5-+1`v=qe8TD4@?6JYD@<);T3K0RRW(b*BIT 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 GIT binary patch literal 0 HcmV?d00001 literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrWCb2b%_gR5Lhdf;zLp+YZy>^hdML~cy;BF3Mi9(qJdjfme0@VO6)c_`0 z2liWyHx9l}`1T;R|M9VtaX-{O8r)|%yy#pp`OIozKW3>5415OXKb!a}vS=zSb#Y;c z;%)i#j9+(Y%v6RA>$J`sfJysrWCSBPqGew}#Ax{^_5Rc<;ryk@ztia8waR8-OJJyD*l~G#R5oLSAsa(fc2?w4 zPYyvRi)%|ol6f{xNV&L4C&)`PHT&s{XGYz7zIWVka>?0{t;59dJjPaalIxt$bBd2= zcXb#Zdw$0I$68lS)pM1aOH;3vsz#Xzx~KIN-Zoo$#pb-G>e{a#74BvI%20d%+t22^ jO2VII%mxhgTonvAs~zqw)>2mm`i8;N)z4*}Q$iB}Ym;Vt 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 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrWX0{b)|0w{4E_=E-hIkx*J8dIxvjdN-@1(Xq-Vbd1CSA%oz>#xk>Xa=d z=1j^5*m4+r7<8{L?GSOzOj24Svh)7kll#l9H2#t+gBTg}cFKcA!2 z(DAG?EGKZ1N`3MtU%6LvoR8$*e)88cz%g>#F^M$2E+)a>`|O1;nD8=4B+I$Gq&zcb zjJ!gDdQX^xp7s}|L zHtJJm*pj>Z{qOY8e+AdR{`sfJysrWX8AMA!X5yHu6epRhIkx*JM|!Mi-Le_;^y+@EY=BD24xAHKs2R6^#)_v z0@()i;jJu>Cv3^k&YF?K2tljpZfg7KfF;T9_BcDB{5Qhxq~LI&V$i%SX;A zIl07MU)aKoPbfsfe4 zLYdp!R2Svm{Md5>s;*3wtbsLy|I3D0Gv|hZ@X2--`sfJysrWW|IV|^$UPPQ$1ZALp+YZo#x2PqR8WFKU*|FbE*N~h6Z6RM)n6R1r5v- z8koOrJIWbQew$g_mZYt1RsVeGa9|@>2*V!##%obtogEAvC(erY7|tnHWJ$Z1 zdd;)w+_hWEPu4UAojQ2?|K*g;|6{v7)`}h|jb+&L-JE-0@@8Y3T_?4EOtgG1xncho qL$@?FCBc__^Ml;pD~YaPkiYZlHi!THnyWwuGI+ZBxvX;899xK8dg9!>9z6 zpb|9AxBO@bfti`vT1!Mk1OU#to3tXsFbwOumQr%gN~xT4&N-!YnX7DiSY=?t!&7#(3Rf=55>B zw!O`j+BAf4+7ti~k(r%yTI;tF)DNc;RDu`q0}6#|8F&p06951J07*qoM6N<$g4276 AVgLXD 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 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrW7WwAq2h@Q=Q#@T9Lp+YZz2?ZvqR7JJI;&C~x~`78wNZmlklin;%s1L!^mPgg&ebxsLQ06k7t6951J 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 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrW77Mkvr9MERd`}n05Rc<;uLSZQP~c$+n9=lzgl`D)gYJe^R!nE+1kEazdvhbP>b+7?z1_bx-BH;~rx>;= zD=3|LQ=z1ENS(PNNOWtM(kaXJTLVNH81}H=*xqm{>%;M2H=xxFp00i_>zopr0Ky|f AU;qFB 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 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrWR>|V|A;CbQMo$;V5Rc<;uQ&?2C~~kR++Z>LxITe-afXuijRRaR3mVN5 z-dA6m`TVKwf5~UF8yU@vcg^IF?PKQq UbK9q_K*un6y85}Sb4q9e0LaEnUH||9 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 GIT binary patch literal 0 HcmV?d00001 literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^@<6P}!2~4N?RmZ#NO2Z;L>4nJa0`PlBg3pY5H=O_Is>6+^l-1l|IG*h0b`oIEHu}e>=@lu*HDKb+>i3x{%gFz9^Xo4IT#=JytLm zILIh0oERX|(EO&+`gZEA=>MA2|9?`SdGd*>(yAHvRxQ!md#U@v?seI>uT{sl__-(* z%}bwKtye2oF)j7x_gKx;wWa4$&#l|ar}(9|zQ1mg?J`sfJysrWHugn(tv&;V!aQ9ZLp+YZy=ExLV94Qe@rj56E4M|5vd#krZjZwU=e6EB zbMfu_nc+Ey**2(EUn^kY5ct6|r}&JH(z1qCOc(CnX<%Sv+TZ^APOM9asqy>uX8)C# bSgvt9pUbqBF^RGQ+Q8uH>gTe~DWM4f3~V^U 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 GIT binary patch literal 0 HcmV?d00001 literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrWHu;Sg7cB(}?e}zX4DmSrcIrXi!wNjEb5}7}Os;6jad11qmdJeLfbs-i zCp8Y~7QquN?;49cuV}3b`FVfdgg+`j#O8J!m|J<^Y+xf-$OrzW^v7qa_vcC*Gdp;# zoWjI#?be*)9zg~#&1<)~n@ui%w>5tMJMN;y;WLUYUFUXI&buwFw~j-w_?%0~#ExmH zGncJ=WWb}jH2*$>p!5pUzk46poIjuaYL2su(yF~YiUNX4RqtI>Vy_p`sfJysrWHsfZ_b8bMPK2I0N5Rc<;ryk^GR^(yXsll3~o}<3SL461F^aoKZ7`zq; ze{$&hWG#1G{nH<@#9jlpnBsE`sfJysrWc0vE5eUE`cmpxq^Lp+YZoqC_M#enD7$CCpjS_duiXg5Vto za{=`g(l>Z7@mBFSaWp+yaH#N0b(XzU-4lLaF{cLguTAY!88{~}{AZ{*J)iGzLkGiy zz3+GVNr|Ogii*zuZfu;rwzYAQkYuvJ##O8Sc6GR1`Chw)=hZH`;~(Fg`5ZGXbqmk5 z)SIj8rxokn5)pMRH2rMT&!(^_bJn?YyVkjgtYts5W=hht!+~D8x79k&wpib^Oz+8@ z#m2B^Ywm41=hF3WZZCbmcfXm9n!?{@Kxf!<{9w3iVbin3`KKe$dkmhgelF{r5}E+A COnR#T 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 GIT binary patch literal 0 HcmV?d00001 literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrWcE!xqef~h9lb$Y)As)xyPCLlkq9EYvzM0jB-GOyV!(0c>GKIMg?AsV* zZ!{*eUSg~^xLG0GD`WO>ZUR$f`%mW=Mdt!0%V}L^@x8#pF#ojhwObO4ugxm`sfJysrWb^~VVb$fwAH$7b(Lp+YZofgY`M1kk{&8I9^7%gt7gdBRtz-b{NG@+p- zYDTkV0^b3~?-!mF-3)$z=v%?V{|-S+e_NNy^K1<(T`Kn~snmhJcWa z9FuTSSyVZ1_TGkC%javhG6*E!`Mx)@!--?5NVe|m%O;$Ay%}9vI_6t5ToBrjdz`sfJysrW4t}Gj^ZkKBO`a}}As)xyP6^~~HsomOPi4|tC^R8}(_>}xHOH+F8>|*^ zS#kfJT*}Y=ou@|exMOwxoh#haMH?7c9`sfJysrW4%L@&VKae3$30yfLp+YZo#x2fX28>WTAt+!<5UK&F!l!w+7>fdReYHE z+L|L*H2-T?ZFy{cp!JRHG`VZFmATW`7ME8A+gC;MUSQz;!0N#N&Uo{bNgXpJ1?N8B znJYcz<&0~kdmqgy=3w-3@h*`$F53Ti#j1?n0`^tA-dAfLz5BY0gLOxBk6}xI?2|e2 zYh 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 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrW4s)sJ>KB1R6FprVLp+YZo#x2PqR8WVT4I6F1O~1y5fuf_DFK`w4orMA z4yzR3P26nzX3775pD!K$y)rVpF@;Z{k4fZ%+krX3VgX(gS-;$4WjteZ?8d4Y&y%MY zuiL7WgcT&TVCvqLde{?dnqFNO)$?V(~oh;-2sJ-yUpZ6m;gec1vAuhW@^; m?DqnJPnf`sfJysrWPJw0L7XJncE%J164DmSr_Ub~xBMJhn7oMzZd{D5(fpZCq)dChThafi9 z7Cwzez5|QG7JqX&vyywKXP)1i^7ucM#@z{SM_!(@SvK35fsy48_k%gn*G*eCTo-7% zb}On{m4RXFwY^fwEdrL$wf(o~oNo8(|HGZ|=S4hI(5dgca&JHQ@N$kc%bxE&8?Qxq zbr#DdzuBw3ly6#v8qiH05nhsW&U|?(?7+ZyypnO*q%M~^Z!$jtWf(kN{an^LB{Ts5 DemY@* 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 GIT binary patch literal 0 HcmV?d00001 literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrZg#PYdYwR_Z=NoWAs)xyh8^rZtRQe_&Zl(m0?vR&?*pnA8lwx?^%!?E zEns@W<->mA;HAd*;*lrsp42FlQ-8Ky`7NKZj?nhp+Yh{I4jx^>6#C#YlV!T1%gjSz zOlwUUB$E5Ki&$sez7|#O>0+7g65?g~T(8q3+t+ibo7<)wn|0k=Cd7@*u9RK;oMIH no_e1hSL0npS1|o|cpx3Qe1+JJsXGIJA;942>gTe~DWM4f847}V 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 GIT binary patch literal 0 HcmV?d00001 literal 363 zcmV-x0hIoUP)OV6WpkIDn_YS1f0~&v`2znyxE;pY6+(!0T>&6Tk~B>Lz&ZDLJj$~4>4}aPRM#~kK39}dh}d=AY482Tol;7l zQ^uH-GRrc?Sf1xWJYb9gz&y{POm@xzz^M)I1B4KWSXI@hQ{=Vp`?4%P)><25ybTwO zsTU!HbM9kA)LKg^$8ju*;+iq#oc}6r+eQfK`~Lsl_dTGL3L)CI4f|ABYXbtTwTO6) z$$urK9EL$D^(mlfnrWJ})<4JXoHND%fHCIuqTS-ZC;}n?z5!3j06NQ6{=WbK002ov JPDHLkV1kG!kc0pL 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 GIT binary patch literal 0 HcmV?d00001 literal 378 zcmV-=0fqjFP)yL^jFi$40;N@-Af2bB*&Bu!@w8= zfHyw?V2qolIZjUi0Dur;t=*0GeV+s*imbK97z-hGqf*MWzQ=sVSWy%Q2R=RStV9T* zqzIQJy1mizJonz;2oORn%X0h+E*05Yix67ZbvL@M>o|^=iX3CCs!B@vsSo}(;MYag zS_42`*Khu9awJDZc5+I!z5oCK 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 GIT binary patch literal 0 HcmV?d00001 literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrQ_&@BUG@Nlu6nvShIkx*JMAEEvjLAQ?<mI+2{d3L;v^dE?eGPGh8X{ z?O-U7aldSmd;3^&l;YBT@8eI+DLy8l#3lb?c89>kndd*NC<(Gp=VyqR_VhcSp8PS1 z?6nEvnQNa{im@mx`W`37z;Jt;C*!r!UPn*HJ>R`F4|dG3wB&j^_xkEpuXg#d95{2? z#PIXoRC6BZH(v^6*58?19QFEz0;k5O?W)X14sst@HuJsTB)mLB9_T>^Pgg&ebxsLQ E00UWZb^rhX 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 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrQ{A5Rf0Teimpxq^Lp+YZopzA-umX>(@73zC1m;bQJqOq%RZp^<0TLu+ZD=iJd*rdkmhgelF{r5}E)= Cx^<%f 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 GIT binary patch literal 0 HcmV?d00001 literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrGnS_Y=Dk3n#hxyXAs)w*|NQ@N&#cQR%-nl$1?yrl9!Bm6j#U{M83`#V zM^vNZ?d{)-sT zxtPe;#{BSvcNjtvLO^%g2fEoF zzytUPfX|b8%d&J`7eb(v0sy77swx05##B{x6=00fT3c%=rK<-3)_n;fk>U`uzV8`h z-usQ;dyg@0n&!AX0`T4wLWW`3jVh(0fJl?I))-?U#BQ`GinzYVe8yOw=LZSj9qz0| z2%)G5mn6D<4$?GTmSy7vfN7fEON=q+{Fjp~g!sDGrgKtCrPQS+55s^En&){pnq}G5 zYbu10Qr3078wG$rc`sfJysqrGu`D)>mLGzR(iTPhIkx*JMADRiz1J!@oBLn&RdPDHyWo+;L~yS-oU(- z$y>mB1M_zSgXyg45(PI}|74r+KY2bow}(;tYtvCB2F8C3ALdOL+_?3a#Okd|i>3%M z?D?+9qUhq~nVs7+bE`!9rfYTb+DjQ6dOm*nbyoe+oXOpCMHd&&`5blNZT@4eg!v4o z7RfVxx%Y6F?K8(M%bAqqPClL!?8Vp+bjs5F{f3LToEVtau-7m&O*xwCIAz;rpraW) MUHx3vIVCg!08tuZVE_OC 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 GIT binary patch literal 0 HcmV?d00001 literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrbJlJhvnZfYv8Rh;h{y5dKmY&RGwU)6Gxr``!Ma$Chmkv?BmCBd3k44k zu{t{+{`~wrI}3}7ii*I}xAvL|e}8@D;o*6If4_Phcc!C?f&zoOd+@JL8VaB*=xJ3rrliQch`X{SN*7w$1Jv^_n@oOtS%Ezo)fPgg&ebxsLQ09cDc AmH+?% 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 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrbBPyPQO!W1iJmTwAs)xyUOULktiZt`sfJysqrb7Pljiw^^Zet5b#hIkx*JMH4c76qQRo3nKttQW9&Enu-a5z$zZ5Ve8n zjf3?8J|FfB)=P}P51ct`duQd2(}&M~*zc$y&&hdMx#d97tM1e=Mv(*d3^x5|qh9CU zws?Nda_!bBpKdRivg-A%YJLW3a%;;MvbLcdMluIs`VpuYUjcIisQRWs_C`0YgQgEmnQWGEv!*$=7Zb z_?G`#kQ;sOXC}MLUCm$@ACD`0{rWnirm1?f^cZTYGMM-l#|17wF79+B{QdKzR?i>p o5jZ4K{NQ2WK3&!ThM$c33B8}g^nX{^0mFd7)78&qol`;+0Hh>|(f|Me 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 GIT binary patch literal 0 HcmV?d00001 literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqr3!c)9Nrph7W=|K#5Rc<;uN~xVP~c&`kadUMt(midGeP9W0%ZfIn+v2L z99+z9x{=-Y|HhwZy%iL7iv1>>;W`xP(8$klJN2-o`LPYxlolB-oASwLhPjZ_j+-{_ z`jL(MnYV^TF8Hp;VX*mupyB54|K=XoJ9Z1opD; Xzgk3!mmjtPI)}m2)z4*}Q$iB}sSQvX 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 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmV-$0gwKPP)SfD)zy zDM2c5tN==&153~j&w1L?qfATgU;b#+%CE^(g758(smp9zm?n#h&$LoSXR za0C81Kqbsw&H}x~>;zwbq1?zVA17c>hF7sjll5 zrvQKuLMiY`p(Q|imJmYn&zS(m7yzV8c<=Z4=Wwf#Qmz%mIRHd-&h51S0l;iW z04R#W7_&bCZ+ejsf>H_q*4nxGXsy%OTC0>wH=D)Rc--HX8*l@z2mAt)S@#guVlb=# O0000`sfJysqr3-cq%)uKS5kDe}$As)xyPCIzEMM0o7-TePu%|^aCLR*;LHbgWAFh(#= zX%O{bzttprqcMu{f9dA5tIc;Rj=MkbPOF$)*(#v0?4Cd*=L7~$h7aX+IxRDvOER=2 zIvnw@zhBO9V$+$Z>TfPPCIxAoFFyBkdVY`Lv6#61p-RtV?ti~*Qaj7V#pV2$hK^g? za%ZU}P2PI#^{%Y7$&3OQEz{S=PE);RzV`L3jwMqBiyzGSe6RX_GNVMYm!{^^ZMhpK z>9lYt#CElQ=nO#+dy!WsF@NG|st{^3jhmVvLP3R{=3b zLdY--E0a>XGEV~X=cJTMsr>WNS_>f#_nuX~bZxQL=C;|HzLlzSFDifnfL~)P?e{fw RnV|px002ovPDHLkV1j#yn6>}_ 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 GIT binary patch literal 0 HcmV?d00001 literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrOX>Fu)V2eKwtKobhIkx*J8dIxivf@8T;bXq3ilKw8wEEpYNs@B;MA^Y zu3%M5U^Q}F=U_Egqwjzw>!kXphrVh5`I;K))i|xnF`3hWfr;UTpS2Um=}im`hHQe{ zbA!DUA6fL(-k&e*)tc1Pes0R7t!49`U%olJVeZ1Mao4|ofAd$G=kSDLwMEBwb7Biq17(8A5T-G@yGywqEYH9}n 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 GIT binary patch literal 0 HcmV?d00001 literal 425 zcmV;a0apHrP)SD+F!N8m#Tem}y2FQc z0WQFKeeFEwoO8|*LgslUgaAO(G-;7h+##h@UDvNWh)5|##O$|uK-YDg^W{Dw7DW+4 zI0f+D1Hjr%>$?7t+1mgqC8cyNYK#GZ?IiBm+A_x0qCyA&===V7n~vl7cs$mksf(s* z`o~5qiemeM0I-o_9#B=)2EaK702@Wh8_ik^0N(qx9{bfI?-{KuOQlp=Ypsnj#+Vpm z2!RliHFF*iLZFlyV-V3=o6_>$mu0E7{)17G7)mKAW!tvNU!3zjgJ>_{wItSBM0`G4 zdbi_FURqZO!5EvSX&8p&vU#4*j_akg)`SotM7GWc0na(ub=~%{+x2I60Z!{1>qGYX Tagem$00000NkvXXu0mjfbHTL+ 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 GIT binary patch literal 0 HcmV?d00001 literal 336 zcmV-W0k8gvP)S3m_HX z65Ii#lCl65ahgz#@sV~)79nb;) z0Py|RgNXKhS4tUU06;{>akSPt=WY?|4SDaco~4u!g0;4k@;3I#6KSo92oa}gYM2A( z95XX>D}dJeJevSwjPpDLz~=$XOhf<>WBfpwo=Pbxr9>p9bmX~JnbulE2#9zm_95W- z2bX1O(g)XMw4FsF(hy*+J#VnC>+>Xg?-B8sdfT?0_MEdZCg+@UzS>_j{AFzs5oQK} iU)pWxdr=2;fcgOyy_CfoKG2r{0000)FhWKkBV>cH0VBW$WCPfM9x6Rmd6DW$yhEk@H!NG9jg7_7T4V3j2Ya(_ zzzz5ZfKQ@dO38Z<04XIQgfYf@Z;bgpvJn(Q&{{u_rIdM|rIeId5O8IGtG4=#p z7HX}f#FCoKIrrY5jMFrcx<|=kSr!1;wyphLjOb^r{Z2?JwXSQ7YXyKlW6BtF&Yc=ge95F`H_x+D z$`~__BO)HhvG4n3S+5!>-9H9Xw^q8o4n*cXu0RV)r0LO1{b002ov JPDHLkV1l=yjwJv9 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 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrE4@i}8^eJ@i#%N%Lp+YZopzAZS&^r$c4_(M&b$P-0v7WNyl2#Qb*_HF zmY2ZKTG@UrT&_an$^O48zgk;5j!QVdx#FB7#w>AwL2=&ef^$2!Zadd$xb9H0X0nf0 zX4Lz=L0Pwgx~3G>9(L_sv-RB0OhyKVWv)jA4&9SfNLu^V?m^7^?Jf6y|5cp-`*UDa zcAN>@AKM3ybZ2>K3SO*!@5JHq`sfJysqrYmP__*4IFx6P_-PAs)xyPP@o?SV5poU-f+O^oddj+cx4U> z8Z}8CyZS$0zdOIPSf`|95iD*I$&+wEp5fKw2z3} z-(2jMUHg4|E;EDXQv)7%{{X+*`}TXE?frf){qfi1_2FKH;)V~x8Js$b8Q1@^UE0zS z&ycZp_A*aR+aIrYO=I}9xT(X5Blq^ZxrH*xJ*qbs1zs$bWspc-v(>3XLRm>F*=y6) p==6GZdd>S 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 GIT binary patch literal 0 HcmV?d00001 literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysqrYgv=84}l_#9G)(YAs)xyPK)hrF%USue0nuI`xQnD4ZZ^h6&Tq)fHaUJ zRNx@HMPo*7hLc(K?tl}M?l}MVU&8!(wttYDOTqHG2WhMh3@i)>-uJCtrFBe#K_dCq zwx@IKqhIfeyM8sQyCXHS?u*mzNkQ-SD7QpROTB-X@qh#~L+tgvTkEXs85NXVbh;j` z{eJkvUIs5sh99rJy*%Zt<}I>0KUwAF?|(l7vj1NC-0fSIHLI<-PO)Y^&z(J4YnNy4 z+Qc!hkwa17qAma72bbgStK}O%HhULRTjTv?m5A#_i@s~OEc*7xD{U8uoaU(+D;Iz6 zz~7o@mHP~tmAo#8XqLX3T+HzQ;msq5j%qXfvwy&-#=UdFKl4A1z(8T}boFyt=akR{ E0N?qLH2?qr 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 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmV;r0Y(0aP)YnB{xewo;FEDTB%?vSd&cP?~1s}#O za0}c50N*d!vMiG%0RUr+Qp%HB>#pn4G+maZX&TPC=li}N$B|M>2zXl! z$aP%-V45bxw{6?D?aMg30@E}Bz`Cx8CxkRjgGedmUYy+?aLx%K!5@!p+ZbcxIHJRp z(ko3CLLdRHb>H{PvTWNHNNerIDH1}=^NjB2dH#4jVqv9JX!vP?*d=SNw}NwyD!XVA zilvkiLhMzx3wH=9WjGU$3L(UQ4#QxKIf(G40-rK6B<_Fk?c65E<`zZaV|lS)T~$@T za>>1el#)`4R>>Fx0CinIZ{j(Ne6rSBl&r5zYt0zD^4P^-jAdCC`xDymHx~If?wK^k k9M6wOa{qYU0{>s&2kbm4AE-gYjQ{`u07*qoM6N<$f}$t8hyVZp 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 GIT binary patch literal 0 HcmV?d00001 literal 374 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrW20;d64HX6kMo~`}#}JR>Z>L@CZBY<$y`S?<-b!LE!`lOV8<<}>SRdfi zU<49S_6&X@<3h8p$zRX^KK@j-z5Jo7jT1+~(z*vpcN?S&m>KHIzx~=L-==uJ__<7S zPqEzJ%6XR0QzOrP_R);}yI-{I>0b2~5!a0$mrm(1d|zuJBoh{q&FGN*H;+rvX_mrL z4~|B|xbv&0%v$!+o>7s-$s_jqM#ZHe9${Juv(#E9Ofj;ZQ`}Ioks)F2Uao|mO1t@? zp>vs*@ZH*^b8cs$%-XH7*XPdI@}=gH_NA!#TwFqj4Uety_ImmJMJ@k_d)}Jnd`=o4 zEoGTCmd;P(d9` 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 GIT binary patch literal 0 HcmV?d00001 literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrW28F=48gf9PFP<)rAs)xyPP@CdMM0po{p>zxc0cxM37pd$IBztTIdEpM z9^ukyj9`pl+}L!JJ^swS*Y}@QP4>0$Z#jHsy38RKH^~Yg=YW& 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 GIT binary patch literal 0 HcmV?d00001 literal 366 zcmV-!0g?WRP)VI0003ENkl649ELj?j1(Z z319==fDs%)H^2?l4R8Y707t+HU<25|@4@6^_>!~6^WhTzPo!!43oR|LbzR|3eZkFo z01x0F0KPF!N~v)iw=-jmQVIYu#${Qglx1071$gg62z}r0bG2>joa3Ay1g{7QA)Ir2 zi*pVDwAP2QD1ekQu@priguuk2N|a?;(h_T}wHDRo^`t@wl+v#2kp8CuRaG&@@c!oj z#uxxF#@q#9jMa6WRP4_HQc6NdlJWC_CBm)>@BJ_gN~vv(@p>WuRrpMF0Q* 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 GIT binary patch literal 0 HcmV?d00001 literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrWPJ_8KnvH=%XFOdTLp+YZopzA7Re`7Nba(mP19=BHHZ&@qV6$qPeS&Qb zgRp^<`vu-#d@9FgKYeiY!+fbr&$Rz4E|?*C?+Slh7_*53a}DDK+q9h9%cd|fB=>9; zV@T@JRArd)TvAZ}Rpf%qS<_N?u9rye@CedodNSvD;hyzxexEaHH1N-sb z?Cl$O{c3gmqt7<;-Q%A!8p|KQ_}x}e@Zwg{&MALfi_a-4DOo+&I=6Dq^rWqK?paON wU;Xr3SpSL});!KveZ$^{Uu59@z<5CZxsQwKY$3%2puZSAUHx3vIVCg!0Gt7FhyVZp 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 GIT binary patch literal 0 HcmV?d00001 literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrWE@6>N3!8vKpFCY0Lp+YZoqCYBMM1!|{p`Jk%r6fJX)sz{@Y}%b9iV-I zZwvEVhP4TA8f<->Y~FCS-?jb7pR!Nj{uzGGGu8b2uQ1oG;W^R3^Mm<8<>u=qyvaNa zt5z{JBuc#4y;Y3i*FO6`#JYmrh!w8{qZXX8mig-u9XMgawx_nZmVAqib8PFyr|tn!Sd<_r`sfJysrWZn@%$H+4XvbDl1aAs)xyUOmX$q9DL};d~nR2IdzBgf_5PH}D-3deb1Z zf!TWli!e`gL?$O0yQhWD3cA6sZGWr)b$ zy^h(y_wu$}hB?K@W=#G(Y2p;2hSJ#YMUi69?*#ty6H`z!bjx1bVNlHBxM}gH_~7@o zmrah%NR;4en{c1oID2h!PtYVLg{2}+7oyVd)kz*WQ~mz4&Gy{WXTq7z__(-xy4?GH xnnCGS`tQ9=3*P^pQ@P@odiVk+(I3nYm^V4Joa|Oy`VQzb22WQ%mvv4FO#nNkab^Gj 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 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrW9wrS7wQoS77oIMTAs)xyPCK}|uZ9lzZ+x77cS`HU9*$@4i^%rU;R(tbyzXaJ+=2j&BhbC1}Z_tIo= zII`|FL&E*MbUl*4xxzS?YC*|i9%Jdpui+W#s(01x|Czq(# z0#15@BCg7d?%Xq)ygqhUc8I~|;&;C{pRg>S_q^DthM~ga)}b?J{>Zp24f+}%!YIn{ ZKk1OKwfSF%SfHO7JYD@<);T3K0RU`Qfaw4L 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 GIT binary patch literal 0 HcmV?d00001 literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJysrW9*L___j`ashdo^!Lp+YZz3Rw&L_vV{LfK}f0teZKW;WKT418V8Dj`fk zR-p|nT}%ZBfX@E3 kUiPKGS_1>qKZYL++P_^-R9%kp2Z}Rzy85}Sb4q9e06MK|egFUf 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 GIT binary patch literal 0 HcmV?d00001 literal 965 zcmV;$13LVPP)7S}9L000AINkl^N*{QcFhN`G*0aB*?*=k4Dpgb+~_r>Cc# zQ2v1Q@pxPi1bZJ>u5fo_xXH^q6mU8Gc!X7iN#`pKmY(jq0q|8 z3IOcx?p|MCQ=XnQO}o3hGYmsj)mSWsh?Po(<2XbV1R)-eBVr7?Xs8*{y&jUaFn&3Wtr!Bzu%9D(P(sWaS;)>x3`ywQS^Gf{r&y+rT+Q(d17LMCTP80cez~l z8zv%tetvd$chk)J_4W0`!$W(YR4VoD&iP{ztyC%<9UVPAJ@$t*NsaR0S=m$`}PkK?=y3`{njE{-7?_ukIf*!9Ul;JEqm_KWEo1Y9lzS>Jb9Q_If! z_K4RToh_R#UOJ?{L7-cNEw`!HDM-Ue^&bc+0&w(haY}$w_desRqpL=x!JSY z1SYAR?4KvPE#Ugs8aw$jEa7)^e`sI$TbD1_ci7<2 zn%7^etmeLpI+}E`Q07!p&&Jog*1i6hBFCoErw|l$GX472kyVGFT%AnNb}LSVY|9D5tn|__dEZd0=`P*m9 zYpQw%tqnV@f1z1+?e*7*(=uo6jeGCCDQM-3U4D^ox}R4bdg#jPHLvQj$$pj1H+58G1+<}}SbnQ|#>t44S8C6lw&i-f-DA7ZYzkjdMAd%m6QqMcJzgg8Ti z;Hd?lqKO30pB*uJ#xr~3D{bT^pG=96pO)$x=)zGb^L_8b95e21RnIDdM2>FKIlW25 z^`J!eq8IMxKWWcC`>blO+7_;LyKYZdbK>3Nl_6e%Q?ADzR%W)He_rSGK1Pi_cNlR* d;J>MMj7v<+T&BDbumvV922WQ%mvv4FO#qE@B{={9 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 GIT binary patch literal 0 HcmV?d00001 literal 596 zcmV-a0;~OrP)H}S_Bo$H_!nbQ-+;jDu5E`06Op=m|+}7Bbtz?**&e|;1ia&Z`WcN1~`KK!9fgxB2Wa1 zKoKYcMW6_D_dxr;Cxm#XC<=cwIE0YC@5fG7E6$)tyRI|FEKXsJ>ADVM^h{f?wRX-e zPT`!>T4Rjj*5|Te-rBa6QVvTdrEJ@F$ZU{fQYobnB3yFL!w07ieF7-we7sixz&T$# zv;yd^w!Zk?-jmk)dcAJr0mc|(Y&B5ESjzjf*3s-)cIio2D5b2mi_v4PRZ8WK(Pt}K z*R@Zf&bi0q5!7^)4vaB%U4Ju1LlQT}csM=pizb5F)htecM0O1?fYPUBYvdTBfS1s;U;#$^Cx6-EL96HKqbWNT{pQhYneV zo+3s!Hy}O@G_gP{%W|?DL*cydpAGm!?2{`RjL!B2WbSiv0udZFR4YSI^i00000heao;{}ayT3S z5R1iFZ;8d?FLT1-FaW&1zB0|Cq9UWwm}-yi@9&qFm*Y6jdh7E6Wu({Zo0^*Vd_HqP zL!ppDp-A>#nw*>*sZ^TKHA*&US|lZpkB@I} zZ=B;yZf-8~7D&2B=jP^aZ*RGQQWUkewpLM5fwumydU$x)+uMsoA_|3~wzf8XGkiXu zpO=@nu&|Ksbv=&brKP0+kPLTzbIo*od`u9;5BO4Ix7#_Vn@PX*7K`Ql{9GgwwY0P- zl}eY(RZ~;Lj_Pzek|do@r$(bOnM^p2UtC-q92}%N&C}_0-QC@cJwHGHWwouXEw9&0 z)AZHV6#%&1Zj;IMxq3-a_T=;Vn5e`wmzS3bg7`dPdU~2M%w{uNPBG{y1sxn5l*wdl zlOTwtr6soc@$tdhDwRs5QYDx)atF=I%F=4JzZU{>KXGR=*RjZ~M*Wo2b-#F&_vsH&<00I%1}mU|e60l?1A4gfG8q;_|A z+uGW=JuXA7R&)DhdwcuH$Vfp!!OF_Y=H{kWtHm&^va(Vtl>$H{61lm#;qiExnVCYN z(Bttq91ej%z&+3=cyxlnAbWM#2*8ML! hB2Wa1KoRIa>ldJcqhTm*w2%M*002ovPDHLkV1ftF2Y&zn 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 GIT binary patch literal 0 HcmV?d00001 literal 1077 zcmV-51j_q~P)Bqd&dvD&({&wHY&b(O;gb-AMa6yF#2F0Kl6oX<=42nT9C@HZ*OlQgakn} zH#e6r==}UVQog>v005Vlm)SA9ySv-l+vy(kZ0v!0JRXn7lQO5Krerc%MvTE=@caEL zm1=Em4S6gUi$EYK;C6-2dYjGG+1Z&g^?LpF_4U=&ReDS$5|K)!UavP6iy@E86aD@DDKi)hhC(4UDrlNU&W47Dy}dp5QlCm?x`e}F0D#Zu%ZTji z>OwlhFaUt}_ji_39|#26+S;=Hb#-+Lg+irLr8^xChg>d4y3^?t2n1rWn5ERu&dz?< z6p2It0HIJQ<&j7vXJ=1%<}Sb%G78yRaI5(?d@{8oM9L~ zpZ^DI{m94@%4yi=c-m`tYX>S_Rh z-EQC6*%6DyKaZK;9HaTl=jSH?pr)p#$bL!=`dgCU=gD9&oS&Z;f7e(nw!gnG6beiA zMroRk$K$_JR*1!7E|<${>R(=7nwpx*y|{aNdXh?|6;Oqqo}M-~Hm zx7!_$$45s;lgVWHmdmIFMKdGk4z(F8~}4N6Jhj5;r$DNLMPAN~MzRF`7suva<{! z)ai6BEiE}Okw_#~tCej~y27@6Qjs6_d(a|wDI7rj9$z);}W?^B0qNu~eLq4Cc)9L>6jWhl$ vfY* 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 GIT binary patch literal 0 HcmV?d00001 literal 1124 zcmV-q1e^PbP)h|<2K3Z>C#e!su2t}a{i{#CnPB9Vy2;xx*& zwY8m{om9`|Vo129H@$r$zb|xa5zq7!0OzIGs*DpPxEFp-{+VGD7=&z6^u%`KfogTrDjv zWHS&5NTt%$0o&W#GMS9fHk(Z-6jJjD<#M@9CX;Ngudna!?xqfiL?TU1O@y}F?HMi5 z%-87q`#XftZnvw|>a^b4+FF~<1|i(q+5!Ohe7;QXmC=EZ2&Ak=XZB^d3kx?A}RT!Jv}`!7>wN9+;5aUecw{V zY&M%rrceCv_4W1O;Nb5?6vHqw+xWM8x45{NvZ?oYJUEW?c)YT*vhSNX8w>^v!;X%Q z1Omaz%1X8tY34_!TrP*%w=aljC=`mtVn5(bi9(@hY;4T>`IPyjJU>4J0LI3~()_o# zw~LF5XJ=;+LXXEYKR+Lj$3I>5XS(YrCnq@^PE}P^UteD=7Aq+!A^Z-9BODHoj*dzs z5|Kz$Q&Ur3UOq4|5Rbot~bu*=(g!`M*e<(N_@!ia-%4 q0!5$*6oDd81d2crC<6Ttfc^##Mp87^nZJSn0000S=51)mYdzBso1Cy4gi(^Q}y|*{4S3hzPVR+za5T`35=-S<(z{PdYX-$qx z$BoXWsjUhfW>FojQ|+B{*66reA9VA0y;$_fAt%9uez_)(np5&7y1o&V zW~#{8sTr#qCmI}kA=~7dFT}vA;lRih(7+_J0K&Xb&#+2)cAnA97bW&jLqbgjI3je! zq84nwefItL>b>_azibgmiY(iGcUO$w6NUlVOpYV zV>Lv?x>*lC;rSyE^h0LU*PSu%YV7{MTDM4JYm}~3@4vsH^;UC3LjRs+R-63t@#Dw) zHT+e$?T*bzoDsHq>;3o18zYn^E+`2uvXGf{@=4LoJ8#PtX?(KLKW((~iORy6KF_kR zKP))%xKL^#$HEe;zpt{SMS@Oxp1W9MC(qX&AGHdYskQ&<)$T< iFr&p+K*K)yFT(8CKZtES;$jI*NDQ8?elF{r5}E*BMj2)R 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 GIT binary patch literal 0 HcmV?d00001 literal 918 zcmeAS@N?(olHy`uVBq!ia0vp^7C`LH!2~2%1zlDHQk(@Ik;M!Q+`=Ht$S`Y;1W=H@ z#M9T6{T_<|yQ)RY@rW1(24+)F7srr{dv9mjdb|!0Iqv`J^I}og?(VBgIrMgkZ+Y-Q z&FY1MlGB|#C1MA)EG#;@tvW1zgtCjuw(#*Sbvn3f>V+nSur)J0cn_M~ny_VWK1a)i zYf`5BzCW33{B%zByR-ep@9f#5x&)Z)59WMu=5Z7h!H(>Ce{HW@{mUT3Z1z%(R}UUM zh-Y8BX3dh!U8`5WzP!H2Z83v_XOPiMmIeEZKfZP8&>^PNn-(u#eE06%C>05wd2{D}wAsIJUtLYj8V#<) z2Ael;4h;=Gs_s2$%eHN1wzhx8UOar5=K4`3-o0}t=WVN|qFUeMxcKRQGGx^Qjoo+Wc`fboKlilg{Q2{#THil?QaZh9Wf#+dw{O?3S{1i` z`l1#4_Sr4JoOw0o#PiQG$EV&r@wvuouGv>vQP)6$ma}JlT>~rTmG6w%yLWHcO1sG? z=ggTi#gn7`@W+ZfA+P1-<)1%)-YdBL^3RLcu3xz_C1>x{q)j(-R`y~Z)!N+WpSJ_YnE2<#i>)LUcMY0Ec(&#CzySvZfel_hs%pV{(=T@w*4M9Jwd(fU zYwee>FAp)By?5u%%>4X%ZN-^Bx88nRwrtt=qf550*}66Kcgm}R`1wo2x?b+?O_Xr* zu$sGX_ip8un3$N1qAPb!pZ4CI^egZ7jT;ON?d|QKKNmAZ#Ko~SRM^PzwKFDUX0Cjq n$MrwfEr7)pE4uJs_KUgM)w27srr{dv9m#_Wm3oam?SzRW*b&#AS(v*F}4$f{$Ig zB?3|A?BcBY3K^v$>QlR%1s67#ePHVHie-`Q3JJ)%#C5Mti(_rBlT*uw**+t)mtaP!J;&g!>MDD#^jSOlT>^!b0}`U zxhAUr_~er*UVk?Dm6w;#ojZ47Ku79LAXvU!-RAVBHJ4weM1K4Du`ng&$)iV1=k;`S zSehOC9 z)2B~Y)b783|L)zj(;k1^aW(7g)1s)d>gwGylC!g4zj?EU>BWs3GZZ-D8@6rRrl+Sj zE&EW?MiwSU8zH{-k3Ws=?D_;=y?8NW{(OHGp;PZY_sQG; zJzZT@A1kS_W3hsWMpI>+}yi&@5`5& zTVuk*x9{G)dg-lOw=}x6-fbwc0>)RXTy16LMc$Ck+AYhMFWF%R%%Bl_BHAHsp-Mg0I)%V|Yo@ELd~)aNmyaIH_Pf4vd|*8*I~{*wJ}Hi0cN!9B9TT*u() L>gTe~DWM4f&I!Ff 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 GIT binary patch literal 0 HcmV?d00001 literal 931 zcmV;U16=%xP)rP3Q&Lo6rcbF zC_n)UP=EsTUqI98v?z){0J^`we|2?L=!sLQ6wmVrp`)WCgit&lm#2at2!ikjXgC}; z8jXd9USD4a0s(}O$K#PE4F-cW4TVCXQ0UVEL=jb0Re~Up0!K2L)GxTdzn7=1+wG?4 zKp@cH-+z97jxpZZ*;!j#>*(l^pOw$&3x~riD=TKR*=#oFERxgd+}PMCD=W)nGTYnR zo12?YPfs;9HL5G>a=Gkwdr?u5){;9Mj-H+#y%jAkF8=uVkhVopq~o)*vvj+@zW(6g zAm_k%JZ`hu#>dC$uIA?E-QC?Uthan#Db%5=mmVRswY4Q}`~Cjb)>dUrUteEuZ!b;9 z#>R$*hEyrT!^4k{k2=<_t}c1{7kzYUYRYQ0O54@d)vvFw${IpQOG}G9O(v77zvgzk zOG`_2rkkIim#4q-hq_#@xw*MWBx1AKqR}YJvdS7!6qWa`YVbU7GMNkp&6SEqqvhr0 zdA*r1#<5t8rdF#JV>~l6GcYjF-rlbDQpoe8z|zu^>NTMu^(j55D2mdFVvH{@FQvhS zg@sfqH8L_Hr7X*4G8u%>;^N}h`l!d_F_}zSdkG<{tE=*JR)N;l)m>a%AcQ!MYiw+k z25)a~D=RB$&GGRu$8iXuY&I)DHs^jY7z|n$x3jbJ;o(6G$}mh*Qxn55dhKa%Z?CPb z?d0TSdU~1;zP-KG*49o=PDUb;<>lp@o12D)hKY%Z_4RdHGdMVCG#V=^D!g7VA;jzT zS}c~5l9JKUQROU&L?WBb>OA#1od;>v@jR~_e13k8#bUJ2y}!R}bw2%+5OQ{QmQJU2 zpofQtc|i*uPNx%NtW(h4-ThxcUtV4~j-x9l2!cGlySqyy5?^fi-y1y7>;HQ?Jw5&O zc)_<&fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rkT5zX4>ZCm)Tw9Kiqp002ovPDHLk FV1hvCtsDRV 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 GIT binary patch literal 0 HcmV?d00001 literal 880 zcmeAS@N?(olHy`uVBq!ia0vp^7C`LH!2~2%1zlDHQk(@Ik;M!Q+`=Ht$S`Y;1W=H@ z#M9T6{T_<|yN3Lfuu#IaXfu(gw@IiiX5M&Oy|3Ke?r3a z7ra&;0u`^4Qrd-H2TWJlCE;4;(ZQ2{SII`@#?j<}=?+sO#8N(|9v6=ZD%^hfkU`Gt zs6Q{#4}P{iVe|Q^q`k4#=JR}uHMo9p8!fa~VqguxfiC2G6x*lQ#9o)bFnRLi+qa|J z66g4-%bq)TPO0V4!w;W7Z&qu4d3tN|>Z?H_t*JMIR;Fyesp2UmA(0R%mYlOSO4UiOsI-@Ti4Hf{IacO_O*;ggoMx3f1-6c-ogy_2x0 zUcTXa^|k8o!wm`?K+%m6J=@I8%;ebS$J3&&y4`brg8v;yFpc z>1NKi<#oR*Z1T27?e6{b@1LESS(`vqRFsvi?bOtn5f?MAOF3qt-U2NXCr+Ff9cMdr%j{V~$0`yN9iLyh`r_Ze zxXb?M|9$u{VcWLt+npCqxaFrJ#Mb$L$IOzjlB%j(DMm{#XI2?KfBrmccZ5#b=E$VV zy>UGoZ2{v02BQ9g8O(8dUzS*}YDXKl?goBcc9_Gpsf<5!)Jcf<$UPAu}=UX^7c trE{8(kMEnjNSrH!hyx>5^hNw7vpHA88@1HxbYN~_@O1TaS?83{1OP2(k}v=O 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 GIT binary patch literal 0 HcmV?d00001 literal 904 zcmeAS@N?(olHy`uVBq!ia0vp^7C`LH!2~2%1zlDHQk(@Ik;M!Q+`=Ht$S`Y;1W=H@ z#M9T6{T_<|yC(PaMP+Ub49x1DE{-7?_ukI1^>`g1a{T>T5s@ib8~t{r6%_;r+_BP% zIC${n(W8!u32>KcC-u^6$mo=TC%kB-nm&Zdxd>#K0PW16|mp;u)kh)rn*7ym_;7Eo9s{ zRE0X1FJGR|SXEIW(S20FNn2YxZTGHST>@Ne&6{+d-)Z`PI{kQwRcv^8cv8cvRebG- zrM|p*<0EnuC>9#}w7}xlty?jA;-|H`9)15k*KfIs=j6$g%XZ(b$v2w$@_b)e8eDdkj zroDUTM#Wx_)tkQVbH+hC$efTgj`@-zm(k%k#KVQFoy)7|i z^Udqm!)JB5Ew=1_@csAQJo8>w#|^jNK6`WL&Yj=CtN)4QbaHuJ|JvTpo*i)5z-eKC zyF2?`>1VkcwrvZGjorI@xAvbf1%VqkZ!Wxf^r&m!<5Q8xf!-FnxqbWg0*f5ps*;i; zk33Wk72f&v%WCWG+qWeiCkg+k*#``(B8T677`tZvpY46{?+qHZ5 z+1)^|UbL~3>b>L;IOWf)Jv(-s*y+TPxc}*Dhr{bvu8fR|N}48c>CT-qZ_b=K^W(>k zoex``6s62fOul^o4)pZq90LiJmM7ctdZMGE434Sp%JKK_FFhz3AI5Ykk^XB=fO>S;(UZkPbWn^TObdHaQ$HdI6thCfsNpSh)mme!W1qQ7QsjaOw z3~=gLwQ6U6OOvZRbD)UvOrMQgJB~lTnX@gz^vL6n^>IG&3(jjU)1RPoddt*H`^_eL z1XS16`Mo`Ty1Ue{w(;AyZ(eieef$1h)$^Cwa&?P`%o+_$I8a^8eukUk3ev^_wUxkJ O#Ng@b=d#Wzp$P!Esi%7Y 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 GIT binary patch literal 0 HcmV?d00001 literal 893 zcmeAS@N?(olHy`uVBq!ia0vp^7C`LH!2~2%1zlDHQk(@Ik;M!Q+`=Ht$S`Y;1W=H@ z#M9T6{T_<|yQco?g_EW;Ffhw_x;Tbp+8!9J5xLWz|wEaqfp;vT?p5&*yg* z$-47w9?rRH`@H`B&ixP1S>BQK3KTKn`NqxL$*9r5gaawH1nj;m$9G}zV&%`A{{H@p zG?ZF4-PCdFcx(|UVm+77_wp)hj)1nrGwLcrob#RwIxSzmoMWMf%AwCStFKzw+lR*{ zaemeR*B=xzf6M##@A=vfdrVE;c{8W4w>PtS|Mzd-z684l-no1CsKoKdh3l_pZ;a6B zx|Ao()oRhVd-v|ybLMP`TDwZ5*R9s>{_*4PyYKe7E!H`G?#!7NpY?%2S68wzsps&+ z4{zSQi4Sy5|5n zojZT7ZQH+fYv}5$f9mR2h6uS9=H~jYW@BQUe%jRDe!k!G%vpAJc52h+&z&0^7su9o zu)V$g>(|oSf7h>H|M;;``GVi_%UN5uyp^0eJ$+-upI^U>g1B3oPJZ;96tXs~_ezLX z>ZbJy91@TJ)s`@9+p!~K(X*nR&CSjKnYIM2bP0 Hl+XkKMhBl+ 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 GIT binary patch literal 0 HcmV?d00001 literal 857 zcmV-f1E&0mP)T5g zNu1PH(a@qp8X;7RgIw{TrU=5Nz$J*lL8MGEA{rVTqK2!6A{!eV5`vaMiEs-WR2mwR zK#M#v^!&f!c*mh-zPtB$#QVPK`~H4>{O<4n?gR;?6uv{~;F|3Ul zm25Vv*Xz|lkB^Vf&(DX3h8TufUtbRfgVH)7#OL$rbh^#WO}Y8{`r2x>_V)G`i^a3E zvrHzlw6qishd&#BbaXU3J1du&Oa=h@`}@`0OdQ84OTXW*EJLACC=_bG!=llsvJ^$J zd9ok~05CW>_~TbN9F7*AFV5)2#l`FEYgbp7R8CAxv~%*Nr>EuIU@#O41(szSdakan z0O024rn|daT5-GG%?GL7um0fRz+^I6EEccVn@Xi7Cnwv18jZ#;d+zV=0YFv)z{$zU z;^LwjD5Z2^VWC_u`+Pn@5bSpQ;o;$*dKHyQrIC@5h7Dd`URDDoghV0{qtWPgyZ86^ z>-BnzEB@UOMNxU*Y;SLGY;351g(@F%gpjeZF%>34Nb{o2W~)}KQl3ty6N$vy+M0Uk z<>h56m6GymwQ8|gl+V$8KL7UirhKfHN~MMgl}hE|;h}l*%*;$OnUr#u%azS$zqs1g ze~887@y^c9$HzxPNTE>hcs%k)tE;Po5K5`pY+hMe0f5`v+tbrilgU&p7U$>ZS(e?| z*|V6aetCj0p^J zF&HhujBFf)YOzl zqxoJ7{NE3r=T}x%5JDK^R4Uck*=ey@zT4z)K(DT@>gwta4-ZMYyu3_NlpqM-YNGtZ zOozka*Vk8uVHk!fDJdcKY&Ls)d&~2DadELmqtR-$r2g{q^8EbFvTSK-DaUa&H8pZ8 zhGC3GV_{(-NlB2&WN4bEC<-BzNF)jh3iNt?EEeN9uBxhvVVHcsdY8*}aB!g4>sgld zcsz1_ettd_3h8t@j^o^JH$q5$o~G&A+FFFr;^Ja%D~4gbUTQBd9UUEYI-U9M(Qr6iQBgr+gpgLNC2=4SFq_TtV@F3vHk*ya z4Gj%)eRFg3s}&3c0xc~qkw}E3OG``1WD;XMH#bLG?eFhLqtSf#sMG1}>gxKv?r=El zcDtNDK0X?aMvmh!#vYGHrBe0x_it@&eWheswzs$U?Ck6xbwLoUR_of@+8_4l=S!c- zWIjGVey>ZClzTaWF_t7Lo6S-bWwBW9?(RA|I%a2Q?RNX8=jhDL%*4cm$z)04U+bPN$R8WHLz(7oX49+}teJPfkwcgJy7WP_DPNwTYsb z+c1?%t*)-hD?U9vEeOK<`}^_nu^ir zr?QTUj7(f9EP=Epypa2CZKmiI+fC3bt00k&O0SZun0`y-Q ZzW^ 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 GIT binary patch literal 0 HcmV?d00001 literal 2532 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 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 GIT binary patch literal 0 HcmV?d00001 literal 1148 zcmV-?1cUpDP)r6qN000CVNklB^;KP6E%As_6m@ubxVX58AL8|T8HUN} z<8(U38d08WbbEW7<2a+ysL^P2I$i!A!oqQ!Xq%MZ|Lg4RoS&aBr6XH!#?lv6)9H<$mzcs!mz z*PoxCVr?eix8L=8eU6f4S*O!!x7!gycDvo@^L>1L;HEU7Pft$(u)MsCepkv~qen+a z05Ci}T^*E3hQ+Z_&v!{IQV zD6A|fR9WvhJv{}0?(S|Opc4}l05Cp24geaBMy*!k8vvM`oD>K2{QMjM^m;vSN{`2b zZ~FTB0HC$C6*ueZ>Hxsya<#R!sZ=VV4!^gz7XXfrk9m8UL?V$$B#K$1(P**Upgd6g z-(s;CZ_r>c7z_rBSU2kaJ00v zd}Gz=bj2!yGDh_B@)AEw2q;a{G))(?Zf$L`EGsm7!aK?3av>=M%H2tCZ*M~0XSdtG zNvW2WmLidepepqF`MJ5dS*21%qtS{!De?RLq9jcok0;~v^TlGZFbpGTjjpb)0>H+` zhQOs3kH^#LbUK|b77mIz{8C5s;^G1T3pLQ_*y6*u+x8;Dqk^FIq(xuu8qtq&9akFjvMjuTAEUJI~@QzQ=R;%yXXSoaf9apePD|g8hX*#CT91ln3QOc~Bmd z2jxL|&FFswtw_Y^m@IerKPpCwX{AlG11r82cV*&LZMLn zzDLz+bzWW`OAG`805&!@D6TDi(A?bI{{DWJI6puC&2UO&X(rR%-5p7it*xyreSLjh zEEZ=`)~~It0cdV+X6ZJYO)8aU5vavt0U(h`Vnw^%{we)$f|^XG^73+)Xti3i3-s#h z3V>WLXX)G9+W;CG8nOj+e}5l9Wo2c2fEE`QXVDQ#d#^t0z6QW-`&j|Hx3>qN zzP>)5KHkkN^LRXFvl)P1uV-4b+3fLnm@aNkrk9r&00cp>^xocH07j!R`S4&c=<#?c ziaI+xV_LV{O_C%@l3uTuvy*9SYYRYodpk?d&(84~!=^x)ties9{{-KEQ=FNfRhcIK(#&1SQ4mP~Xl z%wnR`tFf^$l^FyA!H<`DE|=@mQEhE)02UV)znmcu2xMaEFD@?PHzokb$HxFv9Yn|=jTMR zt5T^FM(}@nXpu++;NjsRR-B!k1u#53oGl&=hr@4gZv;Wmdpl$FwX>zAC6!5ZIvstl z`qZPNqoW*n^ziTyKv!26OQ#q8{{B9dNl21R;=Dj0z(Lm2sm%&ddMh9ZqNu1Sl}T=H zZuELR6OJmCiY`qY4u`|xSYBS{AnS*Qh5*oI1Y>Tu8$eG_Puk&_C@9nSD4pHa)z$F< z8h;&4<#38^xvWPoFE5*#npon=$q9hY&dzLkNp^dC3!tN;<5N)9b@Vqu6M4>RwbBWZ zEueID$6ETw$Hzz{67S|8u@v)EB9SPSN|tCa7y$TuKI-Q!C67iT5vS8RFfhQU27aqH=O_=H}+8j94;ItyW9FxT~tF(rUH; zjsXS-2Q3zhP$;A_Wr8GsehCJHGMTKPpg<@T8jVIqpPrufdc6jN!D_YE)YN3=tBBys zf9ZrmA%Y-SVl)~R3Wb^ceDgIZ|3Qogna=s)!sZ9nuW Re)9kT002ovPDHLkV1hQz7aafq 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 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcmV-^1%djBP)8w$CT3z7@Pg;t7^#kC9Byi>^g>%@d)jb>g-8Jm}}IXnN0 zQ>XKsV|zB+{P*-fpNmub{Laok`@a8vn}8%q{0;EIUjkkzFO(O`3+09KLV2OQP&dG8 zwR)q_`T6 zb#-}pc}#v_U?4g=x}>CJX=#ZhNwe9^eeai~r-W8iR8&<}O-@b%pe>})XeiGF2L~r4 zBzVZ8|2Q5bx3{;WqoYctk|2oi@bI{}IEt^Wtt~Dt1`r<~pP!#^D|KAWC&#~2YisMT zU%yzS#bN<4GBQFlR;!i1+9y5b`q0qO^73*PIXpZJfR$cjV`JR6e@QwHN6V95ufM;) z&&kPQ@d|~)-``&-6f()MurTfuz9il6`oY0L04FCWY>xnCWo0b#{r#QASglqUv))mQ z&dtpMh>eY9lIQ2=0CID4SvM<{N|VVXm&FMd*RtX?8Gt*m!lG)i=04XUcEPiHYMko~e`T2Q^(8a|? zs-81RolXZpEEapwn76R703ahHy*8N=cuA|e1BA0K}^k-NIO z3iEkjdxcel}Kv}MtTh6YD1dU|>afVG7uNisDxm22j2;Q9I4&c4rRG&-8~R8{8= z@COG6Tr+ zz1jVBl&jL#2R}VMQHLl@oSvRiW0x2Gau*a7WU*K-E-tiMtxP8S`1sh^*tod3NJvO< zyHJ5Ef6yXH^2;&87XP0K<$qn~h4Mmqp}bIDC@+*3$_wR%{$GUt3jq?uS`N^A`2YX_ M07*qoM6N<$f;T9e%K!iX 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 GIT binary patch literal 0 HcmV?d00001 literal 1486 zcmV;<1u^=GP)<{P+91{3MKt(I2;xau`K&v5z2Ag^z^h!rD|+!Y;A274%O7un9b%3 z7cQ)=t?}gN&!1CLQf}V7dH??X-74iIA}J}Ur>Cc(p#i}5_BJ6qJ3G~CHIdlX*2WtH z`10k;)vH(kU?B?sNV==Xj~}xvTT@drH#euzXcP(s;Vl-+lP6EMx3{yiv(KMDPsqD> z@201x=jP_>bh^aE!~^wcUS6KrY^KQG-d+HqP>AA_lapIoTDU!e1fk!*e+OW**(ly@ zHfLsLQl!`G1>kbI;vm#!vjLc$ou#J$>g($%vaPLc_i-tNgwT2U@+E-Nr%ww>;<p(NO>+92jEG49-@bi|mIT~l7j#oJ$h8gzkT~w{D?_3pE`AF z_vt7hAwgPOl}e>FkB*IviE9#R`2bL5X>f25 zfYE4-I_=QV5V_Tec=YJe&!0b~C491zUc7iAB>VdM0OaN6McheaV`JQ2Bf3!Dg+lV) zy?X$fnwlaS$Fi{9ZnxX*JB{ACb7ysRRf5pvwjHTAQ86$uz~_81+S}WI{P-bZ*H2DPMqE1(2rvvo_3#rD69BGU zxe|*|qtSTi&>@cFs5C^-+}up<`Y4ayY&MgmBP4x3AAs`ma?03XFaTItS&8v!k{QU= zYPEX3Ua!|{wOV;nLX48sO_AN*-2fgwd`R(1rBWQtJK@)_U(_|?P^>XJH#bN8B#uR@ zFAjx5TU%Qd6%~>SkMJ6CD5iuzGc&`tVdC;b6;G1tuV23&heI+_ImALgeE1;F1Ehe7 zjSoU7S-YsHNJuU&E&?bkE2E5uhld%4q2Brr=$$DiC&yqgP~`LH&q*c{pYn;1r4A_J zPfku&R#u8%M->VM6`;XjFcb<^S6A=jk@HS>K-$fvr6r2b%*?EgwvWS}h?L7ZC>m&J|iLaf9bF+%P>s5e!h_)RQ^Fs7Agysg~~!@ op|Vg}s4P?#Dhri`{_lkT3+S5(IQogUxBvhE07*qoM6N<$f-DWpApigX 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 GIT binary patch literal 0 HcmV?d00001 literal 1376 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 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 GIT binary patch literal 0 HcmV?d00001 literal 988 zcmV<210(#2P)Vd>x zh(89UNOW*>QgO)OB#6#}?xK^_;^wF*)WJW%MQ15?D&nL=hbjRBL6Xuz)E0}iw$`TD zJnwK4Uh3PLUXog0?ip@)?$;;JU7q{q!U6#E8;oOqiBV7rN?B^%u^3{ez^hK5`Rl_Y6-d6{7tgwWR3R-sU+(Kwk*777Jf zmTzuu%zKTwxw&vS>_AB2JDZ=M$1M*I4#2V{5{b>tP24e;%YkiUtTbwGZ^u(65{bG- zFPF=rC~jEx3{_PzXkT9+!5pF}HYlP1u)Dj9Sr-=<>zyN&N`=GW27v;=^z<}l z4TVDBgc*immQI2ei^bN~R?M1Cr|lq0k`xRE0bq7^)+~d;pd?9V6*(vXTwGjW(2*RNq_>K#202w>Lr^>t#zwY9b9=jUp*IKXy60YDH0%zAlw2~JzJjY|TW&1OG^ z0>|mPPB6mG&Q3O)tya6by6Q|s0U#6#Vb+O>39?5mm&?^^|G6s|;x)n=fMJ-ImzR3` zo}Zt;zrRLizW`}_M0!(3lqcXV_Rbgx^H5l58g`JG$^bhKGl3CQH{7{@K|X$8p7C z(ed2w*b!=~();^+i+aa2MNujQmy4q0?d^^D%p4mVt2d(Ld311a@bK`^l%y6dl}e3{ zj?T=?)JUa&mv-~$fUOm6d2T>h*f3rl!6< zZ0_#v9v&VH!!VtKAed^)#qat^ByxOw+|$#eD2l}qySuypzJT!i{f^{Ul7vt1p4^{v9v>eyO>0I_^NX~G=jTB)nT#yU{r&ws&kKU!@puLX24q>zWHQYK ziV*Vod=*Zg&xa6l36$`y$638%t#w^*X=x$8Om!uq`FuVWi&Z#du~`f__Rb3(g+~)pb1{k5@S3@wl$*%>~NyJVHoS)pR-?jYdnQ((UanLWt-2pZP0N z!@9b<+S=L>LcP7c9LIHbc6z;D_Yyu8B@~o`Qcwy?K`H3}4f+Sw?_4!#iGgVV0000< KMNUMnLSTYc2hrsK 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 GIT binary patch literal 0 HcmV?d00001 literal 40838 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 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 GIT binary patch literal 0 HcmV?d00001 literal 464 zcmV;>0WbcEP)kFIhEeSa-?0_iGXe9`6j}$k%mcCFp|{B7g!Epa2CZ zKmiI+fC3bt?*hs>H^!vc7{fWgx|C6$$A`9UD}+d~5Tb3{t4q1Wi~kEHA|kqR;<7Bm zFf7ZGnRMMz(=<)ftk>neXN-C8*R0x2eX_Hz>l=;|QC-(nRiQ>p1XW5YrEZ)^L|xb2 zyNFLa`Wxkh8b!lL!^dSp!$-qMjiTYB;b(C)yR5Y_#uOyKz4s}IF zRsfT3sK2D5(ex;&k1kQIb)M%Tk$Il` zyWd}=o>D4=@U{?wQu?av@Qd^N$+YL?Ohn(rL!!{ zvTVa;UMWQgQA(ZhQkbCLmorV%ZKq|Lrb&{ZM`KKsa~}A>9rsL86x#;z>WZG%Na#@r zJ_H}b1i^>kqemh55d57LJsee4HBI9UUvH(9H=3rYs%mJ=VS1Q^5YN9WTI7#8R{9H&!njA4w0L^8$}R%h7UMRzh`Y5Q-f$I=$m-<^6aZSPu9ENx?a xg@$bIR<8ti5&R@cmS1V09*H7RB#K1$;RE-1D=}0)oB99%002ovPDHLkV1iV9H}S_Bo$H_!nbQ-+;jDu5E`06Op=m|+}7Bbtz?**&e|;1ia&Z`WcN1~`KK!9fgxB2Wa1 zKoKYcMW6_D_dxr;Cxm#XC<=cwIE0YC@5fG7E6$)tyRI|FEKXsJ>ADVM^h{f?wRX-e zPT`!>T4Rjj*5|Te-rBa6QVvTdrEJ@F$ZU{fQYobnB3yFL!w07ieF7-we7sixz&T$# zv;yd^w!Zk?-jmk)dcAJr0mc|(Y&B5ESjzjf*3s-)cIio2D5b2mi_v4PRZ8WK(Pt}K z*R@Zf&bi0q5!7^)4vaB%U4Ju1LlQT}csM=pizb5F)htecM0O1?fYPUBYvdTBfS1s;U;#$^Cx6-EL96HKqbWNT{pQhYneV zo+3s!Hy}O@G_gP{%W|?DL*cydpAGm!?2{`RjL!B2WbSiv0udZFR4YSI^i00000g8T0lfZwA=02AVwwz zM&8`=`8)swgTc4lN~IFM7YhIig+g+&_6}b#=waxej~e#(_tk3k!^6Y$^z`7RHAt)j z5Nfqr-z^e#34$O9LVap&Zf@3_nnPQ4e}CT`+Gx;Luc1Dl?^Amk1M*B5S-zi4$&}+b z0C;+O5{s9Ym+5rcXf%GyG!zPzN+pFt;dZ+L;PLU1n4FyK-nDi8 z6+bL4E@HQ$xlg7Ni-r`Lk|~+~FjIzMq&F3p%3`rtuW`9t7Z(?ue)roR!vsOdX0wQR za&i(5hhJV^5HXodiZMe&Lv8LqI_U3zjg5@~K($&`tJNNl2LOhLhfhyW0bpxuD;A4= zfwWc6&(DaMN~O~2v{>W!`)jpY&vz(@Xf~VQj=GX;&?Y7(5V24w;5XEqKEp`xKtAmK z#*rw&Gv#?607gegX){5lWJ;z#^mH;X*%K&%5-5QZD1j2_?*SDzJu)5~dn}&kr>3U* z2I_P=6N$w7`nq^2n~ zFDjMFTrLLyM@L64xw1WKR;+8g}?rgtsVb*VU-00000NkvXX Hu0mjf&?kid 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 GIT binary patch literal 0 HcmV?d00001 literal 626 zcmV-&0*(ENP)k^+-H{C=?P8pdyM%m_&y}rBd<=I*AF*BpP182#HA;fs8*|az23=Wa^H2mUMG`DriI<@ zc2=vE5Q2Nalmqi4*GK5PL2Wi00Ho7t&Ra^;w9RJY@pxWrpB|4#08kVq7K^def3Ost zPA5VLr8F1};xR?&Z-L@IMJPfM${N*bRZ)~%74*RvjYgExMx$|~=E=L1-EQA*w>;Y~ zm&-SZ&$K_A%|fA2AQ0f+K8MwBx7z?9NfImdZoiTw8QmNXhvjm~GDWO&DhLAmyx)h4 zqDU#7PN(e9`*Z4aI>+O2tJP9f6(7+EMJPfMYU-`;ZMsKM6h%=KMNt$*QBF}Rm5jvY zat#K9*A*26!ALThOsCU%20=}XL?W?REY9ci6W=xIHLuxh`g}fz!(p*ldc9sgpU3yn zUn81IrS|*%d_IpvBH3&f0NieOx7+1r%H@>EvTP*7;qZqJC}(Ii8m-ssMy{$VM>2<{ zmt~m{vRbVQg@Uf@@pv2nipApfe@yUKD2k#eilQirq9}@@D2jfHzc(*hEZq7lZ=Pp& z{kpuzzH_Q`?>)ZvbLQSV_kaNa^1*(P&+N3`cDt?k%;szi^WOX&`}X#xL@?B3%*As% zxR>Yo^OAk8aD>1$gfa|s!)bksCAfjmMx#LpQK?jf5QoF@#~6HJola+~hhnwtcKe~B zudlDTUC!_XE;2ug{%@k`bo$}p;b>LZY0Kpj0Q`P`p-=#TZnv9Cr2rt2NbLC39?_5H z@p$&e>`8wznb>T$&6krXii^d9Dt!R3*=)yVgJ&N_&uqA*P!vT`6h*g96vcYIZZsM< zuXNh7Cmap~Krk3wHyu0N_5{U%IanH}syTgty z&2y*p)Opk`N_xFSluh&aSNqd+ol}a+1bi3VO1*B3b$|=sa^gPc80)dy8m#zL%sZ^`g z?(XggA%Y-0Jw2IBrhoQC0bn|vp73Yy33f9#6V=kUS}jSE)M~XTiawuDuh(BGC>A9M jil7LJpa_bfS8qQ7ClFT@Dkzn>00000NkvXXu0mjf=doX; 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 GIT binary patch literal 0 HcmV?d00001 literal 800 zcmV+*1K<3KP)20008NNkl zJGj(A9E27Jhq|b^xw*Lb4;0jYz{S}=A+teO9kk%Af?ATr#UEJEE=7Y%(SVT1c|#s~ z)*5T_;xFF$rh89LzI-?L}8y*gaK|k=@M^cl4A%&z!ilj%+P+neMtXAuW@#*Qw z$ZV>j*Xx;_p%jZnT~qX4q#ln40P^`f$8kHd9et$g65q63Dw#~GspPtSbET&%q&`1C zl|r-G{8v)1*Q*p5hA}Pp8;u6f^M1cyD=H0UeKwmdo6V}#L?Xem>_&I#?)|}F0EU3` zK9V9SlKzLQlZ$CR3PqtP6osNt6pBL62DG_!JkQ7D@nA4WQPghF>+9=ODs{5#$>nmj z+wF7j`amF{ZdWMBN_d_Z1VIo4p66BL-xDXg049N9m|QNWloyKy%d$KE*K-`Fm){(r zqtPf73aM2|lDgflmh*T#-e)iCAo~ywhvV(-?Hq@v<#MT(qtR%&Tt2&Tbg@_vLM#@G zQZ1EAZnxX%bRK*lH5QbWO6B?ad9_-3z25IvB}wY{`&#!-CKCfOYOw2lKHtsFjlds?HH&40000C=?1yLZyXP+SwbUg;vWCAfdn?AjSq8jEx;6K-6eR4C`m1Awe{{?k?vQ zlecdlyWp8|N?x@BMJ@bvTq;PUcPvv4Qi_@^s?rKKf(wOXxe%&D}85yz4iWaEVYFfEeDy^-p0Vos-nz2wQ2!ddGZ%a~BEG{nUtKo3i zHmUZ$N+c4zkj-ZG9k#Z%-l8-bjSdbDYSqWbNBxWP>gvk$E_(Kf)M1cI5h;-p={F@! zr_*O=XR<7}+d12P^+}S{)z!sgo{o+VXO!OD-0;G~!vkY15C}Lxy0^E-3+LzOjIouK z6~e94z*2xVFfd@uM6`h=mpVQ^<^_u@ z)-LFc#bSJC+tbs-jb5+!T|qB^?d@#fl!Lit(T$;rvl(NQ9ikR&OYO!CvYxw*Mwv1oC$b|;v@A!M`J<>h7T%kpVL zM@L7Ej@u?@Wigv)FRf>UAP5r^6XkN5SI5T2N~Ka$pIj~{%W^A*{r!D+pL#vIySo9b zuCDIx?iyRy*Vo%*R`nlsxxVzdTyAo5a(;f^v{e+vOeO<>AIDVW2LO-}IEfzEtZQp)l}hEa0002+`1lAKIBe43 zu(xmBZnsjYyuQBbd<_5`4u_2z^m#21e7C7fTWGafu~@9pXcUV@#ga%Qh}IjU;CX)3 zINbE&;sOlt;~w~N0e`8fYt&RI6r4`yxYH${&vP92#dJv~lPuFkU9CFZy1u^tXV5k6 zhP6IFKZ7xFx>)dlE#F7dUr8zm0wKiX@vyLhDSEvg02GTwumUoE(`K_dG16={t31fE z{9V$^%S!+Vhr_zHgTY`h7_cby`~AQKT>D5mVc?WPQY1xE`$>m13@a*htnnEoHCE0A&>-DD7X+p@#%F4mP!S3#^Qq}2n&d<;1 z=H|X6SzcZ?Jjh_%jGN%;>1lp`UTX;kgJ2sNg(eb-Znvw*RV+rinjaHNDV?32otc?& zxm<*hhld9M$mMeCm5hGB-)gl0;O6E=NrlO>%=0|Y^Rg`8-``KwqgveE-NoZ^wJ1rF zNlMN90LNaT3kwU{BFAyMw_?-*nefrhnAqCds@LmU%kAy0lC{-EtyY`HfAr+!#O-#g z_cKbRQZyPJN+a_;|Nj1N#L#ZH8C}9K3LcLK07Ow-U0ofmEtktCxn%R>&HNC}@$z+&+G`}d3jnNYdMWHAZg`!XtibAd812|k# UAGE!VT>t<807*qoM6N<$f(pB&>i_@% 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 GIT binary patch literal 0 HcmV?d00001 literal 916 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 V=M|+_tOS-e44$rjF6*2UngE4UFRK6m 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 355d9b0..0000000 --- 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 8026403..0000000 --- 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 b8254b0..0000000 --- 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 e8ac470..0000000 --- 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 de07bba..0000000 --- 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 3faab2a..0000000 --- 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 GIT binary patch literal 0 HcmV?d00001 literal 836 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+uenMVO6iP5s=4O z;1O92G;jkLPtXOMsMzWR&J6Sy{Q{Czpb>SXl)C zO)h3IT>gKzKAIY^ORcOtQZv&tN*GLyjZf`ioC;JUj${s0O?YNXNd`zsq;KE}pb|+W zCBB)tsU?*KsSIFG=ojRr+iwc%W1gMI^(Ad(<+{D7f)T~Q8m<^~z7|ERA%qn2y z=vkV1J2~ZkTHXkhPC}9n4f142%gjjyhM0aver~FMT1kPvp{bF9erjTIWo9xkD3bF~ t*vTn*x|zA@ddTuX*XbJ?niv~HNHZfnpa{bxe=VSG44$rjF6*2UngElh3X%W- 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 GIT binary patch literal 0 HcmV?d00001 literal 1089 zcmaJ=Ye*DP6rPCG7VH5P6%@m0nAFZ|cgJo_jdoch0%zyWO$c z^~J8GE)2tpqcuVt?T%egRDk~9C+6Nk+Y%T_!aAc7rX>qtA;o9_cvO>`KpaR)+qSzP zfMGLB)kG2|#SOe{Xr$!CkQvQHXbcNfWlTwK0T6EhO{yLw#;;r_a8(Hs8+{@znqkna z*0fuouDv!Px3|cZ3Q@Hd4`g^mpaCf187-yTd?rX_d3j_zZi>LOA+RM#{3$9a#_+IV z0o+G=+%nBDILDEU*T-?pYMiARmZH((+>Dp^aXedrPksc-W+{z)T&SMRg-$`D8A6k% zsB}6_rah!#HBn4uWu?QxvThXNw%c?lW!$=5l4B5nEnBJyRYS)eMybJQg+T&U`lkiW zoTAn3$!kIvMr9{n0UC3!&i!utm=-VJc|%TKC0VL(q#}8f&}6qRaN1=6}Fx-P4#XwXD zB{EOFwf(MJ^nxAT?_#d{=P!PA`ahQ)I5x2PZQ)mOPUnK+Jx>-DmhXL?*g95!b9W&% zcqQF?_QJEk{lmn=jv1$W=6wp>bKSVSeBZ0ojgE7x*Q9o;$4l>AD!TBv;n0z?2VZ_h z-`qOW_r8AEyKwFVvH#RXZI$&XHq@0aI*EO(IV$++k*i;34c;DFOm>aE9O+ftL)Yhb vulP08KTeb`K6q{8=%!txMK@0be|?=zW7=RMaef)Q+j-Q{NUhMfZcFEHB|va9 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 GIT binary patch literal 0 HcmV?d00001 literal 859 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&V!2%?m`@?4fDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&U|7|wYy{+S z7I;J!1L+hn=AU--E|4+Z)5S4F<9zLTL%t>hiMEI0yJu7|i1R&MraXJMw)#ZT{6|@j z9*Oeo5?GfYQJ|*c6TqJQ=lAvxrP=qE_$%kV*?8tH7bkDovpqK&71QVVu=Tkx7(Pu2 z+3;`gtV`^Z`wq|F_DHDboX%7JZF}}ENqbyZe9-eF`zHNJzt60ZexGDF&3U3-)bV~| zZQX=7pS0y><%C?hRQ&v9Tph!N@T$#BUq5yMov2#k8c~vxSdwa$T$Bo=7>o=IO>_-R zbqx$dj0~(y%&iQ}wGAw+3=CMEvM!@&$jwj5OsmALp+x>tK2U=%$cEzlw370~qErUY z+{E-$-^BFHlpinIKI- z4Ai8TUz8rXB)%TzlH#&-tK|IL+|;}h1_k%jywoC~CsGuWDiu7F^L_L4^Yk+F6%0{uKbLh*2~7Yx9TzJA 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 GIT binary patch literal 0 HcmV?d00001 literal 1080 zcmaJ=T}TvB6dp;$Br^(1MQ9q0655%a+1=3{cQe~rbE7d^m)d@HoVo4}>-;oxZCCLr z5t4kdqN2AT0|o2Fel#r%3Zk;7it@!Eis->0BB`M6=&ttAHeBYOdpO^B&bjBi{Y{N~ z3JXdLFbpdUHSl4y+jd@l9{T_IQuG*YB`_F;&3ZdbiYCD7WW5dGAytflFc9UglTUyT z!&X%&ktmD``#4EgNzslWQ>uZ`80M=@8KRT`5N`u9Me`H$_Z|?qBKwI$9>FOX0T5Rj zx=qmB-58O&6OvaZYIowk6o&{@07X2dc4!ut@)L`^9I|aUMc|7eFySYbii!$NctAG+ z?jc|&bsR6z%nTZ4QQUpa_T6r9m;}(5&(d0}m|8R1B!-8g4U+ZF(p46R6Uq7F1)I zRsgo6 z<@8hsXgcVwbMXvc$9jUnDu$tho(z`PrA`%SFoTs>u&r3!RlOjg_<4!eqr#s2Iu~?O&tLxR8Eqb6L3Puq=I`A-$VO*c;z?2GOG!3GsE2 z)LY;Fse*^jb@wZXd~LYbtycDjb1zMfonKgAQa16uvaDuEnWUmcWKU1+c+I=1ZCi4$ zzUtgsITX7a`*m>dftm5KYb`?;b{!kNHSOJWd7^iAq1<$BRs jrDjcgU*e40*OHTmbscRzN6p+Rwcm0m*vQ}5-Fo^Dnsa3k 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 c4c6022..0000000 --- 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 8066599..0000000 --- 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 332ca58..0000000 --- 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 153d6e1..0000000 --- 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 GIT binary patch literal 0 HcmV?d00001 literal 1787 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 WKVS!lK#me95g4F$!-{Avfd2tyqRXcM 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 GIT binary patch literal 0 HcmV?d00001 literal 5576 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 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 GIT binary patch literal 0 HcmV?d00001 literal 9956 zcmZX4bx>W+7v#esXmEGe;O_43?jGD7UT}8^4nc!E!QDN$Yk-H_!(tn-xixjXl%=GUH8hj~0O|t(BH%Na8~_miwf}#JOG%Le01)s10J+bnf4>Cs!c$60 zLlFR=0Dig&|AT$!`jWJSq|~QY@X5(PK?|?|P%5jluzhNSpIqS+Cc1s*GvjMuOG*gyg@t>P$36? zTgN_u`a&Sw+hcYR2!!2nfwXdT^tJAGhf6zrQy`qky!reQX`P&Z-Tv00c76SwBPe+K z`D{_0`5wRc^s$x|H^_VHq8-QB+#kHAuc(Cd(oW+)yfU!TBS^+bOULML>wG#NnaOFt z#Hbjr5Uta}&P8o&?I7m8GVgKO)pM5{SyIxbXusSrRt##F-j=uM!NEvxx(WJwwcd(! zb4_iIXU=O5v(GfV9_xk6fLDcEg=dd@$+l(w+p=>899$n?pLcCN3_C0}91)v@r(qMpF6WfKvJuEaF7|y>B*e4wb+a2Q>yfX7JC4(ZyxzR@aW3?1+zfWW=Oozgrl28%GLK0n zmcR9C@3c=T6ZuMApljCw29i#-hto^rbE76N)fxKP#KYLba4Z7gHK?bSxS)5qe4`i>0w>EX!!MRof?9+z1l4 zYc+90QCUq(NnSIQFLJg=c5+zR$8e&N-4{C;_w`=kkVGeC-owC3G?934S=-n=o&Fqf zvv(+(!Fxf`z<*+E34esVmMb#50fKFR zUWl|GTB_xRV0_;hr!x7Uk_ThJiAycHu^!kgzHN{CrN|j;-PY|Re&Hl2arbB)eMUO9 zhFrUzR@=EN{3@u_X%z+A{zc7=Fd?P`s`P?1qWvKWI}|A|CvRmbPJN1Po4^VhpBn{9 z>MVg<1aD40@o$u3u_C?4H1OtbDp|oDnt`oQfv}Br+Le+D`thRk@V>OFUXM1Ft8vl_ zp%1S$*5A8Ts6h|z+-P9p>fsfg^IPfNoZ~Lee)xnjvjh+wv&<1gNGB)VB zdzwkjuh(OP8n>I3XID%+$HK$6|DLd$q%W)2;4TLm$_1G(;PzVkN6O_C4&(5qJ-iZf zyQ|*5bcaaG9($qsoVE0!IFGGj?_&AzP|ahhu<`taY!b!lUhCbv?x=m)MK^oLdKPYj z9Vu{hs8fPj5UE}c^*C|U<*yQrr^Q6Ai{rKhhI9~;_I=#+sSRSrWj>E zMAeDszSl|WBclxrDj8{fzx=p-=bpJYrq+rKI{OfsFmnC@4Wpfyoruj6n>3yKE_b4B z^%gh3cLRxhAl@xt96lU6-73mD#5uTpO)&d~`wO$hGQ8iYJLR)M@qEGW>MCyRDaA6S zmAq}k)k+H7(NV=|EC7isqFd8PPW;)1d*?|rQ=26w_l#ayPWSSX@#d4}ahj8LRuIOz z*1nOJKVn&eyJ^WXUuCTlcT`m&qSCYuoJxAQTr8?JO+QWD>G5BY9{3ln$P*v8jY3|h zr)T=C`Co}CNz8>L7vVE~wNAzhs#VK%?BL!qY2j4>ErfRmM}U;B9&(O|f*z7!wo+(< zr>PUq;DG9Gh)U{AnH-|sxLpBZEd5Hnj3QbR1`J_SiR}(CxYRu9?^dx>j61eoVQNO8SC%;>h& zQhG2GjYfxhATnSdhoR~aAK*v?b3~`JC41N$6yHs;y%dac8V3Bn<1(AQIr^58W|@U;8KC6YXwR`5^Y#d}hHp zGq|-A&xO)*?@??l8Kggh-=bD3Azy^m4P@9XE*2EbmgNb{Y~4wAj=gIbncrHBWcyMv zpxPZs1`*B6XhnL23Ho~pL^W|EcWll3X6B%qt)#)s6va<9_2%HF0XVsdxl7gp@!8(? zoLKnnpOrIA>VrM>QL1Ws?iYD-!aR=~$=$}9TgWgfT_e$*p?B*DHiEW9XB(V&AK9B; zmctkgZO!XLOsYsrW|yA#zQA%R&Pwg@l zHE1-WCC-Pu3q(?J%C8OH$3bnHTf=uwjZx+Fm!QY1Vp2t-xk^B+?w%A@95i*iJl@vs zd>4EGx%cy1Pq6H2qH=E#{6*jM?tp)(W20ar-`g)PhN2X`BJ14lY;SMd$&j8!+9zhG zD?{)*?G3KUzs%#~?cMCoeDY$2KCUApqFTJ>jJXyo^4Dg(nnluAYLJYE$tvP73&+b|_icz~gz{&M0PvKJF` z{Mq%Cq57Vw>k9Yi!31m8lm3|#HQ_2-Lh(z1H@pDmZrJz&U4Uj*DFl5VdabfJ_;C=+ z(_j0|Vp_)HQGPPgN8MoCZIVw;&vidLg5p$y=9a1b>HE$L%GqgDWSyOEV%yOR3vvrvmHUrt-W({T=bH_x$9& zMnF?lGSKC0sGmTDhvCIR$$DUR=gv}OU!_ehUnkL!a_M+@C|t_Ih0^~j7_Fp$TYa)m z_8F`56#+M@Oo@^Mgp%dW$|{u-e5^l3UEE$;|HYP2g4ecPOiV9p=wxK!MNLtEi~$sP zKrEW95T7q2W8%vDU5wZ9MZbaQeUoWFE!5WkqPvS}{2}p2*7ozff$tCDu4JQT3r>Ge zhkz~}CKYQDrI-En;GZ{y(KH6_DY``)GIsL`HX= z2h3O99)@geE9~GHno2pMV8Il7U(Nah+uWaC(-4T>pp4PtT zRMWh$82kvF9jxfoG4Kc>E4F*+kxljGEvG(9zQt@kf|pfXh|9>aiTJG z{&S>|I(WEE@S5etzr%k!d(v=*Ui*mduCk$!Dq)eC38= zQsmtajOA%~H_c_m?vm0jtjgpwAB?}s_{e+oljPShk^0EtCgc%`8X^q^1;xKoAq06Z zJy<=>V0enp%x@us+@`lYfil`g>`myb^fTvb2d#Ow{H!P$Az&N@LwB2jGE>^pCMtHB)UMQ~T{Yf?&>m2KCb$t3QE|vgTfs61n zgB!y}X07SVNRRo3Xy_;VaE;+BE&24+E+hL;7;tioF!jfTBg}YchNT@YsPNcuMs%`v z&^S}68P7^ZjxMcF3FQ_-8QkRcch-;2>Bsq2vzzrlzW$G@wWu?q>m1qcXAr$NjnFfE zM8FAOn7u3$i<-9AYNp#!*3fKda^WYIq(9GW1#jPjeE%zgaGT%>+T667)#5$ zP5GZ{16N*iNO<={h59$h<&)!X()G_H%-g(~(_Uu{wj9>(rgD64QBVx%G6yOlbv-;m z-61-YGpm321%8H!fVre<4%cvHM6hv9{<1u%GkWN>^;-yzW=CR4<&@0nQqXpN+@S6a zTP)s`3>0aRnw?*%K=vXcgcb6&4^)SyL0+Jz(3PD#6?%uX{!ql^-p48<|5C>)R* z>@>%8jv3$8?2-L6sFi@zFumZkf7l~}m6nCUq5$2bAIfc;k(l%E5}=LQXl_2(JvWI; zdz3=HCMwB~Mgqf%Mvhei$Ll1h;AyvCAs9@YLaMG;T|;rPw>u0s$bjtS<;78?z|<`0 z{r0D1OEDoM39n%Y1a3<`0D~oX*Iq?s@il9>m$Z_9yG-3P>q?6!)#T9Tsc)=Q$m$;i z(Gi;}Tr`~t9&I~JIHOmYYu!@4mOFClohkyBmSFev`MvTWnj9&HUj0y5xW6XLOan6J z4V~e+WVa0^D+PT^k#+swnyfb?rxod1eo~PJa9~n%@Y!4UpH>KEDTWoO_9ILn~qkIj-9saYe<{l z>*9({_6(T3aswf{{}GcoO6x^{HW+=d;Yqpj9iv$#&iZ%ZL5~UWWK&@2{_=-t#dqN; z=XPM1wO7EJ8|ggG z`8*EvxtP!sth@CXOT<@-Q1R6e8Hxgh=FKVW@{n{3^=!@x=~<{Jm4Zn)`*T)tX)0a( zRu+g&0O-!`u%aCnQ>*HHt_ur-`*8CcT_#%h?*tyr zx*5fFgNh491EGmvw_+;; z89{AJE{I7;`cNr)5?H@XjRw$YjyWngP;C`7mv%RF)eOxq0{Qsq zHY47uh(+l%uxxI>w&a_K(HcPuV~)xXn`?vPJAG@5l;;>kCyDK8x}a#iP2QhQP3RuI zO=19VBXnkr3vOzSgJ{tGF7NeIIk^{wKSh42gvf0q%}qGQa=q9?Y8=Q6xH||Nai;jq zrStD{xYyjQ-jqzUML4jmY?*vbHt%_ADH9o@x)7%97fvOLmiwV$Z`k@Pqp8!-;t->c zqwIm26TJ`AGrRbsp$U_PjG7L;bJr%K4BPZB7{8+?pr8X4|A$s7ujgLqFWOp7otf&G zimi$*B>|=`Ed~CbM*JT@SMYb}gh0bAC`!xoEm1s_d|AAl+hcGV3G=J_UYXh}+YZhS z_6Eje_|lK1k*13s(Dl`wgc{w@i`nJ9<45-<@0$@zZ1MY2c4G`l!hB?2>)44 z5#VMeqYzuIKq{_=#p(CjXK6;NOkC|kW;LXpEs3J@3+ zD%Bu&NG(Z}8Cm^jVQ%$jpur;C=(P#;HnsBbo<*6e;gJW(GwkUAZoTz4XrsyAwjJ~K z52SD5O)Kp+f`8_PL5j0L?|7DD?nV2C_O;}@WvFLNKY42bT7Zpa<~97IO?eRRxT@+^ z7<>vyPtBl09a4^=OsF`>G^=tAfAZAS$V18{oDa8%4A(Q}ts;-0lWpJ)e;}AfO05pDYY!Eqef5?cVlG}vhSn*EX9CC$uU&0*I9@cZH|@mJR&#jgmz3pKy+z%Y7JI zP`9#~2{}E^-D!n@B`;>*vUAYFU|tcx0|4FYdEKJYxzG^@a%B(3?# z6NAc0lN(DL2TxA%^Q)3ngc$_G!2US+p7fGjHcY>-vEkXX{}rkPZQhQKcOCgfc3nU# z{m)|VB7Q}ziZmA-kvWNZLUW#gXHiPqxnp6fMjlFgG}>FAP?nSyB}@38dRMD;*)&XM zm_Bc=4V9zWrmCq%u|}v_Jyi!&DHAK>3V$z)>qR#Zi$Q!oHRE$VP(7@8DB6${B9J(Ug0D3axhzMp#W&0k`=u3D?1RB=ZPtitV za@(ale)5#dXaecc4fUj-B4F#@iofRd(fyt;*0UD-9(WBQ9SOm^LA>E&1>Tr_5|UuK zGNIBK$^L=dE;zF@UyVOYe0FSznL9qcO8LMn|)w_U0*9Lk&VY@2m}|Bz$4HS&IE zl+KmQw;;^7;a2lddMfP=U)(UaF;{S7B3L#@(?67ek&x<53_}59?PMfw`zsZaiv)g` z{HS=a3ePp#M>r_u#(V{s83eJ$n&CNFNHjP4Vyr~c!S%>bDESwE^f{$`Hc>01NJ!%f zVX&W#^X-J$xB*NM>@-0(^|H_TftD&!s}g#+XEc-iYo$uwDs7Dkb+=SPa*8{|&+A&109OxxAAyd5tS`7}sbR#s zxDoV(DqnL@XMZ>?pq{{O^OqY)=8j@j|rhVlcblve*6Z^Hffm(jUKpClM^?LbR+y-;mi?_)Sj6i)0xGEz&|FCFq!W=TK?apHi;gum)ssUQx1 z4DX-?50G!z6MV#Me!YcyG+icN`oehQAjRt`OX_vg4f@yF?>?=+`DF+kBFlxx9}pi8 zX(v)O3n*ug@h}KvCzr5o<;GQfS%>1T`2ehuJ|qp}^FI^F@d@YISCbHA%QQF!;>hc)wC=;ESa>2*$ONW%dJ-0`x{f%s6{E! z){pNwJ*(da{2lzlwua1vCVe0?A$kCLwZk#=-wQ$gGYM!JXw`9ZFVG~Be7LzS;tj|- zWKwul(W2bjzlPVP)|DQ}kIcPkGV(J1pr=`>IhkQF)C~IpkfH_5H0XB?-Z^haU3PzI1Mkks>U)4MAq3dQ0S%?|@#F*Gi)EHyGs+!fmOtWmUtw_#E&e;Qn z7Ihj*oIQjj40h2qM488lf~)fn(#}H5|DBRD=%77#(9+h>E~jhWX74Gez*<)Bk#ler zF_txyRAiaS0NcJ7BJkojfS0KqZxM#Ka{4aOgEh_ZV zq{a{%WY|=In0rB(Ub;t-WifUcA)YD$W4;Q;NruT8=~BM&Ya!Jdhi(ibwm4zmx(oU&-$VJ)oHi7FV8X6(2?V)Jw*HI5=3~cL28ulEjib2lP-uY*a zQ#|{|8L-Z0{Xg;=oW&(9G3k@l&zIt{lL1s%8l|Zela%Xa{s1U9d$tsAb+$0VeRwWS zi;tSdo_;^;tYuKrj&<%enVRqE8wVL{j*cS^ ze~96NGMBsL`tVhZXaX(765R1RpoF#E)HsdULT zW(OIjXswwy`#vq+E;C_W<_z|mK%cIDXph+<2Q9s%n%~7^GA0+Ye@I4Rz%5AKo4qnD zy3}Mz7-?DPSP{*XxC6x$MZ8Jn0x{zeumNP(I?oz$D(AnhpjqJ6z;dBtPy(Af-w65g zXBng@#jw=3p7LkjM#TKo^#cqkYRT%;aet&KTRe9qLEEg#RfG;EKP<}W=D+gXiB@l@ zt?1~ORaVe4PgKTMD@z}bl(&sTi|YxxDrEZ+2qZhD2%hnpPSs{@2ZY7wTxIoBx#g4n z#l6?xZ*%PTwFxuU;5)Q1_wWjU$t*$c$2SeJ?uOHq$X1)5$Zaid^H!3xz_*hxW=49y z6ZfgT)|=!0hDhVaa+HHoV?wYhCDHQ)tMhrO@ZlE7${HaUd6r; z`r7Gpo5AQ`X0`)2{lXZ)|? zW>TEpnV47wo8ZAp!J;`s+~D^4W5XhoPQjMo;br0$ z;a0wXz}*nxp?`dQ1nqnGJx(NK#p1X>xiXD>69}843nKiBp(k$T^mN0RW~$QL+E;I6lV;*n84#^xuDS z>}GRj?*T-A%MsqmgD#7EN337@wh8UZi<>D@1dz2uH2IvQ|2IEcV5dH`q2v(&G$R*M zEK+$dCP2&yGVj0lOq2X5qN13=yX}ufi;0OgAdy(Al@Kjj4SM^lNU1*hLG)CAzL2jcv+;yxwG_z?(uCl3AGWOF45`Yy zYUL_Esh>{KEDl)9N+%+X~ql0y0{_@b47 HXaoEo5^4Yf 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 GIT binary patch literal 0 HcmV?d00001 literal 52540 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 nW;8e`EH$yetlVMM`B/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 9b74d60..0000000 --- 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 d96f337..0000000 --- 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 c2b04c1..0000000 --- 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 a5cc018..0000000 --- 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 bf45868..0000000 --- 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 a6a7b66..0000000 --- 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 a540a82..0000000 --- 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 861aacf..0000000 --- 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 d6bda48..0000000 --- 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/view/console/console1.html b/view/console/console1.html index 71e8ff9..281c686 100644 --- a/view/console/console1.html +++ b/view/console/console1.html @@ -1,512 +1 @@ - - - - - - 控制后台 - - - - - - - -
                                      -
                                      -
                                      -
                                      -
                                      今日访问
                                      -
                                      -
                                      -
                                      - 0 -
                                      -
                                      - - - - - - - - - - -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      提交次数
                                      -
                                      -
                                      -
                                      - 0 -
                                      -
                                      - - - - - - - - - - - - - -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      下载数量
                                      -
                                      -
                                      -
                                      - 0 -
                                      -
                                      - - - - - - - - - - -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      流量统计
                                      -
                                      -
                                      -
                                      - 0 -
                                      -
                                      - - - - - - - - - - - -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      动态
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -

                                      七彩枫叶 在 Pear Admin 专区 回答问题 -

                                      - 几秒前 -
                                      -
                                      -
                                      -
                                      -
                                      -

                                      简 在 Pear - Admin 专区 进行了 提问 -

                                      - 2天前 -
                                      -
                                      -
                                      -
                                      -
                                      -

                                      恒宇少年 将 Pear Admin 更新至 - 2.3.0 - 版本

                                      - 7天前 -
                                      -
                                      -
                                      -
                                      -
                                      -

                                      如花 在 Pear Admin 社区 发布了 建议

                                      - 7天前 -
                                      -
                                      -
                                      -
                                      -
                                      -

                                      就眠仪式 在 Pear Admin 社区 发布了 建议

                                      - 8天前 -
                                      -
                                      -
                                      -
                                      -
                                      -

                                      贤心 在 Pear Admin 专区 进行了 提问 -

                                      - 8天前 -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      更 新
                                      -
                                      -
                                        -
                                      • 优化代码格式2021-09-06 - 11:28
                                      • -
                                      • 新增消息组件2021-09-06 - 11:28
                                      • -
                                      • 移动端兼容2021-09-06 - 11:28
                                      • -
                                      • 系统布局优化2021-09-06 - 11:28
                                      • -
                                      • 兼容多系统菜单模式2021-09-06 - 11:28
                                      • -
                                      • 兼容多标签页切换2021-09-06 - 11:28
                                      • -
                                      • 扩展下拉组件2021-09-06 - 11:28
                                      • -
                                      • 扩展卡片样式2021-09-06 - 11:28
                                      • -
                                      -
                                      -
                                      -
                                      -
                                      - 链接 -
                                      -
                                      - 官 - 网 -
                                      - 下 载 -
                                      - 后 端 -
                                      -
                                      -
                                      -
                                      - 寄语 -
                                      -
                                      - 原想将澎湃的爱平平稳稳放置你手心,奈何我徒有一股蛮劲,只顾向你跑去,一个不稳跌的满身脏兮兮。试图爬起的我, - 心想你会不会笑我 " 献爱献的这样笨拙, 怎么不知避开爱里的埋伏 " -
                                      -
                                      -
                                      -
                                      -
                                      - - - - \ No newline at end of file +
                                      \ No newline at end of file diff --git a/view/console/console2.html b/view/console/console2.html index c181f3d..281c686 100644 --- a/view/console/console2.html +++ b/view/console/console2.html @@ -1,454 +1 @@ - - - - - - 数据分析 - - - - - - - -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      - 快捷菜单 -
                                      -
                                      -
                                      -
                                      -
                                      - -
                                      - 主页 -
                                      -
                                      -
                                      - -
                                      - 弹层 -
                                      -
                                      -
                                      - -
                                      - 聊天 -
                                      -
                                      -
                                      - -
                                      - 相机 -
                                      -
                                      -
                                      - -
                                      - 表单 -
                                      -
                                      -
                                      - -
                                      - 安全 -
                                      -
                                      -
                                      - -
                                      - 公告 -
                                      -
                                      -
                                      - -
                                      - 更多 -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      - 代办任务 -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      待审评论
                                      -
                                      21
                                      -
                                      -
                                      -
                                      -
                                      -
                                      待审帖子
                                      -
                                      32
                                      -
                                      -
                                      -
                                      -
                                      -
                                      待审文章
                                      -
                                      14
                                      -
                                      -
                                      -
                                      -
                                      -
                                      待审用户
                                      -
                                      63
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      - 使用记录 -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      留言板
                                      -
                                      -
                                        -
                                      • -

                                        要不要作为我的家人,搬来我家。

                                        - 12月25日 19:92 -
                                      • -
                                      • -

                                        快乐的时候不敢尽兴,频繁警戒自己保持清醒。

                                        - 4月30日 22:43 -
                                      • -
                                      • -

                                        夏天真的来了,尽管它还有些犹豫。

                                        - 4月30日 22:43 -
                                      • -
                                      • -

                                        看似不可达到的高度,只要坚持不懈就可能到达。

                                        - 4月30日 22:43 -
                                      • -
                                      • -

                                        当浑浊变成了一种常态,那么清白就成了一种罪过。

                                        - 4月30日 22:43 -
                                      • -
                                      • -

                                        那是一种内在的东西,他们到达不了,也无法触及!

                                        - 5月12日 01:25 -
                                      • - -
                                      • -

                                        希望是一个好东西,也许是最好的,好东西是不会消亡的!

                                        - 6月11日 15:33 -
                                      • -
                                      • -

                                        一切都在不可避免的走向庸俗。

                                        - 2月09日 13:40 -
                                      • -
                                      • -

                                        路上没有灯火的时候,就点亮自己的头颅。

                                        - 3月11日 12:30 -
                                      • - -
                                      • -

                                        我们应该不虚度一生,应该能够说:"我已经做了我能做的事。"

                                        - 4月30日 22:43 -
                                      • - -
                                      • -

                                        接近,是我对一切的态度,是我对一切态度的距离

                                        - 6月11日 15:33 -
                                      • -
                                      • -

                                        没有锚的船当然也可以航行,只是紧张充满你的一生。

                                        - 2月09日 13:40 -
                                      • -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      - - - - \ No newline at end of file +
                                      \ No newline at end of file -- Gitee From 6bafc8128429a9cab333e1b9f6451d1c360aa05c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sat, 24 Jun 2023 01:34:55 +0800 Subject: [PATCH 06/67] update --- admin/css/admin.dark.css | 57 +- admin/css/login.css | 1 + admin/css/overwrite.css | 7 + admin/css/variables.css | 2 + admin/data/message.json | 90 - admin/data/table.json | 132 -- component/pear/css/module/button.css | 169 -- component/pear/css/module/fullscreen.css | 22 - component/pear/css/module/label.css | 0 component/pear/css/module/layer.css | 324 --- component/pear/css/module/layout.css | 70 +- component/pear/css/module/link.css | 20 - component/pear/css/module/loading.css | 987 --------- component/pear/css/module/message.css | 133 -- .../pear/css/module/{frame.css => page.css} | 0 .../pear/css/module/{tab.css => tabPage.css} | 4 +- component/pear/css/module/toast.css | 1929 ---------------- component/pear/css/module/topBar.css | 5 - component/pear/css/pear.css | 23 +- component/pear/module/common.js | 114 - component/pear/module/convert.js | 27 - component/pear/module/core/admin.js | 20 +- component/pear/module/core/messageCenter.js | 127 -- component/pear/module/core/tabPage.js | 144 +- component/pear/module/count.js | 37 - component/pear/module/{ => extends}/popup.js | 6 +- component/pear/module/extends/toast.js | 1225 ----------- component/pear/module/extends/yaml.js | 224 +- component/pear/module/loading.js | 1930 ----------------- component/pear/module/theme.js | 23 +- component/pear/pear.js | 20 +- index.html | 2 + login.html | 2 +- view/result/error.html | 4 +- view/result/success.html | 4 +- 35 files changed, 280 insertions(+), 7604 deletions(-) create mode 100644 admin/css/overwrite.css delete mode 100644 admin/data/message.json delete mode 100644 admin/data/table.json delete mode 100644 component/pear/css/module/button.css delete mode 100644 component/pear/css/module/fullscreen.css delete mode 100644 component/pear/css/module/label.css delete mode 100644 component/pear/css/module/layer.css delete mode 100644 component/pear/css/module/link.css delete mode 100644 component/pear/css/module/loading.css delete mode 100644 component/pear/css/module/message.css rename component/pear/css/module/{frame.css => page.css} (100%) rename component/pear/css/module/{tab.css => tabPage.css} (98%) delete mode 100644 component/pear/css/module/toast.css delete mode 100644 component/pear/css/module/topBar.css delete mode 100644 component/pear/module/common.js delete mode 100644 component/pear/module/convert.js delete mode 100644 component/pear/module/core/messageCenter.js delete mode 100644 component/pear/module/count.js rename component/pear/module/{ => extends}/popup.js (84%) delete mode 100644 component/pear/module/extends/toast.js delete mode 100644 component/pear/module/loading.js diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index 266bbdd..e38e629 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -20,7 +20,7 @@ /** side */ .pear-admin-dark .layui-side { - box-shadow: 0 3px 4px rgba(0, 0, 0, .6);; + box-shadow: 0 3px 4px rgba(0, 0, 0, .6) !important; } .pear-admin-dark .layui-logo { @@ -33,6 +33,22 @@ 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 { background-color: #0a0a0a !important; @@ -50,11 +66,32 @@ 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; +} + /** 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: white; @@ -74,10 +111,28 @@ .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); +} + +/** 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: white; + background-color: #1d1e1f !important; } \ No newline at end of file diff --git a/admin/css/login.css b/admin/css/login.css index b461dee..fcabedd 100644 --- a/admin/css/login.css +++ b/admin/css/login.css @@ -10,6 +10,7 @@ height: 40px; line-height: 40px; font-size: 14px; + border-radius: 4px; } .layui-form-checked[lay-skin=primary] i { diff --git a/admin/css/overwrite.css b/admin/css/overwrite.css new file mode 100644 index 0000000..3d70461 --- /dev/null +++ b/admin/css/overwrite.css @@ -0,0 +1,7 @@ +.layui-dropdown { + border-radius: 4px; +} + +.layui-input { + border-radius: 4px; +} \ No newline at end of file diff --git a/admin/css/variables.css b/admin/css/variables.css index 0e6db41..97fd5cb 100644 --- a/admin/css/variables.css +++ b/admin/css/variables.css @@ -1,5 +1,7 @@ :root { --global-primary-color: #16baaa; + + --global-border-radius: 4px; } \ No newline at end of file diff --git a/admin/data/message.json b/admin/data/message.json deleted file mode 100644 index 7cf9263..0000000 --- a/admin/data/message.json +++ /dev/null @@ -1,90 +0,0 @@ -[{ - "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": [] - } -] diff --git a/admin/data/table.json b/admin/data/table.json deleted file mode 100644 index 8f14886..0000000 --- a/admin/data/table.json +++ /dev/null @@ -1,132 +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": "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 - }] -} diff --git a/component/pear/css/module/button.css b/component/pear/css/module/button.css deleted file mode 100644 index fcc6ba3..0000000 --- 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/fullscreen.css b/component/pear/css/module/fullscreen.css deleted file mode 100644 index 63f7775..0000000 --- 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/label.css b/component/pear/css/module/label.css deleted file mode 100644 index e69de29..0000000 diff --git a/component/pear/css/module/layer.css b/component/pear/css/module/layer.css deleted file mode 100644 index 0ca669f..0000000 --- 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/layout.css b/component/pear/css/module/layout.css index 6286b10..57914ce 100644 --- a/component/pear/css/module/layout.css +++ b/component/pear/css/module/layout.css @@ -1,9 +1,9 @@ .pear-container { padding: 10px; - margin: 0px; + margin: 0px; box-sizing: border-box; - background-color: transparent; - width: 100%; + background-color: transparent; + width: 100%; } body::-webkit-scrollbar { @@ -34,68 +34,6 @@ body::-webkit-scrollbar-corner { background: #f6f6f6; } -.mainBox::-webkit-scrollbar { - width: 0px; - height: 0px; -} - -.mainBox::-webkit-scrollbar { - width: 6px; - height: 6px; -} - -.mainBox::-webkit-scrollbar-track { - background: white; - border-radius: 2px; -} - -.mainBox::-webkit-scrollbar-thumb { - background: #E6E6E6; - border-radius: 2px; -} - -.mainBox::-webkit-scrollbar-thumb:hover { - background: #E6E6E6; -} - -.mainBox::-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 { content: ""; @@ -1040,4 +978,4 @@ body::-webkit-scrollbar-corner { .pear-col-space30>* { padding: 15px -} +} \ 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 380351c..0000000 --- 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 4abb57d..0000000 --- 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/message.css b/component/pear/css/module/message.css deleted file mode 100644 index 0a61d09..0000000 --- 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/frame.css b/component/pear/css/module/page.css similarity index 100% rename from component/pear/css/module/frame.css rename to component/pear/css/module/page.css diff --git a/component/pear/css/module/tab.css b/component/pear/css/module/tabPage.css similarity index 98% rename from component/pear/css/module/tab.css rename to component/pear/css/module/tabPage.css index f8d3024..55feb01 100644 --- a/component/pear/css/module/tab.css +++ b/component/pear/css/module/tabPage.css @@ -14,9 +14,9 @@ } .pear-tab-menu{ - box-shadow: 0 2px 8px #f0f1f2!important; - border: 1px solid whitesmoke!important; + box-shadow: none; border-radius: 4px!important; + overflow: hidden; } .pear-tab-menu .item{ diff --git a/component/pear/css/module/toast.css b/component/pear/css/module/toast.css deleted file mode 100644 index 5472da5..0000000 --- a/component/pear/css/module/toast.css +++ /dev/null @@ -1,1929 +0,0 @@ -.iziToast-capsule { - font-size: 0; - height: 0; - width: 100%; - transform: translateZ(0); - backface-visibility: hidden; - transition: transform 0.5s cubic-bezier(0.25, 0.8, 0.25, 1), height 0.5s cubic-bezier(0.25, 0.8, 0.25, 1); -} - -.iziToast-capsule, .iziToast-capsule * { - box-sizing: border-box; -} - -.iziToast-overlay { - display: block; - position: fixed; - top: -100px; - left: 0; - right: 0; - bottom: -100px; - z-index: 19891100; -} - -.iziToast { - display: inline-block; - clear: both; - position: relative; - font-family: 'Lato', Tahoma, Arial; - font-size: 14px; - padding: 8px 45px 9px 0; - background: #fff; - border-color: #fff; - width: 100%; - pointer-events: all; - cursor: default; - transform: translateX(0); - -webkit-touch-callout: none /* iOS Safari */; - -webkit-user-select: none /* Chrome/Safari/Opera */; - -khtml-user-select: none /* Konqueror */; - -moz-user-select: none /* Firefox */; - -ms-user-select: none /* Internet Explorer/Edge */; - user-select: none; - min-height: 45px; - box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1); - max-width: 90%; - margin: 5px 0; - border-radius: 4px; -} - -.iziToast > .iziToast-progressbar { - position: absolute; - left: 0; - bottom: 0; - width: 100%; - z-index: 1; - background: rgba(255, 255, 255, 0.5); -} - -.iziToast > .iziToast-progressbar > div { - height: 2px; - width: 100%; - background: #dddddd; - border-radius: 0 0 3px 3px; -} - -.iziToast.iziToast-theme-dark > .iziToast-progressbar > div { - background: #fff; -} - -.iziToast.iziToast-balloon:before { - content: ''; - position: absolute; - right: 8px; - left: auto; - width: 0px; - height: 0px; - top: 100%; - border-right: 0px solid transparent; - border-left: 15px solid transparent; - border-top: 10px solid #000; - border-top-color: inherit; - border-radius: 0; -} - -.iziToast.iziToast-balloon .iziToast-progressbar { - top: 0; - bottom: auto; -} - -.iziToast.iziToast-balloon > div { - border-radius: 0 0 0 3px; -} - -.iziToast > .iziToast-cover { - position: absolute; - left: 0; - top: 0; - bottom: 0; - height: 100%; - margin: 0; - background-size: 100%; - background-position: 50% 50%; - background-repeat: no-repeat; -} - -.iziToast > .iziToast-close { - position: absolute; - right: 0; - top: 0; - border: 0; - padding: 0; - opacity: 0.6; - width: 42px; - height: 100%; - background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAJPAAACTwBcGfW0QAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD3SURBVFiF1ZdtDoMgDEBfdi4PwAX8vLFn0qT7wxantojKupmQmCi8R4tSACpgjC2ICCUbEBa8ingjsU1AXRBeR8aLN64FiknswN8CYefBBDQ3whuFESy7WyQMeC0ipEI0A+0FeBvHUFN8xPaUhAH/iKoWsnXHGegy4J0yxialOfaHJAz4bhRzQzgDvdGnz4GbAonZbCQMuBm1K/kcFu8Mp1N2cFFpsxsMuJqqbIGExGl4loARajU1twskJLLhIsID7+tvUoDnIjTg5T9DPH9EBrz8rxjPzciAl9+O8SxI8CzJ8CxKFfh3ynK8Dyb8wNHM/XDqejx/AtNyPO87tNybAAAAAElFTkSuQmCC") no-repeat 50% 50%; - background-size: 8px; - cursor: pointer; - outline: none; -} - -.iziToast > .iziToast-close:hover { - opacity: 1; -} - -.iziToast > .iziToast-body { - position: relative; - padding: 0 0 0 10px; - height: auto; - min-height: 28px; - margin: 0 0 0 15px; - text-align: left; -} - -.iziToast > .iziToast-body:after { - content: ""; - display: table; - clear: both; -} - -.iziToast > .iziToast-body .iziToast-texts { - margin: 6px 0; - padding-right: 2px; - display: inline-block; - float: left; -} - -.iziToast > .iziToast-body .iziToast-inputs { - min-height: 19px; - float: left; - margin: 3px -2px; -} - -.iziToast > .iziToast-body .iziToast-inputs > input:not([type=checkbox]):not([type=radio]), -.iziToast > .iziToast-body .iziToast-inputs > select { - position: relative; - display: inline-block; - margin: 2px; - border-radius: 2px; - border: 0; - padding: 4px 7px; - font-size: 13px; - letter-spacing: 0.02em; - background: rgba(0, 0, 0, 0.1); - color: #000; - box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2); - min-height: 26px; -} - -.iziToast > .iziToast-body .iziToast-inputs > input:not([type=checkbox]):not([type=radio]):focus, -.iziToast > .iziToast-body .iziToast-inputs > select:focus { - box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.6); -} - -.iziToast > .iziToast-body .iziToast-buttons { - min-height: 17px; - float: left; - margin: 4px 0 0 0; -} - -.iziToast > .iziToast-body .iziToast-buttons > a, -.iziToast > .iziToast-body .iziToast-buttons > button, -.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]) { - position: relative; - display: inline-block; - margin: 2px; - border-radius: 2px; - border: 0; - padding: 5px 10px; - font-size: 12px; - letter-spacing: 0.02em; - cursor: pointer; - background: rgba(0, 0, 0, 0.1); - color: #555; -} - -.iziToast > .iziToast-body .iziToast-buttons > a:hover, -.iziToast > .iziToast-body .iziToast-buttons > button:hover, -.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]):hover { - background: rgba(0, 0, 0, 0.15); -} - -.iziToast > .iziToast-body .iziToast-buttons > a:focus, -.iziToast > .iziToast-body .iziToast-buttons > button:focus, -.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]):focus { - box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.6); -} - -.iziToast > .iziToast-body .iziToast-buttons > a:active, -.iziToast > .iziToast-body .iziToast-buttons > button:active, -.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]):active { - top: 1px; -} - -.iziToast > .iziToast-body .iziToast-icon { - height: 100%; - position: absolute; - left: 0; - top: 50%; - display: table; - font-size: 23px; - line-height: 24px; - margin-top: -11px; - color: #000; - width: 24px; - height: 24px; -} - -.iziToast > .iziToast-body .iziToast-icon.ico-info { - background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTU1NzcxMTk5MzYwIiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEwODAzIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTUxMiAyOC40MTZjLTI2Ny40Njg4IDAtNDg0LjI0OTYgMjE2LjgzMi00ODQuMjQ5NiA0ODQuMjQ5NiAwIDI2Ny40MTc2IDIxNi44MzIgNDg0LjI0OTYgNDg0LjI0OTYgNDg0LjI0OTYgMjY3LjQxNzYgMCA0ODQuMzAwOC0yMTYuODMyIDQ4NC4zMDA4LTQ4NC4yNDk2Qzk5Ni4zMDA4IDI0NS4yNDggNzc5LjQxNzYgMjguNDE2IDUxMiAyOC40MTZ6TTQ1NS41MjY0IDI0NS4wOTQ0QzQ3MC4zMjMyIDIyOS44ODggNDkwLjcwMDggMjIxLjMzNzYgNTExLjc5NTIgMjIxLjY0NDhjMjEuMTk2OC0wLjIwNDggNDEuNzc5MiA4LjI0MzIgNTYuNTI0OCAyMy40NDk2IDE1LjAwMTYgMTQuNzk2OCAyMy4yOTYgMzUuMTIzMiAyMy4wOTEyIDU2LjExNTIgMC4yMDQ4IDIxLjE5NjgtOC4yOTQ0IDQxLjU3NDQtMjMuMzk4NCA1Ni4yMTc2LTE0LjY5NDQgMTQuNjk0NC0zNC43MTM2IDIzLjA0LTU1LjM5ODQgMjMuMDRMNTExLjc5NTIgMzgwLjQ2NzJjLTIwLjk5MiAwLjIwNDgtNDEuMzY5Ni04LjE0MDgtNTYuMDY0LTIzLjE0MjRDNDQwLjY3ODQgMzQyLjY4MTYgNDMyLjMzMjggMzIyLjMwNCA0MzIuNTM3NiAzMDEuMjA5NiA0MzIuMzMyOCAyODAuMjE3NiA0NDAuNjc4NCAyNTkuODkxMiA0NTUuNTI2NCAyNDUuMDk0NHpNNjI3LjYwOTYgNzY4LjE1MzZsMCAxMy40MTQ0IDAgMjIuMjIwOEwzOTYuMjg4IDgwMy43ODg4bDAtNTcuMTM5MiAyMS42MDY0LTAuNzY4YzEwLjI0LTAuNDYwOCAxNC41OTItMi43MTM2IDE2Ljk5ODQtNC43NjE2bDEuMjI4OC01LjQyNzJjMC45NzI4LTUuNTgwOCAxLjYzODQtMTQuNDM4NCAxLjU4NzItMjUuOTA3Mkw0MzcuNzA4OCA1MDcuOTA0YzAuMjU2LTE3Ljc2NjQtMi4zNTUyLTI5LjkwMDgtMy40ODE2LTMyLjU2MzJsMCAwTDQzMS42MTYgNDc0LjA2MDhDNDI4Ljg1MTIgNDczLjA4OCA0MjMuOTM2IDQ3Mi4wNjQgNDE3LjE3NzYgNDcxLjY1NDRMMzk2LjI4OCA0NzAuMzc0NCAzOTYuMjg4IDQxMy40OTEybDE4OS40OTEyIDAgMCAyOTYuMjk0NGMtMC4zMDcyIDE3LjcxNTIgMi40MDY0IDI5Ljc5ODQgMy40MzA0IDMyLjU2MzJsMC4wNTEyIDAgMi43MTM2IDEuMTc3NmMyLjgxNiAwLjk3MjggNy43ODI0IDEuOTk2OCAxNC42OTQ0IDIuMzU1MmwyMC44ODk2IDEuMjhMNjI3LjU1ODQgNzY4LjE1MzZ6IiBwLWlkPSIxMDgwNCIgZmlsbD0iIzQwOUVGRiI+PC9wYXRoPjwvc3ZnPg==") no-repeat 50% 50%; - background-size: 85%; -} - -.iziToast > .iziToast-body .iziToast-icon.ico-warning { - background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTU1NzcwODczNzUzIiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjUxMTgiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNTEyLjAyMzI3MyAxMDI0Qzc5NC43NjM2MzYgMTAyNCAxMDI0IDc5NC43ODY5MDkgMTAyNCA1MTEuOTc2NzI3IDEwMjQgMjI5LjIzNjM2NCA3OTQuNzg2OTA5LTAuMDIzMjczIDUxMi4wMjMyNzMtMC4wMjMyNzNTMCAyMjkuMjEzMDkxIDAgNTExLjk3NjcyN0MwIDc5NC43ODY5MDkgMjI5LjIzNjM2NCAxMDI0IDUxMi4wMjMyNzMgMTAyNE00NjkuMzQxMDkxIDc2OGMwLTIzLjU1MiAxOC45MjA3MjctNDIuNjU4OTA5IDQyLjcwNTQ1NS00Mi42NTg5MDkgMjMuNTUyIDAgNDIuNjU4OTA5IDE4LjkyMDcyNyA0Mi42NTg5MDkgNDIuNjU4OTA5IDAgMjMuNTc1MjczLTE4LjkyMDcyNyA0Mi43MDU0NTUtNDIuNjU4OTA5IDQyLjcwNTQ1NUM0ODguNDcxMjczIDgxMC43MDU0NTUgNDY5LjM0MTA5MSA3OTEuNzM4MTgyIDQ2OS4zNDEwOTEgNzY4TTQ2OS4zNDEwOTEgMjU1LjgxMzgxOGMwLTIzLjQ1ODkwOSAxOC45MjA3MjctNDIuNDcyNzI3IDQyLjcwNTQ1NS00Mi40NzI3MjcgMjMuNTUyIDAgNDIuNjU4OTA5IDE5LjQzMjcyNyA0Mi42NTg5MDkgNDIuNDcyNzI3bDAgMzQxLjczNjcyN2MwIDIzLjQ1ODkwOS0xOC45MjA3MjcgNDIuNDcyNzI3LTQyLjY1ODkwOSA0Mi40NzI3MjctMjMuNTc1MjczIDAtNDIuNzA1NDU1LTE5LjQzMjcyNy00Mi43MDU0NTUtNDIuNDcyNzI3TDQ2OS4zNDEwOTEgMjU1LjgxMzgxOHoiIHAtaWQ9IjUxMTkiIGZpbGw9IiNmZjk5MDAiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%; - background-size: 85%; -} - -.iziToast > .iziToast-body .iziToast-icon.ico-error { - background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTU1NzcwNDI1NDkwIiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEyNjUiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNTExLjk5NjQxOCAyMy41MjA2OTNjLTI2OS43NjcwNSAwLTQ4OC40NTQ3NDggMjE4LjY4ODcyMS00ODguNDU0NzQ4IDQ4OC40NTQ3NDggMCAyNjkuNzY4MDczIDIxOC42ODg3MjEgNDg4LjQ1MzcyNCA0ODguNDU0NzQ4IDQ4OC40NTM3MjQgMjY5Ljc2NjAyNyAwIDQ4OC40NTQ3NDgtMjE4LjY4NTY1MSA0ODguNDU0NzQ4LTQ4OC40NTM3MjRDMTAwMC40NTExNjYgMjQyLjIwOTQxNCA3ODEuNzYyNDQ1IDIzLjUyMDY5MyA1MTEuOTk2NDE4IDIzLjUyMDY5M3pNNzY5LjMzNDM5MSA3MTUuMTU1OTU2bC01NC4xNTY0MzQgNTQuMTU2NDM0TDUxMS45OTY0MTggNTY2LjEyOTgyOCAzMDguODEzODU2IDc2OS4zMTIzOWwtNTQuMTU1NDExLTU0LjE1NjQzNEw0NTcuODQxMDA4IDUxMS45NzU0NDEgMjU0LjY1ODQ0NiAzMDguNzkyODc4bDU0LjE1NTQxMS01NC4xNTU0MTFMNTExLjk5NjQxOCA0NTcuODIwMDNsMjAzLjE4MjU2Mi0yMDMuMTgyNTYyIDU0LjE1NjQzNCA1NC4xNTU0MTFMNTY2LjE1MTgyOSA1MTEuOTc1NDQxIDc2OS4zMzQzOTEgNzE1LjE1NTk1NnoiIHAtaWQ9IjEyNjYiIGZpbGw9IiNGNTZDNkMiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%; - background-size: 80%; -} - -.iziToast > .iziToast-body .iziToast-icon.ico-success { - background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTU1NzcwNTI2MjA3IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQ5NjUiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNMTAyNCA1MTEuOTk5NTAyYzAgMjgyLjc3MDU1Ny0yMjkuMjI5OTQxIDUxMi4wMDA0OTgtNTExLjk5OTUwMiA1MTIuMDAwNDk4LTI4Mi43Njk1NjEgMC01MTIuMDAwNDk4LTIyOS4yMjk5NDEtNTEyLjAwMDQ5OC01MTIuMDAwNDk4IDAtMjgyLjc2ODU2NiAyMjkuMjMwOTM2LTUxMS45OTk1MDIgNTEyLjAwMDQ5OC01MTEuOTk5NTAyQzc5NC43NjkwNjQgMCAxMDI0IDIyOS4yMzA5MzYgMTAyNCA1MTEuOTk5NTAyek03OTYuNTc3MDgxIDM3OC4zMTc3MTNsLTQ4LjQ1OTA1MS00OC40NTkwNTEtMjk3LjA3ODM4NyAyOTcuMDc3MzkyTDI3Ny4yNjc4NTIgNDUzLjE2NTI1OGwtNDguNDU4MDU2IDQ4LjQ1ODA1NiAyMjIuMjI4ODUxIDIyMi4yMzA4NDJMNzk2LjU3NzA4MSAzNzguMzE3NzEzeiIgcC1pZD0iNDk2NiIgZmlsbD0iIzY3YzIzYSI+PC9wYXRoPjwvc3ZnPg==") no-repeat 50% 50%; - background-size: 85%; -} - -.iziToast > .iziToast-body .iziToast-icon.ico-question { - background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfhCQkUEhFovxTxAAAEDklEQVRo3s2ZTWgTQRTHf03ipTRUqghNSgsRjHgQrFUQC6JgD1Kak3gQUUoPqRdBglf1oBehBws9Cn4cGk+1SOmh2upBxAYVoeJHrR9tgq0i1Cq0lqYeks7MbpPdmU00/c8hm9n33v/t7Nt5M2+qMEWQI0QIibZKRrQpHvLL2KI2wnQzzBKrDm2RIeKEy01dTYKUI7G1ZRknQXV5yP10kTYgly1NF/5S6duZ8ES+1iZodyaocrjXxE0OFeifYYgp0mRIkwFChAkRJsIxGgrIP+I0n82fvZW5dc/zkss0O2o1c5mX6/TmaDWl77RFe5YkUW3tKEmyFv0lOvXJ/fTYnmCEFuMRbGHEZqVHLyT9DFjUJmkzJl9DG5MWWwM6Llif/gF1nukB6nhgGwUXdFrE+wiURA8QoM9i0zEWWpXQW+ZsyeRrOMuyEo5Fv4gmy4dXPvqcC+pH2VRYaMwy+OWG+iLGCgm0W0Kv9HdvR8ASjmKCXpuK/bxiV/76A/v5UdDIZuKcJGjrnec5KZ7wwsWFOp6xPX/9mt2sqDe7FO+Kf/fXHBPPDWpdXGhTpLvUG9VKwh1xMDDjkvu+cNDFBTk7ptX1QkKZ850m3duu6fcrWxwdaFFyREJ2j4vOpKP6Du6z4uJCv8sYJIVkCnJBGGZaBONO3roY2EqNrSfIPi7SKP4fdXyNUd6I6wbSAHEl33tFLe+FlSsusnK90A0+oEPcuufZgXnOi+u9LrKSJQZQw6LwqBnv2CKsfHORbFbyQhA6xN/pEuihSdj56Co7LWRjPiKie6gkB2LiKuUqK5kiPkLiz1QJ9K1cNXBAMoUCigNpQ9IqDtMI1HKA4/jyvUsaoSyZLA5kjOjDPFZen8Ql5TsvBskUgjciIPSX3QAXC86DT7VWvlEh/xZ+ij9BDVWJ0QL0SbZq6QaFxoLPcXPmBLveLCc4wXdDK6s+6/vwhCSniFLPXW0NJe5UB8zKCsviqpc7vGPVQFcyZbyPwGD+d5ZnxmNWlhG4xSBZZjivjIWHEQgoDkSMjMwTo54569JSE5IpA7EyJSMTyGTUAUFlO1ZKOtaHTMeL1PhYYFTcihmY2cQ5+ullj7EDkiVfVez2sCTz8yiv84djhg7IJVk81xFWJlPdfHBG0flkRC/zQFZ+DSllNtfDdUsOMCliyGX5uOzU3ZhIXFDof4m1gDuKbEx0t2YS25gVGpcMnr/I1kx3c6piB8P8ZoqEwfMX3ZyCXynJTmq/U7NUXqfUzCbWL1wqVKBQUeESzQYoUlW8TAcVL1RCxUu1G6BYXfFyfQ4VPbDI4T8d2WzgQ6sc/vmxnTsqfHCZQzUJxm1h5dxS5Tu6lQgTZ0ipqRVqSwzTbbLHMt+c19iO76tsx/cLZub+Ali+tYC93olEAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTA5LTA5VDIwOjE4OjE3KzAyOjAwjKtfjgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0wOS0wOVQyMDoxODoxNyswMjowMP325zIAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC") no-repeat 50% 50%; - background-size: 85%; -} - -.iziToast > .iziToast-body .iziToast-icon.ico-load { - background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQ1NTUyMzAyOTE3IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQyNDAiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNTEyIDY0YzI0Ny4yIDAgNDQ4IDIwMC44IDQ0OCA0NDhoLTY0YzAtMjEyLTE3Mi0zODQtMzg0LTM4NFY2NHogbTAgODMyYy0yMTIgMC0zODQtMTcyLTM4NC0zODRINjRjMCAyNDcuMiAyMDAuOCA0NDggNDQ4IDQ0OHYtNjR6IiBwLWlkPSI0MjQxIiBmaWxsPSIjMUU5RkZGIj48L3BhdGg+PC9zdmc+') no-repeat 50% 50%; - background-size: 85%; - animation: rotating 1.2s linear infinite -} - -@keyframes rotating { - from { - transform: rotate(0) - } - to { - transform: rotate(360deg) - } -} - -.iziToast > .iziToast-body .iziToast-title { - padding: 0; - margin: 0 0 10px 0; - line-height: 16px; - font-size: 14px; - text-align: left; - float: left; - color: #303133; - white-space: normal; -} - -.iziToast > .iziToast-body .iziToast-message { - padding: 0; - margin: 0; - font-size: 14px; - line-height: 16px; - text-align: left; - float: left; - color: #606266; - white-space: normal; -} - -.iziToast.iziToast-animateInside .iziToast-title, -.iziToast.iziToast-animateInside .iziToast-message, -.iziToast.iziToast-animateInside .iziToast-icon, -.iziToast.iziToast-animateInside .iziToast-buttons-child, -.iziToast.iziToast-animateInside .iziToast-inputs-child { - opacity: 0; -} - -.iziToast-target { - position: relative; - width: 100%; - margin: 0 auto; -} - -.iziToast-target .iziToast-capsule { - overflow: hidden; -} - -.iziToast-target .iziToast-capsule:after { - visibility: hidden; - display: block; - font-size: 0; - content: " "; - clear: both; - height: 0; -} - -.iziToast-target .iziToast-capsule .iziToast { - width: 100%; - float: left; -} - -.iziToast-wrapper { - z-index: 19891101; - position: fixed; - width: 100%; - pointer-events: none; - display: flex; - flex-direction: column; -} - -.iziToast-wrapper .iziToast.iziToast-balloon:before { - border-right: 0 solid transparent; - border-left: 15px solid transparent; - border-top: 10px solid #000; - border-top-color: inherit; - right: 8px; - left: auto; -} - -.iziToast-wrapper-bottomLeft { - left: 0; - bottom: 0; - text-align: left; -} - -.iziToast-wrapper-bottomLeft .iziToast.iziToast-balloon:before { - border-right: 15px solid transparent; - border-left: 0 solid transparent; - right: auto; - left: 8px; -} - -.iziToast-wrapper-bottomRight { - right: 0; - bottom: 0; - text-align: right; -} - -.iziToast-wrapper-topLeft { - left: 0; - top: 0; - text-align: left; -} - -.iziToast-wrapper-topLeft .iziToast.iziToast-balloon:before { - border-right: 15px solid transparent; - border-left: 0 solid transparent; - right: auto; - left: 8px; -} - -.iziToast-wrapper-topRight { - top: 0; - right: 0; - text-align: right; -} - -.iziToast-wrapper-topCenter { - top: 0; - left: 0; - right: 0; - text-align: center; -} - -.iziToast-wrapper-bottomCenter { - bottom: 0; - left: 0; - right: 0; - text-align: center; -} - -.iziToast-wrapper-center { - top: 0; - bottom: 0; - left: 0; - right: 0; - text-align: center; - justify-content: center; - flex-flow: column; - align-items: center; -} - -.iziToast-rtl { - direction: rtl; - padding: 8px 0 9px 45px; - font-family: Tahoma, 'Lato', Arial; -} - -.iziToast-rtl .iziToast-cover { - left: auto; - right: 0; -} - -.iziToast-rtl .iziToast-close { - right: auto; - left: 0; -} - -.iziToast-rtl .iziToast-body { - padding: 0 10px 0 0; - margin: 0 16px 0 0; - text-align: right; -} - -.iziToast-rtl .iziToast-body .iziToast-buttons, -.iziToast-rtl .iziToast-body .iziToast-inputs, -.iziToast-rtl .iziToast-body .iziToast-texts, -.iziToast-rtl .iziToast-body .iziToast-title, -.iziToast-rtl .iziToast-body .iziToast-message { - float: right; - text-align: right; -} - -.iziToast-rtl .iziToast-body .iziToast-icon { - left: auto; - right: 0; -} - -@media only screen and (min-width: 568px) { - .iziToast-wrapper { - padding: 10px 15px; - } - - .iziToast { - width: auto; - } - - .iziToast:not(.iziToast-rtl) .iziToast-cover { - border-radius: 3px 0 0 3px; - } - - .iziToast.iziToast-rtl .iziToast-cover { - border-radius: 0 3px 3px 0; - } - - .iziToast.iziToast-color-dark:after { - box-shadow: inset 0 -10px 20px -10px rgba(255, 255, 255, 0.3), 0 10px 10px -5px rgba(0, 0, 0, 0.25); - } - - .iziToast.iziToast-balloon .iziToast-progressbar { - background: transparent; - } - - .iziToast.iziToast-balloon:after { - box-shadow: 0 10px 10px -5px rgba(0, 0, 0, 0.25), inset 0 10px 20px -5px rgba(0, 0, 0, 0.25); - } - - .iziToast-target .iziToast:after { - box-shadow: inset 0 -10px 20px -10px rgba(0, 0, 0, 0.2), inset 0 0 5px rgba(0, 0, 0, 0.1); - } -} - -.iziToast.iziToast-theme-dark { - background: #565c70; - border-color: #565c70; -} - -.iziToast.iziToast-theme-dark .iziToast-title { - color: #fff; -} - -.iziToast.iziToast-theme-dark .iziToast-message { - color: rgba(255, 255, 255, 0.9); - font-weight: 300; -} - -.iziToast.iziToast-theme-dark .iziToast-close { - background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfgCR4OIQIPSao6AAAAwElEQVRIx72VUQ6EIAwFmz2XB+AConhjzqTJ7JeGKhLYlyx/BGdoBVpjIpMJNjgIZDKTkQHYmYfwmR2AfAqGFBcO2QjXZCd24bEggvd1KBx+xlwoDpYmvnBUUy68DYXD77ESr8WDtYqvxRex7a8oHP4Wo1Mkt5I68Mc+qYqv1h5OsZmZsQ3gj/02h6cO/KEYx29hu3R+VTTwz6D3TymIP1E8RvEiiVdZfEzicxYLiljSxKIqlnW5seitTW6uYnv/Aqh4whX3mEUrAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA5LTMwVDE0OjMzOjAyKzAyOjAwl6RMVgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wOS0zMFQxNDozMzowMiswMjowMOb59OoAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC") no-repeat 50% 50%; - background-size: 8px; -} - -.iziToast.iziToast-theme-dark .iziToast-icon { - color: #fff; -} - -.iziToast.iziToast-theme-dark .iziToast-icon.ico-info { - background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQxNjQ5NjA1MTc2IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjM1MzIiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNODUxLjE3MTU1NiA3MTcuOTM3Nzc4YzMuMjQyNjY3IDExLjk0NjY2NyAyLjg0NDQ0NCAyNC40NjIyMjItMS40MjIyMjMgMzYuNDA4ODg5YTYyLjkxOTExMSA2Mi45MTkxMTEgMCAwIDEtMjEuOTU5MTExIDI5LjUyNTMzMyA2NS4yNTE1NTYgNjUuMjUxNTU2IDAgMCAxLTM4LjkxMiAxMi41MTU1NTZIMTc4LjExOTExMWE2NC44NTMzMzMgNjQuODUzMzMzIDAgMCAxLTM4Ljc5ODIyMi0xMi41NzI0NDUgNjIuMjM2NDQ0IDYyLjIzNjQ0NCAwIDAgMS0yMi4wMTYtMjkuNTI1MzMzIDYwLjY0MzU1NiA2MC42NDM1NTYgMCAwIDEtMS4zNjUzMzMtMzYuNDA4ODg5YzMuNTg0LTEzLjE0MTMzMyAxMS40MzQ2NjctMjQuNTc2IDIyLjY5ODY2Ni0zMy4xMDkzMzNsNTguNDgxNzc4LTQ0LjAzMmE0MC43MzI0NDQgNDAuNzMyNDQ0IDAgMCAwIDE2LjQ5Nzc3OC0zMi43MTExMTJ2LTIwMy4wOTMzMzNjMC0zNS4yMTQyMjIgNy4xNjgtNjkuNTE4MjIyIDIxLjIxOTU1NS0xMDEuNzE3MzMzIDEzLjY1MzMzMy0zMS4xNzUxMTEgMzMuMTA5MzMzLTU5LjE2NDQ0NCA1Ny44NTYtODMuMTE0NjY3QTI2OC44NTY4ODkgMjY4Ljg1Njg4OSAwIDAgMSA0MTQuNzIgMTUyLjA2NHYtMjguNTAxMzMzQzQxNC43MiA4Ni44MTI0NDQgNDQ1LjYxMDY2NyA1Ni44ODg4ODkgNDgzLjU1NTU1NiA1Ni44ODg4ODljMzcuOTQ0ODg5IDAgNjguODM1NTU2IDI5LjkyMzU1NiA2OC44MzU1NTUgNjYuNjczNzc4djI4LjUwMTMzM2MxMi4zNDQ4ODkgMy4xODU3NzggMjQuNDYyMjIyIDcuMTY4IDM2LjIzODIyMiAxMi4wMDM1NTZhMjY4LjY4NjIyMiAyNjguNjg2MjIyIDAgMCAxIDg1Ljc4ODQ0NSA1Ni4wMzU1NTVjMjQuNzQ2NjY3IDI0LjAwNzExMSA0NC4yMDI2NjcgNTEuOTM5NTU2IDU3Ljc5OTExMSA4My4wNTc3NzggMTQuMTA4NDQ0IDMyLjMxMjg4OSAyMS4yMTk1NTYgNjYuNTYgMjEuMjE5NTU1IDEwMS44MzExMTF2MjAzLjA5MzMzM2MwIDEyLjg1Njg4OSA2LjAzMDIyMiAyNC44NjA0NDQgMTYuNTU0NjY3IDMyLjcxMTExMWw1OC40ODE3NzggNDQuMDMyYzExLjIwNzExMSA4LjUzMzMzMyAxOS4wNTc3NzggMTkuOTExMTExIDIyLjc1NTU1NSAzMy4wNTI0NDV6TTM5OC4yMjIyMjIgODU2LjE3Nzc3OFY4NTMuMzMzMzMzaDE3MC42NjY2Njd2Mi44NDQ0NDVDNTY4Ljg4ODg4OSA5MzUuOTM2IDUzMC42MDI2NjcgOTY3LjExMTExMSA0ODMuNTU1NTU2IDk2Ny4xMTExMTFTMzk4LjIyMjIyMiA5MzUuOTM2IDM5OC4yMjIyMjIgODU2LjE3Nzc3OHoiIHAtaWQ9IjM1MzMiIGZpbGw9IiNmZmZmZmYiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%; - background-size: 85%; -} - -.iziToast.iziToast-theme-dark .iziToast-icon.ico-warning { - background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQxNjUxMTE1OTQ4IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjUgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjUwOTYiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4LjEyNSIgaGVpZ2h0PSIxMjgiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTk4NC4wMjI5NTAwMiA3NDYuODc1NDk3NUw2NDEuOTY0NjA3NTIgMTMwLjM4MDY1Yy0zMC40OTE4NDI1LTU0Ljg2MTUwMjUtNzcuOTMxMzE1LTg2LjMzNTY3MjUtMTMwLjE0MzUxLTg2LjMzNTY3MjUtNTIuMjkxNTc1IDAtOTkuNzQwOTcgMzEuNTEzODYtMTMwLjE0MzUxIDg2LjQzNDg5NzVMMzkuOTc2NDU1MDIgNzQ2LjgyNTg4NUM5Ljk2MDg5MjUyIDgwMC45NjMwNDUgNy45MTY4NTc1MiA4NTguMDE3NDIgMzQuMzUwMzk3NTIgOTAzLjM1MzMyMjVjMjYuNTEyOTIgNDUuNDc0ODE3NSA3Ny4xOTcwNSA3MS41NjEwNyAxMzkuMDczNzYgNzEuNTYxMDdoNjc3LjIyMDU0NzVjNjEuOTA2NDc3NSAwIDExMi41OTA2MDc1LTI2LjA4NjI1MjUgMTM5LjAxNDIyNS03MS40OTE2MTI1IDI2LjQ4MzE1MjUtNDUuMjc2MzY3NSAyNC40MjkxOTUtMTAyLjM0MDY2NS01LjYzNTk4LTE1Ni41NDcyODI1ek05MTEuNzU3MzgyNTIgODU3Ljk5NzU3NWMtOS44OTI3MzI1IDE2Ljk4NzMyLTMyLjE1ODgyMjUgMjYuNzMxMjE1LTYxLjExMjY3NzUgMjYuNzMxMjE1SDE3My40MjQxNTc1MmMtMjguOTQzOTMyNSAwLTUxLjIyOTg2NzUtOS43NjM3NC02MS4xNjIyOS0yNi43OTA3NS0xMC4wMjE3MjUtMTcuMTg1NzctNy42MTA1NTc1LTQxLjc0Mzk1NzUgNi41ODg1NC02Ny4zNzM3NzVsMzQxLjcxMTA1NS02MTYuMzY1ODU1YzE0LjA2MDE4MjUtMjUuMzkxNjc3NSAzMi43NTQxNzI1LTM5Ljk1NzkwNzUgNTEuMjU5NjM1LTM5Ljk1NzkwNzUgMTguNDk1NTQgMCAzNy4xOTk0NTI1IDE0LjU2NjIzIDUxLjMwOTI0NzUgMzkuOTM4MDYyNWwzNDIuMDI4NTc1IDYxNi40NDUyMzVjMTQuMjI4ODY1IDI1LjY0OTY2MjUgMTYuNjQwMDMyNSA1MC4xODgwMDUgNi41OTg0NjI1IDY3LjM3Mzc3NXoiIGZpbGw9IiNmZmZmZmYiIHAtaWQ9IjUwOTciPjwvcGF0aD48cGF0aCBkPSJNNTEyLjAxOTU0NzUyIDYzMC4yODYxMjI1YTQ1LjA4Nzg0IDQ1LjA4Nzg0IDAgMCAwIDQ1LjA5Nzc2MjUtNDUuMDA4NDZWMzc0LjY1Mjc1NWE0NS4wNzc5MTc1IDQ1LjA3NzkxNzUgMCAwIDAtNDUuMDk3NzYyNS00NS4wMDg0NiA0NS4wODc4NCA0NS4wODc4NCAwIDAgMC00NS4wOTc3NjI1IDQ1LjAwODQ2djIxMC42MTQ5ODVhNDUuMDg3ODQgNDUuMDg3ODQgMCAwIDAgNDUuMDk3NzYyNSA0NS4wMTgzODI1ek01MTIuMDE5NTQ3NTIgNjc1LjM3Mzk2MjVhNjAuMTcwMDQgNjAuMTcwMDQgMCAwIDAtNjAuMTMwMzUgNjAuMTMwMzVjMCAzMy4xNDExNSAyNi45MTk3NDI1IDYwLjEzMDM1IDYwLjEzMDM1IDYwLjEzMDM1IDMzLjE0MTE1IDAgNjAuMTMwMzUtMjYuOTE5NzQyNSA2MC4xMzAzNS02MC4xMzAzNSAwLTMzLjE0MTE1LTI2LjkxOTc0MjUtNjAuMTMwMzUtNjAuMTMwMzUtNjAuMTMwMzV6IiBmaWxsPSIjZmZmZmZmIiBwLWlkPSI1MDk4Ij48L3BhdGg+PC9zdmc+") no-repeat 50% 50%; - background-size: 85%; -} - -.iziToast.iziToast-theme-dark .iziToast-icon.ico-error { - background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQxNjUxMzE1NTQ3IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjY4MDYiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNzcyLjI2NjY2NyA4ODMuMmMyNS42IDI1LjYgNjQgMjUuNiA4OS42IDAgMjUuNi0yNS42IDI1LjYtNjQgMC04OS42TDIzMC40IDE2Mi4xMzMzMzNjLTI1LjYtMjUuNi02NC0yNS42LTg5LjYgMC0yNS42IDI1LjYtMjUuNiA2NCAwIDg5LjZsNjMxLjQ2NjY2NyA2MzEuNDY2NjY3eiIgcC1pZD0iNjgwNyIgZmlsbD0iI2ZmZmZmZiI+PC9wYXRoPjxwYXRoIGQ9Ik04NjEuODY2NjY3IDI1MS43MzMzMzNjMjUuNi0yNS42IDI1LjYtNjQgMC04OS42LTI1LjYtMjUuNi02NC0yNS42LTg5LjYgMEwxNDAuOCA3OTMuNmMtMjUuNiAyNS42LTI1LjYgNjQgMCA4OS42czY0IDI1LjYgODkuNiAwbDYzMS40NjY2NjctNjMxLjQ2NjY2N3oiIHAtaWQ9IjY4MDgiIGZpbGw9IiNmZmZmZmYiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%; - background-size: 80%; -} - -.iziToast.iziToast-theme-dark .iziToast-icon.ico-success { - background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQxNjUxMjQyNTMxIiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjYwMjMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNDA0LjI1MTQyOCA4MDkuNjEwN2MtMTEuNjY0MTAyIDAtMjMuMzI3MTc5LTQuNDQ4NzgyLTMyLjIyNTc2Ny0xMy4zNDczNjlMODMuOTgwMDk4IDUwOC4yMTk4MTVjLTE3Ljc5ODE5OS0xNy43OTcxNzUtMTcuNzk4MTk5LTQ2LjY1MzMzNSAwLTY0LjQ1MTUzM3M0Ni42NTMzMzUtMTcuNzk4MTk5IDY0LjQ1MTUzNCAwbDI4OC4wNDQ1MzkgMjg4LjA0MjQ5MWMxNy43OTgxOTkgMTcuNzk4MTk5IDE3Ljc5ODE5OSA0Ni42NTQzNTkgMCA2NC40NTI1NTgtOC44OTc1NjMgOC44OTg1ODctMjAuNTYxNjY1IDEzLjM0NzM2OS0zMi4yMjQ3NDMgMTMuMzQ3MzY5eiIgcC1pZD0iNjAyNCIgZmlsbD0iI2ZmZmZmZiI+PC9wYXRoPjxwYXRoIGQ9Ik00MDQuMjczOTUzIDgwOS42MTE3MjNjLTExLjY2NDEwMiAwLTIzLjMyNjE1NS00LjQ0OTgwNi0zMi4yMjU3NjYtMTMuMzQ4MzkyLTE3Ljc5ODE5OS0xNy43OTcxNzUtMTcuNzk5MjIyLTQ2LjY1MzMzNS0wLjAwMTAyNC02NC40NTE1MzRMODc2LjEwMTgxMyAyMjcuNzM1NjQ2YzE3Ljc5NjE1MS0xNy43OTgxOTkgNDYuNjUzMzM1LTE3Ljc5OTIyMiA2NC40NTE1MzMtMC4wMDEwMjQgMTcuNzk4MTk5IDE3Ljc5NzE3NSAxNy43OTkyMjIgNDYuNjUzMzM1IDAuMDAxMDI0IDY0LjQ1MTUzM0w0MzYuNTAwNzQ0IDc5Ni4yNjIzMDdjLTguODk4NTg3IDguODk4NTg3LTIwLjU2MjY4OSAxMy4zNDk0MTctMzIuMjI2NzkxIDEzLjM0OTQxNnoiIHAtaWQ9IjYwMjUiIGZpbGw9IiNmZmZmZmYiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%; - background-size: 85%; -} - -.iziToast.iziToast-theme-dark .iziToast-icon.ico-question { - background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfhCQkUEg18vki+AAAETUlEQVRo3s1ZTWhbRxD+VlIuxsLFCYVIIQYVopBDoK5bKDWUBupDMNbJ5FBKg/FBziUQdE9yaC+FHBrwsdCfQ9RTGoLxwWl+DqHEojUFFydxnB9bInZDqOsErBrr6yGvs/ueX97bldTKo4Pe7puZb3Z33s7srIIjMY1jyCEjP6ImvyX8pF64arSHznKC06wzijY5xSKz7YbuYokV2lODsyyxqz3gSY6z6gCuqcpxJluFH+Z8U+D/0jyHoxFUBHgfvsGHIS9WMIUlVFFDFTUAGWSRQRY5HMeBEP6b+Ew9dh/7INd2jGeO59kfKdXP85zbIbfGQVf4sYC3N1hm3lo6zzIbPvk6x+zBk7wQGMEMB5xncIAzAS0XrFySSV72iS1yyBVcdA1x0afrsoUJgdFfY2+z8ADAXl7zz0KcwJiPfZKpVuABgClO+nRG+QIHDdfb4qlWwUXvKW4Z7vi6L4J9vg+vbfCeCeZH2RfOdMOc/HbCA4BvIW6EMQz7XK/ltd+hP+VzR9mgva2YSfyGI17fA7ynnocqeQNFfIJ0oHsdv6CC2+rXGBN6cQdveY3fcVRtmy/HDete+93zy8jA8zV7YkwYMrjHzRddRsCdiVCwwmh6wg9iTNC7Y9XIF1iS7kbUpsvvGEdPuTfSgAEjRpR096x0liPFD/Eqt2NMuBQzB2XhrACAApjFsuQFh9XdGAX70B3oSuNdnMVBaX+sopYxjwVpHFBVACyKTXNoktjD+6Ll8xhenS9MAAkAI/Lux2YNUOs4I413Ypg1SgEAu7kpFvWjaeJe0fJHDGe/cNaZBkekudw8PMA+0fMwlndZeAsJ5KR/qhUDUJCnSiyvRsolkJHGUgvjH8QXDgZopEzKMKDqCKrwEQ4C6MH7GEXC665buLJG8hlQc4LP4paxfJrOqYVYYY2UARfEIazTbgDg2dB98GebzJd54b8L/iWNdLyooeR6CHyZ+6xk0yKxkYg6nEVSUG4VJ9QJ9cxRCxO+9WiOyvgUeexXP1hLGH5nGuBWVtiSp4vqe3VP0UFWI9Wan4Er3v8q7jjPWVtm4FtcQQMrOKO2nOQCM5AyDMi56FDrKHA/1nyppS1ppBpYaE8wciEjGI2AaeM41kI4doDX4XiT3Qm1gevyruCgZg9P8xIv8m1nCzTKq6oiJ9xTMiZ505P5m8cdZ0CnZMVXHVljM7WMBzxpyDxygtdxoCEFTaMIWbZU85UvBjgUMYy0fBaAF8V1Lj9qWQ1aMZ5f4k9r+AGMSkMP1vZoZih6k6sicc5h/OFHM9vDqU/VIU7zJZdYYsKGH4g4nAJMGiXZRds1pVMoZ69RM5vfkbh0qkBhsnS2RLMLilQdL9MBHS9UAh0v1e6CYnXHy/WeeCcvLDwl/9OVze69tPKM+M+v7eJN6OzFpWdEF0ucDbhVNFXadnVrmJFlkVNGTS2M6pzmhMvltfPhnN2B63sVuL7fcNP3D1TSk2ihosPrAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTA5LTA5VDIwOjE4OjEzKzAyOjAweOR7nQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0wOS0wOVQyMDoxODoxMyswMjowMAm5wyEAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC") no-repeat 50% 50%; - background-size: 85%; -} - -.iziToast.iziToast-theme-dark .iziToast-buttons > a, -.iziToast.iziToast-theme-dark .iziToast-buttons > button, -.iziToast.iziToast-theme-dark .iziToast-buttons > input { - color: #fff; - background: rgba(255, 255, 255, 0.1); -} - -.iziToast.iziToast-theme-dark .iziToast-buttons > a:hover, -.iziToast.iziToast-theme-dark .iziToast-buttons > button:hover, -.iziToast.iziToast-theme-dark .iziToast-buttons > input:hover { - background: rgba(255, 255, 255, 0.2); -} - -.iziToast.iziToast-theme-dark .iziToast-buttons > a:focus, -.iziToast.iziToast-theme-dark .iziToast-buttons > button:focus, -.iziToast.iziToast-theme-dark .iziToast-buttons > input:focus { - box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.6); -} - -.iziToast.iziToast-theme-dark.iziToast-color-red { - background: #F56C6C; - border-color: #F56C6C; -} - -.iziToast.iziToast-theme-dark.iziToast-color-orange { - background: #E6A23C; - border-color: #E6A23C; -} - -.iziToast.iziToast-theme-dark.iziToast-color-yellow { - background: rgba(255, 249, 178, 0.9); - border-color: rgba(255, 249, 178, 0.9); -} - -.iziToast.iziToast-theme-dark.iziToast-color-blue { - background: #409EFF; - border-color: #409EFF; -} - -.iziToast.iziToast-theme-dark.iziToast-color-green { - background: #67C23A; - border-color: #67C23A; -} - -.iziToast.iziToast-layout2 .iziToast-body .iziToast-texts, -.iziToast.iziToast-layout2 .iziToast-body .iziToast-message { - width: 100%; -} - -.iziToast.iziToast-layout3 { - border-radius: 2px; -} - -.iziToast.iziToast-layout3::after { - display: none; -} - -.iziToast.revealIn, -.iziToast .revealIn { - -webkit-animation: iziT-revealIn 1s cubic-bezier(0.25, 1.6, 0.25, 1) both; - -moz-animation: iziT-revealIn 1s cubic-bezier(0.25, 1.6, 0.25, 1) both; - animation: iziT-revealIn 1s cubic-bezier(0.25, 1.6, 0.25, 1) both; -} - -.iziToast.slideIn, -.iziToast .slideIn { - -webkit-animation: iziT-slideIn 1s cubic-bezier(0.16, 0.81, 0.32, 1) both; - -moz-animation: iziT-slideIn 1s cubic-bezier(0.16, 0.81, 0.32, 1) both; - animation: iziT-slideIn 1s cubic-bezier(0.16, 0.81, 0.32, 1) both; -} - -.iziToast.bounceInLeft { - -webkit-animation: iziT-bounceInLeft 0.7s ease-in-out both; - animation: iziT-bounceInLeft 0.7s ease-in-out both; -} - -.iziToast.bounceInRight { - -webkit-animation: iziT-bounceInRight 0.85s ease-in-out both; - animation: iziT-bounceInRight 0.85s ease-in-out both; -} - -.iziToast.bounceInDown { - -webkit-animation: iziT-bounceInDown 0.7s ease-in-out both; - animation: iziT-bounceInDown 0.7s ease-in-out both; -} - -.iziToast.bounceInUp { - -webkit-animation: iziT-bounceInUp 0.7s ease-in-out both; - animation: iziT-bounceInUp 0.7s ease-in-out both; -} - -.iziToast.fadeIn, -.iziToast .fadeIn { - -webkit-animation: iziT-fadeIn 0.5s ease both; - animation: iziT-fadeIn 0.5s ease both; -} - -.iziToast.fadeInUp { - -webkit-animation: iziT-fadeInUp 0.7s ease both; - animation: iziT-fadeInUp 0.7s ease both; -} - -.iziToast.fadeInDown { - -webkit-animation: iziT-fadeInDown 0.7s ease both; - animation: iziT-fadeInDown 0.7s ease both; -} - -.iziToast.fadeInLeft { - -webkit-animation: iziT-fadeInLeft 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both; - animation: iziT-fadeInLeft 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both; -} - -.iziToast.fadeInRight { - -webkit-animation: iziT-fadeInRight 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both; - animation: iziT-fadeInRight 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both; -} - -.iziToast.flipInX { - -webkit-animation: iziT-flipInX 0.85s cubic-bezier(0.35, 0, 0.25, 1) both; - animation: iziT-flipInX 0.85s cubic-bezier(0.35, 0, 0.25, 1) both; -} - -.iziToast.fadeOut { - -webkit-animation: iziT-fadeOut 0.7s ease both; - animation: iziT-fadeOut 0.7s ease both; -} - -.iziToast.fadeOutDown { - -webkit-animation: iziT-fadeOutDown 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both; - animation: iziT-fadeOutDown 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both; -} - -.iziToast.fadeOutUp { - -webkit-animation: iziT-fadeOutUp 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both; - animation: iziT-fadeOutUp 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both; -} - -.iziToast.fadeOutLeft { - -webkit-animation: iziT-fadeOutLeft 0.5s ease both; - animation: iziT-fadeOutLeft 0.5s ease both; -} - -.iziToast.fadeOutRight { - -webkit-animation: iziT-fadeOutRight 0.5s ease both; - animation: iziT-fadeOutRight 0.5s ease both; -} - -.iziToast.flipOutX { - -webkit-backface-visibility: visible !important; - backface-visibility: visible !important; - -webkit-animation: iziT-flipOutX 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both; - animation: iziT-flipOutX 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both; -} - -.iziToast-overlay.fadeIn { - -webkit-animation: iziT-fadeIn 0.5s ease both; - animation: iziT-fadeIn 0.5s ease both; -} - -.iziToast-overlay.fadeOut { - -webkit-animation: iziT-fadeOut 0.7s ease both; - animation: iziT-fadeOut 0.7s ease both; -} - -@-webkit-keyframes iziT-revealIn { - 0% { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 1); - } - 100% { - opacity: 1; - } -} - -@-moz-keyframes iziT-revealIn { - 0% { - opacity: 0; - -moz-transform: scale3d(0.3, 0.3, 1); - } - 100% { - opacity: 1; - } -} - -@-webkit-keyframes iziT-slideIn { - 0% { - opacity: 0; - -webkit-transform: translateX(50px); - } - 100% { - opacity: 1; - -webkit-transform: translateX(0); - } -} - -@-moz-keyframes iziT-slideIn { - 0% { - opacity: 0; - -moz-transform: translateX(50px); - } - 100% { - opacity: 1; - -moz-transform: translateX(0); - } -} - -@-webkit-keyframes iziT-bounceInLeft { - 0% { - opacity: 0; - -webkit-transform: translateX(280px); - } - 50% { - opacity: 1; - -webkit-transform: translateX(-20px); - } - 70% { - -webkit-transform: translateX(10px); - } - 100% { - -webkit-transform: translateX(0); - } -} - -@-webkit-keyframes iziT-bounceInRight { - 0% { - opacity: 0; - -webkit-transform: translateX(-280px); - } - 50% { - opacity: 1; - -webkit-transform: translateX(20px); - } - 70% { - -webkit-transform: translateX(-10px); - } - 100% { - -webkit-transform: translateX(0); - } -} - -@-webkit-keyframes iziT-bounceInDown { - 0% { - opacity: 0; - -webkit-transform: translateY(-200px); - } - 50% { - opacity: 1; - -webkit-transform: translateY(10px); - } - 70% { - -webkit-transform: translateY(-5px); - } - 100% { - -webkit-transform: translateY(0); - } -} - -@-webkit-keyframes iziT-bounceInUp { - 0% { - opacity: 0; - -webkit-transform: translateY(200px); - } - 50% { - opacity: 1; - -webkit-transform: translateY(-10px); - } - 70% { - -webkit-transform: translateY(5px); - } - 100% { - -webkit-transform: translateY(0); - } -} - -@-webkit-keyframes iziT-fadeIn { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -@-webkit-keyframes iziT-fadeInUp { - from { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@-webkit-keyframes iziT-fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@-webkit-keyframes iziT-fadeInLeft { - from { - opacity: 0; - -webkit-transform: translate3d(300px, 0, 0); - transform: translate3d(300px, 0, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@-webkit-keyframes iziT-fadeInRight { - from { - opacity: 0; - -webkit-transform: translate3d(-300px, 0, 0); - transform: translate3d(-300px, 0, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@-webkit-keyframes iziT-flipInX { - from { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - opacity: 0; - } - 40% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - } - 60% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - opacity: 1; - } - 80% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - } - to { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } -} - -@-webkit-keyframes iziT-fadeOut { - from { - opacity: 1; - } - to { - opacity: 0; - } -} - -@-webkit-keyframes iziT-fadeOutDown { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - -@-webkit-keyframes iziT-fadeOutUp { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - -@-webkit-keyframes iziT-fadeOutLeft { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(-200px, 0, 0); - transform: translate3d(-200px, 0, 0); - } -} - -@-webkit-keyframes iziT-fadeOutRight { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(200px, 0, 0); - transform: translate3d(200px, 0, 0); - } -} - -@-webkit-keyframes iziT-flipOutX { - from { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } - 30% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - opacity: 1; - } - to { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - opacity: 0; - } -} - -@-moz-keyframes iziT-revealIn { - 0% { - opacity: 0; - transform: scale3d(0.3, 0.3, 1); - } - 100% { - opacity: 1; - } -} - -@-webkit-keyframes iziT-revealIn { - 0% { - opacity: 0; - transform: scale3d(0.3, 0.3, 1); - } - 100% { - opacity: 1; - } -} - -@-o-keyframes iziT-revealIn { - 0% { - opacity: 0; - transform: scale3d(0.3, 0.3, 1); - } - 100% { - opacity: 1; - } -} - -@keyframes iziT-revealIn { - 0% { - opacity: 0; - transform: scale3d(0.3, 0.3, 1); - } - 100% { - opacity: 1; - } -} - -@-moz-keyframes iziT-slideIn { - 0% { - opacity: 0; - transform: translateX(50px); - } - 100% { - opacity: 1; - transform: translateX(0); - } -} - -@-webkit-keyframes iziT-slideIn { - 0% { - opacity: 0; - transform: translateX(50px); - } - 100% { - opacity: 1; - transform: translateX(0); - } -} - -@-o-keyframes iziT-slideIn { - 0% { - opacity: 0; - transform: translateX(50px); - } - 100% { - opacity: 1; - transform: translateX(0); - } -} - -@keyframes iziT-slideIn { - 0% { - opacity: 0; - transform: translateX(50px); - } - 100% { - opacity: 1; - transform: translateX(0); - } -} - -@-moz-keyframes iziT-bounceInLeft { - 0% { - opacity: 0; - transform: translateX(280px); - } - 50% { - opacity: 1; - transform: translateX(-20px); - } - 70% { - transform: translateX(10px); - } - 100% { - transform: translateX(0); - } -} - -@-webkit-keyframes iziT-bounceInLeft { - 0% { - opacity: 0; - transform: translateX(280px); - } - 50% { - opacity: 1; - transform: translateX(-20px); - } - 70% { - transform: translateX(10px); - } - 100% { - transform: translateX(0); - } -} - -@-o-keyframes iziT-bounceInLeft { - 0% { - opacity: 0; - transform: translateX(280px); - } - 50% { - opacity: 1; - transform: translateX(-20px); - } - 70% { - transform: translateX(10px); - } - 100% { - transform: translateX(0); - } -} - -@keyframes iziT-bounceInLeft { - 0% { - opacity: 0; - transform: translateX(280px); - } - 50% { - opacity: 1; - transform: translateX(-20px); - } - 70% { - transform: translateX(10px); - } - 100% { - transform: translateX(0); - } -} - -@-moz-keyframes iziT-bounceInRight { - 0% { - opacity: 0; - transform: translateX(-280px); - } - 50% { - opacity: 1; - transform: translateX(20px); - } - 70% { - transform: translateX(-10px); - } - 100% { - transform: translateX(0); - } -} - -@-webkit-keyframes iziT-bounceInRight { - 0% { - opacity: 0; - transform: translateX(-280px); - } - 50% { - opacity: 1; - transform: translateX(20px); - } - 70% { - transform: translateX(-10px); - } - 100% { - transform: translateX(0); - } -} - -@-o-keyframes iziT-bounceInRight { - 0% { - opacity: 0; - transform: translateX(-280px); - } - 50% { - opacity: 1; - transform: translateX(20px); - } - 70% { - transform: translateX(-10px); - } - 100% { - transform: translateX(0); - } -} - -@keyframes iziT-bounceInRight { - 0% { - opacity: 0; - transform: translateX(-280px); - } - 50% { - opacity: 1; - transform: translateX(20px); - } - 70% { - transform: translateX(-10px); - } - 100% { - transform: translateX(0); - } -} - -@-moz-keyframes iziT-bounceInDown { - 0% { - opacity: 0; - transform: translateY(-200px); - } - 50% { - opacity: 1; - transform: translateY(10px); - } - 70% { - transform: translateY(-5px); - } - 100% { - transform: translateY(0); - } -} - -@-webkit-keyframes iziT-bounceInDown { - 0% { - opacity: 0; - transform: translateY(-200px); - } - 50% { - opacity: 1; - transform: translateY(10px); - } - 70% { - transform: translateY(-5px); - } - 100% { - transform: translateY(0); - } -} - -@-o-keyframes iziT-bounceInDown { - 0% { - opacity: 0; - transform: translateY(-200px); - } - 50% { - opacity: 1; - transform: translateY(10px); - } - 70% { - transform: translateY(-5px); - } - 100% { - transform: translateY(0); - } -} - -@keyframes iziT-bounceInDown { - 0% { - opacity: 0; - transform: translateY(-200px); - } - 50% { - opacity: 1; - transform: translateY(10px); - } - 70% { - transform: translateY(-5px); - } - 100% { - transform: translateY(0); - } -} - -@-moz-keyframes iziT-bounceInUp { - 0% { - opacity: 0; - transform: translateY(200px); - } - 50% { - opacity: 1; - transform: translateY(-10px); - } - 70% { - transform: translateY(5px); - } - 100% { - transform: translateY(0); - } -} - -@-webkit-keyframes iziT-bounceInUp { - 0% { - opacity: 0; - transform: translateY(200px); - } - 50% { - opacity: 1; - transform: translateY(-10px); - } - 70% { - transform: translateY(5px); - } - 100% { - transform: translateY(0); - } -} - -@-o-keyframes iziT-bounceInUp { - 0% { - opacity: 0; - transform: translateY(200px); - } - 50% { - opacity: 1; - transform: translateY(-10px); - } - 70% { - transform: translateY(5px); - } - 100% { - transform: translateY(0); - } -} - -@keyframes iziT-bounceInUp { - 0% { - opacity: 0; - transform: translateY(200px); - } - 50% { - opacity: 1; - transform: translateY(-10px); - } - 70% { - transform: translateY(5px); - } - 100% { - transform: translateY(0); - } -} - -@-moz-keyframes iziT-fadeIn { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -@-webkit-keyframes iziT-fadeIn { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -@-o-keyframes iziT-fadeIn { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -@keyframes iziT-fadeIn { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -@-moz-keyframes iziT-fadeInUp { - from { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@-webkit-keyframes iziT-fadeInUp { - from { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@-o-keyframes iziT-fadeInUp { - from { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@keyframes iziT-fadeInUp { - from { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@-moz-keyframes iziT-fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@-webkit-keyframes iziT-fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@-o-keyframes iziT-fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@keyframes iziT-fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@-moz-keyframes iziT-fadeInLeft { - from { - opacity: 0; - -webkit-transform: translate3d(300px, 0, 0); - transform: translate3d(300px, 0, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@-webkit-keyframes iziT-fadeInLeft { - from { - opacity: 0; - -webkit-transform: translate3d(300px, 0, 0); - transform: translate3d(300px, 0, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@-o-keyframes iziT-fadeInLeft { - from { - opacity: 0; - -webkit-transform: translate3d(300px, 0, 0); - transform: translate3d(300px, 0, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@keyframes iziT-fadeInLeft { - from { - opacity: 0; - -webkit-transform: translate3d(300px, 0, 0); - transform: translate3d(300px, 0, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@-moz-keyframes iziT-fadeInRight { - from { - opacity: 0; - -webkit-transform: translate3d(-300px, 0, 0); - transform: translate3d(-300px, 0, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@-webkit-keyframes iziT-fadeInRight { - from { - opacity: 0; - -webkit-transform: translate3d(-300px, 0, 0); - transform: translate3d(-300px, 0, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@-o-keyframes iziT-fadeInRight { - from { - opacity: 0; - -webkit-transform: translate3d(-300px, 0, 0); - transform: translate3d(-300px, 0, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@keyframes iziT-fadeInRight { - from { - opacity: 0; - -webkit-transform: translate3d(-300px, 0, 0); - transform: translate3d(-300px, 0, 0); - } - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@-moz-keyframes iziT-flipInX { - from { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - opacity: 0; - } - 40% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - } - 60% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - opacity: 1; - } - 80% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - } - to { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } -} - -@-webkit-keyframes iziT-flipInX { - from { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - opacity: 0; - } - 40% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - } - 60% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - opacity: 1; - } - 80% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - } - to { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } -} - -@-o-keyframes iziT-flipInX { - from { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - opacity: 0; - } - 40% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - } - 60% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - opacity: 1; - } - 80% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - } - to { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } -} - -@keyframes iziT-flipInX { - from { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - opacity: 0; - } - 40% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - } - 60% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - opacity: 1; - } - 80% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - } - to { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } -} - -@-moz-keyframes iziT-fadeOut { - from { - opacity: 1; - } - to { - opacity: 0; - } -} - -@-webkit-keyframes iziT-fadeOut { - from { - opacity: 1; - } - to { - opacity: 0; - } -} - -@-o-keyframes iziT-fadeOut { - from { - opacity: 1; - } - to { - opacity: 0; - } -} - -@keyframes iziT-fadeOut { - from { - opacity: 1; - } - to { - opacity: 0; - } -} - -@-moz-keyframes iziT-fadeOutDown { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - -@-webkit-keyframes iziT-fadeOutDown { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - -@-o-keyframes iziT-fadeOutDown { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - -@keyframes iziT-fadeOutDown { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - -@-moz-keyframes iziT-fadeOutUp { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - -@-webkit-keyframes iziT-fadeOutUp { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - -@-o-keyframes iziT-fadeOutUp { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - -@keyframes iziT-fadeOutUp { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - -@-moz-keyframes iziT-fadeOutLeft { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(-200px, 0, 0); - transform: translate3d(-200px, 0, 0); - } -} - -@-webkit-keyframes iziT-fadeOutLeft { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(-200px, 0, 0); - transform: translate3d(-200px, 0, 0); - } -} - -@-o-keyframes iziT-fadeOutLeft { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(-200px, 0, 0); - transform: translate3d(-200px, 0, 0); - } -} - -@keyframes iziT-fadeOutLeft { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(-200px, 0, 0); - transform: translate3d(-200px, 0, 0); - } -} - -@-moz-keyframes iziT-fadeOutRight { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(200px, 0, 0); - transform: translate3d(200px, 0, 0); - } -} - -@-webkit-keyframes iziT-fadeOutRight { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(200px, 0, 0); - transform: translate3d(200px, 0, 0); - } -} - -@-o-keyframes iziT-fadeOutRight { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(200px, 0, 0); - transform: translate3d(200px, 0, 0); - } -} - -@keyframes iziT-fadeOutRight { - from { - opacity: 1; - } - to { - opacity: 0; - -webkit-transform: translate3d(200px, 0, 0); - transform: translate3d(200px, 0, 0); - } -} - -@-moz-keyframes iziT-flipOutX { - from { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } - 30% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - opacity: 1; - } - to { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - opacity: 0; - } -} - -@-webkit-keyframes iziT-flipOutX { - from { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } - 30% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - opacity: 1; - } - to { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - opacity: 0; - } -} - -@-o-keyframes iziT-flipOutX { - from { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } - 30% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - opacity: 1; - } - to { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - opacity: 0; - } -} - -@keyframes iziT-flipOutX { - from { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } - 30% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - opacity: 1; - } - to { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - opacity: 0; - } -} \ 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 c3d5bec..0000000 --- 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/pear.css b/component/pear/css/pear.css index cd012a4..74c1fd7 100644 --- a/component/pear/css/pear.css +++ b/component/pear/css/pear.css @@ -1,26 +1,7 @@ @import url("../../layui/css/layui.css"); @import url("../font/iconfont.css"); - -@import url("module/iconPicker.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/frame.css"); -@import url("module/layer.css"); -@import url("module/toast.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/page.css"); +@import url("module/tabPage.css"); \ 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 50f2f15..0000000 --- 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/convert.js b/component/pear/module/convert.js deleted file mode 100644 index 1f86ba5..0000000 --- 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/core/admin.js b/component/pear/module/core/admin.js index ed815fc..71da7f4 100644 --- a/component/pear/module/core/admin.js +++ b/component/pear/module/core/admin.js @@ -1,4 +1,4 @@ -layui.define(['messageCenter', 'table', 'jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'theme', 'fullscreen'], +layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'theme', 'fullscreen'], function (exports) { "use strict"; @@ -7,7 +7,6 @@ layui.define(['messageCenter', 'table', 'jquery', 'element', 'yaml', 'form', 'ta yaml = layui.yaml, page = layui.page, tabPage = layui.tabPage, - messageCenter = layui.messageCenter, menu = layui.menu, pearTheme = layui.theme, @@ -94,14 +93,6 @@ layui.define(['messageCenter', 'table', 'jquery', 'element', 'yaml', 'form', 'ta } } - this.messageRender = function (option) { - msgInstance = messageCenter.render({ - elem: '.message', - url: option.header.message, - height: '250px' - }); - } - this.logoRender = function (param) { $(".layui-logo .logo").attr("src", param.logo.image); $(".layui-logo .title").html(param.logo.title); @@ -368,12 +359,6 @@ layui.define(['messageCenter', 'table', 'jquery', 'element', 'yaml', 'form', 'ta this.logout = function (callback) { logout = callback; } - - this.message = function (callback) { - if (callback != null) { - msgInstance.click(callback); - } - } }; function refresh() { @@ -887,9 +872,6 @@ layui.define(['messageCenter', 'table', 'jquery', 'element', 'yaml', 'form', 'ta pearAdmin.bodyRender(param); pearAdmin.themeRender(param); pearAdmin.keepLoad(param); - if (param.header.message != false) { - pearAdmin.messageRender(param); - } } function getColorById(id) { diff --git a/component/pear/module/core/messageCenter.js b/component/pear/module/core/messageCenter.js deleted file mode 100644 index bdcf20f..0000000 --- a/component/pear/module/core/messageCenter.js +++ /dev/null @@ -1,127 +0,0 @@ -layui.define(['table', 'jquery', 'element'], function (exports) { - "use strict"; - - var MOD_NAME = 'messageCenter', - $ = 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 = '
                                      • '; - noticeTitle += '
                                      '; - noticeContent += '
                                      '; - notice += noticeTitle; - notice += noticeContent; - notice += '
                                      '; - return notice; - } - - exports(MOD_NAME, new message()); -}) diff --git a/component/pear/module/core/tabPage.js b/component/pear/module/core/tabPage.js index ec9ab62..c6c4015 100644 --- a/component/pear/module/core/tabPage.js +++ b/component/pear/module/core/tabPage.js @@ -1,8 +1,9 @@ -layui.define(['jquery', 'element'], function (exports) { +layui.define(['jquery', 'element', 'dropdown'], function (exports) { "use strict"; var MOD_NAME = 'tabPage', $ = layui.jquery, + dropdown = layui.dropdown, element = layui.element; var tabPage = function (opt) { @@ -55,7 +56,7 @@ layui.define(['jquery', 'element'], function (exports) { rollPage("right", option); }) element.init(); - toolEvent(option); + $("#" + option.elem).width(opt.width); $("#" + option.elem).height(opt.height); $("#" + option.elem).css({ @@ -65,24 +66,79 @@ layui.define(['jquery', 'element'], function (exports) { option.success(sessionStorage.getItem(option.elem + "-pear-tab-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); + } + }) + } + + } + }) + $("body .layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title").on("contextmenu", "li", 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, @@ -94,7 +150,7 @@ layui.define(['jquery', 'element'], function (exports) { anim: false, isOutAnim: false, offset: [top, left], - content: menu, //iframe的url, + content: menu, success: function (layero, index) { layer.close(lastIndex); lastIndex = index; @@ -110,11 +166,9 @@ layui.define(['jquery', 'element'], function (exports) { clearTimeout(timer); }); - // 清除 item 右击 $(layero).on('contextmenu', function () { return false; }) - } }); return false; @@ -202,7 +256,7 @@ layui.define(['jquery', 'element'], function (exports) { tabDelete(elem, currentId, callback); } } - + /** * @since Pear Admin 4.0 * @@ -210,7 +264,9 @@ layui.define(['jquery', 'element'], function (exports) { */ tabPage.prototype.addTabOnly = function (opt, time) { - var title = `${opt.title}`; + var title = ` + ${opt.title} + `; if ($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]").length <= 0) { @@ -225,9 +281,7 @@ layui.define(['jquery', 'element'], function (exports) { success: function (data) { element.tabAdd(that.option.elem, { title: title, - content: '
                                      ' + data + '
                                      ', + content: `
                                      ${data}
                                      `, id: opt.id }); }, @@ -249,7 +303,7 @@ layui.define(['jquery', 'element'], function (exports) { isData = true; } }) - + if (isData == false) { if (this.option.tabMax != false) { @@ -394,23 +448,14 @@ layui.define(['jquery', 'element'], function (exports) { var control = ``; // 处 理 选 项 卡 头 部 var index = 0; $.each(option.data, function (i, item) { - - var titleItem = `
                                    • + + var titleItem = `
                                    • ${item.title} @@ -530,47 +575,6 @@ 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'); diff --git a/component/pear/module/count.js b/component/pear/module/count.js deleted file mode 100644 index c9a659f..0000000 --- a/component/pear/module/count.js +++ /dev/null @@ -1,37 +0,0 @@ -layui.define(['jquery', 'element'], function(exports) { - "use strict"; - - var MOD_NAME = 'count', - $ = layui.jquery, - element = layui.element; - - var count = new function() { - - this.up = function(targetEle, options) { - - options = options || {}; - - var $this = document.getElementById(targetEle), - time = options.time, - finalNum = options.num, - regulator = options.regulator, - step = finalNum / (time / regulator), - count = 0.00, - initial = 0; - - var timer = setInterval(function() { - count = count + step; - if (count >= finalNum) { - clearInterval(timer); - count = finalNum; - } - var t = count.toFixed(options.bit?options.bit:0);; - if (t == initial) return; - initial = t; - $this.innerHTML = initial; - }, 30); - } - - } - exports(MOD_NAME, count); -}); 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 1e8e952..769ed93 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/extends/toast.js b/component/pear/module/extends/toast.js deleted file mode 100644 index 16b7087..0000000 --- a/component/pear/module/extends/toast.js +++ /dev/null @@ -1,1225 +0,0 @@ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - define([], factory(root)); - } else if (typeof exports === 'object') { - module.exports = factory(root); - } else if (window.layui && layui.define) { - layui.define(function (exports) { - exports('toast', factory(root)) - }) - } else { - root.iziToast = factory(root); - } -})(typeof global !== 'undefined' ? global : window || this.window || this.global, function (root) { - - 'use strict'; - - var $iziToast = {}, - PLUGIN_NAME = 'iziToast', - BODY = document.querySelector('body'), - ISMOBILE = (/Mobi/.test(navigator.userAgent)) ? true : false, - ISCHROME = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor), - ISFIREFOX = typeof InstallTrigger !== 'undefined', - ACCEPTSTOUCH = 'ontouchstart' in document.documentElement, - POSITIONS = ['bottomRight', 'bottomLeft', 'bottomCenter', 'topRight', 'topLeft', 'topCenter', 'center'], - THEMES = { - info: { - color: 'blue', - icon: 'ico-info' - }, - success: { - color: 'green', - icon: 'ico-success' - }, - warning: { - color: 'orange', - icon: 'ico-warning' - }, - error: { - color: 'red', - icon: 'ico-error' - }, - question: { - color: 'yellow', - icon: 'ico-question' - } - }, - MOBILEWIDTH = 568, - CONFIG = {}; - - $iziToast.children = {}; - - // Default settings - var defaults = { - id: null, - class: '', - title: '', - titleColor: '', - titleSize: '', - titleLineHeight: '', - message: '', - messageColor: '', - messageSize: '', - messageLineHeight: '', - backgroundColor: '', - theme: 'light', // dark - color: '', // blue, red, green, yellow - icon: '', - iconText: '', - iconColor: '', - iconUrl: null, - image: '', - imageWidth: 50, - maxWidth: null, - zindex: null, - layout: 2, - balloon: false, - close: true, - closeOnEscape: false, - closeOnClick: false, - displayMode: 0, - position: 'topCenter', // bottomRight, bottomLeft, topRight, topLeft, topCenter, bottomCenter, center - target: '', - targetFirst: true, - timeout: 3000, // 默认3秒 - rtl: false, - animateInside: false, // 动画效果 - drag: true, - pauseOnHover: true, - resetOnHover: false, - progressBar: false, - progressBarColor: '', - progressBarEasing: 'linear', - overlay: false, - overlayClose: false, - overlayColor: 'rgba(0, 0, 0, 0.6)', - transitionIn: 'fadeInDown', // bounceInLeft, bounceInRight, bounceInUp, bounceInDown, fadeIn, fadeInDown, fadeInUp, fadeInLeft, fadeInRight, flipInX - transitionOut: 'fadeOut', // fadeOut, fadeOutUp, fadeOutDown, fadeOutLeft, fadeOutRight, flipOutX - transitionInMobile: 'bounceInDown', - transitionOutMobile: 'fadeOutUp', - buttons: {}, - inputs: {}, - onOpening: function () { }, - onOpened: function () { }, - onClosing: function () { }, - onClosed: function () { } - }; - - if (!('remove' in Element.prototype)) { - Element.prototype.remove = function () { - if (this.parentNode) { - this.parentNode.removeChild(this); - } - }; - } - - if (typeof window.CustomEvent !== 'function') { - var CustomEventPolyfill = function (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; - }; - - CustomEventPolyfill.prototype = window.Event.prototype; - - window.CustomEvent = CustomEventPolyfill; - } - - var forEach = function (collection, callback, scope) { - if (Object.prototype.toString.call(collection) === '[object Object]') { - for (var prop in collection) { - if (Object.prototype.hasOwnProperty.call(collection, prop)) { - callback.call(scope, collection[prop], prop, collection); - } - } - } else { - if (collection) { - for (var i = 0, len = collection.length; i < len; i++) { - callback.call(scope, collection[i], i, collection); - } - } - } - }; - - var extend = function (defaults, options) { - var extended = {}; - forEach(defaults, function (value, prop) { - extended[prop] = defaults[prop]; - }); - forEach(options, function (value, prop) { - extended[prop] = options[prop]; - }); - return extended; - }; - - var createFragElem = function (htmlStr) { - var frag = document.createDocumentFragment(), - temp = document.createElement('div'); - temp.innerHTML = htmlStr; - while (temp.firstChild) { - frag.appendChild(temp.firstChild); - } - return frag; - }; - - var generateId = function (params) { - var newId = btoa(encodeURIComponent(params)); - return newId.replace(/=/g, ""); - }; - - var isColor = function (color) { - if (color.substring(0, 1) == '#' || color.substring(0, 3) == 'rgb' || color.substring(0, 3) == 'hsl') { - return true; - } else { - return false; - } - }; - - var isBase64 = function (str) { - try { - return btoa(atob(str)) == str; - } catch (err) { - return false; - } - }; - - var drag = function () { - - return { - move: function (toast, instance, settings, xpos) { - - var opacity, - opacityRange = 0.3, - distance = 180; - - if (xpos !== 0) { - - toast.classList.add(PLUGIN_NAME + '-dragged'); - - toast.style.transform = 'translateX(' + xpos + 'px)'; - - if (xpos > 0) { - opacity = (distance - xpos) / distance; - if (opacity < opacityRange) { - instance.hide(extend(settings, { transitionOut: 'fadeOutRight', transitionOutMobile: 'fadeOutRight' }), toast, 'drag'); - } - } else { - opacity = (distance + xpos) / distance; - if (opacity < opacityRange) { - instance.hide(extend(settings, { transitionOut: 'fadeOutLeft', transitionOutMobile: 'fadeOutLeft' }), toast, 'drag'); - } - } - toast.style.opacity = opacity; - - if (opacity < opacityRange) { - - if (ISCHROME || ISFIREFOX) - toast.style.left = xpos + 'px'; - - toast.parentNode.style.opacity = opacityRange; - - this.stopMoving(toast, null); - } - } - - - }, - startMoving: function (toast, instance, settings, e) { - - e = e || window.event; - var posX = ((ACCEPTSTOUCH) ? e.touches[0].clientX : e.clientX), - toastLeft = toast.style.transform.replace('px)', ''); - toastLeft = toastLeft.replace('translateX(', ''); - var offsetX = posX - toastLeft; - - if (settings.transitionIn) { - toast.classList.remove(settings.transitionIn); - } - if (settings.transitionInMobile) { - toast.classList.remove(settings.transitionInMobile); - } - toast.style.transition = ''; - - if (ACCEPTSTOUCH) { - document.ontouchmove = function (e) { - e.preventDefault(); - e = e || window.event; - var posX = e.touches[0].clientX, - finalX = posX - offsetX; - drag.move(toast, instance, settings, finalX); - }; - } else { - document.onmousemove = function (e) { - e.preventDefault(); - e = e || window.event; - var posX = e.clientX, - finalX = posX - offsetX; - drag.move(toast, instance, settings, finalX); - }; - } - - }, - stopMoving: function (toast, e) { - - if (ACCEPTSTOUCH) { - document.ontouchmove = function () { }; - } else { - document.onmousemove = function () { }; - } - - toast.style.opacity = ''; - toast.style.transform = ''; - - if (toast.classList.contains(PLUGIN_NAME + '-dragged')) { - - toast.classList.remove(PLUGIN_NAME + '-dragged'); - - toast.style.transition = 'transform 0.4s ease, opacity 0.4s ease'; - setTimeout(function () { - toast.style.transition = ''; - }, 400); - } - - } - }; - - }(); - - $iziToast.setSetting = function (ref, option, value) { - - $iziToast.children[ref][option] = value; - - }; - - $iziToast.getSetting = function (ref, option) { - - return $iziToast.children[ref][option]; - - }; - - $iziToast.destroy = function () { - - forEach(document.querySelectorAll('.' + PLUGIN_NAME + '-overlay'), function (element, index) { - element.remove(); - }); - - forEach(document.querySelectorAll('.' + PLUGIN_NAME + '-wrapper'), function (element, index) { - element.remove(); - }); - - forEach(document.querySelectorAll('.' + PLUGIN_NAME), function (element, index) { - element.remove(); - }); - - this.children = {}; - - // Remove event listeners - document.removeEventListener(PLUGIN_NAME + '-opened', {}, false); - document.removeEventListener(PLUGIN_NAME + '-opening', {}, false); - document.removeEventListener(PLUGIN_NAME + '-closing', {}, false); - document.removeEventListener(PLUGIN_NAME + '-closed', {}, false); - document.removeEventListener('keyup', {}, false); - - // Reset variables - CONFIG = {}; - }; - - /** - * Initialize Plugin - * @public - * @param {Object} options User settings - */ - $iziToast.settings = function (options) { - - // Destroy any existing initializations - $iziToast.destroy(); - - CONFIG = options; - defaults = extend(defaults, options || {}); - }; - - - /** - * Building themes functions. - * @public - * @param {Object} options User settings - */ - forEach(THEMES, function (theme, name) { - - $iziToast[name] = function (options) { - - var settings = extend(CONFIG, options || {}); - settings = extend(theme, settings || {}); - - this.show(settings); - }; - - }); - - - /** - * Do the calculation to move the progress bar - * @private - */ - $iziToast.progress = function (options, $toast, callback) { - - - var that = this, - ref = $toast.getAttribute('data-iziToast-ref'), - settings = extend(this.children[ref], options || {}), - $elem = $toast.querySelector('.' + PLUGIN_NAME + '-progressbar div'); - - return { - start: function () { - - if (typeof settings.time.REMAINING == 'undefined') { - - $toast.classList.remove(PLUGIN_NAME + '-reseted'); - - if ($elem !== null) { - $elem.style.transition = 'width ' + settings.timeout + 'ms ' + settings.progressBarEasing; - $elem.style.width = '0%'; - } - - settings.time.START = new Date().getTime(); - settings.time.END = settings.time.START + settings.timeout; - settings.time.TIMER = setTimeout(function () { - - clearTimeout(settings.time.TIMER); - - if (!$toast.classList.contains(PLUGIN_NAME + '-closing')) { - - that.hide(settings, $toast, 'timeout'); - - if (typeof callback === 'function') { - callback.apply(that); - } - } - - }, settings.timeout); - that.setSetting(ref, 'time', settings.time); - } - }, - pause: function () { - - if (typeof settings.time.START !== 'undefined' && !$toast.classList.contains(PLUGIN_NAME + '-paused') && !$toast.classList.contains(PLUGIN_NAME + '-reseted')) { - - $toast.classList.add(PLUGIN_NAME + '-paused'); - - settings.time.REMAINING = settings.time.END - new Date().getTime(); - - clearTimeout(settings.time.TIMER); - - that.setSetting(ref, 'time', settings.time); - - if ($elem !== null) { - var computedStyle = window.getComputedStyle($elem), - propertyWidth = computedStyle.getPropertyValue('width'); - - $elem.style.transition = 'none'; - $elem.style.width = propertyWidth; - } - - if (typeof callback === 'function') { - setTimeout(function () { - callback.apply(that); - }, 10); - } - } - }, - resume: function () { - - if (typeof settings.time.REMAINING !== 'undefined') { - - $toast.classList.remove(PLUGIN_NAME + '-paused'); - - if ($elem !== null) { - $elem.style.transition = 'width ' + settings.time.REMAINING + 'ms ' + settings.progressBarEasing; - $elem.style.width = '0%'; - } - - settings.time.END = new Date().getTime() + settings.time.REMAINING; - settings.time.TIMER = setTimeout(function () { - - clearTimeout(settings.time.TIMER); - - if (!$toast.classList.contains(PLUGIN_NAME + '-closing')) { - - that.hide(settings, $toast, 'timeout'); - - if (typeof callback === 'function') { - callback.apply(that); - } - } - - - }, settings.time.REMAINING); - - that.setSetting(ref, 'time', settings.time); - } else { - this.start(); - } - }, - reset: function () { - - clearTimeout(settings.time.TIMER); - - delete settings.time.REMAINING; - - that.setSetting(ref, 'time', settings.time); - - $toast.classList.add(PLUGIN_NAME + '-reseted'); - - $toast.classList.remove(PLUGIN_NAME + '-paused'); - - if ($elem !== null) { - $elem.style.transition = 'none'; - $elem.style.width = '100%'; - } - - if (typeof callback === 'function') { - setTimeout(function () { - callback.apply(that); - }, 10); - } - } - }; - - }; - - - /** - * Close the specific Toast - * @public - * @param {Object} options User settings - */ - $iziToast.hide = function (options, $toast, closedBy) { - - if (typeof $toast != 'object') { - $toast = document.querySelector($toast); - } - - var that = this, - settings = extend(this.children[$toast.getAttribute('data-iziToast-ref')], options || {}); - settings.closedBy = closedBy || null; - - delete settings.time.REMAINING; - - $toast.classList.add(PLUGIN_NAME + '-closing'); - - // Overlay - (function () { - - var $overlay = document.querySelector('.' + PLUGIN_NAME + '-overlay'); - if ($overlay !== null) { - var refs = $overlay.getAttribute('data-iziToast-ref'); - refs = refs.split(','); - var index = refs.indexOf(String(settings.ref)); - - if (index !== -1) { - refs.splice(index, 1); - } - $overlay.setAttribute('data-iziToast-ref', refs.join()); - - if (refs.length === 0) { - $overlay.classList.remove('fadeIn'); - $overlay.classList.add('fadeOut'); - setTimeout(function () { - $overlay.remove(); - }, 700); - } - } - - })(); - - if (settings.transitionIn) { - $toast.classList.remove(settings.transitionIn); - } - - if (settings.transitionInMobile) { - $toast.classList.remove(settings.transitionInMobile); - } - - if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) { - if (settings.transitionOutMobile) - $toast.classList.add(settings.transitionOutMobile); - } else { - if (settings.transitionOut) - $toast.classList.add(settings.transitionOut); - } - var H = $toast.parentNode.offsetHeight; - $toast.parentNode.style.height = H + 'px'; - $toast.style.pointerEvents = 'none'; - - if (!ISMOBILE || window.innerWidth > MOBILEWIDTH) { - $toast.parentNode.style.transitionDelay = '0.2s'; - } - - try { - var event = new CustomEvent(PLUGIN_NAME + '-closing', { detail: settings, bubbles: true, cancelable: true }); - document.dispatchEvent(event); - } catch (ex) { - console.warn(ex); - } - - setTimeout(function () { - - $toast.parentNode.style.height = '0px'; - $toast.parentNode.style.overflow = ''; - - setTimeout(function () { - - delete that.children[settings.ref]; - - $toast.parentNode.remove(); - - try { - var event = new CustomEvent(PLUGIN_NAME + '-closed', { detail: settings, bubbles: true, cancelable: true }); - document.dispatchEvent(event); - } catch (ex) { - console.warn(ex); - } - - if (typeof settings.onClosed !== 'undefined') { - settings.onClosed.apply(null, [settings, $toast, closedBy]); - } - - }, 1000); - }, 200); - - - if (typeof settings.onClosing !== 'undefined') { - settings.onClosing.apply(null, [settings, $toast, closedBy]); - } - }; - - /** - * Create and show the Toast - * @public - * @param {Object} options User settings - */ - $iziToast.show = function (options) { - - var that = this; - - // Merge user options with defaults - var settings = extend(CONFIG, options || {}); - settings = extend(defaults, settings); - settings.time = {}; - - if (settings.id === null) { - settings.id = generateId(settings.title + settings.message + settings.color); - } - - if (settings.displayMode === 1 || settings.displayMode == 'once') { - try { - if (document.querySelectorAll('.' + PLUGIN_NAME + '#' + settings.id).length > 0) { - return false; - } - } catch (exc) { - console.warn('[' + PLUGIN_NAME + '] Could not find an element with this selector: ' + '#' + settings.id + '. Try to set an valid id.'); - } - } - - if (settings.displayMode === 2 || settings.displayMode == 'replace') { - try { - forEach(document.querySelectorAll('.' + PLUGIN_NAME + '#' + settings.id), function (element, index) { - that.hide(settings, element, 'replaced'); - }); - } catch (exc) { - console.warn('[' + PLUGIN_NAME + '] Could not find an element with this selector: ' + '#' + settings.id + '. Try to set an valid id.'); - } - } - - settings.ref = new Date().getTime() + Math.floor((Math.random() * 10000000) + 1); - - $iziToast.children[settings.ref] = settings; - - var $DOM = { - body: document.querySelector('body'), - overlay: document.createElement('div'), - toast: document.createElement('div'), - toastBody: document.createElement('div'), - toastTexts: document.createElement('div'), - toastCapsule: document.createElement('div'), - cover: document.createElement('div'), - buttons: document.createElement('div'), - inputs: document.createElement('div'), - icon: !settings.iconUrl ? document.createElement('i') : document.createElement('img'), - wrapper: null - }; - - $DOM.toast.setAttribute('data-iziToast-ref', settings.ref); - $DOM.toast.appendChild($DOM.toastBody); - $DOM.toastCapsule.appendChild($DOM.toast); - - // CSS Settings - (function () { - - $DOM.toast.classList.add(PLUGIN_NAME); - $DOM.toast.classList.add(PLUGIN_NAME + '-opening'); - $DOM.toastCapsule.classList.add(PLUGIN_NAME + '-capsule'); - $DOM.toastBody.classList.add(PLUGIN_NAME + '-body'); - $DOM.toastTexts.classList.add(PLUGIN_NAME + '-texts'); - - if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) { - if (settings.transitionInMobile) - $DOM.toast.classList.add(settings.transitionInMobile); - } else { - if (settings.transitionIn) - $DOM.toast.classList.add(settings.transitionIn); - } - - if (settings.class) { - var classes = settings.class.split(' '); - forEach(classes, function (value, index) { - $DOM.toast.classList.add(value); - }); - } - - if (settings.id) { $DOM.toast.id = settings.id; } - - if (settings.rtl) { - $DOM.toast.classList.add(PLUGIN_NAME + '-rtl'); - $DOM.toast.setAttribute('dir', 'rtl'); - } - - if (settings.layout > 1) { $DOM.toast.classList.add(PLUGIN_NAME + '-layout' + settings.layout); } - - if (settings.balloon) { $DOM.toast.classList.add(PLUGIN_NAME + '-balloon'); } - - if (settings.maxWidth) { - if (!isNaN(settings.maxWidth)) { - $DOM.toast.style.maxWidth = settings.maxWidth + 'px'; - } else { - $DOM.toast.style.maxWidth = settings.maxWidth; - } - } - - if (settings.theme !== '' || settings.theme !== 'light') { - - $DOM.toast.classList.add(PLUGIN_NAME + '-theme-' + settings.theme); - } - - if (settings.color) { //#, rgb, rgba, hsl - - if (isColor(settings.color)) { - $DOM.toast.style.background = settings.color; - } else { - $DOM.toast.classList.add(PLUGIN_NAME + '-color-' + settings.color); - } - } - - if (settings.backgroundColor) { - $DOM.toast.style.background = settings.backgroundColor; - if (settings.balloon) { - $DOM.toast.style.borderColor = settings.backgroundColor; - } - } - })(); - - // Cover image - (function () { - if (settings.image) { - $DOM.cover.classList.add(PLUGIN_NAME + '-cover'); - $DOM.cover.style.width = settings.imageWidth + 'px'; - - if (isBase64(settings.image.replace(/ /g, ''))) { - $DOM.cover.style.backgroundImage = 'url(data:image/png;base64,' + settings.image.replace(/ /g, '') + ')'; - } else { - $DOM.cover.style.backgroundImage = 'url(' + settings.image + ')'; - } - - if (settings.rtl) { - $DOM.toastBody.style.marginRight = (settings.imageWidth + 10) + 'px'; - } else { - $DOM.toastBody.style.marginLeft = (settings.imageWidth + 10) + 'px'; - } - $DOM.toast.appendChild($DOM.cover); - } - })(); - - // Button close - (function () { - if (settings.close) { - - $DOM.buttonClose = document.createElement('button'); - $DOM.buttonClose.type = 'button'; - $DOM.buttonClose.classList.add(PLUGIN_NAME + '-close'); - $DOM.buttonClose.addEventListener('click', function (e) { - var button = e.target; - that.hide(settings, $DOM.toast, 'button'); - }); - $DOM.toast.appendChild($DOM.buttonClose); - } else { - if (settings.rtl) { - $DOM.toast.style.paddingLeft = '18px'; - } else { - $DOM.toast.style.paddingRight = '18px'; - } - } - })(); - - // Progress Bar & Timeout - (function () { - - if (settings.progressBar) { - $DOM.progressBar = document.createElement('div'); - $DOM.progressBarDiv = document.createElement('div'); - $DOM.progressBar.classList.add(PLUGIN_NAME + '-progressbar'); - $DOM.progressBarDiv.style.background = settings.progressBarColor; - $DOM.progressBar.appendChild($DOM.progressBarDiv); - $DOM.toast.appendChild($DOM.progressBar); - } - - if (settings.timeout) { - - if (settings.pauseOnHover && !settings.resetOnHover) { - - $DOM.toast.addEventListener('mouseenter', function (e) { - that.progress(settings, $DOM.toast).pause(); - }); - $DOM.toast.addEventListener('mouseleave', function (e) { - that.progress(settings, $DOM.toast).resume(); - }); - } - - if (settings.resetOnHover) { - - $DOM.toast.addEventListener('mouseenter', function (e) { - that.progress(settings, $DOM.toast).reset(); - }); - $DOM.toast.addEventListener('mouseleave', function (e) { - that.progress(settings, $DOM.toast).start(); - }); - } - } - })(); - - // Icon - (function () { - - if (settings.iconUrl) { - - $DOM.icon.setAttribute('class', PLUGIN_NAME + '-icon'); - $DOM.icon.setAttribute('src', settings.iconUrl); - - } else if (settings.icon) { - $DOM.icon.setAttribute('class', PLUGIN_NAME + '-icon ' + settings.icon); - - if (settings.iconText) { - $DOM.icon.appendChild(document.createTextNode(settings.iconText)); - } - - if (settings.iconColor) { - $DOM.icon.style.color = settings.iconColor; - } - } - - if (settings.icon || settings.iconUrl) { - - if (settings.rtl) { - $DOM.toastBody.style.paddingRight = '33px'; - } else { - $DOM.toastBody.style.paddingLeft = '33px'; - } - - $DOM.toastBody.appendChild($DOM.icon); - } - - })(); - - // Title & Message - (function () { - if (settings.title.length > 0) { - - $DOM.strong = document.createElement('strong'); - $DOM.strong.classList.add(PLUGIN_NAME + '-title'); - $DOM.strong.appendChild(createFragElem(settings.title)); - $DOM.toastTexts.appendChild($DOM.strong); - - if (settings.titleColor) { - $DOM.strong.style.color = settings.titleColor; - } - if (settings.titleSize) { - if (!isNaN(settings.titleSize)) { - $DOM.strong.style.fontSize = settings.titleSize + 'px'; - } else { - $DOM.strong.style.fontSize = settings.titleSize; - } - } - if (settings.titleLineHeight) { - if (!isNaN(settings.titleSize)) { - $DOM.strong.style.lineHeight = settings.titleLineHeight + 'px'; - } else { - $DOM.strong.style.lineHeight = settings.titleLineHeight; - } - } - } - - if (settings.message.length > 0) { - - $DOM.p = document.createElement('p'); - $DOM.p.classList.add(PLUGIN_NAME + '-message'); - $DOM.p.appendChild(createFragElem(settings.message)); - $DOM.toastTexts.appendChild($DOM.p); - - if (settings.messageColor) { - $DOM.p.style.color = settings.messageColor; - } - if (settings.messageSize) { - if (!isNaN(settings.titleSize)) { - $DOM.p.style.fontSize = settings.messageSize + 'px'; - } else { - $DOM.p.style.fontSize = settings.messageSize; - } - } - if (settings.messageLineHeight) { - - if (!isNaN(settings.titleSize)) { - $DOM.p.style.lineHeight = settings.messageLineHeight + 'px'; - } else { - $DOM.p.style.lineHeight = settings.messageLineHeight; - } - } - } - - if (settings.title.length > 0 && settings.message.length > 0) { - if (settings.rtl) { - $DOM.strong.style.marginLeft = '10px'; - } else if (settings.layout !== 2 && !settings.rtl) { - $DOM.strong.style.marginRight = '10px'; - } - } - })(); - - $DOM.toastBody.appendChild($DOM.toastTexts); - - // Inputs - var $inputs; - (function () { - if (settings.inputs.length > 0) { - - $DOM.inputs.classList.add(PLUGIN_NAME + '-inputs'); - - forEach(settings.inputs, function (value, index) { - $DOM.inputs.appendChild(createFragElem(value[0])); - - $inputs = $DOM.inputs.childNodes; - - $inputs[index].classList.add(PLUGIN_NAME + '-inputs-child'); - - if (value[3]) { - setTimeout(function () { - $inputs[index].focus(); - }, 300); - } - - $inputs[index].addEventListener(value[1], function (e) { - var ts = value[2]; - return ts(that, $DOM.toast, this, e); - }); - }); - $DOM.toastBody.appendChild($DOM.inputs); - } - })(); - - // Buttons - (function () { - if (settings.buttons.length > 0) { - - $DOM.buttons.classList.add(PLUGIN_NAME + '-buttons'); - - forEach(settings.buttons, function (value, index) { - $DOM.buttons.appendChild(createFragElem(value[0])); - - var $btns = $DOM.buttons.childNodes; - - $btns[index].classList.add(PLUGIN_NAME + '-buttons-child'); - - if (value[2]) { - setTimeout(function () { - $btns[index].focus(); - }, 300); - } - - $btns[index].addEventListener('click', function (e) { - e.preventDefault(); - var ts = value[1]; - return ts(that, $DOM.toast, this, e, $inputs); - }); - }); - } - $DOM.toastBody.appendChild($DOM.buttons); - })(); - - if (settings.message.length > 0 && (settings.inputs.length > 0 || settings.buttons.length > 0)) { - $DOM.p.style.marginBottom = '0'; - } - - if (settings.inputs.length > 0 || settings.buttons.length > 0) { - if (settings.rtl) { - $DOM.toastTexts.style.marginLeft = '10px'; - } else { - $DOM.toastTexts.style.marginRight = '10px'; - } - if (settings.inputs.length > 0 && settings.buttons.length > 0) { - if (settings.rtl) { - $DOM.inputs.style.marginLeft = '8px'; - } else { - $DOM.inputs.style.marginRight = '8px'; - } - } - } - - // Wrap - (function () { - $DOM.toastCapsule.style.visibility = 'hidden'; - setTimeout(function () { - var H = $DOM.toast.offsetHeight; - var style = $DOM.toast.currentStyle || window.getComputedStyle($DOM.toast); - var marginTop = style.marginTop; - marginTop = marginTop.split('px'); - marginTop = parseInt(marginTop[0]); - var marginBottom = style.marginBottom; - marginBottom = marginBottom.split('px'); - marginBottom = parseInt(marginBottom[0]); - - $DOM.toastCapsule.style.visibility = ''; - $DOM.toastCapsule.style.height = (H + marginBottom + marginTop) + 'px'; - - setTimeout(function () { - $DOM.toastCapsule.style.height = 'auto'; - if (settings.target) { - $DOM.toastCapsule.style.overflow = 'visible'; - } - }, 500); - - if (settings.timeout) { - that.progress(settings, $DOM.toast).start(); - } - }, 100); - })(); - - // Target - (function () { - var position = settings.position; - - if (settings.target) { - - $DOM.wrapper = document.querySelector(settings.target); - $DOM.wrapper.classList.add(PLUGIN_NAME + '-target'); - - if (settings.targetFirst) { - $DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild); - } else { - $DOM.wrapper.appendChild($DOM.toastCapsule); - } - - } else { - - if (POSITIONS.indexOf(settings.position) == -1) { - console.warn('[' + PLUGIN_NAME + '] Incorrect position.\nIt can be › ' + POSITIONS); - return; - } - - if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) { - if (settings.position == 'bottomLeft' || settings.position == 'bottomRight' || settings.position == 'bottomCenter') { - position = PLUGIN_NAME + '-wrapper-bottomCenter'; - } - else if (settings.position == 'topLeft' || settings.position == 'topRight' || settings.position == 'topCenter') { - position = PLUGIN_NAME + '-wrapper-topCenter'; - } - else { - position = PLUGIN_NAME + '-wrapper-center'; - } - } else { - position = PLUGIN_NAME + '-wrapper-' + position; - } - $DOM.wrapper = document.querySelector('.' + PLUGIN_NAME + '-wrapper.' + position); - - if (!$DOM.wrapper) { - $DOM.wrapper = document.createElement('div'); - $DOM.wrapper.classList.add(PLUGIN_NAME + '-wrapper'); - $DOM.wrapper.classList.add(position); - document.body.appendChild($DOM.wrapper); - } - if (settings.position == 'topLeft' || settings.position == 'topCenter' || settings.position == 'topRight') { - $DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild); - } else { - $DOM.wrapper.appendChild($DOM.toastCapsule); - } - } - - if (!isNaN(settings.zindex)) { - $DOM.wrapper.style.zIndex = settings.zindex; - } else { - console.warn('[' + PLUGIN_NAME + '] Invalid zIndex.'); - } - })(); - - // Overlay - (function () { - - if (settings.overlay) { - - if (document.querySelector('.' + PLUGIN_NAME + '-overlay.fadeIn') !== null) { - - $DOM.overlay = document.querySelector('.' + PLUGIN_NAME + '-overlay'); - $DOM.overlay.setAttribute('data-iziToast-ref', $DOM.overlay.getAttribute('data-iziToast-ref') + ',' + settings.ref); - - if (!isNaN(settings.zindex) && settings.zindex !== null) { - $DOM.overlay.style.zIndex = settings.zindex - 1; - } - - } else { - - $DOM.overlay.classList.add(PLUGIN_NAME + '-overlay'); - $DOM.overlay.classList.add('fadeIn'); - $DOM.overlay.style.background = settings.overlayColor; - $DOM.overlay.setAttribute('data-iziToast-ref', settings.ref); - if (!isNaN(settings.zindex) && settings.zindex !== null) { - $DOM.overlay.style.zIndex = settings.zindex - 1; - } - document.querySelector('body').appendChild($DOM.overlay); - } - - if (settings.overlayClose) { - - $DOM.overlay.removeEventListener('click', {}); - $DOM.overlay.addEventListener('click', function (e) { - that.hide(settings, $DOM.toast, 'overlay'); - }); - } else { - $DOM.overlay.removeEventListener('click', {}); - } - } - })(); - - // Inside animations - (function () { - if (settings.animateInside) { - $DOM.toast.classList.add(PLUGIN_NAME + '-animateInside'); - - var animationTimes = [200, 100, 300]; - if (settings.transitionIn == 'bounceInLeft' || settings.transitionIn == 'bounceInRight') { - animationTimes = [400, 200, 400]; - } - - if (settings.title.length > 0) { - setTimeout(function () { - $DOM.strong.classList.add('slideIn'); - }, animationTimes[0]); - } - - if (settings.message.length > 0) { - setTimeout(function () { - $DOM.p.classList.add('slideIn'); - }, animationTimes[1]); - } - - if (settings.icon || settings.iconUrl) { - setTimeout(function () { - $DOM.icon.classList.add('revealIn'); - }, animationTimes[2]); - } - - var counter = 150; - if (settings.buttons.length > 0 && $DOM.buttons) { - - setTimeout(function () { - - forEach($DOM.buttons.childNodes, function (element, index) { - - setTimeout(function () { - element.classList.add('revealIn'); - }, counter); - counter = counter + 150; - }); - - }, settings.inputs.length > 0 ? 150 : 0); - } - - if (settings.inputs.length > 0 && $DOM.inputs) { - counter = 150; - forEach($DOM.inputs.childNodes, function (element, index) { - - setTimeout(function () { - element.classList.add('revealIn'); - }, counter); - counter = counter + 150; - }); - } - } - })(); - - settings.onOpening.apply(null, [settings, $DOM.toast]); - - try { - var event = new CustomEvent(PLUGIN_NAME + '-opening', { detail: settings, bubbles: true, cancelable: true }); - document.dispatchEvent(event); - } catch (ex) { - console.warn(ex); - } - - setTimeout(function () { - - $DOM.toast.classList.remove(PLUGIN_NAME + '-opening'); - $DOM.toast.classList.add(PLUGIN_NAME + '-opened'); - - try { - var event = new CustomEvent(PLUGIN_NAME + '-opened', { detail: settings, bubbles: true, cancelable: true }); - document.dispatchEvent(event); - } catch (ex) { - console.warn(ex); - } - - settings.onOpened.apply(null, [settings, $DOM.toast]); - }, 1000); - - if (settings.drag) { - - if (ACCEPTSTOUCH) { - - $DOM.toast.addEventListener('touchstart', function (e) { - drag.startMoving(this, that, settings, e); - }, false); - - $DOM.toast.addEventListener('touchend', function (e) { - drag.stopMoving(this, e); - }, false); - } else { - - $DOM.toast.addEventListener('mousedown', function (e) { - e.preventDefault(); - drag.startMoving(this, that, settings, e); - }, false); - - $DOM.toast.addEventListener('mouseup', function (e) { - e.preventDefault(); - drag.stopMoving(this, e); - }, false); - } - } - - if (settings.closeOnEscape) { - - document.addEventListener('keyup', function (evt) { - evt = evt || window.event; - if (evt.keyCode == 27) { - that.hide(settings, $DOM.toast, 'esc'); - } - }); - } - - if (settings.closeOnClick) { - $DOM.toast.addEventListener('click', function (evt) { - that.hide(settings, $DOM.toast, 'toast'); - }); - } - - that.toast = $DOM.toast; - }; - return $iziToast; -}); \ No newline at end of file diff --git a/component/pear/module/extends/yaml.js b/component/pear/module/extends/yaml.js index bb448bc..ecf435d 100644 --- a/component/pear/module/extends/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/loading.js b/component/pear/module/loading.js deleted file mode 100644 index 5ff7ec9..0000000 --- a/component/pear/module/loading.js +++ /dev/null @@ -1,1930 +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; - }; - - exports(MOD_NAME, pearOper); -}) - diff --git a/component/pear/module/theme.js b/component/pear/module/theme.js index a684c85..92cbbf4 100644 --- a/component/pear/module/theme.js +++ b/component/pear/module/theme.js @@ -8,8 +8,7 @@ layui.define(["jquery","layer"], function (exports) { 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); + this.colorSet(color); if (target.frames.length == 0) return; for (var i = 0; i < target.frames.length; i++) { try { @@ -22,7 +21,7 @@ layui.define(["jquery","layer"], function (exports) { } } - theme.colorSet = function(color, second) { + theme.colorSet = function(color) { 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;}'; @@ -58,29 +57,13 @@ layui.define(["jquery","layer"], function (exports) { 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"){ @@ -88,7 +71,7 @@ layui.define(["jquery","layer"], function (exports) { 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 +'}' + 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); diff --git a/component/pear/pear.js b/component/pear/pear.js index 4e82145..1e5823f 100644 --- a/component/pear/pear.js +++ b/component/pear/pear.js @@ -12,25 +12,19 @@ layui.config({ admin: "core/admin", page: "core/page", tabPage: "core/tabPage", - menu: "core/menu", - messageCenter: "core/messageCenter", // 通知组件 + menu: "core/menu", echarts: "extends/echarts", echartsTheme: "extends/echartsTheme", yaml:"extends/yaml", nprogress: "extends/nprogress", - toast: "extends/toast", + toast: "extends/toast", + popup:"extends/popup", - common: "common", // 公共方法封装 - popup:"popup", // 弹层封装 - count:"count", // 数字滚动 - button: "button", // 加载按钮 - loading: "loading", // 加载组件 - convert:"convert", // 数据转换 - context: "context", // 上下文组件 - theme: "theme", // 主题转换 - fullscreen:"fullscreen", //全屏组件 + button: "button", + fullscreen:"fullscreen", + theme: "theme", }).use(['layer', 'theme'], function () { - layui.theme.changeTheme(window, false); + }); \ No newline at end of file diff --git a/index.html b/index.html index 3a2e6ef..14e4c7e 100644 --- a/index.html +++ b/index.html @@ -10,6 +10,8 @@ + + diff --git a/login.html b/login.html index dd946aa..810fa96 100644 --- a/login.html +++ b/login.html @@ -37,7 +37,7 @@
                                    • -
                                      diff --git a/view/result/error.html b/view/result/error.html index a226525..936647a 100644 --- a/view/result/error.html +++ b/view/result/error.html @@ -32,9 +32,9 @@
                                      - +     - +
                                      diff --git a/view/result/success.html b/view/result/success.html index 2f2a3a5..1174d8a 100644 --- a/view/result/success.html +++ b/view/result/success.html @@ -33,9 +33,9 @@
                                      - +     - +
                                      -- Gitee From e5dc2441d6cc495947176a56af1f36fd265799e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sat, 24 Jun 2023 03:20:07 +0800 Subject: [PATCH 07/67] update --- admin/css/admin.dark.css | 27 +++++++++++++- admin/css/other/result.css | 21 ++++++----- admin/css/overwrite.css | 4 +- view/exception/403.html | 45 ++++++++++++++++++++++ view/exception/404.html | 45 ++++++++++++++++++++++ view/exception/500.html | 45 ++++++++++++++++++++++ view/result/error.html | 76 ++++++++++++++++++++++++-------------- view/result/success.html | 58 +++++++++++++++-------------- 8 files changed, 253 insertions(+), 68 deletions(-) diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index e38e629..3dba8e5 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -79,6 +79,12 @@ background-color: #0a0a0a; } +/** button */ +.pear-admin-dark .layui-btn { + color: #ffffff; + border-color: #4C4D4F; +} + /** layer */ .pear-admin-dark .layui-layer { background-color: #141414; @@ -133,6 +139,25 @@ .pear-admin-dark .layui-menu .layui-menu-body-title, .pear-admin-dark .layui-menu .layui-menu-body-title:hover { - color: white; + color: #ffffff; background-color: #1d1e1f !important; +} + +/** 403 404 500*/ +.pear-admin-dark .pear-exception-title p{ + color: #E5EAF3 !important; +} + +/** 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; } \ No newline at end of file diff --git a/admin/css/other/result.css b/admin/css/other/result.css index d5ccaa3..393c464 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/overwrite.css b/admin/css/overwrite.css index 3d70461..645d244 100644 --- a/admin/css/overwrite.css +++ b/admin/css/overwrite.css @@ -1,7 +1,7 @@ .layui-dropdown { - border-radius: 4px; + border-radius: var(--global-border-radius); } .layui-input { - border-radius: 4px; + border-radius: var(--global-border-radius); } \ No newline at end of file diff --git a/view/exception/403.html b/view/exception/403.html index e69de29..0ab3271 100644 --- a/view/exception/403.html +++ b/view/exception/403.html @@ -0,0 +1,45 @@ +
                                      +
                                      +
                                      + +
                                      +
                                      +
                                      +

                                      403

                                      +
                                      +
                                      + 抱歉, 你无权访问该页面. +
                                      +
                                      +
                                      + + \ No newline at end of file diff --git a/view/exception/404.html b/view/exception/404.html index e69de29..a922f28 100644 --- a/view/exception/404.html +++ b/view/exception/404.html @@ -0,0 +1,45 @@ +
                                      +
                                      +
                                      + +
                                      +
                                      +
                                      +

                                      404

                                      +
                                      +
                                      + 抱歉, 你访问的页面不存在. +
                                      +
                                      +
                                      + + \ No newline at end of file diff --git a/view/exception/500.html b/view/exception/500.html index e69de29..028aaea 100644 --- a/view/exception/500.html +++ b/view/exception/500.html @@ -0,0 +1,45 @@ +
                                      +
                                      +
                                      + +
                                      +
                                      +
                                      +

                                      500

                                      +
                                      +
                                      + 抱歉, 服务器出错了. +
                                      +
                                      +
                                      + + \ No newline at end of file diff --git a/view/result/error.html b/view/result/error.html index 936647a..ddfa9b1 100644 --- a/view/result/error.html +++ b/view/result/error.html @@ -8,33 +8,55 @@ -
                                      -
                                      -
                                      -
                                      - -
                                      -

                                      提交失败

                                      -

                                      - 请核对并修改以下信息后,再重新提交。如果仅是简单操作,使用 Message 全局提示反馈即可。 - 本文字区域可以展示简单的补充说明,如果有类似展示 - “单据”的需求,下面这个灰色区域可以呈现比较复杂的内容。 -

                                      -
                                      - -
                                      -
                                      - -     - +
                                      +
                                      +
                                      +
                                      +
                                      + +
                                      +

                                      提交失败

                                      +

                                      + 请核对并修改以下信息后,再重新提交。如果仅是简单操作,使用 Message 全局提示反馈即可。 + 本文字区域可以展示简单的补充说明,如果有类似展示 + “单据”的需求,下面这个灰色区域可以呈现比较复杂的内容。 +

                                      +
                                      + +     + +
                                      +
                                      + 您提交的内容有如下错误: +
                                      +
                                      +
                                      +
                                      + +
                                      +
                                      您的账户已被冻结 + 立即解冻 +
                                      +
                                      +
                                      +
                                      + +
                                      +
                                      您的账户还不具备申请资格 + 立即升级 +
                                      +
                                      +
                                      +
                                      +
                                      diff --git a/view/result/success.html b/view/result/success.html index 1174d8a..c9f3ce1 100644 --- a/view/result/success.html +++ b/view/result/success.html @@ -8,34 +8,36 @@ -
                                      -
                                      -
                                      -
                                      - -
                                      -

                                      提交成功

                                      -

                                      - 提交结果页用于反馈一系列操作任务的处理结果, - 如果仅是简单操作,使用 Message 全局提示反馈即可。 - 本文字区域可以展示简单的补充说明,如果有类似展示 - “单据”的需求,下面这个灰色区域可以呈现比较复杂的内容。 -

                                      -
                                      - -
                                      -
                                      - -     - +
                                      +
                                      +
                                      +
                                      +
                                      + +
                                      +

                                      提交成功

                                      +

                                      + 提交结果页用于反馈一系列操作任务的处理结果, + 如果仅是简单操作,使用 Message 全局提示反馈即可。 + 本文字区域可以展示简单的补充说明,如果有类似展示 + “单据”的需求,下面这个灰色区域可以呈现比较复杂的内容。 +

                                      +
                                      + +     + +
                                      +
                                      + 已提交申请,等待部门审核。 +
                                      -- Gitee From 64cebad5a3e168f301e7c4bcb08152bcf6d2945a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sat, 24 Jun 2023 06:02:41 +0800 Subject: [PATCH 08/67] update --- admin/css/admin.css | 4 +- admin/css/admin.dark.css | 10 +- admin/css/other/console1.css | 136 ------- admin/css/other/console2.css | 116 ------ admin/css/other/icon.css | 531 ------------------------- admin/css/overwrite.css | 12 + admin/data/menu.json | 148 ++++++- component/pear/css/module/layout.css | 145 ++++--- component/pear/module/button.js | 4 + component/pear/module/extends/count.js | 37 ++ component/pear/module/theme.js | 15 +- component/pear/pear.js | 3 +- index.html | 2 - view/component/grid.html | 55 +++ view/console/console1.html | 1 - view/console/console2.html | 1 - 16 files changed, 329 insertions(+), 891 deletions(-) delete mode 100644 admin/css/other/console1.css delete mode 100644 admin/css/other/console2.css delete mode 100644 admin/css/other/icon.css create mode 100644 component/pear/module/extends/count.js create mode 100644 view/component/grid.html diff --git a/admin/css/admin.css b/admin/css/admin.css index f3141cc..48331da 100644 --- a/admin/css/admin.css +++ b/admin/css/admin.css @@ -452,8 +452,8 @@ body, width: 100%; height: 100%; padding: 4px; - top: -5px; - left: -5px; + top: -6px; + left: -6px; border: #5FB878 2px solid; opacity: 1; border-radius: 4px; diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index 3dba8e5..7c67d0b 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -50,7 +50,8 @@ } /** body */ -.pear-admin-dark .layui-body { +.pear-admin-dark .layui-body, +.pear-admin-dark .layui-body .pear-tab-loading { background-color: #0a0a0a !important; } @@ -79,6 +80,13 @@ background-color: #0a0a0a; } +/** theme */ +.pear-admin-dark .set-text, +.pear-admin-dark .select-color-title, +.pear-admin-dark .color-title { + color: #ffffff; +} + /** button */ .pear-admin-dark .layui-btn { color: #ffffff; diff --git a/admin/css/other/console1.css b/admin/css/other/console1.css deleted file mode 100644 index d2e0126..0000000 --- a/admin/css/other/console1.css +++ /dev/null @@ -1,136 +0,0 @@ -.top-panel { - border-radius: 4px; - text-align: center; -} - -.top-panel>.layui-card-body { - height: 60px; -} - -.top-panel-number { - line-height: 60px; - font-size: 29px; - border-right: 1px solid #eceff9; -} - -.top-panel-tips { - padding-left: 8px; - padding-top: 16px; - line-height: 30px; - font-size: 12px; -} - -.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 { - padding: 0 10px 10px; -} - -.layuiadmin-card-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 { - width: 32px; - height: 32px; - border-radius: 50%; - margin-right: 15px; -} - -.layuiadmin-card-status dd div.layui-status-img a { - width: 100%; - height: 100%; - display: inline-block; - text-align: center; - line-height: 32px; -} - -.layuiadmin-card-status dd div span { - color: #BBB; -} - -.layuiadmin-card-status dd div a { - color: #01AAED; -} - -.top-panel-tips svg { - margin-top: -12px; - width: 50px; - height: 50px; -} diff --git a/admin/css/other/console2.css b/admin/css/other/console2.css deleted file mode 100644 index 573471f..0000000 --- a/admin/css/other/console2.css +++ /dev/null @@ -1,116 +0,0 @@ -.pear-card { - width: 100%; - height: 66px; - background-color: #F8F8F8; - display: inline-block; - border-radius: 5px; - text-align: center; - 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 { - font-size: 30px; - height: 66px; - line-height: 66px; -} - -.layui-col-md3 { - text-align: center; -} - -.pear-card-title { - margin-top: 3px; -} - -.person img { - width: 90px; - height: 90px; - border-radius: 4px; - margin-top: 8px; - margin-left: 8px; -} - -.pear-card2 .count { - color: #51A351; - font-size: 30px; - margin-top: 12px; -} - -.pear-card2 .title { - color: gray; - font-size: 14px; - margin-top: 14px; -} - -.pear-card-status { - padding: 0 10px 10px; -} - -.pear-card-status 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 { - padding-bottom: 10px; - padding-top: 3px; -} - -.pear-card-status li>span { - color: #999; - height: 24px; - line-height: 24px; -} - -.pear-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/icon.css b/admin/css/other/icon.css deleted file mode 100644 index cd1a6ce..0000000 --- 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/overwrite.css b/admin/css/overwrite.css index 645d244..3c81731 100644 --- a/admin/css/overwrite.css +++ b/admin/css/overwrite.css @@ -4,4 +4,16 @@ .layui-input { border-radius: var(--global-border-radius); +} + +.layui-btn { + background-color: var(--global-primary-color); +} + +.layui-btn.layui-btn-primary { + background-color: transparent; +} + +.layui-card { + border-radius: var(--global-border-radius); } \ No newline at end of file diff --git a/admin/data/menu.json b/admin/data/menu.json index 1678e14..433382f 100644 --- a/admin/data/menu.json +++ b/admin/data/menu.json @@ -8,14 +8,14 @@ "title": "控制后台", "icon": "layui-icon layui-icon-console", "type": 1, - "openType": "_iframe", + "openType": "_component", "href": "view/console/console1.html" }, { "id": 13, "title": "数据分析", "icon": "layui-icon layui-icon-console", "type": 1, - "openType": "_iframe", + "openType": "_component", "href": "view/console/console2.html" }] }, @@ -26,11 +26,11 @@ "type": 0, "children": [{ "id": 21, - "title": "消息通知", + "title": "24 栅格", "icon": "layui-icon layui-icon-face-smile", "type": 1, - "openType": "_iframe", - "href": "view/components/toast.html" + "openType": "_component", + "href": "view/component/grid.html" } ] }, @@ -45,7 +45,7 @@ "title": "成功页面", "icon": "layui-icon layui-icon-face-smile", "type": 1, - "openType": "_iframe", + "openType": "_component", "href": "view/result/success.html" }, { @@ -53,7 +53,7 @@ "title": "失败页面", "icon": "layui-icon layui-icon-face-cry", "type": 1, - "openType": "_iframe", + "openType": "_component", "href": "view/result/error.html" } ] @@ -69,7 +69,7 @@ "title": "403", "icon": "layui-icon layui-icon-face-smile", "type": 1, - "openType": "_iframe", + "openType": "_component", "href": "view/exception/403.html" }, { @@ -77,7 +77,7 @@ "title": "404", "icon": "layui-icon layui-icon-face-cry", "type": 1, - "openType": "_iframe", + "openType": "_component", "href": "view/exception/404.html" }, { @@ -85,7 +85,7 @@ "title": "500", "icon": "layui-icon layui-icon-face-cry", "type": 1, - "openType": "_iframe", + "openType": "_component", "href": "view/exception/500.html" } ] @@ -101,11 +101,11 @@ "title": "普通路由", "icon": "layui-icon layui-icon-face-smile", "type": 1, - "openType": "_iframe", + "openType": "_component", "href": "view/result/success.html" }, { - "id": "b", + "id": "c", "title": "新建标签", "icon": "layui-icon layui-icon-face-cry", "type": 1, @@ -113,13 +113,133 @@ "href": "http://www.layui-vue.com" }, { - "id": "b", - "title": "弹窗页面", + "id": "d", + "title": "弹窗网页", "icon": "layui-icon layui-icon-face-cry", "type": 1, "openType": "_layer", "href": "http://www.layui-vue.com" } ] + }, + { + "id": "deep", + "title": "深度测试", + "icon": "layui-icon layui-icon-auz", + "type": 0, + "href": "", + "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/component/pear/css/module/layout.css b/component/pear/css/module/layout.css index 57914ce..94be5aa 100644 --- a/component/pear/css/module/layout.css +++ b/component/pear/css/module/layout.css @@ -146,103 +146,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%; } diff --git a/component/pear/module/button.js b/component/pear/module/button.js index c0eb62e..f590828 100644 --- a/component/pear/module/button.js +++ b/component/pear/module/button.js @@ -12,6 +12,8 @@ layui.define(['jquery'], function(exports) { }; /** + * @since Pear Admin 4.0 + * * Button start loading * */ button.prototype.load = function(opt) { @@ -41,6 +43,8 @@ layui.define(['jquery'], function(exports) { } /** + * @since Pear Admin 4.0 + * * Button stop loaded * */ button.prototype.stop = function(success) { diff --git a/component/pear/module/extends/count.js b/component/pear/module/extends/count.js new file mode 100644 index 0000000..fed5893 --- /dev/null +++ b/component/pear/module/extends/count.js @@ -0,0 +1,37 @@ +layui.define(['jquery', 'element'], function(exports) { + "use strict"; + + var MOD_NAME = 'count', + $ = layui.jquery, + element = layui.element; + + var count = new function() { + + this.up = function(targetEle, options) { + + options = options || {}; + + var $this = document.getElementById(targetEle), + time = options.time, + finalNum = options.num, + regulator = options.regulator, + step = finalNum / (time / regulator), + count = 0.00, + initial = 0; + + var timer = setInterval(function() { + count = count + step; + if (count >= finalNum) { + clearInterval(timer); + count = finalNum; + } + var t = count.toFixed(options.bit?options.bit:0);; + if (t == initial) return; + initial = t; + $this.innerHTML = initial; + }, 30); + } + + } + exports(MOD_NAME, count); +}); \ No newline at end of file diff --git a/component/pear/module/theme.js b/component/pear/module/theme.js index 92cbbf4..bd69e44 100644 --- a/component/pear/module/theme.js +++ b/component/pear/module/theme.js @@ -8,17 +8,10 @@ layui.define(["jquery","layer"], function (exports) { theme.changeTheme = function (target, autoHead) { this.autoHead = autoHead; var color = localStorage.getItem("theme-color-color"); + + document.documentElement.style.setProperty("--global-primary-color", color); + this.colorSet(color); - 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) { @@ -32,13 +25,11 @@ layui.define(["jquery","layer"], function (exports) { 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-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;}' diff --git a/component/pear/pear.js b/component/pear/pear.js index 1e5823f..2360acf 100644 --- a/component/pear/pear.js +++ b/component/pear/pear.js @@ -19,7 +19,8 @@ layui.config({ yaml:"extends/yaml", nprogress: "extends/nprogress", toast: "extends/toast", - popup:"extends/popup", + popup:"extends/popup", + count:"extends/count", button: "button", fullscreen:"fullscreen", diff --git a/index.html b/index.html index 14e4c7e..81bd758 100644 --- a/index.html +++ b/index.html @@ -110,8 +110,6 @@ }); }) - // 消息点击回调 - // admin.message(function(id, title, context, form) {}); }) diff --git a/view/component/grid.html b/view/component/grid.html new file mode 100644 index 0000000..a7a884b --- /dev/null +++ b/view/component/grid.html @@ -0,0 +1,55 @@ +
                                      +
                                      +
                                      基础使用
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      栅格偏移
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      自适应性
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      + + \ No newline at end of file diff --git a/view/console/console1.html b/view/console/console1.html index 281c686..e69de29 100644 --- a/view/console/console1.html +++ b/view/console/console1.html @@ -1 +0,0 @@ -
                                      \ No newline at end of file diff --git a/view/console/console2.html b/view/console/console2.html index 281c686..e69de29 100644 --- a/view/console/console2.html +++ b/view/console/console2.html @@ -1 +0,0 @@ -
                                      \ No newline at end of file -- Gitee From 9eee5cdb45fd54c5c1fdc37e269d04f88acca430 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sat, 24 Jun 2023 06:06:39 +0800 Subject: [PATCH 09/67] update --- admin/css/admin.dark.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index 7c67d0b..47aa4da 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -87,6 +87,11 @@ color: #ffffff; } +/** search */ +.pear-admin-dark .menu-search-no-data { + color: #ffffff; +} + /** button */ .pear-admin-dark .layui-btn { color: #ffffff; -- Gitee From 166125437869553b86b3417c6f3bebd015ef7f61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sat, 24 Jun 2023 07:10:36 +0800 Subject: [PATCH 10/67] update --- component/pear/module/core/admin.js | 2 +- index.html | 2 ++ view/component/grid.html | 5 ++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/component/pear/module/core/admin.js b/component/pear/module/core/admin.js index 71da7f4..35dadae 100644 --- a/component/pear/module/core/admin.js +++ b/component/pear/module/core/admin.js @@ -494,7 +494,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't
                                      - +
                                      ` diff --git a/index.html b/index.html index 81bd758..7f6ef29 100644 --- a/index.html +++ b/index.html @@ -10,6 +10,8 @@ + + diff --git a/view/component/grid.html b/view/component/grid.html index a7a884b..eb2b8a8 100644 --- a/view/component/grid.html +++ b/view/component/grid.html @@ -45,11 +45,10 @@ .grid-demo { padding: 10px; line-height: 60px; - border-radius: 2px; + border-radius: var(--global-border-radius); + background-color: var(--global-primary-color); text-align: center; color: #fff; - background-color: var(--global-primary-color); min-height: 60px; } - \ No newline at end of file -- Gitee From fa2f82d755b6c253120a9631b355bbe4c0080959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sat, 24 Jun 2023 15:08:27 +0800 Subject: [PATCH 11/67] update --- admin/css/admin.css | 2 +- admin/css/other/exception.css | 28 ++ admin/css/{overwrite.css => reset.css} | 0 admin/images/403.svg | 508 -------------------- admin/images/404.svg | 314 ------------ admin/images/500.svg | 208 -------- component/pear/css/module/layout.css | 4 +- component/pear/module/{core => }/admin.js | 0 component/pear/module/fullscreen.js | 7 +- component/pear/module/{core => }/menu.js | 0 component/pear/module/messageCenter.js | 0 component/pear/module/{core => }/page.js | 0 component/pear/module/{core => }/tabPage.js | 0 component/pear/pear.js | 18 +- index.html | 2 +- view/exception/403.html | 35 +- view/exception/404.html | 35 +- view/exception/500.html | 35 +- 18 files changed, 55 insertions(+), 1141 deletions(-) create mode 100644 admin/css/other/exception.css rename admin/css/{overwrite.css => reset.css} (100%) delete mode 100644 admin/images/403.svg delete mode 100644 admin/images/404.svg delete mode 100644 admin/images/500.svg rename component/pear/module/{core => }/admin.js (100%) rename component/pear/module/{core => }/menu.js (100%) create mode 100644 component/pear/module/messageCenter.js rename component/pear/module/{core => }/page.js (100%) rename component/pear/module/{core => }/tabPage.js (100%) diff --git a/admin/css/admin.css b/admin/css/admin.css index 48331da..352b91d 100644 --- a/admin/css/admin.css +++ b/admin/css/admin.css @@ -4,10 +4,10 @@ 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; } diff --git a/admin/css/other/exception.css b/admin/css/other/exception.css new file mode 100644 index 0000000..d3b0124 --- /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/overwrite.css b/admin/css/reset.css similarity index 100% rename from admin/css/overwrite.css rename to admin/css/reset.css diff --git a/admin/images/403.svg b/admin/images/403.svg deleted file mode 100644 index 610f136..0000000 --- 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 5531d05..0000000 --- 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 de723b1..0000000 --- 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/component/pear/css/module/layout.css b/component/pear/css/module/layout.css index 94be5aa..de4a778 100644 --- a/component/pear/css/module/layout.css +++ b/component/pear/css/module/layout.css @@ -34,8 +34,8 @@ body::-webkit-scrollbar-corner { background: #f6f6f6; } -.pear-row::before, -.pear-row::after { +.pear-row::after, +.pear-row::before { content: ""; display: table; clear: both; diff --git a/component/pear/module/core/admin.js b/component/pear/module/admin.js similarity index 100% rename from component/pear/module/core/admin.js rename to component/pear/module/admin.js diff --git a/component/pear/module/fullscreen.js b/component/pear/module/fullscreen.js index 234c81b..807c767 100644 --- a/component/pear/module/fullscreen.js +++ b/component/pear/module/fullscreen.js @@ -1,10 +1,12 @@ 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(['jquery', 'element'], 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(['jquery', 'element'], defer.resolve("返回值"); return defer.promise(); } + this.fullClose = function(){ if(this.isFullscreen()) { if (document.exitFullscreen) { @@ -43,6 +47,7 @@ layui.define(['jquery', 'element'], defer.resolve("返回值"); return defer.promise(); } + this.isFullscreen = function(){ return document.fullscreenElement || document.msFullscreenElement || diff --git a/component/pear/module/core/menu.js b/component/pear/module/menu.js similarity index 100% rename from component/pear/module/core/menu.js rename to component/pear/module/menu.js diff --git a/component/pear/module/messageCenter.js b/component/pear/module/messageCenter.js new file mode 100644 index 0000000..e69de29 diff --git a/component/pear/module/core/page.js b/component/pear/module/page.js similarity index 100% rename from component/pear/module/core/page.js rename to component/pear/module/page.js diff --git a/component/pear/module/core/tabPage.js b/component/pear/module/tabPage.js similarity index 100% rename from component/pear/module/core/tabPage.js rename to component/pear/module/tabPage.js diff --git a/component/pear/pear.js b/component/pear/pear.js index 2360acf..2750858 100644 --- a/component/pear/pear.js +++ b/component/pear/pear.js @@ -9,22 +9,20 @@ layui.config({ base: rootPath + "module/", version: "3.40.0" }).extend({ - admin: "core/admin", - page: "core/page", - tabPage: "core/tabPage", - menu: "core/menu", - + admin: "admin", + page: "page", + tabPage: "tabPage", + menu: "menu", + fullscreen:"fullscreen", + button: "button", + theme: "theme", echarts: "extends/echarts", echartsTheme: "extends/echartsTheme", yaml:"extends/yaml", nprogress: "extends/nprogress", toast: "extends/toast", popup:"extends/popup", - count:"extends/count", - - button: "button", - fullscreen:"fullscreen", - theme: "theme", + count:"extends/count", }).use(['layer', 'theme'], function () { diff --git a/index.html b/index.html index 7f6ef29..4db9ae7 100644 --- a/index.html +++ b/index.html @@ -13,7 +13,7 @@ - + diff --git a/view/exception/403.html b/view/exception/403.html index 0ab3271..243d126 100644 --- a/view/exception/403.html +++ b/view/exception/403.html @@ -1,3 +1,5 @@ + +
                                      @@ -11,35 +13,4 @@ 抱歉, 你无权访问该页面.
                                      -
                                      - - \ No newline at end of file +
                                      \ No newline at end of file diff --git a/view/exception/404.html b/view/exception/404.html index a922f28..71e65cc 100644 --- a/view/exception/404.html +++ b/view/exception/404.html @@ -1,3 +1,5 @@ + +
                                      @@ -11,35 +13,4 @@ 抱歉, 你访问的页面不存在.
                                      -
                                      - - \ No newline at end of file +
                                      \ No newline at end of file diff --git a/view/exception/500.html b/view/exception/500.html index 028aaea..d374b81 100644 --- a/view/exception/500.html +++ b/view/exception/500.html @@ -1,3 +1,5 @@ + +
                                      @@ -11,35 +13,4 @@ 抱歉, 服务器出错了.
                                      -
                                      - - \ No newline at end of file +
                                      \ No newline at end of file -- Gitee From c62f365b30fba0c142499a9fc39ffa0e327befe9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sat, 24 Jun 2023 18:01:35 +0800 Subject: [PATCH 12/67] update --- admin/data/message.json | 90 +++++++++++++++++++ component/pear/css/module/messageCenter.css | 39 ++++++++ component/pear/css/pear.css | 1 + component/pear/module/admin.js | 38 +++++--- component/pear/module/messageCenter.js | 98 +++++++++++++++++++++ component/pear/pear.js | 1 + index.html | 2 +- 7 files changed, 256 insertions(+), 13 deletions(-) create mode 100644 admin/data/message.json create mode 100644 component/pear/css/module/messageCenter.css diff --git a/admin/data/message.json b/admin/data/message.json new file mode 100644 index 0000000..8b9b30d --- /dev/null +++ b/admin/data/message.json @@ -0,0 +1,90 @@ +[{ + "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/component/pear/css/module/messageCenter.css b/component/pear/css/module/messageCenter.css new file mode 100644 index 0000000..0ab9ef3 --- /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/pear.css b/component/pear/css/pear.css index 74c1fd7..22d4ceb 100644 --- a/component/pear/css/pear.css +++ b/component/pear/css/pear.css @@ -1,6 +1,7 @@ @import url("../../layui/css/layui.css"); @import url("../font/iconfont.css"); @import url("module/nprogress.css"); +@import url("module/messageCenter.css"); @import url("module/layout.css"); @import url("module/menu.css"); @import url("module/page.css"); diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index 35dadae..1db34b1 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -1,4 +1,4 @@ -layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'theme', 'fullscreen'], +layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'theme', 'fullscreen', 'messageCenter'], function (exports) { "use strict"; @@ -6,20 +6,26 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't form = layui.form, yaml = layui.yaml, page = layui.page, - tabPage = layui.tabPage, menu = layui.menu, - - pearTheme = layui.theme, - fullscreen = layui.fullscreen; + messageCenter = layui.messageCenter, + fullscreen = layui.fullscreen, + tabPage = layui.tabPage, + theme = layui.theme; var bodyFrame; + var sideMenu; + var bodyTab; + var config; + var logout = function () { }; - var msgInstance; + var body = $('body'); + var msgInstance; + var pearAdmin = new function () { this.configuration = {}; @@ -93,6 +99,14 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't } } + this.messageRender = function(options) { + msgInstance = 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); @@ -217,7 +231,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't 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)); + theme.changeTheme(window, isAutoHead(config)); var menu = localStorage.getItem("theme-menu"); if (menu === null) { @@ -544,7 +558,6 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't $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; @@ -778,7 +791,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't form.on('switch(auto-head)', function (data) { localStorage.setItem("auto-head", this.checked); - pearTheme.changeTheme(window, this.checked); + theme.changeTheme(window, this.checked); }) form.on('switch(banner)', function (data) { @@ -846,10 +859,10 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't localStorage.setItem("theme-header", theme); if (theme == "auto-theme") { localStorage.setItem("auto-head", true); - pearTheme.changeTheme(window, true); + theme.changeTheme(window, true); } else { localStorage.setItem("auto-head", false); - pearTheme.changeTheme(window, false); + theme.changeTheme(window, false); } pearAdmin.headerSkin(theme); }); @@ -862,7 +875,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't 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)); + theme.changeTheme(window, isAutoHead(config)); }); function applyConfig(param) { @@ -871,6 +884,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't pearAdmin.menuRender(param); pearAdmin.bodyRender(param); pearAdmin.themeRender(param); + pearAdmin.messageRender(param); pearAdmin.keepLoad(param); } diff --git a/component/pear/module/messageCenter.js b/component/pear/module/messageCenter.js index e69de29..c041d25 100644 --- a/component/pear/module/messageCenter.js +++ b/component/pear/module/messageCenter.js @@ -0,0 +1,98 @@ +layui.define(['table', 'jquery', 'element', 'dropdown'], function (exports) { + "use strict"; + + var MOD_NAME = 'messageCenter', + $ = layui.jquery, + dropdown = layui.dropdown, + 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); + + $(`${opt.elem}`).append(`
                                    • + +
                                    • `); + + var messageContent = createHtml(option); + + dropdown.render({ + elem: option.elem, + align: "center", + content: messageContent, + }) + } + + 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 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 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/pear.js b/component/pear/pear.js index 2750858..4643b8e 100644 --- a/component/pear/pear.js +++ b/component/pear/pear.js @@ -14,6 +14,7 @@ layui.config({ tabPage: "tabPage", menu: "menu", fullscreen:"fullscreen", + messageCenter: "messageCenter", button: "button", theme: "theme", echarts: "extends/echarts", diff --git a/index.html b/index.html index 4db9ae7..970ad9e 100644 --- a/index.html +++ b/index.html @@ -38,8 +38,8 @@
                                      • -
                                      • +
                                      • -- Gitee From 92db961026c3c1b6fcb41706ed5be25704ef48c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sat, 24 Jun 2023 23:16:06 +0800 Subject: [PATCH 13/67] update --- component/pear/module/messageCenter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/component/pear/module/messageCenter.js b/component/pear/module/messageCenter.js index c041d25..e0c5b80 100644 --- a/component/pear/module/messageCenter.js +++ b/component/pear/module/messageCenter.js @@ -68,7 +68,7 @@ layui.define(['table', 'jquery', 'element', 'dropdown'], function (exports) { $.each(option.data, function (i, item) { - noticeTitle += '
                                      • ' + item.title + '
                                      • '; + noticeTitle += `
                                      • ${item.title}
                                      • `; noticeContent += '
                                        '; -- Gitee From 27ff0b0d6347f7144cad6a80b659d1a9ae33beeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sun, 25 Jun 2023 00:10:41 +0800 Subject: [PATCH 14/67] update --- admin/data/message.json | 190 +++++++++++++------------ component/pear/module/messageCenter.js | 48 +++---- 2 files changed, 119 insertions(+), 119 deletions(-) diff --git a/admin/data/message.json b/admin/data/message.json index 8b9b30d..b95a924 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": [] -} -] \ No newline at end of file + "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/component/pear/module/messageCenter.js b/component/pear/module/messageCenter.js index e0c5b80..9ac7118 100644 --- a/component/pear/module/messageCenter.js +++ b/component/pear/module/messageCenter.js @@ -3,15 +3,14 @@ layui.define(['table', 'jquery', 'element', 'dropdown'], function (exports) { var MOD_NAME = 'messageCenter', $ = layui.jquery, - dropdown = layui.dropdown, - element = layui.element; + element = layui.element, + 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, @@ -19,21 +18,21 @@ layui.define(['table', 'jquery', 'element', 'dropdown'], function (exports) { data: opt.data } if (option.url != false) { - option.data = getData(option.url); - - $(`${opt.elem}`).append(`
                                      • - -
                                      • `); - - var messageContent = createHtml(option); - - dropdown.render({ - elem: option.elem, - align: "center", - content: messageContent, - }) + $.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); } @@ -48,17 +47,6 @@ layui.define(['table', 'jquery', 'element', 'dropdown'], function (exports) { }) } - /** 同 步 请 求 获 取 数 据 */ - 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; @@ -68,9 +56,9 @@ layui.define(['table', 'jquery', 'element', 'dropdown'], function (exports) { $.each(option.data, function (i, item) { - noticeTitle += `
                                      • ${item.title}
                                      • `; + noticeTitle += `
                                      • ${item.title}
                                      • `; noticeContent += '
                                        '; - + $.each(item.children, function (i, note) { count++; -- Gitee From 9785ee25378bc161e748713bebc488778cf9aeaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sun, 25 Jun 2023 00:43:02 +0800 Subject: [PATCH 15/67] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a07beda..524c96e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,8 @@ ### 更新日志 -[优化] 移动端 collapse 样式,由圆形调整为正方形。 -[重构] frame.js 组件, \ No newline at end of file +- [优化] 移动端 collapse 样式,由圆形调整为正方形。 +- [重构] frame.js 组件,重命名为 page.js, 移除 iframe 嵌套。 +- [重构] tab.js 组件,重命名为 tabPage.js, 移除 iframe 嵌套。 +- [新增] admin.js 模块 setConfigurationProvider 方法,用于自定义 configuration 来源。 +- [优化] admin.js 模块 logout 方法,返回值由 boolean 调整为 Promise 类型。 +- [新增] 夜间模式适配,目前已完成整体框架兼容,layui 待完成。 \ No newline at end of file -- Gitee From 252c5116dcea3277230e149afb2d2e85967ed4d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sun, 25 Jun 2023 09:24:13 +0800 Subject: [PATCH 16/67] update --- admin/css/other/console1.css | 136 +++++++++ admin/css/other/console2.css | 115 ++++++++ component/pear/module/admin.js | 6 +- component/pear/module/theme.js | 2 + view/console/console1.html | 522 +++++++++++++++++++++++++++++++++ view/console/console2.html | 475 ++++++++++++++++++++++++++++++ 6 files changed, 1253 insertions(+), 3 deletions(-) create mode 100644 admin/css/other/console1.css create mode 100644 admin/css/other/console2.css diff --git a/admin/css/other/console1.css b/admin/css/other/console1.css new file mode 100644 index 0000000..164d208 --- /dev/null +++ b/admin/css/other/console1.css @@ -0,0 +1,136 @@ +.top-panel { + border-radius: 4px; + text-align: center; +} + +.top-panel>.layui-card-body { + height: 60px; +} + +.top-panel-number { + line-height: 60px; + font-size: 29px; + border-right: 1px solid #eceff9; +} + +.top-panel-tips { + padding-left: 8px; + padding-top: 16px; + line-height: 30px; + font-size: 12px; +} + +.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 { + padding: 0 10px 10px; +} + +.layuiadmin-card-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 { + width: 32px; + height: 32px; + border-radius: 50%; + margin-right: 15px; +} + +.layuiadmin-card-status dd div.layui-status-img a { + width: 100%; + height: 100%; + display: inline-block; + text-align: center; + line-height: 32px; +} + +.layuiadmin-card-status dd div span { + color: #BBB; +} + +.layuiadmin-card-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/console2.css new file mode 100644 index 0000000..fbf6c89 --- /dev/null +++ b/admin/css/other/console2.css @@ -0,0 +1,115 @@ +.pear-card { + width: 100%; + height: 66px; + background-color: #F8F8F8; + display: inline-block; + text-align: center; + border-radius: 5px; + 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 { + font-size: 30px; + height: 66px; + line-height: 66px; +} + +.pear-card-title { + margin-top: 3px; + width: 100%; + display: inline-block; + text-align: center; +} + +.person img { + width: 90px; + height: 90px; + border-radius: 4px; + margin-top: 8px; + margin-left: 8px; +} + +.pear-card2 .count { + color: #51A351; + font-size: 30px; + margin-top: 12px; +} + +.pear-card2 .title { + color: gray; + font-size: 14px; + margin-top: 14px; +} + +.pear-card-status { + padding: 0 10px 10px; +} + +.pear-card-status 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 { + padding-bottom: 10px; + padding-top: 3px; +} + +.pear-card-status li>span { + color: #999; + height: 24px; + line-height: 24px; +} + +.pear-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/component/pear/module/admin.js b/component/pear/module/admin.js index 1db34b1..bede8e4 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -853,10 +853,10 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't }); body.on('click', '[data-select-header]', function () { - var theme = $(this).attr('data-select-header'); + var headerColor = $(this).attr('data-select-header'); $('[data-select-header]').removeClass("layui-this"); $(this).addClass("layui-this"); - localStorage.setItem("theme-header", theme); + localStorage.setItem("theme-header", headerColor); if (theme == "auto-theme") { localStorage.setItem("auto-head", true); theme.changeTheme(window, true); @@ -864,7 +864,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't localStorage.setItem("auto-head", false); theme.changeTheme(window, false); } - pearAdmin.headerSkin(theme); + pearAdmin.headerSkin(headerColor); }); body.on('click', '.select-color-item', function () { diff --git a/component/pear/module/theme.js b/component/pear/module/theme.js index bd69e44..0c4a109 100644 --- a/component/pear/module/theme.js +++ b/component/pear/module/theme.js @@ -6,7 +6,9 @@ layui.define(["jquery","layer"], function (exports) { theme.autoHead = false; theme.changeTheme = function (target, autoHead) { + this.autoHead = autoHead; + var color = localStorage.getItem("theme-color-color"); document.documentElement.style.setProperty("--global-primary-color", color); diff --git a/view/console/console1.html b/view/console/console1.html index e69de29..8d9c481 100644 --- a/view/console/console1.html +++ b/view/console/console1.html @@ -0,0 +1,522 @@ + + + + + + 控制后台 + + + + + + + +
                                        +
                                        +
                                        +
                                        +
                                        今日访问
                                        +
                                        +
                                        +
                                        + 0 +
                                        +
                                        + + + + + + + + + + +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        提交次数
                                        +
                                        +
                                        +
                                        + 0 +
                                        +
                                        + + + + + + + + + + + + + +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        下载数量
                                        +
                                        +
                                        +
                                        + 0 +
                                        +
                                        + + + + + + + + + + +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        流量统计
                                        +
                                        +
                                        +
                                        + 0 +
                                        +
                                        + + + + + + + + + + + +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        动态
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +

                                        七彩枫叶 在 Pear Admin 专区 回答问题 +

                                        + 几秒前 +
                                        +
                                        +
                                        +
                                        +
                                        +

                                        简 在 Pear + Admin 专区 进行了 提问 +

                                        + 2天前 +
                                        +
                                        +
                                        +
                                        +
                                        +

                                        恒宇少年 将 Pear Admin 更新至 + 2.3.0 + 版本

                                        + 7天前 +
                                        +
                                        +
                                        +
                                        +
                                        +

                                        如花 在 Pear Admin 社区 发布了 建议

                                        + 7天前 +
                                        +
                                        +
                                        +
                                        +
                                        +

                                        就眠仪式 在 Pear Admin 社区 发布了 建议

                                        + 8天前 +
                                        +
                                        +
                                        +
                                        +
                                        +

                                        贤心 在 Pear Admin 专区 进行了 提问 +

                                        + 8天前 +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        更 新
                                        +
                                        +
                                          +
                                        • 优化代码格式2021-09-06 + 11:28
                                        • +
                                        • 新增消息组件2021-09-06 + 11:28
                                        • +
                                        • 移动端兼容2021-09-06 + 11:28
                                        • +
                                        • 系统布局优化2021-09-06 + 11:28
                                        • +
                                        • 兼容多系统菜单模式2021-09-06 + 11:28
                                        • +
                                        • 兼容多标签页切换2021-09-06 + 11:28
                                        • +
                                        • 扩展下拉组件2021-09-06 + 11:28
                                        • +
                                        • 扩展卡片样式2021-09-06 + 11:28
                                        • +
                                        +
                                        +
                                        +
                                        +
                                        + 链接 +
                                        +
                                        + 官 + 网 +
                                        + 下 载 +
                                        + 后 端 +
                                        +
                                        +
                                        +
                                        + 寄语 +
                                        +
                                        + 原想将澎湃的爱平平稳稳放置你手心,奈何我徒有一股蛮劲,只顾向你跑去,一个不稳跌的满身脏兮兮。试图爬起的我, + 心想你会不会笑我 " 献爱献的这样笨拙, 怎么不知避开爱里的埋伏 " +
                                        +
                                        +
                                        +
                                        +
                                        + + + + \ No newline at end of file diff --git a/view/console/console2.html b/view/console/console2.html index e69de29..9e1b870 100644 --- a/view/console/console2.html +++ b/view/console/console2.html @@ -0,0 +1,475 @@ + + + + + + 数据分析 + + + + + + + +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        + 快捷菜单 +
                                        +
                                        +
                                        +
                                        +
                                        + +
                                        + 主页 +
                                        +
                                        +
                                        + +
                                        + 弹层 +
                                        +
                                        +
                                        + +
                                        + 聊天 +
                                        +
                                        +
                                        + +
                                        + 相机 +
                                        +
                                        +
                                        + +
                                        + 表单 +
                                        +
                                        +
                                        + +
                                        + 安全 +
                                        +
                                        +
                                        + +
                                        + 公告 +
                                        +
                                        +
                                        + +
                                        + 更多 +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        + 代办任务 +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        待审评论
                                        +
                                        21
                                        +
                                        +
                                        +
                                        +
                                        +
                                        待审帖子
                                        +
                                        32
                                        +
                                        +
                                        +
                                        +
                                        +
                                        待审文章
                                        +
                                        14
                                        +
                                        +
                                        +
                                        +
                                        +
                                        待审用户
                                        +
                                        63
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        留言板
                                        +
                                        +
                                          +
                                        • +

                                          要不要作为我的家人,搬来我家。

                                          + 12月25日 19:92 + 回复 +
                                        • +
                                        • +

                                          快乐的时候不敢尽兴,频繁警戒自己保持清醒。

                                          + 4月30日 22:43 + 回复 +
                                        • +
                                        • +

                                          夏天真的来了,尽管它还有些犹豫。

                                          + 4月30日 22:43 + 回复 +
                                        • +
                                        • +

                                          看似不可达到的高度,只要坚持不懈就可能到达。

                                          + 4月30日 22:43 + 回复 +
                                        • +
                                        • +

                                          当浑浊变成了一种常态,那么清白就成了一种罪过。

                                          + 4月30日 22:43 + 回复 +
                                        • +
                                        • +

                                          那是一种内在的东西,他们到达不了,也无法触及!

                                          + 5月12日 01:25 + 回复 +
                                        • + +
                                        • +

                                          希望是一个好东西,也许是最好的,好东西是不会消亡的!

                                          + 6月11日 15:33 + 回复 +
                                        • +
                                        • +

                                          一切都在不可避免的走向庸俗。

                                          + 2月09日 13:40 + 回复 +
                                        • +
                                        • +

                                          路上没有灯火的时候,就点亮自己的头颅。

                                          + 3月11日 12:30 + 回复 +
                                        • + +
                                        • +

                                          我们应该不虚度一生,应该能够说:"我已经做了我能做的事。"

                                          + 4月30日 22:43 + 回复 +
                                        • + +
                                        • +

                                          接近,是我对一切的态度,是我对一切态度的距离

                                          + 6月11日 15:33 + 回复 +
                                        • +
                                        • +

                                          没有锚的船当然也可以航行,只是紧张充满你的一生。

                                          + 2月09日 13:40 + 回复 +
                                        • +
                                        +
                                        +
                                        +
                                        +
                                        +
                                        + + + + \ No newline at end of file -- Gitee From 784b2fcb1b1419711add7466ea2b4470eebeedab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sun, 25 Jun 2023 12:49:57 +0800 Subject: [PATCH 17/67] update --- admin/css/admin.dark.css | 15 +++++++++++++++ view/console/console1.html | 5 ----- view/console/console2.html | 3 --- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index 47aa4da..1ff6767 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -98,6 +98,21 @@ border-color: #4C4D4F; } +/** console1 console2 */ +.pear-card, +.pear-card2 { + background-color: #0a0a0a !important; + color: #ffffff !important; +} + +.pear-card:hover { + box-shadow: none !important; +} + +.pear-card-title { + color: #ffffff !important; +} + /** layer */ .pear-admin-dark .layui-layer { background-color: #141414; diff --git a/view/console/console1.html b/view/console/console1.html index 8d9c481..8c86bab 100644 --- a/view/console/console1.html +++ b/view/console/console1.html @@ -369,7 +369,6 @@ const colorList = ["#9E87FF", '#73DDFF', '#fe9a8b', '#F56948', '#9E87FF'] var option1 = { - backgroundColor: '#fff', tooltip: { show: false }, @@ -391,10 +390,8 @@ }, axisLabel: { margin: 10, - //textStyle: { fontSize: 14, color: 'rgba(#999)' - //} }, splitLine: { show: true, @@ -418,10 +415,8 @@ }, axisLabel: { margin: 10, - //textStyle: { fontSize: 14, color: '#999' - //} }, splitLine: { show: false diff --git a/view/console/console2.html b/view/console/console2.html index 9e1b870..2058940 100644 --- a/view/console/console2.html +++ b/view/console/console2.html @@ -235,8 +235,6 @@ }) }) - - let bgColor = "#fff"; let color = [ "#0090FF", "#36CE9E", @@ -306,7 +304,6 @@ } var option2 = { - backgroundColor: bgColor, color: color, legend: { right: 10, -- Gitee From 99e9584954d25aed89e39b1e875196841c5d1bf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sun, 25 Jun 2023 13:22:04 +0800 Subject: [PATCH 18/67] update --- admin/css/admin.dark.css | 64 +++++++++++++++++++++++++++++--------- view/console/console1.html | 37 ++++------------------ view/console/console2.html | 36 +++++++-------------- 3 files changed, 67 insertions(+), 70 deletions(-) diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index 1ff6767..b8412fd 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -98,21 +98,6 @@ border-color: #4C4D4F; } -/** console1 console2 */ -.pear-card, -.pear-card2 { - background-color: #0a0a0a !important; - color: #ffffff !important; -} - -.pear-card:hover { - box-shadow: none !important; -} - -.pear-card-title { - color: #ffffff !important; -} - /** layer */ .pear-admin-dark .layui-layer { background-color: #141414; @@ -141,6 +126,10 @@ color: #ffffff; } +.pear-admin-dark .layui-card .layui-card-body { + color: #ffffff; +} + /** input */ .pear-admin-dark .layui-input { background-color: transparent; @@ -171,6 +160,51 @@ background-color: #1d1e1f !important; } +/** console1 console2 */ +.pear-admin-dark .top-panel-number { + color: #ffffff !important; + border-color: #414243 !important; +} + +.pear-admin-dark .list .list-item { + color: #ffffff; +} + +.pear-admin-dark .list .list-item:hover { + background-color: #0a0a0a !important; +} + +.pear-admin-dark .layuiadmin-card-status p { + color: #ffffff !important; +} + +.pear-admin-dark .layuiadmin-card-status dd { + border-color: rgba(0, 0, 0, .40) !important; +} + +.pear-admin-dark .pear-card, +.pear-admin-dark .pear-card2 { + background-color: #0a0a0a !important; + color: #ffffff !important; +} + +.pear-admin-dark .pear-card:hover { + box-shadow: none !important; +} + +.pear-admin-dark .pear-card-title { + color: #ffffff !important; +} + +.pear-admin-dark .pear-card-status li p { + color: #ffffff; +} + +.pear-admin-dark .pear-card-status li { + border-color: rgba(0, 0, 0, .40) !important; +} + + /** 403 404 500*/ .pear-admin-dark .pear-exception-title p{ color: #E5EAF3 !important; diff --git a/view/console/console1.html b/view/console/console1.html index 8c86bab..9d387b0 100644 --- a/view/console/console1.html +++ b/view/console/console1.html @@ -304,16 +304,16 @@
                                        @@ -323,7 +323,7 @@
                                      原想将澎湃的爱平平稳稳放置你手心,奈何我徒有一股蛮劲,只顾向你跑去,一个不稳跌的满身脏兮兮。试图爬起的我, - 心想你会不会笑我 " 献爱献的这样笨拙, 怎么不知避开爱里的埋伏 " + 心想你会不会笑我 " 献爱献的这样笨拙, 怎么不知避开爱里的埋伏。"
                                      @@ -439,32 +439,16 @@ y2: 1, colorStops: [{ offset: 0, - color: 'rgba(59,102,246)' // 0% 处的颜色 + color: 'rgba(59,102,246)' }, { offset: 1, - color: 'rgba(118,237,252)' // 100% 处的颜色 + color: 'rgba(118,237,252)' }] }, shadowBlur: 4, shadowColor: 'rgba(69,126,247,.2)', shadowOffsetY: 4 }, - areaStyle: { - color: { - type: 'linear', - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [{ - offset: 0, - color: 'rgba(227,233,250,.9)' // 0% 处的颜色 - }, { - offset: 1, - color: 'rgba(248,251,252,.3)' // 100% 处的颜色 - }] - } - }, smooth: true, data: [20, 56, 17, 40, 68, 42] }, { @@ -486,15 +470,6 @@ shadowColor: 'rgba(253,121,128,.2)', shadowOffsetY: 4 }, - areaStyle: { - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ - offset: 0, - color: 'rgba(255,84,108,.15)' - }, { - offset: 1, - color: 'rgba(252,140,118,0)' - }], false), - }, smooth: true, data: [20, 71, 8, 50, 57, 32] },] diff --git a/view/console/console2.html b/view/console/console2.html index 2058940..0c702ef 100644 --- a/view/console/console2.html +++ b/view/console/console2.html @@ -136,77 +136,65 @@
                                    • 要不要作为我的家人,搬来我家。

                                      12月25日 19:92 - 回复 + 回复
                                    • 快乐的时候不敢尽兴,频繁警戒自己保持清醒。

                                      4月30日 22:43 - 回复 + 回复
                                    • 夏天真的来了,尽管它还有些犹豫。

                                      4月30日 22:43 - 回复 + 回复
                                    • 看似不可达到的高度,只要坚持不懈就可能到达。

                                      4月30日 22:43 - 回复 + 回复
                                    • 当浑浊变成了一种常态,那么清白就成了一种罪过。

                                      4月30日 22:43 - 回复 + 回复
                                    • 那是一种内在的东西,他们到达不了,也无法触及!

                                      5月12日 01:25 - 回复 + 回复
                                    • 希望是一个好东西,也许是最好的,好东西是不会消亡的!

                                      6月11日 15:33 - 回复 + 回复
                                    • 一切都在不可避免的走向庸俗。

                                      2月09日 13:40 - 回复 + 回复
                                    • 路上没有灯火的时候,就点亮自己的头颅。

                                      3月11日 12:30 - 回复 + 回复
                                    • 我们应该不虚度一生,应该能够说:"我已经做了我能做的事。"

                                      4月30日 22:43 - 回复 + 回复
                                    • 接近,是我对一切的态度,是我对一切态度的距离

                                      6月11日 15:33 - 回复 + 回复
                                    • 没有锚的船当然也可以航行,只是紧张充满你的一生。

                                      2月09日 13:40 - 回复 + 回复
                                    -- Gitee From c0d5218dfc909f0a54871301ff54283de95871c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sun, 25 Jun 2023 13:38:48 +0800 Subject: [PATCH 19/67] update --- admin/css/admin.dark.css | 55 +--- admin/css/other/console1.css | 136 ---------- admin/css/other/console2.css | 115 -------- admin/css/other/exception.css | 8 +- view/console/console1.html | 492 ---------------------------------- view/console/console2.html | 460 ------------------------------- view/exception/403.html | 8 +- view/exception/404.html | 8 +- view/exception/500.html | 8 +- 9 files changed, 21 insertions(+), 1269 deletions(-) delete mode 100644 admin/css/other/console1.css delete mode 100644 admin/css/other/console2.css diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index b8412fd..fb053db 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -160,56 +160,6 @@ background-color: #1d1e1f !important; } -/** console1 console2 */ -.pear-admin-dark .top-panel-number { - color: #ffffff !important; - border-color: #414243 !important; -} - -.pear-admin-dark .list .list-item { - color: #ffffff; -} - -.pear-admin-dark .list .list-item:hover { - background-color: #0a0a0a !important; -} - -.pear-admin-dark .layuiadmin-card-status p { - color: #ffffff !important; -} - -.pear-admin-dark .layuiadmin-card-status dd { - border-color: rgba(0, 0, 0, .40) !important; -} - -.pear-admin-dark .pear-card, -.pear-admin-dark .pear-card2 { - background-color: #0a0a0a !important; - color: #ffffff !important; -} - -.pear-admin-dark .pear-card:hover { - box-shadow: none !important; -} - -.pear-admin-dark .pear-card-title { - color: #ffffff !important; -} - -.pear-admin-dark .pear-card-status li p { - color: #ffffff; -} - -.pear-admin-dark .pear-card-status li { - border-color: rgba(0, 0, 0, .40) !important; -} - - -/** 403 404 500*/ -.pear-admin-dark .pear-exception-title p{ - color: #E5EAF3 !important; -} - /** success failure */ .pear-admin-dark .pear-result .content { background-color: rgba(153, 153, 153, 0.12); @@ -222,4 +172,9 @@ .pear-admin-dark .pear-result .description{ color: #8D9095; +} + +/** 403 404 500*/ +.pear-admin-dark .pear-exception .title p{ + color: #E5EAF3 !important; } \ No newline at end of file diff --git a/admin/css/other/console1.css b/admin/css/other/console1.css deleted file mode 100644 index 164d208..0000000 --- a/admin/css/other/console1.css +++ /dev/null @@ -1,136 +0,0 @@ -.top-panel { - border-radius: 4px; - text-align: center; -} - -.top-panel>.layui-card-body { - height: 60px; -} - -.top-panel-number { - line-height: 60px; - font-size: 29px; - border-right: 1px solid #eceff9; -} - -.top-panel-tips { - padding-left: 8px; - padding-top: 16px; - line-height: 30px; - font-size: 12px; -} - -.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 { - padding: 0 10px 10px; -} - -.layuiadmin-card-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 { - width: 32px; - height: 32px; - border-radius: 50%; - margin-right: 15px; -} - -.layuiadmin-card-status dd div.layui-status-img a { - width: 100%; - height: 100%; - display: inline-block; - text-align: center; - line-height: 32px; -} - -.layuiadmin-card-status dd div span { - color: #BBB; -} - -.layuiadmin-card-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/console2.css deleted file mode 100644 index fbf6c89..0000000 --- a/admin/css/other/console2.css +++ /dev/null @@ -1,115 +0,0 @@ -.pear-card { - width: 100%; - height: 66px; - background-color: #F8F8F8; - display: inline-block; - text-align: center; - border-radius: 5px; - 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 { - font-size: 30px; - height: 66px; - line-height: 66px; -} - -.pear-card-title { - margin-top: 3px; - width: 100%; - display: inline-block; - text-align: center; -} - -.person img { - width: 90px; - height: 90px; - border-radius: 4px; - margin-top: 8px; - margin-left: 8px; -} - -.pear-card2 .count { - color: #51A351; - font-size: 30px; - margin-top: 12px; -} - -.pear-card2 .title { - color: gray; - font-size: 14px; - margin-top: 14px; -} - -.pear-card-status { - padding: 0 10px 10px; -} - -.pear-card-status 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 { - padding-bottom: 10px; - padding-top: 3px; -} - -.pear-card-status li>span { - color: #999; - height: 24px; - line-height: 24px; -} - -.pear-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/exception.css b/admin/css/other/exception.css index d3b0124..e7f2027 100644 --- a/admin/css/other/exception.css +++ b/admin/css/other/exception.css @@ -8,21 +8,21 @@ padding: 70px 40px } -.pear-exception-title { +.pear-exception .title { margin-top: 20px; } -.pear-exception-title p { +.pear-exception .title p { color: rgb(0, 0, 0); font-size: 20px; } -.pear-exception-description { +.pear-exception .description { margin-top: 10px; color: #8D9095; font-size: 14px; } -.pear-exception-extra { +.pear-exception .extra { margin: 30px; } \ No newline at end of file diff --git a/view/console/console1.html b/view/console/console1.html index 9d387b0..e69de29 100644 --- a/view/console/console1.html +++ b/view/console/console1.html @@ -1,492 +0,0 @@ - - - - - - 控制后台 - - - - - - - -
                                    -
                                    -
                                    -
                                    -
                                    今日访问
                                    -
                                    -
                                    -
                                    - 0 -
                                    -
                                    - - - - - - - - - - -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    提交次数
                                    -
                                    -
                                    -
                                    - 0 -
                                    -
                                    - - - - - - - - - - - - - -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    下载数量
                                    -
                                    -
                                    -
                                    - 0 -
                                    -
                                    - - - - - - - - - - -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    流量统计
                                    -
                                    -
                                    -
                                    - 0 -
                                    -
                                    - - - - - - - - - - - -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    动态
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -

                                    七彩枫叶 在 Pear Admin 专区 回答问题 -

                                    - 几秒前 -
                                    -
                                    -
                                    -
                                    -
                                    -

                                    简 在 Pear - Admin 专区 进行了 提问 -

                                    - 2天前 -
                                    -
                                    -
                                    -
                                    -
                                    -

                                    恒宇少年 将 Pear Admin 更新至 - 2.3.0 - 版本

                                    - 7天前 -
                                    -
                                    -
                                    -
                                    -
                                    -

                                    如花 在 Pear Admin 社区 发布了 建议

                                    - 7天前 -
                                    -
                                    -
                                    -
                                    -
                                    -

                                    就眠仪式 在 Pear Admin 社区 发布了 建议

                                    - 8天前 -
                                    -
                                    -
                                    -
                                    -
                                    -

                                    贤心 在 Pear Admin 专区 进行了 提问 -

                                    - 8天前 -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    更 新
                                    -
                                    -
                                      -
                                    • 优化代码格式2021-09-06 - 11:28
                                    • -
                                    • 新增消息组件2021-09-06 - 11:28
                                    • -
                                    • 移动端兼容2021-09-06 - 11:28
                                    • -
                                    • 系统布局优化2021-09-06 - 11:28
                                    • -
                                    • 兼容多系统菜单模式2021-09-06 - 11:28
                                    • -
                                    • 兼容多标签页切换2021-09-06 - 11:28
                                    • -
                                    • 扩展下拉组件2021-09-06 - 11:28
                                    • -
                                    • 扩展卡片样式2021-09-06 - 11:28
                                    • -
                                    -
                                    -
                                    -
                                    -
                                    - 链接 -
                                    -
                                    - 官 - 网 -
                                    - 下 载 -
                                    - 后 端 -
                                    -
                                    -
                                    -
                                    - 寄语 -
                                    -
                                    - 原想将澎湃的爱平平稳稳放置你手心,奈何我徒有一股蛮劲,只顾向你跑去,一个不稳跌的满身脏兮兮。试图爬起的我, - 心想你会不会笑我 " 献爱献的这样笨拙, 怎么不知避开爱里的埋伏。" -
                                    -
                                    -
                                    -
                                    -
                                    - - - - \ No newline at end of file diff --git a/view/console/console2.html b/view/console/console2.html index 0c702ef..e69de29 100644 --- a/view/console/console2.html +++ b/view/console/console2.html @@ -1,460 +0,0 @@ - - - - - - 数据分析 - - - - - - - -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    - 快捷菜单 -
                                    -
                                    -
                                    -
                                    -
                                    - -
                                    - 主页 -
                                    -
                                    -
                                    - -
                                    - 弹层 -
                                    -
                                    -
                                    - -
                                    - 聊天 -
                                    -
                                    -
                                    - -
                                    - 相机 -
                                    -
                                    -
                                    - -
                                    - 表单 -
                                    -
                                    -
                                    - -
                                    - 安全 -
                                    -
                                    -
                                    - -
                                    - 公告 -
                                    -
                                    -
                                    - -
                                    - 更多 -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    - 代办任务 -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    待审评论
                                    -
                                    21
                                    -
                                    -
                                    -
                                    -
                                    -
                                    待审帖子
                                    -
                                    32
                                    -
                                    -
                                    -
                                    -
                                    -
                                    待审文章
                                    -
                                    14
                                    -
                                    -
                                    -
                                    -
                                    -
                                    待审用户
                                    -
                                    63
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    留言板
                                    -
                                    -
                                      -
                                    • -

                                      要不要作为我的家人,搬来我家。

                                      - 12月25日 19:92 - 回复 -
                                    • -
                                    • -

                                      快乐的时候不敢尽兴,频繁警戒自己保持清醒。

                                      - 4月30日 22:43 - 回复 -
                                    • -
                                    • -

                                      夏天真的来了,尽管它还有些犹豫。

                                      - 4月30日 22:43 - 回复 -
                                    • -
                                    • -

                                      看似不可达到的高度,只要坚持不懈就可能到达。

                                      - 4月30日 22:43 - 回复 -
                                    • -
                                    • -

                                      当浑浊变成了一种常态,那么清白就成了一种罪过。

                                      - 4月30日 22:43 - 回复 -
                                    • -
                                    • -

                                      那是一种内在的东西,他们到达不了,也无法触及!

                                      - 5月12日 01:25 - 回复 -
                                    • - -
                                    • -

                                      希望是一个好东西,也许是最好的,好东西是不会消亡的!

                                      - 6月11日 15:33 - 回复 -
                                    • -
                                    • -

                                      一切都在不可避免的走向庸俗。

                                      - 2月09日 13:40 - 回复 -
                                    • -
                                    • -

                                      路上没有灯火的时候,就点亮自己的头颅。

                                      - 3月11日 12:30 - 回复 -
                                    • - -
                                    • -

                                      我们应该不虚度一生,应该能够说:"我已经做了我能做的事。"

                                      - 4月30日 22:43 - 回复 -
                                    • - -
                                    • -

                                      接近,是我对一切的态度,是我对一切态度的距离

                                      - 6月11日 15:33 - 回复 -
                                    • -
                                    • -

                                      没有锚的船当然也可以航行,只是紧张充满你的一生。

                                      - 2月09日 13:40 - 回复 -
                                    • -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    - - - - \ No newline at end of file diff --git a/view/exception/403.html b/view/exception/403.html index 243d126..e925efd 100644 --- a/view/exception/403.html +++ b/view/exception/403.html @@ -1,16 +1,16 @@
                                    -
                                    +
                                    -
                                    +

                                    403

                                    -
                                    +
                                    抱歉, 你无权访问该页面.
                                    -
                                    +
                                    \ No newline at end of file diff --git a/view/exception/404.html b/view/exception/404.html index 71e65cc..e2fce7b 100644 --- a/view/exception/404.html +++ b/view/exception/404.html @@ -1,16 +1,16 @@
                                    -
                                    +
                                    -
                                    +

                                    404

                                    -
                                    +
                                    抱歉, 你访问的页面不存在.
                                    -
                                    +
                                    \ No newline at end of file diff --git a/view/exception/500.html b/view/exception/500.html index d374b81..17e25cd 100644 --- a/view/exception/500.html +++ b/view/exception/500.html @@ -1,16 +1,16 @@
                                    -
                                    +
                                    -
                                    +

                                    500

                                    -
                                    +
                                    抱歉, 服务器出错了.
                                    -
                                    +
                                    \ No newline at end of file -- Gitee From dcbaeb7955d127fab76103371636d4ef07550c25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sun, 25 Jun 2023 14:03:38 +0800 Subject: [PATCH 20/67] update --- admin/data/menu.json | 9 ++- component/pear/module/admin.js | 3 + component/pear/module/tabPage.js | 126 ++++++++++++++++--------------- 3 files changed, 78 insertions(+), 60 deletions(-) diff --git a/admin/data/menu.json b/admin/data/menu.json index 433382f..d2d2785 100644 --- a/admin/data/menu.json +++ b/admin/data/menu.json @@ -95,7 +95,6 @@ "title": "菜单模式", "icon": "layui-icon layui-icon-auz", "type": 0, - "href": "", "children": [{ "id": "a", "title": "普通路由", @@ -104,6 +103,14 @@ "openType": "_component", "href": "view/result/success.html" }, + { + "id": "b", + "title": "嵌套网页", + "icon": "layui-icon layui-icon-face-cry", + "type": 1, + "openType": "_iframe", + "href": "http://www.layui-vue.com" + }, { "id": "c", "title": "新建标签", diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index bede8e4..f05fbca 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -144,6 +144,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't }) if (isMuiltTab(param) === "true" || isMuiltTab(param) === true) { + bodyTab = tabPage.render({ elem: 'content', roll: true, @@ -190,11 +191,13 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't title: data.menuTitle, url: data.menuUrl, icon: data.menuIcon, + type: data.menuOpenType, close: true }, 300); } compatible(); }) + } else { bodyFrame = page.render({ elem: 'content', diff --git a/component/pear/module/tabPage.js b/component/pear/module/tabPage.js index c6c4015..8273f9b 100644 --- a/component/pear/module/tabPage.js +++ b/component/pear/module/tabPage.js @@ -273,22 +273,35 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { var that = this; - $.ajax({ - url: opt.url, - type: 'get', - dataType: 'html', - async: false, - success: function (data) { - element.tabAdd(that.option.elem, { - title: title, - content: `
                                    ${data}
                                    `, - id: opt.id - }); - }, - error: function (xhr, textstatus, thrown) { - return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); - } - }); + if (opt.type === "_iframe") { + + element.tabAdd(this.option.elem, { + id: opt.id, + title: title, + content: '', + }); + + } else { + + $.ajax({ + url: opt.url, + type: 'get', + dataType: 'html', + async: false, + success: function (data) { + element.tabAdd(that.option.elem, { + id: opt.id, + title: title, + content: `
                                    ${data}
                                    `, + }); + }, + error: function (xhr, textstatus, thrown) { + return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); + } + }); + } tabData.push(opt); sessionStorage.setItem(that.option.elem + "-pear-tab-data", JSON.stringify(tabData)); @@ -319,28 +332,37 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { } var that = this; - - $.ajax({ - url: opt.url, - type: 'get', - dataType: 'html', - async: false, - success: function (data) { - element.tabAdd(that.option.elem, { - title: title, - content: '
                                    ' + data + '
                                    ', - id: opt.id - }); - tabData.push(opt); - sessionStorage.setItem(that.option.elem + "-pear-tab-data", JSON.stringify(tabData)); - sessionStorage.setItem(that.option.elem + "-pear-tab-data-current", opt.id); - }, - error: function (xhr, textstatus, thrown) { - return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); - } - }); + if (opt.type === "_iframe") { + element.tabAdd(this.option.elem, { + id: opt.id, + title: title, + content: '', + }); + } else { + $.ajax({ + url: opt.url, + type: 'get', + dataType: 'html', + async: false, + success: function (data) { + element.tabAdd(that.option.elem, { + id: opt.id, + title: title, + content: '
                                    ' + data + '
                                    ', + }); + }, + error: function (xhr, textstatus, thrown) { + return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); + } + }); + } + tabData.push(opt); + sessionStorage.setItem(that.option.elem + "-pear-tab-data", JSON.stringify(tabData)); + sessionStorage.setItem(that.option.elem + "-pear-tab-data-current", opt.id); } } element.tabChange(this.option.elem, opt.id); @@ -464,39 +486,26 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { title += titleItem; - if (option.index == index) { - $.ajax({ - url: item.url, - type: 'get', - dataType: 'html', - async: false, - success: function (data) { - content += '
                                    ' + data + '
                                    '; - }, - error: function (xhr) { - return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); - } - }); + if (item.type === "_iframe") { + + content += `
                                    ` + } else { + $.ajax({ url: item.url, type: 'get', dataType: 'html', async: false, success: function (data) { - content += '
                                    ' + data + '
                                    '; + content += `
                                    ${data}
                                    `; }, error: function (xhr) { return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); } }); } + index++; }); @@ -564,7 +573,6 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { }) $("#" + option.elem + "closeAll").click(function () { - var currentId = contextTabDOM.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")) { -- Gitee From edba1e67cbf7bb53ec9c7435643c950c9d9a84b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sun, 25 Jun 2023 14:15:53 +0800 Subject: [PATCH 21/67] update --- component/pear/module/tabPage.js | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/component/pear/module/tabPage.js b/component/pear/module/tabPage.js index 8273f9b..536dcd4 100644 --- a/component/pear/module/tabPage.js +++ b/component/pear/module/tabPage.js @@ -278,9 +278,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { element.tabAdd(this.option.elem, { id: opt.id, title: title, - content: '', + content: `` }); } else { @@ -336,9 +334,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { element.tabAdd(this.option.elem, { id: opt.id, title: title, - content: '', + content: `` }); } else { $.ajax({ @@ -350,9 +346,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { element.tabAdd(that.option.elem, { id: opt.id, title: title, - content: '
                                    ' + data + '
                                    ', + content: `
                                    ${data}
                                    `, }); }, error: function (xhr, textstatus, thrown) { @@ -406,7 +400,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { var nextNode = removeTab.next("li"); if (!removeTab.hasClass("layui-this")) { removeTab.remove(); - var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("div[id='" + id + "']") + var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("*[id='" + id + "']") .parent(); tabContent.remove(); @@ -441,7 +435,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { removeTab.remove(); // 删除 content - var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("div[id='" + id + "']").parent(); + var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("*[id='" + id + "']").parent(); // 删除 tabContent.remove(); } -- Gitee From 9fa7e02566436d450242f1e9753d5532691719fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sun, 25 Jun 2023 23:37:33 +0800 Subject: [PATCH 22/67] update --- component/pear/module/tabPage.js | 55 ++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/component/pear/module/tabPage.js b/component/pear/module/tabPage.js index 536dcd4..6e9794a 100644 --- a/component/pear/module/tabPage.js +++ b/component/pear/module/tabPage.js @@ -259,8 +259,6 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { /** * @since Pear Admin 4.0 - * - * */ tabPage.prototype.addTabOnly = function (opt, time) { @@ -278,7 +276,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { element.tabAdd(this.option.elem, { id: opt.id, title: title, - content: `` + content: `` }); } else { @@ -292,7 +290,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { element.tabAdd(that.option.elem, { id: opt.id, title: title, - content: `
                                    ${data}
                                    `, + content: `
                                    ${data}
                                    `, }); }, error: function (xhr, textstatus, thrown) { @@ -334,7 +332,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { element.tabAdd(this.option.elem, { id: opt.id, title: title, - content: `` + content: `` }); } else { $.ajax({ @@ -346,7 +344,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { element.tabAdd(that.option.elem, { id: opt.id, title: title, - content: `
                                    ${data}
                                    `, + content: `
                                    ${data}
                                    `, }); }, error: function (xhr, textstatus, thrown) { @@ -365,7 +363,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { // 刷 新 指 定 的 选 项 卡 tabPage.prototype.refresh = function (time) { - var $iframe = $(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-content .layui-show > div"); + var $iframe = $(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-content .layui-show > *"); var $iframeLoad; if (time != false && time != 0) { @@ -376,22 +374,31 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { }); } - $.ajax({ - url: $iframe.attr("src"), - type: 'get', - dataType: 'html', - success: function (data) { - $iframe.html(data); - if ($iframeLoad != undefined) { - $iframeLoad.fadeOut(1000, function () { - $iframeLoad.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 + ',请稍后再试!'); } - }, - error: function (xhr) { - return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); - } - }); + }); + } } function tabDelete(elem, id, callback, option) { @@ -482,7 +489,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { if (item.type === "_iframe") { - content += `
                                    ` + content += `
                                    ` } else { @@ -492,7 +499,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { dataType: 'html', async: false, success: function (data) { - content += `
                                    ${data}
                                    `; + content += `
                                    ${data}
                                    `; }, error: function (xhr) { return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); -- Gitee From cf52e27aa998e15285c4412bee6c7f2919196445 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Mon, 26 Jun 2023 00:16:28 +0800 Subject: [PATCH 23/67] update --- component/pear/module/admin.js | 2 +- component/pear/module/page.js | 143 +++++++++++++++++---------------- 2 files changed, 76 insertions(+), 69 deletions(-) diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index f05fbca..e30a62c 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -211,7 +211,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't if (data.menuOpenType === "_layer") { layer.open({ type: 2, title: data.menuTitle, content: data.menuUrl, area: ['80%', '80%'], maxmin: true }) } else { - bodyFrame.changePage(data.menuUrl, true); + bodyFrame.changePage(data.menuUrl, true, data.menuOpenType); } compatible() }) diff --git a/component/pear/module/page.js b/component/pear/module/page.js index a9703e2..cd7bc15 100644 --- a/component/pear/module/page.js +++ b/component/pear/module/page.js @@ -13,92 +13,97 @@ layui.define(['jquery', 'element'], function (exports) { url: opt.url, elem: opt.elem, title: opt.title, - width: opt.width, height: opt.height, - done: opt.done ? opt.done : function () { - console.log("菜单渲染成功"); - } + width: opt.width } renderContent(option); return new page(option); } - page.prototype.changePage = function (url, loading) { + page.prototype.changePage = function (url, loading, type) { + var $frameLoad = $("#" + this.option.elem).find(".pear-frame-loading"); var $frame = $("#" + this.option.elem + " .pear-frame-content"); - if(loading) { + + if (loading) { $frameLoad.css({ display: 'block' }); } - $.ajax({ - url: url, - type: 'get', - dataType: 'html', - success: function (data) { - $frame.html(data) - $frame.attr("src", url); + + if (type === "_iframe") { + + $frame.html(``); + + const $contentFrame = $frame.find("iframe"); + + $contentFrame.on("load", () => { $frameLoad.fadeOut(1000); - element.init(); - }, - error: function (xhr, textstatus, thrown) { - return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); - } - }); - } + }) - page.prototype.changePageByElement = function (elem, url, loading) { - var $frameLoad = $("#" + elem).find(".pear-frame-loading"); - var $frame = $("#" + elem + " .pear-frame-content"); - if(loading) { - $frameLoad.css({ - display: 'block' + } else { + + $.ajax({ + url: url, + type: 'get', + dataType: 'html', + success: function (data) { + $frame.html(data) + $frameLoad.fadeOut(1000); + element.init(); + }, + error: function (xhr) { + return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); + } }); } - $.ajax({ - url: url, - type: 'get', - dataType: 'html', - success: function (data) { - $frame.html(data) - $frame.attr("src", url); - $frameLoad.fadeOut(1000); - element.init(); - }, - error: function (xhr, textstatus, thrown) { - return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); - } - }); + + $frame.attr("type", type); + $frame.attr("src", url); } page.prototype.refresh = function (loading) { var $frameLoad = $("#" + this.option.elem).find(".pear-frame-loading"); var $frame = $("#" + this.option.elem).find(".pear-frame-content"); - if(loading) { + + if (loading) { $frameLoad.css({ display: 'block' }); } - $.ajax({ - url: $frame.attr("src"), - type: 'get', - dataType: 'html', - success: function (data) { - $frame.html(data) + + if ($frame.attr("type") === "_iframe") { + + $frame.html(``); + + const $contentFrame = $frame.find("iframe"); + + $contentFrame.on("load", () => { $frameLoad.fadeOut(1000); - element.init(); - }, - error: function (xhr, textstatus, thrown) { - return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); - } - }); + }) + + } else { + $.ajax({ + type: 'get', + url: $frame.attr("src"), + 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(`
                                    -
                                    +
                                    @@ -108,22 +113,24 @@ layui.define(['jquery', 'element'], function (exports) {
                                    `); - + var $frame = $("#" + option.elem).find(".pear-frame-content"); - $.ajax({ - url: option.url, - type: 'get', - dataType: 'html', - success: function (data) { - $frame.html(data); - $frame.attr("src", option.url); - element.init(); - }, - error: function (xhr, textstatus, thrown) { - return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); - } - }); + 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()); -- Gitee From 7f1b6a42367085fab09b04c207db2b92756e3644 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Mon, 26 Jun 2023 00:26:49 +0800 Subject: [PATCH 24/67] update --- component/pear/module/admin.js | 6 ++---- component/pear/module/page.js | 33 +++++++++------------------------ 2 files changed, 11 insertions(+), 28 deletions(-) diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index e30a62c..003a0c5 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -202,16 +202,14 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't bodyFrame = page.render({ elem: 'content', title: '首页', - url: param.tab.index.href, - width: '100%', - height: '100%' + 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(data.menuUrl, true, data.menuOpenType); + bodyFrame.changePage(data.menuUrl, data.menuOpenType); } compatible() }) diff --git a/component/pear/module/page.js b/component/pear/module/page.js index cd7bc15..85bdd4b 100644 --- a/component/pear/module/page.js +++ b/component/pear/module/page.js @@ -10,37 +10,26 @@ layui.define(['jquery', 'element'], function (exports) { page.prototype.render = function (opt) { var option = { - url: opt.url, elem: opt.elem, - title: opt.title, - height: opt.height, - width: opt.width + url: opt.url, + width: opt.width || "100%", + height: opt.height || "100%", + title: opt.title } renderContent(option); return new page(option); } - page.prototype.changePage = function (url, loading, type) { - - var $frameLoad = $("#" + this.option.elem).find(".pear-frame-loading"); - var $frame = $("#" + this.option.elem + " .pear-frame-content"); + page.prototype.changePage = function (url, type) { - if (loading) { - $frameLoad.css({ - display: 'block' - }); - } + const $frame = $("#" + this.option.elem + " .pear-frame-content"); + $frame.attr("type", type); + $frame.attr("src", url); if (type === "_iframe") { $frame.html(``); - const $contentFrame = $frame.find("iframe"); - - $contentFrame.on("load", () => { - $frameLoad.fadeOut(1000); - }) - } else { $.ajax({ @@ -49,20 +38,16 @@ layui.define(['jquery', 'element'], function (exports) { dataType: 'html', success: function (data) { $frame.html(data) - $frameLoad.fadeOut(1000); - element.init(); }, error: function (xhr) { return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); } }); } - - $frame.attr("type", type); - $frame.attr("src", url); } page.prototype.refresh = function (loading) { + var $frameLoad = $("#" + this.option.elem).find(".pear-frame-loading"); var $frame = $("#" + this.option.elem).find(".pear-frame-content"); -- Gitee From 3f4ccf05cd07371239f08711f190e77b8935b8ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Mon, 26 Jun 2023 04:08:28 +0800 Subject: [PATCH 25/67] update --- admin/css/admin.dark.css | 8 +++++++- component/pear/module/admin.js | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index fb053db..7bace8f 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -92,6 +92,12 @@ 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; +} + /** button */ .pear-admin-dark .layui-btn { color: #ffffff; @@ -113,7 +119,7 @@ .pear-admin-dark .layui-layer .layui-layer-setwin > span, .pear-admin-dark .layui-layer .layui-layer-title { - color: white; + color: #ffffff; } /** card */ diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index 003a0c5..0a54cd4 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -199,6 +199,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't }) } else { + bodyFrame = page.render({ elem: 'content', title: '首页', -- Gitee From 2f858f58337f5d3528dadbf7501444a59d72b751 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Mon, 26 Jun 2023 04:51:44 +0800 Subject: [PATCH 26/67] update --- admin/css/admin.dark.css | 4 +++- component/pear/css/module/page.css | 9 ++++++-- component/pear/module/page.js | 36 ++++++++++++++++++++---------- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index 7bace8f..d1c474b 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -51,7 +51,8 @@ /** body */ .pear-admin-dark .layui-body, -.pear-admin-dark .layui-body .pear-tab-loading { +.pear-admin-dark .layui-body .pear-tab-loading, +.pear-admin-dark .layui-body .pear-frame-loading { background-color: #0a0a0a !important; } @@ -96,6 +97,7 @@ .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 */ diff --git a/component/pear/css/module/page.css b/component/pear/css/module/page.css index e916acf..9a3fba1 100644 --- a/component/pear/css/module/page.css +++ b/component/pear/css/module/page.css @@ -22,19 +22,24 @@ border: whitesmoke 1px solid; } -.pear-frame .pear-frame-content { +.pear-frame .pear-frame-content, +.pear-frame .pear-frame-content iframe { width: 100%; height: calc(100% - 0px) !important; } +.pear-frame .pear-frame-content iframe { + height: calc(100% - 4px) !important; +} + .pear-frame-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 { diff --git a/component/pear/module/page.js b/component/pear/module/page.js index 85bdd4b..11f25cf 100644 --- a/component/pear/module/page.js +++ b/component/pear/module/page.js @@ -8,6 +8,11 @@ layui.define(['jquery', 'element'], function (exports) { this.option = opt; }; + /** + * @since Pear Admin 4.0 + * + * 创建 Page 页面 + */ page.prototype.render = function (opt) { var option = { elem: opt.elem, @@ -20,20 +25,23 @@ layui.define(['jquery', 'element'], function (exports) { return new page(option); } - page.prototype.changePage = function (url, type) { + /** + * @since Pear Admin 4.0 + * + * 切换 Page 页面 + */ + page.prototype.changePage = function (href, type) { - const $frame = $("#" + this.option.elem + " .pear-frame-content"); - $frame.attr("type", type); - $frame.attr("src", url); + const $frame = $(`#${this.option.elem} .pear-frame-content`); if (type === "_iframe") { - $frame.html(``); + $frame.html(``); } else { $.ajax({ - url: url, + url: href, type: 'get', dataType: 'html', success: function (data) { @@ -44,12 +52,15 @@ layui.define(['jquery', 'element'], function (exports) { } }); } + + $frame.attr("type", type); + $frame.attr("href", href); } page.prototype.refresh = function (loading) { - var $frameLoad = $("#" + this.option.elem).find(".pear-frame-loading"); - var $frame = $("#" + this.option.elem).find(".pear-frame-content"); + var $frameLoad = $(`#${this.option.elem} .pear-frame-loading`); + var $frame = $(`#${this.option.elem} .pear-frame-content`); if (loading) { $frameLoad.css({ @@ -59,7 +70,7 @@ layui.define(['jquery', 'element'], function (exports) { if ($frame.attr("type") === "_iframe") { - $frame.html(``); + $frame.html(``); const $contentFrame = $frame.find("iframe"); @@ -70,7 +81,7 @@ layui.define(['jquery', 'element'], function (exports) { } else { $.ajax({ type: 'get', - url: $frame.attr("src"), + url: $frame.attr("href"), dataType: 'html', success: function (data) { $frame.html(data) @@ -88,7 +99,7 @@ layui.define(['jquery', 'element'], function (exports) { $("#" + option.elem).html(`
                                    -
                                    +
                                    @@ -102,7 +113,8 @@ layui.define(['jquery', 'element'], function (exports) { var $frame = $("#" + option.elem).find(".pear-frame-content"); if (option.type === "_iframe") { - $frame.html(``); + + $frame.html(``); } else { $.ajax({ url: option.url, -- Gitee From f318a02035a70eaa1f07d08475a55904e5ea1525 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Mon, 26 Jun 2023 06:04:41 +0800 Subject: [PATCH 27/67] update --- admin/css/admin.dark.css | 10 ++++++++++ .../pear/css/module/{layout.css => global.css} | 17 ++++++++--------- component/pear/css/pear.css | 2 +- 3 files changed, 19 insertions(+), 10 deletions(-) rename component/pear/css/module/{layout.css => global.css} (97%) diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index d1c474b..0633bad 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -185,4 +185,14 @@ /** 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/component/pear/css/module/layout.css b/component/pear/css/module/global.css similarity index 97% rename from component/pear/css/module/layout.css rename to component/pear/css/module/global.css index de4a778..94d57c7 100644 --- a/component/pear/css/module/layout.css +++ b/component/pear/css/module/global.css @@ -6,31 +6,30 @@ width: 100%; } -body::-webkit-scrollbar { +*::-webkit-scrollbar { width: 0px; height: 0px; } -body::-webkit-scrollbar { +*::-webkit-scrollbar { width: 6px; height: 6px; } -body::-webkit-scrollbar-track { - background: white; - border-radius: 2px; +*::-webkit-scrollbar-track { + background: transparent; } -body::-webkit-scrollbar-thumb { +*::-webkit-scrollbar-thumb { background: #E6E6E6; - border-radius: 2px; + border-radius: 4px; } -body::-webkit-scrollbar-thumb:hover { +*::-webkit-scrollbar-thumb:hover { background: #E6E6E6; } -body::-webkit-scrollbar-corner { +*::-webkit-scrollbar-corner { background: #f6f6f6; } diff --git a/component/pear/css/pear.css b/component/pear/css/pear.css index 22d4ceb..a7f279c 100644 --- a/component/pear/css/pear.css +++ b/component/pear/css/pear.css @@ -2,7 +2,7 @@ @import url("../font/iconfont.css"); @import url("module/nprogress.css"); @import url("module/messageCenter.css"); -@import url("module/layout.css"); +@import url("module/global.css"); @import url("module/menu.css"); @import url("module/page.css"); @import url("module/tabPage.css"); \ No newline at end of file -- Gitee From bf04573473690503e91a464bca3ae18bc6ff082d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Mon, 26 Jun 2023 08:10:31 +0800 Subject: [PATCH 28/67] update --- admin/css/admin.css | 120 ++++++++++++++------------ admin/css/admin.dark.css | 4 +- component/pear/css/module/menu.css | 72 +++++++++------- component/pear/css/module/page.css | 16 ++-- component/pear/css/module/tabPage.css | 89 +++++++++---------- component/pear/module/admin.js | 5 +- component/pear/module/page.js | 14 +-- component/pear/module/tabPage.js | 52 +++++------ component/pear/module/theme.js | 61 +------------ 9 files changed, 200 insertions(+), 233 deletions(-) diff --git a/admin/css/admin.css b/admin/css/admin.css index 352b91d..0041cbb 100644 --- a/admin/css/admin.css +++ b/admin/css/admin.css @@ -13,7 +13,7 @@ body, } .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; + height: 100% !important; } -.pear-admin .layui-header.dark-theme .layui-layout-control .layui-this *{ - background-color: rgba(0,0,0,.1)!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 { @@ -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; @@ -151,7 +128,7 @@ body, left: 230px; } -.pear-admin .layui-body > div { +.pear-admin .layui-body>div { height: 100%; } @@ -161,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; @@ -179,6 +156,55 @@ 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-mini .layui-side .layui-logo .title { display: none; @@ -213,18 +239,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 { @@ -240,7 +262,7 @@ body, bottom: 30px; z-index: 400000; position: absolute; - background-color: #5FB878 !important; + background-color: var(--global-primary-color) !important; box-shadow: 2px 0 6px rgba(0, 21, 41, .20); text-align: center; border-radius: 4px; @@ -285,10 +307,6 @@ body, padding-right: 10px; } - .pear-mini .bottom-nav { - display: none; - } - .pear-mini .layui-side-scroll { height: calc(100% - 62px); } @@ -397,8 +415,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 { @@ -454,7 +472,7 @@ body, padding: 4px; top: -6px; left: -6px; - border: #5FB878 2px solid; + border: var(--global-primary-color) 2px solid; opacity: 1; border-radius: 4px; } @@ -551,18 +569,12 @@ body, background-color: #fff; } +.menu-search-list li.this, .menu-search-list li:hover { - background-color: #5FB878; + background-color: var(--global-primary-color); color: white; } -.menu-search-list li.this { - background-color: #5FB878; - color: white; -} - -/* 搜索面板结束 */ - /** 首屏加载 */ .loader-wrapper { position: fixed; @@ -600,7 +612,7 @@ body, width: 50px; height: 50px; border-radius: 3px; - background-color: #5FB878; + background-color: var(--global-primary-color); position: absolute; top: 0; left: 0; diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index 0633bad..1065e2c 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -51,8 +51,8 @@ /** body */ .pear-admin-dark .layui-body, -.pear-admin-dark .layui-body .pear-tab-loading, -.pear-admin-dark .layui-body .pear-frame-loading { +.pear-admin-dark .layui-body .pear-tab-page-loading, +.pear-admin-dark .layui-body .pear-page-loading { background-color: #0a0a0a !important; } diff --git a/component/pear/css/module/menu.css b/component/pear/css/module/menu.css index 938f987..9c59c64 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/page.css b/component/pear/css/module/page.css index 9a3fba1..2131056 100644 --- a/component/pear/css/module/page.css +++ b/component/pear/css/module/page.css @@ -1,11 +1,11 @@ -.pear-frame { +.pear-page { width: 100%; position: relative; overflow-y: auto; height: 100%; } -.pear-frame .dot { +.pear-page .dot { width: 5px; height: 24px; background-color: #5FB878; @@ -15,24 +15,24 @@ display: inline-block; } -.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-frame .pear-frame-content iframe { +.pear-page .pear-page-content, +.pear-page .pear-page-content iframe { width: 100%; height: calc(100% - 0px) !important; } -.pear-frame .pear-frame-content iframe { +.pear-page .pear-page-content iframe { height: calc(100% - 4px) !important; } -.pear-frame-loading { +.pear-page-loading { position: absolute; display: none; width: 100%; @@ -42,7 +42,7 @@ z-index: 19; } -.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/tabPage.css b/component/pear/css/module/tabPage.css index 55feb01..42d866b 100644 --- a/component/pear/css/module/tabPage.css +++ b/component/pear/css/module/tabPage.css @@ -1,25 +1,25 @@ -.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{ +.pear-tab-page-menu{ box-shadow: none; border-radius: 4px!important; overflow: hidden; } -.pear-tab-menu .item{ +.pear-tab-page-menu .item{ height: 20px; padding-left: 18px; padding-top: 7px; @@ -29,40 +29,40 @@ line-height: 20px; cursor:pointer; } -.pear-tab-menu .item:hover{ +.pear-tab-page-menu .item:hover{ background: #36b368; 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 .layui-nav-more { +.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; @@ -71,96 +71,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; + 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; @@ -170,15 +171,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; @@ -186,11 +187,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%; @@ -200,7 +201,7 @@ background-color: #fff } -.pear-tab-loading.close { +.pear-tab-page-loading.close { animation: close 1s; -webkit-animation: close 1s; animation-fill-mode: forwards; @@ -217,7 +218,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/module/admin.js b/component/pear/module/admin.js index 0a54cd4..e121400 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -367,8 +367,9 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't this.headerSkin = function (theme) { var pearAdmin = $(".pear-admin .layui-header"); - pearAdmin.removeClass("light-theme"); pearAdmin.removeClass("dark-theme"); + pearAdmin.removeClass("light-theme"); + pearAdmin.removeClass("auto-theme"); pearAdmin.addClass(theme); } @@ -702,7 +703,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't headItem += '
                                  • ' + '' + - '
                                    ' + + '
                                    ' + '
                                    ' + '
                                    ' + '
                                  • '; diff --git a/component/pear/module/page.js b/component/pear/module/page.js index 11f25cf..cff2c72 100644 --- a/component/pear/module/page.js +++ b/component/pear/module/page.js @@ -32,7 +32,7 @@ layui.define(['jquery', 'element'], function (exports) { */ page.prototype.changePage = function (href, type) { - const $frame = $(`#${this.option.elem} .pear-frame-content`); + const $frame = $(`#${this.option.elem} .pear-page-content`); if (type === "_iframe") { @@ -59,8 +59,8 @@ layui.define(['jquery', 'element'], function (exports) { page.prototype.refresh = function (loading) { - var $frameLoad = $(`#${this.option.elem} .pear-frame-loading`); - var $frame = $(`#${this.option.elem} .pear-frame-content`); + var $frameLoad = $(`#${this.option.elem} .pear-page-loading`); + var $frame = $(`#${this.option.elem} .pear-page-content`); if (loading) { $frameLoad.css({ @@ -98,9 +98,9 @@ layui.define(['jquery', 'element'], function (exports) { function renderContent(option) { $("#" + option.elem).html(` -
                                    -
                                    -
                                    +
                                    +
                                    +
                                    @@ -110,7 +110,7 @@ layui.define(['jquery', 'element'], function (exports) {
                                    `); - var $frame = $("#" + option.elem).find(".pear-frame-content"); + var $frame = $("#" + option.elem).find(".pear-page-content"); if (option.type === "_iframe") { diff --git a/component/pear/module/tabPage.js b/component/pear/module/tabPage.js index 6e9794a..e80225a 100644 --- a/component/pear/module/tabPage.js +++ b/component/pear/module/tabPage.js @@ -32,10 +32,10 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { } 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"); + 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; @@ -64,7 +64,7 @@ layui.define(['jquery', 'element', 'dropdown'], 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`, @@ -143,7 +143,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { type: 1, title: false, shade: false, - skin: 'pear-tab-menu', + skin: 'pear-tab-page-menu', closeBtn: false, area: [menuWidth + 'px', '108px'], fixed: true, @@ -183,7 +183,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { var elem = this.option.elem; 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); + sessionStorage.setItem(option.elem + "-pear-tab-page-data-current", id); callback(id); }); } @@ -204,8 +204,8 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { } tabPage.prototype.clear = function () { - sessionStorage.removeItem(this.option.elem + "-pear-tab-data"); - sessionStorage.removeItem(this.option.elem + "-pear-tab-data-current"); + sessionStorage.removeItem(this.option.elem + "-pear-tab-page-data"); + sessionStorage.removeItem(this.option.elem + "-pear-tab-page-data-current"); } var index = 0; @@ -262,7 +262,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { */ tabPage.prototype.addTabOnly = function (opt, time) { - var title = ` + var title = ` ${opt.title} `; @@ -300,8 +300,8 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { } tabData.push(opt); - sessionStorage.setItem(that.option.elem + "-pear-tab-data", JSON.stringify(tabData)); - sessionStorage.setItem(that.option.elem + "-pear-tab-data-current", opt.id); + sessionStorage.setItem(that.option.elem + "-pear-tab-page-data", JSON.stringify(tabData)); + sessionStorage.setItem(that.option.elem + "-pear-tab-page-data-current", opt.id); } else { @@ -353,12 +353,12 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { }); } tabData.push(opt); - sessionStorage.setItem(that.option.elem + "-pear-tab-data", JSON.stringify(tabData)); - sessionStorage.setItem(that.option.elem + "-pear-tab-data-current", opt.id); + sessionStorage.setItem(that.option.elem + "-pear-tab-page-data", JSON.stringify(tabData)); + sessionStorage.setItem(that.option.elem + "-pear-tab-page-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); } // 刷 新 指 定 的 选 项 卡 @@ -367,8 +367,8 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { var $iframeLoad; if (time != false && time != 0) { - $iframe.parent().append(`
                                    `); - $iframeLoad = $("#" + this.option.elem).find("#pear-tab-loading" + index++); + $iframe.parent().append(`
                                    `); + $iframeLoad = $("#" + this.option.elem).find("#pear-tab-page-loading" + index++); $iframeLoad.css({ display: "block" }); @@ -411,12 +411,12 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { .parent(); tabContent.remove(); - tabData = JSON.parse(sessionStorage.getItem(elem + "-pear-tab-data")); - tabDataCurrent = sessionStorage.getItem(elem + "-pear-tab-data-current"); + 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; } @@ -432,13 +432,13 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { $("#" + elem + " [id='" + currId + "']").parent().addClass("layui-show"); } callback(currId); - tabData = JSON.parse(sessionStorage.getItem(elem + "-pear-tab-data")); - tabDataCurrent = sessionStorage.getItem(elem + "-pear-tab-data-current"); + 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 @@ -463,7 +463,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { if (option.roll == true && option.tool != false) { type = "layui-tab-rollTool"; } - var tab = '
                                    '; var title = '
                                      '; @@ -479,7 +479,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { $.each(option.data, function (i, item) { var titleItem = `
                                    • - + ${item.title} diff --git a/component/pear/module/theme.js b/component/pear/module/theme.js index 0c4a109..20c8500 100644 --- a/component/pear/module/theme.js +++ b/component/pear/module/theme.js @@ -3,6 +3,7 @@ layui.define(["jquery","layer"], function (exports) { $ = layui.jquery; var theme = {}; + theme.autoHead = false; theme.changeTheme = function (target, autoHead) { @@ -12,65 +13,7 @@ layui.define(["jquery","layer"], function (exports) { var color = localStorage.getItem("theme-color-color"); document.documentElement.style.setProperty("--global-primary-color", color); - - this.colorSet(color); - } - - theme.colorSet = function(color) { - - 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 += '.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 += '.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 += '.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 += '.layui-form-radio:hover *, .layui-form-radioed, .layui-form-radioed>i{color:' + 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); -- Gitee From 5c140c5e26abbfcb2e517f25fa237ffe1e9dfbdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Mon, 26 Jun 2023 08:16:52 +0800 Subject: [PATCH 29/67] update --- component/pear/module/admin.js | 10 +++++----- component/pear/module/theme.js | 6 +----- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index e121400..f174461 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -233,7 +233,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't localStorage.setItem("theme-color", currentColor.id); localStorage.setItem("theme-color-color", currentColor.color); localStorage.setItem("theme-color-second", currentColor.second); - theme.changeTheme(window, isAutoHead(config)); + theme.changeTheme(); var menu = localStorage.getItem("theme-menu"); if (menu === null) { @@ -794,7 +794,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't form.on('switch(auto-head)', function (data) { localStorage.setItem("auto-head", this.checked); - theme.changeTheme(window, this.checked); + theme.changeTheme(); }) form.on('switch(banner)', function (data) { @@ -862,10 +862,10 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't localStorage.setItem("theme-header", headerColor); if (theme == "auto-theme") { localStorage.setItem("auto-head", true); - theme.changeTheme(window, true); + theme.changeTheme(); } else { localStorage.setItem("auto-head", false); - theme.changeTheme(window, false); + theme.changeTheme(); } pearAdmin.headerSkin(headerColor); }); @@ -878,7 +878,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't localStorage.setItem("theme-color", currentColor.id); localStorage.setItem("theme-color-color", currentColor.color); localStorage.setItem("theme-color-second", currentColor.second); - theme.changeTheme(window, isAutoHead(config)); + theme.changeTheme(); }); function applyConfig(param) { diff --git a/component/pear/module/theme.js b/component/pear/module/theme.js index 20c8500..76c5a1d 100644 --- a/component/pear/module/theme.js +++ b/component/pear/module/theme.js @@ -3,12 +3,8 @@ layui.define(["jquery","layer"], function (exports) { $ = layui.jquery; var theme = {}; - - theme.autoHead = false; - - theme.changeTheme = function (target, autoHead) { - this.autoHead = autoHead; + theme.changeTheme = function () { var color = localStorage.getItem("theme-color-color"); -- Gitee From 9e31d199dc262318f108d6c4e7f2ebaa0f20d767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Mon, 26 Jun 2023 08:38:14 +0800 Subject: [PATCH 30/67] update --- admin/css/admin.dark.css | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index 1065e2c..da88b06 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -5,12 +5,18 @@ } /** header */ -.pear-admin-dark .layui-header { +.pear-admin-dark .layui-header, +.pear-admin-dark .layui-header .layui-logo { background-color: #141414 !important; - border-color:#414243 !important; + box-shadow: none !important; + border: none !important; +} + +.pear-admin-dark .layui-header { + border: 1px solid rgba(0, 0, 0, .40) !important; } -.pear-admin-dark .layui-header * { +.pear-admin-dark .layui-header .layui-nav * { color: #ffffff !important; } @@ -18,6 +24,10 @@ 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; -- Gitee From 2d294790004ba8eabee553d17bd581e0297b70e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Mon, 26 Jun 2023 08:48:59 +0800 Subject: [PATCH 31/67] =?UTF-8?q?=E4=BF=AE=E8=AE=A2=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- component/pear/pear.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/component/pear/pear.js b/component/pear/pear.js index 4643b8e..baf2219 100644 --- a/component/pear/pear.js +++ b/component/pear/pear.js @@ -7,7 +7,7 @@ window.rootPath = (function (src) { layui.config({ base: rootPath + "module/", - version: "3.40.0" + version: "4.0.0-alpha.1" }).extend({ admin: "admin", page: "page", -- Gitee From ca236d47797466747b4bb91f2d9694a51a4cc025 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=83=E5=BD=A9=E6=9E=AB=E5=8F=B6?= <424235748@qq.com> Date: Mon, 26 Jun 2023 06:41:36 +0000 Subject: [PATCH 32/67] =?UTF-8?q?=E5=8A=A0=E4=B8=AA=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 七彩枫叶 <424235748@qq.com> --- index.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/index.html b/index.html index 970ad9e..1479f4d 100644 --- a/index.html +++ b/index.html @@ -14,6 +14,9 @@ + -- Gitee From b6c27464c8f530dd6c40daf8fcfc3c8234daf04e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Tue, 27 Jun 2023 13:02:18 +0800 Subject: [PATCH 33/67] update --- .vscode/settings.json | 3 +++ admin/css/admin.dark.css | 5 +++++ admin/css/reset.css | 4 ++++ 3 files changed, 12 insertions(+) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..6f3a291 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "liveServer.settings.port": 5501 +} \ No newline at end of file diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index da88b06..75f48fc 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -4,6 +4,11 @@ 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 { diff --git a/admin/css/reset.css b/admin/css/reset.css index 3c81731..845e9dd 100644 --- a/admin/css/reset.css +++ b/admin/css/reset.css @@ -6,6 +6,10 @@ border-radius: var(--global-border-radius); } +.layui-form-onswitch { + background-color: var(--global-primary-color) !important; +} + .layui-btn { background-color: var(--global-primary-color); } -- Gitee From 229bd42a7334ead7699ffb6b6330022847e97449 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Tue, 27 Jun 2023 13:04:28 +0800 Subject: [PATCH 34/67] update --- component/pear/module/admin.js | 4 +--- index.html | 3 --- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index f174461..dd62f21 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -24,8 +24,6 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't var body = $('body'); - var msgInstance; - var pearAdmin = new function () { this.configuration = {}; @@ -100,7 +98,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't } this.messageRender = function(options) { - msgInstance = messageCenter.render({ + messageCenter.render({ elem: '.message', url: options.header.message, height: '250px' diff --git a/index.html b/index.html index 1479f4d..970ad9e 100644 --- a/index.html +++ b/index.html @@ -14,9 +14,6 @@ - -- Gitee From aaf4a6654cc01a2a826421b0af23a79d1d7875a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Tue, 27 Jun 2023 13:36:04 +0800 Subject: [PATCH 35/67] update --- admin/css/admin.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/admin/css/admin.css b/admin/css/admin.css index 0041cbb..30e1045 100644 --- a/admin/css/admin.css +++ b/admin/css/admin.css @@ -388,8 +388,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; } -- Gitee From 2bc8ac10fc6648516a9d6cde3914fd41cf2bd227 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Tue, 27 Jun 2023 13:38:44 +0800 Subject: [PATCH 36/67] update --- component/pear/module/messageCenter.js | 1 - 1 file changed, 1 deletion(-) diff --git a/component/pear/module/messageCenter.js b/component/pear/module/messageCenter.js index 9ac7118..c7535cb 100644 --- a/component/pear/module/messageCenter.js +++ b/component/pear/module/messageCenter.js @@ -3,7 +3,6 @@ layui.define(['table', 'jquery', 'element', 'dropdown'], function (exports) { var MOD_NAME = 'messageCenter', $ = layui.jquery, - element = layui.element, dropdown = layui.dropdown; var message = function (opt) { -- Gitee From 01ac2abde94653775372e955f91e442708a4d88d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Wed, 28 Jun 2023 09:36:52 +0800 Subject: [PATCH 37/67] =?UTF-8?q?=E9=9B=86=E6=88=90=20toast=20=E7=BB=84?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/css/admin.dark.css | 5 + admin/css/reset.css | 15 +- admin/data/menu.json | 18 +- admin/data/table.json | 0 component/pear/css/module/toast.css | 1929 ++++++++++++++++++++++++ component/pear/css/pear.css | 3 +- component/pear/module/extends/toast.js | 1225 +++++++++++++++ component/pear/pear.js | 11 +- view/component/table.html | 375 +++++ view/component/toast.html | 61 + 10 files changed, 3633 insertions(+), 9 deletions(-) create mode 100644 admin/data/table.json create mode 100644 component/pear/css/module/toast.css create mode 100644 component/pear/module/extends/toast.js create mode 100644 view/component/table.html create mode 100644 view/component/toast.html diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index 75f48fc..10be7ef 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -183,6 +183,11 @@ background-color: #1d1e1f !important; } +/** toast */ +.pear-admin-dark .iziToast { + background-color: #1f1f1f !important; +} + /** success failure */ .pear-admin-dark .pear-result .content { background-color: rgba(153, 153, 153, 0.12); diff --git a/admin/css/reset.css b/admin/css/reset.css index 845e9dd..7878212 100644 --- a/admin/css/reset.css +++ b/admin/css/reset.css @@ -14,8 +14,21 @@ 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; + background-color: transparent !important; + color: #5f5f5f !important; } .layui-card { diff --git a/admin/data/menu.json b/admin/data/menu.json index d2d2785..9847c35 100644 --- a/admin/data/menu.json +++ b/admin/data/menu.json @@ -24,13 +24,29 @@ "title": "扩展组件", "icon": "layui-icon layui-icon-auz", "type": 0, - "children": [{ + "children": [ + { + "id": 22, + "title": "数据表格", + "icon": "layui-icon layui-icon-face-smile", + "type": 1, + "openType": "_component", + "href": "view/component/table.html" + },{ "id": 21, "title": "24 栅格", "icon": "layui-icon layui-icon-face-smile", "type": 1, "openType": "_component", "href": "view/component/grid.html" + }, + { + "id": 23, + "title": "消息提示", + "icon": "layui-icon layui-icon-face-smile", + "type": 1, + "openType": "_component", + "href": "view/component/toast.html" } ] }, diff --git a/admin/data/table.json b/admin/data/table.json new file mode 100644 index 0000000..e69de29 diff --git a/component/pear/css/module/toast.css b/component/pear/css/module/toast.css new file mode 100644 index 0000000..5472da5 --- /dev/null +++ b/component/pear/css/module/toast.css @@ -0,0 +1,1929 @@ +.iziToast-capsule { + font-size: 0; + height: 0; + width: 100%; + transform: translateZ(0); + backface-visibility: hidden; + transition: transform 0.5s cubic-bezier(0.25, 0.8, 0.25, 1), height 0.5s cubic-bezier(0.25, 0.8, 0.25, 1); +} + +.iziToast-capsule, .iziToast-capsule * { + box-sizing: border-box; +} + +.iziToast-overlay { + display: block; + position: fixed; + top: -100px; + left: 0; + right: 0; + bottom: -100px; + z-index: 19891100; +} + +.iziToast { + display: inline-block; + clear: both; + position: relative; + font-family: 'Lato', Tahoma, Arial; + font-size: 14px; + padding: 8px 45px 9px 0; + background: #fff; + border-color: #fff; + width: 100%; + pointer-events: all; + cursor: default; + transform: translateX(0); + -webkit-touch-callout: none /* iOS Safari */; + -webkit-user-select: none /* Chrome/Safari/Opera */; + -khtml-user-select: none /* Konqueror */; + -moz-user-select: none /* Firefox */; + -ms-user-select: none /* Internet Explorer/Edge */; + user-select: none; + min-height: 45px; + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1); + max-width: 90%; + margin: 5px 0; + border-radius: 4px; +} + +.iziToast > .iziToast-progressbar { + position: absolute; + left: 0; + bottom: 0; + width: 100%; + z-index: 1; + background: rgba(255, 255, 255, 0.5); +} + +.iziToast > .iziToast-progressbar > div { + height: 2px; + width: 100%; + background: #dddddd; + border-radius: 0 0 3px 3px; +} + +.iziToast.iziToast-theme-dark > .iziToast-progressbar > div { + background: #fff; +} + +.iziToast.iziToast-balloon:before { + content: ''; + position: absolute; + right: 8px; + left: auto; + width: 0px; + height: 0px; + top: 100%; + border-right: 0px solid transparent; + border-left: 15px solid transparent; + border-top: 10px solid #000; + border-top-color: inherit; + border-radius: 0; +} + +.iziToast.iziToast-balloon .iziToast-progressbar { + top: 0; + bottom: auto; +} + +.iziToast.iziToast-balloon > div { + border-radius: 0 0 0 3px; +} + +.iziToast > .iziToast-cover { + position: absolute; + left: 0; + top: 0; + bottom: 0; + height: 100%; + margin: 0; + background-size: 100%; + background-position: 50% 50%; + background-repeat: no-repeat; +} + +.iziToast > .iziToast-close { + position: absolute; + right: 0; + top: 0; + border: 0; + padding: 0; + opacity: 0.6; + width: 42px; + height: 100%; + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAJPAAACTwBcGfW0QAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD3SURBVFiF1ZdtDoMgDEBfdi4PwAX8vLFn0qT7wxantojKupmQmCi8R4tSACpgjC2ICCUbEBa8ingjsU1AXRBeR8aLN64FiknswN8CYefBBDQ3whuFESy7WyQMeC0ipEI0A+0FeBvHUFN8xPaUhAH/iKoWsnXHGegy4J0yxialOfaHJAz4bhRzQzgDvdGnz4GbAonZbCQMuBm1K/kcFu8Mp1N2cFFpsxsMuJqqbIGExGl4loARajU1twskJLLhIsID7+tvUoDnIjTg5T9DPH9EBrz8rxjPzciAl9+O8SxI8CzJ8CxKFfh3ynK8Dyb8wNHM/XDqejx/AtNyPO87tNybAAAAAElFTkSuQmCC") no-repeat 50% 50%; + background-size: 8px; + cursor: pointer; + outline: none; +} + +.iziToast > .iziToast-close:hover { + opacity: 1; +} + +.iziToast > .iziToast-body { + position: relative; + padding: 0 0 0 10px; + height: auto; + min-height: 28px; + margin: 0 0 0 15px; + text-align: left; +} + +.iziToast > .iziToast-body:after { + content: ""; + display: table; + clear: both; +} + +.iziToast > .iziToast-body .iziToast-texts { + margin: 6px 0; + padding-right: 2px; + display: inline-block; + float: left; +} + +.iziToast > .iziToast-body .iziToast-inputs { + min-height: 19px; + float: left; + margin: 3px -2px; +} + +.iziToast > .iziToast-body .iziToast-inputs > input:not([type=checkbox]):not([type=radio]), +.iziToast > .iziToast-body .iziToast-inputs > select { + position: relative; + display: inline-block; + margin: 2px; + border-radius: 2px; + border: 0; + padding: 4px 7px; + font-size: 13px; + letter-spacing: 0.02em; + background: rgba(0, 0, 0, 0.1); + color: #000; + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2); + min-height: 26px; +} + +.iziToast > .iziToast-body .iziToast-inputs > input:not([type=checkbox]):not([type=radio]):focus, +.iziToast > .iziToast-body .iziToast-inputs > select:focus { + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.6); +} + +.iziToast > .iziToast-body .iziToast-buttons { + min-height: 17px; + float: left; + margin: 4px 0 0 0; +} + +.iziToast > .iziToast-body .iziToast-buttons > a, +.iziToast > .iziToast-body .iziToast-buttons > button, +.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]) { + position: relative; + display: inline-block; + margin: 2px; + border-radius: 2px; + border: 0; + padding: 5px 10px; + font-size: 12px; + letter-spacing: 0.02em; + cursor: pointer; + background: rgba(0, 0, 0, 0.1); + color: #555; +} + +.iziToast > .iziToast-body .iziToast-buttons > a:hover, +.iziToast > .iziToast-body .iziToast-buttons > button:hover, +.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]):hover { + background: rgba(0, 0, 0, 0.15); +} + +.iziToast > .iziToast-body .iziToast-buttons > a:focus, +.iziToast > .iziToast-body .iziToast-buttons > button:focus, +.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]):focus { + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.6); +} + +.iziToast > .iziToast-body .iziToast-buttons > a:active, +.iziToast > .iziToast-body .iziToast-buttons > button:active, +.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]):active { + top: 1px; +} + +.iziToast > .iziToast-body .iziToast-icon { + height: 100%; + position: absolute; + left: 0; + top: 50%; + display: table; + font-size: 23px; + line-height: 24px; + margin-top: -11px; + color: #000; + width: 24px; + height: 24px; +} + +.iziToast > .iziToast-body .iziToast-icon.ico-info { + background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTU1NzcxMTk5MzYwIiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEwODAzIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTUxMiAyOC40MTZjLTI2Ny40Njg4IDAtNDg0LjI0OTYgMjE2LjgzMi00ODQuMjQ5NiA0ODQuMjQ5NiAwIDI2Ny40MTc2IDIxNi44MzIgNDg0LjI0OTYgNDg0LjI0OTYgNDg0LjI0OTYgMjY3LjQxNzYgMCA0ODQuMzAwOC0yMTYuODMyIDQ4NC4zMDA4LTQ4NC4yNDk2Qzk5Ni4zMDA4IDI0NS4yNDggNzc5LjQxNzYgMjguNDE2IDUxMiAyOC40MTZ6TTQ1NS41MjY0IDI0NS4wOTQ0QzQ3MC4zMjMyIDIyOS44ODggNDkwLjcwMDggMjIxLjMzNzYgNTExLjc5NTIgMjIxLjY0NDhjMjEuMTk2OC0wLjIwNDggNDEuNzc5MiA4LjI0MzIgNTYuNTI0OCAyMy40NDk2IDE1LjAwMTYgMTQuNzk2OCAyMy4yOTYgMzUuMTIzMiAyMy4wOTEyIDU2LjExNTIgMC4yMDQ4IDIxLjE5NjgtOC4yOTQ0IDQxLjU3NDQtMjMuMzk4NCA1Ni4yMTc2LTE0LjY5NDQgMTQuNjk0NC0zNC43MTM2IDIzLjA0LTU1LjM5ODQgMjMuMDRMNTExLjc5NTIgMzgwLjQ2NzJjLTIwLjk5MiAwLjIwNDgtNDEuMzY5Ni04LjE0MDgtNTYuMDY0LTIzLjE0MjRDNDQwLjY3ODQgMzQyLjY4MTYgNDMyLjMzMjggMzIyLjMwNCA0MzIuNTM3NiAzMDEuMjA5NiA0MzIuMzMyOCAyODAuMjE3NiA0NDAuNjc4NCAyNTkuODkxMiA0NTUuNTI2NCAyNDUuMDk0NHpNNjI3LjYwOTYgNzY4LjE1MzZsMCAxMy40MTQ0IDAgMjIuMjIwOEwzOTYuMjg4IDgwMy43ODg4bDAtNTcuMTM5MiAyMS42MDY0LTAuNzY4YzEwLjI0LTAuNDYwOCAxNC41OTItMi43MTM2IDE2Ljk5ODQtNC43NjE2bDEuMjI4OC01LjQyNzJjMC45NzI4LTUuNTgwOCAxLjYzODQtMTQuNDM4NCAxLjU4NzItMjUuOTA3Mkw0MzcuNzA4OCA1MDcuOTA0YzAuMjU2LTE3Ljc2NjQtMi4zNTUyLTI5LjkwMDgtMy40ODE2LTMyLjU2MzJsMCAwTDQzMS42MTYgNDc0LjA2MDhDNDI4Ljg1MTIgNDczLjA4OCA0MjMuOTM2IDQ3Mi4wNjQgNDE3LjE3NzYgNDcxLjY1NDRMMzk2LjI4OCA0NzAuMzc0NCAzOTYuMjg4IDQxMy40OTEybDE4OS40OTEyIDAgMCAyOTYuMjk0NGMtMC4zMDcyIDE3LjcxNTIgMi40MDY0IDI5Ljc5ODQgMy40MzA0IDMyLjU2MzJsMC4wNTEyIDAgMi43MTM2IDEuMTc3NmMyLjgxNiAwLjk3MjggNy43ODI0IDEuOTk2OCAxNC42OTQ0IDIuMzU1MmwyMC44ODk2IDEuMjhMNjI3LjU1ODQgNzY4LjE1MzZ6IiBwLWlkPSIxMDgwNCIgZmlsbD0iIzQwOUVGRiI+PC9wYXRoPjwvc3ZnPg==") no-repeat 50% 50%; + background-size: 85%; +} + +.iziToast > .iziToast-body .iziToast-icon.ico-warning { + background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTU1NzcwODczNzUzIiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjUxMTgiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNTEyLjAyMzI3MyAxMDI0Qzc5NC43NjM2MzYgMTAyNCAxMDI0IDc5NC43ODY5MDkgMTAyNCA1MTEuOTc2NzI3IDEwMjQgMjI5LjIzNjM2NCA3OTQuNzg2OTA5LTAuMDIzMjczIDUxMi4wMjMyNzMtMC4wMjMyNzNTMCAyMjkuMjEzMDkxIDAgNTExLjk3NjcyN0MwIDc5NC43ODY5MDkgMjI5LjIzNjM2NCAxMDI0IDUxMi4wMjMyNzMgMTAyNE00NjkuMzQxMDkxIDc2OGMwLTIzLjU1MiAxOC45MjA3MjctNDIuNjU4OTA5IDQyLjcwNTQ1NS00Mi42NTg5MDkgMjMuNTUyIDAgNDIuNjU4OTA5IDE4LjkyMDcyNyA0Mi42NTg5MDkgNDIuNjU4OTA5IDAgMjMuNTc1MjczLTE4LjkyMDcyNyA0Mi43MDU0NTUtNDIuNjU4OTA5IDQyLjcwNTQ1NUM0ODguNDcxMjczIDgxMC43MDU0NTUgNDY5LjM0MTA5MSA3OTEuNzM4MTgyIDQ2OS4zNDEwOTEgNzY4TTQ2OS4zNDEwOTEgMjU1LjgxMzgxOGMwLTIzLjQ1ODkwOSAxOC45MjA3MjctNDIuNDcyNzI3IDQyLjcwNTQ1NS00Mi40NzI3MjcgMjMuNTUyIDAgNDIuNjU4OTA5IDE5LjQzMjcyNyA0Mi42NTg5MDkgNDIuNDcyNzI3bDAgMzQxLjczNjcyN2MwIDIzLjQ1ODkwOS0xOC45MjA3MjcgNDIuNDcyNzI3LTQyLjY1ODkwOSA0Mi40NzI3MjctMjMuNTc1MjczIDAtNDIuNzA1NDU1LTE5LjQzMjcyNy00Mi43MDU0NTUtNDIuNDcyNzI3TDQ2OS4zNDEwOTEgMjU1LjgxMzgxOHoiIHAtaWQ9IjUxMTkiIGZpbGw9IiNmZjk5MDAiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%; + background-size: 85%; +} + +.iziToast > .iziToast-body .iziToast-icon.ico-error { + background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTU1NzcwNDI1NDkwIiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEyNjUiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNTExLjk5NjQxOCAyMy41MjA2OTNjLTI2OS43NjcwNSAwLTQ4OC40NTQ3NDggMjE4LjY4ODcyMS00ODguNDU0NzQ4IDQ4OC40NTQ3NDggMCAyNjkuNzY4MDczIDIxOC42ODg3MjEgNDg4LjQ1MzcyNCA0ODguNDU0NzQ4IDQ4OC40NTM3MjQgMjY5Ljc2NjAyNyAwIDQ4OC40NTQ3NDgtMjE4LjY4NTY1MSA0ODguNDU0NzQ4LTQ4OC40NTM3MjRDMTAwMC40NTExNjYgMjQyLjIwOTQxNCA3ODEuNzYyNDQ1IDIzLjUyMDY5MyA1MTEuOTk2NDE4IDIzLjUyMDY5M3pNNzY5LjMzNDM5MSA3MTUuMTU1OTU2bC01NC4xNTY0MzQgNTQuMTU2NDM0TDUxMS45OTY0MTggNTY2LjEyOTgyOCAzMDguODEzODU2IDc2OS4zMTIzOWwtNTQuMTU1NDExLTU0LjE1NjQzNEw0NTcuODQxMDA4IDUxMS45NzU0NDEgMjU0LjY1ODQ0NiAzMDguNzkyODc4bDU0LjE1NTQxMS01NC4xNTU0MTFMNTExLjk5NjQxOCA0NTcuODIwMDNsMjAzLjE4MjU2Mi0yMDMuMTgyNTYyIDU0LjE1NjQzNCA1NC4xNTU0MTFMNTY2LjE1MTgyOSA1MTEuOTc1NDQxIDc2OS4zMzQzOTEgNzE1LjE1NTk1NnoiIHAtaWQ9IjEyNjYiIGZpbGw9IiNGNTZDNkMiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%; + background-size: 80%; +} + +.iziToast > .iziToast-body .iziToast-icon.ico-success { + background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTU1NzcwNTI2MjA3IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQ5NjUiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNMTAyNCA1MTEuOTk5NTAyYzAgMjgyLjc3MDU1Ny0yMjkuMjI5OTQxIDUxMi4wMDA0OTgtNTExLjk5OTUwMiA1MTIuMDAwNDk4LTI4Mi43Njk1NjEgMC01MTIuMDAwNDk4LTIyOS4yMjk5NDEtNTEyLjAwMDQ5OC01MTIuMDAwNDk4IDAtMjgyLjc2ODU2NiAyMjkuMjMwOTM2LTUxMS45OTk1MDIgNTEyLjAwMDQ5OC01MTEuOTk5NTAyQzc5NC43NjkwNjQgMCAxMDI0IDIyOS4yMzA5MzYgMTAyNCA1MTEuOTk5NTAyek03OTYuNTc3MDgxIDM3OC4zMTc3MTNsLTQ4LjQ1OTA1MS00OC40NTkwNTEtMjk3LjA3ODM4NyAyOTcuMDc3MzkyTDI3Ny4yNjc4NTIgNDUzLjE2NTI1OGwtNDguNDU4MDU2IDQ4LjQ1ODA1NiAyMjIuMjI4ODUxIDIyMi4yMzA4NDJMNzk2LjU3NzA4MSAzNzguMzE3NzEzeiIgcC1pZD0iNDk2NiIgZmlsbD0iIzY3YzIzYSI+PC9wYXRoPjwvc3ZnPg==") no-repeat 50% 50%; + background-size: 85%; +} + +.iziToast > .iziToast-body .iziToast-icon.ico-question { + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfhCQkUEhFovxTxAAAEDklEQVRo3s2ZTWgTQRTHf03ipTRUqghNSgsRjHgQrFUQC6JgD1Kak3gQUUoPqRdBglf1oBehBws9Cn4cGk+1SOmh2upBxAYVoeJHrR9tgq0i1Cq0lqYeks7MbpPdmU00/c8hm9n33v/t7Nt5M2+qMEWQI0QIibZKRrQpHvLL2KI2wnQzzBKrDm2RIeKEy01dTYKUI7G1ZRknQXV5yP10kTYgly1NF/5S6duZ8ES+1iZodyaocrjXxE0OFeifYYgp0mRIkwFChAkRJsIxGgrIP+I0n82fvZW5dc/zkss0O2o1c5mX6/TmaDWl77RFe5YkUW3tKEmyFv0lOvXJ/fTYnmCEFuMRbGHEZqVHLyT9DFjUJmkzJl9DG5MWWwM6Llif/gF1nukB6nhgGwUXdFrE+wiURA8QoM9i0zEWWpXQW+ZsyeRrOMuyEo5Fv4gmy4dXPvqcC+pH2VRYaMwy+OWG+iLGCgm0W0Kv9HdvR8ASjmKCXpuK/bxiV/76A/v5UdDIZuKcJGjrnec5KZ7wwsWFOp6xPX/9mt2sqDe7FO+Kf/fXHBPPDWpdXGhTpLvUG9VKwh1xMDDjkvu+cNDFBTk7ptX1QkKZ850m3duu6fcrWxwdaFFyREJ2j4vOpKP6Du6z4uJCv8sYJIVkCnJBGGZaBONO3roY2EqNrSfIPi7SKP4fdXyNUd6I6wbSAHEl33tFLe+FlSsusnK90A0+oEPcuufZgXnOi+u9LrKSJQZQw6LwqBnv2CKsfHORbFbyQhA6xN/pEuihSdj56Co7LWRjPiKie6gkB2LiKuUqK5kiPkLiz1QJ9K1cNXBAMoUCigNpQ9IqDtMI1HKA4/jyvUsaoSyZLA5kjOjDPFZen8Ql5TsvBskUgjciIPSX3QAXC86DT7VWvlEh/xZ+ij9BDVWJ0QL0SbZq6QaFxoLPcXPmBLveLCc4wXdDK6s+6/vwhCSniFLPXW0NJe5UB8zKCsviqpc7vGPVQFcyZbyPwGD+d5ZnxmNWlhG4xSBZZjivjIWHEQgoDkSMjMwTo54569JSE5IpA7EyJSMTyGTUAUFlO1ZKOtaHTMeL1PhYYFTcihmY2cQ5+ullj7EDkiVfVez2sCTz8yiv84djhg7IJVk81xFWJlPdfHBG0flkRC/zQFZ+DSllNtfDdUsOMCliyGX5uOzU3ZhIXFDof4m1gDuKbEx0t2YS25gVGpcMnr/I1kx3c6piB8P8ZoqEwfMX3ZyCXynJTmq/U7NUXqfUzCbWL1wqVKBQUeESzQYoUlW8TAcVL1RCxUu1G6BYXfFyfQ4VPbDI4T8d2WzgQ6sc/vmxnTsqfHCZQzUJxm1h5dxS5Tu6lQgTZ0ipqRVqSwzTbbLHMt+c19iO76tsx/cLZub+Ali+tYC93olEAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTA5LTA5VDIwOjE4OjE3KzAyOjAwjKtfjgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0wOS0wOVQyMDoxODoxNyswMjowMP325zIAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC") no-repeat 50% 50%; + background-size: 85%; +} + +.iziToast > .iziToast-body .iziToast-icon.ico-load { + background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQ1NTUyMzAyOTE3IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQyNDAiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNTEyIDY0YzI0Ny4yIDAgNDQ4IDIwMC44IDQ0OCA0NDhoLTY0YzAtMjEyLTE3Mi0zODQtMzg0LTM4NFY2NHogbTAgODMyYy0yMTIgMC0zODQtMTcyLTM4NC0zODRINjRjMCAyNDcuMiAyMDAuOCA0NDggNDQ4IDQ0OHYtNjR6IiBwLWlkPSI0MjQxIiBmaWxsPSIjMUU5RkZGIj48L3BhdGg+PC9zdmc+') no-repeat 50% 50%; + background-size: 85%; + animation: rotating 1.2s linear infinite +} + +@keyframes rotating { + from { + transform: rotate(0) + } + to { + transform: rotate(360deg) + } +} + +.iziToast > .iziToast-body .iziToast-title { + padding: 0; + margin: 0 0 10px 0; + line-height: 16px; + font-size: 14px; + text-align: left; + float: left; + color: #303133; + white-space: normal; +} + +.iziToast > .iziToast-body .iziToast-message { + padding: 0; + margin: 0; + font-size: 14px; + line-height: 16px; + text-align: left; + float: left; + color: #606266; + white-space: normal; +} + +.iziToast.iziToast-animateInside .iziToast-title, +.iziToast.iziToast-animateInside .iziToast-message, +.iziToast.iziToast-animateInside .iziToast-icon, +.iziToast.iziToast-animateInside .iziToast-buttons-child, +.iziToast.iziToast-animateInside .iziToast-inputs-child { + opacity: 0; +} + +.iziToast-target { + position: relative; + width: 100%; + margin: 0 auto; +} + +.iziToast-target .iziToast-capsule { + overflow: hidden; +} + +.iziToast-target .iziToast-capsule:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; +} + +.iziToast-target .iziToast-capsule .iziToast { + width: 100%; + float: left; +} + +.iziToast-wrapper { + z-index: 19891101; + position: fixed; + width: 100%; + pointer-events: none; + display: flex; + flex-direction: column; +} + +.iziToast-wrapper .iziToast.iziToast-balloon:before { + border-right: 0 solid transparent; + border-left: 15px solid transparent; + border-top: 10px solid #000; + border-top-color: inherit; + right: 8px; + left: auto; +} + +.iziToast-wrapper-bottomLeft { + left: 0; + bottom: 0; + text-align: left; +} + +.iziToast-wrapper-bottomLeft .iziToast.iziToast-balloon:before { + border-right: 15px solid transparent; + border-left: 0 solid transparent; + right: auto; + left: 8px; +} + +.iziToast-wrapper-bottomRight { + right: 0; + bottom: 0; + text-align: right; +} + +.iziToast-wrapper-topLeft { + left: 0; + top: 0; + text-align: left; +} + +.iziToast-wrapper-topLeft .iziToast.iziToast-balloon:before { + border-right: 15px solid transparent; + border-left: 0 solid transparent; + right: auto; + left: 8px; +} + +.iziToast-wrapper-topRight { + top: 0; + right: 0; + text-align: right; +} + +.iziToast-wrapper-topCenter { + top: 0; + left: 0; + right: 0; + text-align: center; +} + +.iziToast-wrapper-bottomCenter { + bottom: 0; + left: 0; + right: 0; + text-align: center; +} + +.iziToast-wrapper-center { + top: 0; + bottom: 0; + left: 0; + right: 0; + text-align: center; + justify-content: center; + flex-flow: column; + align-items: center; +} + +.iziToast-rtl { + direction: rtl; + padding: 8px 0 9px 45px; + font-family: Tahoma, 'Lato', Arial; +} + +.iziToast-rtl .iziToast-cover { + left: auto; + right: 0; +} + +.iziToast-rtl .iziToast-close { + right: auto; + left: 0; +} + +.iziToast-rtl .iziToast-body { + padding: 0 10px 0 0; + margin: 0 16px 0 0; + text-align: right; +} + +.iziToast-rtl .iziToast-body .iziToast-buttons, +.iziToast-rtl .iziToast-body .iziToast-inputs, +.iziToast-rtl .iziToast-body .iziToast-texts, +.iziToast-rtl .iziToast-body .iziToast-title, +.iziToast-rtl .iziToast-body .iziToast-message { + float: right; + text-align: right; +} + +.iziToast-rtl .iziToast-body .iziToast-icon { + left: auto; + right: 0; +} + +@media only screen and (min-width: 568px) { + .iziToast-wrapper { + padding: 10px 15px; + } + + .iziToast { + width: auto; + } + + .iziToast:not(.iziToast-rtl) .iziToast-cover { + border-radius: 3px 0 0 3px; + } + + .iziToast.iziToast-rtl .iziToast-cover { + border-radius: 0 3px 3px 0; + } + + .iziToast.iziToast-color-dark:after { + box-shadow: inset 0 -10px 20px -10px rgba(255, 255, 255, 0.3), 0 10px 10px -5px rgba(0, 0, 0, 0.25); + } + + .iziToast.iziToast-balloon .iziToast-progressbar { + background: transparent; + } + + .iziToast.iziToast-balloon:after { + box-shadow: 0 10px 10px -5px rgba(0, 0, 0, 0.25), inset 0 10px 20px -5px rgba(0, 0, 0, 0.25); + } + + .iziToast-target .iziToast:after { + box-shadow: inset 0 -10px 20px -10px rgba(0, 0, 0, 0.2), inset 0 0 5px rgba(0, 0, 0, 0.1); + } +} + +.iziToast.iziToast-theme-dark { + background: #565c70; + border-color: #565c70; +} + +.iziToast.iziToast-theme-dark .iziToast-title { + color: #fff; +} + +.iziToast.iziToast-theme-dark .iziToast-message { + color: rgba(255, 255, 255, 0.9); + font-weight: 300; +} + +.iziToast.iziToast-theme-dark .iziToast-close { + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfgCR4OIQIPSao6AAAAwElEQVRIx72VUQ6EIAwFmz2XB+AConhjzqTJ7JeGKhLYlyx/BGdoBVpjIpMJNjgIZDKTkQHYmYfwmR2AfAqGFBcO2QjXZCd24bEggvd1KBx+xlwoDpYmvnBUUy68DYXD77ESr8WDtYqvxRex7a8oHP4Wo1Mkt5I68Mc+qYqv1h5OsZmZsQ3gj/02h6cO/KEYx29hu3R+VTTwz6D3TymIP1E8RvEiiVdZfEzicxYLiljSxKIqlnW5seitTW6uYnv/Aqh4whX3mEUrAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA5LTMwVDE0OjMzOjAyKzAyOjAwl6RMVgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wOS0zMFQxNDozMzowMiswMjowMOb59OoAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC") no-repeat 50% 50%; + background-size: 8px; +} + +.iziToast.iziToast-theme-dark .iziToast-icon { + color: #fff; +} + +.iziToast.iziToast-theme-dark .iziToast-icon.ico-info { + background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQxNjQ5NjA1MTc2IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjM1MzIiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNODUxLjE3MTU1NiA3MTcuOTM3Nzc4YzMuMjQyNjY3IDExLjk0NjY2NyAyLjg0NDQ0NCAyNC40NjIyMjItMS40MjIyMjMgMzYuNDA4ODg5YTYyLjkxOTExMSA2Mi45MTkxMTEgMCAwIDEtMjEuOTU5MTExIDI5LjUyNTMzMyA2NS4yNTE1NTYgNjUuMjUxNTU2IDAgMCAxLTM4LjkxMiAxMi41MTU1NTZIMTc4LjExOTExMWE2NC44NTMzMzMgNjQuODUzMzMzIDAgMCAxLTM4Ljc5ODIyMi0xMi41NzI0NDUgNjIuMjM2NDQ0IDYyLjIzNjQ0NCAwIDAgMS0yMi4wMTYtMjkuNTI1MzMzIDYwLjY0MzU1NiA2MC42NDM1NTYgMCAwIDEtMS4zNjUzMzMtMzYuNDA4ODg5YzMuNTg0LTEzLjE0MTMzMyAxMS40MzQ2NjctMjQuNTc2IDIyLjY5ODY2Ni0zMy4xMDkzMzNsNTguNDgxNzc4LTQ0LjAzMmE0MC43MzI0NDQgNDAuNzMyNDQ0IDAgMCAwIDE2LjQ5Nzc3OC0zMi43MTExMTJ2LTIwMy4wOTMzMzNjMC0zNS4yMTQyMjIgNy4xNjgtNjkuNTE4MjIyIDIxLjIxOTU1NS0xMDEuNzE3MzMzIDEzLjY1MzMzMy0zMS4xNzUxMTEgMzMuMTA5MzMzLTU5LjE2NDQ0NCA1Ny44NTYtODMuMTE0NjY3QTI2OC44NTY4ODkgMjY4Ljg1Njg4OSAwIDAgMSA0MTQuNzIgMTUyLjA2NHYtMjguNTAxMzMzQzQxNC43MiA4Ni44MTI0NDQgNDQ1LjYxMDY2NyA1Ni44ODg4ODkgNDgzLjU1NTU1NiA1Ni44ODg4ODljMzcuOTQ0ODg5IDAgNjguODM1NTU2IDI5LjkyMzU1NiA2OC44MzU1NTUgNjYuNjczNzc4djI4LjUwMTMzM2MxMi4zNDQ4ODkgMy4xODU3NzggMjQuNDYyMjIyIDcuMTY4IDM2LjIzODIyMiAxMi4wMDM1NTZhMjY4LjY4NjIyMiAyNjguNjg2MjIyIDAgMCAxIDg1Ljc4ODQ0NSA1Ni4wMzU1NTVjMjQuNzQ2NjY3IDI0LjAwNzExMSA0NC4yMDI2NjcgNTEuOTM5NTU2IDU3Ljc5OTExMSA4My4wNTc3NzggMTQuMTA4NDQ0IDMyLjMxMjg4OSAyMS4yMTk1NTYgNjYuNTYgMjEuMjE5NTU1IDEwMS44MzExMTF2MjAzLjA5MzMzM2MwIDEyLjg1Njg4OSA2LjAzMDIyMiAyNC44NjA0NDQgMTYuNTU0NjY3IDMyLjcxMTExMWw1OC40ODE3NzggNDQuMDMyYzExLjIwNzExMSA4LjUzMzMzMyAxOS4wNTc3NzggMTkuOTExMTExIDIyLjc1NTU1NSAzMy4wNTI0NDV6TTM5OC4yMjIyMjIgODU2LjE3Nzc3OFY4NTMuMzMzMzMzaDE3MC42NjY2Njd2Mi44NDQ0NDVDNTY4Ljg4ODg4OSA5MzUuOTM2IDUzMC42MDI2NjcgOTY3LjExMTExMSA0ODMuNTU1NTU2IDk2Ny4xMTExMTFTMzk4LjIyMjIyMiA5MzUuOTM2IDM5OC4yMjIyMjIgODU2LjE3Nzc3OHoiIHAtaWQ9IjM1MzMiIGZpbGw9IiNmZmZmZmYiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%; + background-size: 85%; +} + +.iziToast.iziToast-theme-dark .iziToast-icon.ico-warning { + background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQxNjUxMTE1OTQ4IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjUgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjUwOTYiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4LjEyNSIgaGVpZ2h0PSIxMjgiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTk4NC4wMjI5NTAwMiA3NDYuODc1NDk3NUw2NDEuOTY0NjA3NTIgMTMwLjM4MDY1Yy0zMC40OTE4NDI1LTU0Ljg2MTUwMjUtNzcuOTMxMzE1LTg2LjMzNTY3MjUtMTMwLjE0MzUxLTg2LjMzNTY3MjUtNTIuMjkxNTc1IDAtOTkuNzQwOTcgMzEuNTEzODYtMTMwLjE0MzUxIDg2LjQzNDg5NzVMMzkuOTc2NDU1MDIgNzQ2LjgyNTg4NUM5Ljk2MDg5MjUyIDgwMC45NjMwNDUgNy45MTY4NTc1MiA4NTguMDE3NDIgMzQuMzUwMzk3NTIgOTAzLjM1MzMyMjVjMjYuNTEyOTIgNDUuNDc0ODE3NSA3Ny4xOTcwNSA3MS41NjEwNyAxMzkuMDczNzYgNzEuNTYxMDdoNjc3LjIyMDU0NzVjNjEuOTA2NDc3NSAwIDExMi41OTA2MDc1LTI2LjA4NjI1MjUgMTM5LjAxNDIyNS03MS40OTE2MTI1IDI2LjQ4MzE1MjUtNDUuMjc2MzY3NSAyNC40MjkxOTUtMTAyLjM0MDY2NS01LjYzNTk4LTE1Ni41NDcyODI1ek05MTEuNzU3MzgyNTIgODU3Ljk5NzU3NWMtOS44OTI3MzI1IDE2Ljk4NzMyLTMyLjE1ODgyMjUgMjYuNzMxMjE1LTYxLjExMjY3NzUgMjYuNzMxMjE1SDE3My40MjQxNTc1MmMtMjguOTQzOTMyNSAwLTUxLjIyOTg2NzUtOS43NjM3NC02MS4xNjIyOS0yNi43OTA3NS0xMC4wMjE3MjUtMTcuMTg1NzctNy42MTA1NTc1LTQxLjc0Mzk1NzUgNi41ODg1NC02Ny4zNzM3NzVsMzQxLjcxMTA1NS02MTYuMzY1ODU1YzE0LjA2MDE4MjUtMjUuMzkxNjc3NSAzMi43NTQxNzI1LTM5Ljk1NzkwNzUgNTEuMjU5NjM1LTM5Ljk1NzkwNzUgMTguNDk1NTQgMCAzNy4xOTk0NTI1IDE0LjU2NjIzIDUxLjMwOTI0NzUgMzkuOTM4MDYyNWwzNDIuMDI4NTc1IDYxNi40NDUyMzVjMTQuMjI4ODY1IDI1LjY0OTY2MjUgMTYuNjQwMDMyNSA1MC4xODgwMDUgNi41OTg0NjI1IDY3LjM3Mzc3NXoiIGZpbGw9IiNmZmZmZmYiIHAtaWQ9IjUwOTciPjwvcGF0aD48cGF0aCBkPSJNNTEyLjAxOTU0NzUyIDYzMC4yODYxMjI1YTQ1LjA4Nzg0IDQ1LjA4Nzg0IDAgMCAwIDQ1LjA5Nzc2MjUtNDUuMDA4NDZWMzc0LjY1Mjc1NWE0NS4wNzc5MTc1IDQ1LjA3NzkxNzUgMCAwIDAtNDUuMDk3NzYyNS00NS4wMDg0NiA0NS4wODc4NCA0NS4wODc4NCAwIDAgMC00NS4wOTc3NjI1IDQ1LjAwODQ2djIxMC42MTQ5ODVhNDUuMDg3ODQgNDUuMDg3ODQgMCAwIDAgNDUuMDk3NzYyNSA0NS4wMTgzODI1ek01MTIuMDE5NTQ3NTIgNjc1LjM3Mzk2MjVhNjAuMTcwMDQgNjAuMTcwMDQgMCAwIDAtNjAuMTMwMzUgNjAuMTMwMzVjMCAzMy4xNDExNSAyNi45MTk3NDI1IDYwLjEzMDM1IDYwLjEzMDM1IDYwLjEzMDM1IDMzLjE0MTE1IDAgNjAuMTMwMzUtMjYuOTE5NzQyNSA2MC4xMzAzNS02MC4xMzAzNSAwLTMzLjE0MTE1LTI2LjkxOTc0MjUtNjAuMTMwMzUtNjAuMTMwMzUtNjAuMTMwMzV6IiBmaWxsPSIjZmZmZmZmIiBwLWlkPSI1MDk4Ij48L3BhdGg+PC9zdmc+") no-repeat 50% 50%; + background-size: 85%; +} + +.iziToast.iziToast-theme-dark .iziToast-icon.ico-error { + background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQxNjUxMzE1NTQ3IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjY4MDYiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNzcyLjI2NjY2NyA4ODMuMmMyNS42IDI1LjYgNjQgMjUuNiA4OS42IDAgMjUuNi0yNS42IDI1LjYtNjQgMC04OS42TDIzMC40IDE2Mi4xMzMzMzNjLTI1LjYtMjUuNi02NC0yNS42LTg5LjYgMC0yNS42IDI1LjYtMjUuNiA2NCAwIDg5LjZsNjMxLjQ2NjY2NyA2MzEuNDY2NjY3eiIgcC1pZD0iNjgwNyIgZmlsbD0iI2ZmZmZmZiI+PC9wYXRoPjxwYXRoIGQ9Ik04NjEuODY2NjY3IDI1MS43MzMzMzNjMjUuNi0yNS42IDI1LjYtNjQgMC04OS42LTI1LjYtMjUuNi02NC0yNS42LTg5LjYgMEwxNDAuOCA3OTMuNmMtMjUuNiAyNS42LTI1LjYgNjQgMCA4OS42czY0IDI1LjYgODkuNiAwbDYzMS40NjY2NjctNjMxLjQ2NjY2N3oiIHAtaWQ9IjY4MDgiIGZpbGw9IiNmZmZmZmYiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%; + background-size: 80%; +} + +.iziToast.iziToast-theme-dark .iziToast-icon.ico-success { + background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQxNjUxMjQyNTMxIiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjYwMjMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNDA0LjI1MTQyOCA4MDkuNjEwN2MtMTEuNjY0MTAyIDAtMjMuMzI3MTc5LTQuNDQ4NzgyLTMyLjIyNTc2Ny0xMy4zNDczNjlMODMuOTgwMDk4IDUwOC4yMTk4MTVjLTE3Ljc5ODE5OS0xNy43OTcxNzUtMTcuNzk4MTk5LTQ2LjY1MzMzNSAwLTY0LjQ1MTUzM3M0Ni42NTMzMzUtMTcuNzk4MTk5IDY0LjQ1MTUzNCAwbDI4OC4wNDQ1MzkgMjg4LjA0MjQ5MWMxNy43OTgxOTkgMTcuNzk4MTk5IDE3Ljc5ODE5OSA0Ni42NTQzNTkgMCA2NC40NTI1NTgtOC44OTc1NjMgOC44OTg1ODctMjAuNTYxNjY1IDEzLjM0NzM2OS0zMi4yMjQ3NDMgMTMuMzQ3MzY5eiIgcC1pZD0iNjAyNCIgZmlsbD0iI2ZmZmZmZiI+PC9wYXRoPjxwYXRoIGQ9Ik00MDQuMjczOTUzIDgwOS42MTE3MjNjLTExLjY2NDEwMiAwLTIzLjMyNjE1NS00LjQ0OTgwNi0zMi4yMjU3NjYtMTMuMzQ4MzkyLTE3Ljc5ODE5OS0xNy43OTcxNzUtMTcuNzk5MjIyLTQ2LjY1MzMzNS0wLjAwMTAyNC02NC40NTE1MzRMODc2LjEwMTgxMyAyMjcuNzM1NjQ2YzE3Ljc5NjE1MS0xNy43OTgxOTkgNDYuNjUzMzM1LTE3Ljc5OTIyMiA2NC40NTE1MzMtMC4wMDEwMjQgMTcuNzk4MTk5IDE3Ljc5NzE3NSAxNy43OTkyMjIgNDYuNjUzMzM1IDAuMDAxMDI0IDY0LjQ1MTUzM0w0MzYuNTAwNzQ0IDc5Ni4yNjIzMDdjLTguODk4NTg3IDguODk4NTg3LTIwLjU2MjY4OSAxMy4zNDk0MTctMzIuMjI2NzkxIDEzLjM0OTQxNnoiIHAtaWQ9IjYwMjUiIGZpbGw9IiNmZmZmZmYiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%; + background-size: 85%; +} + +.iziToast.iziToast-theme-dark .iziToast-icon.ico-question { + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfhCQkUEg18vki+AAAETUlEQVRo3s1ZTWhbRxD+VlIuxsLFCYVIIQYVopBDoK5bKDWUBupDMNbJ5FBKg/FBziUQdE9yaC+FHBrwsdCfQ9RTGoLxwWl+DqHEojUFFydxnB9bInZDqOsErBrr6yGvs/ueX97bldTKo4Pe7puZb3Z33s7srIIjMY1jyCEjP6ImvyX8pF64arSHznKC06wzijY5xSKz7YbuYokV2lODsyyxqz3gSY6z6gCuqcpxJluFH+Z8U+D/0jyHoxFUBHgfvsGHIS9WMIUlVFFDFTUAGWSRQRY5HMeBEP6b+Ew9dh/7INd2jGeO59kfKdXP85zbIbfGQVf4sYC3N1hm3lo6zzIbPvk6x+zBk7wQGMEMB5xncIAzAS0XrFySSV72iS1yyBVcdA1x0afrsoUJgdFfY2+z8ADAXl7zz0KcwJiPfZKpVuABgClO+nRG+QIHDdfb4qlWwUXvKW4Z7vi6L4J9vg+vbfCeCeZH2RfOdMOc/HbCA4BvIW6EMQz7XK/ltd+hP+VzR9mgva2YSfyGI17fA7ynnocqeQNFfIJ0oHsdv6CC2+rXGBN6cQdveY3fcVRtmy/HDete+93zy8jA8zV7YkwYMrjHzRddRsCdiVCwwmh6wg9iTNC7Y9XIF1iS7kbUpsvvGEdPuTfSgAEjRpR096x0liPFD/Eqt2NMuBQzB2XhrACAApjFsuQFh9XdGAX70B3oSuNdnMVBaX+sopYxjwVpHFBVACyKTXNoktjD+6Ll8xhenS9MAAkAI/Lux2YNUOs4I413Ypg1SgEAu7kpFvWjaeJe0fJHDGe/cNaZBkekudw8PMA+0fMwlndZeAsJ5KR/qhUDUJCnSiyvRsolkJHGUgvjH8QXDgZopEzKMKDqCKrwEQ4C6MH7GEXC665buLJG8hlQc4LP4paxfJrOqYVYYY2UARfEIazTbgDg2dB98GebzJd54b8L/iWNdLyooeR6CHyZ+6xk0yKxkYg6nEVSUG4VJ9QJ9cxRCxO+9WiOyvgUeexXP1hLGH5nGuBWVtiSp4vqe3VP0UFWI9Wan4Er3v8q7jjPWVtm4FtcQQMrOKO2nOQCM5AyDMi56FDrKHA/1nyppS1ppBpYaE8wciEjGI2AaeM41kI4doDX4XiT3Qm1gevyruCgZg9P8xIv8m1nCzTKq6oiJ9xTMiZ505P5m8cdZ0CnZMVXHVljM7WMBzxpyDxygtdxoCEFTaMIWbZU85UvBjgUMYy0fBaAF8V1Lj9qWQ1aMZ5f4k9r+AGMSkMP1vZoZih6k6sicc5h/OFHM9vDqU/VIU7zJZdYYsKGH4g4nAJMGiXZRds1pVMoZ69RM5vfkbh0qkBhsnS2RLMLilQdL9MBHS9UAh0v1e6CYnXHy/WeeCcvLDwl/9OVze69tPKM+M+v7eJN6OzFpWdEF0ucDbhVNFXadnVrmJFlkVNGTS2M6pzmhMvltfPhnN2B63sVuL7fcNP3D1TSk2ihosPrAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTA5LTA5VDIwOjE4OjEzKzAyOjAweOR7nQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0wOS0wOVQyMDoxODoxMyswMjowMAm5wyEAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC") no-repeat 50% 50%; + background-size: 85%; +} + +.iziToast.iziToast-theme-dark .iziToast-buttons > a, +.iziToast.iziToast-theme-dark .iziToast-buttons > button, +.iziToast.iziToast-theme-dark .iziToast-buttons > input { + color: #fff; + background: rgba(255, 255, 255, 0.1); +} + +.iziToast.iziToast-theme-dark .iziToast-buttons > a:hover, +.iziToast.iziToast-theme-dark .iziToast-buttons > button:hover, +.iziToast.iziToast-theme-dark .iziToast-buttons > input:hover { + background: rgba(255, 255, 255, 0.2); +} + +.iziToast.iziToast-theme-dark .iziToast-buttons > a:focus, +.iziToast.iziToast-theme-dark .iziToast-buttons > button:focus, +.iziToast.iziToast-theme-dark .iziToast-buttons > input:focus { + box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.6); +} + +.iziToast.iziToast-theme-dark.iziToast-color-red { + background: #F56C6C; + border-color: #F56C6C; +} + +.iziToast.iziToast-theme-dark.iziToast-color-orange { + background: #E6A23C; + border-color: #E6A23C; +} + +.iziToast.iziToast-theme-dark.iziToast-color-yellow { + background: rgba(255, 249, 178, 0.9); + border-color: rgba(255, 249, 178, 0.9); +} + +.iziToast.iziToast-theme-dark.iziToast-color-blue { + background: #409EFF; + border-color: #409EFF; +} + +.iziToast.iziToast-theme-dark.iziToast-color-green { + background: #67C23A; + border-color: #67C23A; +} + +.iziToast.iziToast-layout2 .iziToast-body .iziToast-texts, +.iziToast.iziToast-layout2 .iziToast-body .iziToast-message { + width: 100%; +} + +.iziToast.iziToast-layout3 { + border-radius: 2px; +} + +.iziToast.iziToast-layout3::after { + display: none; +} + +.iziToast.revealIn, +.iziToast .revealIn { + -webkit-animation: iziT-revealIn 1s cubic-bezier(0.25, 1.6, 0.25, 1) both; + -moz-animation: iziT-revealIn 1s cubic-bezier(0.25, 1.6, 0.25, 1) both; + animation: iziT-revealIn 1s cubic-bezier(0.25, 1.6, 0.25, 1) both; +} + +.iziToast.slideIn, +.iziToast .slideIn { + -webkit-animation: iziT-slideIn 1s cubic-bezier(0.16, 0.81, 0.32, 1) both; + -moz-animation: iziT-slideIn 1s cubic-bezier(0.16, 0.81, 0.32, 1) both; + animation: iziT-slideIn 1s cubic-bezier(0.16, 0.81, 0.32, 1) both; +} + +.iziToast.bounceInLeft { + -webkit-animation: iziT-bounceInLeft 0.7s ease-in-out both; + animation: iziT-bounceInLeft 0.7s ease-in-out both; +} + +.iziToast.bounceInRight { + -webkit-animation: iziT-bounceInRight 0.85s ease-in-out both; + animation: iziT-bounceInRight 0.85s ease-in-out both; +} + +.iziToast.bounceInDown { + -webkit-animation: iziT-bounceInDown 0.7s ease-in-out both; + animation: iziT-bounceInDown 0.7s ease-in-out both; +} + +.iziToast.bounceInUp { + -webkit-animation: iziT-bounceInUp 0.7s ease-in-out both; + animation: iziT-bounceInUp 0.7s ease-in-out both; +} + +.iziToast.fadeIn, +.iziToast .fadeIn { + -webkit-animation: iziT-fadeIn 0.5s ease both; + animation: iziT-fadeIn 0.5s ease both; +} + +.iziToast.fadeInUp { + -webkit-animation: iziT-fadeInUp 0.7s ease both; + animation: iziT-fadeInUp 0.7s ease both; +} + +.iziToast.fadeInDown { + -webkit-animation: iziT-fadeInDown 0.7s ease both; + animation: iziT-fadeInDown 0.7s ease both; +} + +.iziToast.fadeInLeft { + -webkit-animation: iziT-fadeInLeft 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both; + animation: iziT-fadeInLeft 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both; +} + +.iziToast.fadeInRight { + -webkit-animation: iziT-fadeInRight 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both; + animation: iziT-fadeInRight 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both; +} + +.iziToast.flipInX { + -webkit-animation: iziT-flipInX 0.85s cubic-bezier(0.35, 0, 0.25, 1) both; + animation: iziT-flipInX 0.85s cubic-bezier(0.35, 0, 0.25, 1) both; +} + +.iziToast.fadeOut { + -webkit-animation: iziT-fadeOut 0.7s ease both; + animation: iziT-fadeOut 0.7s ease both; +} + +.iziToast.fadeOutDown { + -webkit-animation: iziT-fadeOutDown 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both; + animation: iziT-fadeOutDown 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both; +} + +.iziToast.fadeOutUp { + -webkit-animation: iziT-fadeOutUp 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both; + animation: iziT-fadeOutUp 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both; +} + +.iziToast.fadeOutLeft { + -webkit-animation: iziT-fadeOutLeft 0.5s ease both; + animation: iziT-fadeOutLeft 0.5s ease both; +} + +.iziToast.fadeOutRight { + -webkit-animation: iziT-fadeOutRight 0.5s ease both; + animation: iziT-fadeOutRight 0.5s ease both; +} + +.iziToast.flipOutX { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation: iziT-flipOutX 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both; + animation: iziT-flipOutX 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both; +} + +.iziToast-overlay.fadeIn { + -webkit-animation: iziT-fadeIn 0.5s ease both; + animation: iziT-fadeIn 0.5s ease both; +} + +.iziToast-overlay.fadeOut { + -webkit-animation: iziT-fadeOut 0.7s ease both; + animation: iziT-fadeOut 0.7s ease both; +} + +@-webkit-keyframes iziT-revealIn { + 0% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 1); + } + 100% { + opacity: 1; + } +} + +@-moz-keyframes iziT-revealIn { + 0% { + opacity: 0; + -moz-transform: scale3d(0.3, 0.3, 1); + } + 100% { + opacity: 1; + } +} + +@-webkit-keyframes iziT-slideIn { + 0% { + opacity: 0; + -webkit-transform: translateX(50px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + } +} + +@-moz-keyframes iziT-slideIn { + 0% { + opacity: 0; + -moz-transform: translateX(50px); + } + 100% { + opacity: 1; + -moz-transform: translateX(0); + } +} + +@-webkit-keyframes iziT-bounceInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(280px); + } + 50% { + opacity: 1; + -webkit-transform: translateX(-20px); + } + 70% { + -webkit-transform: translateX(10px); + } + 100% { + -webkit-transform: translateX(0); + } +} + +@-webkit-keyframes iziT-bounceInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(-280px); + } + 50% { + opacity: 1; + -webkit-transform: translateX(20px); + } + 70% { + -webkit-transform: translateX(-10px); + } + 100% { + -webkit-transform: translateX(0); + } +} + +@-webkit-keyframes iziT-bounceInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-200px); + } + 50% { + opacity: 1; + -webkit-transform: translateY(10px); + } + 70% { + -webkit-transform: translateY(-5px); + } + 100% { + -webkit-transform: translateY(0); + } +} + +@-webkit-keyframes iziT-bounceInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(200px); + } + 50% { + opacity: 1; + -webkit-transform: translateY(-10px); + } + 70% { + -webkit-transform: translateY(5px); + } + 100% { + -webkit-transform: translateY(0); + } +} + +@-webkit-keyframes iziT-fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@-webkit-keyframes iziT-fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes iziT-fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes iziT-fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(300px, 0, 0); + transform: translate3d(300px, 0, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes iziT-fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(-300px, 0, 0); + transform: translate3d(-300px, 0, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes iziT-flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + } + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@-webkit-keyframes iziT-fadeOut { + from { + opacity: 1; + } + to { + opacity: 0; + } +} + +@-webkit-keyframes iziT-fadeOutDown { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@-webkit-keyframes iziT-fadeOutUp { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@-webkit-keyframes iziT-fadeOutLeft { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(-200px, 0, 0); + transform: translate3d(-200px, 0, 0); + } +} + +@-webkit-keyframes iziT-fadeOutRight { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(200px, 0, 0); + transform: translate3d(200px, 0, 0); + } +} + +@-webkit-keyframes iziT-flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +@-moz-keyframes iziT-revealIn { + 0% { + opacity: 0; + transform: scale3d(0.3, 0.3, 1); + } + 100% { + opacity: 1; + } +} + +@-webkit-keyframes iziT-revealIn { + 0% { + opacity: 0; + transform: scale3d(0.3, 0.3, 1); + } + 100% { + opacity: 1; + } +} + +@-o-keyframes iziT-revealIn { + 0% { + opacity: 0; + transform: scale3d(0.3, 0.3, 1); + } + 100% { + opacity: 1; + } +} + +@keyframes iziT-revealIn { + 0% { + opacity: 0; + transform: scale3d(0.3, 0.3, 1); + } + 100% { + opacity: 1; + } +} + +@-moz-keyframes iziT-slideIn { + 0% { + opacity: 0; + transform: translateX(50px); + } + 100% { + opacity: 1; + transform: translateX(0); + } +} + +@-webkit-keyframes iziT-slideIn { + 0% { + opacity: 0; + transform: translateX(50px); + } + 100% { + opacity: 1; + transform: translateX(0); + } +} + +@-o-keyframes iziT-slideIn { + 0% { + opacity: 0; + transform: translateX(50px); + } + 100% { + opacity: 1; + transform: translateX(0); + } +} + +@keyframes iziT-slideIn { + 0% { + opacity: 0; + transform: translateX(50px); + } + 100% { + opacity: 1; + transform: translateX(0); + } +} + +@-moz-keyframes iziT-bounceInLeft { + 0% { + opacity: 0; + transform: translateX(280px); + } + 50% { + opacity: 1; + transform: translateX(-20px); + } + 70% { + transform: translateX(10px); + } + 100% { + transform: translateX(0); + } +} + +@-webkit-keyframes iziT-bounceInLeft { + 0% { + opacity: 0; + transform: translateX(280px); + } + 50% { + opacity: 1; + transform: translateX(-20px); + } + 70% { + transform: translateX(10px); + } + 100% { + transform: translateX(0); + } +} + +@-o-keyframes iziT-bounceInLeft { + 0% { + opacity: 0; + transform: translateX(280px); + } + 50% { + opacity: 1; + transform: translateX(-20px); + } + 70% { + transform: translateX(10px); + } + 100% { + transform: translateX(0); + } +} + +@keyframes iziT-bounceInLeft { + 0% { + opacity: 0; + transform: translateX(280px); + } + 50% { + opacity: 1; + transform: translateX(-20px); + } + 70% { + transform: translateX(10px); + } + 100% { + transform: translateX(0); + } +} + +@-moz-keyframes iziT-bounceInRight { + 0% { + opacity: 0; + transform: translateX(-280px); + } + 50% { + opacity: 1; + transform: translateX(20px); + } + 70% { + transform: translateX(-10px); + } + 100% { + transform: translateX(0); + } +} + +@-webkit-keyframes iziT-bounceInRight { + 0% { + opacity: 0; + transform: translateX(-280px); + } + 50% { + opacity: 1; + transform: translateX(20px); + } + 70% { + transform: translateX(-10px); + } + 100% { + transform: translateX(0); + } +} + +@-o-keyframes iziT-bounceInRight { + 0% { + opacity: 0; + transform: translateX(-280px); + } + 50% { + opacity: 1; + transform: translateX(20px); + } + 70% { + transform: translateX(-10px); + } + 100% { + transform: translateX(0); + } +} + +@keyframes iziT-bounceInRight { + 0% { + opacity: 0; + transform: translateX(-280px); + } + 50% { + opacity: 1; + transform: translateX(20px); + } + 70% { + transform: translateX(-10px); + } + 100% { + transform: translateX(0); + } +} + +@-moz-keyframes iziT-bounceInDown { + 0% { + opacity: 0; + transform: translateY(-200px); + } + 50% { + opacity: 1; + transform: translateY(10px); + } + 70% { + transform: translateY(-5px); + } + 100% { + transform: translateY(0); + } +} + +@-webkit-keyframes iziT-bounceInDown { + 0% { + opacity: 0; + transform: translateY(-200px); + } + 50% { + opacity: 1; + transform: translateY(10px); + } + 70% { + transform: translateY(-5px); + } + 100% { + transform: translateY(0); + } +} + +@-o-keyframes iziT-bounceInDown { + 0% { + opacity: 0; + transform: translateY(-200px); + } + 50% { + opacity: 1; + transform: translateY(10px); + } + 70% { + transform: translateY(-5px); + } + 100% { + transform: translateY(0); + } +} + +@keyframes iziT-bounceInDown { + 0% { + opacity: 0; + transform: translateY(-200px); + } + 50% { + opacity: 1; + transform: translateY(10px); + } + 70% { + transform: translateY(-5px); + } + 100% { + transform: translateY(0); + } +} + +@-moz-keyframes iziT-bounceInUp { + 0% { + opacity: 0; + transform: translateY(200px); + } + 50% { + opacity: 1; + transform: translateY(-10px); + } + 70% { + transform: translateY(5px); + } + 100% { + transform: translateY(0); + } +} + +@-webkit-keyframes iziT-bounceInUp { + 0% { + opacity: 0; + transform: translateY(200px); + } + 50% { + opacity: 1; + transform: translateY(-10px); + } + 70% { + transform: translateY(5px); + } + 100% { + transform: translateY(0); + } +} + +@-o-keyframes iziT-bounceInUp { + 0% { + opacity: 0; + transform: translateY(200px); + } + 50% { + opacity: 1; + transform: translateY(-10px); + } + 70% { + transform: translateY(5px); + } + 100% { + transform: translateY(0); + } +} + +@keyframes iziT-bounceInUp { + 0% { + opacity: 0; + transform: translateY(200px); + } + 50% { + opacity: 1; + transform: translateY(-10px); + } + 70% { + transform: translateY(5px); + } + 100% { + transform: translateY(0); + } +} + +@-moz-keyframes iziT-fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@-webkit-keyframes iziT-fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@-o-keyframes iziT-fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@keyframes iziT-fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@-moz-keyframes iziT-fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes iziT-fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-o-keyframes iziT-fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes iziT-fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-moz-keyframes iziT-fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes iziT-fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-o-keyframes iziT-fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes iziT-fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-moz-keyframes iziT-fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(300px, 0, 0); + transform: translate3d(300px, 0, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes iziT-fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(300px, 0, 0); + transform: translate3d(300px, 0, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-o-keyframes iziT-fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(300px, 0, 0); + transform: translate3d(300px, 0, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes iziT-fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(300px, 0, 0); + transform: translate3d(300px, 0, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-moz-keyframes iziT-fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(-300px, 0, 0); + transform: translate3d(-300px, 0, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-webkit-keyframes iziT-fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(-300px, 0, 0); + transform: translate3d(-300px, 0, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-o-keyframes iziT-fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(-300px, 0, 0); + transform: translate3d(-300px, 0, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes iziT-fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(-300px, 0, 0); + transform: translate3d(-300px, 0, 0); + } + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@-moz-keyframes iziT-flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + } + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@-webkit-keyframes iziT-flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + } + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@-o-keyframes iziT-flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + } + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@keyframes iziT-flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + } + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@-moz-keyframes iziT-fadeOut { + from { + opacity: 1; + } + to { + opacity: 0; + } +} + +@-webkit-keyframes iziT-fadeOut { + from { + opacity: 1; + } + to { + opacity: 0; + } +} + +@-o-keyframes iziT-fadeOut { + from { + opacity: 1; + } + to { + opacity: 0; + } +} + +@keyframes iziT-fadeOut { + from { + opacity: 1; + } + to { + opacity: 0; + } +} + +@-moz-keyframes iziT-fadeOutDown { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@-webkit-keyframes iziT-fadeOutDown { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@-o-keyframes iziT-fadeOutDown { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes iziT-fadeOutDown { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@-moz-keyframes iziT-fadeOutUp { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@-webkit-keyframes iziT-fadeOutUp { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@-o-keyframes iziT-fadeOutUp { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes iziT-fadeOutUp { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@-moz-keyframes iziT-fadeOutLeft { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(-200px, 0, 0); + transform: translate3d(-200px, 0, 0); + } +} + +@-webkit-keyframes iziT-fadeOutLeft { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(-200px, 0, 0); + transform: translate3d(-200px, 0, 0); + } +} + +@-o-keyframes iziT-fadeOutLeft { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(-200px, 0, 0); + transform: translate3d(-200px, 0, 0); + } +} + +@keyframes iziT-fadeOutLeft { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(-200px, 0, 0); + transform: translate3d(-200px, 0, 0); + } +} + +@-moz-keyframes iziT-fadeOutRight { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(200px, 0, 0); + transform: translate3d(200px, 0, 0); + } +} + +@-webkit-keyframes iziT-fadeOutRight { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(200px, 0, 0); + transform: translate3d(200px, 0, 0); + } +} + +@-o-keyframes iziT-fadeOutRight { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(200px, 0, 0); + transform: translate3d(200px, 0, 0); + } +} + +@keyframes iziT-fadeOutRight { + from { + opacity: 1; + } + to { + opacity: 0; + -webkit-transform: translate3d(200px, 0, 0); + transform: translate3d(200px, 0, 0); + } +} + +@-moz-keyframes iziT-flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +@-webkit-keyframes iziT-flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +@-o-keyframes iziT-flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +@keyframes iziT-flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} \ No newline at end of file diff --git a/component/pear/css/pear.css b/component/pear/css/pear.css index a7f279c..f073338 100644 --- a/component/pear/css/pear.css +++ b/component/pear/css/pear.css @@ -5,4 +5,5 @@ @import url("module/global.css"); @import url("module/menu.css"); @import url("module/page.css"); -@import url("module/tabPage.css"); \ No newline at end of file +@import url("module/tabPage.css"); +@import url("module/toast.css"); \ No newline at end of file diff --git a/component/pear/module/extends/toast.js b/component/pear/module/extends/toast.js new file mode 100644 index 0000000..57c8ca5 --- /dev/null +++ b/component/pear/module/extends/toast.js @@ -0,0 +1,1225 @@ +(function (root, factory) { + if(typeof define === 'function' && define.amd) { + define([], factory(root)); + } else if(typeof exports === 'object') { + module.exports = factory(root); + } else if (window.layui && layui.define) { + layui.define(function(exports){ + exports('toast',factory(root)) + }) + }else { + root.iziToast = factory(root); + } +})(typeof global !== 'undefined' ? global : window || this.window || this.global, function (root) { + + 'use strict'; + + var $iziToast = {}, + PLUGIN_NAME = 'iziToast', + BODY = document.querySelector('body'), + ISMOBILE = (/Mobi/.test(navigator.userAgent)) ? true : false, + ISCHROME = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor), + ISFIREFOX = typeof InstallTrigger !== 'undefined', + ACCEPTSTOUCH = 'ontouchstart' in document.documentElement, + POSITIONS = ['bottomRight','bottomLeft','bottomCenter','topRight','topLeft','topCenter','center'], + THEMES = { + info: { + color: 'blue', + icon: 'ico-info' + }, + success: { + color: 'green', + icon: 'ico-success' + }, + warning: { + color: 'orange', + icon: 'ico-warning' + }, + error: { + color: 'red', + icon: 'ico-error' + }, + question: { + color: 'yellow', + icon: 'ico-question' + } + }, + MOBILEWIDTH = 568, + CONFIG = {}; + + $iziToast.children = {}; + + // Default settings + var defaults = { + id: null, + class: '', + title: '', + titleColor: '', + titleSize: '', + titleLineHeight: '', + message: '', + messageColor: '', + messageSize: '', + messageLineHeight: '', + backgroundColor: '', + theme: 'light', // dark + color: '', // blue, red, green, yellow + icon: '', + iconText: '', + iconColor: '', + iconUrl: null, + image: '', + imageWidth: 50, + maxWidth: null, + zindex: null, + layout: 2, + balloon: false, + close: true, + closeOnEscape: false, + closeOnClick: false, + displayMode: 0, + position: 'topCenter', // bottomRight, bottomLeft, topRight, topLeft, topCenter, bottomCenter, center + target: '', + targetFirst: true, + timeout: 3000, // 默认3秒 + rtl: false, + animateInside: false, // 动画效果 + drag: true, + pauseOnHover: true, + resetOnHover: false, + progressBar: false, + progressBarColor: '', + progressBarEasing: 'linear', + overlay: false, + overlayClose: false, + overlayColor: 'rgba(0, 0, 0, 0.6)', + transitionIn: 'fadeInDown', // bounceInLeft, bounceInRight, bounceInUp, bounceInDown, fadeIn, fadeInDown, fadeInUp, fadeInLeft, fadeInRight, flipInX + transitionOut: 'fadeOut', // fadeOut, fadeOutUp, fadeOutDown, fadeOutLeft, fadeOutRight, flipOutX + transitionInMobile: 'bounceInDown', + transitionOutMobile: 'fadeOutUp', + buttons: {}, + inputs: {}, + onOpening: function () {}, + onOpened: function () {}, + onClosing: function () {}, + onClosed: function () {} + }; + + if(!('remove' in Element.prototype)) { + Element.prototype.remove = function() { + if(this.parentNode) { + this.parentNode.removeChild(this); + } + }; + } + + if(typeof window.CustomEvent !== 'function') { + var CustomEventPolyfill = function (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; + }; + + CustomEventPolyfill.prototype = window.Event.prototype; + + window.CustomEvent = CustomEventPolyfill; + } + + var forEach = function (collection, callback, scope) { + if(Object.prototype.toString.call(collection) === '[object Object]') { + for (var prop in collection) { + if(Object.prototype.hasOwnProperty.call(collection, prop)) { + callback.call(scope, collection[prop], prop, collection); + } + } + } else { + if(collection){ + for (var i = 0, len = collection.length; i < len; i++) { + callback.call(scope, collection[i], i, collection); + } + } + } + }; + + var extend = function (defaults, options) { + var extended = {}; + forEach(defaults, function (value, prop) { + extended[prop] = defaults[prop]; + }); + forEach(options, function (value, prop) { + extended[prop] = options[prop]; + }); + return extended; + }; + + var createFragElem = function(htmlStr) { + var frag = document.createDocumentFragment(), + temp = document.createElement('div'); + temp.innerHTML = htmlStr; + while (temp.firstChild) { + frag.appendChild(temp.firstChild); + } + return frag; + }; + + var generateId = function(params) { + var newId = btoa(encodeURIComponent(params)); + return newId.replace(/=/g, ""); + }; + + var isColor = function(color){ + if( color.substring(0,1) == '#' || color.substring(0,3) == 'rgb' || color.substring(0,3) == 'hsl' ){ + return true; + } else { + return false; + } + }; + + var isBase64 = function(str) { + try { + return btoa(atob(str)) == str; + } catch (err) { + return false; + } + }; + + var drag = function() { + + return { + move: function(toast, instance, settings, xpos) { + + var opacity, + opacityRange = 0.3, + distance = 180; + + if(xpos !== 0){ + + toast.classList.add(PLUGIN_NAME+'-dragged'); + + toast.style.transform = 'translateX('+xpos + 'px)'; + + if(xpos > 0){ + opacity = (distance-xpos) / distance; + if(opacity < opacityRange){ + instance.hide(extend(settings, { transitionOut: 'fadeOutRight', transitionOutMobile: 'fadeOutRight' }), toast, 'drag'); + } + } else { + opacity = (distance+xpos) / distance; + if(opacity < opacityRange){ + instance.hide(extend(settings, { transitionOut: 'fadeOutLeft', transitionOutMobile: 'fadeOutLeft' }), toast, 'drag'); + } + } + toast.style.opacity = opacity; + + if(opacity < opacityRange){ + + if(ISCHROME || ISFIREFOX) + toast.style.left = xpos+'px'; + + toast.parentNode.style.opacity = opacityRange; + + this.stopMoving(toast, null); + } + } + + + }, + startMoving: function(toast, instance, settings, e) { + + e = e || window.event; + var posX = ((ACCEPTSTOUCH) ? e.touches[0].clientX : e.clientX), + toastLeft = toast.style.transform.replace('px)', ''); + toastLeft = toastLeft.replace('translateX(', ''); + var offsetX = posX - toastLeft; + + if(settings.transitionIn){ + toast.classList.remove(settings.transitionIn); + } + if(settings.transitionInMobile){ + toast.classList.remove(settings.transitionInMobile); + } + toast.style.transition = ''; + + if(ACCEPTSTOUCH) { + document.ontouchmove = function(e) { + e.preventDefault(); + e = e || window.event; + var posX = e.touches[0].clientX, + finalX = posX - offsetX; + drag.move(toast, instance, settings, finalX); + }; + } else { + document.onmousemove = function(e) { + e.preventDefault(); + e = e || window.event; + var posX = e.clientX, + finalX = posX - offsetX; + drag.move(toast, instance, settings, finalX); + }; + } + + }, + stopMoving: function(toast, e) { + + if(ACCEPTSTOUCH) { + document.ontouchmove = function() {}; + } else { + document.onmousemove = function() {}; + } + + toast.style.opacity = ''; + toast.style.transform = ''; + + if(toast.classList.contains(PLUGIN_NAME+'-dragged')){ + + toast.classList.remove(PLUGIN_NAME+'-dragged'); + + toast.style.transition = 'transform 0.4s ease, opacity 0.4s ease'; + setTimeout(function() { + toast.style.transition = ''; + }, 400); + } + + } + }; + + }(); + + $iziToast.setSetting = function (ref, option, value) { + + $iziToast.children[ref][option] = value; + + }; + + $iziToast.getSetting = function (ref, option) { + + return $iziToast.children[ref][option]; + + }; + + $iziToast.destroy = function () { + + forEach(document.querySelectorAll('.'+PLUGIN_NAME+'-overlay'), function(element, index) { + element.remove(); + }); + + forEach(document.querySelectorAll('.'+PLUGIN_NAME+'-wrapper'), function(element, index) { + element.remove(); + }); + + forEach(document.querySelectorAll('.'+PLUGIN_NAME), function(element, index) { + element.remove(); + }); + + this.children = {}; + + // Remove event listeners + document.removeEventListener(PLUGIN_NAME+'-opened', {}, false); + document.removeEventListener(PLUGIN_NAME+'-opening', {}, false); + document.removeEventListener(PLUGIN_NAME+'-closing', {}, false); + document.removeEventListener(PLUGIN_NAME+'-closed', {}, false); + document.removeEventListener('keyup', {}, false); + + // Reset variables + CONFIG = {}; + }; + + /** + * Initialize Plugin + * @public + * @param {Object} options User settings + */ + $iziToast.settings = function (options) { + + // Destroy any existing initializations + $iziToast.destroy(); + + CONFIG = options; + defaults = extend(defaults, options || {}); + }; + + + /** + * Building themes functions. + * @public + * @param {Object} options User settings + */ + forEach(THEMES, function (theme, name) { + + $iziToast[name] = function (options) { + + var settings = extend(CONFIG, options || {}); + settings = extend(theme, settings || {}); + + this.show(settings); + }; + + }); + + + /** + * Do the calculation to move the progress bar + * @private + */ + $iziToast.progress = function (options, $toast, callback) { + + + var that = this, + ref = $toast.getAttribute('data-iziToast-ref'), + settings = extend(this.children[ref], options || {}), + $elem = $toast.querySelector('.'+PLUGIN_NAME+'-progressbar div'); + + return { + start: function() { + + if(typeof settings.time.REMAINING == 'undefined'){ + + $toast.classList.remove(PLUGIN_NAME+'-reseted'); + + if($elem !== null){ + $elem.style.transition = 'width '+ settings.timeout +'ms '+settings.progressBarEasing; + $elem.style.width = '0%'; + } + + settings.time.START = new Date().getTime(); + settings.time.END = settings.time.START + settings.timeout; + settings.time.TIMER = setTimeout(function() { + + clearTimeout(settings.time.TIMER); + + if(!$toast.classList.contains(PLUGIN_NAME+'-closing')){ + + that.hide(settings, $toast, 'timeout'); + + if(typeof callback === 'function'){ + callback.apply(that); + } + } + + }, settings.timeout); + that.setSetting(ref, 'time', settings.time); + } + }, + pause: function() { + + if(typeof settings.time.START !== 'undefined' && !$toast.classList.contains(PLUGIN_NAME+'-paused') && !$toast.classList.contains(PLUGIN_NAME+'-reseted')){ + + $toast.classList.add(PLUGIN_NAME+'-paused'); + + settings.time.REMAINING = settings.time.END - new Date().getTime(); + + clearTimeout(settings.time.TIMER); + + that.setSetting(ref, 'time', settings.time); + + if($elem !== null){ + var computedStyle = window.getComputedStyle($elem), + propertyWidth = computedStyle.getPropertyValue('width'); + + $elem.style.transition = 'none'; + $elem.style.width = propertyWidth; + } + + if(typeof callback === 'function'){ + setTimeout(function() { + callback.apply(that); + }, 10); + } + } + }, + resume: function() { + + if(typeof settings.time.REMAINING !== 'undefined'){ + + $toast.classList.remove(PLUGIN_NAME+'-paused'); + + if($elem !== null){ + $elem.style.transition = 'width '+ settings.time.REMAINING +'ms '+settings.progressBarEasing; + $elem.style.width = '0%'; + } + + settings.time.END = new Date().getTime() + settings.time.REMAINING; + settings.time.TIMER = setTimeout(function() { + + clearTimeout(settings.time.TIMER); + + if(!$toast.classList.contains(PLUGIN_NAME+'-closing')){ + + that.hide(settings, $toast, 'timeout'); + + if(typeof callback === 'function'){ + callback.apply(that); + } + } + + + }, settings.time.REMAINING); + + that.setSetting(ref, 'time', settings.time); + } else { + this.start(); + } + }, + reset: function(){ + + clearTimeout(settings.time.TIMER); + + delete settings.time.REMAINING; + + that.setSetting(ref, 'time', settings.time); + + $toast.classList.add(PLUGIN_NAME+'-reseted'); + + $toast.classList.remove(PLUGIN_NAME+'-paused'); + + if($elem !== null){ + $elem.style.transition = 'none'; + $elem.style.width = '100%'; + } + + if(typeof callback === 'function'){ + setTimeout(function() { + callback.apply(that); + }, 10); + } + } + }; + + }; + + + /** + * Close the specific Toast + * @public + * @param {Object} options User settings + */ + $iziToast.hide = function (options, $toast, closedBy) { + + if(typeof $toast != 'object'){ + $toast = document.querySelector($toast); + } + + var that = this, + settings = extend(this.children[$toast.getAttribute('data-iziToast-ref')], options || {}); + settings.closedBy = closedBy || null; + + delete settings.time.REMAINING; + + $toast.classList.add(PLUGIN_NAME+'-closing'); + + // Overlay + (function(){ + + var $overlay = document.querySelector('.'+PLUGIN_NAME+'-overlay'); + if($overlay !== null){ + var refs = $overlay.getAttribute('data-iziToast-ref'); + refs = refs.split(','); + var index = refs.indexOf(String(settings.ref)); + + if(index !== -1){ + refs.splice(index, 1); + } + $overlay.setAttribute('data-iziToast-ref', refs.join()); + + if(refs.length === 0){ + $overlay.classList.remove('fadeIn'); + $overlay.classList.add('fadeOut'); + setTimeout(function() { + $overlay.remove(); + }, 700); + } + } + + })(); + + if(settings.transitionIn){ + $toast.classList.remove(settings.transitionIn); + } + + if(settings.transitionInMobile){ + $toast.classList.remove(settings.transitionInMobile); + } + + if(ISMOBILE || window.innerWidth <= MOBILEWIDTH){ + if(settings.transitionOutMobile) + $toast.classList.add(settings.transitionOutMobile); + } else { + if(settings.transitionOut) + $toast.classList.add(settings.transitionOut); + } + var H = $toast.parentNode.offsetHeight; + $toast.parentNode.style.height = H+'px'; + $toast.style.pointerEvents = 'none'; + + if(!ISMOBILE || window.innerWidth > MOBILEWIDTH){ + $toast.parentNode.style.transitionDelay = '0.2s'; + } + + try { + var event = new CustomEvent(PLUGIN_NAME+'-closing', {detail: settings, bubbles: true, cancelable: true}); + document.dispatchEvent(event); + } catch(ex){ + console.warn(ex); + } + + setTimeout(function() { + + $toast.parentNode.style.height = '0px'; + $toast.parentNode.style.overflow = ''; + + setTimeout(function(){ + + delete that.children[settings.ref]; + + $toast.parentNode.remove(); + + try { + var event = new CustomEvent(PLUGIN_NAME+'-closed', {detail: settings, bubbles: true, cancelable: true}); + document.dispatchEvent(event); + } catch(ex){ + console.warn(ex); + } + + if(typeof settings.onClosed !== 'undefined'){ + settings.onClosed.apply(null, [settings, $toast, closedBy]); + } + + }, 1000); + }, 200); + + + if(typeof settings.onClosing !== 'undefined'){ + settings.onClosing.apply(null, [settings, $toast, closedBy]); + } + }; + + /** + * Create and show the Toast + * @public + * @param {Object} options User settings + */ + $iziToast.show = function (options) { + + var that = this; + + // Merge user options with defaults + var settings = extend(CONFIG, options || {}); + settings = extend(defaults, settings); + settings.time = {}; + + if(settings.id === null){ + settings.id = generateId(settings.title+settings.message+settings.color); + } + + if(settings.displayMode === 1 || settings.displayMode == 'once'){ + try { + if(document.querySelectorAll('.'+PLUGIN_NAME+'#'+settings.id).length > 0){ + return false; + } + } catch (exc) { + console.warn('['+PLUGIN_NAME+'] Could not find an element with this selector: '+'#'+settings.id+'. Try to set an valid id.'); + } + } + + if(settings.displayMode === 2 || settings.displayMode == 'replace'){ + try { + forEach(document.querySelectorAll('.'+PLUGIN_NAME+'#'+settings.id), function(element, index) { + that.hide(settings, element, 'replaced'); + }); + } catch (exc) { + console.warn('['+PLUGIN_NAME+'] Could not find an element with this selector: '+'#'+settings.id+'. Try to set an valid id.'); + } + } + + settings.ref = new Date().getTime() + Math.floor((Math.random() * 10000000) + 1); + + $iziToast.children[settings.ref] = settings; + + var $DOM = { + body: document.querySelector('body'), + overlay: document.createElement('div'), + toast: document.createElement('div'), + toastBody: document.createElement('div'), + toastTexts: document.createElement('div'), + toastCapsule: document.createElement('div'), + cover: document.createElement('div'), + buttons: document.createElement('div'), + inputs: document.createElement('div'), + icon: !settings.iconUrl ? document.createElement('i') : document.createElement('img'), + wrapper: null + }; + + $DOM.toast.setAttribute('data-iziToast-ref', settings.ref); + $DOM.toast.appendChild($DOM.toastBody); + $DOM.toastCapsule.appendChild($DOM.toast); + + // CSS Settings + (function(){ + + $DOM.toast.classList.add(PLUGIN_NAME); + $DOM.toast.classList.add(PLUGIN_NAME+'-opening'); + $DOM.toastCapsule.classList.add(PLUGIN_NAME+'-capsule'); + $DOM.toastBody.classList.add(PLUGIN_NAME + '-body'); + $DOM.toastTexts.classList.add(PLUGIN_NAME + '-texts'); + + if(ISMOBILE || window.innerWidth <= MOBILEWIDTH){ + if(settings.transitionInMobile) + $DOM.toast.classList.add(settings.transitionInMobile); + } else { + if(settings.transitionIn) + $DOM.toast.classList.add(settings.transitionIn); + } + + if(settings.class){ + var classes = settings.class.split(' '); + forEach(classes, function (value, index) { + $DOM.toast.classList.add(value); + }); + } + + if(settings.id){ $DOM.toast.id = settings.id; } + + if(settings.rtl){ + $DOM.toast.classList.add(PLUGIN_NAME + '-rtl'); + $DOM.toast.setAttribute('dir', 'rtl'); + } + + if(settings.layout > 1){ $DOM.toast.classList.add(PLUGIN_NAME+'-layout'+settings.layout); } + + if(settings.balloon){ $DOM.toast.classList.add(PLUGIN_NAME+'-balloon'); } + + if(settings.maxWidth){ + if( !isNaN(settings.maxWidth) ){ + $DOM.toast.style.maxWidth = settings.maxWidth+'px'; + } else { + $DOM.toast.style.maxWidth = settings.maxWidth; + } + } + + if(settings.theme !== '' || settings.theme !== 'light') { + + $DOM.toast.classList.add(PLUGIN_NAME+'-theme-'+settings.theme); + } + + if(settings.color) { //#, rgb, rgba, hsl + + if( isColor(settings.color) ){ + $DOM.toast.style.background = settings.color; + } else { + $DOM.toast.classList.add(PLUGIN_NAME+'-color-'+settings.color); + } + } + + if(settings.backgroundColor) { + $DOM.toast.style.background = settings.backgroundColor; + if(settings.balloon){ + $DOM.toast.style.borderColor = settings.backgroundColor; + } + } + })(); + + // Cover image + (function(){ + if(settings.image) { + $DOM.cover.classList.add(PLUGIN_NAME + '-cover'); + $DOM.cover.style.width = settings.imageWidth + 'px'; + + if(isBase64(settings.image.replace(/ /g,''))){ + $DOM.cover.style.backgroundImage = 'url(data:image/png;base64,' + settings.image.replace(/ /g,'') + ')'; + } else { + $DOM.cover.style.backgroundImage = 'url(' + settings.image + ')'; + } + + if(settings.rtl){ + $DOM.toastBody.style.marginRight = (settings.imageWidth + 10) + 'px'; + } else { + $DOM.toastBody.style.marginLeft = (settings.imageWidth + 10) + 'px'; + } + $DOM.toast.appendChild($DOM.cover); + } + })(); + + // Button close + (function(){ + if(settings.close){ + + $DOM.buttonClose = document.createElement('button'); + $DOM.buttonClose.type = 'button'; + $DOM.buttonClose.classList.add(PLUGIN_NAME + '-close'); + $DOM.buttonClose.addEventListener('click', function (e) { + var button = e.target; + that.hide(settings, $DOM.toast, 'button'); + }); + $DOM.toast.appendChild($DOM.buttonClose); + } else { + if(settings.rtl){ + $DOM.toast.style.paddingLeft = '18px'; + } else { + $DOM.toast.style.paddingRight = '18px'; + } + } + })(); + + // Progress Bar & Timeout + (function(){ + + if(settings.progressBar){ + $DOM.progressBar = document.createElement('div'); + $DOM.progressBarDiv = document.createElement('div'); + $DOM.progressBar.classList.add(PLUGIN_NAME + '-progressbar'); + $DOM.progressBarDiv.style.background = settings.progressBarColor; + $DOM.progressBar.appendChild($DOM.progressBarDiv); + $DOM.toast.appendChild($DOM.progressBar); + } + + if(settings.timeout) { + + if(settings.pauseOnHover && !settings.resetOnHover){ + + $DOM.toast.addEventListener('mouseenter', function (e) { + that.progress(settings, $DOM.toast).pause(); + }); + $DOM.toast.addEventListener('mouseleave', function (e) { + that.progress(settings, $DOM.toast).resume(); + }); + } + + if(settings.resetOnHover){ + + $DOM.toast.addEventListener('mouseenter', function (e) { + that.progress(settings, $DOM.toast).reset(); + }); + $DOM.toast.addEventListener('mouseleave', function (e) { + that.progress(settings, $DOM.toast).start(); + }); + } + } + })(); + + // Icon + (function(){ + + if(settings.iconUrl) { + + $DOM.icon.setAttribute('class', PLUGIN_NAME + '-icon'); + $DOM.icon.setAttribute('src', settings.iconUrl); + + } else if(settings.icon) { + $DOM.icon.setAttribute('class', PLUGIN_NAME + '-icon ' + settings.icon); + + if(settings.iconText){ + $DOM.icon.appendChild(document.createTextNode(settings.iconText)); + } + + if(settings.iconColor){ + $DOM.icon.style.color = settings.iconColor; + } + } + + if(settings.icon || settings.iconUrl) { + + if(settings.rtl){ + $DOM.toastBody.style.paddingRight = '33px'; + } else { + $DOM.toastBody.style.paddingLeft = '33px'; + } + + $DOM.toastBody.appendChild($DOM.icon); + } + + })(); + + // Title & Message + (function(){ + if(settings.title.length > 0) { + + $DOM.strong = document.createElement('strong'); + $DOM.strong.classList.add(PLUGIN_NAME + '-title'); + $DOM.strong.appendChild(createFragElem(settings.title)); + $DOM.toastTexts.appendChild($DOM.strong); + + if(settings.titleColor) { + $DOM.strong.style.color = settings.titleColor; + } + if(settings.titleSize) { + if( !isNaN(settings.titleSize) ){ + $DOM.strong.style.fontSize = settings.titleSize+'px'; + } else { + $DOM.strong.style.fontSize = settings.titleSize; + } + } + if(settings.titleLineHeight) { + if( !isNaN(settings.titleSize) ){ + $DOM.strong.style.lineHeight = settings.titleLineHeight+'px'; + } else { + $DOM.strong.style.lineHeight = settings.titleLineHeight; + } + } + } + + if(settings.message.length > 0) { + + $DOM.p = document.createElement('p'); + $DOM.p.classList.add(PLUGIN_NAME + '-message'); + $DOM.p.appendChild(createFragElem(settings.message)); + $DOM.toastTexts.appendChild($DOM.p); + + if(settings.messageColor) { + $DOM.p.style.color = settings.messageColor; + } + if(settings.messageSize) { + if( !isNaN(settings.titleSize) ){ + $DOM.p.style.fontSize = settings.messageSize+'px'; + } else { + $DOM.p.style.fontSize = settings.messageSize; + } + } + if(settings.messageLineHeight) { + + if( !isNaN(settings.titleSize) ){ + $DOM.p.style.lineHeight = settings.messageLineHeight+'px'; + } else { + $DOM.p.style.lineHeight = settings.messageLineHeight; + } + } + } + + if(settings.title.length > 0 && settings.message.length > 0) { + if(settings.rtl){ + $DOM.strong.style.marginLeft = '10px'; + } else if(settings.layout !== 2 && !settings.rtl) { + $DOM.strong.style.marginRight = '10px'; + } + } + })(); + + $DOM.toastBody.appendChild($DOM.toastTexts); + + // Inputs + var $inputs; + (function(){ + if(settings.inputs.length > 0) { + + $DOM.inputs.classList.add(PLUGIN_NAME + '-inputs'); + + forEach(settings.inputs, function (value, index) { + $DOM.inputs.appendChild(createFragElem(value[0])); + + $inputs = $DOM.inputs.childNodes; + + $inputs[index].classList.add(PLUGIN_NAME + '-inputs-child'); + + if(value[3]){ + setTimeout(function() { + $inputs[index].focus(); + }, 300); + } + + $inputs[index].addEventListener(value[1], function (e) { + var ts = value[2]; + return ts(that, $DOM.toast, this, e); + }); + }); + $DOM.toastBody.appendChild($DOM.inputs); + } + })(); + + // Buttons + (function(){ + if(settings.buttons.length > 0) { + + $DOM.buttons.classList.add(PLUGIN_NAME + '-buttons'); + + forEach(settings.buttons, function (value, index) { + $DOM.buttons.appendChild(createFragElem(value[0])); + + var $btns = $DOM.buttons.childNodes; + + $btns[index].classList.add(PLUGIN_NAME + '-buttons-child'); + + if(value[2]){ + setTimeout(function() { + $btns[index].focus(); + }, 300); + } + + $btns[index].addEventListener('click', function (e) { + e.preventDefault(); + var ts = value[1]; + return ts(that, $DOM.toast, this, e, $inputs); + }); + }); + } + $DOM.toastBody.appendChild($DOM.buttons); + })(); + + if(settings.message.length > 0 && (settings.inputs.length > 0 || settings.buttons.length > 0)) { + $DOM.p.style.marginBottom = '0'; + } + + if(settings.inputs.length > 0 || settings.buttons.length > 0){ + if(settings.rtl){ + $DOM.toastTexts.style.marginLeft = '10px'; + } else { + $DOM.toastTexts.style.marginRight = '10px'; + } + if(settings.inputs.length > 0 && settings.buttons.length > 0){ + if(settings.rtl){ + $DOM.inputs.style.marginLeft = '8px'; + } else { + $DOM.inputs.style.marginRight = '8px'; + } + } + } + + // Wrap + (function(){ + $DOM.toastCapsule.style.visibility = 'hidden'; + setTimeout(function() { + var H = $DOM.toast.offsetHeight; + var style = $DOM.toast.currentStyle || window.getComputedStyle($DOM.toast); + var marginTop = style.marginTop; + marginTop = marginTop.split('px'); + marginTop = parseInt(marginTop[0]); + var marginBottom = style.marginBottom; + marginBottom = marginBottom.split('px'); + marginBottom = parseInt(marginBottom[0]); + + $DOM.toastCapsule.style.visibility = ''; + $DOM.toastCapsule.style.height = (H+marginBottom+marginTop)+'px'; + + setTimeout(function() { + $DOM.toastCapsule.style.height = 'auto'; + if(settings.target){ + $DOM.toastCapsule.style.overflow = 'visible'; + } + }, 500); + + if(settings.timeout) { + that.progress(settings, $DOM.toast).start(); + } + }, 100); + })(); + + // Target + (function(){ + var position = settings.position; + + if(settings.target){ + + $DOM.wrapper = document.querySelector(settings.target); + $DOM.wrapper.classList.add(PLUGIN_NAME + '-target'); + + if(settings.targetFirst) { + $DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild); + } else { + $DOM.wrapper.appendChild($DOM.toastCapsule); + } + + } else { + + if( POSITIONS.indexOf(settings.position) == -1 ){ + console.warn('['+PLUGIN_NAME+'] Incorrect position.\nIt can be › ' + POSITIONS); + return; + } + + if(ISMOBILE || window.innerWidth <= MOBILEWIDTH){ + if(settings.position == 'bottomLeft' || settings.position == 'bottomRight' || settings.position == 'bottomCenter'){ + position = PLUGIN_NAME+'-wrapper-bottomCenter'; + } + else if(settings.position == 'topLeft' || settings.position == 'topRight' || settings.position == 'topCenter'){ + position = PLUGIN_NAME+'-wrapper-topCenter'; + } + else { + position = PLUGIN_NAME+'-wrapper-center'; + } + } else { + position = PLUGIN_NAME+'-wrapper-'+position; + } + $DOM.wrapper = document.querySelector('.' + PLUGIN_NAME + '-wrapper.'+position); + + if(!$DOM.wrapper) { + $DOM.wrapper = document.createElement('div'); + $DOM.wrapper.classList.add(PLUGIN_NAME + '-wrapper'); + $DOM.wrapper.classList.add(position); + document.body.appendChild($DOM.wrapper); + } + if(settings.position == 'topLeft' || settings.position == 'topCenter' || settings.position == 'topRight'){ + $DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild); + } else { + $DOM.wrapper.appendChild($DOM.toastCapsule); + } + } + + if(!isNaN(settings.zindex)) { + $DOM.wrapper.style.zIndex = settings.zindex; + } else { + console.warn('['+PLUGIN_NAME+'] Invalid zIndex.'); + } + })(); + + // Overlay + (function(){ + + if(settings.overlay) { + + if( document.querySelector('.'+PLUGIN_NAME+'-overlay.fadeIn') !== null ){ + + $DOM.overlay = document.querySelector('.'+PLUGIN_NAME+'-overlay'); + $DOM.overlay.setAttribute('data-iziToast-ref', $DOM.overlay.getAttribute('data-iziToast-ref') + ',' + settings.ref); + + if(!isNaN(settings.zindex) && settings.zindex !== null) { + $DOM.overlay.style.zIndex = settings.zindex-1; + } + + } else { + + $DOM.overlay.classList.add(PLUGIN_NAME+'-overlay'); + $DOM.overlay.classList.add('fadeIn'); + $DOM.overlay.style.background = settings.overlayColor; + $DOM.overlay.setAttribute('data-iziToast-ref', settings.ref); + if(!isNaN(settings.zindex) && settings.zindex !== null) { + $DOM.overlay.style.zIndex = settings.zindex-1; + } + document.querySelector('body').appendChild($DOM.overlay); + } + + if(settings.overlayClose) { + + $DOM.overlay.removeEventListener('click', {}); + $DOM.overlay.addEventListener('click', function (e) { + that.hide(settings, $DOM.toast, 'overlay'); + }); + } else { + $DOM.overlay.removeEventListener('click', {}); + } + } + })(); + + // Inside animations + (function(){ + if(settings.animateInside){ + $DOM.toast.classList.add(PLUGIN_NAME+'-animateInside'); + + var animationTimes = [200, 100, 300]; + if(settings.transitionIn == 'bounceInLeft' || settings.transitionIn == 'bounceInRight'){ + animationTimes = [400, 200, 400]; + } + + if(settings.title.length > 0) { + setTimeout(function(){ + $DOM.strong.classList.add('slideIn'); + }, animationTimes[0]); + } + + if(settings.message.length > 0) { + setTimeout(function(){ + $DOM.p.classList.add('slideIn'); + }, animationTimes[1]); + } + + if(settings.icon || settings.iconUrl) { + setTimeout(function(){ + $DOM.icon.classList.add('revealIn'); + }, animationTimes[2]); + } + + var counter = 150; + if(settings.buttons.length > 0 && $DOM.buttons) { + + setTimeout(function(){ + + forEach($DOM.buttons.childNodes, function(element, index) { + + setTimeout(function(){ + element.classList.add('revealIn'); + }, counter); + counter = counter + 150; + }); + + }, settings.inputs.length > 0 ? 150 : 0); + } + + if(settings.inputs.length > 0 && $DOM.inputs) { + counter = 150; + forEach($DOM.inputs.childNodes, function(element, index) { + + setTimeout(function(){ + element.classList.add('revealIn'); + }, counter); + counter = counter + 150; + }); + } + } + })(); + + settings.onOpening.apply(null, [settings, $DOM.toast]); + + try { + var event = new CustomEvent(PLUGIN_NAME + '-opening', {detail: settings, bubbles: true, cancelable: true}); + document.dispatchEvent(event); + } catch(ex){ + console.warn(ex); + } + + setTimeout(function() { + + $DOM.toast.classList.remove(PLUGIN_NAME+'-opening'); + $DOM.toast.classList.add(PLUGIN_NAME+'-opened'); + + try { + var event = new CustomEvent(PLUGIN_NAME + '-opened', {detail: settings, bubbles: true, cancelable: true}); + document.dispatchEvent(event); + } catch(ex){ + console.warn(ex); + } + + settings.onOpened.apply(null, [settings, $DOM.toast]); + }, 1000); + + if(settings.drag){ + + if(ACCEPTSTOUCH) { + + $DOM.toast.addEventListener('touchstart', function(e) { + drag.startMoving(this, that, settings, e); + }, false); + + $DOM.toast.addEventListener('touchend', function(e) { + drag.stopMoving(this, e); + }, false); + } else { + + $DOM.toast.addEventListener('mousedown', function(e) { + e.preventDefault(); + drag.startMoving(this, that, settings, e); + }, false); + + $DOM.toast.addEventListener('mouseup', function(e) { + e.preventDefault(); + drag.stopMoving(this, e); + }, false); + } + } + + if(settings.closeOnEscape) { + + document.addEventListener('keyup', function (evt) { + evt = evt || window.event; + if(evt.keyCode == 27) { + that.hide(settings, $DOM.toast, 'esc'); + } + }); + } + + if(settings.closeOnClick) { + $DOM.toast.addEventListener('click', function (evt) { + that.hide(settings, $DOM.toast, 'toast'); + }); + } + + that.toast = $DOM.toast; + }; + return $iziToast; +}); \ No newline at end of file diff --git a/component/pear/pear.js b/component/pear/pear.js index baf2219..a92f3f3 100644 --- a/component/pear/pear.js +++ b/component/pear/pear.js @@ -17,14 +17,13 @@ layui.config({ messageCenter: "messageCenter", button: "button", theme: "theme", + popup:"extends/popup", + count:"extends/count", + toast:"extends/toast", + nprogress: "extends/nprogress", echarts: "extends/echarts", echartsTheme: "extends/echartsTheme", - yaml:"extends/yaml", - nprogress: "extends/nprogress", - toast: "extends/toast", - popup:"extends/popup", - count:"extends/count", - + yaml:"extends/yaml" }).use(['layer', 'theme'], function () { }); \ No newline at end of file diff --git a/view/component/table.html b/view/component/table.html new file mode 100644 index 0000000..c16d6cd --- /dev/null +++ b/view/component/table.html @@ -0,0 +1,375 @@ + + + + + + table 组件综合演示 - Layui + + + + + + + +
                                      +
                                      +
                                      + + + + + + + \ No newline at end of file diff --git a/view/component/toast.html b/view/component/toast.html new file mode 100644 index 0000000..863b2a3 --- /dev/null +++ b/view/component/toast.html @@ -0,0 +1,61 @@ + + + + + + + 通知组件 + + +
                                      +
                                      +
                                      +
                                      +
                                      基础使用
                                      +
                                      + + + + + +
                                      +
                                      +
                                      +
                                      +
                                      + + + + \ No newline at end of file -- Gitee From 0cff93fb7161d3e80c7dbb0cca3106f45f60da9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Wed, 28 Jun 2023 13:15:27 +0800 Subject: [PATCH 38/67] update --- admin/data/menu.json | 13 +- admin/data/table.json | 278 ++ admin/data/treeTable.json | 5078 +++++++++++++++++++++++++++++++++ view/component/table.html | 10 +- view/component/treeTable.html | 131 + 5 files changed, 5504 insertions(+), 6 deletions(-) create mode 100644 admin/data/treeTable.json create mode 100644 view/component/treeTable.html diff --git a/admin/data/menu.json b/admin/data/menu.json index 9847c35..6055317 100644 --- a/admin/data/menu.json +++ b/admin/data/menu.json @@ -26,14 +26,21 @@ "type": 0, "children": [ { - "id": 22, + "id": 21, "title": "数据表格", "icon": "layui-icon layui-icon-face-smile", "type": 1, "openType": "_component", "href": "view/component/table.html" },{ - "id": 21, + "id": 22, + "title": "树形表格", + "icon": "layui-icon layui-icon-face-smile", + "type": 1, + "openType": "_component", + "href": "view/component/treeTable.html" + },{ + "id": 23, "title": "24 栅格", "icon": "layui-icon layui-icon-face-smile", "type": 1, @@ -41,7 +48,7 @@ "href": "view/component/grid.html" }, { - "id": 23, + "id": 24, "title": "消息提示", "icon": "layui-icon layui-icon-face-smile", "type": 1, diff --git a/admin/data/table.json b/admin/data/table.json index e69de29..a1af523 100644 --- a/admin/data/table.json +++ b/admin/data/table.json @@ -0,0 +1,278 @@ +{ + "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": "12" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10002" + ,"username": "杜甫" + ,"email": "test2@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "舍南舍北皆春水,但见群鸥日日来。花径不曾缘客扫,蓬门今始为君开。盘飧市远无兼味,樽酒家贫只旧醅。肯与邻翁相对饮,隔篱呼取尽余杯。" + ,"experience": "116" + ,"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": "65" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10004" + ,"username": "李清照" + ,"email": "test4@email.com" + ,"sex": "女" + ,"city": "浙江杭州" + ,"sign": "昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否,知否?应是绿肥红瘦。" + ,"experience": "777" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10005" + ,"username": "冰心" + ,"email": "test5@email.com" + ,"sex": "女" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "86" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10006" + ,"username": "张三" + ,"email": "test6@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "12" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10007" + ,"username": "张三7" + ,"email": "test7@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "16" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10008" + ,"username": "张三8" + ,"email": "test8@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "106" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10009" + ,"username": "张三9" + ,"email": "test9@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "106" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10010" + ,"username": "张三10" + ,"email": "test10@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "106" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10011" + ,"username": "张三11" + ,"email": "test11@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "106" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10012" + ,"username": "张三12" + ,"email": "test12@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "106" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10013" + ,"username": "张三13" + ,"email": "test13@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "106" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10014" + ,"username": "张三14" + ,"email": "test14@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "106" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10015" + ,"username": "张三15" + ,"email": "test15@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "106" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10016" + ,"username": "张三16" + ,"email": "test16@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "106" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10017" + ,"username": "张三17" + ,"email": "test17@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "106" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10018" + ,"username": "张三18" + ,"email": "test18@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "106" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10019" + ,"username": "张三19" + ,"email": "test19@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "106" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10020" + ,"username": "张三20" + ,"email": "test20@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "106" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10021" + ,"username": "张三21" + ,"email": "test21@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "106" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10022" + ,"username": "张三22" + ,"email": "test22@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "106" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10023" + ,"username": "张三23" + ,"email": "test23@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "106" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }, { + "id": "10024" + ,"username": "张三24" + ,"email": "test24@email.com" + ,"sex": "男" + ,"city": "浙江杭州" + ,"sign": "保持真善美,温和待人" + ,"experience": "106" + ,"ip": "192.168.0.8" + ,"checkin": "106" + ,"joinTime": "2016-10-14" + }] + } \ No newline at end of file diff --git a/admin/data/treeTable.json b/admin/data/treeTable.json new file mode 100644 index 0000000..a861d6a --- /dev/null +++ b/admin/data/treeTable.json @@ -0,0 +1,5078 @@ +{ + "code": 0, + "count": 1000, + "data": [ + { + "id": 1, + "name": "User-1", + "type": 4, + "status": 2, + "score": 28, + "experience": 54981, + "sex": "男", + "city": "丽江市", + "description": "-", + "createTime": "2014-06-04 12:29:55", + "parentId": null, + "children": [ + { + "id": 2, + "name": "User-2", + "type": 2, + "status": 3, + "score": 75, + "experience": 43884, + "sex": "女", + "city": "大理白族自治州", + "description": "-", + "createTime": "1971-11-03 19:15:43", + "parentId": null, + "children": [ + { + "id": 3, + "name": "User-3", + "type": 2, + "status": 3, + "score": 72, + "experience": 75912, + "sex": "女", + "city": "渭南市", + "description": "-", + "createTime": "2022-01-17 01:48:02", + "parentId": null, + "children": [ + { + "id": 4, + "name": "User-4", + "type": 3, + "status": 3, + "score": 21, + "experience": 23198, + "sex": "男", + "city": "海外", + "description": "-", + "createTime": "1986-11-06 23:56:45", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 5, + "name": "User-5", + "type": 3, + "status": 3, + "score": 89, + "experience": 25710, + "sex": "女", + "city": "盐城市", + "description": "-", + "createTime": "2007-10-03 21:44:59", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 6, + "name": "User-6", + "type": 2, + "status": 4, + "score": 70, + "experience": 51144, + "sex": "男", + "city": "益阳市", + "description": "-", + "createTime": "2017-02-21 00:26:02", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 7, + "name": "User-7", + "type": 5, + "status": 3, + "score": 24, + "experience": 64919, + "sex": "男", + "city": "贵港市", + "description": "-", + "createTime": "1981-05-14 17:52:03", + "parentId": null, + "children": [ + { + "id": 8, + "name": "User-8", + "type": 6, + "status": 2, + "score": 2, + "experience": 80656, + "sex": "男", + "city": "宿迁市", + "description": "-", + "createTime": "1984-05-24 20:44:26", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 9, + "name": "User-9", + "type": 6, + "status": 2, + "score": 58, + "experience": 2414, + "sex": "女", + "city": "宿州市", + "description": "-", + "createTime": "2015-05-06 00:39:19", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 10, + "name": "User-10", + "type": 4, + "status": 2, + "score": 89, + "experience": 97592, + "sex": "女", + "city": "钦州市", + "description": "-", + "createTime": "1985-05-26 03:50:09", + "parentId": null, + "children": [ + { + "id": 11, + "name": "User-11", + "type": 2, + "status": 2, + "score": 85, + "experience": 37406, + "sex": "女", + "city": "黄南藏族自治州", + "description": "-", + "createTime": "2022-10-09 11:51:44", + "parentId": null, + "children": [ + { + "id": 12, + "name": "User-12", + "type": 4, + "status": 3, + "score": 40, + "experience": 13714, + "sex": "女", + "city": "黔东南苗族侗族自治州", + "description": "-", + "createTime": "1991-09-01 09:19:11", + "parentId": null, + "children": [ + { + "id": 13, + "name": "User-13", + "type": 5, + "status": 4, + "score": 47, + "experience": 89189, + "sex": "男", + "city": "金昌市", + "description": "-", + "createTime": "1978-12-03 09:59:56", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 14, + "name": "User-14", + "type": 2, + "status": 3, + "score": 53, + "experience": 10739, + "sex": "女", + "city": "上海市", + "description": "-", + "createTime": "1989-03-31 19:08:12", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 15, + "name": "User-15", + "type": 5, + "status": 2, + "score": 76, + "experience": 40019, + "sex": "男", + "city": "遵义市", + "description": "-", + "createTime": "1996-12-12 16:34:05", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 16, + "name": "User-16", + "type": 3, + "status": 1, + "score": 81, + "experience": 30559, + "sex": "男", + "city": "开封市", + "description": "-", + "createTime": "1979-09-24 03:53:59", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 17, + "name": "User-17", + "type": 6, + "status": 4, + "score": 16, + "experience": 56549, + "sex": "女", + "city": "宁波市", + "description": "-", + "createTime": "1994-06-30 15:07:08", + "parentId": null, + "children": [ + { + "id": 18, + "name": "User-18", + "type": 2, + "status": 2, + "score": 22, + "experience": 31311, + "sex": "男", + "city": "黔东南苗族侗族自治州", + "description": "-", + "createTime": "1995-10-07 06:13:07", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 19, + "name": "User-19", + "type": 3, + "status": 1, + "score": 23, + "experience": 63334, + "sex": "女", + "city": "离岛", + "description": "-", + "createTime": "2002-09-25 11:36:07", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 20, + "name": "User-20", + "type": 2, + "status": 2, + "score": 30, + "experience": 5650, + "sex": "男", + "city": "许昌市", + "description": "-", + "createTime": "2001-08-08 14:25:42", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 21, + "name": "User-21", + "type": 2, + "status": 1, + "score": 74, + "experience": 71912, + "sex": "女", + "city": "海北藏族自治州", + "description": "-", + "createTime": "2016-10-18 15:54:30", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 22, + "name": "User-22", + "type": 2, + "status": 3, + "score": 87, + "experience": 65197, + "sex": "女", + "city": "定西市", + "description": "-", + "createTime": "1991-01-09 18:26:58", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 23, + "name": "User-23", + "type": 2, + "status": 4, + "score": 73, + "experience": 27868, + "sex": "男", + "city": "威海市", + "description": "-", + "createTime": "1981-10-13 18:52:11", + "parentId": null, + "children": [ + { + "id": 24, + "name": "User-24", + "type": 4, + "status": 2, + "score": 99, + "experience": 69882, + "sex": "女", + "city": "重庆市", + "description": "-", + "createTime": "1990-09-26 19:08:20", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 25, + "name": "User-25", + "type": 3, + "status": 2, + "score": 82, + "experience": 25619, + "sex": "女", + "city": "澳门半岛", + "description": "-", + "createTime": "1991-02-16 04:19:14", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 26, + "name": "User-26", + "type": 4, + "status": 2, + "score": 2, + "experience": 8058, + "sex": "男", + "city": "阿里地区", + "description": "-", + "createTime": "2002-10-19 09:44:05", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 27, + "name": "User-27", + "type": 4, + "status": 4, + "score": 95, + "experience": 68763, + "sex": "男", + "city": "天津市", + "description": "-", + "createTime": "2002-12-24 23:10:26", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 28, + "name": "User-28", + "type": 2, + "status": 4, + "score": 91, + "experience": 33513, + "sex": "女", + "city": "临沂市", + "description": "-", + "createTime": "2003-02-04 13:35:09", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 29, + "name": "User-29", + "type": 1, + "status": 1, + "score": 23, + "experience": 71620, + "sex": "男", + "city": "拉萨市", + "description": "-", + "createTime": "2020-12-22 10:11:11", + "parentId": null, + "children": [ + { + "id": 30, + "name": "User-30", + "type": 3, + "status": 3, + "score": 13, + "experience": 32398, + "sex": "女", + "city": "武威市", + "description": "-", + "createTime": "1982-10-26 11:27:06", + "parentId": null, + "children": [ + { + "id": 31, + "name": "User-31", + "type": 4, + "status": 1, + "score": 93, + "experience": 89245, + "sex": "男", + "city": "楚雄彝族自治州", + "description": "-", + "createTime": "1979-10-05 12:28:39", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 32, + "name": "User-32", + "type": 6, + "status": 4, + "score": 31, + "experience": 73504, + "sex": "女", + "city": "上海市", + "description": "-", + "createTime": "1991-01-11 06:55:04", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 33, + "name": "User-33", + "type": 5, + "status": 4, + "score": 27, + "experience": 95824, + "sex": "女", + "city": "鹰潭市", + "description": "-", + "createTime": "2009-06-17 04:15:06", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 34, + "name": "User-34", + "type": 4, + "status": 1, + "score": 37, + "experience": 63563, + "sex": "男", + "city": "红河哈尼族彝族自治州", + "description": "-", + "createTime": "1979-01-12 13:19:02", + "parentId": null, + "children": [ + { + "id": 35, + "name": "User-35", + "type": 4, + "status": 2, + "score": 81, + "experience": 46868, + "sex": "男", + "city": "德宏傣族景颇族自治州", + "description": "-", + "createTime": "1981-10-24 01:48:43", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 36, + "name": "User-36", + "type": 2, + "status": 1, + "score": 92, + "experience": 70256, + "sex": "女", + "city": "厦门市", + "description": "-", + "createTime": "1998-05-23 22:54:20", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 37, + "name": "User-37", + "type": 6, + "status": 2, + "score": 25, + "experience": 24689, + "sex": "女", + "city": "铁岭市", + "description": "-", + "createTime": "1980-05-03 04:42:32", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 38, + "name": "User-38", + "type": 4, + "status": 4, + "score": 83, + "experience": 96973, + "sex": "男", + "city": "武汉市", + "description": "-", + "createTime": "1979-11-04 03:18:53", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 39, + "name": "User-39", + "type": 4, + "status": 2, + "score": 37, + "experience": 23248, + "sex": "女", + "city": "黔东南苗族侗族自治州", + "description": "-", + "createTime": "2017-03-03 14:54:05", + "parentId": null, + "children": [ + { + "id": 40, + "name": "User-40", + "type": 5, + "status": 3, + "score": 53, + "experience": 89498, + "sex": "女", + "city": "吐鲁番地区", + "description": "-", + "createTime": "2005-01-14 16:36:11", + "parentId": null, + "children": [ + { + "id": 41, + "name": "User-41", + "type": 4, + "status": 3, + "score": 13, + "experience": 47225, + "sex": "女", + "city": "重庆市", + "description": "-", + "createTime": "1994-07-14 23:17:37", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 42, + "name": "User-42", + "type": 2, + "status": 2, + "score": 54, + "experience": 67027, + "sex": "男", + "city": "丽水市", + "description": "-", + "createTime": "2019-04-06 23:40:35", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 43, + "name": "User-43", + "type": 2, + "status": 2, + "score": 59, + "experience": 16009, + "sex": "男", + "city": "新界", + "description": "-", + "createTime": "1972-11-10 06:24:19", + "parentId": null, + "children": [ + { + "id": 44, + "name": "User-44", + "type": 6, + "status": 3, + "score": 26, + "experience": 48609, + "sex": "女", + "city": "东莞市", + "description": "-", + "createTime": "1993-04-21 21:27:36", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 45, + "name": "User-45", + "type": 1, + "status": 2, + "score": 28, + "experience": 13681, + "sex": "女", + "city": "常德市", + "description": "-", + "createTime": "2016-01-19 16:21:48", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 46, + "name": "User-46", + "type": 1, + "status": 2, + "score": 77, + "experience": 50932, + "sex": "男", + "city": "武汉市", + "description": "-", + "createTime": "1977-11-26 05:13:27", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 47, + "name": "User-47", + "type": 3, + "status": 1, + "score": 10, + "experience": 19599, + "sex": "男", + "city": "长治市", + "description": "-", + "createTime": "1980-10-28 04:42:20", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 48, + "name": "User-48", + "type": 6, + "status": 3, + "score": 50, + "experience": 63403, + "sex": "男", + "city": "香港岛", + "description": "-", + "createTime": "1974-05-23 17:23:13", + "parentId": null, + "children": [ + { + "id": 49, + "name": "User-49", + "type": 2, + "status": 1, + "score": 7, + "experience": 21161, + "sex": "男", + "city": "梅州市", + "description": "-", + "createTime": "1977-05-01 15:25:24", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 50, + "name": "User-50", + "type": 5, + "status": 2, + "score": 34, + "experience": 93741, + "sex": "男", + "city": "鸡西市", + "description": "-", + "createTime": "2018-04-14 23:13:38", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 51, + "name": "User-51", + "type": 2, + "status": 2, + "score": 92, + "experience": 36687, + "sex": "女", + "city": "温州市", + "description": "-", + "createTime": "1993-06-04 04:00:14", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 52, + "name": "User-52", + "type": 6, + "status": 2, + "score": 14, + "experience": 47342, + "sex": "男", + "city": "重庆市", + "description": "-", + "createTime": "1972-02-26 22:46:51", + "parentId": null, + "children": [ + { + "id": 53, + "name": "User-53", + "type": 1, + "status": 3, + "score": 97, + "experience": 40784, + "sex": "男", + "city": "邵阳市", + "description": "-", + "createTime": "1976-12-27 01:00:37", + "parentId": null, + "children": [ + { + "id": 54, + "name": "User-54", + "type": 4, + "status": 3, + "score": 93, + "experience": 10865, + "sex": "男", + "city": "龙岩市", + "description": "-", + "createTime": "2001-09-03 02:08:42", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 55, + "name": "User-55", + "type": 1, + "status": 2, + "score": 56, + "experience": 68232, + "sex": "男", + "city": "赣州市", + "description": "-", + "createTime": "1995-12-13 08:29:10", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 56, + "name": "User-56", + "type": 1, + "status": 2, + "score": 46, + "experience": 68897, + "sex": "女", + "city": "哈密地区", + "description": "-", + "createTime": "2007-08-05 00:54:06", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 57, + "name": "User-57", + "type": 4, + "status": 3, + "score": 68, + "experience": 58983, + "sex": "女", + "city": "北京市", + "description": "-", + "createTime": "1979-03-14 13:21:33", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 58, + "name": "User-58", + "type": 5, + "status": 1, + "score": 6, + "experience": 17343, + "sex": "男", + "city": "苗栗县", + "description": "-", + "createTime": "1996-01-21 18:43:11", + "parentId": null, + "children": [ + { + "id": 59, + "name": "User-59", + "type": 5, + "status": 2, + "score": 98, + "experience": 75262, + "sex": "女", + "city": "怀化市", + "description": "-", + "createTime": "2022-06-28 12:25:50", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 60, + "name": "User-60", + "type": 3, + "status": 3, + "score": 3, + "experience": 5817, + "sex": "女", + "city": "三亚市", + "description": "-", + "createTime": "1993-10-13 21:54:57", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 61, + "name": "User-61", + "type": 2, + "status": 3, + "score": 3, + "experience": 65548, + "sex": "男", + "city": "台州市", + "description": "-", + "createTime": "2017-11-06 13:16:14", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 62, + "name": "User-62", + "type": 5, + "status": 3, + "score": 37, + "experience": 33679, + "sex": "女", + "city": "辽源市", + "description": "-", + "createTime": "2002-10-19 22:53:23", + "parentId": null, + "children": [ + { + "id": 63, + "name": "User-63", + "type": 5, + "status": 3, + "score": 12, + "experience": 91033, + "sex": "女", + "city": "银川市", + "description": "-", + "createTime": "1973-04-17 07:33:35", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 64, + "name": "User-64", + "type": 3, + "status": 2, + "score": 87, + "experience": 30560, + "sex": "男", + "city": "昌都地区", + "description": "-", + "createTime": "1992-06-13 23:04:16", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 65, + "name": "User-65", + "type": 5, + "status": 2, + "score": 27, + "experience": 17982, + "sex": "女", + "city": "商洛市", + "description": "-", + "createTime": "2008-08-22 09:14:10", + "parentId": null, + "children": [ + { + "id": 66, + "name": "User-66", + "type": 3, + "status": 3, + "score": 91, + "experience": 47135, + "sex": "女", + "city": "离岛", + "description": "-", + "createTime": "1971-01-27 18:29:48", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 67, + "name": "User-67", + "type": 2, + "status": 1, + "score": 19, + "experience": 31440, + "sex": "女", + "city": "随州市", + "description": "-", + "createTime": "1979-10-14 10:30:22", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 68, + "name": "User-68", + "type": 5, + "status": 1, + "score": 88, + "experience": 48196, + "sex": "男", + "city": "承德市", + "description": "-", + "createTime": "1996-02-07 03:52:51", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 69, + "name": "User-69", + "type": 5, + "status": 1, + "score": 46, + "experience": 45341, + "sex": "女", + "city": "黔东南苗族侗族自治州", + "description": "-", + "createTime": "1995-05-08 20:53:45", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 70, + "name": "User-70", + "type": 3, + "status": 3, + "score": 19, + "experience": 66961, + "sex": "女", + "city": "固原市", + "description": "-", + "createTime": "1992-04-11 09:13:05", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 71, + "name": "User-71", + "type": 1, + "status": 3, + "score": 4, + "experience": 95553, + "sex": "女", + "city": "那曲地区", + "description": "-", + "createTime": "2019-07-31 00:30:49", + "parentId": null, + "children": [ + { + "id": 72, + "name": "User-72", + "type": 4, + "status": 4, + "score": 89, + "experience": 27410, + "sex": "男", + "city": "贺州市", + "description": "-", + "createTime": "1990-09-07 03:02:32", + "parentId": null, + "children": [ + { + "id": 73, + "name": "User-73", + "type": 6, + "status": 4, + "score": 93, + "experience": 84018, + "sex": "男", + "city": "雅安市", + "description": "-", + "createTime": "1972-01-18 02:00:25", + "parentId": null, + "children": [ + { + "id": 74, + "name": "User-74", + "type": 1, + "status": 4, + "score": 22, + "experience": 23025, + "sex": "女", + "city": "济南市", + "description": "-", + "createTime": "1991-12-18 23:27:07", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 75, + "name": "User-75", + "type": 5, + "status": 2, + "score": 75, + "experience": 58006, + "sex": "男", + "city": "新界", + "description": "-", + "createTime": "2004-03-03 09:28:00", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 76, + "name": "User-76", + "type": 2, + "status": 1, + "score": 79, + "experience": 86538, + "sex": "男", + "city": "果洛藏族自治州", + "description": "-", + "createTime": "2000-02-09 12:26:36", + "parentId": null, + "children": [ + { + "id": 77, + "name": "User-77", + "type": 2, + "status": 3, + "score": 60, + "experience": 61903, + "sex": "女", + "city": "呼伦贝尔市", + "description": "-", + "createTime": "1991-04-19 19:31:38", + "parentId": null, + "children": [ + { + "id": 78, + "name": "User-78", + "type": 4, + "status": 2, + "score": 67, + "experience": 10844, + "sex": "女", + "city": "鞍山市", + "description": "-", + "createTime": "2017-03-26 15:43:27", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 79, + "name": "User-79", + "type": 4, + "status": 2, + "score": 46, + "experience": 25354, + "sex": "男", + "city": "鸡西市", + "description": "-", + "createTime": "2018-01-30 03:43:56", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 80, + "name": "User-80", + "type": 5, + "status": 3, + "score": 13, + "experience": 30626, + "sex": "女", + "city": "玉溪市", + "description": "-", + "createTime": "1984-03-18 11:35:15", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 81, + "name": "User-81", + "type": 4, + "status": 3, + "score": 34, + "experience": 97578, + "sex": "女", + "city": "信阳市", + "description": "-", + "createTime": "2004-08-20 12:21:16", + "parentId": null, + "children": [ + { + "id": 82, + "name": "User-82", + "type": 6, + "status": 3, + "score": 38, + "experience": 7285, + "sex": "男", + "city": "舟山市", + "description": "-", + "createTime": "2001-03-16 07:04:17", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 83, + "name": "User-83", + "type": 3, + "status": 1, + "score": 51, + "experience": 41380, + "sex": "女", + "city": "佛山市", + "description": "-", + "createTime": "1998-06-01 18:21:57", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 84, + "name": "User-84", + "type": 2, + "status": 3, + "score": 37, + "experience": 19153, + "sex": "女", + "city": "宜宾市", + "description": "-", + "createTime": "1985-10-30 09:16:58", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 85, + "name": "User-85", + "type": 1, + "status": 1, + "score": 94, + "experience": 63371, + "sex": "男", + "city": "淮南市", + "description": "-", + "createTime": "2019-02-28 22:24:25", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 86, + "name": "User-86", + "type": 2, + "status": 4, + "score": 67, + "experience": 25315, + "sex": "男", + "city": "黔西南布依族苗族自治州", + "description": "-", + "createTime": "2011-11-29 07:06:26", + "parentId": null, + "children": [ + { + "id": 87, + "name": "User-87", + "type": 4, + "status": 4, + "score": 52, + "experience": 10751, + "sex": "女", + "city": "离岛", + "description": "-", + "createTime": "2022-08-05 23:21:27", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 88, + "name": "User-88", + "type": 4, + "status": 2, + "score": 65, + "experience": 38077, + "sex": "女", + "city": "黄石市", + "description": "-", + "createTime": "2007-12-12 15:47:51", + "parentId": null, + "children": [ + { + "id": 89, + "name": "User-89", + "type": 6, + "status": 2, + "score": 78, + "experience": 78006, + "sex": "男", + "city": "海口市", + "description": "-", + "createTime": "2007-10-20 18:46:39", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 90, + "name": "User-90", + "type": 3, + "status": 3, + "score": 66, + "experience": 91901, + "sex": "女", + "city": "上海市", + "description": "-", + "createTime": "1993-08-25 20:32:32", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 91, + "name": "User-91", + "type": 3, + "status": 3, + "score": 61, + "experience": 26129, + "sex": "女", + "city": "白山市", + "description": "-", + "createTime": "2002-01-04 16:12:16", + "parentId": null, + "children": [ + { + "id": 92, + "name": "User-92", + "type": 5, + "status": 3, + "score": 19, + "experience": 34580, + "sex": "男", + "city": "庆阳市", + "description": "-", + "createTime": "1987-02-28 01:36:59", + "parentId": null, + "children": [ + { + "id": 93, + "name": "User-93", + "type": 4, + "status": 4, + "score": 7, + "experience": 40805, + "sex": "女", + "city": "广州市", + "description": "-", + "createTime": "1986-02-23 02:19:01", + "parentId": null, + "children": [ + { + "id": 94, + "name": "User-94", + "type": 4, + "status": 2, + "score": 28, + "experience": 85777, + "sex": "男", + "city": "昌吉回族自治州", + "description": "-", + "createTime": "1987-02-21 18:49:17", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 95, + "name": "User-95", + "type": 3, + "status": 3, + "score": 33, + "experience": 50551, + "sex": "女", + "city": "三明市", + "description": "-", + "createTime": "2013-04-24 20:49:56", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 96, + "name": "User-96", + "type": 2, + "status": 2, + "score": 21, + "experience": 19915, + "sex": "女", + "city": "黄石市", + "description": "-", + "createTime": "2017-05-09 12:17:42", + "parentId": null, + "children": [ + { + "id": 97, + "name": "User-97", + "type": 3, + "status": 3, + "score": 25, + "experience": 22618, + "sex": "女", + "city": "汕尾市", + "description": "-", + "createTime": "1977-03-13 12:50:50", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 98, + "name": "User-98", + "type": 6, + "status": 2, + "score": 14, + "experience": 43979, + "sex": "女", + "city": "温州市", + "description": "-", + "createTime": "1991-04-10 20:49:11", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 99, + "name": "User-99", + "type": 3, + "status": 2, + "score": 82, + "experience": 24670, + "sex": "男", + "city": "贵港市", + "description": "-", + "createTime": "2012-12-19 08:28:58", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 100, + "name": "User-100", + "type": 4, + "status": 3, + "score": 64, + "experience": 84287, + "sex": "女", + "city": "张家界市", + "description": "-", + "createTime": "2000-09-28 06:14:34", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 101, + "name": "User-101", + "type": 3, + "status": 4, + "score": 68, + "experience": 39312, + "sex": "男", + "city": "玉树藏族自治州", + "description": "-", + "createTime": "2020-09-20 05:35:35", + "parentId": null, + "children": [ + { + "id": 102, + "name": "User-102", + "type": 3, + "status": 1, + "score": 74, + "experience": 16276, + "sex": "女", + "city": "延安市", + "description": "-", + "createTime": "1980-10-04 17:59:56", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 103, + "name": "User-103", + "type": 5, + "status": 2, + "score": 91, + "experience": 67473, + "sex": "男", + "city": "桃园县", + "description": "-", + "createTime": "2007-01-04 07:46:21", + "parentId": null, + "children": [ + { + "id": 104, + "name": "User-104", + "type": 1, + "status": 3, + "score": 3, + "experience": 91897, + "sex": "男", + "city": "营口市", + "description": "-", + "createTime": "2012-07-04 00:39:19", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 105, + "name": "User-105", + "type": 5, + "status": 2, + "score": 36, + "experience": 12972, + "sex": "男", + "city": "德州市", + "description": "-", + "createTime": "1993-06-04 03:52:48", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 106, + "name": "User-106", + "type": 2, + "status": 3, + "score": 60, + "experience": 58793, + "sex": "女", + "city": "开封市", + "description": "-", + "createTime": "2003-10-28 05:15:25", + "parentId": null, + "children": [ + { + "id": 107, + "name": "User-107", + "type": 6, + "status": 3, + "score": 70, + "experience": 88564, + "sex": "女", + "city": "大理白族自治州", + "description": "-", + "createTime": "1991-03-19 01:51:41", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 108, + "name": "User-108", + "type": 2, + "status": 2, + "score": 85, + "experience": 47918, + "sex": "男", + "city": "金门县", + "description": "-", + "createTime": "2015-06-18 04:18:20", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 109, + "name": "User-109", + "type": 2, + "status": 2, + "score": 15, + "experience": 72530, + "sex": "女", + "city": "上海市", + "description": "-", + "createTime": "1997-10-10 20:26:03", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 110, + "name": "User-110", + "type": 2, + "status": 2, + "score": 83, + "experience": 26538, + "sex": "男", + "city": "新竹市", + "description": "-", + "createTime": "2007-07-26 23:09:20", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 111, + "name": "User-111", + "type": 4, + "status": 2, + "score": 43, + "experience": 42129, + "sex": "男", + "city": "赤峰市", + "description": "-", + "createTime": "2015-12-17 09:23:18", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 112, + "name": "User-112", + "type": 4, + "status": 1, + "score": 74, + "experience": 61862, + "sex": "女", + "city": "潍坊市", + "description": "-", + "createTime": "2018-02-12 13:13:10", + "parentId": null, + "children": [ + { + "id": 113, + "name": "User-113", + "type": 1, + "status": 2, + "score": 65, + "experience": 52650, + "sex": "男", + "city": "德宏傣族景颇族自治州", + "description": "-", + "createTime": "2011-04-13 09:19:21", + "parentId": null, + "children": [ + { + "id": 114, + "name": "User-114", + "type": 3, + "status": 1, + "score": 82, + "experience": 53304, + "sex": "男", + "city": "益阳市", + "description": "-", + "createTime": "2021-09-25 03:56:20", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 115, + "name": "User-115", + "type": 3, + "status": 3, + "score": 32, + "experience": 1231, + "sex": "男", + "city": "娄底市", + "description": "-", + "createTime": "1984-10-28 18:20:13", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 116, + "name": "User-116", + "type": 3, + "status": 3, + "score": 89, + "experience": 65939, + "sex": "女", + "city": "昌都地区", + "description": "-", + "createTime": "1982-10-31 15:16:26", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 117, + "name": "User-117", + "type": 2, + "status": 4, + "score": 15, + "experience": 19416, + "sex": "女", + "city": "长治市", + "description": "-", + "createTime": "1990-04-09 13:29:32", + "parentId": null, + "children": [ + { + "id": 118, + "name": "User-118", + "type": 5, + "status": 2, + "score": 97, + "experience": 49212, + "sex": "女", + "city": "那曲地区", + "description": "-", + "createTime": "2018-12-15 15:50:57", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 119, + "name": "User-119", + "type": 2, + "status": 3, + "score": 82, + "experience": 19392, + "sex": "男", + "city": "海外", + "description": "-", + "createTime": "2016-03-01 20:52:25", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 120, + "name": "User-120", + "type": 5, + "status": 4, + "score": 51, + "experience": 78906, + "sex": "女", + "city": "九龙", + "description": "-", + "createTime": "1970-01-23 05:58:55", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 121, + "name": "User-121", + "type": 1, + "status": 2, + "score": 62, + "experience": 67953, + "sex": "女", + "city": "中山市", + "description": "-", + "createTime": "1980-03-31 19:15:07", + "parentId": null, + "children": [ + { + "id": 122, + "name": "User-122", + "type": 3, + "status": 2, + "score": 42, + "experience": 75027, + "sex": "男", + "city": "香港岛", + "description": "-", + "createTime": "1991-11-08 11:29:20", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 123, + "name": "User-123", + "type": 4, + "status": 1, + "score": 27, + "experience": 50832, + "sex": "男", + "city": "牡丹江市", + "description": "-", + "createTime": "1987-10-23 04:08:04", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 124, + "name": "User-124", + "type": 4, + "status": 3, + "score": 20, + "experience": 43261, + "sex": "男", + "city": "沧州市", + "description": "-", + "createTime": "2008-06-13 20:20:22", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 125, + "name": "User-125", + "type": 5, + "status": 2, + "score": 61, + "experience": 50399, + "sex": "女", + "city": "山南地区", + "description": "-", + "createTime": "2015-12-14 21:59:46", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 126, + "name": "User-126", + "type": 5, + "status": 2, + "score": 88, + "experience": 26933, + "sex": "女", + "city": "扬州市", + "description": "-", + "createTime": "1971-07-16 11:58:22", + "parentId": null, + "children": [ + { + "id": 127, + "name": "User-127", + "type": 1, + "status": 3, + "score": 86, + "experience": 15913, + "sex": "女", + "city": "宁波市", + "description": "-", + "createTime": "1979-06-01 23:52:36", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 128, + "name": "User-128", + "type": 5, + "status": 2, + "score": 61, + "experience": 74072, + "sex": "男", + "city": "乌兰察布市", + "description": "-", + "createTime": "1997-09-24 16:31:03", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 129, + "name": "User-129", + "type": 1, + "status": 3, + "score": 39, + "experience": 94200, + "sex": "男", + "city": "香港岛", + "description": "-", + "createTime": "1990-04-22 15:12:45", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 130, + "name": "User-130", + "type": 3, + "status": 3, + "score": 78, + "experience": 59502, + "sex": "男", + "city": "天津市", + "description": "-", + "createTime": "2011-01-03 07:20:25", + "parentId": null, + "children": [ + { + "id": 131, + "name": "User-131", + "type": 2, + "status": 3, + "score": 29, + "experience": 16545, + "sex": "男", + "city": "德阳市", + "description": "-", + "createTime": "2001-05-07 05:02:42", + "parentId": null, + "children": [ + { + "id": 132, + "name": "User-132", + "type": 3, + "status": 3, + "score": 53, + "experience": 8310, + "sex": "男", + "city": "襄阳市", + "description": "-", + "createTime": "1996-05-12 11:23:20", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 133, + "name": "User-133", + "type": 2, + "status": 3, + "score": 6, + "experience": 10610, + "sex": "男", + "city": "海口市", + "description": "-", + "createTime": "2013-05-11 17:50:19", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 134, + "name": "User-134", + "type": 4, + "status": 2, + "score": 67, + "experience": 70882, + "sex": "男", + "city": "遵义市", + "description": "-", + "createTime": "2014-03-04 22:55:14", + "parentId": null, + "children": [ + { + "id": 135, + "name": "User-135", + "type": 4, + "status": 3, + "score": 34, + "experience": 87799, + "sex": "女", + "city": "苗栗县", + "description": "-", + "createTime": "1990-04-13 14:44:06", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 136, + "name": "User-136", + "type": 6, + "status": 1, + "score": 66, + "experience": 58817, + "sex": "男", + "city": "大连市", + "description": "-", + "createTime": "1990-04-28 21:04:33", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 137, + "name": "User-137", + "type": 6, + "status": 2, + "score": 74, + "experience": 95991, + "sex": "男", + "city": "那曲地区", + "description": "-", + "createTime": "1994-06-04 16:01:44", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 138, + "name": "User-138", + "type": 1, + "status": 2, + "score": 99, + "experience": 71832, + "sex": "男", + "city": "阿里地区", + "description": "-", + "createTime": "1988-03-10 13:17:59", + "parentId": null, + "children": [ + { + "id": 139, + "name": "User-139", + "type": 6, + "status": 4, + "score": 36, + "experience": 86381, + "sex": "女", + "city": "菏泽市", + "description": "-", + "createTime": "2021-04-22 22:27:06", + "parentId": null, + "children": [ + { + "id": 140, + "name": "User-140", + "type": 6, + "status": 3, + "score": 36, + "experience": 43655, + "sex": "女", + "city": "通辽市", + "description": "-", + "createTime": "2001-12-20 09:14:52", + "parentId": null, + "children": [ + { + "id": 141, + "name": "User-141", + "type": 3, + "status": 2, + "score": 10, + "experience": 65976, + "sex": "女", + "city": "雅安市", + "description": "-", + "createTime": "1996-08-28 19:08:53", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 142, + "name": "User-142", + "type": 6, + "status": 4, + "score": 89, + "experience": 9828, + "sex": "男", + "city": "白山市", + "description": "-", + "createTime": "1985-09-21 14:58:12", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 143, + "name": "User-143", + "type": 6, + "status": 2, + "score": 1, + "experience": 84064, + "sex": "女", + "city": "重庆市", + "description": "-", + "createTime": "1973-11-04 08:28:54", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 144, + "name": "User-144", + "type": 5, + "status": 2, + "score": 46, + "experience": 51038, + "sex": "女", + "city": "南昌市", + "description": "-", + "createTime": "2010-01-27 02:05:48", + "parentId": null, + "children": [ + { + "id": 145, + "name": "User-145", + "type": 1, + "status": 3, + "score": 82, + "experience": 53656, + "sex": "女", + "city": "玉林市", + "description": "-", + "createTime": "1996-05-21 10:13:12", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 146, + "name": "User-146", + "type": 6, + "status": 4, + "score": 24, + "experience": 10700, + "sex": "男", + "city": "赤峰市", + "description": "-", + "createTime": "1998-03-08 12:08:46", + "parentId": null, + "children": [ + { + "id": 147, + "name": "User-147", + "type": 3, + "status": 1, + "score": 94, + "experience": 85060, + "sex": "女", + "city": "自贡市", + "description": "-", + "createTime": "2002-07-29 08:02:19", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 148, + "name": "User-148", + "type": 5, + "status": 2, + "score": 93, + "experience": 24255, + "sex": "男", + "city": "盐城市", + "description": "-", + "createTime": "2020-02-01 14:30:19", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 149, + "name": "User-149", + "type": 2, + "status": 4, + "score": 18, + "experience": 78062, + "sex": "女", + "city": "内江市", + "description": "-", + "createTime": "2003-02-26 08:59:31", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 150, + "name": "User-150", + "type": 4, + "status": 2, + "score": 13, + "experience": 48858, + "sex": "女", + "city": "上海市", + "description": "-", + "createTime": "1985-05-14 18:47:46", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 151, + "name": "User-151", + "type": 2, + "status": 3, + "score": 36, + "experience": 12807, + "sex": "男", + "city": "舟山市", + "description": "-", + "createTime": "2004-12-04 23:49:41", + "parentId": null, + "children": [ + { + "id": 152, + "name": "User-152", + "type": 2, + "status": 1, + "score": 60, + "experience": 38168, + "sex": "女", + "city": "喀什地区", + "description": "-", + "createTime": "1985-09-17 01:12:06", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 153, + "name": "User-153", + "type": 6, + "status": 1, + "score": 77, + "experience": 74590, + "sex": "男", + "city": "天津市", + "description": "-", + "createTime": "1970-02-02 10:02:55", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 154, + "name": "User-154", + "type": 5, + "status": 2, + "score": 92, + "experience": 76944, + "sex": "女", + "city": "临沧市", + "description": "-", + "createTime": "2013-12-06 17:42:05", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 155, + "name": "User-155", + "type": 3, + "status": 2, + "score": 29, + "experience": 78692, + "sex": "男", + "city": "秦皇岛市", + "description": "-", + "createTime": "2016-07-16 14:25:28", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 156, + "name": "User-156", + "type": 4, + "status": 2, + "score": 79, + "experience": 99919, + "sex": "女", + "city": "凉山彝族自治州", + "description": "-", + "createTime": "2010-07-15 10:21:19", + "parentId": null, + "children": [ + { + "id": 157, + "name": "User-157", + "type": 5, + "status": 3, + "score": 91, + "experience": 52354, + "sex": "男", + "city": "铜仁市", + "description": "-", + "createTime": "1977-03-20 09:15:54", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 158, + "name": "User-158", + "type": 5, + "status": 2, + "score": 22, + "experience": 51977, + "sex": "女", + "city": "宿州市", + "description": "-", + "createTime": "2016-11-17 20:01:17", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 159, + "name": "User-159", + "type": 1, + "status": 2, + "score": 43, + "experience": 46650, + "sex": "女", + "city": "沧州市", + "description": "-", + "createTime": "1987-09-05 06:14:08", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 160, + "name": "User-160", + "type": 6, + "status": 2, + "score": 57, + "experience": 7416, + "sex": "男", + "city": "澎湖县", + "description": "-", + "createTime": "1974-08-10 20:09:38", + "parentId": null, + "children": [ + { + "id": 161, + "name": "User-161", + "type": 5, + "status": 1, + "score": 53, + "experience": 12421, + "sex": "男", + "city": "阿克苏地区", + "description": "-", + "createTime": "1998-02-07 11:52:05", + "parentId": null, + "children": [ + { + "id": 162, + "name": "User-162", + "type": 3, + "status": 2, + "score": 100, + "experience": 19507, + "sex": "女", + "city": "随州市", + "description": "-", + "createTime": "2014-01-31 07:58:18", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 163, + "name": "User-163", + "type": 2, + "status": 2, + "score": 12, + "experience": 35637, + "sex": "男", + "city": "拉萨市", + "description": "-", + "createTime": "1983-10-02 10:31:23", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 164, + "name": "User-164", + "type": 6, + "status": 3, + "score": 65, + "experience": 42198, + "sex": "男", + "city": "香港岛", + "description": "-", + "createTime": "1987-12-22 14:34:32", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 165, + "name": "User-165", + "type": 2, + "status": 2, + "score": 73, + "experience": 40495, + "sex": "女", + "city": "天津市", + "description": "-", + "createTime": "1992-11-29 08:54:58", + "parentId": null, + "children": [ + { + "id": 166, + "name": "User-166", + "type": 3, + "status": 3, + "score": 83, + "experience": 62007, + "sex": "男", + "city": "重庆市", + "description": "-", + "createTime": "1992-10-01 19:14:47", + "parentId": null, + "children": [ + { + "id": 167, + "name": "User-167", + "type": 5, + "status": 4, + "score": 75, + "experience": 18137, + "sex": "女", + "city": "安顺市", + "description": "-", + "createTime": "2011-10-10 19:40:42", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 168, + "name": "User-168", + "type": 4, + "status": 3, + "score": 80, + "experience": 95421, + "sex": "男", + "city": "吴忠市", + "description": "-", + "createTime": "1972-10-27 14:58:59", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 169, + "name": "User-169", + "type": 6, + "status": 3, + "score": 10, + "experience": 2784, + "sex": "男", + "city": "伊春市", + "description": "-", + "createTime": "1992-07-06 23:16:42", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 170, + "name": "User-170", + "type": 5, + "status": 3, + "score": 68, + "experience": 54101, + "sex": "男", + "city": "贺州市", + "description": "-", + "createTime": "1970-01-21 21:50:15", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 171, + "name": "User-171", + "type": 5, + "status": 3, + "score": 38, + "experience": 51261, + "sex": "男", + "city": "上海市", + "description": "-", + "createTime": "1982-11-14 19:25:51", + "parentId": null, + "children": [ + { + "id": 172, + "name": "User-172", + "type": 3, + "status": 2, + "score": 4, + "experience": 73963, + "sex": "男", + "city": "徐州市", + "description": "-", + "createTime": "1993-04-15 02:08:57", + "parentId": null, + "children": [ + { + "id": 173, + "name": "User-173", + "type": 3, + "status": 1, + "score": 51, + "experience": 68723, + "sex": "女", + "city": "青岛市", + "description": "-", + "createTime": "2015-10-21 10:53:20", + "parentId": null, + "children": [ + { + "id": 174, + "name": "User-174", + "type": 3, + "status": 3, + "score": 68, + "experience": 62848, + "sex": "女", + "city": "周口市", + "description": "-", + "createTime": "2015-12-19 01:15:13", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 175, + "name": "User-175", + "type": 2, + "status": 3, + "score": 87, + "experience": 30871, + "sex": "女", + "city": "汕头市", + "description": "-", + "createTime": "1982-12-29 02:15:08", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 176, + "name": "User-176", + "type": 6, + "status": 2, + "score": 7, + "experience": 80089, + "sex": "男", + "city": "吉林市", + "description": "-", + "createTime": "2003-02-25 18:41:27", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 177, + "name": "User-177", + "type": 5, + "status": 4, + "score": 11, + "experience": 21782, + "sex": "女", + "city": "乌兰察布市", + "description": "-", + "createTime": "2014-10-10 20:45:07", + "parentId": null, + "children": [ + { + "id": 178, + "name": "User-178", + "type": 2, + "status": 2, + "score": 85, + "experience": 87330, + "sex": "女", + "city": "三亚市", + "description": "-", + "createTime": "1990-12-25 14:48:30", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 179, + "name": "User-179", + "type": 1, + "status": 1, + "score": 28, + "experience": 58951, + "sex": "男", + "city": "天津市", + "description": "-", + "createTime": "2007-09-14 00:42:03", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 180, + "name": "User-180", + "type": 5, + "status": 3, + "score": 74, + "experience": 83136, + "sex": "男", + "city": "抚州市", + "description": "-", + "createTime": "1990-08-17 16:49:05", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 181, + "name": "User-181", + "type": 1, + "status": 1, + "score": 37, + "experience": 40840, + "sex": "女", + "city": "三亚市", + "description": "-", + "createTime": "2000-05-12 08:01:46", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 182, + "name": "User-182", + "type": 1, + "status": 3, + "score": 40, + "experience": 86857, + "sex": "女", + "city": "三亚市", + "description": "-", + "createTime": "1981-03-30 01:02:44", + "parentId": null, + "children": [ + { + "id": 183, + "name": "User-183", + "type": 3, + "status": 1, + "score": 26, + "experience": 50377, + "sex": "男", + "city": "崇左市", + "description": "-", + "createTime": "1998-03-18 08:42:14", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 184, + "name": "User-184", + "type": 5, + "status": 3, + "score": 25, + "experience": 54099, + "sex": "女", + "city": "海口市", + "description": "-", + "createTime": "1980-01-26 12:11:04", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 185, + "name": "User-185", + "type": 6, + "status": 3, + "score": 87, + "experience": 80569, + "sex": "女", + "city": "运城市", + "description": "-", + "createTime": "2006-06-17 02:03:31", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 186, + "name": "User-186", + "type": 6, + "status": 3, + "score": 36, + "experience": 98204, + "sex": "男", + "city": "毕节市", + "description": "-", + "createTime": "1973-12-17 13:58:14", + "parentId": null, + "children": [ + { + "id": 187, + "name": "User-187", + "type": 2, + "status": 2, + "score": 50, + "experience": 6656, + "sex": "女", + "city": "常德市", + "description": "-", + "createTime": "1977-05-19 04:12:32", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 188, + "name": "User-188", + "type": 5, + "status": 2, + "score": 51, + "experience": 70421, + "sex": "男", + "city": "雅安市", + "description": "-", + "createTime": "1992-05-19 11:41:49", + "parentId": null, + "children": [ + { + "id": 189, + "name": "User-189", + "type": 3, + "status": 3, + "score": 86, + "experience": 10970, + "sex": "女", + "city": "陇南市", + "description": "-", + "createTime": "1986-07-20 03:40:31", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 190, + "name": "User-190", + "type": 6, + "status": 2, + "score": 81, + "experience": 35296, + "sex": "男", + "city": "重庆市", + "description": "-", + "createTime": "1994-08-03 11:42:24", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 191, + "name": "User-191", + "type": 2, + "status": 3, + "score": 36, + "experience": 60289, + "sex": "女", + "city": "滨州市", + "description": "-", + "createTime": "1981-11-09 18:18:23", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 192, + "name": "User-192", + "type": 1, + "status": 3, + "score": 80, + "experience": 84656, + "sex": "女", + "city": "果洛藏族自治州", + "description": "-", + "createTime": "1986-02-13 13:31:38", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 193, + "name": "User-193", + "type": 5, + "status": 2, + "score": 1, + "experience": 14433, + "sex": "男", + "city": "临汾市", + "description": "-", + "createTime": "2006-03-03 20:42:43", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 194, + "name": "User-194", + "type": 3, + "status": 4, + "score": 53, + "experience": 22962, + "sex": "女", + "city": "赣州市", + "description": "-", + "createTime": "2003-09-23 05:57:47", + "parentId": null, + "children": [ + { + "id": 195, + "name": "User-195", + "type": 3, + "status": 4, + "score": 78, + "experience": 80409, + "sex": "男", + "city": "晋城市", + "description": "-", + "createTime": "2022-04-16 13:45:56", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 196, + "name": "User-196", + "type": 3, + "status": 2, + "score": 83, + "experience": 35535, + "sex": "女", + "city": "庆阳市", + "description": "-", + "createTime": "2012-12-04 08:46:54", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 197, + "name": "User-197", + "type": 3, + "status": 2, + "score": 77, + "experience": 83542, + "sex": "女", + "city": "锦州市", + "description": "-", + "createTime": "2000-04-28 15:35:04", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 198, + "name": "User-198", + "type": 3, + "status": 4, + "score": 83, + "experience": 62489, + "sex": "女", + "city": "温州市", + "description": "-", + "createTime": "1989-12-11 18:50:29", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 199, + "name": "User-199", + "type": 2, + "status": 3, + "score": 81, + "experience": 74602, + "sex": "男", + "city": "自贡市", + "description": "-", + "createTime": "1996-10-30 22:16:31", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 200, + "name": "User-200", + "type": 6, + "status": 2, + "score": 31, + "experience": 28502, + "sex": "男", + "city": "宜兰县", + "description": "-", + "createTime": "1991-03-29 10:56:11", + "parentId": null, + "children": [ + { + "id": 201, + "name": "User-201", + "type": 5, + "status": 3, + "score": 23, + "experience": 45619, + "sex": "男", + "city": "商洛市", + "description": "-", + "createTime": "1997-11-04 08:13:06", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 202, + "name": "User-202", + "type": 5, + "status": 3, + "score": 7, + "experience": 7566, + "sex": "女", + "city": "随州市", + "description": "-", + "createTime": "1981-08-19 01:15:48", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 203, + "name": "User-203", + "type": 1, + "status": 3, + "score": 63, + "experience": 94626, + "sex": "男", + "city": "西宁市", + "description": "-", + "createTime": "1986-04-30 06:19:17", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 204, + "name": "User-204", + "type": 3, + "status": 3, + "score": 33, + "experience": 85619, + "sex": "女", + "city": "哈密地区", + "description": "-", + "createTime": "1977-09-15 16:53:05", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 205, + "name": "User-205", + "type": 3, + "status": 2, + "score": 95, + "experience": 66286, + "sex": "男", + "city": "安康市", + "description": "-", + "createTime": "1994-09-09 20:34:24", + "parentId": null, + "children": [ + { + "id": 206, + "name": "User-206", + "type": 5, + "status": 3, + "score": 48, + "experience": 93916, + "sex": "男", + "city": "攀枝花市", + "description": "-", + "createTime": "1996-05-16 00:14:46", + "parentId": null, + "children": [ + { + "id": 207, + "name": "User-207", + "type": 5, + "status": 3, + "score": 97, + "experience": 37124, + "sex": "女", + "city": "呼伦贝尔市", + "description": "-", + "createTime": "2009-06-18 14:55:19", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 208, + "name": "User-208", + "type": 2, + "status": 3, + "score": 77, + "experience": 37342, + "sex": "女", + "city": "九龙", + "description": "-", + "createTime": "2007-07-30 00:07:45", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 209, + "name": "User-209", + "type": 4, + "status": 1, + "score": 77, + "experience": 82846, + "sex": "男", + "city": "扬州市", + "description": "-", + "createTime": "1984-05-17 17:37:13", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 210, + "name": "User-210", + "type": 3, + "status": 1, + "score": 5, + "experience": 32873, + "sex": "女", + "city": "海外", + "description": "-", + "createTime": "1971-05-24 11:38:48", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 211, + "name": "User-211", + "type": 5, + "status": 2, + "score": 74, + "experience": 85519, + "sex": "男", + "city": "秦皇岛市", + "description": "-", + "createTime": "1970-01-17 07:29:46", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 212, + "name": "User-212", + "type": 4, + "status": 1, + "score": 33, + "experience": 80395, + "sex": "男", + "city": "白山市", + "description": "-", + "createTime": "2005-01-01 03:15:22", + "parentId": null, + "children": [ + { + "id": 213, + "name": "User-213", + "type": 4, + "status": 2, + "score": 55, + "experience": 17077, + "sex": "女", + "city": "毕节市", + "description": "-", + "createTime": "2020-01-13 21:32:59", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 214, + "name": "User-214", + "type": 3, + "status": 2, + "score": 38, + "experience": 57625, + "sex": "女", + "city": "海口市", + "description": "-", + "createTime": "2006-09-06 16:58:42", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 215, + "name": "User-215", + "type": 6, + "status": 2, + "score": 99, + "experience": 64592, + "sex": "女", + "city": "果洛藏族自治州", + "description": "-", + "createTime": "1987-07-29 17:20:38", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 216, + "name": "User-216", + "type": 5, + "status": 2, + "score": 44, + "experience": 69081, + "sex": "男", + "city": "天津市", + "description": "-", + "createTime": "1978-08-01 12:58:10", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 217, + "name": "User-217", + "type": 4, + "status": 2, + "score": 57, + "experience": 58398, + "sex": "男", + "city": "丹东市", + "description": "-", + "createTime": "1997-07-14 13:37:19", + "parentId": null, + "children": [ + { + "id": 218, + "name": "User-218", + "type": 3, + "status": 2, + "score": 11, + "experience": 65346, + "sex": "男", + "city": "百色市", + "description": "-", + "createTime": "1977-12-01 15:05:38", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 219, + "name": "User-219", + "type": 3, + "status": 2, + "score": 49, + "experience": 62808, + "sex": "女", + "city": "桃园县", + "description": "-", + "createTime": "1987-03-29 01:00:57", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 220, + "name": "User-220", + "type": 5, + "status": 2, + "score": 49, + "experience": 57282, + "sex": "女", + "city": "普洱市", + "description": "-", + "createTime": "2017-09-27 13:21:02", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 221, + "name": "User-221", + "type": 4, + "status": 2, + "score": 10, + "experience": 3034, + "sex": "男", + "city": "三沙市", + "description": "-", + "createTime": "1974-11-04 11:57:29", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 222, + "name": "User-222", + "type": 2, + "status": 4, + "score": 93, + "experience": 12235, + "sex": "男", + "city": "海南藏族自治州", + "description": "-", + "createTime": "1975-11-26 14:47:08", + "parentId": null, + "children": [ + { + "id": 223, + "name": "User-223", + "type": 1, + "status": 3, + "score": 61, + "experience": 49467, + "sex": "男", + "city": "澳门半岛", + "description": "-", + "createTime": "2023-04-09 00:28:41", + "parentId": null, + "children": [ + { + "id": 224, + "name": "User-224", + "type": 6, + "status": 3, + "score": 26, + "experience": 65118, + "sex": "女", + "city": "攀枝花市", + "description": "-", + "createTime": "2013-03-04 09:08:30", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 225, + "name": "User-225", + "type": 4, + "status": 1, + "score": 38, + "experience": 86342, + "sex": "男", + "city": "临夏回族自治州", + "description": "-", + "createTime": "1992-06-15 02:13:04", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 226, + "name": "User-226", + "type": 3, + "status": 2, + "score": 3, + "experience": 32179, + "sex": "女", + "city": "九龙", + "description": "-", + "createTime": "2009-03-13 06:48:47", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 227, + "name": "User-227", + "type": 1, + "status": 3, + "score": 96, + "experience": 38847, + "sex": "男", + "city": "梅州市", + "description": "-", + "createTime": "2020-04-16 09:43:04", + "parentId": null, + "children": [ + { + "id": 228, + "name": "User-228", + "type": 4, + "status": 4, + "score": 33, + "experience": 93101, + "sex": "女", + "city": "澳门半岛", + "description": "-", + "createTime": "1995-04-06 14:46:40", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 229, + "name": "User-229", + "type": 3, + "status": 1, + "score": 5, + "experience": 12628, + "sex": "男", + "city": "博尔塔拉蒙古自治州", + "description": "-", + "createTime": "2000-08-07 19:23:07", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 230, + "name": "User-230", + "type": 3, + "status": 3, + "score": 67, + "experience": 7013, + "sex": "女", + "city": "长治市", + "description": "-", + "createTime": "2002-12-14 10:11:11", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 231, + "name": "User-231", + "type": 4, + "status": 2, + "score": 37, + "experience": 61813, + "sex": "女", + "city": "博尔塔拉蒙古自治州", + "description": "-", + "createTime": "1970-06-27 23:24:44", + "parentId": null, + "children": [ + { + "id": 232, + "name": "User-232", + "type": 5, + "status": 2, + "score": 43, + "experience": 20578, + "sex": "男", + "city": "贵港市", + "description": "-", + "createTime": "1976-02-18 15:40:16", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 233, + "name": "User-233", + "type": 1, + "status": 2, + "score": 4, + "experience": 19621, + "sex": "女", + "city": "澳门半岛", + "description": "-", + "createTime": "2020-02-28 08:36:12", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 234, + "name": "User-234", + "type": 5, + "status": 2, + "score": 57, + "experience": 15400, + "sex": "男", + "city": "海东市", + "description": "-", + "createTime": "1976-11-22 23:04:12", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 235, + "name": "User-235", + "type": 4, + "status": 4, + "score": 18, + "experience": 36190, + "sex": "男", + "city": "海北藏族自治州", + "description": "-", + "createTime": "1978-01-30 19:43:36", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 236, + "name": "User-236", + "type": 5, + "status": 4, + "score": 69, + "experience": 51254, + "sex": "女", + "city": "北京市", + "description": "-", + "createTime": "2014-02-15 04:54:05", + "parentId": null, + "children": [ + { + "id": 237, + "name": "User-237", + "type": 2, + "status": 2, + "score": 99, + "experience": 34620, + "sex": "女", + "city": "河池市", + "description": "-", + "createTime": "2011-02-22 01:43:24", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 238, + "name": "User-238", + "type": 5, + "status": 3, + "score": 94, + "experience": 56612, + "sex": "女", + "city": "阿拉善盟", + "description": "-", + "createTime": "1996-04-13 12:44:00", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 239, + "name": "User-239", + "type": 2, + "status": 4, + "score": 27, + "experience": 1648, + "sex": "女", + "city": "长沙市", + "description": "-", + "createTime": "1989-06-01 07:38:48", + "parentId": null, + "children": [ + { + "id": 240, + "name": "User-240", + "type": 4, + "status": 2, + "score": 35, + "experience": 97895, + "sex": "男", + "city": "上海市", + "description": "-", + "createTime": "2002-04-19 15:07:58", + "parentId": null, + "children": [ + { + "id": 241, + "name": "User-241", + "type": 3, + "status": 1, + "score": 15, + "experience": 48229, + "sex": "女", + "city": "廊坊市", + "description": "-", + "createTime": "1997-04-12 20:09:02", + "parentId": null, + "children": [ + { + "id": 242, + "name": "User-242", + "type": 4, + "status": 4, + "score": 3, + "experience": 95377, + "sex": "女", + "city": "鹤壁市", + "description": "-", + "createTime": "1994-10-20 05:40:00", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 243, + "name": "User-243", + "type": 4, + "status": 1, + "score": 5, + "experience": 52728, + "sex": "男", + "city": "泉州市", + "description": "-", + "createTime": "2014-07-16 01:39:38", + "parentId": null, + "children": [ + { + "id": 244, + "name": "User-244", + "type": 5, + "status": 4, + "score": 80, + "experience": 51006, + "sex": "女", + "city": "离岛", + "description": "-", + "createTime": "1998-04-08 03:47:48", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 245, + "name": "User-245", + "type": 2, + "status": 4, + "score": 88, + "experience": 19853, + "sex": "男", + "city": "四平市", + "description": "-", + "createTime": "1998-08-15 16:27:36", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 246, + "name": "User-246", + "type": 6, + "status": 4, + "score": 52, + "experience": 63371, + "sex": "女", + "city": "肇庆市", + "description": "-", + "createTime": "2010-12-14 06:37:33", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 247, + "name": "User-247", + "type": 4, + "status": 2, + "score": 40, + "experience": 65183, + "sex": "男", + "city": "潍坊市", + "description": "-", + "createTime": "1975-07-09 23:34:16", + "parentId": null, + "children": [ + { + "id": 248, + "name": "User-248", + "type": 1, + "status": 3, + "score": 65, + "experience": 19079, + "sex": "男", + "city": "宜宾市", + "description": "-", + "createTime": "2013-03-01 13:33:15", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 249, + "name": "User-249", + "type": 6, + "status": 2, + "score": 80, + "experience": 37432, + "sex": "男", + "city": "临汾市", + "description": "-", + "createTime": "2003-02-04 13:42:18", + "parentId": null, + "children": [ + { + "id": 250, + "name": "User-250", + "type": 3, + "status": 3, + "score": 76, + "experience": 91326, + "sex": "女", + "city": "太原市", + "description": "-", + "createTime": "1997-03-04 20:12:43", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 251, + "name": "User-251", + "type": 1, + "status": 1, + "score": 29, + "experience": 93151, + "sex": "女", + "city": "营口市", + "description": "-", + "createTime": "1972-08-25 03:17:26", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 252, + "name": "User-252", + "type": 2, + "status": 2, + "score": 93, + "experience": 1882, + "sex": "女", + "city": "海外", + "description": "-", + "createTime": "2021-08-31 04:19:35", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 253, + "name": "User-253", + "type": 2, + "status": 4, + "score": 14, + "experience": 97501, + "sex": "女", + "city": "四平市", + "description": "-", + "createTime": "1991-03-16 04:18:45", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 254, + "name": "User-254", + "type": 3, + "status": 2, + "score": 43, + "experience": 77813, + "sex": "女", + "city": "那曲地区", + "description": "-", + "createTime": "2015-12-11 17:36:46", + "parentId": null, + "children": [ + { + "id": 255, + "name": "User-255", + "type": 4, + "status": 3, + "score": 7, + "experience": 88376, + "sex": "男", + "city": "贵阳市", + "description": "-", + "createTime": "1991-12-09 10:31:04", + "parentId": null, + "children": [ + { + "id": 256, + "name": "User-256", + "type": 5, + "status": 3, + "score": 24, + "experience": 66923, + "sex": "男", + "city": "海东市", + "description": "-", + "createTime": "2007-10-09 21:30:27", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 257, + "name": "User-257", + "type": 1, + "status": 2, + "score": 56, + "experience": 16966, + "sex": "女", + "city": "澳门半岛", + "description": "-", + "createTime": "1971-08-07 14:04:06", + "parentId": null, + "children": [ + { + "id": 258, + "name": "User-258", + "type": 3, + "status": 3, + "score": 43, + "experience": 68317, + "sex": "男", + "city": "杭州市", + "description": "-", + "createTime": "2000-06-23 23:43:22", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 259, + "name": "User-259", + "type": 3, + "status": 2, + "score": 19, + "experience": 65900, + "sex": "男", + "city": "杭州市", + "description": "-", + "createTime": "1972-11-02 03:14:29", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 260, + "name": "User-260", + "type": 2, + "status": 2, + "score": 33, + "experience": 26268, + "sex": "女", + "city": "包头市", + "description": "-", + "createTime": "1997-09-19 07:05:41", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 261, + "name": "User-261", + "type": 5, + "status": 1, + "score": 38, + "experience": 60653, + "sex": "女", + "city": "舟山市", + "description": "-", + "createTime": "1993-02-09 22:11:03", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 262, + "name": "User-262", + "type": 1, + "status": 2, + "score": 14, + "experience": 22944, + "sex": "男", + "city": "四平市", + "description": "-", + "createTime": "1979-09-12 21:59:09", + "parentId": null, + "children": [ + { + "id": 263, + "name": "User-263", + "type": 2, + "status": 2, + "score": 95, + "experience": 42730, + "sex": "男", + "city": "咸宁市", + "description": "-", + "createTime": "1971-07-06 13:35:24", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 264, + "name": "User-264", + "type": 3, + "status": 2, + "score": 8, + "experience": 81923, + "sex": "女", + "city": "铜陵市", + "description": "-", + "createTime": "2017-10-06 07:55:26", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 265, + "name": "User-265", + "type": 5, + "status": 2, + "score": 45, + "experience": 34796, + "sex": "男", + "city": "吉林市", + "description": "-", + "createTime": "1978-04-13 03:09:01", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 266, + "name": "User-266", + "type": 1, + "status": 2, + "score": 33, + "experience": 36888, + "sex": "女", + "city": "邵阳市", + "description": "-", + "createTime": "1986-08-10 22:38:19", + "parentId": null, + "children": [ + { + "id": 267, + "name": "User-267", + "type": 4, + "status": 3, + "score": 68, + "experience": 86617, + "sex": "女", + "city": "日照市", + "description": "-", + "createTime": "1988-09-20 23:59:03", + "parentId": null, + "children": [ + { + "id": 268, + "name": "User-268", + "type": 5, + "status": 2, + "score": 87, + "experience": 38669, + "sex": "男", + "city": "锦州市", + "description": "-", + "createTime": "2003-01-29 15:05:06", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 269, + "name": "User-269", + "type": 2, + "status": 4, + "score": 94, + "experience": 55962, + "sex": "女", + "city": "咸阳市", + "description": "-", + "createTime": "1999-05-31 06:27:39", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 270, + "name": "User-270", + "type": 4, + "status": 1, + "score": 67, + "experience": 37707, + "sex": "男", + "city": "吴忠市", + "description": "-", + "createTime": "1984-02-08 15:38:35", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 271, + "name": "User-271", + "type": 4, + "status": 2, + "score": 24, + "experience": 42013, + "sex": "女", + "city": "宝鸡市", + "description": "-", + "createTime": "2013-10-19 09:10:48", + "parentId": null, + "children": [ + { + "id": 272, + "name": "User-272", + "type": 5, + "status": 4, + "score": 7, + "experience": 86631, + "sex": "男", + "city": "黄石市", + "description": "-", + "createTime": "1983-02-15 19:44:19", + "parentId": null, + "children": [ + { + "id": 273, + "name": "User-273", + "type": 5, + "status": 1, + "score": 5, + "experience": 90121, + "sex": "女", + "city": "淮安市", + "description": "-", + "createTime": "1986-05-10 21:35:11", + "parentId": null, + "children": [ + { + "id": 274, + "name": "User-274", + "type": 1, + "status": 3, + "score": 97, + "experience": 74832, + "sex": "男", + "city": "四平市", + "description": "-", + "createTime": "1996-08-04 00:38:03", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 275, + "name": "User-275", + "type": 2, + "status": 2, + "score": 42, + "experience": 45129, + "sex": "男", + "city": "昌都地区", + "description": "-", + "createTime": "1983-01-14 21:58:01", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 276, + "name": "User-276", + "type": 4, + "status": 3, + "score": 2, + "experience": 40565, + "sex": "女", + "city": "普洱市", + "description": "-", + "createTime": "1998-03-28 19:05:33", + "parentId": null, + "children": [ + { + "id": 277, + "name": "User-277", + "type": 2, + "status": 1, + "score": 6, + "experience": 27426, + "sex": "男", + "city": "安顺市", + "description": "-", + "createTime": "2023-01-17 10:34:05", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 278, + "name": "User-278", + "type": 4, + "status": 2, + "score": 36, + "experience": 22014, + "sex": "男", + "city": "榆林市", + "description": "-", + "createTime": "1993-01-12 09:41:01", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 279, + "name": "User-279", + "type": 4, + "status": 1, + "score": 43, + "experience": 35756, + "sex": "女", + "city": "天津市", + "description": "-", + "createTime": "2002-03-20 11:28:25", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 280, + "name": "User-280", + "type": 2, + "status": 3, + "score": 94, + "experience": 59280, + "sex": "女", + "city": "松原市", + "description": "-", + "createTime": "2008-09-28 10:43:16", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 281, + "name": "User-281", + "type": 5, + "status": 3, + "score": 77, + "experience": 83642, + "sex": "男", + "city": "汕头市", + "description": "-", + "createTime": "2016-07-11 13:48:25", + "parentId": null, + "children": [ + { + "id": 282, + "name": "User-282", + "type": 2, + "status": 3, + "score": 16, + "experience": 75399, + "sex": "男", + "city": "南平市", + "description": "-", + "createTime": "2020-04-11 16:46:07", + "parentId": null, + "children": [ + { + "id": 283, + "name": "User-283", + "type": 2, + "status": 2, + "score": 53, + "experience": 57226, + "sex": "男", + "city": "北京市", + "description": "-", + "createTime": "1995-03-17 00:42:50", + "parentId": null, + "children": [ + { + "id": 284, + "name": "User-284", + "type": 3, + "status": 2, + "score": 19, + "experience": 84763, + "sex": "男", + "city": "澳门半岛", + "description": "-", + "createTime": "2017-08-15 18:16:29", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 285, + "name": "User-285", + "type": 3, + "status": 3, + "score": 39, + "experience": 67178, + "sex": "女", + "city": "南昌市", + "description": "-", + "createTime": "1992-07-26 05:30:51", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 286, + "name": "User-286", + "type": 2, + "status": 1, + "score": 90, + "experience": 92236, + "sex": "女", + "city": "茂名市", + "description": "-", + "createTime": "1987-09-26 10:59:31", + "parentId": null, + "children": [ + { + "id": 287, + "name": "User-287", + "type": 1, + "status": 1, + "score": 53, + "experience": 52079, + "sex": "男", + "city": "固原市", + "description": "-", + "createTime": "1995-01-10 00:22:30", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 288, + "name": "User-288", + "type": 2, + "status": 3, + "score": 65, + "experience": 87314, + "sex": "男", + "city": "离岛", + "description": "-", + "createTime": "1985-10-29 13:49:20", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 289, + "name": "User-289", + "type": 5, + "status": 1, + "score": 25, + "experience": 97910, + "sex": "男", + "city": "离岛", + "description": "-", + "createTime": "2007-04-29 01:09:20", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 290, + "name": "User-290", + "type": 4, + "status": 2, + "score": 41, + "experience": 19698, + "sex": "男", + "city": "新北市", + "description": "-", + "createTime": "2009-03-16 07:50:46", + "parentId": null, + "children": [ + { + "id": 291, + "name": "User-291", + "type": 6, + "status": 2, + "score": 14, + "experience": 60523, + "sex": "男", + "city": "拉萨市", + "description": "-", + "createTime": "2018-06-11 05:19:27", + "parentId": null, + "children": [ + { + "id": 292, + "name": "User-292", + "type": 5, + "status": 1, + "score": 14, + "experience": 87381, + "sex": "男", + "city": "驻马店市", + "description": "-", + "createTime": "2002-03-09 18:35:26", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 293, + "name": "User-293", + "type": 3, + "status": 3, + "score": 12, + "experience": 59971, + "sex": "男", + "city": "重庆市", + "description": "-", + "createTime": "2012-08-30 00:01:37", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 294, + "name": "User-294", + "type": 5, + "status": 1, + "score": 71, + "experience": 74009, + "sex": "男", + "city": "河池市", + "description": "-", + "createTime": "2012-03-24 15:15:00", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 295, + "name": "User-295", + "type": 3, + "status": 1, + "score": 6, + "experience": 87494, + "sex": "男", + "city": "永州市", + "description": "-", + "createTime": "1988-07-31 14:42:20", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 296, + "name": "User-296", + "type": 4, + "status": 3, + "score": 88, + "experience": 78667, + "sex": "女", + "city": "九龙", + "description": "-", + "createTime": "2007-06-11 13:02:07", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 297, + "name": "User-297", + "type": 3, + "status": 2, + "score": 17, + "experience": 11516, + "sex": "女", + "city": "郴州市", + "description": "-", + "createTime": "1983-11-27 13:30:47", + "parentId": null, + "children": [ + { + "id": 298, + "name": "User-298", + "type": 5, + "status": 3, + "score": 97, + "experience": 44819, + "sex": "男", + "city": "上海市", + "description": "-", + "createTime": "1988-07-02 10:53:42", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 299, + "name": "User-299", + "type": 2, + "status": 4, + "score": 88, + "experience": 53431, + "sex": "男", + "city": "香港岛", + "description": "-", + "createTime": "2022-12-23 15:25:05", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 300, + "name": "User-300", + "type": 5, + "status": 3, + "score": 69, + "experience": 24017, + "sex": "女", + "city": "重庆市", + "description": "-", + "createTime": "2003-12-12 04:04:15", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 301, + "name": "User-301", + "type": 6, + "status": 3, + "score": 72, + "experience": 73262, + "sex": "男", + "city": "北京市", + "description": "-", + "createTime": "1985-11-06 02:27:38", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 302, + "name": "User-302", + "type": 5, + "status": 3, + "score": 32, + "experience": 21824, + "sex": "女", + "city": "银川市", + "description": "-", + "createTime": "2012-09-12 05:57:24", + "parentId": null, + "children": [ + { + "id": 303, + "name": "User-303", + "type": 3, + "status": 4, + "score": 8, + "experience": 68289, + "sex": "女", + "city": "镇江市", + "description": "-", + "createTime": "2010-11-13 05:13:14", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 304, + "name": "User-304", + "type": 4, + "status": 3, + "score": 81, + "experience": 76781, + "sex": "男", + "city": "保山市", + "description": "-", + "createTime": "1975-08-13 20:37:37", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 305, + "name": "User-305", + "type": 2, + "status": 2, + "score": 39, + "experience": 17590, + "sex": "女", + "city": "大理白族自治州", + "description": "-", + "createTime": "1974-06-07 22:14:59", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 306, + "name": "User-306", + "type": 4, + "status": 4, + "score": 39, + "experience": 72010, + "sex": "女", + "city": "锡林郭勒盟", + "description": "-", + "createTime": "1984-05-30 20:38:58", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 307, + "name": "User-307", + "type": 5, + "status": 4, + "score": 52, + "experience": 56848, + "sex": "女", + "city": "阿里地区", + "description": "-", + "createTime": "1970-01-10 06:41:10", + "parentId": null, + "children": [ + { + "id": 308, + "name": "User-308", + "type": 4, + "status": 2, + "score": 45, + "experience": 48753, + "sex": "女", + "city": "重庆市", + "description": "-", + "createTime": "1973-06-22 14:59:33", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 309, + "name": "User-309", + "type": 2, + "status": 4, + "score": 45, + "experience": 3713, + "sex": "男", + "city": "郴州市", + "description": "-", + "createTime": "1997-01-21 13:06:44", + "parentId": null, + "children": [ + { + "id": 310, + "name": "User-310", + "type": 2, + "status": 2, + "score": 33, + "experience": 80153, + "sex": "男", + "city": "上海市", + "description": "-", + "createTime": "1982-05-27 16:55:13", + "parentId": null, + "children": [ + { + "id": 311, + "name": "User-311", + "type": 1, + "status": 3, + "score": 67, + "experience": 92653, + "sex": "男", + "city": "乌海市", + "description": "-", + "createTime": "2012-12-19 19:14:46", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 312, + "name": "User-312", + "type": 5, + "status": 2, + "score": 40, + "experience": 99153, + "sex": "女", + "city": "巴中市", + "description": "-", + "createTime": "1978-06-08 02:16:05", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 313, + "name": "User-313", + "type": 2, + "status": 1, + "score": 7, + "experience": 66644, + "sex": "女", + "city": "贵阳市", + "description": "-", + "createTime": "1993-12-13 16:21:03", + "parentId": null, + "children": [ + { + "id": 314, + "name": "User-314", + "type": 6, + "status": 1, + "score": 48, + "experience": 69828, + "sex": "男", + "city": "重庆市", + "description": "-", + "createTime": "1977-09-05 20:19:37", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + }, + { + "id": 315, + "name": "User-315", + "type": 5, + "status": 2, + "score": 30, + "experience": 82185, + "sex": "女", + "city": "安康市", + "description": "-", + "createTime": "2014-10-31 23:50:51", + "parentId": null, + "children": [ + { + "id": 316, + "name": "User-316", + "type": 1, + "status": 4, + "score": 45, + "experience": 4589, + "sex": "女", + "city": "铜仁市", + "description": "-", + "createTime": "2005-09-08 14:35:12", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 317, + "name": "User-317", + "type": 4, + "status": 2, + "score": 48, + "experience": 55422, + "sex": "女", + "city": "宿州市", + "description": "-", + "createTime": "1992-12-31 05:06:18", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 318, + "name": "User-318", + "type": 5, + "status": 1, + "score": 80, + "experience": 3519, + "sex": "男", + "city": "阜阳市", + "description": "-", + "createTime": "1998-11-01 22:11:08", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 319, + "name": "User-319", + "type": 4, + "status": 2, + "score": 64, + "experience": 10387, + "sex": "女", + "city": "新界", + "description": "-", + "createTime": "1995-02-23 03:01:51", + "parentId": null, + "children": [ + { + "id": 320, + "name": "User-320", + "type": 5, + "status": 2, + "score": 92, + "experience": 63866, + "sex": "女", + "city": "新余市", + "description": "-", + "createTime": "2006-09-13 05:20:48", + "parentId": null, + "children": [ + { + "id": 321, + "name": "User-321", + "type": 6, + "status": 2, + "score": 36, + "experience": 32018, + "sex": "男", + "city": "嘉兴市", + "description": "-", + "createTime": "2012-12-23 12:41:04", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 322, + "name": "User-322", + "type": 5, + "status": 3, + "score": 58, + "experience": 86419, + "sex": "女", + "city": "株洲市", + "description": "-", + "createTime": "2010-01-31 03:49:51", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 323, + "name": "User-323", + "type": 1, + "status": 4, + "score": 84, + "experience": 76545, + "sex": "女", + "city": "海北藏族自治州", + "description": "-", + "createTime": "2020-06-28 07:50:36", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 324, + "name": "User-324", + "type": 4, + "status": 2, + "score": 51, + "experience": 28561, + "sex": "男", + "city": "三沙市", + "description": "-", + "createTime": "2021-01-02 13:13:22", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + } + ], + "isParent": true + }, + { + "id": 325, + "name": "User-325", + "type": 3, + "status": 3, + "score": 62, + "experience": 94793, + "sex": "女", + "city": "嘉峪关市", + "description": "-", + "createTime": "1990-02-26 16:03:01", + "parentId": null, + "children": [ + { + "id": 326, + "name": "User-326", + "type": 4, + "status": 4, + "score": 70, + "experience": 19861, + "sex": "男", + "city": "佳木斯市", + "description": "-", + "createTime": "1971-09-13 13:37:06", + "parentId": null, + "children": [ + { + "id": 327, + "name": "User-327", + "type": 1, + "status": 2, + "score": 10, + "experience": 1866, + "sex": "女", + "city": "重庆市", + "description": "-", + "createTime": "1991-08-01 14:53:52", + "parentId": null, + "children": [ + { + "id": 328, + "name": "User-328", + "type": 6, + "status": 3, + "score": 97, + "experience": 81309, + "sex": "女", + "city": "重庆市", + "description": "-", + "createTime": "1973-06-11 16:06:26", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 329, + "name": "User-329", + "type": 5, + "status": 3, + "score": 36, + "experience": 2334, + "sex": "女", + "city": "新界", + "description": "-", + "createTime": "1989-01-06 11:00:47", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 330, + "name": "User-330", + "type": 4, + "status": 2, + "score": 75, + "experience": 19904, + "sex": "女", + "city": "朔州市", + "description": "-", + "createTime": "2003-06-01 14:59:33", + "parentId": null, + "children": [], + "isParent": false + }, + { + "id": 331, + "name": "User-331", + "type": 6, + "status": 4, + "score": 98, + "experience": 30101, + "sex": "女", + "city": "安康市", + "description": "-", + "createTime": "2003-05-14 13:25:56", + "parentId": null, + "children": [], + "isParent": false + } + ], + "isParent": true + } + ], + "isParent": true + } + ], + "isParent": true + } + ] +} \ No newline at end of file diff --git a/view/component/table.html b/view/component/table.html index c16d6cd..631a86a 100644 --- a/view/component/table.html +++ b/view/component/table.html @@ -13,8 +13,12 @@ -
                                      -
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      + + + + + + \ No newline at end of file -- Gitee From 3265a0b11069e4206eee40285f27042fc9b9e9b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Fri, 30 Jun 2023 00:55:04 +0800 Subject: [PATCH 39/67] update --- admin/css/admin.dark.css | 40 + admin/css/other/console.css | 81 + admin/data/menu.json | 25 +- admin/data/table.json | 278 -- admin/data/treeTable.json | 5078 ------------------------- component/pear/css/module/tabPage.css | 20 +- config/pear.config.yml | 6 +- view/component/table.html | 379 -- view/component/treeTable.html | 131 - view/console/console.html | 537 +++ view/console/console1.html | 0 view/console/console2.html | 0 12 files changed, 673 insertions(+), 5902 deletions(-) create mode 100644 admin/css/other/console.css delete mode 100644 admin/data/table.json delete mode 100644 admin/data/treeTable.json delete mode 100644 view/component/table.html delete mode 100644 view/component/treeTable.html create mode 100644 view/console/console.html delete mode 100644 view/console/console1.html delete mode 100644 view/console/console2.html diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index 10be7ef..654b9d4 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -166,6 +166,30 @@ 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-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; +} + /** panel */ .pear-admin-dark .layui-panel { background-color: #1d1e1f !important; @@ -188,6 +212,22 @@ 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; +} + /** success failure */ .pear-admin-dark .pear-result .content { background-color: rgba(153, 153, 153, 0.12); diff --git a/admin/css/other/console.css b/admin/css/other/console.css new file mode 100644 index 0000000..af9930b --- /dev/null +++ b/admin/css/other/console.css @@ -0,0 +1,81 @@ + +.shortcut-menu { + width: 100%; + height: 66px; + background-color: #F8F8F8; + display: inline-block; + border-radius: 5px; + text-align: center; + margin-bottom: 3px; +} + +.shortcut-menu i { + font-size: 30px; + height: 66px; + line-height: 66px; +} + +.shortcut-menu:hover { + box-shadow: 2px 0 8px 0 lightgray !important; +} + +.shortcut-menu-label { + width: 100%; + display: inline-block; + text-align: center; +} + +.deputy { + width: 100%; + height: 90px; + background-color: #F8F8F8; + display: inline-block; + border-radius: 5px; + text-align: center; + margin-bottom: 3px; +} + +.deputy:hover { + box-shadow: 2px 0 8px 0 lightgray !important; +} + +.deputy .deputy-label { + color: gray; + margin-top: 14px; + font-size: 14px; +} + +.deputy .deputy-count { + margin-top: 12px; + color: var(--global-primary-color); + font-size: 30px; +} + +.message-board { + padding: 0 10px 10px; +} + +.message-board li { + position: relative; + padding: 10px 0; + border-bottom: 1px solid #EEE; +} + +.message-board li p { + padding-bottom: 10px; + padding-top: 3px; +} + +.message-board li>span { + color: #999; + height: 24px; + line-height: 24px; +} + +.message-board .message-board-reply { + position: absolute; + right: 20px; + bottom: 12px; + height: 24px; + line-height: 24px; +} \ No newline at end of file diff --git a/admin/data/menu.json b/admin/data/menu.json index 6055317..c0bb2ed 100644 --- a/admin/data/menu.json +++ b/admin/data/menu.json @@ -4,19 +4,12 @@ "icon": "layui-icon layui-icon-console", "type": 0, "children": [{ - "id": 10, - "title": "控制后台", - "icon": "layui-icon layui-icon-console", - "type": 1, - "openType": "_component", - "href": "view/console/console1.html" - }, { - "id": 13, + "id": "11", "title": "数据分析", "icon": "layui-icon layui-icon-console", "type": 1, "openType": "_component", - "href": "view/console/console2.html" + "href": "view/console/console.html" }] }, { @@ -26,20 +19,6 @@ "type": 0, "children": [ { - "id": 21, - "title": "数据表格", - "icon": "layui-icon layui-icon-face-smile", - "type": 1, - "openType": "_component", - "href": "view/component/table.html" - },{ - "id": 22, - "title": "树形表格", - "icon": "layui-icon layui-icon-face-smile", - "type": 1, - "openType": "_component", - "href": "view/component/treeTable.html" - },{ "id": 23, "title": "24 栅格", "icon": "layui-icon layui-icon-face-smile", diff --git a/admin/data/table.json b/admin/data/table.json deleted file mode 100644 index a1af523..0000000 --- a/admin/data/table.json +++ /dev/null @@ -1,278 +0,0 @@ -{ - "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": "12" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10002" - ,"username": "杜甫" - ,"email": "test2@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "舍南舍北皆春水,但见群鸥日日来。花径不曾缘客扫,蓬门今始为君开。盘飧市远无兼味,樽酒家贫只旧醅。肯与邻翁相对饮,隔篱呼取尽余杯。" - ,"experience": "116" - ,"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": "65" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10004" - ,"username": "李清照" - ,"email": "test4@email.com" - ,"sex": "女" - ,"city": "浙江杭州" - ,"sign": "昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否,知否?应是绿肥红瘦。" - ,"experience": "777" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10005" - ,"username": "冰心" - ,"email": "test5@email.com" - ,"sex": "女" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "86" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10006" - ,"username": "张三" - ,"email": "test6@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "12" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10007" - ,"username": "张三7" - ,"email": "test7@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "16" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10008" - ,"username": "张三8" - ,"email": "test8@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "106" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10009" - ,"username": "张三9" - ,"email": "test9@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "106" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10010" - ,"username": "张三10" - ,"email": "test10@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "106" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10011" - ,"username": "张三11" - ,"email": "test11@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "106" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10012" - ,"username": "张三12" - ,"email": "test12@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "106" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10013" - ,"username": "张三13" - ,"email": "test13@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "106" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10014" - ,"username": "张三14" - ,"email": "test14@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "106" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10015" - ,"username": "张三15" - ,"email": "test15@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "106" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10016" - ,"username": "张三16" - ,"email": "test16@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "106" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10017" - ,"username": "张三17" - ,"email": "test17@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "106" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10018" - ,"username": "张三18" - ,"email": "test18@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "106" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10019" - ,"username": "张三19" - ,"email": "test19@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "106" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10020" - ,"username": "张三20" - ,"email": "test20@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "106" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10021" - ,"username": "张三21" - ,"email": "test21@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "106" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10022" - ,"username": "张三22" - ,"email": "test22@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "106" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10023" - ,"username": "张三23" - ,"email": "test23@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "106" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }, { - "id": "10024" - ,"username": "张三24" - ,"email": "test24@email.com" - ,"sex": "男" - ,"city": "浙江杭州" - ,"sign": "保持真善美,温和待人" - ,"experience": "106" - ,"ip": "192.168.0.8" - ,"checkin": "106" - ,"joinTime": "2016-10-14" - }] - } \ No newline at end of file diff --git a/admin/data/treeTable.json b/admin/data/treeTable.json deleted file mode 100644 index a861d6a..0000000 --- a/admin/data/treeTable.json +++ /dev/null @@ -1,5078 +0,0 @@ -{ - "code": 0, - "count": 1000, - "data": [ - { - "id": 1, - "name": "User-1", - "type": 4, - "status": 2, - "score": 28, - "experience": 54981, - "sex": "男", - "city": "丽江市", - "description": "-", - "createTime": "2014-06-04 12:29:55", - "parentId": null, - "children": [ - { - "id": 2, - "name": "User-2", - "type": 2, - "status": 3, - "score": 75, - "experience": 43884, - "sex": "女", - "city": "大理白族自治州", - "description": "-", - "createTime": "1971-11-03 19:15:43", - "parentId": null, - "children": [ - { - "id": 3, - "name": "User-3", - "type": 2, - "status": 3, - "score": 72, - "experience": 75912, - "sex": "女", - "city": "渭南市", - "description": "-", - "createTime": "2022-01-17 01:48:02", - "parentId": null, - "children": [ - { - "id": 4, - "name": "User-4", - "type": 3, - "status": 3, - "score": 21, - "experience": 23198, - "sex": "男", - "city": "海外", - "description": "-", - "createTime": "1986-11-06 23:56:45", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 5, - "name": "User-5", - "type": 3, - "status": 3, - "score": 89, - "experience": 25710, - "sex": "女", - "city": "盐城市", - "description": "-", - "createTime": "2007-10-03 21:44:59", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 6, - "name": "User-6", - "type": 2, - "status": 4, - "score": 70, - "experience": 51144, - "sex": "男", - "city": "益阳市", - "description": "-", - "createTime": "2017-02-21 00:26:02", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 7, - "name": "User-7", - "type": 5, - "status": 3, - "score": 24, - "experience": 64919, - "sex": "男", - "city": "贵港市", - "description": "-", - "createTime": "1981-05-14 17:52:03", - "parentId": null, - "children": [ - { - "id": 8, - "name": "User-8", - "type": 6, - "status": 2, - "score": 2, - "experience": 80656, - "sex": "男", - "city": "宿迁市", - "description": "-", - "createTime": "1984-05-24 20:44:26", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 9, - "name": "User-9", - "type": 6, - "status": 2, - "score": 58, - "experience": 2414, - "sex": "女", - "city": "宿州市", - "description": "-", - "createTime": "2015-05-06 00:39:19", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 10, - "name": "User-10", - "type": 4, - "status": 2, - "score": 89, - "experience": 97592, - "sex": "女", - "city": "钦州市", - "description": "-", - "createTime": "1985-05-26 03:50:09", - "parentId": null, - "children": [ - { - "id": 11, - "name": "User-11", - "type": 2, - "status": 2, - "score": 85, - "experience": 37406, - "sex": "女", - "city": "黄南藏族自治州", - "description": "-", - "createTime": "2022-10-09 11:51:44", - "parentId": null, - "children": [ - { - "id": 12, - "name": "User-12", - "type": 4, - "status": 3, - "score": 40, - "experience": 13714, - "sex": "女", - "city": "黔东南苗族侗族自治州", - "description": "-", - "createTime": "1991-09-01 09:19:11", - "parentId": null, - "children": [ - { - "id": 13, - "name": "User-13", - "type": 5, - "status": 4, - "score": 47, - "experience": 89189, - "sex": "男", - "city": "金昌市", - "description": "-", - "createTime": "1978-12-03 09:59:56", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 14, - "name": "User-14", - "type": 2, - "status": 3, - "score": 53, - "experience": 10739, - "sex": "女", - "city": "上海市", - "description": "-", - "createTime": "1989-03-31 19:08:12", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 15, - "name": "User-15", - "type": 5, - "status": 2, - "score": 76, - "experience": 40019, - "sex": "男", - "city": "遵义市", - "description": "-", - "createTime": "1996-12-12 16:34:05", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 16, - "name": "User-16", - "type": 3, - "status": 1, - "score": 81, - "experience": 30559, - "sex": "男", - "city": "开封市", - "description": "-", - "createTime": "1979-09-24 03:53:59", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 17, - "name": "User-17", - "type": 6, - "status": 4, - "score": 16, - "experience": 56549, - "sex": "女", - "city": "宁波市", - "description": "-", - "createTime": "1994-06-30 15:07:08", - "parentId": null, - "children": [ - { - "id": 18, - "name": "User-18", - "type": 2, - "status": 2, - "score": 22, - "experience": 31311, - "sex": "男", - "city": "黔东南苗族侗族自治州", - "description": "-", - "createTime": "1995-10-07 06:13:07", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 19, - "name": "User-19", - "type": 3, - "status": 1, - "score": 23, - "experience": 63334, - "sex": "女", - "city": "离岛", - "description": "-", - "createTime": "2002-09-25 11:36:07", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 20, - "name": "User-20", - "type": 2, - "status": 2, - "score": 30, - "experience": 5650, - "sex": "男", - "city": "许昌市", - "description": "-", - "createTime": "2001-08-08 14:25:42", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 21, - "name": "User-21", - "type": 2, - "status": 1, - "score": 74, - "experience": 71912, - "sex": "女", - "city": "海北藏族自治州", - "description": "-", - "createTime": "2016-10-18 15:54:30", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 22, - "name": "User-22", - "type": 2, - "status": 3, - "score": 87, - "experience": 65197, - "sex": "女", - "city": "定西市", - "description": "-", - "createTime": "1991-01-09 18:26:58", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 23, - "name": "User-23", - "type": 2, - "status": 4, - "score": 73, - "experience": 27868, - "sex": "男", - "city": "威海市", - "description": "-", - "createTime": "1981-10-13 18:52:11", - "parentId": null, - "children": [ - { - "id": 24, - "name": "User-24", - "type": 4, - "status": 2, - "score": 99, - "experience": 69882, - "sex": "女", - "city": "重庆市", - "description": "-", - "createTime": "1990-09-26 19:08:20", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 25, - "name": "User-25", - "type": 3, - "status": 2, - "score": 82, - "experience": 25619, - "sex": "女", - "city": "澳门半岛", - "description": "-", - "createTime": "1991-02-16 04:19:14", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 26, - "name": "User-26", - "type": 4, - "status": 2, - "score": 2, - "experience": 8058, - "sex": "男", - "city": "阿里地区", - "description": "-", - "createTime": "2002-10-19 09:44:05", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 27, - "name": "User-27", - "type": 4, - "status": 4, - "score": 95, - "experience": 68763, - "sex": "男", - "city": "天津市", - "description": "-", - "createTime": "2002-12-24 23:10:26", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 28, - "name": "User-28", - "type": 2, - "status": 4, - "score": 91, - "experience": 33513, - "sex": "女", - "city": "临沂市", - "description": "-", - "createTime": "2003-02-04 13:35:09", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 29, - "name": "User-29", - "type": 1, - "status": 1, - "score": 23, - "experience": 71620, - "sex": "男", - "city": "拉萨市", - "description": "-", - "createTime": "2020-12-22 10:11:11", - "parentId": null, - "children": [ - { - "id": 30, - "name": "User-30", - "type": 3, - "status": 3, - "score": 13, - "experience": 32398, - "sex": "女", - "city": "武威市", - "description": "-", - "createTime": "1982-10-26 11:27:06", - "parentId": null, - "children": [ - { - "id": 31, - "name": "User-31", - "type": 4, - "status": 1, - "score": 93, - "experience": 89245, - "sex": "男", - "city": "楚雄彝族自治州", - "description": "-", - "createTime": "1979-10-05 12:28:39", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 32, - "name": "User-32", - "type": 6, - "status": 4, - "score": 31, - "experience": 73504, - "sex": "女", - "city": "上海市", - "description": "-", - "createTime": "1991-01-11 06:55:04", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 33, - "name": "User-33", - "type": 5, - "status": 4, - "score": 27, - "experience": 95824, - "sex": "女", - "city": "鹰潭市", - "description": "-", - "createTime": "2009-06-17 04:15:06", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 34, - "name": "User-34", - "type": 4, - "status": 1, - "score": 37, - "experience": 63563, - "sex": "男", - "city": "红河哈尼族彝族自治州", - "description": "-", - "createTime": "1979-01-12 13:19:02", - "parentId": null, - "children": [ - { - "id": 35, - "name": "User-35", - "type": 4, - "status": 2, - "score": 81, - "experience": 46868, - "sex": "男", - "city": "德宏傣族景颇族自治州", - "description": "-", - "createTime": "1981-10-24 01:48:43", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 36, - "name": "User-36", - "type": 2, - "status": 1, - "score": 92, - "experience": 70256, - "sex": "女", - "city": "厦门市", - "description": "-", - "createTime": "1998-05-23 22:54:20", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 37, - "name": "User-37", - "type": 6, - "status": 2, - "score": 25, - "experience": 24689, - "sex": "女", - "city": "铁岭市", - "description": "-", - "createTime": "1980-05-03 04:42:32", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 38, - "name": "User-38", - "type": 4, - "status": 4, - "score": 83, - "experience": 96973, - "sex": "男", - "city": "武汉市", - "description": "-", - "createTime": "1979-11-04 03:18:53", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 39, - "name": "User-39", - "type": 4, - "status": 2, - "score": 37, - "experience": 23248, - "sex": "女", - "city": "黔东南苗族侗族自治州", - "description": "-", - "createTime": "2017-03-03 14:54:05", - "parentId": null, - "children": [ - { - "id": 40, - "name": "User-40", - "type": 5, - "status": 3, - "score": 53, - "experience": 89498, - "sex": "女", - "city": "吐鲁番地区", - "description": "-", - "createTime": "2005-01-14 16:36:11", - "parentId": null, - "children": [ - { - "id": 41, - "name": "User-41", - "type": 4, - "status": 3, - "score": 13, - "experience": 47225, - "sex": "女", - "city": "重庆市", - "description": "-", - "createTime": "1994-07-14 23:17:37", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 42, - "name": "User-42", - "type": 2, - "status": 2, - "score": 54, - "experience": 67027, - "sex": "男", - "city": "丽水市", - "description": "-", - "createTime": "2019-04-06 23:40:35", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 43, - "name": "User-43", - "type": 2, - "status": 2, - "score": 59, - "experience": 16009, - "sex": "男", - "city": "新界", - "description": "-", - "createTime": "1972-11-10 06:24:19", - "parentId": null, - "children": [ - { - "id": 44, - "name": "User-44", - "type": 6, - "status": 3, - "score": 26, - "experience": 48609, - "sex": "女", - "city": "东莞市", - "description": "-", - "createTime": "1993-04-21 21:27:36", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 45, - "name": "User-45", - "type": 1, - "status": 2, - "score": 28, - "experience": 13681, - "sex": "女", - "city": "常德市", - "description": "-", - "createTime": "2016-01-19 16:21:48", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 46, - "name": "User-46", - "type": 1, - "status": 2, - "score": 77, - "experience": 50932, - "sex": "男", - "city": "武汉市", - "description": "-", - "createTime": "1977-11-26 05:13:27", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 47, - "name": "User-47", - "type": 3, - "status": 1, - "score": 10, - "experience": 19599, - "sex": "男", - "city": "长治市", - "description": "-", - "createTime": "1980-10-28 04:42:20", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 48, - "name": "User-48", - "type": 6, - "status": 3, - "score": 50, - "experience": 63403, - "sex": "男", - "city": "香港岛", - "description": "-", - "createTime": "1974-05-23 17:23:13", - "parentId": null, - "children": [ - { - "id": 49, - "name": "User-49", - "type": 2, - "status": 1, - "score": 7, - "experience": 21161, - "sex": "男", - "city": "梅州市", - "description": "-", - "createTime": "1977-05-01 15:25:24", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 50, - "name": "User-50", - "type": 5, - "status": 2, - "score": 34, - "experience": 93741, - "sex": "男", - "city": "鸡西市", - "description": "-", - "createTime": "2018-04-14 23:13:38", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 51, - "name": "User-51", - "type": 2, - "status": 2, - "score": 92, - "experience": 36687, - "sex": "女", - "city": "温州市", - "description": "-", - "createTime": "1993-06-04 04:00:14", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 52, - "name": "User-52", - "type": 6, - "status": 2, - "score": 14, - "experience": 47342, - "sex": "男", - "city": "重庆市", - "description": "-", - "createTime": "1972-02-26 22:46:51", - "parentId": null, - "children": [ - { - "id": 53, - "name": "User-53", - "type": 1, - "status": 3, - "score": 97, - "experience": 40784, - "sex": "男", - "city": "邵阳市", - "description": "-", - "createTime": "1976-12-27 01:00:37", - "parentId": null, - "children": [ - { - "id": 54, - "name": "User-54", - "type": 4, - "status": 3, - "score": 93, - "experience": 10865, - "sex": "男", - "city": "龙岩市", - "description": "-", - "createTime": "2001-09-03 02:08:42", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 55, - "name": "User-55", - "type": 1, - "status": 2, - "score": 56, - "experience": 68232, - "sex": "男", - "city": "赣州市", - "description": "-", - "createTime": "1995-12-13 08:29:10", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 56, - "name": "User-56", - "type": 1, - "status": 2, - "score": 46, - "experience": 68897, - "sex": "女", - "city": "哈密地区", - "description": "-", - "createTime": "2007-08-05 00:54:06", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 57, - "name": "User-57", - "type": 4, - "status": 3, - "score": 68, - "experience": 58983, - "sex": "女", - "city": "北京市", - "description": "-", - "createTime": "1979-03-14 13:21:33", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 58, - "name": "User-58", - "type": 5, - "status": 1, - "score": 6, - "experience": 17343, - "sex": "男", - "city": "苗栗县", - "description": "-", - "createTime": "1996-01-21 18:43:11", - "parentId": null, - "children": [ - { - "id": 59, - "name": "User-59", - "type": 5, - "status": 2, - "score": 98, - "experience": 75262, - "sex": "女", - "city": "怀化市", - "description": "-", - "createTime": "2022-06-28 12:25:50", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 60, - "name": "User-60", - "type": 3, - "status": 3, - "score": 3, - "experience": 5817, - "sex": "女", - "city": "三亚市", - "description": "-", - "createTime": "1993-10-13 21:54:57", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 61, - "name": "User-61", - "type": 2, - "status": 3, - "score": 3, - "experience": 65548, - "sex": "男", - "city": "台州市", - "description": "-", - "createTime": "2017-11-06 13:16:14", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 62, - "name": "User-62", - "type": 5, - "status": 3, - "score": 37, - "experience": 33679, - "sex": "女", - "city": "辽源市", - "description": "-", - "createTime": "2002-10-19 22:53:23", - "parentId": null, - "children": [ - { - "id": 63, - "name": "User-63", - "type": 5, - "status": 3, - "score": 12, - "experience": 91033, - "sex": "女", - "city": "银川市", - "description": "-", - "createTime": "1973-04-17 07:33:35", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 64, - "name": "User-64", - "type": 3, - "status": 2, - "score": 87, - "experience": 30560, - "sex": "男", - "city": "昌都地区", - "description": "-", - "createTime": "1992-06-13 23:04:16", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 65, - "name": "User-65", - "type": 5, - "status": 2, - "score": 27, - "experience": 17982, - "sex": "女", - "city": "商洛市", - "description": "-", - "createTime": "2008-08-22 09:14:10", - "parentId": null, - "children": [ - { - "id": 66, - "name": "User-66", - "type": 3, - "status": 3, - "score": 91, - "experience": 47135, - "sex": "女", - "city": "离岛", - "description": "-", - "createTime": "1971-01-27 18:29:48", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 67, - "name": "User-67", - "type": 2, - "status": 1, - "score": 19, - "experience": 31440, - "sex": "女", - "city": "随州市", - "description": "-", - "createTime": "1979-10-14 10:30:22", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 68, - "name": "User-68", - "type": 5, - "status": 1, - "score": 88, - "experience": 48196, - "sex": "男", - "city": "承德市", - "description": "-", - "createTime": "1996-02-07 03:52:51", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 69, - "name": "User-69", - "type": 5, - "status": 1, - "score": 46, - "experience": 45341, - "sex": "女", - "city": "黔东南苗族侗族自治州", - "description": "-", - "createTime": "1995-05-08 20:53:45", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 70, - "name": "User-70", - "type": 3, - "status": 3, - "score": 19, - "experience": 66961, - "sex": "女", - "city": "固原市", - "description": "-", - "createTime": "1992-04-11 09:13:05", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 71, - "name": "User-71", - "type": 1, - "status": 3, - "score": 4, - "experience": 95553, - "sex": "女", - "city": "那曲地区", - "description": "-", - "createTime": "2019-07-31 00:30:49", - "parentId": null, - "children": [ - { - "id": 72, - "name": "User-72", - "type": 4, - "status": 4, - "score": 89, - "experience": 27410, - "sex": "男", - "city": "贺州市", - "description": "-", - "createTime": "1990-09-07 03:02:32", - "parentId": null, - "children": [ - { - "id": 73, - "name": "User-73", - "type": 6, - "status": 4, - "score": 93, - "experience": 84018, - "sex": "男", - "city": "雅安市", - "description": "-", - "createTime": "1972-01-18 02:00:25", - "parentId": null, - "children": [ - { - "id": 74, - "name": "User-74", - "type": 1, - "status": 4, - "score": 22, - "experience": 23025, - "sex": "女", - "city": "济南市", - "description": "-", - "createTime": "1991-12-18 23:27:07", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 75, - "name": "User-75", - "type": 5, - "status": 2, - "score": 75, - "experience": 58006, - "sex": "男", - "city": "新界", - "description": "-", - "createTime": "2004-03-03 09:28:00", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 76, - "name": "User-76", - "type": 2, - "status": 1, - "score": 79, - "experience": 86538, - "sex": "男", - "city": "果洛藏族自治州", - "description": "-", - "createTime": "2000-02-09 12:26:36", - "parentId": null, - "children": [ - { - "id": 77, - "name": "User-77", - "type": 2, - "status": 3, - "score": 60, - "experience": 61903, - "sex": "女", - "city": "呼伦贝尔市", - "description": "-", - "createTime": "1991-04-19 19:31:38", - "parentId": null, - "children": [ - { - "id": 78, - "name": "User-78", - "type": 4, - "status": 2, - "score": 67, - "experience": 10844, - "sex": "女", - "city": "鞍山市", - "description": "-", - "createTime": "2017-03-26 15:43:27", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 79, - "name": "User-79", - "type": 4, - "status": 2, - "score": 46, - "experience": 25354, - "sex": "男", - "city": "鸡西市", - "description": "-", - "createTime": "2018-01-30 03:43:56", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 80, - "name": "User-80", - "type": 5, - "status": 3, - "score": 13, - "experience": 30626, - "sex": "女", - "city": "玉溪市", - "description": "-", - "createTime": "1984-03-18 11:35:15", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 81, - "name": "User-81", - "type": 4, - "status": 3, - "score": 34, - "experience": 97578, - "sex": "女", - "city": "信阳市", - "description": "-", - "createTime": "2004-08-20 12:21:16", - "parentId": null, - "children": [ - { - "id": 82, - "name": "User-82", - "type": 6, - "status": 3, - "score": 38, - "experience": 7285, - "sex": "男", - "city": "舟山市", - "description": "-", - "createTime": "2001-03-16 07:04:17", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 83, - "name": "User-83", - "type": 3, - "status": 1, - "score": 51, - "experience": 41380, - "sex": "女", - "city": "佛山市", - "description": "-", - "createTime": "1998-06-01 18:21:57", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 84, - "name": "User-84", - "type": 2, - "status": 3, - "score": 37, - "experience": 19153, - "sex": "女", - "city": "宜宾市", - "description": "-", - "createTime": "1985-10-30 09:16:58", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 85, - "name": "User-85", - "type": 1, - "status": 1, - "score": 94, - "experience": 63371, - "sex": "男", - "city": "淮南市", - "description": "-", - "createTime": "2019-02-28 22:24:25", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 86, - "name": "User-86", - "type": 2, - "status": 4, - "score": 67, - "experience": 25315, - "sex": "男", - "city": "黔西南布依族苗族自治州", - "description": "-", - "createTime": "2011-11-29 07:06:26", - "parentId": null, - "children": [ - { - "id": 87, - "name": "User-87", - "type": 4, - "status": 4, - "score": 52, - "experience": 10751, - "sex": "女", - "city": "离岛", - "description": "-", - "createTime": "2022-08-05 23:21:27", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 88, - "name": "User-88", - "type": 4, - "status": 2, - "score": 65, - "experience": 38077, - "sex": "女", - "city": "黄石市", - "description": "-", - "createTime": "2007-12-12 15:47:51", - "parentId": null, - "children": [ - { - "id": 89, - "name": "User-89", - "type": 6, - "status": 2, - "score": 78, - "experience": 78006, - "sex": "男", - "city": "海口市", - "description": "-", - "createTime": "2007-10-20 18:46:39", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 90, - "name": "User-90", - "type": 3, - "status": 3, - "score": 66, - "experience": 91901, - "sex": "女", - "city": "上海市", - "description": "-", - "createTime": "1993-08-25 20:32:32", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 91, - "name": "User-91", - "type": 3, - "status": 3, - "score": 61, - "experience": 26129, - "sex": "女", - "city": "白山市", - "description": "-", - "createTime": "2002-01-04 16:12:16", - "parentId": null, - "children": [ - { - "id": 92, - "name": "User-92", - "type": 5, - "status": 3, - "score": 19, - "experience": 34580, - "sex": "男", - "city": "庆阳市", - "description": "-", - "createTime": "1987-02-28 01:36:59", - "parentId": null, - "children": [ - { - "id": 93, - "name": "User-93", - "type": 4, - "status": 4, - "score": 7, - "experience": 40805, - "sex": "女", - "city": "广州市", - "description": "-", - "createTime": "1986-02-23 02:19:01", - "parentId": null, - "children": [ - { - "id": 94, - "name": "User-94", - "type": 4, - "status": 2, - "score": 28, - "experience": 85777, - "sex": "男", - "city": "昌吉回族自治州", - "description": "-", - "createTime": "1987-02-21 18:49:17", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 95, - "name": "User-95", - "type": 3, - "status": 3, - "score": 33, - "experience": 50551, - "sex": "女", - "city": "三明市", - "description": "-", - "createTime": "2013-04-24 20:49:56", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 96, - "name": "User-96", - "type": 2, - "status": 2, - "score": 21, - "experience": 19915, - "sex": "女", - "city": "黄石市", - "description": "-", - "createTime": "2017-05-09 12:17:42", - "parentId": null, - "children": [ - { - "id": 97, - "name": "User-97", - "type": 3, - "status": 3, - "score": 25, - "experience": 22618, - "sex": "女", - "city": "汕尾市", - "description": "-", - "createTime": "1977-03-13 12:50:50", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 98, - "name": "User-98", - "type": 6, - "status": 2, - "score": 14, - "experience": 43979, - "sex": "女", - "city": "温州市", - "description": "-", - "createTime": "1991-04-10 20:49:11", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 99, - "name": "User-99", - "type": 3, - "status": 2, - "score": 82, - "experience": 24670, - "sex": "男", - "city": "贵港市", - "description": "-", - "createTime": "2012-12-19 08:28:58", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 100, - "name": "User-100", - "type": 4, - "status": 3, - "score": 64, - "experience": 84287, - "sex": "女", - "city": "张家界市", - "description": "-", - "createTime": "2000-09-28 06:14:34", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 101, - "name": "User-101", - "type": 3, - "status": 4, - "score": 68, - "experience": 39312, - "sex": "男", - "city": "玉树藏族自治州", - "description": "-", - "createTime": "2020-09-20 05:35:35", - "parentId": null, - "children": [ - { - "id": 102, - "name": "User-102", - "type": 3, - "status": 1, - "score": 74, - "experience": 16276, - "sex": "女", - "city": "延安市", - "description": "-", - "createTime": "1980-10-04 17:59:56", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 103, - "name": "User-103", - "type": 5, - "status": 2, - "score": 91, - "experience": 67473, - "sex": "男", - "city": "桃园县", - "description": "-", - "createTime": "2007-01-04 07:46:21", - "parentId": null, - "children": [ - { - "id": 104, - "name": "User-104", - "type": 1, - "status": 3, - "score": 3, - "experience": 91897, - "sex": "男", - "city": "营口市", - "description": "-", - "createTime": "2012-07-04 00:39:19", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 105, - "name": "User-105", - "type": 5, - "status": 2, - "score": 36, - "experience": 12972, - "sex": "男", - "city": "德州市", - "description": "-", - "createTime": "1993-06-04 03:52:48", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 106, - "name": "User-106", - "type": 2, - "status": 3, - "score": 60, - "experience": 58793, - "sex": "女", - "city": "开封市", - "description": "-", - "createTime": "2003-10-28 05:15:25", - "parentId": null, - "children": [ - { - "id": 107, - "name": "User-107", - "type": 6, - "status": 3, - "score": 70, - "experience": 88564, - "sex": "女", - "city": "大理白族自治州", - "description": "-", - "createTime": "1991-03-19 01:51:41", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 108, - "name": "User-108", - "type": 2, - "status": 2, - "score": 85, - "experience": 47918, - "sex": "男", - "city": "金门县", - "description": "-", - "createTime": "2015-06-18 04:18:20", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 109, - "name": "User-109", - "type": 2, - "status": 2, - "score": 15, - "experience": 72530, - "sex": "女", - "city": "上海市", - "description": "-", - "createTime": "1997-10-10 20:26:03", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 110, - "name": "User-110", - "type": 2, - "status": 2, - "score": 83, - "experience": 26538, - "sex": "男", - "city": "新竹市", - "description": "-", - "createTime": "2007-07-26 23:09:20", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 111, - "name": "User-111", - "type": 4, - "status": 2, - "score": 43, - "experience": 42129, - "sex": "男", - "city": "赤峰市", - "description": "-", - "createTime": "2015-12-17 09:23:18", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 112, - "name": "User-112", - "type": 4, - "status": 1, - "score": 74, - "experience": 61862, - "sex": "女", - "city": "潍坊市", - "description": "-", - "createTime": "2018-02-12 13:13:10", - "parentId": null, - "children": [ - { - "id": 113, - "name": "User-113", - "type": 1, - "status": 2, - "score": 65, - "experience": 52650, - "sex": "男", - "city": "德宏傣族景颇族自治州", - "description": "-", - "createTime": "2011-04-13 09:19:21", - "parentId": null, - "children": [ - { - "id": 114, - "name": "User-114", - "type": 3, - "status": 1, - "score": 82, - "experience": 53304, - "sex": "男", - "city": "益阳市", - "description": "-", - "createTime": "2021-09-25 03:56:20", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 115, - "name": "User-115", - "type": 3, - "status": 3, - "score": 32, - "experience": 1231, - "sex": "男", - "city": "娄底市", - "description": "-", - "createTime": "1984-10-28 18:20:13", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 116, - "name": "User-116", - "type": 3, - "status": 3, - "score": 89, - "experience": 65939, - "sex": "女", - "city": "昌都地区", - "description": "-", - "createTime": "1982-10-31 15:16:26", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 117, - "name": "User-117", - "type": 2, - "status": 4, - "score": 15, - "experience": 19416, - "sex": "女", - "city": "长治市", - "description": "-", - "createTime": "1990-04-09 13:29:32", - "parentId": null, - "children": [ - { - "id": 118, - "name": "User-118", - "type": 5, - "status": 2, - "score": 97, - "experience": 49212, - "sex": "女", - "city": "那曲地区", - "description": "-", - "createTime": "2018-12-15 15:50:57", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 119, - "name": "User-119", - "type": 2, - "status": 3, - "score": 82, - "experience": 19392, - "sex": "男", - "city": "海外", - "description": "-", - "createTime": "2016-03-01 20:52:25", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 120, - "name": "User-120", - "type": 5, - "status": 4, - "score": 51, - "experience": 78906, - "sex": "女", - "city": "九龙", - "description": "-", - "createTime": "1970-01-23 05:58:55", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 121, - "name": "User-121", - "type": 1, - "status": 2, - "score": 62, - "experience": 67953, - "sex": "女", - "city": "中山市", - "description": "-", - "createTime": "1980-03-31 19:15:07", - "parentId": null, - "children": [ - { - "id": 122, - "name": "User-122", - "type": 3, - "status": 2, - "score": 42, - "experience": 75027, - "sex": "男", - "city": "香港岛", - "description": "-", - "createTime": "1991-11-08 11:29:20", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 123, - "name": "User-123", - "type": 4, - "status": 1, - "score": 27, - "experience": 50832, - "sex": "男", - "city": "牡丹江市", - "description": "-", - "createTime": "1987-10-23 04:08:04", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 124, - "name": "User-124", - "type": 4, - "status": 3, - "score": 20, - "experience": 43261, - "sex": "男", - "city": "沧州市", - "description": "-", - "createTime": "2008-06-13 20:20:22", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 125, - "name": "User-125", - "type": 5, - "status": 2, - "score": 61, - "experience": 50399, - "sex": "女", - "city": "山南地区", - "description": "-", - "createTime": "2015-12-14 21:59:46", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 126, - "name": "User-126", - "type": 5, - "status": 2, - "score": 88, - "experience": 26933, - "sex": "女", - "city": "扬州市", - "description": "-", - "createTime": "1971-07-16 11:58:22", - "parentId": null, - "children": [ - { - "id": 127, - "name": "User-127", - "type": 1, - "status": 3, - "score": 86, - "experience": 15913, - "sex": "女", - "city": "宁波市", - "description": "-", - "createTime": "1979-06-01 23:52:36", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 128, - "name": "User-128", - "type": 5, - "status": 2, - "score": 61, - "experience": 74072, - "sex": "男", - "city": "乌兰察布市", - "description": "-", - "createTime": "1997-09-24 16:31:03", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 129, - "name": "User-129", - "type": 1, - "status": 3, - "score": 39, - "experience": 94200, - "sex": "男", - "city": "香港岛", - "description": "-", - "createTime": "1990-04-22 15:12:45", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 130, - "name": "User-130", - "type": 3, - "status": 3, - "score": 78, - "experience": 59502, - "sex": "男", - "city": "天津市", - "description": "-", - "createTime": "2011-01-03 07:20:25", - "parentId": null, - "children": [ - { - "id": 131, - "name": "User-131", - "type": 2, - "status": 3, - "score": 29, - "experience": 16545, - "sex": "男", - "city": "德阳市", - "description": "-", - "createTime": "2001-05-07 05:02:42", - "parentId": null, - "children": [ - { - "id": 132, - "name": "User-132", - "type": 3, - "status": 3, - "score": 53, - "experience": 8310, - "sex": "男", - "city": "襄阳市", - "description": "-", - "createTime": "1996-05-12 11:23:20", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 133, - "name": "User-133", - "type": 2, - "status": 3, - "score": 6, - "experience": 10610, - "sex": "男", - "city": "海口市", - "description": "-", - "createTime": "2013-05-11 17:50:19", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 134, - "name": "User-134", - "type": 4, - "status": 2, - "score": 67, - "experience": 70882, - "sex": "男", - "city": "遵义市", - "description": "-", - "createTime": "2014-03-04 22:55:14", - "parentId": null, - "children": [ - { - "id": 135, - "name": "User-135", - "type": 4, - "status": 3, - "score": 34, - "experience": 87799, - "sex": "女", - "city": "苗栗县", - "description": "-", - "createTime": "1990-04-13 14:44:06", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 136, - "name": "User-136", - "type": 6, - "status": 1, - "score": 66, - "experience": 58817, - "sex": "男", - "city": "大连市", - "description": "-", - "createTime": "1990-04-28 21:04:33", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 137, - "name": "User-137", - "type": 6, - "status": 2, - "score": 74, - "experience": 95991, - "sex": "男", - "city": "那曲地区", - "description": "-", - "createTime": "1994-06-04 16:01:44", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 138, - "name": "User-138", - "type": 1, - "status": 2, - "score": 99, - "experience": 71832, - "sex": "男", - "city": "阿里地区", - "description": "-", - "createTime": "1988-03-10 13:17:59", - "parentId": null, - "children": [ - { - "id": 139, - "name": "User-139", - "type": 6, - "status": 4, - "score": 36, - "experience": 86381, - "sex": "女", - "city": "菏泽市", - "description": "-", - "createTime": "2021-04-22 22:27:06", - "parentId": null, - "children": [ - { - "id": 140, - "name": "User-140", - "type": 6, - "status": 3, - "score": 36, - "experience": 43655, - "sex": "女", - "city": "通辽市", - "description": "-", - "createTime": "2001-12-20 09:14:52", - "parentId": null, - "children": [ - { - "id": 141, - "name": "User-141", - "type": 3, - "status": 2, - "score": 10, - "experience": 65976, - "sex": "女", - "city": "雅安市", - "description": "-", - "createTime": "1996-08-28 19:08:53", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 142, - "name": "User-142", - "type": 6, - "status": 4, - "score": 89, - "experience": 9828, - "sex": "男", - "city": "白山市", - "description": "-", - "createTime": "1985-09-21 14:58:12", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 143, - "name": "User-143", - "type": 6, - "status": 2, - "score": 1, - "experience": 84064, - "sex": "女", - "city": "重庆市", - "description": "-", - "createTime": "1973-11-04 08:28:54", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 144, - "name": "User-144", - "type": 5, - "status": 2, - "score": 46, - "experience": 51038, - "sex": "女", - "city": "南昌市", - "description": "-", - "createTime": "2010-01-27 02:05:48", - "parentId": null, - "children": [ - { - "id": 145, - "name": "User-145", - "type": 1, - "status": 3, - "score": 82, - "experience": 53656, - "sex": "女", - "city": "玉林市", - "description": "-", - "createTime": "1996-05-21 10:13:12", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 146, - "name": "User-146", - "type": 6, - "status": 4, - "score": 24, - "experience": 10700, - "sex": "男", - "city": "赤峰市", - "description": "-", - "createTime": "1998-03-08 12:08:46", - "parentId": null, - "children": [ - { - "id": 147, - "name": "User-147", - "type": 3, - "status": 1, - "score": 94, - "experience": 85060, - "sex": "女", - "city": "自贡市", - "description": "-", - "createTime": "2002-07-29 08:02:19", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 148, - "name": "User-148", - "type": 5, - "status": 2, - "score": 93, - "experience": 24255, - "sex": "男", - "city": "盐城市", - "description": "-", - "createTime": "2020-02-01 14:30:19", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 149, - "name": "User-149", - "type": 2, - "status": 4, - "score": 18, - "experience": 78062, - "sex": "女", - "city": "内江市", - "description": "-", - "createTime": "2003-02-26 08:59:31", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 150, - "name": "User-150", - "type": 4, - "status": 2, - "score": 13, - "experience": 48858, - "sex": "女", - "city": "上海市", - "description": "-", - "createTime": "1985-05-14 18:47:46", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 151, - "name": "User-151", - "type": 2, - "status": 3, - "score": 36, - "experience": 12807, - "sex": "男", - "city": "舟山市", - "description": "-", - "createTime": "2004-12-04 23:49:41", - "parentId": null, - "children": [ - { - "id": 152, - "name": "User-152", - "type": 2, - "status": 1, - "score": 60, - "experience": 38168, - "sex": "女", - "city": "喀什地区", - "description": "-", - "createTime": "1985-09-17 01:12:06", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 153, - "name": "User-153", - "type": 6, - "status": 1, - "score": 77, - "experience": 74590, - "sex": "男", - "city": "天津市", - "description": "-", - "createTime": "1970-02-02 10:02:55", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 154, - "name": "User-154", - "type": 5, - "status": 2, - "score": 92, - "experience": 76944, - "sex": "女", - "city": "临沧市", - "description": "-", - "createTime": "2013-12-06 17:42:05", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 155, - "name": "User-155", - "type": 3, - "status": 2, - "score": 29, - "experience": 78692, - "sex": "男", - "city": "秦皇岛市", - "description": "-", - "createTime": "2016-07-16 14:25:28", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 156, - "name": "User-156", - "type": 4, - "status": 2, - "score": 79, - "experience": 99919, - "sex": "女", - "city": "凉山彝族自治州", - "description": "-", - "createTime": "2010-07-15 10:21:19", - "parentId": null, - "children": [ - { - "id": 157, - "name": "User-157", - "type": 5, - "status": 3, - "score": 91, - "experience": 52354, - "sex": "男", - "city": "铜仁市", - "description": "-", - "createTime": "1977-03-20 09:15:54", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 158, - "name": "User-158", - "type": 5, - "status": 2, - "score": 22, - "experience": 51977, - "sex": "女", - "city": "宿州市", - "description": "-", - "createTime": "2016-11-17 20:01:17", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 159, - "name": "User-159", - "type": 1, - "status": 2, - "score": 43, - "experience": 46650, - "sex": "女", - "city": "沧州市", - "description": "-", - "createTime": "1987-09-05 06:14:08", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 160, - "name": "User-160", - "type": 6, - "status": 2, - "score": 57, - "experience": 7416, - "sex": "男", - "city": "澎湖县", - "description": "-", - "createTime": "1974-08-10 20:09:38", - "parentId": null, - "children": [ - { - "id": 161, - "name": "User-161", - "type": 5, - "status": 1, - "score": 53, - "experience": 12421, - "sex": "男", - "city": "阿克苏地区", - "description": "-", - "createTime": "1998-02-07 11:52:05", - "parentId": null, - "children": [ - { - "id": 162, - "name": "User-162", - "type": 3, - "status": 2, - "score": 100, - "experience": 19507, - "sex": "女", - "city": "随州市", - "description": "-", - "createTime": "2014-01-31 07:58:18", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 163, - "name": "User-163", - "type": 2, - "status": 2, - "score": 12, - "experience": 35637, - "sex": "男", - "city": "拉萨市", - "description": "-", - "createTime": "1983-10-02 10:31:23", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 164, - "name": "User-164", - "type": 6, - "status": 3, - "score": 65, - "experience": 42198, - "sex": "男", - "city": "香港岛", - "description": "-", - "createTime": "1987-12-22 14:34:32", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 165, - "name": "User-165", - "type": 2, - "status": 2, - "score": 73, - "experience": 40495, - "sex": "女", - "city": "天津市", - "description": "-", - "createTime": "1992-11-29 08:54:58", - "parentId": null, - "children": [ - { - "id": 166, - "name": "User-166", - "type": 3, - "status": 3, - "score": 83, - "experience": 62007, - "sex": "男", - "city": "重庆市", - "description": "-", - "createTime": "1992-10-01 19:14:47", - "parentId": null, - "children": [ - { - "id": 167, - "name": "User-167", - "type": 5, - "status": 4, - "score": 75, - "experience": 18137, - "sex": "女", - "city": "安顺市", - "description": "-", - "createTime": "2011-10-10 19:40:42", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 168, - "name": "User-168", - "type": 4, - "status": 3, - "score": 80, - "experience": 95421, - "sex": "男", - "city": "吴忠市", - "description": "-", - "createTime": "1972-10-27 14:58:59", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 169, - "name": "User-169", - "type": 6, - "status": 3, - "score": 10, - "experience": 2784, - "sex": "男", - "city": "伊春市", - "description": "-", - "createTime": "1992-07-06 23:16:42", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 170, - "name": "User-170", - "type": 5, - "status": 3, - "score": 68, - "experience": 54101, - "sex": "男", - "city": "贺州市", - "description": "-", - "createTime": "1970-01-21 21:50:15", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 171, - "name": "User-171", - "type": 5, - "status": 3, - "score": 38, - "experience": 51261, - "sex": "男", - "city": "上海市", - "description": "-", - "createTime": "1982-11-14 19:25:51", - "parentId": null, - "children": [ - { - "id": 172, - "name": "User-172", - "type": 3, - "status": 2, - "score": 4, - "experience": 73963, - "sex": "男", - "city": "徐州市", - "description": "-", - "createTime": "1993-04-15 02:08:57", - "parentId": null, - "children": [ - { - "id": 173, - "name": "User-173", - "type": 3, - "status": 1, - "score": 51, - "experience": 68723, - "sex": "女", - "city": "青岛市", - "description": "-", - "createTime": "2015-10-21 10:53:20", - "parentId": null, - "children": [ - { - "id": 174, - "name": "User-174", - "type": 3, - "status": 3, - "score": 68, - "experience": 62848, - "sex": "女", - "city": "周口市", - "description": "-", - "createTime": "2015-12-19 01:15:13", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 175, - "name": "User-175", - "type": 2, - "status": 3, - "score": 87, - "experience": 30871, - "sex": "女", - "city": "汕头市", - "description": "-", - "createTime": "1982-12-29 02:15:08", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 176, - "name": "User-176", - "type": 6, - "status": 2, - "score": 7, - "experience": 80089, - "sex": "男", - "city": "吉林市", - "description": "-", - "createTime": "2003-02-25 18:41:27", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 177, - "name": "User-177", - "type": 5, - "status": 4, - "score": 11, - "experience": 21782, - "sex": "女", - "city": "乌兰察布市", - "description": "-", - "createTime": "2014-10-10 20:45:07", - "parentId": null, - "children": [ - { - "id": 178, - "name": "User-178", - "type": 2, - "status": 2, - "score": 85, - "experience": 87330, - "sex": "女", - "city": "三亚市", - "description": "-", - "createTime": "1990-12-25 14:48:30", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 179, - "name": "User-179", - "type": 1, - "status": 1, - "score": 28, - "experience": 58951, - "sex": "男", - "city": "天津市", - "description": "-", - "createTime": "2007-09-14 00:42:03", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 180, - "name": "User-180", - "type": 5, - "status": 3, - "score": 74, - "experience": 83136, - "sex": "男", - "city": "抚州市", - "description": "-", - "createTime": "1990-08-17 16:49:05", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 181, - "name": "User-181", - "type": 1, - "status": 1, - "score": 37, - "experience": 40840, - "sex": "女", - "city": "三亚市", - "description": "-", - "createTime": "2000-05-12 08:01:46", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 182, - "name": "User-182", - "type": 1, - "status": 3, - "score": 40, - "experience": 86857, - "sex": "女", - "city": "三亚市", - "description": "-", - "createTime": "1981-03-30 01:02:44", - "parentId": null, - "children": [ - { - "id": 183, - "name": "User-183", - "type": 3, - "status": 1, - "score": 26, - "experience": 50377, - "sex": "男", - "city": "崇左市", - "description": "-", - "createTime": "1998-03-18 08:42:14", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 184, - "name": "User-184", - "type": 5, - "status": 3, - "score": 25, - "experience": 54099, - "sex": "女", - "city": "海口市", - "description": "-", - "createTime": "1980-01-26 12:11:04", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 185, - "name": "User-185", - "type": 6, - "status": 3, - "score": 87, - "experience": 80569, - "sex": "女", - "city": "运城市", - "description": "-", - "createTime": "2006-06-17 02:03:31", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 186, - "name": "User-186", - "type": 6, - "status": 3, - "score": 36, - "experience": 98204, - "sex": "男", - "city": "毕节市", - "description": "-", - "createTime": "1973-12-17 13:58:14", - "parentId": null, - "children": [ - { - "id": 187, - "name": "User-187", - "type": 2, - "status": 2, - "score": 50, - "experience": 6656, - "sex": "女", - "city": "常德市", - "description": "-", - "createTime": "1977-05-19 04:12:32", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 188, - "name": "User-188", - "type": 5, - "status": 2, - "score": 51, - "experience": 70421, - "sex": "男", - "city": "雅安市", - "description": "-", - "createTime": "1992-05-19 11:41:49", - "parentId": null, - "children": [ - { - "id": 189, - "name": "User-189", - "type": 3, - "status": 3, - "score": 86, - "experience": 10970, - "sex": "女", - "city": "陇南市", - "description": "-", - "createTime": "1986-07-20 03:40:31", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 190, - "name": "User-190", - "type": 6, - "status": 2, - "score": 81, - "experience": 35296, - "sex": "男", - "city": "重庆市", - "description": "-", - "createTime": "1994-08-03 11:42:24", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 191, - "name": "User-191", - "type": 2, - "status": 3, - "score": 36, - "experience": 60289, - "sex": "女", - "city": "滨州市", - "description": "-", - "createTime": "1981-11-09 18:18:23", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 192, - "name": "User-192", - "type": 1, - "status": 3, - "score": 80, - "experience": 84656, - "sex": "女", - "city": "果洛藏族自治州", - "description": "-", - "createTime": "1986-02-13 13:31:38", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 193, - "name": "User-193", - "type": 5, - "status": 2, - "score": 1, - "experience": 14433, - "sex": "男", - "city": "临汾市", - "description": "-", - "createTime": "2006-03-03 20:42:43", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 194, - "name": "User-194", - "type": 3, - "status": 4, - "score": 53, - "experience": 22962, - "sex": "女", - "city": "赣州市", - "description": "-", - "createTime": "2003-09-23 05:57:47", - "parentId": null, - "children": [ - { - "id": 195, - "name": "User-195", - "type": 3, - "status": 4, - "score": 78, - "experience": 80409, - "sex": "男", - "city": "晋城市", - "description": "-", - "createTime": "2022-04-16 13:45:56", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 196, - "name": "User-196", - "type": 3, - "status": 2, - "score": 83, - "experience": 35535, - "sex": "女", - "city": "庆阳市", - "description": "-", - "createTime": "2012-12-04 08:46:54", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 197, - "name": "User-197", - "type": 3, - "status": 2, - "score": 77, - "experience": 83542, - "sex": "女", - "city": "锦州市", - "description": "-", - "createTime": "2000-04-28 15:35:04", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 198, - "name": "User-198", - "type": 3, - "status": 4, - "score": 83, - "experience": 62489, - "sex": "女", - "city": "温州市", - "description": "-", - "createTime": "1989-12-11 18:50:29", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 199, - "name": "User-199", - "type": 2, - "status": 3, - "score": 81, - "experience": 74602, - "sex": "男", - "city": "自贡市", - "description": "-", - "createTime": "1996-10-30 22:16:31", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 200, - "name": "User-200", - "type": 6, - "status": 2, - "score": 31, - "experience": 28502, - "sex": "男", - "city": "宜兰县", - "description": "-", - "createTime": "1991-03-29 10:56:11", - "parentId": null, - "children": [ - { - "id": 201, - "name": "User-201", - "type": 5, - "status": 3, - "score": 23, - "experience": 45619, - "sex": "男", - "city": "商洛市", - "description": "-", - "createTime": "1997-11-04 08:13:06", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 202, - "name": "User-202", - "type": 5, - "status": 3, - "score": 7, - "experience": 7566, - "sex": "女", - "city": "随州市", - "description": "-", - "createTime": "1981-08-19 01:15:48", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 203, - "name": "User-203", - "type": 1, - "status": 3, - "score": 63, - "experience": 94626, - "sex": "男", - "city": "西宁市", - "description": "-", - "createTime": "1986-04-30 06:19:17", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 204, - "name": "User-204", - "type": 3, - "status": 3, - "score": 33, - "experience": 85619, - "sex": "女", - "city": "哈密地区", - "description": "-", - "createTime": "1977-09-15 16:53:05", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 205, - "name": "User-205", - "type": 3, - "status": 2, - "score": 95, - "experience": 66286, - "sex": "男", - "city": "安康市", - "description": "-", - "createTime": "1994-09-09 20:34:24", - "parentId": null, - "children": [ - { - "id": 206, - "name": "User-206", - "type": 5, - "status": 3, - "score": 48, - "experience": 93916, - "sex": "男", - "city": "攀枝花市", - "description": "-", - "createTime": "1996-05-16 00:14:46", - "parentId": null, - "children": [ - { - "id": 207, - "name": "User-207", - "type": 5, - "status": 3, - "score": 97, - "experience": 37124, - "sex": "女", - "city": "呼伦贝尔市", - "description": "-", - "createTime": "2009-06-18 14:55:19", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 208, - "name": "User-208", - "type": 2, - "status": 3, - "score": 77, - "experience": 37342, - "sex": "女", - "city": "九龙", - "description": "-", - "createTime": "2007-07-30 00:07:45", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 209, - "name": "User-209", - "type": 4, - "status": 1, - "score": 77, - "experience": 82846, - "sex": "男", - "city": "扬州市", - "description": "-", - "createTime": "1984-05-17 17:37:13", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 210, - "name": "User-210", - "type": 3, - "status": 1, - "score": 5, - "experience": 32873, - "sex": "女", - "city": "海外", - "description": "-", - "createTime": "1971-05-24 11:38:48", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 211, - "name": "User-211", - "type": 5, - "status": 2, - "score": 74, - "experience": 85519, - "sex": "男", - "city": "秦皇岛市", - "description": "-", - "createTime": "1970-01-17 07:29:46", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 212, - "name": "User-212", - "type": 4, - "status": 1, - "score": 33, - "experience": 80395, - "sex": "男", - "city": "白山市", - "description": "-", - "createTime": "2005-01-01 03:15:22", - "parentId": null, - "children": [ - { - "id": 213, - "name": "User-213", - "type": 4, - "status": 2, - "score": 55, - "experience": 17077, - "sex": "女", - "city": "毕节市", - "description": "-", - "createTime": "2020-01-13 21:32:59", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 214, - "name": "User-214", - "type": 3, - "status": 2, - "score": 38, - "experience": 57625, - "sex": "女", - "city": "海口市", - "description": "-", - "createTime": "2006-09-06 16:58:42", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 215, - "name": "User-215", - "type": 6, - "status": 2, - "score": 99, - "experience": 64592, - "sex": "女", - "city": "果洛藏族自治州", - "description": "-", - "createTime": "1987-07-29 17:20:38", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 216, - "name": "User-216", - "type": 5, - "status": 2, - "score": 44, - "experience": 69081, - "sex": "男", - "city": "天津市", - "description": "-", - "createTime": "1978-08-01 12:58:10", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 217, - "name": "User-217", - "type": 4, - "status": 2, - "score": 57, - "experience": 58398, - "sex": "男", - "city": "丹东市", - "description": "-", - "createTime": "1997-07-14 13:37:19", - "parentId": null, - "children": [ - { - "id": 218, - "name": "User-218", - "type": 3, - "status": 2, - "score": 11, - "experience": 65346, - "sex": "男", - "city": "百色市", - "description": "-", - "createTime": "1977-12-01 15:05:38", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 219, - "name": "User-219", - "type": 3, - "status": 2, - "score": 49, - "experience": 62808, - "sex": "女", - "city": "桃园县", - "description": "-", - "createTime": "1987-03-29 01:00:57", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 220, - "name": "User-220", - "type": 5, - "status": 2, - "score": 49, - "experience": 57282, - "sex": "女", - "city": "普洱市", - "description": "-", - "createTime": "2017-09-27 13:21:02", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 221, - "name": "User-221", - "type": 4, - "status": 2, - "score": 10, - "experience": 3034, - "sex": "男", - "city": "三沙市", - "description": "-", - "createTime": "1974-11-04 11:57:29", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 222, - "name": "User-222", - "type": 2, - "status": 4, - "score": 93, - "experience": 12235, - "sex": "男", - "city": "海南藏族自治州", - "description": "-", - "createTime": "1975-11-26 14:47:08", - "parentId": null, - "children": [ - { - "id": 223, - "name": "User-223", - "type": 1, - "status": 3, - "score": 61, - "experience": 49467, - "sex": "男", - "city": "澳门半岛", - "description": "-", - "createTime": "2023-04-09 00:28:41", - "parentId": null, - "children": [ - { - "id": 224, - "name": "User-224", - "type": 6, - "status": 3, - "score": 26, - "experience": 65118, - "sex": "女", - "city": "攀枝花市", - "description": "-", - "createTime": "2013-03-04 09:08:30", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 225, - "name": "User-225", - "type": 4, - "status": 1, - "score": 38, - "experience": 86342, - "sex": "男", - "city": "临夏回族自治州", - "description": "-", - "createTime": "1992-06-15 02:13:04", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 226, - "name": "User-226", - "type": 3, - "status": 2, - "score": 3, - "experience": 32179, - "sex": "女", - "city": "九龙", - "description": "-", - "createTime": "2009-03-13 06:48:47", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 227, - "name": "User-227", - "type": 1, - "status": 3, - "score": 96, - "experience": 38847, - "sex": "男", - "city": "梅州市", - "description": "-", - "createTime": "2020-04-16 09:43:04", - "parentId": null, - "children": [ - { - "id": 228, - "name": "User-228", - "type": 4, - "status": 4, - "score": 33, - "experience": 93101, - "sex": "女", - "city": "澳门半岛", - "description": "-", - "createTime": "1995-04-06 14:46:40", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 229, - "name": "User-229", - "type": 3, - "status": 1, - "score": 5, - "experience": 12628, - "sex": "男", - "city": "博尔塔拉蒙古自治州", - "description": "-", - "createTime": "2000-08-07 19:23:07", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 230, - "name": "User-230", - "type": 3, - "status": 3, - "score": 67, - "experience": 7013, - "sex": "女", - "city": "长治市", - "description": "-", - "createTime": "2002-12-14 10:11:11", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 231, - "name": "User-231", - "type": 4, - "status": 2, - "score": 37, - "experience": 61813, - "sex": "女", - "city": "博尔塔拉蒙古自治州", - "description": "-", - "createTime": "1970-06-27 23:24:44", - "parentId": null, - "children": [ - { - "id": 232, - "name": "User-232", - "type": 5, - "status": 2, - "score": 43, - "experience": 20578, - "sex": "男", - "city": "贵港市", - "description": "-", - "createTime": "1976-02-18 15:40:16", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 233, - "name": "User-233", - "type": 1, - "status": 2, - "score": 4, - "experience": 19621, - "sex": "女", - "city": "澳门半岛", - "description": "-", - "createTime": "2020-02-28 08:36:12", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 234, - "name": "User-234", - "type": 5, - "status": 2, - "score": 57, - "experience": 15400, - "sex": "男", - "city": "海东市", - "description": "-", - "createTime": "1976-11-22 23:04:12", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 235, - "name": "User-235", - "type": 4, - "status": 4, - "score": 18, - "experience": 36190, - "sex": "男", - "city": "海北藏族自治州", - "description": "-", - "createTime": "1978-01-30 19:43:36", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 236, - "name": "User-236", - "type": 5, - "status": 4, - "score": 69, - "experience": 51254, - "sex": "女", - "city": "北京市", - "description": "-", - "createTime": "2014-02-15 04:54:05", - "parentId": null, - "children": [ - { - "id": 237, - "name": "User-237", - "type": 2, - "status": 2, - "score": 99, - "experience": 34620, - "sex": "女", - "city": "河池市", - "description": "-", - "createTime": "2011-02-22 01:43:24", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 238, - "name": "User-238", - "type": 5, - "status": 3, - "score": 94, - "experience": 56612, - "sex": "女", - "city": "阿拉善盟", - "description": "-", - "createTime": "1996-04-13 12:44:00", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 239, - "name": "User-239", - "type": 2, - "status": 4, - "score": 27, - "experience": 1648, - "sex": "女", - "city": "长沙市", - "description": "-", - "createTime": "1989-06-01 07:38:48", - "parentId": null, - "children": [ - { - "id": 240, - "name": "User-240", - "type": 4, - "status": 2, - "score": 35, - "experience": 97895, - "sex": "男", - "city": "上海市", - "description": "-", - "createTime": "2002-04-19 15:07:58", - "parentId": null, - "children": [ - { - "id": 241, - "name": "User-241", - "type": 3, - "status": 1, - "score": 15, - "experience": 48229, - "sex": "女", - "city": "廊坊市", - "description": "-", - "createTime": "1997-04-12 20:09:02", - "parentId": null, - "children": [ - { - "id": 242, - "name": "User-242", - "type": 4, - "status": 4, - "score": 3, - "experience": 95377, - "sex": "女", - "city": "鹤壁市", - "description": "-", - "createTime": "1994-10-20 05:40:00", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 243, - "name": "User-243", - "type": 4, - "status": 1, - "score": 5, - "experience": 52728, - "sex": "男", - "city": "泉州市", - "description": "-", - "createTime": "2014-07-16 01:39:38", - "parentId": null, - "children": [ - { - "id": 244, - "name": "User-244", - "type": 5, - "status": 4, - "score": 80, - "experience": 51006, - "sex": "女", - "city": "离岛", - "description": "-", - "createTime": "1998-04-08 03:47:48", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 245, - "name": "User-245", - "type": 2, - "status": 4, - "score": 88, - "experience": 19853, - "sex": "男", - "city": "四平市", - "description": "-", - "createTime": "1998-08-15 16:27:36", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 246, - "name": "User-246", - "type": 6, - "status": 4, - "score": 52, - "experience": 63371, - "sex": "女", - "city": "肇庆市", - "description": "-", - "createTime": "2010-12-14 06:37:33", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 247, - "name": "User-247", - "type": 4, - "status": 2, - "score": 40, - "experience": 65183, - "sex": "男", - "city": "潍坊市", - "description": "-", - "createTime": "1975-07-09 23:34:16", - "parentId": null, - "children": [ - { - "id": 248, - "name": "User-248", - "type": 1, - "status": 3, - "score": 65, - "experience": 19079, - "sex": "男", - "city": "宜宾市", - "description": "-", - "createTime": "2013-03-01 13:33:15", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 249, - "name": "User-249", - "type": 6, - "status": 2, - "score": 80, - "experience": 37432, - "sex": "男", - "city": "临汾市", - "description": "-", - "createTime": "2003-02-04 13:42:18", - "parentId": null, - "children": [ - { - "id": 250, - "name": "User-250", - "type": 3, - "status": 3, - "score": 76, - "experience": 91326, - "sex": "女", - "city": "太原市", - "description": "-", - "createTime": "1997-03-04 20:12:43", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 251, - "name": "User-251", - "type": 1, - "status": 1, - "score": 29, - "experience": 93151, - "sex": "女", - "city": "营口市", - "description": "-", - "createTime": "1972-08-25 03:17:26", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 252, - "name": "User-252", - "type": 2, - "status": 2, - "score": 93, - "experience": 1882, - "sex": "女", - "city": "海外", - "description": "-", - "createTime": "2021-08-31 04:19:35", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 253, - "name": "User-253", - "type": 2, - "status": 4, - "score": 14, - "experience": 97501, - "sex": "女", - "city": "四平市", - "description": "-", - "createTime": "1991-03-16 04:18:45", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 254, - "name": "User-254", - "type": 3, - "status": 2, - "score": 43, - "experience": 77813, - "sex": "女", - "city": "那曲地区", - "description": "-", - "createTime": "2015-12-11 17:36:46", - "parentId": null, - "children": [ - { - "id": 255, - "name": "User-255", - "type": 4, - "status": 3, - "score": 7, - "experience": 88376, - "sex": "男", - "city": "贵阳市", - "description": "-", - "createTime": "1991-12-09 10:31:04", - "parentId": null, - "children": [ - { - "id": 256, - "name": "User-256", - "type": 5, - "status": 3, - "score": 24, - "experience": 66923, - "sex": "男", - "city": "海东市", - "description": "-", - "createTime": "2007-10-09 21:30:27", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 257, - "name": "User-257", - "type": 1, - "status": 2, - "score": 56, - "experience": 16966, - "sex": "女", - "city": "澳门半岛", - "description": "-", - "createTime": "1971-08-07 14:04:06", - "parentId": null, - "children": [ - { - "id": 258, - "name": "User-258", - "type": 3, - "status": 3, - "score": 43, - "experience": 68317, - "sex": "男", - "city": "杭州市", - "description": "-", - "createTime": "2000-06-23 23:43:22", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 259, - "name": "User-259", - "type": 3, - "status": 2, - "score": 19, - "experience": 65900, - "sex": "男", - "city": "杭州市", - "description": "-", - "createTime": "1972-11-02 03:14:29", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 260, - "name": "User-260", - "type": 2, - "status": 2, - "score": 33, - "experience": 26268, - "sex": "女", - "city": "包头市", - "description": "-", - "createTime": "1997-09-19 07:05:41", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 261, - "name": "User-261", - "type": 5, - "status": 1, - "score": 38, - "experience": 60653, - "sex": "女", - "city": "舟山市", - "description": "-", - "createTime": "1993-02-09 22:11:03", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 262, - "name": "User-262", - "type": 1, - "status": 2, - "score": 14, - "experience": 22944, - "sex": "男", - "city": "四平市", - "description": "-", - "createTime": "1979-09-12 21:59:09", - "parentId": null, - "children": [ - { - "id": 263, - "name": "User-263", - "type": 2, - "status": 2, - "score": 95, - "experience": 42730, - "sex": "男", - "city": "咸宁市", - "description": "-", - "createTime": "1971-07-06 13:35:24", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 264, - "name": "User-264", - "type": 3, - "status": 2, - "score": 8, - "experience": 81923, - "sex": "女", - "city": "铜陵市", - "description": "-", - "createTime": "2017-10-06 07:55:26", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 265, - "name": "User-265", - "type": 5, - "status": 2, - "score": 45, - "experience": 34796, - "sex": "男", - "city": "吉林市", - "description": "-", - "createTime": "1978-04-13 03:09:01", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 266, - "name": "User-266", - "type": 1, - "status": 2, - "score": 33, - "experience": 36888, - "sex": "女", - "city": "邵阳市", - "description": "-", - "createTime": "1986-08-10 22:38:19", - "parentId": null, - "children": [ - { - "id": 267, - "name": "User-267", - "type": 4, - "status": 3, - "score": 68, - "experience": 86617, - "sex": "女", - "city": "日照市", - "description": "-", - "createTime": "1988-09-20 23:59:03", - "parentId": null, - "children": [ - { - "id": 268, - "name": "User-268", - "type": 5, - "status": 2, - "score": 87, - "experience": 38669, - "sex": "男", - "city": "锦州市", - "description": "-", - "createTime": "2003-01-29 15:05:06", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 269, - "name": "User-269", - "type": 2, - "status": 4, - "score": 94, - "experience": 55962, - "sex": "女", - "city": "咸阳市", - "description": "-", - "createTime": "1999-05-31 06:27:39", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 270, - "name": "User-270", - "type": 4, - "status": 1, - "score": 67, - "experience": 37707, - "sex": "男", - "city": "吴忠市", - "description": "-", - "createTime": "1984-02-08 15:38:35", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 271, - "name": "User-271", - "type": 4, - "status": 2, - "score": 24, - "experience": 42013, - "sex": "女", - "city": "宝鸡市", - "description": "-", - "createTime": "2013-10-19 09:10:48", - "parentId": null, - "children": [ - { - "id": 272, - "name": "User-272", - "type": 5, - "status": 4, - "score": 7, - "experience": 86631, - "sex": "男", - "city": "黄石市", - "description": "-", - "createTime": "1983-02-15 19:44:19", - "parentId": null, - "children": [ - { - "id": 273, - "name": "User-273", - "type": 5, - "status": 1, - "score": 5, - "experience": 90121, - "sex": "女", - "city": "淮安市", - "description": "-", - "createTime": "1986-05-10 21:35:11", - "parentId": null, - "children": [ - { - "id": 274, - "name": "User-274", - "type": 1, - "status": 3, - "score": 97, - "experience": 74832, - "sex": "男", - "city": "四平市", - "description": "-", - "createTime": "1996-08-04 00:38:03", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 275, - "name": "User-275", - "type": 2, - "status": 2, - "score": 42, - "experience": 45129, - "sex": "男", - "city": "昌都地区", - "description": "-", - "createTime": "1983-01-14 21:58:01", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 276, - "name": "User-276", - "type": 4, - "status": 3, - "score": 2, - "experience": 40565, - "sex": "女", - "city": "普洱市", - "description": "-", - "createTime": "1998-03-28 19:05:33", - "parentId": null, - "children": [ - { - "id": 277, - "name": "User-277", - "type": 2, - "status": 1, - "score": 6, - "experience": 27426, - "sex": "男", - "city": "安顺市", - "description": "-", - "createTime": "2023-01-17 10:34:05", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 278, - "name": "User-278", - "type": 4, - "status": 2, - "score": 36, - "experience": 22014, - "sex": "男", - "city": "榆林市", - "description": "-", - "createTime": "1993-01-12 09:41:01", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 279, - "name": "User-279", - "type": 4, - "status": 1, - "score": 43, - "experience": 35756, - "sex": "女", - "city": "天津市", - "description": "-", - "createTime": "2002-03-20 11:28:25", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 280, - "name": "User-280", - "type": 2, - "status": 3, - "score": 94, - "experience": 59280, - "sex": "女", - "city": "松原市", - "description": "-", - "createTime": "2008-09-28 10:43:16", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 281, - "name": "User-281", - "type": 5, - "status": 3, - "score": 77, - "experience": 83642, - "sex": "男", - "city": "汕头市", - "description": "-", - "createTime": "2016-07-11 13:48:25", - "parentId": null, - "children": [ - { - "id": 282, - "name": "User-282", - "type": 2, - "status": 3, - "score": 16, - "experience": 75399, - "sex": "男", - "city": "南平市", - "description": "-", - "createTime": "2020-04-11 16:46:07", - "parentId": null, - "children": [ - { - "id": 283, - "name": "User-283", - "type": 2, - "status": 2, - "score": 53, - "experience": 57226, - "sex": "男", - "city": "北京市", - "description": "-", - "createTime": "1995-03-17 00:42:50", - "parentId": null, - "children": [ - { - "id": 284, - "name": "User-284", - "type": 3, - "status": 2, - "score": 19, - "experience": 84763, - "sex": "男", - "city": "澳门半岛", - "description": "-", - "createTime": "2017-08-15 18:16:29", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 285, - "name": "User-285", - "type": 3, - "status": 3, - "score": 39, - "experience": 67178, - "sex": "女", - "city": "南昌市", - "description": "-", - "createTime": "1992-07-26 05:30:51", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 286, - "name": "User-286", - "type": 2, - "status": 1, - "score": 90, - "experience": 92236, - "sex": "女", - "city": "茂名市", - "description": "-", - "createTime": "1987-09-26 10:59:31", - "parentId": null, - "children": [ - { - "id": 287, - "name": "User-287", - "type": 1, - "status": 1, - "score": 53, - "experience": 52079, - "sex": "男", - "city": "固原市", - "description": "-", - "createTime": "1995-01-10 00:22:30", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 288, - "name": "User-288", - "type": 2, - "status": 3, - "score": 65, - "experience": 87314, - "sex": "男", - "city": "离岛", - "description": "-", - "createTime": "1985-10-29 13:49:20", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 289, - "name": "User-289", - "type": 5, - "status": 1, - "score": 25, - "experience": 97910, - "sex": "男", - "city": "离岛", - "description": "-", - "createTime": "2007-04-29 01:09:20", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 290, - "name": "User-290", - "type": 4, - "status": 2, - "score": 41, - "experience": 19698, - "sex": "男", - "city": "新北市", - "description": "-", - "createTime": "2009-03-16 07:50:46", - "parentId": null, - "children": [ - { - "id": 291, - "name": "User-291", - "type": 6, - "status": 2, - "score": 14, - "experience": 60523, - "sex": "男", - "city": "拉萨市", - "description": "-", - "createTime": "2018-06-11 05:19:27", - "parentId": null, - "children": [ - { - "id": 292, - "name": "User-292", - "type": 5, - "status": 1, - "score": 14, - "experience": 87381, - "sex": "男", - "city": "驻马店市", - "description": "-", - "createTime": "2002-03-09 18:35:26", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 293, - "name": "User-293", - "type": 3, - "status": 3, - "score": 12, - "experience": 59971, - "sex": "男", - "city": "重庆市", - "description": "-", - "createTime": "2012-08-30 00:01:37", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 294, - "name": "User-294", - "type": 5, - "status": 1, - "score": 71, - "experience": 74009, - "sex": "男", - "city": "河池市", - "description": "-", - "createTime": "2012-03-24 15:15:00", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 295, - "name": "User-295", - "type": 3, - "status": 1, - "score": 6, - "experience": 87494, - "sex": "男", - "city": "永州市", - "description": "-", - "createTime": "1988-07-31 14:42:20", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 296, - "name": "User-296", - "type": 4, - "status": 3, - "score": 88, - "experience": 78667, - "sex": "女", - "city": "九龙", - "description": "-", - "createTime": "2007-06-11 13:02:07", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 297, - "name": "User-297", - "type": 3, - "status": 2, - "score": 17, - "experience": 11516, - "sex": "女", - "city": "郴州市", - "description": "-", - "createTime": "1983-11-27 13:30:47", - "parentId": null, - "children": [ - { - "id": 298, - "name": "User-298", - "type": 5, - "status": 3, - "score": 97, - "experience": 44819, - "sex": "男", - "city": "上海市", - "description": "-", - "createTime": "1988-07-02 10:53:42", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 299, - "name": "User-299", - "type": 2, - "status": 4, - "score": 88, - "experience": 53431, - "sex": "男", - "city": "香港岛", - "description": "-", - "createTime": "2022-12-23 15:25:05", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 300, - "name": "User-300", - "type": 5, - "status": 3, - "score": 69, - "experience": 24017, - "sex": "女", - "city": "重庆市", - "description": "-", - "createTime": "2003-12-12 04:04:15", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 301, - "name": "User-301", - "type": 6, - "status": 3, - "score": 72, - "experience": 73262, - "sex": "男", - "city": "北京市", - "description": "-", - "createTime": "1985-11-06 02:27:38", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 302, - "name": "User-302", - "type": 5, - "status": 3, - "score": 32, - "experience": 21824, - "sex": "女", - "city": "银川市", - "description": "-", - "createTime": "2012-09-12 05:57:24", - "parentId": null, - "children": [ - { - "id": 303, - "name": "User-303", - "type": 3, - "status": 4, - "score": 8, - "experience": 68289, - "sex": "女", - "city": "镇江市", - "description": "-", - "createTime": "2010-11-13 05:13:14", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 304, - "name": "User-304", - "type": 4, - "status": 3, - "score": 81, - "experience": 76781, - "sex": "男", - "city": "保山市", - "description": "-", - "createTime": "1975-08-13 20:37:37", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 305, - "name": "User-305", - "type": 2, - "status": 2, - "score": 39, - "experience": 17590, - "sex": "女", - "city": "大理白族自治州", - "description": "-", - "createTime": "1974-06-07 22:14:59", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 306, - "name": "User-306", - "type": 4, - "status": 4, - "score": 39, - "experience": 72010, - "sex": "女", - "city": "锡林郭勒盟", - "description": "-", - "createTime": "1984-05-30 20:38:58", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 307, - "name": "User-307", - "type": 5, - "status": 4, - "score": 52, - "experience": 56848, - "sex": "女", - "city": "阿里地区", - "description": "-", - "createTime": "1970-01-10 06:41:10", - "parentId": null, - "children": [ - { - "id": 308, - "name": "User-308", - "type": 4, - "status": 2, - "score": 45, - "experience": 48753, - "sex": "女", - "city": "重庆市", - "description": "-", - "createTime": "1973-06-22 14:59:33", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 309, - "name": "User-309", - "type": 2, - "status": 4, - "score": 45, - "experience": 3713, - "sex": "男", - "city": "郴州市", - "description": "-", - "createTime": "1997-01-21 13:06:44", - "parentId": null, - "children": [ - { - "id": 310, - "name": "User-310", - "type": 2, - "status": 2, - "score": 33, - "experience": 80153, - "sex": "男", - "city": "上海市", - "description": "-", - "createTime": "1982-05-27 16:55:13", - "parentId": null, - "children": [ - { - "id": 311, - "name": "User-311", - "type": 1, - "status": 3, - "score": 67, - "experience": 92653, - "sex": "男", - "city": "乌海市", - "description": "-", - "createTime": "2012-12-19 19:14:46", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 312, - "name": "User-312", - "type": 5, - "status": 2, - "score": 40, - "experience": 99153, - "sex": "女", - "city": "巴中市", - "description": "-", - "createTime": "1978-06-08 02:16:05", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 313, - "name": "User-313", - "type": 2, - "status": 1, - "score": 7, - "experience": 66644, - "sex": "女", - "city": "贵阳市", - "description": "-", - "createTime": "1993-12-13 16:21:03", - "parentId": null, - "children": [ - { - "id": 314, - "name": "User-314", - "type": 6, - "status": 1, - "score": 48, - "experience": 69828, - "sex": "男", - "city": "重庆市", - "description": "-", - "createTime": "1977-09-05 20:19:37", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - }, - { - "id": 315, - "name": "User-315", - "type": 5, - "status": 2, - "score": 30, - "experience": 82185, - "sex": "女", - "city": "安康市", - "description": "-", - "createTime": "2014-10-31 23:50:51", - "parentId": null, - "children": [ - { - "id": 316, - "name": "User-316", - "type": 1, - "status": 4, - "score": 45, - "experience": 4589, - "sex": "女", - "city": "铜仁市", - "description": "-", - "createTime": "2005-09-08 14:35:12", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 317, - "name": "User-317", - "type": 4, - "status": 2, - "score": 48, - "experience": 55422, - "sex": "女", - "city": "宿州市", - "description": "-", - "createTime": "1992-12-31 05:06:18", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 318, - "name": "User-318", - "type": 5, - "status": 1, - "score": 80, - "experience": 3519, - "sex": "男", - "city": "阜阳市", - "description": "-", - "createTime": "1998-11-01 22:11:08", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 319, - "name": "User-319", - "type": 4, - "status": 2, - "score": 64, - "experience": 10387, - "sex": "女", - "city": "新界", - "description": "-", - "createTime": "1995-02-23 03:01:51", - "parentId": null, - "children": [ - { - "id": 320, - "name": "User-320", - "type": 5, - "status": 2, - "score": 92, - "experience": 63866, - "sex": "女", - "city": "新余市", - "description": "-", - "createTime": "2006-09-13 05:20:48", - "parentId": null, - "children": [ - { - "id": 321, - "name": "User-321", - "type": 6, - "status": 2, - "score": 36, - "experience": 32018, - "sex": "男", - "city": "嘉兴市", - "description": "-", - "createTime": "2012-12-23 12:41:04", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 322, - "name": "User-322", - "type": 5, - "status": 3, - "score": 58, - "experience": 86419, - "sex": "女", - "city": "株洲市", - "description": "-", - "createTime": "2010-01-31 03:49:51", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 323, - "name": "User-323", - "type": 1, - "status": 4, - "score": 84, - "experience": 76545, - "sex": "女", - "city": "海北藏族自治州", - "description": "-", - "createTime": "2020-06-28 07:50:36", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 324, - "name": "User-324", - "type": 4, - "status": 2, - "score": 51, - "experience": 28561, - "sex": "男", - "city": "三沙市", - "description": "-", - "createTime": "2021-01-02 13:13:22", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - } - ], - "isParent": true - }, - { - "id": 325, - "name": "User-325", - "type": 3, - "status": 3, - "score": 62, - "experience": 94793, - "sex": "女", - "city": "嘉峪关市", - "description": "-", - "createTime": "1990-02-26 16:03:01", - "parentId": null, - "children": [ - { - "id": 326, - "name": "User-326", - "type": 4, - "status": 4, - "score": 70, - "experience": 19861, - "sex": "男", - "city": "佳木斯市", - "description": "-", - "createTime": "1971-09-13 13:37:06", - "parentId": null, - "children": [ - { - "id": 327, - "name": "User-327", - "type": 1, - "status": 2, - "score": 10, - "experience": 1866, - "sex": "女", - "city": "重庆市", - "description": "-", - "createTime": "1991-08-01 14:53:52", - "parentId": null, - "children": [ - { - "id": 328, - "name": "User-328", - "type": 6, - "status": 3, - "score": 97, - "experience": 81309, - "sex": "女", - "city": "重庆市", - "description": "-", - "createTime": "1973-06-11 16:06:26", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 329, - "name": "User-329", - "type": 5, - "status": 3, - "score": 36, - "experience": 2334, - "sex": "女", - "city": "新界", - "description": "-", - "createTime": "1989-01-06 11:00:47", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 330, - "name": "User-330", - "type": 4, - "status": 2, - "score": 75, - "experience": 19904, - "sex": "女", - "city": "朔州市", - "description": "-", - "createTime": "2003-06-01 14:59:33", - "parentId": null, - "children": [], - "isParent": false - }, - { - "id": 331, - "name": "User-331", - "type": 6, - "status": 4, - "score": 98, - "experience": 30101, - "sex": "女", - "city": "安康市", - "description": "-", - "createTime": "2003-05-14 13:25:56", - "parentId": null, - "children": [], - "isParent": false - } - ], - "isParent": true - } - ], - "isParent": true - } - ], - "isParent": true - } - ] -} \ No newline at end of file diff --git a/component/pear/css/module/tabPage.css b/component/pear/css/module/tabPage.css index 42d866b..e40f374 100644 --- a/component/pear/css/module/tabPage.css +++ b/component/pear/css/module/tabPage.css @@ -38,19 +38,19 @@ padding: 0px; } -.pear-tab-page .layui-tab-title { +.pear-tab-page > .layui-tab-title { border: none; border: 1px solid whitesmoke; background-color: white; } -.pear-tab-page .layui-tab-title li { +.pear-tab-page > .layui-tab-title li { border-right: 1px solid whitesmoke; color: dimgray; font-size: 13.5px; } -.pear-tab-page .layui-tab-title .layui-tab-bar { +.pear-tab-page > .layui-tab-title .layui-tab-bar { display: none; } @@ -58,11 +58,11 @@ display: none; } -.pear-tab-page .layui-tab-title .layui-this:after { +.pear-tab-page > .layui-tab-title .layui-this:after { display: none; } -.pear-tab-page .layui-tab-title .pear-tab-page-active { +.pear-tab-page > .layui-tab-title .pear-tab-page-active { display: inline-block; background-color: lightgray; width: 8px; @@ -71,21 +71,21 @@ margin-right: 12px; } -.pear-tab-page .layui-tab-title .layui-this .pear-tab-page-active { +.pear-tab-page > .layui-tab-title .layui-this .pear-tab-page-active { background-color: var(--global-primary-color) !important; } -.pear-tab-page .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-page .layui-tab-title .disable-close+.layui-tab-close { +.pear-tab-page > .layui-tab-title .disable-close+.layui-tab-close { display: none; } -.pear-tab-page .layui-tab-title .able-close+.layui-tab-close { +.pear-tab-page > .layui-tab-title .able-close+.layui-tab-close { display: inline-block; } @@ -150,7 +150,7 @@ padding-right: 40px; } -.pear-tab-page.layui-tab-rollTool .layui-tab-title { +.pear-tab-page.layui-tab-rollTool > .layui-tab-title { padding-left: 40px; padding-right: 80px; } diff --git a/config/pear.config.yml b/config/pear.config.yml index 9079d48..7b82a83 100644 --- a/config/pear.config.yml +++ b/config/pear.config.yml @@ -19,7 +19,7 @@ menu: ## 顶部菜单宽度 PX controlWidth: 500 ## 默认选中的菜单项 - select: "10" + select: "11" ## 是否开启异步菜单,false 时 data 属性设置为静态数据,true 时为后端接口 async: true ## 视图内容配置 @@ -36,8 +36,8 @@ tab: max: "30" ## 首页 index: - id: "10" ## 标识 ID , 建议与菜单项中的 ID 一致 - href: "view/console/console1.html" ## 页面地址 + id: "11" ## 标识 ID , 建议与菜单项中的 ID 一致 + href: "view/console/console.html" ## 页面地址 title: "首页" ## 标题 ## 主题配置 theme: diff --git a/view/component/table.html b/view/component/table.html deleted file mode 100644 index 631a86a..0000000 --- a/view/component/table.html +++ /dev/null @@ -1,379 +0,0 @@ - - - - - - table 组件综合演示 - Layui - - - - - - - -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      - - - - - - - \ No newline at end of file diff --git a/view/component/treeTable.html b/view/component/treeTable.html deleted file mode 100644 index 9ef8e0f..0000000 --- a/view/component/treeTable.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - Demo - - - -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      -
                                      - - - - - - - \ No newline at end of file diff --git a/view/console/console.html b/view/console/console.html new file mode 100644 index 0000000..a324f45 --- /dev/null +++ b/view/console/console.html @@ -0,0 +1,537 @@ + + + + + + 数据分析 + + + + + + + +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      + 快捷菜单 +
                                      +
                                      +
                                      +
                                      +
                                      + +
                                      + 主页 +
                                      +
                                      +
                                      + +
                                      + 弹层 +
                                      +
                                      +
                                      + +
                                      + 聊天 +
                                      +
                                      +
                                      + +
                                      + 相机 +
                                      +
                                      +
                                      + +
                                      + 表单 +
                                      +
                                      +
                                      + +
                                      + 安全 +
                                      +
                                      +
                                      + +
                                      + 公告 +
                                      +
                                      +
                                      + +
                                      + 更多 +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      + 代办任务 +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      待审评论
                                      +
                                      21
                                      +
                                      +
                                      +
                                      +
                                      +
                                      待审帖子
                                      +
                                      32
                                      +
                                      +
                                      +
                                      +
                                      +
                                      待审文章
                                      +
                                      14
                                      +
                                      +
                                      +
                                      +
                                      +
                                      待审用户
                                      +
                                      63
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      留言板
                                      +
                                      +
                                        +
                                      • +

                                        要不要作为我的家人,搬来我家。

                                        + 12月25日 19:92 + 回复 +
                                      • +
                                      • +

                                        快乐的时候不敢尽兴,频繁警戒自己保持清醒。

                                        + 4月30日 22:43 + 回复 +
                                      • +
                                      • +

                                        夏天真的来了,尽管它还有些犹豫。

                                        + 4月30日 22:43 + 回复 +
                                      • +
                                      • +

                                        看似不可达到的高度,只要坚持不懈就可能到达。

                                        + 4月30日 22:43 + 回复 +
                                      • +
                                      • +

                                        当浑浊变成了一种常态,那么清白就成了一种罪过。

                                        + 4月30日 22:43 + 回复 +
                                      • +
                                      • +

                                        那是一种内在的东西,他们到达不了,也无法触及!

                                        + 5月12日 01:25 + 回复 +
                                      • + +
                                      • +

                                        希望是一个好东西,也许是最好的,好东西是不会消亡的!

                                        + 6月11日 15:33 + 回复 +
                                      • +
                                      • +

                                        一切都在不可避免的走向庸俗。

                                        + 2月09日 13:40 + 回复 +
                                      • +
                                      • +

                                        路上没有灯火的时候,就点亮自己的头颅。

                                        + 3月11日 12:30 + 回复 +
                                      • + +
                                      • +

                                        我们应该不虚度一生,应该能够说:"我已经做了我能做的事。"

                                        + 4月30日 22:43 + 回复 +
                                      • + +
                                      • +

                                        接近,是我对一切的态度,是我对一切态度的距离

                                        + 6月11日 15:33 + 回复 +
                                      • +
                                      • +

                                        没有锚的船当然也可以航行,只是紧张充满你的一生。

                                        + 2月09日 13:40 + 回复 +
                                      • +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      + + + + \ No newline at end of file diff --git a/view/console/console1.html b/view/console/console1.html deleted file mode 100644 index e69de29..0000000 diff --git a/view/console/console2.html b/view/console/console2.html deleted file mode 100644 index e69de29..0000000 -- Gitee From 0081d33f5decbe4934be7b49243cf4446548ce07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Fri, 30 Jun 2023 17:56:10 +0800 Subject: [PATCH 40/67] update --- admin/css/admin.dark.css | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index 654b9d4..3ed7194 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -25,6 +25,16 @@ 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; } -- Gitee From eeb6137dea1b4ba5b487842b6846f5f32406510c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sat, 1 Jul 2023 11:32:55 +0800 Subject: [PATCH 41/67] =?UTF-8?q?=E7=A7=BB=E9=99=A4=20theme.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- component/pear/module/admin.js | 11 +++++++---- component/pear/module/theme.js | 16 ---------------- component/pear/pear.js | 5 +---- 3 files changed, 8 insertions(+), 24 deletions(-) delete mode 100644 component/pear/module/theme.js diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index dd62f21..8a973c5 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -1,4 +1,4 @@ -layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'theme', 'fullscreen', 'messageCenter'], +layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'fullscreen', 'messageCenter'], function (exports) { "use strict"; @@ -9,8 +9,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't menu = layui.menu, messageCenter = layui.messageCenter, fullscreen = layui.fullscreen, - tabPage = layui.tabPage, - theme = layui.theme; + tabPage = layui.tabPage; var bodyFrame; @@ -222,6 +221,10 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't }, param.other.keepLoad) } + this.changeTheme = function() { + document.documentElement.style.setProperty("--global-primary-color", localStorage.getItem("theme-color-color")); + } + this.themeRender = function (option) { if (option.theme.allowCustom === false) { $(".setting").remove(); @@ -231,7 +234,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 't localStorage.setItem("theme-color", currentColor.id); localStorage.setItem("theme-color-color", currentColor.color); localStorage.setItem("theme-color-second", currentColor.second); - theme.changeTheme(); + pearAdmin.changeTheme(); var menu = localStorage.getItem("theme-menu"); if (menu === null) { diff --git a/component/pear/module/theme.js b/component/pear/module/theme.js deleted file mode 100644 index 76c5a1d..0000000 --- a/component/pear/module/theme.js +++ /dev/null @@ -1,16 +0,0 @@ -layui.define(["jquery","layer"], function (exports) { - var MOD_NAME = 'theme', - $ = layui.jquery; - - var theme = {}; - - theme.changeTheme = function () { - - var color = localStorage.getItem("theme-color-color"); - - document.documentElement.style.setProperty("--global-primary-color", color); - - } - - exports(MOD_NAME, theme); -}); \ No newline at end of file diff --git a/component/pear/pear.js b/component/pear/pear.js index a92f3f3..630f74e 100644 --- a/component/pear/pear.js +++ b/component/pear/pear.js @@ -16,7 +16,6 @@ layui.config({ fullscreen:"fullscreen", messageCenter: "messageCenter", button: "button", - theme: "theme", popup:"extends/popup", count:"extends/count", toast:"extends/toast", @@ -24,6 +23,4 @@ layui.config({ echarts: "extends/echarts", echartsTheme: "extends/echartsTheme", yaml:"extends/yaml" -}).use(['layer', 'theme'], function () { - -}); \ No newline at end of file +}).use([], function () {}); \ No newline at end of file -- Gitee From 17863ab84d362e603a5721b70c22c92f5e3885b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sat, 1 Jul 2023 19:23:07 +0800 Subject: [PATCH 42/67] update --- admin/css/other/analysis.css | 136 ++++++++++++ admin/css/other/staging.css | 0 admin/css/reset.css | 11 + admin/data/menu.json | 18 +- view/analysis/index.html | 388 +++++++++++++++++++++++++++++++++++ view/console/console.html | 2 +- view/staging/index.html | 325 +++++++++++++++++++++++++++++ 7 files changed, 878 insertions(+), 2 deletions(-) create mode 100644 admin/css/other/analysis.css create mode 100644 admin/css/other/staging.css create mode 100644 view/analysis/index.html create mode 100644 view/staging/index.html diff --git a/admin/css/other/analysis.css b/admin/css/other/analysis.css new file mode 100644 index 0000000..164d208 --- /dev/null +++ b/admin/css/other/analysis.css @@ -0,0 +1,136 @@ +.top-panel { + border-radius: 4px; + text-align: center; +} + +.top-panel>.layui-card-body { + height: 60px; +} + +.top-panel-number { + line-height: 60px; + font-size: 29px; + border-right: 1px solid #eceff9; +} + +.top-panel-tips { + padding-left: 8px; + padding-top: 16px; + line-height: 30px; + font-size: 12px; +} + +.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 { + padding: 0 10px 10px; +} + +.layuiadmin-card-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 { + width: 32px; + height: 32px; + border-radius: 50%; + margin-right: 15px; +} + +.layuiadmin-card-status dd div.layui-status-img a { + width: 100%; + height: 100%; + display: inline-block; + text-align: center; + line-height: 32px; +} + +.layuiadmin-card-status dd div span { + color: #BBB; +} + +.layuiadmin-card-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/staging.css b/admin/css/other/staging.css new file mode 100644 index 0000000..e69de29 diff --git a/admin/css/reset.css b/admin/css/reset.css index 7878212..1160504 100644 --- a/admin/css/reset.css +++ b/admin/css/reset.css @@ -33,4 +33,15 @@ .layui-card { border-radius: var(--global-border-radius); +} + +.layui-card-footer { + position: relative; + height: 42px; + line-height: 42px; + padding: 0 15px; + border-top: 1px solid #f8f8f8; + color: #333; + border-radius: 2px 2px 0 0; + font-size: 14px; } \ No newline at end of file diff --git a/admin/data/menu.json b/admin/data/menu.json index c0bb2ed..30f4fff 100644 --- a/admin/data/menu.json +++ b/admin/data/menu.json @@ -5,11 +5,27 @@ "type": 0, "children": [{ "id": "11", - "title": "数据分析", + "title": "控制台", "icon": "layui-icon layui-icon-console", "type": 1, "openType": "_component", "href": "view/console/console.html" + }, + { + "id": "12", + "title": "分析页", + "icon": "layui-icon layui-icon-console", + "type": 1, + "openType": "_component", + "href": "view/analysis/index.html" + }, + { + "id": "13", + "title": "工作台", + "icon": "layui-icon layui-icon-console", + "type": 1, + "openType": "_component", + "href": "view/staging/index.html" }] }, { diff --git a/view/analysis/index.html b/view/analysis/index.html new file mode 100644 index 0000000..a5a34ba --- /dev/null +++ b/view/analysis/index.html @@ -0,0 +1,388 @@ + + + + + + 控制后台 + + + + + + + +
                                      +
                                      +
                                      +
                                      +
                                      今日访问
                                      +
                                      +
                                      +
                                      + 0 +
                                      +
                                      + + + + + + + +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      提交次数
                                      +
                                      +
                                      +
                                      + 0 +
                                      +
                                      + + + + + + + +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      下载数量
                                      +
                                      +
                                      +
                                      + 0 +
                                      +
                                      + + + + + + + +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      流量统计
                                      +
                                      +
                                      +
                                      + 0 +
                                      +
                                      + + + + + + +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      + +
                                      +
                                      最初,Layui 在爱与期许中孵化。
                                      +
                                      +
                                      +
                                      + +
                                      +
                                      最初,Layui 在爱与期许中孵化。
                                      +
                                      +
                                      +
                                      + +
                                      +
                                      最初,Layui 在爱与期许中孵化。
                                      +
                                      +
                                      +
                                      + +
                                      +
                                      最初,Layui 在爱与期许中孵化。
                                      +
                                      +
                                      +
                                      + +
                                      +
                                      最初,Layui 在爱与期许中孵化。
                                      +
                                      +
                                      +
                                      + +
                                      +
                                      最初,Layui 在爱与期许中孵化。
                                      +
                                      +
                                      +
                                      + +
                                      +
                                      最初,Layui 在爱与期许中孵化。
                                      +
                                      +
                                      +
                                      +
                                      + +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +
                                      +

                                      就眠儀式 在 讨论区 回答了 夏娜 提出得问题 +

                                      + 昨天 +
                                      +
                                      +
                                      +
                                      +
                                      +

                                      就眠儀式 在 讨论区 回答了 夏娜 提出得问题 +

                                      + 昨天 +
                                      +
                                      +
                                      +
                                      +
                                      +

                                      就眠儀式 在 讨论区 回答了 夏娜 提出得问题 +

                                      + 昨天 +
                                      +
                                      +
                                      +
                                      +
                                      +

                                      就眠儀式 在 讨论区 回答了 夏娜 提出得问题 +

                                      + 昨天 +
                                      +
                                      +
                                      +
                                      +
                                      +

                                      就眠儀式 在 讨论区 回答了 夏娜 提出得问题 +

                                      + 昨天 +
                                      +
                                      +
                                      +
                                      +
                                      + +
                                      +
                                      +
                                      +
                                      +
                                      + +
                                      +
                                      Hello Word
                                      +
                                      +
                                      +
                                      +
                                      + 寄语 +
                                      +
                                      + 原想将澎湃的爱平平稳稳放置你手心,奈何我徒有一股蛮劲,只顾向你跑去,一个不稳跌的满身脏兮兮。试图爬起的我, + 心想你会不会笑我 " 献爱献的这样笨拙, 怎么不知避开爱里的埋伏 " +
                                      +
                                      +
                                      +
                                      +
                                      + + + + \ No newline at end of file diff --git a/view/console/console.html b/view/console/console.html index a324f45..c2618f5 100644 --- a/view/console/console.html +++ b/view/console/console.html @@ -126,7 +126,7 @@
                                    -
                                    +
                                    diff --git a/view/staging/index.html b/view/staging/index.html new file mode 100644 index 0000000..002b3d0 --- /dev/null +++ b/view/staging/index.html @@ -0,0 +1,325 @@ + + + + + + 工作台 + + + + + + + +
                                    +
                                    +
                                    +
                                    +
                                    + 最近更新 +
                                    +
                                    +
                                    +
                                    +
                                    + +

                                    修复开启 isLazyimg:true 后, 图片懒加载但是图片不存在的报错问题

                                    + +
                                    +
                                    +
                                    +
                                    + +

                                    修复开启 isLazyimg:true 后, 图片懒加载但是图片不存在的报错问题

                                    + +
                                    +
                                    +
                                    +
                                    + +

                                    修复开启 isLazyimg:true 后, 图片懒加载但是图片不存在的报错问题

                                    + +
                                    +
                                    +
                                    +
                                    + +

                                    修复开启 isLazyimg:true 后, 图片懒加载但是图片不存在的报错问题

                                    + +
                                    +
                                    +
                                    +
                                    + +

                                    修复开启 isLazyimg:true 后, 图片懒加载但是图片不存在的报错问题

                                    + +
                                    +
                                    +
                                    +
                                    + +

                                    修复开启 isLazyimg:true 后, 图片懒加载但是图片不存在的报错问题

                                    + +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    +

                                    就眠儀式 在 讨论区 回答了 夏娜 提出得问题 +

                                    + 昨天 +
                                    +
                                    +
                                    +
                                    +
                                    +

                                    就眠儀式 在 讨论区 回答了 夏娜 提出得问题 +

                                    + 昨天 +
                                    +
                                    +
                                    +
                                    +
                                    +

                                    就眠儀式 在 讨论区 回答了 夏娜 提出得问题 +

                                    + 昨天 +
                                    +
                                    +
                                    +
                                    +
                                    +

                                    就眠儀式 在 讨论区 回答了 夏娜 提出得问题 +

                                    + 昨天 +
                                    +
                                    +
                                    +
                                    +
                                    +

                                    就眠儀式 在 讨论区 回答了 夏娜 提出得问题 +

                                    + 昨天 +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    快捷导航
                                    + +
                                    +
                                    +
                                    八卦新闻
                                    +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    产品动态
                                    +
                                    +
                                    +
                                    + +
                                    +
                                    时来天地皆同力,运去英雄不自由。
                                    +
                                    +
                                    +
                                    + +
                                    +
                                    时来天地皆同力,运去英雄不自由。
                                    +
                                    +
                                    +
                                    + +
                                    +
                                    时来天地皆同力,运去英雄不自由。
                                    +
                                    +
                                    +
                                    + +
                                    +
                                    时来天地皆同力,运去英雄不自由。
                                    +
                                    +
                                    +
                                    + +
                                    +
                                    时来天地皆同力,运去英雄不自由。
                                    +
                                    +
                                    +
                                    + +
                                    +
                                    时来天地皆同力,运去英雄不自由。
                                    +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    + + + + + + \ No newline at end of file -- Gitee From 11a39b89cce331ece62923c504349f4b193f0da8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sat, 1 Jul 2023 19:25:46 +0800 Subject: [PATCH 43/67] update --- admin/data/menu.json | 10 +- view/staging/index.html | 325 ---------------------------------------- 2 files changed, 1 insertion(+), 334 deletions(-) delete mode 100644 view/staging/index.html diff --git a/admin/data/menu.json b/admin/data/menu.json index 30f4fff..47dce08 100644 --- a/admin/data/menu.json +++ b/admin/data/menu.json @@ -5,7 +5,7 @@ "type": 0, "children": [{ "id": "11", - "title": "控制台", + "title": "工作台", "icon": "layui-icon layui-icon-console", "type": 1, "openType": "_component", @@ -18,14 +18,6 @@ "type": 1, "openType": "_component", "href": "view/analysis/index.html" - }, - { - "id": "13", - "title": "工作台", - "icon": "layui-icon layui-icon-console", - "type": 1, - "openType": "_component", - "href": "view/staging/index.html" }] }, { diff --git a/view/staging/index.html b/view/staging/index.html deleted file mode 100644 index 002b3d0..0000000 --- a/view/staging/index.html +++ /dev/null @@ -1,325 +0,0 @@ - - - - - - 工作台 - - - - - - - -
                                    -
                                    -
                                    -
                                    -
                                    - 最近更新 -
                                    -
                                    -
                                    -
                                    -
                                    - -

                                    修复开启 isLazyimg:true 后, 图片懒加载但是图片不存在的报错问题

                                    - -
                                    -
                                    -
                                    -
                                    - -

                                    修复开启 isLazyimg:true 后, 图片懒加载但是图片不存在的报错问题

                                    - -
                                    -
                                    -
                                    -
                                    - -

                                    修复开启 isLazyimg:true 后, 图片懒加载但是图片不存在的报错问题

                                    - -
                                    -
                                    -
                                    -
                                    - -

                                    修复开启 isLazyimg:true 后, 图片懒加载但是图片不存在的报错问题

                                    - -
                                    -
                                    -
                                    -
                                    - -

                                    修复开启 isLazyimg:true 后, 图片懒加载但是图片不存在的报错问题

                                    - -
                                    -
                                    -
                                    -
                                    - -

                                    修复开启 isLazyimg:true 后, 图片懒加载但是图片不存在的报错问题

                                    - -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -

                                    就眠儀式 在 讨论区 回答了 夏娜 提出得问题 -

                                    - 昨天 -
                                    -
                                    -
                                    -
                                    -
                                    -

                                    就眠儀式 在 讨论区 回答了 夏娜 提出得问题 -

                                    - 昨天 -
                                    -
                                    -
                                    -
                                    -
                                    -

                                    就眠儀式 在 讨论区 回答了 夏娜 提出得问题 -

                                    - 昨天 -
                                    -
                                    -
                                    -
                                    -
                                    -

                                    就眠儀式 在 讨论区 回答了 夏娜 提出得问题 -

                                    - 昨天 -
                                    -
                                    -
                                    -
                                    -
                                    -

                                    就眠儀式 在 讨论区 回答了 夏娜 提出得问题 -

                                    - 昨天 -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    快捷导航
                                    - -
                                    -
                                    -
                                    八卦新闻
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    产品动态
                                    -
                                    -
                                    -
                                    - -
                                    -
                                    时来天地皆同力,运去英雄不自由。
                                    -
                                    -
                                    -
                                    - -
                                    -
                                    时来天地皆同力,运去英雄不自由。
                                    -
                                    -
                                    -
                                    - -
                                    -
                                    时来天地皆同力,运去英雄不自由。
                                    -
                                    -
                                    -
                                    - -
                                    -
                                    时来天地皆同力,运去英雄不自由。
                                    -
                                    -
                                    -
                                    - -
                                    -
                                    时来天地皆同力,运去英雄不自由。
                                    -
                                    -
                                    -
                                    - -
                                    -
                                    时来天地皆同力,运去英雄不自由。
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    - - - - - - \ No newline at end of file -- Gitee From bd2efac19099ce6c31a3b1ed0d0ec1233cd06299 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sat, 1 Jul 2023 19:29:45 +0800 Subject: [PATCH 44/67] update --- admin/css/other/staging.css | 0 admin/css/reset.css | 11 ++--------- component/pear/module/admin.js | 8 ++++---- 3 files changed, 6 insertions(+), 13 deletions(-) delete mode 100644 admin/css/other/staging.css diff --git a/admin/css/other/staging.css b/admin/css/other/staging.css deleted file mode 100644 index e69de29..0000000 diff --git a/admin/css/reset.css b/admin/css/reset.css index 1160504..5406808 100644 --- a/admin/css/reset.css +++ b/admin/css/reset.css @@ -35,13 +35,6 @@ border-radius: var(--global-border-radius); } -.layui-card-footer { - position: relative; - height: 42px; - line-height: 42px; - padding: 0 15px; - border-top: 1px solid #f8f8f8; - color: #333; - border-radius: 2px 2px 0 0; - font-size: 14px; +.layui-timeline-axis { + color: var(--global-primary-color); } \ No newline at end of file diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index 8a973c5..e22d236 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -795,7 +795,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f form.on('switch(auto-head)', function (data) { localStorage.setItem("auto-head", this.checked); - theme.changeTheme(); + pearAdmin.changeTheme(); }) form.on('switch(banner)', function (data) { @@ -863,10 +863,10 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f localStorage.setItem("theme-header", headerColor); if (theme == "auto-theme") { localStorage.setItem("auto-head", true); - theme.changeTheme(); + pearAdmin.changeTheme(); } else { localStorage.setItem("auto-head", false); - theme.changeTheme(); + pearAdmin.changeTheme(); } pearAdmin.headerSkin(headerColor); }); @@ -879,7 +879,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f localStorage.setItem("theme-color", currentColor.id); localStorage.setItem("theme-color-color", currentColor.color); localStorage.setItem("theme-color-second", currentColor.second); - theme.changeTheme(); + pearAdmin.changeTheme(); }); function applyConfig(param) { -- Gitee From d9efeadba8b1e45fc4fc514286784df7256c4dbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sat, 1 Jul 2023 19:32:19 +0800 Subject: [PATCH 45/67] update --- component/pear/module/admin.js | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index e22d236..5541619 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -539,7 +539,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f $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); @@ -558,7 +558,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f $content.css("height", currentHeight); }, 500) ) - // 搜索列表点击事件 + // 列表点击事件 $list.off("click").on("click", "li", function () { var menuId = $(this).attr("smenu-id"); var menuUrl = $(this).attr("smenu-url"); @@ -586,7 +586,6 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f }) // 监听键盘事件 - // 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(); @@ -939,18 +938,6 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f } } - 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) { -- Gitee From 86b0535e7122783743a1d6b1f995982c09835b11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sat, 1 Jul 2023 21:22:19 +0800 Subject: [PATCH 46/67] update --- admin/css/admin.dark.css | 13 +++++++++++++ component/pear/module/admin.js | 2 +- index.html | 1 - 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index 3ed7194..7a56e0d 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -217,6 +217,12 @@ background-color: #1d1e1f !important; } +/** timeline */ +.pear-admin-dark .layui-timeline-axis { + background-color: rgb(29, 30, 31) !important; +} + + /** toast */ .pear-admin-dark .iziToast { background-color: #1f1f1f !important; @@ -238,6 +244,13 @@ border-bottom: 1px solid rgba(0, 0, 0, .40) !important; } +/** analysis */ +.pear-admin-dark .top-panel-number { + color: #ffffff !important; + border-color: #414243; +} + + /** success failure */ .pear-admin-dark .pear-result .content { background-color: rgba(153, 153, 153, 0.12); diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index 5541619..5a20bdd 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -860,7 +860,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f $('[data-select-header]').removeClass("layui-this"); $(this).addClass("layui-this"); localStorage.setItem("theme-header", headerColor); - if (theme == "auto-theme") { + if (headerColor == "auto-theme") { localStorage.setItem("auto-head", true); pearAdmin.changeTheme(); } else { diff --git a/index.html b/index.html index 970ad9e..a6fd95a 100644 --- a/index.html +++ b/index.html @@ -111,7 +111,6 @@ resolve(true) }); }) - }) -- Gitee From e20f933f2c757bcdfb6a41e43232ae0cc655204c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sat, 1 Jul 2023 21:47:01 +0800 Subject: [PATCH 47/67] update --- admin/css/admin.dark.css | 8 +++ admin/css/other/analysis.css | 95 +++++------------------------------- view/analysis/index.html | 12 ++--- 3 files changed, 26 insertions(+), 89 deletions(-) diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index 7a56e0d..e6ec042 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -222,6 +222,10 @@ background-color: rgb(29, 30, 31) !important; } +.pear-admin-dark .layui-timeline-item:before { + background-color: #414243 !important; +} + /** toast */ .pear-admin-dark .iziToast { @@ -251,6 +255,10 @@ } +.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); diff --git a/admin/css/other/analysis.css b/admin/css/other/analysis.css index 164d208..3525a21 100644 --- a/admin/css/other/analysis.css +++ b/admin/css/other/analysis.css @@ -20,100 +20,35 @@ font-size: 12px; } -.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; @@ -121,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/view/analysis/index.html b/view/analysis/index.html index a5a34ba..8f26efc 100644 --- a/view/analysis/index.html +++ b/view/analysis/index.html @@ -207,9 +207,9 @@
                                    -
                                    +
                                    -
                                    @@ -221,7 +221,7 @@
                                    -
                                    @@ -233,7 +233,7 @@
                                    -
                                    @@ -245,7 +245,7 @@
                                    -
                                    @@ -257,7 +257,7 @@
                                    -
                                    -- Gitee From 3fb9cb076add8a5030cf9692f69e47736ab3c8db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sun, 2 Jul 2023 00:47:11 +0800 Subject: [PATCH 48/67] update --- admin/data/menu.json | 21 +++++++++++---------- component/pear/module/admin.js | 8 ++++---- config/pear.config.yml | 6 +++--- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/admin/data/menu.json b/admin/data/menu.json index 47dce08..8bd2242 100644 --- a/admin/data/menu.json +++ b/admin/data/menu.json @@ -3,21 +3,22 @@ "title": "工作空间", "icon": "layui-icon layui-icon-console", "type": 0, - "children": [{ + "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/console.html" - }, - { - "id": "12", - "title": "分析页", - "icon": "layui-icon layui-icon-console", - "type": 1, - "openType": "_component", - "href": "view/analysis/index.html" }] }, { @@ -28,7 +29,7 @@ "children": [ { "id": 23, - "title": "24 栅格", + "title": "高级栅格", "icon": "layui-icon layui-icon-face-smile", "type": 1, "openType": "_component", diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index 5a20bdd..a46b341 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -10,15 +10,15 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f messageCenter = layui.messageCenter, fullscreen = layui.fullscreen, tabPage = layui.tabPage; - - var bodyFrame; var sideMenu; - var bodyTab; - var config; + var bodyTab; + + var bodyFrame; + var logout = function () { }; var body = $('body'); diff --git a/config/pear.config.yml b/config/pear.config.yml index 7b82a83..828a114 100644 --- a/config/pear.config.yml +++ b/config/pear.config.yml @@ -19,7 +19,7 @@ menu: ## 顶部菜单宽度 PX controlWidth: 500 ## 默认选中的菜单项 - select: "11" + select: "10" ## 是否开启异步菜单,false 时 data 属性设置为静态数据,true 时为后端接口 async: true ## 视图内容配置 @@ -36,8 +36,8 @@ tab: max: "30" ## 首页 index: - id: "11" ## 标识 ID , 建议与菜单项中的 ID 一致 - href: "view/console/console.html" ## 页面地址 + id: "10" ## 标识 ID , 建议与菜单项中的 ID 一致 + href: "view/analysis/index.html" ## 页面地址 title: "首页" ## 标题 ## 主题配置 theme: -- Gitee From 550d7a26b1b1b77225ea363282bc1f71f9804408 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sun, 2 Jul 2023 11:22:34 +0800 Subject: [PATCH 49/67] update --- admin/css/login.css | 73 ++++---------------------- admin/css/register.css | 12 +++++ index.html | 2 +- login.html | 77 --------------------------- view/login.html | 103 ++++++++++++++++++++++++++++++++++++ view/register.html | 116 +++++++++++++++++++++++++++++++++++++++++ 6 files changed, 241 insertions(+), 142 deletions(-) create mode 100644 admin/css/register.css delete mode 100644 login.html create mode 100644 view/login.html create mode 100644 view/register.html diff --git a/admin/css/login.css b/admin/css/login.css index fcabedd..57e5d3e 100644 --- a/admin/css/login.css +++ b/admin/css/login.css @@ -1,67 +1,12 @@ -.layui-form { - width: 360px !important; - margin: auto !important; - margin-top: 160px !important; +.demo-login-container { + width: 320px; + margin: 220px auto 0; } -.layui-form button { - font-size: 16px; - width: 100%; - height: 40px; - line-height: 40px; - font-size: 14px; - border-radius: 4px; -} - -.layui-form-checked[lay-skin=primary] i { - 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-form-item .layui-form-checkbox[lay-skin=primary] { - margin-top: 0px !important; -} - -.layui-input { - height: 40px !important; - line-height: 40px !important; - border-radius: 4px !important; -} - -body { - background-size: cover; - background-color: #f0f2f5; - background-repeat:no-repeat; - } - -.code { - float: left; - margin-right: 13px; - margin: 0px !important; - border: #e6e6e6 1px solid; - display: inline-block!important; -} - -.codeImage { - float: right; - height: 40px; - border-radius: 4px; - box-sizing: border-box; - border: #e6e6e6 1px solid; - cursor: pointer; -} - -@media (max-width:768px){ - body{ - background-position:center; - } +.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/register.css b/admin/css/register.css new file mode 100644 index 0000000..4daab57 --- /dev/null +++ b/admin/css/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/index.html b/index.html index a6fd95a..d24a10a 100644 --- a/index.html +++ b/index.html @@ -103,7 +103,7 @@ admin.logout(function(){ popup.success("注销成功",function(){ - location.href = "login.html"; + location.href = "../view/login.html"; }) // 清空 tabs 缓存 diff --git a/login.html b/login.html deleted file mode 100644 index 810fa96..0000000 --- a/login.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - 登录 - - - - - - - -
                                    -
                                    -
                                    -
                                    - -
                                    - -
                                    -
                                    -
                                    -
                                    -
                                    - -
                                    - -
                                    -
                                    -
                                    - - -
                                    -
                                    - -
                                    -
                                    - -
                                    -
                                    - - - - - - - \ No newline at end of file diff --git a/view/login.html b/view/login.html new file mode 100644 index 0000000..9a488ba --- /dev/null +++ b/view/login.html @@ -0,0 +1,103 @@ + + + + + + + 登录 + + + + + +
                                    + +
                                    + + + + + + + \ No newline at end of file diff --git a/view/register.html b/view/register.html new file mode 100644 index 0000000..50e7681 --- /dev/null +++ b/view/register.html @@ -0,0 +1,116 @@ + + + + + + + 注册 + + + + + +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    + +
                                    + +
                                    +
                                    +
                                    +
                                    + +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    + +
                                    + +
                                    +
                                    +
                                    +
                                    +
                                    + +
                                    + +
                                    +
                                    +
                                    +
                                    +
                                    + +
                                    + +
                                    +
                                    +
                                    +
                                    +
                                    + +
                                    + +
                                    +
                                    + +
                                    + +
                                    +
                                    + + + + + + + 登录已有帐号 +
                                    +
                                    +
                                    + + + + + + + \ No newline at end of file -- Gitee From c7e9c89f410d39df79f3daca8877838bcea26c47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sun, 2 Jul 2023 11:27:45 +0800 Subject: [PATCH 50/67] update --- admin/css/{ => other}/login.css | 0 admin/css/{ => other}/register.css | 0 view/login.html | 2 +- view/register.html | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) rename admin/css/{ => other}/login.css (100%) rename admin/css/{ => other}/register.css (100%) diff --git a/admin/css/login.css b/admin/css/other/login.css similarity index 100% rename from admin/css/login.css rename to admin/css/other/login.css diff --git a/admin/css/register.css b/admin/css/other/register.css similarity index 100% rename from admin/css/register.css rename to admin/css/other/register.css diff --git a/view/login.html b/view/login.html index 9a488ba..4a1d45c 100644 --- a/view/login.html +++ b/view/login.html @@ -6,7 +6,7 @@ 登录 - + diff --git a/view/register.html b/view/register.html index 50e7681..1a274f4 100644 --- a/view/register.html +++ b/view/register.html @@ -6,7 +6,7 @@ 注册 - + -- Gitee From be1dda6a7ebd1d6d6e795942e0c933ae89ac3651 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sun, 2 Jul 2023 12:01:07 +0800 Subject: [PATCH 51/67] update --- index.html | 2 +- view/login.html => login.html | 10 +-- register.html | 122 ++++++++++++++++++++++++++++++++++ view/analysis/index.html | 6 +- view/component/toast.html | 60 +++++++++++++++-- view/register.html | 116 -------------------------------- 6 files changed, 187 insertions(+), 129 deletions(-) rename view/login.html => login.html (92%) create mode 100644 register.html delete mode 100644 view/register.html diff --git a/index.html b/index.html index d24a10a..954ed4f 100644 --- a/index.html +++ b/index.html @@ -103,7 +103,7 @@ admin.logout(function(){ popup.success("注销成功",function(){ - location.href = "../view/login.html"; + location.href = "./login.html"; }) // 清空 tabs 缓存 diff --git a/view/login.html b/login.html similarity index 92% rename from view/login.html rename to login.html index 4a1d45c..6cfc396 100644 --- a/view/login.html +++ b/login.html @@ -5,8 +5,8 @@ 登录 - - + + @@ -69,8 +69,8 @@
                                    - - + + + + + + + \ No newline at end of file diff --git a/view/analysis/index.html b/view/analysis/index.html index 8f26efc..0e2acc7 100644 --- a/view/analysis/index.html +++ b/view/analysis/index.html @@ -348,10 +348,12 @@ var option = { xAxis: { type: 'category', - data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Bai', 'Fan', 'Yue', 'Qian'] + data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Bai', 'Fan', 'Yue', 'Qian'], + splitLine: false }, yAxis: { - type: 'value' + type: 'value', + splitLine: false }, grid: { x: '50px', diff --git a/view/component/toast.html b/view/component/toast.html index 863b2a3..c959a70 100644 --- a/view/component/toast.html +++ b/view/component/toast.html @@ -9,15 +9,28 @@
                                    -
                                    +
                                    基础使用
                                    - - - - + + + + +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    位置选项
                                    +
                                    + + + + + +
                                    @@ -55,6 +68,43 @@ message: 'You forgot important data', }); }); + $(".toast-top-left-btn").click(function(){ + toast.info({ + message: 'You forgot important data', + position: 'topLeft' + }); + }) + $(".toast-top-center-btn").click(function(){ + toast.info({ + message: 'You forgot important data', + position: 'topCenter' + }); + }) + $(".toast-top-right-btn").click(function(){ + toast.info({ + message: 'You forgot important data', + position: 'topRight' + }); + }) + + $(".toast-bottom-left-btn").click(function(){ + toast.info({ + message: 'You forgot important data', + position: 'bottomLeft' + }); + }) + $(".toast-bottom-center-btn").click(function(){ + toast.info({ + message: 'You forgot important data', + position: 'bottomCenter' + }); + }) + $(".toast-bottom-right-btn").click(function(){ + toast.info({ + message: 'You forgot important data', + position: 'bottomRight' + }); + }) }); diff --git a/view/register.html b/view/register.html deleted file mode 100644 index 1a274f4..0000000 --- a/view/register.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - 注册 - - - - - -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    - -
                                    - -
                                    -
                                    -
                                    -
                                    - -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    -
                                    - -
                                    - -
                                    -
                                    -
                                    -
                                    -
                                    - -
                                    - -
                                    -
                                    -
                                    -
                                    -
                                    - -
                                    - -
                                    -
                                    -
                                    -
                                    -
                                    - -
                                    - -
                                    -
                                    - -
                                    - -
                                    -
                                    - - - - - - - 登录已有帐号 -
                                    -
                                    -
                                    - - - - - - - \ No newline at end of file -- Gitee From abae63e032eb80a82d2d18c0c902b1898f3134c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sun, 2 Jul 2023 15:56:20 +0800 Subject: [PATCH 52/67] update --- component/pear/module/admin.js | 54 ++++++++++++++------------------ component/pear/module/button.js | 2 ++ component/pear/module/tabPage.js | 12 +++---- index.html | 5 --- 4 files changed, 32 insertions(+), 41 deletions(-) diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index a46b341..417b7c8 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -13,7 +13,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f var sideMenu; - var config; + var configurationCache; var bodyTab; @@ -88,15 +88,26 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f */ this.render = (options) => { if (options !== undefined) { - applyConfig(options); + pearAdmin.apply(options); } else { this.configurationProvider().then((result) => { - applyConfig(result); + pearAdmin.apply(result); }) } } - this.messageRender = function(options) { + this.apply = function (configuration) { + configurationCache = configuration; + + pearAdmin.logoRender(configuration); + pearAdmin.menuRender(configuration); + pearAdmin.bodyRender(configuration); + pearAdmin.messageCenterRender(configuration); + pearAdmin.themeRender(configuration); + pearAdmin.keepLoad(configuration); + } + + this.messageCenterRender = function(options) { messageCenter.render({ elem: '.message', url: options.header.message, @@ -113,13 +124,11 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f sideMenu = menu.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 + control: isControl(param) === 'true' || isControl(param) === true ? 'control' : false, controlWidth: param.menu.controlWidth, - defaultMenu: 0, accordion: param.menu.accordion, + defaultMenu: 0, url: param.menu.data, data: param.menu.data, parseData: false, @@ -144,10 +153,6 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f bodyTab = tabPage.render({ elem: 'content', - roll: true, - tool: true, - width: '100%', - height: '100%', session: param.tab.session, index: 0, tabMax: param.tab.max, @@ -196,7 +201,6 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f }) } else { - bodyFrame = page.render({ elem: 'content', title: '首页', @@ -386,7 +390,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f 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); + if (isMuiltTab(configurationCache) === "true" || isMuiltTab(configurationCache) === true) bodyTab.refresh(true); else bodyFrame.refresh(true); setTimeout(function () { refreshA.addClass("layui-icon-refresh-1"); @@ -645,7 +649,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f }); body.on("click", '[user-menu-id]', function () { - if (isMuiltTab(config) === "true" || isMuiltTab(config) === true) { + if (isMuiltTab(configurationCache) === "true" || isMuiltTab(configurationCache) === true) { bodyTab.addTabOnly({ id: $(this).attr("user-menu-id"), title: $(this).attr("user-menu-title"), @@ -881,28 +885,18 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f pearAdmin.changeTheme(); }); - function applyConfig(param) { - config = param; - pearAdmin.logoRender(param); - pearAdmin.menuRender(param); - pearAdmin.bodyRender(param); - pearAdmin.themeRender(param); - pearAdmin.messageRender(param); - pearAdmin.keepLoad(param); - } - function getColorById(id) { var color; var flag = false; - $.each(config.colors, function (i, value) { + $.each(configurationCache.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) { + if (flag === false || configurationCache.theme.allowCustom === false) { + $.each(configurationCache.colors, function (i, value) { + if (value.id === configurationCache.theme.defaultColor) { color = value; } }) @@ -912,7 +906,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f function buildColorHtml() { var colors = ""; - $.each(config.colors, function (i, value) { + $.each(configurationCache.colors, function (i, value) { colors += ""; }) diff --git a/component/pear/module/button.js b/component/pear/module/button.js index f590828..8283a24 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', diff --git a/component/pear/module/tabPage.js b/component/pear/module/tabPage.js index e80225a..b97bec6 100644 --- a/component/pear/module/tabPage.js +++ b/component/pear/module/tabPage.js @@ -19,16 +19,16 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { 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) { diff --git a/index.html b/index.html index 954ed4f..89009d7 100644 --- a/index.html +++ b/index.html @@ -4,15 +4,10 @@ Pear Admin 4.0 - - - - - -- Gitee From f716364168b0f2bef9bfdbb4acaaa9eeb7688459 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sun, 2 Jul 2023 16:39:13 +0800 Subject: [PATCH 53/67] update --- admin/css/admin.dark.css | 4 ++++ component/pear/css/module/tabPage.css | 3 ++- component/pear/module/admin.js | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index e6ec042..0818241 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -106,6 +106,10 @@ 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, diff --git a/component/pear/css/module/tabPage.css b/component/pear/css/module/tabPage.css index e40f374..589aea6 100644 --- a/component/pear/css/module/tabPage.css +++ b/component/pear/css/module/tabPage.css @@ -17,6 +17,7 @@ box-shadow: none; border-radius: 4px!important; overflow: hidden; + box-shadow: 2px 0 6px rgba(0, 21, 41, .10); } .pear-tab-page-menu .item{ @@ -30,7 +31,7 @@ cursor:pointer; } .pear-tab-page-menu .item:hover{ - background: #36b368; + background: var(--global-primary-color); color: white; } diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index 417b7c8..0d50b02 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -191,9 +191,9 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f bodyTab.addTabOnly({ id: data.menuId, title: data.menuTitle, + type: data.menuOpenType, url: data.menuUrl, icon: data.menuIcon, - type: data.menuOpenType, close: true }, 300); } -- Gitee From c884de59853a18c6d050e634cacd284ef7a9a97f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sun, 2 Jul 2023 22:16:36 +0800 Subject: [PATCH 54/67] update --- admin/data/menu.json | 206 ++++++++++++---------- component/pear/module/admin.js | 1 - view/console/{console.html => index.html} | 0 3 files changed, 112 insertions(+), 95 deletions(-) rename view/console/{console.html => index.html} (100%) diff --git a/admin/data/menu.json b/admin/data/menu.json index 8bd2242..a1576ce 100644 --- a/admin/data/menu.json +++ b/admin/data/menu.json @@ -1,4 +1,5 @@ -[{ +[ + { "id": 1, "title": "工作空间", "icon": "layui-icon layui-icon-console", @@ -13,13 +14,14 @@ "href": "view/analysis/index.html" }, { - "id": "11", - "title": "工作台", - "icon": "layui-icon layui-icon-console", - "type": 1, - "openType": "_component", - "href": "view/console/console.html" - }] + "id": "11", + "title": "工作台", + "icon": "layui-icon layui-icon-console", + "type": 1, + "openType": "_component", + "href": "view/console/index.html" + } + ] }, { "id": 2, @@ -51,7 +53,8 @@ "icon": "layui-icon layui-icon-auz", "type": 0, "href": "", - "children": [{ + "children": [ + { "id": "success", "title": "成功页面", "icon": "layui-icon layui-icon-face-smile", @@ -75,7 +78,8 @@ "icon": "layui-icon layui-icon-auz", "type": 0, "href": "", - "children": [{ + "children": [ + { "id": "403", "title": "403", "icon": "layui-icon layui-icon-face-smile", @@ -106,7 +110,8 @@ "title": "菜单模式", "icon": "layui-icon layui-icon-auz", "type": 0, - "children": [{ + "children": [ + { "id": "a", "title": "普通路由", "icon": "layui-icon layui-icon-face-smile", @@ -146,61 +151,68 @@ "icon": "layui-icon layui-icon-auz", "type": 0, "href": "", - "children": [{ + "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" - }, + "children": [ { - "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": "四级菜单", + "id": "deep1-1-1", + "title": "三级菜单", "icon": "layui-icon layui-icon-face-smile", - "type": 1, + "type": 0, "openType": "_component", - "href": "view/result/success.html" + "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-2", - "title": "四级菜单", + "id": "deep1-1-2", + "title": "三级菜单", "icon": "layui-icon layui-icon-face-cry", - "type": 1, + "type": 0, "openType": "_blank", - "href": "http://www.layui-vue.com" - }] - }] + "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", @@ -209,54 +221,60 @@ "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" - }, + "children": [ { - "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": "四级菜单", + "id": "deep1-2-1", + "title": "三级菜单", "icon": "layui-icon layui-icon-face-smile", - "type": 1, + "type": 0, "openType": "_component", - "href": "view/result/success.html" + "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-2", - "title": "四级菜单", + "id": "deep1-2-2", + "title": "三级菜单", "icon": "layui-icon layui-icon-face-cry", - "type": 1, + "type": 0, "openType": "_blank", - "href": "http://www.layui-vue.com" - }] - }] + "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" + } + ] + } + ] } ] } diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index 0d50b02..4a309cf 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -446,7 +446,6 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f }); body.on("click", ".menuSearch", function () { - // 过滤菜单 var filterHandle = function (filterData, val) { if (!val) return []; var filteredMenus = []; diff --git a/view/console/console.html b/view/console/index.html similarity index 100% rename from view/console/console.html rename to view/console/index.html -- Gitee From 8e41aead055354e4081e654ccf3fe9f49a6349ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Mon, 3 Jul 2023 10:52:53 +0800 Subject: [PATCH 55/67] =?UTF-8?q?=E6=8A=BD=E7=A6=BB=20menuSearch=20?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- component/pear/module/admin.js | 295 +++++++--------------------- component/pear/module/menu.js | 43 ++-- component/pear/module/menuSearch.js | 226 +++++++++++++++++++++ component/pear/module/page.js | 12 +- component/pear/module/tools.js | 28 +++ component/pear/pear.js | 1 + 6 files changed, 356 insertions(+), 249 deletions(-) create mode 100644 component/pear/module/menuSearch.js create mode 100644 component/pear/module/tools.js diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index 4a309cf..1993c7e 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -1,4 +1,4 @@ -layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'fullscreen', 'messageCenter'], +layui.define(['jquery', 'tools', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'fullscreen', 'messageCenter', 'menuSearch'], function (exports) { "use strict"; @@ -8,17 +8,19 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f 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'); @@ -28,7 +30,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f this.configuration = {}; this.configurationPath = "pear.config.yml"; - + /** * @since Pear Admin 4.0 * @@ -36,12 +38,12 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f */ this.configurationProvider = () => { return new Promise((resolve) => { - if(this.configurationPath.indexOf("json") > -1) { + if (this.configurationPath.indexOf("json") > -1) { $.ajax({ - type: 'get', + type: 'get', url: this.configurationPath, - dataType: 'json', - async: false, + dataType: 'json', + async: false, success: (result) => { resolve(result); } @@ -79,7 +81,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f return this.configuration; } - /** + /** * @since Pear Admin 4.0 * * Core Function. @@ -96,18 +98,64 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f } } + /** + * @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); } - this.messageCenterRender = function(options) { + /** + * @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, @@ -195,12 +243,13 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f url: data.menuUrl, icon: data.menuIcon, close: true - }, 300); + }); } compatible(); }) } else { + bodyFrame = page.render({ elem: 'content', title: '首页', @@ -211,7 +260,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f if (data.menuOpenType === "_layer") { layer.open({ type: 2, title: data.menuTitle, content: data.menuUrl, area: ['80%', '80%'], maxmin: true }) } else { - bodyFrame.changePage(data.menuUrl, data.menuOpenType); + bodyFrame.changePage({ href: data.menuUrl, type: data.menuOpenType }); } compatible() }) @@ -225,8 +274,10 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f }, param.other.keepLoad) } - this.changeTheme = function() { - document.documentElement.style.setProperty("--global-primary-color", localStorage.getItem("theme-color-color")); + 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) { @@ -304,10 +355,10 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f } var dark = localStorage.getItem("dark"); - if(dark === null) { + if (dark === null) { dark = option.theme.dark; } else { - if(option.theme.allowCustom === false) { + if (option.theme.allowCustom === false) { dark = option.theme.dark; } } @@ -350,7 +401,7 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f this.enableDark = function (checked) { var $pearAdmin = $(".pear-admin"); $pearAdmin.removeClass("pear-admin-dark"); - if(checked === true || checked === "true") { + if (checked === true || checked === "true") { $pearAdmin.addClass("pear-admin-dark"); } } @@ -445,196 +496,6 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f 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 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"); - }) - - // 监听键盘事件 - $(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 () { @@ -949,23 +810,11 @@ layui.define(['jquery', 'element', 'yaml', 'form', 'tabPage', 'menu', 'page', 'f } } - $(window).on('resize', debounce(function () { + $(window).on('resize', tools.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); }) diff --git a/component/pear/module/menu.js b/component/pear/module/menu.js index f4622b0..d10a10b 100644 --- a/component/pear/module/menu.js +++ b/component/pear/module/menu.js @@ -31,7 +31,8 @@ layui.define(['table', 'jquery', 'element'], function (exports) { } var tempDone = option.done; - option.done = function(){ + + option.done = function () { if (option.control) { rationalizeHeaderControlWidthAuto(option); } @@ -51,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 () { @@ -84,7 +83,11 @@ layui.define(['table', 'jquery', 'element'], function (exports) { }); }, 1000) - return new menu(option); + return new menu(option); + } + + menu.prototype.cache = function () { + return this.option.data; } menu.prototype.click = function (clickEvent) { @@ -225,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"); @@ -240,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); + } + }) } } @@ -306,7 +309,7 @@ layui.define(['table', 'jquery', 'element'], function (exports) { '" ' + target + '>' + item.title + ''; } else if (item.type == 1) { - content += '' + item.title + ''; @@ -376,7 +379,7 @@ layui.define(['table', 'jquery', 'element'], function (exports) { ''; } else if (note.type == 1) { // 创 建 菜 单 结 构 - content += '' + note.title + ''; @@ -559,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); }) diff --git a/component/pear/module/menuSearch.js b/component/pear/module/menuSearch.js new file mode 100644 index 0000000..063b112 --- /dev/null +++ b/component/pear/module/menuSearch.js @@ -0,0 +1,226 @@ +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/page.js b/component/pear/module/page.js index cff2c72..c1e29e4 100644 --- a/component/pear/module/page.js +++ b/component/pear/module/page.js @@ -30,18 +30,18 @@ layui.define(['jquery', 'element'], function (exports) { * * 切换 Page 页面 */ - page.prototype.changePage = function (href, type) { + page.prototype.changePage = function (options) { const $frame = $(`#${this.option.elem} .pear-page-content`); - if (type === "_iframe") { + if (options.type === "_iframe") { - $frame.html(``); + $frame.html(``); } else { $.ajax({ - url: href, + url: options.href, type: 'get', dataType: 'html', success: function (data) { @@ -53,8 +53,8 @@ layui.define(['jquery', 'element'], function (exports) { }); } - $frame.attr("type", type); - $frame.attr("href", href); + $frame.attr("type", options.type); + $frame.attr("href", options.href); } page.prototype.refresh = function (loading) { diff --git a/component/pear/module/tools.js b/component/pear/module/tools.js new file mode 100644 index 0000000..58e6bf1 --- /dev/null +++ b/component/pear/module/tools.js @@ -0,0 +1,28 @@ +layui.define(['jquery', 'element'], + function (exports) { + + var $ = layui.jquery; + var tools = new function () { + + /** + * @since 防抖算法 + * + * @param fn 要执行的方法 + * @param time 防抖时间参数 + */ + this.debounce = function (fn, time) { + var timer = null + return function () { + var arguments = arguments[0] + if (timer) { + clearTimeout(timer) + } + timer = setTimeout(function () { + fn(arguments) + }, time) + } + } + }; + + exports('tools', tools); + }) diff --git a/component/pear/pear.js b/component/pear/pear.js index 630f74e..16e37de 100644 --- a/component/pear/pear.js +++ b/component/pear/pear.js @@ -15,6 +15,7 @@ layui.config({ menu: "menu", fullscreen:"fullscreen", messageCenter: "messageCenter", + menuSearch: "menuSearch", button: "button", popup:"extends/popup", count:"extends/count", -- Gitee From b02b0b6f81025c48580919383cfeaf585ba89c42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Tue, 4 Jul 2023 10:21:37 +0800 Subject: [PATCH 56/67] update --- component/pear/module/admin.js | 8 +++++--- component/pear/module/menu.js | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/component/pear/module/admin.js b/component/pear/module/admin.js index 1993c7e..7c8d821 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -31,6 +31,8 @@ layui.define(['jquery', 'tools', 'element', 'yaml', 'form', 'tabPage', 'menu', ' this.configurationPath = "pear.config.yml"; + this.instances = {}; + /** * @since Pear Admin 4.0 * @@ -171,15 +173,15 @@ layui.define(['jquery', 'tools', 'element', 'yaml', 'form', 'tabPage', 'menu', ' this.menuRender = function (param) { sideMenu = menu.render({ elem: 'sideMenu', - async: param.menu.async !== undefined ? param.menu.async : true, + 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, - defaultMenu: 0, - url: param.menu.data, data: param.menu.data, + url: param.menu.data, parseData: false, + defaultMenu: 0, change: function () { compatible(); }, diff --git a/component/pear/module/menu.js b/component/pear/module/menu.js index d10a10b..c125f0f 100644 --- a/component/pear/module/menu.js +++ b/component/pear/module/menu.js @@ -13,7 +13,7 @@ layui.define(['table', 'jquery', 'element'], function (exports) { var option = { elem: opt.elem, - async: opt.async, + async: opt.async || true, parseData: opt.parseData, url: opt.url, method: opt.method ? opt.method : "GET", -- Gitee From 9c2d569fc6d93a21c884b069972a7ec0f8181085 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=A1=E5=AE=85=E7=94=B7?= <530765310@qq.com> Date: Thu, 17 Aug 2023 11:29:28 +0000 Subject: [PATCH 57/67] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=A1=B6=E9=83=A8?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=A8=A1=E5=BC=8F=20=20=E7=AC=AC3=E7=A7=8D?= =?UTF-8?q?=E9=A1=B6=E6=A0=8F=E9=A3=8E=E6=A0=BC=20=E9=A1=B6=E9=83=A8?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E7=84=A6=E7=82=B9=E7=9A=84=E6=97=B6=E5=80=99?= =?UTF-8?q?=E5=AD=97=E4=BD=93=E6=98=AF=E7=99=BD=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 御宅男 <530765310@qq.com> --- admin/css/admin.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/admin/css/admin.css b/admin/css/admin.css index 30e1045..52d6e8d 100644 --- a/admin/css/admin.css +++ b/admin/css/admin.css @@ -204,6 +204,9 @@ body, .pear-admin .auto-theme .layui-nav * { color: white !important; } +.pear-admin .auto-theme .layui-nav.pear-nav-control .layui-this * { + color: black !important; +} /** 收缩布局 */ .pear-mini .layui-side .layui-logo .title { -- Gitee From 2eede4dc1ca314e0d7865ff34d76d6c77164d5e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=A1=E5=AE=85=E7=94=B7?= <530765310@qq.com> Date: Thu, 17 Aug 2023 14:35:21 +0000 Subject: [PATCH 58/67] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E7=A7=8D=E9=A1=B6?= =?UTF-8?q?=E6=A0=8F=E9=A3=8E=E6=A0=BC=20=E4=B8=AA=E4=BA=BA=E8=B5=84?= =?UTF-8?q?=E6=96=99=E5=AD=97=E4=BD=93=E4=B8=BA=E7=99=BD=E8=89=B2=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 御宅男 <530765310@qq.com> --- admin/css/admin.css | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/admin/css/admin.css b/admin/css/admin.css index 52d6e8d..bcccbd7 100644 --- a/admin/css/admin.css +++ b/admin/css/admin.css @@ -207,7 +207,10 @@ body, .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; -- Gitee From ff34cc34c510c353fd2e62f95648bfe2f9de2a36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=A1=E5=AE=85=E7=94=B7?= <530765310@qq.com> Date: Fri, 18 Aug 2023 01:27:28 +0000 Subject: [PATCH 59/67] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E5=90=8Etab=E7=82=B9=E5=87=BB=E5=85=B3=E9=97=AD=E5=A4=B1?= =?UTF-8?q?=E6=95=88=E7=9A=84BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 御宅男 <530765310@qq.com> --- component/pear/module/tabPage.js | 1 + 1 file changed, 1 insertion(+) diff --git a/component/pear/module/tabPage.js b/component/pear/module/tabPage.js index b97bec6..c6b6c5f 100644 --- a/component/pear/module/tabPage.js +++ b/component/pear/module/tabPage.js @@ -483,6 +483,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { ${item.title} + `; title += titleItem; -- Gitee From c29855a573607a440093b853800065b51a81bbaf Mon Sep 17 00:00:00 2001 From: ken678 <530765310@qq.com> Date: Wed, 6 Sep 2023 19:20:02 +0800 Subject: [PATCH 60/67] =?UTF-8?q?=E6=90=9C=E7=B4=A2=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E9=9D=A2=E6=9D=BF=E5=A2=9E=E5=8A=A0=E5=BF=AB=E6=8D=B7=E9=94=AE?= =?UTF-8?q?=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/css/admin.css | 33 +++++++++++++++++++++++++++++ component/pear/module/menuSearch.js | 6 ++++++ 2 files changed, 39 insertions(+) diff --git a/admin/css/admin.css b/admin/css/admin.css index bcccbd7..41dd613 100644 --- a/admin/css/admin.css +++ b/admin/css/admin.css @@ -580,7 +580,40 @@ body, 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; + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; + border-radius: 5px; +} /** 首屏加载 */ .loader-wrapper { position: fixed; diff --git a/component/pear/module/menuSearch.js b/component/pear/module/menuSearch.js index 063b112..aba6727 100644 --- a/component/pear/module/menuSearch.js +++ b/component/pear/module/menuSearch.js @@ -42,6 +42,12 @@ layui.define(['jquery', 'tools'], function (exports) { +
                                    ` ].join(''); -- Gitee From cb997385995f0a14e49f79482e0120bbd668ffd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Fri, 8 Sep 2023 00:13:38 +0800 Subject: [PATCH 61/67] update --- admin/css/admin.css | 2 +- component/pear/module/page.js | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/admin/css/admin.css b/admin/css/admin.css index 41dd613..8f5db54 100644 --- a/admin/css/admin.css +++ b/admin/css/admin.css @@ -610,7 +610,7 @@ body, border: 1px solid #e5e7eb; font-size: 10px; text-align: center; - padding: 2px; + padding: 2px 6px; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; border-radius: 5px; } diff --git a/component/pear/module/page.js b/component/pear/module/page.js index c1e29e4..de90eac 100644 --- a/component/pear/module/page.js +++ b/component/pear/module/page.js @@ -31,15 +31,14 @@ layui.define(['jquery', 'element'], function (exports) { * 切换 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', @@ -52,7 +51,6 @@ layui.define(['jquery', 'element'], function (exports) { } }); } - $frame.attr("type", options.type); $frame.attr("href", options.href); } -- Gitee From 8aa9271786ca0345b24129d64379b38c91495387 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Fri, 8 Sep 2023 00:14:59 +0800 Subject: [PATCH 62/67] add menuSearch.css --- admin/css/admin.css | 85 ------------------------ component/pear/css/module/menuSearch.css | 85 ++++++++++++++++++++++++ component/pear/css/pear.css | 1 + 3 files changed, 86 insertions(+), 85 deletions(-) create mode 100644 component/pear/css/module/menuSearch.css diff --git a/admin/css/admin.css b/admin/css/admin.css index 8f5db54..6d3948a 100644 --- a/admin/css/admin.css +++ b/admin/css/admin.css @@ -529,91 +529,6 @@ body, border-right: 1px solid #eee; } -/* 搜索面板 */ -.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; -} /** 首屏加载 */ .loader-wrapper { position: fixed; diff --git a/component/pear/css/module/menuSearch.css b/component/pear/css/module/menuSearch.css new file mode 100644 index 0000000..cd66d5c --- /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/pear.css b/component/pear/css/pear.css index f073338..62b55bf 100644 --- a/component/pear/css/pear.css +++ b/component/pear/css/pear.css @@ -4,6 +4,7 @@ @import url("module/messageCenter.css"); @import url("module/global.css"); @import url("module/menu.css"); +@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 -- Gitee From 6a9ad5221fbdaaa6a773e7ffb24816db2ad77633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Fri, 8 Sep 2023 00:20:13 +0800 Subject: [PATCH 63/67] update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 524c96e..7bc0c1c 100644 --- a/README.md +++ b/README.md @@ -5,4 +5,5 @@ - [重构] tab.js 组件,重命名为 tabPage.js, 移除 iframe 嵌套。 - [新增] admin.js 模块 setConfigurationProvider 方法,用于自定义 configuration 来源。 - [优化] admin.js 模块 logout 方法,返回值由 boolean 调整为 Promise 类型。 -- [新增] 夜间模式适配,目前已完成整体框架兼容,layui 待完成。 \ No newline at end of file +- [新增] 夜间模式适配,目前已完成整体框架兼容,layui 待完成。 +- [新增] menuSearch.js 模块,原有的菜单搜索功能。 \ No newline at end of file -- Gitee From 7261fffe1c5f96b210221242962a177bc4160198 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Sun, 10 Sep 2023 22:54:45 +0800 Subject: [PATCH 64/67] update --- admin/css/admin.dark.css | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index 0818241..a4b4b92 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -16,6 +16,14 @@ 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; -- Gitee From ad2f5b22d66571485dc9c35481290b662b4296cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Mon, 11 Sep 2023 10:56:45 +0800 Subject: [PATCH 65/67] update --- admin/data/menu.json | 16 ++ admin/data/table.json | 303 +++++++++++++++++++++++++++++++++ view/listing/table.html | 360 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 679 insertions(+) create mode 100644 admin/data/table.json create mode 100644 view/listing/table.html diff --git a/admin/data/menu.json b/admin/data/menu.json index a1576ce..f164d08 100644 --- a/admin/data/menu.json +++ b/admin/data/menu.json @@ -23,6 +23,22 @@ } ] }, + { + "id": 9, + "title": "列表页面", + "icon": "layui-icon layui-icon-auz", + "type": 0, + "children": [ + { + "id": 91, + "title": "查询表格", + "icon": "layui-icon layui-icon-face-smile", + "type": 1, + "openType": "_component", + "href": "view/listing/table.html" + } + ] + }, { "id": 2, "title": "扩展组件", diff --git a/admin/data/table.json b/admin/data/table.json new file mode 100644 index 0000000..c0249f0 --- /dev/null +++ b/admin/data/table.json @@ -0,0 +1,303 @@ +{ + "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/view/listing/table.html b/view/listing/table.html new file mode 100644 index 0000000..c19fff2 --- /dev/null +++ b/view/listing/table.html @@ -0,0 +1,360 @@ + + + + + + table 组件综合演示 - Layui + + + + + + +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    +
                                    + + + + + + \ No newline at end of file -- Gitee From 81c122886b6e592e02585df8cbb3e1ac480bce30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com> Date: Mon, 11 Sep 2023 11:08:21 +0800 Subject: [PATCH 66/67] update --- admin/css/admin.dark.css | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/admin/css/admin.dark.css b/admin/css/admin.dark.css index a4b4b92..9c50764 100644 --- a/admin/css/admin.dark.css +++ b/admin/css/admin.dark.css @@ -201,6 +201,7 @@ .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; } @@ -212,6 +213,12 @@ 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; -- Gitee From fe2c29592a1a87c4b6cebd66b9e7b5533187c7cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dotnet=E7=88=B1=E5=A5=BD=E8=80=85?= Date: Tue, 12 Sep 2023 14:24:20 +0000 Subject: [PATCH 67/67] =?UTF-8?q?!125=20=E5=A2=9E=E5=8A=A0=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E5=92=8C=20url=E5=9C=B0=E5=9D=80=E8=81=94=E5=8A=A8=20?= =?UTF-8?q?=E9=87=87=E7=94=A8=20url=20hash=20=E5=9C=B0=E5=9D=80=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=20*=20Merge=20branch=20'4.x'=20of=20https://gitee.com?= =?UTF-8?q?/dotnetfans/Pear-Admin-Layui=20into=204.x=20*=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E8=8F=9C=E5=8D=95=E5=85=B3=E9=97=AD=E6=97=B6=E7=9A=84?= =?UTF-8?q?=E6=BF=80=E6=B4=BB=E9=80=BB=E8=BE=91=20*=20Merge=20branch=20'4.?= =?UTF-8?q?x'=20of=20gitee.com:pear-admin/Pear-Admin-Layui=20into=204.x=20?= =?UTF-8?q?*=20=E5=B0=86hash=E8=81=94=E5=8A=A8=E7=9A=84=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E5=88=B0admin.js=E9=87=8C=20*=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E8=8F=9C=E5=8D=95=E5=92=8Chash=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=E8=81=94=E5=8A=A8=20*=20add=20view/grid.html.=20*=20update=20c?= =?UTF-8?q?omponent/pear/module/tabPage.js.=20*=20update=20component/pear/?= =?UTF-8?q?module/admin.js.=20*=20update=20index.html.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/data/menu.json | 10 +- api/table.json | 127 +++ component/pear/module/admin.js | 1732 ++++++++++++++++-------------- component/pear/module/tabPage.js | 218 ++-- config/pear.config.json | 2 +- index.html | 10 +- view/component/table.html | 181 ++++ view/component/toast.html | 2 +- 8 files changed, 1331 insertions(+), 951 deletions(-) create mode 100644 api/table.json create mode 100644 view/component/table.html diff --git a/admin/data/menu.json b/admin/data/menu.json index f164d08..7640e7c 100644 --- a/admin/data/menu.json +++ b/admin/data/menu.json @@ -36,6 +36,14 @@ "type": 1, "openType": "_component", "href": "view/listing/table.html" + }, + { + "id":"table1", + "title": "常用列表", + "icon": "layui-icon layui-icon-face-smile", + "type": 1, + "openType": "_component", + "href": "view/component/table.html" } ] }, @@ -163,7 +171,7 @@ }, { "id": "deep", - "title": "深度测试", + "title": "菜单深度测试", "icon": "layui-icon layui-icon-auz", "type": 0, "href": "", diff --git a/api/table.json b/api/table.json new file mode 100644 index 0000000..7bda61b --- /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/pear/module/admin.js b/component/pear/module/admin.js index 7c8d821..f0e5bcf 100644 --- a/component/pear/module/admin.js +++ b/component/pear/module/admin.js @@ -1,822 +1,914 @@ 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 { - resolve(yaml.load(this.configurationPath)); - } - }) - } - - /** - * @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(); - }, 500) - } - } - }); - - bodyTab.click(function (id) { - if (!param.tab.keepState) { - bodyTab.refresh(false); - } - bodyTab.positionTab(); - sideMenu.selectItem(id); - }) - - 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(); - }); - - 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); - }) + ("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/tabPage.js b/component/pear/module/tabPage.js index c6b6c5f..c727ab5 100644 --- a/component/pear/module/tabPage.js +++ b/component/pear/module/tabPage.js @@ -55,8 +55,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-next").click(function () { rollPage("right", option); }) - element.init(); - + element.render("tab",option.elem); $("#" + option.elem).width(opt.width); $("#" + option.elem).height(opt.height); $("#" + option.elem).css({ @@ -120,7 +119,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { } }) - + //tab页关闭功能内容菜单 $("body .layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title").on("contextmenu", "li", function (e) { var top = e.clientY; @@ -180,9 +179,9 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { tabPage.prototype.click = function (callback) { var option = this.option; - var elem = this.option.elem; - element.on('tab(' + this.option.elem + ')', function (data) { - var id = $("#" + elem + " .layui-tab-title .layui-this").attr("lay-id"); + 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); }); @@ -225,8 +224,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { } // 根据过滤 filter 标识, 删除其他选项卡 tabPage.prototype.delOtherTabByElem = function (elem, callback) { - var currentId = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title .layui-this").attr( - "lay-id"); + var currentId = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title .layui-this").attr("lay-id"); var tabtitle = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title li"); $.each(tabtitle, function (i) { if ($(this).attr("lay-id") != currentId) { @@ -239,8 +237,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { // 根据过滤 filter 标识, 删除全部选项卡 tabPage.prototype.delAllTabByElem = function (elem, callback) { - var currentId = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title .layui-this").attr( - "lay-id"); + //var currentId = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title .layui-this").attr("lay-id"); var tabtitle = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title li"); $.each(tabtitle, function (i) { if ($(this).find("span").is(".able-close")) { @@ -265,100 +262,39 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { 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 ($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]").length <= - 0) { - - var that = this; - - if (opt.type === "_iframe") { - - element.tabAdd(this.option.elem, { - id: opt.id, - title: title, - content: `` - }); - - } else { + if (isData == false) { - $.ajax({ - url: opt.url, - type: 'get', - dataType: 'html', - async: false, - success: function (data) { - element.tabAdd(that.option.elem, { - id: opt.id, - title: title, - content: `
                                    ${data}
                                    `, - }); - }, - error: function (xhr, textstatus, thrown) { - return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); - } - }); + 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); + 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); - - } 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; - } - } - - var that = this; - if (opt.type === "_iframe") { - element.tabAdd(this.option.elem, { - id: opt.id, - title: title, - content: `` - }); - } else { - $.ajax({ - url: opt.url, - type: 'get', - dataType: 'html', - async: false, - success: function (data) { - element.tabAdd(that.option.elem, { - id: opt.id, - title: title, - content: `
                                    ${data}
                                    `, - }); - }, - error: function (xhr, textstatus, thrown) { - return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); - } - }); - } - 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); - } } + element.tabChange(this.option.elem, opt.id); sessionStorage.setItem(this.option.elem + "-pear-tab-page-data-current", opt.id); + + } // 刷 新 指 定 的 选 项 卡 @@ -374,10 +310,10 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { }); } - if($iframe.attr("type") === "_iframe") { + if ($iframe.attr("type") === "_iframe") { $iframe.attr("src", $iframe.attr("src")); - $iframe.on("load", function() { - $iframeLoad.fadeOut(1000, function() { + $iframe.on("load", function () { + $iframeLoad.fadeOut(1000, function () { $iframeLoad.remove(); }); }) @@ -401,6 +337,8 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { } } + + function tabDelete(elem, id, callback, option) { var tabTitle = $(".layui-tab[lay-filter='" + elem + "']").find(".layui-tab-title"); var removeTab = tabTitle.find("li[lay-id='" + id + "']"); @@ -421,16 +359,8 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { } 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-page-data")); tabDataCurrent = sessionStorage.getItem(elem + "-pear-tab-page-data-current"); @@ -448,7 +378,9 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { } /** - * @since Pear Admin 4.0 + * 创建tab组件 返回tab 组件的 html字符串(一个div) + * @param {any} option + * @returns */ function createTab(option) { @@ -478,7 +410,7 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { var index = 0; $.each(option.data, function (i, item) { - var titleItem = `
                                  • + var titleItem = `
                                  • ${item.title} @@ -493,19 +425,9 @@ layui.define(['jquery', 'element', 'dropdown'], function (exports) { content += `
                                    ` } else { - - $.ajax({ - url: item.url, - type: 'get', - dataType: 'html', - async: false, - success: function (data) { - content += `
                                    ${data}
                                    `; - }, - error: function (xhr) { - return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!'); - } - }); + $getHtml(item.url, data => + content += `
                                    ${data}
                                    ` + ); } index++; @@ -521,7 +443,57 @@ layui.define(['jquery', 'element', 'dropdown'], 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(); diff --git a/config/pear.config.json b/config/pear.config.json index b1dba56..bf51cbd 100644 --- a/config/pear.config.json +++ b/config/pear.config.json @@ -21,7 +21,7 @@ "max": "30", "index": { "id": "10", - "href": "view/console/console1.html", + "href": "view/console/index.html", "title": "首页" } }, diff --git a/index.html b/index.html index 89009d7..1d86840 100644 --- a/index.html +++ b/index.html @@ -25,8 +25,8 @@
                                    • -
                                    • -
                                    • +
                                    • +
                                    @@ -79,7 +79,7 @@
                                    - +
                                    @@ -91,7 +91,7 @@ var admin = layui.admin; var popup = layui.popup; - admin.setConfigurationPath("config/pear.config.yml"); + admin.setConfigurationPath("config/pear.config.json"); admin.render(); @@ -109,4 +109,4 @@ }) - + \ No newline at end of file diff --git a/view/component/table.html b/view/component/table.html new file mode 100644 index 0000000..f30b6b4 --- /dev/null +++ b/view/component/table.html @@ -0,0 +1,181 @@ + + + + + layui + + + + + + + +
                                    +
                                    + +
                                    + 搜索信息 +
                                    +
                                    +
                                    +
                                    + +
                                    + +
                                    +
                                    +
                                    + +
                                    + +
                                    +
                                    +
                                    + +
                                    + +
                                    +
                                    +
                                    + +
                                    + +
                                    +
                                    +
                                    + +
                                    +
                                    +
                                    +
                                    +
                                    + + + +
                                    + + + +
                                    +
                                    + + + + \ No newline at end of file diff --git a/view/component/toast.html b/view/component/toast.html index c959a70..bbbf781 100644 --- a/view/component/toast.html +++ b/view/component/toast.html @@ -38,7 +38,7 @@

                                    wS`WIK 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 z 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 z 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