mirror of
				https://github.com/SphericalKat/medium.rip.git
				synced 2025-10-30 18:35:57 +00:00 
			
		
		
		
	fix(markup): escape text before wrapping with markup
Signed-off-by: Sphericalkat <amolele@gmail.com>
This commit is contained in:
		
							parent
							
								
									2eacfa702a
								
							
						
					
					
						commit
						264410c8d7
					
				| @ -2,6 +2,7 @@ package converters | |||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"html" | ||||||
| 	"sort" | 	"sort" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"unicode/utf16" | 	"unicode/utf16" | ||||||
| @ -71,6 +72,10 @@ func ranges(text string, markups []entities.Markup) []RangeWithMarkup { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func ConvertMarkup(text string, markups []entities.Markup) string { | func ConvertMarkup(text string, markups []entities.Markup) string { | ||||||
|  | 	if len(markups) == 0 { | ||||||
|  | 		return html.EscapeString(text) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	var markedUp strings.Builder | 	var markedUp strings.Builder | ||||||
| 	for _, r := range ranges(text, markups) { | 	for _, r := range ranges(text, markups) { | ||||||
| 		// handle utf-16
 | 		// handle utf-16
 | ||||||
| @ -95,18 +100,18 @@ func markupNodeInContainer(child string, markup entities.Markup) string { | |||||||
| 	switch markup.Type { | 	switch markup.Type { | ||||||
| 	case "A": | 	case "A": | ||||||
| 		if markup.Href != nil { | 		if markup.Href != nil { | ||||||
| 			return fmt.Sprintf(`<a href="%s">%s</a>`, *markup.Href, child) | 			return fmt.Sprintf(`<a href="%s">%s</a>`, *markup.Href, html.EscapeString(child)) | ||||||
| 		} else if markup.UserID != nil { | 		} else if markup.UserID != nil { | ||||||
| 			return fmt.Sprintf(`<a href="https://medium.com/u/%s">%s</a>`, markup.UserID, child) | 			return fmt.Sprintf(`<a href="https://medium.com/u/%s">%s</a>`, markup.UserID, html.EscapeString(child)) | ||||||
| 		} | 		} | ||||||
| 	case "CODE": | 	case "CODE": | ||||||
| 		return fmt.Sprintf(`<code>%s</code>`, child) | 		return fmt.Sprintf(`<code>%s</code>`, html.EscapeString(child)) | ||||||
| 	case "EM": | 	case "EM": | ||||||
| 		return fmt.Sprintf(`<em>%s</em>`, child) | 		return fmt.Sprintf(`<em>%s</em>`, html.EscapeString(child)) | ||||||
| 	case "STRONG": | 	case "STRONG": | ||||||
| 		return fmt.Sprintf(`<strong>%s</strong>`, child) | 		return fmt.Sprintf(`<strong>%s</strong>`, html.EscapeString(child)) | ||||||
| 	default: | 	default: | ||||||
| 		return fmt.Sprintf(`<code>%s</code>`, child) | 		return fmt.Sprintf(`<code>%s</code>`, html.EscapeString(child)) | ||||||
| 	} | 	} | ||||||
| 	return child | 	return html.EscapeString(child) | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| package converters | package converters | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"encoding/json" | ||||||
| 	"testing" | 	"testing" | ||||||
| 
 | 
 | ||||||
| 	"github.com/medium.rip/pkg/entities" | 	"github.com/medium.rip/pkg/entities" | ||||||
| @ -58,20 +59,32 @@ func TestRanges(t *testing.T) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func TestConvert(t *testing.T) { | func TestConvert(t *testing.T) { | ||||||
| 	markup := ConvertMarkup("strong and emphasized only", []entities.Markup{ | 	jsonData := `{ | ||||||
|  | 		"name": "254a", | ||||||
|  | 		"text": "Early Flush prevents subsequent changes to the headers (e.g to redirect or change the status code). In the React + NodeJS world, it’s common to delegate redirects and error throwing to a React app rendered after the data has been fetched. This won’t work if you’ve already sent an early <head> tag and a 200 OK status.", | ||||||
|  | 		"type": "P", | ||||||
|  | 		"href": null, | ||||||
|  | 		"layout": null, | ||||||
|  | 		"markups": [ | ||||||
| 			{ | 			{ | ||||||
| 			Type:  "STRONG", | 				"title": null, | ||||||
| 			Start: 0, | 				"type": "CODE", | ||||||
| 			End:   10, | 				"href": null, | ||||||
| 		}, | 				"userId": null, | ||||||
| 		{ | 				"start": 287, | ||||||
| 			Type:  "EM", | 				"end": 293, | ||||||
| 			Start: 7, | 				"anchorType": null | ||||||
| 			End:   21, | 			} | ||||||
| 		}, | 		], | ||||||
| 	}) | 		"iframe": null, | ||||||
|  | 		"metadata": null | ||||||
|  | 	}` | ||||||
|  | 	p := new(entities.Paragraph) | ||||||
|  | 	_ = json.Unmarshal([]byte(jsonData), p) | ||||||
| 
 | 
 | ||||||
| 	if markup != "<strong>strong </strong><em><strong>and</strong></em><em> emphasized</em> only" { | 	ConvertMarkup(p.Text, p.Markups) | ||||||
| 		t.Errorf("Expected markup to be <strong>strong </strong><em><strong>and</strong></em><em> emphasized</em> only, got %s", markup) | 
 | ||||||
| 	} | 	// if markup != "<strong>strong </strong><em><strong>and</strong></em><em> emphasized</em> only" {
 | ||||||
|  | 	// 	t.Errorf("Expected markup to be <strong>strong </strong><em><strong>and</strong></em><em> emphasized</em> only, got %s", markup)
 | ||||||
|  | 	// }
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -107,6 +107,9 @@ func ConvertParagraphs(paragraphs []entities.Paragraph) string { | |||||||
| 			ps.WriteString(fmt.Sprintf("<ul>%s</ul>", listItems)) | 			ps.WriteString(fmt.Sprintf("<ul>%s</ul>", listItems)) | ||||||
| 		case "P": | 		case "P": | ||||||
| 			children := ConvertMarkup(p.Text, p.Markups) | 			children := ConvertMarkup(p.Text, p.Markups) | ||||||
|  | 			if p.Name == "ca5b" { | ||||||
|  | 				fmt.Println(children) | ||||||
|  | 			} | ||||||
| 			ps.WriteString(fmt.Sprintf("<p>%s</p>", children)) | 			ps.WriteString(fmt.Sprintf("<p>%s</p>", children)) | ||||||
| 		case "PRE": | 		case "PRE": | ||||||
| 			children := ConvertMarkup(p.Text, p.Markups) | 			children := ConvertMarkup(p.Text, p.Markups) | ||||||
| @ -154,9 +157,6 @@ func convertUli(ps []entities.Paragraph) (string, int) { | |||||||
| 
 | 
 | ||||||
| 	for _, p := range ps { | 	for _, p := range ps { | ||||||
| 		if p.Type == "ULI" { | 		if p.Type == "ULI" { | ||||||
| 			if p.Text == "Rename the example.env to .env." { |  | ||||||
| 				fmt.Println("HERE") |  | ||||||
| 			} |  | ||||||
| 			children := ConvertMarkup(p.Text, p.Markups) | 			children := ConvertMarkup(p.Text, p.Markups) | ||||||
| 			sb.WriteString(fmt.Sprintf("<li>%s</li>", children)) | 			sb.WriteString(fmt.Sprintf("<li>%s</li>", children)) | ||||||
| 			count++ | 			count++ | ||||||
|  | |||||||
							
								
								
									
										2222
									
								
								response.json
									
									
									
									
									
								
							
							
						
						
									
										2222
									
								
								response.json
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user