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);
64 var url = jsons[selectedTable] + query;
65 $('#log' + selectedTable).DataTable().ajax.url(url).load();
70 for (var t = 0; t < 6; t++) {
77 lengthMenu: [[50, 100, 200, -1],[50, 100, 200, "All"]],
78 drawCallback: function () {
83 opts.columns = [{data: 0}, {data: 1}, {data: 2}, {data: 3}, {data: 4}, {data: 9}, {data: 10}];
86 for (i = 0; i < 35; i++) {
87 if (i == 9 || i == 10)
89 entries.push({data: i})
91 opts.columns = entries;
93 $('#log' + t).dataTable(opts);
97 const timeFormat = "YYYY-MM-DD HH:mm:ss";
100 return moment(d, timeFormat);
105 return d.format(timeFormat);
108 function pickChartData(data, range)
113 var last = moment(data[data.length - 1][0]).valueOf();
114 var first, interval, tickInterval;
115 const oneDay = 3600 * 24 * 1000;
118 first = moment(last).subtract(24, 'hours').valueOf();
120 tickInterval = 3600 * 1000;
121 last -= last % tickInterval;
124 first = moment(last).subtract(7, 'days').valueOf();
126 tickInterval = oneDay;
127 last -= last % tickInterval + 3600 * 4000;
130 first = moment(last).subtract(1, 'months').valueOf();
131 last = moment(last).day(1).valueOf();
132 interval = 3600 * 2000;
133 tickInterval = oneDay * 7;
134 last -= last % oneDay + 3600 * 4000;
137 first = moment(data[0][0]).valueOf();
138 last = moment(last).day(1).valueOf();
139 interval = 3600 * 6000;
140 tickInterval = oneDay * 7;
141 last -= last % oneDay + 3600 * 4000;
144 for (var tick = last; tick > first; tick -= tickInterval)
146 var str = toString(moment(tick));
148 grid.unshift({value: str});
151 for (var i = data.length - 1; i >= 0; i--) {
153 var date = parseDate(row[0]).valueOf();
155 var v = date - date % interval;
156 if (last_data != v) {
157 newdata.unshift(row);
164 return { data: newdata, tick: ticks, grid: grid };
167 var selectedTable = 0;
168 var selectedRange = 0;
170 function drawChart(data)
173 $('#loading').show();
174 $.get("./資材ログ.json?time=" + Date.now(), function (data) { drawChart(data);}, "json");
177 picked = pickChartData(data.data, selectedRange);
178 var header = ["日付","燃料","弾薬","鋼材","ボーキ","高速建造材","高速修復材","開発資材","改修資材"];
179 picked.data.unshift(header);
180 var chart = c3.generate({
188 xFormat: '%Y-%m-%d %X',
205 show: $('#tooltip').prop('checked')
217 format: function (x) { return moment(x).format("MM-DD HH:mm"); },
226 onrendered: function () { $('#loading').hide(); }
230 function setSortieStat(data) {
232 $('#loading').show();
233 var from = moment().subtract(1, 'months').valueOf();
234 $.get("./海戦・ドロップ報告書.json?time=" + Date.now() + "&from=" + from, function (data) { setSortieStat(data.data);}, "json");
243 r.day.begin = moment(now).hour(5).minute(0);
244 if (now.hour() < 5) {
245 r.day.begin.subtract(1, 'days');
247 r.week.begin = moment(now).day(1).hour(5).minute(0);
248 if (now.day() == 1 && now.hour() < 5) {
249 r.week.begin.subtract(1, 'weeks');
251 r.month.begin = moment(now).date(1).hour(5).minute(0);
252 if (now.date() == 1 && now.hours() < 5) {
253 r.month.begin.subtract(1, 'months');
255 for (var i = 0; i < data.length; i++) {
257 var date = moment(row[0]);
259 var isBoss = row[3] == "ボス";
260 var isStart = row[3] == "出撃";
264 for (var term in r) {
266 if (to.begin.isAfter(date))
268 for (var b = 0; b < 2; b++) {
273 name = map + " - ボス";
275 var mo = to.stat[name];
277 mo = to.stat[name] = {start:"-", S:0, A:0, B:0, C:0, D:0};
279 if (b == 0 && isStart)
290 for (map in r[term].stat)
292 var e = r[term].stat[map];
296 var dt = $("#sortie_stat_" + term).DataTable();
298 dt.rows.add(table).draw();
300 $('#loading').hide();
303 function initSortieStat()
305 var terms = ['day', 'week', 'month'];
306 for (var i = 0; i < terms.length; i++) {
307 $("#sortie_stat_" + terms[i]).dataTable({
324 function selectTopTab(i)
338 var tab = $('.tab0 li');
339 tab.removeClass('select');
340 tab.eq(i).addClass('select');
341 $('.contents .hide').hide();
342 $('.contents .hide').eq(i).show();
346 $.fn.dataTable.ext.errMode = 'throw';
347 $('.tab0 li').click(function() {
348 var tab = $('.tab0 li');
349 var i = tab.index(this)
351 sessionStorage.setItem('prevTab', i);
353 $('.tab1 li').click(function() {
354 var tab = $('.tab1 li');
355 var i = tab.index(this);
358 tab.removeClass('select');
359 tab.eq(i).addClass('select');
360 sessionStorage.setItem('prevRange', i);
362 $('#tooltip').change(function() {
365 $('table').addClass('display compact cell-border');
368 var range = sessionStorage.getItem('prevRange');
369 selectedRange = range == null ? 0 : +range;
370 $('.tab1 li').eq(range).addClass('select');
371 $('#term_from').datepicker({
372 defaultDate: moment().subtract(1, 'months').toDate()
374 $('#term_to').datepicker();
375 $('#term_apply').click(showLog);
376 var prev = sessionStorage.getItem('prevTab');
377 selectTopTab(prev == null ? 0 : +prev);
381 <div id="loading"><img src="http://kancollesniffer.osdn.jp/ajax-loader.gif" alt="読み込み中..."></div>
383 <ul class="tab tab0">
396 <label><input type="radio" name="term" value="0" checked="checked">直近一か月</label>
397 <label><input type="radio" name="term" value="1">指定の期間: </label>
398 <input type="text" id="term_from" style="width: 8em">~<input type="text" id="term_to" style="width: 8em">
399 <input type="button" id="term_apply" value="適用">
403 <ul class="contents">
407 <tr><th>日付</th><th>海域</th><th>マス</th><th>ボス</th><th>ランク</th><th>ドロップ艦種</th><th>ドロップ艦娘</th></tr>
414 <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>
421 <tr><th>日付</th><th>結果</th><th>遠征</th><th>燃料</th><th>弾薬</th><th>鋼材</th><th>ボーキ</th><th>開発資材</th><th>高速修復材</th><th>高速建造材</th></tr>
428 <tr><th>日付</th><th>開発装備</th><th>種別</th><th>燃料</th><th>弾薬</th><th>鋼材</th><th>ボーキ</th><th>秘書艦</th><th>司令部Lv</th></tr>
435 <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>
442 <tr><th>日付</th><th>燃料</th><th>弾薬</th><th>鋼材</th><th>ボーキ</th><th>高速建造材</th><th>高速修復材</th><th>開発資材</th><th>改修資材</th></tr>
447 <ul class="tab tab1" style="float: left">
453 <label><input type="checkbox" id="tooltip" value="">ツールチップ</label>
454 <div id="chart" style="clear: both; width: 800px; margin: 1em;"></div>
458 <table id="sortie_stat_day">
460 <tr><th>マップ</th><th>出撃</th><th>S</th><th>A</th><th>B</th><th>C</th><th>D以下</th></tr>
465 <table id="sortie_stat_week">
467 <tr><th>マップ</th><th>出撃</th><th>S</th><th>A</th><th>B</th><th>C</th><th>D以下</th></tr>
471 <table id="sortie_stat_month">
473 <tr><th>マップ</th><th>出撃</th><th>S</th><th>A</th><th>B</th><th>C</th><th>D以下</th></tr>