Skip to content

Adding a banner to chat messages

Tips
  • @DownPW I think this is what you want - let me know

    a1670323-e770-4717-b63e-759832e1b012-image.png

    in this case, the code has to be modified so it looks like the below

    // Chat message banner
    function chatBanner() {
        var roomName = $("h5[component='chat/header/title']").text().trim();
        var bannerContent;
        if (roomName === "Testing 3") {
            bannerContent = '<div id="chatbanner">This message will fire for chat rooms with the title of "Testing 3"</div>';
        } else {
            bannerContent = '<div id="chatbanner">This session is for <strong>private discussion only</strong> between the chosen participants. Please do <strong>not</strong> place support requests here and create a <a href="#" onclick="app.newTopic();">new topic</a> instead.</div>';
        }
        var chatMessagesContainer = $('[component="chat/system-message"]:last-of-type');
        var existingMessages = $('[component="chat/message"]');
    
        if (existingMessages.length === 0) {
            // If there are no messages, append the banner to the messages container
            chatMessagesContainer.first().after(bannerContent);
        } else {
            // If there are messages, add the banner after the last message
            existingMessages.last().after(bannerContent);
        }
    }
    
    $(window).on('action:chat.loaded', function(data) {
        $(document).ready(function() {
            chatBanner()
        });
    });
    

    This will place the banner after the last system message and before any of the messages themselves. If there are existing messages in the room, the banner will be placed at the footer of the last message so it is seen each time.

    484a7ebb-8246-4a44-8227-b0ab0f42ae56-image.png

  • Thanks Mark, you are a champion 🙂

    Test this code ASAP

  • I have tested now this last code, It’s clearly better, Thnks you again.
    Just one things mark @phenomlab, the banner don’t appear if there is empty (no message) :

    f7d5e292-9139-4efa-a3b4-f13e60171e48-image.png

  • @DownPW Does it appear if you reload the page?

  • @DownPW Very odd - I see this on your DEV server

    3d34b97b-f793-400f-9f36-e37438c43ea3-image.png

  • It’s because you have joined the public chat and so we have a system message. (Phenomlab as joined the room…)

    If you are the creator of the room, no joined her and 0 message (user and system message), banner don’t appear but it’s not very serious

    image.png

  • @DownPW Can you create another ? I should be able to get this to work…

  • ok, I recreated the "“Support” lounge

  • @DownPW Can you create a new room? There are events in the old one which will trigger the message

  • ok, no problem

  • @DownPW I can’t replicate this issue. Each time I access the room, it will add a system event which causes the JS to trigger

    b9c530f9-7d93-4d11-9ae0-66938e5776e0-image.png

  • hmm I think because you have not create the room like me but like I said, it’s not very serious

  • @DownPW Nope. I get the same if I create the room

    323977da-f3c4-4506-9104-531fd6d4f228-image.png

  • Here’s a small modification to the chatBanner function that will place the message just above the composer/reply component meaning it is pinned at the bottom and always in view as a reminder. I’ve made this change to support the threadedChat I’m currently developing

    // Chat message banner
    function chatBanner() {
        var roomName = $("h5[component='chat/header/title']").text().trim();
        var bannerContent;
        if (roomName === "Testing 3") {
            bannerContent = '<div id="chatbanner">This message will fire for chat rooms with the title of "Testing 3"</div>';
        } else {
            bannerContent = '<div id="chatbanner">This session is for <strong>private discussion only</strong> between the chosen participants. Please do <strong>not</strong> place support requests here and create a <a href="#" onclick="app.newTopic();">new topic</a> instead.</div>';
        }
        var chatMessagesContainer = $('[component="chat/system-message"]:last-of-type');
        //var existingMessages = $('[component="chat/message"]');
        var existingMessages = $('[component="chat/composer"]');   
        if (existingMessages.length === 0) {
            // If there are no messages, append the banner to the messages container
            chatMessagesContainer.first().after(bannerContent);
        } else {
            // If there are messages, add the banner after the last message
           // existingMessages.last().after(bannerContent);
           existingMessages.before(bannerContent);
        }
    }
    

    There are only two changes here:

    var existingMessages = $('[component="chat/message"]');
    

    becomes

    var existingMessages = $('[component="chat/composer"]');
    

    and

    existingMessages.last().after(bannerContent);
    

    becomes

    existingMessages.before(bannerContent);
    
  • phenomlabundefined phenomlab referenced this topic on
  • phenomlabundefined phenomlab referenced this topic on