mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-23 01:05:21 +00:00
311d43ab4f
## Description: Make the unit display bar a proper unit build bar Add shortcuts for all structures and units Add ranges for ranged structures and units Changed the shortcuts to use the key instead of the code for internationalization purposes  <img width="285" height="517" alt="image" src="https://github.com/user-attachments/assets/91bb01e6-e48c-4255-ace1-306af9cdc25b" /> ## Please complete the following: - [x] I have added screenshots for all UI updates - [x] I process any text displayed to the user through translateText() and I've added it to the en.json file - [x] I have added relevant tests to the test directory - [x] I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced ## Please put your Discord username so you can be contacted if a bug or regression is found: Mr.Box --------- Co-authored-by: evanpelle <evanpelle@gmail.com> Co-authored-by: icslucas <carolinacarazolli@gmail.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
116 lines
3.1 KiB
TypeScript
116 lines
3.1 KiB
TypeScript
import { LitElement, html } from "lit";
|
|
import { customElement, property } from "lit/decorators.js";
|
|
import { translateText } from "../../../../client/Utils";
|
|
|
|
@customElement("setting-keybind")
|
|
export class SettingKeybind extends LitElement {
|
|
@property() label = "Setting";
|
|
@property() description = "";
|
|
@property({ type: String, reflect: true }) action = "";
|
|
@property({ type: String }) defaultKey = "";
|
|
@property({ type: String }) value = "";
|
|
@property({ type: Boolean }) easter = false;
|
|
|
|
createRenderRoot() {
|
|
return this;
|
|
}
|
|
|
|
private listening = false;
|
|
|
|
render() {
|
|
return html`
|
|
<div class="setting-item column${this.easter ? " easter-egg" : ""}">
|
|
<div class="setting-label-group">
|
|
<label class="setting-label block mb-1">${this.label}</label>
|
|
|
|
<div class="setting-keybind-box">
|
|
<div class="setting-keybind-description">${this.description}</div>
|
|
|
|
<div class="flex items-center gap-2">
|
|
<span
|
|
class="setting-key"
|
|
tabindex="0"
|
|
@keydown=${this.handleKeydown}
|
|
@click=${this.startListening}
|
|
>
|
|
${this.displayKey(this.value || this.defaultKey)}
|
|
</span>
|
|
|
|
<button
|
|
class="text-xs text-gray-400 hover:text-white border border-gray-500 px-2 py-0.5 rounded transition"
|
|
@click=${this.resetToDefault}
|
|
>
|
|
${translateText("user_setting.reset")}
|
|
</button>
|
|
<button
|
|
class="text-xs text-gray-400 hover:text-white border border-gray-500 px-2 py-0.5 rounded transition"
|
|
@click=${this.unbindKey}
|
|
>
|
|
${translateText("user_setting.unbind")}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
`;
|
|
}
|
|
|
|
private displayKey(key: string): string {
|
|
if (key === " ") return "Space";
|
|
if (key.startsWith("Key") && key.length === 4) {
|
|
return key.slice(3);
|
|
}
|
|
return key.length
|
|
? key.charAt(0).toUpperCase() + key.slice(1)
|
|
: "Press a key";
|
|
}
|
|
|
|
private startListening() {
|
|
this.listening = true;
|
|
this.requestUpdate();
|
|
}
|
|
|
|
private handleKeydown(e: KeyboardEvent) {
|
|
if (!this.listening) return;
|
|
e.preventDefault();
|
|
|
|
const code = e.code;
|
|
|
|
this.value = code;
|
|
|
|
this.dispatchEvent(
|
|
new CustomEvent("change", {
|
|
detail: { action: this.action, value: code, key: e.key },
|
|
bubbles: true,
|
|
composed: true,
|
|
}),
|
|
);
|
|
|
|
this.listening = false;
|
|
this.requestUpdate();
|
|
}
|
|
|
|
private resetToDefault() {
|
|
this.value = this.defaultKey;
|
|
this.dispatchEvent(
|
|
new CustomEvent("change", {
|
|
detail: { action: this.action, value: this.defaultKey },
|
|
bubbles: true,
|
|
composed: true,
|
|
}),
|
|
);
|
|
}
|
|
|
|
private unbindKey() {
|
|
this.value = "";
|
|
this.dispatchEvent(
|
|
new CustomEvent("change", {
|
|
detail: { action: this.action, value: "Null" },
|
|
bubbles: true,
|
|
composed: true,
|
|
}),
|
|
);
|
|
this.requestUpdate();
|
|
}
|
|
}
|