wrapImgWithLink warps link to standalone tags.
(urlPrefix string, buf *bytes.Buffer, token html.Token)
| 178 | |
| 179 | // wrapImgWithLink warps link to standalone <img> tags. |
| 180 | func wrapImgWithLink(urlPrefix string, buf *bytes.Buffer, token html.Token) { |
| 181 | // Extract "src" and "alt" attributes |
| 182 | var src, alt string |
| 183 | for i := range token.Attr { |
| 184 | switch token.Attr[i].Key { |
| 185 | case "src": |
| 186 | src = token.Attr[i].Val |
| 187 | case "alt": |
| 188 | alt = token.Attr[i].Val |
| 189 | } |
| 190 | } |
| 191 | |
| 192 | // Skip in case the "src" is empty |
| 193 | if src == "" { |
| 194 | buf.WriteString(token.String()) |
| 195 | return |
| 196 | } |
| 197 | |
| 198 | // Skip in case the "src" is data url |
| 199 | if strings.HasPrefix(src, "data:") { |
| 200 | buf.WriteString(token.String()) |
| 201 | return |
| 202 | } |
| 203 | |
| 204 | // Prepend repository base URL for internal links |
| 205 | needPrepend := !isLink([]byte(src)) |
| 206 | if needPrepend { |
| 207 | urlPrefix = strings.Replace(urlPrefix, "/src/", "/raw/", 1) |
| 208 | if src[0] != '/' { |
| 209 | urlPrefix += "/" |
| 210 | } |
| 211 | } |
| 212 | |
| 213 | buf.WriteString(`<a href="`) |
| 214 | if needPrepend { |
| 215 | buf.WriteString(urlPrefix) |
| 216 | buf.WriteString(src) |
| 217 | } else { |
| 218 | buf.WriteString(src) |
| 219 | } |
| 220 | buf.WriteString(`">`) |
| 221 | |
| 222 | if needPrepend { |
| 223 | src = strings.ReplaceAll(urlPrefix+src, " ", "%20") |
| 224 | buf.WriteString(`<img src="`) |
| 225 | buf.WriteString(src) |
| 226 | buf.WriteString(`"`) |
| 227 | |
| 228 | if len(alt) > 0 { |
| 229 | buf.WriteString(` alt="`) |
| 230 | buf.WriteString(alt) |
| 231 | buf.WriteString(`"`) |
| 232 | } |
| 233 | |
| 234 | buf.WriteString(`>`) |
| 235 | |
| 236 | } else { |
| 237 | buf.WriteString(token.String()) |
no test coverage detected