Fixed code bbcode
authorAlexander Ebert <ebert@woltlab.com>
Tue, 24 Feb 2015 08:38:24 +0000 (09:38 +0100)
committerAlexander Ebert <ebert@woltlab.com>
Tue, 24 Feb 2015 08:38:24 +0000 (09:38 +0100)
wcfsetup/install/files/js/3rdParty/redactor/plugins/wbbcode.js

index eb1a6c905d6bd71ce136d18940cce3f7cbc7859f..43f0f8b9e2ee8fb82f51e11cccc856f0a744d0fc 100644 (file)
@@ -121,6 +121,7 @@ RedactorPlugins.wbbcode = function() {
                                        this.$textarea.val(this.wbbcode.convertToHtml(this.$textarea.val()));
                                        this.code.offset = this.$textarea.val().length;
                                        this.code.showVisual();
+                                       this.wbbcode.fixCodeBBCode();
                                        this.wbbcode.fixBlockLevelElements();
                                        this.wutil.selectionEndOfEditor();
                                        this.wbbcode.observeQuotes();
@@ -2007,6 +2008,7 @@ RedactorPlugins.wbbcode = function() {
                                        // set caret after code listing
                                        var $codeBox = this.$editor.find('.codeBox:not(.jsRedactorCodeBox)');
                                        
+                                       this.wbbcode.fixCodeBBCode($codeBox[0]);
                                        this.wbbcode.observeCodeListings();
                                        this.wbbcode.fixBlockLevelElements();
                                        
@@ -2090,6 +2092,35 @@ RedactorPlugins.wbbcode = function() {
                        }
                },
                
+               /**
+                * Fixes the code bbcode.
+                * 
+                * @param       Element         codeBox
+                * @returns
+                */
+               fixCodeBBCode: function(codeBox) {
+                       if (!codeBox) {
+                               var $codeBoxes = this.$editor[0].querySelectorAll('div.codeBox');
+                               for (var $i = 0, $length = $codeBoxes.length; $i < $length; $i++) {
+                                       this.wbbcode.fixCodeBBCode($codeBoxes[$i]);
+                               }
+                               
+                               return;
+                       }
+                       
+                       codeBox = codeBox[0] || codeBox;
+                       
+                       // sometimes the inner div is missing
+                       if (codeBox.children.length > 1) {
+                               var $container = document.createElement('div');
+                               codeBox.insertBefore($container, codeBox.firstChild);
+                               
+                               while ($container.nextElementSibling) {
+                                       $container.appendChild($container.nextElementSibling);
+                               }
+                       }
+               },
+               
                /**
                 * Ensures that there is a paragraph in front of each block-level element because you cannot click in between two of them.
                 */