mirror of
				https://github.com/taigrr/wtf
				synced 2025-01-18 04:03:14 -08:00 
			
		
		
		
	Have all instances take a function Update the remaining modules to take this into account Numerous smaller refactors to make some widgets work more or less the same
		
			
				
	
	
		
			83 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package git
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"strings"
 | |
| 	"unicode/utf8"
 | |
| )
 | |
| 
 | |
| func (widget *Widget) display() {
 | |
| 	widget.Redraw(widget.content)
 | |
| }
 | |
| 
 | |
| func (widget *Widget) content() (string, string, bool) {
 | |
| 	repoData := widget.currentData()
 | |
| 	if repoData == nil {
 | |
| 		return widget.CommonSettings().Title, " Git repo data is unavailable ", false
 | |
| 	}
 | |
| 
 | |
| 	title := fmt.Sprintf("%s - [green]%s[white]", widget.CommonSettings().Title, repoData.Repository)
 | |
| 
 | |
| 	_, _, width, _ := widget.View.GetRect()
 | |
| 	str := widget.settings.common.SigilStr(len(widget.GitRepos), widget.Idx, width) + "\n"
 | |
| 	str += " [red]Branch[white]\n"
 | |
| 	str += fmt.Sprintf(" %s", repoData.Branch)
 | |
| 	str += "\n"
 | |
| 	str += widget.formatChanges(repoData.ChangedFiles)
 | |
| 	str += "\n"
 | |
| 	str += widget.formatCommits(repoData.Commits)
 | |
| 
 | |
| 	return title, str, false
 | |
| }
 | |
| 
 | |
| func (widget *Widget) formatChanges(data []string) string {
 | |
| 	str := " [red]Changed Files[white]\n"
 | |
| 
 | |
| 	if len(data) == 1 {
 | |
| 		str += " [grey]none[white]\n"
 | |
| 	} else {
 | |
| 		for _, line := range data {
 | |
| 			str += widget.formatChange(line)
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return str
 | |
| }
 | |
| 
 | |
| func (widget *Widget) formatChange(line string) string {
 | |
| 	if len(line) == 0 {
 | |
| 		return ""
 | |
| 	}
 | |
| 
 | |
| 	line = strings.TrimSpace(line)
 | |
| 	firstChar, _ := utf8.DecodeRuneInString(line)
 | |
| 
 | |
| 	// Revisit this and kill the ugly duplication
 | |
| 	switch firstChar {
 | |
| 	case 'A':
 | |
| 		line = strings.Replace(line, "A", "[green]A[white]", 1)
 | |
| 	case 'D':
 | |
| 		line = strings.Replace(line, "D", "[red]D[white]", 1)
 | |
| 	case 'M':
 | |
| 		line = strings.Replace(line, "M", "[yellow]M[white]", 1)
 | |
| 	case 'R':
 | |
| 		line = strings.Replace(line, "R", "[purple]R[white]", 1)
 | |
| 	}
 | |
| 
 | |
| 	return fmt.Sprintf(" %s\n", strings.Replace(line, "\"", "", -1))
 | |
| }
 | |
| 
 | |
| func (widget *Widget) formatCommits(data []string) string {
 | |
| 	str := " [red]Recent Commits[white]\n"
 | |
| 
 | |
| 	for _, line := range data {
 | |
| 		str += widget.formatCommit(line)
 | |
| 	}
 | |
| 
 | |
| 	return str
 | |
| }
 | |
| 
 | |
| func (widget *Widget) formatCommit(line string) string {
 | |
| 	return fmt.Sprintf(" %s\n", strings.Replace(line, "\"", "", -1))
 | |
| }
 |