OSDN Git Service

File.Moveがエラーになることがあるのを直す
[kancollesniffer/KancolleSniffer.git] / LogViewer / tags.html
index 6bb1c0b..da6c994 100644 (file)
@@ -1,3 +1,6 @@
+<dummy>
+</dummy>
+
 <main-tab>
 <ul class="tab">
     <li each={name, i in mainTabs} class={select: mainTab === i} onclick={parent.changeTab}>{name}</li>
@@ -62,7 +65,7 @@ opts.observable.on("mainTabChanged", function(idx) {
 <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>", // 建造
@@ -116,7 +119,7 @@ this.init = function() {
             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 });
@@ -276,6 +279,17 @@ opts.observable.on("chartSizeChanged", function() {
         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;
@@ -295,10 +309,9 @@ this.drawChart = function(data) {
         });
         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);
 };
 
@@ -359,12 +372,14 @@ this.drawSeqChart = function(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) {
@@ -462,6 +477,17 @@ opts.observable.on("chartSizeChanged", function() {
         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;
@@ -481,10 +507,9 @@ this.drawChart = function(data) {
         });
         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);
 };
 
@@ -546,12 +571,14 @@ this.drawDiffChart = function(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) {
@@ -610,19 +637,21 @@ 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;
@@ -643,8 +672,10 @@ this.pickMonthlyChartData = function(data) {
     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');
@@ -652,7 +683,7 @@ this.pickMonthlyChartData = function(data) {
             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++)
@@ -664,6 +695,14 @@ this.pickMonthlyChartData = function(data) {
             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>
@@ -671,6 +710,7 @@ this.pickMonthlyChartData = function(data) {
 
 <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>
 
@@ -684,6 +724,23 @@ opts.observable.on("mainTabChanged", function(idx) {
         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)
@@ -732,20 +789,19 @@ var self = this;
 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) {
@@ -795,13 +851,15 @@ 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;
@@ -858,7 +916,7 @@ this.calcChartData = function() {
 };
 
 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
@@ -891,13 +949,13 @@ this.showChart = function(month) {
     });
 };
 
-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
@@ -914,10 +972,18 @@ this.show = function(data) {
         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>
@@ -1050,8 +1116,17 @@ this.loadData = function() {
             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,