「javascript/skilllist」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
#html2(){{{{{
<div style="display: none;" id="sk-inlinestyles"><!--
/************** 入力フォーム ***************/
#skilllist {
display: none;
}
#skform {
padding-right: 10px;
position: relative;
display: none;
min-width: 680px;
}
.skform-title {
border-bottom: 5px solid #acf;
color: black;
font-size: 16px;
line-height: 20px;
font-weight: bold;
}
#skform-expand {
display: none;
}
#skform-expand + label {
display: inline-block;
box-sizing: border-box;
width: calc(135px * .75);
text-align: center;
height: calc(51px * .75);
line-height: 20px;
vertical-align: middle;
margin-bottom: 2px;
line-height: calc(51px * .75);
cursor: pointer;
color: white;
background: url("//w.atwiki.jp/f_go?cmd=upload&act=open&pageid=2993&file=button.png") no-repeat left top / calc(135px * .75);
}
#skform-expand + label:hover {
background:
linear-gradient( to bottom, rgba(255,255,202,.2), rgba(255,255,2,.8)),
url("//w.atwiki.jp/f_go?cmd=upload&act=open&pageid=2993&file=button.png") no-repeat left top / calc(135px * .75);
}
#skform-expand:checked + label {
background-position: left center;
}
#skform-expand:checked + label:hover {
background:
linear-gradient( to bottom, rgba(255,255,202,.2), rgba(255,255,2,.8)),
url("//w.atwiki.jp/f_go?cmd=upload&act=open&pageid=2993&file=button.png") no-repeat left center / calc(135px * .75);
}
#skform > ul {
margin: 0px;
padding: 0px;
}
#skform > ul > li {
padding: 5px 0 0 0;
border-bottom: 1px solid #eee;
position: relative;
list-style-type: none;
list-style-image: none;
list-style-position: outside;
}
#skform > ul > li:nth-of-type(n + 2) {
display: none;
}
#skform > ul > li:first-child,
#skform > ul > li:last-child {
border-bottom: 1px solid #777;
}
.skform-caption {
width: 100px;
margin-top: 3px;
display: inline-block;
padding: 3px 3px 3px 10px;
font-weight: bold;
vertical-align: top;
}
#skform > ul > li > label:first-child {
float: left;
}
/* ローディング中 */
#skform-overlay,
#skform-wikiedit {
height: 100%;
width: 100%;
display: none;
position: absolute;
z-index: 10;
text-align: center;
}
#skform-overlay {
background: #000;
opacity: .5;
}
#skform-wikiedit {
background: rgba(0,0,0,.5);
}
#skform-fou {
width: 120px;
height: 88px;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
position: absolute;
z-index: 11;
opacity: .8;
}
#skform-wikiedit textarea {
width: 75%;
height: 200px;
padding: 10px;
display: inline-block;
}
.wikiedit-fotter {
background: #acf;
border-top: 1px solid #999;
padding: 8px;
}
/* 効果 multiSelect */
.ms-container{
background: transparent url('//w.atwiki.jp/f_go?cmd=upload&act=open&pageid=2993&file=switch.png') no-repeat 50% 50%;
width: 500px;
}
.ms-container:after{
content: ".";
display: block;
height: 0;
line-height: 0;
font-size: 0;
clear: both;
min-height: 0;
visibility: hidden;
}
.ms-container .ms-selectable, .ms-container .ms-selection{
background: #fff;
color: #555555;
float: left;
width: 45%;
}
.ms-container .ms-selection{
float: right;
}
.ms-container .ms-list,
input.search-input,
.skform-input,
.skform-input2
{
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
-moz-transition: border linear 0.2s, box-shadow linear 0.2s;
-ms-transition: border linear 0.2s, box-shadow linear 0.2s;
-o-transition: border linear 0.2s, box-shadow linear 0.2s;
transition: border linear 0.2s, box-shadow linear 0.2s;
border: 1px solid #ccc;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
line-height: 34px;
height: 34px;
}
.ms-container .ms-list {
position: relative;
height: 150px;
padding: 0;
overflow-y: auto;
}
.ms-container .ms-list.ms-focus,
input.search-input:focus,
.skform-input:focus,
.skform-input2:focus,
.skform-checkbox-label:hover,
.skform-styles input[type=radio] + label:hover {
border-color: rgba(82, 168, 236, 0.8);
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
outline: 0;
outline: thin dotted \9;
}
.ms-container ul{
margin: 0;
list-style-type: none;
padding: 0;
}
.ms-container .ms-optgroup-container{
width: 100%;
}
.ms-container .ms-optgroup-label{
margin: 0;
padding: 5px 0px 0px 5px;
cursor: pointer;
color: #999;
font-size: 0.85em;
}
.ms-container .ms-selectable li.ms-elem-selectable,
.ms-container .ms-selection li.ms-elem-selection{
border-bottom: 1px #eee solid;
padding: 2px 10px;
color: #555;
font-size: 14px;
}
.ms-container .ms-selectable li.ms-hover,
.ms-container .ms-selection li.ms-hover{
cursor: pointer;
color: #fff;
text-decoration: none;
background-color: #08c;
}
.ms-container .ms-selectable li.disabled,
.ms-container .ms-selection li.disabled{
background-color: #eee;
color: #aaa;
cursor: text;
}
.ms-list {
-webkit-tap-highlight-color:rgba(0,0,0,0);
}
.skform-effect-footer {
text-align: center;
padding: 8px 0 0 0;
}
input.search-input {
width:100%;
}
/* テキスト入力共通 */
input.search-input,
.skform-input,
.skform-input2 {
box-sizing: border-box;
-moz-box-sizing: border-box;
margin-bottom: 5px;
padding: 4px 6px;
font-size: 14px;
color: #555;
vertical-align: middle;
}
/* HP ATK 欄 */
#skform input[aria-invalid="true"] {
border: 1px solid #f00;
box-shadow: 0 0 4px 0 f00;
}
.skform-range {
display: inline-block;
width: 22px;
box-sizing: border-box;
-moz-box-sizing: border-box;
text-align: center;
vertical-align: middle;
line-height: 20px;
padding: 6px 0 11px 0;
}
.skform-input {
width: 100px;
}
/* データ欄、使用者欄 */
.skform-input2 {
width: 222px;
}
.skform-hint {
font-size: 11px;
display: inline-block;
margin-left: 5px;
}
/* レアリティ、対象、種類 */
.skform-checkbox-label,
.skform-styles input[type=radio] + label {
background-color: #e0e0e0;
background-image: -webkit-linear-gradient(top, #f9f9f9, #e0e0e0);
background-image: -moz-linear-gradient(top, #f9f9f9, #e0e0e0);
background-image: -o-linear-gradient(top, #f9f9f9, #e0e0e0);
background-image: -ms-linear-gradient(top, #f9f9f9, #e0e0e0);
background-image: linear-gradient(to bottom, #f9f9f9, #e0e0e0);
}
.skform-checkbox-label:active,
.skform-styles input[type=radio] + label:active {
background-color: #f9f9f9;
background-image: -webkit-linear-gradient(top, #e0e0e0, #f9f9f9);
background-image: -moz-linear-gradient(top, #e0e0e0, #f9f9f9);
background-image: -o-linear-gradient(top, #e0e0e0, #f9f9f9);
background-image: -ms-linear-gradient(top, #e0e0e0, #f9f9f9);
background-image: linear-gradient(to bottom, #e0e0e0, #f9f9f9);
}
.skform-checkbox:checked + .skform-checkbox-label:active {
background: #26A;
}
.skform-checkbox-label {
cursor: pointer;
white-space: nowrap;
display: inline-block;
font-size:14px;
width: 78px;
text-align:center;
color: black;
padding: 4px 18px 4px 12px;
margin-bottom: 5px;
border: 1px solid #afafaf;
border-radius: 5px;
-ms-user-select: none; /* IE 10+ */
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;
position: relative;
}
.skform-checkbox-label::before {
content: "";
float: left;
display: block;
width: 16px;
height: 16px;
padding-right: 5px;
background: url('//w.atwiki.jp/f_go?cmd=upload&act=open&pageid=2993&file=tick-unchecked.png') no-repeat left 2px / contain;
}
.skform-checkbox {
display: none;
}
.skform-checkbox:checked + .skform-checkbox-label,
.skform-styles input[type=radio]:checked + label {
background: #148;
background-image: none;
color: white;
}
.skform-checkbox:checked + .skform-checkbox-label::before {
background: url('//w.atwiki.jp/f_go?cmd=upload&act=open&pageid=2993&file=tick-checked.png') no-repeat left 1px / contain;
}
/* 効果欄フッターのボタン、入力フォーム最下部のボタン */
.skform-buttons {
text-align: center;
padding: 5px 0;
background-color: #acf;
}
.skform-buttons button {
width: 120px;
}
.skform-effect-footer button,
.skform-buttons button {
padding: 4px 12px;
cursor: pointer;
-ms-user-select: none;
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;
color: black;
}
/* 種類欄のラジオボタン*/
.skform-kindgroup {
width: 568px;
display: inline-block;
}
.skform-styles {
letter-spacing: -.4em;
}
.skform-styles > * {
letter-spacing: normal;
}
.skform-styles input[type=radio]:first-child + label {
border-radius: 1000px 0 0 1000px;
border-left: 1px solid #afafaf;
}
.skform-styles input[type=radio] + label:last-child {
border-radius: 0 1000px 1000px 0;
border-right: 1px solid #afafaf;
}
.skform-styles input[type=radio] {
display: none;
}
.skform-styles input[type=radio] + label {
display: inline-block;
padding: 4px 12px;
cursor: pointer;
margin-bottom: 5px;
-ms-user-select: none;
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;
line-height: 22px;
text-align: center;
width: 80px;
border-left: 1px solid rgba(255,255,255,.5);
border-top: 1px solid #afafaf;
border-bottom: 1px solid #afafaf;
-moz-box-shadow: 0px 0px 1px rgba(0,0,0,0.5), inset 0px 0px 2px rgba(255,255,255,1);
-webkit-box-shadow: 0px 0px 1px rgba(0,0,0,0.5), inset 0px 0px 2px rgba(255,255,255,1);
box-shadow: 0px 0px 1px rgba(0,0,0,0.5), inset 0px 0px 2px rgba(255,255,255,1);
}
.skform-styles input[type=radio]:checked + label {
outline: 0;
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.5), inset 0 2px 4px rgba(0,0,0,0.15);
-moz-box-shadow: 0 1px 3px rgba(0,0,0,0.5), inset 0 2px 4px rgba(0,0,0,0.15);
box-shadow: 0 1px 3px rgba(0,0,0,0.5), inset 0 2px 4px rgba(0,0,0,0.15);
}
/* 横スクロール拡張 */
.hscroll-expand {
overflow: visible!important;
width: max-content;
width: -webkit-max-content;
width: -moz-max-content;
margin-left: 252px!important;
}
#wikibody.hscroll-expand-uk {
width: max-content;
}
table.hscroll-expand-uk {
overflow: visible!important;
}
/* ソート */
.column-order-container {
height: 25px;
color: #333;
border: 1px solid #777;
font-size: 12px;
padding: 0;
margin: 5px 0;
white-space: nowrap;
vertical-align: middle;
line-height: 25px;
-ms-user-select: none;
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;
text-align: right;
list-style-type: none;
list-style-image: none;
list-style-position: outside;
letter-spacing: -.4em;
-webkit-tap-highlight-color:rgba(0,0,0,0);
}
.column-order-head {
float: left;
width: 23px;
height: 25px;
background-image: linear-gradient(to bottom, #f9f9f9, #e0e0e0);
margin: 5px 0;
color: #333;
text-align: center;
border-color: #777;
border-style: solid;
border-width: 1px 3px 1px 1px;
-ms-user-select: none;
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;
-webkit-tap-highlight-color:rgba(0,0,0,0);
}
.column-order-head > span {
font-size: 10px;
display: inline-block;
-ms-writing-mode: tb-lr;
-webkit-writing-mode: vertical-lr;
-o-writing-mode: vertical-lr;
writing-mode: vertical-lr;
height: 23px;
}
.column-order {
display: inline-block;
cursor: move;
z-index: 5;
position: relative;
background: linear-gradient(to bottom, #f9f9f9, #e0e0e0) no-repeat center right;
padding: 0 0 0 4px;
border: 1px solid #CCC;
margin: -1px;
letter-spacing: normal;
}
.column-order > span {
font-size: 10px;
height: 25px;
display: block;
float: left;
}
.column-order > .sksort:after {
content: url(data:image/gif;base64,R0lGODlhFQAJAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAkAAAIXjI+AywnaYnhUMoqt3gZXPmVg94yJVQAAOw==);
white-space: pre;
right: 0;
}
.column-order[data-column$=asc] > .sksort:after {
content: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7);
}
.column-order[data-column$=desc] > .sksort:after {
content: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7);
}
.chosen, .drag {
color: #fff;
background-image: none;
background-color: #148;
}
.ghost {
outline: 3px dashed hsla(0, 0%, 0%, 0.5);
outline-offset: -6px;
color: white;
background-color: white;
}
.ghost span::after { opacity: 0; }
/************** テーブル ***************/
#sktable tbody tr:nth-child(odd) {background-color: white;}
#sktable tbody tr:nth-child(even) {background-color: #F5FFFA;}
#sktable {
text-align: center;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
#sktable td {
padding: 5px 0;
border: 1px solid #ccc;
}
#sktable th {
word-wrap: break-word;
border: 1px solid #ccc;
padding: 0;
}
/* 固定幅テーブル */
#sktable table {
display: table!important;
table-layout: fixed;
border: 1px solid #CCC;
border-collapse: collapse;
border-spacing:0;
width: 512px; /* dummy jsでcolの合計に上書き */
margin: 15px 0;
}
.celist .col-CEType,
.speccomp .col-CEType {
width: 200px!important;
}
.col-CEType {
width: 38px;
}
.col-SkillName,
.col-OwnerNames,
.col-BondCEOwner,
.col-EventOnly {
width: 170px;
}
.col-Owners {
width: 55px;
}
.col-Rare,
.col-Cost,
.col-CT,
.col-Sign,
.col-Demerit {
width: 20px;
}
.col-NobleTraits,
.col-HPBase,
.col-ATKBase,
.col-HPMax,
.col-ATKMax,
.col-BondPt {
width: 70px;
}
.col-Target,
.col-Target2 {
width: 70px;
}
.col-Grow {
width: 43px;
}
.col-ApplyUser {
width: 77px;
}
.col-Value0,.col-Value1,.col-Value2,.col-Value3,.col-Value4,.col-Value5,.col-Value6,.col-Value7,.col-Value8,.col-Value9 {
width: 54px;
}
.col-PreText {
width: 150px;
}
.col-MainText {
width: 150px;
}
.col-PostText {
width: 120px;
}
.hscroll-expand-uk .col-PreText,
.hscroll-expand-uk .col-MainText {
width: 200px;
}
.hscroll-expand-uk .col-PostText {
width: 150px;
}
.hscroll-expand-uk .col-Value0,
.hscroll-expand-uk .col-Value1,
.hscroll-expand-uk .col-Value2,
.hscroll-expand-uk .col-Value3,
.hscroll-expand-uk .col-Value4,
.hscroll-expand-uk .col-Value5,
.hscroll-expand-uk .col-Value6,
.hscroll-expand-uk .col-Value7,
.hscroll-expand-uk .col-Value8,
.hscroll-expand-uk .col-Value9 {
width: 65px;
}
/* 効果欄は折り返しさせない */
.MainText,
.PostText,
.Value0,.Value1,.Value2,.Value3,.Value4,.Value5,.Value6,.Value7,.Value8,.Value9
{
white-space: nowrap;
}
/* テーブルヘッダー色 */
.ce-head {background-color: #e6e6fa;}
.sc-head {background-color: #cfc;}
.raw-head {background-color: orange;}
.detail-head {background-color: #cc2;}
/* スキル所有者リンク */
.owner-mini {
font-size: 10px;
line-height: 15px;
}
/* tdの効果同士の間隔調整 */
.effect-outer {
margin: 5px auto;
padding: 3px 0;
}
/* 備考欄 */
.ce-CEType {
line-height: normal;
font-size: 11px;
}
/************** 雑多な装飾 ***************/
/* スキル種別アイコン */
.SkillName {
position: relative;
padding-top: 15px!important;
}
.SkillName:before {
content: "";
width:100px;
position:absolute;
top: 0;
left: 0;
height:0;
border-width: 12px 12px 0px 0px;
border-style: solid;
}
.SkillName:after {
line-height:12px;
font-size: 10px;
color: white;
position:absolute;
padding-left:5px;
top: 0;
left: 0;
}
.ribbon-craft:before,
.ribbon-master:before,
.ribbon-skill:before,
.ribbon-class:before { border-color: gray transparent transparent transparent; }
.ribbon-arts-solo:before,
.ribbon-arts-all:before,
.ribbon-arts-support:before { border-color: blue transparent transparent transparent; }
.ribbon-buster-solo:before,
.ribbon-buster-all:before,
.ribbon-buster-support:before { border-color: red transparent transparent transparent; }
.ribbon-quick-solo:before,
.ribbon-quick-all:before,
.ribbon-quick-support:before { border-color: #080 transparent transparent transparent; }
.ribbon-craft:after {content: "概念礼装"; }
.ribbon-master:after {content: "マスタースキル";}
.ribbon-class:after {content: "クラススキル";}
.ribbon-skill:after {content: "サーヴァントスキル";}
.ribbon-arts-solo:after { content: "単体 Arts"; }
.ribbon-arts-all:after { content: "全体 Arts"; }
.ribbon-arts-support:after { content: "補助 Arts"}
.ribbon-buster-solo:after { content: "単体 Buster"; }
.ribbon-buster-all:after { content: "全体 Buster"; }
.ribbon-buster-support:after { content: "補助 Buster"}
.ribbon-quick-solo:after { content: "単体 Quick"; }
.ribbon-quick-all:after { content: "全体 Quick"; }
.ribbon-quick-support:after { content: "補助 Quick"}
/* 最大開放背景色 */
.ce-Value1 {
background-color: #fff8dc;
}
.star {
color: #c0972d;
font-weight: bold;
}
.bondpt { font-weight:bold; }
.namehead-rare {
padding-left: 5px;
}
.namehead {
white-space: nowrap;
margin-right: 5px;
text-align: left;
}
.namebody {
margin: 3px 0;
}
.gainen_atk,
.gainen_hp,
.namehead-no {
font-weight: bold;
display: inline-block;
width: 50px;
}
.gainen_atk {
color: #ff000c;
text-align: center;
}
.gainen_hp {
color: #0024ff;
text-align: center;
}
.nobleinfo {
box-shadow: inset -1px 3px 1px #ccc;
background-color: rgba(231,236,240,.2);
border: 1px solid #ccc;
padding: 5px;
margin: 0 17px;
}
.Buster { color: red; }
.Arts { color: blue; }
.Quick { color: #080; }
/* 効果欄ハイライト */
.not-highlight {
opacity: .15;
}
/* reverse highlight */
.reverse-highlight td > div.not-highlight {
opacity: .9;
}
.reverse-highlight td:nth-of-type(n + 4) > div:not(.not-highlight) {
font-weight: bold;
background-color: rgba(0,132,0,.05);
}
/* 対象 短縮表記用アイコン */
.target-icon {
white-space: nowrap;
font-weight: bold;
padding: 2px 3px;
border: 1px solid #999;
width: 65px;
box-sizing: border-box;
margin: 5px auto;
}
.target-main {
font-size: .9em;
}
.minipre {
line-height: 13px;
font-size: .85em;
display: inline-block;
}
.target-sub {
font-size: .8em;
transform: scale(.8);
line-height: 8px;
}
.target-self,
.target-pt-solo,
.target-pt-field,
.target-pt-all {
background: #aef;
}
.target-en-solo,
.target-en-field,
.target-en-all {
background: #f9a;
}
/* PARAMアイコン */
.rate,
.proc {
position: relative;
display: inline-block;
box-sizing: border-box;
margin-left: 5px;
line-height: 13px;
font-size: 13px;
}
.rate::after,
.proc::after {
font-size: 8px;
position: absolute;
z-index: 2;
text-align: center;
line-height: 10px;
color: white;
top: 13px;
left: 0;
right: 0;
}
.rate::after {
content: "rate";
background-color: blue;
}
.proc::after {
content: "proc";
background-color: #49f;
}
.minival {
line-height: 13px;
font-size: .85em;
}
.initaddmax {
line-height: 1em;
font-size: .9em;
}
.growlv, .growoc, .growlvoc {
position: relative;
z-index: 10;
}
.growlv:after, .growoc:after, .growlvoc:after {
color: white;
font-size: .8em;
line-height: 9px;
padding: 1px 2px;
z-index: 3;
position: absolute;
right: 0;
white-space: pre;
top: 2px;
}
.growlv:after {
content: "L\AV";
background-color: #F60;
}
.growoc:after {
content: "O\A\43";
background-color: #ED4;
}
.growlvoc:after {
content: "L\AO";
background-image:linear-gradient(135deg, #f60 50%, #ed4 50%);
}
/* スキルLv6~とLv10の色分け */
.sc-Value5,
.sc-Value6,
.sc-Value7,
.sc-Value8 {
border-top: 2px solid #89c;
border-bottom: 2px solid #89c;
}
.sc-Value9 {
border-top: 2px solid #fc0;
border-bottom: 2px solid #fc0;
}
/* カスタムルビ */
#sktable ruby {
display : inline-table;
text-align : center;
text-indent : 0;
white-space : normal;
border : none;
margin : 0;
padding : 0;
line-height : 1;
height : 1em;
vertical-align: text-bottom;
border : none;
}
#sktable rt {
display : table-header-group;
font-size : 50%; /* 振り仮名のメインテキストに対する相対サイズ */
line-height : 1.1;
text-align : justify;
text-align-last : justify;
border : none;
margin : 0;
padding : 0;
}
/*
#sktable ruby:hover { border: 1px dashed #CCC; }
#sktable ruby:hover rt { font-size: 1em; }
*/
/* 簡易レスポンシブ */
@media only screen and (max-width: 700px) {
#skform.responsive {
min-width: unset;
padding:0;
}
.responsive .skform-caption {
float:none!important;
display:block;
}
.responsive ul li > div {
width: 100%;
}
.responsive ul li > .skform-checkbox-label {
min-width:120px;
box-sizing: border-box;
margin:5px;
}
.responsive .skform-input {
width:45%;
}
.responsive .skform-input2 {
width:100%;
}
.responsive .skform-buttons > div {
border-left: none!important;
display:block!important;
}
.responsive button {
margin: 6px 8px!important;
height: 34px;
}
.responsive .skform-hint {
display: block;
white-space: normal;
}
.responsive .skform-kindgroup {
width: 100%;
}
.responsive .ms-container {
width: 100%;
}
.responsive .column-order-head {
float: none;
border-width: 1px 1px 3px 1px;
height: 33px;
margin: auto;
box-sizing: border-box;
width: calc(50% - 16px);
}
.responsive .column-order-head > span {
writing-mode: unset;
font-size:1em;
vertical-align: middle;
display: inline;
}
.responsive .column-order-container {
margin: auto;
width: 50%;
height: 100%;
border:none;
}
.responsive .column-order {
display:block;
margin: 0 8px;
width: calc(100% - 22px);
}
.responsive .column-order > span {
float: none;
text-align:center;
height: 34px;
line-height: 34px;
}
.responsive .skform-styles input[type=radio] + label {
border-radius: 1000px;
margin-bottom: 10px;
margin: 0 6px 10px 6px;
width: 33%;
}
#sktable.responsive::-webkit-scrollbar {
height: 6px;
}
#sktable.responsive::-webkit-scrollbar-thumb {
border-radius: 3px;
background: #777;
}
#sktable.responsive>:last-child {
margin-bottom: 0;
}
}
--></div>
<form id="skform" name="skform" style="display:none;">
<div id="skform-wikiedit">
<div style="width: 100%;position: absolute;top: 100px;">
<textarea name="source" readonly></textarea>
<div class="wikiedit-fotter">Wiki構文をコピーして下さい<br><button type="button" name="close" class="skform-button" id="skform-wikiedit-close">閉じる</button></div>
</div>
</div>
<div id="skform-overlay">
<img src="//w.atwiki.jp/f_go?cmd=upload&act=open&pageid=2993&file=fou2.gif" id="skform-fou" />
</div>
<ul>
<li>
<div class="skform-title">
<input type="checkbox" name="expand" id="skform-expand" checked></input>
<label for="skform-expand">スキル検索</label>
</div>
</li>
<li class="skform-hidden skform-data-li">
<label class="skform-caption">データ:</label>
<div class="skform-kindgroup">
<input type="checkbox" name="data1" class="skform-svt-only skform-checkbox skform-data" id="skform-data1" data-regex="64" checked></input>
<label for="skform-data1" class="skform-svt-only skform-checkbox-label" style="width:auto;">保有スキル</label>
<input type="checkbox" name="data2" class="skform-svt-only skform-checkbox skform-data" id="skform-data2" data-regex="256" checked></input>
<label for="skform-data2" class="skform-svt-only skform-checkbox-label">宝具</label>
<input type="checkbox" name="data3" class="skform-svt-only skform-checkbox skform-data" id="skform-data3" data-regex="128" checked></input>
<label for="skform-data3" class="skform-svt-only skform-checkbox-label" style="width:auto;">クラスパッシブ</label>
<input type="checkbox" name="data4" class="skform-ce-only skform-checkbox skform-data" id="skform-data4" data-regex="63" checked></input>
<label for="skform-data4" class="skform-ce-only skform-checkbox-label">概念礼装</label>
<input type="checkbox" name="data5" class="skform-mst-only skform-checkbox skform-data" id="skform-data5" data-regex="512" checked></input>
<label for="skform-data5" class="skform-mst-only skform-checkbox-label">マスター</label>
</div>
</li>
<li>
<label class="skform-caption">キーワード:</label>
<input type="text" class="skform-input2" name="keyword" value="" id="skform-keyword" placeholder="スキル名またはNo.を入力" autocomplete="off" />
<span class="skform-hint">入力例『カレイド OR s12 OR e104』詳細はページ下部参照</span>
</li>
<li class="skform-ce-only">
<label class="skform-caption">最大HP:</label>
<input type="text" class="skform-input" name="hpmin" value="0" id="skform-hpmin" pattern="^[0-9]*$" /><span class="skform-range">~</span><input type="text" class="skform-input" name="hpmax" value="" id="skform-hpmax" pattern="^[0-9]*$" />
<label class="skform-caption">最大ATK:</label>
<input type="text" class="skform-input" name="atkmin" value="0" id="skform-atkmin" pattern="^[0-9]*$" /><span class="skform-range">~</span><input type="text" class="skform-input" name="atkmax" value="" id="skform-atkmax" pattern="^[0-9]*$" />
</li>
<li class="skform-ce-only">
<label class="skform-caption">レアリティ:</label>
<input type="checkbox" name="rarity1" class="skform-checkbox skform-rarity" id="skform-rarity1" data-regex="1" checked></input>
<label for="skform-rarity1" class="skform-checkbox-label">★</label>
<input type="checkbox" name="rarity2" class="skform-checkbox skform-rarity" id="skform-rarity2" data-regex="2" checked></input>
<label for="skform-rarity2" class="skform-checkbox-label">★★</label>
<input type="checkbox" name="rarity3" class="skform-checkbox skform-rarity" id="skform-rarity3" data-regex="3" checked></input>
<label for="skform-rarity3" class="skform-checkbox-label">★★★</label>
<input type="checkbox" name="rarity4" class="skform-checkbox skform-rarity" id="skform-rarity4" data-regex="4" checked></input>
<label for="skform-rarity4" class="skform-checkbox-label">★★★★</label>
<input type="checkbox" name="rarity5" class="skform-checkbox skform-rarity" id="skform-rarity5" data-regex="5" checked></input>
<label for="skform-rarity5" class="skform-checkbox-label">★★★★★</label>
</li>
<li>
<label class="skform-caption">対象:</label>
<input type="checkbox" name="target1" class="skform-checkbox skform-target" id="skform-target1" data-regex="^自身$" checked></input>
<label for="skform-target1" class="skform-checkbox-label">自身</label>
<input type="checkbox" name="target2" class="skform-checkbox skform-target" id="skform-target2" data-regex="^.*味方単体.*$" checked></input>
<label for="skform-target2" class="skform-checkbox-label">味方単体</label>
<input type="checkbox" name="target3" class="skform-checkbox skform-target" id="skform-target3" data-regex="^.*味方全体.*$" checked></input>
<label for="skform-target3" class="skform-checkbox-label">味方全体</label>
<input type="checkbox" name="target4" class="skform-checkbox skform-target" id="skform-target4" data-regex="^敵単体$" checked></input>
<label for="skform-target4" class="skform-checkbox-label">敵単体</label>
<input type="checkbox" name="target5" class="skform-checkbox skform-target" id="skform-target5" data-regex="^.*敵全体.*$" checked></input>
<label for="skform-target5" class="skform-checkbox-label">敵全体</label>
</li>
<li class="skform-svt-only">
<label class="skform-caption">宝具:</label>
<input type="checkbox" name="arts" class="skform-checkbox skform-command" id="skform-command1" data-regex="Arts" checked></input>
<label for="skform-command1" class="skform-checkbox-label">Arts</label>
<input type="checkbox" name="buster" class="skform-checkbox skform-command" id="skform-command2" data-regex="Buster" checked></input>
<label for="skform-command2" class="skform-checkbox-label">Buster</label>
<input type="checkbox" name="quick" class="skform-checkbox skform-command" id="skform-command3" data-regex="Quick" checked></input>
<label for="skform-command3" class="skform-checkbox-label">Quick</label>
</li>
<li>
<label class="skform-caption">効果:</label>
<div style="display: inline-block;">
<select name="effect" id="skform-effect" size="8" multiple="multiple">
<optgroup label="攻撃">
<option data-createid="18022100" value="攻撃力">攻撃力</option>
<option data-createid="18022101" value="^(?:〔[^〕]+〕)?(?!.*宝具)威力$">威力</option>
<option data-createid="18022102" value="宝具威力">宝具威力</option>
<option data-createid="18022103" value="Quickカード性能">Quickカード性能</option>
<option data-createid="18022104" value="Artsカード性能">Artsカード性能</option>
<option data-createid="18022105" value="Busterカード性能">Busterカード性能</option>
<option data-createid="18022106" value="^与ダメージ$">与固定ダメージ</option>
<option data-createid="18022107" value="攻撃回数">攻撃回数</option>
</optgroup>
<optgroup label="防御">
<option data-createid="18022108" value="防御力">防御力</option>
<option data-createid="18022109" value="Quickカード耐性">Quickカード耐性</option>
<option data-createid="18022110" value="Artsカード耐性">Artsカード耐性</option>
<option data-createid="18022111" value="Busterカード耐性">Busterカード耐性</option>
<option data-createid="18022112" value="^被ダメージ$">被固定ダメージ</option>
</optgroup>
<optgroup label="スター/クリティカル">
<option data-createid="18022113" value="^スター$">スター獲得/減少</option>
<option data-createid="18022114" value="毎ターンスター">毎ターンスター獲得</option>
<option data-createid="18022115" value="スター発生率">スター発生率</option>
<option data-createid="18022116" value="スター集中度">スター集中度</option>
<option data-createid="18022117" value="クリティカル威力">クリティカル威力</option>
<option data-createid="18022118" value="クリティカル発生率">クリティカル発生率</option>
</optgroup>
<optgroup label="HP/ガッツ">
<option data-createid="18022119" value="^HP$">HP</option>
<option data-createid="18022120" value="^毎ターンHP$">毎ターンHP回復</option>
<option data-createid="18022121" value="最大HP">最大HP</option>
<option data-createid="18022122" value="HP回復効果量">HP回復効果量</option>
<option data-createid="18022123" value="与HP回復量">与HP回復量</option>
<option data-createid="18022124" value="ガッツ">ガッツ</option>
</optgroup>
<optgroup label="NP/チャージ">
<option data-createid="18022125" value="^NP$">NP</option>
<option data-createid="18022126" value="毎ターンNP">毎ターンNP獲得</option>
<option data-createid="18022127" value="^(?!被ダメージ時).*NP獲得量$">NP獲得量</option>
<option data-createid="18022128" value="被ダメージ時NP獲得量">被ダメージ時NP獲得量</option>
<option data-createid="18022129" value="チャージ">チャージ</option>
</optgroup>
<optgroup label="付与成功率/耐性/無効/解除">
<option data-createid="18022130" value="^(?!即死|強化解除|Busterカード|Quickカード|Artsカード).*耐性$">状態耐性</option>
<option data-createid="18022131" value="^(?!即死).*無効$">状態無効</option>
<option data-createid="18022132" value="^((?!即死).*付与成功率|.*強化成功率)">状態付与成功率</option>
<option data-createid="18022133" value="即死耐性">即死耐性</option>
<option data-createid="18022134" value="即死無効">即死無効</option>
<option data-createid="18022135" value="即死付与成功率">即死付与成功率</option>
<option data-createid="18022136" value=".*解除$">状態解除</option>
<option data-createid="18022137" value="強化解除耐性">強化解除耐性</option>
</optgroup>
<optgroup label="○○付与">
<option data-createid="18022138" value="^回避$">回避</option>
<option data-createid="18022139" value="^必中$">必中</option>
<option data-createid="18022140" value="^無敵$">無敵</option>
<option data-createid="18022141" value="^無敵貫通$">無敵貫通</option>
<option data-createid="18022142" value="即死効果">即死効果</option>
<option data-createid="18022143" value="ターゲット集中">ターゲット集中</option>
<option data-createid="18022144" value="スキル封印">スキル封印</option>
<option data-createid="18022145" value="宝具封印">宝具封印</option>
<option data-createid="18022146" value="魅了(行動不能)">魅了(行動不能)</option>
<option data-createid="18022147" value="^(?!魅了).*(行動不能)$">行動不能(魅了除く)</option>
<option data-createid="18022148" value="^.*特性付与$">特性付与</option>
<option data-createid="18022149" value="^(毒|やけど|呪い)(毎ターンHP)$">毒/やけど/呪い</option>
<option data-createid="18022150" value="^(毒|やけど|呪い)の効果量$">蝕毒/延焼/呪いの効果量</option>
</optgroup>
<optgroup label="イベントボーナス">
<option data-createid="18022151" value="イベントポイント">イベントポイント</option>
<option data-createid="18022152" value="イベントドロップ">イベントドロップ</option>
<option data-createid="18022153" value="〔イベント限定〕威力">〔イベント限定〕威力</option>
<option data-createid="18022154" value="クラスドロップ">クラスドロップ</option>
<option data-createid="18022155" value="出現率">出現率</option>
</optgroup>
<optgroup label="宝具">
<option data-createid="18022167" value="^宝具攻撃$">宝具攻撃</option>
<option data-createid="18022168" value="特攻宝具攻撃$">特攻宝具攻撃</option>
<option data-createid="18022169" value="^HP反?比例宝具攻撃$">HP比例宝具攻撃</option>
<option data-createid="18022170" value="^防御力無視宝具攻撃$">防御力無視宝具攻撃</option>
<option data-createid="18022171" value="^(カウンター|手加減)宝具攻撃$">特殊な宝具攻撃</option>
</optgroup>
<optgroup label="その他">
<option data-createid="18022156" value="スキルチャージ">スキルチャージ</option>
<option data-createid="18022157" value="オーバーチャージ段階">オーバーチャージ段階</option>
<option data-createid="18022158" value="クラス相性変更">クラス相性変更</option>
<option data-createid="18022159" value="防御無視">防御無視</option>
<option data-createid="18022160" value="経験値">経験値</option>
<option data-createid="18022161" value="魔術礼装EXP">魔術礼装EXP</option>
<option data-createid="18022162" value="^.*QP$">QP</option>
<option data-createid="18022163" value="絆ポイント">絆ポイント</option>
<option data-createid="18022164" value="フレンドポイント">フレンドポイント</option>
<option data-createid="18022165" value="^(オーダーチェンジ|コマンドシャッフル)$">オーダーチェンジ/コマンドシャッフル</option>
<option data-createid="18092700" value="コマンドカード固定">コマンドカード固定</option>
<option data-createid="18022166" value="なし">なし</option>
</optgroup>
</select>
</div>
</li>
<li class="skform-svt-only">
<label class="skform-caption">使用者:</label>
<select class="skform-input2" name="applyuser" id="skform-applyuser">
<option value=".*">すべて</option>
<option value="^(なし|プレイヤー)$" selected>プレイヤー</option>
<option value="^(なし|エネミー)$">エネミー</option>
</select>
<span class="skform-hint">敵専用効果を非表示にするならプレイヤー</span>
</li>
<li class="skform-ce-only">
<label class="skform-caption">種類:</label>
<div class="skform-kindgroup">
<input type="checkbox" name="general" class="skform-ce-only skform-checkbox skform-kind" id="skform-kind1" data-regex="1" checked></input>
<label for="skform-kind1" class="skform-ce-only skform-checkbox-label" style="width:120px;">一般</label>
<input type="checkbox" name="fpgacha" class="skform-ce-only skform-checkbox skform-kind" id="skform-kind2" data-regex="2" checked></input>
<label for="skform-kind2" class="skform-ce-only skform-checkbox-label" style="width:120px;">フレンドPt召喚</label>
<input type="checkbox" name="eventce" class="skform-ce-only skform-checkbox skform-kind" id="skform-kind3" data-regex="4" checked></input>
<label for="skform-kind3" class="skform-ce-only skform-checkbox-label" style="width:120px;">イベント限定</label>
<input type="checkbox" name="eventbonus" class="skform-ce-only skform-checkbox skform-kind" id="skform-kind4" data-regex="8" checked></input>
<label for="skform-kind4" class="skform-ce-only skform-checkbox-label" style="width:120px;">イベントボーナス</label>
<input type="checkbox" name="bondce" class="skform-ce-only skform-checkbox skform-kind" id="skform-kind5" data-regex="16" checked></input>
<label for="skform-kind5" class="skform-ce-only skform-checkbox-label" style="width:120px;">絆</label>
<input type="checkbox" name="expcard" class="skform-ce-only skform-checkbox skform-kind" id="skform-kind6" data-regex="32" checked></input>
<label for="skform-kind6" class="skform-ce-only skform-checkbox-label" style="width:120px;">EXP&チョコ</label>
</div>
</li>
<li>
<label class="skform-caption">表示方法:</label>
<div class="skform-styles">
<input type="radio" id="skform-style1" name="styles" value="raw"><label for="skform-style1">生データ</label>
<input type="radio" id="skform-style2" name="styles" value="detail"><label for="skform-style2">詳細表示</label>
<input type="radio" id="skform-style3" name="styles" value="spec-comp"><label for="skform-style3">性能比較</label>
<input type="radio" id="skform-style4" name="styles" value="ce-list" checked><label for="skform-style4">概念礼装</label>
</div>
</li>
<li>
<label class="skform-caption">オプション:</label>
<div style="display: inline-block;">
<input type="checkbox" name="options" class="skform-checkbox skform-option" id="skform-max-width"></input>
<label for="skform-max-width" class="skform-checkbox-label" style="width:120px;">横スクロール拡張</label>
<input type="checkbox" name="options" class="skform-checkbox skform-option" id="skform-reverse-highlight"></input>
<label for="skform-reverse-highlight" class="skform-checkbox-label" style="width:120px;">ハイライト変更</label>
</div>
</li>
<li style="white-space: nowrap;">
<label class="skform-caption">ソート:</label>
<div style="display: inline-block;">
<div class="column-order-head"><span>優先</span></div>
<ul id="skform-order" class="column-order-container">
<li class="column-order" data-column="Owners"><span class="sksort">ID</span></li>
<li class="column-order" data-column="Rare"><span class="sksort">レア</span></li>
<li class="column-order" data-column="CT"><span class="sksort">CT</span></li>
<li class="column-order" data-column="HPMax"><span class="sksort">最大HP</span></li>
<li class="column-order" data-column="ATKMax"><span class="sksort">最大ATK</span></li>
<li class="column-order" data-column="Target"><span class="sksort">対象</span></li>
<li class="column-order" data-column="PreText"><span class="sksort">効果(左)</span></li>
<li class="column-order" data-column="MainText"><span class="sksort">効果(中)</span></li>
<li class="column-order" data-column="PostText"><span class="sksort">効果(右)</span></li>
<li class="column-order" data-column="Value9"><span class="sksort">最大効果量</span></li>
</ul>
<div class="skform-hint" style="display: block;">ドラッグで優先ソート順の並び替え。クリックで昇順降順の切り換え</div>
</div>
</li>
<li>
<div class="skform-buttons">
<button type="button" name="serialize" class="skform-button" id="skform-serialize">wiki構文コピー</button>
<button type="button" name="reset" class="skform-button" id="skform-reset">リセット</button>
<div style="border-left: 1px solid #88a; display: inline-block;">
<button type="button" name="exec" class="skform-button" id="skform-execute" style="margin-left: 5px;">検索する</button>
</div>
</div>
</li>
</ul>
</form>
<div id="sktable"></div>
}}}}}
#js(){{{{{
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.quicksearch/2.4.0/jquery.quicksearch.min.js"></script>
<!-- jsDelivr :: Sortable (https://www.jsdelivr.com/package/npm/sortablejs) -->
<script src="https://cdn.jsdelivr.net/npm/sortablejs@1.6.1/Sortable.min.js"></script>
<script type="text/javascript">
// ----------------------------------------------------------------
// MultiSelect v0.9.12
// Copyright (c) 2012 Louis Cuny
//
// This program is free software. It comes without any warranty, to
// the extent permitted by applicable law. You can redistribute it
// and/or modify it under the terms of the Do What The Fuck You Want
// To Public License, Version 2, as published by Sam Hocevar. See
// http://sam.zoy.org/wtfpl/COPYING for more details.
!function(e){"use strict";var t=function(t,s){this.options=s,this.$element=e(t),this.$container=e("<div/>",{class:"ms-container"}),this.$selectableContainer=e("<div/>",{class:"ms-selectable"}),this.$selectionContainer=e("<div/>",{class:"ms-selection"}),this.$selectableUl=e("<ul/>",{class:"ms-list",tabindex:"-1"}),this.$selectionUl=e("<ul/>",{class:"ms-list",tabindex:"-1"}),this.scrollTo=0,this.elemsSelector="li:visible:not(.ms-optgroup-label,.ms-optgroup-container,."+s.disabledClass+")"};t["proto"+"type"]={constructor:t,init:function(){var t=this,s=this.$element;if(0===s.next(".ms-container").length){s.css({position:"absolute",left:"-9999px"}),s.attr("id",s.attr("id")?s.attr("id"):Math.ceil(1e3*Math.random())+"multiselect"),this.$container.attr("id","ms-"+s.attr("id")),this.$container.addClass(t.options.cssClass),s.find("option").each(function(){t.generateLisFromOption(this)}),this.$selectionUl.find(".ms-optgroup-label").hide(),t.$selectionUl.children(".ms-optgroup-container").hide(),t.options.selectableHeader&&t.$selectableContainer.append(t.options.selectableHeader),t.$selectableContainer.append(t.$selectableUl),t.options.selectableFooter&&t.$selectableContainer.append(t.options.selectableFooter),t.options.selectionHeader&&t.$selectionContainer.append(t.options.selectionHeader),t.$selectionContainer.append(t.$selectionUl),t.options.selectionFooter&&t.$selectionContainer.append(t.options.selectionFooter),t.$container.append(t.$selectableContainer),t.$container.append(t.$selectionContainer),s.after(t.$container),t.activeMouse(t.$selectableUl),t.activeKeyboard(t.$selectableUl);var i=t.options.dblClick?"dblclick":"click";t.$selectableUl.on(i,".ms-elem-selectable",function(){t.select(e(this).data("ms-value"))}),t.$selectionUl.on(i,".ms-elem-selection",function(){t.deselect(e(this).data("ms-value"))}),t.activeMouse(t.$selectionUl),t.activeKeyboard(t.$selectionUl),s.on("focus",function(){t.$selectableUl.focus()})}var l=s.find("option:selected").map(function(){return e(this).val()})["get"]();t.select(l,"init"),"function"==typeof t.options.afterInit&&t.options.afterInit.call(this,this.$container)},generateLisFromOption:function(t,s,i){for(var l=this,n=l.$element,o="",a=e(t),r=0;r<t.attributes.length;r++){var c=t.attributes[r];"value"!==c.name&&"disabled"!==c.name&&(o+=c.name+'="'+c.value+'" ')}var d=e("<li "+o+"><span>"+l.escapeHTML(a.text())+"</span></li>"),h=d.clone(),p=a.val(),f=l.sanitize(p);d.data("ms-value",p).addClass("ms-elem-selectable").attr("id",f+"-selectable"),h.data("ms-value",p).addClass("ms-elem-selection").attr("id",f+"-selection").hide(),(a.prop("disabled")||n.prop("disabled"))&&(h.addClass(l.options.disabledClass),d.addClass(l.options.disabledClass));var u=a.parent("optgroup");if(u.length>0){var m=u.attr("label"),v=l.sanitize(m),b=l.$selectableUl.find("#optgroup-selectable-"+v),g=l.$selectionUl.find("#optgroup-selection-"+v);if(0===b.length){var $='<li class="ms-optgroup-container"></li>',C='<ul class="ms-optgroup"><li class="ms-optgroup-label"><span>'+m+"</span></li></ul>";b=e($),g=e($),b.attr("id","optgroup-selectable-"+v),g.attr("id","optgroup-selection-"+v),b.append(e(C)),g.append(e(C)),l.options.selectableOptgroup&&(b.find(".ms-optgroup-label").on("click",function(){var t=u.children(":not(:selected, :disabled)").map(function(){return e(this).val()})["get"]();l.select(t)}),g.find(".ms-optgroup-label").on("click",function(){var t=u.children(":selected:not(:disabled)").map(function(){return e(this).val()})["get"]();l.deselect(t)})),l.$selectableUl.append(b),l.$selectionUl.append(g)}s=void 0===s?b.find("ul").children().length:s+1,d.insertAt(s,b.children()),h.insertAt(s,g.children())}else s=void 0===s?l.$selectableUl.children().length:s,d.insertAt(s,l.$selectableUl),h.insertAt(s,l.$selectionUl)},addOption:function(t){var s=this;void 0!==t.value&&null!==t.value&&(t=[t]),e.each(t,function(t,i){if(void 0!==i.value&&null!==i.value&&0===s.$element.find("option[value='"+i.value+"']").length){var l=e('<option value="'+i.value+'">'+i.text+"</option>"),n=void 0===i.nested?s.$element:e("optgroup[label='"+i.nested+"']");t=parseInt(void 0===i.index?n.children().length:i.index);i.optionClass&&l.addClass(i.optionClass),i.disabled&&l.prop("disabled",!0),l.insertAt(t,n),s.generateLisFromOption(l["get"](0),t,i.nested)}})},escapeHTML:function(t){return e("<div>").text(t).html()},activeKeyboard:function(t){var s=this;t.on("focus",function(){e(this).addClass("ms-focus")}).on("blur",function(){e(this).removeClass("ms-focus")}).on("keydown",function(i){switch(i.which){case 40:case 38:return i.preventDefault(),i.stopPropagation(),void s.moveHighlight(e(this),38===i.which?-1:1);case 37:case 39:return i.preventDefault(),i.stopPropagation(),void s.switchList(t);case 9:if(s.$element.is("[tabindex]")){i.preventDefault();var l=parseInt(s.$element.attr("tabindex"),10);return l=i.shiftKey?l-1:l+1,void e('[tabindex="'+l+'"]').focus()}i.shiftKey&&s.$element.trigger("focus")}if(e.inArray(i.which,s.options.keySelect)>-1)return i.preventDefault(),i.stopPropagation(),void s.selectHighlighted(t)})},moveHighlight:function(e,t){var s=e.find(this.elemsSelector),i=s.filter(".ms-hover"),l=null,n=s.first().outerHeight(),o=e.height();this.$container.prop("id");if(s.removeClass("ms-hover"),1===t){if(0===(l=i.nextAll(this.elemsSelector).first()).length)if((r=i.parent()).hasClass("ms-optgroup")){var a=r.parent().next(":visible");l=a.length>0?a.find(this.elemsSelector).first():s.first()}else l=s.first()}else if(-1===t){var r;if(0===(l=i["prev"+"All"](this.elemsSelector).first()).length)if((r=i.parent()).hasClass("ms-optgroup")){var c=r.parent().prev(":visible");l=c.length>0?c.find(this.elemsSelector).last():s.last()}else l=s.last()}if(l.length>0){l.addClass("ms-hover");var d=e.scrollTop()+l.position().top-o/2+n/2;e.scrollTop(d)}},selectHighlighted:function(e){var t=e.find(this.elemsSelector),s=t.filter(".ms-hover").first();s.length>0&&(e.parent().hasClass("ms-selectable")?this.select(s.data("ms-value")):this.deselect(s.data("ms-value")),t.removeClass("ms-hover"))},switchList:function(e){e.blur(),this.$container.find(this.elemsSelector).removeClass("ms-hover"),e.parent().hasClass("ms-selectable")?this.$selectionUl.focus():this.$selectableUl.focus()},activeMouse:function(t){var s=this;this.$container.on("mouseenter",s.elemsSelector,function(){e(this).parents(".ms-container").find(s.elemsSelector).removeClass("ms-hover"),e(this).addClass("ms-hover")}),this.$container.on("mouseleave",s.elemsSelector,function(){e(this).parents(".ms-container").find(s.elemsSelector).removeClass("ms-hover")})},refresh:function(){this.destroy(),this.$element.multiSelect(this.options)},destroy:function(){e("#ms-"+this.$element.attr("id")).remove(),this.$element.off("focus"),this.$element.css("position","").css("left",""),this.$element.removeData("multiselect")},select:function(t,s){"string"==typeof t&&(t=[t]);var i=this,l=this.$element,n=e.map(t,function(e){return i.sanitize(e)}),o=this.$selectableUl.find("#"+n.join("-selectable, #")+"-selectable").filter(":not(."+i.options.disabledClass+")"),a=this.$selectionUl.find("#"+n.join("-selection, #")+"-selection").filter(":not(."+i.options.disabledClass+")"),r=l.find("option:not(:disabled)").filter(function(){return e.inArray(this.value,t)>-1});if("init"===s&&(o=this.$selectableUl.find("#"+n.join("-selectable, #")+"-selectable"),a=this.$selectionUl.find("#"+n.join("-selection, #")+"-selection")),o.length>0){o.addClass("ms-selected").hide(),a.addClass("ms-selected").show(),r.prop("selected",!0),i.$container.find(i.elemsSelector).removeClass("ms-hover");var c=i.$selectableUl.children(".ms-optgroup-container");if(c.length>0)c.each(function(){var t=e(this).find(".ms-elem-selectable");t.length===t.filter(".ms-selected").length&&(e(this).hide(),e(this).find(".ms-optgroup-label").hide())}),i.$selectionUl.children(".ms-optgroup-container").each(function(){e(this).find(".ms-elem-selection").filter(".ms-selected").length>0&&(e(this).show(),e(this).find(".ms-optgroup-label").show())});else if(i.options.keepOrder&&"init"!==s){var d=i.$selectionUl.find(".ms-selected");d.length>1&&d.last()["get"](0)!=a["get"](0)&&a.insertAfter(d.last())}"init"!==s&&(l.trigger("change"),"function"==typeof i.options.afterSelect&&i.options.afterSelect.call(this,t))}},deselect:function(t){"string"==typeof t&&(t=[t]);var s=this,i=this.$element,l=e.map(t,function(e){return s.sanitize(e)}),n=this.$selectableUl.find("#"+l.join("-selectable, #")+"-selectable"),o=this.$selectionUl.find("#"+l.join("-selection, #")+"-selection").filter(".ms-selected").filter(":not(."+s.options.disabledClass+")"),a=i.find("option").filter(function(){return e.inArray(this.value,t)>-1});if(o.length>0){n.removeClass("ms-selected").show(),o.removeClass("ms-selected").hide(),a.prop("selected",!1),s.$container.find(s.elemsSelector).removeClass("ms-hover");var r=s.$selectableUl.children(".ms-optgroup-container");if(r.length>0)r.each(function(){e(this).find(".ms-elem-selectable").filter(":not(.ms-selected)").length>0&&(e(this).show(),e(this).find(".ms-optgroup-label").show())}),s.$selectionUl.children(".ms-optgroup-container").each(function(){0===e(this).find(".ms-elem-selection").filter(".ms-selected").length&&(e(this).hide(),e(this).find(".ms-optgroup-label").hide())});i.trigger("change"),"function"==typeof s.options.afterDeselect&&s.options.afterDeselect.call(this,t)}},select_all:function(){var t=this.$element,s=t.val();if(t.find('option:not(":disabled")').prop("selected",!0),this.$selectableUl.find(".ms-elem-selectable").filter(":not(."+this.options.disabledClass+")").addClass("ms-selected").hide(),this.$selectionUl.children(".ms-optgroup-container").show(),this.$selectableUl.children(".ms-optgroup-container").hide(),this.$selectionUl.find(".ms-optgroup-label").show(),this.$selectableUl.find(".ms-optgroup-label").hide(),this.$selectionUl.find(".ms-elem-selection").filter(":not(."+this.options.disabledClass+")").addClass("ms-selected").show(),this.$selectionUl.focus(),t.trigger("change"),"function"==typeof this.options.afterSelect){var i=e.grep(t.val(),function(t){return e.inArray(t,s)<0});this.options.afterSelect.call(this,i)}},deselect_all:function(){var e=this.$element,t=e.val();e.find("option").prop("selected",!1),this.$selectableUl.find(".ms-elem-selectable").removeClass("ms-selected").show(),this.$selectionUl.children(".ms-optgroup-container").hide(),this.$selectableUl.children(".ms-optgroup-container").show(),this.$selectionUl.find(".ms-optgroup-label").hide(),this.$selectableUl.find(".ms-optgroup-label").show(),this.$selectionUl.find(".ms-elem-selection").removeClass("ms-selected").hide(),this.$selectableUl.focus(),e.trigger("change"),"function"==typeof this.options.afterDeselect&&this.options.afterDeselect.call(this,t)},sanitize:function(e){var t,s=0;if(0==e.length)return s;var i;for(t=0,i=e.length;t<i;t++)s=(s<<5)-s+e.charCodeAt(t),s|=0;return s}},e.fn.multiSelect=function(){var s=arguments[0],i=arguments;return this.each(function(){var l=e(this),n=l.data("multiselect"),o=e.extend({},e.fn.multiSelect.defaults,l.data(),"object"==typeof s&&s);n||l.data("multiselect",n=new t(this,o)),"string"==typeof s?n[s](i[1]):n.init()})},e.fn.multiSelect.defaults={keySelect:[32],selectableOptgroup:!1,disabledClass:"disabled",dblClick:!1,keepOrder:!1,cssClass:""},e.fn.multiSelect.Constructor=t,e.fn.insertAt=function(e,t){return this.each(function(){0===e?t.prepend(this):t.children().eq(e-1).after(this)})}}(window.jQuery);
// ----------------------------------------------------------------
(function($) {
for (var i = 0, root = document.getElementById('sk-inlinestyles'), nodes = root.childNodes; i < nodes.length; i++) {
if (nodes[i].nodeType === document.COMMENT_NODE) {
var elem = document.createElement('style');
elem.type = 'text/css';
elem.setAttribute('media', 'screen');
if (elem.styleSheet) elem.styleSheet.cssText = nodes[i].data;
else elem.appendChild(document.createTextNode(nodes[i].data));
document.getElementsByTagName('head').item(0).appendChild(elem);
root.parentNode.removeChild(root);
break;
}
}
var VIEW_MODE = { Servant: 1, CraftEssence: 2, Both: 3, Master: 4, All: 7 };
var TABLE_TEMPLATE = (function(){
// 共通テンプレート
var CommonTemplate = {};
CommonTemplate["proto"+"type"] = {
headColumns: [], // data-column names
headDispNames: [], // 表示カラム名
headAttributes: {}, // thエレメントの属性
lineColumns: [], // data-column names
lineTagHeads: [], // tdエレメントの開始タグ(_MakeTagHeadArrayのキャッシュ)
lineAttributes: {}, // tdエレメントの属性
head: '', // thead.innerHTMLのキャッシュ
line: [], // tr.innerHTML作業用
body: '', // tableの枠組み
func: function(value, index, row, flags) { return value; }, // need overwrite
// ----
star: ['', '★C', '★★U', '★★★R', '★★★★SR', '★★★★★SSR'],
torder: ['自身', '味方単体', '自分以外の味方単体', '自分以外の味方単体<生贄>', '自身以外の味方全体', '自身以外の味方全体<控え含む>', '味方全体', '味方全体<控え含む>',
'敵単体', '敵全体', '敵全体<控え含む>'],
updown: ['アップ', 'プラス', '増加', '獲得', '回復', '減少', 'カット', 'ダウン'],
effectregs: $.map($('#skform-effect option'), function(e) { return new RegExp($(e).val()); }),
_MakeTagHead: function(ukey, tag, column_name, attr) {
var c = [ukey+'-'+column_name];
if (ukey !== 'col' && ukey !== 'th') {
c.push(column_name);
}
var text = '<'+tag+' class="'+c.join(' ')+'"';
if (attr) { for (var key in attr) { text += ' ' + key + '="' + attr[key] + '"'; } }
return text + '>';
},
_MakeTagHeadArray: function(ukey, tag, columns, attrs) {
var arr = [];
for (var i = 0, l = columns.length; i < l; i++) {
var col = columns[i];
arr.push(this._MakeTagHead(ukey, tag, col, (typeof attrs == 'object' && typeof attrs[col] !== 'undefined') ? attrs[col] : undefined));
}
return arr;
},
ClearLines: function() {
this.line = [];
},
AppendLine: function(row, query) {
var flags = row.Flags;
var td = [], colname = '', temp;
for (var i = 0, l = this.lineColumns.length; i < l; i++) {
colname = this.lineColumns[i];
if (typeof row[colname] !== 'undefined') {
temp = this.lineTagHeads[i];
if (colname == 'SkillName')
{
temp = parseInt(row.CEType.Value);
if (temp < 64) temp = this.lineTagHeads[i].replace('class="', 'class="ribbon-craft ');
else if (temp === 64) temp = this.lineTagHeads[i].replace('class="', 'class="ribbon-skill ');
else if (temp == 128) temp = this.lineTagHeads[i].replace('class="', 'class="ribbon-class ');
else if (temp == 512) temp = this.lineTagHeads[i].replace('class="', 'class="ribbon-master ');
else {
temp = 'ribbon-';
if (row.NobleTraits.Value[0] == 'Buster') temp += 'buster-';
else if (row.NobleTraits.Value[0] == "Arts") temp += 'arts-';
else temp += 'quick-';
if (row.NobleTraits.Value[1] == '全体') temp += 'all';
else if (row.NobleTraits.Value[1] == '単体') temp += 'solo';
else temp += 'support';
temp = this.lineTagHeads[i].replace('class="', 'class="'+temp+' ');
}
}
td.push(temp + this.func(row[colname].GetEffect(flags), colname, row, query) + '</td>');
}
}
this.line.push('<tr>' + td.join('') + '</tr>');
},
GetHead: function() {
if (this.head.length > 0) { return this.head; }
var th = this._MakeTagHeadArray('th', 'th', $.map(this.headColumns, function(e) { return e.replace('_', ''); }), this.headAttributes);
for (var i = 0, l = th.length; i < l; i++) {
th[i] += this.headDispNames[i] + '</th>';
}
this.head = '<tr>' + th.join('') + '</tr>';
return this.head;
},
GetColgroup: function() {
var col = this._MakeTagHeadArray('col', 'col', $.map(this.headColumns, function(e) { return e.replace('_', ''); }), undefined);
return col.join('');
},
GetTable: function() {
var $table = $(this.body);
$table.find('colgroup').append(this.GetColgroup());
$table.find('thead').append(this.GetHead());
return $table;
},
GetLines: function(i, len) {
return this.line.slice(i, len).join('');
},
MakeTarget: function(v, highlights) {
var text = '', i = 0, l = v.length, hfs = '';
for (; i < l; i++) {
hfs = (typeof highlights !== 'undefined' && highlights[i] === false) ? ' not-highlight' : '';
switch (v[i]) {
case '自身':
text += '<div class="target-icon target-self'+hfs+'"><div class="target-main">自身</div></div>';
break;
case '味方単体':
text += '<div class="target-icon target-pt-solo'+hfs+'"><div class="target-main">味方単体</div></div>';
break;
case '自分以外の味方単体':
text += '<div class="target-icon target-pt-all'+hfs+'"><div class="target-main">味方単体</div><div class="target-sub">自身除く</div></div>';
break;
case '自分以外の味方単体<生贄>':
text += '<div class="target-icon target-pt-all'+hfs+'"><div class="target-main">味方単体</div><div class="target-sub">生贄</div></div>';
break;
case '味方全体':
text += '<div class="target-icon target-pt-field'+hfs+'"><div class="target-main">味方全体</div></div>';
break;
case '自身以外の味方全体':
text += '<div class="target-icon target-pt-all'+hfs+'"><div class="target-main">味方全体</div><div class="target-sub">自身除く</div></div>';
break;
case '味方全体<控え含む>':
text += '<div class="target-icon target-pt-all'+hfs+'"><div class="target-main">味方全体</div><div class="target-sub">サブ</div></div>';
break;
case '自身以外の味方全体<控え含む>':
text += '<div class="target-icon target-pt-all'+hfs+'"><div class="target-main">味方全体</div><div class="target-sub">自身除く+サブ</div></div>';
break;
case '敵単体':
text += '<div class="target-icon target-en-solo'+hfs+'"><div class="target-main">敵 単体</div></div>';
break;
case '敵全体':
text += '<div class="target-icon target-en-field'+hfs+'"><div class="target-main">敵 全体</div></div>';
break;
case '敵全体<控え含む>':
text += '<div class="target-icon target-en-all'+hfs+'"><div class="target-main">敵 全体</div><div class="target-sub">サブ</div></div>';
break;
case '選択した味方控え単体':
text += '<div class="target-icon target-pt-all'+hfs+'"><div class="target-main">味方単体</div><div class="target-sub">サブ交代</div></div>';
break;
case 'ターゲット以外の敵全体':
text += '<div class="target-icon target-en-all'+hfs+'"><div class="target-main">敵 全体</div><div class="target-sub">対象除く</div></div>';
break;
default:
text += '<div class="target-icon target-en-solo'+hfs+'"><div class="target-main">ERROR</div></div>';
break;
}
}
return text;
},
MakeSkillName: function(row) {
return parseInt(row.CEType.Value) < 64 ? this.MakeOwnerNamesToLink(row.OwnerNames.Value).join('') : row.SkillName.Value;
},
MakeSValue: function(v, highlights, row) {
return $.map(v, function(e,i) {
var tmp = e.replace(/(?:proc:|rate:|\))/g, '').split('/');
var c = ['effect-outer'];
if (typeof highlights !== 'undefined' && highlights[i] === false) c.push('not-highlight');
$.merge(c, row.NobleColor[i]);
if (tmp.length == 3) {
tmp[0] = '始'+tmp[0];
tmp[1] = '毎'+tmp[1];
tmp[2] = '終'+tmp[2];
c.push('initaddmax');
}
else if (tmp.length == 1 && tmp[0].indexOf('(') != -1) {
tmp = tmp[0].split('(');
tmp[1] = '('+tmp[1].replace('特攻:', '+').replace('追加:', '+')+')';
c.push('minival');
}
tmp = tmp.join('<br>');
c = c.length > 0 ? ' class="'+c.join(' ')+'"' : '';
return tmp.length === 0 ? '' : '<div'+c+'>' + tmp + '</div>';
}).join('');
},
MakePreText: function(v, target2, highlights) {
return $.map(v, function(e,i) {
var cls = ['effect-outer'], scnt = 0, hfs = '', text, text2;
if (typeof highlights !== 'undefined' && highlights[i] === false) cls.push('not-highlight');
scnt = e.length;
text = e.replace(/[<>]/g, function(g) { return g === '<' ? '<' : '>'; }).replace(/(proc|rate):(\d+%|(?:LV|OC)?変動)/g, function(g, $1, $2) { scnt = Math.max(0, scnt - 5); return '<div class="'+$1+'">'+$2+'</div>'; });
text2 = ((typeof target2 !== 'undefined' && typeof target2[i] !== 'undefined' && target2[i].length > 1) ? target2[i] : '');
scnt += text2.length;
if (text2.length > 0) {
if (text.length <= 1) { text = ''; }
else { scnt++; text += "、"; }
}
if (9 < scnt) {}
if (0 < cls.length) {
hfs = ' class="' + cls.join(' ') + '"';
}
text2 = text + text2;
text = '<div'+hfs+'>';
if (9 < scnt) { text += '<div class="minipre">';}
text += text2;
if (9 < scnt) { text += '</div>';}
return text + '</div>';
}).join('');
},
MakeMainText: function(v, highlights, row) {
return $.map(v, function(e, i) {
var c = ['effect-outer'];
if (typeof highlights !== 'undefined' && highlights[i] === false) c.push('not-highlight');
$.merge(c, row.NobleColor[i]);
c = c.length > 0 ? ' class="'+c.join(' ')+'"' : '';
return '<div'+c+'>' + e.replace('<', '<').replace('>', '>') + '</div>';
}).join('');
},
MakePostText: function(v, grows, highlights) {
return $.map(v, function(e,i) {
var c = ['effect-outer'];
if (typeof grows !== 'undefined') {
if (grows[i] === 'Lv') c.push('growlv');
else if (grows[i] === 'OC') c.push('growoc');
else if (grows[i] === 'LvOC') {
c.push('growlvoc');
}
}
if (typeof highlights !== 'undefined' && highlights[i] === false) c.push('not-highlight');
c = c.length > 0 ? ' class="'+c.join(' ')+'"' : '';
return ('<div'+c+'>'
+ e.replace(/[<>]/g, function(g) { return g === '<' ? '<' : '>'; }).replace(/(proc|rate):(\d+%|(?:LV|OC)?変動)/g, function(g, $1, $2) { return '<div class="'+$1+'">'+$2+'</div>'; })
+ '</div>'
);
}).join('');
},
MakeDefault: function(v, highlights) {
return $.map(v, function(e, i) {
var hfs = (typeof highlights !== 'undefined' && highlights[i] === false) ? ' class="not-highlight"' : '';
return '<div'+hfs+'>' + e.replace('<', '<').replace('>', '>') + '</div>';
}).join('');
},
MakeOwnerNamesToLink: function(v) {
var uri = location.toString().split('/');
uri.splice(-2);
//[[名前>リンク]] or [[名前]] → <a>
return $.map(v, function(e) {
e = e.slice(2, -2).split('>');
var u = encodeURI(uri.join('/') + '/?page=' + (e.length > 1 ? e[1] : e[0]));
return '<a href="'+ u + '">'+e[0]+'</a>';
});
},
CalcScore: function(order, cur) {
var self = this, o = [], c = [], i, l, t;
for (i = 0, l = order.length; i < l; i++) {
t = order[i].split('-');
o.push({ cname: t[0], 'gt': ((t.length === 1 || t[1] === 'asc') ? 1 : -1) });
}
for (i = 0, l = cur.length; i < l; i++) c.push(cur[i]);
return c.sort(function(a, b) {
for (i = 0, l = o.length; i < l; i++) {
if (typeof self["asc"+o[i].cname] === 'function') {
var sign = self["asc"+o[i].cname](a, b, o[i].gt);
if (sign !== 0) { return sign; }
}
}
return 0;
});
},
// Owners : 鯖スキル優先のコレクションNo順
ascOwners: function(a, b, gt) {
var a0 = a.Owners.Value[0], a01 = a0[0], anum = parseInt(a0.substring(1)),
b0 = b.Owners.Value[0], b01 = b0[0], bnum = parseInt(b0.substring(1));
if (a01 === b01) return (anum === bnum) ? 0 : isNaN(anum) ? 1 : isNaN(bnum) ? -1 : (anum - bnum) * gt;
return a01 === 's' ? -1 : 1;
},
// Rare : 数値順。鯖スキルは劣後
ascRare: function(a, b, gt) {
var an = parseInt(a.Rare.Value), bn = parseInt(b.Rare.Value);
return an === bn ? 0 : isNaN(an) ? 1 : isNaN(bn) ? -1 : (an - bn) * gt;
},
// CT : 数値順。概念礼装は劣後
ascCT: function(a, b, gt) {
var an = parseInt(a.CT.Value), bn = parseInt(b.CT.Value);
return an === bn ? 0 : isNaN(an) ? 1 : isNaN(bn) ? -1 : (an - bn) * gt;
},
// HPMax : 数値順。鯖スキルは劣後
ascHPMax: function(a, b, gt) {
var an = parseInt(a.HPMax.Value), bn = parseInt(b.HPMax.Value);
return an === bn ? 0 : isNaN(an) ? 1 : isNaN(bn) ? -1 : (an - bn) * gt;
},
// ATKMax : 数値順。鯖スキルは劣後
ascATKMax: function(a, b, gt) {
var an = parseInt(a.ATKMax.Value), bn = parseInt(b.ATKMax.Value);
return an === bn ? 0 : isNaN(an) ? 1 : isNaN(bn) ? -1 : (an - bn) * gt;
},
// Target : 味方(自身 > 単体 > 全体) > 敵(自身 > 単体 > 全体) 順
ascTarget: function(a, b, gt) {
var at = this.torder.indexOf(a.GetHighlightFirst("Target"));
bt = this.torder.indexOf(b.GetHighlightFirst("Target"));
return (at === bt) ? 0 : (at === -1) ? 1 : (bt === -1) ? -1 : (at - bt) * gt;
},
// PreText : 各効果の内の最大文字数順
ascPreText: function(a, b, gt) {
var i, l,
av = a.PreText.Value, av2 = a.Target2.Value, at = 0, at2 = 0,
bv = b.PreText.Value, bv2 = b.Target2.Value, bt = 0, bt2 = 0;
for (i = 0, l = av.length; i < l; i++) {
at = Math.max(av[i].length, at);
at2 = Math.max(av2[i].length, at2);
}
for (i = 0, l = bv.length; i < l; i++) {
bt = Math.max(bv[i].length, bt);
bt2 = Math.max(bv2[i].length, bt2);
}
at += at2;
bt += bt2;
return (at === bt) ? 0 : (at <= 0) ? 1 : (bt <= 0) ? -1 : (at - bt) * gt;
},
// MainText : select optionの並び順
ascMainText: function(a, b, gt) {
var at = a.GetHighlightFirst("MainText"), anum = -1,
bt = b.GetHighlightFirst("MainText"), bnum = -1;
for (var i = 0, l = this.effectregs.length; i < l; i++) {
if (anum === -1) {
anum = this.effectregs[i].test(at) ? i : -1;
}
if (bnum === -1) {
bnum = this.effectregs[i].test(bt) ? i : -1;
}
}
return (anum === bnum) ? 0 : (anum === -1) ? 1 : (bnum === -1) ? -1 : (anum - bnum) * gt;
},
// PostText : アップ効果 > ダウン効果 順 (更にテキストで揃える)
ascPostText: function(a, b, gt) {
var at = a.GetHighlightFirst("PostText"), anum = -1,
bt = b.GetHighlightFirst("PostText"), bnum = -1;
for (var i = 0, l = this.updown.length; i < l; i++) {
if (anum === -1) {
anum = at.indexOf(this.updown[i]) !== -1 ? i : -1;
}
if (bnum === -1) {
bnum = bt.indexOf(this.updown[i]) !== -1 ? i : -1;
}
}
return (anum === bnum) ? 0 : (anum === -1) ? 1 : (bnum === -1) ? -1 : (anum - bnum) * gt;
},
// Value9 : 最大効果量順 (礼装ならValue1ないしValue0)
ascValue9: function(a, b, gt) {
var av = a.GetHighlightFirst("MaxValue"), av = av.replace('HP', '').split('(')[0],
anum = (av.indexOf('%') === -1) ? parseInt(av) * 100 : parseInt(av),
bv = b.GetHighlightFirst("MaxValue"), bv = bv.replace('HP', '').split('(')[0],
bnum = (bv.indexOf('%') === -1) ? parseInt(bv) * 100 : parseInt(bv);
if (!isNaN(anum) && av.indexOf('個') === -1 && av.indexOf('倍') === -1 && av.indexOf('段階') === -1) {
anum + 10000000;
}
if (!isNaN(bnum) && bv.indexOf('個') === -1 && bv.indexOf('倍') === -1 && bv.indexOf('段階') === -1) {
bnum + 10000000;
}
return (anum === bnum) ? 0 : isNaN(anum) ? 1 : isNaN(bnum) ? -1 : (anum - bnum) * gt;
},
GetNobleStyleFunc : function(row) {
var css = $.grep(row.NobleTraits.Value.slice(0, 1), function(e) { return e !== ""; }),
mts = row.MainText.GetEffect(row.Flags),
i = 0, l = mts.length;
for (; i < l; i++) {
if (mts[i].indexOf('宝具攻撃') !== -1) break;
}
return function(i2) {
return (i2 === i) ? css : [];
};
}
};
// 概念礼装テンプレート
var CreateCEList = function() {
this.headColumns = ['SkillName', 'Cost', 'Target', 'PreText', 'MainText', 'PostText', 'Value0', 'Value1', 'CEType'];
this.headDispNames = ['名前', 'コスト', '対象', '効果(左)', '効果(中)', '効果(右)', '上昇値', '最大開放', '備考'];
this.lineColumns = [ 'SkillName', 'Cost', 'Target', 'PreText', 'MainText', 'PostText', 'Value0', 'Value1', 'CEType'];
this.lineTagHeads = this._MakeTagHeadArray('ce', 'td', this.lineColumns, this.lineAttributes);
this.body = '<table class="celist"><colgroup /><thead class="ce-head" /><tbody /></table>';
this.MakeCraftStats = function(row) {
var t = '', s;
t += '<div class="namehead">';
t += '<span class="namehead-no">No.'+row['Owners'].Value[0].substring(1)+'</span>';
// Rare
if (row['Rare'].Value.length !== 0) { t += '<span class="star namehead-rare">'+this.star[parseInt(row.Rare.Value)]+'</span>'; }
t += '</div>';
// 概念礼装名
t += '<div class="namebody">'+ this.MakeSkillName(row) +'</div>';
// HP ATK
var s = '<div class="namehead"><span class="gainen_hp">HP</span> ';
if (!isNaN(row.HPBase.Value)) {
s += row.HPBase.Value+'';
if (!isNaN(row.HPMax.Value) && row.HPBase.Value != row.HPMax.Value) { s += '(最大:'+row.HPMax.Value+')'; }
} else if (!isNaN(row.HPMax.Value)) { s += row.HPMax.Value+''; }
else { s += '0'; }
s += '<br><span class="gainen_atk">ATK</span> ';
if (!isNaN(row.ATKBase.Value)) {
s += row.ATKBase.Value+'';
if (!isNaN(row.ATKMax.Value) && row.ATKBase.Value != row.ATKMax.Value) { s += '(最大:'+row.ATKMax.Value+')'; }
} else if (!isNaN(row.ATKMax.Value)) { s += row.ATKMax.Value+''; }
else { s += '0'; }
s += '</div>';
if (s.split('最大').length == 1) { s = s.replace('<br>', ''); }
t += s;
return t;
};
this.MakeEtc = function(row) {
var v, t = [], ea = row.EventOnly.Value;
v = parseInt(row.CEType.Value);
if ((v & 1) !== 0) { t.push('一般'); }
if ((v & 2) !== 0) { t.push('フレンドポイント召喚'); }
if ((v & 4) !== 0) { t.push('イベント期間限定'); }
if ((v & 8) !== 0) { t.push('イベントボーナス'); }
if ((v & 16) !== 0) {
t.push('絆礼装');
t.push(row.BondCEOwner.Value);
t.push('絆Maxまで<span class="bondpt">'+row.BondPt.Value+'</span>Pt');
}
if ((v & 32) !== 0) { t.push('EXPカードorチョコ'); }
for (var i = 0; i < ea.length; i++) {
if (ea[i] !== '-' && t.indexOf(ea[i]) == -1) { t.push(ea[i]); }
}
return t.join('<br>');
};
this.func = function(v, col, row, query) {
var t, ea, flags = row.Flags, hlights = row.Highlights, cetype = parseInt(row['CEType'].Value);
if (col === 'SkillName') {
if (cetype < 64) {
v = this.MakeCraftStats(row);
} else {
v = this.MakeSkillName(row);
}
}
else if (col === 'Target') {
v = this.MakeTarget(v, hlights);
}
else if (col === 'PreText') {
v = this.MakePreText(v, row.Target2.GetEffect(flags), hlights);
}
else if (col === 'MainText') {
v = this.MakeMainText(v, hlights, row);
}
else if (col === 'PostText') {
v = this.MakePostText(v, row.Grow.GetEffect(flags), hlights);
}
else if (col === 'Value1') {
v = this.MakeSValue(row.MaxValue.GetEffect(flags), hlights, row);
}
else if (col.indexOf('Value') === 0) {
v = this.MakeSValue(v, hlights, row);
}
else if (col === 'CEType') {
v = this.MakeEtc(row);
}
else if (v instanceof Array) {
v = this.MakeDefault(v);
}
return v;
};
};
$.extend(CreateCEList["proto"+"type"], CommonTemplate["proto"+"type"]);
var CreateSPEC_COMP = function() {
this.headColumns = ['SkillName', 'CT', 'Target', 'PreText', 'MainText', 'PostText', 'Value0','Value1','Value2','Value3','Value4','Value5','Value6','Value7','Value8','Value9'];
this.headDispNames = ['名前', 'CT', '対象', '効果(左)', '効果(中)', '効果(右)', 'Lv1', 'Lv2', 'Lv3', 'Lv4', 'Lv5', 'Lv6', 'Lv7', 'Lv8', 'Lv9', 'Lv10'];
this.lineColumns = ['SkillName', 'CT', 'Target', 'PreText', 'MainText', 'PostText', 'Value0','Value1','Value2','Value3','Value4','Value5','Value6','Value7','Value8','Value9'];
this.lineTagHeads = this._MakeTagHeadArray('sc','td', this.lineColumns, this.lineAttributes);
this.body = '<table class="speccomp"><colgroup /><thead class="sc-head"/><tbody /></table>';
this.func = function(v, col, row, query) {
var t,
flags = row.Flags,
hlights = row.Highlights,
cetype = parseInt(row.CEType.Value);
if (col === 'Target') {
v = this.MakeTarget(v, hlights);
}
else if (col === 'PostText') {
v = this.MakePostText(v, row.Grow.GetEffect(flags), hlights);
}
else if (col === 'PreText') {
v = this.MakePreText(v, row.Target2.GetEffect(flags), hlights);
}
else if (col === 'MainText') {
v = this.MakeMainText(v, hlights, row);
}
else if (col.indexOf('Value') === 0) {
v = this.MakeSValue(v, hlights, row);
}
else if (col === 'SkillName') {
v = '<div>'+ this.MakeSkillName(row) + '</div>';
// 概念礼装以外は保有者を追記
if (64 <= cetype) {
v += $.map(this.MakeOwnerNamesToLink(row.OwnerNames.Value), function(e) { return '<div class="owner-mini">'+e+'</div>'; }).join('');
}
}
else if (v instanceof Array) {
v = this.MakeDefault(v);
}
return v;
};
};
$.extend(CreateSPEC_COMP["proto"+"type"], CommonTemplate["proto"+"type"]);
var CreateRaw = function() {
// スタイルが反映されないようにdata-columnに'_'を加える
this.headColumns = ['CEType_','SkillName_','Owners_','OwnerNames_', 'NobleTraits_', 'Rare_','Cost_','HPBase_','ATKBase_','HPMax_','ATKMax_','CT_','BondCEOwner_','BondPt_','Sign_','Demerit_','EventOnly_','ApplyUser_','Target_','Target2_','PreText_','MainText_','PostText_','Grow_','Value0_','Value1_','Value2_','Value3_','Value4_','Value5_','Value6_','Value7_','Value8_','Value9_'];
this.headDispNames = ['CEType','SkillName','Owners','OwnerNames', 'NobleTraits', 'Rare','Cost','HPBase','ATKBase','HPMax','ATKMax','CT','BondCEOwner','BondPt','Sign','Demerit','EventOnly','ApplyUser','Target','Target2','PreText','MainText','PostText','Grow','Value0','Value1','Value2','Value3','Value4','Value5','Value6','Value7','Value8','Value9'];
this.lineColumns = ['CEType_','SkillName_','Owners_','OwnerNames_', 'NobleTraits_', 'Rare_','Cost_','HPBase_','ATKBase_','HPMax_','ATKMax_','CT_','BondCEOwner_','BondPt_','Sign_','Demerit_','EventOnly_','ApplyUser_','Target_','Target2_','PreText_','MainText_','PostText_','Grow_','Value0_','Value1_','Value2_','Value3_','Value4_','Value5_','Value6_','Value7_','Value8_','Value9_'];
this.lineTagHeads = this._MakeTagHeadArray('raw','td', this.lineColumns, this.lineAttributes);
this.body = '<table class="raw"><colgroup /><thead class="raw-head" /><tbody /></table>';
this.AppendLine = function(row, query) {
var flags = row.Flags;
var td = [], colname = '';
for (var i = 0, l = this.lineColumns.length; i < l; i++) {
colname = this.lineColumns[i].slice(0, -1);
if (typeof row[colname] !== 'undefined') {
td.push(this.lineTagHeads[i] + this.func(row[colname].GetEffect(flags), colname, row, query) + '</td>');
}
}
this.line.push('<tr>' + td.join('') + '</tr>');
}
this.func = function(v, col, row, query) {
return (v instanceof Array) ? this.MakeDefault(v) : (typeof v === 'number' && isNaN(v)) ? '' : v;
};
};
$.extend(CreateRaw["proto"+"type"], CommonTemplate["proto"+"type"]);
var CreateDetail = function() {
this.head = '<tr><th>まだ未実装</th></tr>';
this.line = '<tr><td>-</td></tr>';
this.lineTagHeads = this._MakeTagHeadArray('detail','td', this.lineColumns, this.lineAttributes);
this.body = '<table class="detail"><thead class="detail-head" /><tbody /></table>';
this.AppendLine = function(row, query) { };
this.func = function(v, col, row, query) {
return '';
};
};
$.extend(CreateDetail["proto"+"type"], CommonTemplate["proto"+"type"]);
return {
RAW : new CreateRaw(),
DETAIL : new CreateDetail(),
SPEC_COMP : new CreateSPEC_COMP(),
CE_LIST : new CreateCEList()
};
})();
var DataSource = {
Header: {},
Rows: [],
QueryCache: {},
Order: [],
Score: [],
sortable: null,
SORT_STORE_KEY: 'fgowiki-skilllist-order',
timerId: [],
SetData: function(rows) {
var i, l, obj, order, self = this;
this.Header = {};
this.Rows = [];
for (i = 0, l = rows[0].length; i < l; i++) {
obj = new Column(rows[0][i], i);
this.Header[rows[0][i]] = obj;
}
for (i = 1, l = rows.length; i < l; i++) {
this.Rows.push(new Row(rows[i], this));
}
if (this.sortable == null) {
this.sortable = Sortable.create($('#skform-order')[0], {
group: self.SORT_STORE_KEY,
dataIdAttr : 'data-column',
draggable : '.column-order',
ghostClass : 'ghost',
chosenClass : 'chosen',
onSort : function(evt) {
self.Create();
self.sortable.save();
},
store : {
get: function(sortable) {
order = JSON.parse(sessionStorage.getItem(self.SORT_STORE_KEY)) || {};
if (order[location]) {
order = order[location];
for (i = 0, l = order.length; i < l; i++) {
$('.column-order[data-column^='+order[i].split('-')[0]+']').attr('data-column', order[i]);
}
return order;
} else return [];
},
set: function(sortable) {
order = JSON.parse(sessionStorage.getItem(self.SORT_STORE_KEY)) || {};
order[location] = $.map($('#skform-order > .column-order'), function(e) { return $(e).attr('data-column'); });
sessionStorage.setItem(self.SORT_STORE_KEY, JSON.stringify(order));
}
},
});
}
},
_setBits: function(src, index, value, range) {
value = parseInt(value);
if (typeof range !== 'number') range = 1;
if (index >= src.length) {
while (src.length < (index + range)) { src.push(0); }
}
if (range == 1) src[index] = value ? 1 : 0;
else {
for (var i = index; i < (index+range); i++) {
src[i] = (value & (1 << (i - index))) !== 0 ? 1 : 0;
}
}
},
_getBits: function(src, index, range) {
var len = src.length, num = 0;
if (typeof range !== 'number') range = 1;
if (index >= len) { return null; }
else if (range == 1) return src[index];
else {
for (var i = index; i < (index+range); i++) {
num |= (src[i] << (i - index));
}
num = num >>> 0;
return num;
}
},
_b64chars: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
Serialize: function(form) {
var ea = [];
// createid(作成日+インデックス2桁)を古い順のインデックスに並び替える
$.map($('#skform-effect option'), function(e) { return {selected: $(e).prop('selected'), createid: parseInt(e.getAttribute('data-createid')) }; })
.sort(function(a,b) { return a.createid - b.createid; })
.forEach(function(e, i) {
var x = i >> 5, r = parseInt(i % 32);
if (typeof ea[x] === 'undefined') { ea[x] = 0; }
if (e.selected) {
ea[x] |= (1 << r);
}
});
var bits = [], idx = 0;
this._setBits(bits, idx, $.map($('.skform-data', form), function(e) { return $(e).prop('checked') ? 1 : 0; }).reduce(function(prev, cur, i) { return prev + (cur << i); }), 4); idx += 16;
this._setBits(bits, idx, Math.min(Math.max(0, parseInt($('#skform-hpmin').val()) || 0), 4294967295), 32); idx += 32;
this._setBits(bits, idx, Math.min(Math.max(0, parseInt($('#skform-hpmax').val().length===0 ? '4294967295':$('#skform-hpmax').val()) || 0), 4294967295), 32); idx += 32;
this._setBits(bits, idx, Math.min(Math.max(0, parseInt($('#skform-atkmin').val()) || 0), 4294967295), 32); idx += 32;
this._setBits(bits, idx, Math.min(Math.max(0, parseInt($('#skform-atkmax').val().length===0 ? '4294967295':$('#skform-atkmax').val()) || 0), 4294967295), 32); idx += 32;
this._setBits(bits, idx, $.map($('.skform-rarity'), function(e) { return $(e).prop('checked') ? 1 : 0; }).reduce(function(prev, cur, i) { return prev + (cur << i); }), 8); idx += 8;
this._setBits(bits, idx, $.map($('.skform-target'), function(e) { return $(e).prop('checked') ? 1 : 0; }).reduce(function(prev, cur, i) { return prev + (cur << i); }), 8); idx += 8;
this._setBits(bits, idx, $('#skform-applyuser').prop('selectedIndex'), 2); idx += 2;
this._setBits(bits, idx, $.map($('.skform-kind'), function(e) { return $(e).prop('checked') ? 1 : 0; }).reduce(function(prev, cur, i) { return prev + (cur << i); }), 6); idx += 16;
for (var i = 0, l = ea.length; i < l; i++) {
this._setBits(bits, idx, ea[i], 32); idx += 32;
}
var num = 0;
var code = '';
for (var i = 0, l = idx + 1; i < l; i++) {
if ((i % 6) === 0 && 0 < i) {
code += this._b64chars.charAt(num);
num = 0;
}
num |= (bits[i] << (i % 6));
}
code += ':' + $('.skform-styles input:checked').val();
var keyword = $('#skform-keyword').val();
if (typeof keyword === 'string' && keyword.length > 0) {
code += ':' + keyword.trim();
}
return code;
},
Deserialize: function(form, code) {
code = code.split(':');
$('.skform-styles input[value="'+code[1]+'"]').prop('checked', true);
$('#skform-keyword').val((code[2] || '').trim());
code = code[0];
var bits = [], len = code.length * 6;
for (var i = 0, l = code.length, c = 0; i < l; i++) {
if ((c = this._b64chars.indexOf(code[i])) == -1) { console.log('DataSource.Deserialize(): Failed'); return; }
for (var j = 0; j < 6; j++) {
bits.push(((c & (1 << j)) !== 0) ? 1 : 0);
}
}
var idx = 0, i, n, n2, n3;
n = this._getBits(bits, idx, 4); idx += 16;
for (i = 0, l = $('.skform-data', form).length; i < l; i++) {
$('#skform-data'+(i+1)).prop('checked', (n & (1 << i)) !== 0);
}
$('#skform-hpmin').val(this._getBits(bits, idx, 32)); idx += 32;
n = this._getBits(bits, idx, 32); $('#skform-hpmax').val(n === 4294967295 ? '' : n); idx += 32;
$('#skform-atkmin').val(this._getBits(bits, idx, 32)); idx += 32;
n = this._getBits(bits, idx, 32); $('#skform-atkmax').val(n === 4294967295 ? '' : n); idx += 32;
n = this._getBits(bits, idx, 8); idx += 8;
for (i = 0, l = $('.skform-rarity').length; i < l; i++) {
$('#skform-rarity'+(i+1)).prop('checked', (n & (1 << i)) !== 0);
}
n = this._getBits(bits, idx, 8); idx += 8;
for (i = 0, l = $('.skform-target').length; i < l; i++) {
$('#skform-target'+(i+1)).prop('checked', (n & (1 << i)) !== 0);
}
$('#skform-applyuser').prop('selectedIndex', this._getBits(bits, idx, 2)); idx += 2;
n = this._getBits(bits, idx, 6); idx += 16;
for (i = 0, l = $('.skform-kind').length; i < l; i++) {
$('.skform-kind:eq('+i+')').prop('checked', (n & (1 << i)) !== 0);
}
n = [];
while ((n2 = this._getBits(bits, idx, 32)) !== null) { n.push(n2); idx += 32; }
n.push(n2); idx += 32;
$('#skform-effect option').sort(function(a, b) {
return parseInt(a.getAttribute('data-createid')) - parseInt(b.getAttribute('data-createid'));
})
.each(function(i, e) {
var x = i >> 5, r = parseInt(i % 32);
if (typeof n[x] === 'undefined') { console.log('DataSource.Deserialize(): Failed (reason:effect)'); return; }
$(e).prop('selected', (n[x] & (1 << r)) !== 0);
});
},
// created_scoreを並び替えてthis.Scoreに入れる。ソート時実行時はSortではなくCreateを使用する
Sort: function(created_score) {
var i, j, $i, $j, l, row, tmp,
// リクエストされたソート順
data_columns = this.sortable != null ? this.sortable.toArray() : null,
// 現在のTRの並び順
cur = (typeof created_score === 'undefined') ? this.Score : created_score,
// 新しい並び順
newscore;
// ソート順更新リクエスト(ソート変更なしの可能性もあるがDOM操作しないので影響ない)
if (typeof data_columns === 'object' && data_columns instanceof Array && 0 < data_columns.length)
this.Order = data_columns;
newscore = this.QueryCache.GetStyle().CalcScore(this.Order, cur);
this.Score = newscore;
},
Refresh: function(form) {
this.QueryCache = new SkFormQuery(form);
},
ClearTimer: function() {
var tid;
if (this.timerId != null) {
while (tid = this.timerId.pop()) clearTimeout(tid);
this.timerId = [];
}
},
LazyAppend: function(_temp) {
var self = this, $elem, loopFunc, i = 0, temp = _temp, width = 0;
$elem = $('#sktable').empty().append(temp.GetTable());
if ($elem.find('colgroup').length > 0) {
$elem.find('col').each(function() { width += parseInt($(this).css('width')) || 0; });
$elem.find('table').css('width', width);
} else { $elem.find('table').css('width', ''); }
$elem = $elem.find('tbody');
loopFunc = function() {
if (temp.line.length <= i) return;
$elem.append(temp.GetLines(i, i+100));
i += 100;
self.timerId.pop();
self.timerId.push(setTimeout(loopFunc, 1));
};
loopFunc();
},
Create: function() {
var i, l, row, self = this, temp = this.QueryCache.GetStyle(), score = [];
this.ClearTimer();
temp.ClearLines();
for (i = 0, l = this.Rows.length; i < l; i++) {
row = self.Rows[i];
self.QueryCache.StartRowCheck(row);
if (!self.QueryCache.CETypeCheck(row)) { continue; }
if (!self.QueryCache.StatusCheck(row)) { continue; }
if (!self.QueryCache.RarityCheck(row)) { continue; }
if (!self.QueryCache.NobleCheck(row)) { continue; }
if (!self.QueryCache.TargetCheck(row)) { continue; }
if (!self.QueryCache.EffectCheck(row)) { continue; }
if (!self.QueryCache.KindCheck(row)) { continue; }
if (!self.QueryCache.KeywordCheck(row)) { continue; }
score.push(row);
}
this.Sort(score);
for (i = 0, l = this.Score.length; i < l; i++) {
temp.AppendLine(this.Score[i], self.QueryCache);
}
this.LazyAppend(temp);
$('#skform-overlay').fadeOut();
},
};
function SkFormQuery(form) {
var numcheck = function(id, def) {
var num = parseInt($(form).find(id).val());
return !isNaN(num) ? Math.min(num, 4294967295) : def;
};
var sum = function($elem) {
return $elem.length === 0 ? 0 : $.map($elem, function(e) { return parseInt(e.getAttribute('data-regex')); })
.reduce(function(a,b) { return a + b; });
};
this._applyuser = new RegExp($('#skform-applyuser').val());
this._cetype = sum($('.skform-data:checked', form));
this._hpmin = numcheck('#skform-hpmin', 0);
this._hpmax = numcheck('#skform-hpmax', 4294967295);
this._atkmin = numcheck('#skform-atkmin', 0);
this._atkmax = numcheck('#skform-atkmax', 4294967295);
this._command = (($(form).find('.skform-command:checked').length > 0) ? $.map($(form).find('.skform-command:checked'), function(e) { return $(e).attr('data-regex'); }) : []);
this._rarity = (($(form).find('.skform-rarity:checked').length > 0) ? $.map($(form).find('.skform-rarity:checked'), function(e) { return $(e).attr('data-regex'); }).join('') : '');
this._target = (($(form).find('.skform-target:checked').length > 0) ? $.map($(form).find('.skform-target:checked'), function(e) { return new RegExp($(e).attr('data-regex')); }) : []);
this._option_length = $(form).find('#skform-effect option').length;
this._option_selected = (($(form).find('#skform-effect').val() !== null) ? $.map($(form).find('#skform-effect').val(), function(e) {
return new RegExp(e);
}) : []);
this._kind = sum($('.skform-kind:checked', form));
this._keywords = $.map($(form).find('#skform-keyword').val().trim().split('OR'), function(e) {
e = e.trim();
var m = /^([se])(?:0*)?(\d{0,3})$/i.exec(e);
return m ? m[1] + m[2] : e;
});
this._style = $('.skform-styles input:checked').val();
}
SkFormQuery["proto"+"type"] = {
// StartRowCheckは必ず最初に行うこと
StartRowCheck: function(row) {
var applyuser = row.ApplyUser.Value;
var length = row.ApplyUser.Count;
var flags = [];
for (var i = 0; i < length; i++) {
flags.push(this._applyuser.test(applyuser[i]));
}
row.Flags = flags;
row.Highlights = this.GetHighlightEffectIndex(row);
row.NobleColor = [];
var css = $.grep(row.NobleTraits.Value.slice(0, 1), function(e) { return e !== ""; }),
mts = row.MainText.GetEffect(row.Flags);
for (var i = 0, l = mts.length; i < l; i++) {
if (mts[i].indexOf('宝具攻撃') !== -1) { row.NobleColor.push(css); }
else row.NobleColor.push([]);
}
},
CETypeCheck: function(row) {
return (parseInt(row.CEType.Value) & this._cetype) !== 0;
},
StatusCheck: function(row) {
var maxhp = row.HPMax.Value || 0;
var maxatk = row.ATKMax.Value || 0;
return this._hpmin <= maxhp && maxhp <= this._hpmax && this._atkmin <= maxatk && maxatk <= this._atkmax;
},
RarityCheck: function(row) {
var rarity = row.Rare.Value;
return rarity.length === 0 || this._rarity.indexOf(rarity) !== -1;
},
TargetCheck: function(row) {
var targets = row.Target.Value;
var length = row.Target.Count;
for (var i = 0; i < length; i++) {
if (row.Flags[i] && row.Highlights[i]) {
for (var j = 0; j < this._target.length; j++) {
if (this._target[j].test(targets[i])) { return true; }
}
}
}
return false;
},
NobleCheck: function(row) {
return parseInt(row.CEType.Value) != 256 || this._command.indexOf(row.NobleTraits.Value[0]) !== -1;
},
GetHighlightEffectIndex: function(row) {
var count = row.GetCount();
var ti = 0, ar = [];
for (var i = 0, c = row.GetCount(); i < c; i++) {
if (row.Flags[i]) {
var flg = false;
for (var n = 0, l = this._option_selected.length; n < l; n++) {
if (this._option_selected[n].test(row.MainText.Value[i])) { flg = true; break; }
}
ar.push(flg);
ti++;
}
}
return ar;
},
EffectCheck: function(row) {
var reglen = this._option_selected.length;
if (this._option_length == reglen) { return true; } // 全表示
var maintext = row.MainText.Value;
var length = row.MainText.Count;
for (var i = 0; i < length; i++) {
if (row.Flags[i]) {
for (var j = 0; j < reglen; j++) {
if (this._option_selected[j].test(maintext[i])) { return true; }
}
}
}
return false;
},
KindCheck: function(row) {
var cetype = parseInt(row.CEType.Value);
// 概念礼装以外は常にtrue
return (64 <= cetype) || ((cetype & this._kind) !== 0);
},
KeywordCheck: function(row) {
if (this._keywords.length === 1 && this._keywords[0] === "") return true;
for (var i = 0, l = this._keywords.length; i < l; i++) {
if (this._keywords[i][0] === 's' || this._keywords[i][0] === 'e') {
var o = row.Owners.Value;
if (o.indexOf(this._keywords[i]) !== -1) {
return true;
}
}
if (row.SkillName.Value.indexOf(this._keywords[i]) !== -1 || row.BondCEOwner.Value.indexOf(this._keywords[i]) !== -1) {
return true;
}
for (var j = 0, eo = row.EventOnly.Value, eolen = eo.length; j < eolen; j++) {
if (eo[j].indexOf(this._keywords[i]) !== -1) { return true; }
}
for (var j = 0, on = row.OwnerNames.Value, onlen = on.length; j < onlen; j++) {
if (on[j].indexOf(this._keywords[i]) !== -1) { return true; }
}
}
return false;
},
GetStyle: function(row) {
if (this._style === 'ce-list') {
return TABLE_TEMPLATE.CE_LIST;
} else if (this._style === 'detail') {
return TABLE_TEMPLATE.DETAIL;
} else if (this._style === 'spec-comp') {
return TABLE_TEMPLATE.SPEC_COMP;
} else {
return TABLE_TEMPLATE.RAW;
}
}
};
// Row.{ColumnName} : Column
// Row.{ColumnName}.Value : Array|String
// Row.{ColumnName}.Count : 効果数
// Row.{ColumnName}.IsEffect : 効果Columnか(Arrayか)
// Row.{ColumnName}.Name : column name
// Row.{ColumnName}.Index : column index
// Row.{ColumnName}.GetEffect(flags) : 表示して良い効果のみを配列で返す
// Row.DataSource : DataSource
// ----
// Row.GetCount() : 効果数
// Row.GetOwnerCount() : 所持者数
// Row.GetLine(line_index=効果番号) : Arrayタイプの列の効果番号の値を{}で返す
function Row(_row, ds) {
for (var key in ds.Header) {
if (ds.Header[key] instanceof Column) {
this[key] = new Column(ds.Header[key].Name, ds.Header[key].Index);
}
}
this.DataSource = ds;
for (var colname in ds.Header) {
var item = this[colname];
item.Count = 0;
item.Value = (_row.length <= item.Index || typeof _row[item.Index] === 'undefined') ? "" : _row[item.Index];
item.IsEffect = false;
if (item.Value.indexOf('\n') != -1) {
item.Value = $.map(item.Value.split('\n'), function(e) { return e.trim(); });
item.Count = item.Value.length;
item.IsEffect = this.expectArray.indexOf(colname) === -1;
} else if (this.arrayColumns.indexOf(colname) != -1) {
item.Value = [item.Value];
item.Count = 1;
item.IsEffect = this.expectArray.indexOf(colname) === -1;
}
if (colname == 'HPBase' || colname == 'HPMax' || colname == 'ATKBase' || colname == 'ATKMax') {
item.Value = parseInt(item.Value);
}
if (item.IsEffect && colname.indexOf('Value') === 0 && 0 < item.Value[0].length) {
this.MaxValue = item;
}
}
this.ClearFlags();
}
Row["proto"+"type"] = {
arrayColumns : ['Owners', 'OwnerNames', 'NobleTraits', 'Sign', 'Demerit', 'EventOnly', 'ApplyUser', 'Target', 'Target2', 'PreText',
'MainText', 'PostText', 'Grow', 'Value0', 'Value1', 'Value2', 'Value3', 'Value4', 'Value5', 'Value6',
'Value7', 'Value8', 'Value9'],
expectArray : ['Owners', 'OwnerNames', 'NobleTraits'],
ClearFlags: function() {
this.Flags = []; // Values表示フラグ
this.Highlights = []; // 表示行の強調表示フラグ
for (var i = 0, l = this.Sign.Value.length; i < l; i++) {
this.Flags.push(true);
this.Highlights.push(true);
}
},
// 強調表示が有効な最初のValueの行テキストを返す(※表示行のインデックスではない)
GetHighlightFirst: function(colname) {
var i = -1;
if (this[colname].IsEffect) {
var hi = this.Highlights.indexOf(true); // flagsのhi個目のtrue
for (i = this.Flags.indexOf(true); i !== -1 && 0 < hi; i = this.Flags.indexOf(true, i+1), hi--) ;
}
return (i === -1) ? null : this[colname].Value[i];
},
GetCount: function() { return this.Sign.Count; },
GetOwnerCount: function() { return this.Owners.Count; },
GetLine: function(line_index) {
var obj = {};
for (var colname in this.DataSource.Header) {
if (colname != 'Owners' && colname != 'OwnerNames' && this[colname] instanceof Array) {
obj[colname] = this[colname][line_index];
}
}
return obj;
}
};
function Column(_name, _index) {
this.Name = _name;
this.Index = _index;
}
Column["proto"+"type"] = {
GetEffect: function(flags) {
return this.IsEffect ? this.Value.filter(function(e, i) { return flags[i]; }) : this.Value;
}
};
// 入力検証用
function shouldBe2Validated(field) {
return (
!($(field).attr('readonly') || field.readonly) &&
!($(field).attr('disabled') || field.disabled) &&
($(field).attr('pattern') || $(field).attr('required'))
);
}
function instantValidation(field) {
if (shouldBe2Validated(field)) {
var invalid = ($(field).attr('required') && !field.value) ||
($(field).attr('pattern') && !new RegExp($(field).attr('pattern')).test(field.value));
if (!invalid && $(field).attr('aria-invalid')) {
$(field).removeAttr('aria-invalid');
} else if (invalid && !$(field).attr('aria-invalid')) {
$(field).attr('aria-invalid', true);
}
}
}
// 処理メイン
$(function(){
//スマホページはレスポンシブ
if (location.toString().indexOf('/sp/') !== -1 || ($('#contents').attr('class') || '').indexOf('uk-') !== -1) {
$('#skform, #sktable').addClass('responsive');
}
//ページ読込み直後はフォウくんを表示しておく
$('#skform-overlay').show();
// フォーム入力データの読込み
if ($('#skilllist').length > 0) {
DataSource.Deserialize($('#skform'), $('#skilllist').text().trim());
} else {
// 全効果を表示欄に移動
$('#skform-effect option').prop('selected', true);
}
// 入力欄を完全に消すwiki構文オプションの存在チェック #divclass(skhide)
if ($('.skhide').length === 0) { $('#skform').css('display', 'inline-block'); }
// 入力欄を閉じた状態にするwiki構文オプションの存在チェック #divclass(skclose)
if ($('.skclose').length === 0 && $('#skform-expand').prop('checked')) {
$('#skform > ul > li:nth-of-type(n + 2)').show();
} else { $('#skform-expand').prop('checked', false); }
// サーヴァントスキルモード(wiki構文オプション)があれば概念礼装の入力フォームを隠す
if (0 < $('.sksvt').length) {
$('#skform-data4, #skform-data5').prop('checked', false);
$('.skform-ce-only, .skform-mst-only').hide();
$('#skform-style3').prop('checked', true);
}
// 概念礼装モード(wiki構文オプション)があればサーヴァントスキルの入力フォームを隠す
else if (0 < $('.skce').length) {
$('#skform-data1, #skform-data2, #skform-data3, #skform-data5').prop('checked', false);
$('.skform-svt-only, .skform-mst-only, .skform-data-li').hide();
}
// マスタースキルモード(wiki構文オプション)があればサーヴァントスキルの入力フォームを隠す
else if (0 < $('.skmst').length) {
$('#skform-data1, #skform-data2, #skform-data3, #skform-data4').prop('checked', false);
$('.skform-svt-only, .skform-ce-only, .skform-data-li').hide();
$('#skform-style3').prop('checked', true);
}
// すべて隠さない
else {
$('.skform-data').val(VIEW_MODE.All+'');
}
// multiselectの初期化
$('#skform-effect').multiSelect({
selectableOptgroup: true,
selectableHeader: '<div>非表示:</div><input type="text" class="search-input" autocomplete="off" placeholder="Search...">',
selectionHeader: '<div>表示:</div><input type="text" class="search-input" autocomplete="off" placeholder="Search...">',
selectableFooter: '<div class="skform-effect-footer"><button type="button" name="allshow" id="skform-allshow">すべて表示→</div>',
selectionFooter: '<div class="skform-effect-footer"><button type="button" name="allhide" id="skform-allhide">←すべて非表示</div>',
afterInit: function(ms){
var that = this,
$selectableSearch = that.$selectableUl.prev(),
$selectionSearch = that.$selectionUl.prev(),
selectableSearchString = '#'+that.$container.attr('id')+' .ms-elem-selectable:not(.ms-selected)',
selectionSearchString = '#'+that.$container.attr('id')+' .ms-elem-selection.ms-selected';
that.qs1 = $selectableSearch.quicksearch(selectableSearchString)
.on('keydown', function(e){
if (e.which === 40){
that.$selectableUl.focus();
return false;
}
});
that.qs2 = $selectionSearch.quicksearch(selectionSearchString)
.on('keydown', function(e){
if (e.which == 40){
that.$selectionUl.focus();
return false;
}
});
},
afterSelect: function(){
this.qs1.cache();
this.qs2.cache();
},
afterDeselect: function(){
this.qs1.cache();
this.qs2.cache();
}
});
// ソートの項目クリックで昇順降順切り換え
$('#skform').on('click', '.column-order', function(){
var arr = $(this).attr('data-column').split('-');
if (arr.length !== 2 || arr[1] === 'desc') {
$(this).attr('data-column', arr[0] + '-asc');
} else {
$(this).attr('data-column', arr[0] + '-desc');
}
DataSource.Create();
DataSource.sortable.save();
});
// 全効果を表示にするボタン
$('#skform').on('click', '#skform-allshow', function(){
$('#skform-effect').multiSelect('select_all');
return false;
});
// 全効果を非表示にするボタン
$('#skform').on('click', '#skform-allhide', function(){
$('#skform-effect').multiSelect('deselect_all');
return false;
});
// リセットボタンで入力欄を初期値にするボタン
$('#skform-reset').click(function(){
$('#skform-hpmin, #skform-atkmin').val("0");
$('#skform-hpmax, #skform-atkmax').val("");
$('.skform-rarity, .skform-target, .skform-kind').prop('checked', true);
$('#skform-applyuser').prop('selectedIndex', 1);
$('#skform-style1').prop('checked', true);
$('#skform-effect').multiSelect('select_all');
$('#skform-effect').multiSelect('refresh');
return false;
});
// 検索ボタン
$('#skform-execute').click(function(){
$('#skform-overlay').fadeIn("normal", function() {
setTimeout(function() {
DataSource.Refresh($('#skform'));
DataSource.Create();
}, 0);
});
});
// Wiki構文コピーボタン
$('#skform-serialize').click(function() {
var data = DataSource.Serialize($('#skform'));
var source = '';
source += '//#divclass(skhide) // {省略可} 入力欄を完全に消す\r\n//#divclass(skclose) // {省略可} 入力欄を閉じた状態にする\r\n//#divclass(sksvt) // {省略可} 鯖スキル・宝具以外検索できなくする\r\n//#divclass(skce) // {省略可} 概念礼装以外検索できなくする\r\n//#divclass(skmst) // {省略可} マスタースキル以外検索できなくする\r\n';
source += '#include(javascript/skilllist)\r\n#divid(skilllist){'+data+'}';
$('#skform-wikiedit textarea').val(source);
$('#skform-wikiedit').fadeIn();
});
// Wiki構文ポップアップを閉じるボタン
$('#skform-wikiedit-close').click(function() {
$('#skform-wikiedit').fadeOut();
});
// テキストエリアクリックで文章を全選択する
$('#skform-wikiedit textarea').focus(function() { this.setSelectionRange(0, 9999); })
.click(function() { this.setSelectionRange(0, 9999); return false; });
// フォーカス移動時にHP,ATKの入力文字の検証をする
$('#skform-hpmin, #skform-atkmin, #skform-hpmax, #skform-atkmax').change(function() {
var n = parseInt($(this).val());
if ($(this).attr('id').indexOf('min') != -1 && isNaN(n)) {
$(this).val('0');
return;
}
if ($(this).attr('id').indexOf('max') != -1 && !isNaN(n) && 4294967295 < n) {
$(this).val('');
return;
}
instantValidation(this);
});
// 入力フォームの展開/折り畳みボタン
$('#skform-expand').change(function() {
if ($(this).prop('checked')) {
$('#skform > ul > li:nth-of-type(n + 2)').show();
if (0 < $('.sksvt').length) {
$('.skform-ce-only, .skform-mst-only').hide();
}
else if (0 < $('.skce').length) {
$('.skform-svt-only, .skform-mst-only').hide();
}
else if (0 < $('.skmst').length) {
$('.skform-ce-only, .skform-svt-only').hide();
}
}
else { $('#skform > ul > li:nth-of-type(n + 2)').hide(); }
});
// 横スクロール拡張
$('#skform-max-width').change(function() {
var $elem = $('#sktable > table'), width = 0;
if ($('#contents[class^=uk-]').length > 0) { // レスポンシブ
if ($(this).prop('checked')) {
$('#wikibody').addClass('hscroll-expand-uk');
$elem.addClass('hscroll-expand-uk');
} else {
$('#wikibody').removeClass('hscroll-expand-uk');
$elem.removeClass('hscroll-expand-uk');
}
} else { // オレンジ ver2 決め打ち
if ($(this).prop('checked')) {
$('#contents').addClass('hscroll-expand');
$elem.addClass('hscroll-expand-uk')
} else {
$('#contents').removeClass('hscroll-expand');
$elem.removeClass('hscroll-expand-uk')
}
}
if ($elem.find('colgroup').length > 0) {
$elem.find('col').each(function() { width += parseInt($(this).css('width')) || 0; });
$elem.css('width', width);
} else { $elem.css('width', ''); }
});
// ハイライト変更
$('#skform-reverse-highlight').change(function() {
$t = $('#sktable');
if ($t.hasClass('reverse-highlight')) { $t.removeClass('reverse-highlight'); }
else $t.addClass('reverse-highlight');
});
// データ読込み
var API_KEY = 'AIzaSyCAO2Dq4BMcbg3VlPtC9riyPLklfr02v-s';
var SPREADSHEET_ID = '13I84mtXMeSsO6JrpSm-Xg3g5LAeEtDP9R4V-ypB7M60';
//var SPREADSHEET_ID = '13ttH1I8ATIsCnl6uqB9JfEzZKT6uEqnOsE3kCjHAYoU'; // デバッグ用
$.getJSON("https://sheets.googleapis.com/v4/spreadsheets/"+SPREADSHEET_ID+"/values/skillList.csv!A1:FF9999?key="+API_KEY, null,
function(data){
if (data != null && data.values != null && data.values.length > 0) {
DataSource.SetData(data.values);
DataSource.Refresh($('#skform'));
DataSource.Create();
} else {
$('#skform-overlay').fadeOut();
}
});
});
})(jQuery);
</script>
}}}}}
#html2(){{{{{
<div style="display: none;" id="sk-inlinestyles"><!--
/************** 入力フォーム ***************/
#skilllist {
display: none;
}
#skform {
padding-right: 10px;
position: relative;
display: none;
min-width: 680px;
}
.skform-title {
border-bottom: 5px solid #acf;
color: black;
font-size: 16px;
line-height: 20px;
font-weight: bold;
}
#skform-expand {
display: none;
}
#skform-expand + label {
display: inline-block;
box-sizing: border-box;
width: calc(135px * .75);
text-align: center;
height: calc(51px * .75);
line-height: 20px;
vertical-align: middle;
margin-bottom: 2px;
line-height: calc(51px * .75);
cursor: pointer;
color: white;
background: url("//w.atwiki.jp/f_go?cmd=upload&act=open&pageid=2993&file=button.png") no-repeat left top / calc(135px * .75);
}
#skform-expand + label:hover {
background:
linear-gradient( to bottom, rgba(255,255,202,.2), rgba(255,255,2,.8)),
url("//w.atwiki.jp/f_go?cmd=upload&act=open&pageid=2993&file=button.png") no-repeat left top / calc(135px * .75);
}
#skform-expand:checked + label {
background-position: left center;
}
#skform-expand:checked + label:hover {
background:
linear-gradient( to bottom, rgba(255,255,202,.2), rgba(255,255,2,.8)),
url("//w.atwiki.jp/f_go?cmd=upload&act=open&pageid=2993&file=button.png") no-repeat left center / calc(135px * .75);
}
#skform > ul {
margin: 0px;
padding: 0px;
}
#skform > ul > li {
padding: 5px 0 0 0;
border-bottom: 1px solid #eee;
position: relative;
list-style-type: none;
list-style-image: none;
list-style-position: outside;
}
#skform > ul > li:nth-of-type(n + 2) {
display: none;
}
#skform > ul > li:first-child,
#skform > ul > li:last-child {
border-bottom: 1px solid #777;
}
.skform-caption {
width: 100px;
margin-top: 3px;
display: inline-block;
padding: 3px 3px 3px 10px;
font-weight: bold;
vertical-align: top;
}
#skform > ul > li > label:first-child {
float: left;
}
/* ローディング中 */
#skform-overlay,
#skform-wikiedit {
height: 100%;
width: 100%;
display: none;
position: absolute;
z-index: 10;
text-align: center;
}
#skform-overlay {
background: #000;
opacity: .5;
}
#skform-wikiedit {
background: rgba(0,0,0,.5);
}
#skform-fou {
width: 120px;
height: 88px;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
position: absolute;
z-index: 11;
opacity: .8;
}
#skform-wikiedit textarea {
width: 75%;
height: 200px;
padding: 10px;
display: inline-block;
}
.wikiedit-fotter {
background: #acf;
border-top: 1px solid #999;
padding: 8px;
}
/* 効果 multiSelect */
.ms-container{
background: transparent url('//w.atwiki.jp/f_go?cmd=upload&act=open&pageid=2993&file=switch.png') no-repeat 50% 50%;
width: 500px;
}
.ms-container:after{
content: ".";
display: block;
height: 0;
line-height: 0;
font-size: 0;
clear: both;
min-height: 0;
visibility: hidden;
}
.ms-container .ms-selectable, .ms-container .ms-selection{
background: #fff;
color: #555555;
float: left;
width: 45%;
}
.ms-container .ms-selection{
float: right;
}
.ms-container .ms-list,
input.search-input,
.skform-input,
.skform-input2
{
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
-moz-transition: border linear 0.2s, box-shadow linear 0.2s;
-ms-transition: border linear 0.2s, box-shadow linear 0.2s;
-o-transition: border linear 0.2s, box-shadow linear 0.2s;
transition: border linear 0.2s, box-shadow linear 0.2s;
border: 1px solid #ccc;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
line-height: 34px;
height: 34px;
}
.ms-container .ms-list {
position: relative;
height: 150px;
padding: 0;
overflow-y: auto;
}
.ms-container .ms-list.ms-focus,
input.search-input:focus,
.skform-input:focus,
.skform-input2:focus,
.skform-checkbox-label:hover,
.skform-styles input[type=radio] + label:hover {
border-color: rgba(82, 168, 236, 0.8);
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
outline: 0;
outline: thin dotted \9;
}
.ms-container ul{
margin: 0;
list-style-type: none;
padding: 0;
}
.ms-container .ms-optgroup-container{
width: 100%;
}
.ms-container .ms-optgroup-label{
margin: 0;
padding: 5px 0px 0px 5px;
cursor: pointer;
color: #999;
font-size: 0.85em;
}
.ms-container .ms-selectable li.ms-elem-selectable,
.ms-container .ms-selection li.ms-elem-selection{
border-bottom: 1px #eee solid;
padding: 2px 10px;
color: #555;
font-size: 14px;
}
.ms-container .ms-selectable li.ms-hover,
.ms-container .ms-selection li.ms-hover{
cursor: pointer;
color: #fff;
text-decoration: none;
background-color: #08c;
}
.ms-container .ms-selectable li.disabled,
.ms-container .ms-selection li.disabled{
background-color: #eee;
color: #aaa;
cursor: text;
}
.ms-list {
-webkit-tap-highlight-color:rgba(0,0,0,0);
}
.skform-effect-footer {
text-align: center;
padding: 8px 0 0 0;
}
input.search-input {
width:100%;
}
/* テキスト入力共通 */
input.search-input,
.skform-input,
.skform-input2 {
box-sizing: border-box;
-moz-box-sizing: border-box;
margin-bottom: 5px;
padding: 4px 6px;
font-size: 14px;
color: #555;
vertical-align: middle;
}
/* HP ATK 欄 */
#skform input[aria-invalid="true"] {
border: 1px solid #f00;
box-shadow: 0 0 4px 0 f00;
}
.skform-range {
display: inline-block;
width: 22px;
box-sizing: border-box;
-moz-box-sizing: border-box;
text-align: center;
vertical-align: middle;
line-height: 20px;
padding: 6px 0 11px 0;
}
.skform-input {
width: 100px;
}
/* データ欄、使用者欄 */
.skform-input2 {
width: 222px;
}
.skform-hint {
font-size: 11px;
display: inline-block;
margin-left: 5px;
}
/* レアリティ、対象、種類 */
.skform-checkbox-label,
.skform-styles input[type=radio] + label {
background-color: #e0e0e0;
background-image: -webkit-linear-gradient(top, #f9f9f9, #e0e0e0);
background-image: -moz-linear-gradient(top, #f9f9f9, #e0e0e0);
background-image: -o-linear-gradient(top, #f9f9f9, #e0e0e0);
background-image: -ms-linear-gradient(top, #f9f9f9, #e0e0e0);
background-image: linear-gradient(to bottom, #f9f9f9, #e0e0e0);
}
.skform-checkbox-label:active,
.skform-styles input[type=radio] + label:active {
background-color: #f9f9f9;
background-image: -webkit-linear-gradient(top, #e0e0e0, #f9f9f9);
background-image: -moz-linear-gradient(top, #e0e0e0, #f9f9f9);
background-image: -o-linear-gradient(top, #e0e0e0, #f9f9f9);
background-image: -ms-linear-gradient(top, #e0e0e0, #f9f9f9);
background-image: linear-gradient(to bottom, #e0e0e0, #f9f9f9);
}
.skform-checkbox:checked + .skform-checkbox-label:active {
background: #26A;
}
.skform-checkbox-label {
cursor: pointer;
white-space: nowrap;
display: inline-block;
font-size:14px;
width: 78px;
text-align:center;
color: black;
padding: 4px 18px 4px 12px;
margin-bottom: 5px;
border: 1px solid #afafaf;
border-radius: 5px;
-ms-user-select: none; /* IE 10+ */
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;
position: relative;
}
.skform-checkbox-label::before {
content: "";
float: left;
display: block;
width: 16px;
height: 16px;
padding-right: 5px;
background: url('//w.atwiki.jp/f_go?cmd=upload&act=open&pageid=2993&file=tick-unchecked.png') no-repeat left 2px / contain;
}
.skform-checkbox {
display: none;
}
.skform-checkbox:checked + .skform-checkbox-label,
.skform-styles input[type=radio]:checked + label {
background: #148;
background-image: none;
color: white;
}
.skform-checkbox:checked + .skform-checkbox-label::before {
background: url('//w.atwiki.jp/f_go?cmd=upload&act=open&pageid=2993&file=tick-checked.png') no-repeat left 1px / contain;
}
/* 効果欄フッターのボタン、入力フォーム最下部のボタン */
.skform-buttons {
text-align: center;
padding: 5px 0;
background-color: #acf;
}
.skform-buttons button {
width: 120px;
}
.skform-effect-footer button,
.skform-buttons button {
padding: 4px 12px;
cursor: pointer;
-ms-user-select: none;
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;
color: black;
}
/* 種類欄のラジオボタン*/
.skform-kindgroup {
width: 568px;
display: inline-block;
}
.skform-styles {
letter-spacing: -.4em;
}
.skform-styles > * {
letter-spacing: normal;
}
.skform-styles input[type=radio]:first-child + label {
border-radius: 1000px 0 0 1000px;
border-left: 1px solid #afafaf;
}
.skform-styles input[type=radio] + label:last-child {
border-radius: 0 1000px 1000px 0;
border-right: 1px solid #afafaf;
}
.skform-styles input[type=radio] {
display: none;
}
.skform-styles input[type=radio] + label {
display: inline-block;
padding: 4px 12px;
cursor: pointer;
margin-bottom: 5px;
-ms-user-select: none;
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;
line-height: 22px;
text-align: center;
width: 80px;
border-left: 1px solid rgba(255,255,255,.5);
border-top: 1px solid #afafaf;
border-bottom: 1px solid #afafaf;
-moz-box-shadow: 0px 0px 1px rgba(0,0,0,0.5), inset 0px 0px 2px rgba(255,255,255,1);
-webkit-box-shadow: 0px 0px 1px rgba(0,0,0,0.5), inset 0px 0px 2px rgba(255,255,255,1);
box-shadow: 0px 0px 1px rgba(0,0,0,0.5), inset 0px 0px 2px rgba(255,255,255,1);
}
.skform-styles input[type=radio]:checked + label {
outline: 0;
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.5), inset 0 2px 4px rgba(0,0,0,0.15);
-moz-box-shadow: 0 1px 3px rgba(0,0,0,0.5), inset 0 2px 4px rgba(0,0,0,0.15);
box-shadow: 0 1px 3px rgba(0,0,0,0.5), inset 0 2px 4px rgba(0,0,0,0.15);
}
/* 横スクロール拡張 */
.hscroll-expand {
overflow: visible!important;
width: max-content;
width: -webkit-max-content;
width: -moz-max-content;
margin-left: 252px!important;
}
#wikibody.hscroll-expand-uk {
width: max-content;
}
table.hscroll-expand-uk {
overflow: visible!important;
}
/* ソート */
.column-order-container {
height: 25px;
color: #333;
border: 1px solid #777;
font-size: 12px;
padding: 0;
margin: 5px 0;
white-space: nowrap;
vertical-align: middle;
line-height: 25px;
-ms-user-select: none;
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;
text-align: right;
list-style-type: none;
list-style-image: none;
list-style-position: outside;
letter-spacing: -.4em;
-webkit-tap-highlight-color:rgba(0,0,0,0);
}
.column-order-head {
float: left;
width: 23px;
height: 25px;
background-image: linear-gradient(to bottom, #f9f9f9, #e0e0e0);
margin: 5px 0;
color: #333;
text-align: center;
border-color: #777;
border-style: solid;
border-width: 1px 3px 1px 1px;
-ms-user-select: none;
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;
-webkit-tap-highlight-color:rgba(0,0,0,0);
}
.column-order-head > span {
font-size: 10px;
display: inline-block;
-ms-writing-mode: tb-lr;
-webkit-writing-mode: vertical-lr;
-o-writing-mode: vertical-lr;
writing-mode: vertical-lr;
height: 23px;
}
.column-order {
display: inline-block;
cursor: move;
z-index: 5;
position: relative;
background: linear-gradient(to bottom, #f9f9f9, #e0e0e0) no-repeat center right;
padding: 0 0 0 4px;
border: 1px solid #CCC;
margin: -1px;
letter-spacing: normal;
}
.column-order > span {
font-size: 10px;
height: 25px;
display: block;
float: left;
}
.column-order > .sksort:after {
content: url(data:image/gif;base64,R0lGODlhFQAJAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAkAAAIXjI+AywnaYnhUMoqt3gZXPmVg94yJVQAAOw==);
white-space: pre;
right: 0;
}
.column-order[data-column$=asc] > .sksort:after {
content: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7);
}
.column-order[data-column$=desc] > .sksort:after {
content: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7);
}
.chosen, .drag {
color: #fff;
background-image: none;
background-color: #148;
}
.ghost {
outline: 3px dashed hsla(0, 0%, 0%, 0.5);
outline-offset: -6px;
color: white;
background-color: white;
}
.ghost span::after { opacity: 0; }
/************** テーブル ***************/
#sktable tbody tr:nth-child(odd) {background-color: white;}
#sktable tbody tr:nth-child(even) {background-color: #F5FFFA;}
#sktable {
text-align: center;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
#sktable td {
padding: 5px 0;
border: 1px solid #ccc;
}
#sktable th {
word-wrap: break-word;
border: 1px solid #ccc;
padding: 0;
}
/* 固定幅テーブル */
#sktable table {
display: table!important;
table-layout: fixed;
border: 1px solid #CCC;
border-collapse: collapse;
border-spacing:0;
width: 512px; /* dummy jsでcolの合計に上書き */
margin: 15px 0;
}
.celist .col-CEType,
.speccomp .col-CEType {
width: 200px!important;
}
.col-CEType {
width: 38px;
}
.col-SkillName,
.col-OwnerNames,
.col-BondCEOwner,
.col-EventOnly {
width: 170px;
}
.col-Owners {
width: 55px;
}
.col-Rare,
.col-Cost,
.col-CT,
.col-Sign,
.col-Demerit {
width: 20px;
}
.col-NobleTraits,
.col-HPBase,
.col-ATKBase,
.col-HPMax,
.col-ATKMax,
.col-BondPt {
width: 70px;
}
.col-Target,
.col-Target2 {
width: 70px;
}
.col-Grow {
width: 43px;
}
.col-ApplyUser {
width: 77px;
}
.col-Value0,.col-Value1,.col-Value2,.col-Value3,.col-Value4,.col-Value5,.col-Value6,.col-Value7,.col-Value8,.col-Value9 {
width: 54px;
}
.col-PreText {
width: 150px;
}
.col-MainText {
width: 150px;
}
.col-PostText {
width: 120px;
}
.hscroll-expand-uk .col-PreText,
.hscroll-expand-uk .col-MainText {
width: 200px;
}
.hscroll-expand-uk .col-PostText {
width: 150px;
}
.hscroll-expand-uk .col-Value0,
.hscroll-expand-uk .col-Value1,
.hscroll-expand-uk .col-Value2,
.hscroll-expand-uk .col-Value3,
.hscroll-expand-uk .col-Value4,
.hscroll-expand-uk .col-Value5,
.hscroll-expand-uk .col-Value6,
.hscroll-expand-uk .col-Value7,
.hscroll-expand-uk .col-Value8,
.hscroll-expand-uk .col-Value9 {
width: 65px;
}
/* 効果欄は折り返しさせない */
.MainText,
.PostText,
.Value0,.Value1,.Value2,.Value3,.Value4,.Value5,.Value6,.Value7,.Value8,.Value9
{
white-space: nowrap;
}
/* テーブルヘッダー色 */
.ce-head {background-color: #e6e6fa;}
.sc-head {background-color: #cfc;}
.raw-head {background-color: orange;}
.detail-head {background-color: #cc2;}
/* スキル所有者リンク */
.owner-mini {
font-size: 10px;
line-height: 15px;
}
/* tdの効果同士の間隔調整 */
.effect-outer {
margin: 5px auto;
padding: 3px 0;
}
/* 備考欄 */
.ce-CEType {
line-height: normal;
font-size: 11px;
}
/************** 雑多な装飾 ***************/
/* スキル種別アイコン */
.SkillName {
position: relative;
padding-top: 15px!important;
}
.SkillName:before {
content: "";
width:100px;
position:absolute;
top: 0;
left: 0;
height:0;
border-width: 12px 12px 0px 0px;
border-style: solid;
}
.SkillName:after {
line-height:12px;
font-size: 10px;
color: white;
position:absolute;
padding-left:5px;
top: 0;
left: 0;
}
.ribbon-craft:before,
.ribbon-master:before,
.ribbon-skill:before,
.ribbon-class:before { border-color: gray transparent transparent transparent; }
.ribbon-arts-solo:before,
.ribbon-arts-all:before,
.ribbon-arts-support:before { border-color: blue transparent transparent transparent; }
.ribbon-buster-solo:before,
.ribbon-buster-all:before,
.ribbon-buster-support:before { border-color: red transparent transparent transparent; }
.ribbon-quick-solo:before,
.ribbon-quick-all:before,
.ribbon-quick-support:before { border-color: #080 transparent transparent transparent; }
.ribbon-craft:after {content: "概念礼装"; }
.ribbon-master:after {content: "マスタースキル";}
.ribbon-class:after {content: "クラススキル";}
.ribbon-skill:after {content: "サーヴァントスキル";}
.ribbon-arts-solo:after { content: "単体 Arts"; }
.ribbon-arts-all:after { content: "全体 Arts"; }
.ribbon-arts-support:after { content: "補助 Arts"}
.ribbon-buster-solo:after { content: "単体 Buster"; }
.ribbon-buster-all:after { content: "全体 Buster"; }
.ribbon-buster-support:after { content: "補助 Buster"}
.ribbon-quick-solo:after { content: "単体 Quick"; }
.ribbon-quick-all:after { content: "全体 Quick"; }
.ribbon-quick-support:after { content: "補助 Quick"}
/* 最大開放背景色 */
.ce-Value1 {
background-color: #fff8dc;
}
.star {
color: #c0972d;
font-weight: bold;
}
.bondpt { font-weight:bold; }
.namehead-rare {
padding-left: 5px;
}
.namehead {
white-space: nowrap;
margin-right: 5px;
text-align: left;
}
.namebody {
margin: 3px 0;
}
.gainen_atk,
.gainen_hp,
.namehead-no {
font-weight: bold;
display: inline-block;
width: 50px;
}
.gainen_atk {
color: #ff000c;
text-align: center;
}
.gainen_hp {
color: #0024ff;
text-align: center;
}
.nobleinfo {
box-shadow: inset -1px 3px 1px #ccc;
background-color: rgba(231,236,240,.2);
border: 1px solid #ccc;
padding: 5px;
margin: 0 17px;
}
.Buster { color: red; }
.Arts { color: blue; }
.Quick { color: #080; }
/* 効果欄ハイライト */
.not-highlight {
opacity: .15;
}
/* reverse highlight */
.reverse-highlight td > div.not-highlight {
opacity: .9;
}
.reverse-highlight td:nth-of-type(n + 4) > div:not(.not-highlight) {
font-weight: bold;
background-color: rgba(0,132,0,.05);
}
/* 対象 短縮表記用アイコン */
.target-icon {
white-space: nowrap;
font-weight: bold;
padding: 2px 3px;
border: 1px solid #999;
width: 65px;
box-sizing: border-box;
margin: 5px auto;
}
.target-main {
font-size: .9em;
}
.minipre {
line-height: 13px;
font-size: .85em;
display: inline-block;
}
.target-sub {
font-size: .8em;
transform: scale(.8);
line-height: 8px;
}
.target-self,
.target-pt-solo,
.target-pt-field,
.target-pt-all {
background: #aef;
}
.target-en-solo,
.target-en-field,
.target-en-all {
background: #f9a;
}
/* PARAMアイコン */
.rate,
.proc {
position: relative;
display: inline-block;
box-sizing: border-box;
margin-left: 5px;
line-height: 13px;
font-size: 13px;
}
.rate::after,
.proc::after {
font-size: 8px;
position: absolute;
z-index: 2;
text-align: center;
line-height: 10px;
color: white;
top: 13px;
left: 0;
right: 0;
}
.rate::after {
content: "rate";
background-color: blue;
}
.proc::after {
content: "proc";
background-color: #49f;
}
.minival {
line-height: 13px;
font-size: .85em;
}
.initaddmax {
line-height: 1em;
font-size: .9em;
}
.growlv, .growoc, .growlvoc {
position: relative;
z-index: 10;
}
.growlv:after, .growoc:after, .growlvoc:after {
color: white;
font-size: .8em;
line-height: 9px;
padding: 1px 2px;
z-index: 3;
position: absolute;
right: 0;
white-space: pre;
top: 2px;
}
.growlv:after {
content: "L\AV";
background-color: #F60;
}
.growoc:after {
content: "O\A\43";
background-color: #ED4;
}
.growlvoc:after {
content: "L\AO";
background-image:linear-gradient(135deg, #f60 50%, #ed4 50%);
}
/* スキルLv6~とLv10の色分け */
.sc-Value5,
.sc-Value6,
.sc-Value7,
.sc-Value8 {
border-top: 2px solid #89c;
border-bottom: 2px solid #89c;
}
.sc-Value9 {
border-top: 2px solid #fc0;
border-bottom: 2px solid #fc0;
}
/* カスタムルビ */
#sktable ruby {
display : inline-table;
text-align : center;
text-indent : 0;
white-space : normal;
border : none;
margin : 0;
padding : 0;
line-height : 1;
height : 1em;
vertical-align: text-bottom;
border : none;
}
#sktable rt {
display : table-header-group;
font-size : 50%; /* 振り仮名のメインテキストに対する相対サイズ */
line-height : 1.1;
text-align : justify;
text-align-last : justify;
border : none;
margin : 0;
padding : 0;
}
/*
#sktable ruby:hover { border: 1px dashed #CCC; }
#sktable ruby:hover rt { font-size: 1em; }
*/
/* 簡易レスポンシブ */
@media only screen and (max-width: 700px) {
#skform.responsive {
min-width: unset;
padding:0;
}
.responsive .skform-caption {
float:none!important;
display:block;
}
.responsive ul li > div {
width: 100%;
}
.responsive ul li > .skform-checkbox-label {
min-width:120px;
box-sizing: border-box;
margin:5px;
}
.responsive .skform-input {
width:45%;
}
.responsive .skform-input2 {
width:100%;
}
.responsive .skform-buttons > div {
border-left: none!important;
display:block!important;
}
.responsive button {
margin: 6px 8px!important;
height: 34px;
}
.responsive .skform-hint {
display: block;
white-space: normal;
}
.responsive .skform-kindgroup {
width: 100%;
}
.responsive .ms-container {
width: 100%;
}
.responsive .column-order-head {
float: none;
border-width: 1px 1px 3px 1px;
height: 33px;
margin: auto;
box-sizing: border-box;
width: calc(50% - 16px);
}
.responsive .column-order-head > span {
writing-mode: unset;
font-size:1em;
vertical-align: middle;
display: inline;
}
.responsive .column-order-container {
margin: auto;
width: 50%;
height: 100%;
border:none;
}
.responsive .column-order {
display:block;
margin: 0 8px;
width: calc(100% - 22px);
}
.responsive .column-order > span {
float: none;
text-align:center;
height: 34px;
line-height: 34px;
}
.responsive .skform-styles input[type=radio] + label {
border-radius: 1000px;
margin-bottom: 10px;
margin: 0 6px 10px 6px;
width: 33%;
}
#sktable.responsive::-webkit-scrollbar {
height: 6px;
}
#sktable.responsive::-webkit-scrollbar-thumb {
border-radius: 3px;
background: #777;
}
#sktable.responsive>:last-child {
margin-bottom: 0;
}
}
--></div>
<form id="skform" name="skform" style="display:none;">
<div id="skform-wikiedit">
<div style="width: 100%;position: absolute;top: 100px;">
<textarea name="source" readonly></textarea>
<div class="wikiedit-fotter">Wiki構文をコピーして下さい<br><button type="button" name="close" class="skform-button" id="skform-wikiedit-close">閉じる</button></div>
</div>
</div>
<div id="skform-overlay">
<img src="//w.atwiki.jp/f_go?cmd=upload&act=open&pageid=2993&file=fou2.gif" id="skform-fou" />
</div>
<ul>
<li>
<div class="skform-title">
<input type="checkbox" name="expand" id="skform-expand" checked></input>
<label for="skform-expand">スキル検索</label>
</div>
</li>
<li class="skform-hidden skform-data-li">
<label class="skform-caption">データ:</label>
<div class="skform-kindgroup">
<input type="checkbox" name="data1" class="skform-svt-only skform-checkbox skform-data" id="skform-data1" data-regex="64" checked></input>
<label for="skform-data1" class="skform-svt-only skform-checkbox-label" style="width:auto;">保有スキル</label>
<input type="checkbox" name="data2" class="skform-svt-only skform-checkbox skform-data" id="skform-data2" data-regex="256" checked></input>
<label for="skform-data2" class="skform-svt-only skform-checkbox-label">宝具</label>
<input type="checkbox" name="data3" class="skform-svt-only skform-checkbox skform-data" id="skform-data3" data-regex="128" checked></input>
<label for="skform-data3" class="skform-svt-only skform-checkbox-label" style="width:auto;">クラスパッシブ</label>
<input type="checkbox" name="data4" class="skform-ce-only skform-checkbox skform-data" id="skform-data4" data-regex="63" checked></input>
<label for="skform-data4" class="skform-ce-only skform-checkbox-label">概念礼装</label>
<input type="checkbox" name="data5" class="skform-mst-only skform-checkbox skform-data" id="skform-data5" data-regex="512" checked></input>
<label for="skform-data5" class="skform-mst-only skform-checkbox-label">マスター</label>
</div>
</li>
<li>
<label class="skform-caption">キーワード:</label>
<input type="text" class="skform-input2" name="keyword" value="" id="skform-keyword" placeholder="スキル名またはNo.を入力" autocomplete="off" />
<span class="skform-hint">入力例『カレイド OR s12 OR e104』詳細はページ下部参照</span>
</li>
<li class="skform-ce-only">
<label class="skform-caption">最大HP:</label>
<input type="text" class="skform-input" name="hpmin" value="0" id="skform-hpmin" pattern="^[0-9]*$" /><span class="skform-range">~</span><input type="text" class="skform-input" name="hpmax" value="" id="skform-hpmax" pattern="^[0-9]*$" />
<label class="skform-caption">最大ATK:</label>
<input type="text" class="skform-input" name="atkmin" value="0" id="skform-atkmin" pattern="^[0-9]*$" /><span class="skform-range">~</span><input type="text" class="skform-input" name="atkmax" value="" id="skform-atkmax" pattern="^[0-9]*$" />
</li>
<li class="skform-ce-only">
<label class="skform-caption">レアリティ:</label>
<input type="checkbox" name="rarity1" class="skform-checkbox skform-rarity" id="skform-rarity1" data-regex="1" checked></input>
<label for="skform-rarity1" class="skform-checkbox-label">★</label>
<input type="checkbox" name="rarity2" class="skform-checkbox skform-rarity" id="skform-rarity2" data-regex="2" checked></input>
<label for="skform-rarity2" class="skform-checkbox-label">★★</label>
<input type="checkbox" name="rarity3" class="skform-checkbox skform-rarity" id="skform-rarity3" data-regex="3" checked></input>
<label for="skform-rarity3" class="skform-checkbox-label">★★★</label>
<input type="checkbox" name="rarity4" class="skform-checkbox skform-rarity" id="skform-rarity4" data-regex="4" checked></input>
<label for="skform-rarity4" class="skform-checkbox-label">★★★★</label>
<input type="checkbox" name="rarity5" class="skform-checkbox skform-rarity" id="skform-rarity5" data-regex="5" checked></input>
<label for="skform-rarity5" class="skform-checkbox-label">★★★★★</label>
</li>
<li>
<label class="skform-caption">対象:</label>
<input type="checkbox" name="target1" class="skform-checkbox skform-target" id="skform-target1" data-regex="^自身$" checked></input>
<label for="skform-target1" class="skform-checkbox-label">自身</label>
<input type="checkbox" name="target2" class="skform-checkbox skform-target" id="skform-target2" data-regex="^.*味方単体.*$" checked></input>
<label for="skform-target2" class="skform-checkbox-label">味方単体</label>
<input type="checkbox" name="target3" class="skform-checkbox skform-target" id="skform-target3" data-regex="^.*味方全体.*$" checked></input>
<label for="skform-target3" class="skform-checkbox-label">味方全体</label>
<input type="checkbox" name="target4" class="skform-checkbox skform-target" id="skform-target4" data-regex="^敵単体$" checked></input>
<label for="skform-target4" class="skform-checkbox-label">敵単体</label>
<input type="checkbox" name="target5" class="skform-checkbox skform-target" id="skform-target5" data-regex="^.*敵全体.*$" checked></input>
<label for="skform-target5" class="skform-checkbox-label">敵全体</label>
</li>
<li class="skform-svt-only">
<label class="skform-caption">宝具:</label>
<input type="checkbox" name="arts" class="skform-checkbox skform-command" id="skform-command1" data-regex="Arts" checked></input>
<label for="skform-command1" class="skform-checkbox-label">Arts</label>
<input type="checkbox" name="buster" class="skform-checkbox skform-command" id="skform-command2" data-regex="Buster" checked></input>
<label for="skform-command2" class="skform-checkbox-label">Buster</label>
<input type="checkbox" name="quick" class="skform-checkbox skform-command" id="skform-command3" data-regex="Quick" checked></input>
<label for="skform-command3" class="skform-checkbox-label">Quick</label>
</li>
<li>
<label class="skform-caption">効果:</label>
<div style="display: inline-block;">
<select name="effect" id="skform-effect" size="8" multiple="multiple">
<optgroup label="攻撃">
<option data-createid="18022100" value="攻撃力">攻撃力</option>
<option data-createid="18022101" value="^(?:〔[^〕]+〕)?(?!.*宝具)威力$">威力</option>
<option data-createid="18022102" value="宝具威力">宝具威力</option>
<option data-createid="18022103" value="Quickカード性能">Quickカード性能</option>
<option data-createid="18022104" value="Artsカード性能">Artsカード性能</option>
<option data-createid="18022105" value="Busterカード性能">Busterカード性能</option>
<option data-createid="18022106" value="^与ダメージ$">与固定ダメージ</option>
<option data-createid="18022107" value="攻撃回数">攻撃回数</option>
</optgroup>
<optgroup label="防御">
<option data-createid="18022108" value="防御力">防御力</option>
<option data-createid="18022109" value="Quickカード耐性">Quickカード耐性</option>
<option data-createid="18022110" value="Artsカード耐性">Artsカード耐性</option>
<option data-createid="18022111" value="Busterカード耐性">Busterカード耐性</option>
<option data-createid="18022112" value="^被ダメージ$">被固定ダメージ</option>
</optgroup>
<optgroup label="スター/クリティカル">
<option data-createid="18022113" value="^スター$">スター獲得/減少</option>
<option data-createid="18022114" value="毎ターンスター">毎ターンスター獲得</option>
<option data-createid="18022115" value="スター発生率">スター発生率</option>
<option data-createid="18022116" value="スター集中度">スター集中度</option>
<option data-createid="18022117" value="クリティカル威力">クリティカル威力</option>
<option data-createid="18022118" value="クリティカル発生率">クリティカル発生率</option>
</optgroup>
<optgroup label="HP/ガッツ">
<option data-createid="18022119" value="^HP$">HP</option>
<option data-createid="18022120" value="^毎ターンHP$">毎ターンHP回復</option>
<option data-createid="18022121" value="最大HP">最大HP</option>
<option data-createid="18022122" value="HP回復効果量">HP回復効果量</option>
<option data-createid="18022123" value="与HP回復量">与HP回復量</option>
<option data-createid="18022124" value="ガッツ">ガッツ</option>
</optgroup>
<optgroup label="NP/チャージ">
<option data-createid="18022125" value="^NP$">NP</option>
<option data-createid="18022126" value="毎ターンNP">毎ターンNP獲得</option>
<option data-createid="18022127" value="^(?!被ダメージ時).*NP獲得量$">NP獲得量</option>
<option data-createid="18022128" value="被ダメージ時NP獲得量">被ダメージ時NP獲得量</option>
<option data-createid="18022129" value="チャージ">チャージ</option>
</optgroup>
<optgroup label="付与成功率/耐性/無効/解除">
<option data-createid="18022130" value="^(?!即死|強化解除|Busterカード|Quickカード|Artsカード).*耐性$">状態耐性</option>
<option data-createid="18022131" value="^(?!即死).*無効$">状態無効</option>
<option data-createid="18022132" value="^((?!即死).*付与成功率|.*強化成功率)">状態付与成功率</option>
<option data-createid="18022133" value="即死耐性">即死耐性</option>
<option data-createid="18022134" value="即死無効">即死無効</option>
<option data-createid="18022135" value="即死付与成功率">即死付与成功率</option>
<option data-createid="18022136" value=".*解除$">状態解除</option>
<option data-createid="18022137" value="強化解除耐性">強化解除耐性</option>
</optgroup>
<optgroup label="○○付与">
<option data-createid="18022138" value="^回避$">回避</option>
<option data-createid="18022139" value="^必中$">必中</option>
<option data-createid="18022140" value="^無敵$">無敵</option>
<option data-createid="18022141" value="^無敵貫通$">無敵貫通</option>
<option data-createid="18022142" value="即死効果">即死効果</option>
<option data-createid="18022143" value="ターゲット集中">ターゲット集中</option>
<option data-createid="18022144" value="スキル封印">スキル封印</option>
<option data-createid="18022145" value="宝具封印">宝具封印</option>
<option data-createid="18022146" value="魅了(行動不能)">魅了(行動不能)</option>
<option data-createid="18022147" value="^(?!魅了).*(行動不能)$">行動不能(魅了除く)</option>
<option data-createid="18022148" value="^.*特性付与$">特性付与</option>
<option data-createid="18022149" value="^(毒|やけど|呪い)(毎ターンHP)$">毒/やけど/呪い</option>
<option data-createid="18022150" value="^(毒|やけど|呪い)の効果量$">蝕毒/延焼/呪いの効果量</option>
</optgroup>
<optgroup label="イベントボーナス">
<option data-createid="18022151" value="イベントポイント">イベントポイント</option>
<option data-createid="18022152" value="イベントドロップ">イベントドロップ</option>
<option data-createid="18022153" value="〔イベント限定〕威力">〔イベント限定〕威力</option>
<option data-createid="18022154" value="クラスドロップ">クラスドロップ</option>
<option data-createid="18022155" value="出現率">出現率</option>
</optgroup>
<optgroup label="宝具">
<option data-createid="18022167" value="^宝具攻撃$">宝具攻撃</option>
<option data-createid="18022168" value="特攻宝具攻撃$">特攻宝具攻撃</option>
<option data-createid="18022169" value="^HP反?比例宝具攻撃$">HP比例宝具攻撃</option>
<option data-createid="18022170" value="^防御力無視宝具攻撃$">防御力無視宝具攻撃</option>
<option data-createid="18022171" value="^(カウンター|手加減)宝具攻撃$">特殊な宝具攻撃</option>
</optgroup>
<optgroup label="その他">
<option data-createid="18022156" value="スキルチャージ">スキルチャージ</option>
<option data-createid="18022157" value="オーバーチャージ段階">オーバーチャージ段階</option>
<option data-createid="18022158" value="クラス相性変更">クラス相性変更</option>
<option data-createid="18022159" value="防御無視">防御無視</option>
<option data-createid="18022160" value="経験値">経験値</option>
<option data-createid="18022161" value="魔術礼装EXP">魔術礼装EXP</option>
<option data-createid="18022162" value="^.*QP$">QP</option>
<option data-createid="18022163" value="絆ポイント">絆ポイント</option>
<option data-createid="18022164" value="フレンドポイント">フレンドポイント</option>
<option data-createid="18022165" value="^(オーダーチェンジ|コマンドシャッフル)$">オーダーチェンジ/コマンドシャッフル</option>
<option data-createid="18092700" value="コマンドカード固定">コマンドカード固定</option>
<option data-createid="18022166" value="なし">なし</option>
</optgroup>
</select>
</div>
</li>
<li class="skform-svt-only">
<label class="skform-caption">使用者:</label>
<select class="skform-input2" name="applyuser" id="skform-applyuser">
<option value=".*">すべて</option>
<option value="^(なし|プレイヤー)$" selected>プレイヤー</option>
<option value="^(なし|エネミー)$">エネミー</option>
</select>
<span class="skform-hint">敵専用効果を非表示にするならプレイヤー</span>
</li>
<li class="skform-ce-only">
<label class="skform-caption">種類:</label>
<div class="skform-kindgroup">
<input type="checkbox" name="general" class="skform-ce-only skform-checkbox skform-kind" id="skform-kind1" data-regex="1" checked></input>
<label for="skform-kind1" class="skform-ce-only skform-checkbox-label" style="width:120px;">一般</label>
<input type="checkbox" name="fpgacha" class="skform-ce-only skform-checkbox skform-kind" id="skform-kind2" data-regex="2" checked></input>
<label for="skform-kind2" class="skform-ce-only skform-checkbox-label" style="width:120px;">フレンドPt召喚</label>
<input type="checkbox" name="eventce" class="skform-ce-only skform-checkbox skform-kind" id="skform-kind3" data-regex="4" checked></input>
<label for="skform-kind3" class="skform-ce-only skform-checkbox-label" style="width:120px;">イベント限定</label>
<input type="checkbox" name="eventbonus" class="skform-ce-only skform-checkbox skform-kind" id="skform-kind4" data-regex="8" checked></input>
<label for="skform-kind4" class="skform-ce-only skform-checkbox-label" style="width:120px;">イベントボーナス</label>
<input type="checkbox" name="bondce" class="skform-ce-only skform-checkbox skform-kind" id="skform-kind5" data-regex="16" checked></input>
<label for="skform-kind5" class="skform-ce-only skform-checkbox-label" style="width:120px;">絆</label>
<input type="checkbox" name="expcard" class="skform-ce-only skform-checkbox skform-kind" id="skform-kind6" data-regex="32" checked></input>
<label for="skform-kind6" class="skform-ce-only skform-checkbox-label" style="width:120px;">EXP&チョコ</label>
</div>
</li>
<li>
<label class="skform-caption">表示方法:</label>
<div class="skform-styles">
<input type="radio" id="skform-style1" name="styles" value="raw"><label for="skform-style1">生データ</label>
<input type="radio" id="skform-style2" name="styles" value="detail"><label for="skform-style2">詳細表示</label>
<input type="radio" id="skform-style3" name="styles" value="spec-comp"><label for="skform-style3">性能比較</label>
<input type="radio" id="skform-style4" name="styles" value="ce-list" checked><label for="skform-style4">概念礼装</label>
</div>
</li>
<li>
<label class="skform-caption">オプション:</label>
<div style="display: inline-block;">
<input type="checkbox" name="options" class="skform-checkbox skform-option" id="skform-max-width"></input>
<label for="skform-max-width" class="skform-checkbox-label" style="width:120px;">横スクロール拡張</label>
<input type="checkbox" name="options" class="skform-checkbox skform-option" id="skform-reverse-highlight"></input>
<label for="skform-reverse-highlight" class="skform-checkbox-label" style="width:120px;">ハイライト変更</label>
</div>
</li>
<li style="white-space: nowrap;">
<label class="skform-caption">ソート:</label>
<div style="display: inline-block;">
<div class="column-order-head"><span>優先</span></div>
<ul id="skform-order" class="column-order-container">
<li class="column-order" data-column="Owners"><span class="sksort">ID</span></li>
<li class="column-order" data-column="Rare"><span class="sksort">レア</span></li>
<li class="column-order" data-column="CT"><span class="sksort">CT</span></li>
<li class="column-order" data-column="HPMax"><span class="sksort">最大HP</span></li>
<li class="column-order" data-column="ATKMax"><span class="sksort">最大ATK</span></li>
<li class="column-order" data-column="Target"><span class="sksort">対象</span></li>
<li class="column-order" data-column="PreText"><span class="sksort">効果(左)</span></li>
<li class="column-order" data-column="MainText"><span class="sksort">効果(中)</span></li>
<li class="column-order" data-column="PostText"><span class="sksort">効果(右)</span></li>
<li class="column-order" data-column="Value9"><span class="sksort">最大効果量</span></li>
</ul>
<div class="skform-hint" style="display: block;">ドラッグで優先ソート順の並び替え。クリックで昇順降順の切り換え</div>
</div>
</li>
<li>
<div class="skform-buttons">
<button type="button" name="serialize" class="skform-button" id="skform-serialize">wiki構文コピー</button>
<button type="button" name="reset" class="skform-button" id="skform-reset">リセット</button>
<div style="border-left: 1px solid #88a; display: inline-block;">
<button type="button" name="exec" class="skform-button" id="skform-execute" style="margin-left: 5px;">検索する</button>
</div>
</div>
</li>
</ul>
</form>
<div id="sktable"></div>
}}}}}
#js(){{{{{
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.quicksearch/2.4.0/jquery.quicksearch.min.js"></script>
<!-- jsDelivr :: Sortable (https://www.jsdelivr.com/package/npm/sortablejs) -->
<script src="https://cdn.jsdelivr.net/npm/sortablejs@1.6.1/Sortable.min.js"></script>
<script type="text/javascript">
// ----------------------------------------------------------------
// MultiSelect v0.9.12
// Copyright (c) 2012 Louis Cuny
//
// This program is free software. It comes without any warranty, to
// the extent permitted by applicable law. You can redistribute it
// and/or modify it under the terms of the Do What The Fuck You Want
// To Public License, Version 2, as published by Sam Hocevar. See
// http://sam.zoy.org/wtfpl/COPYING for more details.
!function(e){"use strict";var t=function(t,s){this.options=s,this.$element=e(t),this.$container=e("<div/>",{class:"ms-container"}),this.$selectableContainer=e("<div/>",{class:"ms-selectable"}),this.$selectionContainer=e("<div/>",{class:"ms-selection"}),this.$selectableUl=e("<ul/>",{class:"ms-list",tabindex:"-1"}),this.$selectionUl=e("<ul/>",{class:"ms-list",tabindex:"-1"}),this.scrollTo=0,this.elemsSelector="li:visible:not(.ms-optgroup-label,.ms-optgroup-container,."+s.disabledClass+")"};t["proto"+"type"]={constructor:t,init:function(){var t=this,s=this.$element;if(0===s.next(".ms-container").length){s.css({position:"absolute",left:"-9999px"}),s.attr("id",s.attr("id")?s.attr("id"):Math.ceil(1e3*Math.random())+"multiselect"),this.$container.attr("id","ms-"+s.attr("id")),this.$container.addClass(t.options.cssClass),s.find("option").each(function(){t.generateLisFromOption(this)}),this.$selectionUl.find(".ms-optgroup-label").hide(),t.$selectionUl.children(".ms-optgroup-container").hide(),t.options.selectableHeader&&t.$selectableContainer.append(t.options.selectableHeader),t.$selectableContainer.append(t.$selectableUl),t.options.selectableFooter&&t.$selectableContainer.append(t.options.selectableFooter),t.options.selectionHeader&&t.$selectionContainer.append(t.options.selectionHeader),t.$selectionContainer.append(t.$selectionUl),t.options.selectionFooter&&t.$selectionContainer.append(t.options.selectionFooter),t.$container.append(t.$selectableContainer),t.$container.append(t.$selectionContainer),s.after(t.$container),t.activeMouse(t.$selectableUl),t.activeKeyboard(t.$selectableUl);var i=t.options.dblClick?"dblclick":"click";t.$selectableUl.on(i,".ms-elem-selectable",function(){t.select(e(this).data("ms-value"))}),t.$selectionUl.on(i,".ms-elem-selection",function(){t.deselect(e(this).data("ms-value"))}),t.activeMouse(t.$selectionUl),t.activeKeyboard(t.$selectionUl),s.on("focus",function(){t.$selectableUl.focus()})}var l=s.find("option:selected").map(function(){return e(this).val()})["get"]();t.select(l,"init"),"function"==typeof t.options.afterInit&&t.options.afterInit.call(this,this.$container)},generateLisFromOption:function(t,s,i){for(var l=this,n=l.$element,o="",a=e(t),r=0;r<t.attributes.length;r++){var c=t.attributes[r];"value"!==c.name&&"disabled"!==c.name&&(o+=c.name+'="'+c.value+'" ')}var d=e("<li "+o+"><span>"+l.escapeHTML(a.text())+"</span></li>"),h=d.clone(),p=a.val(),f=l.sanitize(p);d.data("ms-value",p).addClass("ms-elem-selectable").attr("id",f+"-selectable"),h.data("ms-value",p).addClass("ms-elem-selection").attr("id",f+"-selection").hide(),(a.prop("disabled")||n.prop("disabled"))&&(h.addClass(l.options.disabledClass),d.addClass(l.options.disabledClass));var u=a.parent("optgroup");if(u.length>0){var m=u.attr("label"),v=l.sanitize(m),b=l.$selectableUl.find("#optgroup-selectable-"+v),g=l.$selectionUl.find("#optgroup-selection-"+v);if(0===b.length){var $='<li class="ms-optgroup-container"></li>',C='<ul class="ms-optgroup"><li class="ms-optgroup-label"><span>'+m+"</span></li></ul>";b=e($),g=e($),b.attr("id","optgroup-selectable-"+v),g.attr("id","optgroup-selection-"+v),b.append(e(C)),g.append(e(C)),l.options.selectableOptgroup&&(b.find(".ms-optgroup-label").on("click",function(){var t=u.children(":not(:selected, :disabled)").map(function(){return e(this).val()})["get"]();l.select(t)}),g.find(".ms-optgroup-label").on("click",function(){var t=u.children(":selected:not(:disabled)").map(function(){return e(this).val()})["get"]();l.deselect(t)})),l.$selectableUl.append(b),l.$selectionUl.append(g)}s=void 0===s?b.find("ul").children().length:s+1,d.insertAt(s,b.children()),h.insertAt(s,g.children())}else s=void 0===s?l.$selectableUl.children().length:s,d.insertAt(s,l.$selectableUl),h.insertAt(s,l.$selectionUl)},addOption:function(t){var s=this;void 0!==t.value&&null!==t.value&&(t=[t]),e.each(t,function(t,i){if(void 0!==i.value&&null!==i.value&&0===s.$element.find("option[value='"+i.value+"']").length){var l=e('<option value="'+i.value+'">'+i.text+"</option>"),n=void 0===i.nested?s.$element:e("optgroup[label='"+i.nested+"']");t=parseInt(void 0===i.index?n.children().length:i.index);i.optionClass&&l.addClass(i.optionClass),i.disabled&&l.prop("disabled",!0),l.insertAt(t,n),s.generateLisFromOption(l["get"](0),t,i.nested)}})},escapeHTML:function(t){return e("<div>").text(t).html()},activeKeyboard:function(t){var s=this;t.on("focus",function(){e(this).addClass("ms-focus")}).on("blur",function(){e(this).removeClass("ms-focus")}).on("keydown",function(i){switch(i.which){case 40:case 38:return i.preventDefault(),i.stopPropagation(),void s.moveHighlight(e(this),38===i.which?-1:1);case 37:case 39:return i.preventDefault(),i.stopPropagation(),void s.switchList(t);case 9:if(s.$element.is("[tabindex]")){i.preventDefault();var l=parseInt(s.$element.attr("tabindex"),10);return l=i.shiftKey?l-1:l+1,void e('[tabindex="'+l+'"]').focus()}i.shiftKey&&s.$element.trigger("focus")}if(e.inArray(i.which,s.options.keySelect)>-1)return i.preventDefault(),i.stopPropagation(),void s.selectHighlighted(t)})},moveHighlight:function(e,t){var s=e.find(this.elemsSelector),i=s.filter(".ms-hover"),l=null,n=s.first().outerHeight(),o=e.height();this.$container.prop("id");if(s.removeClass("ms-hover"),1===t){if(0===(l=i.nextAll(this.elemsSelector).first()).length)if((r=i.parent()).hasClass("ms-optgroup")){var a=r.parent().next(":visible");l=a.length>0?a.find(this.elemsSelector).first():s.first()}else l=s.first()}else if(-1===t){var r;if(0===(l=i["prev"+"All"](this.elemsSelector).first()).length)if((r=i.parent()).hasClass("ms-optgroup")){var c=r.parent().prev(":visible");l=c.length>0?c.find(this.elemsSelector).last():s.last()}else l=s.last()}if(l.length>0){l.addClass("ms-hover");var d=e.scrollTop()+l.position().top-o/2+n/2;e.scrollTop(d)}},selectHighlighted:function(e){var t=e.find(this.elemsSelector),s=t.filter(".ms-hover").first();s.length>0&&(e.parent().hasClass("ms-selectable")?this.select(s.data("ms-value")):this.deselect(s.data("ms-value")),t.removeClass("ms-hover"))},switchList:function(e){e.blur(),this.$container.find(this.elemsSelector).removeClass("ms-hover"),e.parent().hasClass("ms-selectable")?this.$selectionUl.focus():this.$selectableUl.focus()},activeMouse:function(t){var s=this;this.$container.on("mouseenter",s.elemsSelector,function(){e(this).parents(".ms-container").find(s.elemsSelector).removeClass("ms-hover"),e(this).addClass("ms-hover")}),this.$container.on("mouseleave",s.elemsSelector,function(){e(this).parents(".ms-container").find(s.elemsSelector).removeClass("ms-hover")})},refresh:function(){this.destroy(),this.$element.multiSelect(this.options)},destroy:function(){e("#ms-"+this.$element.attr("id")).remove(),this.$element.off("focus"),this.$element.css("position","").css("left",""),this.$element.removeData("multiselect")},select:function(t,s){"string"==typeof t&&(t=[t]);var i=this,l=this.$element,n=e.map(t,function(e){return i.sanitize(e)}),o=this.$selectableUl.find("#"+n.join("-selectable, #")+"-selectable").filter(":not(."+i.options.disabledClass+")"),a=this.$selectionUl.find("#"+n.join("-selection, #")+"-selection").filter(":not(."+i.options.disabledClass+")"),r=l.find("option:not(:disabled)").filter(function(){return e.inArray(this.value,t)>-1});if("init"===s&&(o=this.$selectableUl.find("#"+n.join("-selectable, #")+"-selectable"),a=this.$selectionUl.find("#"+n.join("-selection, #")+"-selection")),o.length>0){o.addClass("ms-selected").hide(),a.addClass("ms-selected").show(),r.prop("selected",!0),i.$container.find(i.elemsSelector).removeClass("ms-hover");var c=i.$selectableUl.children(".ms-optgroup-container");if(c.length>0)c.each(function(){var t=e(this).find(".ms-elem-selectable");t.length===t.filter(".ms-selected").length&&(e(this).hide(),e(this).find(".ms-optgroup-label").hide())}),i.$selectionUl.children(".ms-optgroup-container").each(function(){e(this).find(".ms-elem-selection").filter(".ms-selected").length>0&&(e(this).show(),e(this).find(".ms-optgroup-label").show())});else if(i.options.keepOrder&&"init"!==s){var d=i.$selectionUl.find(".ms-selected");d.length>1&&d.last()["get"](0)!=a["get"](0)&&a.insertAfter(d.last())}"init"!==s&&(l.trigger("change"),"function"==typeof i.options.afterSelect&&i.options.afterSelect.call(this,t))}},deselect:function(t){"string"==typeof t&&(t=[t]);var s=this,i=this.$element,l=e.map(t,function(e){return s.sanitize(e)}),n=this.$selectableUl.find("#"+l.join("-selectable, #")+"-selectable"),o=this.$selectionUl.find("#"+l.join("-selection, #")+"-selection").filter(".ms-selected").filter(":not(."+s.options.disabledClass+")"),a=i.find("option").filter(function(){return e.inArray(this.value,t)>-1});if(o.length>0){n.removeClass("ms-selected").show(),o.removeClass("ms-selected").hide(),a.prop("selected",!1),s.$container.find(s.elemsSelector).removeClass("ms-hover");var r=s.$selectableUl.children(".ms-optgroup-container");if(r.length>0)r.each(function(){e(this).find(".ms-elem-selectable").filter(":not(.ms-selected)").length>0&&(e(this).show(),e(this).find(".ms-optgroup-label").show())}),s.$selectionUl.children(".ms-optgroup-container").each(function(){0===e(this).find(".ms-elem-selection").filter(".ms-selected").length&&(e(this).hide(),e(this).find(".ms-optgroup-label").hide())});i.trigger("change"),"function"==typeof s.options.afterDeselect&&s.options.afterDeselect.call(this,t)}},select_all:function(){var t=this.$element,s=t.val();if(t.find('option:not(":disabled")').prop("selected",!0),this.$selectableUl.find(".ms-elem-selectable").filter(":not(."+this.options.disabledClass+")").addClass("ms-selected").hide(),this.$selectionUl.children(".ms-optgroup-container").show(),this.$selectableUl.children(".ms-optgroup-container").hide(),this.$selectionUl.find(".ms-optgroup-label").show(),this.$selectableUl.find(".ms-optgroup-label").hide(),this.$selectionUl.find(".ms-elem-selection").filter(":not(."+this.options.disabledClass+")").addClass("ms-selected").show(),this.$selectionUl.focus(),t.trigger("change"),"function"==typeof this.options.afterSelect){var i=e.grep(t.val(),function(t){return e.inArray(t,s)<0});this.options.afterSelect.call(this,i)}},deselect_all:function(){var e=this.$element,t=e.val();e.find("option").prop("selected",!1),this.$selectableUl.find(".ms-elem-selectable").removeClass("ms-selected").show(),this.$selectionUl.children(".ms-optgroup-container").hide(),this.$selectableUl.children(".ms-optgroup-container").show(),this.$selectionUl.find(".ms-optgroup-label").hide(),this.$selectableUl.find(".ms-optgroup-label").show(),this.$selectionUl.find(".ms-elem-selection").removeClass("ms-selected").hide(),this.$selectableUl.focus(),e.trigger("change"),"function"==typeof this.options.afterDeselect&&this.options.afterDeselect.call(this,t)},sanitize:function(e){var t,s=0;if(0==e.length)return s;var i;for(t=0,i=e.length;t<i;t++)s=(s<<5)-s+e.charCodeAt(t),s|=0;return s}},e.fn.multiSelect=function(){var s=arguments[0],i=arguments;return this.each(function(){var l=e(this),n=l.data("multiselect"),o=e.extend({},e.fn.multiSelect.defaults,l.data(),"object"==typeof s&&s);n||l.data("multiselect",n=new t(this,o)),"string"==typeof s?n[s](i[1]):n.init()})},e.fn.multiSelect.defaults={keySelect:[32],selectableOptgroup:!1,disabledClass:"disabled",dblClick:!1,keepOrder:!1,cssClass:""},e.fn.multiSelect.Constructor=t,e.fn.insertAt=function(e,t){return this.each(function(){0===e?t.prepend(this):t.children().eq(e-1).after(this)})}}(window.jQuery);
// ----------------------------------------------------------------
(function($) {
for (var i = 0, root = document.getElementById('sk-inlinestyles'), nodes = root.childNodes; i < nodes.length; i++) {
if (nodes[i].nodeType === document.COMMENT_NODE) {
var elem = document.createElement('style');
elem.type = 'text/css';
elem.setAttribute('media', 'screen');
if (elem.styleSheet) elem.styleSheet.cssText = nodes[i].data;
else elem.appendChild(document.createTextNode(nodes[i].data));
document.getElementsByTagName('head').item(0).appendChild(elem);
root.parentNode.removeChild(root);
break;
}
}
var VIEW_MODE = { Servant: 1, CraftEssence: 2, Both: 3, Master: 4, All: 7 };
var TABLE_TEMPLATE = (function(){
// 共通テンプレート
var CommonTemplate = {};
CommonTemplate["proto"+"type"] = {
headColumns: [], // data-column names
headDispNames: [], // 表示カラム名
headAttributes: {}, // thエレメントの属性
lineColumns: [], // data-column names
lineTagHeads: [], // tdエレメントの開始タグ(_MakeTagHeadArrayのキャッシュ)
lineAttributes: {}, // tdエレメントの属性
head: '', // thead.innerHTMLのキャッシュ
line: [], // tr.innerHTML作業用
body: '', // tableの枠組み
func: function(value, index, row, flags) { return value; }, // need overwrite
// ----
star: ['', '★C', '★★U', '★★★R', '★★★★SR', '★★★★★SSR'],
torder: ['自身', '味方単体', '自分以外の味方単体', '自分以外の味方単体<生贄>', '自身以外の味方全体', '自身以外の味方全体<控え含む>', '味方全体', '味方全体<控え含む>',
'敵単体', '敵全体', '敵全体<控え含む>'],
updown: ['アップ', 'プラス', '増加', '獲得', '回復', '減少', 'カット', 'ダウン'],
effectregs: $.map($('#skform-effect option'), function(e) { return new RegExp($(e).val()); }),
_MakeTagHead: function(ukey, tag, column_name, attr) {
var c = [ukey+'-'+column_name];
if (ukey !== 'col' && ukey !== 'th') {
c.push(column_name);
}
var text = '<'+tag+' class="'+c.join(' ')+'"';
if (attr) { for (var key in attr) { text += ' ' + key + '="' + attr[key] + '"'; } }
return text + '>';
},
_MakeTagHeadArray: function(ukey, tag, columns, attrs) {
var arr = [];
for (var i = 0, l = columns.length; i < l; i++) {
var col = columns[i];
arr.push(this._MakeTagHead(ukey, tag, col, (typeof attrs == 'object' && typeof attrs[col] !== 'undefined') ? attrs[col] : undefined));
}
return arr;
},
ClearLines: function() {
this.line = [];
},
AppendLine: function(row, query) {
var flags = row.Flags;
var td = [], colname = '', temp;
for (var i = 0, l = this.lineColumns.length; i < l; i++) {
colname = this.lineColumns[i];
if (typeof row[colname] !== 'undefined') {
temp = this.lineTagHeads[i];
if (colname == 'SkillName')
{
temp = parseInt(row.CEType.Value);
if (temp < 64) temp = this.lineTagHeads[i].replace('class="', 'class="ribbon-craft ');
else if (temp === 64) temp = this.lineTagHeads[i].replace('class="', 'class="ribbon-skill ');
else if (temp == 128) temp = this.lineTagHeads[i].replace('class="', 'class="ribbon-class ');
else if (temp == 512) temp = this.lineTagHeads[i].replace('class="', 'class="ribbon-master ');
else {
temp = 'ribbon-';
if (row.NobleTraits.Value[0] == 'Buster') temp += 'buster-';
else if (row.NobleTraits.Value[0] == "Arts") temp += 'arts-';
else temp += 'quick-';
if (row.NobleTraits.Value[1] == '全体') temp += 'all';
else if (row.NobleTraits.Value[1] == '単体') temp += 'solo';
else temp += 'support';
temp = this.lineTagHeads[i].replace('class="', 'class="'+temp+' ');
}
}
td.push(temp + this.func(row[colname].GetEffect(flags), colname, row, query) + '</td>');
}
}
this.line.push('<tr>' + td.join('') + '</tr>');
},
GetHead: function() {
if (this.head.length > 0) { return this.head; }
var th = this._MakeTagHeadArray('th', 'th', $.map(this.headColumns, function(e) { return e.replace('_', ''); }), this.headAttributes);
for (var i = 0, l = th.length; i < l; i++) {
th[i] += this.headDispNames[i] + '</th>';
}
this.head = '<tr>' + th.join('') + '</tr>';
return this.head;
},
GetColgroup: function() {
var col = this._MakeTagHeadArray('col', 'col', $.map(this.headColumns, function(e) { return e.replace('_', ''); }), undefined);
return col.join('');
},
GetTable: function() {
var $table = $(this.body);
$table.find('colgroup').append(this.GetColgroup());
$table.find('thead').append(this.GetHead());
return $table;
},
GetLines: function(i, len) {
return this.line.slice(i, len).join('');
},
MakeTarget: function(v, highlights) {
var text = '', i = 0, l = v.length, hfs = '';
for (; i < l; i++) {
hfs = (typeof highlights !== 'undefined' && highlights[i] === false) ? ' not-highlight' : '';
switch (v[i]) {
case '自身':
text += '<div class="target-icon target-self'+hfs+'"><div class="target-main">自身</div></div>';
break;
case '味方単体':
text += '<div class="target-icon target-pt-solo'+hfs+'"><div class="target-main">味方単体</div></div>';
break;
case '自分以外の味方単体':
text += '<div class="target-icon target-pt-all'+hfs+'"><div class="target-main">味方単体</div><div class="target-sub">自身除く</div></div>';
break;
case '自分以外の味方単体<生贄>':
text += '<div class="target-icon target-pt-all'+hfs+'"><div class="target-main">味方単体</div><div class="target-sub">生贄</div></div>';
break;
case '味方全体':
text += '<div class="target-icon target-pt-field'+hfs+'"><div class="target-main">味方全体</div></div>';
break;
case '自身以外の味方全体':
text += '<div class="target-icon target-pt-all'+hfs+'"><div class="target-main">味方全体</div><div class="target-sub">自身除く</div></div>';
break;
case '味方全体<控え含む>':
text += '<div class="target-icon target-pt-all'+hfs+'"><div class="target-main">味方全体</div><div class="target-sub">サブ</div></div>';
break;
case '自身以外の味方全体<控え含む>':
text += '<div class="target-icon target-pt-all'+hfs+'"><div class="target-main">味方全体</div><div class="target-sub">自身除く+サブ</div></div>';
break;
case '敵単体':
text += '<div class="target-icon target-en-solo'+hfs+'"><div class="target-main">敵 単体</div></div>';
break;
case '敵全体':
text += '<div class="target-icon target-en-field'+hfs+'"><div class="target-main">敵 全体</div></div>';
break;
case '敵全体<控え含む>':
text += '<div class="target-icon target-en-all'+hfs+'"><div class="target-main">敵 全体</div><div class="target-sub">サブ</div></div>';
break;
case '選択した味方控え単体':
text += '<div class="target-icon target-pt-all'+hfs+'"><div class="target-main">味方単体</div><div class="target-sub">サブ交代</div></div>';
break;
case 'ターゲット以外の敵全体':
text += '<div class="target-icon target-en-all'+hfs+'"><div class="target-main">敵 全体</div><div class="target-sub">対象除く</div></div>';
break;
default:
text += '<div class="target-icon target-en-solo'+hfs+'"><div class="target-main">ERROR</div></div>';
break;
}
}
return text;
},
MakeSkillName: function(row) {
return parseInt(row.CEType.Value) < 64 ? this.MakeOwnerNamesToLink(row.OwnerNames.Value).join('') : row.SkillName.Value;
},
MakeSValue: function(v, highlights, row) {
return $.map(v, function(e,i) {
var tmp = e.replace(/(?:proc:|rate:|\))/g, '').split('/');
var c = ['effect-outer'];
if (typeof highlights !== 'undefined' && highlights[i] === false) c.push('not-highlight');
$.merge(c, row.NobleColor[i]);
if (tmp.length == 3) {
tmp[0] = '始'+tmp[0];
tmp[1] = '毎'+tmp[1];
tmp[2] = '終'+tmp[2];
c.push('initaddmax');
}
else if (tmp.length == 1 && tmp[0].indexOf('(') != -1) {
tmp = tmp[0].split('(');
tmp[1] = '('+tmp[1].replace('特攻:', '+').replace('追加:', '+')+')';
c.push('minival');
}
tmp = tmp.join('<br>');
c = c.length > 0 ? ' class="'+c.join(' ')+'"' : '';
return tmp.length === 0 ? '' : '<div'+c+'>' + tmp + '</div>';
}).join('');
},
MakePreText: function(v, target2, highlights) {
return $.map(v, function(e,i) {
var cls = ['effect-outer'], scnt = 0, hfs = '', text, text2;
if (typeof highlights !== 'undefined' && highlights[i] === false) cls.push('not-highlight');
scnt = e.length;
text = e.replace(/[<>]/g, function(g) { return g === '<' ? '<' : '>'; }).replace(/(proc|rate):(\d+%|(?:LV|OC)?変動)/g, function(g, $1, $2) { scnt = Math.max(0, scnt - 5); return '<div class="'+$1+'">'+$2+'</div>'; });
text2 = ((typeof target2 !== 'undefined' && typeof target2[i] !== 'undefined' && target2[i].length > 1) ? target2[i] : '');
scnt += text2.length;
if (text2.length > 0) {
if (text.length <= 1) { text = ''; }
else { scnt++; text += "、"; }
}
if (9 < scnt) {}
if (0 < cls.length) {
hfs = ' class="' + cls.join(' ') + '"';
}
text2 = text + text2;
text = '<div'+hfs+'>';
if (9 < scnt) { text += '<div class="minipre">';}
text += text2;
if (9 < scnt) { text += '</div>';}
return text + '</div>';
}).join('');
},
MakeMainText: function(v, highlights, row) {
return $.map(v, function(e, i) {
var c = ['effect-outer'];
if (typeof highlights !== 'undefined' && highlights[i] === false) c.push('not-highlight');
$.merge(c, row.NobleColor[i]);
c = c.length > 0 ? ' class="'+c.join(' ')+'"' : '';
return '<div'+c+'>' + e.replace('<', '<').replace('>', '>') + '</div>';
}).join('');
},
MakePostText: function(v, grows, highlights) {
return $.map(v, function(e,i) {
var c = ['effect-outer'];
if (typeof grows !== 'undefined') {
if (grows[i] === 'Lv') c.push('growlv');
else if (grows[i] === 'OC') c.push('growoc');
else if (grows[i] === 'LvOC') {
c.push('growlvoc');
}
}
if (typeof highlights !== 'undefined' && highlights[i] === false) c.push('not-highlight');
c = c.length > 0 ? ' class="'+c.join(' ')+'"' : '';
return ('<div'+c+'>'
+ e.replace(/[<>]/g, function(g) { return g === '<' ? '<' : '>'; }).replace(/(proc|rate):(\d+%|(?:LV|OC)?変動)/g, function(g, $1, $2) { return '<div class="'+$1+'">'+$2+'</div>'; })
+ '</div>'
);
}).join('');
},
MakeDefault: function(v, highlights) {
return $.map(v, function(e, i) {
var hfs = (typeof highlights !== 'undefined' && highlights[i] === false) ? ' class="not-highlight"' : '';
return '<div'+hfs+'>' + e.replace('<', '<').replace('>', '>') + '</div>';
}).join('');
},
MakeOwnerNamesToLink: function(v) {
var uri = location.toString().split('/');
uri.splice(-2);
//[[名前>リンク]] or [[名前]] → <a>
return $.map(v, function(e) {
e = e.slice(2, -2).split('>');
var u = encodeURI(uri.join('/') + '/?page=' + (e.length > 1 ? e[1] : e[0]));
return '<a href="'+ u + '">'+e[0]+'</a>';
});
},
CalcScore: function(order, cur) {
var self = this, o = [], c = [], i, l, t;
for (i = 0, l = order.length; i < l; i++) {
t = order[i].split('-');
o.push({ cname: t[0], 'gt': ((t.length === 1 || t[1] === 'asc') ? 1 : -1) });
}
for (i = 0, l = cur.length; i < l; i++) c.push(cur[i]);
return c.sort(function(a, b) {
for (i = 0, l = o.length; i < l; i++) {
if (typeof self["asc"+o[i].cname] === 'function') {
var sign = self["asc"+o[i].cname](a, b, o[i].gt);
if (sign !== 0) { return sign; }
}
}
return 0;
});
},
// Owners : 鯖スキル優先のコレクションNo順
ascOwners: function(a, b, gt) {
var a0 = a.Owners.Value[0], a01 = a0[0], anum = parseInt(a0.substring(1)),
b0 = b.Owners.Value[0], b01 = b0[0], bnum = parseInt(b0.substring(1));
if (a01 === b01) return (anum === bnum) ? 0 : isNaN(anum) ? 1 : isNaN(bnum) ? -1 : (anum - bnum) * gt;
return a01 === 's' ? -1 : 1;
},
// Rare : 数値順。鯖スキルは劣後
ascRare: function(a, b, gt) {
var an = parseInt(a.Rare.Value), bn = parseInt(b.Rare.Value);
return an === bn ? 0 : isNaN(an) ? 1 : isNaN(bn) ? -1 : (an - bn) * gt;
},
// CT : 数値順。概念礼装は劣後
ascCT: function(a, b, gt) {
var an = parseInt(a.CT.Value), bn = parseInt(b.CT.Value);
return an === bn ? 0 : isNaN(an) ? 1 : isNaN(bn) ? -1 : (an - bn) * gt;
},
// HPMax : 数値順。鯖スキルは劣後
ascHPMax: function(a, b, gt) {
var an = parseInt(a.HPMax.Value), bn = parseInt(b.HPMax.Value);
return an === bn ? 0 : isNaN(an) ? 1 : isNaN(bn) ? -1 : (an - bn) * gt;
},
// ATKMax : 数値順。鯖スキルは劣後
ascATKMax: function(a, b, gt) {
var an = parseInt(a.ATKMax.Value), bn = parseInt(b.ATKMax.Value);
return an === bn ? 0 : isNaN(an) ? 1 : isNaN(bn) ? -1 : (an - bn) * gt;
},
// Target : 味方(自身 > 単体 > 全体) > 敵(自身 > 単体 > 全体) 順
ascTarget: function(a, b, gt) {
var at = this.torder.indexOf(a.GetHighlightFirst("Target"));
bt = this.torder.indexOf(b.GetHighlightFirst("Target"));
return (at === bt) ? 0 : (at === -1) ? 1 : (bt === -1) ? -1 : (at - bt) * gt;
},
// PreText : 各効果の内の最大文字数順
ascPreText: function(a, b, gt) {
var i, l,
av = a.PreText.Value, av2 = a.Target2.Value, at = 0, at2 = 0,
bv = b.PreText.Value, bv2 = b.Target2.Value, bt = 0, bt2 = 0;
for (i = 0, l = av.length; i < l; i++) {
at = Math.max(av[i].length, at);
at2 = Math.max(av2[i].length, at2);
}
for (i = 0, l = bv.length; i < l; i++) {
bt = Math.max(bv[i].length, bt);
bt2 = Math.max(bv2[i].length, bt2);
}
at += at2;
bt += bt2;
return (at === bt) ? 0 : (at <= 0) ? 1 : (bt <= 0) ? -1 : (at - bt) * gt;
},
// MainText : select optionの並び順
ascMainText: function(a, b, gt) {
var at = a.GetHighlightFirst("MainText"), anum = -1,
bt = b.GetHighlightFirst("MainText"), bnum = -1;
for (var i = 0, l = this.effectregs.length; i < l; i++) {
if (anum === -1) {
anum = this.effectregs[i].test(at) ? i : -1;
}
if (bnum === -1) {
bnum = this.effectregs[i].test(bt) ? i : -1;
}
}
return (anum === bnum) ? 0 : (anum === -1) ? 1 : (bnum === -1) ? -1 : (anum - bnum) * gt;
},
// PostText : アップ効果 > ダウン効果 順 (更にテキストで揃える)
ascPostText: function(a, b, gt) {
var at = a.GetHighlightFirst("PostText"), anum = -1,
bt = b.GetHighlightFirst("PostText"), bnum = -1;
for (var i = 0, l = this.updown.length; i < l; i++) {
if (anum === -1) {
anum = at.indexOf(this.updown[i]) !== -1 ? i : -1;
}
if (bnum === -1) {
bnum = bt.indexOf(this.updown[i]) !== -1 ? i : -1;
}
}
return (anum === bnum) ? 0 : (anum === -1) ? 1 : (bnum === -1) ? -1 : (anum - bnum) * gt;
},
// Value9 : 最大効果量順 (礼装ならValue1ないしValue0)
ascValue9: function(a, b, gt) {
var av = a.GetHighlightFirst("MaxValue"), av = av.replace('HP', '').split('(')[0],
anum = (av.indexOf('%') === -1) ? parseInt(av) * 100 : parseInt(av),
bv = b.GetHighlightFirst("MaxValue"), bv = bv.replace('HP', '').split('(')[0],
bnum = (bv.indexOf('%') === -1) ? parseInt(bv) * 100 : parseInt(bv);
if (!isNaN(anum) && av.indexOf('個') === -1 && av.indexOf('倍') === -1 && av.indexOf('段階') === -1) {
anum + 10000000;
}
if (!isNaN(bnum) && bv.indexOf('個') === -1 && bv.indexOf('倍') === -1 && bv.indexOf('段階') === -1) {
bnum + 10000000;
}
return (anum === bnum) ? 0 : isNaN(anum) ? 1 : isNaN(bnum) ? -1 : (anum - bnum) * gt;
},
GetNobleStyleFunc : function(row) {
var css = $.grep(row.NobleTraits.Value.slice(0, 1), function(e) { return e !== ""; }),
mts = row.MainText.GetEffect(row.Flags),
i = 0, l = mts.length;
for (; i < l; i++) {
if (mts[i].indexOf('宝具攻撃') !== -1) break;
}
return function(i2) {
return (i2 === i) ? css : [];
};
}
};
// 概念礼装テンプレート
var CreateCEList = function() {
this.headColumns = ['SkillName', 'Cost', 'Target', 'PreText', 'MainText', 'PostText', 'Value0', 'Value1', 'CEType'];
this.headDispNames = ['名前', 'コスト', '対象', '効果(左)', '効果(中)', '効果(右)', '上昇値', '最大開放', '備考'];
this.lineColumns = [ 'SkillName', 'Cost', 'Target', 'PreText', 'MainText', 'PostText', 'Value0', 'Value1', 'CEType'];
this.lineTagHeads = this._MakeTagHeadArray('ce', 'td', this.lineColumns, this.lineAttributes);
this.body = '<table class="celist"><colgroup /><thead class="ce-head" /><tbody /></table>';
this.MakeCraftStats = function(row) {
var t = '', s;
t += '<div class="namehead">';
t += '<span class="namehead-no">No.'+row['Owners'].Value[0].substring(1)+'</span>';
// Rare
if (row['Rare'].Value.length !== 0) { t += '<span class="star namehead-rare">'+this.star[parseInt(row.Rare.Value)]+'</span>'; }
t += '</div>';
// 概念礼装名
t += '<div class="namebody">'+ this.MakeSkillName(row) +'</div>';
// HP ATK
var s = '<div class="namehead"><span class="gainen_hp">HP</span> ';
if (!isNaN(row.HPBase.Value)) {
s += row.HPBase.Value+'';
if (!isNaN(row.HPMax.Value) && row.HPBase.Value != row.HPMax.Value) { s += '(最大:'+row.HPMax.Value+')'; }
} else if (!isNaN(row.HPMax.Value)) { s += row.HPMax.Value+''; }
else { s += '0'; }
s += '<br><span class="gainen_atk">ATK</span> ';
if (!isNaN(row.ATKBase.Value)) {
s += row.ATKBase.Value+'';
if (!isNaN(row.ATKMax.Value) && row.ATKBase.Value != row.ATKMax.Value) { s += '(最大:'+row.ATKMax.Value+')'; }
} else if (!isNaN(row.ATKMax.Value)) { s += row.ATKMax.Value+''; }
else { s += '0'; }
s += '</div>';
if (s.split('最大').length == 1) { s = s.replace('<br>', ''); }
t += s;
return t;
};
this.MakeEtc = function(row) {
var v, t = [], ea = row.EventOnly.Value;
v = parseInt(row.CEType.Value);
if ((v & 1) !== 0) { t.push('一般'); }
if ((v & 2) !== 0) { t.push('フレンドポイント召喚'); }
if ((v & 4) !== 0) { t.push('イベント期間限定'); }
if ((v & 8) !== 0) { t.push('イベントボーナス'); }
if ((v & 16) !== 0) {
t.push('絆礼装');
t.push(row.BondCEOwner.Value);
t.push('絆Maxまで<span class="bondpt">'+row.BondPt.Value+'</span>Pt');
}
if ((v & 32) !== 0) { t.push('EXPカードorチョコ'); }
for (var i = 0; i < ea.length; i++) {
if (ea[i] !== '-' && t.indexOf(ea[i]) == -1) { t.push(ea[i]); }
}
return t.join('<br>');
};
this.func = function(v, col, row, query) {
var t, ea, flags = row.Flags, hlights = row.Highlights, cetype = parseInt(row['CEType'].Value);
if (col === 'SkillName') {
if (cetype < 64) {
v = this.MakeCraftStats(row);
} else {
v = this.MakeSkillName(row);
}
}
else if (col === 'Target') {
v = this.MakeTarget(v, hlights);
}
else if (col === 'PreText') {
v = this.MakePreText(v, row.Target2.GetEffect(flags), hlights);
}
else if (col === 'MainText') {
v = this.MakeMainText(v, hlights, row);
}
else if (col === 'PostText') {
v = this.MakePostText(v, row.Grow.GetEffect(flags), hlights);
}
else if (col === 'Value1') {
v = this.MakeSValue(row.MaxValue.GetEffect(flags), hlights, row);
}
else if (col.indexOf('Value') === 0) {
v = this.MakeSValue(v, hlights, row);
}
else if (col === 'CEType') {
v = this.MakeEtc(row);
}
else if (v instanceof Array) {
v = this.MakeDefault(v);
}
return v;
};
};
$.extend(CreateCEList["proto"+"type"], CommonTemplate["proto"+"type"]);
var CreateSPEC_COMP = function() {
this.headColumns = ['SkillName', 'CT', 'Target', 'PreText', 'MainText', 'PostText', 'Value0','Value1','Value2','Value3','Value4','Value5','Value6','Value7','Value8','Value9'];
this.headDispNames = ['名前', 'CT', '対象', '効果(左)', '効果(中)', '効果(右)', 'Lv1', 'Lv2', 'Lv3', 'Lv4', 'Lv5', 'Lv6', 'Lv7', 'Lv8', 'Lv9', 'Lv10'];
this.lineColumns = ['SkillName', 'CT', 'Target', 'PreText', 'MainText', 'PostText', 'Value0','Value1','Value2','Value3','Value4','Value5','Value6','Value7','Value8','Value9'];
this.lineTagHeads = this._MakeTagHeadArray('sc','td', this.lineColumns, this.lineAttributes);
this.body = '<table class="speccomp"><colgroup /><thead class="sc-head"/><tbody /></table>';
this.func = function(v, col, row, query) {
var t,
flags = row.Flags,
hlights = row.Highlights,
cetype = parseInt(row.CEType.Value);
if (col === 'Target') {
v = this.MakeTarget(v, hlights);
}
else if (col === 'PostText') {
v = this.MakePostText(v, row.Grow.GetEffect(flags), hlights);
}
else if (col === 'PreText') {
v = this.MakePreText(v, row.Target2.GetEffect(flags), hlights);
}
else if (col === 'MainText') {
v = this.MakeMainText(v, hlights, row);
}
else if (col.indexOf('Value') === 0) {
v = this.MakeSValue(v, hlights, row);
}
else if (col === 'SkillName') {
v = '<div>'+ this.MakeSkillName(row) + '</div>';
// 概念礼装以外は保有者を追記
if (64 <= cetype) {
v += $.map(this.MakeOwnerNamesToLink(row.OwnerNames.Value), function(e) { return '<div class="owner-mini">'+e+'</div>'; }).join('');
}
}
else if (v instanceof Array) {
v = this.MakeDefault(v);
}
return v;
};
};
$.extend(CreateSPEC_COMP["proto"+"type"], CommonTemplate["proto"+"type"]);
var CreateRaw = function() {
// スタイルが反映されないようにdata-columnに'_'を加える
this.headColumns = ['CEType_','SkillName_','Owners_','OwnerNames_', 'NobleTraits_', 'Rare_','Cost_','HPBase_','ATKBase_','HPMax_','ATKMax_','CT_','BondCEOwner_','BondPt_','Sign_','Demerit_','EventOnly_','ApplyUser_','Target_','Target2_','PreText_','MainText_','PostText_','Grow_','Value0_','Value1_','Value2_','Value3_','Value4_','Value5_','Value6_','Value7_','Value8_','Value9_'];
this.headDispNames = ['CEType','SkillName','Owners','OwnerNames', 'NobleTraits', 'Rare','Cost','HPBase','ATKBase','HPMax','ATKMax','CT','BondCEOwner','BondPt','Sign','Demerit','EventOnly','ApplyUser','Target','Target2','PreText','MainText','PostText','Grow','Value0','Value1','Value2','Value3','Value4','Value5','Value6','Value7','Value8','Value9'];
this.lineColumns = ['CEType_','SkillName_','Owners_','OwnerNames_', 'NobleTraits_', 'Rare_','Cost_','HPBase_','ATKBase_','HPMax_','ATKMax_','CT_','BondCEOwner_','BondPt_','Sign_','Demerit_','EventOnly_','ApplyUser_','Target_','Target2_','PreText_','MainText_','PostText_','Grow_','Value0_','Value1_','Value2_','Value3_','Value4_','Value5_','Value6_','Value7_','Value8_','Value9_'];
this.lineTagHeads = this._MakeTagHeadArray('raw','td', this.lineColumns, this.lineAttributes);
this.body = '<table class="raw"><colgroup /><thead class="raw-head" /><tbody /></table>';
this.AppendLine = function(row, query) {
var flags = row.Flags;
var td = [], colname = '';
for (var i = 0, l = this.lineColumns.length; i < l; i++) {
colname = this.lineColumns[i].slice(0, -1);
if (typeof row[colname] !== 'undefined') {
td.push(this.lineTagHeads[i] + this.func(row[colname].GetEffect(flags), colname, row, query) + '</td>');
}
}
this.line.push('<tr>' + td.join('') + '</tr>');
}
this.func = function(v, col, row, query) {
return (v instanceof Array) ? this.MakeDefault(v) : (typeof v === 'number' && isNaN(v)) ? '' : v;
};
};
$.extend(CreateRaw["proto"+"type"], CommonTemplate["proto"+"type"]);
var CreateDetail = function() {
this.head = '<tr><th>まだ未実装</th></tr>';
this.line = '<tr><td>-</td></tr>';
this.lineTagHeads = this._MakeTagHeadArray('detail','td', this.lineColumns, this.lineAttributes);
this.body = '<table class="detail"><thead class="detail-head" /><tbody /></table>';
this.AppendLine = function(row, query) { };
this.func = function(v, col, row, query) {
return '';
};
};
$.extend(CreateDetail["proto"+"type"], CommonTemplate["proto"+"type"]);
return {
RAW : new CreateRaw(),
DETAIL : new CreateDetail(),
SPEC_COMP : new CreateSPEC_COMP(),
CE_LIST : new CreateCEList()
};
})();
var DataSource = {
Header: {},
Rows: [],
QueryCache: {},
Order: [],
Score: [],
sortable: null,
SORT_STORE_KEY: 'fgowiki-skilllist-order',
timerId: [],
SetData: function(rows) {
var i, l, obj, order, self = this;
this.Header = {};
this.Rows = [];
for (i = 0, l = rows[0].length; i < l; i++) {
obj = new Column(rows[0][i], i);
this.Header[rows[0][i]] = obj;
}
for (i = 1, l = rows.length; i < l; i++) {
this.Rows.push(new Row(rows[i], this));
}
if (this.sortable == null) {
this.sortable = Sortable.create($('#skform-order')[0], {
group: self.SORT_STORE_KEY,
dataIdAttr : 'data-column',
draggable : '.column-order',
ghostClass : 'ghost',
chosenClass : 'chosen',
onSort : function(evt) {
self.Create();
self.sortable.save();
},
store : {
get: function(sortable) {
order = JSON.parse(sessionStorage.getItem(self.SORT_STORE_KEY)) || {};
if (order[location]) {
order = order[location];
for (i = 0, l = order.length; i < l; i++) {
$('.column-order[data-column^='+order[i].split('-')[0]+']').attr('data-column', order[i]);
}
return order;
} else return [];
},
set: function(sortable) {
order = JSON.parse(sessionStorage.getItem(self.SORT_STORE_KEY)) || {};
order[location] = $.map($('#skform-order > .column-order'), function(e) { return $(e).attr('data-column'); });
sessionStorage.setItem(self.SORT_STORE_KEY, JSON.stringify(order));
}
},
});
}
},
_setBits: function(src, index, value, range) {
value = parseInt(value);
if (typeof range !== 'number') range = 1;
if (index >= src.length) {
while (src.length < (index + range)) { src.push(0); }
}
if (range == 1) src[index] = value ? 1 : 0;
else {
for (var i = index; i < (index+range); i++) {
src[i] = (value & (1 << (i - index))) !== 0 ? 1 : 0;
}
}
},
_getBits: function(src, index, range) {
var len = src.length, num = 0;
if (typeof range !== 'number') range = 1;
if (index >= len) { return null; }
else if (range == 1) return src[index];
else {
for (var i = index; i < (index+range); i++) {
num |= (src[i] << (i - index));
}
num = num >>> 0;
return num;
}
},
_b64chars: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
Serialize: function(form) {
var ea = [];
// createid(作成日+インデックス2桁)を古い順のインデックスに並び替える
$.map($('#skform-effect option'), function(e) { return {selected: $(e).prop('selected'), createid: parseInt(e.getAttribute('data-createid')) }; })
.sort(function(a,b) { return a.createid - b.createid; })
.forEach(function(e, i) {
var x = i >> 5, r = parseInt(i % 32);
if (typeof ea[x] === 'undefined') { ea[x] = 0; }
if (e.selected) {
ea[x] |= (1 << r);
}
});
var bits = [], idx = 0;
this._setBits(bits, idx, $.map($('.skform-data', form), function(e) { return $(e).prop('checked') ? 1 : 0; }).reduce(function(prev, cur, i) { return prev + (cur << i); }), 4); idx += 16;
this._setBits(bits, idx, Math.min(Math.max(0, parseInt($('#skform-hpmin').val()) || 0), 4294967295), 32); idx += 32;
this._setBits(bits, idx, Math.min(Math.max(0, parseInt($('#skform-hpmax').val().length===0 ? '4294967295':$('#skform-hpmax').val()) || 0), 4294967295), 32); idx += 32;
this._setBits(bits, idx, Math.min(Math.max(0, parseInt($('#skform-atkmin').val()) || 0), 4294967295), 32); idx += 32;
this._setBits(bits, idx, Math.min(Math.max(0, parseInt($('#skform-atkmax').val().length===0 ? '4294967295':$('#skform-atkmax').val()) || 0), 4294967295), 32); idx += 32;
this._setBits(bits, idx, $.map($('.skform-rarity'), function(e) { return $(e).prop('checked') ? 1 : 0; }).reduce(function(prev, cur, i) { return prev + (cur << i); }), 8); idx += 8;
this._setBits(bits, idx, $.map($('.skform-target'), function(e) { return $(e).prop('checked') ? 1 : 0; }).reduce(function(prev, cur, i) { return prev + (cur << i); }), 8); idx += 8;
this._setBits(bits, idx, $('#skform-applyuser').prop('selectedIndex'), 2); idx += 2;
this._setBits(bits, idx, $.map($('.skform-kind'), function(e) { return $(e).prop('checked') ? 1 : 0; }).reduce(function(prev, cur, i) { return prev + (cur << i); }), 6); idx += 16;
for (var i = 0, l = ea.length; i < l; i++) {
this._setBits(bits, idx, ea[i], 32); idx += 32;
}
var num = 0;
var code = '';
for (var i = 0, l = idx + 1; i < l; i++) {
if ((i % 6) === 0 && 0 < i) {
code += this._b64chars.charAt(num);
num = 0;
}
num |= (bits[i] << (i % 6));
}
code += ':' + $('.skform-styles input:checked').val();
var keyword = $('#skform-keyword').val();
if (typeof keyword === 'string' && keyword.length > 0) {
code += ':' + keyword.trim();
}
return code;
},
Deserialize: function(form, code) {
code = code.split(':');
$('.skform-styles input[value="'+code[1]+'"]').prop('checked', true);
$('#skform-keyword').val((code[2] || '').trim());
code = code[0];
var bits = [], len = code.length * 6;
for (var i = 0, l = code.length, c = 0; i < l; i++) {
if ((c = this._b64chars.indexOf(code[i])) == -1) { console.log('DataSource.Deserialize(): Failed'); return; }
for (var j = 0; j < 6; j++) {
bits.push(((c & (1 << j)) !== 0) ? 1 : 0);
}
}
var idx = 0, i, n, n2, n3;
n = this._getBits(bits, idx, 4); idx += 16;
for (i = 0, l = $('.skform-data', form).length; i < l; i++) {
$('#skform-data'+(i+1)).prop('checked', (n & (1 << i)) !== 0);
}
$('#skform-hpmin').val(this._getBits(bits, idx, 32)); idx += 32;
n = this._getBits(bits, idx, 32); $('#skform-hpmax').val(n === 4294967295 ? '' : n); idx += 32;
$('#skform-atkmin').val(this._getBits(bits, idx, 32)); idx += 32;
n = this._getBits(bits, idx, 32); $('#skform-atkmax').val(n === 4294967295 ? '' : n); idx += 32;
n = this._getBits(bits, idx, 8); idx += 8;
for (i = 0, l = $('.skform-rarity').length; i < l; i++) {
$('#skform-rarity'+(i+1)).prop('checked', (n & (1 << i)) !== 0);
}
n = this._getBits(bits, idx, 8); idx += 8;
for (i = 0, l = $('.skform-target').length; i < l; i++) {
$('#skform-target'+(i+1)).prop('checked', (n & (1 << i)) !== 0);
}
$('#skform-applyuser').prop('selectedIndex', this._getBits(bits, idx, 2)); idx += 2;
n = this._getBits(bits, idx, 6); idx += 16;
for (i = 0, l = $('.skform-kind').length; i < l; i++) {
$('.skform-kind:eq('+i+')').prop('checked', (n & (1 << i)) !== 0);
}
n = [];
while ((n2 = this._getBits(bits, idx, 32)) !== null) { n.push(n2); idx += 32; }
n.push(n2); idx += 32;
$('#skform-effect option').sort(function(a, b) {
return parseInt(a.getAttribute('data-createid')) - parseInt(b.getAttribute('data-createid'));
})
.each(function(i, e) {
var x = i >> 5, r = parseInt(i % 32);
if (typeof n[x] === 'undefined') { console.log('DataSource.Deserialize(): Failed (reason:effect)'); return; }
$(e).prop('selected', (n[x] & (1 << r)) !== 0);
});
},
// created_scoreを並び替えてthis.Scoreに入れる。ソート時実行時はSortではなくCreateを使用する
Sort: function(created_score) {
var i, j, $i, $j, l, row, tmp,
// リクエストされたソート順
data_columns = this.sortable != null ? this.sortable.toArray() : null,
// 現在のTRの並び順
cur = (typeof created_score === 'undefined') ? this.Score : created_score,
// 新しい並び順
newscore;
// ソート順更新リクエスト(ソート変更なしの可能性もあるがDOM操作しないので影響ない)
if (typeof data_columns === 'object' && data_columns instanceof Array && 0 < data_columns.length)
this.Order = data_columns;
newscore = this.QueryCache.GetStyle().CalcScore(this.Order, cur);
this.Score = newscore;
},
Refresh: function(form) {
this.QueryCache = new SkFormQuery(form);
},
ClearTimer: function() {
var tid;
if (this.timerId != null) {
while (tid = this.timerId.pop()) clearTimeout(tid);
this.timerId = [];
}
},
LazyAppend: function(_temp) {
var self = this, $elem, loopFunc, i = 0, temp = _temp, width = 0;
$elem = $('#sktable').empty().append(temp.GetTable());
if ($elem.find('colgroup').length > 0) {
$elem.find('col').each(function() { width += parseInt($(this).css('width')) || 0; });
$elem.find('table').css('width', width);
} else { $elem.find('table').css('width', ''); }
$elem = $elem.find('tbody');
loopFunc = function() {
if (temp.line.length <= i) return;
$elem.append(temp.GetLines(i, i+100));
i += 100;
self.timerId.pop();
self.timerId.push(setTimeout(loopFunc, 1));
};
loopFunc();
},
Create: function() {
var i, l, row, self = this, temp = this.QueryCache.GetStyle(), score = [];
this.ClearTimer();
temp.ClearLines();
for (i = 0, l = this.Rows.length; i < l; i++) {
row = self.Rows[i];
self.QueryCache.StartRowCheck(row);
if (!self.QueryCache.CETypeCheck(row)) { continue; }
if (!self.QueryCache.StatusCheck(row)) { continue; }
if (!self.QueryCache.RarityCheck(row)) { continue; }
if (!self.QueryCache.NobleCheck(row)) { continue; }
if (!self.QueryCache.TargetCheck(row)) { continue; }
if (!self.QueryCache.EffectCheck(row)) { continue; }
if (!self.QueryCache.KindCheck(row)) { continue; }
if (!self.QueryCache.KeywordCheck(row)) { continue; }
score.push(row);
}
this.Sort(score);
for (i = 0, l = this.Score.length; i < l; i++) {
temp.AppendLine(this.Score[i], self.QueryCache);
}
this.LazyAppend(temp);
$('#skform-overlay').fadeOut();
},
};
function SkFormQuery(form) {
var numcheck = function(id, def) {
var num = parseInt($(form).find(id).val());
return !isNaN(num) ? Math.min(num, 4294967295) : def;
};
var sum = function($elem) {
return $elem.length === 0 ? 0 : $.map($elem, function(e) { return parseInt(e.getAttribute('data-regex')); })
.reduce(function(a,b) { return a + b; });
};
this._applyuser = new RegExp($('#skform-applyuser').val());
this._cetype = sum($('.skform-data:checked', form));
this._hpmin = numcheck('#skform-hpmin', 0);
this._hpmax = numcheck('#skform-hpmax', 4294967295);
this._atkmin = numcheck('#skform-atkmin', 0);
this._atkmax = numcheck('#skform-atkmax', 4294967295);
this._command = (($(form).find('.skform-command:checked').length > 0) ? $.map($(form).find('.skform-command:checked'), function(e) { return $(e).attr('data-regex'); }) : []);
this._rarity = (($(form).find('.skform-rarity:checked').length > 0) ? $.map($(form).find('.skform-rarity:checked'), function(e) { return $(e).attr('data-regex'); }).join('') : '');
this._target = (($(form).find('.skform-target:checked').length > 0) ? $.map($(form).find('.skform-target:checked'), function(e) { return new RegExp($(e).attr('data-regex')); }) : []);
this._option_length = $(form).find('#skform-effect option').length;
this._option_selected = (($(form).find('#skform-effect').val() !== null) ? $.map($(form).find('#skform-effect').val(), function(e) {
return new RegExp(e);
}) : []);
this._kind = sum($('.skform-kind:checked', form));
this._keywords = $.map($(form).find('#skform-keyword').val().trim().split('OR'), function(e) {
e = e.trim();
var m = /^([se])(?:0*)?(\d{0,3})$/i.exec(e);
return m ? m[1] + m[2] : e;
});
this._style = $('.skform-styles input:checked').val();
}
SkFormQuery["proto"+"type"] = {
// StartRowCheckは必ず最初に行うこと
StartRowCheck: function(row) {
var applyuser = row.ApplyUser.Value;
var length = row.ApplyUser.Count;
var flags = [];
for (var i = 0; i < length; i++) {
flags.push(this._applyuser.test(applyuser[i]));
}
row.Flags = flags;
row.Highlights = this.GetHighlightEffectIndex(row);
row.NobleColor = [];
var css = $.grep(row.NobleTraits.Value.slice(0, 1), function(e) { return e !== ""; }),
mts = row.MainText.GetEffect(row.Flags);
for (var i = 0, l = mts.length; i < l; i++) {
if (mts[i].indexOf('宝具攻撃') !== -1) { row.NobleColor.push(css); }
else row.NobleColor.push([]);
}
},
CETypeCheck: function(row) {
return (parseInt(row.CEType.Value) & this._cetype) !== 0;
},
StatusCheck: function(row) {
var maxhp = row.HPMax.Value || 0;
var maxatk = row.ATKMax.Value || 0;
return this._hpmin <= maxhp && maxhp <= this._hpmax && this._atkmin <= maxatk && maxatk <= this._atkmax;
},
RarityCheck: function(row) {
var rarity = row.Rare.Value;
return rarity.length === 0 || this._rarity.indexOf(rarity) !== -1;
},
TargetCheck: function(row) {
var targets = row.Target.Value;
var length = row.Target.Count;
for (var i = 0; i < length; i++) {
if (row.Flags[i] && row.Highlights[i]) {
for (var j = 0; j < this._target.length; j++) {
if (this._target[j].test(targets[i])) { return true; }
}
}
}
return false;
},
NobleCheck: function(row) {
return parseInt(row.CEType.Value) != 256 || this._command.indexOf(row.NobleTraits.Value[0]) !== -1;
},
GetHighlightEffectIndex: function(row) {
var count = row.GetCount();
var ti = 0, ar = [];
for (var i = 0, c = row.GetCount(); i < c; i++) {
if (row.Flags[i]) {
var flg = false;
for (var n = 0, l = this._option_selected.length; n < l; n++) {
if (this._option_selected[n].test(row.MainText.Value[i])) { flg = true; break; }
}
ar.push(flg);
ti++;
}
}
return ar;
},
EffectCheck: function(row) {
var reglen = this._option_selected.length;
if (this._option_length == reglen) { return true; } // 全表示
var maintext = row.MainText.Value;
var length = row.MainText.Count;
for (var i = 0; i < length; i++) {
if (row.Flags[i]) {
for (var j = 0; j < reglen; j++) {
if (this._option_selected[j].test(maintext[i])) { return true; }
}
}
}
return false;
},
KindCheck: function(row) {
var cetype = parseInt(row.CEType.Value);
// 概念礼装以外は常にtrue
return (64 <= cetype) || ((cetype & this._kind) !== 0);
},
KeywordCheck: function(row) {
if (this._keywords.length === 1 && this._keywords[0] === "") return true;
for (var i = 0, l = this._keywords.length; i < l; i++) {
if (this._keywords[i][0] === 's' || this._keywords[i][0] === 'e') {
var o = row.Owners.Value;
if (o.indexOf(this._keywords[i]) !== -1) {
return true;
}
}
if (row.SkillName.Value.indexOf(this._keywords[i]) !== -1 || row.BondCEOwner.Value.indexOf(this._keywords[i]) !== -1) {
return true;
}
for (var j = 0, eo = row.EventOnly.Value, eolen = eo.length; j < eolen; j++) {
if (eo[j].indexOf(this._keywords[i]) !== -1) { return true; }
}
for (var j = 0, on = row.OwnerNames.Value, onlen = on.length; j < onlen; j++) {
if (on[j].indexOf(this._keywords[i]) !== -1) { return true; }
}
}
return false;
},
GetStyle: function(row) {
if (this._style === 'ce-list') {
return TABLE_TEMPLATE.CE_LIST;
} else if (this._style === 'detail') {
return TABLE_TEMPLATE.DETAIL;
} else if (this._style === 'spec-comp') {
return TABLE_TEMPLATE.SPEC_COMP;
} else {
return TABLE_TEMPLATE.RAW;
}
}
};
// Row.{ColumnName} : Column
// Row.{ColumnName}.Value : Array|String
// Row.{ColumnName}.Count : 効果数
// Row.{ColumnName}.IsEffect : 効果Columnか(Arrayか)
// Row.{ColumnName}.Name : column name
// Row.{ColumnName}.Index : column index
// Row.{ColumnName}.GetEffect(flags) : 表示して良い効果のみを配列で返す
// Row.DataSource : DataSource
// ----
// Row.GetCount() : 効果数
// Row.GetOwnerCount() : 所持者数
// Row.GetLine(line_index=効果番号) : Arrayタイプの列の効果番号の値を{}で返す
function Row(_row, ds) {
for (var key in ds.Header) {
if (ds.Header[key] instanceof Column) {
this[key] = new Column(ds.Header[key].Name, ds.Header[key].Index);
}
}
this.DataSource = ds;
for (var colname in ds.Header) {
var item = this[colname];
item.Count = 0;
item.Value = (_row.length <= item.Index || typeof _row[item.Index] === 'undefined') ? "" : _row[item.Index];
item.IsEffect = false;
if (item.Value.indexOf('\n') != -1) {
item.Value = $.map(item.Value.split('\n'), function(e) { return e.trim(); });
item.Count = item.Value.length;
item.IsEffect = this.expectArray.indexOf(colname) === -1;
} else if (this.arrayColumns.indexOf(colname) != -1) {
item.Value = [item.Value];
item.Count = 1;
item.IsEffect = this.expectArray.indexOf(colname) === -1;
}
if (colname == 'HPBase' || colname == 'HPMax' || colname == 'ATKBase' || colname == 'ATKMax') {
item.Value = parseInt(item.Value);
}
if (item.IsEffect && colname.indexOf('Value') === 0 && 0 < item.Value[0].length) {
this.MaxValue = item;
}
}
this.ClearFlags();
}
Row["proto"+"type"] = {
arrayColumns : ['Owners', 'OwnerNames', 'NobleTraits', 'Sign', 'Demerit', 'EventOnly', 'ApplyUser', 'Target', 'Target2', 'PreText',
'MainText', 'PostText', 'Grow', 'Value0', 'Value1', 'Value2', 'Value3', 'Value4', 'Value5', 'Value6',
'Value7', 'Value8', 'Value9'],
expectArray : ['Owners', 'OwnerNames', 'NobleTraits'],
ClearFlags: function() {
this.Flags = []; // Values表示フラグ
this.Highlights = []; // 表示行の強調表示フラグ
for (var i = 0, l = this.Sign.Value.length; i < l; i++) {
this.Flags.push(true);
this.Highlights.push(true);
}
},
// 強調表示が有効な最初のValueの行テキストを返す(※表示行のインデックスではない)
GetHighlightFirst: function(colname) {
var i = -1;
if (this[colname].IsEffect) {
var hi = this.Highlights.indexOf(true); // flagsのhi個目のtrue
for (i = this.Flags.indexOf(true); i !== -1 && 0 < hi; i = this.Flags.indexOf(true, i+1), hi--) ;
}
return (i === -1) ? null : this[colname].Value[i];
},
GetCount: function() { return this.Sign.Count; },
GetOwnerCount: function() { return this.Owners.Count; },
GetLine: function(line_index) {
var obj = {};
for (var colname in this.DataSource.Header) {
if (colname != 'Owners' && colname != 'OwnerNames' && this[colname] instanceof Array) {
obj[colname] = this[colname][line_index];
}
}
return obj;
}
};
function Column(_name, _index) {
this.Name = _name;
this.Index = _index;
}
Column["proto"+"type"] = {
GetEffect: function(flags) {
return this.IsEffect ? this.Value.filter(function(e, i) { return flags[i]; }) : this.Value;
}
};
// 入力検証用
function shouldBe2Validated(field) {
return (
!($(field).attr('readonly') || field.readonly) &&
!($(field).attr('disabled') || field.disabled) &&
($(field).attr('pattern') || $(field).attr('required'))
);
}
function instantValidation(field) {
if (shouldBe2Validated(field)) {
var invalid = ($(field).attr('required') && !field.value) ||
($(field).attr('pattern') && !new RegExp($(field).attr('pattern')).test(field.value));
if (!invalid && $(field).attr('aria-invalid')) {
$(field).removeAttr('aria-invalid');
} else if (invalid && !$(field).attr('aria-invalid')) {
$(field).attr('aria-invalid', true);
}
}
}
// 処理メイン
document.addEventListener('DOMContentLoaded', function() {
//スマホページはレスポンシブ
if (location.toString().indexOf('/sp/') !== -1 || ($('#contents').attr('class') || '').indexOf('uk-') !== -1) {
$('#skform, #sktable').addClass('responsive');
}
//ページ読込み直後はフォウくんを表示しておく
$('#skform-overlay').show();
// フォーム入力データの読込み
if ($('#skilllist').length > 0) {
DataSource.Deserialize($('#skform'), $('#skilllist').text().trim());
} else {
// 全効果を表示欄に移動
$('#skform-effect option').prop('selected', true);
}
// 入力欄を完全に消すwiki構文オプションの存在チェック #divclass(skhide)
if ($('.skhide').length === 0) { $('#skform').css('display', 'inline-block'); }
// 入力欄を閉じた状態にするwiki構文オプションの存在チェック #divclass(skclose)
if ($('.skclose').length === 0 && $('#skform-expand').prop('checked')) {
$('#skform > ul > li:nth-of-type(n + 2)').show();
} else { $('#skform-expand').prop('checked', false); }
// サーヴァントスキルモード(wiki構文オプション)があれば概念礼装の入力フォームを隠す
if (0 < $('.sksvt').length) {
$('#skform-data4, #skform-data5').prop('checked', false);
$('.skform-ce-only, .skform-mst-only').hide();
$('#skform-style3').prop('checked', true);
}
// 概念礼装モード(wiki構文オプション)があればサーヴァントスキルの入力フォームを隠す
else if (0 < $('.skce').length) {
$('#skform-data1, #skform-data2, #skform-data3, #skform-data5').prop('checked', false);
$('.skform-svt-only, .skform-mst-only, .skform-data-li').hide();
}
// マスタースキルモード(wiki構文オプション)があればサーヴァントスキルの入力フォームを隠す
else if (0 < $('.skmst').length) {
$('#skform-data1, #skform-data2, #skform-data3, #skform-data4').prop('checked', false);
$('.skform-svt-only, .skform-ce-only, .skform-data-li').hide();
$('#skform-style3').prop('checked', true);
}
// すべて隠さない
else {
$('.skform-data').val(VIEW_MODE.All+'');
}
// multiselectの初期化
$('#skform-effect').multiSelect({
selectableOptgroup: true,
selectableHeader: '<div>非表示:</div><input type="text" class="search-input" autocomplete="off" placeholder="Search...">',
selectionHeader: '<div>表示:</div><input type="text" class="search-input" autocomplete="off" placeholder="Search...">',
selectableFooter: '<div class="skform-effect-footer"><button type="button" name="allshow" id="skform-allshow">すべて表示→</div>',
selectionFooter: '<div class="skform-effect-footer"><button type="button" name="allhide" id="skform-allhide">←すべて非表示</div>',
afterInit: function(ms){
var that = this,
$selectableSearch = that.$selectableUl.prev(),
$selectionSearch = that.$selectionUl.prev(),
selectableSearchString = '#'+that.$container.attr('id')+' .ms-elem-selectable:not(.ms-selected)',
selectionSearchString = '#'+that.$container.attr('id')+' .ms-elem-selection.ms-selected';
that.qs1 = $selectableSearch.quicksearch(selectableSearchString)
.on('keydown', function(e){
if (e.which === 40){
that.$selectableUl.focus();
return false;
}
});
that.qs2 = $selectionSearch.quicksearch(selectionSearchString)
.on('keydown', function(e){
if (e.which == 40){
that.$selectionUl.focus();
return false;
}
});
},
afterSelect: function(){
this.qs1.cache();
this.qs2.cache();
},
afterDeselect: function(){
this.qs1.cache();
this.qs2.cache();
}
});
// ソートの項目クリックで昇順降順切り換え
$('#skform').on('click', '.column-order', function(){
var arr = $(this).attr('data-column').split('-');
if (arr.length !== 2 || arr[1] === 'desc') {
$(this).attr('data-column', arr[0] + '-asc');
} else {
$(this).attr('data-column', arr[0] + '-desc');
}
DataSource.Create();
DataSource.sortable.save();
});
// 全効果を表示にするボタン
$('#skform').on('click', '#skform-allshow', function(){
$('#skform-effect').multiSelect('select_all');
return false;
});
// 全効果を非表示にするボタン
$('#skform').on('click', '#skform-allhide', function(){
$('#skform-effect').multiSelect('deselect_all');
return false;
});
// リセットボタンで入力欄を初期値にするボタン
$('#skform-reset').click(function(){
$('#skform-hpmin, #skform-atkmin').val("0");
$('#skform-hpmax, #skform-atkmax').val("");
$('.skform-rarity, .skform-target, .skform-kind').prop('checked', true);
$('#skform-applyuser').prop('selectedIndex', 1);
$('#skform-style1').prop('checked', true);
$('#skform-effect').multiSelect('select_all');
$('#skform-effect').multiSelect('refresh');
return false;
});
// 検索ボタン
$('#skform-execute').click(function(){
$('#skform-overlay').fadeIn("normal", function() {
setTimeout(function() {
DataSource.Refresh($('#skform'));
DataSource.Create();
}, 0);
});
});
// Wiki構文コピーボタン
$('#skform-serialize').click(function() {
var data = DataSource.Serialize($('#skform'));
var source = '';
source += '//#divclass(skhide) // {省略可} 入力欄を完全に消す\r\n//#divclass(skclose) // {省略可} 入力欄を閉じた状態にする\r\n//#divclass(sksvt) // {省略可} 鯖スキル・宝具以外検索できなくする\r\n//#divclass(skce) // {省略可} 概念礼装以外検索できなくする\r\n//#divclass(skmst) // {省略可} マスタースキル以外検索できなくする\r\n';
source += '#include(javascript/skilllist)\r\n#divid(skilllist){'+data+'}';
$('#skform-wikiedit textarea').val(source);
$('#skform-wikiedit').fadeIn();
});
// Wiki構文ポップアップを閉じるボタン
$('#skform-wikiedit-close').click(function() {
$('#skform-wikiedit').fadeOut();
});
// テキストエリアクリックで文章を全選択する
$('#skform-wikiedit textarea').focus(function() { this.setSelectionRange(0, 9999); })
.click(function() { this.setSelectionRange(0, 9999); return false; });
// フォーカス移動時にHP,ATKの入力文字の検証をする
$('#skform-hpmin, #skform-atkmin, #skform-hpmax, #skform-atkmax').change(function() {
var n = parseInt($(this).val());
if ($(this).attr('id').indexOf('min') != -1 && isNaN(n)) {
$(this).val('0');
return;
}
if ($(this).attr('id').indexOf('max') != -1 && !isNaN(n) && 4294967295 < n) {
$(this).val('');
return;
}
instantValidation(this);
});
// 入力フォームの展開/折り畳みボタン
$('#skform-expand').change(function() {
if ($(this).prop('checked')) {
$('#skform > ul > li:nth-of-type(n + 2)').show();
if (0 < $('.sksvt').length) {
$('.skform-ce-only, .skform-mst-only').hide();
}
else if (0 < $('.skce').length) {
$('.skform-svt-only, .skform-mst-only').hide();
}
else if (0 < $('.skmst').length) {
$('.skform-ce-only, .skform-svt-only').hide();
}
}
else { $('#skform > ul > li:nth-of-type(n + 2)').hide(); }
});
// 横スクロール拡張
$('#skform-max-width').change(function() {
var $elem = $('#sktable > table'), width = 0;
if ($('#contents[class^=uk-]').length > 0) { // レスポンシブ
if ($(this).prop('checked')) {
$('#wikibody').addClass('hscroll-expand-uk');
$elem.addClass('hscroll-expand-uk');
} else {
$('#wikibody').removeClass('hscroll-expand-uk');
$elem.removeClass('hscroll-expand-uk');
}
} else { // オレンジ ver2 決め打ち
if ($(this).prop('checked')) {
$('#contents').addClass('hscroll-expand');
$elem.addClass('hscroll-expand-uk')
} else {
$('#contents').removeClass('hscroll-expand');
$elem.removeClass('hscroll-expand-uk')
}
}
if ($elem.find('colgroup').length > 0) {
$elem.find('col').each(function() { width += parseInt($(this).css('width')) || 0; });
$elem.css('width', width);
} else { $elem.css('width', ''); }
});
// ハイライト変更
$('#skform-reverse-highlight').change(function() {
$t = $('#sktable');
if ($t.hasClass('reverse-highlight')) { $t.removeClass('reverse-highlight'); }
else $t.addClass('reverse-highlight');
});
// データ読込み
var API_KEY = 'AIzaSyCAO2Dq4BMcbg3VlPtC9riyPLklfr02v-s';
var SPREADSHEET_ID = '13I84mtXMeSsO6JrpSm-Xg3g5LAeEtDP9R4V-ypB7M60';
//var SPREADSHEET_ID = '13ttH1I8ATIsCnl6uqB9JfEzZKT6uEqnOsE3kCjHAYoU'; // デバッグ用
$.getJSON("https://sheets.googleapis.com/v4/spreadsheets/"+SPREADSHEET_ID+"/values/skillList.csv!A1:FF9999?key="+API_KEY, null,
function(data){
if (data != null && data.values != null && data.values.length > 0) {
DataSource.SetData(data.values);
DataSource.Refresh($('#skform'));
DataSource.Create();
} else {
$('#skform-overlay').fadeOut();
}
});
});
})(jQuery);
</script>
}}}}}
Comments policy & Terms of Use
・ネタバレ自粛期間中はシナリオや真名のネタバレは禁止です!
ネタバレ自粛期間の文字列挿入箇所
・コメントの内容に準じたコメントフォームを利用しましょう!
※報告を扇動したり異なるフォームへの投稿が散見した場合、coや規制対応することがあります
・現在、異なる板へのガチャ報告に利用者が定型文で誘導を行えるようルール改定するか議論中です。
時間がありましたら賛成/反対だけで構わないのでレスの協力お願いします
閉じる