5 <title>各種報告書 - KancolleSniffer</title>
7 <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
8 <script src="//cdnjs.cloudflare.com/ajax/libs/datatables/1.10.7/js/jquery.dataTables.min.js"></script>
9 <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/datatables/1.10.7/css/jquery.dataTables.min.css">
10 <script src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.3/d3.min.js"></script>
11 <script src="//cdnjs.cloudflare.com/ajax/libs/c3/0.4.10/c3.min.js"></script>
12 <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/c3/0.4.10/c3.min.css">
13 <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.min.js"></script>
14 <script src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
15 <link rel="stylesheet" type="text/css" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
16 <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/i18n/datepicker-ja.min.js"></script>
19 font-family:'Lucida Grande','Hiragino Kaku Gothic ProN', Meiryo, sans-serif;
23 .tab {overflow: hidden; list-style-type: none; margin: 0em 2em 2em 1em; padding: 0em;}
24 .tab li {background: #eee; padding: 0.3em 2.0em; float: left; margin-right: 2px;}
25 .tab li.select {background: #ccc;}
26 .contents {list-style-type: none; margin: 0em; padding: 0em;}
27 .hide {display: none;}
46 var query = "?from=" + moment().subtract(1, 'months').valueOf();
47 if ($('input[name=term]:eq(1)').prop('checked')) {
48 from = $('#term_from').datepicker("getDate");
49 to = $('#term_to').datepicker("getDate");
51 query = "?from=" + from.valueOf();
53 query += "&to=" + (to.valueOf() + 3600 * 24 * 1000);
65 var url = jsons[selectedTable] + query;
66 $('#log' + selectedTable).DataTable().ajax.url(url).load();
73 for (var t = 0; t < tables; t++) {
80 lengthMenu: [[50, 100, 200, -1],[50, 100, 200, "All"]],
81 drawCallback: function () {
86 opts.columns = [{data: 0}, {data: 1}, {data: 2}, {data: 3}, {data: 4}, {data: 9}, {data: 10}];
89 for (i = 0; i < 35; i++) {
90 if (i == 9 || i == 10)
92 entries.push({data: i})
94 opts.columns = entries;
96 $('#log' + t).dataTable(opts);
100 const timeFormat = "YYYY-MM-DD HH:mm:ss";
101 function parseDate(d)
103 return moment(d, timeFormat);
108 return d.format(timeFormat);
111 function pickChartData(data, range)
116 var last = moment(data[data.length - 1][0]).valueOf();
117 var first, interval, tickInterval;
118 const oneDay = 3600 * 24 * 1000;
121 first = moment(last).subtract(24, 'hours').valueOf();
123 tickInterval = 3600 * 1000;
124 last -= last % tickInterval;
127 first = moment(last).subtract(7, 'days').valueOf();
129 tickInterval = oneDay;
130 last -= last % tickInterval + 3600 * 4000;
133 first = moment(last).subtract(1, 'months').valueOf();
134 last = moment(last).day(1).valueOf();
135 interval = 3600 * 2000;
136 tickInterval = oneDay * 7;
137 last -= last % oneDay + 3600 * 4000;
140 first = moment(data[0][0]).valueOf();
141 last = moment(last).day(1).valueOf();
142 interval = 3600 * 6000;
143 tickInterval = oneDay * 7;
144 last -= last % oneDay + 3600 * 4000;
147 for (var tick = last; tick > first; tick -= tickInterval)
149 var str = toString(moment(tick));
151 grid.unshift({value: str});
154 for (var i = data.length - 1; i >= 0; i--) {
156 var date = parseDate(row[0]).valueOf();
158 var v = date - date % interval;
159 if (last_data != v) {
160 newdata.unshift(row);
167 return { data: newdata, tick: ticks, grid: grid };
170 var selectedTable = 0;
171 var selectedRange = 0;
173 function drawChart(data)
176 $('#loading').show();
177 $.get("./資材ログ.json?time=" + Date.now(), function (data) { drawChart(data);}, "json");
180 picked = pickChartData(data.data, selectedRange);
181 var header = ["日付","燃料","弾薬","鋼材","ボーキ","高速建造材","高速修復材","開発資材","改修資材"];
182 picked.data.unshift(header);
183 var chart = c3.generate({
191 xFormat: '%Y-%m-%d %X',
208 show: $('#tooltip').prop('checked')
220 format: function (x) { return moment(x).format("MM-DD HH:mm"); },
229 onrendered: function () { $('#loading').hide(); }
233 function setSortieStat(data) {
235 $('#loading').show();
236 var from = moment().subtract(1, 'months').valueOf();
237 $.get("./海戦・ドロップ報告書.json?time=" + Date.now() + "&from=" + from, function (data) { setSortieStat(data.data);}, "json");
245 var initStat = function () { return {start:"-", S:0, A:0, B:0, C:0, D:0} };
247 r.day.begin = moment(now).hour(5).minute(0);
248 if (now.hour() < 5) {
249 r.day.begin.subtract(1, 'days');
251 r.week.begin = moment(now).day(1).hour(5).minute(0);
252 if (now.day() == 0 || now.day() == 1 && now.hour() < 5) {
253 r.week.begin.subtract(1, 'weeks');
255 r.month.begin = moment(now).date(1).hour(5).minute(0);
256 if (now.date() == 1 && now.hours() < 5) {
257 r.month.begin.subtract(1, 'months');
259 for (var i = 0; i < data.length; i++) {
261 var date = moment(row[0]);
263 var isBoss = row[3].indexOf("ボス") != -1;
264 var isStart = row[3].indexOf("出撃") != -1;
268 for (var term in r) {
270 if (to.begin.isAfter(date))
272 for (var b = 0; b < 4; b++) {
273 var name = b < 2 ? "合計" : map;
274 if (b == 1 || b == 3) {
277 name = name + " - ボス";
279 var mo = to.stat[name];
281 mo = to.stat[name] = initStat();
283 to.stat["合計 - ボス"] = initStat();
286 if ((b == 0 || b == 2) && isStart)
297 for (map in r[term].stat)
299 var e = r[term].stat[map];
303 var dt = $("#sortie_stat_" + term).DataTable();
305 dt.rows.add(table).draw();
307 $('#loading').hide();
310 function initSortieStat()
312 var terms = ['day', 'week', 'month'];
313 for (var i = 0; i < terms.length; i++) {
314 $("#sortie_stat_" + terms[i]).dataTable({
331 function selectTopTab(i)
337 } else if (i == chart) {
339 } else if (i == chart + 1) {
346 var tab = $('.tab0 li');
347 tab.removeClass('select');
348 tab.eq(i).addClass('select');
349 $('.contents .hide').hide();
350 $('.contents .hide').eq(i).show();
354 $.fn.dataTable.ext.errMode = 'throw';
355 $('.tab0 li').click(function() {
356 var tab = $('.tab0 li');
357 var i = tab.index(this)
359 sessionStorage.setItem('prevTab', i);
361 $('.tab1 li').click(function() {
362 var tab = $('.tab1 li');
363 var i = tab.index(this);
366 tab.removeClass('select');
367 tab.eq(i).addClass('select');
368 sessionStorage.setItem('prevRange', i);
370 $('#tooltip').change(function() {
373 $('table').addClass('display compact cell-border');
376 var range = sessionStorage.getItem('prevRange');
377 selectedRange = range == null ? 0 : +range;
378 $('.tab1 li').eq(range).addClass('select');
379 $('#term_from').datepicker({
380 defaultDate: moment().subtract(1, 'months').toDate()
382 $('#term_to').datepicker();
383 $('#term_apply').click(showLog);
384 var prev = sessionStorage.getItem('prevTab');
385 selectTopTab(prev == null ? 0 : +prev);
389 <div id="loading"><img src="http://kancollesniffer.osdn.jp/ajax-loader.gif" alt="読み込み中..."></div>
391 <ul class="tab tab0">
405 <label><input type="radio" name="term" value="0" checked="checked">直近一か月</label>
406 <label><input type="radio" name="term" value="1">指定の期間: </label>
407 <input type="text" id="term_from" style="width: 8em">~<input type="text" id="term_to" style="width: 8em">
408 <input type="button" id="term_apply" value="適用">
412 <ul class="contents">
416 <tr><th>日付</th><th>海域</th><th>マス</th><th>ボス</th><th>ランク</th><th>ドロップ艦種</th><th>ドロップ艦娘</th></tr>
423 <tr><th>日付</th><th>海域</th><th>マス</th><th>ボス</th><th>ランク</th><th>艦隊行動</th><th>味方陣形</th><th>敵陣形</th><th>敵艦隊</th><th>味方艦1</th><th>味方艦1HP</th><th>味方艦2</th><th>味方艦2HP</th><th>味方艦3</th><th>味方艦3HP</th><th>味方艦4</th><th>味方艦4HP</th><th>味方艦5</th><th>味方艦5HP</th><th>味方艦6</th><th>味方艦6HP</th><th>敵艦1</th><th>敵艦1HP</th><th>敵艦2</th><th>敵艦2HP</th><th>敵艦3</th><th>敵艦3HP</th><th>敵艦4</th><th>敵艦4HP</th><th>敵艦5</th><th>敵艦5HP</th><th>敵艦6</th><th>敵艦6HP</th></tr>
430 <tr><th>日付</th><th>結果</th><th>遠征</th><th>燃料</th><th>弾薬</th><th>鋼材</th><th>ボーキ</th><th>開発資材</th><th>高速修復材</th><th>高速建造材</th></tr>
437 <tr><th>日付</th><th>開発装備</th><th>種別</th><th>燃料</th><th>弾薬</th><th>鋼材</th><th>ボーキ</th><th>秘書艦</th><th>司令部Lv</th></tr>
444 <tr><th>日付</th><th>種類</th><th>名前</th><th>艦種</th><th>燃料</th><th>弾薬</th><th>鋼材</th><th>ボーキ</th><th>開発資材</th><th>空きドック</th><th>秘書艦</th><th>司令部Lv</th></tr>
451 <tr><th>日付</th><th>改修装備</th><th>レベル</th><th>成功</th><th>確実化</th><th>消費装備</th><th>消費数</th><th>燃料</th><th>弾薬</th><th>鋼材</th><th>ボーキ</th><th>開発資材</th><th>改修資材</th><th>秘書艦</th><th>二番艦</th></tr>
458 <tr><th>日付</th><th>燃料</th><th>弾薬</th><th>鋼材</th><th>ボーキ</th><th>高速建造材</th><th>高速修復材</th><th>開発資材</th><th>改修資材</th></tr>
463 <ul class="tab tab1" style="float: left">
469 <label><input type="checkbox" id="tooltip" value="">ツールチップ</label>
470 <div id="chart" style="clear: both; width: 800px; margin: 1em;"></div>
474 <table id="sortie_stat_day">
476 <tr><th>マップ</th><th>出撃</th><th>S</th><th>A</th><th>B</th><th>C</th><th>D以下</th></tr>
481 <table id="sortie_stat_week">
483 <tr><th>マップ</th><th>出撃</th><th>S</th><th>A</th><th>B</th><th>C</th><th>D以下</th></tr>
487 <table id="sortie_stat_month">
489 <tr><th>マップ</th><th>出撃</th><th>S</th><th>A</th><th>B</th><th>C</th><th>D以下</th></tr>