diff --git a/scraping.go b/scraping.go index 67a2cd8..e5aa1cc 100644 --- a/scraping.go +++ b/scraping.go @@ -807,6 +807,21 @@ func getFilterResultConditionHigherThan(filter *Filter) { } } +func getFilterResultUnique(filter *Filter) { + var valueMap map[string]bool + valueMap = make(map[string]bool) + + for _, parent := range filter.Parents { + for _, result := range parent.Results { + valueMap[result] = true + } + } + + for value, _ := range valueMap { + filter.Results = append(filter.Results, value) + } +} + func notifyFilter(filters []Filter, filter *Filter, watch *Watch, web *Web, debug bool) { haveResults := false for _, parent := range filter.Parents { diff --git a/scraping_test.go b/scraping_test.go index f52f853..75f1462 100644 --- a/scraping_test.go +++ b/scraping_test.go @@ -1126,6 +1126,48 @@ func TestFilterHigherThan(t *testing.T) { } } +func TestFilterUnique(t *testing.T) { + var tests = []struct { + Input []string + Want []string + }{ + {[]string{"1"}, []string{"1"}}, + {[]string{"1", "2"}, []string{"1", "2"}}, + {[]string{"1", "2", "3", "4", "5", "6", "7", "8", "9", "1"}, []string{"1", "2", "3", "4", "5", "6", "7", "8", "9"}}, + {[]string{"1", "1"}, []string{"1"}}, + {[]string{}, []string{}}, + } + + for _, test := range tests { + testname := fmt.Sprintf("%s", test.Input) + t.Run(testname, func(t *testing.T) { + filter := Filter{ + Parents: []*Filter{ + { + Results: test.Input, + }, + }, + } + getFilterResultUnique( + &filter, + ) + var wantMap map[string]bool + wantMap = make(map[string]bool) + for _, want := range test.Want { + wantMap[want] = true + } + var resultMap map[string]bool + resultMap = make(map[string]bool) + for _, result := range filter.Results { + resultMap[result] = true + } + if !reflect.DeepEqual(wantMap, resultMap) { + t.Errorf("Got %s, want %s", filter.Results, test.Want) + } + }) + } +} + func TestFilterLua(t *testing.T) { passAll := ` for i,input in pairs(inputs) do diff --git a/static/edit.js b/static/edit.js index 4b311a2..b40d45c 100644 --- a/static/edit.js +++ b/static/edit.js @@ -409,6 +409,35 @@ function onTypeChange(node) { var3Div.appendChild(var3Input); break; } + case "unique": { + console.log("TEST"); + var var1Input = document.createElement("input"); + var1Input.name = "var1"; + var1Input.id = "var1Input"; + var1Input.value = var1Value; + var1Input.classList.add("form-control"); + var1Input.disabled = true; + var1Label.innerHTML = "-"; + var1Input.placeholder = ""; + var1Div.appendChild(var1Input); + var var2Input = document.createElement("input"); + var2Input.name = "var2"; + var2Input.id = "var2Input"; + var2Input.value = var2Value; + var2Input.classList.add("form-control"); + var2Input.disabled = true; + var2Label.innerHTML = "-"; + var2Div.appendChild(var2Input); + var var3Input = document.createElement("input"); + var3Input.name = "var3"; + var3Input.id = "var3Input"; + var3Input.value = var3Value; + var3Input.classList.add("form-control"); + var3Input.disabled = true; + var3Label.innerHTML = "-"; + var3Div.appendChild(var3Input); + break; + } case "condition": { var conditionSelect = document.createElement("select"); conditionSelect.name = "var1"; diff --git a/static/edit.ts b/static/edit.ts index d8a54df..49f885b 100644 --- a/static/edit.ts +++ b/static/edit.ts @@ -400,6 +400,37 @@ function onTypeChange(node: DiagramNode | null = null){ var3Div.appendChild(var3Input); break; } + case "unique": { + console.log("TEST"); + let var1Input = document.createElement("input"); + var1Input.name = "var1"; + var1Input.id = "var1Input"; + var1Input.value = var1Value; + var1Input.classList.add("form-control") + var1Input.disabled = true; + var1Label.innerHTML = "-"; + var1Input.placeholder = ""; + var1Div.appendChild(var1Input); + + let var2Input = document.createElement("input"); + var2Input.name = "var2"; + var2Input.id = "var2Input"; + var2Input.value = var2Value; + var2Input.classList.add("form-control") + var2Input.disabled = true; + var2Label.innerHTML = "-"; + var2Div.appendChild(var2Input); + + let var3Input = document.createElement("input"); + var3Input.name = "var3"; + var3Input.id = "var3Input"; + var3Input.value = var3Value; + var3Input.classList.add("form-control"); + var3Input.disabled = true; + var3Label.innerHTML = "-"; + var3Div.appendChild(var3Input); + break; + } case "condition":{ let conditionSelect = document.createElement("select"); conditionSelect.name = "var1"; diff --git a/templates/watch/edit.html b/templates/watch/edit.html index f22048e..a131fbf 100644 --- a/templates/watch/edit.html +++ b/templates/watch/edit.html @@ -79,6 +79,7 @@ GoWatch Edit {{ .Watch.Name }} + diff --git a/todo.md b/todo.md index 4834f0c..7cf87c7 100644 --- a/todo.md +++ b/todo.md @@ -10,7 +10,6 @@ - trusted proxies in conf? - log things to db for cron runs - comments -- add unique filter - provide template/example watches? - Amazon - NewEgg