## Issue
Closes 3964 `Add Youtuber info to file page`
## Changes
(1) Refactor the YT-info query into `YoutubeBadge` component.
(2) For the File Page case, don't show "- last sync <date>" since the date has nothing to do with the file.
## Test
[x] YT Channel page
[x] YT Channel's claim page
[x] Non YT Channel page
[x] Non YT Channel's claim page
[x] No channel (anonymous) claim page
[x] Various RENDER_MODES
## Issue
- The diff for new strings are polluted by the need to add a comma to the previous entry.
- Having to re-add the newline at the end of file before commiting is a repetitive pain.
## Caveats to this approach
- When manually adding strings, developers need to put it above the `--end--` entry. Hopefully it is obvious without having to put verbose comments like "^--- add new string before this line ---^"
- Translators will surely ask how to translate "--end--".
## Issue
Fixes 4293 `Better download link support`
- [x] make it so you can right click a download button > copy download URL
Given that this could be useful in mobile/web as well, I used a button+modal instead of the right-click approach.
- [ ] in share dialog, show download URL to copy for non-video content
This is already implemented, albeit hidden in the "More..." expansion.
Fixes #-4021.
## Changes:
When the autoplay overlay gets partially off-screen, the timer will be stopped. We can tweak how much down it needs to be scrolled.
When timer is paused, the countdown resets.
The pausing mechanism has no effect on the floating player (since the 'top' can never go negative). This behavior is the same as another big video platform.
---Fixes:
#-2882: "Fix UX around publishing to already published URL".
---Changes:
1. Improved the error message (change color to red; emphasized the URL; tweaked the sentences a bit).
2. The `Publish` button will be grayed out in this scenario, until user explicitly decides to edit existing claim instead.
--- Issues:
(1) #-4394 add persistence to new support modal.
(2) Should collapse the custom field when presets are selected.
Even though the Send button repeats the amount for Tip, it's still confusing to see both the Preset being active and Custom numeric field visible.
(3) Missing localization tags.
Implementation:
- The code is placed in <VideoJs> instead of <VideoViewer> as we need to control the video itself. It's more self-contained here, rather than trying to pass refs around between parent and child.
- useState cannot be used as it will cause a re-render when the hint it clicked and dismissed. The DOM is used to hide the button.
Two issues:
1. Values not marked with __()
2. Split sentence.
For #2, it seems like there are translations that don't make sense when combined, because the values are being translated independently from full sentence in Transifex. Decided to just make it full sentences.
-- "/wallet" --
I believe this is a link and comes from redux, and shouldn't be translated.
-- "%message%" --
No point sending a variable-only to the translators -- the intended replacements are translated correctly.
-- "%name%" --
Unused.
-- "Something something something..." ---
Unused.
-- Obsolete strings (replaced by better string) --
"You are not able to see those stats right now. Make sure you are signed in with the correct email and have data sharing turned on."
"You are not able to see this channel's stats right now. Make sure you are signed in with the correct email and have data sharing turned on."
"There are no stats for this channel. Make sure you are signed in with the correct email and have data sharing turned on."
The only issue I have with this as a translator is that I have no idea what this sentence is about, as both chunks are variables. This fix is more for clarity.
#4239
Concatenating strings directly assumes that all languages have the same structure as English, which it is not. This fix allows translators to move the tokens around per their language/grammar requirements.
#4239
The class was only returning a localized string for 'years' and 'months'; English was used for the rest.
- Fixed by handling the remaining cases.
- New strings were added (1) so that they will all be consistent language-wise until the translators handle them all (2) allows for cleaner code through variable re-use (%duration%).