Changeset 3847

Show
Ignore:
Timestamp:
06/16/08 12:37:42 (5 months ago)
Author:
jun66j5
Message:

fixed #2139 - newline handling problem.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • tracwysiwygplugin/0.10/tests/testcase.js

    r3414 r3847  
    670670                "head !http://localhost/ !wiki:TracLinks [[BR]]tail" ].join("\n")); 
    671671        }); 
     672 
     673        if (window.getSelection) { 
     674            unit.add("block + br", function() { 
     675                function br() { return element("br"); } 
     676                function br_moz() { return element("br", { "type": "_moz" }); } 
     677                var wikitext = [ 
     678                    "text, br{_moz}", 
     679                    "", 
     680                    "text'', br[[BR]]''", 
     681                    "", 
     682                    "||1,1[[BR]]||||1,3||", 
     683                    "||||2,2[[BR]][[BR]]||", 
     684                    "", 
     685                    " * list, br[[BR]]", 
     686                    " * list, br{_moz}", 
     687                    " * ", 
     688                    "", 
     689                    "text, br[[BR]]" ].join("\n") 
     690                generateWikitext.call(this, 
     691                    fragment( 
     692                        element("p", "text, br{_moz}", br_moz()), 
     693                        element("p", "text", element("i", ", br", br()), br_moz()), 
     694                        element("table", { "class": "wiki" }, 
     695                            element("tbody", 
     696                                element("tr", 
     697                                    element("td", "1,1", br(), br_moz()), 
     698                                    element("td", br_moz()), 
     699                                    element("td", "1,3", br_moz())), 
     700                                element("tr", 
     701                                    element("td", br_moz()), 
     702                                    element("td", "2,2", br(), br(), br_moz())))), 
     703                        element("ul", 
     704                            element("li", "list, br", br()), 
     705                            element("li", "list, br{_moz}", br_moz()), 
     706                            element("li")), 
     707                        element("p", "text, br", br())), 
     708                    wikitext); 
     709                generateFragment.call(this, 
     710                    fragment( 
     711                        element("p", "text, br{_moz}"), 
     712                        element("p", "text", element("i", ", br", br()), br_moz()), 
     713                        element("table", { "class": "wiki" }, 
     714                            element("tbody", 
     715                                element("tr", 
     716                                    element("td", "1,1", br(), br_moz()), 
     717                                    element("td", br_moz()), 
     718                                    element("td", "1,3")), 
     719                                element("tr", 
     720                                    element("td", br_moz()), 
     721                                    element("td", "2,2", br(), br(), br_moz())))), 
     722                        element("ul", 
     723                            element("li", "list, br", br(), br_moz()), 
     724                            element("li", "list, br{_moz}"), 
     725                            element("li", br_moz())), 
     726                        element("p", "text, br", br(), br_moz())), 
     727                    wikitext); 
     728            }); 
     729        } 
     730        else { 
     731            unit.add("block + br", function() { 
     732                function br() { return element("br"); } 
     733                var wikitext = [ 
     734                    "text, br{_moz}", 
     735                    "", 
     736                    "text'', br[[BR]]''", 
     737                    "", 
     738                    "||1,1[[BR]]||||1,3||", 
     739                    "||||2,2[[BR]][[BR]]||", 
     740                    "", 
     741                    " * list, br[[BR]]", 
     742                    " * list, br{_moz}", 
     743                    " * ", 
     744                    "", 
     745                    "text, br[[BR]]" ].join("\n") 
     746                generate.call(this, 
     747                    fragment( 
     748                        element("p", "text, br{_moz}"), 
     749                        element("p", "text", element("i", ", br", br())), 
     750                        element("table", { "class": "wiki" }, 
     751                            element("tbody", 
     752                                element("tr", 
     753                                    element("td", "1,1", br()), 
     754                                    element("td"), 
     755                                    element("td", "1,3")), 
     756                                element("tr", 
     757                                    element("td"), 
     758                                    element("td", "2,2", br(), br())))), 
     759                        element("ul", 
     760                            element("li", "list, br", br()), 
     761                            element("li", "list, br{_moz}"), 
     762                            element("li")), 
     763                        element("p", "text, br", br())), 
     764                    wikitext); 
     765            }); 
     766        } 
    672767 
    673768        unit.add("citation", function() { 
  • tracwysiwygplugin/0.10/tracwysiwyg/htdocs/wysiwyg.js

    r3414 r3847  
    534534    if (fragment.childNodes.length == 0) { 
    535535        var paragraph = d.createElement("p"); 
    536         if (paragraph.addEventListener) { 
    537             paragraph.appendChild(d.createElement("br")); 
    538         } 
     536        this.appendBogusLineBreak(paragraph); 
    539537        fragment.appendChild(paragraph); 
    540538    } 
     
    15271525            else { 
    15281526                list = getSelfOrAncestor(holder, "li"); 
     1527                self.appendBogusLineBreak(list); 
    15291528                container = list.parentNode; 
    15301529            } 
     
    15731572        var h = holder; 
    15741573        var target = getSelfOrAncestor(h, "li"); 
    1575         holder = (target ? target.parentNode : h).parentNode; 
     1574        if (target) { 
     1575            self.appendBogusLineBreak(target); 
     1576            holder = target.parentNode.parentNode; 
     1577        } 
     1578        else { 
     1579            holder = h.parentNode; 
     1580        } 
    15761581        listDepth.pop(); 
    15771582    } 
     
    16461651            if (target != fragment) { 
    16471652                target = getSelfOrAncestor(target, "p"); 
     1653                self.appendBogusLineBreak(target); 
    16481654            } 
    16491655            holder = target.parentNode; 
     
    16701676            h = holder; 
    16711677            tbody = getSelfOrAncestor(h, "tbody"); 
     1678        } 
     1679 
     1680        if (inTableRow) { 
     1681            var cell = getSelfOrAncestor(h, "td"); 
     1682            if (cell) { 
     1683                self.appendBogusLineBreak(cell); 
     1684            } 
    16721685        } 
    16731686 
     
    19381951        } 
    19391952    } 
     1953    closeToFragment(); 
    19401954 
    19411955    return fragment; 
     
    23662380                break; 
    23672381            case "br": 
    2368                 if (node.nextSibling) { 
     2382                if (node.getAttribute("type") != "_moz") { 
    23692383                    var value; 
    23702384                    if (inCodeBlock) { 
     
    26212635 
    26222636if (window.getSelection) { 
     2637    TracWysiwyg.prototype.appendBogusLineBreak = function(element) { 
     2638        var wikiInlineTags = this.wikiInlineTags; 
     2639        var last = element.lastChild; 
     2640        for ( ; ; ) { 
     2641            if (!last) { 
     2642                break; 
     2643            } 
     2644            if (last.nodeType != 1) { 
     2645                return; 
     2646            } 
     2647            var name = last.tagName.toLowerCase(); 
     2648            if (name == "br" && last.getAttribute("type") != "_moz") { 
     2649                break; 
     2650            } 
     2651            if (!(name in wikiInlineTags)) { 
     2652                return; 
     2653            } 
     2654            last = last.lastChild || last.previousSibling; 
     2655        } 
     2656        var br = this.contentDocument.createElement("br"); 
     2657        br.setAttribute("type", "_moz"); 
     2658        element.appendChild(br); 
     2659    }; 
    26232660    TracWysiwyg.prototype.tableHTML = function(id, row, col) { 
    26242661        var html = this._tableHTML(row, col); 
    2625         return html.replace(/<td><\/td>/g, "<td><br /></td>").replace(/<td>/, '<td id="' + id + '">'); 
     2662        return html.replace(/<td><\/td>/g, '<td><br type="_moz" /></td>').replace(/<td>/, '<td id="' + id + '">'); 
    26262663    }; 
    26272664    TracWysiwyg.prototype.insertTableCell = function(row, index) { 
    26282665        var cell = row.insertCell(index); 
    2629         cell.appendChild(this.contentDocument.createElement("br")); 
     2666        this.appendBogusLineBreak(cell); 
    26302667        return cell; 
    26312668    }; 
     
    27872824} 
    27882825else if (document.selection) { 
     2826    TracWysiwyg.prototype.appendBogusLineBreak = function(element) { }; 
    27892827    TracWysiwyg.prototype.tableHTML = function(id, row, col) { 
    27902828        var html = this._tableHTML(row, col); 
     
    30373075} 
    30383076else { 
     3077    TracWysiwyg.prototype.appendBogusLineBreak = function(element) { }; 
    30393078    TracWysiwyg.prototype.insertTableCell = function(row, index) { return null }; 
    30403079    TracWysiwyg.prototype.getFocusNode = function() { return null }; 
  • tracwysiwygplugin/0.11/tests/testcase.js

    r3414 r3847  
    670670                "head !http://localhost/ !wiki:TracLinks [[BR]]tail" ].join("\n")); 
    671671        }); 
     672 
     673        if (window.getSelection) { 
     674            unit.add("block + br", function() { 
     675                function br() { return element("br"); } 
     676                function br_moz() { return element("br", { "type": "_moz" }); } 
     677                var wikitext = [ 
     678                    "text, br{_moz}", 
     679                    "", 
     680                    "text'', br[[BR]]''", 
     681                    "", 
     682                    "||1,1[[BR]]||||1,3||", 
     683                    "||||2,2[[BR]][[BR]]||", 
     684                    "", 
     685                    " * list, br[[BR]]", 
     686                    " * list, br{_moz}", 
     687                    " * ", 
     688                    "", 
     689                    "text, br[[BR]]" ].join("\n") 
     690                generateWikitext.call(this, 
     691                    fragment( 
     692                        element("p", "text, br{_moz}", br_moz()), 
     693                        element("p", "text", element("i", ", br", br()), br_moz()), 
     694                        element("table", { "class": "wiki" }, 
     695                            element("tbody", 
     696                                element("tr", 
     697                                    element("td", "1,1", br(), br_moz()), 
     698                                    element("td", br_moz()), 
     699                                    element("td", "1,3", br_moz())), 
     700                                element("tr", 
     701                                    element("td", br_moz()), 
     702                                    element("td", "2,2", br(), br(), br_moz())))), 
     703                        element("ul", 
     704                            element("li", "list, br", br()), 
     705                            element("li", "list, br{_moz}", br_moz()), 
     706                            element("li")), 
     707                        element("p", "text, br", br())), 
     708                    wikitext); 
     709                generateFragment.call(this, 
     710                    fragment( 
     711                        element("p", "text, br{_moz}"), 
     712                        element("p", "text", element("i", ", br", br()), br_moz()), 
     713                        element("table", { "class": "wiki" }, 
     714                            element("tbody", 
     715                                element("tr", 
     716                                    element("td", "1,1", br(), br_moz()), 
     717                                    element("td", br_moz()), 
     718                                    element("td", "1,3")), 
     719                                element("tr", 
     720                                    element("td", br_moz()), 
     721                                    element("td", "2,2", br(), br(), br_moz())))), 
     722                        element("ul", 
     723                            element("li", "list, br", br(), br_moz()), 
     724                            element("li", "list, br{_moz}"), 
     725                            element("li", br_moz())), 
     726                        element("p", "text, br", br(), br_moz())), 
     727                    wikitext); 
     728            }); 
     729        } 
     730        else { 
     731            unit.add("block + br", function() { 
     732                function br() { return element("br"); } 
     733                var wikitext = [ 
     734                    "text, br{_moz}", 
     735                    "", 
     736                    "text'', br[[BR]]''", 
     737                    "", 
     738                    "||1,1[[BR]]||||1,3||", 
     739                    "||||2,2[[BR]][[BR]]||", 
     740                    "", 
     741                    " * list, br[[BR]]", 
     742                    " * list, br{_moz}", 
     743                    " * ", 
     744                    "", 
     745                    "text, br[[BR]]" ].join("\n") 
     746                generate.call(this, 
     747                    fragment( 
     748                        element("p", "text, br{_moz}"), 
     749                        element("p", "text", element("i", ", br", br())), 
     750                        element("table", { "class": "wiki" }, 
     751                            element("tbody", 
     752                                element("tr", 
     753                                    element("td", "1,1", br()), 
     754                                    element("td"), 
     755                                    element("td", "1,3")), 
     756                                element("tr", 
     757                                    element("td"), 
     758                                    element("td", "2,2", br(), br())))), 
     759                        element("ul", 
     760                            element("li", "list, br", br()), 
     761                            element("li", "list, br{_moz}"), 
     762                            element("li")), 
     763                        element("p", "text, br", br())), 
     764                    wikitext); 
     765            }); 
     766        } 
    672767 
    673768        unit.add("citation", function() { 
  • tracwysiwygplugin/0.11/tracwysiwyg/htdocs/wysiwyg.js

    r3414 r3847  
    534534    if (fragment.childNodes.length == 0) { 
    535535        var paragraph = d.createElement("p"); 
    536         if (paragraph.addEventListener) { 
    537             paragraph.appendChild(d.createElement("br")); 
    538         } 
     536        this.appendBogusLineBreak(paragraph); 
    539537        fragment.appendChild(paragraph); 
    540538    } 
     
    15271525            else { 
    15281526                list = getSelfOrAncestor(holder, "li"); 
     1527                self.appendBogusLineBreak(list); 
    15291528                container = list.parentNode; 
    15301529            } 
     
    15731572        var h = holder; 
    15741573        var target = getSelfOrAncestor(h, "li"); 
    1575         holder = (target ? target.parentNode : h).parentNode; 
     1574        if (target) { 
     1575            self.appendBogusLineBreak(target); 
     1576            holder = target.parentNode.parentNode; 
     1577        } 
     1578        else { 
     1579            holder = h.parentNode; 
     1580        } 
    15761581        listDepth.pop(); 
    15771582    } 
     
    16461651            if (target != fragment) { 
    16471652                target = getSelfOrAncestor(target, "p"); 
     1653                self.appendBogusLineBreak(target); 
    16481654            } 
    16491655            holder = target.parentNode; 
     
    16701676            h = holder; 
    16711677            tbody = getSelfOrAncestor(h, "tbody"); 
     1678        } 
     1679 
     1680        if (inTableRow) { 
     1681            var cell = getSelfOrAncestor(h, "td"); 
     1682            if (cell) { 
     1683                self.appendBogusLineBreak(cell); 
     1684            } 
    16721685        } 
    16731686 
     
    19381951        } 
    19391952    } 
     1953    closeToFragment(); 
    19401954 
    19411955    return fragment; 
     
    23662380                break; 
    23672381            case "br": 
    2368                 if (node.nextSibling) { 
     2382                if (node.getAttribute("type") != "_moz") { 
    23692383                    var value; 
    23702384                    if (inCodeBlock) { 
     
    26212635 
    26222636if (window.getSelection) { 
     2637    TracWysiwyg.prototype.appendBogusLineBreak = function(element) { 
     2638        var wikiInlineTags = this.wikiInlineTags; 
     2639        var last = element.lastChild; 
     2640        for ( ; ; ) { 
     2641            if (!last) { 
     2642                break; 
     2643            } 
     2644            if (last.nodeType != 1) { 
     2645                return; 
     2646            } 
     2647            var name = last.tagName.toLowerCase(); 
     2648            if (name == "br" && last.getAttribute("type") != "_moz") { 
     2649                break; 
     2650            } 
     2651            if (!(name in wikiInlineTags)) { 
     2652                return; 
     2653            } 
     2654            last = last.lastChild || last.previousSibling; 
     2655        } 
     2656        var br = this.contentDocument.createElement("br"); 
     2657        br.setAttribute("type", "_moz"); 
     2658        element.appendChild(br); 
     2659    }; 
    26232660    TracWysiwyg.prototype.tableHTML = function(id, row, col) { 
    26242661        var html = this._tableHTML(row, col); 
    2625         return html.replace(/<td><\/td>/g, "<td><br /></td>").replace(/<td>/, '<td id="' + id + '">'); 
     2662        return html.replace(/<td><\/td>/g, '<td><br type="_moz" /></td>').replace(/<td>/, '<td id="' + id + '">'); 
    26262663    }; 
    26272664    TracWysiwyg.prototype.insertTableCell = function(row, index) { 
    26282665        var cell = row.insertCell(index); 
    2629         cell.appendChild(this.contentDocument.createElement("br")); 
     2666        this.appendBogusLineBreak(cell); 
    26302667        return cell; 
    26312668    }; 
     
    27872824} 
    27882825else if (document.selection) { 
     2826    TracWysiwyg.prototype.appendBogusLineBreak = function(element) { }; 
    27892827    TracWysiwyg.prototype.tableHTML = function(id, row, col) { 
    27902828        var html = this._tableHTML(row, col); 
     
    30373075} 
    30383076else { 
     3077    TracWysiwyg.prototype.appendBogusLineBreak = function(element) { }; 
    30393078    TracWysiwyg.prototype.insertTableCell = function(row, index) { return null }; 
    30403079    TracWysiwyg.prototype.getFocusNode = function() { return null };