Replies to post hidden in default theme



  • I have recently installed NodeBB 1.12.0 with default theme. When a user replies to a specific post, the reply is by default hidden below this post (one has to click to view it), while it appears as an ordinary reply to the topic below.

    Is it possible to configure NodeBB (e.g. by modifying the theme template etc.) to get the following behaviour:

    1. The replies to a post appear by default below the relevant post (as now after the click)
    2. These replies do not appear for the second time as ordinary replies later in the thread

    I would be grateful for a hint..


  • Global Moderator

    No. NodeBB chose a flat topic structure long ago and this is unlikely to change. The replies expanding list below a post is nothing more than a convenience.



  • Thanks. It is a pity.

    But just in case I would try to attempt some hack. I now saw that the html element which loads the replies when clicked has an attribute component="post/replies/open". I guess that clicking runs some javascript function which loads the replies. Could you indicate where is this javascript function located?

    Maybe I could then add some custom javascript to activate this function automatically on page load?


  • Staff Admin

    The relevant code is here



  • I just managed to make a quick hack which achieves the effect that I wanted. I added the following to the Custom Javascript tab in ACP:

    function showreplies() {
        $('li[component="post"]').has('a[component="post/parent"]').addClass('hidden');
        $('[component="post/replies/open"]').click();
    }
    
    function noreply(event, data){
        if(data.posts.length==1 && data.posts[0].toPid) { // this is a reply to some post
            var el = $('li[data-pid="'+data.posts[0].pid+'"]'); // newly added post
            if(el.parent('div[component="post/replies"]').length===0){  // added as a standalone post
                el.addClass('hidden');
            }
        }
        $('div[component="post/replies"]').find('a[component="post/reply"], a[component="post/quote"]').addClass('hidden');
    }
    
    $(window).on('action:ajaxify.end', showreplies);
    $(window).on('action:posts.loaded', noreply);
    

    The first line in function showreplies hides those posts which are replies to previous posts, and the second line opens up the replies below the relevant posts. (@baris This was my attempt before I read your answer. Thanks for the pointer to the code! I will try that out).

    I added the handler for action:posts.loaded in order to

    1. Eliminate Reply and Quote buttons for the replies in order not to generate higher levels of nesting (this is ok for me)
    2. After adding a reply to a post, by default it is also added at the end - in order to avoid that I set it to hidden. This does not work so well as the page gets scrolled to the top after that.. - I am not quite sure how to fix it. If I figure it out I'll make an update..

Log in to reply
 

Suggested Topics

| |