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:
girst 2019-09-11 23:46:11 +02:00
parent 3e12050b4c
commit 8d941740c8
7 changed files with 54 additions and 29 deletions

View File

@ -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();
});

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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">

View File

@ -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&amp;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>

View File

@ -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" %>