mirror of
https://github.com/iv-org/invidious.git
synced 2025-08-03 19:28:29 +00:00
WIP: generalize infobox concept
instead of a single infobox only for welcome, allow multiple infoboxes to be dismissed independently of each other. it'd be best to use a hash or array for storing these values, but then the state does not clear properly between sessions.
This commit is contained in:
parent
3e12050b4c
commit
8d941740c8
@ -2,16 +2,13 @@ var dismiss_welcome = document.getElementById('dismiss_welcome');
|
||||
dismiss_welcome.href = 'javascript:void(0);';
|
||||
|
||||
dismiss_welcome.addEventListener('click', function () {
|
||||
var dark_mode = document.getElementById('dark_theme').media === 'none';
|
||||
|
||||
var url = '/dismiss_welcome?redirect=false';
|
||||
var url = '/dismiss_info?name=welcome&redirect=false';
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.responseType = 'json';
|
||||
xhr.timeout = 10000;
|
||||
xhr.open('GET', url, true);
|
||||
|
||||
hide_welcome();
|
||||
window.localStorage.setItem('welcome_dismissed', true);
|
||||
|
||||
xhr.send();
|
||||
});
|
||||
|
@ -90,6 +90,10 @@ LOCALES = {
|
||||
"zh-CN" => load_locale("zh-CN"),
|
||||
}
|
||||
|
||||
DISMISSALS = [
|
||||
"welcome",
|
||||
]
|
||||
|
||||
config = CONFIG
|
||||
logger = Invidious::LogHandler.new
|
||||
|
||||
@ -1224,10 +1228,11 @@ post "/login" do |env|
|
||||
env.response.cookies << cookie
|
||||
end
|
||||
|
||||
if env.request.cookies["PREFS"]?
|
||||
preferences = env.get("preferences").as(Preferences)
|
||||
PG_DB.exec("UPDATE users SET preferences = $1 WHERE email = $2", preferences.to_json, user.email)
|
||||
preferences = env.get("preferences").as(Preferences)
|
||||
preferences.dismissals = "#{preferences.dismissals},welcome" # registering automatically dismisses "sign up" message
|
||||
PG_DB.exec("UPDATE users SET preferences = $1 WHERE email = $2", preferences.to_json, user.email)
|
||||
|
||||
if env.request.cookies["PREFS"]?
|
||||
cookie = env.request.cookies["PREFS"]
|
||||
cookie.expires = Time.utc(1990, 1, 1)
|
||||
env.response.cookies << cookie
|
||||
@ -1404,10 +1409,11 @@ post "/login" do |env|
|
||||
secure: secure, http_only: true)
|
||||
end
|
||||
|
||||
if env.request.cookies["PREFS"]?
|
||||
preferences = env.get("preferences").as(Preferences)
|
||||
PG_DB.exec("UPDATE users SET preferences = $1 WHERE email = $2", preferences.to_json, user.email)
|
||||
preferences = env.get("preferences").as(Preferences)
|
||||
preferences.dismissals = "#{preferences.dismissals},welcome" # registering automatically dismisses "sign up" message
|
||||
PG_DB.exec("UPDATE users SET preferences = $1 WHERE email = $2", preferences.to_json, user.email)
|
||||
|
||||
if env.request.cookies["PREFS"]?
|
||||
cookie = env.request.cookies["PREFS"]
|
||||
cookie.expires = Time.utc(1990, 1, 1)
|
||||
env.response.cookies << cookie
|
||||
@ -1699,32 +1705,54 @@ get "/toggle_theme" do |env|
|
||||
end
|
||||
end
|
||||
|
||||
get "/dismiss_welcome" do |env|
|
||||
get "/dismiss_info" do |env|
|
||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
||||
referer = get_referer(env, unroll: false)
|
||||
|
||||
which = env.params.query["name"]?
|
||||
if !which || !DISMISSALS.includes?(which)
|
||||
error_message = {"error" => "cannot dismiss nonexisting info"}.to_json
|
||||
env.response.status_code = 400
|
||||
next error_message
|
||||
end
|
||||
|
||||
redirect = env.params.query["redirect"]?
|
||||
redirect ||= "true"
|
||||
redirect = redirect == "true"
|
||||
|
||||
preferences = env.get("preferences").as(Preferences)
|
||||
if user = env.get? "user"
|
||||
user = user.as(User)
|
||||
preferences = user.preferences
|
||||
|
||||
preferences.welcome_dismissed = true
|
||||
if !preferences.dismissals.split(',').includes?(which)
|
||||
preferences.dismissals = "#{preferences.dismissals},#{which}"
|
||||
end
|
||||
|
||||
preferences = preferences.to_json
|
||||
preferences = preferences.to_json
|
||||
|
||||
if Kemal.config.ssl || config.https_only
|
||||
secure = true
|
||||
PG_DB.exec("UPDATE users SET preferences = $1 WHERE email = $2", preferences, user.email)
|
||||
else
|
||||
secure = false
|
||||
end
|
||||
preferences = env.get("preferences").as(Preferences)
|
||||
|
||||
if config.domain
|
||||
env.response.cookies["PREFS"] = HTTP::Cookie.new(name: "PREFS", domain: "#{config.domain}", value: preferences, expires: Time.utc + 2.years,
|
||||
secure: secure, http_only: true)
|
||||
else
|
||||
env.response.cookies["PREFS"] = HTTP::Cookie.new(name: "PREFS", value: preferences, expires: Time.utc + 2.years,
|
||||
secure: secure, http_only: true)
|
||||
if !preferences.dismissals.split(',').includes?(which)
|
||||
preferences.dismissals = "#{preferences.dismissals},#{which}"
|
||||
end
|
||||
|
||||
preferences = preferences.to_json
|
||||
|
||||
if Kemal.config.ssl || config.https_only
|
||||
secure = true
|
||||
else
|
||||
secure = false
|
||||
end
|
||||
|
||||
if config.domain
|
||||
env.response.cookies["PREFS"] = HTTP::Cookie.new(name: "PREFS", domain: "#{config.domain}", value: preferences, expires: Time.utc + 2.years,
|
||||
secure: secure, http_only: true)
|
||||
else
|
||||
env.response.cookies["PREFS"] = HTTP::Cookie.new(name: "PREFS", value: preferences, expires: Time.utc + 2.years,
|
||||
secure: secure, http_only: true)
|
||||
end
|
||||
end
|
||||
|
||||
if redirect
|
||||
|
@ -135,6 +135,7 @@ struct ConfigPreferences
|
||||
continue: {type: Bool, default: false},
|
||||
continue_autoplay: {type: Bool, default: true},
|
||||
dark_mode: {type: String, default: "", converter: BoolToString},
|
||||
dismissals: {type: String, default: ""},
|
||||
latest_only: {type: Bool, default: false},
|
||||
listen: {type: Bool, default: false},
|
||||
local: {type: Bool, default: false},
|
||||
@ -151,7 +152,6 @@ struct ConfigPreferences
|
||||
unseen_only: {type: Bool, default: false},
|
||||
video_loop: {type: Bool, default: false},
|
||||
volume: {type: Int32, default: 100},
|
||||
welcome_dismissed: {type: Bool, default: false},
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -76,6 +76,7 @@ struct Preferences
|
||||
continue: {type: Bool, default: CONFIG.default_user_preferences.continue},
|
||||
continue_autoplay: {type: Bool, default: CONFIG.default_user_preferences.continue_autoplay},
|
||||
dark_mode: {type: String, default: CONFIG.default_user_preferences.dark_mode, converter: ConfigPreferences::BoolToString},
|
||||
dismissals: {type: String, default: CONFIG.default_user_preferences.dismissals},
|
||||
latest_only: {type: Bool, default: CONFIG.default_user_preferences.latest_only},
|
||||
listen: {type: Bool, default: CONFIG.default_user_preferences.listen},
|
||||
local: {type: Bool, default: CONFIG.default_user_preferences.local},
|
||||
@ -92,7 +93,6 @@ struct Preferences
|
||||
unseen_only: {type: Bool, default: CONFIG.default_user_preferences.unseen_only},
|
||||
video_loop: {type: Bool, default: CONFIG.default_user_preferences.video_loop},
|
||||
volume: {type: Int32, default: CONFIG.default_user_preferences.volume},
|
||||
welcome_dismissed: {type: Bool, default: CONFIG.default_user_preferences.welcome_dismissed},
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
<% if !(env.get? "user") && !env.get("preferences").as(Preferences).welcome_dismissed %>
|
||||
<% if !env.get("preferences").as(Preferences).dismissals.split(",").includes?("welcome") %>
|
||||
<div id="feed-menu" class="h-box pure-g hidden">
|
||||
<% else %>
|
||||
<div id="feed-menu" class="h-box pure-g">
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div class="welcome-outer" id="welcome-outer">
|
||||
<div class="infobox welcome-box">
|
||||
<a id="dismiss_welcome" class="pure-button" href="/dismiss_welcome?referer=<%= env.get?("current_page") %>">dismiss</a>
|
||||
<a id="dismiss_welcome" class="pure-button" href="/dismiss_info?name=welcome&referer=<%= env.get?("current_page") %>">dismiss</a>
|
||||
<h1>Welcome to Invidious</h1>
|
||||
<p>Invidious is a community developed Youtube-player, that respects your privacy. Features include:
|
||||
<ul>
|
||||
|
@ -9,7 +9,7 @@
|
||||
</title>
|
||||
<% end %>
|
||||
|
||||
<% if !(env.get? "user") && !env.get("preferences").as(Preferences).welcome_dismissed %>
|
||||
<% if !env.get("preferences").as(Preferences).dismissals.split(",").includes?("welcome") %>
|
||||
<%= rendered "components/welcome_message" %>
|
||||
<% end %>
|
||||
<%= rendered "components/feed_menu" %>
|
||||
|
Loading…
Reference in New Issue
Block a user