├── .gitignore ├── publish ├── logo.png ├── src │ ├── icon │ │ └── logo.png │ └── main │ │ ├── icons │ │ └── material-icons │ │ │ ├── MaterialIcons-Regular.woff │ │ │ ├── MaterialIcons-Regular.woff2 │ │ │ ├── LICENSE.txt │ │ │ └── MaterialIcons-Regular.ijmap │ │ ├── css │ │ └── common.css │ │ └── js │ │ ├── main.js │ │ └── mdui.min.js ├── plugin.json ├── LICENSE ├── index.html ├── package-lock.json └── preload.js └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | release 2 | detail 3 | node_modules -------------------------------------------------------------------------------- /publish/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZiuChen/FileSaver-uTools/HEAD/publish/logo.png -------------------------------------------------------------------------------- /publish/src/icon/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZiuChen/FileSaver-uTools/HEAD/publish/src/icon/logo.png -------------------------------------------------------------------------------- /publish/src/main/icons/material-icons/MaterialIcons-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZiuChen/FileSaver-uTools/HEAD/publish/src/main/icons/material-icons/MaterialIcons-Regular.woff -------------------------------------------------------------------------------- /publish/src/main/icons/material-icons/MaterialIcons-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZiuChen/FileSaver-uTools/HEAD/publish/src/main/icons/material-icons/MaterialIcons-Regular.woff2 -------------------------------------------------------------------------------- /publish/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "pluginName": "超级粘贴", 3 | "description": "将剪切板中的内容保存为文件", 4 | "author": "Ziu", 5 | "main": "index.html", 6 | "preload": "preload.js", 7 | "logo": "logo.png", 8 | "platform": ["win32", "darwin", "linux"], 9 | "version": "1.0.5", 10 | "features": [ 11 | { 12 | "code": "监听模式", 13 | "explain": "切换监听模式开关", 14 | "cmds": ["监听模式"] 15 | }, 16 | { 17 | "code": "超级粘贴设置", 18 | "explain": "修改插件设置", 19 | "cmds": ["超级粘贴设置", "设置"] 20 | }, 21 | { 22 | "code": "收集文件", 23 | "explain": "保存到指定路径", 24 | "cmds": [ 25 | { 26 | "type": "img", 27 | "label": "收集文件" 28 | }, 29 | { 30 | "type": "over", 31 | "label": "收集文件" 32 | }, 33 | { 34 | "type": "files", 35 | "label": "收集文件", 36 | "fileType": "file", 37 | "minLength": 1 38 | } 39 | ] 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /publish/src/main/css/common.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: 'Helvetica Neue', Helvetica, Microsoft Yahei, sans-serif; 3 | } 4 | 5 | .row { 6 | display: flex; 7 | align-items: center; 8 | justify-content: flex-start; 9 | margin: 0px 15px 0px 15px; 10 | cursor: default; 11 | } 12 | 13 | .operation { 14 | margin: 0px 25px 0px 40px; 15 | justify-content: space-between; 16 | } 17 | 18 | .title > h5 { 19 | margin-top: 20px; 20 | margin-bottom: 20px; 21 | } 22 | 23 | .mdui-textfield { 24 | width: 400px; 25 | padding: unset; 26 | } 27 | 28 | button .mdui-icon { 29 | zoom: 85%; 30 | } 31 | 32 | .tab-icons { 33 | zoom: 85%; 34 | margin-right: 5px; 35 | } 36 | 37 | .content-table { 38 | width: 350px; 39 | } 40 | 41 | .logo { 42 | margin-left: 60px; 43 | zoom: 18%; 44 | } 45 | 46 | .title > img { 47 | zoom: 85%; 48 | } 49 | 50 | .title, 51 | .content { 52 | cursor: default; 53 | } 54 | 55 | .mdui-typo-title { 56 | cursor: default; 57 | } 58 | -------------------------------------------------------------------------------- /publish/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 ZiuChen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | logo 3 |

超级粘贴

4 |

Super Paste

5 |
6 | 7 | ### :sparkles: 核心功能 8 | 9 | * 将剪切板内容直接粘贴为文件,并自动保存到指定路径 10 | * 支持保存图片、文本 11 | 12 | ### :gear: 可配置项 13 | 14 | * **文件命名**:文件保存时的文件名,支持时间生成字符串。 15 | * **静默模式**:静默模式下,监听模式通知、自动保存弹窗、文件收集功能弹窗将被隐藏不显示。 16 | * **匹配拓展名规则** `(Comming Soon)`:根据复制内容匹配保存文件的拓展名,支持正则表达式。 17 | * **图片格式**:保存的图片文件将转为此格式。 18 | * `ORIGIN`: 保持原格式,支持从网页复制的动态GIF; 19 | * `其他`: 转为此格式保存,不支持动态GIF; 20 | * **文本编码方式**: 21 | * `TEXT`: 将文本转为**不同拓展名**的文件; 22 | * `HTML`: 将文本转为带样式的 `.html` 文件,未来将支持文本转图片,如代码转图片美化; 23 | * **图片保存方式** `(Experimental)`: 24 | * `BASE64`: 直接使用BASE64编码,无额外网络请求,不支持动态GIF; 25 | * `REQUEST`: 有额外网络请求,支持从网页复制的动态GIF; 26 | * **监听模式**:将剪切板内容实时转为文件并重新写入剪切板。 27 | * **监听内容**:选择监听剪切板中的哪些内容,不建议全时间监听文本内容,可能影响正常输入。 28 | * **自动保存**:在监听模式开启下,自动把复制过的内容保存到指定目录。 29 | * **自动保存目录**:自动保存目录,默认为系统下载目录。 30 | * **收集文件功能**:不操作剪切板,直接从uTools框匹配文本并收集到自动保存目录,支持匹配文本/图片/文件。 31 | * **直接粘贴功能** `(Comming Soon)`:搭配全局快捷键使用,实现 `Ctrl+V` 粘贴原剪切板内容,使用其他快捷键粘贴文件。 32 | 33 | ### :hammer: 自定义文件名生成语法 34 | 35 | 注意自定义文件名中不能含有非法字符 ` \ / : * ? " < > | `。 36 | 37 | 日期格式化语法: 38 | 39 | | 符号 | 说明 | 40 | | ------ | ------ | 41 | | YYYY | 年 (四位数) | 42 | | MM | 月份 (01-12) | 43 | | M | 月份 (1-12) | 44 | | DD | 日期 (01-31) | 45 | | D | 日期 (1-31) | 46 | | HH | 时 (00-23) | 47 | | H | 时 (0-23) | 48 | | mm | 分 (00-59) | 49 | | m | 分 (0-59) | 50 | | SS | 秒 (00-59) | 51 | | S | 秒 (0-59) | 52 | -------------------------------------------------------------------------------- /publish/src/main/js/main.js: -------------------------------------------------------------------------------- 1 | const $ = mdui.$ 2 | const selects = [ 3 | new mdui.Select('.config-pictype'), 4 | new mdui.Select('.config-picencode'), 5 | new mdui.Select('.config-textencode') 6 | ] 7 | 8 | utools.onPluginReady(() => { 9 | initConfig() 10 | addLisenter() 11 | InitListenMode() 12 | InitFeatures() 13 | }) 14 | 15 | function initConfig() { 16 | initlizeConfig() 17 | let config = readConfig() 18 | $('.config-path').val(config['config-path'].value) 19 | $('.config-filename').val(config['config-filename'].value) 20 | $('.config-filename-preview').html(new Date('2022-01-01').format(config['config-filename'].value)) 21 | $('.config-rules').val(JSON.stringify(config['config-rules'].value)) 22 | $('.config-silence')[0].checked = config['config-silence'].value 23 | $('.silence-state').html(config['config-silence'].value) 24 | $('.config-autosave')[0].checked = config['config-autosave'].value 25 | $('.autosave-state').html(config['config-autosave'].value) 26 | $('.config-listenmode')[0].checked = config['config-listenmode'].value 27 | $('.listenmode-state').html(config['config-listenmode'].value) 28 | $('.config-listenimg')[0].checked = config['config-listenimg'].value 29 | $('.config-listentext')[0].checked = config['config-listentext'].value 30 | $('.config-pictype').val(config['config-pictype'].value) 31 | $('.config-picencode').val(config['config-picencode'].value) 32 | $('.config-textencode').val(config['config-textencode'].value) 33 | $('.config-directpaste')[0].checked = config['config-directpaste'].value 34 | $('.directpaste-state').html(config['config-directpaste'].value) 35 | $('.config-collectfiles')[0].checked = config['config-collectfiles'].value 36 | $('.collectfiles-state').html(config['config-collectfiles'].value) 37 | selects.forEach((select) => { 38 | select.handleUpdate() 39 | }) 40 | } 41 | 42 | function addLisenter() { 43 | let defaultConfig = getDefaultConfig() 44 | Object.getOwnPropertyNames(defaultConfig).forEach((id) => { 45 | $(`.${id}`).on('change', (e) => { 46 | tableUpdateCallBack(e) 47 | }) 48 | }) 49 | $('.restore').on('click', (e) => { 50 | mdui.dialog({ 51 | title: '即将重置设置', 52 | content: '按下确认,设置将恢复为初始状态。', 53 | buttons: [ 54 | { 55 | text: '取消' 56 | }, 57 | { 58 | text: '确认', 59 | onClick: function (inst) { 60 | updateConfig(getDefaultConfig()) 61 | initConfig() 62 | // FIXME: if listenmode || collectfiles || directpaste is off before restore, 63 | // have to restart plugin to enable them. 64 | mdui.alert('设置已恢复初始值。') 65 | } 66 | } 67 | ] 68 | }) 69 | }) 70 | $('.source-code').on('click', (e) => { 71 | utools.shellOpenExternal('https://github.com/ZiuChen/FileSaver-uTools') 72 | }) 73 | $('.usage-document').on('click', (e) => { 74 | utools.shellOpenExternal('https://github.com/ZiuChen/FileSaver-uTools') 75 | }) 76 | $('.config-path-open-trigger').on('click', (e) => { 77 | filePathOpenCallBack(e) 78 | }) 79 | $('.config-path-change-trigger').on('click', (e) => { 80 | filePathChangeCallBack(e) 81 | }) 82 | $('.config-filename').on('input propertychange', (e) => { 83 | let rtn = checkIllegalCharacter(e.target.value) 84 | if (rtn !== -1) { 85 | $('.config-filename-preview').html(`有非法字符【${e.target.value[rtn]}】`) 86 | return 87 | } else { 88 | $('.config-filename-preview').html(new Date('2022-01-01').format(e.target.value)) 89 | } 90 | }) 91 | } 92 | 93 | function tableUpdateCallBack(event) { 94 | let config = readConfig() 95 | if (event.target.className.indexOf('config-path') !== -1) { 96 | config['config-path'].value = event.target.value 97 | } else if (event.target.className.indexOf('config-filename') !== -1) { 98 | if (checkIllegalCharacter(event.target.value) !== -1) return 99 | config['config-filename'].value = event.target.value 100 | } else if (event.target.className.indexOf('config-rules') !== -1) { 101 | config['config-rules'].value = JSON.parse(event.target.value) 102 | } else if (event.target.className.indexOf('config-pictype') !== -1) { 103 | config['config-pictype'].value = event.target.value 104 | } else if (event.target.className.indexOf('config-picencode') !== -1) { 105 | config['config-picencode'].value = event.target.value 106 | } else if (event.target.className.indexOf('config-textencode') !== -1) { 107 | config['config-textencode'].value = event.target.value 108 | } else if (event.target.className.indexOf('config-silence') !== -1) { 109 | config['config-silence'].value = event.target.checked 110 | $('.silence-state').html(event.target.checked) 111 | } else if (event.target.className.indexOf('config-autosave') !== -1) { 112 | config['config-autosave'].value = event.target.checked 113 | $('.autosave-state').html(event.target.checked) 114 | } else if (event.target.className.indexOf('config-collectfiles') !== -1) { 115 | toggleFeatures('collectfiles', event.target.checked) 116 | config['config-collectfiles'].value = event.target.checked 117 | $('.collectfiles-state').html(event.target.checked) 118 | } else if (event.target.className.indexOf('config-directpaste') !== -1) { 119 | toggleFeatures('directpaste', event.target.checked) 120 | config['config-directpaste'].value = event.target.checked 121 | $('.directpaste-state').html(event.target.checked) 122 | } else if (event.target.className.indexOf('config-listenmode') !== -1) { 123 | toggleListenModeState(event.target.checked, false, true) 124 | config['config-listenmode'].value = event.target.checked 125 | $('.listenmode-state').html(event.target.checked) 126 | } else if (event.target.className.indexOf('config-listenimg') !== -1) { 127 | config['config-listenimg'].value = event.target.checked 128 | } else if (event.target.className.indexOf('config-listentext') !== -1) { 129 | if (event.target.checked) { 130 | mdui.alert('监听剪切板文本可能影响正常输入,建议使用后及时关闭。', '警告') 131 | } 132 | config['config-listentext'].value = event.target.checked 133 | } 134 | updateConfig(config) 135 | } 136 | 137 | function filePathOpenCallBack(event) { 138 | let config = readConfig() 139 | utools.hideMainWindow() 140 | utools.shellOpenPath(config['config-path'].value) 141 | } 142 | 143 | function filePathChangeCallBack(event) { 144 | utools.hideMainWindow() 145 | let newPath = utools.showOpenDialog({ 146 | title: '设置文件保存位置', 147 | defaultPath: utools.getPath('downloads'), 148 | buttonLabel: '选择', 149 | properties: ['openDirectory', 'createDirectory', 'promptToCreate'] 150 | }) 151 | if (newPath === null) return 152 | else { 153 | $('.config-path').val(newPath[0]) 154 | $('.config-path').trigger('change') 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /publish/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | FileSaver 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 超级粘贴 13 |
14 | 15 | settings_backup_restore 16 | 17 |
18 |
19 | settings常规 22 | palette自定义 25 | radio_button_checked监听模式 30 | extension更多功能 33 | explore关于 36 |
37 |
38 |
39 |
40 |
文件命名
41 |
42 | 48 |
49 |
50 |
51 | 52 |
53 |
54 |
55 |
56 |
57 |
静默模式
58 |
59 | 65 |
66 |
67 | 71 | 72 |
73 |
74 |
75 |
76 |
77 |
匹配拓展名规则
78 |
79 | 85 |
86 |
87 |
88 | 92 |
93 |
94 |
95 |
96 |
图片格式
97 |
98 |
99 |
100 | 107 |
108 |
109 |
110 |
文本编码方式
111 |
112 | 118 |
119 |
120 | 124 |
125 |
126 |
127 |
图片保存方式
128 |
129 | 135 |
136 |
137 | 141 |
142 |
143 |
144 |
145 |
146 |
监听模式
147 |
148 | 154 |
155 |
156 | 160 | 161 |
162 |
163 |
164 |
监听内容
165 |
166 |
167 |
168 |
169 |
  • 170 | image 171 |
    监听剪切板图片
    172 | 176 |
  • 177 |
  • 178 | font_download 179 |
    监听剪切板文本
    180 | 184 |
  • 185 |
    186 |
    187 |
    188 |
    189 |
    自动保存
    190 |
    191 | 197 |
    198 |
    199 | 203 | 204 |
    205 |
    206 |
    207 |
    自动保存目录
    208 |
    209 |
    210 |
    211 |
    212 | 213 |
    214 |
    215 | 218 | 221 |
    222 |
    223 |
    224 |
    225 |
    226 |
    227 |
    收集文件功能
    228 |
    229 | 235 |
    236 |
    237 | 241 | 242 |
    243 |
    244 |
    245 |
    直接粘贴功能
    246 |
    247 | 253 |
    254 |
    255 | 259 | 260 |
    261 |
    262 |
    263 |
    264 | logo 265 |

    超级粘贴

    266 |
    Super Paste
    267 |
    268 |
    269 |
    270 | 代码: Github 271 | 文档: Document 272 |
    273 |
    274 | 使用中遇到任何问题或有任何建议,欢迎在插件评论页或 275 | Github 留言。 276 |
    277 |
    开发不易,欢迎五星好评
    278 |
    279 |
    280 | 281 | 282 | 283 | 284 | -------------------------------------------------------------------------------- /publish/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": true, 3 | "lockfileVersion": 1, 4 | "dependencies": { 5 | "ajv": { 6 | "version": "6.12.6", 7 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 8 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 9 | "requires": { 10 | "fast-deep-equal": "^3.1.1", 11 | "fast-json-stable-stringify": "^2.0.0", 12 | "json-schema-traverse": "^0.4.1", 13 | "uri-js": "^4.2.2" 14 | } 15 | }, 16 | "asn1": { 17 | "version": "0.2.6", 18 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", 19 | "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", 20 | "requires": { 21 | "safer-buffer": "~2.1.0" 22 | } 23 | }, 24 | "assert-plus": { 25 | "version": "1.0.0", 26 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 27 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 28 | }, 29 | "asynckit": { 30 | "version": "0.4.0", 31 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 32 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 33 | }, 34 | "aws-sign2": { 35 | "version": "0.7.0", 36 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 37 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 38 | }, 39 | "aws4": { 40 | "version": "1.11.0", 41 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", 42 | "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" 43 | }, 44 | "bcrypt-pbkdf": { 45 | "version": "1.0.2", 46 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 47 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 48 | "requires": { 49 | "tweetnacl": "^0.14.3" 50 | } 51 | }, 52 | "caseless": { 53 | "version": "0.12.0", 54 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 55 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 56 | }, 57 | "clipboard-event": { 58 | "version": "1.5.0", 59 | "resolved": "https://registry.npmjs.org/clipboard-event/-/clipboard-event-1.5.0.tgz", 60 | "integrity": "sha512-ouAjoa6l85h9+SpHQmpIUTAM0x9GFpGXtA9pE4hXA0LapAQFYT6jILAUuvFGEthTMF4T/B0MI/zvscWmy1OxrQ==" 61 | }, 62 | "combined-stream": { 63 | "version": "1.0.8", 64 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 65 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 66 | "requires": { 67 | "delayed-stream": "~1.0.0" 68 | } 69 | }, 70 | "core-util-is": { 71 | "version": "1.0.2", 72 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 73 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 74 | }, 75 | "dashdash": { 76 | "version": "1.14.1", 77 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 78 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 79 | "requires": { 80 | "assert-plus": "^1.0.0" 81 | } 82 | }, 83 | "delayed-stream": { 84 | "version": "1.0.0", 85 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 86 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 87 | }, 88 | "ecc-jsbn": { 89 | "version": "0.1.2", 90 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 91 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 92 | "requires": { 93 | "jsbn": "~0.1.0", 94 | "safer-buffer": "^2.1.0" 95 | } 96 | }, 97 | "extend": { 98 | "version": "3.0.2", 99 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 100 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 101 | }, 102 | "extsprintf": { 103 | "version": "1.3.0", 104 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 105 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 106 | }, 107 | "fast-deep-equal": { 108 | "version": "3.1.3", 109 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 110 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 111 | }, 112 | "fast-json-stable-stringify": { 113 | "version": "2.1.0", 114 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 115 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 116 | }, 117 | "forever-agent": { 118 | "version": "0.6.1", 119 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 120 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 121 | }, 122 | "form-data": { 123 | "version": "2.3.3", 124 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 125 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 126 | "requires": { 127 | "asynckit": "^0.4.0", 128 | "combined-stream": "^1.0.6", 129 | "mime-types": "^2.1.12" 130 | } 131 | }, 132 | "getpass": { 133 | "version": "0.1.7", 134 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 135 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 136 | "requires": { 137 | "assert-plus": "^1.0.0" 138 | } 139 | }, 140 | "har-schema": { 141 | "version": "2.0.0", 142 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 143 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 144 | }, 145 | "har-validator": { 146 | "version": "5.1.5", 147 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", 148 | "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", 149 | "requires": { 150 | "ajv": "^6.12.3", 151 | "har-schema": "^2.0.0" 152 | } 153 | }, 154 | "http-signature": { 155 | "version": "1.2.0", 156 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 157 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 158 | "requires": { 159 | "assert-plus": "^1.0.0", 160 | "jsprim": "^1.2.2", 161 | "sshpk": "^1.7.0" 162 | } 163 | }, 164 | "is-typedarray": { 165 | "version": "1.0.0", 166 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 167 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 168 | }, 169 | "isstream": { 170 | "version": "0.1.2", 171 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 172 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 173 | }, 174 | "jsbn": { 175 | "version": "0.1.1", 176 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 177 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 178 | }, 179 | "json-schema": { 180 | "version": "0.4.0", 181 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", 182 | "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" 183 | }, 184 | "json-schema-traverse": { 185 | "version": "0.4.1", 186 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 187 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 188 | }, 189 | "json-stringify-safe": { 190 | "version": "5.0.1", 191 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 192 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 193 | }, 194 | "jsprim": { 195 | "version": "1.4.2", 196 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", 197 | "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", 198 | "requires": { 199 | "assert-plus": "1.0.0", 200 | "extsprintf": "1.3.0", 201 | "json-schema": "0.4.0", 202 | "verror": "1.10.0" 203 | } 204 | }, 205 | "mime-db": { 206 | "version": "1.51.0", 207 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", 208 | "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" 209 | }, 210 | "mime-types": { 211 | "version": "2.1.34", 212 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", 213 | "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", 214 | "requires": { 215 | "mime-db": "1.51.0" 216 | } 217 | }, 218 | "oauth-sign": { 219 | "version": "0.9.0", 220 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 221 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 222 | }, 223 | "performance-now": { 224 | "version": "2.1.0", 225 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 226 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 227 | }, 228 | "psl": { 229 | "version": "1.8.0", 230 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", 231 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" 232 | }, 233 | "punycode": { 234 | "version": "2.1.1", 235 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 236 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 237 | }, 238 | "qs": { 239 | "version": "6.5.3", 240 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", 241 | "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" 242 | }, 243 | "request": { 244 | "version": "2.88.2", 245 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 246 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 247 | "requires": { 248 | "aws-sign2": "~0.7.0", 249 | "aws4": "^1.8.0", 250 | "caseless": "~0.12.0", 251 | "combined-stream": "~1.0.6", 252 | "extend": "~3.0.2", 253 | "forever-agent": "~0.6.1", 254 | "form-data": "~2.3.2", 255 | "har-validator": "~5.1.3", 256 | "http-signature": "~1.2.0", 257 | "is-typedarray": "~1.0.0", 258 | "isstream": "~0.1.2", 259 | "json-stringify-safe": "~5.0.1", 260 | "mime-types": "~2.1.19", 261 | "oauth-sign": "~0.9.0", 262 | "performance-now": "^2.1.0", 263 | "qs": "~6.5.2", 264 | "safe-buffer": "^5.1.2", 265 | "tough-cookie": "~2.5.0", 266 | "tunnel-agent": "^0.6.0", 267 | "uuid": "^3.3.2" 268 | } 269 | }, 270 | "safe-buffer": { 271 | "version": "5.2.1", 272 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 273 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 274 | }, 275 | "safer-buffer": { 276 | "version": "2.1.2", 277 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 278 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 279 | }, 280 | "sshpk": { 281 | "version": "1.17.0", 282 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", 283 | "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", 284 | "requires": { 285 | "asn1": "~0.2.3", 286 | "assert-plus": "^1.0.0", 287 | "bcrypt-pbkdf": "^1.0.0", 288 | "dashdash": "^1.12.0", 289 | "ecc-jsbn": "~0.1.1", 290 | "getpass": "^0.1.1", 291 | "jsbn": "~0.1.0", 292 | "safer-buffer": "^2.0.2", 293 | "tweetnacl": "~0.14.0" 294 | } 295 | }, 296 | "tough-cookie": { 297 | "version": "2.5.0", 298 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 299 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 300 | "requires": { 301 | "psl": "^1.1.28", 302 | "punycode": "^2.1.1" 303 | } 304 | }, 305 | "tunnel-agent": { 306 | "version": "0.6.0", 307 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 308 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 309 | "requires": { 310 | "safe-buffer": "^5.0.1" 311 | } 312 | }, 313 | "tweetnacl": { 314 | "version": "0.14.5", 315 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 316 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 317 | }, 318 | "uri-js": { 319 | "version": "4.4.1", 320 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 321 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 322 | "requires": { 323 | "punycode": "^2.1.0" 324 | } 325 | }, 326 | "uuid": { 327 | "version": "3.4.0", 328 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 329 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" 330 | }, 331 | "verror": { 332 | "version": "1.10.0", 333 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 334 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 335 | "requires": { 336 | "assert-plus": "^1.0.0", 337 | "core-util-is": "1.0.2", 338 | "extsprintf": "^1.2.0" 339 | } 340 | } 341 | } 342 | } 343 | -------------------------------------------------------------------------------- /publish/preload.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const request = require('request') 3 | const { clipboard } = require('electron') 4 | const clip = clipboard 5 | const clipboardListener = require('clipboard-event') 6 | const features = { 7 | collectfiles: { 8 | code: '收集文件', 9 | explain: '保存到指定路径', 10 | cmds: [ 11 | { 12 | type: 'img', 13 | label: '收集文件' 14 | }, 15 | { 16 | type: 'over', 17 | label: '收集文件' 18 | }, 19 | { 20 | type: 'files', 21 | label: '收集文件', 22 | fileType: 'file', 23 | minLength: 1 24 | } 25 | ] 26 | }, 27 | directpaste: { 28 | code: '直接粘贴', 29 | explain: '粘贴到当前文件夹', 30 | cmds: [ 31 | { 32 | type: 'window', 33 | label: '直接粘贴', 34 | match: { 35 | app: ['Finder.app', 'explorer.exe', 'SearchApp.exe'], 36 | class: ['CabinetWClass', 'ExploreWClass'] 37 | } 38 | } 39 | ] 40 | } 41 | } 42 | const defaultConfig = { 43 | 'config-filename': { 44 | id: 'config-filename', 45 | value: 'uTools_YYYY-MM-DD_HH-mm-SS' 46 | }, 47 | 'config-silence': { 48 | id: 'config-silence', 49 | value: false 50 | }, 51 | 'config-pictype': { 52 | id: 'config-pictype', 53 | value: 'origin' 54 | }, 55 | 'config-picencode': { 56 | id: 'config-picencode', 57 | value: 'base64' // request: send request 58 | }, 59 | 'config-textencode': { 60 | id: 'config-textencode', 61 | value: 'text' // html: with colorful style 62 | }, 63 | 'config-listenmode': { 64 | id: 'config-listenmode', 65 | value: false 66 | }, 67 | 'config-listenimg': { 68 | id: 'config-listenimg', 69 | value: true 70 | }, 71 | 'config-listentext': { 72 | id: 'config-listentext', 73 | value: false 74 | }, 75 | 'config-autosave': { 76 | id: 'config-autosave', 77 | value: false 78 | }, 79 | 'config-path': { 80 | id: 'config-path', 81 | value: utools.getPath('downloads') 82 | }, 83 | 'config-collectfiles': { 84 | id: 'config-collectfiles', 85 | value: true 86 | }, 87 | 'config-directpaste': { 88 | id: 'config-directpaste', 89 | value: false 90 | }, 91 | 'config-rules': { 92 | id: 'config-rules', 93 | value: [ 94 | { 95 | suffix: 'cs', 96 | rule: 'using .*;$' 97 | }, 98 | { 99 | suffix: 'java', 100 | rule: '^package.*;$' 101 | }, 102 | { 103 | suffix: 'cpp', 104 | rule: '^#include.*' 105 | } 106 | ] 107 | } 108 | } 109 | 110 | utools.onPluginEnter(({ code, type, payload }) => { 111 | console.log(code, type, payload) 112 | initDarkMode() 113 | if (code === '监听模式') { 114 | let config = readConfig() 115 | if (config['config-listenmode'].value === true) { 116 | toggleListenModeState(false, false, false) 117 | config['config-listenmode'].value = false 118 | } else { 119 | toggleListenModeState(true, false, false) 120 | config['config-listenmode'].value = true 121 | } 122 | updateConfig(config) 123 | utools.hideMainWindow() 124 | } else if (code === '超级粘贴设置') { 125 | // Nothing to do 126 | } else if (code === '收集文件') { 127 | let config = readConfig() 128 | // as long as not file object, not listen mode 129 | if (type === 'over') { 130 | let content = payload 131 | if (config['config-textencode'].value === 'html') { 132 | let DOMBuffer = Buffer.from(clip.readHTML(), 'utf8') // to Buffer 133 | content = DOMBuffer 134 | } 135 | let path = `${config['config-path'].value}\\${getFileName()}.${getTextSuffix(payload)}` 136 | fs.writeFile(path, content, (err) => { 137 | if (err !== null) { 138 | utools.showNotification(err) 139 | return 140 | } else { 141 | // success 142 | if (config['config-silence'].value === true) { 143 | return 144 | } else { 145 | utools.shellShowItemInFolder(path) 146 | } 147 | return path 148 | } 149 | }) 150 | } else if (type === 'img') { 151 | let base64Data = payload.replace(/^data:image\/\w+;base64,/, '') // remove the prefix 152 | let buffer = Buffer.from(base64Data, 'base64') // to Buffer 153 | let suffix = getPicType() !== 'origin' ? getPicType() : getPicSuffix(payload) 154 | let path = `${config['config-path'].value}\\${getFileName()}.${suffix}` 155 | fs.writeFile(path, buffer, (err) => { 156 | if (err !== null) { 157 | utools.showNotification(err) 158 | return 159 | } else { 160 | // success 161 | if (config['config-silence'].value === true) { 162 | return 163 | } else { 164 | utools.shellShowItemInFolder(path) 165 | } 166 | } 167 | }) 168 | } else if (type === 'files') { 169 | payload.forEach((item) => { 170 | let suffix = item.name.split('.').pop() 171 | copyFile(item.path, `${config['config-path'].value}\\${getFileName()}.${suffix}`) 172 | }) 173 | } 174 | } else if (code === '直接粘贴') { 175 | // comming soon 176 | } 177 | }) 178 | 179 | function getItem() { 180 | let config = readConfig() 181 | if (!clip.readImage().isEmpty()) { 182 | // image 183 | if (clip.readHTML() === '') { 184 | // not fit to src 185 | return { 186 | type: 'base64', 187 | origin: getPicSuffix(), 188 | content: getPicBase64() 189 | } 190 | } else { 191 | // have src 192 | if (config['config-picencode'].value === 'request') { 193 | if (getPicSrc().indexOf('base64') !== -1) { 194 | // src content is base64 195 | return { 196 | type: 'base64', 197 | origin: getPicSuffix(getPicSrc()), 198 | content: getPicSrc() 199 | } 200 | } 201 | return { 202 | type: 'imgURL', 203 | origin: 'none', 204 | content: getPicSrc() 205 | } 206 | } else { 207 | // still use base64 208 | return { 209 | type: 'base64', 210 | origin: getPicSuffix(), 211 | content: getPicBase64() 212 | } 213 | } 214 | } 215 | } else { 216 | if (clip.readText() !== '') { 217 | // text 218 | // TODO: ADD Custom Matching Rules 219 | if (config['config-textencode'].value === 'text') { 220 | return { 221 | type: 'plainText', 222 | origin: getTextSuffix(clip.readText()), 223 | content: clip.readText() 224 | } 225 | } else { 226 | return { 227 | type: 'DOMElement', 228 | origin: getTextSuffix(clip.readHTML()), 229 | content: clip.readHTML() 230 | } 231 | } 232 | } else { 233 | // files 234 | return { 235 | type: 'filePath', 236 | origin: 'none', 237 | content: clipboard 238 | .readBuffer('FileNameW') 239 | .toString('ucs2') 240 | .replace(new RegExp(String.fromCharCode(0), 'g'), '') 241 | } 242 | } 243 | } 244 | } 245 | 246 | window.InitFeatures = function () { 247 | let config = readConfig() 248 | toggleFeatures('collectfiles', config['config-collectfiles'].value) 249 | toggleFeatures('directpaste', config['config-directpaste'].value) 250 | } 251 | 252 | window.toggleFeatures = function (feature, param) { 253 | if (param) { 254 | // true 255 | utools.setFeature(features[feature]) 256 | } else { 257 | utools.removeFeature(features[feature].code) 258 | } 259 | } 260 | 261 | window.InitListenMode = function () { 262 | let config = readConfig() 263 | if (config['config-listenmode'].value === true) { 264 | toggleListenModeState(true, true) 265 | } 266 | clipboardListener.on('change', () => { 267 | clipboardListenerCallBack() 268 | }) 269 | } 270 | 271 | function clipboardListenerCallBack() { 272 | // hide plugin but dont exit 273 | let item = getItem() 274 | console.log(item) 275 | item2Object(item) 276 | } 277 | 278 | function item2Object(item) { 279 | let config = readConfig() 280 | let img = config['config-listenimg'].value 281 | let text = config['config-listentext'].value 282 | switch (item.type) { 283 | case 'base64': 284 | if (!img) return 285 | let base64Data = item.content.replace(/^data:image\/\w+;base64,/, '') // remove the prefix 286 | let ImgBuffer = Buffer.from(base64Data, 'base64') // to Buffer 287 | saveFileAsTemp(ImgBuffer, item.origin, 'copy') 288 | break 289 | case 'imgURL': 290 | if (!img) return 291 | requestFileAsTemp(item.content, item.origin) 292 | break 293 | case 'plainText': 294 | if (!text) return 295 | saveFileAsTemp(item.content, item.origin, 'copy') 296 | break 297 | case 'DOMElement': 298 | if (!text) return 299 | let DOMBuffer = Buffer.from(item.content, 'utf8') // to Buffer 300 | saveFileAsTemp(DOMBuffer, item.origin, 'copy') 301 | break 302 | case 'filePath': 303 | // nothing to do 304 | break 305 | default: 306 | break 307 | } 308 | } 309 | 310 | function requestFileAsTemp(url, suffix) { 311 | // TODO: add progress bar 312 | // TODO: processing file url 313 | let req = request 314 | .get({ url: url, rejectUnauthorized: false }) 315 | .on('response', (response) => { 316 | suffix = response.headers['content-type'] 317 | suffix = suffix.substring(suffix.lastIndexOf('/') + 1) 318 | if (getPicType() !== 'origin') { 319 | suffix = getPicType() 320 | } 321 | let path = `${utools.getPath('temp')}\\${getFileName()}.${suffix}` 322 | req.pipe(fs.createWriteStream(path)) 323 | req.on('close', (err) => { 324 | utools.copyFile(path) 325 | let config = readConfig() 326 | if (config['config-autosave'].value === true) { 327 | copyFile(path, `${config['config-path'].value}\\${getFileName()}.${suffix}`) 328 | } 329 | if (err) { 330 | utools.showNotification(err) 331 | return 332 | } 333 | return path 334 | }) 335 | }) 336 | .on('error', (err) => { 337 | utools.showNotification(err) 338 | }) 339 | } 340 | 341 | function saveFileAsTemp(content, suffix, callBack) { 342 | if (suffix === 'none' || getPicType() !== 'origin') { 343 | suffix = getPicType() 344 | } 345 | let path = `${utools.getPath('temp')}\\${getFileName()}.${suffix}` 346 | // TODO: integrate all files into one folder 347 | // TODO: onPluginEnter clear Temp folder 348 | fs.writeFile(path, content, (err) => { 349 | if (err !== null) { 350 | utools.showNotification(err) 351 | return 352 | } else { 353 | // success 354 | switch (callBack) { 355 | case 'copy': 356 | utools.copyFile(path) 357 | let config = readConfig() 358 | if (config['config-silence'].value === false) { 359 | utools.showNotification('已复制到剪切板') 360 | } 361 | break 362 | } 363 | let config = readConfig() 364 | if (config['config-autosave'].value === true) { 365 | copyFile(path, `${config['config-path'].value}\\${getFileName()}.${suffix}`) 366 | } 367 | return path 368 | } 369 | }) 370 | } 371 | 372 | function copyFile(src, target) { 373 | let config = readConfig() 374 | fs.copyFile(src, target, (err) => { 375 | if (err) { 376 | utools.showNotification(err) 377 | } 378 | if (config['config-silence'].value === true) { 379 | return 380 | } else { 381 | utools.shellShowItemInFolder(target) 382 | } 383 | }) 384 | } 385 | 386 | window.toggleListenModeState = function (param, blockNotice, fromConfig) { 387 | if (param) { 388 | // true 389 | clipboardListener.startListening() 390 | if (!blockNotice) { 391 | if (fromConfig) { 392 | utools.showNotification('监听模式已开启,请不要退出插件,或按ESC将插件隐藏到后台。') 393 | } else { 394 | utools.showNotification('监听模式已开启,插件已隐藏至后台运行。') 395 | } 396 | } 397 | } else { 398 | // false 399 | clipboardListener.stopListening() 400 | if (!blockNotice) { 401 | utools.showNotification('监听模式已关闭。') 402 | } 403 | } 404 | } 405 | 406 | function getTextSuffix(text) { 407 | let config = readConfig() 408 | if (config['config-textencode'].value === 'html') { 409 | return 'html' 410 | } else { 411 | let suffix = matchRules(text) 412 | if (suffix !== '') return suffix 413 | else return 'txt' 414 | } 415 | } 416 | 417 | function matchRules(text) { 418 | let config = readConfig() 419 | let rules = config['config-rules'].value 420 | let rtnSuffix = '' 421 | rules.forEach((item) => { 422 | if (text.search(item.rule) !== -1) { 423 | rtnSuffix = item.suffix 424 | } 425 | }) 426 | return rtnSuffix 427 | } 428 | 429 | function getPicSuffix(base64) { 430 | if (base64 !== undefined) { 431 | return base64.split('data:image/')[1].split(';base64,')[0] 432 | } else { 433 | return getPicBase64().split('data:image/')[1].split(';base64,')[0] 434 | } 435 | } 436 | 437 | function getPicBase64() { 438 | return clip.readImage().toDataURL() 439 | } 440 | 441 | function getPicSrc() { 442 | return DOMParse(clip.readHTML()).src 443 | } 444 | 445 | window.getFileName = function getFileName() { 446 | let config = readConfig() 447 | let rtnContent = new Date().format(config['config-filename'].value) 448 | return rtnContent 449 | } 450 | 451 | function getPicType() { 452 | let config = readConfig() 453 | return config['config-pictype'].value 454 | } 455 | 456 | function DOMParse(string) { 457 | let div = document.createElement('div') 458 | div.innerHTML = string 459 | return div.firstChild 460 | } 461 | 462 | function DOMParse(string) { 463 | let div = document.createElement('div') 464 | div.innerHTML = string 465 | return div.firstChild 466 | } 467 | 468 | Date.prototype.format = function (fmt) { 469 | let ret 470 | const opt = { 471 | 'Y+': this.getFullYear().toString(), 472 | 'M+': (this.getMonth() + 1).toString(), 473 | 'D+': this.getDate().toString(), 474 | 'H+': this.getHours().toString(), 475 | 'm+': this.getMinutes().toString(), 476 | 'S+': this.getSeconds().toString() 477 | } 478 | for (let k in opt) { 479 | ret = new RegExp('(' + k + ')').exec(fmt) 480 | if (ret) { 481 | fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, '0')) 482 | } 483 | } 484 | return fmt 485 | } 486 | 487 | function initDarkMode() { 488 | if (utools.isDarkColors()) { 489 | document.body.classList.add('mdui-theme-layout-dark') 490 | } else { 491 | document.body.classList.remove('mdui-theme-layout-dark') 492 | } 493 | } 494 | 495 | window.updateConfig = function updateConfig(config) { 496 | utools.dbStorage.setItem('config', JSON.stringify(config)) 497 | mdui.snackbar({ 498 | message: '设置已更新', 499 | position: 'right-bottom' 500 | }) 501 | } 502 | 503 | window.readConfig = function () { 504 | let data = utools.dbStorage.getItem('config') 505 | return JSON.parse(data) 506 | } 507 | 508 | window.getDefaultConfig = function () { 509 | return defaultConfig 510 | } 511 | 512 | window.fileNamePreview = function (originContent) { 513 | customFileNameConfigs.forEach((config) => { 514 | let times = originContent.split(config).length - 1 // more than one replacement character 515 | for (let i = 0; i < times; i++) { 516 | originContent = originContent.replace(config, replacement(config)) 517 | } 518 | }) 519 | return originContent 520 | } 521 | 522 | window.checkIllegalCharacter = function (str) { 523 | return str.search('[\\\\/:*?"<>|]') 524 | } 525 | 526 | window.initlizeConfig = function initlizeConfig() { 527 | if (readConfig() === null) { 528 | utools.dbStorage.setItem('config', JSON.stringify(defaultConfig)) 529 | return 530 | } 531 | let config = readConfig() 532 | let configs = Object.getOwnPropertyNames(config) 533 | let defaultConfigs = Object.getOwnPropertyNames(defaultConfig) 534 | let removedConfigs = configs.filter((item) => { 535 | return defaultConfigs.indexOf(item) === -1 536 | }) 537 | let newConfigs = defaultConfigs.filter((item) => { 538 | return configs.indexOf(item) === -1 539 | }) 540 | if (newConfigs.length === 0 && removedConfigs.length === 0) return 541 | removedConfigs.forEach((item) => { 542 | delete config[item] 543 | }) 544 | newConfigs.forEach((item) => { 545 | config[item] = defaultConfig[item] 546 | }) 547 | updateConfig(config) 548 | } 549 | -------------------------------------------------------------------------------- /publish/src/main/icons/material-icons/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Attribution 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More_considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution 4.0 International Public License 58 | 59 | By exercising the Licensed Rights (defined below), You accept and agree 60 | to be bound by the terms and conditions of this Creative Commons 61 | Attribution 4.0 International Public License ("Public License"). To the 62 | extent this Public License may be interpreted as a contract, You are 63 | granted the Licensed Rights in consideration of Your acceptance of 64 | these terms and conditions, and the Licensor grants You such rights in 65 | consideration of benefits the Licensor receives from making the 66 | Licensed Material available under these terms and conditions. 67 | 68 | 69 | Section 1 -- Definitions. 70 | 71 | a. Adapted Material means material subject to Copyright and Similar 72 | Rights that is derived from or based upon the Licensed Material 73 | and in which the Licensed Material is translated, altered, 74 | arranged, transformed, or otherwise modified in a manner requiring 75 | permission under the Copyright and Similar Rights held by the 76 | Licensor. For purposes of this Public License, where the Licensed 77 | Material is a musical work, performance, or sound recording, 78 | Adapted Material is always produced where the Licensed Material is 79 | synched in timed relation with a moving image. 80 | 81 | b. Adapter's License means the license You apply to Your Copyright 82 | and Similar Rights in Your contributions to Adapted Material in 83 | accordance with the terms and conditions of this Public License. 84 | 85 | c. Copyright and Similar Rights means copyright and/or similar rights 86 | closely related to copyright including, without limitation, 87 | performance, broadcast, sound recording, and Sui Generis Database 88 | Rights, without regard to how the rights are labeled or 89 | categorized. For purposes of this Public License, the rights 90 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 91 | Rights. 92 | 93 | d. Effective Technological Measures means those measures that, in the 94 | absence of proper authority, may not be circumvented under laws 95 | fulfilling obligations under Article 11 of the WIPO Copyright 96 | Treaty adopted on December 20, 1996, and/or similar international 97 | agreements. 98 | 99 | e. Exceptions and Limitations means fair use, fair dealing, and/or 100 | any other exception or limitation to Copyright and Similar Rights 101 | that applies to Your use of the Licensed Material. 102 | 103 | f. Licensed Material means the artistic or literary work, database, 104 | or other material to which the Licensor applied this Public 105 | License. 106 | 107 | g. Licensed Rights means the rights granted to You subject to the 108 | terms and conditions of this Public License, which are limited to 109 | all Copyright and Similar Rights that apply to Your use of the 110 | Licensed Material and that the Licensor has authority to license. 111 | 112 | h. Licensor means the individual(s) or entity(ies) granting rights 113 | under this Public License. 114 | 115 | i. Share means to provide material to the public by any means or 116 | process that requires permission under the Licensed Rights, such 117 | as reproduction, public display, public performance, distribution, 118 | dissemination, communication, or importation, and to make material 119 | available to the public including in ways that members of the 120 | public may access the material from a place and at a time 121 | individually chosen by them. 122 | 123 | j. Sui Generis Database Rights means rights other than copyright 124 | resulting from Directive 96/9/EC of the European Parliament and of 125 | the Council of 11 March 1996 on the legal protection of databases, 126 | as amended and/or succeeded, as well as other essentially 127 | equivalent rights anywhere in the world. 128 | 129 | k. You means the individual or entity exercising the Licensed Rights 130 | under this Public License. Your has a corresponding meaning. 131 | 132 | 133 | Section 2 -- Scope. 134 | 135 | a. License grant. 136 | 137 | 1. Subject to the terms and conditions of this Public License, 138 | the Licensor hereby grants You a worldwide, royalty-free, 139 | non-sublicensable, non-exclusive, irrevocable license to 140 | exercise the Licensed Rights in the Licensed Material to: 141 | 142 | a. reproduce and Share the Licensed Material, in whole or 143 | in part; and 144 | 145 | b. produce, reproduce, and Share Adapted Material. 146 | 147 | 2. Exceptions and Limitations. For the avoidance of doubt, where 148 | Exceptions and Limitations apply to Your use, this Public 149 | License does not apply, and You do not need to comply with 150 | its terms and conditions. 151 | 152 | 3. Term. The term of this Public License is specified in Section 153 | 6(a). 154 | 155 | 4. Media and formats; technical modifications allowed. The 156 | Licensor authorizes You to exercise the Licensed Rights in 157 | all media and formats whether now known or hereafter created, 158 | and to make technical modifications necessary to do so. The 159 | Licensor waives and/or agrees not to assert any right or 160 | authority to forbid You from making technical modifications 161 | necessary to exercise the Licensed Rights, including 162 | technical modifications necessary to circumvent Effective 163 | Technological Measures. For purposes of this Public License, 164 | simply making modifications authorized by this Section 2(a) 165 | (4) never produces Adapted Material. 166 | 167 | 5. Downstream recipients. 168 | 169 | a. Offer from the Licensor -- Licensed Material. Every 170 | recipient of the Licensed Material automatically 171 | receives an offer from the Licensor to exercise the 172 | Licensed Rights under the terms and conditions of this 173 | Public License. 174 | 175 | b. No downstream restrictions. You may not offer or impose 176 | any additional or different terms or conditions on, or 177 | apply any Effective Technological Measures to, the 178 | Licensed Material if doing so restricts exercise of the 179 | Licensed Rights by any recipient of the Licensed 180 | Material. 181 | 182 | 6. No endorsement. Nothing in this Public License constitutes or 183 | may be construed as permission to assert or imply that You 184 | are, or that Your use of the Licensed Material is, connected 185 | with, or sponsored, endorsed, or granted official status by, 186 | the Licensor or others designated to receive attribution as 187 | provided in Section 3(a)(1)(A)(i). 188 | 189 | b. Other rights. 190 | 191 | 1. Moral rights, such as the right of integrity, are not 192 | licensed under this Public License, nor are publicity, 193 | privacy, and/or other similar personality rights; however, to 194 | the extent possible, the Licensor waives and/or agrees not to 195 | assert any such rights held by the Licensor to the limited 196 | extent necessary to allow You to exercise the Licensed 197 | Rights, but not otherwise. 198 | 199 | 2. Patent and trademark rights are not licensed under this 200 | Public License. 201 | 202 | 3. To the extent possible, the Licensor waives any right to 203 | collect royalties from You for the exercise of the Licensed 204 | Rights, whether directly or through a collecting society 205 | under any voluntary or waivable statutory or compulsory 206 | licensing scheme. In all other cases the Licensor expressly 207 | reserves any right to collect such royalties. 208 | 209 | 210 | Section 3 -- License Conditions. 211 | 212 | Your exercise of the Licensed Rights is expressly made subject to the 213 | following conditions. 214 | 215 | a. Attribution. 216 | 217 | 1. If You Share the Licensed Material (including in modified 218 | form), You must: 219 | 220 | a. retain the following if it is supplied by the Licensor 221 | with the Licensed Material: 222 | 223 | i. identification of the creator(s) of the Licensed 224 | Material and any others designated to receive 225 | attribution, in any reasonable manner requested by 226 | the Licensor (including by pseudonym if 227 | designated); 228 | 229 | ii. a copyright notice; 230 | 231 | iii. a notice that refers to this Public License; 232 | 233 | iv. a notice that refers to the disclaimer of 234 | warranties; 235 | 236 | v. a URI or hyperlink to the Licensed Material to the 237 | extent reasonably practicable; 238 | 239 | b. indicate if You modified the Licensed Material and 240 | retain an indication of any previous modifications; and 241 | 242 | c. indicate the Licensed Material is licensed under this 243 | Public License, and include the text of, or the URI or 244 | hyperlink to, this Public License. 245 | 246 | 2. You may satisfy the conditions in Section 3(a)(1) in any 247 | reasonable manner based on the medium, means, and context in 248 | which You Share the Licensed Material. For example, it may be 249 | reasonable to satisfy the conditions by providing a URI or 250 | hyperlink to a resource that includes the required 251 | information. 252 | 253 | 3. If requested by the Licensor, You must remove any of the 254 | information required by Section 3(a)(1)(A) to the extent 255 | reasonably practicable. 256 | 257 | 4. If You Share Adapted Material You produce, the Adapter's 258 | License You apply must not prevent recipients of the Adapted 259 | Material from complying with this Public License. 260 | 261 | 262 | Section 4 -- Sui Generis Database Rights. 263 | 264 | Where the Licensed Rights include Sui Generis Database Rights that 265 | apply to Your use of the Licensed Material: 266 | 267 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 268 | to extract, reuse, reproduce, and Share all or a substantial 269 | portion of the contents of the database; 270 | 271 | b. if You include all or a substantial portion of the database 272 | contents in a database in which You have Sui Generis Database 273 | Rights, then the database in which You have Sui Generis Database 274 | Rights (but not its individual contents) is Adapted Material; and 275 | 276 | c. You must comply with the conditions in Section 3(a) if You Share 277 | all or a substantial portion of the contents of the database. 278 | 279 | For the avoidance of doubt, this Section 4 supplements and does not 280 | replace Your obligations under this Public License where the Licensed 281 | Rights include other Copyright and Similar Rights. 282 | 283 | 284 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 285 | 286 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 287 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 288 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 289 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 290 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 291 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 292 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 293 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 294 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 295 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 296 | 297 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 298 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 299 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 300 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 301 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 302 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 303 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 304 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 305 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 306 | 307 | c. The disclaimer of warranties and limitation of liability provided 308 | above shall be interpreted in a manner that, to the extent 309 | possible, most closely approximates an absolute disclaimer and 310 | waiver of all liability. 311 | 312 | 313 | Section 6 -- Term and Termination. 314 | 315 | a. This Public License applies for the term of the Copyright and 316 | Similar Rights licensed here. However, if You fail to comply with 317 | this Public License, then Your rights under this Public License 318 | terminate automatically. 319 | 320 | b. Where Your right to use the Licensed Material has terminated under 321 | Section 6(a), it reinstates: 322 | 323 | 1. automatically as of the date the violation is cured, provided 324 | it is cured within 30 days of Your discovery of the 325 | violation; or 326 | 327 | 2. upon express reinstatement by the Licensor. 328 | 329 | For the avoidance of doubt, this Section 6(b) does not affect any 330 | right the Licensor may have to seek remedies for Your violations 331 | of this Public License. 332 | 333 | c. For the avoidance of doubt, the Licensor may also offer the 334 | Licensed Material under separate terms or conditions or stop 335 | distributing the Licensed Material at any time; however, doing so 336 | will not terminate this Public License. 337 | 338 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 339 | License. 340 | 341 | 342 | Section 7 -- Other Terms and Conditions. 343 | 344 | a. The Licensor shall not be bound by any additional or different 345 | terms or conditions communicated by You unless expressly agreed. 346 | 347 | b. Any arrangements, understandings, or agreements regarding the 348 | Licensed Material not stated herein are separate from and 349 | independent of the terms and conditions of this Public License. 350 | 351 | 352 | Section 8 -- Interpretation. 353 | 354 | a. For the avoidance of doubt, this Public License does not, and 355 | shall not be interpreted to, reduce, limit, restrict, or impose 356 | conditions on any use of the Licensed Material that could lawfully 357 | be made without permission under this Public License. 358 | 359 | b. To the extent possible, if any provision of this Public License is 360 | deemed unenforceable, it shall be automatically reformed to the 361 | minimum extent necessary to make it enforceable. If the provision 362 | cannot be reformed, it shall be severed from this Public License 363 | without affecting the enforceability of the remaining terms and 364 | conditions. 365 | 366 | c. No term or condition of this Public License will be waived and no 367 | failure to comply consented to unless expressly agreed to by the 368 | Licensor. 369 | 370 | d. Nothing in this Public License constitutes or may be interpreted 371 | as a limitation upon, or waiver of, any privileges and immunities 372 | that apply to the Licensor or You, including from the legal 373 | processes of any jurisdiction or authority. 374 | 375 | 376 | ======================================================================= 377 | 378 | Creative Commons is not a party to its public licenses. 379 | Notwithstanding, Creative Commons may elect to apply one of its public 380 | licenses to material it publishes and in those instances will be 381 | considered the "Licensor." Except for the limited purpose of indicating 382 | that material is shared under a Creative Commons public license or as 383 | otherwise permitted by the Creative Commons policies published at 384 | creativecommons.org/policies, Creative Commons does not authorize the 385 | use of the trademark "Creative Commons" or any other trademark or logo 386 | of Creative Commons without its prior written consent including, 387 | without limitation, in connection with any unauthorized modifications 388 | to any of its public licenses or any other arrangements, 389 | understandings, or agreements concerning use of licensed material. For 390 | the avoidance of doubt, this paragraph does not form part of the public 391 | licenses. 392 | 393 | Creative Commons may be contacted at creativecommons.org. 394 | -------------------------------------------------------------------------------- /publish/src/main/icons/material-icons/MaterialIcons-Regular.ijmap: -------------------------------------------------------------------------------- 1 | {"icons":{"e84d":{"name":"3d Rotation"},"eb3b":{"name":"Ac Unit"},"e190":{"name":"Access Alarm"},"e191":{"name":"Access Alarms"},"e192":{"name":"Access Time"},"e84e":{"name":"Accessibility"},"e914":{"name":"Accessible"},"e84f":{"name":"Account Balance"},"e850":{"name":"Account Balance Wallet"},"e851":{"name":"Account Box"},"e853":{"name":"Account Circle"},"e60e":{"name":"Adb"},"e145":{"name":"Add"},"e439":{"name":"Add A Photo"},"e193":{"name":"Add Alarm"},"e003":{"name":"Add Alert"},"e146":{"name":"Add Box"},"e147":{"name":"Add Circle"},"e148":{"name":"Add Circle Outline"},"e567":{"name":"Add Location"},"e854":{"name":"Add Shopping Cart"},"e39d":{"name":"Add To Photos"},"e05c":{"name":"Add To Queue"},"e39e":{"name":"Adjust"},"e630":{"name":"Airline Seat Flat"},"e631":{"name":"Airline Seat Flat Angled"},"e632":{"name":"Airline Seat Individual Suite"},"e633":{"name":"Airline Seat Legroom Extra"},"e634":{"name":"Airline Seat Legroom Normal"},"e635":{"name":"Airline Seat Legroom Reduced"},"e636":{"name":"Airline Seat Recline Extra"},"e637":{"name":"Airline Seat Recline Normal"},"e195":{"name":"Airplanemode Active"},"e194":{"name":"Airplanemode Inactive"},"e055":{"name":"Airplay"},"eb3c":{"name":"Airport Shuttle"},"e855":{"name":"Alarm"},"e856":{"name":"Alarm Add"},"e857":{"name":"Alarm Off"},"e858":{"name":"Alarm On"},"e019":{"name":"Album"},"eb3d":{"name":"All Inclusive"},"e90b":{"name":"All Out"},"e859":{"name":"Android"},"e85a":{"name":"Announcement"},"e5c3":{"name":"Apps"},"e149":{"name":"Archive"},"e5c4":{"name":"Arrow Back"},"e5db":{"name":"Arrow Downward"},"e5c5":{"name":"Arrow Drop Down"},"e5c6":{"name":"Arrow Drop Down Circle"},"e5c7":{"name":"Arrow Drop Up"},"e5c8":{"name":"Arrow Forward"},"e5d8":{"name":"Arrow Upward"},"e060":{"name":"Art Track"},"e85b":{"name":"Aspect Ratio"},"e85c":{"name":"Assessment"},"e85d":{"name":"Assignment"},"e85e":{"name":"Assignment Ind"},"e85f":{"name":"Assignment Late"},"e860":{"name":"Assignment Return"},"e861":{"name":"Assignment Returned"},"e862":{"name":"Assignment Turned In"},"e39f":{"name":"Assistant"},"e3a0":{"name":"Assistant Photo"},"e226":{"name":"Attach File"},"e227":{"name":"Attach Money"},"e2bc":{"name":"Attachment"},"e3a1":{"name":"Audiotrack"},"e863":{"name":"Autorenew"},"e01b":{"name":"Av Timer"},"e14a":{"name":"Backspace"},"e864":{"name":"Backup"},"e19c":{"name":"Battery Alert"},"e1a3":{"name":"Battery Charging Full"},"e1a4":{"name":"Battery Full"},"e1a5":{"name":"Battery Std"},"e1a6":{"name":"Battery Unknown"},"eb3e":{"name":"Beach Access"},"e52d":{"name":"Beenhere"},"e14b":{"name":"Block"},"e1a7":{"name":"Bluetooth"},"e60f":{"name":"Bluetooth Audio"},"e1a8":{"name":"Bluetooth Connected"},"e1a9":{"name":"Bluetooth Disabled"},"e1aa":{"name":"Bluetooth Searching"},"e3a2":{"name":"Blur Circular"},"e3a3":{"name":"Blur Linear"},"e3a4":{"name":"Blur Off"},"e3a5":{"name":"Blur On"},"e865":{"name":"Book"},"e866":{"name":"Bookmark"},"e867":{"name":"Bookmark Border"},"e228":{"name":"Border All"},"e229":{"name":"Border Bottom"},"e22a":{"name":"Border Clear"},"e22b":{"name":"Border Color"},"e22c":{"name":"Border Horizontal"},"e22d":{"name":"Border Inner"},"e22e":{"name":"Border Left"},"e22f":{"name":"Border Outer"},"e230":{"name":"Border Right"},"e231":{"name":"Border Style"},"e232":{"name":"Border Top"},"e233":{"name":"Border Vertical"},"e06b":{"name":"Branding Watermark"},"e3a6":{"name":"Brightness 1"},"e3a7":{"name":"Brightness 2"},"e3a8":{"name":"Brightness 3"},"e3a9":{"name":"Brightness 4"},"e3aa":{"name":"Brightness 5"},"e3ab":{"name":"Brightness 6"},"e3ac":{"name":"Brightness 7"},"e1ab":{"name":"Brightness Auto"},"e1ac":{"name":"Brightness High"},"e1ad":{"name":"Brightness Low"},"e1ae":{"name":"Brightness Medium"},"e3ad":{"name":"Broken Image"},"e3ae":{"name":"Brush"},"e6dd":{"name":"Bubble Chart"},"e868":{"name":"Bug Report"},"e869":{"name":"Build"},"e43c":{"name":"Burst Mode"},"e0af":{"name":"Business"},"eb3f":{"name":"Business Center"},"e86a":{"name":"Cached"},"e7e9":{"name":"Cake"},"e0b0":{"name":"Call"},"e0b1":{"name":"Call End"},"e0b2":{"name":"Call Made"},"e0b3":{"name":"Call Merge"},"e0b4":{"name":"Call Missed"},"e0e4":{"name":"Call Missed Outgoing"},"e0b5":{"name":"Call Received"},"e0b6":{"name":"Call Split"},"e06c":{"name":"Call To Action"},"e3af":{"name":"Camera"},"e3b0":{"name":"Camera Alt"},"e8fc":{"name":"Camera Enhance"},"e3b1":{"name":"Camera Front"},"e3b2":{"name":"Camera Rear"},"e3b3":{"name":"Camera Roll"},"e5c9":{"name":"Cancel"},"e8f6":{"name":"Card Giftcard"},"e8f7":{"name":"Card Membership"},"e8f8":{"name":"Card Travel"},"eb40":{"name":"Casino"},"e307":{"name":"Cast"},"e308":{"name":"Cast Connected"},"e3b4":{"name":"Center Focus Strong"},"e3b5":{"name":"Center Focus Weak"},"e86b":{"name":"Change History"},"e0b7":{"name":"Chat"},"e0ca":{"name":"Chat Bubble"},"e0cb":{"name":"Chat Bubble Outline"},"e5ca":{"name":"Check"},"e834":{"name":"Check Box"},"e835":{"name":"Check Box Outline Blank"},"e86c":{"name":"Check Circle"},"e5cb":{"name":"Chevron Left"},"e5cc":{"name":"Chevron Right"},"eb41":{"name":"Child Care"},"eb42":{"name":"Child Friendly"},"e86d":{"name":"Chrome Reader Mode"},"e86e":{"name":"Class"},"e14c":{"name":"Clear"},"e0b8":{"name":"Clear All"},"e5cd":{"name":"Close"},"e01c":{"name":"Closed Caption"},"e2bd":{"name":"Cloud"},"e2be":{"name":"Cloud Circle"},"e2bf":{"name":"Cloud Done"},"e2c0":{"name":"Cloud Download"},"e2c1":{"name":"Cloud Off"},"e2c2":{"name":"Cloud Queue"},"e2c3":{"name":"Cloud Upload"},"e86f":{"name":"Code"},"e3b6":{"name":"Collections"},"e431":{"name":"Collections Bookmark"},"e3b7":{"name":"Color Lens"},"e3b8":{"name":"Colorize"},"e0b9":{"name":"Comment"},"e3b9":{"name":"Compare"},"e915":{"name":"Compare Arrows"},"e30a":{"name":"Computer"},"e638":{"name":"Confirmation Number"},"e0d0":{"name":"Contact Mail"},"e0cf":{"name":"Contact Phone"},"e0ba":{"name":"Contacts"},"e14d":{"name":"Content Copy"},"e14e":{"name":"Content Cut"},"e14f":{"name":"Content Paste"},"e3ba":{"name":"Control Point"},"e3bb":{"name":"Control Point Duplicate"},"e90c":{"name":"Copyright"},"e150":{"name":"Create"},"e2cc":{"name":"Create New Folder"},"e870":{"name":"Credit Card"},"e3be":{"name":"Crop"},"e3bc":{"name":"Crop 16 9"},"e3bd":{"name":"Crop 3 2"},"e3bf":{"name":"Crop 5 4"},"e3c0":{"name":"Crop 7 5"},"e3c1":{"name":"Crop Din"},"e3c2":{"name":"Crop Free"},"e3c3":{"name":"Crop Landscape"},"e3c4":{"name":"Crop Original"},"e3c5":{"name":"Crop Portrait"},"e437":{"name":"Crop Rotate"},"e3c6":{"name":"Crop Square"},"e871":{"name":"Dashboard"},"e1af":{"name":"Data Usage"},"e916":{"name":"Date Range"},"e3c7":{"name":"Dehaze"},"e872":{"name":"Delete"},"e92b":{"name":"Delete Forever"},"e16c":{"name":"Delete Sweep"},"e873":{"name":"Description"},"e30b":{"name":"Desktop Mac"},"e30c":{"name":"Desktop Windows"},"e3c8":{"name":"Details"},"e30d":{"name":"Developer Board"},"e1b0":{"name":"Developer Mode"},"e335":{"name":"Device Hub"},"e1b1":{"name":"Devices"},"e337":{"name":"Devices Other"},"e0bb":{"name":"Dialer Sip"},"e0bc":{"name":"Dialpad"},"e52e":{"name":"Directions"},"e52f":{"name":"Directions Bike"},"e532":{"name":"Directions Boat"},"e530":{"name":"Directions Bus"},"e531":{"name":"Directions Car"},"e534":{"name":"Directions Railway"},"e566":{"name":"Directions Run"},"e533":{"name":"Directions Subway"},"e535":{"name":"Directions Transit"},"e536":{"name":"Directions Walk"},"e610":{"name":"Disc Full"},"e875":{"name":"Dns"},"e612":{"name":"Do Not Disturb"},"e611":{"name":"Do Not Disturb Alt"},"e643":{"name":"Do Not Disturb Off"},"e644":{"name":"Do Not Disturb On"},"e30e":{"name":"Dock"},"e7ee":{"name":"Domain"},"e876":{"name":"Done"},"e877":{"name":"Done All"},"e917":{"name":"Donut Large"},"e918":{"name":"Donut Small"},"e151":{"name":"Drafts"},"e25d":{"name":"Drag Handle"},"e613":{"name":"Drive Eta"},"e1b2":{"name":"Dvr"},"e3c9":{"name":"Edit"},"e568":{"name":"Edit Location"},"e8fb":{"name":"Eject"},"e0be":{"name":"Email"},"e63f":{"name":"Enhanced Encryption"},"e01d":{"name":"Equalizer"},"e000":{"name":"Error"},"e001":{"name":"Error Outline"},"e926":{"name":"Euro Symbol"},"e56d":{"name":"Ev Station"},"e878":{"name":"Event"},"e614":{"name":"Event Available"},"e615":{"name":"Event Busy"},"e616":{"name":"Event Note"},"e903":{"name":"Event Seat"},"e879":{"name":"Exit To App"},"e5ce":{"name":"Expand Less"},"e5cf":{"name":"Expand More"},"e01e":{"name":"Explicit"},"e87a":{"name":"Explore"},"e3ca":{"name":"Exposure"},"e3cb":{"name":"Exposure Neg 1"},"e3cc":{"name":"Exposure Neg 2"},"e3cd":{"name":"Exposure Plus 1"},"e3ce":{"name":"Exposure Plus 2"},"e3cf":{"name":"Exposure Zero"},"e87b":{"name":"Extension"},"e87c":{"name":"Face"},"e01f":{"name":"Fast Forward"},"e020":{"name":"Fast Rewind"},"e87d":{"name":"Favorite"},"e87e":{"name":"Favorite Border"},"e06d":{"name":"Featured Play List"},"e06e":{"name":"Featured Video"},"e87f":{"name":"Feedback"},"e05d":{"name":"Fiber Dvr"},"e061":{"name":"Fiber Manual Record"},"e05e":{"name":"Fiber New"},"e06a":{"name":"Fiber Pin"},"e062":{"name":"Fiber Smart Record"},"e2c4":{"name":"File Download"},"e2c6":{"name":"File Upload"},"e3d3":{"name":"Filter"},"e3d0":{"name":"Filter 1"},"e3d1":{"name":"Filter 2"},"e3d2":{"name":"Filter 3"},"e3d4":{"name":"Filter 4"},"e3d5":{"name":"Filter 5"},"e3d6":{"name":"Filter 6"},"e3d7":{"name":"Filter 7"},"e3d8":{"name":"Filter 8"},"e3d9":{"name":"Filter 9"},"e3da":{"name":"Filter 9 Plus"},"e3db":{"name":"Filter B And W"},"e3dc":{"name":"Filter Center Focus"},"e3dd":{"name":"Filter Drama"},"e3de":{"name":"Filter Frames"},"e3df":{"name":"Filter Hdr"},"e152":{"name":"Filter List"},"e3e0":{"name":"Filter None"},"e3e2":{"name":"Filter Tilt Shift"},"e3e3":{"name":"Filter Vintage"},"e880":{"name":"Find In Page"},"e881":{"name":"Find Replace"},"e90d":{"name":"Fingerprint"},"e5dc":{"name":"First Page"},"eb43":{"name":"Fitness Center"},"e153":{"name":"Flag"},"e3e4":{"name":"Flare"},"e3e5":{"name":"Flash Auto"},"e3e6":{"name":"Flash Off"},"e3e7":{"name":"Flash On"},"e539":{"name":"Flight"},"e904":{"name":"Flight Land"},"e905":{"name":"Flight Takeoff"},"e3e8":{"name":"Flip"},"e882":{"name":"Flip To Back"},"e883":{"name":"Flip To Front"},"e2c7":{"name":"Folder"},"e2c8":{"name":"Folder Open"},"e2c9":{"name":"Folder Shared"},"e617":{"name":"Folder Special"},"e167":{"name":"Font Download"},"e234":{"name":"Format Align Center"},"e235":{"name":"Format Align Justify"},"e236":{"name":"Format Align Left"},"e237":{"name":"Format Align Right"},"e238":{"name":"Format Bold"},"e239":{"name":"Format Clear"},"e23a":{"name":"Format Color Fill"},"e23b":{"name":"Format Color Reset"},"e23c":{"name":"Format Color Text"},"e23d":{"name":"Format Indent Decrease"},"e23e":{"name":"Format Indent Increase"},"e23f":{"name":"Format Italic"},"e240":{"name":"Format Line Spacing"},"e241":{"name":"Format List Bulleted"},"e242":{"name":"Format List Numbered"},"e243":{"name":"Format Paint"},"e244":{"name":"Format Quote"},"e25e":{"name":"Format Shapes"},"e245":{"name":"Format Size"},"e246":{"name":"Format Strikethrough"},"e247":{"name":"Format Textdirection L To R"},"e248":{"name":"Format Textdirection R To L"},"e249":{"name":"Format Underlined"},"e0bf":{"name":"Forum"},"e154":{"name":"Forward"},"e056":{"name":"Forward 10"},"e057":{"name":"Forward 30"},"e058":{"name":"Forward 5"},"eb44":{"name":"Free Breakfast"},"e5d0":{"name":"Fullscreen"},"e5d1":{"name":"Fullscreen Exit"},"e24a":{"name":"Functions"},"e927":{"name":"G Translate"},"e30f":{"name":"Gamepad"},"e021":{"name":"Games"},"e90e":{"name":"Gavel"},"e155":{"name":"Gesture"},"e884":{"name":"Get App"},"e908":{"name":"Gif"},"eb45":{"name":"Golf Course"},"e1b3":{"name":"Gps Fixed"},"e1b4":{"name":"Gps Not Fixed"},"e1b5":{"name":"Gps Off"},"e885":{"name":"Grade"},"e3e9":{"name":"Gradient"},"e3ea":{"name":"Grain"},"e1b8":{"name":"Graphic Eq"},"e3eb":{"name":"Grid Off"},"e3ec":{"name":"Grid On"},"e7ef":{"name":"Group"},"e7f0":{"name":"Group Add"},"e886":{"name":"Group Work"},"e052":{"name":"Hd"},"e3ed":{"name":"Hdr Off"},"e3ee":{"name":"Hdr On"},"e3f1":{"name":"Hdr Strong"},"e3f2":{"name":"Hdr Weak"},"e310":{"name":"Headset"},"e311":{"name":"Headset Mic"},"e3f3":{"name":"Healing"},"e023":{"name":"Hearing"},"e887":{"name":"Help"},"e8fd":{"name":"Help Outline"},"e024":{"name":"High Quality"},"e25f":{"name":"Highlight"},"e888":{"name":"Highlight Off"},"e889":{"name":"History"},"e88a":{"name":"Home"},"eb46":{"name":"Hot Tub"},"e53a":{"name":"Hotel"},"e88b":{"name":"Hourglass Empty"},"e88c":{"name":"Hourglass Full"},"e902":{"name":"Http"},"e88d":{"name":"Https"},"e3f4":{"name":"Image"},"e3f5":{"name":"Image Aspect Ratio"},"e0e0":{"name":"Import Contacts"},"e0c3":{"name":"Import Export"},"e912":{"name":"Important Devices"},"e156":{"name":"Inbox"},"e909":{"name":"Indeterminate Check Box"},"e88e":{"name":"Info"},"e88f":{"name":"Info Outline"},"e890":{"name":"Input"},"e24b":{"name":"Insert Chart"},"e24c":{"name":"Insert Comment"},"e24d":{"name":"Insert Drive File"},"e24e":{"name":"Insert Emoticon"},"e24f":{"name":"Insert Invitation"},"e250":{"name":"Insert Link"},"e251":{"name":"Insert Photo"},"e891":{"name":"Invert Colors"},"e0c4":{"name":"Invert Colors Off"},"e3f6":{"name":"Iso"},"e312":{"name":"Keyboard"},"e313":{"name":"Keyboard Arrow Down"},"e314":{"name":"Keyboard Arrow Left"},"e315":{"name":"Keyboard Arrow Right"},"e316":{"name":"Keyboard Arrow Up"},"e317":{"name":"Keyboard Backspace"},"e318":{"name":"Keyboard Capslock"},"e31a":{"name":"Keyboard Hide"},"e31b":{"name":"Keyboard Return"},"e31c":{"name":"Keyboard Tab"},"e31d":{"name":"Keyboard Voice"},"eb47":{"name":"Kitchen"},"e892":{"name":"Label"},"e893":{"name":"Label Outline"},"e3f7":{"name":"Landscape"},"e894":{"name":"Language"},"e31e":{"name":"Laptop"},"e31f":{"name":"Laptop Chromebook"},"e320":{"name":"Laptop Mac"},"e321":{"name":"Laptop Windows"},"e5dd":{"name":"Last Page"},"e895":{"name":"Launch"},"e53b":{"name":"Layers"},"e53c":{"name":"Layers Clear"},"e3f8":{"name":"Leak Add"},"e3f9":{"name":"Leak Remove"},"e3fa":{"name":"Lens"},"e02e":{"name":"Library Add"},"e02f":{"name":"Library Books"},"e030":{"name":"Library Music"},"e90f":{"name":"Lightbulb Outline"},"e919":{"name":"Line Style"},"e91a":{"name":"Line Weight"},"e260":{"name":"Linear Scale"},"e157":{"name":"Link"},"e438":{"name":"Linked Camera"},"e896":{"name":"List"},"e0c6":{"name":"Live Help"},"e639":{"name":"Live Tv"},"e53f":{"name":"Local Activity"},"e53d":{"name":"Local Airport"},"e53e":{"name":"Local Atm"},"e540":{"name":"Local Bar"},"e541":{"name":"Local Cafe"},"e542":{"name":"Local Car Wash"},"e543":{"name":"Local Convenience Store"},"e556":{"name":"Local Dining"},"e544":{"name":"Local Drink"},"e545":{"name":"Local Florist"},"e546":{"name":"Local Gas Station"},"e547":{"name":"Local Grocery Store"},"e548":{"name":"Local Hospital"},"e549":{"name":"Local Hotel"},"e54a":{"name":"Local Laundry Service"},"e54b":{"name":"Local Library"},"e54c":{"name":"Local Mall"},"e54d":{"name":"Local Movies"},"e54e":{"name":"Local Offer"},"e54f":{"name":"Local Parking"},"e550":{"name":"Local Pharmacy"},"e551":{"name":"Local Phone"},"e552":{"name":"Local Pizza"},"e553":{"name":"Local Play"},"e554":{"name":"Local Post Office"},"e555":{"name":"Local Printshop"},"e557":{"name":"Local See"},"e558":{"name":"Local Shipping"},"e559":{"name":"Local Taxi"},"e7f1":{"name":"Location City"},"e1b6":{"name":"Location Disabled"},"e0c7":{"name":"Location Off"},"e0c8":{"name":"Location On"},"e1b7":{"name":"Location Searching"},"e897":{"name":"Lock"},"e898":{"name":"Lock Open"},"e899":{"name":"Lock Outline"},"e3fc":{"name":"Looks"},"e3fb":{"name":"Looks 3"},"e3fd":{"name":"Looks 4"},"e3fe":{"name":"Looks 5"},"e3ff":{"name":"Looks 6"},"e400":{"name":"Looks One"},"e401":{"name":"Looks Two"},"e028":{"name":"Loop"},"e402":{"name":"Loupe"},"e16d":{"name":"Low Priority"},"e89a":{"name":"Loyalty"},"e158":{"name":"Mail"},"e0e1":{"name":"Mail Outline"},"e55b":{"name":"Map"},"e159":{"name":"Markunread"},"e89b":{"name":"Markunread Mailbox"},"e322":{"name":"Memory"},"e5d2":{"name":"Menu"},"e252":{"name":"Merge Type"},"e0c9":{"name":"Message"},"e029":{"name":"Mic"},"e02a":{"name":"Mic None"},"e02b":{"name":"Mic Off"},"e618":{"name":"Mms"},"e253":{"name":"Mode Comment"},"e254":{"name":"Mode Edit"},"e263":{"name":"Monetization On"},"e25c":{"name":"Money Off"},"e403":{"name":"Monochrome Photos"},"e7f2":{"name":"Mood"},"e7f3":{"name":"Mood Bad"},"e619":{"name":"More"},"e5d3":{"name":"More Horiz"},"e5d4":{"name":"More Vert"},"e91b":{"name":"Motorcycle"},"e323":{"name":"Mouse"},"e168":{"name":"Move To Inbox"},"e02c":{"name":"Movie"},"e404":{"name":"Movie Creation"},"e43a":{"name":"Movie Filter"},"e6df":{"name":"Multiline Chart"},"e405":{"name":"Music Note"},"e063":{"name":"Music Video"},"e55c":{"name":"My Location"},"e406":{"name":"Nature"},"e407":{"name":"Nature People"},"e408":{"name":"Navigate Before"},"e409":{"name":"Navigate Next"},"e55d":{"name":"Navigation"},"e569":{"name":"Near Me"},"e1b9":{"name":"Network Cell"},"e640":{"name":"Network Check"},"e61a":{"name":"Network Locked"},"e1ba":{"name":"Network Wifi"},"e031":{"name":"New Releases"},"e16a":{"name":"Next Week"},"e1bb":{"name":"Nfc"},"e641":{"name":"No Encryption"},"e0cc":{"name":"No Sim"},"e033":{"name":"Not Interested"},"e06f":{"name":"Note"},"e89c":{"name":"Note Add"},"e7f4":{"name":"Notifications"},"e7f7":{"name":"Notifications Active"},"e7f5":{"name":"Notifications None"},"e7f6":{"name":"Notifications Off"},"e7f8":{"name":"Notifications Paused"},"e90a":{"name":"Offline Pin"},"e63a":{"name":"Ondemand Video"},"e91c":{"name":"Opacity"},"e89d":{"name":"Open In Browser"},"e89e":{"name":"Open In New"},"e89f":{"name":"Open With"},"e7f9":{"name":"Pages"},"e8a0":{"name":"Pageview"},"e40a":{"name":"Palette"},"e925":{"name":"Pan Tool"},"e40b":{"name":"Panorama"},"e40c":{"name":"Panorama Fish Eye"},"e40d":{"name":"Panorama Horizontal"},"e40e":{"name":"Panorama Vertical"},"e40f":{"name":"Panorama Wide Angle"},"e7fa":{"name":"Party Mode"},"e034":{"name":"Pause"},"e035":{"name":"Pause Circle Filled"},"e036":{"name":"Pause Circle Outline"},"e8a1":{"name":"Payment"},"e7fb":{"name":"People"},"e7fc":{"name":"People Outline"},"e8a2":{"name":"Perm Camera Mic"},"e8a3":{"name":"Perm Contact Calendar"},"e8a4":{"name":"Perm Data Setting"},"e8a5":{"name":"Perm Device Information"},"e8a6":{"name":"Perm Identity"},"e8a7":{"name":"Perm Media"},"e8a8":{"name":"Perm Phone Msg"},"e8a9":{"name":"Perm Scan Wifi"},"e7fd":{"name":"Person"},"e7fe":{"name":"Person Add"},"e7ff":{"name":"Person Outline"},"e55a":{"name":"Person Pin"},"e56a":{"name":"Person Pin Circle"},"e63b":{"name":"Personal Video"},"e91d":{"name":"Pets"},"e0cd":{"name":"Phone"},"e324":{"name":"Phone Android"},"e61b":{"name":"Phone Bluetooth Speaker"},"e61c":{"name":"Phone Forwarded"},"e61d":{"name":"Phone In Talk"},"e325":{"name":"Phone Iphone"},"e61e":{"name":"Phone Locked"},"e61f":{"name":"Phone Missed"},"e620":{"name":"Phone Paused"},"e326":{"name":"Phonelink"},"e0db":{"name":"Phonelink Erase"},"e0dc":{"name":"Phonelink Lock"},"e327":{"name":"Phonelink Off"},"e0dd":{"name":"Phonelink Ring"},"e0de":{"name":"Phonelink Setup"},"e410":{"name":"Photo"},"e411":{"name":"Photo Album"},"e412":{"name":"Photo Camera"},"e43b":{"name":"Photo Filter"},"e413":{"name":"Photo Library"},"e432":{"name":"Photo Size Select Actual"},"e433":{"name":"Photo Size Select Large"},"e434":{"name":"Photo Size Select Small"},"e415":{"name":"Picture As Pdf"},"e8aa":{"name":"Picture In Picture"},"e911":{"name":"Picture In Picture Alt"},"e6c4":{"name":"Pie Chart"},"e6c5":{"name":"Pie Chart Outlined"},"e55e":{"name":"Pin Drop"},"e55f":{"name":"Place"},"e037":{"name":"Play Arrow"},"e038":{"name":"Play Circle Filled"},"e039":{"name":"Play Circle Outline"},"e906":{"name":"Play For Work"},"e03b":{"name":"Playlist Add"},"e065":{"name":"Playlist Add Check"},"e05f":{"name":"Playlist Play"},"e800":{"name":"Plus One"},"e801":{"name":"Poll"},"e8ab":{"name":"Polymer"},"eb48":{"name":"Pool"},"e0ce":{"name":"Portable Wifi Off"},"e416":{"name":"Portrait"},"e63c":{"name":"Power"},"e336":{"name":"Power Input"},"e8ac":{"name":"Power Settings New"},"e91e":{"name":"Pregnant Woman"},"e0df":{"name":"Present To All"},"e8ad":{"name":"Print"},"e645":{"name":"Priority High"},"e80b":{"name":"Public"},"e255":{"name":"Publish"},"e8ae":{"name":"Query Builder"},"e8af":{"name":"Question Answer"},"e03c":{"name":"Queue"},"e03d":{"name":"Queue Music"},"e066":{"name":"Queue Play Next"},"e03e":{"name":"Radio"},"e837":{"name":"Radio Button Checked"},"e836":{"name":"Radio Button Unchecked"},"e560":{"name":"Rate Review"},"e8b0":{"name":"Receipt"},"e03f":{"name":"Recent Actors"},"e91f":{"name":"Record Voice Over"},"e8b1":{"name":"Redeem"},"e15a":{"name":"Redo"},"e5d5":{"name":"Refresh"},"e15b":{"name":"Remove"},"e15c":{"name":"Remove Circle"},"e15d":{"name":"Remove Circle Outline"},"e067":{"name":"Remove From Queue"},"e417":{"name":"Remove Red Eye"},"e928":{"name":"Remove Shopping Cart"},"e8fe":{"name":"Reorder"},"e040":{"name":"Repeat"},"e041":{"name":"Repeat One"},"e042":{"name":"Replay"},"e059":{"name":"Replay 10"},"e05a":{"name":"Replay 30"},"e05b":{"name":"Replay 5"},"e15e":{"name":"Reply"},"e15f":{"name":"Reply All"},"e160":{"name":"Report"},"e8b2":{"name":"Report Problem"},"e56c":{"name":"Restaurant"},"e561":{"name":"Restaurant Menu"},"e8b3":{"name":"Restore"},"e929":{"name":"Restore Page"},"e0d1":{"name":"Ring Volume"},"e8b4":{"name":"Room"},"eb49":{"name":"Room Service"},"e418":{"name":"Rotate 90 Degrees Ccw"},"e419":{"name":"Rotate Left"},"e41a":{"name":"Rotate Right"},"e920":{"name":"Rounded Corner"},"e328":{"name":"Router"},"e921":{"name":"Rowing"},"e0e5":{"name":"Rss Feed"},"e642":{"name":"Rv Hookup"},"e562":{"name":"Satellite"},"e161":{"name":"Save"},"e329":{"name":"Scanner"},"e8b5":{"name":"Schedule"},"e80c":{"name":"School"},"e1be":{"name":"Screen Lock Landscape"},"e1bf":{"name":"Screen Lock Portrait"},"e1c0":{"name":"Screen Lock Rotation"},"e1c1":{"name":"Screen Rotation"},"e0e2":{"name":"Screen Share"},"e623":{"name":"Sd Card"},"e1c2":{"name":"Sd Storage"},"e8b6":{"name":"Search"},"e32a":{"name":"Security"},"e162":{"name":"Select All"},"e163":{"name":"Send"},"e811":{"name":"Sentiment Dissatisfied"},"e812":{"name":"Sentiment Neutral"},"e813":{"name":"Sentiment Satisfied"},"e814":{"name":"Sentiment Very Dissatisfied"},"e815":{"name":"Sentiment Very Satisfied"},"e8b8":{"name":"Settings"},"e8b9":{"name":"Settings Applications"},"e8ba":{"name":"Settings Backup Restore"},"e8bb":{"name":"Settings Bluetooth"},"e8bd":{"name":"Settings Brightness"},"e8bc":{"name":"Settings Cell"},"e8be":{"name":"Settings Ethernet"},"e8bf":{"name":"Settings Input Antenna"},"e8c0":{"name":"Settings Input Component"},"e8c1":{"name":"Settings Input Composite"},"e8c2":{"name":"Settings Input Hdmi"},"e8c3":{"name":"Settings Input Svideo"},"e8c4":{"name":"Settings Overscan"},"e8c5":{"name":"Settings Phone"},"e8c6":{"name":"Settings Power"},"e8c7":{"name":"Settings Remote"},"e1c3":{"name":"Settings System Daydream"},"e8c8":{"name":"Settings Voice"},"e80d":{"name":"Share"},"e8c9":{"name":"Shop"},"e8ca":{"name":"Shop Two"},"e8cb":{"name":"Shopping Basket"},"e8cc":{"name":"Shopping Cart"},"e261":{"name":"Short Text"},"e6e1":{"name":"Show Chart"},"e043":{"name":"Shuffle"},"e1c8":{"name":"Signal Cellular 4 Bar"},"e1cd":{"name":"Signal Cellular Connected No Internet 4 Bar"},"e1ce":{"name":"Signal Cellular No Sim"},"e1cf":{"name":"Signal Cellular Null"},"e1d0":{"name":"Signal Cellular Off"},"e1d8":{"name":"Signal Wifi 4 Bar"},"e1d9":{"name":"Signal Wifi 4 Bar Lock"},"e1da":{"name":"Signal Wifi Off"},"e32b":{"name":"Sim Card"},"e624":{"name":"Sim Card Alert"},"e044":{"name":"Skip Next"},"e045":{"name":"Skip Previous"},"e41b":{"name":"Slideshow"},"e068":{"name":"Slow Motion Video"},"e32c":{"name":"Smartphone"},"eb4a":{"name":"Smoke Free"},"eb4b":{"name":"Smoking Rooms"},"e625":{"name":"Sms"},"e626":{"name":"Sms Failed"},"e046":{"name":"Snooze"},"e164":{"name":"Sort"},"e053":{"name":"Sort By Alpha"},"eb4c":{"name":"Spa"},"e256":{"name":"Space Bar"},"e32d":{"name":"Speaker"},"e32e":{"name":"Speaker Group"},"e8cd":{"name":"Speaker Notes"},"e92a":{"name":"Speaker Notes Off"},"e0d2":{"name":"Speaker Phone"},"e8ce":{"name":"Spellcheck"},"e838":{"name":"Star"},"e83a":{"name":"Star Border"},"e839":{"name":"Star Half"},"e8d0":{"name":"Stars"},"e0d3":{"name":"Stay Current Landscape"},"e0d4":{"name":"Stay Current Portrait"},"e0d5":{"name":"Stay Primary Landscape"},"e0d6":{"name":"Stay Primary Portrait"},"e047":{"name":"Stop"},"e0e3":{"name":"Stop Screen Share"},"e1db":{"name":"Storage"},"e8d1":{"name":"Store"},"e563":{"name":"Store Mall Directory"},"e41c":{"name":"Straighten"},"e56e":{"name":"Streetview"},"e257":{"name":"Strikethrough S"},"e41d":{"name":"Style"},"e5d9":{"name":"Subdirectory Arrow Left"},"e5da":{"name":"Subdirectory Arrow Right"},"e8d2":{"name":"Subject"},"e064":{"name":"Subscriptions"},"e048":{"name":"Subtitles"},"e56f":{"name":"Subway"},"e8d3":{"name":"Supervisor Account"},"e049":{"name":"Surround Sound"},"e0d7":{"name":"Swap Calls"},"e8d4":{"name":"Swap Horiz"},"e8d5":{"name":"Swap Vert"},"e8d6":{"name":"Swap Vertical Circle"},"e41e":{"name":"Switch Camera"},"e41f":{"name":"Switch Video"},"e627":{"name":"Sync"},"e628":{"name":"Sync Disabled"},"e629":{"name":"Sync Problem"},"e62a":{"name":"System Update"},"e8d7":{"name":"System Update Alt"},"e8d8":{"name":"Tab"},"e8d9":{"name":"Tab Unselected"},"e32f":{"name":"Tablet"},"e330":{"name":"Tablet Android"},"e331":{"name":"Tablet Mac"},"e420":{"name":"Tag Faces"},"e62b":{"name":"Tap And Play"},"e564":{"name":"Terrain"},"e262":{"name":"Text Fields"},"e165":{"name":"Text Format"},"e0d8":{"name":"Textsms"},"e421":{"name":"Texture"},"e8da":{"name":"Theaters"},"e8db":{"name":"Thumb Down"},"e8dc":{"name":"Thumb Up"},"e8dd":{"name":"Thumbs Up Down"},"e62c":{"name":"Time To Leave"},"e422":{"name":"Timelapse"},"e922":{"name":"Timeline"},"e425":{"name":"Timer"},"e423":{"name":"Timer 10"},"e424":{"name":"Timer 3"},"e426":{"name":"Timer Off"},"e264":{"name":"Title"},"e8de":{"name":"Toc"},"e8df":{"name":"Today"},"e8e0":{"name":"Toll"},"e427":{"name":"Tonality"},"e913":{"name":"Touch App"},"e332":{"name":"Toys"},"e8e1":{"name":"Track Changes"},"e565":{"name":"Traffic"},"e570":{"name":"Train"},"e571":{"name":"Tram"},"e572":{"name":"Transfer Within A Station"},"e428":{"name":"Transform"},"e8e2":{"name":"Translate"},"e8e3":{"name":"Trending Down"},"e8e4":{"name":"Trending Flat"},"e8e5":{"name":"Trending Up"},"e429":{"name":"Tune"},"e8e6":{"name":"Turned In"},"e8e7":{"name":"Turned In Not"},"e333":{"name":"Tv"},"e169":{"name":"Unarchive"},"e166":{"name":"Undo"},"e5d6":{"name":"Unfold Less"},"e5d7":{"name":"Unfold More"},"e923":{"name":"Update"},"e1e0":{"name":"Usb"},"e8e8":{"name":"Verified User"},"e258":{"name":"Vertical Align Bottom"},"e259":{"name":"Vertical Align Center"},"e25a":{"name":"Vertical Align Top"},"e62d":{"name":"Vibration"},"e070":{"name":"Video Call"},"e071":{"name":"Video Label"},"e04a":{"name":"Video Library"},"e04b":{"name":"Videocam"},"e04c":{"name":"Videocam Off"},"e338":{"name":"Videogame Asset"},"e8e9":{"name":"View Agenda"},"e8ea":{"name":"View Array"},"e8eb":{"name":"View Carousel"},"e8ec":{"name":"View Column"},"e42a":{"name":"View Comfy"},"e42b":{"name":"View Compact"},"e8ed":{"name":"View Day"},"e8ee":{"name":"View Headline"},"e8ef":{"name":"View List"},"e8f0":{"name":"View Module"},"e8f1":{"name":"View Quilt"},"e8f2":{"name":"View Stream"},"e8f3":{"name":"View Week"},"e435":{"name":"Vignette"},"e8f4":{"name":"Visibility"},"e8f5":{"name":"Visibility Off"},"e62e":{"name":"Voice Chat"},"e0d9":{"name":"Voicemail"},"e04d":{"name":"Volume Down"},"e04e":{"name":"Volume Mute"},"e04f":{"name":"Volume Off"},"e050":{"name":"Volume Up"},"e0da":{"name":"Vpn Key"},"e62f":{"name":"Vpn Lock"},"e1bc":{"name":"Wallpaper"},"e002":{"name":"Warning"},"e334":{"name":"Watch"},"e924":{"name":"Watch Later"},"e42c":{"name":"Wb Auto"},"e42d":{"name":"Wb Cloudy"},"e42e":{"name":"Wb Incandescent"},"e436":{"name":"Wb Iridescent"},"e430":{"name":"Wb Sunny"},"e63d":{"name":"Wc"},"e051":{"name":"Web"},"e069":{"name":"Web Asset"},"e16b":{"name":"Weekend"},"e80e":{"name":"Whatshot"},"e1bd":{"name":"Widgets"},"e63e":{"name":"Wifi"},"e1e1":{"name":"Wifi Lock"},"e1e2":{"name":"Wifi Tethering"},"e8f9":{"name":"Work"},"e25b":{"name":"Wrap Text"},"e8fa":{"name":"Youtube Searched For"},"e8ff":{"name":"Zoom In"},"e900":{"name":"Zoom Out"},"e56b":{"name":"Zoom Out Map"}}} -------------------------------------------------------------------------------- /publish/src/main/js/mdui.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * mdui 1.0.2 (https://mdui.org) 3 | * Copyright 2016-2021 zdhxiong 4 | * Licensed under MIT 5 | */ 6 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).mdui=e()}(this,function(){"use strict";function t(t,e){e=e||{bubbles:!1,cancelable:!1,detail:void 0};var n=document.createEvent("CustomEvent");return n.initCustomEvent(t,e.bubbles,e.cancelable,e.detail),n}function e(e){var n=this.constructor;return this.then(function(t){return n.resolve(e()).then(function(){return t})},function(t){return n.resolve(e()).then(function(){return n.reject(t)})})}function n(n){return new this(function(i,t){if(!n||void 0===n.length)return t(new TypeError(typeof n+" "+n+" is not iterable(cannot read property Symbol(Symbol.iterator))"));var o=Array.prototype.slice.call(n);if(0===o.length)return i([]);var s=o.length;function r(e,t){if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if("function"==typeof n)return void n.call(t,function(t){r(e,t)},function(t){o[e]={status:"rejected",reason:t},0==--s&&i(o)})}o[e]={status:"fulfilled",value:t},0==--s&&i(o)}for(var e=0;e"===n[n.length-1]){var i="div";return D({li:"ul",tr:"tbody",td:"tr",th:"tr",tbody:"table",option:"select"},function(t,e){if(0===n.indexOf("<"+t))return i=e,!1}),new R(j(n,i))}if(!("#"===t[0]&&!t.match(/[ .<>:~]/)))return new R(document.querySelectorAll(t));var e=document.getElementById(t.slice(1));return e?new R([e]):new R}return!x(t)||t instanceof Node?new R([t]):new R(t)}).fn=R.prototype,H);setTimeout(function(){return L("body").addClass("mdui-loaded")});var B={$:L};function P(t,e){return t!==e&&w(t).contains(e)}function N(n,t){return D(t,function(t,e){n.push(e)}),n}L.fn.each=function(t){return D(this,t)},L.fn.get=function(t){return void 0===t?[].slice.call(this):this[0<=t?t:t+this.length]},L.fn.find=function(n){var i=[];return this.each(function(t,e){N(i,L(e.querySelectorAll(n)).get())}),new R(i)};var z={},F=1;function q(t){var e="_mduiEventId";return t[e]||(t[e]=++F),t[e]}function W(t){var e=t.split(".");return{type:e[0],ns:e.slice(1).sort().join(" ")}}function Y(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function U(s,t,r,a){function u(t){delete e[t.id],s.removeEventListener(t.type,t.proxy,!1)}var e=z[q(s)]||[];t?t.split(" ").forEach(function(t){var e,n,i,o;t&&(e=s,n=r,i=a,o=W(t),(z[q(e)]||[]).filter(function(t){return t&&(!o.type||t.type===o.type)&&(!o.ns||Y(o.ns).test(t.ns))&&(!n||q(t.func)===q(n))&&(!i||t.selector===i)})).forEach(function(t){return u(t)})}):e.forEach(function(t){return u(t)})}function X(n,t){for(var e=[],i=arguments.length-2;0"===n[n.length-1]?i&&b(e)?L(e.cloneNode(!0)):L(e):L(j(e,"div")))[s?"insertAfter":"insertBefore"](o)})})}}),L.fn.off=function(t,n,e){var i=this;return C(t)?(D(t,function(t,e){i.off(t,n,e)}),this):(!1!==n&&!p(n)||(e=n,n=void 0),!1===e&&(e=M),this.each(function(){U(this,t,e,n)}))},L.fn.on=function(t,n,i,e,o){var s=this;if(C(t))return E(n)||(i=i||n,n=void 0),D(t,function(t,e){s.on(t,n,i,e,o)}),this;if(null==i&&null==e?(e=n,i=n=void 0):null==e&&(E(n)?(e=i,i=void 0):(e=i,i=n,n=void 0)),!1===e)e=M;else if(!e)return this;if(o){var r=this,a=e;e=function(t){return r.off(t.type,n,e),a.apply(this,arguments)}}return this.each(function(){!function(s,t,r,a,u){var c=q(s);z[c]||(z[c]=[]);var l=!1;C(a)&&a.useCapture&&(l=!0),t.split(" ").forEach(function(t){if(t){var n=W(t),e={type:n.type,ns:n.ns,func:r,selector:u,id:z[c].length,proxy:o};z[c].push(e),s.addEventListener(e.type,o,l)}function i(t,e){!1===r.apply(e,void 0===t._detail?[t]:[t].concat(t._detail))&&(t.preventDefault(),t.stopPropagation())}function o(e){e._ns&&!Y(e._ns).test(n.ns)||(e._data=a,u?L(s).find(u).get().reverse().forEach(function(t){t!==e.target&&!P(t,e.target)||i(e,t)}):i(e,s))}})}(this,t,e,i,n)})},D(K,function(t,e){L.fn[t]=function(n){return this.on(e,function(t,e){n(t,e.xhr,e.options,e.data)})}}),L.fn.map=function(n){return new R(nt(this,function(t,e){return n.call(t,e,t)}))},L.fn.clone=function(){return this.map(function(){return this.cloneNode(!0)})},L.fn.is=function(n){var i=!1;if(p(n))return this.each(function(t,e){n.call(e,t,e)&&(i=!0)}),i;if(E(n))return this.each(function(t,e){y(e)||g(e)||(e.matches||e.msMatchesSelector).call(e,n)&&(i=!0)}),i;var e=L(n);return this.each(function(t,n){e.each(function(t,e){n===e&&(i=!0)})}),i},L.fn.remove=function(n){return this.each(function(t,e){!e.parentNode||n&&!L(e).is(n)||e.parentNode.removeChild(e)})},D(["prepend","append"],function(u,t){L.fn[t]=function(){for(var a=[],t=arguments.length;t--;)a[t]=arguments[t];return this.each(function(t,e){var n,i=e.childNodes,o=i.length,s=o?i[u?o-1:0]:document.createElement("div");o||e.appendChild(s);var r=p(a[0])?[a[0].call(e,t,e.innerHTML)]:a;t&&(r=r.map(function(t){return E(t)?t:L(t).clone()})),(n=L(s))[u?"after":"before"].apply(n,r),o||e.removeChild(s)})}}),D(["appendTo","prependTo"],function(r,t){L.fn[t]=function(t){var s=[],e=L(t).map(function(t,e){var n=e.childNodes,i=n.length;if(i)return n[r?0:i-1];var o=document.createElement("div");return e.appendChild(o),s.push(o),o}),n=this[r?"insertBefore":"insertAfter"](e);return L(s).remove(),n}}),D(["attr","prop","css"],function(s,r){function a(t,e){switch(s){case 0:var n=t.getAttribute(e);return v(n)?void 0:n;case 1:return t[e];default:return S(t,e)}}L.fn[r]=function(n,i){var o=this;if(C(n))return D(n,function(t,e){o[r](t,e)}),this;if(1!==arguments.length)return this.each(function(t,e){!function(t,e,n){if(!O(n))switch(s){case 0:v(n)?t.removeAttribute(e):t.setAttribute(e,n);break;case 1:t[e]=n;break;default:e=$(e),t.style[e]=m(n)?n+(-1').appendTo(document.body).reflow().css("z-index",t));var n=e.data("_overlay_level")||0;return e.data("_overlay_level",++n).addClass("mdui-overlay-show")},L.hideOverlay=function(t){void 0===t&&(t=!1);var e=L(".mdui-overlay");if(e.length){var n=t?1:e.data("_overlay_level");1i.lastScrollY?"down":"up",n=i.options.tolerance[e]<=Math.abs(t-i.lastScrollY);t>i.lastScrollY&&t>=i.options.offset&&n?i.unpin():(t"},It.prototype.updateThCheckboxStatus=function(){var t=this.$thCheckbox[0],e=this.selectedRow,n=this.$tdRows.length;t.checked=e===n,t.indeterminate=!!e&&e!==n},It.prototype.updateTdCheckbox=function(){var o=this,s="mdui-table-row-selected";this.$tdRows.each(function(t,e){var n=L(e);if(n.find(".mdui-table-cell-checkbox").remove(),o.selectable){var i=L(o.createCheckboxHTML("td")).prependTo(n).find('input[type="checkbox"]');n.hasClass(s)&&(i[0].checked=!0,o.selectedRow++),o.updateThCheckboxStatus(),i.on("change",function(){i[0].checked?(n.addClass(s),o.selectedRow++):(n.removeClass(s),o.selectedRow--),o.updateThCheckboxStatus()}),o.$tdCheckboxs=o.$tdCheckboxs.add(i)}})},It.prototype.updateThCheckbox=function(){var t=this;this.$thRow.find(".mdui-table-cell-checkbox").remove(),this.selectable&&(this.$thCheckbox=L(this.createCheckboxHTML("th")).prependTo(this.$thRow).find('input[type="checkbox"]').on("change",function(){var n=t.$thCheckbox[0].checked;t.selectedRow=n?t.$tdRows.length:0,t.$tdCheckboxs.each(function(t,e){e.checked=n}),t.$tdRows.each(function(t,e){n?L(e).addClass("mdui-table-row-selected"):L(e).removeClass("mdui-table-row-selected")})}))},It.prototype.updateNumericCol=function(){var e=this,s="mdui-table-col-numeric";this.$thRow.find("th").each(function(i,t){var o=L(t).hasClass(s);e.$tdRows.each(function(t,e){var n=L(e).find("td").eq(i);o?n.addClass(s):n.removeClass(s)})})};var St="_mdui_table";L(function(){B.mutation(".mdui-table",function(){var t=L(this);t.data(St)||t.data(St,new It(t))})}),B.updateTables=function(t){(O(t)?L(".mdui-table"):L(t)).each(function(t,e){var n=L(e),i=n.data(St);i?i.init():n.data(St,new It(n))})};var jt="touchstart mousedown",Mt="touchmove mousemove",At="touchend mouseup",Dt="touchcancel mouseleave",Rt="touchend touchmove touchcancel",Ht=0;function Lt(t){return!(Ht&&-1<["mousedown","mouseup","mousemove","click","mouseover","mouseout","mouseenter","mouseleave"].indexOf(t.type))}function Bt(t){"touchstart"===t.type?Ht+=1:-1<["touchmove","touchend","touchcancel"].indexOf(t.type)&&setTimeout(function(){Ht&&--Ht},500)}function Pt(t,e){if(!(t instanceof MouseEvent&&2===t.button)){var n="undefined"!=typeof TouchEvent&&t instanceof TouchEvent&&t.touches.length?t.touches[0]:t,i=n.pageX,o=n.pageY,s=e.offset(),r=e.innerHeight(),a=e.innerWidth(),u=i-s.left,c=o-s.top,l=Math.max(Math.pow(Math.pow(r,2)+Math.pow(a,2),.5),48),d="translate3d("+(a/2-u)+"px,"+(r/2-c)+"px, 0) scale(1)";L('
    ').data("_ripple_wave_translate",d).prependTo(e).reflow().transform(d)}}function Nt(){var t=L(this);t.children(".mdui-ripple-wave").each(function(t,e){!function(t){if(t.length&&!t.data("_ripple_wave_removed")){t.data("_ripple_wave_removed",!0);var e=setTimeout(function(){return t.remove()},400),n=t.data("_ripple_wave_translate");t.addClass("mdui-ripple-wave-fill").transform(n.replace("scale(1)","scale(1.01)")).transitionEnd(function(){clearTimeout(e),t.addClass("mdui-ripple-wave-out").transform(n.replace("scale(1)","scale(1.01)")),e=setTimeout(function(){return t.remove()},700),setTimeout(function(){t.transitionEnd(function(){clearTimeout(e),t.remove()})},0)})}}(L(e))}),t.off(Mt+" "+At+" "+Dt,Nt)}function zt(t){if(Lt(t)&&(Bt(t),t.target!==document)){var e=L(t.target),n=e.hasClass("mdui-ripple")?e:e.parents(".mdui-ripple").first();if(n.length&&!n.prop("disabled")&&O(n.attr("disabled")))if("touchstart"===t.type){var i=!1,o=setTimeout(function(){o=0,Pt(t,n)},200),s=function(){o&&(clearTimeout(o),o=0,Pt(t,n)),i||(i=!0,Nt.call(n))};n.on("touchmove",function(){o&&(clearTimeout(o),o=0),s()}).on("touchend touchcancel",s)}else Pt(t,n),n.on(Mt+" "+At+" "+Dt,Nt)}}L(function(){gt.on(jt,zt).on(Rt,Bt)});var Ft={reInit:!1,domLoadedEvent:!1};function qt(t,e){void 0===e&&(e={}),e=X({},Ft,e);var n=t.target,i=L(n),o=t.type,s=i.val(),r=i.attr("type")||"";if(!(-1<["checkbox","button","submit","range","radio","image"].indexOf(r))){var a=i.parent(".mdui-textfield");if("focus"===o&&a.addClass("mdui-textfield-focus"),"blur"===o&&a.removeClass("mdui-textfield-focus"),"blur"!==o&&"input"!==o||(s?a.addClass("mdui-textfield-not-empty"):a.removeClass("mdui-textfield-not-empty")),n.disabled?a.addClass("mdui-textfield-disabled"):a.removeClass("mdui-textfield-disabled"),"input"!==o&&"blur"!==o||e.domLoadedEvent||!n.validity||(n.validity.valid?a.removeClass("mdui-textfield-invalid-html5"):a.addClass("mdui-textfield-invalid-html5")),i.is("textarea")){var u=s,c=!1;""===u.replace(/[\r\n]/g,"")&&(i.val(" "+u),c=!0),i.outerHeight("");var l=i.outerHeight(),d=n.scrollHeight;l / '+h+"").appendTo(a),a.find(".mdui-textfield-counter-inputed").text(s.length.toString())),(a.find(".mdui-textfield-helper").length||a.find(".mdui-textfield-error").length||h)&&a.addClass("mdui-textfield-has-bottom")}}function Wt(t){var e=t.data(),n=e._slider_$track,i=e._slider_$fill,o=e._slider_$thumb,s=e._slider_$input,r=e._slider_min,a=e._slider_max,u=e._slider_disabled,c=e._slider_discrete,l=e._slider_$thumbText,d=s.val(),h=(d-r)/(a-r)*100;i.width(h+"%"),n.width(100-h+"%"),u&&(i.css("padding-right","6px"),n.css("padding-left","6px")),o.css("left",h+"%"),c&&l.text(d),0==h?t.addClass("mdui-slider-zero"):t.removeClass("mdui-slider-zero")}function Yt(t){var e=L('
    '),n=L('
    '),i=L('
    '),o=t.find('input[type="range"]'),s=o[0].disabled,r=t.hasClass("mdui-slider-discrete");s?t.addClass("mdui-slider-disabled"):t.removeClass("mdui-slider-disabled"),t.find(".mdui-slider-track").remove(),t.find(".mdui-slider-fill").remove(),t.find(".mdui-slider-thumb").remove(),t.append(e).append(n).append(i);var a=L();r&&(a=L(""),i.empty().append(a)),t.data("_slider_$track",e),t.data("_slider_$fill",n),t.data("_slider_$thumb",i),t.data("_slider_$input",o),t.data("_slider_min",o.attr("min")),t.data("_slider_max",o.attr("max")),t.data("_slider_disabled",s),t.data("_slider_discrete",r),t.data("_slider_$thumbText",a),Wt(t)}L(function(){gt.on("input focus blur",".mdui-textfield-input",{useCapture:!0},qt),gt.on("click",".mdui-textfield-expandable .mdui-textfield-icon",function(){L(this).parents(".mdui-textfield").addClass("mdui-textfield-expanded").find(".mdui-textfield-input")[0].focus()}),gt.on("click",".mdui-textfield-expanded .mdui-textfield-close",function(){L(this).parents(".mdui-textfield").removeClass("mdui-textfield-expanded").find(".mdui-textfield-input").val("")}),B.mutation(".mdui-textfield",function(){L(this).find(".mdui-textfield-input").trigger("input",{domLoadedEvent:!0})})}),B.updateTextFields=function(t){(O(t)?L(".mdui-textfield"):L(t)).each(function(t,e){L(e).find(".mdui-textfield-input").trigger("input",{reInit:!0})})};var Ut='.mdui-slider input[type="range"]';L(function(){gt.on("input change",Ut,function(){Wt(L(this).parent())}),gt.on(jt,Ut,function(t){Lt(t)&&(Bt(t),this.disabled||L(this).parent().addClass("mdui-slider-focus"))}),gt.on(At,Ut,function(t){Lt(t)&&(this.disabled||L(this).parent().removeClass("mdui-slider-focus"))}),gt.on(Rt,Ut,Bt),B.mutation(".mdui-slider",function(){Yt(L(this))})}),B.updateSliders=function(t){(O(t)?L(".mdui-slider"):L(t)).each(function(t,e){Yt(L(e))})};function Xt(t,e){var n=this;void 0===e&&(e={}),this.options=X({},Vt),this.state="closed",this.$element=L(t).first(),X(this.options,e),this.$btn=this.$element.find(".mdui-fab"),this.$dial=this.$element.find(".mdui-fab-dial"),this.$dialBtns=this.$dial.find(".mdui-fab"),"hover"===this.options.trigger&&(this.$btn.on("touchstart mouseenter",function(){return n.open()}),this.$element.on("mouseleave",function(){return n.close()})),"click"===this.options.trigger&&this.$btn.on(jt,function(){return n.open()}),gt.on(jt,function(t){L(t.target).parents(".mdui-fab-wrapper").length||n.close()})}var Vt={trigger:"hover"};Xt.prototype.triggerEvent=function(t){vt(t,"fab",this.$element,this)},Xt.prototype.isOpen=function(){return"opening"===this.state||"opened"===this.state},Xt.prototype.open=function(){var i=this;this.isOpen()||(this.$dialBtns.each(function(t,e){var n=15*(i.$dialBtns.length-t)+"ms";e.style.transitionDelay=n,e.style.webkitTransitionDelay=n}),this.$dial.css("height","auto").addClass("mdui-fab-dial-show"),this.$btn.find(".mdui-fab-opened").length&&this.$btn.addClass("mdui-fab-opened"),this.state="opening",this.triggerEvent("open"),this.$dialBtns.first().transitionEnd(function(){i.$btn.hasClass("mdui-fab-opened")&&(i.state="opened",i.triggerEvent("opened"))}))},Xt.prototype.close=function(){var t=this;this.isOpen()&&(this.$dialBtns.each(function(t,e){var n=15*t+"ms";e.style.transitionDelay=n,e.style.webkitTransitionDelay=n}),this.$dial.removeClass("mdui-fab-dial-show"),this.$btn.removeClass("mdui-fab-opened"),this.state="closing",this.triggerEvent("close"),this.$dialBtns.last().transitionEnd(function(){t.$btn.hasClass("mdui-fab-opened")||(t.state="closed",t.triggerEvent("closed"),t.$dial.css("height",0))}))},Xt.prototype.toggle=function(){this.isOpen()?this.close():this.open()},Xt.prototype.show=function(){this.$element.removeClass("mdui-fab-hide")},Xt.prototype.hide=function(){this.$element.addClass("mdui-fab-hide")},Xt.prototype.getState=function(){return this.state},B.Fab=Xt;var Jt="mdui-fab";L(function(){gt.on("touchstart mousedown mouseover","["+Jt+"]",function(){new B.Fab(this,Ct(this,Jt))})});function Kt(t,e){var n=this;void 0===e&&(e={}),this.$element=L(),this.options=X({},Gt),this.size=0,this.$selected=L(),this.$menu=L(),this.$items=L(),this.selectedIndex=0,this.selectedText="",this.selectedValue="",this.state="closed",this.$native=L(t).first(),this.$native.hide(),X(this.options,e),this.uniqueID=L.guid(),this.handleUpdate(),gt.on("click touchstart",function(t){var e=L(t.target);!n.isOpen()||e.is(n.$element)||P(n.$element[0],e[0])||n.close()})}var Gt={position:"auto",gutter:16};Kt.prototype.readjustMenu=function(){var t,e,n=yt.height(),i=this.$element.height(),o=this.$items.first(),s=o.height(),r=parseInt(o.css("margin-top")),a=this.$element.innerWidth()+.01,u=s*this.size+2*r,c=this.$element[0].getBoundingClientRect().top;if("bottom"===this.options.position)e=i,t="0px";else if("top"===this.options.position)e=-u-1,t="100%";else{var l=n-2*this.options.gutter;ln&&(e=-(c+u+this.options.gutter-n)),t=this.selectedIndex*s+s/2+r+"px"}this.$element.innerWidth(a),this.$menu.innerWidth(a).height(u).css({"margin-top":e+"px","transform-origin":"center "+t+" 0"})},Kt.prototype.isOpen=function(){return"opening"===this.state||"opened"===this.state},Kt.prototype.handleUpdate=function(){var r=this;this.isOpen()&&this.close(),this.selectedValue=this.$native.val();var a=[];this.$items=L(),this.$native.find("option").each(function(t,e){var n=e.textContent||"",i=e.value,o=e.disabled,s=r.selectedValue===i;a.push({value:i,text:n,disabled:o,selected:s,index:t}),s&&(r.selectedText=n,r.selectedIndex=t),r.$items=r.$items.add('
    "+n+"
    ")}),this.$selected=L(''+this.selectedText+""),this.$element=L('
    ').show().append(this.$selected),this.$menu=L('
    ').appendTo(this.$element).append(this.$items),L("#"+this.uniqueID).remove(),this.$native.after(this.$element),this.size=parseInt(this.$native.attr("size")||"0"),this.size<=0&&(this.size=this.$items.length,8').appendTo(this.$element);var i=window.location.hash;i&&this.$tabs.each(function(t,e){return L(e).attr("href")!==i||(n.activeIndex=t,!1)}),-1===this.activeIndex&&this.$tabs.each(function(t,e){return!L(e).hasClass("mdui-tab-active")||(n.activeIndex=t,!1)}),this.$tabs.length&&-1===this.activeIndex&&(this.activeIndex=0),this.setActive(),yt.on("resize",L.throttle(function(){return n.setIndicatorPosition()},100)),this.$tabs.each(function(t,e){n.bindTabEvent(e)})}var te={trigger:"click",loop:!1};Zt.prototype.isDisabled=function(t){return void 0!==t.attr("disabled")},Zt.prototype.bindTabEvent=function(t){function e(){if(n.isDisabled(i))return!1;n.activeIndex=n.$tabs.index(t),n.setActive()}var n=this,i=L(t);i.on("click",e),"hover"===this.options.trigger&&i.on("mouseenter",e),i.on("click",function(){if(0===(i.attr("href")||"").indexOf("#"))return!1})},Zt.prototype.triggerEvent=function(t,e,n){void 0===n&&(n={}),vt(t,"tab",e,this,n)},Zt.prototype.setActive=function(){var o=this;this.$tabs.each(function(t,e){var n=L(e),i=n.attr("href")||"";t!==o.activeIndex||o.isDisabled(n)?(n.removeClass("mdui-tab-active"),L(i).hide()):(n.hasClass("mdui-tab-active")||(o.triggerEvent("change",o.$element,{index:o.activeIndex,id:i.substr(1)}),o.triggerEvent("show",n),n.addClass("mdui-tab-active")),L(i).show(),o.setIndicatorPosition())})},Zt.prototype.setIndicatorPosition=function(){if(-1!==this.activeIndex){var t=this.$tabs.eq(this.activeIndex);if(!this.isDisabled(t)){var e=t.offset();this.$indicator.css({left:e.left+this.$element[0].scrollLeft-this.$element[0].getBoundingClientRect().left+"px",width:t.innerWidth()+"px"})}}else this.$indicator.css({left:0,width:0})},Zt.prototype.next=function(){-1!==this.activeIndex&&(this.$tabs.length>this.activeIndex+1?this.activeIndex++:this.options.loop&&(this.activeIndex=0),this.setActive())},Zt.prototype.prev=function(){-1!==this.activeIndex&&(0',D(n.buttons,function(t,e){i+=''+e.text+""}),i+="");var o='
    '+(n.title?'
    '+n.title+"
    ":"")+(n.content?'
    '+n.content+"
    ":"")+i+"
    ",s=new B.Dialog(o,{history:n.history,overlay:n.overlay,modal:n.modal,closeOnEsc:n.closeOnEsc,destroyOnClosed:n.destroyOnClosed});return null!==(e=n.buttons)&&void 0!==e&&e.length&&s.$element.find(".mdui-dialog-actions .mdui-btn").each(function(t,e){L(e).on("click",function(){n.buttons[t].onClick(s),n.buttons[t].close&&s.close()})}),s.$element.on("open.mdui.dialog",function(){n.onOpen(s)}).on("opened.mdui.dialog",function(){n.onOpened(s)}).on("close.mdui.dialog",function(){n.onClose(s)}).on("closed.mdui.dialog",function(){n.onClosed(s)}),s.open(),s}),closeOnEsc:!0,closeOnConfirm:!0},be={confirmText:"ok",cancelText:"cancel",history:!0,modal:!(B.alert=function(t,e,n,i){return p(e)&&(i=n,n=e,e=""),O(n)&&(n=function(){}),O(i)&&(i={}),i=X({},ye,i),B.dialog({title:e,content:t,buttons:[{text:i.confirmText,bold:!1,close:i.closeOnConfirm,onClick:n}],cssClass:"mdui-dialog-alert",history:i.history,modal:i.modal,closeOnEsc:i.closeOnEsc})}),closeOnEsc:!0,closeOnCancel:!0,closeOnConfirm:!0},xe={confirmText:"ok",cancelText:"cancel",history:!0,modal:!(B.confirm=function(t,e,n,i,o){return p(e)&&(o=i,i=n,n=e,e=""),O(n)&&(n=function(){}),O(i)&&(i=function(){}),O(o)&&(o={}),o=X({},be,o),B.dialog({title:e,content:t,buttons:[{text:o.cancelText,bold:!1,close:o.closeOnCancel,onClick:i},{text:o.confirmText,bold:!1,close:o.closeOnConfirm,onClick:n}],cssClass:"mdui-dialog-confirm",history:o.history,modal:o.modal,closeOnEsc:o.closeOnEsc})}),closeOnEsc:!0,closeOnCancel:!0,closeOnConfirm:!0,type:"text",maxlength:0,defaultValue:"",confirmOnEnter:!1};B.prompt=function(t,e,i,n,o){p(e)&&(o=n,n=i,i=e,e=""),O(i)&&(i=function(){}),O(n)&&(n=function(){}),O(o)&&(o={});var s='
    '+(t?'":"")+("text"===(o=X({},xe,o)).type?'":"")+("textarea"===o.type?'":"")+"
    ";return B.dialog({title:e,content:s,buttons:[{text:o.cancelText,bold:!1,close:o.closeOnCancel,onClick:function(t){var e=t.$element.find(".mdui-textfield-input").val();n(e,t)}},{text:o.confirmText,bold:!1,close:o.closeOnConfirm,onClick:function(t){var e=t.$element.find(".mdui-textfield-input").val();i(e,t)}}],cssClass:"mdui-dialog-prompt",history:o.history,modal:o.modal,closeOnEsc:o.closeOnEsc,onOpen:function(n){var t=n.$element.find(".mdui-textfield-input");B.updateTextFields(t),t[0].focus(),"textarea"!==o.type&&!0===o.confirmOnEnter&&t.on("keydown",function(t){if(13===t.keyCode){var e=n.$element.find(".mdui-textfield-input").val();return i(e,n),o.closeOnConfirm&&n.close(),!1}}),"textarea"===o.type&&t.on("input",function(){return n.handleUpdate()}),o.maxlength&&n.handleUpdate()}})};function Ce(t,e){void 0===e&&(e={}),this.options=X({},we),this.state="closed",this.timeoutId=null,this.$target=L(t).first(),X(this.options,e),this.$element=L('
    '+this.options.content+"
    ").appendTo(document.body);var n=this;this.$target.on("touchstart mouseenter",function(t){n.isDisabled(this)||Lt(t)&&(Bt(t),n.open())}).on("touchend mouseleave",function(t){n.isDisabled(this)||Lt(t)&&n.close()}).on(Rt,function(t){n.isDisabled(this)||Bt(t)})}var we={position:"auto",delay:0,content:""};Ce.prototype.isDisabled=function(t){return t.disabled||void 0!==L(t).attr("disabled")},Ce.prototype.isDesktop=function(){return 1024
    '+this.options.message+"
    "+(this.options.buttonText?'"+this.options.buttonText+"":"")+"").appendTo(document.body),this.setPosition("close"),this.$element.reflow().addClass("mdui-snackbar-"+this.options.position)}var ke={message:"",timeout:4e3,position:"bottom",buttonText:"",buttonColor:"",closeOnButtonClick:!0,closeOnOutsideClick:!0,onClick:function(){},onButtonClick:function(){},onOpen:function(){},onOpened:function(){},onClose:function(){},onClosed:function(){}},_e=null,Te="_mdui_snackbar";function Ie(t){return void 0===t&&(t=!1),'
    '}function Se(t){var e=L(t),n=e.hasClass("mdui-spinner-colorful")?Ie(1)+Ie(2)+Ie(3)+Ie(4):Ie();e.html(n)}Oe.prototype.closeOnOutsideClick=function(t){var e=L(t.target);e.hasClass("mdui-snackbar")||e.parents(".mdui-snackbar").length||_e.close()},Oe.prototype.setPosition=function(t){var e,n,i=this.$element[0].clientHeight,o=this.options.position;e="bottom"===o||"top"===o?"-50%":"0","open"===t?n="0":("bottom"===o&&(n=i),"top"===o&&(n=-i),"left-top"!==o&&"right-top"!==o||(n=-i-24),"left-bottom"!==o&&"right-bottom"!==o||(n=i+24)),this.$element.transform("translate("+e+","+n+"px")},Oe.prototype.open=function(){var e=this;"opening"!==this.state&&"opened"!==this.state&&(_e?re(Te,function(){return e.open()}):((_e=this).state="opening",this.options.onOpen(this),this.setPosition("open"),this.$element.transitionEnd(function(){"opening"===e.state&&(e.state="opened",e.options.onOpened(e),e.options.buttonText&&e.$element.find(".mdui-snackbar-action").on("click",function(){e.options.onButtonClick(e),e.options.closeOnButtonClick&&e.close()}),e.$element.on("click",function(t){L(t.target).hasClass("mdui-snackbar-action")||e.options.onClick(e)}),e.options.closeOnOutsideClick&>.on(jt,e.closeOnOutsideClick),e.options.timeout&&(e.timeoutId=setTimeout(function(){return e.close()},e.options.timeout)))})))},Oe.prototype.close=function(){var t=this;"closing"!==this.state&&"closed"!==this.state&&(this.timeoutId&&clearTimeout(this.timeoutId),this.options.closeOnOutsideClick&>.off(jt,this.closeOnOutsideClick),this.state="closing",this.options.onClose(this),this.setPosition("close"),this.$element.transitionEnd(function(){"closing"===t.state&&(_e=null,t.state="closed",t.options.onClosed(t),t.$element.remove(),ae(Te))}))},B.snackbar=function(t,e){void 0===e&&(e={}),E(t)?e.message=t:e=t;var n=new Oe(e);return n.open(),n},L(function(){gt.on("click",".mdui-bottom-nav>a",function(){var i=L(this),o=i.parent();o.children("a").each(function(t,e){var n=i.is(e);n&&vt("change","bottomNav",o[0],void 0,{index:t}),n?L(e).addClass("mdui-bottom-nav-active"):L(e).removeClass("mdui-bottom-nav-active")})}),B.mutation(".mdui-bottom-nav-scroll-hide",function(){new B.Headroom(this,{pinnedClass:"mdui-headroom-pinned-down",unpinnedClass:"mdui-headroom-unpinned-down"})})}),L(function(){B.mutation(".mdui-spinner",function(){Se(this)})});function je(t,e,n){var i=this;if(void 0===n&&(n={}),this.options=X({},Me),this.state="closed",this.$anchor=L(t).first(),this.$element=L(e).first(),!this.$anchor.parent().is(this.$element.parent()))throw new Error("anchorSelector and menuSelector must be siblings");X(this.options,n),this.isCascade=this.$element.hasClass("mdui-menu-cascade"),this.isCovered="auto"===this.options.covered?!this.isCascade:this.options.covered,this.$anchor.on("click",function(){return i.toggle()}),gt.on("click touchstart",function(t){var e=L(t.target);!i.isOpen()||e.is(i.$element)||P(i.$element[0],e[0])||e.is(i.$anchor)||P(i.$anchor[0],e[0])||i.close()});var o=this;gt.on("click",".mdui-menu-item",function(){var t=L(this);t.find(".mdui-menu").length||void 0!==t.attr("disabled")||o.close()}),this.bindSubMenuEvent(),yt.on("resize",L.throttle(function(){return i.readjust()},100))}var Me={position:"auto",align:"auto",gutter:16,fixed:!(B.updateSpinners=function(t){(O(t)?L(".mdui-spinner"):L(t)).each(function(){Se(this)})}),covered:"auto",subMenuTrigger:"hover",subMenuDelay:200};je.prototype.isOpen=function(){return"opening"===this.state||"opened"===this.state},je.prototype.triggerEvent=function(t){vt(t,"menu",this.$element,this)},je.prototype.readjust=function(){var t,e,n,i,o,s,r=yt.height(),a=yt.width(),u=this.options.gutter,c=this.isCovered,l=this.options.fixed,d=this.$element.width(),h=this.$element.height(),f=this.$anchor[0].getBoundingClientRect(),p=f.top,m=f.left,v=f.height,g=f.width,y=r-p-v,b=a-m-g,x=this.$anchor[0].offsetTop,C=this.$anchor[0].offsetLeft;if(n="auto"===this.options.position?h+u