「javascript/skilllist」の編集履歴(バックアップ)一覧はこちら

javascript/skilllist」(2021/03/04 (木) 13:42:59) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

#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 === '<' ? '&lt;' : '&gt;'; }).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('<', '&lt;').replace('>', '&gt;') + '</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 === '<' ? '&lt;' : '&gt;'; }).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('<', '&lt;').replace('>', '&gt;') + '</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 === '<' ? '&lt;' : '&gt;'; }).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('<', '&lt;').replace('>', '&gt;') + '</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 === '<' ? '&lt;' : '&gt;'; }).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('<', '&lt;').replace('>', '&gt;') + '</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> }}}}}

表示オプション

横に並べて表示:
変化行の前後のみ表示: