// Package htmlcheck is used for parsing HTML and returning // HTML compatibility errors and warnings package htmlcheck import ( "embed" "encoding/json" "regexp" ) //go:embed caniemail-data.json var embeddedFS embed.FS var ( cie = CanIEmail{} noteMatch = regexp.MustCompile(` #(\d)+$`) // LimitFamilies will limit results to families if set LimitFamilies = []string{} // LimitPlatforms will limit results to platforms if set LimitPlatforms = []string{} // LimitClients will limit results to clients if set LimitClients = []string{} ) // CanIEmail struct for JSON data type CanIEmail struct { APIVersion string `json:"api_version"` LastUpdateDate string `json:"last_update_date"` // NiceNames map[string]string `json:"last_update_date"` NiceNames struct { Family map[string]string `json:"family"` Platform map[string]string `json:"platform"` Support map[string]string `json:"support"` Category map[string]string `json:"category"` } `json:"nicenames"` Data []JSONResult `json:"data"` } // JSONResult struct for CanIEmail Data type JSONResult struct { Slug string `json:"slug"` Title string `json:"title"` Description string `json:"description"` URL string `json:"url"` Category string `json:"category"` Tags []string `json:"tags"` Keywords string `json:"keywords"` LastTestDate string `json:"last_test_date"` TestURL string `json:"test_url"` TestResultsURL string `json:"test_results_url"` Stats map[string]interface{} `json:"stats"` Notes string `json:"notes"` NotesByNumber map[string]string `json:"notes_by_num"` } // Load the JSON data func loadJSONData() error { if cie.APIVersion != "" { return nil } b, err := embeddedFS.ReadFile("caniemail-data.json") if err != nil { return err } cie = CanIEmail{} return json.Unmarshal(b, &cie) }