even more cleansing
- added support for x.com urls - removed del shortcut for clearing url input area because it was causing regular typing issues - added info about no liability - fixed donate button glow and text backdrop padding - updated donation and privacy policy texts for more clarity in both english and russian - made cors question in setup script to take yes as answer, not just 'y' - text-to-copy now has proper rounding when highlighted - home screen now smoothly fades in instead of popping in
This commit is contained in:
parent
c5681bba94
commit
5955594e48
14 changed files with 83 additions and 40 deletions
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "cobalt",
|
"name": "cobalt",
|
||||||
"description": "save what you love",
|
"description": "save what you love",
|
||||||
"version": "7.0-dev2",
|
"version": "7.0-dev3",
|
||||||
"author": "wukko",
|
"author": "wukko",
|
||||||
"exports": "./src/cobalt.js",
|
"exports": "./src/cobalt.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|
|
@ -25,7 +25,8 @@
|
||||||
"crypto": {
|
"crypto": {
|
||||||
"bitcoin": "bc1q59jyyjvrzj4c22rkk3ljeecq6jmpyscgz9spnd",
|
"bitcoin": "bc1q59jyyjvrzj4c22rkk3ljeecq6jmpyscgz9spnd",
|
||||||
"ethereum": "0x4B4cF23051c78c7A7E0eA09d39099621c46bc302",
|
"ethereum": "0x4B4cF23051c78c7A7E0eA09d39099621c46bc302",
|
||||||
"litecoin": "ltc1qvp0xhrk2m7pa6p6z844qcslfyxv4p3vf95rhna"
|
"litecoin": "ltc1qvp0xhrk2m7pa6p6z844qcslfyxv4p3vf95rhna",
|
||||||
|
"monero": "4B1SNB6s8Pq1hxjNeKPEe8Qa8EP3zdL16Sqsa7QDoJcUecKQzEj9BMxWnEnTGu12doKLJBKRDUqnn6V9qfSdXpXi3Nw5Uod"
|
||||||
},
|
},
|
||||||
"links": {
|
"links": {
|
||||||
"boosty": "https://boosty.to/wukko/donate"
|
"boosty": "https://boosty.to/wukko/donate"
|
||||||
|
|
|
@ -339,7 +339,7 @@ button:active,
|
||||||
.text-backdrop {
|
.text-backdrop {
|
||||||
background: var(--accent);
|
background: var(--accent);
|
||||||
color: var(--background);
|
color: var(--background);
|
||||||
padding: 0 0.2rem;
|
padding: 0 0.3rem;
|
||||||
}
|
}
|
||||||
.text-backdrop.link {
|
.text-backdrop.link {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
|
@ -641,7 +641,7 @@ button:active,
|
||||||
-webkit-user-select: text;
|
-webkit-user-select: text;
|
||||||
background: var(--accent-button);
|
background: var(--accent-button);
|
||||||
padding: var(--gap-no-icon);
|
padding: var(--gap-no-icon);
|
||||||
overflow: auto;
|
overflow: clip;
|
||||||
}
|
}
|
||||||
#back-button {
|
#back-button {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
@ -788,7 +788,7 @@ button:active,
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
#about-donate-footer {
|
#about-donate-footer {
|
||||||
box-shadow: 0 0 0 .1rem var(--red) inset, 0 0 1rem 0 var(--red);
|
box-shadow: 0 0 0 0.1rem var(--red) inset, 0 0 0.6rem 0 var(--red);
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
.popup-content-inner,
|
.popup-content-inner,
|
||||||
|
@ -864,6 +864,16 @@ button:active,
|
||||||
user-select: none;
|
user-select: none;
|
||||||
color: var(--accent);
|
color: var(--accent);
|
||||||
}
|
}
|
||||||
|
.loader {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
#home {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
#home.visible {
|
||||||
|
opacity: 1;
|
||||||
|
transition: opacity 0.2s ease-out;
|
||||||
|
}
|
||||||
/* rounded corners */
|
/* rounded corners */
|
||||||
#bottom #paste,
|
#bottom #paste,
|
||||||
#footer .switch,
|
#footer .switch,
|
||||||
|
@ -877,7 +887,8 @@ button:active,
|
||||||
#download-switcher .switch,
|
#download-switcher .switch,
|
||||||
#popup-about .switch,
|
#popup-about .switch,
|
||||||
#popup-tabs .switch,
|
#popup-tabs .switch,
|
||||||
.text-to-copy {
|
.text-to-copy,
|
||||||
|
.text-to-copy.text-backdrop {
|
||||||
border-radius: 5px / 6px;
|
border-radius: 5px / 6px;
|
||||||
}
|
}
|
||||||
[type=checkbox] {
|
[type=checkbox] {
|
||||||
|
@ -907,19 +918,22 @@ button:active,
|
||||||
}
|
}
|
||||||
.collapse-list.first,
|
.collapse-list.first,
|
||||||
.collapse-list.first .collapse-header {
|
.collapse-list.first .collapse-header {
|
||||||
border-top-left-radius: 7px 8px;
|
border-top-left-radius: 6px 7px;
|
||||||
border-top-right-radius: 7px 8px;
|
border-top-right-radius: 6px 7px;
|
||||||
}
|
}
|
||||||
.collapse-list.last,
|
.collapse-list.last,
|
||||||
.collapse-list.last .collapse-header {
|
.collapse-list.last .collapse-header {
|
||||||
border-bottom-left-radius: 7px 8px;
|
border-bottom-left-radius: 6px 7px;
|
||||||
border-bottom-right-radius: 7px 8px;
|
border-bottom-right-radius: 6px 7px;
|
||||||
}
|
}
|
||||||
.collapse-list.last.expanded .collapse-header {
|
.collapse-list.last.expanded .collapse-header {
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
}
|
}
|
||||||
.loader {
|
@media all and (display-mode: standalone) {
|
||||||
text-align: center;
|
/* prevent resizing fliecker on ios if web app is installed as standalone */
|
||||||
|
#home.visible {
|
||||||
|
transition-delay: 0.1s;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* adapt the page according to screen size */
|
/* adapt the page according to screen size */
|
||||||
@media screen and (max-width: 1550px) {
|
@media screen and (max-width: 1550px) {
|
||||||
|
|
|
@ -477,16 +477,17 @@ window.onload = () => {
|
||||||
loadSettings();
|
loadSettings();
|
||||||
detectColorScheme();
|
detectColorScheme();
|
||||||
changeDownloadButton(0, '>>');
|
changeDownloadButton(0, '>>');
|
||||||
eid("cobalt-main-box").style.visibility = 'visible';
|
|
||||||
eid("footer").style.visibility = 'visible';
|
|
||||||
if (eid("urgent-notice")) eid("urgent-notice").style.visibility = 'visible';
|
|
||||||
eid("url-input-area").value = "";
|
|
||||||
notificationCheck();
|
notificationCheck();
|
||||||
loadCelebrationsEmoji();
|
loadCelebrationsEmoji();
|
||||||
if (isIOS) {
|
if (isIOS) {
|
||||||
sSet("downloadPopup", "true");
|
sSet("downloadPopup", "true");
|
||||||
eid("downloadPopup-chkbx").style.display = "none";
|
eid("downloadPopup-chkbx").style.display = "none";
|
||||||
}
|
}
|
||||||
|
eid("url-input-area").value = "";
|
||||||
|
|
||||||
|
eid("home").style.visibility = 'visible';
|
||||||
|
eid("home").classList.toggle("visible");
|
||||||
|
|
||||||
let urlQuery = new URLSearchParams(window.location.search).get("u");
|
let urlQuery = new URLSearchParams(window.location.search).get("u");
|
||||||
if (urlQuery !== null && regex.test(urlQuery)) {
|
if (urlQuery !== null && regex.test(urlQuery)) {
|
||||||
eid("url-input-area").value = urlQuery;
|
eid("url-input-area").value = urlQuery;
|
||||||
|
@ -502,7 +503,7 @@ eid("url-input-area").addEventListener("keyup", (e) => {
|
||||||
document.onkeydown = (e) => {
|
document.onkeydown = (e) => {
|
||||||
if (!store.isPopupOpen) {
|
if (!store.isPopupOpen) {
|
||||||
if (e.ctrlKey || e.key === "/") eid("url-input-area").focus();
|
if (e.ctrlKey || e.key === "/") eid("url-input-area").focus();
|
||||||
if (e.key === "Escape" || e.key === "Clear" || e.key === "Delete") clearInput();
|
if (e.key === "Escape" || e.key === "Clear") clearInput();
|
||||||
|
|
||||||
// top buttons
|
// top buttons
|
||||||
if (e.key === "D") pasteClipboard();
|
if (e.key === "D") pasteClipboard();
|
||||||
|
|
8
src/front/emoji/boring_document.svg
Normal file
8
src/front/emoji/boring_document.svg
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M4.5 1C3.11929 1 2 2.11929 2 3.5V26.5C2 27.8807 3.11929 29 4.5 29H7V29.5C7 30.3284 7.67157 31 8.5 31H25.5C26.3284 31 27 30.3284 27 29.5V6.5C27 5.67157 26.3284 5 25.5 5H20.9142L17.6464 1.73223C17.1776 1.26339 16.5417 1 15.8787 1H4.5Z" fill="#B4ACBC" />
|
||||||
|
<path d="M3 3.5C3 2.67157 3.67157 2 4.5 2H15.8787C16.2765 2 16.658 2.15804 16.9393 2.43934L22.5607 8.06066C22.842 8.34196 23 8.7235 23 9.12132V26.5C23 27.3284 22.3284 28 21.5 28H4.5C3.67157 28 3 27.3284 3 26.5V3.5Z" fill="#F3EEF8" />
|
||||||
|
<path d="M6.5 11C6.22386 11 6 11.2239 6 11.5C6 11.7761 6.22386 12 6.5 12H19.5C19.7761 12 20 11.7761 20 11.5C20 11.2239 19.7761 11 19.5 11H6.5ZM6.5 14C6.22386 14 6 14.2239 6 14.5C6 14.7761 6.22386 15 6.5 15H19.5C19.7761 15 20 14.7761 20 14.5C20 14.2239 19.7761 14 19.5 14H6.5ZM6 17.5C6 17.2239 6.22386 17 6.5 17H19.5C19.7761 17 20 17.2239 20 17.5C20 17.7761 19.7761 18 19.5 18H6.5C6.22386 18 6 17.7761 6 17.5ZM6.5 20C6.22386 20 6 20.2239 6 20.5C6 20.7761 6.22386 21 6.5 21H14.5C14.7761 21 15 20.7761 15 20.5C15 20.2239 14.7761 20 14.5 20H6.5Z" fill="#998EA4" />
|
||||||
|
<path d="M16 2.00488C16.3534 2.03355 16.6868 2.18674 16.9393 2.43931L22.5607 8.06063C22.8132 8.3132 22.9664 8.64656 22.9951 8.99997H17.5C16.6716 8.99997 16 8.3284 16 7.49997V2.00488Z" fill="#CDC4D6" />
|
||||||
|
<path d="M22.3606 13.1177C22.4507 13.0417 22.5648 13 22.6828 13H25.5002C25.7763 13 26.0002 13.2239 26.0002 13.5V15.5C26.0002 15.7761 25.7763 16 25.5002 16H22.6828C22.5648 16 22.4507 15.9583 22.3606 15.8823L21.1739 14.8823C20.9368 14.6826 20.9368 14.3174 21.1739 14.1177L22.3606 13.1177Z" fill="#F70A8D" />
|
||||||
|
<path d="M25.3606 20.1177C25.4507 20.0417 25.5648 20 25.6828 20H28.5002C28.7763 20 29.0002 20.2239 29.0002 20.5V22.5C29.0002 22.7761 28.7763 23 28.5002 23H25.6828C25.5648 23 25.4507 22.9583 25.3606 22.8823L24.1739 21.8823C23.9368 21.6826 23.9368 21.3174 24.1739 21.1177L25.3606 20.1177Z" fill="#F9C23C" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
|
@ -7,7 +7,7 @@
|
||||||
"AppTitleCobalt": "cobalt",
|
"AppTitleCobalt": "cobalt",
|
||||||
"LinkInput": "paste the link here",
|
"LinkInput": "paste the link here",
|
||||||
"AboutSummary": "cobalt is your go-to place for downloads from social and media platforms. zero ads, trackers, or other creepy bullshit. simply paste a share link and you're ready to rock!",
|
"AboutSummary": "cobalt is your go-to place for downloads from social and media platforms. zero ads, trackers, or other creepy bullshit. simply paste a share link and you're ready to rock!",
|
||||||
"EmbedBriefDescription": "save what you love without ads, trackers, or other creepy bullshit.",
|
"EmbedBriefDescription": "save what you love. no ads, trackers, or other creepy bullshit.",
|
||||||
"MadeWithLove": "made with <3 by wukko",
|
"MadeWithLove": "made with <3 by wukko",
|
||||||
"AccessibilityInputArea": "link input area",
|
"AccessibilityInputArea": "link input area",
|
||||||
"AccessibilityOpenAbout": "open about popup",
|
"AccessibilityOpenAbout": "open about popup",
|
||||||
|
@ -92,7 +92,7 @@
|
||||||
"ChangelogPressToHide": "collapse",
|
"ChangelogPressToHide": "collapse",
|
||||||
"Donate": "donate",
|
"Donate": "donate",
|
||||||
"DonateSub": "help it stay online",
|
"DonateSub": "help it stay online",
|
||||||
"DonateExplanation": "cobalt does not (and will never) serve ads or sell your data, meaning that <span class=\"text-backdrop\">it's completely free to use</span>. turns out developing and keeping up a web service used by over 300,000 people is not that easy.\n\nif you ever found cobalt useful and want to help continue its development and maintenance consider chipping in! if you want to thank the developer, you can also do that via donations. every cent helps and is VERY appreciated!\n\ncobalt's usage worldwide grows daily and i need to make up for it. as you can imagine, hosting costs grow progressively too. as a year 1 university student, i was not prepared for such expenses :(\n\ni am yet to earn anything from cobalt, everything goes back to users, so you're helping everyone who uses cobalt.\n\n<span class=\"text-backdrop\">your help is more appreciated than ever!</span>",
|
"DonateExplanation": "cobalt doesn't shove ads in your face and doesn't sell your personal data, and thus is <span class=\"text-backdrop\">completely free to use for everyone</span>. but development and maintenance of a media-heavy service used by over 350k people is quite costly. both in terms of time and money. as a student, it's rather difficult for me to handle such expenses on my own.\n\nif cobalt has helped you in the past and you want to keep it growing and evolving, you can do so by making a donation!\n\nby donating you're helping everyone who uses cobalt: teachers, students, musicians, content creators, artists, lecturers, and many, many more!\n\nin past few months donations have let me:\n*; increase stability and uptime to nearly 100%.\n*; speed up ALL downloads, especially heavier ones.\n*; open cobalt api for free public use.\n*; withstand several huge user influxes with 0 downtime.\n*; move to a reliable and trustworthy cloud infrastructure provider.\n*; separate frontend and api for resilience and future decentralization.\n\n<span class=\"text-backdrop\">every cent matters and is extremely appreciated</span>, you can truly make a difference!",
|
||||||
"DonateVia": "donate via",
|
"DonateVia": "donate via",
|
||||||
"DonateHireMe": "...or you can <a class=\"text-backdrop link\" href=\"{s}\" target=\"_blank\">hire me</a> :)",
|
"DonateHireMe": "...or you can <a class=\"text-backdrop link\" href=\"{s}\" target=\"_blank\">hire me</a> :)",
|
||||||
"SettingsVideoMute": "mute audio",
|
"SettingsVideoMute": "mute audio",
|
||||||
|
@ -105,7 +105,7 @@
|
||||||
"FollowSupport": "keep in touch with cobalt for support, polls, news, and more:",
|
"FollowSupport": "keep in touch with cobalt for support, polls, news, and more:",
|
||||||
"SupportNote": "please note that response may take a while, there's only one person managing everything.",
|
"SupportNote": "please note that response may take a while, there's only one person managing everything.",
|
||||||
"SourceCode": "report issues, explore source code, star or fork the repo:",
|
"SourceCode": "report issues, explore source code, star or fork the repo:",
|
||||||
"PrivacyPolicy": "cobalt's privacy policy is simple: no data about you is ever collected or stored. zero, zilch, nada, nothing.\nwhat you download is your business, not mine.\n\nsome non-backtraceable data does get temporarily stored when requested download requires live render. it's necessary for that feature to function.\n\nin that case, information about requested stream is temporarily stored in server's RAM for <span class=\"text-backdrop\">20 seconds</span>. as 20 seconds have passed, all previously stored information is permanently removed.\nno one (even me) has access to this data, because official cobalt codebase doesn't provide a way to read it outside of processing functions.\n\nyou can check cobalt's <a class=\"text-backdrop link\" href=\"{repo}\" target=\"_blank\">github repo</a> yourself and see that everything is as stated.",
|
"PrivacyPolicy": "cobalt's privacy policy is simple: no data about you is ever collected or stored. zero, zilch, nada, nothing.\nwhat you download is solely your business, not mine or anyone else's.\n\nif your download requires live render, some non-backtraceable data is temporarily stored in server's RAM. it's necessary for this feature to function.\n\nin this case info about requested content is stored for <span class=\"text-backdrop\">20 seconds</span> and then permanently removed.\nno one (even me) has access to this data. official cobalt codebase doesn't provide a way to read it outside of processing functions.\n\nyou can check cobalt's <a class=\"text-backdrop link\" href=\"{repo}\" target=\"_blank\">source code</a> yourself and see that everything is as stated.",
|
||||||
"ErrorYTUnavailable": "this youtube video is unavailable, it could be region or age restricted. try another one!",
|
"ErrorYTUnavailable": "this youtube video is unavailable, it could be region or age restricted. try another one!",
|
||||||
"ErrorYTTryOtherCodec": "i couldn't find anything to download with your settings. try another codec or quality!\n\nnote: youtube api sometimes acts unexpectedly. blame google for this, not me.",
|
"ErrorYTTryOtherCodec": "i couldn't find anything to download with your settings. try another codec or quality!\n\nnote: youtube api sometimes acts unexpectedly. blame google for this, not me.",
|
||||||
"SettingsCodecSubtitle": "youtube codec",
|
"SettingsCodecSubtitle": "youtube codec",
|
||||||
|
@ -130,9 +130,11 @@
|
||||||
"SupportSelfTroubleshooting": "experiencing issues? try <a class=\"text-backdrop link\" href=\"{repo}/wiki/Troubleshooting\" target=\"_blank\">self-troubleshooting guide</a> first!",
|
"SupportSelfTroubleshooting": "experiencing issues? try <a class=\"text-backdrop link\" href=\"{repo}/wiki/Troubleshooting\" target=\"_blank\">self-troubleshooting guide</a> first!",
|
||||||
"AccessibilityGoBack": "go back and close the popup",
|
"AccessibilityGoBack": "go back and close the popup",
|
||||||
"CollapseKeyboard": "keyboard shortcuts",
|
"CollapseKeyboard": "keyboard shortcuts",
|
||||||
"KeyboardShortcutsIntro": "you can use cobalt even faster with keyboard shortcuts:",
|
"KeyboardShortcutsIntro": "use cobalt even faster with keyboard shortcuts:",
|
||||||
"KeyboardShortcutQuickPaste": "paste the link",
|
"KeyboardShortcutQuickPaste": "paste the link",
|
||||||
"KeyboardShortcutClear": "clear link input area",
|
"KeyboardShortcutClear": "clear link input area",
|
||||||
"KeyboardShortcutClosePopup": "close all popups"
|
"KeyboardShortcutClosePopup": "close all popups",
|
||||||
|
"CollapseLegal": "legal stuff",
|
||||||
|
"FairUse": "cobalt is a tool for easing content downloads from internet and takes <span class=\"text-backdrop\">zero liability</span>. you are responsible for what you download, how you use and distribute that content.\n\ncobalt does not log any info about you, it's impossible for me to snitch on you, but please be mindful when using content of others and always credit original creators!\n\nwhen used in education purposes (lecture, homework, etc) please attach the source link.\n\nfair use and credits benefit everyone."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,7 +93,7 @@
|
||||||
"ChangelogPressToHide": "скрыть",
|
"ChangelogPressToHide": "скрыть",
|
||||||
"Donate": "задонатить",
|
"Donate": "задонатить",
|
||||||
"DonateSub": "ты можешь помочь!",
|
"DonateSub": "ты можешь помочь!",
|
||||||
"DonateExplanation": "кобальт не пихает рекламу тебе в лицо и не продаёт твои личные данные, а значит работает <span class=\"text-backdrop\">совершенно бесплатно</span>. но оказывается, что разработка и поддержка сервиса, которым пользуются более 300 тысяч людей, обходится довольно затратно.\n\nесли кобальт тебе помог и ты хочешь, чтобы он продолжал работать, то это можно сделать через донаты!\n\nиспользование кобальта по всему миру растёт с каждым днём, а в след за ним и стоимость хостинга. мне, как первокурснику, оплачивать такое в одиночку довольно трудно.\n\nя еще ничего не заработал на кобальте, всё возвращается обратно пользователям, так что ты помогаешь всем, кто использует кобальт.\n\n<span class=\"text-backdrop\">твой донат на вес золота, ценится как никогда!</span>",
|
"DonateExplanation": "кобальт не пихает рекламу тебе в лицо и не продаёт твои личные данные, а значит работает <span class=\"text-backdrop\">совершенно бесплатно для всех</span>. но разработка и поддержка медиа сервиса, которым пользуются более 350 тысяч людей, обходится довольно затратно. мне, как студенту, оплачивать такое в одиночку довольно трудно.\n\nесли кобальт тебе помог и ты хочешь, чтобы он продолжал работать и развиваться, то это можно сделать через донаты!\n\nделая донат ты помогаешь всем, кто пользуется кобальтом: преподавателям, студентам, музыкантам, художникам, контент-мейкерам и многим-многим другим!\n\nза последние несколько месяцев благодаря донатам я смог:\n*; повысить стабильность и аптайм почти до 100%.\n*; ускорить ВСЕ загрузки, особенно наиболее тяжёлые.\n*; открыть api кобальта для свободного публичного использования.\n*; выдержать несколько огромных наплывов пользователей без перебоев.\n*; перейти к надёжному поставщику облачной инфры.\n*; разделить фронтенд и api для обеспечения отказоустойчивости и децентрализации в будущем.\n\n<span class=\"text-backdrop\">каждый донат невероятно ценится</span> и помогает кобальту развиваться!",
|
||||||
"DonateVia": "открыть",
|
"DonateVia": "открыть",
|
||||||
"DonateHireMe": "...или же ты можешь <a class=\"text-backdrop link\" href=\"{s}\" target=\"_blank\">пригласить меня на работу</a> :)",
|
"DonateHireMe": "...или же ты можешь <a class=\"text-backdrop link\" href=\"{s}\" target=\"_blank\">пригласить меня на работу</a> :)",
|
||||||
"SettingsVideoMute": "убрать аудио",
|
"SettingsVideoMute": "убрать аудио",
|
||||||
|
@ -106,7 +106,7 @@
|
||||||
"FollowSupport": "оставайтесь на связи с кобальтом для новостей, поддержки, участия в опросах, и многого другого:",
|
"FollowSupport": "оставайтесь на связи с кобальтом для новостей, поддержки, участия в опросах, и многого другого:",
|
||||||
"SupportNote": "так как я один занимаюсь разработкой и поддержкой в одиночку, время ожидания ответа может достигать нескольких часов. но я отвечаю всем, так что не стесняйся.",
|
"SupportNote": "так как я один занимаюсь разработкой и поддержкой в одиночку, время ожидания ответа может достигать нескольких часов. но я отвечаю всем, так что не стесняйся.",
|
||||||
"SourceCode": "пиши о проблемах, шарься в исходнике, или же форкай репозиторий:",
|
"SourceCode": "пиши о проблемах, шарься в исходнике, или же форкай репозиторий:",
|
||||||
"PrivacyPolicy": "политика конфиденциальности кобальта довольно проста: ничего не хранится об истории твоих действий или загрузок. совсем. даже ошибки.\nто, что ты скачиваешь - только твоё личное дело.\n\nв случаях, когда твоей загрузке требуется лайв-рендер, временно хранится неотслеживаемая информация. это необходимо для работы такого типа загрузок.\n\nв этом случае данные о запрошенном стриме хранятся в ОЗУ сервера в течение <span class=\"text-backdrop\">20 секунд</span>. по истечении этого периода всё стирается. ни у кого (даже у меня) нет доступа к временно хранящимся данным, так как официальный код кобальта не предоставляет такой возможности.\n\nты всегда можешь посмотреть <a class=\"text-backdrop link\" href=\"{repo}\" target=\"_blank\">исходный код кобальт</a> и убедиться, что всё так, как описано.",
|
"PrivacyPolicy": "политика конфиденциальности кобальта довольно проста: никакие данные о тебе никогда не собираются и не хранятся. нуль, ноль, нада, ничего.\nто, что ты скачиваешь, - твоё личное дело, а не чьё-либо ещё.\n\nесли твоей загрузке требуется живой рендер, то некоторые неотслеживаемые данные временно держатся в ОЗУ сервера. это необходимо для работы данной функции.\n\nв этом случае данные о запрошенном контенте хранятся в течение <span class=\"text-backdrop\">20 секунд</span>. по истечении этого времени всё стирается. ни у кого (даже у меня) нет доступа к временно хранящимся данным, так как официальная кодовая база кобальта не предусматривает возможности их чтения вне функций обработки.\n\nты всегда можешь посмотреть <a class=\"text-backdrop link\" href=\"{repo}\" target=\"_blank\">исходный код кобальта</a> и убедиться, что всё так, как заявлено.",
|
||||||
"ErrorYTUnavailable": "это видео недоступно, возможно оно ограничено по региону или доступу. попробуй другое!",
|
"ErrorYTUnavailable": "это видео недоступно, возможно оно ограничено по региону или доступу. попробуй другое!",
|
||||||
"ErrorYTTryOtherCodec": "я не нашёл того, что мог бы скачать с твоими настройками. попробуй другой кодек или качество!",
|
"ErrorYTTryOtherCodec": "я не нашёл того, что мог бы скачать с твоими настройками. попробуй другой кодек или качество!",
|
||||||
"SettingsCodecSubtitle": "кодек для видео с youtube",
|
"SettingsCodecSubtitle": "кодек для видео с youtube",
|
||||||
|
@ -131,9 +131,11 @@
|
||||||
"SupportSelfTroubleshooting": "возникли проблемы? попробуй сначала исправить всё сам <a class=\"text-backdrop link\" href=\"{repo}/wiki/Troubleshooting\" target=\"_blank\">по этому гиду!</a>",
|
"SupportSelfTroubleshooting": "возникли проблемы? попробуй сначала исправить всё сам <a class=\"text-backdrop link\" href=\"{repo}/wiki/Troubleshooting\" target=\"_blank\">по этому гиду!</a>",
|
||||||
"AccessibilityGoBack": "вернуться назад и закрыть окно",
|
"AccessibilityGoBack": "вернуться назад и закрыть окно",
|
||||||
"CollapseKeyboard": "горячие клавиши",
|
"CollapseKeyboard": "горячие клавиши",
|
||||||
"KeyboardShortcutsIntro": "ты можешь пользоваться кобальтом ещё быстрее с горячими клавишами:",
|
"KeyboardShortcutsIntro": "пользуйся кобальтом ещё быстрее с горячими клавишами:",
|
||||||
"KeyboardShortcutQuickPaste": "вставить ссылку",
|
"KeyboardShortcutQuickPaste": "вставить ссылку",
|
||||||
"KeyboardShortcutClear": "очистить зону вставки ссылки",
|
"KeyboardShortcutClear": "очистить зону вставки ссылки",
|
||||||
"KeyboardShortcutClosePopup": "закрыть все окна"
|
"KeyboardShortcutClosePopup": "закрыть все окна",
|
||||||
|
"CollapseLegal": "правовые штучки",
|
||||||
|
"FairUse": "кобальт - это инструмент для облегчения скачивания контента из интернета, и он <span class=\"text-backdrop\">не несёт никакой ответственности</span>. ты несёшь ответственность за то, что скачиваешь, как используешь и распространяешь скачанный контент.\n\nкобальт не собирает никакой информации о тебе, и не может донести на тебя, но, пожалуйста, будь сознателен при использовании чужого контента и всегда указывай авторов!\n\nпри использовании в образовательных целях (лекции, домашние задания и т.д.), пожалуйста, прикладывай ссылку на источник.\n\nчестное использование и указание авторства выгодно всем."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,12 +12,15 @@ export async function getJSON(originalURL, lang, obj) {
|
||||||
let patternMatch, url = decodeURIComponent(originalURL),
|
let patternMatch, url = decodeURIComponent(originalURL),
|
||||||
hostname = new URL(url).hostname.split('.'),
|
hostname = new URL(url).hostname.split('.'),
|
||||||
host = hostname[hostname.length - 2];
|
host = hostname[hostname.length - 2];
|
||||||
|
|
||||||
if (!url.startsWith('https://')) return apiJSON(0, { t: errorUnsupported(lang) });
|
if (!url.startsWith('https://')) return apiJSON(0, { t: errorUnsupported(lang) });
|
||||||
|
|
||||||
switch(host) {
|
switch(host) {
|
||||||
case "youtu":
|
case "youtu":
|
||||||
|
if (url.startsWith("https://youtu.be/")) {
|
||||||
host = "youtube";
|
host = "youtube";
|
||||||
url = `https://youtube.com/watch?v=${url.replace("youtu.be/", "").replace("https://", "")}`;
|
url = `https://youtube.com/watch?v=${url.replace("https://youtu.be/", "")}`;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case "goo":
|
case "goo":
|
||||||
if (url.substring(0, 30) === "https://soundcloud.app.goo.gl/") {
|
if (url.substring(0, 30) === "https://soundcloud.app.goo.gl/") {
|
||||||
|
@ -25,6 +28,12 @@ export async function getJSON(originalURL, lang, obj) {
|
||||||
url = `https://soundcloud.com/${url.replace("https://soundcloud.app.goo.gl/", "").split('/')[0]}`
|
url = `https://soundcloud.com/${url.replace("https://soundcloud.app.goo.gl/", "").split('/')[0]}`
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case "x":
|
||||||
|
if (url.startsWith("https://x.com/")) {
|
||||||
|
host = "twitter";
|
||||||
|
url = url.replace("https://x.com/", "https://twitter.com/")
|
||||||
|
}
|
||||||
|
break;
|
||||||
case "tumblr":
|
case "tumblr":
|
||||||
if (!url.includes("blog/view")) {
|
if (!url.includes("blog/view")) {
|
||||||
if (url.slice(-1) === '/') url = url.slice(0, -1);
|
if (url.slice(-1) === '/') url = url.slice(0, -1);
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
{
|
{
|
||||||
"current": {
|
"current": {
|
||||||
"version": "7.0-dev2",
|
"version": "7.0",
|
||||||
"date": "August 11, 2023",
|
"date": "August 13, 2023",
|
||||||
"title": "wip: better experience all around!",
|
"title": "everything is coming along nicely",
|
||||||
"banner": {
|
"banner": {
|
||||||
"file": "cattired.webp",
|
"file": "cattired.webp",
|
||||||
"width": 640,
|
"width": 640,
|
||||||
"height": 286
|
"height": 286
|
||||||
},
|
},
|
||||||
"content": "hey beta testers, this changelog isn't final but i do want to highlight some changes here just to keep track of them. make sure to report all issues in the testing discord channel!\n\n(this changelog is not sorted as it usually is)\n\nnew in 7.0-dev2:\n*; rounded corners everywhere! cobalt is now safe for everyone who can't handle sharp objects. <span class=\"text-backdrop\">i really want your feedback on this</span>.\n*; proper banner loading. no more jumping text!\n*; proper banner error handling. if banner wasn't loaded, it'll simply go grey instead of disappearing.\n*; links are no longer italic and are instead underlined.\n*; collapsible lists now have corresponding emoji.\n*; donate button is now highlighted with magenta instead of white.\n*; added a list of keyboard shortcuts to about tab.\n*; proper dropdown arrow.\n\nwon't be in final changelog:\n*; popup tabs now get highlighted on hover instead of being hollow.\n*; small popup is now animated on mobile. it slides from bottom to top.\n*; back arrow is now centered.\n\n\n<span class=\"text-backdrop\">everything from previous version of this changelog:</span>\n\nservice improvements:\n*; fixed unexpected stream drop when downloading a silent reddit video with mute mode on.\n*; added support for new reddit audio link type.\n\nweb improvements:\n*; removed 6.0 api fallback.\n*; moved on demand blocks to web server, now changelog can be updated independently from preferred api server.\n*; all-new matte glass aesthetic, applied to revamped popup headers, tab selectors, and also small popups.\n*; optimized installed web app to look and act like a native app, especially on ios. !!!!please try this!!!!\n*; added ability to attach a date to changelog.\n*; refreshed the look of entire changelog tab: separated title and version/commit, made title bigger, evened out all paddings.\n*; popups now work without any weird workarounds, especially on mobile. they're clean and nice.\n*; homescreen now also works without any weird workarounds. it is also clean and nice.\n*; replaced close button with back button, moved it to left. it makes more sense.\n*; (kinda old but not in older changelog) absolutely reimagined error and download popups, consistent with the rest of refreshed design.\n*; reduced spacing, optimized css of almost all ui elements. should be even more consistent across platforms now.\n*; added interaction animations.\n*; added more accessibility options, put them all into one category. you can disable animations and transparency if you want to.\n*; added a link to self-troubleshooting guide to support expand list in about popup.\n*; renamed 2160p and 4320p to 4k and 8k respectfully for better clarity.\n*; cobalt now lets you know if your browser doesn't support clipboard api and helps you fix it.\n*; added ability to translate \"cobalt\" for twitter-like localization. in russian cobalt is now кобальт, that's the style i will be going with from now on.\n*; updated some localization strings.\n*; removed ability to change the app name dynamically in all locations. cobalt is a sustained product name.\n*; added more keyboard shorcuts.\n*; added a list of keyboard shortcuts to about tab.\n\nyour keyboard slightly represents cobalt's ui. let me know if you like these.\n\ninternal web improvements:\n*; cleaned up all related frontend modules, especially page.js. will add more in final changelog, i'm very tired.\n\napi improvements:\n*; now catching all json api related errors.\n*; moved on demand blocks to web server.\n*; now sending standard rate limiting headers.\n*; better readability in source.\n\nother improvements:\n*; renamed docker-compose.yml.example to docker-compose.example.yml for linting in code editors.\n*; added a wiki with wip troubleshooting guide on github.\n\nwhat doesn't work or works poorly:\n*; tiktok/twitter media pickers look like shit, they haven't been worked on yet. they also might not work at all on ios.\n*; unknown if scrolling within popups works properly on ios 16 (when installed as web app).\n*; \"ask how to save\" toggle is pressable on ios devices even though it shouldn't be."
|
"content": "this changelog isn't final but i do want to highlight some changes here just to keep track of them. make sure to report all issues in the testing discord channel!\n\n(this changelog is not sorted as it usually is)\n\nnew in 7.0-dev3:\n*; added support for x.com urls.\n*; removed del shortcut for clearing url input area because it was causing regular typing issues.\n*; added info about no liability.\n*; fixed donate button glow and text backdrop padding.\n*; updated donation and privacy policy texts for more clarity in both english and russian.\n*; made cors question in setup script to take yes as answer, not just \"y\".\n*; text-to-copy now has proper rounding when highlighted.\n*; home screen now smoothly fades in instead of popping in.\n\nnew in 7.0-dev2:\n*; rounded corners everywhere! cobalt is now safe for everyone who can't handle sharp objects. <span class=\"text-backdrop\">i really want your feedback on this</span>.\n*; proper banner loading. no more jumping text!\n*; proper banner error handling. if banner wasn't loaded, it'll simply go grey instead of disappearing.\n*; links are no longer italic and are instead underlined.\n*; collapsible lists now have corresponding emoji.\n*; donate button is now highlighted with magenta instead of white.\n*; added a list of keyboard shortcuts to about tab.\n*; proper dropdown arrow.\n*; fixed celebrations emoji.\n\nwon't be in final changelog:\n*; popup tabs now get highlighted on hover instead of being hollow.\n*; small popup is now animated on mobile. it slides from bottom to top.\n*; back arrow is now centered.\n\n\n<span class=\"text-backdrop\">everything from previous version of this changelog:</span>\n\nservice improvements:\n*; fixed unexpected stream drop when downloading a silent reddit video with mute mode on.\n*; added support for new reddit audio link type.\n\nweb improvements:\n*; removed 6.0 api fallback.\n*; moved on demand blocks to web server, now changelog can be updated independently from preferred api server.\n*; all-new matte glass aesthetic, applied to revamped popup headers, tab selectors, and also small popups.\n*; optimized installed web app to look and act like a native app, especially on ios. !!!!please try this!!!!\n*; added ability to attach a date to changelog.\n*; refreshed the look of entire changelog tab: separated title and version/commit, made title bigger, evened out all paddings.\n*; popups now work without any weird workarounds, especially on mobile. they're clean and nice.\n*; homescreen now also works without any weird workarounds. it is also clean and nice.\n*; replaced close button with back button, moved it to left. it makes more sense.\n*; (kinda old but not in older changelog) absolutely reimagined error and download popups, consistent with the rest of refreshed design.\n*; reduced spacing, optimized css of almost all ui elements. should be even more consistent across platforms now.\n*; added interaction animations.\n*; added more accessibility options, put them all into one category. you can disable animations and transparency if you want to.\n*; added a link to self-troubleshooting guide to support expand list in about popup.\n*; renamed 2160p and 4320p to 4k and 8k respectfully for better clarity.\n*; cobalt now lets you know if your browser doesn't support clipboard api and helps you fix it.\n*; added ability to translate \"cobalt\" for twitter-like localization. in russian cobalt is now кобальт, that's the style i will be going with from now on.\n*; updated some localization strings.\n*; removed ability to change the app name dynamically in all locations. cobalt is a sustained product name.\n*; added more keyboard shorcuts.\n*; added a list of keyboard shortcuts to about tab.\n\nyour keyboard slightly represents cobalt's ui. let me know if you like these.\n\ninternal web improvements:\n*; cleaned up all related frontend modules, especially page.js. will add more in final changelog, i'm very tired.\n\napi improvements:\n*; now catching all json api related errors.\n*; moved on demand blocks to web server.\n*; now sending standard rate limiting headers.\n*; better readability in source.\n\nother improvements:\n*; renamed docker-compose.yml.example to docker-compose.example.yml for linting in code editors.\n*; added a wiki with wip troubleshooting guide on github.\n\nwhat doesn't work or works poorly:\n*; tiktok/twitter media pickers look like shit, they haven't been worked on yet. they also might not work at all on ios.\n*; unknown if scrolling within popups works properly on ios 16 (when installed as web app).\n*; \"ask how to save\" toggle is pressable on ios devices even though it shouldn't be."
|
||||||
},
|
},
|
||||||
"history": [{
|
"history": [{
|
||||||
"version": "6.2",
|
"version": "6.2",
|
||||||
|
|
|
@ -31,7 +31,8 @@ const names = {
|
||||||
"🔒": "locked",
|
"🔒": "locked",
|
||||||
"🔍": "magnifying_glass",
|
"🔍": "magnifying_glass",
|
||||||
"🔗": "link",
|
"🔗": "link",
|
||||||
"⌨": "keyboard"
|
"⌨": "keyboard",
|
||||||
|
"📑": "boring_document"
|
||||||
}
|
}
|
||||||
let sizing = {
|
let sizing = {
|
||||||
18: 0.8,
|
18: 0.8,
|
||||||
|
|
|
@ -205,7 +205,7 @@ export function celebrationsEmoji() {
|
||||||
}
|
}
|
||||||
export function urgentNotice(obj) {
|
export function urgentNotice(obj) {
|
||||||
if (obj.visible) {
|
if (obj.visible) {
|
||||||
return `<div id="urgent-notice" class="urgent-notice explanation" onclick="${obj.action}" style="visibility: hidden;">${emoji(obj.emoji, 18)} ${obj.text}</div>`
|
return `<div id="urgent-notice" class="urgent-notice explanation" onclick="${obj.action}">${emoji(obj.emoji, 18)} ${obj.text}</div>`
|
||||||
}
|
}
|
||||||
return ``
|
return ``
|
||||||
}
|
}
|
||||||
|
|
|
@ -121,7 +121,7 @@ export default function(obj) {
|
||||||
combo: "Ctrl+V",
|
combo: "Ctrl+V",
|
||||||
name: t("KeyboardShortcutQuickPaste")
|
name: t("KeyboardShortcutQuickPaste")
|
||||||
}, {
|
}, {
|
||||||
combo: "Esc/Del",
|
combo: "Esc",
|
||||||
name: t("KeyboardShortcutClear")
|
name: t("KeyboardShortcutClear")
|
||||||
}, {
|
}, {
|
||||||
combo: "Esc",
|
combo: "Esc",
|
||||||
|
@ -163,6 +163,10 @@ export default function(obj) {
|
||||||
name: "privacy",
|
name: "privacy",
|
||||||
title: `${emoji("🔒")} ${t("CollapsePrivacy")}`,
|
title: `${emoji("🔒")} ${t("CollapsePrivacy")}`,
|
||||||
body: t("PrivacyPolicy")
|
body: t("PrivacyPolicy")
|
||||||
|
}, {
|
||||||
|
name: "legal",
|
||||||
|
title: `${emoji("📑")} ${t("CollapseLegal")}`,
|
||||||
|
body: t("FairUse")
|
||||||
}])
|
}])
|
||||||
}]
|
}]
|
||||||
})
|
})
|
||||||
|
@ -494,14 +498,14 @@ export default function(obj) {
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
<div id="popup-backdrop" onclick="hideAllPopups()"></div>
|
<div id="popup-backdrop" onclick="hideAllPopups()"></div>
|
||||||
<div id="home">
|
<div id="home" style="visibility:hidden">
|
||||||
${urgentNotice({
|
${urgentNotice({
|
||||||
emoji: "🐱",
|
emoji: "🐱",
|
||||||
text: "report any issues!",
|
text: "report any issues!",
|
||||||
visible: true,
|
visible: true,
|
||||||
action: "popup('about', 1, 'changelog')"
|
action: "popup('about', 1, 'changelog')"
|
||||||
})}
|
})}
|
||||||
<div id="cobalt-main-box" class="center" style="visibility: hidden;">
|
<div id="cobalt-main-box" class="center">
|
||||||
<div id="logo">${t("AppTitleCobalt")}</div>
|
<div id="logo">${t("AppTitleCobalt")}</div>
|
||||||
<div id="download-area">
|
<div id="download-area">
|
||||||
<div id="top">
|
<div id="top">
|
||||||
|
@ -525,7 +529,7 @@ export default function(obj) {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<footer id="footer" style="visibility: hidden;">
|
<footer id="footer">
|
||||||
${footerButtons([{
|
${footerButtons([{
|
||||||
name: "about",
|
name: "about",
|
||||||
type: "popup",
|
type: "popup",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
function bestQuality(arr) {
|
function bestQuality(arr) {
|
||||||
return arr.filter((v) => { if (v["content_type"] === "video/mp4") return true }).sort((a, b) => Number(b.bitrate) - Number(a.bitrate))[0]["url"].split("?")[0]
|
return arr.filter((v) => { if (v["content_type"] === "video/mp4") return true }).sort((a, b) => Number(b.bitrate) - Number(a.bitrate))[0]["url"]
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async function(obj) {
|
export default async function(obj) {
|
||||||
|
|
|
@ -60,7 +60,8 @@ function setup() {
|
||||||
console.log(Bright("\nOne last thing: would you like to enable CORS? It allows other websites and extensions to use your instance's API.\ny/n (n)"));
|
console.log(Bright("\nOne last thing: would you like to enable CORS? It allows other websites and extensions to use your instance's API.\ny/n (n)"));
|
||||||
|
|
||||||
rl.question(q, apiCors => {
|
rl.question(q, apiCors => {
|
||||||
if (apiCors.toLowerCase() !== 'y') ob['cors'] = '0'
|
let answCors = apiCors.toLowerCase().trim();
|
||||||
|
if (answCors !== 'y' || answCors !== 'yes') ob['cors'] = '0'
|
||||||
final()
|
final()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue