Skip to content

Commit e97deef

Browse files
author
KirillMysnik
committed
Updated to the latest MOTDPlayer version
Started development of Review Ban MoTD frontend
1 parent d5ea3db commit e97deef

File tree

5 files changed

+416
-93
lines changed

5 files changed

+416
-93
lines changed
Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
var PLUGIN = function () {
2+
var plugin = this;
3+
4+
var ANIMATION_DURATION = 1000;
5+
6+
var ReviewBanPage = function (tableNode) {
7+
var reviewBanPage = this;
8+
9+
var BanEntry = function (uniqueid, banId, name) {
10+
var banEntry = this;
11+
12+
this.uniqueid = uniqueid;
13+
this.banId = banId;
14+
this.name = name;
15+
16+
var lineNode;
17+
this.create = function (node) {
18+
lineNode = node.appendChild(document.createElement('div'));
19+
lineNode.classList.add('ban-table-line');
20+
21+
var cellNode = lineNode.appendChild(document.createElement('div'));
22+
cellNode.appendChild(document.createTextNode(banEntry.uniqueid));
23+
cellNode.classList.add('ban-table-uniqueid');
24+
25+
cellNode = lineNode.appendChild(document.createElement('div'));
26+
cellNode.appendChild(document.createTextNode(banEntry.name));
27+
cellNode.classList.add('ban-table-name');
28+
29+
lineNode.style.animationName = "ban-table-row-add";
30+
31+
lineNode.addEventListener('click', function (e) {
32+
if (banEntry.banId)
33+
showPanel(banEntry.banId);
34+
});
35+
};
36+
this.destroy = function () {
37+
banEntry.banId = undefined;
38+
lineNode.style.animationName = "ban-table-row-remove";
39+
setTimeout(function () {
40+
if (lineNode)
41+
lineNode.parentNode.removeChild(lineNode);
42+
lineNode = undefined;
43+
}, ANIMATION_DURATION);
44+
};
45+
this.destroyNoDelay = function () {
46+
banEntry.banId = undefined;
47+
lineNode.parentNode.removeChild(lineNode);
48+
lineNode = undefined;
49+
};
50+
};
51+
52+
var banEntries = [];
53+
54+
tableNode.classList.add('ban-table');
55+
56+
var clearBans = function () {
57+
banEntries.forEach(function (val, i, arr) {
58+
val.destroyNoDelay();
59+
});
60+
banEntries = [];
61+
};
62+
var addBan = function (uniqueid, banId, name) {
63+
removeBanId(banId);
64+
var banEntry = new BanEntry(uniqueid, banId, name);
65+
banEntry.create(tableNode);
66+
banEntries.push(banEntry);
67+
};
68+
var removeBanId = function (banId) {
69+
var invalidEntries = [];
70+
banEntries.forEach(function (val, i, arr) {
71+
if (val.banId == banId)
72+
invalidEntries.push(val);
73+
});
74+
invalidEntries.forEach(function (val, i, arr) {
75+
val.destroy();
76+
banEntries.splice(banEntries.indexOf(val), 1);
77+
});
78+
};
79+
80+
var mode = 'unknown';
81+
this.tryWS = function (wsSuccessCallback, wsMessageCallback, wsCloseCallback, wsErrorCallback) {
82+
MOTDPlayer.openWSConnection(function () {
83+
mode = 'ws';
84+
requestBans();
85+
if (wsSuccessCallback)
86+
wsSuccessCallback();
87+
}, function (data) {
88+
switch (data['action']) {
89+
case 'bans':
90+
data['bans'].forEach(function (val, i, arr) {
91+
addBan(val['uniqueid'], val['banId'], val['name']);
92+
});
93+
break;
94+
case 'remove-ban-id':
95+
removeBanId(data['banId']);
96+
break;
97+
}
98+
if (wsMessageCallback)
99+
wsMessageCallback(data);
100+
}, function () {
101+
clearBans();
102+
if (wsCloseCallback)
103+
wsCloseCallback();
104+
}, function (err) {
105+
if (mode == 'unknown') {
106+
mode = 'ajax';
107+
requestBans();
108+
}
109+
if (wsErrorCallback)
110+
wsErrorCallback(err);
111+
});
112+
};
113+
114+
var requestBans = function () {
115+
switch (mode) {
116+
case 'ajax':
117+
MOTDPlayer.post({
118+
action: 'get-bans',
119+
}, function (data) {
120+
clearBans();
121+
data['bans'].forEach(function (val, i, arr) {
122+
addBan(val['uniqueid'], val['banId'], val['name']);
123+
});
124+
}, function (err) {
125+
// TODO: Display error
126+
});
127+
break;
128+
129+
case 'ws':
130+
MOTDPlayer.sendWSData({
131+
action: 'get-bans',
132+
});
133+
break;
134+
}
135+
};
136+
137+
var execute = function (banId, reason, duration) {
138+
switch (mode) {
139+
case 'ajax':
140+
MOTDPlayer.post({
141+
action: 'execute',
142+
banId: banId,
143+
reason: reason,
144+
duration: duration,
145+
}, function (data) {
146+
if (data['status'] == "ok") ; // TODO: Display success popup
147+
clearBans();
148+
data['bans'].forEach(function (val, i, arr) {
149+
addBan(val['uniqueid'], val['banId'], val['name']);
150+
});
151+
}, function (err) {
152+
// TODO: Display error
153+
});
154+
break;
155+
156+
case 'ws':
157+
MOTDPlayer.sendWSData({
158+
action: 'execute',
159+
banId: banId,
160+
reason: reason,
161+
duration: duration,
162+
});
163+
break;
164+
}
165+
};
166+
167+
var showPanel = function (banId) {
168+
169+
};
170+
};
171+
172+
this.init = function (tableNode, wsSuccessCallback, wsMessageCallback, wsCloseCallback, wsErrorCallback) {
173+
reviewBanPage = new ReviewBanPage(tableNode);
174+
reviewBanPage.tryWS(wsSuccessCallback, wsMessageCallback, wsCloseCallback, wsErrorCallback);
175+
};
176+
};

srcds/addons/source-python/plugins/admin/core/frontends/motd.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ def on_page_data_received(self, data):
270270
return
271271

272272
if data['action'] == "get-players":
273-
if self.ws_instance:
273+
if self.is_websocket:
274274
for player in self._iter():
275275
if not self.filter(player):
276276
continue
@@ -318,15 +318,15 @@ class PlayerBasedFeaturePage(BasePlayerBasedFeaturePage):
318318
_base_filter = 'all'
319319
_ws_base_filter = 'all'
320320

321-
def __init__(self, index, ws_instance):
322-
super().__init__(index, ws_instance)
321+
def __init__(self, index, page_request_type):
322+
super().__init__(index, page_request_type)
323323

324-
if ws_instance:
324+
if self.is_websocket:
325325
_ws_player_based_pages.append(self)
326326

327327
@property
328328
def base_filter(self):
329-
return self._ws_base_filter if self.ws_instance else self._base_filter
329+
return self._ws_base_filter if self.is_websocket else self._base_filter
330330

331331
def _get_player_id(self, player):
332332
return player.userid
@@ -350,7 +350,7 @@ def _render_player_name(self, player):
350350
return player.name
351351

352352
def on_error(self, error):
353-
if self.ws_instance and self in _ws_player_based_pages:
353+
if self.is_websocket and self in _ws_player_based_pages:
354354
_ws_player_based_pages.remove(self)
355355

356356

0 commit comments

Comments
 (0)