• Replacing a text string to execute JS code directly

    From Nightfox@VERT/DIGDIST to Digital Man on Wed Jan 29 12:39:52 2025
    Hi DM,

    In the strings from text.dat, I know you can use @EXEC:..@ to have it run a JS or Baja module, but is there a way to have it directly execute a block of JS code instead of executing a file? In my most recent update to DDMsgReader, it replaces the AreYouThere string with an empty string so that the contents of the screen aren't affected, but I was also thinking of having it execute some JS code so that I'd have some more control on where the string is displayed, etc. I could have it execute a separate .js with @EXEC@, but I'm not sure I'd want to add a separate .js just for that. I'm wondering if there's a way to have it directly execute a block of JS code when used with bbs.replace_text()?

    Nightfox

    ---
    þ Synchronet þ Digital Distortion: digitaldistortionbbs.com
  • From Digital Man@VERT to Nightfox on Wed Jan 29 13:15:38 2025
    Re: Replacing a text string to execute JS code directly
    By: Nightfox to Digital Man on Wed Jan 29 2025 12:39 pm

    Hi DM,

    In the strings from text.dat, I know you can use @exec:..@ to have it run a JS or Baja module, but is there a way to have it directly execute a block of JS code instead of executing a file? In my most recent update to DDMsgReader, it replaces the AreYouThere string with an empty string so that the contents of the screen aren't affected, but I was also thinking of having it execute some JS code so that I'd have some more control on where the string is displayed, etc. I could have it execute a separate .js with @EXEC@, but I'm not sure I'd want to add a separate .js just for that. I'm wondering if there's a way to have it directly execute a block of JS code when used with bbs.replace_text()?

    Not exactly as @-codes are pretty restrictive as to the contents (e.g. no space characters), so it'be pretty hard to put a code block within an @-code. One possibility is to define a JS property with a getter function and then you can invoke that getter function with the JS:propname @-code: https://wiki.synchro.net/custom:atcodes#external_content
    --
    digital man (rob)

    Synchronet/BBS Terminology Definition #45:
    IMAP = Internet Message Access Protocol
    Norco, CA WX: 57.0øF, 60.0% humidity, 5 mph W wind, 0.00 inches rain/24hrs

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Digital Man@VERT to Nightfox on Wed Jan 29 14:43:52 2025
    Re: Replacing a text string to execute JS code directly
    By: Digital Man to Nightfox on Wed Jan 29 2025 01:15 pm

    Re: Replacing a text string to execute JS code directly
    By: Nightfox to Digital Man on Wed Jan 29 2025 12:39 pm

    Hi DM,

    In the strings from text.dat, I know you can use @exec:..@ to have it run a JS or Baja module, but is there a way to have it directly execute a block of JS code instead of executing a file? In my most recent update to DDMsgReader, it replaces the AreYouThere string with an empty string so that the contents of the screen aren't affected, but I was also thinking of having it execute some JS code so that I'd have some more control on where the string is displayed, etc. I could have it execute a separate .js with @EXEC@, but I'm not sure I'd want to add a separate .js just for that. I'm wondering if there's a way to have it directly execute a block of JS code when used with bbs.replace_text()?

    Not exactly as @-codes are pretty restrictive as to the contents (e.g. no space characters), so it'be pretty hard to put a code block within an @-code. One possibility is to define a JS property with a getter function and then you can invoke that getter function with the JS:propname @-code: https://wiki.synchro.net/custom:atcodes#external_content

    Here's an example:

    Object.defineProperty(js.global, "prop", {
    get : function () {
    return "hello, world";
    }
    });

    bbs.replace_text("Pause", "@JS:" + "prop@"); // @-code split for posting console.pause(); // will invoke the global 'prop' getter function

    In this example, the "prop" getter function could do more stuff and just return an empty string if that's what's desired.
    --
    digital man (rob)

    Synchronet "Real Fact" #37:
    Synchronet's Windows Control Panel is built with Borland C++ Builder
    Norco, CA WX: 59.7øF, 54.0% humidity, 1 mph SW wind, 0.00 inches rain/24hrs
    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net
  • From Nightfox@VERT/DIGDIST to Digital Man on Wed Jan 29 16:20:30 2025
    Re: Replacing a text string to execute JS code directly
    By: Digital Man to Nightfox on Wed Jan 29 2025 02:43 pm

    Not exactly as @-codes are pretty restrictive as to the contents (e.g. no
    space characters), so it'be pretty hard to put a code block within an
    @-code. One possibility is to define a JS property with a getter function
    and then you can invoke that getter function with the JS:propname @-code:
    https://wiki.synchro.net/custom:atcodes#external_content

    Here's an example:

    Object.defineProperty(js.global, "prop", {
    get : function () {
    return "hello, world";
    }
    });

    bbs.replace_text("Pause", "@JS:" + "prop@"); // @-code split for posting console.pause(); // will invoke the global 'prop' getter function

    In this example, the "prop" getter function could do more stuff and just return an empty string if that's what's desired. --

    That's working. Thanks for the response and the example.

    Nightfox

    ---
    þ Synchronet þ Digital Distortion: digitaldistortionbbs.com