|
|
- /* -------------< Ace >------------ */
- Hooks.once("init", () => {
- ["ace/mode/javascript", "ace/ext/language_tools", "ace/ext/error_marker", "ace/theme/twilight", "ace/snippets/javascript"].forEach((s) => ace.config.loadModule(s));
- });
- /* -------------< End Ace >------------ */
-
- Hooks.on("init", () => {
- Macros.registerSheet?.("macroeditor", AceMacroConfig, {
- makeDefault: true,
- label: "Ace Macro Editor",
- // types: ["script", "chat"],
- });
- });
-
- class AceMacroConfig extends MacroConfig {
- async _render(...args) {
- await super._render(...args);
-
- const configElement = this.element;
-
- configElement
- .find("div.form-group.stacked.command")
- .append(
- `<button type="button" class="macro-editor-expand" title="Expand Editor"><i class="fas fa-expand-alt"></i></button><div class="macro-editor" id="macroEditor-${this.object.id}"></div>`
- );
- if (game.settings.get("macroeditor", "defaultShow")) {
- configElement.find('.command textarea[name="command"]').css("display", "none");
- const furnace = this.element.find("div.furnace-macro-command");
- if (furnace.length !== 0) {
- furnace.css("display", "none");
- }
- } else {
- configElement.find(".macro-editor").css("display", "none");
- configElement.find(".macro-editor-expand").css("display", "none");
- }
-
- configElement
- .find(".sheet-footer")
- .append('<button type="button" class="macro-editor-button" title="Toggle Code Editor" name="editorButton"><i class="fas fa-terminal"></i></button>');
-
- let editor = (this.editor = ace.edit(`macroEditor-${this.object.id}`));
-
- this.editor.session.on("changeMode", function (e, session) {
- if ("ace/mode/javascript" === session.getMode().$id) {
- if (!!session.$worker) {
- session.$worker.send("setOptions", [
- {
- esversion: 9,
- esnext: false,
- },
- ]);
- }
- }
- });
-
- // Merge ace-lib user-settings with module settings
- this.editor.setOptions(
- mergeObject(ace.userSettings, {
- mode: "ace/mode/javascript",
- })
- );
-
- configElement.find(".macro-editor-button").on("click", (event) => {
- event.preventDefault();
- if (configElement.find(".macro-editor").css("display") == "none") {
- configElement.find('.command textarea[name="command"]').css("display", "none");
- configElement.find(".macro-editor").css("display", "");
- configElement.find(".macro-editor-expand").css("display", "");
- this.editor.setValue(configElement.find('.command textarea[name="command"]').val(), -1);
-
- // furnace compat / advanced macros
- const furnace = configElement.find("div.furnace-macro-command");
- if (furnace.length !== 0) {
- furnace.css("display", "none");
- }
- } else {
- configElement.find('.command textarea[name="command"]').css("display", "");
- configElement.find(".macro-editor").css("display", "none");
- configElement.find(".macro-editor-expand").css("display", "none");
-
- // furnace compat / advanced macros
- const furnace = configElement.find("div.furnace-macro-command");
- if (furnace.length !== 0) {
- furnace.css("display", "");
- furnace.trigger("change");
- }
- }
- });
-
- configElement.find(".macro-editor-expand").on("click", (event) => {
- event.preventDefault();
- if (configElement.find(".macro-editor").hasClass("fullscreen")) {
- configElement.find(".macro-editor").removeClass("fullscreen");
- configElement.find(".macro-editor-expand").removeClass("fullscreen");
- configElement.find(".macro-editor-expand").prop("title", "Expand Editor");
- configElement.find(".macro-editor-expand i.fas.fa-compress-alt").attr("class", "fas fa-expand-alt");
- configElement.find(".window-resizable-handle").css("display", "");
- } else {
- configElement.find(".macro-editor").addClass("fullscreen");
- configElement.find(".macro-editor-expand").addClass("fullscreen");
- configElement.find(".macro-editor-expand").prop("title", "Shrink Editor");
- configElement.find(".macro-editor-expand i.fas.fa-expand-alt").attr("class", "fas fa-compress-alt");
- configElement.find(".window-resizable-handle").css("display", "none");
- }
- });
-
- this.editor.setValue(configElement.find('textarea[name="command"]').val(), -1);
-
- this.editor.getSession().on("change", () => {
- configElement.find('textarea[name="command"]').val(editor.getSession().getValue());
- });
-
- this.editor.commands.addCommand({
- name: "Save",
- bindKey: { win: "Ctrl-S", mac: "Command-S" },
- exec: () => configElement.find("form.editable").trigger("submit"),
- });
-
- this.editor.commands.addCommand({
- name: "Execute",
- bindKey: { win: "Ctrl-E", mac: "Command-E" },
- exec: () => configElement.find("button.execute").trigger("click"),
- });
-
- // watch for resizing of editor
- new ResizeObserver(() => {
- editor.resize();
- editor.renderer.updateFull();
- }).observe(this.editor.container);
- }
-
- close(...args) {
- this.editor.destroy();
- super.close(...args);
- }
- }
-
- Hooks.once("init", function () {
- game.settings.register("macroeditor", "defaultShow", {
- name: "Show Macro editor by default",
- hint: "Shows the code editor by default instead of the default editor",
- default: true,
- type: Boolean,
- scope: "client",
- config: true,
- });
- });
-
- // Item Macro Compat
- Hooks.once("init", async function () {
- // only trigger if item macro is active and the compatible version isn't V9 yet
- if (!game.modules.get("itemacro")?.active || game.modules.get("itemacro")?.data?.compatibleCoreVersion?.match(/\./g)?.length !== 2) return;
-
- let classLoc = game.modules.get("itemacro")?.esmodules?.[0]?.replace("hooks", "ItemMacroConfig");
- if (classLoc) {
- let theClass = (await import(window.location.origin + "/" + classLoc)).ItemMacroConfig;
- theClass.prototype._render = AceMacroConfig.prototype._render;
- theClass.prototype.close = AceMacroConfig.prototype.close;
- }
- });
|