Merge branch 'master' into skillParser

# Conflicts:
#	languages/en.css
#	languages/en.js
#	languages/ko.css
#	languages/zh-CN.js
This commit is contained in:
枫谷剑仙 2021-08-06 22:22:45 +08:00
commit 1b1e5989cd
53 changed files with 3177 additions and 3054 deletions

View File

@ -15,21 +15,26 @@ This tool can help you easily create and share Swipe Formation or Solo Formation
| ![3人协力界面预览](document/preview-capture-3p.png) | ![手机端预览](document/preview-mobile.jpg) |
# 如何使用 | HOW TO USE
## 快速使用在线版 | Online Quick Start
* <https://mapaler.github.io/PADDashFormation/> (Github Pages)
[![](https://www.mozilla.org/media/img/firefox/favicon.ico)Firefox](https://www.mozilla.org/firefox/new/) is recommended on your phone for better performance. Chrome is very slow when searching for a large number of cards
* <https://mapaler.gitee.io/paddashformation/> (码云的镜象,国内用这个更快 | Chinese mirror)
手机上使用 [![](https://www.mozilla.org/media/img/firefox/favicon.ico)火狐浏览器](https://www.mozilla.org/firefox/new/) 具有更好的性能Chrome 卡死了。
推荐[![](https://www.mozilla.org/media/img/firefox/favicon.ico)火狐浏览器](https://www.mozilla.org/firefox/new/) | [![](https://www.mozilla.org/media/img/firefox/favicon.ico)Firefox](https://www.mozilla.org/firefox/new/) is recommended
## 快速使用在线版(推荐) | Online Quick Start (Recommended)
* <https://mapaler.github.io/PADDashFormation/> (Github Pages)
* <https://mapaler.com/PADDashFormation/> (我自己的镜像 | my own mirror)
> *Gitee* 的镜像已经停止更新。
> The mirror of *Gitee* has stopped updating.
## 下载后使用本地版 | Use the local version after downloaded
[下载压缩包](//gitee.com/mapaler/PADDashFormation/repository/archive/master)或`git clone`后使用浏览器打开`index.html`。
[Download ZIP](//codeload.github.com/Mapaler/PADDashFormation/zip/master) or `git clone`, and open the `index.html` with Browser.
## 创建你自己的镜像网站 | Create your own mirror web site
`git clone`到你的 *http* 服务目录即可访问,将来更新时只需要`git pull`即可。
`git clone` to your *http* service directory for visited, and `git pull` for future updates.
## 下载后使用本地版 | Use the local version after downloaded
[下载压缩包](archive/refs/heads/master.zip)或`git clone`后使用浏览器打开`index.html`。
[Download ZIP](archive/refs/heads/master.zip) or `git clone`, and open the `index.html` with Browser.
* 火狐68.0及以后需要在`about:config`设定`privacy.file_unique_origin`为`false`。
Firefox 68.0 or above need setting the `privacy.file_unique_origin` to `false` in `about:config`.
* Chrome需要添加`--allow-file-access-from-files`启动参数。
Chrome browser need start with the additional argument `--allow-file-access-from-files`.
## [帮助和提示 | Help and Tips](help.md)
# [帮助和提示 | Help and Tips](help.md)
# 翻译我 | Translate me
## 目前支持的语言 | Languages currently supported

Binary file not shown.

View File

@ -2,11 +2,11 @@
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<metadata>
Created by FontForge 20201107 at Tue Mar 16 10:15:04 2021
Created by FontForge 20201107 at Wed Aug 4 12:25:29 2021
By Robert Madole
Copyright (c) Font Awesome
</metadata>
<!-- Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><defs>
<!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><defs>
<font id="FontAwesome5Free-Solid" horiz-adv-x="512" >
<font-face
font-family="Font Awesome 5 Free Solid"

Before

Width:  |  Height:  |  Size: 898 KiB

After

Width:  |  Height:  |  Size: 898 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 952 KiB

After

Width:  |  Height:  |  Size: 971 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 599 KiB

After

Width:  |  Height:  |  Size: 895 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 798 KiB

After

Width:  |  Height:  |  Size: 885 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 KiB

After

Width:  |  Height:  |  Size: 689 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 631 KiB

After

Width:  |  Height:  |  Size: 902 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 952 KiB

After

Width:  |  Height:  |  Size: 971 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 599 KiB

After

Width:  |  Height:  |  Size: 895 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 798 KiB

After

Width:  |  Height:  |  Size: 885 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 KiB

After

Width:  |  Height:  |  Size: 689 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 80 KiB

View File

@ -376,7 +376,8 @@
content: "Reset";
}
.search-box .awoken-clear::before,
.search-box .sawoken-clear::before
.search-box .sawoken-clear::before,
.special-div .special-clear::before
{
content: "Clear";
}
@ -386,6 +387,12 @@
.search-box .sawoken-div::before{
content: "▼Super Awoken (OR)";
}
.search-box .special-div::before{
content: "▼Special Search";
}
.special-div .special-add::before {
content: "";
}
.control-div .search-start::before{
content: "🔍Start Search";
}
@ -522,9 +529,9 @@
content: "Generate QR code:";
}
.formation-from-qrcode::before
.formation-from-string::before
{
content: "A formation link read from a QR code";
content: "A formation link read from string";
}
label[for="sourceSelect"]::before
{
@ -536,15 +543,18 @@ label[for="sourceSelect"]::before
}
#qr-code-frame .read-qr-camera::before
{
content: "\f030 Scan with the camera";
content: "\f030 Scan with camera";
}
#qr-code-frame .read-qr-camera.running::before
{
content: "\f28d Stop using the camera";
content: "\f28d Stop using camera";
}
#qr-code-frame .read-qr-file::before
{
content: "\f1c5 Read the image file";
content: "\f1c5 Read image file";
}
#qr-code-frame .read-string::before {
content: "\f891 Read string";
}
label[for="qr-data-type-pdf"]::before
@ -555,3 +565,6 @@ label[for="qr-data-type-pdc"]::before
{
content: "P&D Damage Caculater (PDC)";
}
label[for="qr-data-type-pdchu"]::before {
content: "Valeria(pdchu)";
}

View File

@ -1,24 +1,25 @@
localTranslating = {
webpage_title: `P&D ${teamsCount}P Formation Maker`,
title_blank: `Input Formation Title`,
detail_blank: `Input Detail`,
sort_name: {
sort_none: `Nope`,
sort_id: `Cards Id`,
sort_attrs : `Attribute`,
sort_evoRootId: `Cards Evolution Root`,
sort_evoRoot_Attrs : `Cards Evolution Root's Attribute`,
sort_rarity: `Rarity`,
sort_cost: `Cost`,
sort_skillLv1: `Maximum Skill Turn`,
sort_skillLvMax: `Minimum Skill Turn`,
sort_hpMax110: `Max HP`,
sort_atkMax110: `Max ATK`,
sort_rcvMax110: `Max RCV`,
sort_hpMax110_awoken: `Max HP (+Awoken)`,
sort_atkMax110_awoken: `Max ATK (+Awoken)`,
sort_rcvMax110_awoken: `Max RCV (+Awoken)`,
sort_abilityIndex_awoken: `Maximum Weighted Ability Index (+Awakening)`,
addition_display: "Additional display",
title_blank: "Input Formation Title",
detail_blank: "Input Detail",
sort_name:{
sort_none: "Nope",
sort_id: "Cards Id",
sort_attrs : "Attribute",
sort_evoRootId: "Cards Evolution Root",
sort_evoRoot_Attrs : "Cards Evolution Root's Attribute",
sort_rarity: "Rarity",
sort_cost: "Cost",
sort_skillLv1: "Maximum Skill Turn",
sort_skillLvMax: "Minimum Skill Turn",
sort_hpMax110: "Max HP",
sort_atkMax110: "Max ATK",
sort_rcvMax110: "Max RCV",
sort_hpMax110_awoken: "Max HP (+Awoken)",
sort_atkMax110_awoken: "Max ATK (+Awoken)",
sort_rcvMax110_awoken: "Max RCV (+Awoken)",
sort_abilityIndex_awoken: "Maximum Weighted Ability Index (+Awakening)",
},
force_reload_data: `Force refresh data`,
skill_parse: {

View File

@ -368,7 +368,8 @@
content: "リセット";
}
.search-box .awoken-clear::before,
.search-box .sawoken-clear::before
.search-box .sawoken-clear::before,
.special-div .special-clear::before
{
content: "クリア";
}
@ -378,6 +379,12 @@
.search-box .sawoken-div::before{
content: "▼超覚醒OR";
}
.search-box .special-div::before{
content: "▼特別な検索";
}
.special-div .special-add::before {
content: "";
}
.control-div .search-start::before{
content: "🔍検索の開始";
}
@ -486,9 +493,9 @@
content: "QRコードを生成します:";
}
.formation-from-qrcode::before
.formation-from-string::before
{
content: "QRコードから読み取られたフォーメーションリンク";
content: "文字列から読み取られた列リンク";
}
label[for="sourceSelect"]::before
{
@ -510,12 +517,18 @@ label[for="sourceSelect"]::before
{
content: "\f1c5 画像ファイルを読み取る";
}
#qr-code-frame .read-string::before {
content: "\f891 文字列を読み取ります";
}
label[for="qr-data-type-pdf"]::before
{
content: "パズドラチーム図作成ツール";
content: "パズドラダッシュフォーメーション";
}
label[for="qr-data-type-pdc"]::before
{
content: "パズドラダメージ計算 (PDC)";
}
label[for="qr-data-type-pdchu"]::before {
content: "Valeria(pdchu)";
}

View File

@ -1,5 +1,6 @@
localTranslating = {
webpage_title: `パズル&ドラゴンズ${teamsCount}人のチーム図作成ツール`,
addition_display: "追加の表示",
title_blank: "入力タイトル",
detail_blank: "入力詳細",
sort_name:{
@ -10,6 +11,7 @@
sort_evoRoot_Attrs : "カード進化ルートの属性",
sort_rarity: "レアリティ",
sort_cost: "コスト",
sort_mp: "MP",
sort_skillLv1: "最大スキルターン",
sort_skillLvMax: "最小スキルターン",
sort_hpMax110: "最大 HP",

View File

@ -365,7 +365,8 @@
content: "재설정";
}
.search-box .awoken-clear::before,
.search-box .sawoken-clear::before
.search-box .sawoken-clear::before,
.special-div .special-clear::before
{
content: "명확한";
}
@ -375,6 +376,12 @@
.search-box .sawoken-div::before{
content: "▼슈퍼 각성OR";
}
.search-box .special-div::before{
content: "▼특별 검색";
}
.special-div .special-add::before {
content: "";
}
.control-div .search-start::before{
content: "🔍검색 시작";
}
@ -480,9 +487,9 @@
content: "QR 코드 생성:";
}
.formation-from-qrcode::before
.formation-from-string::before
{
content: "QR 코드에서 읽은 형성 링크";
content: "문자열에서 읽은 팀 링크입니다";
}
label[for="sourceSelect"]::before
{
@ -504,12 +511,18 @@ label[for="sourceSelect"]::before
{
content: "\f1c5 이미지 파일 읽기";
}
#qr-code-frame .read-string::before {
content: "\f891 문자열을 읽습니다";
}
label[for="qr-data-type-pdf"]::before
{
content: "퍼즐앤드래곤 팀 다이어그램 생성 도구";
content: "퍼즐앤드래곤 대시 형성";
}
label[for="qr-data-type-pdc"]::before
{
content: "퍼즐앤드래곤 데미지 카큐라터 (PDC)";
}
label[for="qr-data-type-pdchu"]::before {
content: "Valeria(pdchu)";
}

View File

@ -1,5 +1,6 @@
localTranslating = {
webpage_title: `퍼즐앤드래곤 ${teamsCount} 명의 팀 다이어그램 작성 도구`,
addition_display: "추가 표시입니다",
title_blank: "입력 제목",
detail_blank: "입력 내용",
sort_name:{
@ -10,6 +11,7 @@
sort_evoRoot_Attrs : "카드 진화 루트의 특성",
sort_rarity: "래리티",
sort_cost: "비용",
sort_mp: "MP",
sort_skillLv1: "최대 스킬 턴",
sort_skillLvMax: "최소 스킬 턴",
sort_hpMax110: "최대 HP",

View File

@ -7,31 +7,4 @@
{
font-family: "Microsoft Yahei","Source Han Sans",Arial, Helvetica, sans-serif;
font-weight: bold;
}
.specialSearch {
display: block !important;
min-height: 35px;
}
.specialSearch::before {
content: "▼暂时仅中文有的筛选(缺少翻译)";
display: block;
}
.specialSearch li{
margin-bottom: 5px;
margin-right: 3px;
}
.specialSearch select{
font-size: 20px;
}
.specialSearch .specialSearch-clear,
.specialSearch .specialSearch-add
{
float: right;
padding: 0;
}
.specialSearch .specialSearch-clear::before {
content: "❌";
}
.specialSearch .specialSearch-add::before {
content: "";
}

File diff suppressed because it is too large Load Diff

View File

@ -328,7 +328,7 @@
content: "使用官方覺醒排序";
}
.search-box .search-list-length::before{
content: "結果數量:";
content: "結果數量:";
}
.search-box .sort-div::before{
content: "排序:";
@ -371,7 +371,8 @@
content: "重置";
}
.search-box .awoken-clear::before,
.search-box .sawoken-clear::before
.search-box .sawoken-clear::before,
.special-div .special-clear::before
{
content: "清除";
}
@ -381,6 +382,12 @@
.search-box .sawoken-div::before{
content: "▼超覺醒OR";
}
.search-box .special-div::before{
content: "▼特殊搜索";
}
.special-div .special-add::before {
content: "";
}
.control-div .search-start::before{
content: "🔍開始搜索";
}
@ -418,52 +425,52 @@
.base .evo-type::before,
.base .evo-type::after
{
content: "基礎";
content: "基礎";
}
.evolution .evo-type::before,
.evolution .evo-type::after
{
content: "進化";
content: "進化";
}
.ult-evo .evo-type::before,
.ult-evo .evo-type::after
{
content: "究極進化";
content: "究極進化";
}
.reincarnation .evo-type::before,
.reincarnation .evo-type::after
{
content: "轉生進化";
content: "轉生進化";
}
.pixel-evo .evo-type::before,
.pixel-evo .evo-type::after
{
content: "像素進化";
content: "像素進化";
}
.assist-evo .evo-type::before,
.assist-evo .evo-type::after
{
content: "輔助進化";
content: "輔助進化";
}
.super-reincarnation .evo-type::before,
.super-reincarnation .evo-type::after
{
content: "超轉生進化";
content: "超轉生進化";
}
.super-ult-evo .evo-type::before,
.super-ult-evo .evo-type::after
{
content: "超究極進化";
content: "超究極進化";
}
.henshin .evo-type::before,
.henshin .evo-type::after
{
content: "變身";
content: "變身";
}
.henshin-loop .evo-type::before,
.henshin-loop .evo-type::after
{
content: "循環變身";
content: "循環變身";
}
.control-box .btn-qrcode::before{
@ -479,36 +486,42 @@
content: "生成二維碼:";
}
.formation-from-qrcode::before
.formation-from-string::before
{
content: "從二維碼中讀取的隊伍連結";
content: "從字串中讀取的隊伍連結";
}
label[for="sourceSelect"]::before
{
content: "視頻源選擇:";
content: "視頻源選擇:";
}
#qr-code-frame .save-qr-img::before
{
content: "\f0c7 保存二維碼圖片";
content: "\f0c7 保存二維碼圖片";
}
#qr-code-frame .read-qr-camera::before
{
content: "\f030 使用相機掃描";
content: "\f030 使用相機掃描";
}
#qr-code-frame .read-qr-camera.running::before
{
content: "\f28d 停止使用相機";
content: "\f28d 停止使用相機";
}
#qr-code-frame .read-qr-file::before
{
content: "\f1c5 讀取二維碼圖片";
content: "\f1c5 讀取二維碼圖片";
}
#qr-code-frame .read-string::before {
content: "\f891 读取字符串";
}
label[for="qr-data-type-pdf"]::before
{
content: "龍族拼圖隊伍圖製作工具";
content: "龍圖急速陣型";
}
label[for="qr-data-type-pdc"]::before
{
content: "智龙迷城傷害計算器 (PDC)";
content: "龍族拼圖傷害計算器(PDC)";
}
label[for="qr-data-type-pdchu"]::before {
content: "Valeria(pdchu)";
}

View File

@ -1,5 +1,6 @@
localTranslating = {
webpage_title: `龍族拼圖${teamsCount}人隊伍圖製作工具`,
addition_display: "附加顯示",
title_blank: "輸入隊伍標題",
detail_blank: "輸入說明",
sort_name:{
@ -10,6 +11,7 @@
sort_evoRoot_Attrs : "進化根怪物的屬性",
sort_rarity: "稀有度",
sort_cost: "消耗",
sort_mp: "MP",
sort_skillLv1: "技能最大冷卻時間",
sort_skillLvMax: "技能最小冷卻時間",
sort_hpMax110: "最大 HP",

View File

@ -328,7 +328,7 @@
content: "使用官方觉醒排序";
}
.search-box .search-list-length::before{
content: "结果数量:";
content: "结果数量:";
}
.search-box .sort-div::before{
content: "排序:";
@ -371,7 +371,8 @@
content: "重置";
}
.search-box .awoken-clear::before,
.search-box .sawoken-clear::before
.search-box .sawoken-clear::before,
.special-div .special-clear::before
{
content: "清除";
}
@ -381,6 +382,12 @@
.search-box .sawoken-div::before{
content: "▼超觉醒OR";
}
.search-box .special-div::before{
content: "▼特殊搜索";
}
.special-div .special-add::before {
content: "";
}
.control-div .search-start::before{
content: "🔍开始搜索";
}
@ -418,52 +425,52 @@
.base .evo-type::before,
.base .evo-type::after
{
content: "基礎";
content: "基礎";
}
.evolution .evo-type::before,
.evolution .evo-type::after
{
content: "進化";
content: "進化";
}
.ult-evo .evo-type::before,
.ult-evo .evo-type::after
{
content: "究極進化";
content: "究極進化";
}
.reincarnation .evo-type::before,
.reincarnation .evo-type::after
{
content: "轉生進化";
content: "轉生進化";
}
.pixel-evo .evo-type::before,
.pixel-evo .evo-type::after
{
content: "像素進化";
content: "像素進化";
}
.assist-evo .evo-type::before,
.assist-evo .evo-type::after
{
content: "輔助進化";
content: "輔助進化";
}
.super-reincarnation .evo-type::before,
.super-reincarnation .evo-type::after
{
content: "超轉生進化";
content: "超轉生進化";
}
.super-ult-evo .evo-type::before,
.super-ult-evo .evo-type::after
{
content: "超究極進化";
content: "超究極進化";
}
.henshin .evo-type::before,
.henshin .evo-type::after
{
content: "変身";
content: "変身";
}
.henshin-loop .evo-type::before,
.henshin-loop .evo-type::after
{
content: "循環変身";
content: "循環変身";
}
.control-box .btn-qrcode::before{
@ -479,36 +486,42 @@
content: "生成二维码:";
}
.formation-from-qrcode::before
.formation-from-string::before
{
content: "从二维码中读取的队伍链接";
content: "从字符串中读取的队伍链接";
}
label[for="sourceSelect"]::before
{
content: "视频源选择:";
content: "视频源选择:";
}
#qr-code-frame .save-qr-img::before
{
content: "\f0c7 保存二维码图片";
content: "\f0c7 保存二维码图片";
}
#qr-code-frame .read-qr-camera::before
{
content: "\f030 使用相机扫描";
content: "\f030 使用相机扫描";
}
#qr-code-frame .read-qr-camera.running::before
{
content: "\f28d 停止使用相机";
content: "\f28d 停止使用相机";
}
#qr-code-frame .read-qr-file::before
{
content: "\f1c5 读取二维码图片";
content: "\f1c5 读取二维码图片";
}
#qr-code-frame .read-string::before {
content: "\f891 读取字符串";
}
label[for="qr-data-type-pdf"]::before
{
content: "智龙迷城队伍图制作工具";
content: "智龙急速阵型";
}
label[for="qr-data-type-pdc"]::before
{
content: "智龙迷城伤害计算器PDC";
content: "智龙迷城伤害计算器(PDC)";
}
label[for="qr-data-type-pdchu"]::before {
content: "Valeria(pdchu)";
}

View File

@ -1 +1,26 @@
document.title = localTranslating.webpage_title;
localTranslating = {
webpage_title: `智龙迷城${teamsCount}人队伍图制作工具`,
addition_display: "附加显示",
title_blank: "输入队伍标题",
detail_blank: "输入说明",
sort_name:{
sort_none: "无",
sort_id: "怪物ID",
sort_attrs: "属性",
sort_evoRootId: "进化树",
sort_evoRoot_Attrs : "进化根怪物的属性",
sort_rarity: "稀有度",
sort_cost: "消耗",
sort_mp: "MP",
sort_skillLv1: "技能最大冷却时间",
sort_skillLvMax: "技能最小冷却时间",
sort_hpMax110: "最大 HP",
sort_atkMax110: "最大攻击",
sort_rcvMax110: "最大回复",
sort_hpMax110_awoken: "最大 HP+觉醒)",
sort_atkMax110_awoken: "最大攻击(+觉醒)",
sort_rcvMax110_awoken: "最大回复(+觉醒)",
sort_abilityIndex_awoken: "最大加权能力指数(+觉醒)",
},
force_reload_data: "强制刷新数据",
}

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
[{"code":"ja","ckey":{"card":"eecd70bf4f222474f96f94f6c124559f","skill":"88598cd8a7056f5f932eb73bad2c7a82"},"updateTime":1626955227792},{"code":"en","ckey":{"card":"f968e7c08d9a708a236e956d7050e05a","skill":"fa1024dd36232eb43c030a2499814960"},"updateTime":1626352490457},{"code":"ko","ckey":{"card":"6b1f4e5b5f428ad3303257ac0b118bf2","skill":"17c7e55b774b6fed3eaea6bc5a0c027d"},"updateTime":1626352490457}]
[{"code":"ja","ckey":{"card":"a9a5c763db8bc21d937e8fda0e021f82","skill":"725002e84c36054689659a929f1ebdbc"},"updateTime":1628249264288},{"code":"en","ckey":{"card":"0a0aa693ecc46fd263b8192b617f468a","skill":"456926fb7cd424120cbe220d248d1fa4"},"updateTime":1628249264288},{"code":"ko","ckey":{"card":"d28ac79158b25e6407bb8a964fa3bc85","skill":"8a4a72bc42cc25b27911a9fbc6be63bf"},"updateTime":1628249264288}]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -918,6 +918,13 @@ var formation = new Formation(teamsCount,5);
<li class="awoken-count"><input type="checkbox" class="sawoken-check" name="types" value="81" id="search-awoken-81" /><label class="awoken-icon" data-awoken-icon="81" for="search-awoken-81"></label><!--5色--></li>
</ul>
</div>
<div class="special-div">
<button class="special-add brown-button"></button>
<button class="special-clear brown-button"></button>
<ul class="special-filter-list">
<li><select class="special-filter"></select></li>
</ul>
</div>
<div class="control-div"><!--控制栏-->
<button class="search-start"><!--开始搜索--></button>
<button class="search-close"><!--关闭搜索--></button>
@ -1153,6 +1160,10 @@ var formation = new Formation(teamsCount,5);
<div class="mask-content">
<div class="read-qr-box">
<div class="action-button-box">
<div class="read-text-box">
<input class="string-input" type="text"/>
<button class="read-string brown-button"><!--读字符串--></button>
</div>
<button class="read-qr-camera brown-button"><!--相机扫--></button>
<button class="read-qr-file brown-button"><!--读文件--></button>
<input type="file" accept="image/*" class="file-select display-none">
@ -1168,6 +1179,7 @@ var formation = new Formation(teamsCount,5);
<li><input type="radio" name="qr-data-type" class="qr-data-type-radio" value="pdf" id="qr-data-type-pdf" checked/><label for="qr-data-type-pdf"></label></li><!--本程序
--><li><input type="radio" name="qr-data-type" class="qr-data-type-radio" value="pdc" id="qr-data-type-pdc" /><label for="qr-data-type-pdc"></label></li><!--PDC-->
</ul>
<input class="string-output" type="text" readonly/>
<div class="qr-box"><img class="qr-code-image" /></div>
<a download="" class="save-qr-img brown-button"><!--保存QR 图片--></a>
</div>

File diff suppressed because it is too large Load Diff

View File

@ -765,9 +765,9 @@ function getCardLeaderSkills(card, skillTypes) {
return getActuallySkills(Skills[card.leaderSkillId], skillTypes, false);
}
//返回卡片的主动技能
function getCardActiveSkills(card, skillTypes) {
function getCardActiveSkills(card, skillTypes, searchRandom = false) {
if (!card) return [];
return getActuallySkills(Skills[card.activeSkillId], skillTypes, false);
return getActuallySkills(Skills[card.activeSkillId], skillTypes, searchRandom);
}
//查找到真正起作用的那一个技能
function getActuallySkills(skill, skillTypes, searchRandom = true) {
@ -823,54 +823,55 @@ function tIf_Effect_poisonNoEffect(leader1id, leader2id) {
}
//计算队伍的+C
function tIf_Effect_addCombo(leader1id, leader2id) {
return [
getSkillAddCombo(Cards[leader1id]),
getSkillAddCombo(Cards[leader2id])
];
}
function getSkillAddCombo(card) {
const searchTypeArray = [192, 194, 206, 209, 210, 219, 220];
const ls1 = getCardLeaderSkills(Cards[leader1id], searchTypeArray)[0];
const ls2 = getCardLeaderSkills(Cards[leader2id], searchTypeArray)[0];
function getSkillAddCombo(skill) {
if (!skill) return 0;
switch (skill.type) {
case 192:
case 194:
return skill.params[3];
case 206:
return skill.params[6];
case 209:
return skill.params[0];
case 210:
case 219:
return skill.params[2];
case 220:
return skill.params[1];
default:
return 0;
}
const skill = getCardLeaderSkills(card, searchTypeArray)[0];
if (!skill) return 0;
switch (skill.type) {
case 192:
case 194:
return skill.params[3];
case 206:
return skill.params[6];
case 209:
return skill.params[0];
case 210:
case 219:
return skill.params[2];
case 220:
return skill.params[1];
default:
return 0;
}
return [getSkillAddCombo(ls1), getSkillAddCombo(ls2)];
}
//计算队伍的追打
function tIf_Effect_inflicts(leader1id, leader2id) {
const searchTypeArray = [199, 200, 201, 223];
const ls1 = getCardLeaderSkills(Cards[leader1id], searchTypeArray)[0];
const ls2 = getCardLeaderSkills(Cards[leader2id], searchTypeArray)[0];
function getSkillFixedDamage(skill) {
if (!skill) return 0;
switch (skill.type) {
case 199:
case 200:
return skill.params[2];
case 201:
return skill.params[5];
case 223:
return skill.params[1];
default:
return 0;
}
return [
getSkillFixedDamage(Cards[leader1id]),
getSkillFixedDamage(Cards[leader2id])
];
}
function getSkillFixedDamage(card) {
const searchTypeArray = [199, 200, 201, 223];
const skill = getCardLeaderSkills(card, searchTypeArray)[0];
if (!skill) return 0;
switch (skill.type) {
case 199:
case 200:
return skill.params[2];
case 201:
return skill.params[5];
case 223:
return skill.params[1];
default:
return 0;
}
return [getSkillFixedDamage(ls1), getSkillFixedDamage(ls2)];
}
//计算队伍操作时间
function countMoveTime(team, leader1id, leader2id, teamIdx) {

263
script.js
View File

@ -27,6 +27,7 @@ if (location.search.includes('&amp;')) {
}
let localTranslating = {
webpage_title: `智龙迷城${teamsCount}人队伍图制作工具`,
addition_display: "💬",
}
//一开始就加载当前语言
@ -328,12 +329,12 @@ Formation.prototype.loadObj = function(f) {
if (f.b)
this.teams[0][2] = f.b; //原来模式的徽章
};
Formation.prototype.getPdfQrObj = function(keepSource = true)
Formation.prototype.getPdfQrObj = function(keepDataSource = true)
{
let qrObj = {
d:this.outObj()
};
if (keepSource) qrObj.s = currentDataSource.code;
if (keepDataSource) qrObj.s = currentDataSource.code;
return qrObj;
}
Formation.prototype.getPdcQrStr = function()
@ -384,16 +385,17 @@ Formation.prototype.getPdcQrStr = function()
{
if (membersArr[i].id > 0 || assistArr[i].id > 0)
{
let pdcMemberArr = Array.from(genMemberMap(membersArr[i], assistArr[i], (arr.length == 2 && idx == 1) ? i+1 : i)); //2人协力时队伍2编号0是空的
let pdcMemberMap = genMemberMap(membersArr[i], assistArr[i], (arr.length == 2 && idx == 1) ? i+1 : i); //2人协力时队伍2编号0是空的
let pdcMemberArr = Array.from(pdcMemberMap);
pdcMemberStr = pdcMemberArr.map(item => {
if (item[1] == undefined)
{
console.log(item[0])
return null;
}
return [
item[0].toString(36).prefix(2),
item[1].toString(36).prefix(2)
].join('')}).join(',');
].join('')}).filter(item=>item).join(',');
teamArr.push(pdcMemberStr);
}
}
@ -694,8 +696,8 @@ ${navigator.userAgent}`);
document.body.classList.add('guide-mod');
}
const helpLink = controlBox.querySelector(".help-link");
if (location.hostname.includes("gitee")) { helpLink.hostname = "gitee.com"; }
//const helpLink = controlBox.querySelector(".help-link");
//if (location.hostname.includes("gitee")) { helpLink.hostname = "gitee.com"; }
//▼添加语言列表开始
const langSelectDom = controlBox.querySelector(".languages");
@ -1121,83 +1123,85 @@ function inputFromQrString(string)
re.message = "错误的 JSON 格式 | The illegal JSON format";
}
}
else if (/^http/i.test(string))
else if (/^(https?|file):\/\//i.test(string))
{
try{
let url = new URL(string);
if (url.searchParams.get('d'))
{
re.code = 1;
re.message = "发现队伍数据 | Formation data founded";
let url = new URL(string);
if (url.searchParams.get('d'))
{
try{
let jo = {
d: JSON.parse(url.searchParams.get('d')),
s: url.searchParams.get('s'),
}
re.code = 1;
re.message = "发现队伍数据 | Formation data founded";
re.url = ObjToUrl(jo);
}else
}catch(e)
{
re.code = 100;
re.message = "无队伍数据 | No formation data";
re.code = 112;
re.message = "错误的 网址 格式 | The illegal URL format";
}
}catch(e)
}
else
{
re.code = 112;
re.message = "错误的 网址 格式 | The illegal URL format";
re.code = 100;
re.message = "无队伍数据 | No formation data";
}
}
else if(/^\d[\d\-\w,\]}]+}/.test(string))
{ //PDC
re.code = 2;
re.message = "发现 PDC 二维码 | PDC QR code found";
const pdcFotmation = readPDC(string);
const newFotmation = pdcFotmationToPdfFotmation(pdcFotmation);
re.message = "发现 PDC 格式 | PDC format found";
const newFotmation = pdcFotmationToPdfFotmation(string);
re.url = ObjToUrl(newFotmation.getPdfQrObj(false));
}
else
{
re.code = 110;
re.message = "不是 JSON 格式 | Not JSON format";
re.message = "不支持的格式 | Unsupported format";
}
return re;
}
//解析PDC的数据
function readPDC(string)
function pdcFotmationToPdfFotmation(inputString)
{
let teamsStr = string.split("]");
let baseInfo = teamsStr.shift().split(",");
let teamsArr = teamsStr.map(teamStr=>
{
let membersStr = teamStr.split("}").filter(Boolean);
const team = {
badge: parseInt(membersStr.shift(),10) //徽章是10进制
}
team.members = membersStr.map(memberStr=>{
let memberArr = memberStr.split(",").map(valueStr=>{
let idx = parseInt(valueStr.substr(0,2),36);
let value = valueStr.substr(2);
if (idx !== 2)
{
value = parseInt(value,36);
}else
{
value = value.split(/(\w{2})/).filter(Boolean).map(v=>parseInt(v,36));
}
return [idx, value];
function readPDC(string)
{
let teamsStr = string.split(']');
let baseInfo = teamsStr.shift().split(',');
let teamsArr = teamsStr.map(teamStr=>
{
let membersStr = teamStr.split('}').filter(Boolean);
const team = {
badge: parseInt(membersStr.shift(),10) //徽章是10进制
}
team.members = membersStr.map(memberStr=>{
let memberArr = memberStr.split(',').map(valueStr=>{
let idx = parseInt(valueStr.substr(0,2),36);
let value = valueStr.substr(2);
if (idx !== 2)
{
value = parseInt(value,36);
}else
{
value = value.split(/(\w{2})/).filter(Boolean).map(v=>parseInt(v,36));
}
return [idx, value];
});
return new Map(memberArr);
});
return new Map(memberArr);
});
return team;
return team;
}
);
let pdcFotmation = {
version: parseInt(baseInfo[0],10),
teamCount: parseInt(baseInfo[1],10)+1,
teams: teamsArr
}
);
let pdcFotmation = {
version: parseInt(baseInfo[0],10),
teamCount: parseInt(baseInfo[1],10)+1,
teams: teamsArr
return pdcFotmation;
}
return pdcFotmation;
}
function pdcFotmationToPdfFotmation(pdcFotmation)
{
let pdcFotmation = readPDC(inputString);
const f = new Formation(pdcFotmation.teamCount, pdcFotmation.teamCount == 2 ? 5 : 6);
if (pdcFotmation.teamCount == 2)
{
@ -1234,8 +1238,9 @@ function pdcFotmationToPdfFotmation(pdcFotmation)
a.plus[0] = member.get(11) || 0;
a.plus[1] = member.get(12) || 0;
a.plus[2] = member.get(13) || 0;
m.awoken = member.get(7) >= 0 ? member.get(7) : Cards[m.id].awakenings.length;
a.awoken = member.get(14) >= 0 ? member.get(14) : Cards[a.id].awakenings.length;
a.awoken = member.get(14) >= 0 ? member.get(14) : (a.id > 0 ? Cards[a.id].awakenings.length : 0);
m.sawoken = member.get(8) ? Cards[m.id].superAwakenings.indexOf(member.get(8)) : null;
});
});
@ -1299,7 +1304,8 @@ function initialize() {
readBox.videoBox.classList.add(className_displayNone);
this.classList.remove(className_displayNone);
this.refreshQrCode(formation.getQrStr(saveBox.qrDataType.find(radio=>radio.checked).value));
let qrTypeRadio = saveBox.qrDataType.find(radio=>radio.checked);
if (qrTypeRadio) qrTypeRadio.onclick(); //打开二维码窗口就先产生二维码
};
qrCodeFrame.hide = function(){
qrcodeReader.reset();
@ -1311,6 +1317,7 @@ function initialize() {
const qrContent = qrCodeFrame.content = qrCodeFrame.querySelector(".mask-content");
const qrReadBox = qrContent.readBox = qrContent.querySelector(".read-qr-box");
const qrSaveBox = qrContent.saveBox = qrContent.querySelector(".save-qr-box");
qrReadBox.readString = qrReadBox.querySelector(".read-string");
qrReadBox.readQrCamera = qrReadBox.querySelector(".read-qr-camera");
qrReadBox.readQrFile = qrReadBox.querySelector(".read-qr-file");
qrReadBox.filePicker = qrReadBox.querySelector(".file-select");
@ -1318,11 +1325,35 @@ function initialize() {
qrReadBox.video = qrReadBox.querySelector("#video");
qrReadBox.videoBox = qrReadBox.querySelector(".video-box");
qrReadBox.sourceSelect = qrReadBox.querySelector("#sourceSelect");
qrReadBox.qrStr = qrReadBox.querySelector(".string-input");
qrReadBox.readString.onclick = function()
{
let inputResult = inputFromQrString(qrReadBox.qrStr.value);
if (inputResult.code < 100)
{
qrReadBox.info.textContent = 'Code ' + inputResult.code + ':' + inputResult.message;
const newLink = document.createElement("a");
newLink.className = "formation-from-string";
newLink.href = inputResult.url;
newLink.target = "_blank";
qrReadBox.info.appendChild(newLink);
}else
{
qrReadBox.info.textContent = 'Code ' + inputResult.code + ':' + inputResult.message;
}
}
qrSaveBox.qrImage = qrSaveBox.querySelector(".qr-code-image");
qrSaveBox.qrStr = qrSaveBox.querySelector(".string-output");
qrSaveBox.qrStr.onchange = function()
{
qrCodeFrame.refreshQrCode(this.value);
}
qrSaveBox.qrDataType = Array.from(qrSaveBox.querySelectorAll(".qr-data-type-radio"));
qrSaveBox.qrDataType.forEach(radio=>radio.onclick = function(){
qrCodeFrame.refreshQrCode(formation.getQrStr(this.value));
let qrstr = formation.getQrStr(this.value);
qrSaveBox.qrStr.value = qrstr;
qrSaveBox.qrStr.onchange();
});
qrSaveBox.saveQrImg = qrSaveBox.querySelector(".save-qr-img");
@ -1395,18 +1426,9 @@ function initialize() {
const file = myFiles[0];
loadImage(URL.createObjectURL(file)).then(function(img) {
qrcodeReader.decodeFromImage(img).then((result) => {
console.log('Found QR code!', result);
let inputResult = inputFromQrString(result.text);
qrReadBox.info.textContent = 'Code ' + inputResult.code + ':' + inputResult.message;
if (inputResult.code < 100)
{
const newLink = document.createElement("a");
newLink.className = "formation-from-qrcode";
newLink.href = inputResult.url;
newLink.target = "_blank";
qrReadBox.info.appendChild(newLink);
}
console.debug('Found QR code!', result);
qrReadBox.qrStr.value = result.text;
qrReadBox.readString.onclick();
}).catch((err) => {
console.error(err);
if (err) {
@ -1423,9 +1445,9 @@ function initialize() {
}
}
})
console.log(`Started decode for image from ${img.src}`)
console.debug(`Started decode for image from ${img.src}`)
}, function(err) {
console.log(err);
console.debug(err);
});
}
@ -1439,41 +1461,27 @@ function initialize() {
}
}else
{
function scanContinuously()
{
qrcodeReader.decodeFromInputVideoDeviceContinuously(selectedDeviceId, 'video', (result, err) => {
if (result) {
// properly decoded qr code
console.log('Found QR code!', result);
let inputResult = inputFromQrString(result.text);
if (inputResult.code < 100)
{ //成功后就关闭
qrReadBox.readQrCamera.onclick();
qrReadBox.info.textContent = 'Code ' + inputResult.code + ':' + inputResult.message;
const newLink = document.createElement("a");
newLink.className = "formation-from-qrcode";
newLink.href = inputResult.url;
newLink.target = "_blank";
qrReadBox.info.appendChild(newLink);
}else
{
qrReadBox.info.textContent = 'Code ' + inputResult.code + ':' + inputResult.message;
}
console.debug('Found QR code!', result);
qrReadBox.qrStr.value = result.text;
qrReadBox.readString.onclick();
}
if (err) {
if (err instanceof ZXing.NotFoundException) {
console.log('No QR code found.')
console.debug('No QR code found.')
}
if (err instanceof ZXing.ChecksumException) {
console.log('A code was found, but it\'s read value was not valid.')
console.debug('A code was found, but it\'s read value was not valid.')
}
if (err instanceof ZXing.FormatException) {
console.log('A code was found, but it was in a invalid format.')
console.debug('A code was found, but it was in a invalid format.')
}
}
});
@ -2339,6 +2347,52 @@ function initialize() {
});
};
//特殊搜索部分
const s_specialDiv = searchBox.querySelector(".special-div");
const specialAdd = s_specialDiv.querySelector(".special-add");
const specialClear = s_specialDiv.querySelector(".special-clear");
const specialFilterUl = s_specialDiv.querySelector(".special-filter-list");
const specialFilterFirstLi = specialFilterUl.querySelector("li");
const specialFirstSelect = specialFilterFirstLi.querySelector(".special-filter");
function newSpecialSearchOption(func, idx1, idx2)
{
const funcName = returnMonsterNameArr(func, currentLanguage.searchlist, currentDataSource.code)[0];
return new Option(funcName + (func.addition ? " " + localTranslating.addition_display : ""), idx1 + (idx2 != null ? "|" + idx2 : ""));
}
specialSearchFunctions.forEach((sfunc,idx)=>{
if (sfunc.group)
{
const groupName = returnMonsterNameArr(sfunc, currentLanguage.searchlist, currentDataSource.code)[0];
const optgroup = specialFirstSelect.appendChild(document.createElement("optgroup"));
optgroup.label = groupName;
if (sfunc.functions)
{
sfunc.functions.forEach((_sfunc,_idx)=>{
optgroup.appendChild(newSpecialSearchOption(_sfunc, idx, _idx));
});
}
}else
{
specialFirstSelect.options.add(newSpecialSearchOption(sfunc, idx));
}
});
specialAdd.onclick = function()
{
specialFilterUl.appendChild(specialFilterFirstLi.cloneNode(true));
}
specialAdd.onclick(); //先运行一次产生两个
specialClear.onclick = function()
{
/*for (let ci = specialFilterUl.children.length-1; ci>0; ci--)
{
specialFilterUl.children[ci].remove();
}*/
specialFilterUl.innerHTML = "";
specialFilterUl.appendChild(specialFilterFirstLi);
specialFirstSelect.selectedIndex = 0;
}
const s_controlDiv = searchBox.querySelector(".control-div");
const searchStart = s_controlDiv.querySelector(".search-start");
const searchClose = s_controlDiv.querySelector(".search-close");
@ -2394,7 +2448,7 @@ function initialize() {
showAbilitiesWithAwoken: s_add_show_abilities_with_awoken.checked,
customAddition: typeof customAdditionalFunction == "function" ?
[customAdditionalFunction] :
(Array.isArray(customAdditionalFunction) ? customAdditionalFunction : null)
(Array.isArray(customAdditionalFunction) ? customAdditionalFunction : [])
};
searchMonList.originalHeads = searchArr.map(card => createCardHead(card.id, additionalOption));
searchMonList.customAddition = additionalOption.customAddition;
@ -2426,6 +2480,7 @@ function initialize() {
s_add_show_abilities_with_awoken.onchange = reShowSearch;
const startSearch = function(cards, customAdditionalFunction) {
if (customAdditionalFunction == undefined) customAdditionalFunction = [];
const attr1Filter = s_attr1s.filter(returnCheckedInput).map(returnInputValue);
const attr2Filter = s_attr2s.filter(returnCheckedInput).map(returnInputValue);
let attr1, attr2;
@ -2456,7 +2511,7 @@ function initialize() {
num: parseInt(btn.getAttribute("data-awoken-count"), 10)
};
});
const searchResult = searchCards(cards,
let searchResult = searchCards(cards,
attr1, attr2,
s_fixMainColor.checked,
typesFilter,
@ -2467,7 +2522,20 @@ function initialize() {
s_awokensEquivalent.checked,
s_includeSuperAwoken.checked
);
//console.log("搜索结果", searchResult);
//进行特殊附加搜索
const specialFilters = Array.from(specialFilterUl.querySelectorAll(".special-filter")).map(select=>{
const indexs = select.value.split("|").map(Number);
const funcObj = indexs.length > 1 ? specialSearchFunctions[indexs[0]].functions[indexs[1]] : specialSearchFunctions[indexs[0]];
return funcObj;
});
searchResult = specialFilters.reduce((pre,funcObj)=>
{
if (!funcObj) return pre;
if (funcObj.addition) customAdditionalFunction.push(funcObj.addition); //如果有附加显示,则添加到列表
return funcObj.function(pre); //结果进一步筛选
}, searchResult);
showSearch(searchResult, customAdditionalFunction);
};
searchBox.startSearch = startSearch;
@ -2488,6 +2556,7 @@ function initialize() {
awokenClear.onclick();
sawokenClear.onclick();
specialClear.onclick();
searchMonList.originalHeads = null;
searchResultCount.setAttribute("data-search-result-count", 0);

View File

@ -772,6 +772,13 @@ var formation = new Formation(teamsCount,6);
<li class="awoken-count"><input type="checkbox" class="sawoken-check" name="types" value="81" id="search-awoken-81" /><label class="awoken-icon" data-awoken-icon="81" for="search-awoken-81"></label><!--5色--></li>
</ul>
</div>
<div class="special-div">
<button class="special-add brown-button"></button>
<button class="special-clear brown-button"></button>
<ul class="special-filter-list">
<li><select class="special-filter"></select></li>
</ul>
</div>
<div class="control-div"><!--控制栏-->
<button class="search-start"><!--开始搜索--></button>
<button class="search-close"><!--关闭搜索--></button>
@ -1007,6 +1014,10 @@ var formation = new Formation(teamsCount,6);
<div class="mask-content">
<div class="read-qr-box">
<div class="action-button-box">
<div class="read-text-box">
<input class="string-input" type="text"/>
<button class="read-string brown-button"><!--读字符串--></button>
</div>
<button class="read-qr-camera brown-button"><!--相机扫--></button>
<button class="read-qr-file brown-button"><!--读文件--></button>
<input type="file" accept="image/*" class="file-select display-none">
@ -1022,6 +1033,7 @@ var formation = new Formation(teamsCount,6);
<li><input type="radio" name="qr-data-type" class="qr-data-type-radio" value="pdf" id="qr-data-type-pdf" checked/><label for="qr-data-type-pdf"></label></li><!--本程序
--><li><input type="radio" name="qr-data-type" class="qr-data-type-radio" value="pdc" id="qr-data-type-pdc" /><label for="qr-data-type-pdc"></label></li><!--PDC-->
</ul>
<input class="string-output" type="text" readonly/>
<div class="qr-box"><img class="qr-code-image" /></div>
<a download="" class="save-qr-img brown-button"><!--保存QR 图片--></a>
</div>

View File

@ -1374,7 +1374,8 @@ icon.inflicts::after
margin: 0.5px !important;
}
.awoken-preview .awoken-icon,
.custom-addition .awoken-icon
.custom-addition .awoken-icon,
.custom-addition .type-icon
{
filter: unset;
transform: scale(0.75);
@ -1687,7 +1688,9 @@ icon.inflicts::after
}
.search-box .rare-clear::before,
.search-box .awoken-clear::before,
.search-box .sawoken-clear::before
.search-box .sawoken-clear::before,
.search-box .special-add::before,
.search-box .special-clear::before
{
width: 80px;
background-size: 100px 100px;
@ -1698,7 +1701,9 @@ icon.inflicts::after
padding: 0;
vertical-align: top;
}
.search-box .sawoken-clear::before
.search-box .sawoken-clear::before,
.search-box .special-add::before,
.search-box .special-clear::before
{
width: 50px;
font-size: 14px;
@ -1831,6 +1836,17 @@ icon.inflicts::after
margin-top: 5px;
}
.special-filter-list>li{
margin-bottom: 5px;
margin-right: 3px;
}
.special-filter-list select{
font-size: 20px;
max-width: 100%;
box-sizing: border-box;
}
.control-div button{
font-size: 20px;
}
@ -2938,6 +2954,24 @@ table .orb-icon
{
color: white;
}
#qr-code-frame .string-input
{
width: calc(100% - 170px);
box-sizing: border-box;
}
#qr-code-frame .string-output
{
width: calc(100% - 20px);
}
#qr-code-frame .qr-box
{
margin: 5px;
}
.save-qr-box
{
padding-bottom: 10px;
}
.read-qr-box::before,
.save-qr-box::before
{
@ -2954,7 +2988,7 @@ table .orb-icon
font-size: 20px;
padding: 5px;
}
.formation-from-qrcode
.formation-from-string
{
font-size: 1.5em;
display: block;

View File

@ -1705,6 +1705,13 @@ var formation = new Formation(teamsCount,6);
<li class="awoken-count"><input type="checkbox" class="sawoken-check" name="types" value="81" id="search-awoken-81" /><label class="awoken-icon" data-awoken-icon="81" for="search-awoken-81"></label><!--5色--></li>
</ul>
</div>
<div class="special-div">
<button class="special-add brown-button"></button>
<button class="special-clear brown-button"></button>
<ul class="special-filter-list">
<li><select class="special-filter"></select></li>
</ul>
</div>
<div class="control-div"><!--控制栏-->
<button class="search-start"><!--开始搜索--></button>
<button class="search-close"><!--关闭搜索--></button>
@ -1940,6 +1947,10 @@ var formation = new Formation(teamsCount,6);
<div class="mask-content">
<div class="read-qr-box">
<div class="action-button-box">
<div class="read-text-box">
<input class="string-input" type="text"/>
<button class="read-string brown-button"><!--读字符串--></button>
</div>
<button class="read-qr-camera brown-button"><!--相机扫--></button>
<button class="read-qr-file brown-button"><!--读文件--></button>
<input type="file" accept="image/*" class="file-select display-none">
@ -1955,6 +1966,7 @@ var formation = new Formation(teamsCount,6);
<li><input type="radio" name="qr-data-type" class="qr-data-type-radio" value="pdf" id="qr-data-type-pdf" checked/><label for="qr-data-type-pdf"></label></li><!--本程序
--><li><input type="radio" name="qr-data-type" class="qr-data-type-radio" value="pdc" id="qr-data-type-pdc" /><label for="qr-data-type-pdc"></label></li><!--PDC-->
</ul>
<input class="string-output" type="text" readonly/>
<div class="qr-box"><img class="qr-code-image" /></div>
<a download="" class="save-qr-img brown-button"><!--保存QR 图片--></a>
</div>