Deploy browser pre-alpha

This commit is contained in:
hz
2026-07-14 00:50:17 -05:00
parent 37218d9f45
commit f5c5d9f00e
17 changed files with 349 additions and 10 deletions
+11
View File
@@ -0,0 +1,11 @@
extends RefCounted
static func resolve(native_url: String, same_origin_path: String) -> String:
if not OS.has_feature("web"):
return native_url
var browser_origin: Variant = JavaScriptBridge.eval("window.location.origin", true)
var origin := str(browser_origin).strip_edges().rstrip("/")
if origin.is_empty() or not origin.begins_with("http"):
return native_url
return "%s/%s" % [origin, same_origin_path.trim_prefix("/")]
@@ -0,0 +1 @@
uid://c0m4jbetdkadj
+16 -5
View File
@@ -1,5 +1,6 @@
extends Node
const EndpointConfig := preload("res://scripts/autoload/api_endpoint_config.gd")
const DEFAULT_QUESTIONS_API_URL := "https://s3q.ranaze.com/api/questions/search"
const DEFAULT_QUESTION_ATTEMPT_API_URL := "https://s3q.ranaze.com/api/questions/attempts/first"
const DEFAULT_QUESTION_API_BASE_URL := "https://s3q.ranaze.com/api/questions"
@@ -44,11 +45,21 @@ var active_attempt_index := -1
var attempt_request_active := false
func _ready() -> void:
questions_api_url = str(ProjectSettings.get_setting("step3/questions_api_url", DEFAULT_QUESTIONS_API_URL))
question_attempt_api_url = str(ProjectSettings.get_setting("step3/question_attempt_api_url", DEFAULT_QUESTION_ATTEMPT_API_URL))
question_api_base_url = str(ProjectSettings.get_setting("step3/question_api_base_url", DEFAULT_QUESTION_API_BASE_URL))
ratings_api_url = str(ProjectSettings.get_setting("step3/ratings_api_url", DEFAULT_RATINGS_API_URL))
question_reports_api_url = str(ProjectSettings.get_setting("step3/question_reports_api_url", DEFAULT_QUESTION_REPORTS_API_URL))
questions_api_url = EndpointConfig.resolve(
str(ProjectSettings.get_setting("step3/questions_api_url", DEFAULT_QUESTIONS_API_URL)),
"/api/questions/search")
question_attempt_api_url = EndpointConfig.resolve(
str(ProjectSettings.get_setting("step3/question_attempt_api_url", DEFAULT_QUESTION_ATTEMPT_API_URL)),
"/api/questions/attempts/first")
question_api_base_url = EndpointConfig.resolve(
str(ProjectSettings.get_setting("step3/question_api_base_url", DEFAULT_QUESTION_API_BASE_URL)),
"/api/questions")
ratings_api_url = EndpointConfig.resolve(
str(ProjectSettings.get_setting("step3/ratings_api_url", DEFAULT_RATINGS_API_URL)),
"/api/ratings/me")
question_reports_api_url = EndpointConfig.resolve(
str(ProjectSettings.get_setting("step3/question_reports_api_url", DEFAULT_QUESTION_REPORTS_API_URL)),
"/api/question-reports")
request = HTTPRequest.new()
request.request_completed.connect(_on_api_questions_loaded)
add_child(request)
+9 -4
View File
@@ -1,8 +1,9 @@
extends VBoxContainer
const Style := preload("res://scripts/ui/ui_style.gd")
const AUTH_LOGIN_URL := "https://pauth.ranaze.com/api/Auth/login"
const AUTH_REGISTER_URL := "https://pauth.ranaze.com/api/Auth/register"
const EndpointConfig := preload("res://scripts/autoload/api_endpoint_config.gd")
const DEFAULT_AUTH_LOGIN_URL := "https://pauth.ranaze.com/api/Auth/login"
const DEFAULT_AUTH_REGISTER_URL := "https://pauth.ranaze.com/api/Auth/register"
var main: Control
var auth_panel: PanelContainer
@@ -25,9 +26,13 @@ var register_request: HTTPRequest
var auth_mode := "login"
var automatic_login_pending := false
var login_attempt_username := ""
var auth_login_url := DEFAULT_AUTH_LOGIN_URL
var auth_register_url := DEFAULT_AUTH_REGISTER_URL
func _ready() -> void:
auth_login_url = EndpointConfig.resolve(DEFAULT_AUTH_LOGIN_URL, "/api/Auth/login")
auth_register_url = EndpointConfig.resolve(DEFAULT_AUTH_REGISTER_URL, "/api/Auth/register")
set_anchors_preset(Control.PRESET_FULL_RECT)
add_theme_constant_override("separation", 18)
@@ -190,7 +195,7 @@ func _send_login(username: String, password: String, is_automatic: bool) -> void
success_label.text = "Account created. Signing you in..."
var payload := {"username": username, "password": password}
var headers := PackedStringArray(["Content-Type: application/json"])
var request_error := login_request.request(AUTH_LOGIN_URL, headers, HTTPClient.METHOD_POST, JSON.stringify(payload))
var request_error := login_request.request(auth_login_url, headers, HTTPClient.METHOD_POST, JSON.stringify(payload))
if request_error != OK:
_set_busy(false)
login_button.text = "Log In"
@@ -254,7 +259,7 @@ func _on_register_pressed() -> void:
_clear_messages()
var payload := {"username": username, "email": email, "password": password}
var headers := PackedStringArray(["Content-Type: application/json"])
var request_error := register_request.request(AUTH_REGISTER_URL, headers, HTTPClient.METHOD_POST, JSON.stringify(payload))
var request_error := register_request.request(auth_register_url, headers, HTTPClient.METHOD_POST, JSON.stringify(payload))
if request_error != OK:
_set_busy(false)
register_button.text = "Create Account"
+12
View File
@@ -14,9 +14,21 @@ var current_screen_name := ""
func _ready() -> void:
Style.apply_app_theme(self)
_build_ui()
resized.connect(_update_responsive_layout)
_update_responsive_layout()
show_screen("selection" if AuthState.is_logged_in else "login", "exam")
func _update_responsive_layout() -> void:
if header_stats != null:
header_stats.visible = size.x >= 900.0
if app_menu != null:
app_menu.custom_minimum_size.x = minf(340.0, maxf(280.0, size.x - 32.0))
if app_menu.visible:
app_menu.size = app_menu.custom_minimum_size
app_menu.position = (get_viewport_rect().size - app_menu.size) * 0.5
func show_screen(screen_name: String, payload: Variant = null) -> void:
_close_app_menu()
for child in $Root/Screens.get_children():
+14
View File
@@ -357,6 +357,20 @@ func _ready() -> void:
_build_labs_modal()
_build_report_modal()
resized.connect(_fit_modal_panels)
_fit_modal_panels()
func _fit_modal_panels() -> void:
var available := get_viewport_rect().size - Vector2(32, 32)
if report_panel != null:
report_panel.custom_minimum_size = Vector2(
minf(700.0, maxf(320.0, available.x)),
minf(600.0, maxf(560.0, available.y)))
if labs_panel != null:
labs_panel.custom_minimum_size = Vector2(
minf(760.0, maxf(320.0, available.x)),
minf(430.0, maxf(360.0, available.y)))
func on_show(_payload: Variant = null) -> void: