mirror of
https://github.com/iv-org/invidious.git
synced 2025-08-06 04:38:31 +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.href = 'javascript:void(0);';
|
||||||
|
|
||||||
dismiss_welcome.addEventListener('click', function () {
|
dismiss_welcome.addEventListener('click', function () {
|
||||||
var dark_mode = document.getElementById('dark_theme').media === 'none';
|
var url = '/dismiss_info?name=welcome&redirect=false';
|
||||||
|
|
||||||
var url = '/dismiss_welcome?redirect=false';
|
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
xhr.responseType = 'json';
|
xhr.responseType = 'json';
|
||||||
xhr.timeout = 10000;
|
xhr.timeout = 10000;
|
||||||
xhr.open('GET', url, true);
|
xhr.open('GET', url, true);
|
||||||
|
|
||||||
hide_welcome();
|
hide_welcome();
|
||||||
window.localStorage.setItem('welcome_dismissed', true);
|
|
||||||
|
|
||||||
xhr.send();
|
xhr.send();
|
||||||
});
|
});
|
||||||
|
@ -90,6 +90,10 @@ LOCALES = {
|
|||||||
"zh-CN" => load_locale("zh-CN"),
|
"zh-CN" => load_locale("zh-CN"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DISMISSALS = [
|
||||||
|
"welcome",
|
||||||
|
]
|
||||||
|
|
||||||
config = CONFIG
|
config = CONFIG
|
||||||
logger = Invidious::LogHandler.new
|
logger = Invidious::LogHandler.new
|
||||||
|
|
||||||
@ -1224,10 +1228,11 @@ post "/login" do |env|
|
|||||||
env.response.cookies << cookie
|
env.response.cookies << cookie
|
||||||
end
|
end
|
||||||
|
|
||||||
if env.request.cookies["PREFS"]?
|
preferences = env.get("preferences").as(Preferences)
|
||||||
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)
|
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 = env.request.cookies["PREFS"]
|
||||||
cookie.expires = Time.utc(1990, 1, 1)
|
cookie.expires = Time.utc(1990, 1, 1)
|
||||||
env.response.cookies << cookie
|
env.response.cookies << cookie
|
||||||
@ -1404,10 +1409,11 @@ post "/login" do |env|
|
|||||||
secure: secure, http_only: true)
|
secure: secure, http_only: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
if env.request.cookies["PREFS"]?
|
preferences = env.get("preferences").as(Preferences)
|
||||||
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)
|
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 = env.request.cookies["PREFS"]
|
||||||
cookie.expires = Time.utc(1990, 1, 1)
|
cookie.expires = Time.utc(1990, 1, 1)
|
||||||
env.response.cookies << cookie
|
env.response.cookies << cookie
|
||||||
@ -1699,32 +1705,54 @@ get "/toggle_theme" do |env|
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
get "/dismiss_welcome" do |env|
|
get "/dismiss_info" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
||||||
referer = get_referer(env, unroll: false)
|
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 = env.params.query["redirect"]?
|
||||||
redirect ||= "true"
|
redirect ||= "true"
|
||||||
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
|
PG_DB.exec("UPDATE users SET preferences = $1 WHERE email = $2", preferences, user.email)
|
||||||
secure = true
|
|
||||||
else
|
else
|
||||||
secure = false
|
preferences = env.get("preferences").as(Preferences)
|
||||||
end
|
|
||||||
|
|
||||||
if config.domain
|
if !preferences.dismissals.split(',').includes?(which)
|
||||||
env.response.cookies["PREFS"] = HTTP::Cookie.new(name: "PREFS", domain: "#{config.domain}", value: preferences, expires: Time.utc + 2.years,
|
preferences.dismissals = "#{preferences.dismissals},#{which}"
|
||||||
secure: secure, http_only: true)
|
end
|
||||||
else
|
|
||||||
env.response.cookies["PREFS"] = HTTP::Cookie.new(name: "PREFS", value: preferences, expires: Time.utc + 2.years,
|
preferences = preferences.to_json
|
||||||
secure: secure, http_only: true)
|
|
||||||
|
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
|
end
|
||||||
|
|
||||||
if redirect
|
if redirect
|
||||||
|
@ -135,6 +135,7 @@ struct ConfigPreferences
|
|||||||
continue: {type: Bool, default: false},
|
continue: {type: Bool, default: false},
|
||||||
continue_autoplay: {type: Bool, default: true},
|
continue_autoplay: {type: Bool, default: true},
|
||||||
dark_mode: {type: String, default: "", converter: BoolToString},
|
dark_mode: {type: String, default: "", converter: BoolToString},
|
||||||
|
dismissals: {type: String, default: ""},
|
||||||
latest_only: {type: Bool, default: false},
|
latest_only: {type: Bool, default: false},
|
||||||
listen: {type: Bool, default: false},
|
listen: {type: Bool, default: false},
|
||||||
local: {type: Bool, default: false},
|
local: {type: Bool, default: false},
|
||||||
@ -151,7 +152,6 @@ struct ConfigPreferences
|
|||||||
unseen_only: {type: Bool, default: false},
|
unseen_only: {type: Bool, default: false},
|
||||||
video_loop: {type: Bool, default: false},
|
video_loop: {type: Bool, default: false},
|
||||||
volume: {type: Int32, default: 100},
|
volume: {type: Int32, default: 100},
|
||||||
welcome_dismissed: {type: Bool, default: false},
|
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -76,6 +76,7 @@ struct Preferences
|
|||||||
continue: {type: Bool, default: CONFIG.default_user_preferences.continue},
|
continue: {type: Bool, default: CONFIG.default_user_preferences.continue},
|
||||||
continue_autoplay: {type: Bool, default: CONFIG.default_user_preferences.continue_autoplay},
|
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},
|
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},
|
latest_only: {type: Bool, default: CONFIG.default_user_preferences.latest_only},
|
||||||
listen: {type: Bool, default: CONFIG.default_user_preferences.listen},
|
listen: {type: Bool, default: CONFIG.default_user_preferences.listen},
|
||||||
local: {type: Bool, default: CONFIG.default_user_preferences.local},
|
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},
|
unseen_only: {type: Bool, default: CONFIG.default_user_preferences.unseen_only},
|
||||||
video_loop: {type: Bool, default: CONFIG.default_user_preferences.video_loop},
|
video_loop: {type: Bool, default: CONFIG.default_user_preferences.video_loop},
|
||||||
volume: {type: Int32, default: CONFIG.default_user_preferences.volume},
|
volume: {type: Int32, default: CONFIG.default_user_preferences.volume},
|
||||||
welcome_dismissed: {type: Bool, default: CONFIG.default_user_preferences.welcome_dismissed},
|
|
||||||
})
|
})
|
||||||
end
|
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">
|
<div id="feed-menu" class="h-box pure-g hidden">
|
||||||
<% else %>
|
<% else %>
|
||||||
<div id="feed-menu" class="h-box pure-g">
|
<div id="feed-menu" class="h-box pure-g">
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<div class="welcome-outer" id="welcome-outer">
|
<div class="welcome-outer" id="welcome-outer">
|
||||||
<div class="infobox welcome-box">
|
<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>
|
<h1>Welcome to Invidious</h1>
|
||||||
<p>Invidious is a community developed Youtube-player, that respects your privacy. Features include:
|
<p>Invidious is a community developed Youtube-player, that respects your privacy. Features include:
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
</title>
|
</title>
|
||||||
<% end %>
|
<% 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" %>
|
<%= rendered "components/welcome_message" %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= rendered "components/feed_menu" %>
|
<%= rendered "components/feed_menu" %>
|
||||||
|
Loading…
Reference in New Issue
Block a user