+<dummy>
+</dummy>
+
<main-tab>
<ul class="tab">
<li each={name, i in mainTabs} class={select: mainTab === i} onclick={parent.changeTab}>{name}</li>
<script>
this.tables = [
"<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>敵艦隊</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><th>味方制空値</th><th>敵制空値</th><th>制空状態</th>", // 海戦
+"<th>日付</th><th style=\"min-width: 3.2em;\">海域</th><th>マス</th><th>ボス</th><th>ランク</th><th>艦隊行動</th><th>味方陣形</th><th>敵陣形</th><th style=\"min-width: 3.2em;\">敵艦隊</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>大破艦</ht><th style=\"min-width: 2.2em;\">敵艦1</th><th>敵艦1HP</th><th style=\"min-width: 2.2em;\">敵艦2</th><th>敵艦2HP</th><th style=\"min-width: 2.2em;\">敵艦3</th><th>敵艦3HP</th><th style=\"min-width: 2.2em;\">敵艦4</th><th>敵艦4HP</th><th style=\"min-width: 2.2em;\">敵艦5</th><th>敵艦5HP</th><th style=\"min-width: 2.2em;\">敵艦6</th><th>敵艦6HP</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>開発装備</th><th>種別</th><th>燃料</th><th>弾薬</th><th>鋼材</th><th>ボーキ</th><th>秘書艦</th><th>司令部Lv</th>", // 開発
"<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>", // 建造
opts.columns = [{ data: 0 }, { data: 1 }, { data: 2 }, { data: 3 }, { data: 4 }, { data: 9 }, { data: 10 }];
} else if (t === 1) {
var entries = [];
- for (var i = 0; i < 38; i++) {
+ for (var i = 0; i < 39; i++) {
if (i === 9 || i === 10)
continue;
entries.push({ data: i });
self.resize();
});
+this.header = ["日付", "燃料", "弾薬", "鋼材", "ボーキ", "高速建造材", "高速修復材", "開発資材", "改修資材"];
+
+opts.observable.on("offAllLegends", function() {
+ if (opts.chartSpec.type !== 0)
+ return;
+ self.chart.hide();
+ self.header.slice(1).forEach(function(c) {
+ self.unselected[c] = true;
+ });
+});
+
this.resize = function() {
if (!self.chart)
return;
});
return;
}
- var picked, header;
+ var picked;
picked = this.pickChartData(data.data, opts.chartSpec.seqRange);
- header = ["日付", "燃料", "弾薬", "鋼材", "ボーキ", "高速建造材", "高速修復材", "開発資材", "改修資材"];
- picked.data.unshift(header);
+ picked.data.unshift(self.header);
this.drawSeqChart(picked);
};
}
}
},
- onrendered: function() { $('#loading').hide(); }
+ onrendered: function() {
+ $('#loading').hide();
+ opts.observable.trigger("chartRendered");
+ }
});
- for (var id in self.unselected) {
- if (self.unselected.hasOwnProperty(id) && self.unselected[id])
- self.chart.toggle(id);
- }
+ self.chart.hide(Object.keys(self.unselected).filter(function(e) {
+ return self.unselected[e];
+ }));
};
this.pickChartData = function(data, range) {
self.resize();
});
+this.header = ["日付", "燃料", "弾薬", "鋼材", "ボーキ"];
+
+opts.observable.on("offAllLegends", function() {
+ if (opts.chartSpec.type !== 1)
+ return;
+ self.chart.hide();
+ self.header.slice(1).forEach(function(c) {
+ self.unselected[c] = true;
+ });
+});
+
this.resize = function() {
if (!self.chart)
return;
});
return;
}
- var picked, header;
+ var picked;
picked = this.pickChartData(data.data, opts.chartSpec.diffRange);
- header = ["日付", "燃料", "弾薬", "鋼材", "ボーキ"];
- picked.data.unshift(header);
+ picked.data.unshift(self.header);
this.drawDiffChart(picked);
};
}
}
},
- onrendered: function() { $('#loading').hide(); }
+ onrendered: function() {
+ $('#loading').hide();
+ opts.observable.trigger("chartRendered");
+ }
});
- for (var id in self.unselected) {
- if (self.unselected.hasOwnProperty(id) && self.unselected[id])
- self.chart.toggle(id);
- }
+ self.chart.hide(Object.keys(self.unselected).filter(function(e) {
+ return self.unselected[e];
+ }));
};
this.pickChartData = function(data, range) {
for (var i = data.length - 1; i >= 0; i--) {
var row = data[i];
var date = row[0];
- if (date > first && date <= last) {
- if (!prevRow) {
- prevRow = row;
- continue;
- }
- if (date <= lastDate) {
- var newrow = [lastDate];
- for (var r = 1; r < 5; r++) {
- newrow.push(prevRow[r] - row[r]);
+ if (date > first) {
+ if (date <= last) {
+ if (!prevRow) {
+ prevRow = row;
+ continue;
+ }
+ if (date <= lastDate) {
+ var newrow = [lastDate];
+ for (var r = 1; r < 5; r++) {
+ newrow.push(prevRow[r] - row[r]);
+ }
+ newdata.unshift(newrow);
+ lastDate = lastDate - interval;
+ prevRow = row;
}
- newdata.unshift(newrow);
- lastDate = lastDate - interval;
- prevRow = row;
}
} else {
break;
var grid = [];
var prevRow;
var prevMonth;
+ var row;
+ var date;
for (var i = data.length - 1; i >= 0; i--) {
- var row = data[i];
+ row = data[i];
if (!prevRow) {
prevRow = row;
var eom = moment(row[0]).endOf('month');
prevMonth = eom.month();
continue;
}
- var date = new Date(row[0]);
+ date = new Date(row[0]);
if (prevMonth !== date.getMonth()) {
var newrow = [prevRow[0]];
for (var r = 1; r < 5; r++)
prevMonth = date.getMonth();
}
}
+ if (prevRow && date !== prevRow[0]) {
+ newrow = [prevRow[0]];
+ for (r = 1; r < 5; r++)
+ newrow.push(prevRow[r] - row[r]);
+ newdata.unshift(newrow);
+ ticks.unshift(prevRow[0]);
+ grid.unshift({ value: prevRow[0] });
+ }
return { monthly: true, data: newdata, tick: ticks, grid: grid, width: 0.5 };
};
</script>
<material-chart>
<div show={mainTabs[mainTab] === "資材グラフ"}>
+<span class="c3-legend-item" id="off-all-legends" style="text-decoration: underline; cursor: pointer; z-index: 10; position: absolute; display: none;" onclick={offAllLegends} >全解除</span>
<div id="chart" style="clear: both; margin: 1em;"></div>
</div>
opts.observable.trigger("chartSpecChanged");
});
+opts.observable.on("chartRendered", function() {
+ var legend, offset;
+ if (opts.chartSpec.type === 0) {
+ legend = $(".c3-legend-item-改修資材>text").offset();
+ offset = 80;
+ } else {
+ legend = $(".c3-legend-item-ボーキ>text").offset();
+ offset = 60;
+ }
+ if (legend)
+ $("#off-all-legends").offset({top: legend.top, left: legend.left + offset}).show();
+});
+
+this.offAllLegends = function() {
+ opts.observable.trigger("offAllLegends");
+};
+
this.timer = null;
$(window).resize(function() {
if (self.timer)
opts.observable.on("mainTabChanged", function(idx) {
self.update({mainTab: idx});
if (self.mainTabs[self.mainTab] === "戦果")
- self.show();
+ self.updateData();
});
this.months = [];
+this.selectedIndex = 0;
this.monthChange = function(event) {
- if (event.target.selectedIndex === 0) {
- self.show();
+ this.selectedIndex = event.target.selectedIndex;
+ if (this.selectedIndex === 0) {
+ this.updateData();
return;
}
- var dt = $('#achivement_table').DataTable();
- dt.clear();
- dt.rows.add(this.result[event.target.value]).draw();
- this.showChart(event.target.value);
+ this.show();
};
this.calcResult = function(data) {
if (isNewYear) {
endOfYear = date.clone().endOf('year').hour(22).startOf('hour');
if (endOfYear.isSameOrBefore(date))
- endOfYear.add(1, 'year').endOf('year');
+ endOfYear.add(1, 'year');
yearExp = lastExp === -1 ? exp : lastExp;
+ monthEo = 0;
}
if (isNewMonth) {
- endOfMonth = date.clone().endOf('month').hour(22).startOf('hour');
- if (endOfMonth.isSameOrBefore(date))
- endOfMonth.add(1, 'month').endOf('month');
+ endOfMonth = date.clone().endOf('month');
+ if (date.date() === endOfMonth.date())
+ endOfMonth.add(1, 'months').endOf('month');
+ endOfMonth.hour(22).startOf('hour');
monthExp = lastExp === -1 ? exp : lastExp;
carryOverEo = monthEo * expPerAch / 50000;
carryOverAch = (monthExp - yearExp) / 50000;
};
this.chartSize = function() {
- var width = Math.max($(document).width() - 6 * this.pxPerEm, 800);
+ var width = Math.max($(window).width() - 6 * this.pxPerEm, 800);
return {
height: width * 0.4,
width: width
});
};
-this.show = function(data) {
+this.updateData = function(data) {
if (!data) {
$('#loading').show();
$.ajax({
url: "./戦果.json",
success: function(data) {
- self.show(data.data);
+ self.updateData(data.data);
},
dataType: 'json',
cache: false
return -1;
});
this.update();
+ this.show();
+};
+
+this.show = function() {
+ if (this.result === undefined){
+ this.updateData();
+ return;
+ }
var dt = $('#achivement_table').DataTable();
dt.clear();
- dt.rows.add(this.result[this.months[0]]).draw();
- this.showChart(this.months[0]);
+ dt.rows.add(this.result[this.months[this.selectedIndex]]).draw();
+ this.showChart(this.months[this.selectedIndex]);
};
</script>
</achivement-table>
this.show([]);
return;
}
- from = fromDate.valueOf();
- to = toDate.valueOf() + this.oneDay;
+ from = moment(fromDate);
+ if (from.date() === 1)
+ from.subtract(2, 'hours');
+ from = from.valueOf();
+ to = moment(toDate);
+ if (to.date() === to.clone().endOf('month').date()) {
+ to.hour(22);
+ } else {
+ to.endOf('day');
+ }
+ to = to.valueOf();
}
$.ajax({
url: "./海戦・ドロップ報告書.json?from=" + from + "&to=" + to,