Fix for Firefox failing to encode square brackets in URLs
authorAlexander Ebert <ebert@woltlab.com>
Tue, 3 Jun 2014 10:57:42 +0000 (12:57 +0200)
committerAlexander Ebert <ebert@woltlab.com>
Tue, 3 Jun 2014 10:57:42 +0000 (12:57 +0200)
wcfsetup/install/files/js/3rdParty/ckeditor/plugins/wbbcode/plugin.js

index b75458831326ff951a9fad7262a227eceb8bca41..0eadb4857e22430cb972ac67623697e8f50f3903 100644 (file)
                        if (ev.data.type == 'html') {
                                var $value = ev.data.dataValue;
                                
-                               // Convert <br> to line breaks.
-                               $value = $value.replace(/<br><\/p>/gi,"\n\n");
-                               $value = $value.replace(/<br>/gi, "\n");
-                               $value = $value.replace(/<\/p>/gi,"\n\n");
-                               $value = $value.replace(/&nbsp;/gi," ");
-                               
-                               // convert div-separated content into new lines
-                               $value = $value.replace(/<div([^>])>/gi, '');
-                               $value = $value.replace(/<\/div>/gi, "\n");
-                               
-                               // convert lists into new lines
-                               $value = $value.replace(/<\/li>/gi, "\n");
-                               // remove html tags
-                               $value = $value.replace(/<[^>]+>/g, '');
-                               
-                               // fix multiple new lines
-                               $value = $value.replace(/\n{3,}/gi,"\n\n");
+                               // check if an URL with square brackets has been pasted in Firefox (Firefox violates the encoding rules)
+                               // see https://bugzilla.mozilla.org/show_bug.cgi?id=473822
+                               if ($.browser.mozilla && $value.match(/^http[\S]+$/i)) {
+                                       $value = $value.replace(/\[([^\]]+)\]=/g, '%5B$1%5D=');
+                               }
+                               else {
+                                       // Convert <br> to line breaks.
+                                       $value = $value.replace(/<br><\/p>/gi,"\n\n");
+                                       $value = $value.replace(/<br>/gi, "\n");
+                                       $value = $value.replace(/<\/p>/gi,"\n\n");
+                                       $value = $value.replace(/&nbsp;/gi," ");
+                                       
+                                       // convert div-separated content into new lines
+                                       $value = $value.replace(/<div([^>])>/gi, '');
+                                       $value = $value.replace(/<\/div>/gi, "\n");
+                                       
+                                       // convert lists into new lines
+                                       $value = $value.replace(/<\/li>/gi, "\n");
+                                       // remove html tags
+                                       $value = $value.replace(/<[^>]+>/g, '');
+                                       
+                                       // fix multiple new lines
+                                       $value = $value.replace(/\n{3,}/gi,"\n\n");
+                               }
                                
                                ev.data.dataValue = $value;