Skip to:
Content

bbPress.org

Ticket #2646: 0001-fix-threaded-replies-with-tinyMCE.patch

File 0001-fix-threaded-replies-with-tinyMCE.patch, 4.0 KB (added by chherbst, 6 years ago)
  • templates/default/js/reply.js

    From 2042216d562286fb01395dfe1ac42bc152adc05e Mon Sep 17 00:00:00 2001
    From: Christoph Herbst <chris.p.herbst@gmail.com>
    Date: Thu, 30 Aug 2018 12:28:08 +0200
    Subject: [PATCH] fix threaded replies with tinyMCE
    
    solution adopted from https://bbpress.trac.wordpress.org/ticket/2646#comment:3
    ---
     templates/default/js/reply.js | 74 +++++++++++++++++++++++++++++++----
     1 file changed, 66 insertions(+), 8 deletions(-)
    
    diff --git a/templates/default/js/reply.js b/templates/default/js/reply.js
    index d41957b..5adb0d8 100644
    a b  
    11addReply = {
    22        moveForm : function(replyId, parentId, respondId, postId) {
    3                 var t = this, div, reply = t.I(replyId), respond = t.I(respondId), cancel = t.I('bbp-cancel-reply-to-link'), parent = t.I('bbp_reply_to'), post = t.I('bbp_topic_id');
     3        var t = this;
     4
     5        // Remove editor if necessary
     6        t.red();
     7
     8        var div,
     9            reply = t.I(replyId),
     10            respond = t.I(respondId),
     11            cancel = t.I('bbp-cancel-reply-to-link'),
     12            parent = t.I('bbp_reply_to'), post = t.I('bbp_topic_id');
    413
    514                if ( ! reply || ! respond || ! cancel || ! parent )
    615                        return;
    addReply = { 
    1524                        respond.parentNode.insertBefore(div, respond);
    1625                }
    1726
    18                 reply.parentNode.appendChild(respond);
     27        reply.parentNode.insertBefore(respond, reply.nextSibling);
     28
    1929                if ( post && postId )
    2030                        post.value = postId;
    2131                parent.value = parentId;
    2232                cancel.style.display = '';
    2333
     34        // Add editor if necessary
     35        t.aed();
     36
    2437                cancel.onclick = function() {
    25                         var t = addReply, temp = t.I('bbp-temp-form-div'), respond = t.I(t.respondId);
     38            var t = addReply;
     39
     40            // Remove editor if necessary
     41            t.red();
     42
     43            var temp = t.I('bbp-temp-form-div'), respond = t.I(t.respondId);
    2644
    2745                        if ( ! temp || ! respond )
    2846                                return;
    addReply = { 
    3250                        temp.parentNode.removeChild(temp);
    3351                        this.style.display = 'none';
    3452                        this.onclick = null;
    35                         return false;
    36                 }
    3753
    38                 try { t.I('bbp_reply_content').focus(); }
    39                 catch(e) {}
     54            // Add editor if necessary
     55            t.aed();
    4056
    4157                return false;
    42         },
     58        };
    4359
     60        return false;
     61    },
    4462        I : function(e) {
    4563                return document.getElementById(e);
     64    },
     65    red : function() {
     66        /* TinyMCE defined means wp_editor has Visual or both Visual and HTML/Text editors enabled
     67         * If editor is in HTML editor only mode our work here is unnecessary
     68         */
     69        if(typeof(tinyMCE) == 'undefined')
     70            return;
     71
     72        var tmce = tinyMCE.get('bbp_reply_content');
     73        if (tmce && !tmce.isHidden()){
     74            /* Remove TinyMCE from textarea if necessary
     75             * and mark the current editor tab as Visual
     76             */
     77            this.mode = 'tmce';
     78            tmce.remove();
     79        }else{
     80            /* Html editor can be moved in DOM without removal
     81             * so we just mark current editor tab as Html
     82             */
     83            this.mode = 'html';
     84        }
     85    },
     86    aed : function() {
     87        if(typeof(tinyMCE) == 'undefined')
     88            return;
     89
     90        if (this.mode == 'tmce'){
     91            /* Add Visual editor to textarea using code from wp-includes/js/editor.js
     92             * enqueued by _WP_Editors PHP class whenever Visual editor is enabled.
     93             * This code switches to Visual editor with id 'bbp_reply_content'
     94             */
     95            switchEditors.go('bbp_reply_content', 'tmce');
     96        }else if (this.mode == 'html'){
     97            /* Add HTML/Text editor to textarea using code from wp-includes/js/editor.js
     98             * enqueued by _WP_Editors PHP class whenever Visual editor is enabled.
     99             * If Visual editor is not enabled 'return' above makes this code off limits.
     100             * This code switches to HTML editor with id 'bbp_reply_content'
     101             */
     102            switchEditors.go('bbp_reply_content', 'html');
    46103        }
    47104}
     105};