poi-plugin-milk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["countup-timer.es"],"names":["CountupTimer","constructor","props","state","startTime","componentDidMount","startTick","componentWillReceiveProps","nextProps","countdownId","stopTick","setState","timeElapsed","getTimeElapsed","shouldComponentUpdate","nextState","componentDidUpdate","componentWillUnmount","window","ticker","reg","tick","unreg","currentTime","textLabel","textContent","tickCallback","startCallback","error","console","stack","render","ref","propTypes","string","isRequired","number","func","Date","now","Math","round","defaultProps"],"mappings":";;;;;;AAEA;;;;AACA;;;;AAEA;;;;AAGe,MAAMA,YAAN,0BAAqC;AAoBlDC,cAAYC,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AADiB,SAInBC,KAJmB,GAIX;AACNC,iBAAW,KAAKF,KAAL,CAAWE;AADhB,KAJW;;AAAA,SAOnBC,iBAPmB,GAOC,MAAM;AACxB,WAAKC,SAAL;AACD,KATkB;;AAAA,SAUnBC,yBAVmB,GAUUC,SAAD,IAAe;AACzC,UAAIA,UAAUC,WAAV,KAA0B,KAAKP,KAAL,CAAWO,WAAzC,EAAsD;AACpD,aAAKC,QAAL;AACD;AACD,UAAIF,UAAUJ,SAAV,KAAwB,KAAKD,KAAL,CAAWC,SAAvC,EAAkD;AAChD,aAAKO,QAAL,CAAc,EAAEP,WAAWI,UAAUJ,SAAvB,EAAd;AACA,aAAKQ,WAAL,GAAmB,KAAKX,WAAL,CAAiBY,cAAjB,CAAgCL,UAAUJ,SAA1C,CAAnB;AACD;AACF,KAlBkB;;AAAA,SAmBnBU,qBAnBmB,GAmBK,CAACN,SAAD,EAAYO,SAAZ,KACtBP,UAAUC,WAAV,KAA0B,KAAKP,KAAL,CAAWO,WAArC,IAAoDM,UAAUX,SAAV,KAAwB,KAAKD,KAAL,CAAWC,SApBtE;;AAAA,SAqBnBY,kBArBmB,GAqBE,MAAM;AACzB,WAAKV,SAAL,CAAiB;AAAjB;AACD,KAvBkB;;AAAA,SAwBnBW,oBAxBmB,GAwBI,MAAM;AAC3B,WAAKP,QAAL;AACD,KA1BkB;;AAAA,SA2BnBJ,SA3BmB,GA2BP,MAAM;AAChBY,aAAOC,MAAP,CAAcC,GAAd,CAAkB,KAAKlB,KAAL,CAAWO,WAA7B,EAA0C,KAAKY,IAA/C;AACD,KA7BkB;;AAAA,SA8BnBX,QA9BmB,GA8BR,MAAM;AACfQ,aAAOC,MAAP,CAAcG,KAAd,CAAoB,KAAKpB,KAAL,CAAWO,WAA/B;AACD,KAhCkB;;AAAA,SAiCnBY,IAjCmB,GAiCXE,WAAD,IAAiB;AACtB;AACA;AACA;AACA;AACA,WAAKX,WAAL,GAAmB,KAAKX,WAAL,CAAiBY,cAAjB,CAAgC,KAAKV,KAAL,CAAWC,SAA3C,EAAsDmB,WAAtD,CAAnB;AACA,UAAI,KAAKX,WAAL,GAAmB,CAAvB,EAA0B;AACxB,aAAKF,QAAL;AACD;AACD,UAAI,KAAKP,KAAL,CAAWC,SAAX,IAAwB,CAA5B,EAA+B;AAC7B,YAAI;AACF,cAAI,KAAKoB,SAAT,EAAoB;AAClB,iBAAKA,SAAL,CAAeC,WAAf,GAA6B,wBAAY,KAAKb,WAAjB,KAAiC,wBAAY,CAAZ,CAA9D;AACD;AACD,cAAI,KAAKV,KAAL,CAAWwB,YAAf,EAA6B;AAC3B,iBAAKxB,KAAL,CAAWwB,YAAX,CAAwB,KAAKd,WAA7B;AACD;AACD,cAAI,KAAKA,WAAL,GAAmB,CAAnB,IAAwB,KAAKV,KAAL,CAAWyB,aAAvC,EAAsD;AACpD,iBAAKzB,KAAL,CAAWyB,aAAX;AACD;AACF,SAVD,CAUE,OAAOC,KAAP,EAAc;AACdC,kBAAQD,KAAR,CAAcA,MAAME,KAApB;AACD;AACF;AACD,WAAKlB,WAAL,IAAoB,CAApB;AACD,KA1DkB;;AAEjB,SAAKA,WAAL,GAAmB,KAAKX,WAAL,CAAiBY,cAAjB,CAAgC,KAAKX,KAAL,CAAWE,SAA3C,CAAnB;AACD;;AAwDD2B,WAAS;AACP,WAAO;AAAA;AAAA,QAAM,KAAMC,GAAD,IAAS;AAAE,eAAKR,SAAL,GAAiBQ,GAAjB;AAAsB,SAA5C;AAA+C,8BAAY,KAAKpB,WAAjB;AAA/C,KAAP;AACD;AAjFiD;kBAA/BZ,Y,EARrB;;AAQqBA,Y,CACZiC,S,GAAY;AACjBxB,eAAa,oBAAUyB,MAAV,CAAiBC,UADb,EACyB;AAC1C/B,aAAW,oBAAUgC,MAFJ,EAEY;AAC7BV,gBAAc,oBAAUW,IAHP,EAGa;AAC9BV,iBAAe,oBAAUU,IAJR,CAIc;AAJd,C;;AADArC,Y,CAOZa,c,GAAiB,CAACT,SAAD,EAAYmB,cAAce,KAAKC,GAAL,EAA1B,KAAyC;AAC/D,MAAInC,aAAa,CAAjB,EAAoB;AAClB,WAAO,CAAC,CAAR;AACD,GAFD,MAEO,IAAIA,YAAYmB,WAAhB,EAA6B;AAClC,WAAO,CAAP;AACD;AACD,SAAOiB,KAAKC,KAAL,CAAW,CAAClB,cAAcnB,SAAf,IAA4B,IAAvC,CAAP;AACD,C;;AAdkBJ,Y,CAeZ0C,Y,GAAe;AACpBtC,aAAW,CAAC,CADQ;AAEpBsB,gBAAc,IAFM;AAGpBC,iBAAe;AAHK,C","file":"countup-timer.es","sourcesContent":["// similar to CountdownTimer in 'views/components/main/parts/countdown-timer.es', but it counts up\n\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { resolveTime } from 'views/utils/tools'\n\n\nexport default class CountupTimer extends Component {\n static propTypes = {\n countdownId: PropTypes.string.isRequired, // UNIQUE ID to register to window.ticker\n startTime: PropTypes.number, // startTime in ms\n tickCallback: PropTypes.func, // callback function for each second\n startCallback: PropTypes.func, // callback function when starting to count up\n }\n static getTimeElapsed = (startTime, currentTime = Date.now()) => {\n if (startTime <= 0) {\n return -1\n } else if (startTime > currentTime) {\n return 0\n }\n return Math.round((currentTime - startTime) / 1000)\n }\n static defaultProps = {\n startTime: -1,\n tickCallback: null,\n startCallback: null,\n }\n constructor(props) {\n super(props)\n this.timeElapsed = this.constructor.getTimeElapsed(this.props.startTime)\n }\n state = {\n startTime: this.props.startTime,\n }\n componentDidMount = () => {\n this.startTick()\n }\n componentWillReceiveProps = (nextProps) => {\n if (nextProps.countdownId !== this.props.countdownId) {\n this.stopTick()\n }\n if (nextProps.startTime !== this.state.startTime) {\n this.setState({ startTime: nextProps.startTime })\n this.timeElapsed = this.constructor.getTimeElapsed(nextProps.startTime)\n }\n }\n shouldComponentUpdate = (nextProps, nextState) =>\n nextProps.countdownId !== this.props.countdownId || nextState.startTime !== this.state.startTime\n componentDidUpdate = () => {\n this.startTick() // Doesn't matter if it didn't stop\n }\n componentWillUnmount = () => {\n this.stopTick()\n }\n startTick = () => {\n window.ticker.reg(this.props.countdownId, this.tick)\n }\n stopTick = () => {\n window.ticker.unreg(this.props.countdownId)\n }\n tick = (currentTime) => {\n // const actualElapsed = this.constructor.getTimeElapsed(this.state.startTime, currentTime)\n // if (Math.abs(this.timeElapsed - actualElapsed) > 2) {\n // this.timeElapsed = actualElapsed\n // }\n this.timeElapsed = this.constructor.getTimeElapsed(this.state.startTime, currentTime)\n if (this.timeElapsed < 0) {\n this.stopTick()\n }\n if (this.state.startTime >= 0) {\n try {\n if (this.textLabel) {\n this.textLabel.textContent = resolveTime(this.timeElapsed) || resolveTime(0)\n }\n if (this.props.tickCallback) {\n this.props.tickCallback(this.timeElapsed)\n }\n if (this.timeElapsed < 1 && this.props.startCallback) {\n this.props.startCallback()\n }\n } catch (error) {\n console.error(error.stack)\n }\n }\n this.timeElapsed += 1\n }\n render() {\n return <span ref={(ref) => { this.textLabel = ref }}>{resolveTime(this.timeElapsed)}</span>\n }\n}\n"]}
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ const FACTOR = {
7
+ 1: { api_id: 1, api_name: '海防艦', factor: 0.5 },
8
+ 2: { api_id: 2, api_name: '駆逐艦', factor: 1 },
9
+ 3: { api_id: 3, api_name: '軽巡洋艦', factor: 1 },
10
+ 4: { api_id: 4, api_name: '重雷装巡洋艦', factor: 1 },
11
+ 5: { api_id: 5, api_name: '重巡洋艦', factor: 1.5 },
12
+ 6: { api_id: 6, api_name: '航空巡洋艦', factor: 1.5 },
13
+ 7: { api_id: 7, api_name: '軽空母', factor: 1.5 },
14
+ 8: { api_id: 8, api_name: '戦艦', factor: 1.5 },
15
+ 9: { api_id: 9, api_name: '戦艦', factor: 2 },
16
+ 10: { api_id: 10, api_name: '航空戦艦', factor: 2 },
17
+ 11: { api_id: 11, api_name: '正規空母', factor: 2 },
18
+ 12: { api_id: 12, api_name: '超弩級戦艦', factor: 0 },
19
+ 13: { api_id: 13, api_name: '潜水艦', factor: 0.5 },
20
+ 14: { api_id: 14, api_name: '潜水空母', factor: 1 },
21
+ 15: { api_id: 15, api_name: '補給艦', factor: 1 },
22
+ 16: { api_id: 16, api_name: '水上機母艦', factor: 1 },
23
+ 17: { api_id: 17, api_name: '揚陸艦', factor: 1 },
24
+ 18: { api_id: 18, api_name: '装甲空母', factor: 2 },
25
+ 19: { api_id: 19, api_name: '工作艦', factor: 2 },
26
+ 20: { api_id: 20, api_name: '潜水母艦', factor: 1.5 },
27
+ 21: { api_id: 21, api_name: '練習巡洋艦', factor: 1 },
28
+ 22: { api_id: 22, api_name: '補給艦', factor: 1 }
29
+ };
30
+
31
+ exports.default = FACTOR;
32
+ module.exports = exports['default'];
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["factor.es"],"names":["FACTOR","api_id","api_name","factor"],"mappings":";;;;;AAAA,MAAMA,SAAS;AACb,KAAG,EAAEC,QAAQ,CAAV,EAAaC,UAAU,KAAvB,EAA8BC,QAAQ,GAAtC,EADU;AAEb,KAAG,EAAEF,QAAQ,CAAV,EAAaC,UAAU,KAAvB,EAA8BC,QAAQ,CAAtC,EAFU;AAGb,KAAG,EAAEF,QAAQ,CAAV,EAAaC,UAAU,MAAvB,EAA+BC,QAAQ,CAAvC,EAHU;AAIb,KAAG,EAAEF,QAAQ,CAAV,EAAaC,UAAU,QAAvB,EAAiCC,QAAQ,CAAzC,EAJU;AAKb,KAAG,EAAEF,QAAQ,CAAV,EAAaC,UAAU,MAAvB,EAA+BC,QAAQ,GAAvC,EALU;AAMb,KAAG,EAAEF,QAAQ,CAAV,EAAaC,UAAU,OAAvB,EAAgCC,QAAQ,GAAxC,EANU;AAOb,KAAG,EAAEF,QAAQ,CAAV,EAAaC,UAAU,KAAvB,EAA8BC,QAAQ,GAAtC,EAPU;AAQb,KAAG,EAAEF,QAAQ,CAAV,EAAaC,UAAU,IAAvB,EAA6BC,QAAQ,GAArC,EARU;AASb,KAAG,EAAEF,QAAQ,CAAV,EAAaC,UAAU,IAAvB,EAA6BC,QAAQ,CAArC,EATU;AAUb,MAAI,EAAEF,QAAQ,EAAV,EAAcC,UAAU,MAAxB,EAAgCC,QAAQ,CAAxC,EAVS;AAWb,MAAI,EAAEF,QAAQ,EAAV,EAAcC,UAAU,MAAxB,EAAgCC,QAAQ,CAAxC,EAXS;AAYb,MAAI,EAAEF,QAAQ,EAAV,EAAcC,UAAU,OAAxB,EAAiCC,QAAQ,CAAzC,EAZS;AAab,MAAI,EAAEF,QAAQ,EAAV,EAAcC,UAAU,KAAxB,EAA+BC,QAAQ,GAAvC,EAbS;AAcb,MAAI,EAAEF,QAAQ,EAAV,EAAcC,UAAU,MAAxB,EAAgCC,QAAQ,CAAxC,EAdS;AAeb,MAAI,EAAEF,QAAQ,EAAV,EAAcC,UAAU,KAAxB,EAA+BC,QAAQ,CAAvC,EAfS;AAgBb,MAAI,EAAEF,QAAQ,EAAV,EAAcC,UAAU,OAAxB,EAAiCC,QAAQ,CAAzC,EAhBS;AAiBb,MAAI,EAAEF,QAAQ,EAAV,EAAcC,UAAU,KAAxB,EAA+BC,QAAQ,CAAvC,EAjBS;AAkBb,MAAI,EAAEF,QAAQ,EAAV,EAAcC,UAAU,MAAxB,EAAgCC,QAAQ,CAAxC,EAlBS;AAmBb,MAAI,EAAEF,QAAQ,EAAV,EAAcC,UAAU,KAAxB,EAA+BC,QAAQ,CAAvC,EAnBS;AAoBb,MAAI,EAAEF,QAAQ,EAAV,EAAcC,UAAU,MAAxB,EAAgCC,QAAQ,GAAxC,EApBS;AAqBb,MAAI,EAAEF,QAAQ,EAAV,EAAcC,UAAU,OAAxB,EAAiCC,QAAQ,CAAzC,EArBS;AAsBb,MAAI,EAAEF,QAAQ,EAAV,EAAcC,UAAU,KAAxB,EAA+BC,QAAQ,CAAvC;AAtBS,CAAf;;kBAyBeH,M","file":"factor.es","sourcesContent":["const FACTOR = {\n 1: { api_id: 1, api_name: '海防艦', factor: 0.5 },\n 2: { api_id: 2, api_name: '駆逐艦', factor: 1 },\n 3: { api_id: 3, api_name: '軽巡洋艦', factor: 1 },\n 4: { api_id: 4, api_name: '重雷装巡洋艦', factor: 1 },\n 5: { api_id: 5, api_name: '重巡洋艦', factor: 1.5 },\n 6: { api_id: 6, api_name: '航空巡洋艦', factor: 1.5 },\n 7: { api_id: 7, api_name: '軽空母', factor: 1.5 },\n 8: { api_id: 8, api_name: '戦艦', factor: 1.5 },\n 9: { api_id: 9, api_name: '戦艦', factor: 2 },\n 10: { api_id: 10, api_name: '航空戦艦', factor: 2 },\n 11: { api_id: 11, api_name: '正規空母', factor: 2 },\n 12: { api_id: 12, api_name: '超弩級戦艦', factor: 0 },\n 13: { api_id: 13, api_name: '潜水艦', factor: 0.5 },\n 14: { api_id: 14, api_name: '潜水空母', factor: 1 },\n 15: { api_id: 15, api_name: '補給艦', factor: 1 },\n 16: { api_id: 16, api_name: '水上機母艦', factor: 1 },\n 17: { api_id: 17, api_name: '揚陸艦', factor: 1 },\n 18: { api_id: 18, api_name: '装甲空母', factor: 2 },\n 19: { api_id: 19, api_name: '工作艦', factor: 2 },\n 20: { api_id: 20, api_name: '潜水母艦', factor: 1.5 },\n 21: { api_id: 21, api_name: '練習巡洋艦', factor: 1 },\n 22: { api_id: 22, api_name: '補給艦', factor: 1 },\n}\n\nexport default FACTOR\n"]}
@@ -0,0 +1,324 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ var _react = require('react');
8
+
9
+ var _react2 = _interopRequireDefault(_react);
10
+
11
+ var _propTypes = require('prop-types');
12
+
13
+ var _propTypes2 = _interopRequireDefault(_propTypes);
14
+
15
+ var _lodash = require('lodash');
16
+
17
+ var _lodash2 = _interopRequireDefault(_lodash);
18
+
19
+ var _reactBootstrap = require('react-bootstrap');
20
+
21
+ var _countupTimer = require('./countup-timer');
22
+
23
+ var _countupTimer2 = _interopRequireDefault(_countupTimer);
24
+
25
+ var _functions = require('./functions');
26
+
27
+ var _shipRow = require('./ship-row');
28
+
29
+ var _shipRow2 = _interopRequireDefault(_shipRow);
30
+
31
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
32
+
33
+ const { i18n } = window;
34
+ const __ = i18n['poi-plugin-anchorage-repair'].__.bind(i18n['poi-plugin-anchorage-repair']);
35
+
36
+ class FleetList extends _react.Component {
37
+
38
+ constructor(props) {
39
+ super(props);
40
+
41
+ this.componentDidMount = () => {
42
+ window.addEventListener('game.response', this.handleResponse);
43
+ };
44
+
45
+ this.componentWillUnmount = () => {
46
+ window.removeEventListener('game.response', this.handleResponse);
47
+ };
48
+
49
+ this.handleResponse = e => {
50
+ const { path, postBody } = e.detail;
51
+ const { timeElapsed, lastRefresh } = this.state;
52
+ switch (path) {
53
+ case '/kcsapi/api_port/port':
54
+ if (timeElapsed >= _functions.AKASHI_INTERVAL / 1000 || lastRefresh === 0) {
55
+ this.setState({
56
+ lastRefresh: Date.now(),
57
+ timeElapsed: 0
58
+ });
59
+ }
60
+ break;
61
+
62
+ case '/kcsapi/api_req_hensei/change':
63
+ {
64
+ const fleetId = parseInt(postBody.api_id, 10);
65
+ const shipId = parseInt(postBody.api_ship_id, 10
66
+ // const shipIndex = parseInt(postBody.api_ship_idx)
67
+ );if (!Number.isNaN(fleetId) && fleetId === this.props.fleet.api_id && shipId >= 0) {
68
+ if (timeElapsed < _functions.AKASHI_INTERVAL / 1000) {
69
+ this.setState({
70
+ lastRefresh: Date.now(),
71
+ timeElapsed: 0
72
+ });
73
+ } else if (shipId < 0) {
74
+ // do nothing
75
+ } else {
76
+ this.setState({ // since it has passed more than 20 minutes, need to refresh the hp
77
+ lastRefresh: 0
78
+ });
79
+ }
80
+ }
81
+ break;
82
+ }
83
+ case '/kcsapi/api_req_nyukyo/start':
84
+ {
85
+ const shipId = parseInt(postBody.api_ship_id, 10);
86
+ const infleet = _lodash2.default.filter(this.props.fleet.shipId, id => shipId === id);
87
+ if (postBody.api_highspeed === 1 && infleet != null) {
88
+ this.setState({ lastRefresh: Date.now() });
89
+ }
90
+ break;
91
+ }
92
+ default:
93
+ }
94
+ };
95
+
96
+ this.tick = timeElapsed => {
97
+ if (timeElapsed % 5 === 0) {
98
+ // limit component refresh rate
99
+ this.setState({ timeElapsed });
100
+ }
101
+ };
102
+
103
+ this.resetTimeElapsed = () => {
104
+ this.setState({ timeElapsed: 0 });
105
+ };
106
+
107
+ this.state = {
108
+ lastRefresh: 0,
109
+ timeElapsed: 0
110
+ };
111
+ }
112
+
113
+ render() {
114
+ const { timeElapsed, lastRefresh } = this.state;
115
+ const { fleet } = this.props;
116
+
117
+ var s1 = ''
118
+ //console.log('can repair:'+fleet.canRepair);
119
+ if(fleet.canRepair==0){
120
+ s1 = __('Not ready');
121
+ }else if(fleet.canRepair==1){
122
+ s1 = __('Repairing')
123
+ }else if(fleet.canRepair==2){
124
+ s1 = '正在喂奶';
125
+ }
126
+
127
+ return _react2.default.createElement(
128
+ _reactBootstrap.Grid,
129
+ null,
130
+ _react2.default.createElement(
131
+ _reactBootstrap.Row,
132
+ { className: 'info-row' },
133
+ _react2.default.createElement(
134
+ _reactBootstrap.Col,
135
+ { xs: 4, className: 'info-col' },
136
+ _react2.default.createElement(
137
+ _reactBootstrap.OverlayTrigger,
138
+ {
139
+ placement: 'bottom',
140
+ trigger: fleet.canRepair ? 'click' : ['hover', 'focus'],
141
+ overlay: _react2.default.createElement(
142
+ _reactBootstrap.Tooltip,
143
+ { id: `anchorage-refresh-notify-${fleet.api_id}` },
144
+ _react2.default.createElement(
145
+ 'p',
146
+ null,
147
+ fleet.canRepair ? __('Akashi loves you!') : ''
148
+ ),
149
+ _react2.default.createElement(
150
+ 'p',
151
+ null,
152
+ fleet.akashiFlagship ? '' : __('Akashi not flagship')
153
+ ),
154
+ _react2.default.createElement(
155
+ 'p',
156
+ null,
157
+ fleet.inExpedition ? __('fleet in expedition') : ''
158
+ ),
159
+ _react2.default.createElement(
160
+ 'p',
161
+ null,
162
+ fleet.flagShipInRepair ? __('flagship in dock') : ''
163
+ )
164
+ )
165
+ },
166
+ _react2.default.createElement(
167
+ _reactBootstrap.Label,
168
+ { bsStyle: fleet.canRepair ? 'success' : 'warning' },
169
+ s1
170
+ )
171
+ )
172
+ ),
173
+ _react2.default.createElement(
174
+ _reactBootstrap.Col,
175
+ { xs: 4, className: 'info-col' },
176
+ _react2.default.createElement(
177
+ _reactBootstrap.Label,
178
+ { bsStyle: fleet.canRepair ? 'success' : 'warning' },
179
+ _react2.default.createElement(
180
+ 'span',
181
+ null,
182
+ __('Elapsed:'),
183
+ ' '
184
+ ),
185
+ _react2.default.createElement(_countupTimer2.default, {
186
+ countdownId: `akashi-${fleet.api_id}`,
187
+ startTime: this.state.lastRefresh,
188
+ tickCallback: this.tick,
189
+ startCallback: this.resetTimeElapsed
190
+ })
191
+ )
192
+ ),
193
+ _react2.default.createElement(
194
+ _reactBootstrap.Col,
195
+ { xs: 4, className: 'info-col' },
196
+ _react2.default.createElement(
197
+ _reactBootstrap.Label,
198
+ { bsStyle: fleet.repairCount ? 'success' : 'warning' },
199
+ __('Capacity: %s', fleet.repairCount)
200
+ )
201
+ )
202
+ ),
203
+ _react2.default.createElement(
204
+ _reactBootstrap.Row,
205
+ null,
206
+ _react2.default.createElement(
207
+ _reactBootstrap.Col,
208
+ { xs: 12 },
209
+ _react2.default.createElement(
210
+ _reactBootstrap.Panel,
211
+ { bsStyle: 'warning', className: lastRefresh === 0 ? '' : 'hidden' },
212
+ __('Please return to HQ screen to make timer refreshed.')
213
+ )
214
+ )
215
+ ),
216
+ _react2.default.createElement(
217
+ _reactBootstrap.Row,
218
+ null,
219
+ _react2.default.createElement(
220
+ _reactBootstrap.Col,
221
+ { xs: 12 },
222
+ _react2.default.createElement(
223
+ _reactBootstrap.Table,
224
+ { bordered: true, condensed: true },
225
+ _react2.default.createElement(
226
+ 'thead',
227
+ null,
228
+ _react2.default.createElement(
229
+ 'tr',
230
+ null,
231
+ _react2.default.createElement(
232
+ 'th',
233
+ null,
234
+ __('Ship')
235
+ ),
236
+ _react2.default.createElement(
237
+ 'th',
238
+ null,
239
+ __('HP')
240
+ ),
241
+ _react2.default.createElement(
242
+ 'th',
243
+ null,
244
+ _react2.default.createElement(
245
+ _reactBootstrap.OverlayTrigger,
246
+ {
247
+ placement: 'top',
248
+ overlay: _react2.default.createElement(
249
+ _reactBootstrap.Tooltip,
250
+ { id: 'akashi-time-desc' },
251
+ __('Total time required')
252
+ )
253
+ },
254
+ _react2.default.createElement(
255
+ 'span',
256
+ null,
257
+ __('Akashi Time')
258
+ )
259
+ )
260
+ ),
261
+ _react2.default.createElement(
262
+ 'th',
263
+ null,
264
+ _react2.default.createElement(
265
+ _reactBootstrap.OverlayTrigger,
266
+ {
267
+ placement: 'top',
268
+ overlay: _react2.default.createElement(
269
+ _reactBootstrap.Tooltip,
270
+ { id: 'akashi-time-desc' },
271
+ __('Time required for 1 HP recovery')
272
+ )
273
+ },
274
+ _react2.default.createElement(
275
+ 'span',
276
+ null,
277
+ __('Per HP')
278
+ )
279
+ )
280
+ ),
281
+ _react2.default.createElement(
282
+ 'th',
283
+ null,
284
+ _react2.default.createElement(
285
+ _reactBootstrap.OverlayTrigger,
286
+ {
287
+ placement: 'top',
288
+ overlay: _react2.default.createElement(
289
+ _reactBootstrap.Tooltip,
290
+ { id: 'akashi-time-desc' },
291
+ __('Estimated HP recovery since last refresh')
292
+ )
293
+ },
294
+ _react2.default.createElement(
295
+ 'span',
296
+ null,
297
+ __('Estimated repaired')
298
+ )
299
+ )
300
+ )
301
+ )
302
+ ),
303
+ _react2.default.createElement(
304
+ 'tbody',
305
+ null,
306
+ _lodash2.default.map(fleet.repairDetail, ship => _react2.default.createElement(_shipRow2.default, {
307
+ key: `anchorage-ship-${ship.api_id}`,
308
+ ship: ship,
309
+ lastRefresh: lastRefresh,
310
+ timeElapsed: timeElapsed,
311
+ canRepair: fleet.canRepair
312
+ }))
313
+ )
314
+ )
315
+ )
316
+ )
317
+ );
318
+ }
319
+ }
320
+ exports.default = FleetList;
321
+ FleetList.propTypes = {
322
+ fleet: _propTypes2.default.object.isRequired
323
+ };
324
+ module.exports = exports['default'];
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["fleet-list.es"],"names":["i18n","window","__","bind","FleetList","constructor","props","componentDidMount","addEventListener","handleResponse","componentWillUnmount","removeEventListener","e","path","postBody","detail","timeElapsed","lastRefresh","state","setState","Date","now","fleetId","parseInt","api_id","shipId","api_ship_id","Number","isNaN","fleet","infleet","filter","id","api_highspeed","tick","resetTimeElapsed","render","canRepair","akashiFlagship","inExpedition","flagShipInRepair","repairCount","map","repairDetail","ship","propTypes","object","isRequired"],"mappings":"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","file":"fleet-list.es","sourcesContent":["import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\nimport { Table, Grid, Row, Col, OverlayTrigger, Tooltip, Label, Panel } from 'react-bootstrap'\n\nimport CountupTimer from './countup-timer'\nimport { AKASHI_INTERVAL } from './functions'\n\nimport ShipRow from './ship-row'\n\nconst { i18n } = window\nconst __ = i18n['poi-plugin-anchorage-repair'].__.bind(i18n['poi-plugin-anchorage-repair'])\n\n\nexport default class FleetList extends Component {\n static propTypes = {\n fleet: PropTypes.object.isRequired,\n }\n\n constructor(props) {\n super(props)\n\n this.state = {\n lastRefresh: 0,\n timeElapsed: 0,\n }\n }\n\n\n componentDidMount= () => {\n window.addEventListener('game.response', this.handleResponse)\n }\n\n componentWillUnmount = () => {\n window.removeEventListener('game.response', this.handleResponse)\n }\n\n\n handleResponse = (e) => {\n const { path, postBody } = e.detail\n const { timeElapsed, lastRefresh } = this.state\n switch (path) {\n case '/kcsapi/api_port/port':\n if (timeElapsed >= (AKASHI_INTERVAL / 1000) || lastRefresh === 0) {\n this.setState({\n lastRefresh: Date.now(),\n timeElapsed: 0,\n })\n }\n break\n\n case '/kcsapi/api_req_hensei/change': {\n const fleetId = parseInt(postBody.api_id, 10)\n const shipId = parseInt(postBody.api_ship_id, 10)\n // const shipIndex = parseInt(postBody.api_ship_idx)\n if (!Number.isNaN(fleetId)\n && fleetId === this.props.fleet.api_id\n && shipId >= 0) {\n if (timeElapsed < (AKASHI_INTERVAL / 1000)) {\n this.setState({\n lastRefresh: Date.now(),\n timeElapsed: 0,\n })\n } else if (shipId < 0) {\n // do nothing\n } else {\n this.setState({ // since it has passed more than 20 minutes, need to refresh the hp\n lastRefresh: 0,\n })\n }\n }\n break\n }\n case '/kcsapi/api_req_nyukyo/start': {\n const shipId = parseInt(postBody.api_ship_id, 10)\n const infleet = _.filter(this.props.fleet.shipId, id => shipId === id)\n if (postBody.api_highspeed === 1 && infleet != null) {\n this.setState({ lastRefresh: Date.now() })\n }\n break\n }\n default:\n }\n }\n\n tick = (timeElapsed) => {\n if (timeElapsed % 5 === 0) { // limit component refresh rate\n this.setState({ timeElapsed })\n }\n }\n\n resetTimeElapsed = () => {\n this.setState({ timeElapsed: 0 })\n }\n\n render() {\n const { timeElapsed, lastRefresh } = this.state\n const { fleet } = this.props\n\n return (\n <Grid>\n <Row className=\"info-row\">\n <Col xs={4} className=\"info-col\">\n <OverlayTrigger\n placement=\"bottom\"\n trigger={fleet.canRepair ? 'click' : ['hover', 'focus']}\n overlay={\n <Tooltip id={`anchorage-refresh-notify-${fleet.api_id}`}>\n <p>{fleet.canRepair ? __('Akashi loves you!') : '' }</p>\n <p>{fleet.akashiFlagship ? '' : __('Akashi not flagship')}</p>\n <p>{fleet.inExpedition ? __('fleet in expedition') : ''}</p>\n <p>{fleet.flagShipInRepair ? __('flagship in dock') : ''}</p>\n </Tooltip>\n }\n >\n <Label bsStyle={fleet.canRepair ? 'success' : 'warning'}>\n {fleet.canRepair ? __('Repairing') : __('Not ready')}\n </Label>\n </OverlayTrigger>\n </Col>\n <Col xs={4} className=\"info-col\">\n {\n <Label bsStyle={fleet.canRepair ? 'success' : 'warning'}>\n <span>{__('Elapsed:')} </span>\n <CountupTimer\n countdownId={`akashi-${fleet.api_id}`}\n startTime={this.state.lastRefresh}\n tickCallback={this.tick}\n startCallback={this.resetTimeElapsed}\n />\n </Label>\n\n }\n </Col>\n <Col xs={4} className=\"info-col\">\n <Label bsStyle={fleet.repairCount ? 'success' : 'warning'}>{__('Capacity: %s', fleet.repairCount)}</Label>\n </Col>\n </Row>\n <Row>\n <Col xs={12}>\n <Panel bsStyle=\"warning\" className={lastRefresh === 0 ? '' : 'hidden'}>\n {__('Please return to HQ screen to make timer refreshed.')}\n </Panel>\n </Col>\n </Row>\n <Row>\n <Col xs={12}>\n <Table bordered condensed>\n <thead>\n <tr>\n <th>{__('Ship')}</th>\n <th>{__('HP')}</th>\n <th>\n <OverlayTrigger\n placement=\"top\"\n overlay={\n <Tooltip id={'akashi-time-desc'}>\n {__('Total time required')}\n </Tooltip>\n }\n >\n <span>{__('Akashi Time')}</span>\n </OverlayTrigger >\n </th>\n <th>\n <OverlayTrigger\n placement=\"top\"\n overlay={\n <Tooltip id={'akashi-time-desc'}>\n {__('Time required for 1 HP recovery')}\n </Tooltip>\n }\n >\n <span>{__('Per HP')}</span>\n </OverlayTrigger >\n </th>\n <th>\n <OverlayTrigger\n placement=\"top\"\n overlay={\n <Tooltip id={'akashi-time-desc'}>\n {__('Estimated HP recovery since last refresh')}\n </Tooltip>\n }\n >\n <span>{__('Estimated repaired')}</span>\n </OverlayTrigger >\n </th>\n </tr>\n </thead>\n <tbody>\n {\n _.map(fleet.repairDetail, ship => (\n <ShipRow\n key={`anchorage-ship-${ship.api_id}`}\n ship={ship}\n lastRefresh={lastRefresh}\n timeElapsed={timeElapsed}\n canRepair={fleet.canRepair}\n />))\n }\n </tbody>\n </Table>\n </Col>\n </Row>\n </Grid>\n )\n }\n}\n"]}
@@ -0,0 +1,90 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getCountdownLabelStyle = exports.getHPLabelStyle = exports.repairEstimate = exports.getTimePerHP = exports.timePerHPCalc = exports.akashiEstimate = exports.AKASHI_INTERVAL = undefined;
7
+
8
+ var _factor = require('./factor');
9
+
10
+ var _factor2 = _interopRequireDefault(_factor);
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ const AKASHI_INTERVAL = exports.AKASHI_INTERVAL = 20 * 60 * 1000; // minimum time required, in ms
15
+ const DOCKING_OFFSET = 30 * 1000; // offset in docking time formula
16
+ const MINOR_PERCENT = 0.5; // minor damage determination
17
+
18
+ const minuteCeil = time => {
19
+ const minute = 60 * 1000;
20
+
21
+ return Math.ceil(time / minute) * minute;
22
+ };
23
+
24
+ // estimate the time needed in anchorage repair
25
+ const akashiEstimate = exports.akashiEstimate = ({ api_nowhp, api_maxhp, api_ndock_time }) => {
26
+ if (api_ndock_time === 0 || api_nowhp >= api_maxhp) return 0;
27
+
28
+ if (api_nowhp <= api_maxhp * MINOR_PERCENT) return 0; // damage check
29
+
30
+ if (api_maxhp - api_nowhp === 1) return AKASHI_INTERVAL; // if only 1 hp to repair
31
+
32
+ return Math.max(minuteCeil(api_ndock_time - DOCKING_OFFSET), AKASHI_INTERVAL);
33
+ };
34
+
35
+ const timePerHPCalc = exports.timePerHPCalc = ({ api_nowhp, api_maxhp, api_ndock_time }) => api_nowhp < api_maxhp && api_nowhp >= api_maxhp * MINOR_PERCENT ? (api_ndock_time - DOCKING_OFFSET) / (api_maxhp - api_nowhp) : 0;
36
+
37
+ // alternative way for timePerHP
38
+ const getTimePerHP = exports.getTimePerHP = (api_lv = 1, api_stype = 1) => {
39
+ let factor;
40
+ if (_factor2.default[api_stype] != null) factor = _factor2.default[api_stype].factor || 0;
41
+
42
+ if (factor === 0) return 0;
43
+
44
+ if (api_lv < 12) {
45
+ return api_lv * 10 * factor * 1000;
46
+ }
47
+
48
+ return (api_lv * 5 + (Math.floor(Math.sqrt(api_lv - 11)) * 10 + 50)) * factor * 1000;
49
+ };
50
+
51
+ const repairEstimate = exports.repairEstimate = ({ api_nowhp, api_maxhp, timePerHP }, timeElapsed = 0, availableSRF = false) => {
52
+ // timeElapsed is in seconds
53
+ if (api_nowhp >= api_maxhp || timePerHP === 0 || !availableSRF) return 0;
54
+
55
+ if (timeElapsed * 1000 < AKASHI_INTERVAL) {
56
+ return 0;
57
+ }
58
+
59
+ return Math.min(Math.max(Math.floor(timeElapsed * 1000 / timePerHP), 1), api_maxhp - api_nowhp);
60
+ };
61
+
62
+ const getHPLabelStyle = exports.getHPLabelStyle = (nowhp, maxhp, availableSRF = true, inRepair = false) => {
63
+ const percentage = nowhp / maxhp;
64
+ if (!availableSRF) {
65
+ return 'warning';
66
+ }
67
+ switch (true) {
68
+ case percentage >= 1 || inRepair:
69
+ return 'success';
70
+ case percentage >= MINOR_PERCENT:
71
+ return 'primary';
72
+ case percentage < MINOR_PERCENT:
73
+ return 'warning';
74
+ default:
75
+ return 'warning';
76
+ }
77
+ };
78
+
79
+ const getCountdownLabelStyle = exports.getCountdownLabelStyle = (props, timeRemaining) => {
80
+ switch (true) {
81
+ case timeRemaining > 600:
82
+ return 'primary';
83
+ case timeRemaining > 60:
84
+ return 'warning';
85
+ case timeRemaining >= 0:
86
+ return 'success';
87
+ default:
88
+ return 'default';
89
+ }
90
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["functions.es"],"names":["AKASHI_INTERVAL","DOCKING_OFFSET","MINOR_PERCENT","minuteCeil","time","minute","Math","ceil","akashiEstimate","api_nowhp","api_maxhp","api_ndock_time","max","timePerHPCalc","getTimePerHP","api_lv","api_stype","factor","floor","sqrt","repairEstimate","timePerHP","timeElapsed","availableSRF","min","getHPLabelStyle","nowhp","maxhp","inRepair","percentage","getCountdownLabelStyle","props","timeRemaining"],"mappings":"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","file":"functions.es","sourcesContent":["import FACTOR from './factor'\n\nexport const AKASHI_INTERVAL = 20 * 60 * 1000 // minimum time required, in ms\nconst DOCKING_OFFSET = 30 * 1000 // offset in docking time formula\nconst MINOR_PERCENT = 0.5 // minor damage determination\n\nconst minuteCeil = (time) => {\n const minute = 60 * 1000\n\n return Math.ceil(time / minute) * minute\n}\n\n// estimate the time needed in anchorage repair\nexport const akashiEstimate = ({ api_nowhp, api_maxhp, api_ndock_time }) => {\n if (api_ndock_time === 0 || api_nowhp >= api_maxhp) return 0\n\n if (api_nowhp <= api_maxhp * MINOR_PERCENT) return 0 // damage check\n\n if (api_maxhp - api_nowhp === 1) return AKASHI_INTERVAL // if only 1 hp to repair\n\n return Math.max(minuteCeil(api_ndock_time - DOCKING_OFFSET), AKASHI_INTERVAL)\n}\n\nexport const timePerHPCalc = ({ api_nowhp, api_maxhp, api_ndock_time }) =>\n (api_nowhp < api_maxhp && api_nowhp >= api_maxhp * MINOR_PERCENT)\n ? ((api_ndock_time - DOCKING_OFFSET) / (api_maxhp - api_nowhp))\n : 0\n\n// alternative way for timePerHP\nexport const getTimePerHP = (api_lv = 1, api_stype = 1) => {\n let factor\n if (FACTOR[api_stype] != null) factor = FACTOR[api_stype].factor || 0\n\n if (factor === 0) return 0\n\n if (api_lv < 12) {\n return api_lv * 10 * factor * 1000\n }\n\n return ((api_lv * 5) + ((Math.floor(Math.sqrt(api_lv - 11)) * 10) + 50)) * factor * 1000\n}\n\nexport const repairEstimate =\n({ api_nowhp, api_maxhp, timePerHP }, timeElapsed = 0, availableSRF = false) => {\n // timeElapsed is in seconds\n if (api_nowhp >= api_maxhp || timePerHP === 0 || !availableSRF) return 0\n\n if (timeElapsed * 1000 < AKASHI_INTERVAL) {\n return 0\n }\n\n return Math.min(Math.max(Math.floor((timeElapsed * 1000) / timePerHP), 1), api_maxhp - api_nowhp)\n}\n\nexport const getHPLabelStyle = (nowhp, maxhp, availableSRF = true, inRepair = false) => {\n const percentage = nowhp / maxhp\n if (!availableSRF) {\n return 'warning'\n }\n switch (true) {\n case (percentage >= 1 || inRepair):\n return 'success'\n case (percentage >= MINOR_PERCENT):\n return 'primary'\n case (percentage < MINOR_PERCENT):\n return 'warning'\n default:\n return 'warning'\n }\n}\n\nexport const getCountdownLabelStyle = (props, timeRemaining) => {\n switch (true) {\n case (timeRemaining > 600):\n return 'primary'\n case (timeRemaining > 60):\n return 'warning'\n case (timeRemaining >= 0):\n return 'success'\n default:\n return 'default'\n }\n}\n"]}
@@ -0,0 +1,141 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
8
+
9
+ var _class, _temp;
10
+ // import { createSelector } from 'reselect'
11
+
12
+
13
+ var _react = require('react');
14
+
15
+ var _react2 = _interopRequireDefault(_react);
16
+
17
+ var _propTypes = require('prop-types');
18
+
19
+ var _propTypes2 = _interopRequireDefault(_propTypes);
20
+
21
+ var _reactRedux = require('react-redux');
22
+
23
+ var _lodash = require('lodash');
24
+
25
+ var _lodash2 = _interopRequireDefault(_lodash);
26
+
27
+ var _path = require('path');
28
+
29
+ var _reactBootstrap = require('react-bootstrap');
30
+
31
+ var _reactFontawesome = require('react-fontawesome');
32
+
33
+ var _reactFontawesome2 = _interopRequireDefault(_reactFontawesome);
34
+
35
+ var _tools = require('views/utils/tools');
36
+
37
+ var _countdownTimer = require('views/components/main/parts/countdown-timer');
38
+
39
+ var _functions = require('./functions');
40
+
41
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
42
+
43
+ // const constShipsSelector = createSelector(
44
+ // constSelector,
45
+ // (_const) => _.keyBy(_const.$ships, 'api_id')
46
+ // )
47
+
48
+ const { ROOT, i18n } = window;
49
+ const __ = i18n['poi-plugin-anchorage-repair'].__.bind(i18n['poi-plugin-anchorage-repair']);
50
+
51
+ const ShipRow = (0, _reactRedux.connect)(state => {
52
+ const canNotify = state.misc.canNotify;
53
+ return {
54
+ canNotify
55
+ };
56
+ })((_temp = _class = class ShipRowClass extends _react.Component {
57
+
58
+ render() {
59
+ const { timeElapsed, lastRefresh, canRepair, ship, canNotify } = this.props;
60
+ const { api_nowhp, api_maxhp, availableSRF, estimate, timePerHP,
61
+ api_id, api_lv, inRepair, api_name ,api_cond} = ship;
62
+ //console.log(ship)
63
+ const completeTime = lastRefresh + estimate;
64
+
65
+ return _react2.default.createElement(
66
+ 'tr',
67
+ null,
68
+ _react2.default.createElement(
69
+ 'td',
70
+ null,
71
+ i18n.resources.__(api_name),
72
+ _react2.default.createElement(
73
+ 'span',
74
+ { className: 'lv-label' },
75
+ 'Lv.',
76
+ api_lv
77
+ )
78
+ ),
79
+ _react2.default.createElement(
80
+ 'td',
81
+ null,
82
+ _react2.default.createElement(
83
+ _reactBootstrap.Label,
84
+ { bsStyle: (0, _functions.getHPLabelStyle)(api_nowhp, api_maxhp, availableSRF, inRepair) },
85
+ `${api_nowhp} / ${api_maxhp}`
86
+ ),
87
+ _react2.default.createElement(
88
+ 'span',
89
+ null,
90
+ '🙂',
91
+ 49
92
+ )
93
+ ),
94
+ _react2.default.createElement(
95
+ 'td',
96
+ null,
97
+ estimate > 0 && canRepair && availableSRF && (!inRepair ? _react2.default.createElement(_countdownTimer.CountdownNotifierLabel, {
98
+ timerKey: `anchorage-ship-${api_id}`,
99
+ completeTime: completeTime,
100
+ getLabelStyle: _functions.getCountdownLabelStyle,
101
+ getNotifyOptions: () => canNotify && lastRefresh > 0 && _extends({}, this.constructor.basicNotifyConfig, {
102
+ completeTime,
103
+ args: i18n.resources.__(api_name)
104
+ })
105
+ }) : inRepair ? _react2.default.createElement(
106
+ _reactBootstrap.Label,
107
+ { bsStyle: 'success' },
108
+ _react2.default.createElement(_reactFontawesome2.default, { name: 'wrench' }),
109
+ ' ',
110
+ __('Docking')
111
+ ) : '')
112
+ ),
113
+ _react2.default.createElement(
114
+ 'td',
115
+ null,
116
+ timePerHP ? (0, _tools.resolveTime)(timePerHP / 1000) : ''
117
+ ),
118
+ _react2.default.createElement(
119
+ 'td',
120
+ null,
121
+ canRepair && api_nowhp !== api_maxhp && !inRepair && (0, _functions.repairEstimate)(ship, timeElapsed, availableSRF)
122
+ )
123
+ );
124
+ }
125
+ }, _class.basicNotifyConfig = {
126
+ type: 'repair',
127
+ title: __('Anchorage repair'),
128
+ message: names => `${_lodash2.default.join(names, ', ')} ${__('anchorage repair completed')}`,
129
+ icon: (0, _path.join)(ROOT, 'assets', 'img', 'operation', 'repair.png'),
130
+ preemptTime: 0,
131
+ groupKey: 'plugin-anchorage-repair'
132
+ }, _class.propTypes = {
133
+ canNotify: _propTypes2.default.bool.isRequired,
134
+ timeElapsed: _propTypes2.default.number.isRequired,
135
+ lastRefresh: _propTypes2.default.number.isRequired,
136
+ ship: _propTypes2.default.object.isRequired,
137
+ canRepair: _propTypes2.default.bool.isRequired
138
+ }, _temp));
139
+
140
+ exports.default = ShipRow;
141
+ module.exports = exports['default'];