provided a favicon to use.
Instead of prefering to use WARC items (or prefering to download as it
was before #202), we prefer to use the most suited favicon.
Potential favicons are sourced from main HTML page.
All favicons are retrieved either from the WARC or downloaded to inspect
their sizes.
We use the most suited one (i.e. 48x48 or bigger if possible or the
biggest one).
We still fallback to default ZIM illustration if no favicon is found, to
avoid loosing all time spent crawling the website.
- pass the CSS as stuff to be rendered (we need to compute the relative
ZIM path based on current page location)
- directly create a ZIM record instead of faking a WARC record
(simplification and less error-prone)
- store custom CSS at `_zim_static/custom.css` instead of magic URL `warc2zim.kiwix.app/custom.css`
Now theat url rewriting error are handled at a higher level, we do not
need a special handling for hostname rewriting issues, all URL rewriting
issues have to be handled the same
Algorithm (and tests) are greatly inspired (to not say copied) from
webrecorder/wabac.js/blob/8cc4755/src/rewrite/jsrewriter.js
(and webrecorder/wabac.js/blob/8cc4755/test/rewriteJS.js)
We don't use it and we agree to not store them (at least for now).
If we need them, we will see how to readd them.
Converted `test/data/video-vimeo.warc.gz` goes from :
```
A/404.html
A/index.html
A/load.js
A/sw.js
A/topFrame.html
H/f.vimeocdn.com/js_opt/modules/utils/vuid.min.js
H/f.vimeocdn.com/p/3.45.3/css/player.css
H/f.vimeocdn.com/p/3.45.3/js/player.js
H/i.vimeocdn.com/player/354746.png?mw=200&mh=200
H/i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d.jpg?mw=80&q=85
H/i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d?mw=1280&mh=720&q=70
H/oembed.link/favicon.ico
H/oembed.link/https://vimeo.com/347119375
H/player.vimeo.com/video/347119375?h=1699409fe2&app_id=122963
H/vimeo-cdn.fuzzy.replayweb.page/01/4423/13/347119375/1398505169.mp4
f.vimeocdn.com/js_opt/modules/utils/vuid.min.js
f.vimeocdn.com/p/3.45.3/css/player.css
f.vimeocdn.com/p/3.45.3/js/player.js
i.vimeocdn.com/player/354746.png?mw=200&mh=200
i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d.jpg?mw=80&q=85
i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d?mw=1280&mh=720&q=70
oembed.link/favicon.ico
oembed.link/https://vimeo.com/347119375
player.vimeo.com/video/347119375?h=1699409fe2&app_id=122963
vimeo-cdn.fuzzy.replayweb.page/01/4423/13/347119375/1398505169.mp4
vimeo.fuzzy.replayweb.page/video/347119375
```
to:
```
A/404.html
A/index.html
A/load.js
A/sw.js
A/topFrame.html
f.vimeocdn.com/js_opt/modules/utils/vuid.min.js
f.vimeocdn.com/p/3.45.3/css/player.css
f.vimeocdn.com/p/3.45.3/js/player.js
i.vimeocdn.com/player/354746.png?mw=200&mh=200
i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d.jpg?mw=80&q=85
i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d?mw=1280&mh=720&q=70
oembed.link/favicon.ico
oembed.link/https://vimeo.com/347119375
player.vimeo.com/video/347119375?h=1699409fe2&app_id=122963
vimeo-cdn.fuzzy.replayweb.page/01/4423/13/347119375/1398505169.mp4
vimeo.fuzzy.replayweb.page/video/347119375
```
Before, we were storing a entry using its full path and potentially
create a redirect entry (using reduced path) pointing to the full path
entry.
Now, path reduction is part of normalization and so we directly store
entries using their (potentially) reduced path.
Converted `test/data/video-vimeo.warc.gz` goes from :
```
A/404.html
A/index.html
A/load.js
A/sw.js
A/topFrame.html
H/f.vimeocdn.com/js_opt/modules/utils/vuid.min.js
H/f.vimeocdn.com/p/3.45.3/css/player.css
H/f.vimeocdn.com/p/3.45.3/js/player.js
H/i.vimeocdn.com/player/354746.png?mw=200&mh=200
H/i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d.jpg?mw=80&q=85
H/i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d?mw=1280&mh=720&q=70
H/oembed.link/favicon.ico
H/oembed.link/https://vimeo.com/347119375
H/player.vimeo.com/video/347119375?h=1699409fe2&app_id=122963
H/vod-progressive.akamaized.net/exp=1635528595~acl=%2Fvimeo-prod-skyfire-std-us%2F01%2F4423%2F13%2F347119375%2F1398505169.mp4~hmac=27c31f1990aab5e5429f7f7db5b2dcbcf8d2f5c92184d53102da36920d33d53e/vimeo-prod-skyfire-std-us/01/4423/13/347119375/1398505169.mp4
f.vimeocdn.com/js_opt/modules/utils/vuid.min.js
f.vimeocdn.com/p/3.45.3/css/player.css
f.vimeocdn.com/p/3.45.3/js/player.js
i.vimeocdn.com/player/354746.png?mw=200&mh=200
i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d.jpg?mw=80&q=85
i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d?mw=1280&mh=720&q=70
oembed.link/favicon.ico
oembed.link/https://vimeo.com/347119375
player.vimeo.com/video/347119375?h=1699409fe2&app_id=122963
vimeo-cdn.fuzzy.replayweb.page/01/4423/13/347119375/1398505169.mp4
vimeo.fuzzy.replayweb.page/video/347119375
vod-progressive.akamaized.net/exp=1635528595~acl=%2Fvimeo-prod-skyfire-std-us%2F01%2F4423%2F13%2F347119375%2F1398505169.mp4~hmac=27c31f1990aab5e5429f7f7db5b2dcbcf8d2f5c92184d53102da36920d33d53e/vimeo-prod-skyfire-std-us/01/4423/13/347119375/1398505169.mp4
```
to :
```
A/404.html
A/index.html
A/load.js
A/sw.js
A/topFrame.html
H/f.vimeocdn.com/js_opt/modules/utils/vuid.min.js
H/f.vimeocdn.com/p/3.45.3/css/player.css
H/f.vimeocdn.com/p/3.45.3/js/player.js
H/i.vimeocdn.com/player/354746.png?mw=200&mh=200
H/i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d.jpg?mw=80&q=85
H/i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d?mw=1280&mh=720&q=70
H/oembed.link/favicon.ico
H/oembed.link/https://vimeo.com/347119375
H/player.vimeo.com/video/347119375?h=1699409fe2&app_id=122963
H/vimeo-cdn.fuzzy.replayweb.page/01/4423/13/347119375/1398505169.mp4
f.vimeocdn.com/js_opt/modules/utils/vuid.min.js
f.vimeocdn.com/p/3.45.3/css/player.css
f.vimeocdn.com/p/3.45.3/js/player.js
i.vimeocdn.com/player/354746.png?mw=200&mh=200
i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d.jpg?mw=80&q=85
i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d?mw=1280&mh=720&q=70
oembed.link/favicon.ico
oembed.link/https://vimeo.com/347119375
player.vimeo.com/video/347119375?h=1699409fe2&app_id=122963
vimeo-cdn.fuzzy.replayweb.page/01/4423/13/347119375/1398505169.mp4
vimeo.fuzzy.replayweb.page/video/347119375
```
Notice that `vod-progressive.akamaized.net` is not present.
It is "replaced" by
`vimeo-cdn.fuzzy.replayweb.page/01/4423/13/347119375/1398505169.mp4`
which is now a plain entry instead of a redirect to
`vod-progressive.akamaized.net[...]`.
Properly define how we store entries in zim file.
We introduce `normalize` helper function class in place of `canonicalize`.
We work on normalization on converter level. So we path the path to the
items instead of letting them call `normalize`.
Converted `test/data/video-vimeo.warc.gz` to zim was containing :
```
A/404.html
A/f.vimeocdn.com/js_opt/modules/utils/vuid.min.js
A/f.vimeocdn.com/p/3.45.3/css/player.css
A/f.vimeocdn.com/p/3.45.3/js/player.js
A/i.vimeocdn.com/player/354746.png?mw=200&mh=200
A/i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d.jpg?mw=80&q=85
A/i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d?mw=1280&mh=720&q=70
A/index.html
A/load.js
A/oembed.link/favicon.ico
A/oembed.link/https://vimeo.com/347119375
A/player.vimeo.com/video/347119375?h=1699409fe2&app_id=122963
A/sw.js
A/topFrame.html
A/vod-progressive.akamaized.net/exp=1635528595~acl=%2Fvimeo-prod-skyfire-std-us%2F01%2F4423%2F13%2F347119375%2F1398505169.mp4~hmac=27c31f1990aab5e5429f7f7db5b2dcbcf8d2f5c92184d53102da36920d33d53e/vimeo-prod-skyfire-std-us/01/4423/13/347119375/1398505169.mp4
H/f.vimeocdn.com/js_opt/modules/utils/vuid.min.js
H/f.vimeocdn.com/p/3.45.3/css/player.css
H/f.vimeocdn.com/p/3.45.3/js/player.js
H/i.vimeocdn.com/player/354746.png?mw=200&mh=200
H/i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d.jpg?mw=80&q=85
H/i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d?mw=1280&mh=720&q=70
H/oembed.link/favicon.ico
H/oembed.link/https://vimeo.com/347119375
H/player.vimeo.com/video/347119375?h=1699409fe2&app_id=122963
H/vimeo-cdn.fuzzy.replayweb.page/01/4423/13/347119375/1398505169.mp4
H/vimeo.fuzzy.replayweb.page/video/347119375
H/vod-progressive.akamaized.net/exp=1635528595~acl=%2Fvimeo-prod-skyfire-std-us%2F01%2F4423%2F13%2F347119375%2F1398505169.mp4~hmac=27c31f1990aab5e5429f7f7db5b2dcbcf8d2f5c92184d53102da36920d33d53e/vimeo-prod-skyfire-std-us/01/4423/13/347119375/1398505169.mp4
```
With this change it contains:
```
A/404.html
A/index.html
A/load.js
A/sw.js
A/topFrame.html
H/f.vimeocdn.com/js_opt/modules/utils/vuid.min.js
H/f.vimeocdn.com/p/3.45.3/css/player.css
H/f.vimeocdn.com/p/3.45.3/js/player.js
H/i.vimeocdn.com/player/354746.png?mw=200&mh=200
H/i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d.jpg?mw=80&q=85
H/i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d?mw=1280&mh=720&q=70
H/oembed.link/favicon.ico
H/oembed.link/https://vimeo.com/347119375
H/player.vimeo.com/video/347119375?h=1699409fe2&app_id=122963
H/vod-progressive.akamaized.net/exp=1635528595~acl=%2Fvimeo-prod-skyfire-std-us%2F01%2F4423%2F13%2F347119375%2F1398505169.mp4~hmac=27c31f1990aab5e5429f7f7db5b2dcbcf8d2f5c92184d53102da36920d33d53e/vimeo-prod-skyfire-std-us/01/4423/13/347119375/1398505169.mp4
f.vimeocdn.com/js_opt/modules/utils/vuid.min.js
f.vimeocdn.com/p/3.45.3/css/player.css
f.vimeocdn.com/p/3.45.3/js/player.js
i.vimeocdn.com/player/354746.png?mw=200&mh=200
i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d.jpg?mw=80&q=85
i.vimeocdn.com/video/797382244-0106ae13e902e09d0f02d8f404fa80581f38d1b8b7846b3f8e87ef391ffb8c99-d?mw=1280&mh=720&q=70
oembed.link/favicon.ico
oembed.link/https://vimeo.com/347119375
player.vimeo.com/video/347119375?h=1699409fe2&app_id=122963
vimeo-cdn.fuzzy.replayweb.page/01/4423/13/347119375/1398505169.mp4
vimeo.fuzzy.replayweb.page/video/347119375
vod-progressive.akamaized.net/exp=1635528595~acl=%2Fvimeo-prod-skyfire-std-us%2F01%2F4423%2F13%2F347119375%2F1398505169.mp4~hmac=27c31f1990aab5e5429f7f7db5b2dcbcf8d2f5c92184d53102da36920d33d53e/vimeo-prod-skyfire-std-us/01/4423/13/347119375/1398505169.mp4
```