Skip to content
This repository was archived by the owner on May 22, 2025. It is now read-only.

Commit 5b279aa

Browse files
authored
Makes the NTSL traffic console no longer save on pressing ENTER, replaces x.len with length(x) in the scripting module (#22796)
* Makes a local NTSLTextArea class to remove ENTER auto-saving your code * replaces X.len with length(X)
1 parent b650ef5 commit 5b279aa

File tree

7 files changed

+121
-70
lines changed

7 files changed

+121
-70
lines changed

tgui/packages/tgui/interfaces/NtslEditor.js

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,57 @@ import { useBackend, useLocalState } from '../backend';
22
import { Box, Button, Divider, Input, Tabs, TextArea, Section, Stack } from '../components';
33
import { Window } from '../layouts';
44

5+
// NTSLTextArea component start
6+
// This is literally just TextArea but without ENTER updating anything, for NTSL
7+
import { toInputValue } from '../components/Input';
8+
import { KEY_ESCAPE, KEY_TAB } from 'common/keycodes';
9+
10+
class NTSLTextArea extends TextArea {
11+
constructor(props) {
12+
super(props);
13+
const { dontUseTabForIndent = false } = props;
14+
this.handleKeyDown = (e) => {
15+
const { editing } = this.state;
16+
const { onChange, onInput, onEnter, onKey } = this.props;
17+
if (e.keyCode === KEY_ESCAPE) {
18+
if (this.props.onEscape) {
19+
this.props.onEscape(e);
20+
}
21+
this.setEditing(false);
22+
if (this.props.selfClear) {
23+
e.target.value = '';
24+
} else {
25+
e.target.value = toInputValue(this.props.value);
26+
e.target.blur();
27+
}
28+
return;
29+
}
30+
if (!editing) {
31+
this.setEditing(true);
32+
}
33+
// Custom key handler
34+
if (onKey) {
35+
onKey(e, e.target.value);
36+
}
37+
if (!dontUseTabForIndent) {
38+
const keyCode = e.keyCode || e.which;
39+
if (keyCode === KEY_TAB) {
40+
e.preventDefault();
41+
const { value, selectionStart, selectionEnd } = e.target;
42+
e.target.value =
43+
value.substring(0, selectionStart) +
44+
'\t' +
45+
value.substring(selectionEnd);
46+
e.target.selectionEnd = selectionStart + 1;
47+
if (onInput) {
48+
onInput(e, e.target.value);
49+
}
50+
}
51+
}
52+
};
53+
}
54+
}
55+
// NTSLTextArea component end
556

657
export const NtslEditor = (props, context) => {
758
// Make sure we don't start larger than 50%/80% of screen width/height.
@@ -34,7 +85,7 @@ const ScriptEditor = (props, context) => {
3485
return (
3586
<Box width="100%" height="100%">
3687
{user_name ?
37-
<TextArea
88+
<NTSLTextArea
3889
noborder
3990
scrollbar
4091
value={stored_code}

yogstation/code/modules/scripting/Implementations/logic.dm

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@
2929
name = "find"
3030

3131
/datum/n_function/default/find/execute(this_obj, list/params)
32-
var/haystack = params.len >= 1 ? params[1] : null
33-
var/needle = params.len >= 2 ? params[2] : null
34-
var/start = params.len >= 3 ? params[3] : 1
35-
var/end = params.len >= 4 ? params[4] : 0
32+
var/haystack = length(params) >= 1 ? params[1] : null
33+
var/needle = length(params) >= 2 ? params[2] : null
34+
var/start = length(params) >= 3 ? params[3] : 1
35+
var/end = length(params) >= 4 ? params[4] : 0
3636
if(!haystack || !needle)
3737
return
3838
if(IS_OBJECT(haystack))
@@ -50,9 +50,9 @@
5050
name = "substr"
5151

5252
/datum/n_function/default/substr/execute(this_obj, list/params)
53-
var/string = params.len >= 1 ? params[1] : null
54-
var/start = params.len >= 2 ? params[2] : 1
55-
var/end = params.len >= 3 ? params[3] : 0
53+
var/string = length(params) >= 1 ? params[1] : null
54+
var/start = length(params) >= 2 ? params[2] : 1
55+
var/end = length(params) >= 3 ? params[3] : 0
5656
if(istext(string) && isnum(start) && isnum(end))
5757
if(start > 0)
5858
return copytext(string, start, end)
@@ -62,7 +62,7 @@
6262
name = "length"
6363

6464
/datum/n_function/default/length/execute(this_obj, list/params)
65-
var/container = params.len >= 1 ? params[1] : null
65+
var/container = length(params) >= 1 ? params[1] : null
6666
if(container)
6767
if(istype(container, /list) || istext(container))
6868
return length(container)
@@ -73,7 +73,7 @@
7373
name = "lower"
7474

7575
/datum/n_function/default/lower/execute(this_obj, list/params)
76-
var/string = params.len >= 1 ? params[1] : null
76+
var/string = length(params) >= 1 ? params[1] : null
7777
if(istext(string))
7878
return lowertext(string)
7979

@@ -82,7 +82,7 @@
8282
name = "upper"
8383

8484
/datum/n_function/default/upper/execute(this_obj, list/params)
85-
var/string = params.len >= 1 ? params[1] : null
85+
var/string = length(params) >= 1 ? params[1] : null
8686
if(istext(string))
8787
return uppertext(string)
8888

@@ -91,8 +91,8 @@
9191
name = "explode"
9292

9393
/datum/n_function/default/explode/execute(this_obj, list/params)
94-
var/string = params.len >= 1 ? params[1] : null
95-
var/separator = params.len >= 2 ? params[2] : ""
94+
var/string = length(params) >= 1 ? params[1] : null
95+
var/separator = length(params) >= 2 ? params[2] : ""
9696
if(istext(string) && (istext(separator) || isnull(separator)))
9797
return splittext(string, separator)
9898

@@ -111,8 +111,8 @@
111111
name = "repeat"
112112

113113
/datum/n_function/default/repeat/execute(this_obj, list/params)
114-
var/string = params.len >= 1 ? params[1] : null
115-
var/amount = params.len >= 2 ? params[2] : null
114+
var/string = length(params) >= 1 ? params[1] : null
115+
var/amount = length(params) >= 2 ? params[2] : null
116116
if(istext(string) && isnum(amount))
117117
var/i
118118
var/newstring = ""
@@ -130,7 +130,7 @@
130130
name = "reverse"
131131

132132
/datum/n_function/default/reverse/execute(this_obj, list/params)
133-
var/string = params.len >= 1 ? params[1] : null
133+
var/string = length(params) >= 1 ? params[1] : null
134134
if(istext(string))
135135
var/newstring = ""
136136
var/i
@@ -146,15 +146,15 @@
146146
name = "tonum"
147147

148148
/datum/n_function/default/tonum/execute(this_obj, list/params)
149-
var/string = params.len >= 1 ? params[1] : null
149+
var/string = length(params) >= 1 ? params[1] : null
150150
if(istext(string))
151151
return text2num(string)
152152

153153
/datum/n_function/default/proper
154154
name = "proper"
155155

156156
/datum/n_function/default/proper/execute(this_obj, list/params)
157-
var/string = params.len >= 1 ? params[1] : null
157+
var/string = length(params) >= 1 ? params[1] : null
158158
if(!istext(string))
159159
return ""
160160

@@ -170,7 +170,7 @@
170170
name = "max"
171171

172172
/datum/n_function/default/max/execute(this_obj, list/params)
173-
if(!params.len)
173+
if(!length(params))
174174
return FALSE
175175

176176
var/max = params[1]
@@ -185,7 +185,7 @@
185185
name = "min"
186186

187187
/datum/n_function/default/min/execute(this_obj, list/params)
188-
if(!params.len)
188+
if(!length(params))
189189
return FALSE
190190

191191
var/min = params[1]
@@ -199,22 +199,22 @@
199199
name = "prob"
200200

201201
/datum/n_function/default/prob/execute(this_obj, list/params)
202-
var/chance = params.len >= 1 ? params[1] : null
202+
var/chance = length(params) >= 1 ? params[1] : null
203203
return prob(chance)
204204

205205
/datum/n_function/default/randseed
206206
name = "randseed"
207207

208208
/datum/n_function/default/randseed/execute(this_obj, list/params)
209-
//var/seed = params.len >= 1 ? params[1] : null
209+
//var/seed = length(params) >= 1 ? params[1] : null
210210
//rand_seed(seed)
211211

212212
/datum/n_function/default/rand
213213
name = "rand"
214214

215215
/datum/n_function/default/rand/execute(this_obj, list/params)
216-
var/low = params.len >= 1 ? params[1] : null
217-
var/high = params.len >= 2 ? params[2] : null
216+
var/low = length(params) >= 1 ? params[1] : null
217+
var/high = length(params) >= 2 ? params[2] : null
218218
if(isnull(low) && isnull(high))
219219
return rand()
220220

@@ -225,7 +225,7 @@
225225
name = "tostring"
226226

227227
/datum/n_function/default/tostring/execute(this_obj, list/params)
228-
var/num = params.len >= 1 ? params[1] : null
228+
var/num = length(params) >= 1 ? params[1] : null
229229
if(isnum(num))
230230
return num2text(num)
231231

@@ -234,7 +234,7 @@
234234
name = "sqrt"
235235

236236
/datum/n_function/default/sqrt/execute(this_obj, list/params)
237-
var/num = params.len >= 1 ? params[1] : null
237+
var/num = length(params) >= 1 ? params[1] : null
238238
if(isnum(num))
239239
return sqrt(num)
240240

@@ -243,7 +243,7 @@
243243
name = "abs"
244244

245245
/datum/n_function/default/abs/execute(this_obj, list/params)
246-
var/num = params.len >= 1 ? params[1] : null
246+
var/num = length(params) >= 1 ? params[1] : null
247247
if(isnum(num))
248248
return abs(num)
249249

@@ -252,7 +252,7 @@
252252
name = "floor"
253253

254254
/datum/n_function/default/floor/execute(this_obj, list/params)
255-
var/num = params.len >= 1 ? params[1] : null
255+
var/num = length(params) >= 1 ? params[1] : null
256256
if(isnum(num))
257257
return round(num)
258258

@@ -261,7 +261,7 @@
261261
name = "ceil"
262262

263263
/datum/n_function/default/ceil/execute(this_obj, list/params)
264-
var/num = params.len >= 1 ? params[1] : null
264+
var/num = length(params) >= 1 ? params[1] : null
265265
if(isnum(num))
266266
return round(num)+1
267267

@@ -270,7 +270,7 @@
270270
name = "round"
271271

272272
/datum/n_function/default/round/execute(this_obj, list/params)
273-
var/num = params.len >= 1 ? params[1] : null
273+
var/num = length(params) >= 1 ? params[1] : null
274274
if(isnum(num))
275275
if(num-round(num) < 0.5)
276276
return round(num)
@@ -281,9 +281,9 @@
281281
name = "clamp"
282282

283283
/datum/n_function/default/clamp/execute(this_obj, list/params)
284-
var/num = params.len >= 1 ? params[1] : null
285-
var/min = params.len >= 2 ? params[2] : -1
286-
var/max = params.len >= 3 ? params[3] : 1
284+
var/num = length(params) >= 1 ? params[1] : null
285+
var/min = length(params) >= 2 ? params[2] : -1
286+
var/max = length(params) >= 3 ? params[3] : 1
287287
if(isnum(num) && isnum(min) && isnum(max))
288288
if(num <= min)
289289
return min
@@ -296,9 +296,9 @@
296296
name = "inrange"
297297

298298
/datum/n_function/default/inrange/execute(this_obj, list/params)
299-
var/num = params.len >= 1 ? params[1] : null
300-
var/min = params.len >= 2 ? params[2] : -1
301-
var/max = params.len >= 3 ? params[3] : 1
299+
var/num = length(params) >= 1 ? params[1] : null
300+
var/min = length(params) >= 2 ? params[2] : -1
301+
var/max = length(params) >= 3 ? params[3] : 1
302302
if(isnum(num)&&isnum(min)&&isnum(max))
303303
return ((min <= num) && (num <= max))
304304

@@ -307,7 +307,7 @@
307307
name = "sin"
308308

309309
/datum/n_function/default/sin/execute(this_obj, list/params)
310-
var/num = params.len >= 1 ? params[1] : null
310+
var/num = length(params) >= 1 ? params[1] : null
311311
if(isnum(num))
312312
return sin(num)
313313

@@ -316,7 +316,7 @@
316316
name = "cos"
317317

318318
/datum/n_function/default/cos/execute(this_obj, list/params)
319-
var/num = params.len >= 1 ? params[1] : null
319+
var/num = length(params) >= 1 ? params[1] : null
320320
if(isnum(num))
321321
return cos(num)
322322

@@ -325,7 +325,7 @@
325325
name = "asin"
326326

327327
/datum/n_function/default/asin/execute(this_obj, list/params)
328-
var/num = params.len >= 1 ? params[1] : null
328+
var/num = length(params) >= 1 ? params[1] : null
329329
if(isnum(num) && -1 <= num && num <= 1)
330330
return arcsin(num)
331331

@@ -334,7 +334,7 @@
334334
name = "acos"
335335

336336
/datum/n_function/default/acos/execute(this_obj, list/params)
337-
var/num = params.len >= 1 ? params[1] : null
337+
var/num = length(params) >= 1 ? params[1] : null
338338
if(isnum(num) && -1 <= num && num <= 1)
339339
return arccos(num)
340340

@@ -343,7 +343,7 @@
343343
name = "log"
344344

345345
/datum/n_function/default/log/execute(this_obj, list/params)
346-
var/num = params.len >= 1 ? params[1] : null
346+
var/num = length(params) >= 1 ? params[1] : null
347347
if(isnum(num) && 0 < num)
348348
return log(num)
349349

@@ -352,17 +352,17 @@
352352
name = "replace"
353353

354354
/datum/n_function/default/replace/execute(this_obj, list/params)
355-
var/text = params.len >= 1 ? params[1] : null
356-
var/find = params.len >= 2 ? params[2] : null
357-
var/replacement = params.len >= 3 ? params[3] : null
355+
var/text = length(params) >= 1 ? params[1] : null
356+
var/find = length(params) >= 2 ? params[2] : null
357+
var/replacement = length(params) >= 3 ? params[3] : null
358358
if(!istext(text) || !istext(find) || !istext(replacement))
359359
return
360360
var/find_len = length(find)
361361
if(!find_len)
362362
return text
363363

364364
var/max_count
365-
if(params.len >= 4 && isnum(params[4]))
365+
if(length(params) >= 4 && isnum(params[4]))
366366
max_count = min(params[4], SCRIPT_MAX_REPLACEMENTS_ALLOWED)
367367
else
368368
max_count = SCRIPT_MAX_REPLACEMENTS_ALLOWED
@@ -393,7 +393,7 @@
393393
name = "sleep"
394394

395395
/datum/n_function/default/sleeps/execute(this_obj, list/params)
396-
var/time = params.len >= 1 ? params[1] : null
396+
var/time = length(params) >= 1 ? params[1] : null
397397
sleep(time)
398398

399399
/datum/n_function/default/timestamp

0 commit comments

Comments
 (0)